1{"version":3,"file":"Config.js","names":["reduceExpoObject","config","undefined","mods","expo","getSupportedPlatforms","projectRoot","platforms","resolveFrom","silent","push","getConfig","options","paths","getConfigFilePaths","rawStaticConfig","staticConfigPath","getStaticConfig","rootConfig","staticConfig","packageJson","packageJsonPath","getPackageJsonAndPath","fillAndReturnConfig","dynamicConfigObjectType","configWithDefaultValues","ensureConfigHasDefaultValues","exp","pkg","skipSDKVersionRequirement","dynamicConfigPath","isModdedConfig","withConfigPlugins","skipPlugins","isPublicConfig","_internal","hooks","ios","android","currentFullName","getFullName","originalFullName","updates","codeSigningCertificate","codeSigningMetadata","getContextConfig","exportedObjectType","rawDynamicConfig","getDynamicConfig","dynamicConfig","getPackageJson","getRootPackageJsonPath","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","withInternal","pkgName","pkgVersion","version","pkgWithDefaults","slugify","toLowerCase","description","expWithDefaults","getExpoSDKVersion","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","globSync","absolute","cwd","length","gradleFiles","filePath","match","getProjectConfigDescription","getProjectConfigDescriptionWithPaths","projectConfig","relativeDynamicConfigPath"],"sources":["../src/Config.ts"],"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 delete configWithDefaultValues.exp.updates?.codeSigningCertificate;\n delete configWithDefaultValues.exp.updates?.codeSigningMetadata;\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<ExpoConfig>;\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 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(projectRoot: string): {\n configPath: string;\n configName: string;\n configNamespace: 'expo';\n} {\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<ExpRc> {\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<ExpoConfig>,\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<ExpoConfig> | 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<ProjectConfig> {\n const paths = getConfigFilePaths(projectRoot);\n let { exp, pkg, rootConfig, dynamicConfigObjectType } = readConfigJson(projectRoot);\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 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(exp: Record<string, any> = {}): {\n appName?: string;\n webName?: string;\n} {\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(\n projectRoot: string,\n exp?: Pick<ExpoConfig, 'sdkVersion'>\n): ProjectTarget {\n exp ??= getConfig(projectRoot, { skipSDKVersionRequirement: true }).exp;\n\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"],"mappings":"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"}