This repository has been archived on 2022-03-12. You can view files and clone it, but cannot push or open issues or pull requests.
2021-04-02 02:24:13 +03:00

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