@expo/cli 0.14.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 (225) hide show
  1. package/build/bin/cli +13 -5
  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/api/user/actions.js +1 -1
  8. package/build/src/api/user/actions.js.map +1 -1
  9. package/build/src/customize/typescript.js +3 -1
  10. package/build/src/customize/typescript.js.map +1 -1
  11. package/build/src/export/createMetadataJson.js +5 -3
  12. package/build/src/export/createMetadataJson.js.map +1 -1
  13. package/build/src/export/embed/exportEmbedAsync.js +92 -18
  14. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  15. package/build/src/export/embed/resolveOptions.js +3 -3
  16. package/build/src/export/embed/resolveOptions.js.map +1 -1
  17. package/build/src/export/embed/xcodeCompilerLogger.js +97 -0
  18. package/build/src/export/embed/xcodeCompilerLogger.js.map +1 -0
  19. package/build/src/export/exportApp.js +106 -130
  20. package/build/src/export/exportApp.js.map +1 -1
  21. package/build/src/export/exportAssets.js +93 -38
  22. package/build/src/export/exportAssets.js.map +1 -1
  23. package/build/src/export/exportAsync.js +1 -1
  24. package/build/src/export/exportAsync.js.map +1 -1
  25. package/build/src/export/exportHermes.js +0 -90
  26. package/build/src/export/exportHermes.js.map +1 -1
  27. package/build/src/export/exportStaticAsync.js +165 -101
  28. package/build/src/export/exportStaticAsync.js.map +1 -1
  29. package/build/src/export/favicon.js +13 -5
  30. package/build/src/export/favicon.js.map +1 -1
  31. package/build/src/export/fork-bundleAsync.js +84 -57
  32. package/build/src/export/fork-bundleAsync.js.map +1 -1
  33. package/build/src/export/index.js +9 -7
  34. package/build/src/export/index.js.map +1 -1
  35. package/build/src/export/metroAssetLocalPath.js +101 -0
  36. package/build/src/export/metroAssetLocalPath.js.map +1 -0
  37. package/build/src/export/persistMetroAssets.js +115 -31
  38. package/build/src/export/persistMetroAssets.js.map +1 -1
  39. package/build/src/export/publicFolder.js +7 -0
  40. package/build/src/export/publicFolder.js.map +1 -1
  41. package/build/src/export/resolveOptions.js +1 -1
  42. package/build/src/export/resolveOptions.js.map +1 -1
  43. package/build/src/export/saveAssets.js +168 -43
  44. package/build/src/export/saveAssets.js.map +1 -1
  45. package/build/src/export/web/exportWebAsync.js +1 -1
  46. package/build/src/export/web/exportWebAsync.js.map +1 -1
  47. package/build/src/export/writeContents.js +8 -106
  48. package/build/src/export/writeContents.js.map +1 -1
  49. package/build/src/install/applyPlugins.js +52 -0
  50. package/build/src/install/applyPlugins.js.map +1 -0
  51. package/build/src/install/checkPackages.js +2 -2
  52. package/build/src/install/checkPackages.js.map +1 -1
  53. package/build/src/install/fixPackages.js +84 -0
  54. package/build/src/install/fixPackages.js.map +1 -0
  55. package/build/src/install/installAsync.js +50 -60
  56. package/build/src/install/installAsync.js.map +1 -1
  57. package/build/src/install/installExpoPackage.js +79 -0
  58. package/build/src/install/installExpoPackage.js.map +1 -0
  59. package/build/src/prebuild/clearNativeFolder.js +1 -1
  60. package/build/src/prebuild/clearNativeFolder.js.map +1 -1
  61. package/build/src/prebuild/configureProjectAsync.js +3 -3
  62. package/build/src/prebuild/configureProjectAsync.js.map +1 -1
  63. package/build/src/prebuild/copyTemplateFiles.js +21 -30
  64. package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
  65. package/build/src/prebuild/prebuildAsync.js +45 -16
  66. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  67. package/build/src/prebuild/resolveOptions.js +2 -2
  68. package/build/src/prebuild/resolveOptions.js.map +1 -1
  69. package/build/src/prebuild/updateFromTemplate.js +6 -6
  70. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  71. package/build/src/prebuild/updatePackageJson.js +49 -36
  72. package/build/src/prebuild/updatePackageJson.js.map +1 -1
  73. package/build/src/prebuild/validateTemplatePlatforms.js +2 -2
  74. package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
  75. package/build/src/run/hints.js +4 -0
  76. package/build/src/run/hints.js.map +1 -1
  77. package/build/src/run/index.js +101 -0
  78. package/build/src/run/index.js.map +1 -0
  79. package/build/src/start/doctor/dependencies/bundledNativeModules.js +2 -2
  80. package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -1
  81. package/build/src/start/doctor/dependencies/getVersionedPackages.js +22 -7
  82. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  83. package/build/src/start/doctor/dependencies/resolvePackages.js +66 -0
  84. package/build/src/start/doctor/dependencies/resolvePackages.js.map +1 -0
  85. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +22 -33
  86. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  87. package/build/src/start/interface/interactiveActions.js +54 -19
  88. package/build/src/start/interface/interactiveActions.js.map +1 -1
  89. package/build/src/start/server/BundlerDevServer.js +14 -10
  90. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  91. package/build/src/start/server/DevServerManager.js +6 -1
  92. package/build/src/start/server/DevServerManager.js.map +1 -1
  93. package/build/src/start/server/DevToolsPluginManager.js +63 -0
  94. package/build/src/start/server/DevToolsPluginManager.js.map +1 -0
  95. package/build/src/start/server/getStaticRenderFunctions.js +25 -23
  96. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  97. package/build/src/start/server/metro/MetroBundlerDevServer.js +76 -69
  98. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  99. package/build/src/start/server/metro/MetroTerminalReporter.js +6 -2
  100. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  101. package/build/src/start/server/metro/TerminalReporter.js +18 -1
  102. package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
  103. package/build/src/start/server/metro/bundleApiRoutes.js +5 -3
  104. package/build/src/start/server/metro/bundleApiRoutes.js.map +1 -1
  105. package/build/src/start/server/metro/createExpoMetroResolver.js +80 -46
  106. package/build/src/start/server/metro/createExpoMetroResolver.js.map +1 -1
  107. package/build/src/start/server/metro/createJResolver.js +152 -0
  108. package/build/src/start/server/metro/createJResolver.js.map +1 -0
  109. package/build/src/start/server/metro/createServerRouteMiddleware.js +15 -2
  110. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
  111. package/build/src/start/server/metro/{inspector-proxy/device.js → debugging/InspectorDevice.js} +10 -38
  112. package/build/src/start/server/metro/debugging/InspectorDevice.js.map +1 -0
  113. package/build/src/start/server/metro/debugging/InspectorProxy.js +116 -0
  114. package/build/src/start/server/metro/debugging/InspectorProxy.js.map +1 -0
  115. package/build/src/start/server/metro/debugging/createDebugMiddleware.js +45 -0
  116. package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -0
  117. package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/NetworkResponse.js +3 -4
  118. package/build/src/start/server/metro/debugging/inspectorHandlers/NetworkResponse.js.map +1 -0
  119. package/build/src/start/server/metro/debugging/inspectorHandlers/PageReload.js.map +1 -0
  120. package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/VscodeDebuggerGetPossibleBreakpoints.js +5 -6
  121. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -0
  122. package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/VscodeDebuggerScriptParsed.js +3 -2
  123. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerScriptParsed.js.map +1 -0
  124. package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/VscodeDebuggerSetBreakpointByUrl.js +3 -2
  125. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerSetBreakpointByUrl.js.map +1 -0
  126. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeRuntimeCallFunctionOn.js +24 -0
  127. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeRuntimeCallFunctionOn.js.map +1 -0
  128. package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/VscodeRuntimeGetProperties.js +5 -4
  129. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeRuntimeGetProperties.js.map +1 -0
  130. package/build/src/start/server/metro/debugging/inspectorHandlers/types.js.map +1 -0
  131. package/build/src/start/server/metro/debugging/inspectorHandlers/utils.js +20 -0
  132. package/build/src/start/server/metro/debugging/inspectorHandlers/utils.js.map +1 -0
  133. package/build/src/start/server/metro/externals.js +25 -3
  134. package/build/src/start/server/metro/externals.js.map +1 -1
  135. package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
  136. package/build/src/start/server/metro/instantiateMetro.js +40 -15
  137. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  138. package/build/src/start/server/metro/metroErrorInterface.js +3 -2
  139. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  140. package/build/src/start/server/metro/router.js +5 -6
  141. package/build/src/start/server/metro/router.js.map +1 -1
  142. package/build/src/start/server/metro/runServer-fork.js +17 -27
  143. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  144. package/build/src/start/server/metro/serializeHtml.js +59 -0
  145. package/build/src/start/server/metro/serializeHtml.js.map +1 -0
  146. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +1 -2
  147. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
  148. package/build/src/start/server/metro/withMetroMultiPlatform.js +237 -214
  149. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  150. package/build/src/start/server/metro/withMetroResolvers.js +114 -40
  151. package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
  152. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +61 -0
  153. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -0
  154. package/build/src/start/server/middleware/ExpoMiddleware.js +2 -2
  155. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  156. package/build/src/start/server/middleware/ManifestMiddleware.js +22 -66
  157. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  158. package/build/src/start/server/middleware/inspector/JsInspector.js +23 -2
  159. package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
  160. package/build/src/start/server/middleware/inspector/LaunchBrowser.js +30 -26
  161. package/build/src/start/server/middleware/inspector/LaunchBrowser.js.map +1 -1
  162. package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js +7 -7
  163. package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js.map +1 -1
  164. package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js +5 -2
  165. package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js.map +1 -1
  166. package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js +3 -2
  167. package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js.map +1 -1
  168. package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js +8 -7
  169. package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js.map +1 -1
  170. package/build/src/start/server/middleware/metroOptions.js +176 -0
  171. package/build/src/start/server/middleware/metroOptions.js.map +1 -0
  172. package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +1 -1
  173. package/build/src/start/server/type-generation/__typetests__/route.test.js +11 -3
  174. package/build/src/start/server/type-generation/__typetests__/route.test.js.map +1 -1
  175. package/build/src/start/server/type-generation/routes.js +6 -4
  176. package/build/src/start/server/type-generation/routes.js.map +1 -1
  177. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js +1 -1
  178. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
  179. package/build/src/utils/analytics/getMetroDebugProperties.js +1 -2
  180. package/build/src/utils/analytics/getMetroDebugProperties.js.map +1 -1
  181. package/build/src/utils/analytics/getMetroProperties.js +1 -2
  182. package/build/src/utils/analytics/getMetroProperties.js.map +1 -1
  183. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  184. package/build/src/utils/args.js +4 -2
  185. package/build/src/utils/args.js.map +1 -1
  186. package/build/src/utils/cocoapods.js +1 -1
  187. package/build/src/utils/cocoapods.js.map +1 -1
  188. package/build/src/utils/codesigning.js +11 -1
  189. package/build/src/utils/codesigning.js.map +1 -1
  190. package/build/src/utils/dir.js +18 -8
  191. package/build/src/utils/dir.js.map +1 -1
  192. package/build/src/utils/env.js +10 -1
  193. package/build/src/utils/env.js.map +1 -1
  194. package/build/src/utils/getOrPromptApplicationId.js +2 -4
  195. package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
  196. package/build/src/utils/prompts.js +1 -28
  197. package/build/src/utils/prompts.js.map +1 -1
  198. package/build/src/utils/tsconfig/loadTsConfigPaths.js +3 -11
  199. package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -1
  200. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +22 -12
  201. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +1 -1
  202. package/package.json +19 -18
  203. package/static/shims/react-native-web/dist/cjs/exports/AppRegistry/AppContainer.js +13 -0
  204. package/static/shims/react-native-web/dist/exports/AppRegistry/AppContainer.js +12 -0
  205. package/static/template/index.html +14 -95
  206. package/build/src/export/printBundleSizes.js +0 -101
  207. package/build/src/export/printBundleSizes.js.map +0 -1
  208. package/build/src/start/server/metro/inspector-proxy/device.js.map +0 -1
  209. package/build/src/start/server/metro/inspector-proxy/handlers/NetworkResponse.js.map +0 -1
  210. package/build/src/start/server/metro/inspector-proxy/handlers/PageReload.js.map +0 -1
  211. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js.map +0 -1
  212. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerScriptParsed.js.map +0 -1
  213. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerSetBreakpointByUrl.js.map +0 -1
  214. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeGetProperties.js.map +0 -1
  215. package/build/src/start/server/metro/inspector-proxy/handlers/types.js.map +0 -1
  216. package/build/src/start/server/metro/inspector-proxy/index.js +0 -27
  217. package/build/src/start/server/metro/inspector-proxy/index.js.map +0 -1
  218. package/build/src/start/server/metro/inspector-proxy/proxy.js +0 -169
  219. package/build/src/start/server/metro/inspector-proxy/proxy.js.map +0 -1
  220. package/build/src/start/server/metro/resolveFromProject.js +0 -90
  221. package/build/src/start/server/metro/resolveFromProject.js.map +0 -1
  222. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +0 -64
  223. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +0 -1
  224. /package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/PageReload.js +0 -0
  225. /package/build/src/start/server/metro/{inspector-proxy/handlers → debugging/inspectorHandlers}/types.js +0 -0
