You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
3.9 KiB
147 lines
3.9 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.assertModResults = assertModResults;
|
|
exports.createBaseMod = createBaseMod;
|
|
exports.createPlatformBaseMod = createPlatformBaseMod;
|
|
exports.provider = provider;
|
|
exports.withGeneratedBaseMods = withGeneratedBaseMods;
|
|
|
|
function _debug() {
|
|
const data = _interopRequireDefault(require("debug"));
|
|
|
|
_debug = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _withMod() {
|
|
const data = require("./withMod");
|
|
|
|
_withMod = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
const debug = (0, _debug().default)('expo:config-plugins:base-mods');
|
|
|
|
function createBaseMod({
|
|
methodName,
|
|
platform,
|
|
modName,
|
|
getFilePath,
|
|
read,
|
|
write,
|
|
isIntrospective
|
|
}) {
|
|
const withUnknown = (config, _props) => {
|
|
var _props$skipEmptyMod, _props$saveToInternal;
|
|
|
|
const props = _props || {};
|
|
return (0, _withMod().withBaseMod)(config, {
|
|
platform,
|
|
mod: modName,
|
|
skipEmptyMod: (_props$skipEmptyMod = props.skipEmptyMod) !== null && _props$skipEmptyMod !== void 0 ? _props$skipEmptyMod : true,
|
|
saveToInternal: (_props$saveToInternal = props.saveToInternal) !== null && _props$saveToInternal !== void 0 ? _props$saveToInternal : false,
|
|
isProvider: true,
|
|
isIntrospective,
|
|
|
|
async action({
|
|
modRequest: {
|
|
nextMod,
|
|
...modRequest
|
|
},
|
|
...config
|
|
}) {
|
|
try {
|
|
let results = { ...config,
|
|
modRequest
|
|
};
|
|
const filePath = await getFilePath(results, props);
|
|
debug(`mods.${platform}.${modName}: file path: ${filePath || '[skipped]'}`);
|
|
const modResults = await read(filePath, results, props);
|
|
results = await nextMod({ ...results,
|
|
modResults,
|
|
modRequest
|
|
});
|
|
assertModResults(results, modRequest.platform, modRequest.modName);
|
|
await write(filePath, results, props);
|
|
return results;
|
|
} catch (error) {
|
|
error.message = `[${platform}.${modName}]: ${methodName}: ${error.message}`;
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
});
|
|
};
|
|
|
|
if (methodName) {
|
|
Object.defineProperty(withUnknown, 'name', {
|
|
value: methodName
|
|
});
|
|
}
|
|
|
|
return withUnknown;
|
|
}
|
|
|
|
function assertModResults(results, platformName, modName) {
|
|
// If the results came from a mod, they'd be in the form of [config, data].
|
|
// Ensure the results are an array and omit the data since it should've been written by a data provider plugin.
|
|
const ensuredResults = results; // Sanity check to help locate non compliant mods.
|
|
|
|
if (!ensuredResults || typeof ensuredResults !== 'object' || !(ensuredResults !== null && ensuredResults !== void 0 && ensuredResults.mods)) {
|
|
throw new Error(`Mod \`mods.${platformName}.${modName}\` evaluated to an object that is not a valid project config. Instead got: ${JSON.stringify(ensuredResults)}`);
|
|
}
|
|
|
|
return ensuredResults;
|
|
}
|
|
|
|
function upperFirst(name) {
|
|
return name.charAt(0).toUpperCase() + name.slice(1);
|
|
}
|
|
|
|
function createPlatformBaseMod({
|
|
modName,
|
|
...props
|
|
}) {
|
|
// Generate the function name to ensure it's uniform and also to improve stack traces.
|
|
const methodName = `with${upperFirst(props.platform)}${upperFirst(modName)}BaseMod`;
|
|
return createBaseMod({
|
|
methodName,
|
|
modName,
|
|
...props
|
|
});
|
|
}
|
|
/** A TS wrapper for creating provides */
|
|
|
|
|
|
function provider(props) {
|
|
return props;
|
|
}
|
|
/** Plugin to create and append base mods from file providers */
|
|
|
|
|
|
function withGeneratedBaseMods(config, {
|
|
platform,
|
|
providers,
|
|
...props
|
|
}) {
|
|
return Object.entries(providers).reduce((config, [modName, value]) => {
|
|
const baseMod = createPlatformBaseMod({
|
|
platform,
|
|
modName,
|
|
...value
|
|
});
|
|
return baseMod(config, props);
|
|
}, config);
|
|
}
|
|
//# sourceMappingURL=createBaseMod.js.map
|