1082815dcSEvan Baconimport { ConfigError } from './Errors'; 2082815dcSEvan Bacon 3082815dcSEvan Baconexport function serializeAndEvaluate(val: any): any { 4082815dcSEvan Bacon if (['undefined', 'string', 'boolean', 'number', 'bigint'].includes(typeof val)) { 5082815dcSEvan Bacon return val; 6082815dcSEvan Bacon } else if (typeof val === 'function') { 7082815dcSEvan Bacon // TODO: Bacon: Should we support async methods? 8082815dcSEvan Bacon return val(); 9082815dcSEvan Bacon } else if (Array.isArray(val)) { 10082815dcSEvan Bacon return val.map(serializeAndEvaluate); 11082815dcSEvan Bacon } else if (typeof val === 'object') { 12082815dcSEvan Bacon const output: { [key: string]: any } = {}; 13082815dcSEvan Bacon for (const property in val) { 14082815dcSEvan Bacon if (val.hasOwnProperty(property)) { 15082815dcSEvan Bacon output[property] = serializeAndEvaluate(val[property]); 16082815dcSEvan Bacon } 17082815dcSEvan Bacon } 18082815dcSEvan Bacon return output; 19082815dcSEvan Bacon } 20082815dcSEvan Bacon // symbol 21082815dcSEvan Bacon throw new ConfigError(`Expo config doesn't support \`Symbols\`: ${val}`, 'INVALID_CONFIG'); 22082815dcSEvan Bacon} 23082815dcSEvan Bacon 24082815dcSEvan Baconexport function serializeSkippingMods(val: any): any { 25082815dcSEvan Bacon if (typeof val === 'object' && !Array.isArray(val)) { 26082815dcSEvan Bacon const output: { [key: string]: any } = {}; 27082815dcSEvan Bacon for (const property in val) { 28082815dcSEvan Bacon if (val.hasOwnProperty(property)) { 29082815dcSEvan Bacon if (property === 'mods' || property === 'plugins') { 30082815dcSEvan Bacon // Don't serialize mods or plugins 31082815dcSEvan Bacon output[property] = val[property]; 32082815dcSEvan Bacon } else { 33082815dcSEvan Bacon output[property] = serializeAndEvaluate(val[property]); 34082815dcSEvan Bacon } 35082815dcSEvan Bacon } 36082815dcSEvan Bacon } 37082815dcSEvan Bacon return output; 38082815dcSEvan Bacon } 39082815dcSEvan Bacon return serializeAndEvaluate(val); 40082815dcSEvan Bacon} 41082815dcSEvan Bacon 42082815dcSEvan Baconfunction serializeAndEvaluatePlugin(val: any): any { 43082815dcSEvan Bacon if (['undefined', 'string', 'boolean', 'number', 'bigint'].includes(typeof val)) { 44082815dcSEvan Bacon return val; 45082815dcSEvan Bacon } else if (typeof val === 'function') { 46*feefc930SKudo Chien return val.name || 'withAnonymous'; 47082815dcSEvan Bacon } else if (Array.isArray(val)) { 48082815dcSEvan Bacon return val.map(serializeAndEvaluatePlugin); 49082815dcSEvan Bacon } else if (typeof val === 'object') { 50082815dcSEvan Bacon const output: { [key: string]: any } = {}; 51082815dcSEvan Bacon for (const property in val) { 52082815dcSEvan Bacon if (val.hasOwnProperty(property)) { 53082815dcSEvan Bacon output[property] = serializeAndEvaluatePlugin(val[property]); 54082815dcSEvan Bacon } 55082815dcSEvan Bacon } 56082815dcSEvan Bacon return output; 57082815dcSEvan Bacon } 58082815dcSEvan Bacon // symbol 59082815dcSEvan Bacon throw new ConfigError(`Expo config doesn't support \`Symbols\`: ${val}`, 'INVALID_CONFIG'); 60082815dcSEvan Bacon} 61082815dcSEvan Bacon 62082815dcSEvan Baconexport function serializeAfterStaticPlugins(val: any): any { 63082815dcSEvan Bacon if (typeof val === 'object' && !Array.isArray(val)) { 64082815dcSEvan Bacon const output: { [key: string]: any } = {}; 65082815dcSEvan Bacon for (const property in val) { 66082815dcSEvan Bacon if (val.hasOwnProperty(property)) { 67082815dcSEvan Bacon if (property === 'mods') { 68082815dcSEvan Bacon // Don't serialize mods 69082815dcSEvan Bacon output[property] = val[property]; 70082815dcSEvan Bacon } else if (property === 'plugins' && Array.isArray(val[property])) { 71082815dcSEvan Bacon // Serialize the mods by removing any config plugins 72082815dcSEvan Bacon output[property] = val[property].map(serializeAndEvaluatePlugin); 73082815dcSEvan Bacon } else { 74082815dcSEvan Bacon output[property] = serializeAndEvaluate(val[property]); 75082815dcSEvan Bacon } 76082815dcSEvan Bacon } 77082815dcSEvan Bacon } 78082815dcSEvan Bacon return output; 79082815dcSEvan Bacon } 80082815dcSEvan Bacon return serializeAndEvaluate(val); 81082815dcSEvan Bacon} 82