@expo/cli 0.15.0 → 0.16.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 (148) hide show
  1. package/build/bin/cli +10 -3
  2. package/build/bin/cli.map +1 -1
  3. package/build/src/api/user/actions.js +1 -1
  4. package/build/src/api/user/actions.js.map +1 -1
  5. package/build/src/export/createMetadataJson.js +2 -1
  6. package/build/src/export/createMetadataJson.js.map +1 -1
  7. package/build/src/export/embed/exportEmbedAsync.js +50 -3
  8. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  9. package/build/src/export/embed/xcodeCompilerLogger.js +97 -0
  10. package/build/src/export/embed/xcodeCompilerLogger.js.map +1 -0
  11. package/build/src/export/exportApp.js +90 -103
  12. package/build/src/export/exportApp.js.map +1 -1
  13. package/build/src/export/exportAssets.js +18 -23
  14. package/build/src/export/exportAssets.js.map +1 -1
  15. package/build/src/export/exportAsync.js +1 -1
  16. package/build/src/export/exportAsync.js.map +1 -1
  17. package/build/src/export/exportHermes.js +0 -90
  18. package/build/src/export/exportHermes.js.map +1 -1
  19. package/build/src/export/exportStaticAsync.js +137 -108
  20. package/build/src/export/exportStaticAsync.js.map +1 -1
  21. package/build/src/export/favicon.js +12 -4
  22. package/build/src/export/favicon.js.map +1 -1
  23. package/build/src/export/fork-bundleAsync.js +74 -49
  24. package/build/src/export/fork-bundleAsync.js.map +1 -1
  25. package/build/src/export/metroAssetLocalPath.js +1 -1
  26. package/build/src/export/metroAssetLocalPath.js.map +1 -1
  27. package/build/src/export/persistMetroAssets.js +28 -17
  28. package/build/src/export/persistMetroAssets.js.map +1 -1
  29. package/build/src/export/publicFolder.js +7 -0
  30. package/build/src/export/publicFolder.js.map +1 -1
  31. package/build/src/export/saveAssets.js +176 -12
  32. package/build/src/export/saveAssets.js.map +1 -1
  33. package/build/src/export/writeContents.js +8 -107
  34. package/build/src/export/writeContents.js.map +1 -1
  35. package/build/src/install/installAsync.js +29 -10
  36. package/build/src/install/installAsync.js.map +1 -1
  37. package/build/src/prebuild/prebuildAsync.js +9 -2
  38. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  39. package/build/src/run/hints.js +4 -0
  40. package/build/src/run/hints.js.map +1 -1
  41. package/build/src/run/index.js +101 -0
  42. package/build/src/run/index.js.map +1 -0
  43. package/build/src/start/doctor/dependencies/bundledNativeModules.js +2 -2
  44. package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -1
  45. package/build/src/start/doctor/dependencies/getVersionedPackages.js +10 -3
  46. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  47. package/build/src/start/doctor/dependencies/resolvePackages.js +66 -0
  48. package/build/src/start/doctor/dependencies/resolvePackages.js.map +1 -0
  49. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +2 -30
  50. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  51. package/build/src/start/interface/interactiveActions.js +24 -8
  52. package/build/src/start/interface/interactiveActions.js.map +1 -1
  53. package/build/src/start/server/getStaticRenderFunctions.js +8 -4
  54. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  55. package/build/src/start/server/metro/MetroBundlerDevServer.js +39 -16
  56. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  57. package/build/src/start/server/metro/MetroTerminalReporter.js +6 -2
  58. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  59. package/build/src/start/server/metro/TerminalReporter.js +18 -1
  60. package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
  61. package/build/src/start/server/metro/bundleApiRoutes.js +3 -2
  62. package/build/src/start/server/metro/bundleApiRoutes.js.map +1 -1
  63. package/build/src/start/server/metro/createExpoMetroResolver.js +22 -5
  64. package/build/src/start/server/metro/createExpoMetroResolver.js.map +1 -1
  65. package/build/src/start/server/metro/createJResolver.js +5 -2
  66. package/build/src/start/server/metro/createJResolver.js.map +1 -1
  67. package/build/src/start/server/metro/createServerRouteMiddleware.js +2 -1
  68. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
  69. package/build/src/start/server/metro/{inspector-proxy/device.js → debugging/InspectorDevice.js} +8 -38
  70. package/build/src/start/server/metro/debugging/InspectorDevice.js.map +1 -0
  71. package/build/src/start/server/metro/debugging/InspectorProxy.js +116 -0
  72. package/build/src/start/server/metro/debugging/InspectorProxy.js.map +1 -0
  73. package/build/src/start/server/metro/debugging/createDebugMiddleware.js +45 -0
  74. package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -0
  75. package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/NetworkResponse.js +3 -4
  76. package/build/src/start/server/metro/debugging/inspectorHandlers/NetworkResponse.js.map +1 -0
  77. package/build/src/start/server/metro/debugging/inspectorHandlers/PageReload.js.map +1 -0
  78. package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/VscodeDebuggerGetPossibleBreakpoints.js +2 -2
  79. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -0
  80. package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/VscodeDebuggerScriptParsed.js +3 -2
  81. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerScriptParsed.js.map +1 -0
  82. package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/VscodeDebuggerSetBreakpointByUrl.js +3 -2
  83. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerSetBreakpointByUrl.js.map +1 -0
  84. package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/VscodeRuntimeCallFunctionOn.js +2 -2
  85. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeRuntimeCallFunctionOn.js.map +1 -0
  86. package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/VscodeRuntimeGetProperties.js +5 -4
  87. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeRuntimeGetProperties.js.map +1 -0
  88. package/build/src/start/server/metro/debugging/inspectorHandlers/types.js.map +1 -0
  89. package/build/src/start/server/metro/debugging/inspectorHandlers/utils.js +20 -0
  90. package/build/src/start/server/metro/debugging/inspectorHandlers/utils.js.map +1 -0
  91. package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
  92. package/build/src/start/server/metro/instantiateMetro.js +8 -5
  93. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  94. package/build/src/start/server/metro/metroErrorInterface.js +3 -2
  95. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  96. package/build/src/start/server/metro/router.js +1 -5
  97. package/build/src/start/server/metro/router.js.map +1 -1
  98. package/build/src/start/server/metro/runServer-fork.js +0 -19
  99. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  100. package/build/src/start/server/metro/serializeHtml.js +20 -4
  101. package/build/src/start/server/metro/serializeHtml.js.map +1 -1
  102. package/build/src/start/server/metro/withMetroMultiPlatform.js +48 -85
  103. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  104. package/build/src/start/server/middleware/ManifestMiddleware.js +12 -5
  105. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  106. package/build/src/start/server/middleware/inspector/JsInspector.js +22 -1
  107. package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
  108. package/build/src/start/server/middleware/metroOptions.js +62 -9
  109. package/build/src/start/server/middleware/metroOptions.js.map +1 -1
  110. package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +1 -1
  111. package/build/src/start/server/type-generation/__typetests__/route.test.js +11 -3
  112. package/build/src/start/server/type-generation/__typetests__/route.test.js.map +1 -1
  113. package/build/src/start/server/type-generation/routes.js +6 -4
  114. package/build/src/start/server/type-generation/routes.js.map +1 -1
  115. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js +1 -1
  116. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
  117. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  118. package/build/src/utils/codesigning.js +11 -1
  119. package/build/src/utils/codesigning.js.map +1 -1
  120. package/build/src/utils/env.js +7 -1
  121. package/build/src/utils/env.js.map +1 -1
  122. package/build/src/utils/tsconfig/loadTsConfigPaths.js +3 -11
  123. package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -1
  124. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +22 -12
  125. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +1 -1
  126. package/package.json +10 -10
  127. package/static/template/index.html +14 -95
  128. package/build/src/export/printBundleSizes.js +0 -101
  129. package/build/src/export/printBundleSizes.js.map +0 -1
  130. package/build/src/start/server/metro/inspector-proxy/device.js.map +0 -1
  131. package/build/src/start/server/metro/inspector-proxy/handlers/NetworkResponse.js.map +0 -1
  132. package/build/src/start/server/metro/inspector-proxy/handlers/PageReload.js.map +0 -1
  133. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js.map +0 -1
  134. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerScriptParsed.js.map +0 -1
  135. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerSetBreakpointByUrl.js.map +0 -1
  136. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeCallFunctionOn.js.map +0 -1
  137. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeGetProperties.js.map +0 -1
  138. package/build/src/start/server/metro/inspector-proxy/handlers/types.js.map +0 -1
  139. package/build/src/start/server/metro/inspector-proxy/handlers/utils.js +0 -11
  140. package/build/src/start/server/metro/inspector-proxy/handlers/utils.js.map +0 -1
  141. package/build/src/start/server/metro/inspector-proxy/index.js +0 -30
  142. package/build/src/start/server/metro/inspector-proxy/index.js.map +0 -1
  143. package/build/src/start/server/metro/inspector-proxy/proxy.js +0 -169
  144. package/build/src/start/server/metro/inspector-proxy/proxy.js.map +0 -1
  145. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +0 -64
  146. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +0 -1
  147. /package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/PageReload.js +0 -0
  148. /package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/types.js +0 -0
