@expo/config 6.0.19 → 6.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -2
- package/build/Config.js +1 -4
- package/build/Config.js.map +1 -1
- package/build/evalConfig.js.map +1 -1
- package/build/getConfig.js.map +1 -1
- package/build/isLegacyImportsEnabled.js +1 -1
- package/build/isLegacyImportsEnabled.js.map +1 -1
- package/build/resolvePackageJson.js +1 -1
- package/build/resolvePackageJson.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
<!-- Title -->
|
|
2
|
+
<h1 align="center">
|
|
3
|
+
👋 Welcome to <br><code>@expo/config</code>
|
|
4
|
+
</h1>
|
|
2
5
|
|
|
3
|
-
A library for interacting with the
|
|
6
|
+
<p align="center">A library for interacting with the <code>app.json</code>.</p>
|
|
7
|
+
|
|
8
|
+
<p align="center">
|
|
9
|
+
<img src="https://flat.badgen.net/packagephobia/install/@expo/config">
|
|
10
|
+
|
|
11
|
+
<a href="https://www.npmjs.com/package/@expo/config">
|
|
12
|
+
<img src="https://flat.badgen.net/npm/dw/@expo/config" target="_blank" />
|
|
13
|
+
</a>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<!-- Body -->
|
package/build/Config.js
CHANGED
|
@@ -431,7 +431,6 @@ function readConfigJson(projectRoot, skipValidation = false, skipSDKVersionRequi
|
|
|
431
431
|
packageJsonPath
|
|
432
432
|
}),
|
|
433
433
|
mods: null,
|
|
434
|
-
dynamicConfigPath: null,
|
|
435
434
|
dynamicConfigObjectType: null,
|
|
436
435
|
rootConfig: { ...outputRootConfig
|
|
437
436
|
},
|
|
@@ -706,8 +705,7 @@ async function writeConfigJsonAsync(projectRoot, options) {
|
|
|
706
705
|
exp,
|
|
707
706
|
pkg,
|
|
708
707
|
rootConfig,
|
|
709
|
-
dynamicConfigObjectType
|
|
710
|
-
staticConfigPath
|
|
708
|
+
dynamicConfigObjectType
|
|
711
709
|
} = readConfigJson(projectRoot);
|
|
712
710
|
exp = { ...rootConfig.expo,
|
|
713
711
|
...options
|
|
@@ -728,7 +726,6 @@ async function writeConfigJsonAsync(projectRoot, options) {
|
|
|
728
726
|
exp,
|
|
729
727
|
pkg,
|
|
730
728
|
rootConfig,
|
|
731
|
-
staticConfigPath,
|
|
732
729
|
dynamicConfigObjectType,
|
|
733
730
|
...paths
|
|
734
731
|
};
|
package/build/Config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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","updates","codeSigningCertificate","codeSigningMetadata","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 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 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<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, 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<string, any> = {}\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(\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"],"file":"Config.js"}
|
|
1
|
+
{"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","updates","codeSigningCertificate","codeSigningMetadata","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 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(\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<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(\n exp: Record<string, any> = {}\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(\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"],"file":"Config.js"}
|
package/build/evalConfig.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/evalConfig.ts"],"names":["evalConfig","configFile","request","contents","result","code","filePath","transforms","error","location","extractLocationFromSyntaxError","codeFrameColumns","require","codeFrame","start","loc","highlightCode","message","importantStack","extractImportantStackFromNodeError","resolveConfigExport","line","lineNumber","column","columnNumber","isSyntaxError","traces","stack","split","filter","startsWith","length","pop","join","SyntaxError","constructor","name","default","exportedObjectType","Promise","ConfigError","expo","config"],"mappings":";;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,UAAT,CACLC,UADK,EAELC,OAFK,EAGiB;AACtB,QAAMC,QAAQ,GAAG,wBAAaF,UAAb,EAAyB,MAAzB,CAAjB;AACA,MAAIG,MAAJ;;AACA,MAAI;AACF,UAAM;AAAEC,MAAAA;AAAF,QAAW,0BAAUF,QAAV,EAAoB;AACnCG,MAAAA,QAAQ,EAAEL,UADyB;AAEnCM,MAAAA,UAAU,EAAE,CAAC,YAAD,EAAe,SAAf;AAFuB,KAApB,CAAjB;AAKAH,IAAAA,MAAM,GAAG,kCAAcC,IAAd,EAAoBJ,UAApB,CAAT;AACD,GAPD,CAOE,OAAOO,KAAP,
|
|
1
|
+
{"version":3,"sources":["../src/evalConfig.ts"],"names":["evalConfig","configFile","request","contents","result","code","filePath","transforms","error","location","extractLocationFromSyntaxError","codeFrameColumns","require","codeFrame","start","loc","highlightCode","message","importantStack","extractImportantStackFromNodeError","resolveConfigExport","line","lineNumber","column","columnNumber","isSyntaxError","traces","stack","split","filter","startsWith","length","pop","join","SyntaxError","constructor","name","default","exportedObjectType","Promise","ConfigError","expo","config"],"mappings":"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","sourcesContent":["import { readFileSync } from 'fs';\nimport requireString from 'require-from-string';\nimport { transform } from 'sucrase';\n\nimport { AppJSONConfig, ConfigContext, ExpoConfig } from './Config.types';\nimport { ConfigError } from './Errors';\nimport { serializeSkippingMods } from './Serialize';\n\ntype RawDynamicConfig = AppJSONConfig | Partial<ExpoConfig> | null;\n\nexport type DynamicConfigResults = { config: RawDynamicConfig; exportedObjectType: string };\n\n/**\n * Transpile and evaluate the dynamic config object.\n * This method is shared between the standard reading method in getConfig, and the headless script.\n *\n * @param options configFile path to the dynamic app.config.*, request to send to the dynamic config if it exports a function.\n * @returns the serialized and evaluated config along with the exported object type (object or function).\n */\nexport function evalConfig(\n configFile: string,\n request: ConfigContext | null\n): DynamicConfigResults {\n const contents = readFileSync(configFile, 'utf8');\n let result: any;\n try {\n const { code } = transform(contents, {\n filePath: configFile,\n transforms: ['typescript', 'imports'],\n });\n\n result = requireString(code, configFile);\n } catch (error: any) {\n const location = extractLocationFromSyntaxError(error);\n\n // Apply a code frame preview to the error if possible, sucrase doesn't do this by default.\n if (location) {\n const { codeFrameColumns } = require('@babel/code-frame');\n const codeFrame = codeFrameColumns(contents, { start: error.loc }, { highlightCode: true });\n error.codeFrame = codeFrame;\n error.message += `\\n${codeFrame}`;\n } else {\n const importantStack = extractImportantStackFromNodeError(error);\n\n if (importantStack) {\n error.message += `\\n${importantStack}`;\n }\n }\n throw error;\n }\n return resolveConfigExport(result, configFile, request);\n}\n\nfunction extractLocationFromSyntaxError(\n error: Error | any\n): { line: number; column?: number } | null {\n // sucrase provides the `loc` object\n if (error.loc) {\n return error.loc;\n }\n\n // `SyntaxError`s provide the `lineNumber` and `columnNumber` properties\n if ('lineNumber' in error && 'columnNumber' in error) {\n return { line: error.lineNumber, column: error.columnNumber };\n }\n\n return null;\n}\n\n// These kinda errors often come from syntax errors in files that were imported by the main file.\n// An example is a module that includes an import statement.\nfunction extractImportantStackFromNodeError(error: any): string | null {\n if (isSyntaxError(error)) {\n const traces = error.stack?.split('\\n').filter(line => !line.startsWith(' at '));\n if (!traces) return null;\n\n // Remove redundant line\n if (traces[traces.length - 1].startsWith('SyntaxError:')) {\n traces.pop();\n }\n return traces.join('\\n');\n }\n return null;\n}\n\nfunction isSyntaxError(error: any): error is SyntaxError {\n return error instanceof SyntaxError || error.constructor.name === 'SyntaxError';\n}\n\n/**\n * - Resolve the exported contents of an Expo config (be it default or module.exports)\n * - Assert no promise exports\n * - Return config type\n * - Serialize config\n *\n * @param result\n * @param configFile\n * @param request\n */\nexport function resolveConfigExport(\n result: any,\n configFile: string,\n request: ConfigContext | null\n) {\n if (result.default != null) {\n result = result.default;\n }\n const exportedObjectType = typeof result;\n if (typeof result === 'function') {\n result = result(request);\n }\n\n if (result instanceof Promise) {\n throw new ConfigError(`Config file ${configFile} cannot return a Promise.`, 'INVALID_CONFIG');\n }\n\n // If the expo object exists, ignore all other values.\n if (result?.expo) {\n result = serializeSkippingMods(result.expo);\n } else {\n result = serializeSkippingMods(result);\n }\n\n return { config: result, exportedObjectType };\n}\n"],"file":"evalConfig.js"}
|
package/build/getConfig.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/getConfig.ts"],"names":["readConfigFile","configFile","context","error","isConfigError","message","getDynamicConfig","configPath","request","config","ConfigError","getStaticConfig","JsonFile","read","json5"],"mappings":";;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;AAEA;AACA;AACA,SAASA,cAAT,CAAwBC,UAAxB,EAA4CC,OAA5C,EAAiG;AAC/F;AACA,MAAI,CAAC,sBAAWD,UAAX,CAAL,EAA6B;AAC3B,WAAO,IAAP;AACD;;AACD,MAAI;AACF,WAAO,8BAAWA,UAAX,EAAuBC,OAAvB,CAAP;AACD,GAFD,CAEE,OAAOC,KAAP,
|
|
1
|
+
{"version":3,"sources":["../src/getConfig.ts"],"names":["readConfigFile","configFile","context","error","isConfigError","message","getDynamicConfig","configPath","request","config","ConfigError","getStaticConfig","JsonFile","read","json5"],"mappings":";;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;AAEA;AACA;AACA,SAASA,cAAT,CAAwBC,UAAxB,EAA4CC,OAA5C,EAAiG;AAC/F;AACA,MAAI,CAAC,sBAAWD,UAAX,CAAL,EAA6B;AAC3B,WAAO,IAAP;AACD;;AACD,MAAI;AACF,WAAO,8BAAWA,UAAX,EAAuBC,OAAvB,CAAP;AACD,GAFD,CAEE,OAAOC,KAAP,EAAmB;AACnB;AACAA,IAAAA,KAAK,CAACC,aAAN,GAAsB,IAAtB;AACAD,IAAAA,KAAK,CAACE,OAAN,GAAiB,gCAA+BJ,UAAW,QAAOE,KAAK,CAACE,OAAQ,EAAhF;AACA,UAAMF,KAAN;AACD;AACF;;AAEM,SAASG,gBAAT,CAA0BC,UAA1B,EAA8CC,OAA9C,EAA4F;AACjG,QAAMC,MAAM,GAAGT,cAAc,CAACO,UAAD,EAAaC,OAAb,CAA7B;;AACA,MAAIC,MAAJ,EAAY;AACV;AACA,WAAOA,MAAP;AACD,GALgG,CAMjG;AACA;;;AACA,QAAM,KAAIC,qBAAJ,EAAiB,6BAA4BH,UAAW,EAAxD,EAA2D,gBAA3D,CAAN;AACD;;AAEM,SAASI,eAAT,CAAyBJ,UAAzB,EAAyE;AAC9E,QAAME,MAAM,GAAGG,oBAASC,IAAT,CAAcN,UAAd,EAA0B;AAAEO,IAAAA,KAAK,EAAE;AAAT,GAA1B,CAAf;;AACA,MAAIL,MAAJ,EAAY;AACV,WAAOA,MAAP;AACD;;AACD,QAAM,KAAIC,qBAAJ,EAAiB,6BAA4BH,UAAW,EAAxD,EAA2D,gBAA3D,CAAN;AACD","sourcesContent":["import JsonFile from '@expo/json-file';\nimport { existsSync } from 'fs';\n\nimport { AppJSONConfig, ConfigContext, ExpoConfig } from './Config.types';\nimport { ConfigError } from './Errors';\nimport { DynamicConfigResults, evalConfig } from './evalConfig';\n\n// We cannot use async config resolution right now because Next.js doesn't support async configs.\n// If they don't add support for async Webpack configs then we may need to pull support for Next.js.\nfunction readConfigFile(configFile: string, context: ConfigContext): null | DynamicConfigResults {\n // If the file doesn't exist then we should skip it and continue searching.\n if (!existsSync(configFile)) {\n return null;\n }\n try {\n return evalConfig(configFile, context);\n } catch (error: any) {\n // @ts-ignore\n error.isConfigError = true;\n error.message = `Error reading Expo config at ${configFile}:\\n\\n${error.message}`;\n throw error;\n }\n}\n\nexport function getDynamicConfig(configPath: string, request: ConfigContext): DynamicConfigResults {\n const config = readConfigFile(configPath, request);\n if (config) {\n // The config must be serialized and evaluated ahead of time so the spawned process can send it over.\n return config;\n }\n // TODO: It seems this is only thrown if the file cannot be found (which may never happen).\n // If so we should throw a more helpful error.\n throw new ConfigError(`Failed to read config at: ${configPath}`, 'INVALID_CONFIG');\n}\n\nexport function getStaticConfig(configPath: string): AppJSONConfig | ExpoConfig {\n const config = JsonFile.read(configPath, { json5: true });\n if (config) {\n return config as any;\n }\n throw new ConfigError(`Failed to read config at: ${configPath}`, 'INVALID_CONFIG');\n}\n"],"file":"getConfig.js"}
|
|
@@ -54,7 +54,7 @@ function lteSdkVersion(expJson, sdkVersion) {
|
|
|
54
54
|
|
|
55
55
|
try {
|
|
56
56
|
return _semver().default.lte(expJson.sdkVersion, sdkVersion);
|
|
57
|
-
} catch
|
|
57
|
+
} catch {
|
|
58
58
|
throw new Error(`${expJson.sdkVersion} is not a valid version. Must be in the form of x.y.z`);
|
|
59
59
|
}
|
|
60
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/isLegacyImportsEnabled.ts"],"names":["isLegacyImportsEnabled","exp","console","warn","lteSdkVersion","expJson","sdkVersion","semver","lte","
|
|
1
|
+
{"version":3,"sources":["../src/isLegacyImportsEnabled.ts"],"names":["isLegacyImportsEnabled","exp","console","warn","lteSdkVersion","expJson","sdkVersion","semver","lte","Error"],"mappings":";;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;AAIA;AACA;AACA;AACA;AACA;AACO,SAASA,sBAAT,CAAgCC,GAAhC,EAAqE;AAC1E,MAAI,uBAAQ,qBAAR,EAA+B,KAA/B,CAAJ,EAA2C;AACzCC,IAAAA,OAAO,CAACC,IAAR,CACE,sHADF;AAGA,WAAO,IAAP;AACD,GANyE,CAO1E;AACA;;;AACA,SAAOC,aAAa,CAACH,GAAD,EAAM,QAAN,CAApB;AACD;;AAED,SAASG,aAAT,CAAuBC,OAAvB,EAAgEC,UAAhE,EAA6F;AAC3F,MAAI,CAACD,OAAO,CAACC,UAAb,EAAyB;AACvB,WAAO,KAAP;AACD;;AAED,MAAID,OAAO,CAACC,UAAR,KAAuB,aAA3B,EAA0C;AACxC,WAAO,KAAP;AACD;;AAED,MAAI;AACF,WAAOC,kBAAOC,GAAP,CAAWH,OAAO,CAACC,UAAnB,EAA+BA,UAA/B,CAAP;AACD,GAFD,CAEE,MAAM;AACN,UAAM,IAAIG,KAAJ,CAAW,GAAEJ,OAAO,CAACC,UAAW,uDAAhC,CAAN;AACD;AACF","sourcesContent":["import { boolish } from 'getenv';\nimport semver from 'semver';\n\nimport { ExpoConfig } from './Config.types';\n\n/**\n * Should the bundler use .expo file extensions.\n *\n * @param exp\n */\nexport function isLegacyImportsEnabled(exp: Pick<ExpoConfig, 'sdkVersion'>) {\n if (boolish('EXPO_LEGACY_IMPORTS', false)) {\n console.warn(\n 'Dangerously enabled the deprecated `.expo` extensions feature, this functionality may be removed between SDK cycles.'\n );\n return true;\n }\n // Only allow target if the SDK version is available and it's less 41.\n // This is optimized for making future projects work.\n return lteSdkVersion(exp, '40.0.0');\n}\n\nfunction lteSdkVersion(expJson: Pick<ExpoConfig, 'sdkVersion'>, sdkVersion: string): boolean {\n if (!expJson.sdkVersion) {\n return false;\n }\n\n if (expJson.sdkVersion === 'UNVERSIONED') {\n return false;\n }\n\n try {\n return semver.lte(expJson.sdkVersion, sdkVersion);\n } catch {\n throw new Error(`${expJson.sdkVersion} is not a valid version. Must be in the form of x.y.z`);\n }\n}\n"],"file":"isLegacyImportsEnabled.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/resolvePackageJson.ts"],"names":["fileExists","file","isFile","
|
|
1
|
+
{"version":3,"sources":["../src/resolvePackageJson.ts"],"names":["fileExists","file","isFile","getRootPackageJsonPath","projectRoot","packageJsonPath","ConfigError"],"mappings":";;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA,SAASA,UAAT,CAAoBC,IAApB,EAA2C;AACzC,MAAI;AACF,WAAO,oBAASA,IAAT,EAAeC,MAAf,EAAP;AACD,GAFD,CAEE,MAAM;AACN,WAAO,KAAP;AACD;AACF;;AAEM,SAASC,sBAAT,CAAgCC,WAAhC,EAA6D;AAClE,QAAMC,eAAe,GAAG,kBAAKD,WAAL,EAAkB,cAAlB,CAAxB;;AACA,MAAI,CAACJ,UAAU,CAACK,eAAD,CAAf,EAAkC;AAChC,UAAM,KAAIC,qBAAJ,EACH,mCAAkCD,eAAgB,iBAD/C,EAEJ,kBAFI,CAAN;AAID;;AACD,SAAOA,eAAP;AACD","sourcesContent":["import { statSync } from 'fs';\nimport { join } from 'path';\n\nimport { ConfigError } from './Errors';\n\nfunction fileExists(file: string): boolean {\n try {\n return statSync(file).isFile();\n } catch {\n return false;\n }\n}\n\nexport function getRootPackageJsonPath(projectRoot: string): string {\n const packageJsonPath = join(projectRoot, 'package.json');\n if (!fileExists(packageJsonPath)) {\n throw new ConfigError(\n `The expected package.json path: ${packageJsonPath} does not exist`,\n 'MODULE_NOT_FOUND'\n );\n }\n return packageJsonPath;\n}\n"],"file":"resolvePackageJson.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/config",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.22",
|
|
4
4
|
"description": "A library for interacting with the app.json",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
],
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@babel/code-frame": "~7.10.4",
|
|
36
|
-
"@expo/config-plugins": "4.1.
|
|
36
|
+
"@expo/config-plugins": "4.1.3",
|
|
37
37
|
"@expo/config-types": "^44.0.0",
|
|
38
|
-
"@expo/json-file": "8.2.
|
|
38
|
+
"@expo/json-file": "8.2.36",
|
|
39
39
|
"getenv": "^1.0.0",
|
|
40
40
|
"glob": "7.1.6",
|
|
41
41
|
"require-from-string": "^2.0.2",
|