@expo/cli 0.13.2 → 0.15.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 (203) hide show
  1. package/build/bin/cli +30 -27
  2. package/build/bin/cli.map +1 -1
  3. package/build/src/api/getVersions.js.map +1 -1
  4. package/build/src/api/rest/cache/response.js.map +1 -1
  5. package/build/src/api/rest/client.js +2 -2
  6. package/build/src/api/rest/client.js.map +1 -1
  7. package/build/src/config/configAsync.js +1 -1
  8. package/build/src/config/configAsync.js.map +1 -1
  9. package/build/src/config/index.js +2 -2
  10. package/build/src/config/index.js.map +1 -1
  11. package/build/src/customize/generate.js +1 -1
  12. package/build/src/customize/generate.js.map +1 -1
  13. package/build/src/customize/typescript.js +6 -4
  14. package/build/src/customize/typescript.js.map +1 -1
  15. package/build/src/export/createMetadataJson.js +3 -2
  16. package/build/src/export/createMetadataJson.js.map +1 -1
  17. package/build/src/export/embed/exportEmbedAsync.js +44 -17
  18. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  19. package/build/src/export/embed/index.js +4 -4
  20. package/build/src/export/embed/index.js.map +1 -1
  21. package/build/src/export/embed/resolveOptions.js +3 -3
  22. package/build/src/export/embed/resolveOptions.js.map +1 -1
  23. package/build/src/export/exportApp.js +74 -83
  24. package/build/src/export/exportApp.js.map +1 -1
  25. package/build/src/export/exportAssets.js +81 -21
  26. package/build/src/export/exportAssets.js.map +1 -1
  27. package/build/src/export/exportHermes.js +24 -14
  28. package/build/src/export/exportHermes.js.map +1 -1
  29. package/build/src/export/exportStaticAsync.js +109 -58
  30. package/build/src/export/exportStaticAsync.js.map +1 -1
  31. package/build/src/export/favicon.js +2 -2
  32. package/build/src/export/favicon.js.map +1 -1
  33. package/build/src/export/fork-bundleAsync.js +56 -23
  34. package/build/src/export/fork-bundleAsync.js.map +1 -1
  35. package/build/src/export/index.js +11 -9
  36. package/build/src/export/index.js.map +1 -1
  37. package/build/src/export/metroAssetLocalPath.js +101 -0
  38. package/build/src/export/metroAssetLocalPath.js.map +1 -0
  39. package/build/src/export/persistMetroAssets.js +94 -21
  40. package/build/src/export/persistMetroAssets.js.map +1 -1
  41. package/build/src/export/resolveOptions.js +1 -1
  42. package/build/src/export/resolveOptions.js.map +1 -1
  43. package/build/src/export/saveAssets.js +9 -48
  44. package/build/src/export/saveAssets.js.map +1 -1
  45. package/build/src/export/web/exportWebAsync.js +1 -1
  46. package/build/src/export/web/exportWebAsync.js.map +1 -1
  47. package/build/src/export/web/index.js +2 -2
  48. package/build/src/export/web/index.js.map +1 -1
  49. package/build/src/export/writeContents.js +6 -3
  50. package/build/src/export/writeContents.js.map +1 -1
  51. package/build/src/install/applyPlugins.js +52 -0
  52. package/build/src/install/applyPlugins.js.map +1 -0
  53. package/build/src/install/checkPackages.js +2 -2
  54. package/build/src/install/checkPackages.js.map +1 -1
  55. package/build/src/install/fixPackages.js +84 -0
  56. package/build/src/install/fixPackages.js.map +1 -0
  57. package/build/src/install/installAsync.js +32 -61
  58. package/build/src/install/installAsync.js.map +1 -1
  59. package/build/src/install/installExpoPackage.js +79 -0
  60. package/build/src/install/installExpoPackage.js.map +1 -0
  61. package/build/src/login/index.js +1 -1
  62. package/build/src/login/index.js.map +1 -1
  63. package/build/src/logout/index.js +1 -1
  64. package/build/src/logout/index.js.map +1 -1
  65. package/build/src/prebuild/clearNativeFolder.js +1 -1
  66. package/build/src/prebuild/clearNativeFolder.js.map +1 -1
  67. package/build/src/prebuild/configureProjectAsync.js +3 -3
  68. package/build/src/prebuild/configureProjectAsync.js.map +1 -1
  69. package/build/src/prebuild/copyTemplateFiles.js +21 -30
  70. package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
  71. package/build/src/prebuild/index.js +3 -3
  72. package/build/src/prebuild/index.js.map +1 -1
  73. package/build/src/prebuild/prebuildAsync.js +39 -17
  74. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  75. package/build/src/prebuild/resolveOptions.js +2 -2
  76. package/build/src/prebuild/resolveOptions.js.map +1 -1
  77. package/build/src/prebuild/updateFromTemplate.js +6 -6
  78. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  79. package/build/src/prebuild/updatePackageJson.js +49 -36
  80. package/build/src/prebuild/updatePackageJson.js.map +1 -1
  81. package/build/src/prebuild/validateTemplatePlatforms.js +2 -2
  82. package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
  83. package/build/src/register/index.js +1 -1
  84. package/build/src/register/index.js.map +1 -1
  85. package/build/src/run/android/index.js +2 -2
  86. package/build/src/run/android/index.js.map +1 -1
  87. package/build/src/run/ios/appleDevice/AppleDevice.js +35 -2
  88. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
  89. package/build/src/run/ios/index.js +2 -2
  90. package/build/src/run/ios/index.js.map +1 -1
  91. package/build/src/start/doctor/dependencies/getVersionedPackages.js +12 -4
  92. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  93. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +20 -3
  94. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  95. package/build/src/start/index.js +3 -3
  96. package/build/src/start/index.js.map +1 -1
  97. package/build/src/start/interface/interactiveActions.js +30 -11
  98. package/build/src/start/interface/interactiveActions.js.map +1 -1
  99. package/build/src/start/server/BundlerDevServer.js +14 -10
  100. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  101. package/build/src/start/server/DevServerManager.js +6 -1
  102. package/build/src/start/server/DevServerManager.js.map +1 -1
  103. package/build/src/start/server/DevToolsPluginManager.js +63 -0
  104. package/build/src/start/server/DevToolsPluginManager.js.map +1 -0
  105. package/build/src/start/server/getStaticRenderFunctions.js +21 -20
  106. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  107. package/build/src/start/server/metro/MetroBundlerDevServer.js +67 -64
  108. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  109. package/build/src/start/server/metro/bundleApiRoutes.js +4 -19
  110. package/build/src/start/server/metro/bundleApiRoutes.js.map +1 -1
  111. package/build/src/start/server/metro/createExpoMetroResolver.js +187 -0
  112. package/build/src/start/server/metro/createExpoMetroResolver.js.map +1 -0
  113. package/build/src/start/server/metro/createJResolver.js +149 -0
  114. package/build/src/start/server/metro/createJResolver.js.map +1 -0
  115. package/build/src/start/server/metro/createServerRouteMiddleware.js +13 -1
  116. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
  117. package/build/src/start/server/metro/externals.js +25 -3
  118. package/build/src/start/server/metro/externals.js.map +1 -1
  119. package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
  120. package/build/src/start/server/metro/formatFileCandidates.js +72 -0
  121. package/build/src/start/server/metro/formatFileCandidates.js.map +1 -0
  122. package/build/src/start/server/metro/inspector-proxy/device.js +3 -1
  123. package/build/src/start/server/metro/inspector-proxy/device.js.map +1 -1
  124. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js +3 -4
  125. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -1
  126. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeCallFunctionOn.js +24 -0
  127. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeCallFunctionOn.js.map +1 -0
  128. package/build/src/start/server/metro/inspector-proxy/handlers/utils.js +11 -0
  129. package/build/src/start/server/metro/inspector-proxy/handlers/utils.js.map +1 -0
  130. package/build/src/start/server/metro/inspector-proxy/index.js +10 -7
  131. package/build/src/start/server/metro/inspector-proxy/index.js.map +1 -1
  132. package/build/src/start/server/metro/instantiateMetro.js +37 -16
  133. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  134. package/build/src/start/server/metro/metroErrorInterface.js +3 -2
  135. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  136. package/build/src/start/server/metro/router.js +6 -3
  137. package/build/src/start/server/metro/router.js.map +1 -1
  138. package/build/src/start/server/metro/runServer-fork.js +19 -10
  139. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  140. package/build/src/start/server/metro/serializeHtml.js +43 -0
  141. package/build/src/start/server/metro/serializeHtml.js.map +1 -0
  142. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +1 -2
  143. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
  144. package/build/src/start/server/metro/withMetroMultiPlatform.js +268 -191
  145. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  146. package/build/src/start/server/metro/withMetroResolvers.js +114 -40
  147. package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
  148. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +61 -0
  149. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -0
  150. package/build/src/start/server/middleware/ExpoMiddleware.js +2 -2
  151. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  152. package/build/src/start/server/middleware/ManifestMiddleware.js +45 -68
  153. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  154. package/build/src/start/server/middleware/inspector/JsInspector.js +1 -1
  155. package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
  156. package/build/src/start/server/middleware/inspector/LaunchBrowser.js +30 -26
  157. package/build/src/start/server/middleware/inspector/LaunchBrowser.js.map +1 -1
  158. package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js +7 -7
  159. package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js.map +1 -1
  160. package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js +5 -2
  161. package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js.map +1 -1
  162. package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js +3 -2
  163. package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js.map +1 -1
  164. package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js +8 -7
  165. package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js.map +1 -1
  166. package/build/src/start/server/middleware/metroOptions.js +123 -0
  167. package/build/src/start/server/middleware/metroOptions.js.map +1 -0
  168. package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
  169. package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +1 -1
  170. package/build/src/start/server/type-generation/expo-env.js +1 -1
  171. package/build/src/start/server/type-generation/expo-env.js.map +1 -1
  172. package/build/src/start/server/type-generation/routes.js +1 -0
  173. package/build/src/start/server/type-generation/routes.js.map +1 -1
  174. package/build/src/utils/analytics/getMetroDebugProperties.js +1 -2
  175. package/build/src/utils/analytics/getMetroDebugProperties.js.map +1 -1
  176. package/build/src/utils/analytics/getMetroProperties.js +1 -2
  177. package/build/src/utils/analytics/getMetroProperties.js.map +1 -1
  178. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  179. package/build/src/utils/args.js +4 -2
  180. package/build/src/utils/args.js.map +1 -1
  181. package/build/src/utils/cocoapods.js +2 -1
  182. package/build/src/utils/cocoapods.js.map +1 -1
  183. package/build/src/utils/dir.js +18 -8
  184. package/build/src/utils/dir.js.map +1 -1
  185. package/build/src/utils/env.js +6 -0
  186. package/build/src/utils/env.js.map +1 -1
  187. package/build/src/utils/getOrPromptApplicationId.js +2 -4
  188. package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
  189. package/build/src/utils/prompts.js +1 -28
  190. package/build/src/utils/prompts.js.map +1 -1
  191. package/build/src/whoami/index.js +1 -1
  192. package/build/src/whoami/index.js.map +1 -1
  193. package/package.json +16 -16
  194. package/static/shims/react-native-web/dist/cjs/exports/AppRegistry/AppContainer.js +13 -0
  195. package/static/shims/react-native-web/dist/cjs/exports/BackHandler/index.js +10 -0
  196. package/static/shims/react-native-web/dist/exports/AppRegistry/AppContainer.js +12 -0
  197. package/static/shims/react-native-web/dist/exports/BackHandler/index.js +7 -0
  198. package/build/src/export/createBundles.js +0 -37
  199. package/build/src/export/createBundles.js.map +0 -1
  200. package/build/src/start/server/metro/resolveFromProject.js +0 -90
  201. package/build/src/start/server/metro/resolveFromProject.js.map +0 -1
  202. package/build/src/start/server/middleware/resolveEntryPoint.js +0 -42
  203. package/build/src/start/server/middleware/resolveEntryPoint.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/export/fork-bundleAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfigFilePaths, Platform } from '@expo/config';\nimport type { LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport Metro, { AssetData } from 'metro';\nimport getMetroAssets from 'metro/src/DeltaBundler/Serializers/getAssets';\nimport splitBundleOptions from 'metro/src/lib/splitBundleOptions';\nimport type { BundleOptions as MetroBundleOptions } from 'metro/src/shared/types';\nimport { ConfigT } from 'metro-config';\n\nimport {\n buildHermesBundleAsync,\n isEnableHermesManaged,\n maybeThrowFromInconsistentEngineAsync,\n} from './exportHermes';\nimport { CSSAsset, getCssModulesFromBundler } from '../start/server/metro/getCssModulesFromBundler';\nimport { loadMetroConfigAsync } from '../start/server/metro/instantiateMetro';\nimport {\n importMetroFromProject,\n importMetroServerFromProject,\n} from '../start/server/metro/resolveFromProject';\n\nexport type MetroDevServerOptions = LoadOptions & {\n quiet?: boolean;\n};\nexport type BundleOptions = {\n entryPoint: string;\n platform: 'android' | 'ios' | 'web';\n dev?: boolean;\n minify?: boolean;\n sourceMapUrl?: string;\n};\nexport type BundleAssetWithFileHashes = Metro.AssetData & {\n fileHashes: string[]; // added by the hashAssets asset plugin\n};\nexport type BundleOutput = {\n code: string;\n map?: string;\n hermesBytecodeBundle?: Uint8Array;\n hermesSourcemap?: string;\n css: CSSAsset[];\n assets: readonly BundleAssetWithFileHashes[];\n};\n\nlet nextBuildID = 0;\n\nasync function assertEngineMismatchAsync(projectRoot: string, exp: ExpoConfig, platform: Platform) {\n const isHermesManaged = isEnableHermesManaged(exp, platform);\n\n const paths = getConfigFilePaths(projectRoot);\n const configFilePath = paths.dynamicConfigPath ?? paths.staticConfigPath ?? 'app.json';\n await maybeThrowFromInconsistentEngineAsync(\n projectRoot,\n configFilePath,\n platform,\n isHermesManaged\n );\n}\n\nexport async function bundleAsync(\n projectRoot: string,\n expoConfig: ExpoConfig,\n options: MetroDevServerOptions,\n bundles: BundleOptions[]\n): Promise<BundleOutput[]> {\n // Assert early so the user doesn't have to wait until bundling is complete to find out that\n // Hermes won't be available.\n await Promise.all(\n bundles.map(({ platform }) => assertEngineMismatchAsync(projectRoot, expoConfig, platform))\n );\n\n const metro = importMetroFromProject(projectRoot);\n const Server = importMetroServerFromProject(projectRoot);\n\n const { config, reporter } = await loadMetroConfigAsync(projectRoot, options, {\n exp: expoConfig,\n isExporting: true,\n });\n\n const metroServer = await metro.runMetro(config, {\n watch: false,\n });\n\n const buildAsync = async (bundle: BundleOptions): Promise<BundleOutput> => {\n const buildID = `bundle_${nextBuildID++}_${bundle.platform}`;\n const isHermes = isEnableHermesManaged(expoConfig, bundle.platform);\n const bundleOptions: MetroBundleOptions = {\n ...Server.DEFAULT_BUNDLE_OPTIONS,\n bundleType: 'bundle',\n platform: bundle.platform,\n entryFile: bundle.entryPoint,\n dev: bundle.dev ?? false,\n minify: !isHermes && (bundle.minify ?? !bundle.dev),\n inlineSourceMap: false,\n sourceMapUrl: bundle.sourceMapUrl,\n createModuleIdFactory: config.serializer.createModuleIdFactory,\n onProgress: (transformedFileCount: number, totalFileCount: number) => {\n if (!options.quiet) {\n reporter.update({\n buildID,\n type: 'bundle_transform_progressed',\n transformedFileCount,\n totalFileCount,\n });\n }\n },\n };\n const bundleDetails = {\n ...bundleOptions,\n buildID,\n };\n reporter.update({\n buildID,\n type: 'bundle_build_started',\n bundleDetails,\n });\n try {\n const { code, map } = await metroServer.build(bundleOptions);\n const [assets, css] = await Promise.all([\n getAssets(metroServer, bundleOptions),\n getCssModulesFromBundler(config, metroServer.getBundler(), bundleOptions),\n ]);\n\n reporter.update({\n buildID,\n type: 'bundle_build_done',\n });\n return { code, map, assets: assets as readonly BundleAssetWithFileHashes[], css };\n } catch (error) {\n reporter.update({\n buildID,\n type: 'bundle_build_failed',\n });\n\n throw error;\n }\n };\n\n const maybeAddHermesBundleAsync = async (\n bundle: BundleOptions,\n bundleOutput: BundleOutput\n ): Promise<BundleOutput> => {\n const { platform } = bundle;\n const isHermesManaged = isEnableHermesManaged(expoConfig, platform);\n if (isHermesManaged) {\n const platformTag = chalk.bold(\n { ios: 'iOS', android: 'Android', web: 'Web' }[platform] || platform\n );\n\n reporter.terminal.log(`${platformTag} Building Hermes bytecode for the bundle`);\n\n const hermesBundleOutput = await buildHermesBundleAsync(\n projectRoot,\n bundleOutput.code,\n bundleOutput.map!,\n bundle.minify ?? !bundle.dev\n );\n bundleOutput.hermesBytecodeBundle = hermesBundleOutput.hbc;\n bundleOutput.hermesSourcemap = hermesBundleOutput.sourcemap;\n }\n return bundleOutput;\n };\n\n try {\n const intermediateOutputs = await Promise.all(bundles.map((bundle) => buildAsync(bundle)));\n const bundleOutputs: BundleOutput[] = [];\n for (let i = 0; i < bundles.length; ++i) {\n // hermesc does not support parallel building even we spawn processes.\n // we should build them sequentially.\n bundleOutputs.push(await maybeAddHermesBundleAsync(bundles[i], intermediateOutputs[i]));\n }\n return bundleOutputs;\n } catch (error) {\n // New line so errors don't show up inline with the progress bar\n console.log('');\n throw error;\n } finally {\n metroServer.end();\n }\n}\n\n// Forked out of Metro because the `this._getServerRootDir()` doesn't match the development\n// behavior.\nexport async function getAssets(\n metro: Metro.Server,\n options: MetroBundleOptions\n): Promise<readonly AssetData[]> {\n const { entryFile, onProgress, resolverOptions, transformOptions } = splitBundleOptions(options);\n\n // @ts-expect-error: _bundler isn't exposed on the type.\n const dependencies = await metro._bundler.getDependencies(\n [entryFile],\n transformOptions,\n resolverOptions,\n { onProgress, shallow: false, lazy: false }\n );\n\n // @ts-expect-error\n const _config = metro._config as ConfigT;\n\n return await getMetroAssets(dependencies, {\n processModuleFilter: _config.serializer.processModuleFilter,\n assetPlugins: _config.transformer.assetPlugins,\n platform: transformOptions.platform!,\n projectRoot: _config.projectRoot, // this._getServerRootDir(),\n publicPath: _config.transformer.publicPath,\n });\n}\n"],"names":["bundleAsync","getAssets","nextBuildID","assertEngineMismatchAsync","projectRoot","exp","platform","isHermesManaged","isEnableHermesManaged","paths","getConfigFilePaths","configFilePath","dynamicConfigPath","staticConfigPath","maybeThrowFromInconsistentEngineAsync","expoConfig","options","bundles","Promise","all","map","metro","importMetroFromProject","Server","importMetroServerFromProject","config","reporter","loadMetroConfigAsync","isExporting","metroServer","runMetro","watch","buildAsync","bundle","buildID","isHermes","bundleOptions","DEFAULT_BUNDLE_OPTIONS","bundleType","entryFile","entryPoint","dev","minify","inlineSourceMap","sourceMapUrl","createModuleIdFactory","serializer","onProgress","transformedFileCount","totalFileCount","quiet","update","type","bundleDetails","code","build","assets","css","getCssModulesFromBundler","getBundler","error","maybeAddHermesBundleAsync","bundleOutput","platformTag","chalk","bold","ios","android","web","terminal","log","hermesBundleOutput","buildHermesBundleAsync","hermesBytecodeBundle","hbc","hermesSourcemap","sourcemap","intermediateOutputs","bundleOutputs","i","length","push","console","end","resolverOptions","transformOptions","splitBundleOptions","dependencies","_bundler","getDependencies","shallow","lazy","_config","getMetroAssets","processModuleFilter","assetPlugins","transformer","publicPath"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/export/fork-bundleAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfigFilePaths, Platform, ProjectConfig } from '@expo/config';\nimport type { LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport Metro, { AssetData } from 'metro';\nimport getMetroAssets from 'metro/src/DeltaBundler/Serializers/getAssets';\nimport Server from 'metro/src/Server';\nimport splitBundleOptions from 'metro/src/lib/splitBundleOptions';\nimport type { BundleOptions as MetroBundleOptions } from 'metro/src/shared/types';\nimport { ConfigT } from 'metro-config';\n\nimport {\n buildHermesBundleAsync,\n isEnableHermesManaged,\n maybeThrowFromInconsistentEngineAsync,\n} from './exportHermes';\nimport { CSSAsset, getCssModulesFromBundler } from '../start/server/metro/getCssModulesFromBundler';\nimport { loadMetroConfigAsync } from '../start/server/metro/instantiateMetro';\nimport { getEntryWithServerRoot } from '../start/server/middleware/ManifestMiddleware';\nimport {\n getBaseUrlFromExpoConfig,\n getMetroDirectBundleOptions,\n} from '../start/server/middleware/metroOptions';\n\nexport type MetroDevServerOptions = LoadOptions;\n\nexport type BundleOptions = {\n entryPoint: string;\n platform: 'android' | 'ios' | 'web';\n dev?: boolean;\n minify?: boolean;\n sourceMapUrl?: string;\n sourcemaps?: boolean;\n};\nexport type BundleAssetWithFileHashes = Metro.AssetData & {\n fileHashes: string[]; // added by the hashAssets asset plugin\n};\nexport type BundleOutput = {\n code: string;\n map: string;\n hermesBytecodeBundle?: Uint8Array;\n hermesSourcemap?: string;\n css: CSSAsset[];\n assets: readonly BundleAssetWithFileHashes[];\n};\n\nlet nextBuildID = 0;\n\nasync function assertEngineMismatchAsync(\n projectRoot: string,\n exp: Pick<ExpoConfig, 'ios' | 'android' | 'jsEngine'>,\n platform: Platform\n) {\n const isHermesManaged = isEnableHermesManaged(exp, platform);\n\n const paths = getConfigFilePaths(projectRoot);\n const configFilePath = paths.dynamicConfigPath ?? paths.staticConfigPath ?? 'app.json';\n await maybeThrowFromInconsistentEngineAsync(\n projectRoot,\n configFilePath,\n platform,\n isHermesManaged\n );\n}\n\nexport async function createBundlesAsync(\n projectRoot: string,\n projectConfig: ProjectConfig,\n bundleOptions: {\n clear?: boolean;\n maxWorkers?: number;\n platforms: Platform[];\n dev?: boolean;\n minify?: boolean;\n sourcemaps?: boolean;\n }\n): Promise<Partial<Record<Platform, BundleOutput>>> {\n if (!bundleOptions.platforms.length) {\n return {};\n }\n const { exp, pkg } = projectConfig;\n\n const bundles = await bundleProductionMetroClientAsync(\n projectRoot,\n exp,\n {\n // If not legacy, ignore the target option to prevent warnings from being thrown.\n resetCache: bundleOptions.clear,\n maxWorkers: bundleOptions.maxWorkers,\n },\n bundleOptions.platforms.map((platform: Platform) => ({\n platform,\n entryPoint: getEntryWithServerRoot(projectRoot, { platform, pkg }),\n sourcemaps: bundleOptions.sourcemaps,\n minify: bundleOptions.minify,\n dev: bundleOptions.dev,\n }))\n );\n\n // { ios: bundle, android: bundle }\n return bundleOptions.platforms.reduce<Partial<Record<Platform, BundleOutput>>>(\n (prev, platform, index) => ({\n ...prev,\n [platform]: bundles[index],\n }),\n {}\n );\n}\n\nasync function bundleProductionMetroClientAsync(\n projectRoot: string,\n expoConfig: ExpoConfig,\n metroOptions: MetroDevServerOptions,\n bundles: BundleOptions[]\n): Promise<BundleOutput[]> {\n // Assert early so the user doesn't have to wait until bundling is complete to find out that\n // Hermes won't be available.\n await Promise.all(\n bundles.map(({ platform }) => assertEngineMismatchAsync(projectRoot, expoConfig, platform))\n );\n\n const { config, reporter } = await loadMetroConfigAsync(projectRoot, metroOptions, {\n exp: expoConfig,\n isExporting: true,\n });\n\n const metroServer = await Metro.runMetro(config, {\n watch: false,\n });\n\n const buildAsync = async (bundle: BundleOptions): Promise<BundleOutput> => {\n const buildID = `bundle_${nextBuildID++}_${bundle.platform}`;\n const isHermes = isEnableHermesManaged(expoConfig, bundle.platform);\n const bundleOptions: MetroBundleOptions = {\n ...Server.DEFAULT_BUNDLE_OPTIONS,\n ...getMetroDirectBundleOptions({\n mainModuleName: bundle.entryPoint,\n platform: bundle.platform,\n mode: bundle.dev ? 'development' : 'production',\n engine: isHermes ? 'hermes' : undefined,\n baseUrl: getBaseUrlFromExpoConfig(expoConfig),\n }),\n bundleType: 'bundle',\n inlineSourceMap: false,\n sourceMapUrl: bundle.sourceMapUrl,\n createModuleIdFactory: config.serializer.createModuleIdFactory,\n onProgress: (transformedFileCount: number, totalFileCount: number) => {\n reporter.update({\n buildID,\n type: 'bundle_transform_progressed',\n transformedFileCount,\n totalFileCount,\n });\n },\n };\n const bundleDetails = {\n ...bundleOptions,\n buildID,\n };\n reporter.update({\n buildID,\n type: 'bundle_build_started',\n bundleDetails,\n });\n try {\n const { code, map } = await metroServer.build(bundleOptions);\n const [assets, css] = await Promise.all([\n getAssets(metroServer, bundleOptions),\n getCssModulesFromBundler(config, metroServer.getBundler(), bundleOptions),\n ]);\n\n reporter.update({\n buildID,\n type: 'bundle_build_done',\n });\n return { code, map, assets: assets as readonly BundleAssetWithFileHashes[], css };\n } catch (error) {\n reporter.update({\n buildID,\n type: 'bundle_build_failed',\n });\n\n throw error;\n }\n };\n\n const maybeAddHermesBundleAsync = async (\n bundle: BundleOptions,\n bundleOutput: BundleOutput\n ): Promise<BundleOutput> => {\n const { platform } = bundle;\n const isHermesManaged = isEnableHermesManaged(expoConfig, platform);\n if (isHermesManaged) {\n const platformTag = chalk.bold(\n { ios: 'iOS', android: 'Android', web: 'Web' }[platform] || platform\n );\n\n reporter.terminal.log(`${platformTag} Building Hermes bytecode for the bundle`);\n\n const hermesBundleOutput = await buildHermesBundleAsync(projectRoot, {\n code: bundleOutput.code,\n map: bundle.sourcemaps ? bundleOutput.map : null,\n minify: bundle.minify ?? !bundle.dev,\n });\n bundleOutput.hermesBytecodeBundle = hermesBundleOutput.hbc;\n bundleOutput.hermesSourcemap = hermesBundleOutput.sourcemap ?? undefined;\n }\n return bundleOutput;\n };\n\n try {\n const intermediateOutputs = await Promise.all(bundles.map((bundle) => buildAsync(bundle)));\n const bundleOutputs: BundleOutput[] = [];\n for (let i = 0; i < bundles.length; ++i) {\n // hermesc does not support parallel building even we spawn processes.\n // we should build them sequentially.\n bundleOutputs.push(await maybeAddHermesBundleAsync(bundles[i], intermediateOutputs[i]));\n }\n return bundleOutputs;\n } catch (error) {\n // New line so errors don't show up inline with the progress bar\n console.log('');\n throw error;\n } finally {\n metroServer.end();\n }\n}\n\n// Forked out of Metro because the `this._getServerRootDir()` doesn't match the development\n// behavior.\nexport async function getAssets(\n metro: Metro.Server,\n options: MetroBundleOptions\n): Promise<readonly AssetData[]> {\n const { entryFile, onProgress, resolverOptions, transformOptions } = splitBundleOptions(options);\n\n // @ts-expect-error: _bundler isn't exposed on the type.\n const dependencies = await metro._bundler.getDependencies(\n [entryFile],\n transformOptions,\n resolverOptions,\n { onProgress, shallow: false, lazy: false }\n );\n\n // @ts-expect-error\n const _config = metro._config as ConfigT;\n\n return await getMetroAssets(dependencies, {\n processModuleFilter: _config.serializer.processModuleFilter,\n assetPlugins: _config.transformer.assetPlugins,\n platform: transformOptions.platform!,\n projectRoot: _config.projectRoot, // this._getServerRootDir(),\n publicPath: _config.transformer.publicPath,\n });\n}\n"],"names":["createBundlesAsync","getAssets","nextBuildID","assertEngineMismatchAsync","projectRoot","exp","platform","isHermesManaged","isEnableHermesManaged","paths","getConfigFilePaths","configFilePath","dynamicConfigPath","staticConfigPath","maybeThrowFromInconsistentEngineAsync","projectConfig","bundleOptions","platforms","length","pkg","bundles","bundleProductionMetroClientAsync","resetCache","clear","maxWorkers","map","entryPoint","getEntryWithServerRoot","sourcemaps","minify","dev","reduce","prev","index","expoConfig","metroOptions","Promise","all","config","reporter","loadMetroConfigAsync","isExporting","metroServer","Metro","runMetro","watch","buildAsync","bundle","buildID","isHermes","Server","DEFAULT_BUNDLE_OPTIONS","getMetroDirectBundleOptions","mainModuleName","mode","engine","undefined","baseUrl","getBaseUrlFromExpoConfig","bundleType","inlineSourceMap","sourceMapUrl","createModuleIdFactory","serializer","onProgress","transformedFileCount","totalFileCount","update","type","bundleDetails","code","build","assets","css","getCssModulesFromBundler","getBundler","error","maybeAddHermesBundleAsync","bundleOutput","platformTag","chalk","bold","ios","android","web","terminal","log","hermesBundleOutput","buildHermesBundleAsync","hermesBytecodeBundle","hbc","hermesSourcemap","sourcemap","intermediateOutputs","bundleOutputs","i","push","console","end","metro","options","entryFile","resolverOptions","transformOptions","splitBundleOptions","dependencies","_bundler","getDependencies","shallow","lazy","_config","getMetroAssets","processModuleFilter","assetPlugins","transformer","publicPath"],"mappings":"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"}
@@ -40,7 +40,7 @@ const expoExport = async (argv)=>{
40
40
  "--clear": Boolean,
41
41
  "--dump-assetmap": Boolean,
42
42
  "--dev": Boolean,
43
- "--dump-sourcemap": Boolean,
43
+ "--source-maps": Boolean,
44
44
  "--max-workers": Number,
45
45
  "--output-dir": String,
46
46
  "--platform": [
@@ -53,34 +53,36 @@ const expoExport = async (argv)=>{
53
53
  "--experimental-bundle": Boolean,
54
54
  // Aliases
55
55
  "-h": "--help",
56
- // '-s': '--dump-sourcemap',
56
+ "-s": "--source-maps",
57
57
  // '-d': '--dump-assetmap',
58
58
  "-c": "--clear",
59
59
  "-p": "--platform",
60
60
  // Interop with Metro docs and RedBox errors.
61
- "--reset-cache": "--clear"
61
+ "--reset-cache": "--clear",
62
+ // Deprecated
63
+ "--dump-sourcemap": "--source-maps"
62
64
  }, argv);
63
65
  if (args["--help"]) {
64
66
  (0, _args).printHelp(`Export the static files of the app for hosting it on a web server`, _chalk.default`npx expo export {dim <dir>}`, [
65
67
  _chalk.default`<dir> Directory of the Expo project. {dim Default: Current working directory}`,
66
- `--dev Configure static files for developing locally using a non-https server`,
67
68
  _chalk.default`--output-dir <dir> The directory to export the static files to. {dim Default: dist}`,
69
+ `--dev Configure static files for developing locally using a non-https server`,
70
+ `--no-minify Prevent minifying source`,
68
71
  `--max-workers <number> Maximum number of tasks to allow the bundler to spawn`,
69
- `--dump-assetmap Dump the asset map for further processing`,
70
- `--dump-sourcemap Dump the source map for debugging the JS bundle`,
72
+ `--dump-assetmap Emit an asset map for further processing`,
71
73
  _chalk.default`-p, --platform <platform> Options: android, ios, web, all. {dim Default: all}`,
72
- `--no-minify Prevent minifying source`,
74
+ `-s, --source-maps Emit JavaScript source maps`,
73
75
  `-c, --clear Clear the bundler cache`,
74
76
  `-h, --help Usage info`,
75
77
  ].join("\n"));
76
78
  }
77
79
  const projectRoot = (0, _args).getProjectRoot(args);
78
80
  const { resolveOptionsAsync } = await Promise.resolve().then(function() {
79
- return _interopRequireWildcard(require("./resolveOptions"));
81
+ return _interopRequireWildcard(require("./resolveOptions.js"));
80
82
  });
81
83
  const options = await resolveOptionsAsync(projectRoot, args).catch(_errors.logCmdError);
82
84
  const { exportAsync } = await Promise.resolve().then(function() {
83
- return _interopRequireWildcard(require("./exportAsync"));
85
+ return _interopRequireWildcard(require("./exportAsync.js"));
84
86
  });
85
87
  return exportAsync(projectRoot, options).catch(_errors.logCmdError);
86
88
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/export/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport chalk from 'chalk';\n\nimport { Command } from '../../bin/cli';\nimport { assertArgs, getProjectRoot, printHelp } from '../utils/args';\nimport { logCmdError } from '../utils/errors';\n\nexport const expoExport: Command = async (argv) => {\n const args = assertArgs(\n {\n // Types\n '--help': Boolean,\n '--clear': Boolean,\n '--dump-assetmap': Boolean,\n '--dev': Boolean,\n '--dump-sourcemap': Boolean,\n '--max-workers': Number,\n '--output-dir': String,\n '--platform': [String],\n '--no-minify': Boolean,\n\n // Hack: This is added because EAS CLI always includes the flag.\n // If supplied, we'll do nothing with the value, but at least the process won't crash.\n // Note that we also don't show this value in the `--help` prompt since we don't want people to use it.\n '--experimental-bundle': Boolean,\n\n // Aliases\n '-h': '--help',\n // '-s': '--dump-sourcemap',\n // '-d': '--dump-assetmap',\n '-c': '--clear',\n '-p': '--platform',\n // Interop with Metro docs and RedBox errors.\n '--reset-cache': '--clear',\n },\n argv\n );\n\n if (args['--help']) {\n printHelp(\n `Export the static files of the app for hosting it on a web server`,\n chalk`npx expo export {dim <dir>}`,\n [\n chalk`<dir> Directory of the Expo project. {dim Default: Current working directory}`,\n `--dev Configure static files for developing locally using a non-https server`,\n chalk`--output-dir <dir> The directory to export the static files to. {dim Default: dist}`,\n `--max-workers <number> Maximum number of tasks to allow the bundler to spawn`,\n `--dump-assetmap Dump the asset map for further processing`,\n `--dump-sourcemap Dump the source map for debugging the JS bundle`,\n chalk`-p, --platform <platform> Options: android, ios, web, all. {dim Default: all}`,\n `--no-minify Prevent minifying source`,\n `-c, --clear Clear the bundler cache`,\n `-h, --help Usage info`,\n ].join('\\n')\n );\n }\n\n const projectRoot = getProjectRoot(args);\n const { resolveOptionsAsync } = await import('./resolveOptions');\n const options = await resolveOptionsAsync(projectRoot, args).catch(logCmdError);\n\n const { exportAsync } = await import('./exportAsync');\n return exportAsync(projectRoot, options).catch(logCmdError);\n};\n"],"names":["expoExport","argv","args","assertArgs","Boolean","Number","String","printHelp","chalk","join","projectRoot","getProjectRoot","resolveOptionsAsync","options","catch","logCmdError","exportAsync"],"mappings":"AAAA;;;;;;AACkB,IAAA,MAAO,kCAAP,OAAO,EAAA;AAG6B,IAAA,KAAe,WAAf,eAAe,CAAA;AACzC,IAAA,OAAiB,WAAjB,iBAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtC,MAAMA,UAAU,GAAY,OAAOC,IAAI,GAAK;IACjD,MAAMC,IAAI,GAAGC,CAAAA,GAAAA,KAAU,AA4BtB,CAAA,WA5BsB,CACrB;QACE,QAAQ;QACR,QAAQ,EAAEC,OAAO;QACjB,SAAS,EAAEA,OAAO;QAClB,iBAAiB,EAAEA,OAAO;QAC1B,OAAO,EAAEA,OAAO;QAChB,kBAAkB,EAAEA,OAAO;QAC3B,eAAe,EAAEC,MAAM;QACvB,cAAc,EAAEC,MAAM;QACtB,YAAY,EAAE;YAACA,MAAM;SAAC;QACtB,aAAa,EAAEF,OAAO;QAEtB,gEAAgE;QAChE,sFAAsF;QACtF,uGAAuG;QACvG,uBAAuB,EAAEA,OAAO;QAEhC,UAAU;QACV,IAAI,EAAE,QAAQ;QACd,4BAA4B;QAC5B,2BAA2B;QAC3B,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,YAAY;QAClB,6CAA6C;QAC7C,eAAe,EAAE,SAAS;KAC3B,EACDH,IAAI,CACL,AAAC;IAEF,IAAIC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAClBK,CAAAA,GAAAA,KAAS,AAeR,CAAA,UAfQ,CACP,CAAC,iEAAiE,CAAC,EACnEC,MAAK,QAAA,CAAC,2BAA2B,CAAC,EAClC;YACEA,MAAK,QAAA,CAAC,kGAAkG,CAAC;YACzG,CAAC,iGAAiG,CAAC;YACnGA,MAAK,QAAA,CAAC,2FAA2F,CAAC;YAClG,CAAC,gFAAgF,CAAC;YAClF,CAAC,oEAAoE,CAAC;YACtE,CAAC,0EAA0E,CAAC;YAC5EA,MAAK,QAAA,CAAC,8EAA8E,CAAC;YACrF,CAAC,mDAAmD,CAAC;YACrD,CAAC,kDAAkD,CAAC;YACpD,CAAC,qCAAqC,CAAC;SACxC,CAACC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;KACH;IAED,MAAMC,WAAW,GAAGC,CAAAA,GAAAA,KAAc,AAAM,CAAA,eAAN,CAACT,IAAI,CAAC,AAAC;IACzC,MAAM,EAAEU,mBAAmB,CAAA,EAAE,GAAG,MAAM;+CAAO,kBAAkB;MAAC,AAAC;IACjE,MAAMC,OAAO,GAAG,MAAMD,mBAAmB,CAACF,WAAW,EAAER,IAAI,CAAC,CAACY,KAAK,CAACC,OAAW,YAAA,CAAC,AAAC;IAEhF,MAAM,EAAEC,WAAW,CAAA,EAAE,GAAG,MAAM;+CAAO,eAAe;MAAC,AAAC;IACtD,OAAOA,WAAW,CAACN,WAAW,EAAEG,OAAO,CAAC,CAACC,KAAK,CAACC,OAAW,YAAA,CAAC,CAAC;CAC7D,AAAC;QAxDWf,UAAU,GAAVA,UAAU"}
1
+ {"version":3,"sources":["../../../src/export/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport chalk from 'chalk';\n\nimport { Command } from '../../bin/cli';\nimport { assertArgs, getProjectRoot, printHelp } from '../utils/args';\nimport { logCmdError } from '../utils/errors';\n\nexport const expoExport: Command = async (argv) => {\n const args = assertArgs(\n {\n // Types\n '--help': Boolean,\n '--clear': Boolean,\n '--dump-assetmap': Boolean,\n '--dev': Boolean,\n '--source-maps': Boolean,\n '--max-workers': Number,\n '--output-dir': String,\n '--platform': [String],\n '--no-minify': Boolean,\n\n // Hack: This is added because EAS CLI always includes the flag.\n // If supplied, we'll do nothing with the value, but at least the process won't crash.\n // Note that we also don't show this value in the `--help` prompt since we don't want people to use it.\n '--experimental-bundle': Boolean,\n\n // Aliases\n '-h': '--help',\n '-s': '--source-maps',\n // '-d': '--dump-assetmap',\n '-c': '--clear',\n '-p': '--platform',\n // Interop with Metro docs and RedBox errors.\n '--reset-cache': '--clear',\n\n // Deprecated\n '--dump-sourcemap': '--source-maps',\n },\n argv\n );\n\n if (args['--help']) {\n printHelp(\n `Export the static files of the app for hosting it on a web server`,\n chalk`npx expo export {dim <dir>}`,\n [\n chalk`<dir> Directory of the Expo project. {dim Default: Current working directory}`,\n chalk`--output-dir <dir> The directory to export the static files to. {dim Default: dist}`,\n `--dev Configure static files for developing locally using a non-https server`,\n `--no-minify Prevent minifying source`,\n `--max-workers <number> Maximum number of tasks to allow the bundler to spawn`,\n `--dump-assetmap Emit an asset map for further processing`,\n chalk`-p, --platform <platform> Options: android, ios, web, all. {dim Default: all}`,\n `-s, --source-maps Emit JavaScript source maps`,\n `-c, --clear Clear the bundler cache`,\n `-h, --help Usage info`,\n ].join('\\n')\n );\n }\n\n const projectRoot = getProjectRoot(args);\n const { resolveOptionsAsync } = await import('./resolveOptions.js');\n const options = await resolveOptionsAsync(projectRoot, args).catch(logCmdError);\n\n const { exportAsync } = await import('./exportAsync.js');\n return exportAsync(projectRoot, options).catch(logCmdError);\n};\n"],"names":["expoExport","argv","args","assertArgs","Boolean","Number","String","printHelp","chalk","join","projectRoot","getProjectRoot","resolveOptionsAsync","options","catch","logCmdError","exportAsync"],"mappings":"AAAA;;;;;;AACkB,IAAA,MAAO,kCAAP,OAAO,EAAA;AAG6B,IAAA,KAAe,WAAf,eAAe,CAAA;AACzC,IAAA,OAAiB,WAAjB,iBAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtC,MAAMA,UAAU,GAAY,OAAOC,IAAI,GAAK;IACjD,MAAMC,IAAI,GAAGC,CAAAA,GAAAA,KAAU,AA+BtB,CAAA,WA/BsB,CACrB;QACE,QAAQ;QACR,QAAQ,EAAEC,OAAO;QACjB,SAAS,EAAEA,OAAO;QAClB,iBAAiB,EAAEA,OAAO;QAC1B,OAAO,EAAEA,OAAO;QAChB,eAAe,EAAEA,OAAO;QACxB,eAAe,EAAEC,MAAM;QACvB,cAAc,EAAEC,MAAM;QACtB,YAAY,EAAE;YAACA,MAAM;SAAC;QACtB,aAAa,EAAEF,OAAO;QAEtB,gEAAgE;QAChE,sFAAsF;QACtF,uGAAuG;QACvG,uBAAuB,EAAEA,OAAO;QAEhC,UAAU;QACV,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,eAAe;QACrB,2BAA2B;QAC3B,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,YAAY;QAClB,6CAA6C;QAC7C,eAAe,EAAE,SAAS;QAE1B,aAAa;QACb,kBAAkB,EAAE,eAAe;KACpC,EACDH,IAAI,CACL,AAAC;IAEF,IAAIC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAClBK,CAAAA,GAAAA,KAAS,AAeR,CAAA,UAfQ,CACP,CAAC,iEAAiE,CAAC,EACnEC,MAAK,QAAA,CAAC,2BAA2B,CAAC,EAClC;YACEA,MAAK,QAAA,CAAC,kGAAkG,CAAC;YACzGA,MAAK,QAAA,CAAC,2FAA2F,CAAC;YAClG,CAAC,iGAAiG,CAAC;YACnG,CAAC,mDAAmD,CAAC;YACrD,CAAC,gFAAgF,CAAC;YAClF,CAAC,mEAAmE,CAAC;YACrEA,MAAK,QAAA,CAAC,8EAA8E,CAAC;YACrF,CAAC,sDAAsD,CAAC;YACxD,CAAC,kDAAkD,CAAC;YACpD,CAAC,qCAAqC,CAAC;SACxC,CAACC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;KACH;IAED,MAAMC,WAAW,GAAGC,CAAAA,GAAAA,KAAc,AAAM,CAAA,eAAN,CAACT,IAAI,CAAC,AAAC;IACzC,MAAM,EAAEU,mBAAmB,CAAA,EAAE,GAAG,MAAM;+CAAO,qBAAqB;MAAC,AAAC;IACpE,MAAMC,OAAO,GAAG,MAAMD,mBAAmB,CAACF,WAAW,EAAER,IAAI,CAAC,CAACY,KAAK,CAACC,OAAW,YAAA,CAAC,AAAC;IAEhF,MAAM,EAAEC,WAAW,CAAA,EAAE,GAAG,MAAM;+CAAO,kBAAkB;MAAC,AAAC;IACzD,OAAOA,WAAW,CAACN,WAAW,EAAEG,OAAO,CAAC,CAACC,KAAK,CAACC,OAAW,YAAA,CAAC,CAAC;CAC7D,AAAC;QA3DWf,UAAU,GAAVA,UAAU"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.getAssetLocalPath = getAssetLocalPath;
6
+ exports.stripAssetPrefix = stripAssetPrefix;
7
+ var _path = _interopRequireDefault(require("path"));
8
+ function _interopRequireDefault(obj) {
9
+ return obj && obj.__esModule ? obj : {
10
+ default: obj
11
+ };
12
+ }
13
+ function getAssetLocalPath(asset, { baseUrl , scale , platform }) {
14
+ if (platform === "android") {
15
+ return getAssetLocalPathAndroid(asset, {
16
+ baseUrl,
17
+ scale
18
+ });
19
+ }
20
+ return getAssetLocalPathDefault(asset, {
21
+ baseUrl,
22
+ scale
23
+ });
24
+ }
25
+ function getAssetLocalPathAndroid(asset, { baseUrl , scale }) {
26
+ const androidFolder = getAndroidResourceFolderName(asset, scale);
27
+ const fileName = getResourceIdentifier(asset);
28
+ return _path.default.join(androidFolder, `${fileName}.${asset.type}`);
29
+ }
30
+ function getAssetLocalPathDefault(asset, { baseUrl , scale }) {
31
+ const suffix = scale === 1 ? "" : `@${scale}x`;
32
+ const fileName = `${asset.name + suffix}.${asset.type}`;
33
+ const adjustedHttpServerLocation = stripAssetPrefix(asset.httpServerLocation, baseUrl);
34
+ return _path.default.join(// Assets can have relative paths outside of the project root.
35
+ // Replace `../` with `_` to make sure they don't end up outside of
36
+ // the expected assets directory.
37
+ adjustedHttpServerLocation.replace(/^\/+/g, "").replace(/\.\.\//g, "_"), fileName);
38
+ }
39
+ function stripAssetPrefix(path, baseUrl) {
40
+ path = path.replace(/\/assets\?export_path=(.*)/, "$1");
41
+ // TODO: Windows?
42
+ if (baseUrl) {
43
+ return path.replace(/^\/+/g, "").replace(new RegExp(`^${baseUrl.replace(/^\/+/g, "").replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d")}`, "g"), "");
44
+ }
45
+ return path;
46
+ }
47
+ /**
48
+ * FIXME: using number to represent discrete scale numbers is fragile in essence because of
49
+ * floating point numbers imprecision.
50
+ */ function getAndroidAssetSuffix(scale) {
51
+ switch(scale){
52
+ case 0.75:
53
+ return "ldpi";
54
+ case 1:
55
+ return "mdpi";
56
+ case 1.5:
57
+ return "hdpi";
58
+ case 2:
59
+ return "xhdpi";
60
+ case 3:
61
+ return "xxhdpi";
62
+ case 4:
63
+ return "xxxhdpi";
64
+ default:
65
+ return null;
66
+ }
67
+ }
68
+ // See https://developer.android.com/guide/topics/resources/drawable-resource.html
69
+ const drawableFileTypes = new Set([
70
+ "gif",
71
+ "jpeg",
72
+ "jpg",
73
+ "png",
74
+ "webp",
75
+ "xml"
76
+ ]);
77
+ function getAndroidResourceFolderName(asset, scale) {
78
+ if (!drawableFileTypes.has(asset.type)) {
79
+ return "raw";
80
+ }
81
+ const suffix = getAndroidAssetSuffix(scale);
82
+ if (!suffix) {
83
+ throw new Error(`Asset "${JSON.stringify(asset)}" does not use a supported Android resolution suffix`);
84
+ }
85
+ return `drawable-${suffix}`;
86
+ }
87
+ function getResourceIdentifier(asset) {
88
+ const folderPath = getBaseUrl(asset);
89
+ return `${folderPath}/${asset.name}`.toLowerCase().replace(/\//g, "_") // Encode folder structure in file name
90
+ .replace(/([^a-z0-9_])/g, "") // Remove illegal chars
91
+ .replace(/^assets_/, ""); // Remove "assets_" prefix
92
+ }
93
+ function getBaseUrl(asset) {
94
+ let baseUrl = asset.httpServerLocation;
95
+ if (baseUrl[0] === "/") {
96
+ baseUrl = baseUrl.substring(1);
97
+ }
98
+ return baseUrl;
99
+ }
100
+
101
+ //# sourceMappingURL=metroAssetLocalPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/export/metroAssetLocalPath.ts"],"sourcesContent":["/**\n * Copyright © 2023 650 Industries.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * Based on the community asset persisting for Metro but with base path and web support:\n * https://github.com/facebook/react-native/blob/d6e0bc714ad4d215ede4949d3c4f44af6dea5dd3/packages/community-cli-plugin/src/commands/bundle/saveAssets.js#L1\n */\nimport type { AssetData } from 'metro';\nimport path from 'path';\n\nexport function getAssetLocalPath(\n asset: Pick<AssetData, 'type' | 'httpServerLocation' | 'name'>,\n { baseUrl, scale, platform }: { baseUrl?: string; scale: number; platform: string }\n): string {\n if (platform === 'android') {\n return getAssetLocalPathAndroid(asset, { baseUrl, scale });\n }\n return getAssetLocalPathDefault(asset, { baseUrl, scale });\n}\n\nfunction getAssetLocalPathAndroid(\n asset: Pick<AssetData, 'type' | 'httpServerLocation' | 'name'>,\n {\n baseUrl,\n scale,\n }: {\n // TODO: baseUrl support\n baseUrl?: string;\n scale: number;\n }\n): string {\n const androidFolder = getAndroidResourceFolderName(asset, scale);\n const fileName = getResourceIdentifier(asset);\n return path.join(androidFolder, `${fileName}.${asset.type}`);\n}\n\nfunction getAssetLocalPathDefault(\n asset: Pick<AssetData, 'type' | 'httpServerLocation' | 'name'>,\n { baseUrl, scale }: { baseUrl?: string; scale: number }\n): string {\n const suffix = scale === 1 ? '' : `@${scale}x`;\n const fileName = `${asset.name + suffix}.${asset.type}`;\n\n const adjustedHttpServerLocation = stripAssetPrefix(asset.httpServerLocation, baseUrl);\n return path.join(\n // Assets can have relative paths outside of the project root.\n // Replace `../` with `_` to make sure they don't end up outside of\n // the expected assets directory.\n adjustedHttpServerLocation.replace(/^\\/+/g, '').replace(/\\.\\.\\//g, '_'),\n fileName\n );\n}\n\nexport function stripAssetPrefix(path: string, baseUrl?: string) {\n path = path.replace(/\\/assets\\?export_path=(.*)/, '$1');\n\n // TODO: Windows?\n if (baseUrl) {\n return path.replace(/^\\/+/g, '').replace(\n new RegExp(\n `^${baseUrl\n .replace(/^\\/+/g, '')\n .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n .replace(/-/g, '\\\\x2d')}`,\n 'g'\n ),\n ''\n );\n }\n return path;\n}\n\n/**\n * FIXME: using number to represent discrete scale numbers is fragile in essence because of\n * floating point numbers imprecision.\n */\nfunction getAndroidAssetSuffix(scale: number): string | null {\n switch (scale) {\n case 0.75:\n return 'ldpi';\n case 1:\n return 'mdpi';\n case 1.5:\n return 'hdpi';\n case 2:\n return 'xhdpi';\n case 3:\n return 'xxhdpi';\n case 4:\n return 'xxxhdpi';\n default:\n return null;\n }\n}\n\n// See https://developer.android.com/guide/topics/resources/drawable-resource.html\nconst drawableFileTypes = new Set<string>(['gif', 'jpeg', 'jpg', 'png', 'webp', 'xml']);\n\nfunction getAndroidResourceFolderName(asset: Pick<AssetData, 'type'>, scale: number): string {\n if (!drawableFileTypes.has(asset.type)) {\n return 'raw';\n }\n const suffix = getAndroidAssetSuffix(scale);\n if (!suffix) {\n throw new Error(\n `Asset \"${JSON.stringify(asset)}\" does not use a supported Android resolution suffix`\n );\n }\n return `drawable-${suffix}`;\n}\n\nfunction getResourceIdentifier(asset: Pick<AssetData, 'httpServerLocation' | 'name'>): string {\n const folderPath = getBaseUrl(asset);\n return `${folderPath}/${asset.name}`\n .toLowerCase()\n .replace(/\\//g, '_') // Encode folder structure in file name\n .replace(/([^a-z0-9_])/g, '') // Remove illegal chars\n .replace(/^assets_/, ''); // Remove \"assets_\" prefix\n}\n\nfunction getBaseUrl(asset: Pick<AssetData, 'httpServerLocation'>): string {\n let baseUrl = asset.httpServerLocation;\n if (baseUrl[0] === '/') {\n baseUrl = baseUrl.substring(1);\n }\n return baseUrl;\n}\n"],"names":["getAssetLocalPath","stripAssetPrefix","asset","baseUrl","scale","platform","getAssetLocalPathAndroid","getAssetLocalPathDefault","androidFolder","getAndroidResourceFolderName","fileName","getResourceIdentifier","path","join","type","suffix","name","adjustedHttpServerLocation","httpServerLocation","replace","RegExp","getAndroidAssetSuffix","drawableFileTypes","Set","has","Error","JSON","stringify","folderPath","getBaseUrl","toLowerCase","substring"],"mappings":"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"}
@@ -3,34 +3,111 @@ Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
5
  exports.persistMetroAssetsAsync = persistMetroAssetsAsync;
6
- exports.stripAssetPrefix = stripAssetPrefix;
6
+ exports.copyInBatchesAsync = copyInBatchesAsync;
7
+ exports.filterPlatformAssetScales = filterPlatformAssetScales;
7
8
  var _fs = _interopRequireDefault(require("fs"));
8
9
  var _path = _interopRequireDefault(require("path"));
10
+ var _metroAssetLocalPath = require("./metroAssetLocalPath");
9
11
  var _log = require("../log");
10
12
  function _interopRequireDefault(obj) {
11
13
  return obj && obj.__esModule ? obj : {
12
14
  default: obj
13
15
  };
14
16
  }
15
- function persistMetroAssetsAsync(assets, { platform , outputDirectory , basePath }) {
16
- const files = assets.reduce((acc, asset)=>{
17
+ function cleanAssetCatalog(catalogDir) {
18
+ const files = _fs.default.readdirSync(catalogDir).filter((file)=>file.endsWith(".imageset")
19
+ );
20
+ for (const file1 of files){
21
+ _fs.default.rmSync(_path.default.join(catalogDir, file1));
22
+ }
23
+ }
24
+ function persistMetroAssetsAsync(assets, { platform , outputDirectory , baseUrl , iosAssetCatalogDirectory }) {
25
+ if (outputDirectory == null) {
26
+ _log.Log.warn("Assets destination folder is not set, skipping...");
27
+ return;
28
+ }
29
+ let assetsToCopy = [];
30
+ if (platform === "ios" && iosAssetCatalogDirectory != null) {
31
+ // Use iOS Asset Catalog for images. This will allow Apple app thinning to
32
+ // remove unused scales from the optimized bundle.
33
+ const catalogDir = _path.default.join(iosAssetCatalogDirectory, "RNAssets.xcassets");
34
+ if (!_fs.default.existsSync(catalogDir)) {
35
+ _log.Log.error(`Could not find asset catalog 'RNAssets.xcassets' in ${iosAssetCatalogDirectory}. Make sure to create it if it does not exist.`);
36
+ return;
37
+ }
38
+ _log.Log.log("Adding images to asset catalog", catalogDir);
39
+ cleanAssetCatalog(catalogDir);
40
+ for (const asset of assets){
41
+ if (isCatalogAsset(asset)) {
42
+ const imageSet = getImageSet(catalogDir, asset, filterPlatformAssetScales(platform, asset.scales));
43
+ writeImageSet(imageSet);
44
+ } else {
45
+ assetsToCopy.push(asset);
46
+ }
47
+ }
48
+ _log.Log.log("Done adding images to asset catalog");
49
+ } else {
50
+ assetsToCopy = [
51
+ ...assets
52
+ ];
53
+ }
54
+ const files = assetsToCopy.reduce((acc, asset)=>{
17
55
  const validScales = new Set(filterPlatformAssetScales(platform, asset.scales));
18
56
  asset.scales.forEach((scale, idx)=>{
19
57
  if (!validScales.has(scale)) {
20
58
  return;
21
59
  }
22
60
  const src = asset.files[idx];
23
- const dest = _path.default.join(outputDirectory, getAssetLocalPath(asset, {
61
+ const dest = _path.default.join(outputDirectory, (0, _metroAssetLocalPath).getAssetLocalPath(asset, {
62
+ platform,
24
63
  scale,
25
- basePath
64
+ baseUrl
26
65
  }));
27
66
  acc[src] = dest;
28
67
  });
29
68
  return acc;
30
69
  }, {});
31
- return copyAll(files);
70
+ return copyInBatchesAsync(files);
71
+ }
72
+ function writeImageSet(imageSet) {
73
+ _fs.default.mkdirSync(imageSet.baseUrl, {
74
+ recursive: true
75
+ });
76
+ for (const file2 of imageSet.files){
77
+ const dest = _path.default.join(imageSet.baseUrl, file2.name);
78
+ _fs.default.copyFileSync(file2.src, dest);
79
+ }
80
+ _fs.default.writeFileSync(_path.default.join(imageSet.baseUrl, "Contents.json"), JSON.stringify({
81
+ images: imageSet.files.map((file)=>({
82
+ filename: file.name,
83
+ idiom: "universal",
84
+ scale: `${file.scale}x`
85
+ })
86
+ ),
87
+ info: {
88
+ author: "expo",
89
+ version: 1
90
+ }
91
+ }));
92
+ }
93
+ function isCatalogAsset(asset) {
94
+ return asset.type === "png" || asset.type === "jpg" || asset.type === "jpeg";
95
+ }
96
+ function getImageSet(catalogDir, asset, scales) {
97
+ const fileName = getResourceIdentifier(asset);
98
+ return {
99
+ baseUrl: _path.default.join(catalogDir, `${fileName}.imageset`),
100
+ files: scales.map((scale, idx)=>{
101
+ const suffix = scale === 1 ? "" : `@${scale}x`;
102
+ return {
103
+ name: `${fileName + suffix}.${asset.type}`,
104
+ scale,
105
+ src: asset.files[idx]
106
+ };
107
+ })
108
+ };
32
109
  }
33
- function copyAll(filesToCopy) {
110
+ function copyInBatchesAsync(filesToCopy) {
34
111
  const queue = Object.keys(filesToCopy);
35
112
  if (queue.length === 0) {
36
113
  return;
@@ -97,22 +174,18 @@ function filterPlatformAssetScales(platform, scales) {
97
174
  }
98
175
  return result;
99
176
  }
100
- function getAssetLocalPath(asset, { basePath , scale }) {
101
- const suffix = scale === 1 ? "" : `@${scale}x`;
102
- const fileName = `${asset.name + suffix}.${asset.type}`;
103
- const adjustedHttpServerLocation = stripAssetPrefix(asset.httpServerLocation, basePath);
104
- return _path.default.join(// Assets can have relative paths outside of the project root.
105
- // Replace `../` with `_` to make sure they don't end up outside of
106
- // the expected assets directory.
107
- adjustedHttpServerLocation.replace(/^\/+/g, "").replace(/\.\.\//g, "_"), fileName);
177
+ function getResourceIdentifier(asset) {
178
+ const folderPath = getBaseUrl(asset);
179
+ return `${folderPath}/${asset.name}`.toLowerCase().replace(/\//g, "_") // Encode folder structure in file name
180
+ .replace(/([^a-z0-9_])/g, "") // Remove illegal chars
181
+ .replace(/^assets_/, ""); // Remove "assets_" prefix
108
182
  }
109
- function stripAssetPrefix(path, basePath) {
110
- path = path.replace(/\/assets\?export_path=(.*)/, "$1");
111
- // TODO: Windows?
112
- if (basePath) {
113
- return path.replace(/^\/+/g, "").replace(new RegExp(`^${basePath.replace(/^\/+/g, "").replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d")}`, "g"), "");
183
+ function getBaseUrl(asset) {
184
+ let baseUrl = asset.httpServerLocation;
185
+ if (baseUrl[0] === "/") {
186
+ baseUrl = baseUrl.substring(1);
114
187
  }
115
- return path;
188
+ return baseUrl;
116
189
  }
117
190
 
118
191
  //# sourceMappingURL=persistMetroAssets.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/export/persistMetroAssets.ts"],"sourcesContent":["import fs from 'fs';\nimport type { AssetData, AssetDataWithoutFiles } from 'metro';\nimport path from 'path';\n\nimport { Log } from '../log';\n\nexport function persistMetroAssetsAsync(\n assets: readonly AssetData[],\n {\n platform,\n outputDirectory,\n basePath,\n }: {\n platform: string;\n outputDirectory: string;\n basePath?: string;\n }\n) {\n const files = assets.reduce<Record<string, string>>((acc, asset) => {\n const validScales = new Set(filterPlatformAssetScales(platform, asset.scales));\n\n asset.scales.forEach((scale, idx) => {\n if (!validScales.has(scale)) {\n return;\n }\n const src = asset.files[idx];\n const dest = path.join(outputDirectory, getAssetLocalPath(asset, { scale, basePath }));\n acc[src] = dest;\n });\n return acc;\n }, {});\n\n return copyAll(files);\n}\n\nfunction copyAll(filesToCopy: Record<string, string>) {\n const queue = Object.keys(filesToCopy);\n if (queue.length === 0) {\n return;\n }\n\n Log.log(`Copying ${queue.length} asset files`);\n return new Promise<void>((resolve, reject) => {\n const copyNext = (error?: NodeJS.ErrnoException) => {\n if (error) {\n return reject(error);\n }\n if (queue.length) {\n // queue.length === 0 is checked in previous branch, so this is string\n const src = queue.shift() as string;\n const dest = filesToCopy[src];\n copy(src, dest, copyNext);\n } else {\n Log.log('Persisted assets');\n resolve();\n }\n };\n copyNext();\n });\n}\n\nfunction copy(src: string, dest: string, callback: (error: NodeJS.ErrnoException) => void): void {\n fs.mkdir(path.dirname(dest), { recursive: true }, (err?) => {\n if (err) {\n callback(err);\n return;\n }\n fs.createReadStream(src).pipe(fs.createWriteStream(dest)).on('finish', callback);\n });\n}\n\nconst ALLOWED_SCALES: { [key: string]: number[] } = {\n ios: [1, 2, 3],\n};\n\nfunction filterPlatformAssetScales(platform: string, scales: readonly number[]): readonly number[] {\n const whitelist: number[] = ALLOWED_SCALES[platform];\n if (!whitelist) {\n return scales;\n }\n const result = scales.filter((scale) => whitelist.includes(scale));\n if (!result.length && scales.length) {\n // No matching scale found, but there are some available. Ideally we don't\n // want to be in this situation and should throw, but for now as a fallback\n // let's just use the closest larger image\n const maxScale = whitelist[whitelist.length - 1];\n for (const scale of scales) {\n if (scale > maxScale) {\n result.push(scale);\n break;\n }\n }\n\n // There is no larger scales available, use the largest we have\n if (!result.length) {\n result.push(scales[scales.length - 1]);\n }\n }\n return result;\n}\n\nfunction getAssetLocalPath(\n asset: AssetDataWithoutFiles,\n { basePath, scale }: { basePath?: string; scale: number }\n): string {\n const suffix = scale === 1 ? '' : `@${scale}x`;\n const fileName = `${asset.name + suffix}.${asset.type}`;\n\n const adjustedHttpServerLocation = stripAssetPrefix(asset.httpServerLocation, basePath);\n return path.join(\n // Assets can have relative paths outside of the project root.\n // Replace `../` with `_` to make sure they don't end up outside of\n // the expected assets directory.\n adjustedHttpServerLocation.replace(/^\\/+/g, '').replace(/\\.\\.\\//g, '_'),\n fileName\n );\n}\n\nexport function stripAssetPrefix(path: string, basePath?: string) {\n path = path.replace(/\\/assets\\?export_path=(.*)/, '$1');\n\n // TODO: Windows?\n if (basePath) {\n return path.replace(/^\\/+/g, '').replace(\n new RegExp(\n `^${basePath\n .replace(/^\\/+/g, '')\n .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n .replace(/-/g, '\\\\x2d')}`,\n 'g'\n ),\n ''\n );\n }\n return path;\n}\n"],"names":["persistMetroAssetsAsync","stripAssetPrefix","assets","platform","outputDirectory","basePath","files","reduce","acc","asset","validScales","Set","filterPlatformAssetScales","scales","forEach","scale","idx","has","src","dest","path","join","getAssetLocalPath","copyAll","filesToCopy","queue","Object","keys","length","Log","log","Promise","resolve","reject","copyNext","error","shift","copy","callback","fs","mkdir","dirname","recursive","err","createReadStream","pipe","createWriteStream","on","ALLOWED_SCALES","ios","whitelist","result","filter","includes","maxScale","push","suffix","fileName","name","type","adjustedHttpServerLocation","httpServerLocation","replace","RegExp"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/export/persistMetroAssets.ts"],"sourcesContent":["/**\n * Copyright © 2023 650 Industries.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * Based on the community asset persisting for Metro but with base path and web support:\n * https://github.com/facebook/react-native/blob/d6e0bc714ad4d215ede4949d3c4f44af6dea5dd3/packages/community-cli-plugin/src/commands/bundle/saveAssets.js#L1\n */\nimport fs from 'fs';\nimport type { AssetData } from 'metro';\nimport path from 'path';\n\nimport { getAssetLocalPath } from './metroAssetLocalPath';\nimport { Log } from '../log';\n\nfunction cleanAssetCatalog(catalogDir: string): void {\n const files = fs.readdirSync(catalogDir).filter((file) => file.endsWith('.imageset'));\n for (const file of files) {\n fs.rmSync(path.join(catalogDir, file));\n }\n}\n\nexport function persistMetroAssetsAsync(\n assets: readonly AssetData[],\n {\n platform,\n outputDirectory,\n baseUrl,\n iosAssetCatalogDirectory,\n }: {\n platform: string;\n outputDirectory: string;\n baseUrl?: string;\n iosAssetCatalogDirectory?: string;\n }\n) {\n if (outputDirectory == null) {\n Log.warn('Assets destination folder is not set, skipping...');\n return;\n }\n\n let assetsToCopy: AssetData[] = [];\n\n if (platform === 'ios' && iosAssetCatalogDirectory != null) {\n // Use iOS Asset Catalog for images. This will allow Apple app thinning to\n // remove unused scales from the optimized bundle.\n const catalogDir = path.join(iosAssetCatalogDirectory, 'RNAssets.xcassets');\n if (!fs.existsSync(catalogDir)) {\n Log.error(\n `Could not find asset catalog 'RNAssets.xcassets' in ${iosAssetCatalogDirectory}. Make sure to create it if it does not exist.`\n );\n return;\n }\n\n Log.log('Adding images to asset catalog', catalogDir);\n cleanAssetCatalog(catalogDir);\n for (const asset of assets) {\n if (isCatalogAsset(asset)) {\n const imageSet = getImageSet(\n catalogDir,\n asset,\n filterPlatformAssetScales(platform, asset.scales)\n );\n writeImageSet(imageSet);\n } else {\n assetsToCopy.push(asset);\n }\n }\n Log.log('Done adding images to asset catalog');\n } else {\n assetsToCopy = [...assets];\n }\n\n const files = assetsToCopy.reduce<Record<string, string>>((acc, asset) => {\n const validScales = new Set(filterPlatformAssetScales(platform, asset.scales));\n\n asset.scales.forEach((scale, idx) => {\n if (!validScales.has(scale)) {\n return;\n }\n const src = asset.files[idx];\n const dest = path.join(\n outputDirectory,\n getAssetLocalPath(asset, { platform, scale, baseUrl })\n );\n acc[src] = dest;\n });\n return acc;\n }, {});\n\n return copyInBatchesAsync(files);\n}\n\nfunction writeImageSet(imageSet: ImageSet): void {\n fs.mkdirSync(imageSet.baseUrl, { recursive: true });\n\n for (const file of imageSet.files) {\n const dest = path.join(imageSet.baseUrl, file.name);\n fs.copyFileSync(file.src, dest);\n }\n\n fs.writeFileSync(\n path.join(imageSet.baseUrl, 'Contents.json'),\n JSON.stringify({\n images: imageSet.files.map((file) => ({\n filename: file.name,\n idiom: 'universal',\n scale: `${file.scale}x`,\n })),\n info: {\n author: 'expo',\n version: 1,\n },\n })\n );\n}\n\nfunction isCatalogAsset(asset: Pick<AssetData, 'type'>): boolean {\n return asset.type === 'png' || asset.type === 'jpg' || asset.type === 'jpeg';\n}\n\ntype ImageSet = {\n baseUrl: string;\n files: { name: string; src: string; scale: number }[];\n};\n\nfunction getImageSet(\n catalogDir: string,\n asset: Pick<AssetData, 'httpServerLocation' | 'name' | 'type' | 'files'>,\n scales: number[]\n): ImageSet {\n const fileName = getResourceIdentifier(asset);\n return {\n baseUrl: path.join(catalogDir, `${fileName}.imageset`),\n files: scales.map((scale, idx) => {\n const suffix = scale === 1 ? '' : `@${scale}x`;\n return {\n name: `${fileName + suffix}.${asset.type}`,\n scale,\n src: asset.files[idx],\n };\n }),\n };\n}\n\nexport function copyInBatchesAsync(filesToCopy: Record<string, string>) {\n const queue = Object.keys(filesToCopy);\n if (queue.length === 0) {\n return;\n }\n\n Log.log(`Copying ${queue.length} asset files`);\n return new Promise<void>((resolve, reject) => {\n const copyNext = (error?: NodeJS.ErrnoException) => {\n if (error) {\n return reject(error);\n }\n if (queue.length) {\n // queue.length === 0 is checked in previous branch, so this is string\n const src = queue.shift() as string;\n const dest = filesToCopy[src];\n copy(src, dest, copyNext);\n } else {\n Log.log('Persisted assets');\n resolve();\n }\n };\n copyNext();\n });\n}\n\nfunction copy(src: string, dest: string, callback: (error: NodeJS.ErrnoException) => void): void {\n fs.mkdir(path.dirname(dest), { recursive: true }, (err?) => {\n if (err) {\n callback(err);\n return;\n }\n fs.createReadStream(src).pipe(fs.createWriteStream(dest)).on('finish', callback);\n });\n}\n\nconst ALLOWED_SCALES: { [key: string]: number[] } = {\n ios: [1, 2, 3],\n};\n\nexport function filterPlatformAssetScales(platform: string, scales: number[]): number[] {\n const whitelist: number[] = ALLOWED_SCALES[platform];\n if (!whitelist) {\n return scales;\n }\n const result = scales.filter((scale) => whitelist.includes(scale));\n if (!result.length && scales.length) {\n // No matching scale found, but there are some available. Ideally we don't\n // want to be in this situation and should throw, but for now as a fallback\n // let's just use the closest larger image\n const maxScale = whitelist[whitelist.length - 1];\n for (const scale of scales) {\n if (scale > maxScale) {\n result.push(scale);\n break;\n }\n }\n\n // There is no larger scales available, use the largest we have\n if (!result.length) {\n result.push(scales[scales.length - 1]);\n }\n }\n return result;\n}\n\nfunction getResourceIdentifier(asset: Pick<AssetData, 'httpServerLocation' | 'name'>): string {\n const folderPath = getBaseUrl(asset);\n return `${folderPath}/${asset.name}`\n .toLowerCase()\n .replace(/\\//g, '_') // Encode folder structure in file name\n .replace(/([^a-z0-9_])/g, '') // Remove illegal chars\n .replace(/^assets_/, ''); // Remove \"assets_\" prefix\n}\n\nfunction getBaseUrl(asset: Pick<AssetData, 'httpServerLocation'>): string {\n let baseUrl = asset.httpServerLocation;\n if (baseUrl[0] === '/') {\n baseUrl = baseUrl.substring(1);\n }\n return baseUrl;\n}\n"],"names":["persistMetroAssetsAsync","copyInBatchesAsync","filterPlatformAssetScales","cleanAssetCatalog","catalogDir","files","fs","readdirSync","filter","file","endsWith","rmSync","path","join","assets","platform","outputDirectory","baseUrl","iosAssetCatalogDirectory","Log","warn","assetsToCopy","existsSync","error","log","asset","isCatalogAsset","imageSet","getImageSet","scales","writeImageSet","push","reduce","acc","validScales","Set","forEach","scale","idx","has","src","dest","getAssetLocalPath","mkdirSync","recursive","name","copyFileSync","writeFileSync","JSON","stringify","images","map","filename","idiom","info","author","version","type","fileName","getResourceIdentifier","suffix","filesToCopy","queue","Object","keys","length","Promise","resolve","reject","copyNext","shift","copy","callback","mkdir","dirname","err","createReadStream","pipe","createWriteStream","on","ALLOWED_SCALES","ios","whitelist","result","includes","maxScale","folderPath","getBaseUrl","toLowerCase","replace","httpServerLocation","substring"],"mappings":"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"}
@@ -56,7 +56,7 @@ async function resolveOptionsAsync(projectRoot, args) {
56
56
  dev: !!args["--dev"],
57
57
  maxWorkers: args["--max-workers"],
58
58
  dumpAssetmap: !!args["--dump-assetmap"],
59
- dumpSourcemap: !!args["--dump-sourcemap"]
59
+ sourceMaps: !!args["--source-maps"]
60
60
  };
61
61
  }
62
62
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/export/resolveOptions.ts"],"sourcesContent":["import { getConfig, Platform } from '@expo/config';\n\nimport { getPlatformBundlers, PlatformBundlers } from '../start/server/platformBundlers';\nimport { CommandError } from '../utils/errors';\n\nexport type Options = {\n outputDir: string;\n platforms: Platform[];\n maxWorkers?: number;\n dev: boolean;\n clear: boolean;\n minify: boolean;\n dumpAssetmap: boolean;\n dumpSourcemap: boolean;\n};\n\n/** Returns an array of platforms based on the input platform identifier and runtime constraints. */\nexport function resolvePlatformOption(\n platformBundlers: PlatformBundlers,\n platform: string[] = ['all']\n): Platform[] {\n const platformsAvailable: Partial<PlatformBundlers> = Object.fromEntries(\n Object.entries(platformBundlers).filter(([, bundler]) => bundler === 'metro')\n );\n\n if (!Object.keys(platformsAvailable).length) {\n throw new CommandError(\n `No platforms are configured to use the Metro bundler in the project Expo config.`\n );\n }\n\n const assertPlatformBundler = (platform: Platform): Platform => {\n if (!platformsAvailable[platform]) {\n throw new CommandError(\n 'BAD_ARGS',\n `Platform \"${platform}\" is not configured to use the Metro bundler in the project Expo config.`\n );\n }\n\n return platform;\n };\n\n const knownPlatforms = ['android', 'ios', 'web'] as Platform[];\n const assertPlatformIsKnown = (platform: string): Platform => {\n if (!knownPlatforms.includes(platform as Platform)) {\n throw new CommandError(\n `Unsupported platform \"${platform}\". Options are: ${knownPlatforms.join(',')},all`\n );\n }\n\n return platform as Platform;\n };\n\n return (\n platform\n // Expand `all` to all available platforms.\n .map((platform) => (platform === 'all' ? Object.keys(platformsAvailable) : platform))\n .flat()\n // Remove duplicated platforms\n .filter((platform, index, list) => list.indexOf(platform) === index)\n // Assert platforms are valid\n .map((platform) => assertPlatformIsKnown(platform))\n .map((platform) => assertPlatformBundler(platform))\n );\n}\n\nexport async function resolveOptionsAsync(projectRoot: string, args: any): Promise<Options> {\n const { exp } = getConfig(projectRoot, { skipPlugins: true, skipSDKVersionRequirement: true });\n const platformBundlers = getPlatformBundlers(exp);\n\n return {\n platforms: resolvePlatformOption(platformBundlers, args['--platform']),\n outputDir: args['--output-dir'] ?? 'dist',\n minify: !args['--no-minify'],\n clear: !!args['--clear'],\n dev: !!args['--dev'],\n maxWorkers: args['--max-workers'],\n dumpAssetmap: !!args['--dump-assetmap'],\n dumpSourcemap: !!args['--dump-sourcemap'],\n };\n}\n"],"names":["resolvePlatformOption","resolveOptionsAsync","platformBundlers","platform","platformsAvailable","Object","fromEntries","entries","filter","bundler","keys","length","CommandError","assertPlatformBundler","knownPlatforms","assertPlatformIsKnown","includes","join","map","flat","index","list","indexOf","projectRoot","args","exp","getConfig","skipPlugins","skipSDKVersionRequirement","getPlatformBundlers","platforms","outputDir","minify","clear","dev","maxWorkers","dumpAssetmap","dumpSourcemap"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/export/resolveOptions.ts"],"sourcesContent":["import { getConfig, Platform } from '@expo/config';\n\nimport { getPlatformBundlers, PlatformBundlers } from '../start/server/platformBundlers';\nimport { CommandError } from '../utils/errors';\n\nexport type Options = {\n outputDir: string;\n platforms: Platform[];\n maxWorkers?: number;\n dev: boolean;\n clear: boolean;\n minify: boolean;\n dumpAssetmap: boolean;\n sourceMaps: boolean;\n};\n\n/** Returns an array of platforms based on the input platform identifier and runtime constraints. */\nexport function resolvePlatformOption(\n platformBundlers: PlatformBundlers,\n platform: string[] = ['all']\n): Platform[] {\n const platformsAvailable: Partial<PlatformBundlers> = Object.fromEntries(\n Object.entries(platformBundlers).filter(([, bundler]) => bundler === 'metro')\n );\n\n if (!Object.keys(platformsAvailable).length) {\n throw new CommandError(\n `No platforms are configured to use the Metro bundler in the project Expo config.`\n );\n }\n\n const assertPlatformBundler = (platform: Platform): Platform => {\n if (!platformsAvailable[platform]) {\n throw new CommandError(\n 'BAD_ARGS',\n `Platform \"${platform}\" is not configured to use the Metro bundler in the project Expo config.`\n );\n }\n\n return platform;\n };\n\n const knownPlatforms = ['android', 'ios', 'web'] as Platform[];\n const assertPlatformIsKnown = (platform: string): Platform => {\n if (!knownPlatforms.includes(platform as Platform)) {\n throw new CommandError(\n `Unsupported platform \"${platform}\". Options are: ${knownPlatforms.join(',')},all`\n );\n }\n\n return platform as Platform;\n };\n\n return (\n platform\n // Expand `all` to all available platforms.\n .map((platform) => (platform === 'all' ? Object.keys(platformsAvailable) : platform))\n .flat()\n // Remove duplicated platforms\n .filter((platform, index, list) => list.indexOf(platform) === index)\n // Assert platforms are valid\n .map((platform) => assertPlatformIsKnown(platform))\n .map((platform) => assertPlatformBundler(platform))\n );\n}\n\nexport async function resolveOptionsAsync(projectRoot: string, args: any): Promise<Options> {\n const { exp } = getConfig(projectRoot, { skipPlugins: true, skipSDKVersionRequirement: true });\n const platformBundlers = getPlatformBundlers(exp);\n\n return {\n platforms: resolvePlatformOption(platformBundlers, args['--platform']),\n outputDir: args['--output-dir'] ?? 'dist',\n minify: !args['--no-minify'],\n clear: !!args['--clear'],\n dev: !!args['--dev'],\n maxWorkers: args['--max-workers'],\n dumpAssetmap: !!args['--dump-assetmap'],\n sourceMaps: !!args['--source-maps'],\n };\n}\n"],"names":["resolvePlatformOption","resolveOptionsAsync","platformBundlers","platform","platformsAvailable","Object","fromEntries","entries","filter","bundler","keys","length","CommandError","assertPlatformBundler","knownPlatforms","assertPlatformIsKnown","includes","join","map","flat","index","list","indexOf","projectRoot","args","exp","getConfig","skipPlugins","skipSDKVersionRequirement","getPlatformBundlers","platforms","outputDir","minify","clear","dev","maxWorkers","dumpAssetmap","sourceMaps"],"mappings":"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"}
@@ -4,63 +4,24 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  exports.saveAssetsAsync = saveAssetsAsync;
6
6
  var _path = _interopRequireDefault(require("path"));
7
- var Log = _interopRequireWildcard(require("../log"));
8
- var _array = require("../utils/array");
9
- var _dir = require("../utils/dir");
7
+ var _persistMetroAssets = require("./persistMetroAssets");
10
8
  function _interopRequireDefault(obj) {
11
9
  return obj && obj.__esModule ? obj : {
12
10
  default: obj
13
11
  };
14
12
  }
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
- const debug = require("debug")("expo:export:saveAssets");
37
- function logAssetTask(projectRoot, action, pathName) {
38
- debug(`${action} ${pathName}`);
39
- const relativePath = pathName.replace(projectRoot, "");
40
- Log.log(`${action} ${relativePath}`);
41
- }
42
- function collectAssetPaths(assets) {
43
- // Collect paths by key, also effectively handles duplicates in the array
13
+ async function saveAssetsAsync({ assets , outputDir }) {
44
14
  const paths = {};
15
+ const hashes = new Set();
45
16
  assets.forEach((asset)=>{
46
- asset.files.forEach((path, index)=>{
47
- paths[asset.fileHashes[index]] = path;
17
+ asset.files.forEach((fp, index)=>{
18
+ const hash = asset.fileHashes[index];
19
+ if (hashes.has(hash)) return;
20
+ hashes.add(hash);
21
+ paths[fp] = _path.default.join(outputDir, "assets", hash);
48
22
  });
49
23
  });
50
- return paths;
51
- }
52
- async function saveAssetsAsync(projectRoot, { assets , outputDir }) {
53
- // Collect paths by key, also effectively handles duplicates in the array
54
- const paths = collectAssetPaths(assets);
55
- // save files one chunk at a time
56
- for (const keys of (0, _array).chunk(Object.entries(paths), 5)){
57
- await Promise.all(keys.map(([key, pathName])=>{
58
- logAssetTask(projectRoot, "saving", pathName);
59
- // copy file over to assetPath
60
- return (0, _dir).copyAsync(pathName, _path.default.join(outputDir, "assets", key));
61
- }));
62
- }
63
- Log.log("Files successfully saved.");
24
+ await (0, _persistMetroAssets).copyInBatchesAsync(paths);
64
25
  }
65
26
 
66
27
  //# sourceMappingURL=saveAssets.js.map