79 lines
2.9 KiB
JavaScript
79 lines
2.9 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const path_1 = __importDefault(require("path"));
|
|
const Xcodeproj_1 = require("../ios/utils/Xcodeproj");
|
|
const compiler_plugins_1 = require("./compiler-plugins");
|
|
/**
|
|
*
|
|
* @param projectRoot
|
|
* @param config
|
|
*/
|
|
async function compileModsAsync(config, props) {
|
|
config = compiler_plugins_1.withBaseMods(config);
|
|
return await evalModsAsync(config, props);
|
|
}
|
|
exports.compileModsAsync = compileModsAsync;
|
|
function sortMods(commands, order) {
|
|
const allKeys = commands.map(([key]) => key);
|
|
const completeOrder = [...new Set([...order, ...allKeys])];
|
|
const sorted = [];
|
|
while (completeOrder.length) {
|
|
const group = completeOrder.shift();
|
|
const commandSet = commands.find(([key]) => key === group);
|
|
if (commandSet) {
|
|
sorted.push(commandSet);
|
|
}
|
|
}
|
|
return sorted;
|
|
}
|
|
const orders = {
|
|
ios: [
|
|
// dangerous runs first
|
|
'dangerous',
|
|
// run the XcodeProject mod second because many plugins attempt to read from it.
|
|
'xcodeproj',
|
|
],
|
|
android: ['dangerous'],
|
|
};
|
|
/**
|
|
* A generic plugin compiler.
|
|
*
|
|
* @param config
|
|
*/
|
|
async function evalModsAsync(config, { projectRoot, platforms }) {
|
|
var _a;
|
|
for (const [platformName, platform] of Object.entries((_a = config.mods) !== null && _a !== void 0 ? _a : {})) {
|
|
if (platforms && !platforms.includes(platformName)) {
|
|
continue;
|
|
}
|
|
let entries = Object.entries(platform);
|
|
if (entries.length) {
|
|
// Move dangerous item to the first position if it exists, this ensures that all dangerous code runs first.
|
|
entries = sortMods(entries, orders[platformName]);
|
|
const platformProjectRoot = path_1.default.join(projectRoot, platformName);
|
|
const projectName = platformName === 'ios' ? Xcodeproj_1.getHackyProjectName(projectRoot, config) : undefined;
|
|
for (const [modName, mod] of entries) {
|
|
const modRequest = {
|
|
projectRoot,
|
|
projectName,
|
|
platformProjectRoot,
|
|
platform: platformName,
|
|
modName,
|
|
};
|
|
const results = await mod(Object.assign(Object.assign({}, config), { modResults: null, modRequest }));
|
|
// Sanity check to help locate non compliant mods.
|
|
config = compiler_plugins_1.resolveModResults(results, platformName, modName);
|
|
// @ts-ignore: data is added for modifications
|
|
delete config.modResults;
|
|
// @ts-ignore: info is added for modifications
|
|
delete config.modRequest;
|
|
}
|
|
}
|
|
}
|
|
return config;
|
|
}
|
|
exports.evalModsAsync = evalModsAsync;
|
|
//# sourceMappingURL=mod-compiler.js.map
|