@expo/cli 0.14.0 → 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 (161) hide show
  1. package/build/bin/cli +5 -4
  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/customize/typescript.js +3 -1
  8. package/build/src/customize/typescript.js.map +1 -1
  9. package/build/src/export/createMetadataJson.js +3 -2
  10. package/build/src/export/createMetadataJson.js.map +1 -1
  11. package/build/src/export/embed/exportEmbedAsync.js +44 -17
  12. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  13. package/build/src/export/embed/resolveOptions.js +3 -3
  14. package/build/src/export/embed/resolveOptions.js.map +1 -1
  15. package/build/src/export/exportApp.js +69 -80
  16. package/build/src/export/exportApp.js.map +1 -1
  17. package/build/src/export/exportAssets.js +81 -21
  18. package/build/src/export/exportAssets.js.map +1 -1
  19. package/build/src/export/exportHermes.js +4 -4
  20. package/build/src/export/exportHermes.js.map +1 -1
  21. package/build/src/export/exportStaticAsync.js +55 -20
  22. package/build/src/export/exportStaticAsync.js.map +1 -1
  23. package/build/src/export/favicon.js +2 -2
  24. package/build/src/export/favicon.js.map +1 -1
  25. package/build/src/export/fork-bundleAsync.js +12 -10
  26. package/build/src/export/fork-bundleAsync.js.map +1 -1
  27. package/build/src/export/index.js +9 -7
  28. package/build/src/export/index.js.map +1 -1
  29. package/build/src/export/metroAssetLocalPath.js +101 -0
  30. package/build/src/export/metroAssetLocalPath.js.map +1 -0
  31. package/build/src/export/persistMetroAssets.js +94 -21
  32. package/build/src/export/persistMetroAssets.js.map +1 -1
  33. package/build/src/export/resolveOptions.js +1 -1
  34. package/build/src/export/resolveOptions.js.map +1 -1
  35. package/build/src/export/saveAssets.js +9 -48
  36. package/build/src/export/saveAssets.js.map +1 -1
  37. package/build/src/export/web/exportWebAsync.js +1 -1
  38. package/build/src/export/web/exportWebAsync.js.map +1 -1
  39. package/build/src/export/writeContents.js +3 -2
  40. package/build/src/export/writeContents.js.map +1 -1
  41. package/build/src/install/applyPlugins.js +52 -0
  42. package/build/src/install/applyPlugins.js.map +1 -0
  43. package/build/src/install/checkPackages.js +2 -2
  44. package/build/src/install/checkPackages.js.map +1 -1
  45. package/build/src/install/fixPackages.js +84 -0
  46. package/build/src/install/fixPackages.js.map +1 -0
  47. package/build/src/install/installAsync.js +32 -61
  48. package/build/src/install/installAsync.js.map +1 -1
  49. package/build/src/install/installExpoPackage.js +79 -0
  50. package/build/src/install/installExpoPackage.js.map +1 -0
  51. package/build/src/prebuild/clearNativeFolder.js +1 -1
  52. package/build/src/prebuild/clearNativeFolder.js.map +1 -1
  53. package/build/src/prebuild/configureProjectAsync.js +3 -3
  54. package/build/src/prebuild/configureProjectAsync.js.map +1 -1
  55. package/build/src/prebuild/copyTemplateFiles.js +21 -30
  56. package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
  57. package/build/src/prebuild/prebuildAsync.js +37 -15
  58. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  59. package/build/src/prebuild/resolveOptions.js +2 -2
  60. package/build/src/prebuild/resolveOptions.js.map +1 -1
  61. package/build/src/prebuild/updateFromTemplate.js +6 -6
  62. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  63. package/build/src/prebuild/updatePackageJson.js +49 -36
  64. package/build/src/prebuild/updatePackageJson.js.map +1 -1
  65. package/build/src/prebuild/validateTemplatePlatforms.js +2 -2
  66. package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
  67. package/build/src/start/doctor/dependencies/getVersionedPackages.js +12 -4
  68. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  69. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +20 -3
  70. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  71. package/build/src/start/interface/interactiveActions.js +30 -11
  72. package/build/src/start/interface/interactiveActions.js.map +1 -1
  73. package/build/src/start/server/BundlerDevServer.js +14 -10
  74. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  75. package/build/src/start/server/DevServerManager.js +6 -1
  76. package/build/src/start/server/DevServerManager.js.map +1 -1
  77. package/build/src/start/server/DevToolsPluginManager.js +63 -0
  78. package/build/src/start/server/DevToolsPluginManager.js.map +1 -0
  79. package/build/src/start/server/getStaticRenderFunctions.js +21 -23
  80. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  81. package/build/src/start/server/metro/MetroBundlerDevServer.js +48 -64
  82. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  83. package/build/src/start/server/metro/bundleApiRoutes.js +4 -3
  84. package/build/src/start/server/metro/bundleApiRoutes.js.map +1 -1
  85. package/build/src/start/server/metro/createExpoMetroResolver.js +62 -45
  86. package/build/src/start/server/metro/createExpoMetroResolver.js.map +1 -1
  87. package/build/src/start/server/metro/createJResolver.js +149 -0
  88. package/build/src/start/server/metro/createJResolver.js.map +1 -0
  89. package/build/src/start/server/metro/createServerRouteMiddleware.js +13 -1
  90. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
  91. package/build/src/start/server/metro/externals.js +25 -3
  92. package/build/src/start/server/metro/externals.js.map +1 -1
  93. package/build/src/start/server/metro/inspector-proxy/device.js +3 -1
  94. package/build/src/start/server/metro/inspector-proxy/device.js.map +1 -1
  95. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js +3 -4
  96. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -1
  97. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeCallFunctionOn.js +24 -0
  98. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeCallFunctionOn.js.map +1 -0
  99. package/build/src/start/server/metro/inspector-proxy/handlers/utils.js +11 -0
  100. package/build/src/start/server/metro/inspector-proxy/handlers/utils.js.map +1 -0
  101. package/build/src/start/server/metro/inspector-proxy/index.js +10 -7
  102. package/build/src/start/server/metro/inspector-proxy/index.js.map +1 -1
  103. package/build/src/start/server/metro/instantiateMetro.js +32 -10
  104. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  105. package/build/src/start/server/metro/metroErrorInterface.js +1 -1
  106. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  107. package/build/src/start/server/metro/router.js +4 -1
  108. package/build/src/start/server/metro/router.js.map +1 -1
  109. package/build/src/start/server/metro/runServer-fork.js +19 -10
  110. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  111. package/build/src/start/server/metro/serializeHtml.js +43 -0
  112. package/build/src/start/server/metro/serializeHtml.js.map +1 -0
  113. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +1 -2
  114. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
  115. package/build/src/start/server/metro/withMetroMultiPlatform.js +261 -201
  116. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  117. package/build/src/start/server/metro/withMetroResolvers.js +114 -40
  118. package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
  119. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +61 -0
  120. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -0
  121. package/build/src/start/server/middleware/ExpoMiddleware.js +2 -2
  122. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  123. package/build/src/start/server/middleware/ManifestMiddleware.js +15 -66
  124. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  125. package/build/src/start/server/middleware/inspector/JsInspector.js +1 -1
  126. package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
  127. package/build/src/start/server/middleware/inspector/LaunchBrowser.js +30 -26
  128. package/build/src/start/server/middleware/inspector/LaunchBrowser.js.map +1 -1
  129. package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js +7 -7
  130. package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js.map +1 -1
  131. package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js +5 -2
  132. package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js.map +1 -1
  133. package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js +3 -2
  134. package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js.map +1 -1
  135. package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js +8 -7
  136. package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js.map +1 -1
  137. package/build/src/start/server/middleware/metroOptions.js +123 -0
  138. package/build/src/start/server/middleware/metroOptions.js.map +1 -0
  139. package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +1 -1
  140. package/build/src/utils/analytics/getMetroDebugProperties.js +1 -2
  141. package/build/src/utils/analytics/getMetroDebugProperties.js.map +1 -1
  142. package/build/src/utils/analytics/getMetroProperties.js +1 -2
  143. package/build/src/utils/analytics/getMetroProperties.js.map +1 -1
  144. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  145. package/build/src/utils/args.js +4 -2
  146. package/build/src/utils/args.js.map +1 -1
  147. package/build/src/utils/cocoapods.js +1 -1
  148. package/build/src/utils/cocoapods.js.map +1 -1
  149. package/build/src/utils/dir.js +18 -8
  150. package/build/src/utils/dir.js.map +1 -1
  151. package/build/src/utils/env.js +3 -0
  152. package/build/src/utils/env.js.map +1 -1
  153. package/build/src/utils/getOrPromptApplicationId.js +2 -4
  154. package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
  155. package/build/src/utils/prompts.js +1 -28
  156. package/build/src/utils/prompts.js.map +1 -1
  157. package/package.json +15 -14
  158. package/static/shims/react-native-web/dist/cjs/exports/AppRegistry/AppContainer.js +13 -0
  159. package/static/shims/react-native-web/dist/exports/AppRegistry/AppContainer.js +12 -0
  160. package/build/src/start/server/metro/resolveFromProject.js +0 -90
  161. package/build/src/start/server/metro/resolveFromProject.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/export/exportHermes.ts"],"sourcesContent":["import type { ExpoConfig, Platform } from '@expo/config';\nimport spawnAsync from '@expo/spawn-async';\nimport fs from 'fs-extra';\nimport os from 'os';\nimport path from 'path';\nimport process from 'process';\n\nimport {\n importMetroSourceMapComposeSourceMapsFromProject,\n resolveFromProject,\n} from '../start/server/metro/resolveFromProject';\n\nexport function importHermesCommandFromProject(projectRoot: string): string {\n const platformExecutable = getHermesCommandPlatform();\n const hermescLocations = [\n // Override hermesc dir by environment variables\n process.env['REACT_NATIVE_OVERRIDE_HERMES_DIR']\n ? `${process.env['REACT_NATIVE_OVERRIDE_HERMES_DIR']}/build/bin/hermesc`\n : '',\n\n // Building hermes from source\n 'react-native/ReactAndroid/hermes-engine/build/hermes/bin/hermesc',\n\n // Prebuilt hermesc in official react-native 0.69+\n `react-native/sdks/hermesc/${platformExecutable}`,\n\n // Legacy hermes-engine package\n `hermes-engine/${platformExecutable}`,\n ];\n\n for (const location of hermescLocations) {\n try {\n return resolveFromProject(projectRoot, location);\n } catch {}\n }\n throw new Error('Cannot find the hermesc executable.');\n}\n\nfunction getHermesCommandPlatform(): string {\n switch (os.platform()) {\n case 'darwin':\n return 'osx-bin/hermesc';\n case 'linux':\n return 'linux64-bin/hermesc';\n case 'win32':\n return 'win64-bin/hermesc.exe';\n default:\n throw new Error(`Unsupported host platform for Hermes compiler: ${os.platform()}`);\n }\n}\n\nexport function isEnableHermesManaged(\n expoConfig: Partial<Pick<ExpoConfig, 'ios' | 'android' | 'jsEngine'>>,\n platform: Platform\n): boolean {\n switch (platform) {\n case 'android': {\n return (expoConfig.android?.jsEngine ?? expoConfig.jsEngine) !== 'jsc';\n }\n case 'ios': {\n return (expoConfig.ios?.jsEngine ?? expoConfig.jsEngine) !== 'jsc';\n }\n default:\n return false;\n }\n}\n\ninterface HermesBundleOutput {\n hbc: Uint8Array;\n sourcemap: string | null;\n}\nexport async function buildHermesBundleAsync(\n projectRoot: string,\n {\n code,\n map,\n minify = false,\n }: {\n code: string;\n map: string | null;\n minify?: boolean;\n }\n): Promise<HermesBundleOutput> {\n const tempDir = path.join(os.tmpdir(), `expo-bundler-${process.pid}`);\n await fs.ensureDir(tempDir);\n try {\n const tempBundleFile = path.join(tempDir, 'index.bundle');\n await fs.writeFile(tempBundleFile, code);\n\n if (map) {\n const tempSourcemapFile = path.join(tempDir, 'index.bundle.map');\n await fs.writeFile(tempSourcemapFile, map);\n }\n\n const tempHbcFile = path.join(tempDir, 'index.hbc');\n const hermesCommand = importHermesCommandFromProject(projectRoot);\n const args = ['-emit-binary', '-out', tempHbcFile, tempBundleFile];\n if (minify) {\n args.push('-O');\n }\n if (map) {\n args.push('-output-source-map');\n }\n await spawnAsync(hermesCommand, args);\n\n let hbc: Buffer;\n let sourcemap: string | null = null;\n\n if (!map) {\n hbc = await fs.readFile(tempHbcFile);\n } else {\n [hbc, sourcemap] = await Promise.all([\n fs.readFile(tempHbcFile),\n createHermesSourcemapAsync(projectRoot, map, `${tempHbcFile}.map`),\n ]);\n }\n return {\n hbc,\n sourcemap,\n };\n } finally {\n await fs.remove(tempDir);\n }\n}\n\nexport async function createHermesSourcemapAsync(\n projectRoot: string,\n sourcemap: string,\n hermesMapFile: string\n): Promise<string> {\n const composeSourceMaps = importMetroSourceMapComposeSourceMapsFromProject(projectRoot);\n const bundlerSourcemap = JSON.parse(sourcemap);\n const hermesSourcemap = await fs.readJSON(hermesMapFile);\n return JSON.stringify(composeSourceMaps([bundlerSourcemap, hermesSourcemap]));\n}\n\nexport function parseGradleProperties(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (let line of content.split('\\n')) {\n line = line.trim();\n if (!line || line.startsWith('#')) {\n continue;\n }\n\n const sepIndex = line.indexOf('=');\n const key = line.substr(0, sepIndex);\n const value = line.substr(sepIndex + 1);\n result[key] = value;\n }\n return result;\n}\n\nexport async function maybeThrowFromInconsistentEngineAsync(\n projectRoot: string,\n configFilePath: string,\n platform: string,\n isHermesManaged: boolean\n): Promise<void> {\n const configFileName = path.basename(configFilePath);\n if (\n platform === 'android' &&\n (await maybeInconsistentEngineAndroidAsync(projectRoot, isHermesManaged))\n ) {\n throw new Error(\n `JavaScript engine configuration is inconsistent between ${configFileName} and Android native project.\\n` +\n `In ${configFileName}: Hermes is ${isHermesManaged ? 'enabled' : 'not enabled'}\\n` +\n `In Android native project: Hermes is ${isHermesManaged ? 'not enabled' : 'enabled'}\\n` +\n `Please check the following files for inconsistencies:\\n` +\n ` - ${configFilePath}\\n` +\n ` - ${path.join(projectRoot, 'android', 'gradle.properties')}\\n` +\n ` - ${path.join(projectRoot, 'android', 'app', 'build.gradle')}\\n` +\n 'Learn more: https://expo.fyi/hermes-android-config'\n );\n }\n\n if (platform === 'ios' && (await maybeInconsistentEngineIosAsync(projectRoot, isHermesManaged))) {\n throw new Error(\n `JavaScript engine configuration is inconsistent between ${configFileName} and iOS native project.\\n` +\n `In ${configFileName}: Hermes is ${isHermesManaged ? 'enabled' : 'not enabled'}\\n` +\n `In iOS native project: Hermes is ${isHermesManaged ? 'not enabled' : 'enabled'}\\n` +\n `Please check the following files for inconsistencies:\\n` +\n ` - ${configFilePath}\\n` +\n ` - ${path.join(projectRoot, 'ios', 'Podfile')}\\n` +\n ` - ${path.join(projectRoot, 'ios', 'Podfile.properties.json')}\\n` +\n 'Learn more: https://expo.fyi/hermes-ios-config'\n );\n }\n}\n\nexport async function maybeInconsistentEngineAndroidAsync(\n projectRoot: string,\n isHermesManaged: boolean\n): Promise<boolean> {\n // Trying best to check android native project if by chance to be consistent between app config\n\n // Check gradle.properties from prebuild template\n const gradlePropertiesPath = path.join(projectRoot, 'android', 'gradle.properties');\n if (fs.existsSync(gradlePropertiesPath)) {\n const props = parseGradleProperties(await fs.readFile(gradlePropertiesPath, 'utf8'));\n const isHermesBare = props['hermesEnabled'] === 'true';\n if (isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n return false;\n}\n\nexport async function maybeInconsistentEngineIosAsync(\n projectRoot: string,\n isHermesManaged: boolean\n): Promise<boolean> {\n // Trying best to check ios native project if by chance to be consistent between app config\n\n // Check ios/Podfile for \":hermes_enabled => true\"\n const podfilePath = path.join(projectRoot, 'ios', 'Podfile');\n if (fs.existsSync(podfilePath)) {\n const content = await fs.readFile(podfilePath, 'utf8');\n const isPropsReference =\n content.search(\n /^\\s*:hermes_enabled\\s*=>\\s*podfile_properties\\['expo.jsEngine'\\]\\s*==\\s*nil\\s*\\|\\|\\s*podfile_properties\\['expo.jsEngine'\\]\\s*==\\s*'hermes',?/m\n ) >= 0;\n const isHermesBare = content.search(/^\\s*:hermes_enabled\\s*=>\\s*true,?\\s+/m) >= 0;\n if (!isPropsReference && isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n // Check Podfile.properties.json from prebuild template\n const podfilePropertiesPath = path.join(projectRoot, 'ios', 'Podfile.properties.json');\n if (fs.existsSync(podfilePropertiesPath)) {\n const props = await parsePodfilePropertiesAsync(podfilePropertiesPath);\n const isHermesBare = props['expo.jsEngine'] === 'hermes';\n if (isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n return false;\n}\n\n// https://github.com/facebook/hermes/blob/release-v0.5/include/hermes/BCGen/HBC/BytecodeFileFormat.h#L24-L25\nconst HERMES_MAGIC_HEADER = 'c61fbc03c103191f';\n\nexport async function isHermesBytecodeBundleAsync(file: string): Promise<boolean> {\n const header = await readHermesHeaderAsync(file);\n return header.slice(0, 8).toString('hex') === HERMES_MAGIC_HEADER;\n}\n\nexport async function getHermesBytecodeBundleVersionAsync(file: string): Promise<number> {\n const header = await readHermesHeaderAsync(file);\n if (header.slice(0, 8).toString('hex') !== HERMES_MAGIC_HEADER) {\n throw new Error('Invalid hermes bundle file');\n }\n return header.readUInt32LE(8);\n}\n\nasync function readHermesHeaderAsync(file: string): Promise<Buffer> {\n const fd = await fs.open(file, 'r');\n const buffer = Buffer.alloc(12);\n await fs.read(fd, buffer, 0, 12, null);\n await fs.close(fd);\n return buffer;\n}\n\nasync function parsePodfilePropertiesAsync(\n podfilePropertiesPath: string\n): Promise<Record<string, string>> {\n try {\n return JSON.parse(await fs.readFile(podfilePropertiesPath, 'utf8'));\n } catch {\n return {};\n }\n}\n"],"names":["importHermesCommandFromProject","isEnableHermesManaged","buildHermesBundleAsync","createHermesSourcemapAsync","parseGradleProperties","maybeThrowFromInconsistentEngineAsync","maybeInconsistentEngineAndroidAsync","maybeInconsistentEngineIosAsync","isHermesBytecodeBundleAsync","getHermesBytecodeBundleVersionAsync","projectRoot","platformExecutable","getHermesCommandPlatform","hermescLocations","process","env","location","resolveFromProject","Error","os","platform","expoConfig","android","jsEngine","ios","code","map","minify","tempDir","path","join","tmpdir","pid","fs","ensureDir","tempBundleFile","writeFile","tempSourcemapFile","tempHbcFile","hermesCommand","args","push","spawnAsync","hbc","sourcemap","readFile","Promise","all","remove","hermesMapFile","composeSourceMaps","importMetroSourceMapComposeSourceMapsFromProject","bundlerSourcemap","JSON","parse","hermesSourcemap","readJSON","stringify","content","result","line","split","trim","startsWith","sepIndex","indexOf","key","substr","value","configFilePath","isHermesManaged","configFileName","basename","gradlePropertiesPath","existsSync","props","isHermesBare","podfilePath","isPropsReference","search","podfilePropertiesPath","parsePodfilePropertiesAsync","HERMES_MAGIC_HEADER","file","header","readHermesHeaderAsync","slice","toString","readUInt32LE","fd","open","buffer","Buffer","alloc","read","close"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/export/exportHermes.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport spawnAsync from '@expo/spawn-async';\nimport fs from 'fs-extra';\nimport { composeSourceMaps } from 'metro-source-map';\nimport os from 'os';\nimport path from 'path';\nimport process from 'process';\nimport resolveFrom from 'resolve-from';\n\nexport function importHermesCommandFromProject(projectRoot: string): string {\n const platformExecutable = getHermesCommandPlatform();\n const hermescLocations = [\n // Override hermesc dir by environment variables\n process.env['REACT_NATIVE_OVERRIDE_HERMES_DIR']\n ? `${process.env['REACT_NATIVE_OVERRIDE_HERMES_DIR']}/build/bin/hermesc`\n : '',\n\n // Building hermes from source\n 'react-native/ReactAndroid/hermes-engine/build/hermes/bin/hermesc',\n\n // Prebuilt hermesc in official react-native 0.69+\n `react-native/sdks/hermesc/${platformExecutable}`,\n\n // Legacy hermes-engine package\n `hermes-engine/${platformExecutable}`,\n ];\n\n for (const location of hermescLocations) {\n try {\n return resolveFrom(projectRoot, location);\n } catch {}\n }\n throw new Error('Cannot find the hermesc executable.');\n}\n\nfunction getHermesCommandPlatform(): string {\n switch (os.platform()) {\n case 'darwin':\n return 'osx-bin/hermesc';\n case 'linux':\n return 'linux64-bin/hermesc';\n case 'win32':\n return 'win64-bin/hermesc.exe';\n default:\n throw new Error(`Unsupported host platform for Hermes compiler: ${os.platform()}`);\n }\n}\n\nexport function isEnableHermesManaged(\n expoConfig: Partial<Pick<ExpoConfig, 'ios' | 'android' | 'jsEngine'>>,\n platform: string\n): boolean {\n switch (platform) {\n case 'android': {\n return (expoConfig.android?.jsEngine ?? expoConfig.jsEngine) !== 'jsc';\n }\n case 'ios': {\n return (expoConfig.ios?.jsEngine ?? expoConfig.jsEngine) !== 'jsc';\n }\n default:\n return false;\n }\n}\n\ninterface HermesBundleOutput {\n hbc: Uint8Array;\n sourcemap: string | null;\n}\nexport async function buildHermesBundleAsync(\n projectRoot: string,\n {\n code,\n map,\n minify = false,\n }: {\n code: string;\n map: string | null;\n minify?: boolean;\n }\n): Promise<HermesBundleOutput> {\n const tempDir = path.join(os.tmpdir(), `expo-bundler-${process.pid}`);\n await fs.ensureDir(tempDir);\n try {\n const tempBundleFile = path.join(tempDir, 'index.bundle');\n await fs.writeFile(tempBundleFile, code);\n\n if (map) {\n const tempSourcemapFile = path.join(tempDir, 'index.bundle.map');\n await fs.writeFile(tempSourcemapFile, map);\n }\n\n const tempHbcFile = path.join(tempDir, 'index.hbc');\n const hermesCommand = importHermesCommandFromProject(projectRoot);\n const args = ['-emit-binary', '-out', tempHbcFile, tempBundleFile];\n if (minify) {\n args.push('-O');\n }\n if (map) {\n args.push('-output-source-map');\n }\n await spawnAsync(hermesCommand, args);\n\n let hbc: Buffer;\n let sourcemap: string | null = null;\n\n if (!map) {\n hbc = await fs.readFile(tempHbcFile);\n } else {\n [hbc, sourcemap] = await Promise.all([\n fs.readFile(tempHbcFile),\n createHermesSourcemapAsync(projectRoot, map, `${tempHbcFile}.map`),\n ]);\n }\n return {\n hbc,\n sourcemap,\n };\n } finally {\n await fs.remove(tempDir);\n }\n}\n\nexport async function createHermesSourcemapAsync(\n projectRoot: string,\n sourcemap: string,\n hermesMapFile: string\n): Promise<string> {\n const bundlerSourcemap = JSON.parse(sourcemap);\n const hermesSourcemap = await fs.readJSON(hermesMapFile);\n return JSON.stringify(composeSourceMaps([bundlerSourcemap, hermesSourcemap]));\n}\n\nexport function parseGradleProperties(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (let line of content.split('\\n')) {\n line = line.trim();\n if (!line || line.startsWith('#')) {\n continue;\n }\n\n const sepIndex = line.indexOf('=');\n const key = line.substr(0, sepIndex);\n const value = line.substr(sepIndex + 1);\n result[key] = value;\n }\n return result;\n}\n\nexport async function maybeThrowFromInconsistentEngineAsync(\n projectRoot: string,\n configFilePath: string,\n platform: string,\n isHermesManaged: boolean\n): Promise<void> {\n const configFileName = path.basename(configFilePath);\n if (\n platform === 'android' &&\n (await maybeInconsistentEngineAndroidAsync(projectRoot, isHermesManaged))\n ) {\n throw new Error(\n `JavaScript engine configuration is inconsistent between ${configFileName} and Android native project.\\n` +\n `In ${configFileName}: Hermes is ${isHermesManaged ? 'enabled' : 'not enabled'}\\n` +\n `In Android native project: Hermes is ${isHermesManaged ? 'not enabled' : 'enabled'}\\n` +\n `Please check the following files for inconsistencies:\\n` +\n ` - ${configFilePath}\\n` +\n ` - ${path.join(projectRoot, 'android', 'gradle.properties')}\\n` +\n ` - ${path.join(projectRoot, 'android', 'app', 'build.gradle')}\\n` +\n 'Learn more: https://expo.fyi/hermes-android-config'\n );\n }\n\n if (platform === 'ios' && (await maybeInconsistentEngineIosAsync(projectRoot, isHermesManaged))) {\n throw new Error(\n `JavaScript engine configuration is inconsistent between ${configFileName} and iOS native project.\\n` +\n `In ${configFileName}: Hermes is ${isHermesManaged ? 'enabled' : 'not enabled'}\\n` +\n `In iOS native project: Hermes is ${isHermesManaged ? 'not enabled' : 'enabled'}\\n` +\n `Please check the following files for inconsistencies:\\n` +\n ` - ${configFilePath}\\n` +\n ` - ${path.join(projectRoot, 'ios', 'Podfile')}\\n` +\n ` - ${path.join(projectRoot, 'ios', 'Podfile.properties.json')}\\n` +\n 'Learn more: https://expo.fyi/hermes-ios-config'\n );\n }\n}\n\nexport async function maybeInconsistentEngineAndroidAsync(\n projectRoot: string,\n isHermesManaged: boolean\n): Promise<boolean> {\n // Trying best to check android native project if by chance to be consistent between app config\n\n // Check gradle.properties from prebuild template\n const gradlePropertiesPath = path.join(projectRoot, 'android', 'gradle.properties');\n if (fs.existsSync(gradlePropertiesPath)) {\n const props = parseGradleProperties(await fs.readFile(gradlePropertiesPath, 'utf8'));\n const isHermesBare = props['hermesEnabled'] === 'true';\n if (isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n return false;\n}\n\nexport async function maybeInconsistentEngineIosAsync(\n projectRoot: string,\n isHermesManaged: boolean\n): Promise<boolean> {\n // Trying best to check ios native project if by chance to be consistent between app config\n\n // Check ios/Podfile for \":hermes_enabled => true\"\n const podfilePath = path.join(projectRoot, 'ios', 'Podfile');\n if (fs.existsSync(podfilePath)) {\n const content = await fs.readFile(podfilePath, 'utf8');\n const isPropsReference =\n content.search(\n /^\\s*:hermes_enabled\\s*=>\\s*podfile_properties\\['expo.jsEngine'\\]\\s*==\\s*nil\\s*\\|\\|\\s*podfile_properties\\['expo.jsEngine'\\]\\s*==\\s*'hermes',?/m\n ) >= 0;\n const isHermesBare = content.search(/^\\s*:hermes_enabled\\s*=>\\s*true,?\\s+/m) >= 0;\n if (!isPropsReference && isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n // Check Podfile.properties.json from prebuild template\n const podfilePropertiesPath = path.join(projectRoot, 'ios', 'Podfile.properties.json');\n if (fs.existsSync(podfilePropertiesPath)) {\n const props = await parsePodfilePropertiesAsync(podfilePropertiesPath);\n const isHermesBare = props['expo.jsEngine'] === 'hermes';\n if (isHermesManaged !== isHermesBare) {\n return true;\n }\n }\n\n return false;\n}\n\n// https://github.com/facebook/hermes/blob/release-v0.5/include/hermes/BCGen/HBC/BytecodeFileFormat.h#L24-L25\nconst HERMES_MAGIC_HEADER = 'c61fbc03c103191f';\n\nexport async function isHermesBytecodeBundleAsync(file: string): Promise<boolean> {\n const header = await readHermesHeaderAsync(file);\n return header.slice(0, 8).toString('hex') === HERMES_MAGIC_HEADER;\n}\n\nexport async function getHermesBytecodeBundleVersionAsync(file: string): Promise<number> {\n const header = await readHermesHeaderAsync(file);\n if (header.slice(0, 8).toString('hex') !== HERMES_MAGIC_HEADER) {\n throw new Error('Invalid hermes bundle file');\n }\n return header.readUInt32LE(8);\n}\n\nasync function readHermesHeaderAsync(file: string): Promise<Buffer> {\n const fd = await fs.open(file, 'r');\n const buffer = Buffer.alloc(12);\n await fs.read(fd, buffer, 0, 12, null);\n await fs.close(fd);\n return buffer;\n}\n\nasync function parsePodfilePropertiesAsync(\n podfilePropertiesPath: string\n): Promise<Record<string, string>> {\n try {\n return JSON.parse(await fs.readFile(podfilePropertiesPath, 'utf8'));\n } catch {\n return {};\n }\n}\n"],"names":["importHermesCommandFromProject","isEnableHermesManaged","buildHermesBundleAsync","createHermesSourcemapAsync","parseGradleProperties","maybeThrowFromInconsistentEngineAsync","maybeInconsistentEngineAndroidAsync","maybeInconsistentEngineIosAsync","isHermesBytecodeBundleAsync","getHermesBytecodeBundleVersionAsync","projectRoot","platformExecutable","getHermesCommandPlatform","hermescLocations","process","env","location","resolveFrom","Error","os","platform","expoConfig","android","jsEngine","ios","code","map","minify","tempDir","path","join","tmpdir","pid","fs","ensureDir","tempBundleFile","writeFile","tempSourcemapFile","tempHbcFile","hermesCommand","args","push","spawnAsync","hbc","sourcemap","readFile","Promise","all","remove","hermesMapFile","bundlerSourcemap","JSON","parse","hermesSourcemap","readJSON","stringify","composeSourceMaps","content","result","line","split","trim","startsWith","sepIndex","indexOf","key","substr","value","configFilePath","isHermesManaged","configFileName","basename","gradlePropertiesPath","existsSync","props","isHermesBare","podfilePath","isPropsReference","search","podfilePropertiesPath","parsePodfilePropertiesAsync","HERMES_MAGIC_HEADER","file","header","readHermesHeaderAsync","slice","toString","readUInt32LE","fd","open","buffer","Buffer","alloc","read","close"],"mappings":"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"}
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  exports.unstable_exportStaticAsync = unstable_exportStaticAsync;
6
6
  exports.getFilesToExportFromServerAsync = getFilesToExportFromServerAsync;
7
7
  exports.exportFromServerAsync = exportFromServerAsync;
8
+ exports.getFilesFromSerialAssets = getFilesFromSerialAssets;
9
+ exports.persistMetroFilesAsync = persistMetroFilesAsync;
8
10
  exports.modifyBundlesWithSourceMaps = modifyBundlesWithSourceMaps;
9
11
  exports.getHtmlFiles = getHtmlFiles;
10
12
  exports.getPathVariations = getPathVariations;
@@ -16,12 +18,15 @@ var _path = _interopRequireDefault(require("path"));
16
18
  var _prettyBytes = _interopRequireDefault(require("pretty-bytes"));
17
19
  var _util = require("util");
18
20
  var _favicon = require("./favicon");
21
+ var _persistMetroAssets = require("./persistMetroAssets");
19
22
  var _log = require("../log");
20
23
  var _devServerManager = require("../start/server/DevServerManager");
21
24
  var _metroBundlerDevServer = require("../start/server/metro/MetroBundlerDevServer");
22
25
  var _metroErrorInterface = require("../start/server/metro/metroErrorInterface");
23
26
  var _router = require("../start/server/metro/router");
27
+ var _serializeHtml = require("../start/server/metro/serializeHtml");
24
28
  var _link = require("../utils/link");
29
+ var _port = require("../utils/port");
25
30
  function _interopRequireDefault(obj) {
26
31
  return obj && obj.__esModule ? obj : {
27
32
  default: obj
@@ -30,18 +35,24 @@ function _interopRequireDefault(obj) {
30
35
  const debug = require("debug")("expo:export:generateStaticRoutes");
31
36
  async function unstable_exportStaticAsync(projectRoot, options) {
32
37
  _log.Log.warn(`Experimental static rendering is enabled. ` + (0, _link).learnMore("https://docs.expo.dev/router/reference/static-rendering/"));
38
+ // Useful for running parallel e2e tests in CI.
39
+ const port = await (0, _port).getFreePortAsync(8082);
33
40
  // TODO: Prevent starting the watcher.
34
41
  const devServerManager = new _devServerManager.DevServerManager(projectRoot, {
35
42
  minify: options.minify,
36
43
  mode: "production",
37
- location: {}
44
+ port,
45
+ location: {},
46
+ resetDevServer: options.clear
38
47
  });
39
48
  await devServerManager.startAsync([
40
49
  {
41
50
  type: "metro",
42
51
  options: {
52
+ port,
43
53
  location: {},
44
- isExporting: true
54
+ isExporting: true,
55
+ resetDevServer: options.clear
45
56
  }
46
57
  },
47
58
  ]);
@@ -77,26 +88,28 @@ async function getFilesToExportFromServerAsync(projectRoot, { manifest , renderA
77
88
  }));
78
89
  return files;
79
90
  }
80
- async function exportFromServerAsync(projectRoot, devServerManager, { outputDir , basePath , exportServer , minify , includeMaps }) {
91
+ async function exportFromServerAsync(projectRoot, devServerManager, { outputDir , baseUrl , exportServer , minify , includeMaps }) {
81
92
  const { exp } = (0, _config).getConfig(projectRoot, {
82
93
  skipSDKVersionRequirement: true
83
94
  });
84
95
  const appDir = (0, _router).getRouterDirectoryWithManifest(projectRoot, exp);
85
96
  const injectFaviconTag = await (0, _favicon).getVirtualFaviconAssetsAsync(projectRoot, {
86
97
  outputDir,
87
- basePath
98
+ baseUrl
88
99
  });
89
100
  const devServer = devServerManager.getDefaultDevServer();
90
101
  (0, _assert).default(devServer instanceof _metroBundlerDevServer.MetroBundlerDevServer);
91
- const [resources, { manifest , renderAsync }] = await Promise.all([
102
+ const [resources, { manifest , serverManifest , renderAsync }] = await Promise.all([
92
103
  devServer.getStaticResourcesAsync({
93
104
  mode: "production",
94
105
  minify,
95
- includeMaps
106
+ includeMaps,
107
+ baseUrl
96
108
  }),
97
109
  devServer.getStaticRenderFunctionAsync({
98
110
  mode: "production",
99
- minify
111
+ minify,
112
+ baseUrl
100
113
  }),
101
114
  ]);
102
115
  debug("Routes:\n", (0, _util).inspect(manifest, {
@@ -111,11 +124,11 @@ async function exportFromServerAsync(projectRoot, devServerManager, { outputDir
111
124
  includeGroupVariations: !exportServer,
112
125
  async renderAsync (pathname) {
113
126
  const template = await renderAsync(pathname);
114
- let html = await devServer.composeResourcesWithHtml({
127
+ let html = await (0, _serializeHtml).serializeHtmlWithAssets({
115
128
  mode: "production",
116
- resources,
129
+ resources: resources.artifacts,
117
130
  template,
118
- basePath
131
+ baseUrl
119
132
  });
120
133
  if (injectFaviconTag) {
121
134
  html = injectFaviconTag(html);
@@ -123,14 +136,24 @@ async function exportFromServerAsync(projectRoot, devServerManager, { outputDir
123
136
  return html;
124
137
  }
125
138
  });
126
- resources.forEach((resource)=>{
127
- files.set(resource.filename, modifyBundlesWithSourceMaps(resource.filename, resource.source, includeMaps));
139
+ getFilesFromSerialAssets(resources.artifacts, {
140
+ includeMaps,
141
+ files
128
142
  });
143
+ if (resources.assets) {
144
+ await (0, _persistMetroAssets).persistMetroAssetsAsync(resources.assets, {
145
+ platform: "web",
146
+ outputDirectory: outputDir,
147
+ baseUrl
148
+ });
149
+ }
129
150
  if (exportServer) {
130
151
  const apiRoutes = await exportApiRoutesAsync({
131
152
  outputDir,
132
153
  server: devServer,
133
- appDir
154
+ appDir,
155
+ manifest: serverManifest,
156
+ baseUrl
134
157
  });
135
158
  // Add the api routes to the files to export.
136
159
  for (const [route, contents] of apiRoutes){
@@ -139,6 +162,15 @@ async function exportFromServerAsync(projectRoot, devServerManager, { outputDir
139
162
  } else {
140
163
  warnPossibleInvalidExportType(appDir);
141
164
  }
165
+ await persistMetroFilesAsync(files, outputDir);
166
+ }
167
+ function getFilesFromSerialAssets(resources, { includeMaps , files =new Map() }) {
168
+ resources.forEach((resource)=>{
169
+ files.set(resource.filename, modifyBundlesWithSourceMaps(resource.filename, resource.source, includeMaps));
170
+ });
171
+ return files;
172
+ }
173
+ async function persistMetroFilesAsync(files, outputDir) {
142
174
  _fs.default.mkdirSync(_path.default.join(outputDir), {
143
175
  recursive: true
144
176
  });
@@ -161,8 +193,9 @@ async function exportFromServerAsync(projectRoot, devServerManager, { outputDir
161
193
  function modifyBundlesWithSourceMaps(filename, source, includeMaps) {
162
194
  if (filename.endsWith(".js")) {
163
195
  // If the bundle ends with source map URLs then update them to point to the correct location.
164
- // TODO: basePath support
196
+ // TODO: baseUrl support
165
197
  const normalizedFilename = "/" + filename.replace(/^\/+/, "");
198
+ // Ref: https://developer.chrome.com/blog/sourcemaps/#sourceurl-and-displayname-in-action-eval-and-anonymous-functions
166
199
  //# sourceMappingURL=//localhost:8085/index.map?platform=web&dev=false&hot=false&lazy=true&minify=true&resolver.environment=client&transform.environment=client&serializer.output=static
167
200
  //# sourceURL=http://localhost:8085/index.bundle//&platform=web&dev=false&hot=false&lazy=true&minify=true&resolver.environment=client&transform.environment=client&serializer.output=static
168
201
  return source.replace(/^\/\/# (sourceMappingURL|sourceURL)=.*$/gm, (...props)=>{
@@ -181,12 +214,12 @@ function modifyBundlesWithSourceMaps(filename, source, includeMaps) {
181
214
  }
182
215
  function getHtmlFiles({ manifest , includeGroupVariations }) {
183
216
  const htmlFiles = new Set();
184
- function traverseScreens(screens, basePath = "") {
217
+ function traverseScreens(screens, baseUrl = "") {
185
218
  for (const value of Object.values(screens)){
186
219
  if (typeof value === "string") {
187
- let filePath = basePath + value;
220
+ let filePath = baseUrl + value;
188
221
  if (value === "") {
189
- filePath = basePath === "" ? "index" : basePath.endsWith("/") ? basePath + "index" : basePath.slice(0, -1);
222
+ filePath = baseUrl === "" ? "index" : baseUrl.endsWith("/") ? baseUrl + "index" : baseUrl.slice(0, -1);
190
223
  }
191
224
  if (includeGroupVariations) {
192
225
  // TODO: Dedupe requests for alias routes.
@@ -195,7 +228,7 @@ function getHtmlFiles({ manifest , includeGroupVariations }) {
195
228
  htmlFiles.add(filePath);
196
229
  }
197
230
  } else if (typeof value === "object" && (value == null ? void 0 : value.screens)) {
198
- const newPath = basePath + value.path + "/";
231
+ const newPath = baseUrl + value.path + "/";
199
232
  traverseScreens(value.screens, newPath);
200
233
  }
201
234
  }
@@ -259,7 +292,7 @@ function getPathVariations(routePath) {
259
292
  generateVariations(segments1);
260
293
  return Array.from(variations);
261
294
  }
262
- async function exportApiRoutesAsync({ outputDir , server , appDir }) {
295
+ async function exportApiRoutesAsync({ outputDir , server , appDir , baseUrl , ...props }) {
263
296
  const functionsDir = "_expo/functions";
264
297
  const funcDir = _path.default.join(outputDir, functionsDir);
265
298
  _fs.default.mkdirSync(_path.default.join(funcDir), {
@@ -268,7 +301,9 @@ async function exportApiRoutesAsync({ outputDir , server , appDir }) {
268
301
  const { manifest , files } = await server.exportExpoRouterApiRoutesAsync({
269
302
  mode: "production",
270
303
  appDir,
271
- outputDir: functionsDir
304
+ outputDir: functionsDir,
305
+ prerenderManifest: props.manifest,
306
+ baseUrl
272
307
  });
273
308
  _log.Log.log(_chalk.default.bold`Exporting ${files.size} API Routes.`);
274
309
  files.set("_expo/routes.json", JSON.stringify(manifest, null, 2));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/export/exportStaticAsync.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\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 */\nimport { getConfig } from '@expo/config';\nimport assert from 'assert';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\nimport prettyBytes from 'pretty-bytes';\nimport { inspect } from 'util';\n\nimport { getVirtualFaviconAssetsAsync } from './favicon';\nimport { Log } from '../log';\nimport { DevServerManager } from '../start/server/DevServerManager';\nimport { MetroBundlerDevServer } from '../start/server/metro/MetroBundlerDevServer';\nimport { logMetroErrorAsync } from '../start/server/metro/metroErrorInterface';\nimport {\n getApiRoutesForDirectory,\n getRouterDirectoryWithManifest,\n} from '../start/server/metro/router';\nimport { learnMore } from '../utils/link';\n\nconst debug = require('debug')('expo:export:generateStaticRoutes') as typeof console.log;\n\ntype Options = {\n outputDir: string;\n minify: boolean;\n exportServer: boolean;\n basePath: string;\n includeMaps: boolean;\n};\n\n/** @private */\nexport async function unstable_exportStaticAsync(projectRoot: string, options: Options) {\n Log.warn(\n `Experimental static rendering is enabled. ` +\n learnMore('https://docs.expo.dev/router/reference/static-rendering/')\n );\n\n // TODO: Prevent starting the watcher.\n const devServerManager = new DevServerManager(projectRoot, {\n minify: options.minify,\n mode: 'production',\n location: {},\n });\n await devServerManager.startAsync([\n {\n type: 'metro',\n options: {\n location: {},\n isExporting: true,\n },\n },\n ]);\n\n try {\n await exportFromServerAsync(projectRoot, devServerManager, options);\n } finally {\n await devServerManager.stopAsync();\n }\n}\n\n/** Match `(page)` -> `page` */\nfunction matchGroupName(name: string): string | undefined {\n return name.match(/^\\(([^/]+?)\\)$/)?.[1];\n}\n\nexport async function getFilesToExportFromServerAsync(\n projectRoot: string,\n {\n manifest,\n renderAsync,\n includeGroupVariations,\n }: {\n manifest: any;\n renderAsync: (pathname: string) => Promise<string>;\n includeGroupVariations?: boolean;\n }\n): Promise<Map<string, string>> {\n // name : contents\n const files = new Map<string, string>();\n\n await Promise.all(\n getHtmlFiles({ manifest, includeGroupVariations }).map(async (outputPath) => {\n const pathname = outputPath.replace(/(?:index)?\\.html$/, '');\n try {\n files.set(outputPath, '');\n const data = await renderAsync(pathname);\n files.set(outputPath, data);\n } catch (e: any) {\n await logMetroErrorAsync({ error: e, projectRoot });\n throw new Error('Failed to statically export route: ' + pathname);\n }\n })\n );\n\n return files;\n}\n\n/** Perform all fs commits */\nexport async function exportFromServerAsync(\n projectRoot: string,\n devServerManager: DevServerManager,\n { outputDir, basePath, exportServer, minify, includeMaps }: Options\n): Promise<void> {\n const { exp } = getConfig(projectRoot, { skipSDKVersionRequirement: true });\n const appDir = getRouterDirectoryWithManifest(projectRoot, exp);\n\n const injectFaviconTag = await getVirtualFaviconAssetsAsync(projectRoot, { outputDir, basePath });\n\n const devServer = devServerManager.getDefaultDevServer();\n assert(devServer instanceof MetroBundlerDevServer);\n\n const [resources, { manifest, renderAsync }] = await Promise.all([\n devServer.getStaticResourcesAsync({ mode: 'production', minify, includeMaps }),\n devServer.getStaticRenderFunctionAsync({\n mode: 'production',\n minify,\n }),\n ]);\n\n debug('Routes:\\n', inspect(manifest, { colors: true, depth: null }));\n\n const files = await getFilesToExportFromServerAsync(projectRoot, {\n manifest,\n // Servers can handle group routes automatically and therefore\n // don't require the build-time generation of every possible group\n // variation.\n includeGroupVariations: !exportServer,\n async renderAsync(pathname: string) {\n const template = await renderAsync(pathname);\n let html = await devServer.composeResourcesWithHtml({\n mode: 'production',\n resources,\n template,\n basePath,\n });\n\n if (injectFaviconTag) {\n html = injectFaviconTag(html);\n }\n\n return html;\n },\n });\n\n resources.forEach((resource) => {\n files.set(\n resource.filename,\n modifyBundlesWithSourceMaps(resource.filename, resource.source, includeMaps)\n );\n });\n\n if (exportServer) {\n const apiRoutes = await exportApiRoutesAsync({ outputDir, server: devServer, appDir });\n\n // Add the api routes to the files to export.\n for (const [route, contents] of apiRoutes) {\n files.set(route, contents);\n }\n } else {\n warnPossibleInvalidExportType(appDir);\n }\n\n fs.mkdirSync(path.join(outputDir), { recursive: true });\n\n Log.log('');\n Log.log(chalk.bold`Exporting ${files.size} files:`);\n await Promise.all(\n [...files.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(async ([file, contents]) => {\n const length = Buffer.byteLength(contents, 'utf8');\n Log.log(file, chalk.gray`(${prettyBytes(length)})`);\n const outputPath = path.join(outputDir, file);\n await fs.promises.mkdir(path.dirname(outputPath), { recursive: true });\n await fs.promises.writeFile(outputPath, contents);\n })\n );\n Log.log('');\n}\n\nexport function modifyBundlesWithSourceMaps(\n filename: string,\n source: string,\n includeMaps: boolean\n): string {\n if (filename.endsWith('.js')) {\n // If the bundle ends with source map URLs then update them to point to the correct location.\n\n // TODO: basePath support\n const normalizedFilename = '/' + filename.replace(/^\\/+/, '');\n //# sourceMappingURL=//localhost:8085/index.map?platform=web&dev=false&hot=false&lazy=true&minify=true&resolver.environment=client&transform.environment=client&serializer.output=static\n //# sourceURL=http://localhost:8085/index.bundle//&platform=web&dev=false&hot=false&lazy=true&minify=true&resolver.environment=client&transform.environment=client&serializer.output=static\n return source.replace(/^\\/\\/# (sourceMappingURL|sourceURL)=.*$/gm, (...props) => {\n if (includeMaps) {\n if (props[1] === 'sourceURL') {\n return `//# ${props[1]}=` + normalizedFilename;\n } else if (props[1] === 'sourceMappingURL') {\n const mapName = normalizedFilename + '.map';\n return `//# ${props[1]}=` + mapName;\n }\n }\n return '';\n });\n }\n return source;\n}\n\nexport function getHtmlFiles({\n manifest,\n includeGroupVariations,\n}: {\n manifest: any;\n includeGroupVariations?: boolean;\n}): string[] {\n const htmlFiles = new Set<string>();\n\n function traverseScreens(screens: string | { screens: any; path: string }, basePath = '') {\n for (const value of Object.values(screens)) {\n if (typeof value === 'string') {\n let filePath = basePath + value;\n if (value === '') {\n filePath =\n basePath === ''\n ? 'index'\n : basePath.endsWith('/')\n ? basePath + 'index'\n : basePath.slice(0, -1);\n }\n if (includeGroupVariations) {\n // TODO: Dedupe requests for alias routes.\n addOptionalGroups(filePath);\n } else {\n htmlFiles.add(filePath);\n }\n } else if (typeof value === 'object' && value?.screens) {\n const newPath = basePath + value.path + '/';\n traverseScreens(value.screens, newPath);\n }\n }\n }\n\n function addOptionalGroups(path: string) {\n const variations = getPathVariations(path);\n for (const variation of variations) {\n htmlFiles.add(variation);\n }\n }\n\n traverseScreens(manifest.screens);\n\n return Array.from(htmlFiles).map((value) => {\n const parts = value.split('/');\n // Replace `:foo` with `[foo]` and `*foo` with `[...foo]`\n const partsWithGroups = parts.map((part) => {\n if (part === '*not-found') {\n return `+not-found`;\n } else if (part.startsWith(':')) {\n return `[${part.slice(1)}]`;\n } else if (part.startsWith('*')) {\n return `[...${part.slice(1)}]`;\n }\n return part;\n });\n return partsWithGroups.join('/') + '.html';\n });\n}\n\n// Given a route like `(foo)/bar/(baz)`, return all possible variations of the route.\n// e.g. `(foo)/bar/(baz)`, `(foo)/bar/baz`, `foo/bar/(baz)`, `foo/bar/baz`,\nexport function getPathVariations(routePath: string): string[] {\n const variations = new Set<string>();\n const segments = routePath.split('/');\n\n function generateVariations(segments: string[], current = ''): void {\n if (segments.length === 0) {\n if (current) variations.add(current);\n return;\n }\n\n const [head, ...rest] = segments;\n\n if (head.startsWith('(foo,foo')) {\n }\n\n if (matchGroupName(head)) {\n const groups = head.slice(1, -1).split(',');\n\n if (groups.length > 1) {\n for (const group of groups) {\n // If there are multiple groups, recurse on each group.\n generateVariations([`(${group.trim()})`, ...rest], current);\n }\n return;\n } else {\n // Start a fork where this group is included\n generateVariations(rest, current ? `${current}/(${groups[0]})` : `(${groups[0]})`);\n // This code will continue and add paths without this group included`\n }\n } else if (current) {\n current = `${current}/${head}`;\n } else {\n current = head;\n }\n\n generateVariations(rest, current);\n }\n\n generateVariations(segments);\n\n return Array.from(variations);\n}\n\nasync function exportApiRoutesAsync({\n outputDir,\n server,\n appDir,\n}: {\n outputDir: string;\n server: MetroBundlerDevServer;\n appDir: string;\n}): Promise<Map<string, string>> {\n const functionsDir = '_expo/functions';\n const funcDir = path.join(outputDir, functionsDir);\n fs.mkdirSync(path.join(funcDir), { recursive: true });\n\n const { manifest, files } = await server.exportExpoRouterApiRoutesAsync({\n mode: 'production',\n appDir,\n outputDir: functionsDir,\n });\n\n Log.log(chalk.bold`Exporting ${files.size} API Routes.`);\n\n files.set('_expo/routes.json', JSON.stringify(manifest, null, 2));\n\n return files;\n}\n\nfunction warnPossibleInvalidExportType(appDir: string) {\n const apiRoutes = getApiRoutesForDirectory(appDir);\n if (apiRoutes.length) {\n // TODO: Allow API Routes for native-only.\n Log.warn(\n chalk.yellow`Skipping export for API routes because \\`web.output\\` is not \"server\". You may want to remove the routes: ${apiRoutes\n .map((v) => path.relative(appDir, v))\n .join(', ')}`\n );\n }\n}\n"],"names":["unstable_exportStaticAsync","getFilesToExportFromServerAsync","exportFromServerAsync","modifyBundlesWithSourceMaps","getHtmlFiles","getPathVariations","debug","require","projectRoot","options","Log","warn","learnMore","devServerManager","DevServerManager","minify","mode","location","startAsync","type","isExporting","stopAsync","matchGroupName","name","match","manifest","renderAsync","includeGroupVariations","files","Map","Promise","all","map","outputPath","pathname","replace","set","data","e","logMetroErrorAsync","error","Error","outputDir","basePath","exportServer","includeMaps","exp","getConfig","skipSDKVersionRequirement","appDir","getRouterDirectoryWithManifest","injectFaviconTag","getVirtualFaviconAssetsAsync","devServer","getDefaultDevServer","assert","MetroBundlerDevServer","resources","getStaticResourcesAsync","getStaticRenderFunctionAsync","inspect","colors","depth","template","html","composeResourcesWithHtml","forEach","resource","filename","source","apiRoutes","exportApiRoutesAsync","server","route","contents","warnPossibleInvalidExportType","fs","mkdirSync","path","join","recursive","log","chalk","bold","size","entries","sort","a","b","localeCompare","file","length","Buffer","byteLength","gray","prettyBytes","promises","mkdir","dirname","writeFile","endsWith","normalizedFilename","props","mapName","htmlFiles","Set","traverseScreens","screens","value","Object","values","filePath","slice","addOptionalGroups","add","newPath","variations","variation","Array","from","parts","split","partsWithGroups","part","startsWith","routePath","segments","generateVariations","current","head","rest","groups","group","trim","functionsDir","funcDir","exportExpoRouterApiRoutesAsync","JSON","stringify","getApiRoutesForDirectory","yellow","v","relative"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/export/exportStaticAsync.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\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 */\nimport { getConfig } from '@expo/config';\nimport { SerialAsset } from '@expo/metro-config/build/serializer/serializerAssets';\nimport assert from 'assert';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\nimport prettyBytes from 'pretty-bytes';\nimport { inspect } from 'util';\n\nimport { getVirtualFaviconAssetsAsync } from './favicon';\nimport { persistMetroAssetsAsync } from './persistMetroAssets';\nimport { Log } from '../log';\nimport { DevServerManager } from '../start/server/DevServerManager';\nimport { MetroBundlerDevServer } from '../start/server/metro/MetroBundlerDevServer';\nimport { ExpoRouterServerManifestV1 } from '../start/server/metro/fetchRouterManifest';\nimport { logMetroErrorAsync } from '../start/server/metro/metroErrorInterface';\nimport {\n getApiRoutesForDirectory,\n getRouterDirectoryWithManifest,\n} from '../start/server/metro/router';\nimport { serializeHtmlWithAssets } from '../start/server/metro/serializeHtml';\nimport { learnMore } from '../utils/link';\nimport { getFreePortAsync } from '../utils/port';\n\nconst debug = require('debug')('expo:export:generateStaticRoutes') as typeof console.log;\n\ntype Options = {\n outputDir: string;\n minify: boolean;\n exportServer: boolean;\n baseUrl: string;\n includeMaps: boolean;\n entryPoint?: string;\n clear: boolean;\n};\n\n/** @private */\nexport async function unstable_exportStaticAsync(projectRoot: string, options: Options) {\n Log.warn(\n `Experimental static rendering is enabled. ` +\n learnMore('https://docs.expo.dev/router/reference/static-rendering/')\n );\n\n // Useful for running parallel e2e tests in CI.\n const port = await getFreePortAsync(8082);\n\n // TODO: Prevent starting the watcher.\n const devServerManager = new DevServerManager(projectRoot, {\n minify: options.minify,\n mode: 'production',\n port,\n location: {},\n resetDevServer: options.clear,\n });\n await devServerManager.startAsync([\n {\n type: 'metro',\n options: {\n port,\n location: {},\n isExporting: true,\n resetDevServer: options.clear,\n },\n },\n ]);\n\n try {\n await exportFromServerAsync(projectRoot, devServerManager, options);\n } finally {\n await devServerManager.stopAsync();\n }\n}\n\n/** Match `(page)` -> `page` */\nfunction matchGroupName(name: string): string | undefined {\n return name.match(/^\\(([^/]+?)\\)$/)?.[1];\n}\n\nexport async function getFilesToExportFromServerAsync(\n projectRoot: string,\n {\n manifest,\n renderAsync,\n includeGroupVariations,\n }: {\n manifest: any;\n renderAsync: (pathname: string) => Promise<string>;\n includeGroupVariations?: boolean;\n }\n): Promise<Map<string, string>> {\n // name : contents\n const files = new Map<string, string>();\n\n await Promise.all(\n getHtmlFiles({ manifest, includeGroupVariations }).map(async (outputPath) => {\n const pathname = outputPath.replace(/(?:index)?\\.html$/, '');\n try {\n files.set(outputPath, '');\n const data = await renderAsync(pathname);\n files.set(outputPath, data);\n } catch (e: any) {\n await logMetroErrorAsync({ error: e, projectRoot });\n throw new Error('Failed to statically export route: ' + pathname);\n }\n })\n );\n\n return files;\n}\n\n/** Perform all fs commits */\nexport async function exportFromServerAsync(\n projectRoot: string,\n devServerManager: DevServerManager,\n { outputDir, baseUrl, exportServer, minify, includeMaps }: Options\n): Promise<void> {\n const { exp } = getConfig(projectRoot, { skipSDKVersionRequirement: true });\n const appDir = getRouterDirectoryWithManifest(projectRoot, exp);\n\n const injectFaviconTag = await getVirtualFaviconAssetsAsync(projectRoot, { outputDir, baseUrl });\n\n const devServer = devServerManager.getDefaultDevServer();\n assert(devServer instanceof MetroBundlerDevServer);\n\n const [resources, { manifest, serverManifest, renderAsync }] = await Promise.all([\n devServer.getStaticResourcesAsync({ mode: 'production', minify, includeMaps, baseUrl }),\n devServer.getStaticRenderFunctionAsync({\n mode: 'production',\n minify,\n baseUrl,\n }),\n ]);\n\n debug('Routes:\\n', inspect(manifest, { colors: true, depth: null }));\n\n const files = await getFilesToExportFromServerAsync(projectRoot, {\n manifest,\n // Servers can handle group routes automatically and therefore\n // don't require the build-time generation of every possible group\n // variation.\n includeGroupVariations: !exportServer,\n async renderAsync(pathname: string) {\n const template = await renderAsync(pathname);\n let html = await serializeHtmlWithAssets({\n mode: 'production',\n resources: resources.artifacts,\n template,\n baseUrl,\n });\n\n if (injectFaviconTag) {\n html = injectFaviconTag(html);\n }\n\n return html;\n },\n });\n\n getFilesFromSerialAssets(resources.artifacts, {\n includeMaps,\n files,\n });\n\n if (resources.assets) {\n await persistMetroAssetsAsync(resources.assets, {\n platform: 'web',\n outputDirectory: outputDir,\n baseUrl,\n });\n }\n\n if (exportServer) {\n const apiRoutes = await exportApiRoutesAsync({\n outputDir,\n server: devServer,\n appDir,\n manifest: serverManifest,\n baseUrl,\n });\n\n // Add the api routes to the files to export.\n for (const [route, contents] of apiRoutes) {\n files.set(route, contents);\n }\n } else {\n warnPossibleInvalidExportType(appDir);\n }\n\n await persistMetroFilesAsync(files, outputDir);\n}\n\n// TODO: Move source map modification to the serializer\nexport function getFilesFromSerialAssets(\n resources: SerialAsset[],\n {\n includeMaps,\n files = new Map<string, string>(),\n }: {\n includeMaps: boolean;\n files?: Map<string, string>;\n }\n) {\n resources.forEach((resource) => {\n files.set(\n resource.filename,\n modifyBundlesWithSourceMaps(resource.filename, resource.source, includeMaps)\n );\n });\n\n return files;\n}\n\nexport async function persistMetroFilesAsync(files: Map<string, string>, outputDir: string) {\n fs.mkdirSync(path.join(outputDir), { recursive: true });\n\n Log.log('');\n\n Log.log(chalk.bold`Exporting ${files.size} files:`);\n await Promise.all(\n [...files.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(async ([file, contents]) => {\n const length = Buffer.byteLength(contents, 'utf8');\n Log.log(file, chalk.gray`(${prettyBytes(length)})`);\n const outputPath = path.join(outputDir, file);\n await fs.promises.mkdir(path.dirname(outputPath), { recursive: true });\n await fs.promises.writeFile(outputPath, contents);\n })\n );\n Log.log('');\n}\n\nexport function modifyBundlesWithSourceMaps(\n filename: string,\n source: string,\n includeMaps: boolean\n): string {\n if (filename.endsWith('.js')) {\n // If the bundle ends with source map URLs then update them to point to the correct location.\n\n // TODO: baseUrl support\n const normalizedFilename = '/' + filename.replace(/^\\/+/, '');\n // Ref: https://developer.chrome.com/blog/sourcemaps/#sourceurl-and-displayname-in-action-eval-and-anonymous-functions\n //# sourceMappingURL=//localhost:8085/index.map?platform=web&dev=false&hot=false&lazy=true&minify=true&resolver.environment=client&transform.environment=client&serializer.output=static\n //# sourceURL=http://localhost:8085/index.bundle//&platform=web&dev=false&hot=false&lazy=true&minify=true&resolver.environment=client&transform.environment=client&serializer.output=static\n return source.replace(/^\\/\\/# (sourceMappingURL|sourceURL)=.*$/gm, (...props) => {\n if (includeMaps) {\n if (props[1] === 'sourceURL') {\n return `//# ${props[1]}=` + normalizedFilename;\n } else if (props[1] === 'sourceMappingURL') {\n const mapName = normalizedFilename + '.map';\n return `//# ${props[1]}=` + mapName;\n }\n }\n return '';\n });\n }\n return source;\n}\n\nexport function getHtmlFiles({\n manifest,\n includeGroupVariations,\n}: {\n manifest: any;\n includeGroupVariations?: boolean;\n}): string[] {\n const htmlFiles = new Set<string>();\n\n function traverseScreens(screens: string | { screens: any; path: string }, baseUrl = '') {\n for (const value of Object.values(screens)) {\n if (typeof value === 'string') {\n let filePath = baseUrl + value;\n if (value === '') {\n filePath =\n baseUrl === ''\n ? 'index'\n : baseUrl.endsWith('/')\n ? baseUrl + 'index'\n : baseUrl.slice(0, -1);\n }\n if (includeGroupVariations) {\n // TODO: Dedupe requests for alias routes.\n addOptionalGroups(filePath);\n } else {\n htmlFiles.add(filePath);\n }\n } else if (typeof value === 'object' && value?.screens) {\n const newPath = baseUrl + value.path + '/';\n traverseScreens(value.screens, newPath);\n }\n }\n }\n\n function addOptionalGroups(path: string) {\n const variations = getPathVariations(path);\n for (const variation of variations) {\n htmlFiles.add(variation);\n }\n }\n\n traverseScreens(manifest.screens);\n\n return Array.from(htmlFiles).map((value) => {\n const parts = value.split('/');\n // Replace `:foo` with `[foo]` and `*foo` with `[...foo]`\n const partsWithGroups = parts.map((part) => {\n if (part === '*not-found') {\n return `+not-found`;\n } else if (part.startsWith(':')) {\n return `[${part.slice(1)}]`;\n } else if (part.startsWith('*')) {\n return `[...${part.slice(1)}]`;\n }\n return part;\n });\n return partsWithGroups.join('/') + '.html';\n });\n}\n\n// Given a route like `(foo)/bar/(baz)`, return all possible variations of the route.\n// e.g. `(foo)/bar/(baz)`, `(foo)/bar/baz`, `foo/bar/(baz)`, `foo/bar/baz`,\nexport function getPathVariations(routePath: string): string[] {\n const variations = new Set<string>();\n const segments = routePath.split('/');\n\n function generateVariations(segments: string[], current = ''): void {\n if (segments.length === 0) {\n if (current) variations.add(current);\n return;\n }\n\n const [head, ...rest] = segments;\n\n if (head.startsWith('(foo,foo')) {\n }\n\n if (matchGroupName(head)) {\n const groups = head.slice(1, -1).split(',');\n\n if (groups.length > 1) {\n for (const group of groups) {\n // If there are multiple groups, recurse on each group.\n generateVariations([`(${group.trim()})`, ...rest], current);\n }\n return;\n } else {\n // Start a fork where this group is included\n generateVariations(rest, current ? `${current}/(${groups[0]})` : `(${groups[0]})`);\n // This code will continue and add paths without this group included`\n }\n } else if (current) {\n current = `${current}/${head}`;\n } else {\n current = head;\n }\n\n generateVariations(rest, current);\n }\n\n generateVariations(segments);\n\n return Array.from(variations);\n}\n\nasync function exportApiRoutesAsync({\n outputDir,\n server,\n appDir,\n baseUrl,\n ...props\n}: {\n outputDir: string;\n server: MetroBundlerDevServer;\n appDir: string;\n manifest: ExpoRouterServerManifestV1;\n baseUrl: string;\n}): Promise<Map<string, string>> {\n const functionsDir = '_expo/functions';\n const funcDir = path.join(outputDir, functionsDir);\n fs.mkdirSync(path.join(funcDir), { recursive: true });\n\n const { manifest, files } = await server.exportExpoRouterApiRoutesAsync({\n mode: 'production',\n appDir,\n outputDir: functionsDir,\n prerenderManifest: props.manifest,\n baseUrl,\n });\n\n Log.log(chalk.bold`Exporting ${files.size} API Routes.`);\n\n files.set('_expo/routes.json', JSON.stringify(manifest, null, 2));\n\n return files;\n}\n\nfunction warnPossibleInvalidExportType(appDir: string) {\n const apiRoutes = getApiRoutesForDirectory(appDir);\n if (apiRoutes.length) {\n // TODO: Allow API Routes for native-only.\n Log.warn(\n chalk.yellow`Skipping export for API routes because \\`web.output\\` is not \"server\". You may want to remove the routes: ${apiRoutes\n .map((v) => path.relative(appDir, v))\n .join(', ')}`\n );\n }\n}\n"],"names":["unstable_exportStaticAsync","getFilesToExportFromServerAsync","exportFromServerAsync","getFilesFromSerialAssets","persistMetroFilesAsync","modifyBundlesWithSourceMaps","getHtmlFiles","getPathVariations","debug","require","projectRoot","options","Log","warn","learnMore","port","getFreePortAsync","devServerManager","DevServerManager","minify","mode","location","resetDevServer","clear","startAsync","type","isExporting","stopAsync","matchGroupName","name","match","manifest","renderAsync","includeGroupVariations","files","Map","Promise","all","map","outputPath","pathname","replace","set","data","e","logMetroErrorAsync","error","Error","outputDir","baseUrl","exportServer","includeMaps","exp","getConfig","skipSDKVersionRequirement","appDir","getRouterDirectoryWithManifest","injectFaviconTag","getVirtualFaviconAssetsAsync","devServer","getDefaultDevServer","assert","MetroBundlerDevServer","resources","serverManifest","getStaticResourcesAsync","getStaticRenderFunctionAsync","inspect","colors","depth","template","html","serializeHtmlWithAssets","artifacts","assets","persistMetroAssetsAsync","platform","outputDirectory","apiRoutes","exportApiRoutesAsync","server","route","contents","warnPossibleInvalidExportType","forEach","resource","filename","source","fs","mkdirSync","path","join","recursive","log","chalk","bold","size","entries","sort","a","b","localeCompare","file","length","Buffer","byteLength","gray","prettyBytes","promises","mkdir","dirname","writeFile","endsWith","normalizedFilename","props","mapName","htmlFiles","Set","traverseScreens","screens","value","Object","values","filePath","slice","addOptionalGroups","add","newPath","variations","variation","Array","from","parts","split","partsWithGroups","part","startsWith","routePath","segments","generateVariations","current","head","rest","groups","group","trim","functionsDir","funcDir","exportExpoRouterApiRoutesAsync","prerenderManifest","JSON","stringify","getApiRoutesForDirectory","yellow","v","relative"],"mappings":"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"}
@@ -21,7 +21,7 @@ function getUserDefinedFaviconFile(projectRoot) {
21
21
  "./favicon.ico"
22
22
  ]);
23
23
  }
24
- async function getVirtualFaviconAssetsAsync(projectRoot, { basePath , outputDir }) {
24
+ async function getVirtualFaviconAssetsAsync(projectRoot, { baseUrl , outputDir }) {
25
25
  const existing = getUserDefinedFaviconFile(projectRoot);
26
26
  if (existing) {
27
27
  debug("Using user-defined favicon.ico file.");
@@ -42,7 +42,7 @@ async function getVirtualFaviconAssetsAsync(projectRoot, { basePath , outputDir
42
42
  if (!html.includes("</head>")) {
43
43
  return html;
44
44
  }
45
- return html.replace("</head>", `<link rel="shortcut icon" href="${basePath}/favicon.ico" /></head>`);
45
+ return html.replace("</head>", `<link rel="shortcut icon" href="${baseUrl}/favicon.ico" /></head>`);
46
46
  }
47
47
  return injectFaviconTag;
48
48
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/export/favicon.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport { generateFaviconAsync, generateImageAsync } from '@expo/image-utils';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { getUserDefinedFile } from './publicFolder';\n\nconst debug = require('debug')('expo:favicon') as typeof console.log;\n\n/** @returns the file system path for a user-defined favicon.ico file in the public folder. */\nexport function getUserDefinedFaviconFile(projectRoot: string): string | null {\n return getUserDefinedFile(projectRoot, ['./favicon.ico']);\n}\n\nexport async function getVirtualFaviconAssetsAsync(\n projectRoot: string,\n { basePath, outputDir }: { outputDir: string; basePath: string }\n): Promise<((html: string) => string) | null> {\n const existing = getUserDefinedFaviconFile(projectRoot);\n if (existing) {\n debug('Using user-defined favicon.ico file.');\n return null;\n }\n\n const data = await getFaviconFromExpoConfigAsync(projectRoot);\n\n if (!data) {\n return null;\n }\n\n await Promise.all(\n [data].map((asset) => {\n const assetPath = path.join(outputDir, asset.path);\n debug('Writing asset to disk: ' + assetPath);\n return fs.promises.writeFile(assetPath, asset.source);\n })\n );\n\n function injectFaviconTag(html: string): string {\n if (!html.includes('</head>')) {\n return html;\n }\n return html.replace(\n '</head>',\n `<link rel=\"shortcut icon\" href=\"${basePath}/favicon.ico\" /></head>`\n );\n }\n\n return injectFaviconTag;\n}\n\nexport async function getFaviconFromExpoConfigAsync(projectRoot: string) {\n const { exp } = getConfig(projectRoot);\n\n const src = exp.web?.favicon ?? null;\n if (!src) {\n return null;\n }\n\n const dims = [16, 32, 48];\n const cacheType = 'favicon';\n\n const size = dims[dims.length - 1];\n const { source } = await generateImageAsync(\n { projectRoot, cacheType },\n {\n resizeMode: 'contain',\n src,\n backgroundColor: 'transparent',\n width: size,\n height: size,\n name: `favicon-${size}.png`,\n }\n );\n\n const faviconBuffer = await generateFaviconAsync(source, dims);\n\n return { source: faviconBuffer, path: 'favicon.ico' };\n}\n"],"names":["getUserDefinedFaviconFile","getVirtualFaviconAssetsAsync","getFaviconFromExpoConfigAsync","debug","require","projectRoot","getUserDefinedFile","basePath","outputDir","existing","data","Promise","all","map","asset","assetPath","path","join","fs","promises","writeFile","source","injectFaviconTag","html","includes","replace","exp","getConfig","src","web","favicon","dims","cacheType","size","length","generateImageAsync","resizeMode","backgroundColor","width","height","name","faviconBuffer","generateFaviconAsync"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/export/favicon.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport { generateFaviconAsync, generateImageAsync } from '@expo/image-utils';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { getUserDefinedFile } from './publicFolder';\n\nconst debug = require('debug')('expo:favicon') as typeof console.log;\n\n/** @returns the file system path for a user-defined favicon.ico file in the public folder. */\nexport function getUserDefinedFaviconFile(projectRoot: string): string | null {\n return getUserDefinedFile(projectRoot, ['./favicon.ico']);\n}\n\nexport async function getVirtualFaviconAssetsAsync(\n projectRoot: string,\n { baseUrl, outputDir }: { outputDir: string; baseUrl: string }\n): Promise<((html: string) => string) | null> {\n const existing = getUserDefinedFaviconFile(projectRoot);\n if (existing) {\n debug('Using user-defined favicon.ico file.');\n return null;\n }\n\n const data = await getFaviconFromExpoConfigAsync(projectRoot);\n\n if (!data) {\n return null;\n }\n\n await Promise.all(\n [data].map((asset) => {\n const assetPath = path.join(outputDir, asset.path);\n debug('Writing asset to disk: ' + assetPath);\n return fs.promises.writeFile(assetPath, asset.source);\n })\n );\n\n function injectFaviconTag(html: string): string {\n if (!html.includes('</head>')) {\n return html;\n }\n return html.replace(\n '</head>',\n `<link rel=\"shortcut icon\" href=\"${baseUrl}/favicon.ico\" /></head>`\n );\n }\n\n return injectFaviconTag;\n}\n\nexport async function getFaviconFromExpoConfigAsync(projectRoot: string) {\n const { exp } = getConfig(projectRoot);\n\n const src = exp.web?.favicon ?? null;\n if (!src) {\n return null;\n }\n\n const dims = [16, 32, 48];\n const cacheType = 'favicon';\n\n const size = dims[dims.length - 1];\n const { source } = await generateImageAsync(\n { projectRoot, cacheType },\n {\n resizeMode: 'contain',\n src,\n backgroundColor: 'transparent',\n width: size,\n height: size,\n name: `favicon-${size}.png`,\n }\n );\n\n const faviconBuffer = await generateFaviconAsync(source, dims);\n\n return { source: faviconBuffer, path: 'favicon.ico' };\n}\n"],"names":["getUserDefinedFaviconFile","getVirtualFaviconAssetsAsync","getFaviconFromExpoConfigAsync","debug","require","projectRoot","getUserDefinedFile","baseUrl","outputDir","existing","data","Promise","all","map","asset","assetPath","path","join","fs","promises","writeFile","source","injectFaviconTag","html","includes","replace","exp","getConfig","src","web","favicon","dims","cacheType","size","length","generateImageAsync","resizeMode","backgroundColor","width","height","name","faviconBuffer","generateFaviconAsync"],"mappings":"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"}
@@ -6,13 +6,15 @@ exports.createBundlesAsync = createBundlesAsync;
6
6
  exports.getAssets = getAssets;
7
7
  var _config = require("@expo/config");
8
8
  var _chalk = _interopRequireDefault(require("chalk"));
9
+ var _metro = _interopRequireDefault(require("metro"));
9
10
  var _getAssets = _interopRequireDefault(require("metro/src/DeltaBundler/Serializers/getAssets"));
11
+ var _server = _interopRequireDefault(require("metro/src/Server"));
10
12
  var _splitBundleOptions = _interopRequireDefault(require("metro/src/lib/splitBundleOptions"));
11
13
  var _exportHermes = require("./exportHermes");
12
14
  var _getCssModulesFromBundler = require("../start/server/metro/getCssModulesFromBundler");
13
15
  var _instantiateMetro = require("../start/server/metro/instantiateMetro");
14
- var _resolveFromProject = require("../start/server/metro/resolveFromProject");
15
16
  var _manifestMiddleware = require("../start/server/middleware/ManifestMiddleware");
17
+ var _metroOptions = require("../start/server/middleware/metroOptions");
16
18
  function _interopRequireDefault(obj) {
17
19
  return obj && obj.__esModule ? obj : {
18
20
  default: obj
@@ -58,26 +60,26 @@ async function bundleProductionMetroClientAsync(projectRoot, expoConfig, metroOp
58
60
  // Hermes won't be available.
59
61
  await Promise.all(bundles.map(({ platform })=>assertEngineMismatchAsync(projectRoot, expoConfig, platform)
60
62
  ));
61
- const metro = (0, _resolveFromProject).importMetroFromProject(projectRoot);
62
- const Server = (0, _resolveFromProject).importMetroServerFromProject(projectRoot);
63
63
  const { config , reporter } = await (0, _instantiateMetro).loadMetroConfigAsync(projectRoot, metroOptions, {
64
64
  exp: expoConfig,
65
65
  isExporting: true
66
66
  });
67
- const metroServer = await metro.runMetro(config, {
67
+ const metroServer = await _metro.default.runMetro(config, {
68
68
  watch: false
69
69
  });
70
70
  const buildAsync = async (bundle)=>{
71
71
  const buildID = `bundle_${nextBuildID++}_${bundle.platform}`;
72
72
  const isHermes = (0, _exportHermes).isEnableHermesManaged(expoConfig, bundle.platform);
73
- var _dev, _minify;
74
73
  const bundleOptions = {
75
- ...Server.DEFAULT_BUNDLE_OPTIONS,
74
+ ..._server.default.DEFAULT_BUNDLE_OPTIONS,
75
+ ...(0, _metroOptions).getMetroDirectBundleOptions({
76
+ mainModuleName: bundle.entryPoint,
77
+ platform: bundle.platform,
78
+ mode: bundle.dev ? "development" : "production",
79
+ engine: isHermes ? "hermes" : undefined,
80
+ baseUrl: (0, _metroOptions).getBaseUrlFromExpoConfig(expoConfig)
81
+ }),
76
82
  bundleType: "bundle",
77
- platform: bundle.platform,
78
- entryFile: bundle.entryPoint,
79
- dev: (_dev = bundle.dev) != null ? _dev : false,
80
- minify: !isHermes && ((_minify = bundle.minify) != null ? _minify : !bundle.dev),
81
83
  inlineSourceMap: false,
82
84
  sourceMapUrl: bundle.sourceMapUrl,
83
85
  createModuleIdFactory: config.serializer.createModuleIdFactory,
@@ -1 +1 @@
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 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';\nimport { getEntryWithServerRoot } from '../start/server/middleware/ManifestMiddleware';\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 metro = importMetroFromProject(projectRoot);\n const Server = importMetroServerFromProject(projectRoot);\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 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 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","metro","importMetroFromProject","Server","importMetroServerFromProject","config","reporter","loadMetroConfigAsync","isExporting","metroServer","runMetro","watch","buildAsync","bundle","buildID","isHermes","DEFAULT_BUNDLE_OPTIONS","bundleType","entryFile","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","undefined","intermediateOutputs","bundleOutputs","i","push","console","end","options","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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"}