1"use strict"; 2 3Object.defineProperty(exports, "__esModule", { 4 value: true 5}); 6exports.assertModResults = assertModResults; 7exports.createBaseMod = createBaseMod; 8exports.createPlatformBaseMod = createPlatformBaseMod; 9exports.provider = provider; 10exports.withGeneratedBaseMods = withGeneratedBaseMods; 11function _debug() { 12 const data = _interopRequireDefault(require("debug")); 13 _debug = function () { 14 return data; 15 }; 16 return data; 17} 18function _withMod() { 19 const data = require("./withMod"); 20 _withMod = function () { 21 return data; 22 }; 23 return data; 24} 25function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 26const debug = (0, _debug().default)('expo:config-plugins:base-mods'); 27function createBaseMod({ 28 methodName, 29 platform, 30 modName, 31 getFilePath, 32 read, 33 write, 34 isIntrospective 35}) { 36 const withUnknown = (config, _props) => { 37 var _props$skipEmptyMod, _props$saveToInternal; 38 const props = _props || {}; 39 return (0, _withMod().withBaseMod)(config, { 40 platform, 41 mod: modName, 42 skipEmptyMod: (_props$skipEmptyMod = props.skipEmptyMod) !== null && _props$skipEmptyMod !== void 0 ? _props$skipEmptyMod : true, 43 saveToInternal: (_props$saveToInternal = props.saveToInternal) !== null && _props$saveToInternal !== void 0 ? _props$saveToInternal : false, 44 isProvider: true, 45 isIntrospective, 46 async action({ 47 modRequest: { 48 nextMod, 49 ...modRequest 50 }, 51 ...config 52 }) { 53 try { 54 let results = { 55 ...config, 56 modRequest 57 }; 58 const filePath = await getFilePath(results, props); 59 debug(`mods.${platform}.${modName}: file path: ${filePath || '[skipped]'}`); 60 const modResults = await read(filePath, results, props); 61 results = await nextMod({ 62 ...results, 63 modResults, 64 modRequest 65 }); 66 assertModResults(results, modRequest.platform, modRequest.modName); 67 await write(filePath, results, props); 68 return results; 69 } catch (error) { 70 error.message = `[${platform}.${modName}]: ${methodName}: ${error.message}`; 71 throw error; 72 } 73 } 74 }); 75 }; 76 if (methodName) { 77 Object.defineProperty(withUnknown, 'name', { 78 value: methodName 79 }); 80 } 81 return withUnknown; 82} 83function assertModResults(results, platformName, modName) { 84 // If the results came from a mod, they'd be in the form of [config, data]. 85 // Ensure the results are an array and omit the data since it should've been written by a data provider plugin. 86 const ensuredResults = results; 87 88 // Sanity check to help locate non compliant mods. 89 if (!ensuredResults || typeof ensuredResults !== 'object' || !(ensuredResults !== null && ensuredResults !== void 0 && ensuredResults.mods)) { 90 throw new Error(`Mod \`mods.${platformName}.${modName}\` evaluated to an object that is not a valid project config. Instead got: ${JSON.stringify(ensuredResults)}`); 91 } 92 return ensuredResults; 93} 94function upperFirst(name) { 95 return name.charAt(0).toUpperCase() + name.slice(1); 96} 97function createPlatformBaseMod({ 98 modName, 99 ...props 100}) { 101 // Generate the function name to ensure it's uniform and also to improve stack traces. 102 const methodName = `with${upperFirst(props.platform)}${upperFirst(modName)}BaseMod`; 103 return createBaseMod({ 104 methodName, 105 modName, 106 ...props 107 }); 108} 109 110/** A TS wrapper for creating provides */ 111function provider(props) { 112 return props; 113} 114 115/** Plugin to create and append base mods from file providers */ 116function withGeneratedBaseMods(config, { 117 platform, 118 providers, 119 ...props 120}) { 121 return Object.entries(providers).reduce((config, [modName, value]) => { 122 const baseMod = createPlatformBaseMod({ 123 platform, 124 modName, 125 ...value 126 }); 127 return baseMod(config, props); 128 }, config); 129} 130//# sourceMappingURL=createBaseMod.js.map