@expo/cli 0.7.1 → 0.8.0

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.
Files changed (179) hide show
  1. package/README.md +1 -1
  2. package/build/bin/cli +12 -3
  3. package/build/bin/cli.map +1 -1
  4. package/build/src/api/getExpoGoIntermediateCertificate.js +0 -2
  5. package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -1
  6. package/build/src/api/getProjectDevelopmentCertificate.js +0 -2
  7. package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -1
  8. package/build/src/api/graphql/queries/AppQuery.js +39 -0
  9. package/build/src/api/graphql/queries/AppQuery.js.map +1 -0
  10. package/build/src/api/graphql/queries/UserQuery.js +10 -3
  11. package/build/src/api/graphql/queries/UserQuery.js.map +1 -1
  12. package/build/src/api/graphql/types/App.js +23 -0
  13. package/build/src/api/graphql/types/App.js.map +1 -0
  14. package/build/src/api/signManifest.js +0 -12
  15. package/build/src/api/signManifest.js.map +1 -1
  16. package/build/src/api/user/UserSettings.js.map +1 -1
  17. package/build/src/api/user/user.js.map +1 -1
  18. package/build/src/config/configAsync.js +3 -0
  19. package/build/src/config/configAsync.js.map +1 -1
  20. package/build/src/customize/customizeAsync.js +3 -0
  21. package/build/src/customize/customizeAsync.js.map +1 -1
  22. package/build/src/export/createBundles.js +7 -3
  23. package/build/src/export/createBundles.js.map +1 -1
  24. package/build/src/export/embed/exportEmbedAsync.js +24 -0
  25. package/build/src/export/embed/exportEmbedAsync.js.map +1 -0
  26. package/build/src/export/embed/index.js +117 -0
  27. package/build/src/export/embed/index.js.map +1 -0
  28. package/build/src/export/embed/resolveOptions.js +63 -0
  29. package/build/src/export/embed/resolveOptions.js.map +1 -0
  30. package/build/src/export/exportApp.js +56 -29
  31. package/build/src/export/exportApp.js.map +1 -1
  32. package/build/src/export/exportAssets.js +17 -0
  33. package/build/src/export/exportAssets.js.map +1 -1
  34. package/build/src/export/exportAsync.js +3 -0
  35. package/build/src/export/exportAsync.js.map +1 -1
  36. package/build/src/export/exportStaticAsync.js +179 -0
  37. package/build/src/export/exportStaticAsync.js.map +1 -0
  38. package/build/src/export/fork-bundleAsync.js +15 -42
  39. package/build/src/export/fork-bundleAsync.js.map +1 -1
  40. package/build/src/export/html.js +21 -0
  41. package/build/src/export/html.js.map +1 -0
  42. package/build/src/export/printBundleSizes.js +2 -2
  43. package/build/src/export/printBundleSizes.js.map +1 -1
  44. package/build/src/export/web/exportWebAsync.js +3 -0
  45. package/build/src/export/web/exportWebAsync.js.map +1 -1
  46. package/build/src/export/writeContents.js +5 -2
  47. package/build/src/export/writeContents.js.map +1 -1
  48. package/build/src/graphql/generated.js +462 -0
  49. package/build/src/graphql/generated.js.map +1 -0
  50. package/build/src/install/installAsync.js +3 -0
  51. package/build/src/install/installAsync.js.map +1 -1
  52. package/build/src/prebuild/clearNativeFolder.js +6 -1
  53. package/build/src/prebuild/clearNativeFolder.js.map +1 -1
  54. package/build/src/prebuild/ensureConfigAsync.js +1 -12
  55. package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
  56. package/build/src/prebuild/prebuildAsync.js +7 -2
  57. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  58. package/build/src/prebuild/resolveOptions.js +7 -8
  59. package/build/src/prebuild/resolveOptions.js.map +1 -1
  60. package/build/src/prebuild/resolveTemplate.js +5 -0
  61. package/build/src/prebuild/resolveTemplate.js.map +1 -1
  62. package/build/src/prebuild/updateFromTemplate.js +6 -1
  63. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  64. package/build/src/prebuild/validateTemplatePlatforms.js +48 -0
  65. package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -0
  66. package/build/src/run/android/runAndroidAsync.js +4 -0
  67. package/build/src/run/android/runAndroidAsync.js.map +1 -1
  68. package/build/src/run/ios/appleDevice/AppleDevice.js +25 -19
  69. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
  70. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
  71. package/build/src/run/ios/options/resolveNativeScheme.js +13 -4
  72. package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -1
  73. package/build/src/run/ios/runIosAsync.js +3 -0
  74. package/build/src/run/ios/runIosAsync.js.map +1 -1
  75. package/build/src/run/startBundler.js +4 -0
  76. package/build/src/run/startBundler.js.map +1 -1
  77. package/build/src/start/doctor/Prerequisite.js.map +1 -1
  78. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +12 -6
  79. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
  80. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +1 -3
  81. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  82. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +31 -5
  83. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
  84. package/build/src/start/doctor/typescript/updateTSConfig.js +6 -0
  85. package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
  86. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +1 -0
  87. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
  88. package/build/src/start/platforms/android/adb.js +1 -1
  89. package/build/src/start/platforms/android/adb.js.map +1 -1
  90. package/build/src/start/platforms/ios/AppleDeviceManager.js +1 -1
  91. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
  92. package/build/src/start/server/BundlerDevServer.js +16 -2
  93. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  94. package/build/src/start/server/DevServerManager.js +33 -2
  95. package/build/src/start/server/DevServerManager.js.map +1 -1
  96. package/build/src/start/server/getStaticRenderFunctions.js +166 -0
  97. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -0
  98. package/build/src/start/server/metro/MetroBundlerDevServer.js +279 -3
  99. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  100. package/build/src/start/server/metro/MetroTerminalReporter.js +2 -34
  101. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  102. package/build/src/start/server/metro/externals.js +95 -0
  103. package/build/src/start/server/metro/externals.js.map +1 -0
  104. package/build/src/start/server/metro/getCssModulesFromBundler.js +77 -0
  105. package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -0
  106. package/build/src/start/server/metro/inspector-proxy/index.js +2 -2
  107. package/build/src/start/server/metro/inspector-proxy/index.js.map +1 -1
  108. package/build/src/start/server/metro/inspector-proxy/proxy.js +1 -3
  109. package/build/src/start/server/metro/inspector-proxy/proxy.js.map +1 -1
  110. package/build/src/start/server/metro/instantiateMetro.js +44 -48
  111. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  112. package/build/src/start/server/metro/metroErrorInterface.js +114 -0
  113. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -0
  114. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +51 -0
  115. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -0
  116. package/build/src/start/server/metro/resolveFromProject.js +26 -3
  117. package/build/src/start/server/metro/resolveFromProject.js.map +1 -1
  118. package/build/src/start/server/metro/router.js +4 -0
  119. package/build/src/start/server/metro/router.js.map +1 -1
  120. package/build/src/start/server/metro/runServer-fork.js +108 -0
  121. package/build/src/start/server/metro/runServer-fork.js.map +1 -0
  122. package/build/src/start/server/metro/symbolicate.js +6 -0
  123. package/build/src/start/server/metro/symbolicate.js.map +1 -0
  124. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +70 -0
  125. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -0
  126. package/build/src/start/server/metro/withMetroMultiPlatform.js +181 -44
  127. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  128. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +8 -1
  129. package/build/src/start/server/middleware/ClassicManifestMiddleware.js.map +1 -1
  130. package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
  131. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +38 -32
  132. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
  133. package/build/src/start/server/middleware/ManifestMiddleware.js +53 -19
  134. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  135. package/build/src/start/server/type-generation/expo-env.js +27 -0
  136. package/build/src/start/server/type-generation/expo-env.js.map +1 -0
  137. package/build/src/start/server/type-generation/index.js +49 -0
  138. package/build/src/start/server/type-generation/index.js.map +1 -0
  139. package/build/src/start/server/type-generation/routes.js +292 -0
  140. package/build/src/start/server/type-generation/routes.js.map +1 -0
  141. package/build/src/start/server/type-generation/tsconfig.js +89 -0
  142. package/build/src/start/server/type-generation/tsconfig.js.map +1 -0
  143. package/build/src/start/server/webTemplate.js +20 -4
  144. package/build/src/start/server/webTemplate.js.map +1 -1
  145. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +4 -6
  146. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  147. package/build/src/start/startAsync.js +30 -8
  148. package/build/src/start/startAsync.js.map +1 -1
  149. package/build/src/utils/FileNotifier.js +11 -4
  150. package/build/src/utils/FileNotifier.js.map +1 -1
  151. package/build/src/utils/analytics/getMetroProperties.js +1 -1
  152. package/build/src/utils/analytics/getMetroProperties.js.map +1 -1
  153. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  154. package/build/src/utils/codesigning.js +31 -7
  155. package/build/src/utils/codesigning.js.map +1 -1
  156. package/build/src/utils/env.js +3 -0
  157. package/build/src/utils/env.js.map +1 -1
  158. package/build/src/utils/mergeGitIgnorePaths.js +42 -0
  159. package/build/src/utils/mergeGitIgnorePaths.js.map +1 -1
  160. package/build/src/utils/nodeEnv.js +11 -0
  161. package/build/src/utils/nodeEnv.js.map +1 -0
  162. package/build/src/utils/resolveArgs.js +43 -0
  163. package/build/src/utils/resolveArgs.js.map +1 -1
  164. package/build/src/utils/template.js +21 -0
  165. package/build/src/utils/template.js.map +1 -0
  166. package/build/src/utils/tsconfig/evaluateTsConfig.js +61 -0
  167. package/build/src/utils/tsconfig/evaluateTsConfig.js.map +1 -0
  168. package/build/src/utils/tsconfig/loadTsConfigPaths.js +69 -0
  169. package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -0
  170. package/build/src/utils/tsconfig/matchTsConfigPathAlias.js +88 -0
  171. package/build/src/utils/tsconfig/matchTsConfigPathAlias.js.map +1 -0
  172. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +41 -0
  173. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +1 -0
  174. package/package.json +16 -8
  175. package/static/template/metro.config.js +4 -1
  176. package/build/src/api/getProject.js +0 -19
  177. package/build/src/api/getProject.js.map +0 -1
  178. package/build/src/api/graphql/generated.js +0 -113
  179. package/build/src/api/graphql/generated.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/install/installAsync.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport * as PackageManager from '@expo/package-manager';\nimport chalk from 'chalk';\n\nimport * as Log from '../log';\nimport {\n getOperationLog,\n getVersionedPackagesAsync,\n} from '../start/doctor/dependencies/getVersionedPackages';\nimport { getVersionedDependenciesAsync } from '../start/doctor/dependencies/validateDependenciesVersions';\nimport { groupBy } from '../utils/array';\nimport { findUpProjectRootOrAssert } from '../utils/findUp';\nimport { checkPackagesAsync } from './checkPackages';\nimport { Options } from './resolveOptions';\n\nexport async function installAsync(\n packages: string[],\n options: Options & { projectRoot?: string },\n packageManagerArguments: string[] = []\n) {\n // Locate the project root based on the process current working directory.\n // This enables users to run `npx expo install` from a subdirectory of the project.\n const projectRoot = options.projectRoot ?? findUpProjectRootOrAssert(process.cwd());\n\n // Resolve the package manager used by the project, or based on the provided arguments.\n const packageManager = PackageManager.createForProject(projectRoot, {\n npm: options.npm,\n yarn: options.yarn,\n pnpm: options.pnpm,\n silent: options.silent,\n log: Log.log,\n });\n\n if (options.check || options.fix) {\n return await checkPackagesAsync(projectRoot, {\n packages,\n options,\n packageManager,\n packageManagerArguments,\n });\n }\n\n // Read the project Expo config without plugins.\n const { exp } = getConfig(projectRoot, {\n // Sometimes users will add a plugin to the config before installing the library,\n // this wouldn't work unless we dangerously disable plugin serialization.\n skipPlugins: true,\n });\n\n // Resolve the versioned packages, then install them.\n return installPackagesAsync(projectRoot, {\n packageManager,\n packages,\n packageManagerArguments,\n sdkVersion: exp.sdkVersion!,\n });\n}\n\n/** Version packages and install in a project. */\nexport async function installPackagesAsync(\n projectRoot: string,\n {\n packages,\n packageManager,\n sdkVersion,\n packageManagerArguments,\n }: {\n /**\n * List of packages to version, grouped by the type of dependency.\n * @example ['uuid', 'react-native-reanimated@latest']\n */\n packages: string[];\n /** Package manager to use when installing the versioned packages. */\n packageManager: PackageManager.NodePackageManager;\n /**\n * SDK to version `packages` for.\n * @example '44.0.0'\n */\n sdkVersion: string;\n /**\n * Extra parameters to pass to the `packageManager` when installing versioned packages.\n * @example ['--no-save']\n */\n packageManagerArguments: string[];\n }\n): Promise<void> {\n const versioning = await getVersionedPackagesAsync(projectRoot, {\n packages,\n // sdkVersion is always defined because we don't skipSDKVersionRequirement in getConfig.\n sdkVersion,\n });\n\n Log.log(\n chalk`\\u203A Installing ${\n versioning.messages.length ? versioning.messages.join(' and ') + ' ' : ''\n }using {bold ${packageManager.name}}`\n );\n\n await packageManager.addAsync([...packageManagerArguments, ...versioning.packages]);\n\n await applyPluginsAsync(projectRoot, versioning.packages);\n}\n\nexport async function fixPackagesAsync(\n projectRoot: string,\n {\n packages,\n packageManager,\n sdkVersion,\n packageManagerArguments,\n }: {\n packages: Awaited<ReturnType<typeof getVersionedDependenciesAsync>>;\n /** Package manager to use when installing the versioned packages. */\n packageManager: PackageManager.NodePackageManager;\n /**\n * SDK to version `packages` for.\n * @example '44.0.0'\n */\n sdkVersion: string;\n /**\n * Extra parameters to pass to the `packageManager` when installing versioned packages.\n * @example ['--no-save']\n */\n packageManagerArguments: string[];\n }\n): Promise<void> {\n if (!packages.length) {\n return;\n }\n\n const { dependencies = [], devDependencies = [] } = groupBy(packages, (dep) => dep.packageType);\n const versioningMessages = getOperationLog({\n othersCount: 0, // All fixable packages are versioned\n nativeModulesCount: packages.length,\n sdkVersion,\n });\n\n Log.log(\n chalk`\\u203A Installing ${\n versioningMessages.length ? versioningMessages.join(' and ') + ' ' : ''\n }using {bold ${packageManager.name}}`\n );\n\n if (dependencies.length) {\n const versionedPackages = dependencies.map(\n (dep) => `${dep.packageName}@${dep.expectedVersionOrRange}`\n );\n\n await packageManager.addAsync([...packageManagerArguments, ...versionedPackages]);\n\n await applyPluginsAsync(projectRoot, versionedPackages);\n }\n\n if (devDependencies.length) {\n await packageManager.addDevAsync([\n ...packageManagerArguments,\n ...devDependencies.map((dep) => `${dep.packageName}@${dep.expectedVersionOrRange}`),\n ]);\n }\n}\n\n/**\n * A convenience feature for automatically applying Expo Config Plugins to the `app.json` after installing them.\n * This should be dropped in favor of autolinking in the future.\n */\nasync function applyPluginsAsync(projectRoot: string, packages: string[]) {\n const { autoAddConfigPluginsAsync } = await import('./utils/autoAddConfigPlugins');\n\n try {\n const { exp } = getConfig(projectRoot, { skipSDKVersionRequirement: true });\n\n // Only auto add plugins if the plugins array is defined or if the project is using SDK +42.\n await autoAddConfigPluginsAsync(\n projectRoot,\n exp,\n // Split any possible NPM tags. i.e. `expo@latest` -> `expo`\n packages.map((pkg) => pkg.split('@')[0]).filter(Boolean)\n );\n } catch (error: any) {\n // If we fail to apply plugins, the log a warning and continue.\n if (error.isPluginError) {\n Log.warn(`Skipping config plugin check: ` + error.message);\n return;\n }\n // Any other error, rethrow.\n throw error;\n }\n}\n"],"names":["installAsync","installPackagesAsync","fixPackagesAsync","PackageManager","Log","packages","options","packageManagerArguments","projectRoot","findUpProjectRootOrAssert","process","cwd","packageManager","createForProject","npm","yarn","pnpm","silent","log","check","fix","checkPackagesAsync","exp","getConfig","skipPlugins","sdkVersion","versioning","getVersionedPackagesAsync","chalk","messages","length","join","name","addAsync","applyPluginsAsync","dependencies","devDependencies","groupBy","dep","packageType","versioningMessages","getOperationLog","othersCount","nativeModulesCount","versionedPackages","map","packageName","expectedVersionOrRange","addDevAsync","autoAddConfigPluginsAsync","skipSDKVersionRequirement","pkg","split","filter","Boolean","error","isPluginError","warn","message"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/install/installAsync.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport * as PackageManager from '@expo/package-manager';\nimport chalk from 'chalk';\n\nimport * as Log from '../log';\nimport {\n getOperationLog,\n getVersionedPackagesAsync,\n} from '../start/doctor/dependencies/getVersionedPackages';\nimport { getVersionedDependenciesAsync } from '../start/doctor/dependencies/validateDependenciesVersions';\nimport { groupBy } from '../utils/array';\nimport { findUpProjectRootOrAssert } from '../utils/findUp';\nimport { setNodeEnv } from '../utils/nodeEnv';\nimport { checkPackagesAsync } from './checkPackages';\nimport { Options } from './resolveOptions';\n\nexport async function installAsync(\n packages: string[],\n options: Options & { projectRoot?: string },\n packageManagerArguments: string[] = []\n) {\n setNodeEnv('development');\n // Locate the project root based on the process current working directory.\n // This enables users to run `npx expo install` from a subdirectory of the project.\n const projectRoot = options.projectRoot ?? findUpProjectRootOrAssert(process.cwd());\n require('@expo/env').load(projectRoot);\n\n // Resolve the package manager used by the project, or based on the provided arguments.\n const packageManager = PackageManager.createForProject(projectRoot, {\n npm: options.npm,\n yarn: options.yarn,\n pnpm: options.pnpm,\n silent: options.silent,\n log: Log.log,\n });\n\n if (options.check || options.fix) {\n return await checkPackagesAsync(projectRoot, {\n packages,\n options,\n packageManager,\n packageManagerArguments,\n });\n }\n\n // Read the project Expo config without plugins.\n const { exp } = getConfig(projectRoot, {\n // Sometimes users will add a plugin to the config before installing the library,\n // this wouldn't work unless we dangerously disable plugin serialization.\n skipPlugins: true,\n });\n\n // Resolve the versioned packages, then install them.\n return installPackagesAsync(projectRoot, {\n packageManager,\n packages,\n packageManagerArguments,\n sdkVersion: exp.sdkVersion!,\n });\n}\n\n/** Version packages and install in a project. */\nexport async function installPackagesAsync(\n projectRoot: string,\n {\n packages,\n packageManager,\n sdkVersion,\n packageManagerArguments,\n }: {\n /**\n * List of packages to version, grouped by the type of dependency.\n * @example ['uuid', 'react-native-reanimated@latest']\n */\n packages: string[];\n /** Package manager to use when installing the versioned packages. */\n packageManager: PackageManager.NodePackageManager;\n /**\n * SDK to version `packages` for.\n * @example '44.0.0'\n */\n sdkVersion: string;\n /**\n * Extra parameters to pass to the `packageManager` when installing versioned packages.\n * @example ['--no-save']\n */\n packageManagerArguments: string[];\n }\n): Promise<void> {\n const versioning = await getVersionedPackagesAsync(projectRoot, {\n packages,\n // sdkVersion is always defined because we don't skipSDKVersionRequirement in getConfig.\n sdkVersion,\n });\n\n Log.log(\n chalk`\\u203A Installing ${\n versioning.messages.length ? versioning.messages.join(' and ') + ' ' : ''\n }using {bold ${packageManager.name}}`\n );\n\n await packageManager.addAsync([...packageManagerArguments, ...versioning.packages]);\n\n await applyPluginsAsync(projectRoot, versioning.packages);\n}\n\nexport async function fixPackagesAsync(\n projectRoot: string,\n {\n packages,\n packageManager,\n sdkVersion,\n packageManagerArguments,\n }: {\n packages: Awaited<ReturnType<typeof getVersionedDependenciesAsync>>;\n /** Package manager to use when installing the versioned packages. */\n packageManager: PackageManager.NodePackageManager;\n /**\n * SDK to version `packages` for.\n * @example '44.0.0'\n */\n sdkVersion: string;\n /**\n * Extra parameters to pass to the `packageManager` when installing versioned packages.\n * @example ['--no-save']\n */\n packageManagerArguments: string[];\n }\n): Promise<void> {\n if (!packages.length) {\n return;\n }\n\n const { dependencies = [], devDependencies = [] } = groupBy(packages, (dep) => dep.packageType);\n const versioningMessages = getOperationLog({\n othersCount: 0, // All fixable packages are versioned\n nativeModulesCount: packages.length,\n sdkVersion,\n });\n\n Log.log(\n chalk`\\u203A Installing ${\n versioningMessages.length ? versioningMessages.join(' and ') + ' ' : ''\n }using {bold ${packageManager.name}}`\n );\n\n if (dependencies.length) {\n const versionedPackages = dependencies.map(\n (dep) => `${dep.packageName}@${dep.expectedVersionOrRange}`\n );\n\n await packageManager.addAsync([...packageManagerArguments, ...versionedPackages]);\n\n await applyPluginsAsync(projectRoot, versionedPackages);\n }\n\n if (devDependencies.length) {\n await packageManager.addDevAsync([\n ...packageManagerArguments,\n ...devDependencies.map((dep) => `${dep.packageName}@${dep.expectedVersionOrRange}`),\n ]);\n }\n}\n\n/**\n * A convenience feature for automatically applying Expo Config Plugins to the `app.json` after installing them.\n * This should be dropped in favor of autolinking in the future.\n */\nasync function applyPluginsAsync(projectRoot: string, packages: string[]) {\n const { autoAddConfigPluginsAsync } = await import('./utils/autoAddConfigPlugins');\n\n try {\n const { exp } = getConfig(projectRoot, { skipSDKVersionRequirement: true });\n\n // Only auto add plugins if the plugins array is defined or if the project is using SDK +42.\n await autoAddConfigPluginsAsync(\n projectRoot,\n exp,\n // Split any possible NPM tags. i.e. `expo@latest` -> `expo`\n packages.map((pkg) => pkg.split('@')[0]).filter(Boolean)\n );\n } catch (error: any) {\n // If we fail to apply plugins, the log a warning and continue.\n if (error.isPluginError) {\n Log.warn(`Skipping config plugin check: ` + error.message);\n return;\n }\n // Any other error, rethrow.\n throw error;\n }\n}\n"],"names":["installAsync","installPackagesAsync","fixPackagesAsync","PackageManager","Log","packages","options","packageManagerArguments","setNodeEnv","projectRoot","findUpProjectRootOrAssert","process","cwd","require","load","packageManager","createForProject","npm","yarn","pnpm","silent","log","check","fix","checkPackagesAsync","exp","getConfig","skipPlugins","sdkVersion","versioning","getVersionedPackagesAsync","chalk","messages","length","join","name","addAsync","applyPluginsAsync","dependencies","devDependencies","groupBy","dep","packageType","versioningMessages","getOperationLog","othersCount","nativeModulesCount","versionedPackages","map","packageName","expectedVersionOrRange","addDevAsync","autoAddConfigPluginsAsync","skipSDKVersionRequirement","pkg","split","filter","Boolean","error","isPluginError","warn","message"],"mappings":"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"}
@@ -101,8 +101,13 @@ async function getMalformedNativeProjectsAsync(projectRoot, platforms) {
101
101
  android: hasRequiredAndroidFilesAsync,
102
102
  ios: hasRequiredIOSFilesAsync
103
103
  };
104
- const checkPlatforms = await filterPlatformsThatDoNotExistAsync(projectRoot, platforms);
104
+ const checkablePlatforms = platforms.filter((platform)=>platform in VERIFIERS
105
+ );
106
+ const checkPlatforms = await filterPlatformsThatDoNotExistAsync(projectRoot, checkablePlatforms);
105
107
  return (await Promise.all(checkPlatforms.map(async (platform)=>{
108
+ if (!VERIFIERS[platform]) {
109
+ return false;
110
+ }
106
111
  if (await VERIFIERS[platform](projectRoot)) {
107
112
  return false;
108
113
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/prebuild/clearNativeFolder.ts"],"sourcesContent":["import { AndroidConfig, IOSConfig, ModPlatform } from '@expo/config-plugins';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\n\nimport * as Log from '../log';\nimport { directoryExistsAsync } from '../utils/dir';\nimport { isInteractive } from '../utils/interactive';\nimport { logNewSection } from '../utils/ora';\nimport { confirmAsync } from '../utils/prompts';\n\n/** Delete the input native folders and print a loading step. */\nexport async function clearNativeFolder(projectRoot: string, folders: string[]) {\n const step = logNewSection(`Clearing ${folders.join(', ')}`);\n try {\n await Promise.all(\n folders.map((folderName) =>\n fs.promises.rm(path.join(projectRoot, folderName), {\n recursive: true,\n force: true,\n })\n )\n );\n step.succeed(`Cleared ${folders.join(', ')} code`);\n } catch (error: any) {\n step.fail(`Failed to delete ${folders.join(', ')} code: ${error.message}`);\n throw error;\n }\n}\n\n/**\n * Returns `true` if a certain subset of required Android project files are intact.\n *\n * This isn't perfect but it serves the purpose of indicating that the user should\n * be warned to nuke the project files, most commonly when git is cleared and the root folder\n * remains in memory.\n */\nexport async function hasRequiredAndroidFilesAsync(projectRoot: string): Promise<boolean> {\n try {\n await Promise.all([\n AndroidConfig.Paths.getAppBuildGradleAsync(projectRoot),\n AndroidConfig.Paths.getProjectBuildGradleAsync(projectRoot),\n AndroidConfig.Paths.getAndroidManifestAsync(projectRoot),\n AndroidConfig.Paths.getMainApplicationAsync(projectRoot),\n ]);\n return true;\n } catch {\n return false;\n }\n}\n\n/** Returns `true` if a certain subset of required iOS project files are intact. */\nexport async function hasRequiredIOSFilesAsync(projectRoot: string) {\n try {\n // If any of the following required files are missing, then the project is malformed.\n await Promise.all([\n IOSConfig.Paths.getAllXcodeProjectPaths(projectRoot),\n IOSConfig.Paths.getAllPBXProjectPaths(projectRoot),\n ]);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Filter out platforms that do not have an existing platform folder.\n * If the user wants to validate that neither of ['ios', 'android'] are malformed then we should\n * first check that both `ios` and `android` folders exist.\n *\n * This optimization prevents us from prompting to clear a \"malformed\" project that doesn't exist yet.\n */\nasync function filterPlatformsThatDoNotExistAsync(\n projectRoot: string,\n platforms: ModPlatform[]\n): Promise<ModPlatform[]> {\n const valid = await Promise.all(\n platforms.map(async (platform) => {\n if (await directoryExistsAsync(path.join(projectRoot, platform))) {\n return platform;\n }\n return null;\n })\n );\n return valid.filter(Boolean) as ModPlatform[];\n}\n\n/** Get a list of native platforms that have existing directories which contain malformed projects. */\nexport async function getMalformedNativeProjectsAsync(\n projectRoot: string,\n platforms: ModPlatform[]\n): Promise<ModPlatform[]> {\n const VERIFIERS: Record<ModPlatform, (root: string) => Promise<boolean>> = {\n android: hasRequiredAndroidFilesAsync,\n ios: hasRequiredIOSFilesAsync,\n };\n\n const checkPlatforms = await filterPlatformsThatDoNotExistAsync(projectRoot, platforms);\n return (\n await Promise.all(\n checkPlatforms.map(async (platform) => {\n if (await VERIFIERS[platform](projectRoot)) {\n return false;\n }\n return platform;\n })\n )\n ).filter(Boolean) as ModPlatform[];\n}\n\nexport async function promptToClearMalformedNativeProjectsAsync(\n projectRoot: string,\n checkPlatforms: ModPlatform[]\n) {\n const platforms = await getMalformedNativeProjectsAsync(projectRoot, checkPlatforms);\n\n if (!platforms.length) {\n return;\n }\n\n const displayPlatforms = platforms.map((platform) => chalk.cyan(platform));\n // Prompt which platforms to reset.\n const message =\n platforms.length > 1\n ? `The ${displayPlatforms[0]} and ${displayPlatforms[1]} projects are malformed`\n : `The ${displayPlatforms[0]} project is malformed`;\n\n if (\n // If the process is non-interactive, default to clearing the malformed native project.\n // This would only happen on re-running eject.\n !isInteractive() ||\n // Prompt to clear the native folders.\n (await confirmAsync({\n message: `${message}, would you like to clear the project files and reinitialize them?`,\n initial: true,\n }))\n ) {\n if (!isInteractive()) {\n Log.warn(`${message}, project files will be cleared and reinitialized.`);\n }\n await clearNativeFolder(projectRoot, platforms);\n } else {\n // Warn the user that the process may fail.\n Log.warn('Continuing with malformed native projects');\n }\n}\n"],"names":["clearNativeFolder","hasRequiredAndroidFilesAsync","hasRequiredIOSFilesAsync","getMalformedNativeProjectsAsync","promptToClearMalformedNativeProjectsAsync","Log","projectRoot","folders","step","logNewSection","join","Promise","all","map","folderName","fs","promises","rm","path","recursive","force","succeed","error","fail","message","AndroidConfig","Paths","getAppBuildGradleAsync","getProjectBuildGradleAsync","getAndroidManifestAsync","getMainApplicationAsync","IOSConfig","getAllXcodeProjectPaths","getAllPBXProjectPaths","filterPlatformsThatDoNotExistAsync","platforms","valid","platform","directoryExistsAsync","filter","Boolean","VERIFIERS","android","ios","checkPlatforms","length","displayPlatforms","chalk","cyan","isInteractive","confirmAsync","initial","warn"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/prebuild/clearNativeFolder.ts"],"sourcesContent":["import { AndroidConfig, IOSConfig, ModPlatform } from '@expo/config-plugins';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\n\nimport * as Log from '../log';\nimport { directoryExistsAsync } from '../utils/dir';\nimport { isInteractive } from '../utils/interactive';\nimport { logNewSection } from '../utils/ora';\nimport { confirmAsync } from '../utils/prompts';\n\ntype ArbitraryPlatform = ModPlatform | string;\n\n/** Delete the input native folders and print a loading step. */\nexport async function clearNativeFolder(projectRoot: string, folders: string[]) {\n const step = logNewSection(`Clearing ${folders.join(', ')}`);\n try {\n await Promise.all(\n folders.map((folderName) =>\n fs.promises.rm(path.join(projectRoot, folderName), {\n recursive: true,\n force: true,\n })\n )\n );\n step.succeed(`Cleared ${folders.join(', ')} code`);\n } catch (error: any) {\n step.fail(`Failed to delete ${folders.join(', ')} code: ${error.message}`);\n throw error;\n }\n}\n\n/**\n * Returns `true` if a certain subset of required Android project files are intact.\n *\n * This isn't perfect but it serves the purpose of indicating that the user should\n * be warned to nuke the project files, most commonly when git is cleared and the root folder\n * remains in memory.\n */\nexport async function hasRequiredAndroidFilesAsync(projectRoot: string): Promise<boolean> {\n try {\n await Promise.all([\n AndroidConfig.Paths.getAppBuildGradleAsync(projectRoot),\n AndroidConfig.Paths.getProjectBuildGradleAsync(projectRoot),\n AndroidConfig.Paths.getAndroidManifestAsync(projectRoot),\n AndroidConfig.Paths.getMainApplicationAsync(projectRoot),\n ]);\n return true;\n } catch {\n return false;\n }\n}\n\n/** Returns `true` if a certain subset of required iOS project files are intact. */\nexport async function hasRequiredIOSFilesAsync(projectRoot: string) {\n try {\n // If any of the following required files are missing, then the project is malformed.\n await Promise.all([\n IOSConfig.Paths.getAllXcodeProjectPaths(projectRoot),\n IOSConfig.Paths.getAllPBXProjectPaths(projectRoot),\n ]);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Filter out platforms that do not have an existing platform folder.\n * If the user wants to validate that neither of ['ios', 'android'] are malformed then we should\n * first check that both `ios` and `android` folders exist.\n *\n * This optimization prevents us from prompting to clear a \"malformed\" project that doesn't exist yet.\n */\nasync function filterPlatformsThatDoNotExistAsync(\n projectRoot: string,\n platforms: ArbitraryPlatform[]\n): Promise<ArbitraryPlatform[]> {\n const valid = await Promise.all(\n platforms.map(async (platform) => {\n if (await directoryExistsAsync(path.join(projectRoot, platform))) {\n return platform;\n }\n return null;\n })\n );\n return valid.filter(Boolean) as ArbitraryPlatform[];\n}\n\n/** Get a list of native platforms that have existing directories which contain malformed projects. */\nexport async function getMalformedNativeProjectsAsync(\n projectRoot: string,\n platforms: ArbitraryPlatform[]\n): Promise<ArbitraryPlatform[]> {\n const VERIFIERS: Record<ArbitraryPlatform, (root: string) => Promise<boolean>> = {\n android: hasRequiredAndroidFilesAsync,\n ios: hasRequiredIOSFilesAsync,\n };\n\n const checkablePlatforms = platforms.filter((platform) => platform in VERIFIERS);\n const checkPlatforms = await filterPlatformsThatDoNotExistAsync(projectRoot, checkablePlatforms);\n return (\n await Promise.all(\n checkPlatforms.map(async (platform) => {\n if (!VERIFIERS[platform]) {\n return false;\n }\n if (await VERIFIERS[platform](projectRoot)) {\n return false;\n }\n return platform;\n })\n )\n ).filter(Boolean) as ArbitraryPlatform[];\n}\n\nexport async function promptToClearMalformedNativeProjectsAsync(\n projectRoot: string,\n checkPlatforms: ArbitraryPlatform[]\n) {\n const platforms = await getMalformedNativeProjectsAsync(projectRoot, checkPlatforms);\n\n if (!platforms.length) {\n return;\n }\n\n const displayPlatforms = platforms.map((platform) => chalk.cyan(platform));\n // Prompt which platforms to reset.\n const message =\n platforms.length > 1\n ? `The ${displayPlatforms[0]} and ${displayPlatforms[1]} projects are malformed`\n : `The ${displayPlatforms[0]} project is malformed`;\n\n if (\n // If the process is non-interactive, default to clearing the malformed native project.\n // This would only happen on re-running eject.\n !isInteractive() ||\n // Prompt to clear the native folders.\n (await confirmAsync({\n message: `${message}, would you like to clear the project files and reinitialize them?`,\n initial: true,\n }))\n ) {\n if (!isInteractive()) {\n Log.warn(`${message}, project files will be cleared and reinitialized.`);\n }\n await clearNativeFolder(projectRoot, platforms);\n } else {\n // Warn the user that the process may fail.\n Log.warn('Continuing with malformed native projects');\n }\n}\n"],"names":["clearNativeFolder","hasRequiredAndroidFilesAsync","hasRequiredIOSFilesAsync","getMalformedNativeProjectsAsync","promptToClearMalformedNativeProjectsAsync","Log","projectRoot","folders","step","logNewSection","join","Promise","all","map","folderName","fs","promises","rm","path","recursive","force","succeed","error","fail","message","AndroidConfig","Paths","getAppBuildGradleAsync","getProjectBuildGradleAsync","getAndroidManifestAsync","getMainApplicationAsync","IOSConfig","getAllXcodeProjectPaths","getAllPBXProjectPaths","filterPlatformsThatDoNotExistAsync","platforms","valid","platform","directoryExistsAsync","filter","Boolean","VERIFIERS","android","ios","checkablePlatforms","checkPlatforms","length","displayPlatforms","chalk","cyan","isInteractive","confirmAsync","initial","warn"],"mappings":"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"}
@@ -68,19 +68,8 @@ async function ensureConfigAsync(projectRoot, { platforms }) {
68
68
  if (platforms.includes("ios")) {
69
69
  await (0, _getOrPromptApplicationId).getOrPromptForBundleIdentifier(projectRoot);
70
70
  }
71
- // We need the SDK version to proceed
72
- const { exp , pkg } = (0, _config).getConfig(projectRoot);
73
- // TODO(EvanBacon): Remove the requirement for this once we have a
74
- // custom bundle script that respects Expo entry point resolution.
75
- if (exp.entryPoint) {
76
- delete exp.entryPoint;
77
- Log.log(`\u203A expo.entryPoint is not needed and has been removed.`);
78
- }
79
71
  // Read config again because prompting for bundle id or package name may have mutated the results.
80
- return {
81
- exp,
82
- pkg
83
- };
72
+ return (0, _config).getConfig(projectRoot);
84
73
  }
85
74
 
86
75
  //# sourceMappingURL=ensureConfigAsync.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/prebuild/ensureConfigAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfig, PackageJSONConfig } from '@expo/config';\nimport { ModPlatform } from '@expo/config-plugins';\nimport JsonFile, { JSONObject } from '@expo/json-file';\nimport path from 'path';\n\nimport * as Log from '../log';\nimport { CommandError } from '../utils/errors';\nimport {\n getOrPromptForBundleIdentifier,\n getOrPromptForPackage,\n} from '../utils/getOrPromptApplicationId';\n\n/**\n * If an Expo config file does not exist, write a new one using the in-memory config.\n *\n * @param projectRoot\n */\nexport async function ensureConfigExistsAsync(projectRoot: string) {\n try {\n const config = getConfig(projectRoot, { skipSDKVersionRequirement: false });\n // If no config exists in the file system then we should generate one so the process doesn't fail.\n if (!config.dynamicConfigPath && !config.staticConfigPath) {\n // Remove the internal object before writing.\n delete config.exp._internal;\n\n // Write the generated config.\n await JsonFile.writeAsync(\n path.join(projectRoot, 'app.json'),\n { expo: config.exp as unknown as JSONObject },\n { json5: false }\n );\n }\n } catch (error: any) {\n // TODO(Bacon): Currently this is already handled in the command\n Log.log();\n throw new CommandError(`${error.message}\\n`);\n }\n}\n\n/** Ensure config is written, prompts for application identifiers, and removes entryPoint value. */\nexport async function ensureConfigAsync(\n projectRoot: string,\n {\n platforms,\n }: {\n platforms: ModPlatform[];\n }\n): Promise<{ exp: ExpoConfig; pkg: PackageJSONConfig }> {\n await ensureConfigExistsAsync(projectRoot);\n\n // Prompt for the Android package first because it's more strict than the bundle identifier\n // this means you'll have a better chance at matching the bundle identifier with the package name.\n if (platforms.includes('android')) {\n await getOrPromptForPackage(projectRoot);\n }\n\n if (platforms.includes('ios')) {\n await getOrPromptForBundleIdentifier(projectRoot);\n }\n\n // We need the SDK version to proceed\n const { exp, pkg } = getConfig(projectRoot);\n\n // TODO(EvanBacon): Remove the requirement for this once we have a\n // custom bundle script that respects Expo entry point resolution.\n if (exp.entryPoint) {\n delete exp.entryPoint;\n Log.log(`\\u203A expo.entryPoint is not needed and has been removed.`);\n }\n\n // Read config again because prompting for bundle id or package name may have mutated the results.\n return { exp, pkg };\n}\n"],"names":["ensureConfigExistsAsync","ensureConfigAsync","Log","projectRoot","config","getConfig","skipSDKVersionRequirement","dynamicConfigPath","staticConfigPath","exp","_internal","JsonFile","writeAsync","path","join","expo","json5","error","log","CommandError","message","platforms","includes","getOrPromptForPackage","getOrPromptForBundleIdentifier","pkg","entryPoint"],"mappings":"AAAA;;;;QAiBsBA,uBAAuB,GAAvBA,uBAAuB;QAuBvBC,iBAAiB,GAAjBA,iBAAiB;AAxCkB,IAAA,OAAc,WAAd,cAAc,CAAA;AAElC,IAAA,SAAiB,kCAAjB,iBAAiB,EAAA;AACrC,IAAA,KAAM,kCAAN,MAAM,EAAA;AAEXC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACc,IAAA,OAAiB,WAAjB,iBAAiB,CAAA;AAIvC,IAAA,yBAAmC,WAAnC,mCAAmC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOnC,eAAeF,uBAAuB,CAACG,WAAmB,EAAE;IACjE,IAAI;QACF,MAAMC,MAAM,GAAGC,CAAAA,GAAAA,OAAS,AAAmD,CAAA,UAAnD,CAACF,WAAW,EAAE;YAAEG,yBAAyB,EAAE,KAAK;SAAE,CAAC,AAAC;QAC5E,kGAAkG;QAClG,IAAI,CAACF,MAAM,CAACG,iBAAiB,IAAI,CAACH,MAAM,CAACI,gBAAgB,EAAE;YACzD,6CAA6C;YAC7C,OAAOJ,MAAM,CAACK,GAAG,CAACC,SAAS,CAAC;YAE5B,8BAA8B;YAC9B,MAAMC,SAAQ,QAAA,CAACC,UAAU,CACvBC,KAAI,QAAA,CAACC,IAAI,CAACX,WAAW,EAAE,UAAU,CAAC,EAClC;gBAAEY,IAAI,EAAEX,MAAM,CAACK,GAAG;aAA2B,EAC7C;gBAAEO,KAAK,EAAE,KAAK;aAAE,CACjB,CAAC;SACH;KACF,CAAC,OAAOC,KAAK,EAAO;QACnB,gEAAgE;QAChEf,GAAG,CAACgB,GAAG,EAAE,CAAC;QACV,MAAM,IAAIC,OAAY,aAAA,CAAC,CAAC,EAAEF,KAAK,CAACG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;KAC9C;CACF;AAGM,eAAenB,iBAAiB,CACrCE,WAAmB,EACnB,EACEkB,SAAS,CAAA,EAGV,EACqD;IACtD,MAAMrB,uBAAuB,CAACG,WAAW,CAAC,CAAC;IAE3C,2FAA2F;IAC3F,kGAAkG;IAClG,IAAIkB,SAAS,CAACC,QAAQ,CAAC,SAAS,CAAC,EAAE;QACjC,MAAMC,CAAAA,GAAAA,yBAAqB,AAAa,CAAA,sBAAb,CAACpB,WAAW,CAAC,CAAC;KAC1C;IAED,IAAIkB,SAAS,CAACC,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC7B,MAAME,CAAAA,GAAAA,yBAA8B,AAAa,CAAA,+BAAb,CAACrB,WAAW,CAAC,CAAC;KACnD;IAED,qCAAqC;IACrC,MAAM,EAAEM,GAAG,CAAA,EAAEgB,GAAG,CAAA,EAAE,GAAGpB,CAAAA,GAAAA,OAAS,AAAa,CAAA,UAAb,CAACF,WAAW,CAAC,AAAC;IAE5C,kEAAkE;IAClE,kEAAkE;IAClE,IAAIM,GAAG,CAACiB,UAAU,EAAE;QAClB,OAAOjB,GAAG,CAACiB,UAAU,CAAC;QACtBxB,GAAG,CAACgB,GAAG,CAAC,CAAC,0DAA0D,CAAC,CAAC,CAAC;KACvE;IAED,kGAAkG;IAClG,OAAO;QAAET,GAAG;QAAEgB,GAAG;KAAE,CAAC;CACrB"}
1
+ {"version":3,"sources":["../../../src/prebuild/ensureConfigAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfig, PackageJSONConfig } from '@expo/config';\nimport { ModPlatform } from '@expo/config-plugins';\nimport JsonFile, { JSONObject } from '@expo/json-file';\nimport path from 'path';\n\nimport * as Log from '../log';\nimport { CommandError } from '../utils/errors';\nimport {\n getOrPromptForBundleIdentifier,\n getOrPromptForPackage,\n} from '../utils/getOrPromptApplicationId';\n\n/**\n * If an Expo config file does not exist, write a new one using the in-memory config.\n *\n * @param projectRoot\n */\nexport async function ensureConfigExistsAsync(projectRoot: string) {\n try {\n const config = getConfig(projectRoot, { skipSDKVersionRequirement: false });\n // If no config exists in the file system then we should generate one so the process doesn't fail.\n if (!config.dynamicConfigPath && !config.staticConfigPath) {\n // Remove the internal object before writing.\n delete config.exp._internal;\n\n // Write the generated config.\n await JsonFile.writeAsync(\n path.join(projectRoot, 'app.json'),\n { expo: config.exp as unknown as JSONObject },\n { json5: false }\n );\n }\n } catch (error: any) {\n // TODO(Bacon): Currently this is already handled in the command\n Log.log();\n throw new CommandError(`${error.message}\\n`);\n }\n}\n\n/** Ensure config is written, prompts for application identifiers, and removes entryPoint value. */\nexport async function ensureConfigAsync(\n projectRoot: string,\n {\n platforms,\n }: {\n platforms: ModPlatform[];\n }\n): Promise<{ exp: ExpoConfig; pkg: PackageJSONConfig }> {\n await ensureConfigExistsAsync(projectRoot);\n\n // Prompt for the Android package first because it's more strict than the bundle identifier\n // this means you'll have a better chance at matching the bundle identifier with the package name.\n if (platforms.includes('android')) {\n await getOrPromptForPackage(projectRoot);\n }\n\n if (platforms.includes('ios')) {\n await getOrPromptForBundleIdentifier(projectRoot);\n }\n\n // Read config again because prompting for bundle id or package name may have mutated the results.\n return getConfig(projectRoot);\n}\n"],"names":["ensureConfigExistsAsync","ensureConfigAsync","Log","projectRoot","config","getConfig","skipSDKVersionRequirement","dynamicConfigPath","staticConfigPath","exp","_internal","JsonFile","writeAsync","path","join","expo","json5","error","log","CommandError","message","platforms","includes","getOrPromptForPackage","getOrPromptForBundleIdentifier"],"mappings":"AAAA;;;;QAiBsBA,uBAAuB,GAAvBA,uBAAuB;QAuBvBC,iBAAiB,GAAjBA,iBAAiB;AAxCkB,IAAA,OAAc,WAAd,cAAc,CAAA;AAElC,IAAA,SAAiB,kCAAjB,iBAAiB,EAAA;AACrC,IAAA,KAAM,kCAAN,MAAM,EAAA;AAEXC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACc,IAAA,OAAiB,WAAjB,iBAAiB,CAAA;AAIvC,IAAA,yBAAmC,WAAnC,mCAAmC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOnC,eAAeF,uBAAuB,CAACG,WAAmB,EAAE;IACjE,IAAI;QACF,MAAMC,MAAM,GAAGC,CAAAA,GAAAA,OAAS,AAAmD,CAAA,UAAnD,CAACF,WAAW,EAAE;YAAEG,yBAAyB,EAAE,KAAK;SAAE,CAAC,AAAC;QAC5E,kGAAkG;QAClG,IAAI,CAACF,MAAM,CAACG,iBAAiB,IAAI,CAACH,MAAM,CAACI,gBAAgB,EAAE;YACzD,6CAA6C;YAC7C,OAAOJ,MAAM,CAACK,GAAG,CAACC,SAAS,CAAC;YAE5B,8BAA8B;YAC9B,MAAMC,SAAQ,QAAA,CAACC,UAAU,CACvBC,KAAI,QAAA,CAACC,IAAI,CAACX,WAAW,EAAE,UAAU,CAAC,EAClC;gBAAEY,IAAI,EAAEX,MAAM,CAACK,GAAG;aAA2B,EAC7C;gBAAEO,KAAK,EAAE,KAAK;aAAE,CACjB,CAAC;SACH;KACF,CAAC,OAAOC,KAAK,EAAO;QACnB,gEAAgE;QAChEf,GAAG,CAACgB,GAAG,EAAE,CAAC;QACV,MAAM,IAAIC,OAAY,aAAA,CAAC,CAAC,EAAEF,KAAK,CAACG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;KAC9C;CACF;AAGM,eAAenB,iBAAiB,CACrCE,WAAmB,EACnB,EACEkB,SAAS,CAAA,EAGV,EACqD;IACtD,MAAMrB,uBAAuB,CAACG,WAAW,CAAC,CAAC;IAE3C,2FAA2F;IAC3F,kGAAkG;IAClG,IAAIkB,SAAS,CAACC,QAAQ,CAAC,SAAS,CAAC,EAAE;QACjC,MAAMC,CAAAA,GAAAA,yBAAqB,AAAa,CAAA,sBAAb,CAACpB,WAAW,CAAC,CAAC;KAC1C;IAED,IAAIkB,SAAS,CAACC,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC7B,MAAME,CAAAA,GAAAA,yBAA8B,AAAa,CAAA,+BAAb,CAACrB,WAAW,CAAC,CAAC;KACnD;IAED,kGAAkG;IAClG,OAAOE,CAAAA,GAAAA,OAAS,AAAa,CAAA,UAAb,CAACF,WAAW,CAAC,CAAC;CAC/B"}
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  exports.prebuildAsync = prebuildAsync;
6
6
  var _installAsync = require("../install/installAsync");
7
7
  var _env = require("../utils/env");
8
+ var _nodeEnv = require("../utils/nodeEnv");
8
9
  var _nodeModules = require("../utils/nodeModules");
9
10
  var _ora = require("../utils/ora");
10
11
  var _profile = require("../utils/profile");
@@ -36,6 +37,8 @@ function _interopRequireWildcard(obj) {
36
37
  }
37
38
  const debug = require("debug")("expo:prebuild");
38
39
  async function prebuildAsync(projectRoot, options) {
40
+ (0, _nodeEnv).setNodeEnv("development");
41
+ require("@expo/env").load(projectRoot);
39
42
  if (options.clean) {
40
43
  const { maybeBailOnGitStatusAsync } = await Promise.resolve().then(function() {
41
44
  return _interopRequireWildcard(require("../utils/git"));
@@ -68,12 +71,14 @@ async function prebuildAsync(projectRoot, options) {
68
71
  });
69
72
  // Install node modules
70
73
  if (options.install) {
71
- var ref;
74
+ var ref, ref1, ref2, ref3;
72
75
  if (hasNewDependencies && ((ref = options.packageManager) == null ? void 0 : ref.npm)) {
73
76
  await (0, _nodeModules).clearNodeModulesAsync(projectRoot);
74
77
  }
75
78
  await (0, _installAsync).installAsync([], {
76
- ...options.packageManager,
79
+ npm: !!((ref1 = options.packageManager) == null ? void 0 : ref1.npm),
80
+ yarn: !!((ref2 = options.packageManager) == null ? void 0 : ref2.yarn),
81
+ pnpm: !!((ref3 = options.packageManager) == null ? void 0 : ref3.pnpm),
77
82
  silent: !_env.env.EXPO_DEBUG
78
83
  });
79
84
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/prebuild/prebuildAsync.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport { ModPlatform } from '@expo/config-plugins';\n\nimport { installAsync } from '../install/installAsync';\nimport { env } from '../utils/env';\nimport { clearNodeModulesAsync } from '../utils/nodeModules';\nimport { logNewSection } from '../utils/ora';\nimport { profile } from '../utils/profile';\nimport { clearNativeFolder, promptToClearMalformedNativeProjectsAsync } from './clearNativeFolder';\nimport { configureProjectAsync } from './configureProjectAsync';\nimport { ensureConfigAsync } from './ensureConfigAsync';\nimport { assertPlatforms, ensureValidPlatforms, resolveTemplateOption } from './resolveOptions';\nimport { updateFromTemplateAsync } from './updateFromTemplate';\n\nconst debug = require('debug')('expo:prebuild') as typeof console.log;\n\nexport type PrebuildResults = {\n /** Expo config. */\n exp: ExpoConfig;\n /** Indicates if the process created new files. */\n hasNewProjectFiles: boolean;\n /** The platforms that were prebuilt. */\n platforms: ModPlatform[];\n /** Indicates if pod install was run. */\n podInstall: boolean;\n /** Indicates if node modules were installed. */\n nodeInstall: boolean;\n};\n\n/**\n * Entry point into the prebuild process, delegates to other helpers to perform various steps.\n *\n * 0. Attempt to clean the project folders.\n * 1. Create native projects (ios, android).\n * 2. Install node modules.\n * 3. Apply config to native projects.\n * 4. Install CocoaPods.\n */\nexport async function prebuildAsync(\n projectRoot: string,\n options: {\n /** Should install node modules and cocoapods. */\n install?: boolean;\n /** List of platforms to prebuild. */\n platforms: ModPlatform[];\n /** Should delete the native folders before attempting to prebuild. */\n clean?: boolean;\n /** URL or file path to the prebuild template. */\n template?: string;\n /** Name of the node package manager to install with. */\n packageManager?: {\n npm?: boolean;\n yarn?: boolean;\n pnpm?: boolean;\n };\n /** List of node modules to skip updating. */\n skipDependencyUpdate?: string[];\n }\n): Promise<PrebuildResults | null> {\n if (options.clean) {\n const { maybeBailOnGitStatusAsync } = await import('../utils/git');\n // Clean the project folders...\n if (await maybeBailOnGitStatusAsync()) {\n return null;\n }\n // Clear the native folders before syncing\n await clearNativeFolder(projectRoot, options.platforms);\n } else {\n // Check if the existing project folders are malformed.\n await promptToClearMalformedNativeProjectsAsync(projectRoot, options.platforms);\n }\n\n // Warn if the project is attempting to prebuild an unsupported platform (iOS on Windows).\n options.platforms = ensureValidPlatforms(options.platforms);\n // Assert if no platforms are left over after filtering.\n assertPlatforms(options.platforms);\n\n // Get the Expo config, create it if missing.\n const { exp, pkg } = await ensureConfigAsync(projectRoot, { platforms: options.platforms });\n\n // Create native projects from template.\n const { hasNewProjectFiles, needsPodInstall, hasNewDependencies } = await updateFromTemplateAsync(\n projectRoot,\n {\n exp,\n pkg,\n template: options.template != null ? resolveTemplateOption(options.template) : undefined,\n platforms: options.platforms,\n skipDependencyUpdate: options.skipDependencyUpdate,\n }\n );\n\n // Install node modules\n if (options.install) {\n if (hasNewDependencies && options.packageManager?.npm) {\n await clearNodeModulesAsync(projectRoot);\n }\n\n await installAsync([], {\n ...options.packageManager,\n silent: !env.EXPO_DEBUG,\n });\n }\n\n // Apply Expo config to native projects\n const configSyncingStep = logNewSection('Config syncing');\n try {\n await profile(configureProjectAsync)(projectRoot, {\n platforms: options.platforms,\n });\n configSyncingStep.succeed('Config synced');\n } catch (error) {\n configSyncingStep.fail('Config sync failed');\n throw error;\n }\n\n // Install CocoaPods\n let podsInstalled: boolean = false;\n // err towards running pod install less because it's slow and users can easily run npx pod-install afterwards.\n if (options.platforms.includes('ios') && options.install && needsPodInstall) {\n const { installCocoaPodsAsync } = await import('../utils/cocoapods');\n\n podsInstalled = await installCocoaPodsAsync(projectRoot);\n } else {\n debug('Skipped pod install');\n }\n\n return {\n nodeInstall: !!options.install,\n podInstall: !podsInstalled,\n platforms: options.platforms,\n hasNewProjectFiles,\n exp,\n };\n}\n"],"names":["prebuildAsync","debug","require","projectRoot","options","clean","maybeBailOnGitStatusAsync","clearNativeFolder","platforms","promptToClearMalformedNativeProjectsAsync","ensureValidPlatforms","assertPlatforms","exp","pkg","ensureConfigAsync","hasNewProjectFiles","needsPodInstall","hasNewDependencies","updateFromTemplateAsync","template","resolveTemplateOption","undefined","skipDependencyUpdate","install","packageManager","npm","clearNodeModulesAsync","installAsync","silent","env","EXPO_DEBUG","configSyncingStep","logNewSection","profile","configureProjectAsync","succeed","error","fail","podsInstalled","includes","installCocoaPodsAsync","nodeInstall","podInstall"],"mappings":"AAAA;;;;QAsCsBA,aAAa,GAAbA,aAAa;AAnCN,IAAA,aAAyB,WAAzB,yBAAyB,CAAA;AAClC,IAAA,IAAc,WAAd,cAAc,CAAA;AACI,IAAA,YAAsB,WAAtB,sBAAsB,CAAA;AAC9B,IAAA,IAAc,WAAd,cAAc,CAAA;AACpB,IAAA,QAAkB,WAAlB,kBAAkB,CAAA;AACmC,IAAA,kBAAqB,WAArB,qBAAqB,CAAA;AAC5D,IAAA,sBAAyB,WAAzB,yBAAyB,CAAA;AAC7B,IAAA,kBAAqB,WAArB,qBAAqB,CAAA;AACsB,IAAA,eAAkB,WAAlB,kBAAkB,CAAA;AACvD,IAAA,mBAAsB,WAAtB,sBAAsB,CAAA;;;;;;;;;;;;;;;;;;;;;;AAE9D,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,AAAsB,AAAC;AAwB/D,eAAeF,aAAa,CACjCG,WAAmB,EACnBC,OAiBC,EACgC;IACjC,IAAIA,OAAO,CAACC,KAAK,EAAE;QACjB,MAAM,EAAEC,yBAAyB,CAAA,EAAE,GAAG,MAAM;mDAAO,cAAc;UAAC,AAAC;QACnE,+BAA+B;QAC/B,IAAI,MAAMA,yBAAyB,EAAE,EAAE;YACrC,OAAO,IAAI,CAAC;SACb;QACD,0CAA0C;QAC1C,MAAMC,CAAAA,GAAAA,kBAAiB,AAAgC,CAAA,kBAAhC,CAACJ,WAAW,EAAEC,OAAO,CAACI,SAAS,CAAC,CAAC;KACzD,MAAM;QACL,uDAAuD;QACvD,MAAMC,CAAAA,GAAAA,kBAAyC,AAAgC,CAAA,0CAAhC,CAACN,WAAW,EAAEC,OAAO,CAACI,SAAS,CAAC,CAAC;KACjF;IAED,0FAA0F;IAC1FJ,OAAO,CAACI,SAAS,GAAGE,CAAAA,GAAAA,eAAoB,AAAmB,CAAA,qBAAnB,CAACN,OAAO,CAACI,SAAS,CAAC,CAAC;IAC5D,wDAAwD;IACxDG,CAAAA,GAAAA,eAAe,AAAmB,CAAA,gBAAnB,CAACP,OAAO,CAACI,SAAS,CAAC,CAAC;IAEnC,6CAA6C;IAC7C,MAAM,EAAEI,GAAG,CAAA,EAAEC,GAAG,CAAA,EAAE,GAAG,MAAMC,CAAAA,GAAAA,kBAAiB,AAA+C,CAAA,kBAA/C,CAACX,WAAW,EAAE;QAAEK,SAAS,EAAEJ,OAAO,CAACI,SAAS;KAAE,CAAC,AAAC;IAE5F,wCAAwC;IACxC,MAAM,EAAEO,kBAAkB,CAAA,EAAEC,eAAe,CAAA,EAAEC,kBAAkB,CAAA,EAAE,GAAG,MAAMC,CAAAA,GAAAA,mBAAuB,AAShG,CAAA,wBATgG,CAC/Ff,WAAW,EACX;QACES,GAAG;QACHC,GAAG;QACHM,QAAQ,EAAEf,OAAO,CAACe,QAAQ,IAAI,IAAI,GAAGC,CAAAA,GAAAA,eAAqB,AAAkB,CAAA,sBAAlB,CAAChB,OAAO,CAACe,QAAQ,CAAC,GAAGE,SAAS;QACxFb,SAAS,EAAEJ,OAAO,CAACI,SAAS;QAC5Bc,oBAAoB,EAAElB,OAAO,CAACkB,oBAAoB;KACnD,CACF,AAAC;IAEF,uBAAuB;IACvB,IAAIlB,OAAO,CAACmB,OAAO,EAAE;YACOnB,GAAsB;QAAhD,IAAIa,kBAAkB,IAAIb,CAAAA,CAAAA,GAAsB,GAAtBA,OAAO,CAACoB,cAAc,SAAK,GAA3BpB,KAAAA,CAA2B,GAA3BA,GAAsB,CAAEqB,GAAG,CAAA,EAAE;YACrD,MAAMC,CAAAA,GAAAA,YAAqB,AAAa,CAAA,sBAAb,CAACvB,WAAW,CAAC,CAAC;SAC1C;QAED,MAAMwB,CAAAA,GAAAA,aAAY,AAGhB,CAAA,aAHgB,CAAC,EAAE,EAAE;YACrB,GAAGvB,OAAO,CAACoB,cAAc;YACzBI,MAAM,EAAE,CAACC,IAAG,IAAA,CAACC,UAAU;SACxB,CAAC,CAAC;KACJ;IAED,uCAAuC;IACvC,MAAMC,iBAAiB,GAAGC,CAAAA,GAAAA,IAAa,AAAkB,CAAA,cAAlB,CAAC,gBAAgB,CAAC,AAAC;IAC1D,IAAI;QACF,MAAMC,CAAAA,GAAAA,QAAO,AAAuB,CAAA,QAAvB,CAACC,sBAAqB,sBAAA,CAAC,CAAC/B,WAAW,EAAE;YAChDK,SAAS,EAAEJ,OAAO,CAACI,SAAS;SAC7B,CAAC,CAAC;QACHuB,iBAAiB,CAACI,OAAO,CAAC,eAAe,CAAC,CAAC;KAC5C,CAAC,OAAOC,KAAK,EAAE;QACdL,iBAAiB,CAACM,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC7C,MAAMD,KAAK,CAAC;KACb;IAED,oBAAoB;IACpB,IAAIE,aAAa,GAAY,KAAK,AAAC;IACnC,8GAA8G;IAC9G,IAAIlC,OAAO,CAACI,SAAS,CAAC+B,QAAQ,CAAC,KAAK,CAAC,IAAInC,OAAO,CAACmB,OAAO,IAAIP,eAAe,EAAE;QAC3E,MAAM,EAAEwB,qBAAqB,CAAA,EAAE,GAAG,MAAM;mDAAO,oBAAoB;UAAC,AAAC;QAErEF,aAAa,GAAG,MAAME,qBAAqB,CAACrC,WAAW,CAAC,CAAC;KAC1D,MAAM;QACLF,KAAK,CAAC,qBAAqB,CAAC,CAAC;KAC9B;IAED,OAAO;QACLwC,WAAW,EAAE,CAAC,CAACrC,OAAO,CAACmB,OAAO;QAC9BmB,UAAU,EAAE,CAACJ,aAAa;QAC1B9B,SAAS,EAAEJ,OAAO,CAACI,SAAS;QAC5BO,kBAAkB;QAClBH,GAAG;KACJ,CAAC;CACH"}
1
+ {"version":3,"sources":["../../../src/prebuild/prebuildAsync.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport { ModPlatform } from '@expo/config-plugins';\n\nimport { installAsync } from '../install/installAsync';\nimport { env } from '../utils/env';\nimport { setNodeEnv } from '../utils/nodeEnv';\nimport { clearNodeModulesAsync } from '../utils/nodeModules';\nimport { logNewSection } from '../utils/ora';\nimport { profile } from '../utils/profile';\nimport { clearNativeFolder, promptToClearMalformedNativeProjectsAsync } from './clearNativeFolder';\nimport { configureProjectAsync } from './configureProjectAsync';\nimport { ensureConfigAsync } from './ensureConfigAsync';\nimport { assertPlatforms, ensureValidPlatforms, resolveTemplateOption } from './resolveOptions';\nimport { updateFromTemplateAsync } from './updateFromTemplate';\n\nconst debug = require('debug')('expo:prebuild') as typeof console.log;\n\nexport type PrebuildResults = {\n /** Expo config. */\n exp: ExpoConfig;\n /** Indicates if the process created new files. */\n hasNewProjectFiles: boolean;\n /** The platforms that were prebuilt. */\n platforms: ModPlatform[];\n /** Indicates if pod install was run. */\n podInstall: boolean;\n /** Indicates if node modules were installed. */\n nodeInstall: boolean;\n};\n\n/**\n * Entry point into the prebuild process, delegates to other helpers to perform various steps.\n *\n * 0. Attempt to clean the project folders.\n * 1. Create native projects (ios, android).\n * 2. Install node modules.\n * 3. Apply config to native projects.\n * 4. Install CocoaPods.\n */\nexport async function prebuildAsync(\n projectRoot: string,\n options: {\n /** Should install node modules and cocoapods. */\n install?: boolean;\n /** List of platforms to prebuild. */\n platforms: ModPlatform[];\n /** Should delete the native folders before attempting to prebuild. */\n clean?: boolean;\n /** URL or file path to the prebuild template. */\n template?: string;\n /** Name of the node package manager to install with. */\n packageManager?: {\n npm?: boolean;\n yarn?: boolean;\n pnpm?: boolean;\n };\n /** List of node modules to skip updating. */\n skipDependencyUpdate?: string[];\n }\n): Promise<PrebuildResults | null> {\n setNodeEnv('development');\n require('@expo/env').load(projectRoot);\n\n if (options.clean) {\n const { maybeBailOnGitStatusAsync } = await import('../utils/git');\n // Clean the project folders...\n if (await maybeBailOnGitStatusAsync()) {\n return null;\n }\n // Clear the native folders before syncing\n await clearNativeFolder(projectRoot, options.platforms);\n } else {\n // Check if the existing project folders are malformed.\n await promptToClearMalformedNativeProjectsAsync(projectRoot, options.platforms);\n }\n\n // Warn if the project is attempting to prebuild an unsupported platform (iOS on Windows).\n options.platforms = ensureValidPlatforms(options.platforms);\n // Assert if no platforms are left over after filtering.\n assertPlatforms(options.platforms);\n\n // Get the Expo config, create it if missing.\n const { exp, pkg } = await ensureConfigAsync(projectRoot, { platforms: options.platforms });\n\n // Create native projects from template.\n const { hasNewProjectFiles, needsPodInstall, hasNewDependencies } = await updateFromTemplateAsync(\n projectRoot,\n {\n exp,\n pkg,\n template: options.template != null ? resolveTemplateOption(options.template) : undefined,\n platforms: options.platforms,\n skipDependencyUpdate: options.skipDependencyUpdate,\n }\n );\n\n // Install node modules\n if (options.install) {\n if (hasNewDependencies && options.packageManager?.npm) {\n await clearNodeModulesAsync(projectRoot);\n }\n\n await installAsync([], {\n npm: !!options.packageManager?.npm,\n yarn: !!options.packageManager?.yarn,\n pnpm: !!options.packageManager?.pnpm,\n silent: !env.EXPO_DEBUG,\n });\n }\n\n // Apply Expo config to native projects\n const configSyncingStep = logNewSection('Config syncing');\n try {\n await profile(configureProjectAsync)(projectRoot, {\n platforms: options.platforms,\n });\n configSyncingStep.succeed('Config synced');\n } catch (error) {\n configSyncingStep.fail('Config sync failed');\n throw error;\n }\n\n // Install CocoaPods\n let podsInstalled: boolean = false;\n // err towards running pod install less because it's slow and users can easily run npx pod-install afterwards.\n if (options.platforms.includes('ios') && options.install && needsPodInstall) {\n const { installCocoaPodsAsync } = await import('../utils/cocoapods');\n\n podsInstalled = await installCocoaPodsAsync(projectRoot);\n } else {\n debug('Skipped pod install');\n }\n\n return {\n nodeInstall: !!options.install,\n podInstall: !podsInstalled,\n platforms: options.platforms,\n hasNewProjectFiles,\n exp,\n };\n}\n"],"names":["prebuildAsync","debug","require","projectRoot","options","setNodeEnv","load","clean","maybeBailOnGitStatusAsync","clearNativeFolder","platforms","promptToClearMalformedNativeProjectsAsync","ensureValidPlatforms","assertPlatforms","exp","pkg","ensureConfigAsync","hasNewProjectFiles","needsPodInstall","hasNewDependencies","updateFromTemplateAsync","template","resolveTemplateOption","undefined","skipDependencyUpdate","install","packageManager","npm","clearNodeModulesAsync","installAsync","yarn","pnpm","silent","env","EXPO_DEBUG","configSyncingStep","logNewSection","profile","configureProjectAsync","succeed","error","fail","podsInstalled","includes","installCocoaPodsAsync","nodeInstall","podInstall"],"mappings":"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"}
@@ -83,17 +83,16 @@ function resolvePlatformOption(platform = "all", { loose } = {}) {
83
83
  "android"
84
84
  ];
85
85
  case "all":
86
- if (loose || process.platform !== "win32") {
87
- return [
88
- "android",
89
- "ios"
90
- ];
91
- }
92
- return [
86
+ return loose || process.platform !== "win32" ? [
87
+ "android",
88
+ "ios"
89
+ ] : [
93
90
  "android"
94
91
  ];
95
92
  default:
96
- throw new _errors.CommandError(`Unsupported platform "${platform}". Options are: ios, android, all`);
93
+ return [
94
+ platform
95
+ ];
97
96
  }
98
97
  }
99
98
  function ensureValidPlatforms(platforms) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/prebuild/resolveOptions.ts"],"sourcesContent":["import { ModPlatform } from '@expo/config-plugins';\nimport assert from 'assert';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\n\nimport * as Log from '../log';\nimport { CommandError } from '../utils/errors';\nimport { validateUrl } from '../utils/url';\n\nexport function resolvePackageManagerOptions(args: any) {\n const managers: Record<string, boolean> = {\n npm: args['--npm'],\n yarn: args['--yarn'],\n pnpm: args['--pnpm'],\n };\n\n if (\n [managers.npm, managers.pnpm, managers.yarn, !!args['--no-install']].filter(Boolean).length > 1\n ) {\n throw new CommandError(\n 'BAD_ARGS',\n 'Specify at most one of: --no-install, --npm, --pnpm, --yarn'\n );\n }\n\n return managers;\n}\n\n/** Resolves a template option as a URL or file path pointing to a tar file. */\nexport function resolveTemplateOption(template: string) {\n if (validateUrl(template)) {\n return template;\n }\n const templatePath = path.resolve(template);\n assert(fs.existsSync(templatePath), 'template file does not exist: ' + templatePath);\n assert(\n fs.statSync(templatePath).isFile(),\n 'template must be a tar file created by running `npm pack` in a project: ' + templatePath\n );\n\n return templatePath;\n}\n\n/** Resolves dependencies to skip from a string joined by `,`. Example: `react-native,expo,lodash` */\nexport function resolveSkipDependencyUpdate(value: any) {\n if (!value || typeof value !== 'string') {\n return [];\n }\n return value.split(',');\n}\n\n/** Returns an array of platforms based on the input platform identifier and runtime constraints. */\nexport function resolvePlatformOption(\n platform: string = 'all',\n { loose }: { loose?: boolean } = {}\n): ModPlatform[] {\n switch (platform) {\n case 'ios':\n return ['ios'];\n case 'android':\n return ['android'];\n case 'all':\n if (loose || process.platform !== 'win32') {\n return ['android', 'ios'];\n }\n return ['android'];\n default:\n throw new CommandError(`Unsupported platform \"${platform}\". Options are: ios, android, all`);\n }\n}\n\n/** Warns and filters out unsupported platforms based on the runtime constraints. Essentially this means no iOS on Windows devices. */\nexport function ensureValidPlatforms(platforms: ModPlatform[]): ModPlatform[] {\n // Skip ejecting for iOS on Windows\n if (process.platform === 'win32' && platforms.includes('ios')) {\n Log.warn(\n chalk`⚠️ Skipping generating the iOS native project files. Run {bold expo eject} again from macOS or Linux to generate the iOS project.\\n`\n );\n return platforms.filter((platform) => platform !== 'ios');\n }\n return platforms;\n}\n\n/** Asserts platform length must be greater than zero. */\nexport function assertPlatforms(platforms: ModPlatform[]) {\n if (!platforms?.length) {\n throw new CommandError('At least one platform must be enabled when syncing');\n }\n}\n"],"names":["resolvePackageManagerOptions","resolveTemplateOption","resolveSkipDependencyUpdate","resolvePlatformOption","ensureValidPlatforms","assertPlatforms","Log","args","managers","npm","yarn","pnpm","filter","Boolean","length","CommandError","template","validateUrl","templatePath","path","resolve","assert","fs","existsSync","statSync","isFile","value","split","platform","loose","process","platforms","includes","warn","chalk"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/prebuild/resolveOptions.ts"],"sourcesContent":["import { ModPlatform } from '@expo/config-plugins';\nimport assert from 'assert';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\n\nimport * as Log from '../log';\nimport { CommandError } from '../utils/errors';\nimport { validateUrl } from '../utils/url';\n\nexport function resolvePackageManagerOptions(args: any) {\n const managers: Record<string, boolean> = {\n npm: args['--npm'],\n yarn: args['--yarn'],\n pnpm: args['--pnpm'],\n };\n\n if (\n [managers.npm, managers.pnpm, managers.yarn, !!args['--no-install']].filter(Boolean).length > 1\n ) {\n throw new CommandError(\n 'BAD_ARGS',\n 'Specify at most one of: --no-install, --npm, --pnpm, --yarn'\n );\n }\n\n return managers;\n}\n\n/** Resolves a template option as a URL or file path pointing to a tar file. */\nexport function resolveTemplateOption(template: string) {\n if (validateUrl(template)) {\n return template;\n }\n const templatePath = path.resolve(template);\n assert(fs.existsSync(templatePath), 'template file does not exist: ' + templatePath);\n assert(\n fs.statSync(templatePath).isFile(),\n 'template must be a tar file created by running `npm pack` in a project: ' + templatePath\n );\n\n return templatePath;\n}\n\n/** Resolves dependencies to skip from a string joined by `,`. Example: `react-native,expo,lodash` */\nexport function resolveSkipDependencyUpdate(value: any) {\n if (!value || typeof value !== 'string') {\n return [];\n }\n return value.split(',');\n}\n\n/** Returns an array of platforms based on the input platform identifier and runtime constraints. */\nexport function resolvePlatformOption(\n platform: string = 'all',\n { loose }: { loose?: boolean } = {}\n): ModPlatform[] {\n switch (platform) {\n case 'ios':\n return ['ios'];\n case 'android':\n return ['android'];\n case 'all':\n return loose || process.platform !== 'win32' ? ['android', 'ios'] : ['android'];\n default:\n return [platform as ModPlatform];\n }\n}\n\n/** Warns and filters out unsupported platforms based on the runtime constraints. Essentially this means no iOS on Windows devices. */\nexport function ensureValidPlatforms(platforms: ModPlatform[]): ModPlatform[] {\n // Skip ejecting for iOS on Windows\n if (process.platform === 'win32' && platforms.includes('ios')) {\n Log.warn(\n chalk`⚠️ Skipping generating the iOS native project files. Run {bold expo eject} again from macOS or Linux to generate the iOS project.\\n`\n );\n return platforms.filter((platform) => platform !== 'ios');\n }\n return platforms;\n}\n\n/** Asserts platform length must be greater than zero. */\nexport function assertPlatforms(platforms: ModPlatform[]) {\n if (!platforms?.length) {\n throw new CommandError('At least one platform must be enabled when syncing');\n }\n}\n"],"names":["resolvePackageManagerOptions","resolveTemplateOption","resolveSkipDependencyUpdate","resolvePlatformOption","ensureValidPlatforms","assertPlatforms","Log","args","managers","npm","yarn","pnpm","filter","Boolean","length","CommandError","template","validateUrl","templatePath","path","resolve","assert","fs","existsSync","statSync","isFile","value","split","platform","loose","process","platforms","includes","warn","chalk"],"mappings":"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"}
@@ -122,6 +122,11 @@ async function resolveTemplateArgAsync(templateDirectory, oraInstance, appName,
122
122
  throw error;
123
123
  }
124
124
  }
125
+ // On Windows, we can actually create a URL from a local path
126
+ // Double-check if the created URL is not a path to avoid mixing up URLs and paths
127
+ if (process.platform === "win32" && repoUrl && _path.default.isAbsolute(repoUrl.toString())) {
128
+ repoUrl = undefined;
129
+ }
125
130
  if (!repoUrl) {
126
131
  const templatePath = _path.default.resolve(template);
127
132
  if (!_fs.default.existsSync(templatePath)) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/prebuild/resolveTemplate.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport { Ora } from 'ora';\nimport path from 'path';\nimport semver from 'semver';\n\nimport { fetchAsync } from '../api/rest/client';\nimport * as Log from '../log';\nimport { AbortCommandError, CommandError } from '../utils/errors';\nimport {\n downloadAndExtractNpmModuleAsync,\n extractLocalNpmTarballAsync,\n extractNpmTarballFromUrlAsync,\n} from '../utils/npm';\nimport { isUrlOk } from '../utils/url';\n\nconst debug = require('debug')('expo:prebuild:resolveTemplate') as typeof console.log;\n\ntype RepoInfo = {\n username: string;\n name: string;\n branch: string;\n filePath: string;\n};\n\nexport async function cloneTemplateAsync({\n templateDirectory,\n template,\n exp,\n ora,\n}: {\n templateDirectory: string;\n template?: string;\n exp: Pick<ExpoConfig, 'name' | 'sdkVersion'>;\n ora: Ora;\n}) {\n if (template) {\n await resolveTemplateArgAsync(templateDirectory, ora, exp.name, template);\n } else {\n const templatePackageName = await getTemplateNpmPackageName(exp.sdkVersion);\n await downloadAndExtractNpmModuleAsync(templatePackageName, {\n cwd: templateDirectory,\n name: exp.name,\n });\n }\n}\n\n/** Given an `sdkVersion` like `44.0.0` return a fully qualified NPM package name like: `expo-template-bare-minimum@sdk-44` */\nfunction getTemplateNpmPackageName(sdkVersion?: string): string {\n // When undefined or UNVERSIONED, we use the latest version.\n if (!sdkVersion || sdkVersion === 'UNVERSIONED') {\n Log.log('Using an unspecified Expo SDK version. The latest template will be used.');\n return `expo-template-bare-minimum@latest`;\n }\n return `expo-template-bare-minimum@sdk-${semver.major(sdkVersion)}`;\n}\n\nasync function getRepoInfo(url: any, examplePath?: string): Promise<RepoInfo | undefined> {\n const [, username, name, t, _branch, ...file] = url.pathname.split('/');\n const filePath = examplePath ? examplePath.replace(/^\\//, '') : file.join('/');\n\n // Support repos whose entire purpose is to be an example, e.g.\n // https://github.com/:username/:my-cool-example-repo-name.\n if (t === undefined) {\n const infoResponse = await fetchAsync(`https://api.github.com/repos/${username}/${name}`);\n if (infoResponse.status !== 200) {\n return;\n }\n const info = await infoResponse.json();\n return { username, name, branch: info['default_branch'], filePath };\n }\n\n // If examplePath is available, the branch name takes the entire path\n const branch = examplePath\n ? `${_branch}/${file.join('/')}`.replace(new RegExp(`/${filePath}|/$`), '')\n : _branch;\n\n if (username && name && branch && t === 'tree') {\n return { username, name, branch, filePath };\n }\n return undefined;\n}\n\nfunction hasRepo({ username, name, branch, filePath }: RepoInfo) {\n const contentsUrl = `https://api.github.com/repos/${username}/${name}/contents`;\n const packagePath = `${filePath ? `/${filePath}` : ''}/package.json`;\n\n return isUrlOk(contentsUrl + packagePath + `?ref=${branch}`);\n}\n\nasync function downloadAndExtractRepoAsync(\n root: string,\n { username, name, branch, filePath }: RepoInfo\n): Promise<void> {\n const projectName = path.basename(root);\n\n const strip = filePath ? filePath.split('/').length + 1 : 1;\n\n const url = `https://codeload.github.com/${username}/${name}/tar.gz/${branch}`;\n debug('Downloading tarball from:', url);\n await extractNpmTarballFromUrlAsync(url, {\n cwd: root,\n name: projectName,\n strip,\n fileList: [`${name}-${branch}${filePath ? `/${filePath}` : ''}`],\n });\n}\n\nexport async function resolveTemplateArgAsync(\n templateDirectory: string,\n oraInstance: Ora,\n appName: string,\n template: string,\n templatePath?: string\n) {\n let repoInfo: RepoInfo | undefined;\n\n if (template) {\n // @ts-ignore\n let repoUrl: URL | undefined;\n\n try {\n // @ts-ignore\n repoUrl = new URL(template);\n } catch (error: any) {\n if (error.code !== 'ERR_INVALID_URL') {\n oraInstance.fail(error);\n throw error;\n }\n }\n\n if (!repoUrl) {\n const templatePath = path.resolve(template);\n if (!fs.existsSync(templatePath)) {\n throw new CommandError(`template file does not exist: ${templatePath}`);\n }\n\n await extractLocalNpmTarballAsync(templatePath, { cwd: templateDirectory, name: appName });\n return templateDirectory;\n }\n\n if (repoUrl.origin !== 'https://github.com') {\n oraInstance.fail(\n `Invalid URL: ${chalk.red(\n `\"${template}\"`\n )}. Only GitHub repositories are supported. Please use a GitHub URL and try again.`\n );\n throw new AbortCommandError();\n }\n\n repoInfo = await getRepoInfo(repoUrl, templatePath);\n\n if (!repoInfo) {\n oraInstance.fail(\n `Found invalid GitHub URL: ${chalk.red(`\"${template}\"`)}. Please fix the URL and try again.`\n );\n throw new AbortCommandError();\n }\n\n const found = await hasRepo(repoInfo);\n\n if (!found) {\n oraInstance.fail(\n `Could not locate the repository for ${chalk.red(\n `\"${template}\"`\n )}. Please check that the repository exists and try again.`\n );\n throw new AbortCommandError();\n }\n }\n\n if (repoInfo) {\n oraInstance.text = chalk.bold(\n `Downloading files from repo ${chalk.cyan(template)}. This might take a moment.`\n );\n\n await downloadAndExtractRepoAsync(templateDirectory, repoInfo);\n }\n\n return true;\n}\n"],"names":["cloneTemplateAsync","resolveTemplateArgAsync","Log","debug","require","templateDirectory","template","exp","ora","name","templatePackageName","getTemplateNpmPackageName","sdkVersion","downloadAndExtractNpmModuleAsync","cwd","log","semver","major","getRepoInfo","url","examplePath","username","t","_branch","file","pathname","split","filePath","replace","join","undefined","infoResponse","fetchAsync","status","info","json","branch","RegExp","hasRepo","contentsUrl","packagePath","isUrlOk","downloadAndExtractRepoAsync","root","projectName","path","basename","strip","length","extractNpmTarballFromUrlAsync","fileList","oraInstance","appName","templatePath","repoInfo","repoUrl","URL","error","code","fail","resolve","fs","existsSync","CommandError","extractLocalNpmTarballAsync","origin","chalk","red","AbortCommandError","found","text","bold","cyan"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/prebuild/resolveTemplate.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport { Ora } from 'ora';\nimport path from 'path';\nimport semver from 'semver';\n\nimport { fetchAsync } from '../api/rest/client';\nimport * as Log from '../log';\nimport { AbortCommandError, CommandError } from '../utils/errors';\nimport {\n downloadAndExtractNpmModuleAsync,\n extractLocalNpmTarballAsync,\n extractNpmTarballFromUrlAsync,\n} from '../utils/npm';\nimport { isUrlOk } from '../utils/url';\n\nconst debug = require('debug')('expo:prebuild:resolveTemplate') as typeof console.log;\n\ntype RepoInfo = {\n username: string;\n name: string;\n branch: string;\n filePath: string;\n};\n\nexport async function cloneTemplateAsync({\n templateDirectory,\n template,\n exp,\n ora,\n}: {\n templateDirectory: string;\n template?: string;\n exp: Pick<ExpoConfig, 'name' | 'sdkVersion'>;\n ora: Ora;\n}) {\n if (template) {\n await resolveTemplateArgAsync(templateDirectory, ora, exp.name, template);\n } else {\n const templatePackageName = await getTemplateNpmPackageName(exp.sdkVersion);\n await downloadAndExtractNpmModuleAsync(templatePackageName, {\n cwd: templateDirectory,\n name: exp.name,\n });\n }\n}\n\n/** Given an `sdkVersion` like `44.0.0` return a fully qualified NPM package name like: `expo-template-bare-minimum@sdk-44` */\nfunction getTemplateNpmPackageName(sdkVersion?: string): string {\n // When undefined or UNVERSIONED, we use the latest version.\n if (!sdkVersion || sdkVersion === 'UNVERSIONED') {\n Log.log('Using an unspecified Expo SDK version. The latest template will be used.');\n return `expo-template-bare-minimum@latest`;\n }\n return `expo-template-bare-minimum@sdk-${semver.major(sdkVersion)}`;\n}\n\nasync function getRepoInfo(url: any, examplePath?: string): Promise<RepoInfo | undefined> {\n const [, username, name, t, _branch, ...file] = url.pathname.split('/');\n const filePath = examplePath ? examplePath.replace(/^\\//, '') : file.join('/');\n\n // Support repos whose entire purpose is to be an example, e.g.\n // https://github.com/:username/:my-cool-example-repo-name.\n if (t === undefined) {\n const infoResponse = await fetchAsync(`https://api.github.com/repos/${username}/${name}`);\n if (infoResponse.status !== 200) {\n return;\n }\n const info = await infoResponse.json();\n return { username, name, branch: info['default_branch'], filePath };\n }\n\n // If examplePath is available, the branch name takes the entire path\n const branch = examplePath\n ? `${_branch}/${file.join('/')}`.replace(new RegExp(`/${filePath}|/$`), '')\n : _branch;\n\n if (username && name && branch && t === 'tree') {\n return { username, name, branch, filePath };\n }\n return undefined;\n}\n\nfunction hasRepo({ username, name, branch, filePath }: RepoInfo) {\n const contentsUrl = `https://api.github.com/repos/${username}/${name}/contents`;\n const packagePath = `${filePath ? `/${filePath}` : ''}/package.json`;\n\n return isUrlOk(contentsUrl + packagePath + `?ref=${branch}`);\n}\n\nasync function downloadAndExtractRepoAsync(\n root: string,\n { username, name, branch, filePath }: RepoInfo\n): Promise<void> {\n const projectName = path.basename(root);\n\n const strip = filePath ? filePath.split('/').length + 1 : 1;\n\n const url = `https://codeload.github.com/${username}/${name}/tar.gz/${branch}`;\n debug('Downloading tarball from:', url);\n await extractNpmTarballFromUrlAsync(url, {\n cwd: root,\n name: projectName,\n strip,\n fileList: [`${name}-${branch}${filePath ? `/${filePath}` : ''}`],\n });\n}\n\nexport async function resolveTemplateArgAsync(\n templateDirectory: string,\n oraInstance: Ora,\n appName: string,\n template: string,\n templatePath?: string\n) {\n let repoInfo: RepoInfo | undefined;\n\n if (template) {\n // @ts-ignore\n let repoUrl: URL | undefined;\n\n try {\n // @ts-ignore\n repoUrl = new URL(template);\n } catch (error: any) {\n if (error.code !== 'ERR_INVALID_URL') {\n oraInstance.fail(error);\n throw error;\n }\n }\n\n // On Windows, we can actually create a URL from a local path\n // Double-check if the created URL is not a path to avoid mixing up URLs and paths\n if (process.platform === 'win32' && repoUrl && path.isAbsolute(repoUrl.toString())) {\n repoUrl = undefined;\n }\n\n if (!repoUrl) {\n const templatePath = path.resolve(template);\n if (!fs.existsSync(templatePath)) {\n throw new CommandError(`template file does not exist: ${templatePath}`);\n }\n\n await extractLocalNpmTarballAsync(templatePath, { cwd: templateDirectory, name: appName });\n return templateDirectory;\n }\n\n if (repoUrl.origin !== 'https://github.com') {\n oraInstance.fail(\n `Invalid URL: ${chalk.red(\n `\"${template}\"`\n )}. Only GitHub repositories are supported. Please use a GitHub URL and try again.`\n );\n throw new AbortCommandError();\n }\n\n repoInfo = await getRepoInfo(repoUrl, templatePath);\n\n if (!repoInfo) {\n oraInstance.fail(\n `Found invalid GitHub URL: ${chalk.red(`\"${template}\"`)}. Please fix the URL and try again.`\n );\n throw new AbortCommandError();\n }\n\n const found = await hasRepo(repoInfo);\n\n if (!found) {\n oraInstance.fail(\n `Could not locate the repository for ${chalk.red(\n `\"${template}\"`\n )}. Please check that the repository exists and try again.`\n );\n throw new AbortCommandError();\n }\n }\n\n if (repoInfo) {\n oraInstance.text = chalk.bold(\n `Downloading files from repo ${chalk.cyan(template)}. This might take a moment.`\n );\n\n await downloadAndExtractRepoAsync(templateDirectory, repoInfo);\n }\n\n return true;\n}\n"],"names":["cloneTemplateAsync","resolveTemplateArgAsync","Log","debug","require","templateDirectory","template","exp","ora","name","templatePackageName","getTemplateNpmPackageName","sdkVersion","downloadAndExtractNpmModuleAsync","cwd","log","semver","major","getRepoInfo","url","examplePath","username","t","_branch","file","pathname","split","filePath","replace","join","undefined","infoResponse","fetchAsync","status","info","json","branch","RegExp","hasRepo","contentsUrl","packagePath","isUrlOk","downloadAndExtractRepoAsync","root","projectName","path","basename","strip","length","extractNpmTarballFromUrlAsync","fileList","oraInstance","appName","templatePath","repoInfo","repoUrl","URL","error","code","fail","process","platform","isAbsolute","toString","resolve","fs","existsSync","CommandError","extractLocalNpmTarballAsync","origin","chalk","red","AbortCommandError","found","text","bold","cyan"],"mappings":"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"}
@@ -11,6 +11,7 @@ var _profile = require("../utils/profile");
11
11
  var _copyTemplateFiles = require("./copyTemplateFiles");
12
12
  var _resolveTemplate = require("./resolveTemplate");
13
13
  var _updatePackageJson = require("./updatePackageJson");
14
+ var _validateTemplatePlatforms = require("./validateTemplatePlatforms");
14
15
  var _writeMetroConfig = require("./writeMetroConfig");
15
16
  function _interopRequireDefault(obj) {
16
17
  return obj && obj.__esModule ? obj : {
@@ -73,7 +74,7 @@ async function updateFromTemplateAsync(projectRoot, { exp , pkg , template , tem
73
74
  * Extract the template and copy the ios and android directories over to the project directory.
74
75
  *
75
76
  * @return `true` if any project files were created.
76
- */ async function cloneTemplateAndCopyToProjectAsync({ projectRoot , templateDirectory , template , exp , pkg , platforms }) {
77
+ */ async function cloneTemplateAndCopyToProjectAsync({ projectRoot , templateDirectory , template , exp , pkg , platforms: unknownPlatforms }) {
77
78
  const ora = (0, _ora).logNewSection("Creating native project directories (./ios and ./android) and updating .gitignore");
78
79
  try {
79
80
  await (0, _resolveTemplate).cloneTemplateAsync({
@@ -82,6 +83,10 @@ async function updateFromTemplateAsync(projectRoot, { exp , pkg , template , tem
82
83
  exp,
83
84
  ora
84
85
  });
86
+ const platforms = await (0, _validateTemplatePlatforms).validateTemplatePlatforms({
87
+ templateDirectory,
88
+ platforms: unknownPlatforms
89
+ });
85
90
  const results = await (0, _copyTemplateFiles).copyTemplateFilesAsync(projectRoot, {
86
91
  pkg,
87
92
  templateDirectory,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/prebuild/updateFromTemplate.ts"],"sourcesContent":["import { ExpoConfig, PackageJSONConfig } from '@expo/config';\nimport { ModPlatform } from '@expo/config-plugins';\nimport chalk from 'chalk';\n\nimport * as Log from '../log';\nimport { AbortCommandError, SilentError } from '../utils/errors';\nimport { logNewSection } from '../utils/ora';\nimport { profile } from '../utils/profile';\nimport { copyTemplateFilesAsync, createCopyFilesSuccessMessage } from './copyTemplateFiles';\nimport { cloneTemplateAsync } from './resolveTemplate';\nimport { DependenciesModificationResults, updatePackageJSONAsync } from './updatePackageJson';\nimport { writeMetroConfig } from './writeMetroConfig';\n\n/**\n * Creates local native files from an input template file path.\n *\n * @return `true` if the project is ejecting, and `false` if it's syncing.\n */\nexport async function updateFromTemplateAsync(\n projectRoot: string,\n {\n exp,\n pkg,\n template,\n templateDirectory,\n platforms,\n skipDependencyUpdate,\n }: {\n /** Expo Config */\n exp: ExpoConfig;\n /** package.json as JSON */\n pkg: PackageJSONConfig;\n /** Template reference ID. */\n template?: string;\n /** Directory to write the template to before copying into the project. */\n templateDirectory?: string;\n /** List of platforms to clone. */\n platforms: ModPlatform[];\n /** List of dependencies to skip updating. */\n skipDependencyUpdate?: string[];\n }\n): Promise<\n {\n /** Indicates if new files were created in the project. */\n hasNewProjectFiles: boolean;\n /** Indicates that the project needs to run `pod install` */\n needsPodInstall: boolean;\n } & DependenciesModificationResults\n> {\n if (!templateDirectory) {\n const temporary = await import('tempy');\n templateDirectory = temporary.directory();\n }\n\n const copiedPaths = await profile(cloneTemplateAndCopyToProjectAsync)({\n projectRoot,\n template,\n templateDirectory,\n exp,\n pkg,\n platforms,\n });\n\n profile(writeMetroConfig)(projectRoot, { pkg, templateDirectory });\n\n const depsResults = await profile(updatePackageJSONAsync)(projectRoot, {\n templateDirectory,\n pkg,\n skipDependencyUpdate,\n });\n\n return {\n hasNewProjectFiles: !!copiedPaths.length,\n // If the iOS folder changes or new packages are added, we should rerun pod install.\n needsPodInstall:\n copiedPaths.includes('ios') ||\n depsResults.hasNewDependencies ||\n depsResults.hasNewDevDependencies,\n ...depsResults,\n };\n}\n\n/**\n * Extract the template and copy the ios and android directories over to the project directory.\n *\n * @return `true` if any project files were created.\n */\nasync function cloneTemplateAndCopyToProjectAsync({\n projectRoot,\n templateDirectory,\n template,\n exp,\n pkg,\n platforms,\n}: {\n projectRoot: string;\n templateDirectory: string;\n template?: string;\n exp: Pick<ExpoConfig, 'name' | 'sdkVersion'>;\n pkg: PackageJSONConfig;\n platforms: ModPlatform[];\n}): Promise<string[]> {\n const ora = logNewSection(\n 'Creating native project directories (./ios and ./android) and updating .gitignore'\n );\n\n try {\n await cloneTemplateAsync({ templateDirectory, template, exp, ora });\n\n const results = await copyTemplateFilesAsync(projectRoot, {\n pkg,\n templateDirectory,\n platforms,\n });\n\n ora.succeed(createCopyFilesSuccessMessage(platforms, results));\n\n return results.copiedPaths;\n } catch (e: any) {\n if (!(e instanceof AbortCommandError)) {\n Log.error(e.message);\n }\n ora.fail('Failed to create the native project.');\n Log.log(\n chalk.yellow(\n 'You may want to delete the `./ios` and/or `./android` directories before trying again.'\n )\n );\n throw new SilentError(e);\n }\n}\n"],"names":["updateFromTemplateAsync","Log","projectRoot","exp","pkg","template","templateDirectory","platforms","skipDependencyUpdate","temporary","directory","copiedPaths","profile","cloneTemplateAndCopyToProjectAsync","writeMetroConfig","depsResults","updatePackageJSONAsync","hasNewProjectFiles","length","needsPodInstall","includes","hasNewDependencies","hasNewDevDependencies","ora","logNewSection","cloneTemplateAsync","results","copyTemplateFilesAsync","succeed","createCopyFilesSuccessMessage","e","AbortCommandError","error","message","fail","log","chalk","yellow","SilentError"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/prebuild/updateFromTemplate.ts"],"sourcesContent":["import { ExpoConfig, PackageJSONConfig } from '@expo/config';\nimport { ModPlatform } from '@expo/config-plugins';\nimport chalk from 'chalk';\n\nimport * as Log from '../log';\nimport { AbortCommandError, SilentError } from '../utils/errors';\nimport { logNewSection } from '../utils/ora';\nimport { profile } from '../utils/profile';\nimport { copyTemplateFilesAsync, createCopyFilesSuccessMessage } from './copyTemplateFiles';\nimport { cloneTemplateAsync } from './resolveTemplate';\nimport { DependenciesModificationResults, updatePackageJSONAsync } from './updatePackageJson';\nimport { validateTemplatePlatforms } from './validateTemplatePlatforms';\nimport { writeMetroConfig } from './writeMetroConfig';\n\n/**\n * Creates local native files from an input template file path.\n *\n * @return `true` if the project is ejecting, and `false` if it's syncing.\n */\nexport async function updateFromTemplateAsync(\n projectRoot: string,\n {\n exp,\n pkg,\n template,\n templateDirectory,\n platforms,\n skipDependencyUpdate,\n }: {\n /** Expo Config */\n exp: ExpoConfig;\n /** package.json as JSON */\n pkg: PackageJSONConfig;\n /** Template reference ID. */\n template?: string;\n /** Directory to write the template to before copying into the project. */\n templateDirectory?: string;\n /** List of platforms to clone. */\n platforms: ModPlatform[];\n /** List of dependencies to skip updating. */\n skipDependencyUpdate?: string[];\n }\n): Promise<\n {\n /** Indicates if new files were created in the project. */\n hasNewProjectFiles: boolean;\n /** Indicates that the project needs to run `pod install` */\n needsPodInstall: boolean;\n } & DependenciesModificationResults\n> {\n if (!templateDirectory) {\n const temporary = await import('tempy');\n templateDirectory = temporary.directory();\n }\n\n const copiedPaths = await profile(cloneTemplateAndCopyToProjectAsync)({\n projectRoot,\n template,\n templateDirectory,\n exp,\n pkg,\n platforms,\n });\n\n profile(writeMetroConfig)(projectRoot, { pkg, templateDirectory });\n\n const depsResults = await profile(updatePackageJSONAsync)(projectRoot, {\n templateDirectory,\n pkg,\n skipDependencyUpdate,\n });\n\n return {\n hasNewProjectFiles: !!copiedPaths.length,\n // If the iOS folder changes or new packages are added, we should rerun pod install.\n needsPodInstall:\n copiedPaths.includes('ios') ||\n depsResults.hasNewDependencies ||\n depsResults.hasNewDevDependencies,\n ...depsResults,\n };\n}\n\n/**\n * Extract the template and copy the ios and android directories over to the project directory.\n *\n * @return `true` if any project files were created.\n */\nasync function cloneTemplateAndCopyToProjectAsync({\n projectRoot,\n templateDirectory,\n template,\n exp,\n pkg,\n platforms: unknownPlatforms,\n}: {\n projectRoot: string;\n templateDirectory: string;\n template?: string;\n exp: Pick<ExpoConfig, 'name' | 'sdkVersion'>;\n pkg: PackageJSONConfig;\n platforms: ModPlatform[];\n}): Promise<string[]> {\n const ora = logNewSection(\n 'Creating native project directories (./ios and ./android) and updating .gitignore'\n );\n\n try {\n await cloneTemplateAsync({ templateDirectory, template, exp, ora });\n\n const platforms = await validateTemplatePlatforms({\n templateDirectory,\n platforms: unknownPlatforms,\n });\n\n const results = await copyTemplateFilesAsync(projectRoot, {\n pkg,\n templateDirectory,\n platforms,\n });\n\n ora.succeed(createCopyFilesSuccessMessage(platforms, results));\n\n return results.copiedPaths;\n } catch (e: any) {\n if (!(e instanceof AbortCommandError)) {\n Log.error(e.message);\n }\n ora.fail('Failed to create the native project.');\n Log.log(\n chalk.yellow(\n 'You may want to delete the `./ios` and/or `./android` directories before trying again.'\n )\n );\n throw new SilentError(e);\n }\n}\n"],"names":["updateFromTemplateAsync","Log","projectRoot","exp","pkg","template","templateDirectory","platforms","skipDependencyUpdate","temporary","directory","copiedPaths","profile","cloneTemplateAndCopyToProjectAsync","writeMetroConfig","depsResults","updatePackageJSONAsync","hasNewProjectFiles","length","needsPodInstall","includes","hasNewDependencies","hasNewDevDependencies","unknownPlatforms","ora","logNewSection","cloneTemplateAsync","validateTemplatePlatforms","results","copyTemplateFilesAsync","succeed","createCopyFilesSuccessMessage","e","AbortCommandError","error","message","fail","log","chalk","yellow","SilentError"],"mappings":"AAAA;;;;QAmBsBA,uBAAuB,GAAvBA,uBAAuB;AAjB3B,IAAA,MAAO,kCAAP,OAAO,EAAA;AAEbC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACgC,IAAA,OAAiB,WAAjB,iBAAiB,CAAA;AAClC,IAAA,IAAc,WAAd,cAAc,CAAA;AACpB,IAAA,QAAkB,WAAlB,kBAAkB,CAAA;AAC4B,IAAA,kBAAqB,WAArB,qBAAqB,CAAA;AACxD,IAAA,gBAAmB,WAAnB,mBAAmB,CAAA;AACkB,IAAA,kBAAqB,WAArB,qBAAqB,CAAA;AACnD,IAAA,0BAA6B,WAA7B,6BAA6B,CAAA;AACtC,IAAA,iBAAoB,WAApB,oBAAoB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAO9C,eAAeD,uBAAuB,CAC3CE,WAAmB,EACnB,EACEC,GAAG,CAAA,EACHC,GAAG,CAAA,EACHC,QAAQ,CAAA,EACRC,iBAAiB,CAAA,EACjBC,SAAS,CAAA,EACTC,oBAAoB,CAAA,EAcrB,EAQD;IACA,IAAI,CAACF,iBAAiB,EAAE;QACtB,MAAMG,SAAS,GAAG,MAAM;mDAAO,OAAO;UAAC,AAAC;QACxCH,iBAAiB,GAAGG,SAAS,CAACC,SAAS,EAAE,CAAC;KAC3C;IAED,MAAMC,WAAW,GAAG,MAAMC,CAAAA,GAAAA,QAAO,AAAoC,CAAA,QAApC,CAACC,kCAAkC,CAAC,CAAC;QACpEX,WAAW;QACXG,QAAQ;QACRC,iBAAiB;QACjBH,GAAG;QACHC,GAAG;QACHG,SAAS;KACV,CAAC,AAAC;IAEHK,CAAAA,GAAAA,QAAO,AAAkB,CAAA,QAAlB,CAACE,iBAAgB,iBAAA,CAAC,CAACZ,WAAW,EAAE;QAAEE,GAAG;QAAEE,iBAAiB;KAAE,CAAC,CAAC;IAEnE,MAAMS,WAAW,GAAG,MAAMH,CAAAA,GAAAA,QAAO,AAAwB,CAAA,QAAxB,CAACI,kBAAsB,uBAAA,CAAC,CAACd,WAAW,EAAE;QACrEI,iBAAiB;QACjBF,GAAG;QACHI,oBAAoB;KACrB,CAAC,AAAC;IAEH,OAAO;QACLS,kBAAkB,EAAE,CAAC,CAACN,WAAW,CAACO,MAAM;QACxC,oFAAoF;QACpFC,eAAe,EACbR,WAAW,CAACS,QAAQ,CAAC,KAAK,CAAC,IAC3BL,WAAW,CAACM,kBAAkB,IAC9BN,WAAW,CAACO,qBAAqB;QACnC,GAAGP,WAAW;KACf,CAAC;CACH;AAED;;;;GAIG,CACH,eAAeF,kCAAkC,CAAC,EAChDX,WAAW,CAAA,EACXI,iBAAiB,CAAA,EACjBD,QAAQ,CAAA,EACRF,GAAG,CAAA,EACHC,GAAG,CAAA,EACHG,SAAS,EAAEgB,gBAAgB,CAAA,EAQ5B,EAAqB;IACpB,MAAMC,GAAG,GAAGC,CAAAA,GAAAA,IAAa,AAExB,CAAA,cAFwB,CACvB,mFAAmF,CACpF,AAAC;IAEF,IAAI;QACF,MAAMC,CAAAA,GAAAA,gBAAkB,AAA2C,CAAA,mBAA3C,CAAC;YAAEpB,iBAAiB;YAAED,QAAQ;YAAEF,GAAG;YAAEqB,GAAG;SAAE,CAAC,CAAC;QAEpE,MAAMjB,SAAS,GAAG,MAAMoB,CAAAA,GAAAA,0BAAyB,AAG/C,CAAA,0BAH+C,CAAC;YAChDrB,iBAAiB;YACjBC,SAAS,EAAEgB,gBAAgB;SAC5B,CAAC,AAAC;QAEH,MAAMK,OAAO,GAAG,MAAMC,CAAAA,GAAAA,kBAAsB,AAI1C,CAAA,uBAJ0C,CAAC3B,WAAW,EAAE;YACxDE,GAAG;YACHE,iBAAiB;YACjBC,SAAS;SACV,CAAC,AAAC;QAEHiB,GAAG,CAACM,OAAO,CAACC,CAAAA,GAAAA,kBAA6B,AAAoB,CAAA,8BAApB,CAACxB,SAAS,EAAEqB,OAAO,CAAC,CAAC,CAAC;QAE/D,OAAOA,OAAO,CAACjB,WAAW,CAAC;KAC5B,CAAC,OAAOqB,CAAC,EAAO;QACf,IAAI,CAAC,CAACA,CAAC,YAAYC,OAAiB,kBAAA,CAAC,EAAE;YACrChC,GAAG,CAACiC,KAAK,CAACF,CAAC,CAACG,OAAO,CAAC,CAAC;SACtB;QACDX,GAAG,CAACY,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACjDnC,GAAG,CAACoC,GAAG,CACLC,MAAK,QAAA,CAACC,MAAM,CACV,wFAAwF,CACzF,CACF,CAAC;QACF,MAAM,IAAIC,OAAW,YAAA,CAACR,CAAC,CAAC,CAAC;KAC1B;CACF"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.validateTemplatePlatforms = validateTemplatePlatforms;
6
+ var _chalk = _interopRequireDefault(require("chalk"));
7
+ var _path = _interopRequireDefault(require("path"));
8
+ var Log = _interopRequireWildcard(require("../log"));
9
+ var _dir = require("../utils/dir");
10
+ function _interopRequireDefault(obj) {
11
+ return obj && obj.__esModule ? obj : {
12
+ default: obj
13
+ };
14
+ }
15
+ function _interopRequireWildcard(obj) {
16
+ if (obj && obj.__esModule) {
17
+ return obj;
18
+ } else {
19
+ var newObj = {};
20
+ if (obj != null) {
21
+ for(var key in obj){
22
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
23
+ var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
24
+ if (desc.get || desc.set) {
25
+ Object.defineProperty(newObj, key, desc);
26
+ } else {
27
+ newObj[key] = obj[key];
28
+ }
29
+ }
30
+ }
31
+ }
32
+ newObj.default = obj;
33
+ return newObj;
34
+ }
35
+ }
36
+ async function validateTemplatePlatforms({ templateDirectory , platforms }) {
37
+ const existingPlatforms = [];
38
+ for (const platform of platforms){
39
+ if (await (0, _dir).directoryExistsAsync(_path.default.join(templateDirectory, platform))) {
40
+ existingPlatforms.push(platform);
41
+ } else {
42
+ Log.warn(_chalk.default`⚠️ Skipping platform ${platform}. Use a template that contains native files for ${platform} (./${platform}).`);
43
+ }
44
+ }
45
+ return existingPlatforms;
46
+ }
47
+
48
+ //# sourceMappingURL=validateTemplatePlatforms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prebuild/validateTemplatePlatforms.ts"],"sourcesContent":["import { ModPlatform } from '@expo/config-plugins';\nimport chalk from 'chalk';\nimport path from 'path';\n\nimport * as Log from '../log';\nimport { directoryExistsAsync } from '../utils/dir';\n\nexport async function validateTemplatePlatforms({\n templateDirectory,\n platforms,\n}: {\n templateDirectory: string;\n platforms: ModPlatform[];\n}) {\n const existingPlatforms: ModPlatform[] = [];\n\n for (const platform of platforms) {\n if (await directoryExistsAsync(path.join(templateDirectory, platform))) {\n existingPlatforms.push(platform);\n } else {\n Log.warn(\n chalk`⚠️ Skipping platform ${platform}. Use a template that contains native files for ${platform} (./${platform}).`\n );\n }\n }\n\n return existingPlatforms;\n}\n"],"names":["validateTemplatePlatforms","Log","templateDirectory","platforms","existingPlatforms","platform","directoryExistsAsync","path","join","push","warn","chalk"],"mappings":"AAAA;;;;QAOsBA,yBAAyB,GAAzBA,yBAAyB;AAN7B,IAAA,MAAO,kCAAP,OAAO,EAAA;AACR,IAAA,KAAM,kCAAN,MAAM,EAAA;AAEXC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AACsB,IAAA,IAAc,WAAd,cAAc,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE5C,eAAeD,yBAAyB,CAAC,EAC9CE,iBAAiB,CAAA,EACjBC,SAAS,CAAA,EAIV,EAAE;IACD,MAAMC,iBAAiB,GAAkB,EAAE,AAAC;IAE5C,KAAK,MAAMC,QAAQ,IAAIF,SAAS,CAAE;QAChC,IAAI,MAAMG,CAAAA,GAAAA,IAAoB,AAAwC,CAAA,qBAAxC,CAACC,KAAI,QAAA,CAACC,IAAI,CAACN,iBAAiB,EAAEG,QAAQ,CAAC,CAAC,EAAE;YACtED,iBAAiB,CAACK,IAAI,CAACJ,QAAQ,CAAC,CAAC;SAClC,MAAM;YACLJ,GAAG,CAACS,IAAI,CACNC,MAAK,QAAA,CAAC,0BAAsB,EAAEN,QAAQ,CAAC,gDAAgD,EAAEA,QAAQ,CAAC,IAAI,EAAEA,QAAQ,CAAC,EAAE,CAAC,CACrH,CAAC;SACH;KACF;IAED,OAAOD,iBAAiB,CAAC;CAC1B"}
@@ -6,6 +6,7 @@ exports.runAndroidAsync = runAndroidAsync;
6
6
  var _path = _interopRequireDefault(require("path"));
7
7
  var _log = require("../../log");
8
8
  var _gradle = require("../../start/platforms/android/gradle");
9
+ var _nodeEnv = require("../../utils/nodeEnv");
9
10
  var _scheme = require("../../utils/scheme");
10
11
  var _ensureNativeProject = require("../ensureNativeProject");
11
12
  var _hints = require("../hints");
@@ -20,6 +21,9 @@ function _interopRequireDefault(obj) {
20
21
  const debug = require("debug")("expo:run:android");
21
22
  async function runAndroidAsync(projectRoot, { install , ...options }) {
22
23
  var ref;
24
+ // NOTE: This is a guess, the developer can overwrite with `NODE_ENV`.
25
+ (0, _nodeEnv).setNodeEnv(options.variant === "release" ? "production" : "development");
26
+ require("@expo/env").load(projectRoot);
23
27
  await (0, _ensureNativeProject).ensureNativeProjectAsync(projectRoot, {
24
28
  platform: "android",
25
29
  install
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/run/android/runAndroidAsync.ts"],"sourcesContent":["import path from 'path';\n\nimport { Log } from '../../log';\nimport { assembleAsync, installAsync } from '../../start/platforms/android/gradle';\nimport { getSchemesForAndroidAsync } from '../../utils/scheme';\nimport { ensureNativeProjectAsync } from '../ensureNativeProject';\nimport { logProjectLogsLocation } from '../hints';\nimport { startBundlerAsync } from '../startBundler';\nimport { resolveInstallApkNameAsync } from './resolveInstallApkName';\nimport { Options, ResolvedOptions, resolveOptionsAsync } from './resolveOptions';\n\nconst debug = require('debug')('expo:run:android');\n\nexport async function runAndroidAsync(projectRoot: string, { install, ...options }: Options) {\n await ensureNativeProjectAsync(projectRoot, { platform: 'android', install });\n\n const props = await resolveOptionsAsync(projectRoot, options);\n\n debug('Package name: ' + props.packageName);\n Log.log('› Building app...');\n\n const androidProjectRoot = path.join(projectRoot, 'android');\n\n await assembleAsync(androidProjectRoot, {\n variant: props.variant,\n port: props.port,\n appName: props.appName,\n buildCache: props.buildCache,\n });\n\n const manager = await startBundlerAsync(projectRoot, {\n port: props.port,\n // If a scheme is specified then use that instead of the package name.\n scheme: (await getSchemesForAndroidAsync(projectRoot))?.[0],\n headless: !props.shouldStartBundler,\n });\n\n await installAppAsync(androidProjectRoot, props);\n\n await manager.getDefaultDevServer().openCustomRuntimeAsync(\n 'emulator',\n {\n applicationId: props.packageName,\n },\n { device: props.device.device }\n );\n\n if (props.shouldStartBundler) {\n logProjectLogsLocation();\n }\n}\n\nasync function installAppAsync(androidProjectRoot: string, props: ResolvedOptions) {\n // Find the APK file path\n const apkFile = await resolveInstallApkNameAsync(props.device.device, props);\n\n if (apkFile) {\n // Attempt to install the APK from the file path\n const binaryPath = path.join(props.apkVariantDirectory, apkFile);\n debug('Installing:', binaryPath);\n await props.device.installAppAsync(binaryPath);\n } else {\n // If we cannot resolve the APK file path then we can attempt to install using Gradle.\n // This offers more advanced resolution that we may not have first class support for.\n Log.log('› Failed to locate binary file, installing with Gradle...');\n await installAsync(androidProjectRoot, {\n variant: props.variant ?? 'debug',\n appName: props.appName ?? 'app',\n port: props.port,\n });\n }\n}\n"],"names":["runAndroidAsync","debug","require","projectRoot","install","options","ensureNativeProjectAsync","platform","props","resolveOptionsAsync","packageName","Log","log","androidProjectRoot","path","join","assembleAsync","variant","port","appName","buildCache","manager","startBundlerAsync","scheme","getSchemesForAndroidAsync","headless","shouldStartBundler","installAppAsync","getDefaultDevServer","openCustomRuntimeAsync","applicationId","device","logProjectLogsLocation","apkFile","resolveInstallApkNameAsync","binaryPath","apkVariantDirectory","installAsync"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/run/android/runAndroidAsync.ts"],"sourcesContent":["import path from 'path';\n\nimport { Log } from '../../log';\nimport { assembleAsync, installAsync } from '../../start/platforms/android/gradle';\nimport { setNodeEnv } from '../../utils/nodeEnv';\nimport { getSchemesForAndroidAsync } from '../../utils/scheme';\nimport { ensureNativeProjectAsync } from '../ensureNativeProject';\nimport { logProjectLogsLocation } from '../hints';\nimport { startBundlerAsync } from '../startBundler';\nimport { resolveInstallApkNameAsync } from './resolveInstallApkName';\nimport { Options, ResolvedOptions, resolveOptionsAsync } from './resolveOptions';\n\nconst debug = require('debug')('expo:run:android');\n\nexport async function runAndroidAsync(projectRoot: string, { install, ...options }: Options) {\n // NOTE: This is a guess, the developer can overwrite with `NODE_ENV`.\n setNodeEnv(options.variant === 'release' ? 'production' : 'development');\n require('@expo/env').load(projectRoot);\n\n await ensureNativeProjectAsync(projectRoot, { platform: 'android', install });\n\n const props = await resolveOptionsAsync(projectRoot, options);\n\n debug('Package name: ' + props.packageName);\n Log.log('› Building app...');\n\n const androidProjectRoot = path.join(projectRoot, 'android');\n\n await assembleAsync(androidProjectRoot, {\n variant: props.variant,\n port: props.port,\n appName: props.appName,\n buildCache: props.buildCache,\n });\n\n const manager = await startBundlerAsync(projectRoot, {\n port: props.port,\n // If a scheme is specified then use that instead of the package name.\n scheme: (await getSchemesForAndroidAsync(projectRoot))?.[0],\n headless: !props.shouldStartBundler,\n });\n\n await installAppAsync(androidProjectRoot, props);\n\n await manager.getDefaultDevServer().openCustomRuntimeAsync(\n 'emulator',\n {\n applicationId: props.packageName,\n },\n { device: props.device.device }\n );\n\n if (props.shouldStartBundler) {\n logProjectLogsLocation();\n }\n}\n\nasync function installAppAsync(androidProjectRoot: string, props: ResolvedOptions) {\n // Find the APK file path\n const apkFile = await resolveInstallApkNameAsync(props.device.device, props);\n\n if (apkFile) {\n // Attempt to install the APK from the file path\n const binaryPath = path.join(props.apkVariantDirectory, apkFile);\n debug('Installing:', binaryPath);\n await props.device.installAppAsync(binaryPath);\n } else {\n // If we cannot resolve the APK file path then we can attempt to install using Gradle.\n // This offers more advanced resolution that we may not have first class support for.\n Log.log('› Failed to locate binary file, installing with Gradle...');\n await installAsync(androidProjectRoot, {\n variant: props.variant ?? 'debug',\n appName: props.appName ?? 'app',\n port: props.port,\n });\n }\n}\n"],"names":["runAndroidAsync","debug","require","projectRoot","install","options","setNodeEnv","variant","load","ensureNativeProjectAsync","platform","props","resolveOptionsAsync","packageName","Log","log","androidProjectRoot","path","join","assembleAsync","port","appName","buildCache","manager","startBundlerAsync","scheme","getSchemesForAndroidAsync","headless","shouldStartBundler","installAppAsync","getDefaultDevServer","openCustomRuntimeAsync","applicationId","device","logProjectLogsLocation","apkFile","resolveInstallApkNameAsync","binaryPath","apkVariantDirectory","installAsync"],"mappings":"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"}