1082815dcSEvan Bacon"use strict"; 2082815dcSEvan Bacon 3082815dcSEvan BaconObject.defineProperty(exports, "__esModule", { 4082815dcSEvan Bacon value: true 5082815dcSEvan Bacon}); 6082815dcSEvan Baconexports.assertModResults = assertModResults; 7082815dcSEvan Baconexports.createBaseMod = createBaseMod; 8082815dcSEvan Baconexports.createPlatformBaseMod = createPlatformBaseMod; 9082815dcSEvan Baconexports.provider = provider; 10082815dcSEvan Baconexports.withGeneratedBaseMods = withGeneratedBaseMods; 11082815dcSEvan Baconfunction _debug() { 12082815dcSEvan Bacon const data = _interopRequireDefault(require("debug")); 13082815dcSEvan Bacon _debug = function () { 14082815dcSEvan Bacon return data; 15082815dcSEvan Bacon }; 16082815dcSEvan Bacon return data; 17082815dcSEvan Bacon} 18082815dcSEvan Baconfunction _withMod() { 19082815dcSEvan Bacon const data = require("./withMod"); 20082815dcSEvan Bacon _withMod = function () { 21082815dcSEvan Bacon return data; 22082815dcSEvan Bacon }; 23082815dcSEvan Bacon return data; 24082815dcSEvan Bacon} 25082815dcSEvan Baconfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 26082815dcSEvan Baconconst debug = (0, _debug().default)('expo:config-plugins:base-mods'); 27082815dcSEvan Baconfunction createBaseMod({ 28082815dcSEvan Bacon methodName, 29082815dcSEvan Bacon platform, 30082815dcSEvan Bacon modName, 31082815dcSEvan Bacon getFilePath, 32082815dcSEvan Bacon read, 33082815dcSEvan Bacon write, 34082815dcSEvan Bacon isIntrospective 35082815dcSEvan Bacon}) { 36082815dcSEvan Bacon const withUnknown = (config, _props) => { 37082815dcSEvan Bacon var _props$skipEmptyMod, _props$saveToInternal; 38082815dcSEvan Bacon const props = _props || {}; 39082815dcSEvan Bacon return (0, _withMod().withBaseMod)(config, { 40082815dcSEvan Bacon platform, 41082815dcSEvan Bacon mod: modName, 42082815dcSEvan Bacon skipEmptyMod: (_props$skipEmptyMod = props.skipEmptyMod) !== null && _props$skipEmptyMod !== void 0 ? _props$skipEmptyMod : true, 43082815dcSEvan Bacon saveToInternal: (_props$saveToInternal = props.saveToInternal) !== null && _props$saveToInternal !== void 0 ? _props$saveToInternal : false, 44082815dcSEvan Bacon isProvider: true, 45082815dcSEvan Bacon isIntrospective, 46082815dcSEvan Bacon async action({ 47082815dcSEvan Bacon modRequest: { 48082815dcSEvan Bacon nextMod, 49082815dcSEvan Bacon ...modRequest 50082815dcSEvan Bacon }, 51082815dcSEvan Bacon ...config 52082815dcSEvan Bacon }) { 53082815dcSEvan Bacon try { 54*ee216927STomasz Sapeta let results = { 55*ee216927STomasz Sapeta ...config, 56082815dcSEvan Bacon modRequest 57082815dcSEvan Bacon }; 58082815dcSEvan Bacon const filePath = await getFilePath(results, props); 59082815dcSEvan Bacon debug(`mods.${platform}.${modName}: file path: ${filePath || '[skipped]'}`); 60082815dcSEvan Bacon const modResults = await read(filePath, results, props); 61*ee216927STomasz Sapeta results = await nextMod({ 62*ee216927STomasz Sapeta ...results, 63082815dcSEvan Bacon modResults, 64082815dcSEvan Bacon modRequest 65082815dcSEvan Bacon }); 66082815dcSEvan Bacon assertModResults(results, modRequest.platform, modRequest.modName); 67082815dcSEvan Bacon await write(filePath, results, props); 68082815dcSEvan Bacon return results; 69082815dcSEvan Bacon } catch (error) { 70082815dcSEvan Bacon error.message = `[${platform}.${modName}]: ${methodName}: ${error.message}`; 71082815dcSEvan Bacon throw error; 72082815dcSEvan Bacon } 73082815dcSEvan Bacon } 74082815dcSEvan Bacon }); 75082815dcSEvan Bacon }; 76082815dcSEvan Bacon if (methodName) { 77082815dcSEvan Bacon Object.defineProperty(withUnknown, 'name', { 78082815dcSEvan Bacon value: methodName 79082815dcSEvan Bacon }); 80082815dcSEvan Bacon } 81082815dcSEvan Bacon return withUnknown; 82082815dcSEvan Bacon} 83082815dcSEvan Baconfunction assertModResults(results, platformName, modName) { 84082815dcSEvan Bacon // If the results came from a mod, they'd be in the form of [config, data]. 85082815dcSEvan Bacon // Ensure the results are an array and omit the data since it should've been written by a data provider plugin. 86*ee216927STomasz Sapeta const ensuredResults = results; 87082815dcSEvan Bacon 88*ee216927STomasz Sapeta // Sanity check to help locate non compliant mods. 89082815dcSEvan Bacon if (!ensuredResults || typeof ensuredResults !== 'object' || !(ensuredResults !== null && ensuredResults !== void 0 && ensuredResults.mods)) { 90082815dcSEvan Bacon throw new Error(`Mod \`mods.${platformName}.${modName}\` evaluated to an object that is not a valid project config. Instead got: ${JSON.stringify(ensuredResults)}`); 91082815dcSEvan Bacon } 92082815dcSEvan Bacon return ensuredResults; 93082815dcSEvan Bacon} 94082815dcSEvan Baconfunction upperFirst(name) { 95082815dcSEvan Bacon return name.charAt(0).toUpperCase() + name.slice(1); 96082815dcSEvan Bacon} 97082815dcSEvan Baconfunction createPlatformBaseMod({ 98082815dcSEvan Bacon modName, 99082815dcSEvan Bacon ...props 100082815dcSEvan Bacon}) { 101082815dcSEvan Bacon // Generate the function name to ensure it's uniform and also to improve stack traces. 102082815dcSEvan Bacon const methodName = `with${upperFirst(props.platform)}${upperFirst(modName)}BaseMod`; 103082815dcSEvan Bacon return createBaseMod({ 104082815dcSEvan Bacon methodName, 105082815dcSEvan Bacon modName, 106082815dcSEvan Bacon ...props 107082815dcSEvan Bacon }); 108082815dcSEvan Bacon} 109*ee216927STomasz Sapeta 110082815dcSEvan Bacon/** A TS wrapper for creating provides */ 111082815dcSEvan Baconfunction provider(props) { 112082815dcSEvan Bacon return props; 113082815dcSEvan Bacon} 114*ee216927STomasz Sapeta 115082815dcSEvan Bacon/** Plugin to create and append base mods from file providers */ 116082815dcSEvan Baconfunction withGeneratedBaseMods(config, { 117082815dcSEvan Bacon platform, 118082815dcSEvan Bacon providers, 119082815dcSEvan Bacon ...props 120082815dcSEvan Bacon}) { 121082815dcSEvan Bacon return Object.entries(providers).reduce((config, [modName, value]) => { 122082815dcSEvan Bacon const baseMod = createPlatformBaseMod({ 123082815dcSEvan Bacon platform, 124082815dcSEvan Bacon modName, 125082815dcSEvan Bacon ...value 126082815dcSEvan Bacon }); 127082815dcSEvan Bacon return baseMod(config, props); 128082815dcSEvan Bacon }, config); 129082815dcSEvan Bacon} 130082815dcSEvan Bacon//# sourceMappingURL=createBaseMod.js.map