@@ -4,24 +4,24 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  exports.unstable_exportStaticAsync = unstable_exportStaticAsync;
6
6
  exports.getFilesToExportFromServerAsync = getFilesToExportFromServerAsync;
7
- exports.exportFromServerAsync = exportFromServerAsync;
8
- exports.modifyBundlesWithSourceMaps = modifyBundlesWithSourceMaps;
9
7
  exports.getHtmlFiles = getHtmlFiles;
10
8
  exports.getPathVariations = getPathVariations;
11
- var _config = require("@expo/config");
12
9
  var _assert = _interopRequireDefault(require("assert"));
13
10
  var _chalk = _interopRequireDefault(require("chalk"));
14
- var _fs = _interopRequireDefault(require("fs"));
15
11
  var _path = _interopRequireDefault(require("path"));
16
- var _prettyBytes = _interopRequireDefault(require("pretty-bytes"));
12
+ var _resolveFrom = _interopRequireDefault(require("resolve-from"));
17
13
  var _util = require("util");
18
14
  var _favicon = require("./favicon");
15
+ var _persistMetroAssets = require("./persistMetroAssets");
16
+ var _saveAssets = require("./saveAssets");
19
17
  var _log = require("../log");
20
18
  var _devServerManager = require("../start/server/DevServerManager");
