{"version":3,"sources":["../src/Config.ts"],"names":["reduceExpoObject","config","undefined","mods","expo","getSupportedPlatforms","projectRoot","platforms","resolveFrom","silent","push","getConfig","options","paths","getConfigFilePaths","rawStaticConfig","staticConfigPath","rootConfig","staticConfig","packageJson","packageJsonPath","getPackageJsonAndPath","fillAndReturnConfig","dynamicConfigObjectType","configWithDefaultValues","ensureConfigHasDefaultValues","exp","pkg","skipSDKVersionRequirement","dynamicConfigPath","isModdedConfig","skipPlugins","isPublicConfig","_internal","hooks","ios","android","currentFullName","originalFullName","getContextConfig","exportedObjectType","rawDynamicConfig","dynamicConfig","getPackageJson","JsonFile","read","readConfigJson","skipValidation","getConfigName","path","basename","outputRootConfig","ConfigError","resolve","APP_JSON_EXAMPLE","customPaths","getCustomConfigFilePaths","getDynamicConfigFilePath","getStaticConfigFilePath","customConfigPaths","isDynamicFilePath","fileName","configPath","join","fs","existsSync","findConfigFile","configName","configNamespace","configFilename","readExpRcAsync","expRcPath","readAsync","json5","cantReadFileDefault","resetCustomConfigPaths","key","Object","keys","setCustomConfigPath","modifyConfigAsync","modifications","readOptions","writeOptions","type","message","relative","outputConfig","dryRun","writeAsync","JSON","stringify","name","slug","sdkVersion","pkgName","pkgVersion","version","pkgWithDefaults","toLowerCase","description","expWithDefaults","error","writeConfigJsonAsync","console","log","DEFAULT_BUILD_PATH","getWebOutputPath","process","env","WEBPACK_BUILD_OUTPUT_PATH","web","build","output","getNameFromConfig","appManifest","appName","displayName","webName","getDefaultTarget","semver","lt","isBareWorkflowProject","dependencies","expokit","xcodeprojFiles","absolute","cwd","length","gradleFiles","filePath","match","getProjectConfigDescription","getProjectConfigDescriptionWithPaths","projectConfig","relativeDynamicConfigPath"],"mappings":"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","sourcesContent":["import { ModConfig } from '@expo/config-plugins';\nimport JsonFile, { JSONObject } from '@expo/json-file';\nimport fs from 'fs';\nimport { sync as globSync } from 'glob';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\nimport semver from 'semver';\nimport slugify from 'slugify';\n\nimport {\n AppJSONConfig,\n ConfigFilePaths,\n ExpoConfig,\n ExpRc,\n GetConfigOptions,\n PackageJSONConfig,\n Platform,\n ProjectConfig,\n ProjectTarget,\n WriteConfigOptions,\n} from './Config.types';\nimport { ConfigError } from './Errors';\nimport { getExpoSDKVersion } from './Project';\nimport { getDynamicConfig, getStaticConfig } from './getConfig';\nimport { getFullName } from './getFullName';\nimport { withConfigPlugins } from './plugins/withConfigPlugins';\nimport { withInternal } from './plugins/withInternal';\nimport { getRootPackageJsonPath } from './resolvePackageJson';\n\ntype SplitConfigs = { expo: ExpoConfig; mods: ModConfig };\n\n/**\n * If a config has an `expo` object then that will be used as the config.\n * This method reduces out other top level values if an `expo` object exists.\n *\n * @param config Input config object to reduce\n */\nfunction reduceExpoObject(config?: any): SplitConfigs {\n if (!config) return config === undefined ? null : config;\n\n const { mods, ...expo } = config.expo ?? config;\n\n return {\n expo,\n mods,\n };\n}\n\n/**\n * Get all platforms that a project is currently capable of running.\n *\n * @param projectRoot\n * @param exp\n */\nfunction getSupportedPlatforms(projectRoot: string): Platform[] {\n const platforms: Platform[] = [];\n if (resolveFrom.silent(projectRoot, 'react-native')) {\n platforms.push('ios', 'android');\n }\n if (resolveFrom.silent(projectRoot, 'react-native-web')) {\n platforms.push('web');\n }\n return platforms;\n}\n\n/**\n * Evaluate the config for an Expo project.\n * If a function is exported from the `app.config.js` then a partial config will be passed as an argument.\n * The partial config is composed from any existing app.json, and certain fields from the `package.json` like name and description.\n *\n * If options.isPublicConfig is true, the Expo config will include only public-facing options (omitting private keys).\n * The resulting config should be suitable for hosting or embedding in a publicly readable location.\n *\n * **Example**\n * ```js\n * module.exports = function({ config }) {\n * // mutate the config before returning it.\n * config.slug = 'new slug'\n * return { expo: config };\n * }\n * ```\n *\n * **Supports**\n * - `app.config.ts`\n * - `app.config.js`\n * - `app.config.json`\n * - `app.json`\n *\n * @param projectRoot the root folder containing all of your application code\n * @param options enforce criteria for a project config\n */\nexport function getConfig(projectRoot: string, options: GetConfigOptions = {}): ProjectConfig {\n const paths = getConfigFilePaths(projectRoot);\n\n const rawStaticConfig = paths.staticConfigPath ? getStaticConfig(paths.staticConfigPath) : null;\n // For legacy reasons, always return an object.\n const rootConfig = (rawStaticConfig || {}) as AppJSONConfig;\n const staticConfig = reduceExpoObject(rawStaticConfig) || {};\n\n // Can only change the package.json location if an app.json or app.config.json exists\n const [packageJson, packageJsonPath] = getPackageJsonAndPath(projectRoot);\n\n function fillAndReturnConfig(config: SplitConfigs, dynamicConfigObjectType: string | null) {\n const configWithDefaultValues = {\n ...ensureConfigHasDefaultValues({\n projectRoot,\n exp: config.expo,\n pkg: packageJson,\n skipSDKVersionRequirement: options.skipSDKVersionRequirement,\n paths,\n packageJsonPath,\n }),\n mods: config.mods,\n dynamicConfigObjectType,\n rootConfig,\n dynamicConfigPath: paths.dynamicConfigPath,\n staticConfigPath: paths.staticConfigPath,\n };\n\n if (options.isModdedConfig) {\n // @ts-ignore: Add the mods back to the object.\n configWithDefaultValues.exp.mods = config.mods ?? null;\n }\n\n // Apply static json plugins, should be done after _internal\n configWithDefaultValues.exp = withConfigPlugins(\n configWithDefaultValues.exp,\n !!options.skipPlugins\n );\n\n if (!options.isModdedConfig) {\n // @ts-ignore: Delete mods added by static plugins when they won't have a chance to be evaluated\n delete configWithDefaultValues.exp.mods;\n }\n\n if (options.isPublicConfig) {\n // Remove internal values with references to user's file paths from the public config.\n delete configWithDefaultValues.exp._internal;\n\n if (configWithDefaultValues.exp.hooks) {\n delete configWithDefaultValues.exp.hooks;\n }\n if (configWithDefaultValues.exp.ios?.config) {\n delete configWithDefaultValues.exp.ios.config;\n }\n if (configWithDefaultValues.exp.android?.config) {\n delete configWithDefaultValues.exp.android.config;\n }\n\n // These value will be overwritten when the manifest is being served from the host (i.e. not completely accurate).\n // @ts-ignore: currentFullName not on type yet.\n configWithDefaultValues.exp.currentFullName = getFullName(configWithDefaultValues.exp);\n // @ts-ignore: originalFullName not on type yet.\n configWithDefaultValues.exp.originalFullName = getFullName(configWithDefaultValues.exp);\n }\n\n return configWithDefaultValues;\n }\n\n // Fill in the static config\n function getContextConfig(config: SplitConfigs) {\n return ensureConfigHasDefaultValues({\n projectRoot,\n exp: config.expo,\n pkg: packageJson,\n skipSDKVersionRequirement: true,\n paths,\n packageJsonPath,\n }).exp;\n }\n\n if (paths.dynamicConfigPath) {\n // No app.config.json or app.json but app.config.js\n const { exportedObjectType, config: rawDynamicConfig } = getDynamicConfig(\n paths.dynamicConfigPath,\n {\n projectRoot,\n staticConfigPath: paths.staticConfigPath,\n packageJsonPath,\n config: getContextConfig(staticConfig),\n }\n );\n // Allow for the app.config.js to `export default null;`\n // Use `dynamicConfigPath` to detect if a dynamic config exists.\n const dynamicConfig = reduceExpoObject(rawDynamicConfig) || {};\n return fillAndReturnConfig(dynamicConfig, exportedObjectType);\n }\n\n // No app.config.js but json or no config\n return fillAndReturnConfig(staticConfig || {}, null);\n}\n\nexport function getPackageJson(projectRoot: string): PackageJSONConfig {\n const [pkg] = getPackageJsonAndPath(projectRoot);\n return pkg;\n}\n\nfunction getPackageJsonAndPath(projectRoot: string): [PackageJSONConfig, string] {\n const packageJsonPath = getRootPackageJsonPath(projectRoot);\n return [JsonFile.read(packageJsonPath), packageJsonPath];\n}\n\nexport function readConfigJson(\n projectRoot: string,\n skipValidation: boolean = false,\n skipSDKVersionRequirement: boolean = false\n): ProjectConfig {\n const paths = getConfigFilePaths(projectRoot);\n\n const rawStaticConfig = paths.staticConfigPath ? getStaticConfig(paths.staticConfigPath) : null;\n\n const getConfigName = (): string => {\n if (paths.staticConfigPath) return ` \\`${path.basename(paths.staticConfigPath)}\\``;\n return '';\n };\n\n let outputRootConfig = rawStaticConfig as JSONObject | null;\n if (outputRootConfig === null || typeof outputRootConfig !== 'object') {\n if (skipValidation) {\n outputRootConfig = { expo: {} };\n } else {\n throw new ConfigError(\n `Project at path ${path.resolve(\n projectRoot\n )} does not contain a valid Expo config${getConfigName()}`,\n 'NOT_OBJECT'\n );\n }\n }\n let exp = outputRootConfig.expo as Partial;\n if (exp === null || typeof exp !== 'object') {\n throw new ConfigError(\n `Property 'expo' in${getConfigName()} for project at path ${path.resolve(\n projectRoot\n )} is not an object. Please make sure${getConfigName()} includes a managed Expo app config like this: ${APP_JSON_EXAMPLE}`,\n 'NO_EXPO'\n );\n }\n\n exp = { ...exp };\n\n const [pkg, packageJsonPath] = getPackageJsonAndPath(projectRoot);\n\n return {\n ...ensureConfigHasDefaultValues({\n projectRoot,\n exp,\n pkg,\n skipSDKVersionRequirement,\n paths,\n packageJsonPath,\n }),\n mods: null,\n dynamicConfigPath: null,\n dynamicConfigObjectType: null,\n rootConfig: { ...outputRootConfig } as AppJSONConfig,\n ...paths,\n };\n}\n\n/**\n * Get the static and dynamic config paths for a project. Also accounts for custom paths.\n *\n * @param projectRoot\n */\nexport function getConfigFilePaths(projectRoot: string): ConfigFilePaths {\n const customPaths = getCustomConfigFilePaths(projectRoot);\n if (customPaths) {\n return customPaths;\n }\n\n return {\n dynamicConfigPath: getDynamicConfigFilePath(projectRoot),\n staticConfigPath: getStaticConfigFilePath(projectRoot),\n };\n}\n\nfunction getCustomConfigFilePaths(projectRoot: string): ConfigFilePaths | null {\n if (!customConfigPaths[projectRoot]) {\n return null;\n }\n // If the user picks a custom config path, we will only use that and skip searching for a secondary config.\n if (isDynamicFilePath(customConfigPaths[projectRoot])) {\n return {\n dynamicConfigPath: customConfigPaths[projectRoot],\n staticConfigPath: null,\n };\n }\n // Anything that's not js or ts will be treated as json.\n return { staticConfigPath: customConfigPaths[projectRoot], dynamicConfigPath: null };\n}\n\nfunction getDynamicConfigFilePath(projectRoot: string): string | null {\n for (const fileName of ['app.config.ts', 'app.config.js']) {\n const configPath = path.join(projectRoot, fileName);\n if (fs.existsSync(configPath)) {\n return configPath;\n }\n }\n return null;\n}\n\nfunction getStaticConfigFilePath(projectRoot: string): string | null {\n for (const fileName of ['app.config.json', 'app.json']) {\n const configPath = path.join(projectRoot, fileName);\n if (fs.existsSync(configPath)) {\n return configPath;\n }\n }\n return null;\n}\n\n// TODO: This should account for dynamic configs\nexport function findConfigFile(\n projectRoot: string\n): { configPath: string; configName: string; configNamespace: 'expo' } {\n let configPath: string;\n // Check for a custom config path first.\n if (customConfigPaths[projectRoot]) {\n configPath = customConfigPaths[projectRoot];\n // We shouldn't verify if the file exists because\n // the user manually specified that this path should be used.\n return {\n configPath,\n configName: path.basename(configPath),\n configNamespace: 'expo',\n };\n } else {\n // app.config.json takes higher priority over app.json\n configPath = path.join(projectRoot, 'app.config.json');\n if (!fs.existsSync(configPath)) {\n configPath = path.join(projectRoot, 'app.json');\n }\n }\n\n return {\n configPath,\n configName: path.basename(configPath),\n configNamespace: 'expo',\n };\n}\n\n// TODO: deprecate\nexport function configFilename(projectRoot: string): string {\n return findConfigFile(projectRoot).configName;\n}\n\nexport async function readExpRcAsync(projectRoot: string): Promise {\n const expRcPath = path.join(projectRoot, '.exprc');\n return await JsonFile.readAsync(expRcPath, { json5: true, cantReadFileDefault: {} });\n}\n\nconst customConfigPaths: { [projectRoot: string]: string } = {};\n\nexport function resetCustomConfigPaths(): void {\n for (const key of Object.keys(customConfigPaths)) {\n delete customConfigPaths[key];\n }\n}\n\nexport function setCustomConfigPath(projectRoot: string, configPath: string): void {\n customConfigPaths[projectRoot] = configPath;\n}\n\n/**\n * Attempt to modify an Expo project config.\n * This will only fully work if the project is using static configs only.\n * Otherwise 'warn' | 'fail' will return with a message about why the config couldn't be updated.\n * The potentially modified config object will be returned for testing purposes.\n *\n * @param projectRoot\n * @param modifications modifications to make to an existing config\n * @param readOptions options for reading the current config file\n * @param writeOptions If true, the static config file will not be rewritten\n */\nexport async function modifyConfigAsync(\n projectRoot: string,\n modifications: Partial,\n readOptions: GetConfigOptions = {},\n writeOptions: WriteConfigOptions = {}\n): Promise<{\n type: 'success' | 'warn' | 'fail';\n message?: string;\n config: AppJSONConfig | null;\n}> {\n const config = getConfig(projectRoot, readOptions);\n if (config.dynamicConfigPath) {\n // We cannot automatically write to a dynamic config.\n /* Currently we should just use the safest approach possible, informing the user that they'll need to manually modify their dynamic config.\n\n if (config.staticConfigPath) {\n // Both a dynamic and a static config exist.\n if (config.dynamicConfigObjectType === 'function') {\n // The dynamic config exports a function, this means it possibly extends the static config.\n } else {\n // Dynamic config ignores the static config, there isn't a reason to automatically write to it.\n // Instead we should warn the user to add values to their dynamic config.\n }\n }\n */\n return {\n type: 'warn',\n message: `Cannot automatically write to dynamic config at: ${path.relative(\n projectRoot,\n config.dynamicConfigPath\n )}`,\n config: null,\n };\n } else if (config.staticConfigPath) {\n // Static with no dynamic config, this means we can append to the config automatically.\n let outputConfig: AppJSONConfig;\n // If the config has an expo object (app.json) then append the options to that object.\n if (config.rootConfig.expo) {\n outputConfig = {\n ...config.rootConfig,\n expo: { ...config.rootConfig.expo, ...modifications },\n };\n } else {\n // Otherwise (app.config.json) just add the config modification to the top most level.\n outputConfig = { ...config.rootConfig, ...modifications };\n }\n if (!writeOptions.dryRun) {\n await JsonFile.writeAsync(config.staticConfigPath, outputConfig, { json5: false });\n }\n return { type: 'success', config: outputConfig };\n }\n\n return { type: 'fail', message: 'No config exists', config: null };\n}\n\nconst APP_JSON_EXAMPLE = JSON.stringify({\n expo: {\n name: 'My app',\n slug: 'my-app',\n sdkVersion: '...',\n },\n});\n\nfunction ensureConfigHasDefaultValues({\n projectRoot,\n exp,\n pkg,\n paths,\n packageJsonPath,\n skipSDKVersionRequirement = false,\n}: {\n projectRoot: string;\n exp: Partial | null;\n pkg: JSONObject;\n skipSDKVersionRequirement?: boolean;\n paths?: ConfigFilePaths;\n packageJsonPath?: string;\n}): { exp: ExpoConfig; pkg: PackageJSONConfig } {\n if (!exp) {\n exp = {};\n }\n exp = withInternal(exp as any, {\n projectRoot,\n ...(paths ?? {}),\n packageJsonPath,\n });\n // Defaults for package.json fields\n const pkgName = typeof pkg.name === 'string' ? pkg.name : path.basename(projectRoot);\n const pkgVersion = typeof pkg.version === 'string' ? pkg.version : '1.0.0';\n\n const pkgWithDefaults = { ...pkg, name: pkgName, version: pkgVersion };\n\n // Defaults for app.json/app.config.js fields\n const name = exp.name ?? pkgName;\n const slug = exp.slug ?? slugify(name.toLowerCase());\n const version = exp.version ?? pkgVersion;\n let description = exp.description;\n if (!description && typeof pkg.description === 'string') {\n description = pkg.description;\n }\n\n const expWithDefaults = { ...exp, name, slug, version, description };\n\n let sdkVersion;\n try {\n sdkVersion = getExpoSDKVersion(projectRoot, expWithDefaults);\n } catch (error) {\n if (!skipSDKVersionRequirement) throw error;\n }\n\n let platforms = exp.platforms;\n if (!platforms) {\n platforms = getSupportedPlatforms(projectRoot);\n }\n\n return {\n exp: { ...expWithDefaults, sdkVersion, platforms },\n pkg: pkgWithDefaults,\n };\n}\n\nexport async function writeConfigJsonAsync(\n projectRoot: string,\n options: object\n): Promise {\n const paths = getConfigFilePaths(projectRoot);\n let { exp, pkg, rootConfig, dynamicConfigObjectType, staticConfigPath } = readConfigJson(\n projectRoot\n );\n exp = { ...rootConfig.expo, ...options };\n rootConfig = { ...rootConfig, expo: exp };\n\n if (paths.staticConfigPath) {\n await JsonFile.writeAsync(paths.staticConfigPath, rootConfig, { json5: false });\n } else {\n console.log('Failed to write to config: ', options);\n }\n\n return {\n exp,\n pkg,\n rootConfig,\n staticConfigPath,\n dynamicConfigObjectType,\n ...paths,\n };\n}\nconst DEFAULT_BUILD_PATH = `web-build`;\n\nexport function getWebOutputPath(config: { [key: string]: any } = {}): string {\n if (process.env.WEBPACK_BUILD_OUTPUT_PATH) {\n return process.env.WEBPACK_BUILD_OUTPUT_PATH;\n }\n const expo = config.expo || config || {};\n return expo?.web?.build?.output || DEFAULT_BUILD_PATH;\n}\n\nexport function getNameFromConfig(\n exp: Record = {}\n): { appName?: string; webName?: string } {\n // For RN CLI support\n const appManifest = exp.expo || exp;\n const { web = {} } = appManifest;\n\n // rn-cli apps use a displayName value as well.\n const appName = exp.displayName || appManifest.displayName || appManifest.name;\n const webName = web.name || appName;\n\n return {\n appName,\n webName,\n };\n}\n\nexport function getDefaultTarget(projectRoot: string): ProjectTarget {\n const { exp } = getConfig(projectRoot, { skipSDKVersionRequirement: true });\n // before SDK 37, always default to managed to preserve previous behavior\n if (exp.sdkVersion && exp.sdkVersion !== 'UNVERSIONED' && semver.lt(exp.sdkVersion, '37.0.0')) {\n return 'managed';\n }\n return isBareWorkflowProject(projectRoot) ? 'bare' : 'managed';\n}\n\nfunction isBareWorkflowProject(projectRoot: string): boolean {\n const [pkg] = getPackageJsonAndPath(projectRoot);\n\n if (pkg.dependencies && pkg.dependencies.expokit) {\n return false;\n }\n\n const xcodeprojFiles = globSync('ios/**/*.xcodeproj', {\n absolute: true,\n cwd: projectRoot,\n });\n if (xcodeprojFiles.length) {\n return true;\n }\n const gradleFiles = globSync('android/**/*.gradle', {\n absolute: true,\n cwd: projectRoot,\n });\n if (gradleFiles.length) {\n return true;\n }\n\n return false;\n}\n\n/**\n * true if the file is .js or .ts\n *\n * @param filePath\n */\nfunction isDynamicFilePath(filePath: string): boolean {\n return !!filePath.match(/\\.[j|t]s$/);\n}\n\n/**\n * Return a useful name describing the project config.\n * - dynamic: app.config.js\n * - static: app.json\n * - custom path app config relative to root folder\n * - both: app.config.js or app.json\n */\nexport function getProjectConfigDescription(projectRoot: string): string {\n const paths = getConfigFilePaths(projectRoot);\n return getProjectConfigDescriptionWithPaths(projectRoot, paths);\n}\n\n/**\n * Returns a string describing the configurations used for the given project root.\n * Will return null if no config is found.\n *\n * @param projectRoot\n * @param projectConfig\n */\nexport function getProjectConfigDescriptionWithPaths(\n projectRoot: string,\n projectConfig: ConfigFilePaths\n): string {\n if (projectConfig.dynamicConfigPath) {\n const relativeDynamicConfigPath = path.relative(projectRoot, projectConfig.dynamicConfigPath);\n if (projectConfig.staticConfigPath) {\n return `${relativeDynamicConfigPath} or ${path.relative(\n projectRoot,\n projectConfig.staticConfigPath\n )}`;\n }\n return relativeDynamicConfigPath;\n } else if (projectConfig.staticConfigPath) {\n return path.relative(projectRoot, projectConfig.staticConfigPath);\n }\n // If a config doesn't exist, our tooling will generate a static app.json\n return 'app.json';\n}\n\nexport * from './Config.types';\n\nexport { isLegacyImportsEnabled } from './isLegacyImportsEnabled';\n"],"file":"Config.js"}