@@ -1 +1 @@
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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"}
1
+ {"version":3,"sources":["../../../src/export/exportHermes.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport fs from 'fs-extra';\nimport path from 'path';\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\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":["isEnableHermesManaged","parseGradleProperties","maybeThrowFromInconsistentEngineAsync","maybeInconsistentEngineAndroidAsync","maybeInconsistentEngineIosAsync","isHermesBytecodeBundleAsync","getHermesBytecodeBundleVersionAsync","expoConfig","platform","android","jsEngine","ios","content","result","line","split","trim","startsWith","sepIndex","indexOf","key","substr","value","projectRoot","configFilePath","isHermesManaged","configFileName","path","basename","Error","join","gradlePropertiesPath","fs","existsSync","props","readFile","isHermesBare","podfilePath","isPropsReference","search","podfilePropertiesPath","parsePodfilePropertiesAsync","HERMES_MAGIC_HEADER","file","header","readHermesHeaderAsync","slice","toString","readUInt32LE","fd","open","buffer","Buffer","alloc","read","close","JSON","parse"],"mappings":"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"}
@@ -4,21 +4,16 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  exports.unstable_exportStaticAsync = unstable_exportStaticAsync;
6
6
  exports.getFilesToExportFromServerAsync = getFilesToExportFromServerAsync;
7
- exports.exportFromServerAsync = exportFromServerAsync;
8
- exports.getFilesFromSerialAssets = getFilesFromSerialAssets;
9
- exports.persistMetroFilesAsync = persistMetroFilesAsync;
10
- exports.modifyBundlesWithSourceMaps = modifyBundlesWithSourceMaps;
11
7
  exports.getHtmlFiles = getHtmlFiles;
12
8
  exports.getPathVariations = getPathVariations;
13
- var _config = require("@expo/config");
14
9
  var _assert = _interopRequireDefault(require("assert"));
15
10
  var _chalk = _interopRequireDefault(require("chalk"));
16
- var _fs = _interopRequireDefault(require("fs"));
17
11
  var _path = _interopRequireDefault(require("path"));
18
- var _prettyBytes = _interopRequireDefault(require("pretty-bytes"));
12
+ var _resolveFrom = _interopRequireDefault(require("resolve-from"));
19
13
  var _util = require("util");
20
14
  var _favicon = require("./favicon");
21
15
  var _persistMetroAssets = require("./persistMetroAssets");
16
+ var _saveAssets = require("./saveAssets");
22
17
  var _log = require("../log");
23
18
  var _devServerManager = require("../start/server/DevServerManager");
24
19
  var _metroBundlerDevServer = require("../start/server/metro/MetroBundlerDevServer");
@@ -34,7 +29,7 @@ function _interopRequireDefault(obj) {
34
29
  }
35
30
  const debug = require("debug")("expo:export:generateStaticRoutes");
36
31
  async function unstable_exportStaticAsync(projectRoot, options) {
37
- _log.Log.warn(`Experimental static rendering is enabled. ` + (0, _link).learnMore("https://docs.expo.dev/router/reference/static-rendering/"));
32
+ _log.Log.log(`Static rendering is enabled. ` + (0, _link).learnMore("https://docs.expo.dev/router/reference/static-rendering/"));
38
33
  // Useful for running parallel e2e tests in CI.
39
34
  const port = await (0, _port).getFreePortAsync(8082);
40
35
  // TODO: Prevent starting the watcher.
@@ -43,7 +38,8 @@ async function unstable_exportStaticAsync(projectRoot, options) {
43
38
  mode: "production",
44
39
  port,
45
40
  location: {},
46
- resetDevServer: options.clear
41
+ resetDevServer: options.clear,
42
+ maxWorkers: options.maxWorkers
47
43
  });
48
44
  await devServerManager.startAsync([
49
45
  {
@@ -52,12 +48,13 @@ async function unstable_exportStaticAsync(projectRoot, options) {
52
48
  port,
53
49
  location: {},
54
50
  isExporting: true,
55
- resetDevServer: options.clear
51
+ resetDevServer: options.clear,
52
+ maxWorkers: options.maxWorkers
56
53
  }
57
54
  },
58
55
  ]);
59
56
  try {
60
- await exportFromServerAsync(projectRoot, devServerManager, options);
57
+ return await exportFromServerAsync(projectRoot, devServerManager, options);
61
58
  } finally{
62
59
  await devServerManager.stopAsync();
63
60
  }
@@ -66,18 +63,31 @@ async function unstable_exportStaticAsync(projectRoot, options) {
66
63
  var ref;
67
64
  return (ref = name.match(/^\(([^/]+?)\)$/)) == null ? void 0 : ref[1];
68
65
  }
69
- async function getFilesToExportFromServerAsync(projectRoot, { manifest , renderAsync , includeGroupVariations }) {
70
- // name : contents
71
- const files = new Map();
66
+ async function getFilesToExportFromServerAsync(projectRoot, { manifest , renderAsync , // Servers can handle group routes automatically and therefore
67
+ // don't require the build-time generation of every possible group
68
+ // variation.
69
+ exportServer , // name : contents
70
+ files =new Map() }) {
72
71
  await Promise.all(getHtmlFiles({
73
72
  manifest,
74
- includeGroupVariations
75
- }).map(async (outputPath)=>{
76
- const pathname = outputPath.replace(/(?:index)?\.html$/, "");
73
+ includeGroupVariations: !exportServer
74
+ }).map(async ({ route , filePath , pathname })=>{
77
75
  try {
78
- files.set(outputPath, "");
79
- const data = await renderAsync(pathname);
80
- files.set(outputPath, data);
76
+ const targetDomain = exportServer ? "server" : "client";
77
+ files.set(filePath, {
78
+ contents: "",
79
+ targetDomain
80
+ });
81
+ const data = await renderAsync({
82
+ route,
83
+ filePath,
84
+ pathname
85
+ });
86
+ files.set(filePath, {
87
+ contents: data,
88
+ routeId: pathname,
89
+ targetDomain
90
+ });
81
91
  } catch (e) {
82
92
  await (0, _metroErrorInterface).logMetroErrorAsync({
83
93
  error: e,
@@ -88,47 +98,75 @@ async function getFilesToExportFromServerAsync(projectRoot, { manifest , renderA
88
98
  }));
89
99
  return files;
90
100
  }
91
- async function exportFromServerAsync(projectRoot, devServerManager, { outputDir , baseUrl , exportServer , minify , includeMaps }) {
92
- const { exp } = (0, _config).getConfig(projectRoot, {
93
- skipSDKVersionRequirement: true
101
+ function modifyRouteNodeInRuntimeManifest(manifest, callback) {
102
+ const iterateScreens = (screens)=>{
103
+ Object.values(screens).map((value)=>{
104
+ if (typeof value !== "string") {
105
+ if (value._route) callback(value._route);
106
+ iterateScreens(value.screens);
107
+ }
108
+ });
109
+ };
110
+ iterateScreens(manifest.screens);
111
+ }
112
+ // TODO: Do this earlier in the process.
113
+ function makeRuntimeEntryPointsAbsolute(manifest, appDir) {
114
+ modifyRouteNodeInRuntimeManifest(manifest, (route)=>{
115
+ if (Array.isArray(route.entryPoints)) {
116
+ route.entryPoints = route.entryPoints.map((entryPoint)=>{
117
+ if (entryPoint.startsWith(".")) {
118
+ return _path.default.resolve(appDir, entryPoint);
119
+ } else if (!_path.default.isAbsolute(entryPoint)) {
120
+ return (0, _resolveFrom).default(appDir, entryPoint);
121
+ }
122
+ return entryPoint;
123
+ });
124
+ }
94
125
  });
95
- const appDir = (0, _router).getRouterDirectoryWithManifest(projectRoot, exp);
126
+ }
127
+ /** Perform all fs commits */ async function exportFromServerAsync(projectRoot, devServerManager, { outputDir , baseUrl , exportServer , minify , includeSourceMaps , routerRoot , asyncRoutes , files =new Map() }) {
128
+ const appDir = _path.default.join(projectRoot, routerRoot);
96
129
  const injectFaviconTag = await (0, _favicon).getVirtualFaviconAssetsAsync(projectRoot, {
97
130
  outputDir,
98
- baseUrl
131
+ baseUrl,
132
+ files
99
133
  });
100
134
  const devServer = devServerManager.getDefaultDevServer();
101
135
  (0, _assert).default(devServer instanceof _metroBundlerDevServer.MetroBundlerDevServer);
102
136
  const [resources, { manifest , serverManifest , renderAsync }] = await Promise.all([
103
137
  devServer.getStaticResourcesAsync({
138
+ isExporting: true,
104
139
  mode: "production",
105
140
  minify,
106
- includeMaps,
107
- baseUrl
141
+ includeSourceMaps,
142
+ baseUrl,
143
+ asyncRoutes,
144
+ routerRoot
108
145
  }),
109
146
  devServer.getStaticRenderFunctionAsync({
110
147
  mode: "production",
111
148
  minify,
112
- baseUrl
149
+ baseUrl,
150
+ routerRoot
113
151
  }),
114
152
  ]);
153
+ makeRuntimeEntryPointsAbsolute(manifest, appDir);
115
154
  debug("Routes:\n", (0, _util).inspect(manifest, {
116
155
  colors: true,
117
156
  depth: null
118
157
  }));
119
- const files = await getFilesToExportFromServerAsync(projectRoot, {
158
+ await getFilesToExportFromServerAsync(projectRoot, {
159
+ files,
120
160
  manifest,
121
- // Servers can handle group routes automatically and therefore
122
- // don't require the build-time generation of every possible group
123
- // variation.
124
- includeGroupVariations: !exportServer,
125
- async renderAsync (pathname) {
161
+ exportServer,
162
+ async renderAsync ({ pathname , route }) {
126
163
  const template = await renderAsync(pathname);
127
164
  let html = await (0, _serializeHtml).serializeHtmlWithAssets({
128
165
  mode: "production",
129
166
  resources: resources.artifacts,
130
167
  template,
131
- baseUrl
168
+ baseUrl,
169
+ route
132
170
  });
133
171
  if (injectFaviconTag) {
134
172
  html = injectFaviconTag(html);
@@ -136,12 +174,16 @@ async function exportFromServerAsync(projectRoot, devServerManager, { outputDir
136
174
  return html;
137
175
  }
138
176
  });
139
- getFilesFromSerialAssets(resources.artifacts, {
140
- includeMaps,
177
+ (0, _saveAssets).getFilesFromSerialAssets(resources.artifacts, {
178
+ platform: "web",
179
+ includeSourceMaps,
141
180
  files
142
181
  });
143
182
  if (resources.assets) {
183
+ // TODO: Collect files without writing to disk.
184
+ // NOTE(kitten): Re. above, this is now using `files` except for iOS catalog output, which isn't used here
144
185
  await (0, _persistMetroAssets).persistMetroAssetsAsync(resources.assets, {
186
+ files,
145
187
  platform: "web",
146
188
  outputDirectory: outputDir,
147
189
  baseUrl
@@ -151,7 +193,7 @@ async function exportFromServerAsync(projectRoot, devServerManager, { outputDir
151
193
  const apiRoutes = await exportApiRoutesAsync({
152
194
  outputDir,
153
195
  server: devServer,
154
- appDir,
196
+ routerRoot,
155
197
  manifest: serverManifest,
156
198
  baseUrl
157
199
  });
@@ -162,86 +204,58 @@ async function exportFromServerAsync(projectRoot, devServerManager, { outputDir
162
204
  } else {
163
205
  warnPossibleInvalidExportType(appDir);
164
206
  }
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
207
  return files;
172
208
  }
173
- async function persistMetroFilesAsync(files, outputDir) {
174
- _fs.default.mkdirSync(_path.default.join(outputDir), {
175
- recursive: true
176
- });
177
- _log.Log.log("");
178
- _log.Log.log(_chalk.default.bold`Exporting ${files.size} files:`);
179
- await Promise.all([
180
- ...files.entries()
181
- ].sort(([a], [b])=>a.localeCompare(b)
182
- ).map(async ([file, contents])=>{
183
- const length = Buffer.byteLength(contents, "utf8");
184
- _log.Log.log(file, _chalk.default.gray`(${(0, _prettyBytes).default(length)})`);
185
- const outputPath = _path.default.join(outputDir, file);
186
- await _fs.default.promises.mkdir(_path.default.dirname(outputPath), {
187
- recursive: true
188
- });
189
- await _fs.default.promises.writeFile(outputPath, contents);
190
- }));
191
- _log.Log.log("");
192
- }
193
- function modifyBundlesWithSourceMaps(filename, source, includeMaps) {
194
- if (filename.endsWith(".js")) {
195
- // If the bundle ends with source map URLs then update them to point to the correct location.
196
- // TODO: baseUrl support
197
- const normalizedFilename = "/" + filename.replace(/^\/+/, "");
198
- // Ref: https://developer.chrome.com/blog/sourcemaps/#sourceurl-and-displayname-in-action-eval-and-anonymous-functions
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
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
201
- return source.replace(/^\/\/# (sourceMappingURL|sourceURL)=.*$/gm, (...props)=>{
202
- if (includeMaps) {
203
- if (props[1] === "sourceURL") {
204
- return `//# ${props[1]}=` + normalizedFilename;
205
- } else if (props[1] === "sourceMappingURL") {
206
- const mapName = normalizedFilename + ".map";
207
- return `//# ${props[1]}=` + mapName;
208
- }
209
- }
210
- return "";
211
- });
212
- }
213
- return source;
214
- }
215
209
  function getHtmlFiles({ manifest , includeGroupVariations }) {
216
210
  const htmlFiles = new Set();
217
- function traverseScreens(screens, baseUrl = "") {
211
+ function traverseScreens(screens, route, baseUrl = "") {
218
212
  for (const value of Object.values(screens)){
213
+ let leaf = null;
219
214
  if (typeof value === "string") {
220
- let filePath = baseUrl + value;
221
- if (value === "") {
215
+ leaf = value;
216
+ } else if (Object.keys(value.screens).length === 0) {
217
+ leaf = value.path;
218
+ var __route;
219
+ route = (__route = value._route) != null ? __route : null;
220
+ }
221
+ if (leaf != null) {
222
+ let filePath = baseUrl + leaf;
223
+ if (leaf === "") {
222
224
  filePath = baseUrl === "" ? "index" : baseUrl.endsWith("/") ? baseUrl + "index" : baseUrl.slice(0, -1);
223
225
  }
226
+ // This should never happen, the type of `string | object` originally comes from React Navigation.
227
+ if (!route) {
228
+ throw new Error(`Internal error: Route not found for "${filePath}" while collecting static export paths.`);
229
+ }
224
230
  if (includeGroupVariations) {
225
231
  // TODO: Dedupe requests for alias routes.
226
- addOptionalGroups(filePath);
232
+ addOptionalGroups(filePath, route);
227
233
  } else {
228
- htmlFiles.add(filePath);
234
+ htmlFiles.add({
235
+ filePath,
236
+ route
237
+ });
229
238
  }
230
239
  } else if (typeof value === "object" && (value == null ? void 0 : value.screens)) {
231
240
  const newPath = baseUrl + value.path + "/";
232
- traverseScreens(value.screens, newPath);
241
+ var __route1;
242
+ traverseScreens(value.screens, (__route1 = value._route) != null ? __route1 : null, newPath);
233
243
  }
234
244
  }
235
245
  }
236
- function addOptionalGroups(path) {
246
+ function addOptionalGroups(path, route) {
237
247
  const variations = getPathVariations(path);
238
248
  for (const variation of variations){
239
- htmlFiles.add(variation);
249
+ htmlFiles.add({
250
+ filePath: variation,
251
+ route
252
+ });
240
253
  }
241
254
  }
242
- traverseScreens(manifest.screens);
243
- return Array.from(htmlFiles).map((value)=>{
244
- const parts = value.split("/");
255
+ traverseScreens(manifest.screens, null);
256
+ return uniqueBy(Array.from(htmlFiles), (value)=>value.filePath
257
+ ).map((value)=>{
258
+ const parts = value.filePath.split("/");
245
259
  // Replace `:foo` with `[foo]` and `*foo` with `[...foo]`
246
260
  const partsWithGroups = parts.map((part)=>{
247
261
  if (part === "*not-found") {
@@ -253,9 +267,27 @@ function getHtmlFiles({ manifest , includeGroupVariations }) {
253
267
  }
254
268
  return part;
255
269
  });
256
- return partsWithGroups.join("/") + ".html";
270
+ const filePathLocation = partsWithGroups.join("/");
271
+ const filePath = filePathLocation + ".html";
272
+ return {
273
+ ...value,
274
+ filePath,
275
+ pathname: filePathLocation.replace(/(\/?index)?$/, "")
276
+ };
257
277
  });
258
278
  }
279
+ function uniqueBy(array, key) {
280
+ const seen = new Set();
281
+ const result = [];
282
+ for (const value of array){
283
+ const id = key(value);
284
+ if (!seen.has(id)) {
285
+ seen.add(id);
286
+ result.push(value);
287
+ }
288
+ }
289
+ return result;
290
+ }
259
291
  function getPathVariations(routePath) {
260
292
  const variations = new Set();
261
293
  const segments1 = routePath.split("/");
@@ -265,7 +297,6 @@ function getPathVariations(routePath) {
265
297
  return;
266
298
  }
267
299
  const [head, ...rest] = segments;
268
- if (head.startsWith("(foo,foo")) {}
269
300
  if (matchGroupName(head)) {
270
301
  const groups = head.slice(1, -1).split(",");
271
302
  if (groups.length > 1) {
@@ -292,21 +323,19 @@ function getPathVariations(routePath) {
292
323
  generateVariations(segments1);
293
324
  return Array.from(variations);
294
325
  }
295
- async function exportApiRoutesAsync({ outputDir , server , appDir , baseUrl , ...props }) {
296
- const functionsDir = "_expo/functions";
297
- const funcDir = _path.default.join(outputDir, functionsDir);
298
- _fs.default.mkdirSync(_path.default.join(funcDir), {
299
- recursive: true
300
- });
326
+ async function exportApiRoutesAsync({ outputDir , server , routerRoot , baseUrl , ...props }) {
301
327
  const { manifest , files } = await server.exportExpoRouterApiRoutesAsync({
302
328
  mode: "production",
303
- appDir,
304
- outputDir: functionsDir,
329
+ routerRoot,
330
+ outputDir: "_expo/functions",
305
331
  prerenderManifest: props.manifest,
306
332
  baseUrl
307
333
  });
308
334
  _log.Log.log(_chalk.default.bold`Exporting ${files.size} API Routes.`);
309
- files.set("_expo/routes.json", JSON.stringify(manifest, null, 2));
335
+ files.set("_expo/routes.json", {
336
+ contents: JSON.stringify(manifest, null, 2),
337
+ targetDomain: "server"
338
+ });
310
339
  return files;
311
340
  }
312
341
  function warnPossibleInvalidExportType(appDir) {
@@ -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 { 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":"AAMA;;;;QAqCsBA,0BAA0B,GAA1BA,0BAA0B;QAyC1BC,+BAA+B,GAA/BA,+BAA+B;QAiC/BC,qBAAqB,GAArBA,qBAAqB;QAiF3BC,wBAAwB,GAAxBA,wBAAwB;QAoBlBC,sBAAsB,GAAtBA,sBAAsB;QAoB5BC,2BAA2B,GAA3BA,2BAA2B;QA4B3BC,YAAY,GAAZA,YAAY;QA8DZC,iBAAiB,GAAjBA,iBAAiB;AAlUP,IAAA,OAAc,WAAd,cAAc,CAAA;AAErB,IAAA,OAAQ,kCAAR,QAAQ,EAAA;AACT,IAAA,MAAO,kCAAP,OAAO,EAAA;AACV,IAAA,GAAI,kCAAJ,IAAI,EAAA;AACF,IAAA,KAAM,kCAAN,MAAM,EAAA;AACC,IAAA,YAAc,kCAAd,cAAc,EAAA;AACd,IAAA,KAAM,WAAN,MAAM,CAAA;AAEe,IAAA,QAAW,WAAX,WAAW,CAAA;AAChB,IAAA,mBAAsB,WAAtB,sBAAsB,CAAA;AAC1C,IAAA,IAAQ,WAAR,QAAQ,CAAA;AACK,IAAA,iBAAkC,WAAlC,kCAAkC,CAAA;AAC7B,IAAA,sBAA6C,WAA7C,6CAA6C,CAAA;AAEhD,IAAA,oBAA2C,WAA3C,2CAA2C,CAAA;AAIvE,IAAA,OAA8B,WAA9B,8BAA8B,CAAA;AACG,IAAA,cAAqC,WAArC,qCAAqC,CAAA;AACnD,IAAA,KAAe,WAAf,eAAe,CAAA;AACR,IAAA,KAAe,WAAf,eAAe,CAAA;;;;;;AAEhD,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,kCAAkC,CAAC,AAAsB,AAAC;AAalF,eAAeT,0BAA0B,CAACU,WAAmB,EAAEC,OAAgB,EAAE;IACtFC,IAAG,IAAA,CAACC,IAAI,CACN,CAAC,0CAA0C,CAAC,GAC1CC,CAAAA,GAAAA,KAAS,AAA4D,CAAA,UAA5D,CAAC,0DAA0D,CAAC,CACxE,CAAC;IAEF,+CAA+C;IAC/C,MAAMC,IAAI,GAAG,MAAMC,CAAAA,GAAAA,KAAgB,AAAM,CAAA,iBAAN,CAAC,IAAI,CAAC,AAAC;IAE1C,sCAAsC;IACtC,MAAMC,gBAAgB,GAAG,IAAIC,iBAAgB,iBAAA,CAACR,WAAW,EAAE;QACzDS,MAAM,EAAER,OAAO,CAACQ,MAAM;QACtBC,IAAI,EAAE,YAAY;QAClBL,IAAI;QACJM,QAAQ,EAAE,EAAE;QACZC,cAAc,EAAEX,OAAO,CAACY,KAAK;KAC9B,CAAC,AAAC;IACH,MAAMN,gBAAgB,CAACO,UAAU,CAAC;QAChC;YACEC,IAAI,EAAE,OAAO;YACbd,OAAO,EAAE;gBACPI,IAAI;gBACJM,QAAQ,EAAE,EAAE;gBACZK,WAAW,EAAE,IAAI;gBACjBJ,cAAc,EAAEX,OAAO,CAACY,KAAK;aAC9B;SACF;KACF,CAAC,CAAC;IAEH,IAAI;QACF,MAAMrB,qBAAqB,CAACQ,WAAW,EAAEO,gBAAgB,EAAEN,OAAO,CAAC,CAAC;KACrE,QAAS;QACR,MAAMM,gBAAgB,CAACU,SAAS,EAAE,CAAC;KACpC;CACF;AAED,+BAA+B,CAC/B,SAASC,cAAc,CAACC,IAAY,EAAsB;QACjDA,GAA4B;IAAnC,OAAOA,CAAAA,GAA4B,GAA5BA,IAAI,CAACC,KAAK,kBAAkB,SAAK,GAAjCD,KAAAA,CAAiC,GAAjCA,GAA4B,AAAE,CAAC,CAAC,CAAC,CAAC;CAC1C;AAEM,eAAe5B,+BAA+B,CACnDS,WAAmB,EACnB,EACEqB,QAAQ,CAAA,EACRC,WAAW,CAAA,EACXC,sBAAsB,CAAA,EAKvB,EAC6B;IAC9B,kBAAkB;IAClB,MAAMC,KAAK,GAAG,IAAIC,GAAG,EAAkB,AAAC;IAExC,MAAMC,OAAO,CAACC,GAAG,CACf/B,YAAY,CAAC;QAAEyB,QAAQ;QAAEE,sBAAsB;KAAE,CAAC,CAACK,GAAG,CAAC,OAAOC,UAAU,GAAK;QAC3E,MAAMC,QAAQ,GAAGD,UAAU,CAACE,OAAO,sBAAsB,EAAE,CAAC,AAAC;QAC7D,IAAI;YACFP,KAAK,CAACQ,GAAG,CAACH,UAAU,EAAE,EAAE,CAAC,CAAC;YAC1B,MAAMI,IAAI,GAAG,MAAMX,WAAW,CAACQ,QAAQ,CAAC,AAAC;YACzCN,KAAK,CAACQ,GAAG,CAACH,UAAU,EAAEI,IAAI,CAAC,CAAC;SAC7B,CAAC,OAAOC,CAAC,EAAO;YACf,MAAMC,CAAAA,GAAAA,oBAAkB,AAA2B,CAAA,mBAA3B,CAAC;gBAAEC,KAAK,EAAEF,CAAC;gBAAElC,WAAW;aAAE,CAAC,CAAC;YACpD,MAAM,IAAIqC,KAAK,CAAC,qCAAqC,GAAGP,QAAQ,CAAC,CAAC;SACnE;KACF,CAAC,CACH,CAAC;IAEF,OAAON,KAAK,CAAC;CACd;AAGM,eAAehC,qBAAqB,CACzCQ,WAAmB,EACnBO,gBAAkC,EAClC,EAAE+B,SAAS,CAAA,EAAEC,OAAO,CAAA,EAAEC,YAAY,CAAA,EAAE/B,MAAM,CAAA,EAAEgC,WAAW,CAAA,EAAW,EACnD;IACf,MAAM,EAAEC,GAAG,CAAA,EAAE,GAAGC,CAAAA,GAAAA,OAAS,AAAkD,CAAA,UAAlD,CAAC3C,WAAW,EAAE;QAAE4C,yBAAyB,EAAE,IAAI;KAAE,CAAC,AAAC;IAC5E,MAAMC,MAAM,GAAGC,CAAAA,GAAAA,OAA8B,AAAkB,CAAA,+BAAlB,CAAC9C,WAAW,EAAE0C,GAAG,CAAC,AAAC;IAEhE,MAAMK,gBAAgB,GAAG,MAAMC,CAAAA,GAAAA,QAA4B,AAAqC,CAAA,6BAArC,CAAChD,WAAW,EAAE;QAAEsC,SAAS;QAAEC,OAAO;KAAE,CAAC,AAAC;IAEjG,MAAMU,SAAS,GAAG1C,gBAAgB,CAAC2C,mBAAmB,EAAE,AAAC;IACzDC,CAAAA,GAAAA,OAAM,AAA4C,CAAA,QAA5C,CAACF,SAAS,YAAYG,sBAAqB,sBAAA,CAAC,CAAC;IAEnD,MAAM,CAACC,SAAS,EAAE,EAAEhC,QAAQ,CAAA,EAAEiC,cAAc,CAAA,EAAEhC,WAAW,CAAA,EAAE,CAAC,GAAG,MAAMI,OAAO,CAACC,GAAG,CAAC;QAC/EsB,SAAS,CAACM,uBAAuB,CAAC;YAAE7C,IAAI,EAAE,YAAY;YAAED,MAAM;YAAEgC,WAAW;YAAEF,OAAO;SAAE,CAAC;QACvFU,SAAS,CAACO,4BAA4B,CAAC;YACrC9C,IAAI,EAAE,YAAY;YAClBD,MAAM;YACN8B,OAAO;SACR,CAAC;KACH,CAAC,AAAC;IAEHzC,KAAK,CAAC,WAAW,EAAE2D,CAAAA,GAAAA,KAAO,AAAyC,CAAA,QAAzC,CAACpC,QAAQ,EAAE;QAAEqC,MAAM,EAAE,IAAI;QAAEC,KAAK,EAAE,IAAI;KAAE,CAAC,CAAC,CAAC;IAErE,MAAMnC,KAAK,GAAG,MAAMjC,+BAA+B,CAACS,WAAW,EAAE;QAC/DqB,QAAQ;QACR,8DAA8D;QAC9D,kEAAkE;QAClE,aAAa;QACbE,sBAAsB,EAAE,CAACiB,YAAY;QACrC,MAAMlB,WAAW,EAACQ,QAAgB,EAAE;YAClC,MAAM8B,QAAQ,GAAG,MAAMtC,WAAW,CAACQ,QAAQ,CAAC,AAAC;YAC7C,IAAI+B,IAAI,GAAG,MAAMC,CAAAA,GAAAA,cAAuB,AAKtC,CAAA,wBALsC,CAAC;gBACvCpD,IAAI,EAAE,YAAY;gBAClB2C,SAAS,EAAEA,SAAS,CAACU,SAAS;gBAC9BH,QAAQ;gBACRrB,OAAO;aACR,CAAC,AAAC;YAEH,IAAIQ,gBAAgB,EAAE;gBACpBc,IAAI,GAAGd,gBAAgB,CAACc,IAAI,CAAC,CAAC;aAC/B;YAED,OAAOA,IAAI,CAAC;SACb;KACF,CAAC,AAAC;IAEHpE,wBAAwB,CAAC4D,SAAS,CAACU,SAAS,EAAE;QAC5CtB,WAAW;QACXjB,KAAK;KACN,CAAC,CAAC;IAEH,IAAI6B,SAAS,CAACW,MAAM,EAAE;QACpB,MAAMC,CAAAA,GAAAA,mBAAuB,AAI3B,CAAA,wBAJ2B,CAACZ,SAAS,CAACW,MAAM,EAAE;YAC9CE,QAAQ,EAAE,KAAK;YACfC,eAAe,EAAE7B,SAAS;YAC1BC,OAAO;SACR,CAAC,CAAC;KACJ;IAED,IAAIC,YAAY,EAAE;QAChB,MAAM4B,SAAS,GAAG,MAAMC,oBAAoB,CAAC;YAC3C/B,SAAS;YACTgC,MAAM,EAAErB,SAAS;YACjBJ,MAAM;YACNxB,QAAQ,EAAEiC,cAAc;YACxBf,OAAO;SACR,CAAC,AAAC;QAEH,6CAA6C;QAC7C,KAAK,MAAM,CAACgC,KAAK,EAAEC,QAAQ,CAAC,IAAIJ,SAAS,CAAE;YACzC5C,KAAK,CAACQ,GAAG,CAACuC,KAAK,EAAEC,QAAQ,CAAC,CAAC;SAC5B;KACF,MAAM;QACLC,6BAA6B,CAAC5B,MAAM,CAAC,CAAC;KACvC;IAED,MAAMnD,sBAAsB,CAAC8B,KAAK,EAAEc,SAAS,CAAC,CAAC;CAChD;AAGM,SAAS7C,wBAAwB,CACtC4D,SAAwB,EACxB,EACEZ,WAAW,CAAA,EACXjB,KAAK,EAAG,IAAIC,GAAG,EAAkB,CAAA,EAIlC,EACD;IACA4B,SAAS,CAACqB,OAAO,CAAC,CAACC,QAAQ,GAAK;QAC9BnD,KAAK,CAACQ,GAAG,CACP2C,QAAQ,CAACC,QAAQ,EACjBjF,2BAA2B,CAACgF,QAAQ,CAACC,QAAQ,EAAED,QAAQ,CAACE,MAAM,EAAEpC,WAAW,CAAC,CAC7E,CAAC;KACH,CAAC,CAAC;IAEH,OAAOjB,KAAK,CAAC;CACd;AAEM,eAAe9B,sBAAsB,CAAC8B,KAA0B,EAAEc,SAAiB,EAAE;IAC1FwC,GAAE,QAAA,CAACC,SAAS,CAACC,KAAI,QAAA,CAACC,IAAI,CAAC3C,SAAS,CAAC,EAAE;QAAE4C,SAAS,EAAE,IAAI;KAAE,CAAC,CAAC;IAExDhF,IAAG,IAAA,CAACiF,GAAG,CAAC,EAAE,CAAC,CAAC;IAEZjF,IAAG,IAAA,CAACiF,GAAG,CAACC,MAAK,QAAA,CAACC,IAAI,CAAC,UAAU,EAAE7D,KAAK,CAAC8D,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,MAAM5D,OAAO,CAACC,GAAG,CACf;WAAIH,KAAK,CAAC+D,OAAO,EAAE;KAAC,CACjBC,IAAI,CAAC,CAAC,CAACC,CAAC,CAAC,EAAE,CAACC,CAAC,CAAC,GAAKD,CAAC,CAACE,aAAa,CAACD,CAAC,CAAC;IAAA,CAAC,CACtC9D,GAAG,CAAC,OAAO,CAACgE,IAAI,EAAEpB,QAAQ,CAAC,GAAK;QAC/B,MAAMqB,MAAM,GAAGC,MAAM,CAACC,UAAU,CAACvB,QAAQ,EAAE,MAAM,CAAC,AAAC;QACnDtE,IAAG,IAAA,CAACiF,GAAG,CAACS,IAAI,EAAER,MAAK,QAAA,CAACY,IAAI,CAAC,CAAC,EAAEC,CAAAA,GAAAA,YAAW,AAAQ,CAAA,QAAR,CAACJ,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAMhE,UAAU,GAAGmD,KAAI,QAAA,CAACC,IAAI,CAAC3C,SAAS,EAAEsD,IAAI,CAAC,AAAC;QAC9C,MAAMd,GAAE,QAAA,CAACoB,QAAQ,CAACC,KAAK,CAACnB,KAAI,QAAA,CAACoB,OAAO,CAACvE,UAAU,CAAC,EAAE;YAAEqD,SAAS,EAAE,IAAI;SAAE,CAAC,CAAC;QACvE,MAAMJ,GAAE,QAAA,CAACoB,QAAQ,CAACG,SAAS,CAACxE,UAAU,EAAE2C,QAAQ,CAAC,CAAC;KACnD,CAAC,CACL,CAAC;IACFtE,IAAG,IAAA,CAACiF,GAAG,CAAC,EAAE,CAAC,CAAC;CACb;AAEM,SAASxF,2BAA2B,CACzCiF,QAAgB,EAChBC,MAAc,EACdpC,WAAoB,EACZ;IACR,IAAImC,QAAQ,CAAC0B,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC5B,6FAA6F;QAE7F,wBAAwB;QACxB,MAAMC,kBAAkB,GAAG,GAAG,GAAG3B,QAAQ,CAAC7C,OAAO,SAAS,EAAE,CAAC,AAAC;QAC9D,sHAAsH;QACtH,wLAAwL;QACxL,2LAA2L;QAC3L,OAAO8C,MAAM,CAAC9C,OAAO,8CAA8C,CAAIyE,GAAAA,KAAK,GAAK;YAC/E,IAAI/D,WAAW,EAAE;gBACf,IAAI+D,KAAK,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;oBAC5B,OAAO,CAAC,IAAI,EAAEA,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGD,kBAAkB,CAAC;iBAChD,MAAM,IAAIC,KAAK,CAAC,CAAC,CAAC,KAAK,kBAAkB,EAAE;oBAC1C,MAAMC,OAAO,GAAGF,kBAAkB,GAAG,MAAM,AAAC;oBAC5C,OAAO,CAAC,IAAI,EAAEC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,OAAO,CAAC;iBACrC;aACF;YACD,OAAO,EAAE,CAAC;SACX,CAAC,CAAC;KACJ;IACD,OAAO5B,MAAM,CAAC;CACf;AAEM,SAASjF,YAAY,CAAC,EAC3ByB,QAAQ,CAAA,EACRE,sBAAsB,CAAA,EAIvB,EAAY;IACX,MAAMmF,SAAS,GAAG,IAAIC,GAAG,EAAU,AAAC;IAEpC,SAASC,eAAe,CAACC,OAAgD,EAAEtE,OAAO,GAAG,EAAE,EAAE;QACvF,KAAK,MAAMuE,KAAK,IAAIC,MAAM,CAACC,MAAM,CAACH,OAAO,CAAC,CAAE;YAC1C,IAAI,OAAOC,KAAK,KAAK,QAAQ,EAAE;gBAC7B,IAAIG,QAAQ,GAAG1E,OAAO,GAAGuE,KAAK,AAAC;gBAC/B,IAAIA,KAAK,KAAK,EAAE,EAAE;oBAChBG,QAAQ,GACN1E,OAAO,KAAK,EAAE,GACV,OAAO,GACPA,OAAO,CAAC+D,QAAQ,CAAC,GAAG,CAAC,GACrB/D,OAAO,GAAG,OAAO,GACjBA,OAAO,CAAC2E,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBAC5B;gBACD,IAAI3F,sBAAsB,EAAE;oBAC1B,0CAA0C;oBAC1C4F,iBAAiB,CAACF,QAAQ,CAAC,CAAC;iBAC7B,MAAM;oBACLP,SAAS,CAACU,GAAG,CAACH,QAAQ,CAAC,CAAC;iBACzB;aACF,MAAM,IAAI,OAAOH,KAAK,KAAK,QAAQ,IAAIA,CAAAA,KAAK,QAAS,GAAdA,KAAAA,CAAc,GAAdA,KAAK,CAAED,OAAO,CAAA,EAAE;gBACtD,MAAMQ,OAAO,GAAG9E,OAAO,GAAGuE,KAAK,CAAC9B,IAAI,GAAG,GAAG,AAAC;gBAC3C4B,eAAe,CAACE,KAAK,CAACD,OAAO,EAAEQ,OAAO,CAAC,CAAC;aACzC;SACF;KACF;IAED,SAASF,iBAAiB,CAACnC,IAAY,EAAE;QACvC,MAAMsC,UAAU,GAAGzH,iBAAiB,CAACmF,IAAI,CAAC,AAAC;QAC3C,KAAK,MAAMuC,SAAS,IAAID,UAAU,CAAE;YAClCZ,SAAS,CAACU,GAAG,CAACG,SAAS,CAAC,CAAC;SAC1B;KACF;IAEDX,eAAe,CAACvF,QAAQ,CAACwF,OAAO,CAAC,CAAC;IAElC,OAAOW,KAAK,CAACC,IAAI,CAACf,SAAS,CAAC,CAAC9E,GAAG,CAAC,CAACkF,KAAK,GAAK;QAC1C,MAAMY,KAAK,GAAGZ,KAAK,CAACa,KAAK,CAAC,GAAG,CAAC,AAAC;QAC/B,yDAAyD;QACzD,MAAMC,eAAe,GAAGF,KAAK,CAAC9F,GAAG,CAAC,CAACiG,IAAI,GAAK;YAC1C,IAAIA,IAAI,KAAK,YAAY,EAAE;gBACzB,OAAO,CAAC,UAAU,CAAC,CAAC;aACrB,MAAM,IAAIA,IAAI,CAACC,UAAU,CAAC,GAAG,CAAC,EAAE;gBAC/B,OAAO,CAAC,CAAC,EAAED,IAAI,CAACX,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7B,MAAM,IAAIW,IAAI,CAACC,UAAU,CAAC,GAAG,CAAC,EAAE;gBAC/B,OAAO,CAAC,IAAI,EAAED,IAAI,CAACX,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAChC;YACD,OAAOW,IAAI,CAAC;SACb,CAAC,AAAC;QACH,OAAOD,eAAe,CAAC3C,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;KAC5C,CAAC,CAAC;CACJ;AAIM,SAASpF,iBAAiB,CAACkI,SAAiB,EAAY;IAC7D,MAAMT,UAAU,GAAG,IAAIX,GAAG,EAAU,AAAC;IACrC,MAAMqB,SAAQ,GAAGD,SAAS,CAACJ,KAAK,CAAC,GAAG,CAAC,AAAC;IAEtC,SAASM,kBAAkB,CAACD,QAAkB,EAAEE,OAAO,GAAG,EAAE,EAAQ;QAClE,IAAIF,QAAQ,CAACnC,MAAM,KAAK,CAAC,EAAE;YACzB,IAAIqC,OAAO,EAAEZ,UAAU,CAACF,GAAG,CAACc,OAAO,CAAC,CAAC;YACrC,OAAO;SACR;QAED,MAAM,CAACC,IAAI,EAAE,GAAGC,IAAI,CAAC,GAAGJ,QAAQ,AAAC;QAEjC,IAAIG,IAAI,CAACL,UAAU,CAAC,UAAU,CAAC,EAAE,EAChC;QAED,IAAI5G,cAAc,CAACiH,IAAI,CAAC,EAAE;YACxB,MAAME,MAAM,GAAGF,IAAI,CAACjB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAACS,KAAK,CAAC,GAAG,CAAC,AAAC;YAE5C,IAAIU,MAAM,CAACxC,MAAM,GAAG,CAAC,EAAE;gBACrB,KAAK,MAAMyC,KAAK,IAAID,MAAM,CAAE;oBAC1B,uDAAuD;oBACvDJ,kBAAkB,CAAC;wBAAC,CAAC,CAAC,EAAEK,KAAK,CAACC,IAAI,EAAE,CAAC,CAAC,CAAC;2BAAKH,IAAI;qBAAC,EAAEF,OAAO,CAAC,CAAC;iBAC7D;gBACD,OAAO;aACR,MAAM;gBACL,4CAA4C;gBAC5CD,kBAAkB,CAACG,IAAI,EAAEF,OAAO,GAAG,CAAC,EAAEA,OAAO,CAAC,EAAE,EAAEG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAEA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnF,qEAAqE;aACtE;SACF,MAAM,IAAIH,OAAO,EAAE;YAClBA,OAAO,GAAG,CAAC,EAAEA,OAAO,CAAC,CAAC,EAAEC,IAAI,CAAC,CAAC,CAAC;SAChC,MAAM;YACLD,OAAO,GAAGC,IAAI,CAAC;SAChB;QAEDF,kBAAkB,CAACG,IAAI,EAAEF,OAAO,CAAC,CAAC;KACnC;IAEDD,kBAAkB,CAACD,SAAQ,CAAC,CAAC;IAE7B,OAAOR,KAAK,CAACC,IAAI,CAACH,UAAU,CAAC,CAAC;CAC/B;AAED,eAAejD,oBAAoB,CAAC,EAClC/B,SAAS,CAAA,EACTgC,MAAM,CAAA,EACNzB,MAAM,CAAA,EACNN,OAAO,CAAA,EACP,GAAGiE,KAAK,EAOT,EAAgC;IAC/B,MAAMgC,YAAY,GAAG,iBAAiB,AAAC;IACvC,MAAMC,OAAO,GAAGzD,KAAI,QAAA,CAACC,IAAI,CAAC3C,SAAS,EAAEkG,YAAY,CAAC,AAAC;IACnD1D,GAAE,QAAA,CAACC,SAAS,CAACC,KAAI,QAAA,CAACC,IAAI,CAACwD,OAAO,CAAC,EAAE;QAAEvD,SAAS,EAAE,IAAI;KAAE,CAAC,CAAC;IAEtD,MAAM,EAAE7D,QAAQ,CAAA,EAAEG,KAAK,CAAA,EAAE,GAAG,MAAM8C,MAAM,CAACoE,8BAA8B,CAAC;QACtEhI,IAAI,EAAE,YAAY;QAClBmC,MAAM;QACNP,SAAS,EAAEkG,YAAY;QACvBG,iBAAiB,EAAEnC,KAAK,CAACnF,QAAQ;QACjCkB,OAAO;KACR,CAAC,AAAC;IAEHrC,IAAG,IAAA,CAACiF,GAAG,CAACC,MAAK,QAAA,CAACC,IAAI,CAAC,UAAU,EAAE7D,KAAK,CAAC8D,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAEzD9D,KAAK,CAACQ,GAAG,CAAC,mBAAmB,EAAE4G,IAAI,CAACC,SAAS,CAACxH,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAElE,OAAOG,KAAK,CAAC;CACd;AAED,SAASiD,6BAA6B,CAAC5B,MAAc,EAAE;IACrD,MAAMuB,SAAS,GAAG0E,CAAAA,GAAAA,OAAwB,AAAQ,CAAA,yBAAR,CAACjG,MAAM,CAAC,AAAC;IACnD,IAAIuB,SAAS,CAACyB,MAAM,EAAE;QACpB,0CAA0C;QAC1C3F,IAAG,IAAA,CAACC,IAAI,CACNiF,MAAK,QAAA,CAAC2D,MAAM,CAAC,0GAA0G,EAAE3E,SAAS,CAC/HxC,GAAG,CAAC,CAACoH,CAAC,GAAKhE,KAAI,QAAA,CAACiE,QAAQ,CAACpG,MAAM,EAAEmG,CAAC,CAAC;QAAA,CAAC,CACpC/D,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAChB,CAAC;KACH;CACF"}
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 assert from 'assert';\nimport chalk from 'chalk';\nimport { RouteNode } from 'expo-router/build/Route';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\nimport { inspect } from 'util';\n\nimport { getVirtualFaviconAssetsAsync } from './favicon';\nimport { persistMetroAssetsAsync } from './persistMetroAssets';\nimport { ExportAssetMap, getFilesFromSerialAssets } from './saveAssets';\nimport { Log } from '../log';\nimport { DevServerManager } from '../start/server/DevServerManager';\nimport {\n ExpoRouterRuntimeManifest,\n MetroBundlerDevServer,\n} from '../start/server/metro/MetroBundlerDevServer';\nimport { ExpoRouterServerManifestV1 } from '../start/server/metro/fetchRouterManifest';\nimport { logMetroErrorAsync } from '../start/server/metro/metroErrorInterface';\nimport { getApiRoutesForDirectory } 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 files?: ExportAssetMap;\n outputDir: string;\n minify: boolean;\n exportServer: boolean;\n baseUrl: string;\n includeSourceMaps: boolean;\n entryPoint?: string;\n clear: boolean;\n asyncRoutes: boolean;\n routerRoot: string;\n maxWorkers?: number;\n};\n\ntype HtmlRequestLocation = {\n /** The output file path name to use relative to the static folder. */\n filePath: string;\n /** The pathname to make requests to in order to fetch the HTML. */\n pathname: string;\n /** The runtime route node object, used to associate async modules with the static HTML. */\n route: RouteNode;\n};\n\n/** @private */\nexport async function unstable_exportStaticAsync(projectRoot: string, options: Options) {\n Log.log(\n `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 maxWorkers: options.maxWorkers,\n });\n await devServerManager.startAsync([\n {\n type: 'metro',\n options: {\n port,\n location: {},\n isExporting: true,\n resetDevServer: options.clear,\n maxWorkers: options.maxWorkers,\n },\n },\n ]);\n\n try {\n return 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 // Servers can handle group routes automatically and therefore\n // don't require the build-time generation of every possible group\n // variation.\n exportServer,\n // name : contents\n files = new Map(),\n }: {\n manifest: ExpoRouterRuntimeManifest;\n renderAsync: (requestLocation: HtmlRequestLocation) => Promise<string>;\n exportServer?: boolean;\n files?: ExportAssetMap;\n }\n): Promise<ExportAssetMap> {\n await Promise.all(\n getHtmlFiles({ manifest, includeGroupVariations: !exportServer }).map(\n async ({ route, filePath, pathname }) => {\n try {\n const targetDomain = exportServer ? 'server' : 'client';\n files.set(filePath, { contents: '', targetDomain });\n const data = await renderAsync({ route, filePath, pathname });\n files.set(filePath, {\n contents: data,\n routeId: pathname,\n targetDomain,\n });\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\n return files;\n}\n\nfunction modifyRouteNodeInRuntimeManifest(\n manifest: ExpoRouterRuntimeManifest,\n callback: (route: RouteNode) => any\n) {\n const iterateScreens = (screens: ExpoRouterRuntimeManifest['screens']) => {\n Object.values(screens).map((value) => {\n if (typeof value !== 'string') {\n if (value._route) callback(value._route);\n iterateScreens(value.screens);\n }\n });\n };\n\n iterateScreens(manifest.screens);\n}\n\n// TODO: Do this earlier in the process.\nfunction makeRuntimeEntryPointsAbsolute(manifest: ExpoRouterRuntimeManifest, appDir: string) {\n modifyRouteNodeInRuntimeManifest(manifest, (route) => {\n if (Array.isArray(route.entryPoints)) {\n route.entryPoints = route.entryPoints.map((entryPoint) => {\n if (entryPoint.startsWith('.')) {\n return path.resolve(appDir, entryPoint);\n } else if (!path.isAbsolute(entryPoint)) {\n return resolveFrom(appDir, entryPoint);\n }\n return entryPoint;\n });\n }\n });\n}\n\n/** Perform all fs commits */\nasync function exportFromServerAsync(\n projectRoot: string,\n devServerManager: DevServerManager,\n {\n outputDir,\n baseUrl,\n exportServer,\n minify,\n includeSourceMaps,\n routerRoot,\n asyncRoutes,\n files = new Map(),\n }: Options\n): Promise<ExportAssetMap> {\n const appDir = path.join(projectRoot, routerRoot);\n const injectFaviconTag = await getVirtualFaviconAssetsAsync(projectRoot, {\n outputDir,\n baseUrl,\n files,\n });\n\n const devServer = devServerManager.getDefaultDevServer();\n assert(devServer instanceof MetroBundlerDevServer);\n\n const [resources, { manifest, serverManifest, renderAsync }] = await Promise.all([\n devServer.getStaticResourcesAsync({\n isExporting: true,\n mode: 'production',\n minify,\n includeSourceMaps,\n baseUrl,\n asyncRoutes,\n routerRoot,\n }),\n devServer.getStaticRenderFunctionAsync({\n mode: 'production',\n minify,\n baseUrl,\n routerRoot,\n }),\n ]);\n\n makeRuntimeEntryPointsAbsolute(manifest, appDir);\n\n debug('Routes:\\n', inspect(manifest, { colors: true, depth: null }));\n\n await getFilesToExportFromServerAsync(projectRoot, {\n files,\n manifest,\n exportServer,\n async renderAsync({ pathname, route }) {\n const template = await renderAsync(pathname);\n let html = await serializeHtmlWithAssets({\n mode: 'production',\n resources: resources.artifacts,\n template,\n baseUrl,\n route,\n });\n\n if (injectFaviconTag) {\n html = injectFaviconTag(html);\n }\n\n return html;\n },\n });\n\n getFilesFromSerialAssets(resources.artifacts, {\n platform: 'web',\n includeSourceMaps,\n files,\n });\n\n if (resources.assets) {\n // TODO: Collect files without writing to disk.\n // NOTE(kitten): Re. above, this is now using `files` except for iOS catalog output, which isn't used here\n await persistMetroAssetsAsync(resources.assets, {\n files,\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 routerRoot,\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 return files;\n}\n\nexport function getHtmlFiles({\n manifest,\n includeGroupVariations,\n}: {\n manifest: ExpoRouterRuntimeManifest;\n includeGroupVariations?: boolean;\n}): HtmlRequestLocation[] {\n const htmlFiles = new Set<Omit<HtmlRequestLocation, 'pathname'>>();\n\n function traverseScreens(\n screens: ExpoRouterRuntimeManifest['screens'],\n route: RouteNode | null,\n baseUrl = ''\n ) {\n for (const value of Object.values(screens)) {\n let leaf: string | null = null;\n if (typeof value === 'string') {\n leaf = value;\n } else if (Object.keys(value.screens).length === 0) {\n leaf = value.path;\n route = value._route ?? null;\n }\n\n if (leaf != null) {\n let filePath = baseUrl + leaf;\n if (leaf === '') {\n filePath =\n baseUrl === ''\n ? 'index'\n : baseUrl.endsWith('/')\n ? baseUrl + 'index'\n : baseUrl.slice(0, -1);\n }\n\n // This should never happen, the type of `string | object` originally comes from React Navigation.\n if (!route) {\n throw new Error(\n `Internal error: Route not found for \"${filePath}\" while collecting static export paths.`\n );\n }\n\n if (includeGroupVariations) {\n // TODO: Dedupe requests for alias routes.\n addOptionalGroups(filePath, route);\n } else {\n htmlFiles.add({\n filePath,\n route,\n });\n }\n } else if (typeof value === 'object' && value?.screens) {\n const newPath = baseUrl + value.path + '/';\n traverseScreens(value.screens, value._route ?? null, newPath);\n }\n }\n }\n\n function addOptionalGroups(path: string, route: RouteNode) {\n const variations = getPathVariations(path);\n for (const variation of variations) {\n htmlFiles.add({ filePath: variation, route });\n }\n }\n\n traverseScreens(manifest.screens, null);\n\n return uniqueBy(Array.from(htmlFiles), (value) => value.filePath).map((value) => {\n const parts = value.filePath.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 const filePathLocation = partsWithGroups.join('/');\n const filePath = filePathLocation + '.html';\n return {\n ...value,\n filePath,\n pathname: filePathLocation.replace(/(\\/?index)?$/, ''),\n };\n });\n}\n\nfunction uniqueBy<T>(array: T[], key: (value: T) => string): T[] {\n const seen = new Set<string>();\n const result: T[] = [];\n for (const value of array) {\n const id = key(value);\n if (!seen.has(id)) {\n seen.add(id);\n result.push(value);\n }\n }\n return result;\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 (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 routerRoot,\n baseUrl,\n ...props\n}: {\n outputDir: string;\n server: MetroBundlerDevServer;\n routerRoot: string;\n manifest: ExpoRouterServerManifestV1;\n baseUrl: string;\n}): Promise<ExportAssetMap> {\n const { manifest, files } = await server.exportExpoRouterApiRoutesAsync({\n mode: 'production',\n routerRoot,\n outputDir: '_expo/functions',\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', {\n contents: JSON.stringify(manifest, null, 2),\n targetDomain: 'server',\n });\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","getHtmlFiles","getPathVariations","debug","require","projectRoot","options","Log","log","learnMore","port","getFreePortAsync","devServerManager","DevServerManager","minify","mode","location","resetDevServer","clear","maxWorkers","startAsync","type","isExporting","exportFromServerAsync","stopAsync","matchGroupName","name","match","manifest","renderAsync","exportServer","files","Map","Promise","all","includeGroupVariations","map","route","filePath","pathname","targetDomain","set","contents","data","routeId","e","logMetroErrorAsync","error","Error","modifyRouteNodeInRuntimeManifest","callback","iterateScreens","screens","Object","values","value","_route","makeRuntimeEntryPointsAbsolute","appDir","Array","isArray","entryPoints","entryPoint","startsWith","path","resolve","isAbsolute","resolveFrom","outputDir","baseUrl","includeSourceMaps","routerRoot","asyncRoutes","join","injectFaviconTag","getVirtualFaviconAssetsAsync","devServer","getDefaultDevServer","assert","MetroBundlerDevServer","resources","serverManifest","getStaticResourcesAsync","getStaticRenderFunctionAsync","inspect","colors","depth","template","html","serializeHtmlWithAssets","artifacts","getFilesFromSerialAssets","platform","assets","persistMetroAssetsAsync","outputDirectory","apiRoutes","exportApiRoutesAsync","server","warnPossibleInvalidExportType","htmlFiles","Set","traverseScreens","leaf","keys","length","endsWith","slice","addOptionalGroups","add","newPath","variations","variation","uniqueBy","from","parts","split","partsWithGroups","part","filePathLocation","replace","array","key","seen","result","id","has","push","routePath","segments","generateVariations","current","head","rest","groups","group","trim","props","exportExpoRouterApiRoutesAsync","prerenderManifest","chalk","bold","size","JSON","stringify","getApiRoutesForDirectory","warn","yellow","v","relative"],"mappings":"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"}