21
19
  var _metroBundlerDevServer = require("../start/server/metro/MetroBundlerDevServer");
22
20
  var _metroErrorInterface = require("../start/server/metro/metroErrorInterface");
23
21
  var _router = require("../start/server/metro/router");
22
+ var _serializeHtml = require("../start/server/metro/serializeHtml");
24
23
  var _link = require("../utils/link");
24
+ var _port = require("../utils/port");
25
25
  function _interopRequireDefault(obj) {
26
26
  return obj && obj.__esModule ? obj : {
27
27
  default: obj
@@ -29,24 +29,32 @@ function _interopRequireDefault(obj) {
29
29
  }
30
30
  const debug = require("debug")("expo:export:generateStaticRoutes");
31
31
  async function unstable_exportStaticAsync(projectRoot, options) {
32
- _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/"));
33
+ // Useful for running parallel e2e tests in CI.
34
+ const port = await (0, _port).getFreePortAsync(8082);
33
35
  // TODO: Prevent starting the watcher.
34
36
  const devServerManager = new _devServerManager.DevServerManager(projectRoot, {
35
37
  minify: options.minify,
36
38
  mode: "production",
37
- location: {}
39
+ port,
40
+ location: {},
41
+ resetDevServer: options.clear,
42
+ maxWorkers: options.maxWorkers
38
43
  });
39
44
  await devServerManager.startAsync([
40
45
  {
41
46
  type: "metro",
42
47
  options: {
48
+ port,
43
49
  location: {},
44
- isExporting: true
50
+ isExporting: true,
51
+ resetDevServer: options.clear,
52
+ maxWorkers: options.maxWorkers
45
53
  }
46
54
  },
47
55
  ]);
48
56
  try {
49
- await exportFromServerAsync(projectRoot, devServerManager, options);
57
+ return await exportFromServerAsync(projectRoot, devServerManager, options);
50
58
  } finally{
51
59
  await devServerManager.stopAsync();
52
60
  }
@@ -55,18 +63,31 @@ async function unstable_exportStaticAsync(projectRoot, options) {
55
63
  var ref;
56
64
  return (ref = name.match(/^\(([^/]+?)\)$/)) == null ? void 0 : ref[1];
57
65
  }
58
- async function getFilesToExportFromServerAsync(projectRoot, { manifest , renderAsync , includeGroupVariations }) {
59
- // name : contents
60
- 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() }) {
61
71
  await Promise.all(getHtmlFiles({
62
72
  manifest,
63
- includeGroupVariations
64
- }).map(async (outputPath)=>{
65
- const pathname = outputPath.replace(/(?:index)?\.html$/, "");
73
+ includeGroupVariations: !exportServer
74
+ }).map(async ({ route , filePath , pathname })=>{
66
75
  try {
67
- files.set(outputPath, "");
68
- const data = await renderAsync(pathname);
69
- 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
+ });
70
91
  } catch (e) {
71
92
  await (0, _metroErrorInterface).logMetroErrorAsync({
72
93
  error: e,
@@ -77,45 +98,75 @@ async function getFilesToExportFromServerAsync(projectRoot, { manifest , renderA
77
98
  }));
78
99
  return files;
79
100
  }
80
- async function exportFromServerAsync(projectRoot, devServerManager, { outputDir , basePath , exportServer , minify , includeMaps }) {
81
- const { exp } = (0, _config).getConfig(projectRoot, {
82
- 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
+ }
83
125
  });
84
- 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);
85
129
  const injectFaviconTag = await (0, _favicon).getVirtualFaviconAssetsAsync(projectRoot, {
86
130
  outputDir,
87
- basePath
131
+ baseUrl,
132
+ files
88
133
  });
89
134
  const devServer = devServerManager.getDefaultDevServer();
90
135
  (0, _assert).default(devServer instanceof _metroBundlerDevServer.MetroBundlerDevServer);
91
- const [resources, { manifest , renderAsync }] = await Promise.all([
136
+ const [resources, { manifest , serverManifest , renderAsync }] = await Promise.all([
92
137
  devServer.getStaticResourcesAsync({
138
+ isExporting: true,
93
139
  mode: "production",
94
140
  minify,
95
- includeMaps
141
+ includeSourceMaps,
142
+ baseUrl,
143
+ asyncRoutes,
144
+ routerRoot
96
145
  }),
97
146
  devServer.getStaticRenderFunctionAsync({
98
147
  mode: "production",
99
- minify
148
+ minify,
149
+ baseUrl,
150
+ routerRoot
100
151
  }),
101
152
  ]);
153
+ makeRuntimeEntryPointsAbsolute(manifest, appDir);
102
154
  debug("Routes:\n", (0, _util).inspect(manifest, {
103
155
  colors: true,
104
156
  depth: null
105
157
  }));
106
- const files = await getFilesToExportFromServerAsync(projectRoot, {
158
+ await getFilesToExportFromServerAsync(projectRoot, {
159
+ files,
107
160
  manifest,
108
- // Servers can handle group routes automatically and therefore
109
- // don't require the build-time generation of every possible group
110
- // variation.
111
- includeGroupVariations: !exportServer,
112
- async renderAsync (pathname) {
161
+ exportServer,
162
+ async renderAsync ({ pathname , route }) {
113
163
  const template = await renderAsync(pathname);
114
- let html = await devServer.composeResourcesWithHtml({
164
+ let html = await (0, _serializeHtml).serializeHtmlWithAssets({
115
165
  mode: "production",
116
- resources,
166
+ resources: resources.artifacts,
117
167
  template,
118
- basePath
168
+ baseUrl,
169
+ route
119
170
  });
120
171
  if (injectFaviconTag) {
121
172
  html = injectFaviconTag(html);
@@ -123,14 +174,28 @@ async function exportFromServerAsync(projectRoot, devServerManager, { outputDir
123
174
  return html;
124
175
  }
125
176
  });
126
- resources.forEach((resource)=>{
127
- files.set(resource.filename, modifyBundlesWithSourceMaps(resource.filename, resource.source, includeMaps));
177
+ (0, _saveAssets).getFilesFromSerialAssets(resources.artifacts, {
178
+ platform: "web",
179
+ includeSourceMaps,
180
+ files
128
181
  });
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
185
+ await (0, _persistMetroAssets).persistMetroAssetsAsync(resources.assets, {
186
+ files,
187
+ platform: "web",
188
+ outputDirectory: outputDir,
189
+ baseUrl
190
+ });
191
+ }
129
192
  if (exportServer) {
130
193
  const apiRoutes = await exportApiRoutesAsync({
131
194
  outputDir,
132
195
  server: devServer,
133
- appDir
196
+ routerRoot,
197
+ manifest: serverManifest,
198
+ baseUrl
134
199
  });
135
200
  // Add the api routes to the files to export.
136
201
  for (const [route, contents] of apiRoutes){
@@ -139,76 +204,58 @@ async function exportFromServerAsync(projectRoot, devServerManager, { outputDir
139
204
  } else {
140
205
  warnPossibleInvalidExportType(appDir);
141
206
  }
142
- _fs.default.mkdirSync(_path.default.join(outputDir), {
143
- recursive: true
144
- });
145
- _log.Log.log("");
146
- _log.Log.log(_chalk.default.bold`Exporting ${files.size} files:`);
147
- await Promise.all([
148
- ...files.entries()
149
- ].sort(([a], [b])=>a.localeCompare(b)
150
- ).map(async ([file, contents])=>{
151
- const length = Buffer.byteLength(contents, "utf8");
152
- _log.Log.log(file, _chalk.default.gray`(${(0, _prettyBytes).default(length)})`);
153
- const outputPath = _path.default.join(outputDir, file);
154
- await _fs.default.promises.mkdir(_path.default.dirname(outputPath), {
155
- recursive: true
156
- });
157
- await _fs.default.promises.writeFile(outputPath, contents);
158
- }));
159
- _log.Log.log("");
160
- }
161
- function modifyBundlesWithSourceMaps(filename, source, includeMaps) {
162
- if (filename.endsWith(".js")) {
163
- // If the bundle ends with source map URLs then update them to point to the correct location.
164
- // TODO: basePath support
165
- const normalizedFilename = "/" + filename.replace(/^\/+/, "");
166
- //# 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
- //# 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
- return source.replace(/^\/\/# (sourceMappingURL|sourceURL)=.*$/gm, (...props)=>{
169
- if (includeMaps) {
170
- if (props[1] === "sourceURL") {
171
- return `//# ${props[1]}=` + normalizedFilename;
172
- } else if (props[1] === "sourceMappingURL") {
173
- const mapName = normalizedFilename + ".map";
174
- return `//# ${props[1]}=` + mapName;
175
- }
176
- }
177
- return "";
178
- });
179
- }
180
- return source;
207
+ return files;
181
208
  }
182
209
  function getHtmlFiles({ manifest , includeGroupVariations }) {
183
210
  const htmlFiles = new Set();
184
- function traverseScreens(screens, basePath = "") {
211
+ function traverseScreens(screens, route, baseUrl = "") {
185
212
  for (const value of Object.values(screens)){
213
+ let leaf = null;
186
214
  if (typeof value === "string") {
187
- let filePath = basePath + value;
188
- if (value === "") {
189
- filePath = basePath === "" ? "index" : basePath.endsWith("/") ? basePath + "index" : basePath.slice(0, -1);
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 === "") {
224
+ filePath = baseUrl === "" ? "index" : baseUrl.endsWith("/") ? baseUrl + "index" : baseUrl.slice(0, -1);
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.`);
190
229
  }
191
230
  if (includeGroupVariations) {
192
231
  // TODO: Dedupe requests for alias routes.
193
- addOptionalGroups(filePath);
232
+ addOptionalGroups(filePath, route);
194
233
  } else {
195
- htmlFiles.add(filePath);
234
+ htmlFiles.add({
235
+ filePath,
236
+ route
237
+ });
196
238
  }
197
239
  } else if (typeof value === "object" && (value == null ? void 0 : value.screens)) {
198
- const newPath = basePath + value.path + "/";
199
- traverseScreens(value.screens, newPath);
240
+ const newPath = baseUrl + value.path + "/";
241
+ var __route1;
242
+ traverseScreens(value.screens, (__route1 = value._route) != null ? __route1 : null, newPath);
200
243
  }
201
244
  }
202
245
  }
203
- function addOptionalGroups(path) {
246
+ function addOptionalGroups(path, route) {
204
247
  const variations = getPathVariations(path);
205
248
  for (const variation of variations){
206
- htmlFiles.add(variation);
249
+ htmlFiles.add({
250
+ filePath: variation,
251
+ route
252
+ });
207
253
  }
208
254
  }
209
- traverseScreens(manifest.screens);
210
- return Array.from(htmlFiles).map((value)=>{
211
- 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("/");
212
259
  // Replace `:foo` with `[foo]` and `*foo` with `[...foo]`
213
260
  const partsWithGroups = parts.map((part)=>{
214
261
  if (part === "*not-found") {
@@ -220,9 +267,27 @@ function getHtmlFiles({ manifest , includeGroupVariations }) {
220
267
  }
221
268
  return part;
222
269
  });
223
- 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
+ };
224
277
  });
225
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
+ }
226
291
  function getPathVariations(routePath) {
227
292
  const variations = new Set();
228
293
  const segments1 = routePath.split("/");
@@ -232,7 +297,6 @@ function getPathVariations(routePath) {
232
297
  return;
233
298
  }
234
299
  const [head, ...rest] = segments;
235
- if (head.startsWith("(foo,foo")) {}
236
300
  if (matchGroupName(head)) {
237
301
  const groups = head.slice(1, -1).split(",");
238
302
  if (groups.length > 1) {
@@ -259,19 +323,19 @@ function getPathVariations(routePath) {
259
323
  generateVariations(segments1);
260
324
  return Array.from(variations);
261
325
  }
262
- async function exportApiRoutesAsync({ outputDir , server , appDir }) {
263
- const functionsDir = "_expo/functions";
264
- const funcDir = _path.default.join(outputDir, functionsDir);
265
- _fs.default.mkdirSync(_path.default.join(funcDir), {
266
- recursive: true
267
- });
326
+ async function exportApiRoutesAsync({ outputDir , server , routerRoot , baseUrl , ...props }) {
268
327
  const { manifest , files } = await server.exportExpoRouterApiRoutesAsync({
269
328
  mode: "production",
270
- appDir,
271
- outputDir: functionsDir
329
+ routerRoot,
330
+ outputDir: "_expo/functions",
331
+ prerenderManifest: props.manifest,
332
+ baseUrl
272
333
  });
273
334
  _log.Log.log(_chalk.default.bold`Exporting ${files.size} API Routes.`);
274
- 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
+ });
275
339
  return files;
276
340
  }
277
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 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 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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"}
@@ -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 , files }) {
25
25
  const existing = getUserDefinedFaviconFile(projectRoot);
26
26
  if (existing) {
27
27
  debug("Using user-defined favicon.ico file.");
@@ -33,16 +33,24 @@ async function getVirtualFaviconAssetsAsync(projectRoot, { basePath , outputDir
33
33
  }
34
34
  await Promise.all([
35
35
  data
36
- ].map((asset)=>{
36
+ ].map(async (asset)=>{
37
37
  const assetPath = _path.default.join(outputDir, asset.path);
38
- debug("Writing asset to disk: " + assetPath);
39
- return _fs.default.promises.writeFile(assetPath, asset.source);
38
+ if (files) {
39
+ debug("Storing asset for persisting: " + assetPath);
40
+ files == null ? void 0 : files.set(asset.path, {
41
+ contents: asset.source,
42
+ targetDomain: "client"
43
+ });
44
+ } else {
45
+ debug("Writing asset to disk: " + assetPath);
46
+ await _fs.default.promises.writeFile(assetPath, asset.source);
47
+ }
40
48
  }));
41
49
  function injectFaviconTag(html) {
42
50
  if (!html.includes("</head>")) {
43
51
  return html;
44
52
  }
45
- return html.replace("</head>", `<link rel="shortcut icon" href="${basePath}/favicon.ico" /></head>`);
53
+ return html.replace("</head>", `<link rel="shortcut icon" href="${baseUrl}/favicon.ico" /></head>`);
46
54
  }
47
55
  return injectFaviconTag;
48
56
  }
@@ -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';\nimport { ExportAssetMap } from './saveAssets';\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, files }: { outputDir: string; baseUrl: string; files?: ExportAssetMap }\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(async (asset) => {\n const assetPath = path.join(outputDir, asset.path);\n if (files) {\n debug('Storing asset for persisting: ' + assetPath);\n files?.set(asset.path, {\n contents: asset.source,\n targetDomain: 'client',\n });\n } else {\n debug('Writing asset to disk: ' + assetPath);\n await fs.promises.writeFile(assetPath, asset.source);\n }\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","files","existing","data","Promise","all","map","asset","assetPath","path","join","set","contents","source","targetDomain","fs","promises","writeFile","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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"}