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