@expo/cli 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/build/bin/cli +5 -4
  2. package/build/bin/cli.map +1 -1
  3. package/build/src/api/getVersions.js.map +1 -1
  4. package/build/src/api/rest/cache/response.js.map +1 -1
  5. package/build/src/api/rest/client.js +2 -2
  6. package/build/src/api/rest/client.js.map +1 -1
  7. package/build/src/customize/typescript.js +3 -1
  8. package/build/src/customize/typescript.js.map +1 -1
  9. package/build/src/export/createMetadataJson.js +3 -2
  10. package/build/src/export/createMetadataJson.js.map +1 -1
  11. package/build/src/export/embed/exportEmbedAsync.js +44 -17
  12. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  13. package/build/src/export/embed/resolveOptions.js +3 -3
  14. package/build/src/export/embed/resolveOptions.js.map +1 -1
  15. package/build/src/export/exportApp.js +69 -80
  16. package/build/src/export/exportApp.js.map +1 -1
  17. package/build/src/export/exportAssets.js +81 -21
  18. package/build/src/export/exportAssets.js.map +1 -1
  19. package/build/src/export/exportHermes.js +4 -4
  20. package/build/src/export/exportHermes.js.map +1 -1
  21. package/build/src/export/exportStaticAsync.js +55 -20
  22. package/build/src/export/exportStaticAsync.js.map +1 -1
  23. package/build/src/export/favicon.js +2 -2
  24. package/build/src/export/favicon.js.map +1 -1
  25. package/build/src/export/fork-bundleAsync.js +12 -10
  26. package/build/src/export/fork-bundleAsync.js.map +1 -1
  27. package/build/src/export/index.js +9 -7
  28. package/build/src/export/index.js.map +1 -1
  29. package/build/src/export/metroAssetLocalPath.js +101 -0
  30. package/build/src/export/metroAssetLocalPath.js.map +1 -0
  31. package/build/src/export/persistMetroAssets.js +94 -21
  32. package/build/src/export/persistMetroAssets.js.map +1 -1
  33. package/build/src/export/resolveOptions.js +1 -1
  34. package/build/src/export/resolveOptions.js.map +1 -1
  35. package/build/src/export/saveAssets.js +9 -48
  36. package/build/src/export/saveAssets.js.map +1 -1
  37. package/build/src/export/web/exportWebAsync.js +1 -1
  38. package/build/src/export/web/exportWebAsync.js.map +1 -1
  39. package/build/src/export/writeContents.js +3 -2
  40. package/build/src/export/writeContents.js.map +1 -1
  41. package/build/src/install/applyPlugins.js +52 -0
  42. package/build/src/install/applyPlugins.js.map +1 -0
  43. package/build/src/install/checkPackages.js +2 -2
  44. package/build/src/install/checkPackages.js.map +1 -1
  45. package/build/src/install/fixPackages.js +84 -0
  46. package/build/src/install/fixPackages.js.map +1 -0
  47. package/build/src/install/installAsync.js +32 -61
  48. package/build/src/install/installAsync.js.map +1 -1
  49. package/build/src/install/installExpoPackage.js +79 -0
  50. package/build/src/install/installExpoPackage.js.map +1 -0
  51. package/build/src/prebuild/clearNativeFolder.js +1 -1
  52. package/build/src/prebuild/clearNativeFolder.js.map +1 -1
  53. package/build/src/prebuild/configureProjectAsync.js +3 -3
  54. package/build/src/prebuild/configureProjectAsync.js.map +1 -1
  55. package/build/src/prebuild/copyTemplateFiles.js +21 -30
  56. package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
  57. package/build/src/prebuild/prebuildAsync.js +37 -15
  58. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  59. package/build/src/prebuild/resolveOptions.js +2 -2
  60. package/build/src/prebuild/resolveOptions.js.map +1 -1
  61. package/build/src/prebuild/updateFromTemplate.js +6 -6
  62. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  63. package/build/src/prebuild/updatePackageJson.js +49 -36
  64. package/build/src/prebuild/updatePackageJson.js.map +1 -1
  65. package/build/src/prebuild/validateTemplatePlatforms.js +2 -2
  66. package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
  67. package/build/src/start/doctor/dependencies/getVersionedPackages.js +12 -4
  68. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  69. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +20 -3
  70. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  71. package/build/src/start/interface/interactiveActions.js +30 -11
  72. package/build/src/start/interface/interactiveActions.js.map +1 -1
  73. package/build/src/start/server/BundlerDevServer.js +14 -10
  74. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  75. package/build/src/start/server/DevServerManager.js +6 -1
  76. package/build/src/start/server/DevServerManager.js.map +1 -1
  77. package/build/src/start/server/DevToolsPluginManager.js +63 -0
  78. package/build/src/start/server/DevToolsPluginManager.js.map +1 -0
  79. package/build/src/start/server/getStaticRenderFunctions.js +21 -23
  80. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  81. package/build/src/start/server/metro/MetroBundlerDevServer.js +48 -64
  82. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  83. package/build/src/start/server/metro/bundleApiRoutes.js +4 -3
  84. package/build/src/start/server/metro/bundleApiRoutes.js.map +1 -1
  85. package/build/src/start/server/metro/createExpoMetroResolver.js +62 -45
  86. package/build/src/start/server/metro/createExpoMetroResolver.js.map +1 -1
  87. package/build/src/start/server/metro/createJResolver.js +149 -0
  88. package/build/src/start/server/metro/createJResolver.js.map +1 -0
  89. package/build/src/start/server/metro/createServerRouteMiddleware.js +13 -1
  90. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
  91. package/build/src/start/server/metro/externals.js +25 -3
  92. package/build/src/start/server/metro/externals.js.map +1 -1
  93. package/build/src/start/server/metro/inspector-proxy/device.js +3 -1
  94. package/build/src/start/server/metro/inspector-proxy/device.js.map +1 -1
  95. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js +3 -4
  96. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -1
  97. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeCallFunctionOn.js +24 -0
  98. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeCallFunctionOn.js.map +1 -0
  99. package/build/src/start/server/metro/inspector-proxy/handlers/utils.js +11 -0
  100. package/build/src/start/server/metro/inspector-proxy/handlers/utils.js.map +1 -0
  101. package/build/src/start/server/metro/inspector-proxy/index.js +10 -7
  102. package/build/src/start/server/metro/inspector-proxy/index.js.map +1 -1
  103. package/build/src/start/server/metro/instantiateMetro.js +32 -10
  104. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  105. package/build/src/start/server/metro/metroErrorInterface.js +1 -1
  106. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  107. package/build/src/start/server/metro/router.js +4 -1
  108. package/build/src/start/server/metro/router.js.map +1 -1
  109. package/build/src/start/server/metro/runServer-fork.js +19 -10
  110. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  111. package/build/src/start/server/metro/serializeHtml.js +43 -0
  112. package/build/src/start/server/metro/serializeHtml.js.map +1 -0
  113. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +1 -2
  114. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
  115. package/build/src/start/server/metro/withMetroMultiPlatform.js +261 -201
  116. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  117. package/build/src/start/server/metro/withMetroResolvers.js +114 -40
  118. package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
  119. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +61 -0
  120. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -0
  121. package/build/src/start/server/middleware/ExpoMiddleware.js +2 -2
  122. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  123. package/build/src/start/server/middleware/ManifestMiddleware.js +15 -66
  124. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  125. package/build/src/start/server/middleware/inspector/JsInspector.js +1 -1
  126. package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
  127. package/build/src/start/server/middleware/inspector/LaunchBrowser.js +30 -26
  128. package/build/src/start/server/middleware/inspector/LaunchBrowser.js.map +1 -1
  129. package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js +7 -7
  130. package/build/src/start/server/middleware/inspector/LaunchBrowser.types.js.map +1 -1
  131. package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js +5 -2
  132. package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js.map +1 -1
  133. package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js +3 -2
  134. package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js.map +1 -1
  135. package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js +8 -7
  136. package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js.map +1 -1
  137. package/build/src/start/server/middleware/metroOptions.js +123 -0
  138. package/build/src/start/server/middleware/metroOptions.js.map +1 -0
  139. package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +1 -1
  140. package/build/src/utils/analytics/getMetroDebugProperties.js +1 -2
  141. package/build/src/utils/analytics/getMetroDebugProperties.js.map +1 -1
  142. package/build/src/utils/analytics/getMetroProperties.js +1 -2
  143. package/build/src/utils/analytics/getMetroProperties.js.map +1 -1
  144. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  145. package/build/src/utils/args.js +4 -2
  146. package/build/src/utils/args.js.map +1 -1
  147. package/build/src/utils/cocoapods.js +1 -1
  148. package/build/src/utils/cocoapods.js.map +1 -1
  149. package/build/src/utils/dir.js +18 -8
  150. package/build/src/utils/dir.js.map +1 -1
  151. package/build/src/utils/env.js +3 -0
  152. package/build/src/utils/env.js.map +1 -1
  153. package/build/src/utils/getOrPromptApplicationId.js +2 -4
  154. package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
  155. package/build/src/utils/prompts.js +1 -28
  156. package/build/src/utils/prompts.js.map +1 -1
  157. package/package.json +15 -14
  158. package/static/shims/react-native-web/dist/cjs/exports/AppRegistry/AppContainer.js +13 -0
  159. package/static/shims/react-native-web/dist/exports/AppRegistry/AppContainer.js +12 -0
  160. package/build/src/start/server/metro/resolveFromProject.js +0 -90
  161. package/build/src/start/server/metro/resolveFromProject.js.map +0 -1
@@ -12,10 +12,10 @@ var _exportStaticAsync = require("./exportStaticAsync");
12
12
  var _favicon = require("./favicon");
13
13
  var _forkBundleAsync = require("./fork-bundleAsync");
14
14
  var _getPublicExpoManifest = require("./getPublicExpoManifest");
15
- var _persistMetroAssets = require("./persistMetroAssets");
16
15
  var _printBundleSizes = require("./printBundleSizes");
17
16
  var _writeContents = require("./writeContents");
18
17
  var Log = _interopRequireWildcard(require("../log"));
18
+ var _metroOptions = require("../start/server/middleware/metroOptions");
19
19
  var _webTemplate = require("../start/server/webTemplate");
20
20
  var _dir = require("../utils/dir");
21
21
  var _env = require("../utils/env");
@@ -46,8 +46,8 @@ function _interopRequireWildcard(obj) {
46
46
  return newObj;
47
47
  }
48
48
  }
49
- async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev , dumpAssetmap , dumpSourcemap , minify }) {
50
- var ref, ref1, ref2;
49
+ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev , dumpAssetmap , sourceMaps , minify }) {
50
+ var ref;
51
51
  (0, _nodeEnv).setNodeEnv(dev ? "development" : "production");
52
52
  require("@expo/env").load(projectRoot);
53
53
  const projectConfig = (0, _config).getConfig(projectRoot);
@@ -55,19 +55,18 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
55
55
  // Web doesn't require validation.
56
56
  skipValidation: platforms.length === 1 && platforms[0] === "web"
57
57
  });
58
- var ref3;
58
+ var ref1;
59
59
  const useServerRendering = [
60
60
  "static",
61
61
  "server"
62
- ].includes((ref3 = (ref = exp.web) == null ? void 0 : ref.output) != null ? ref3 : "");
63
- var ref4;
64
- const basePath = ((ref4 = (ref1 = exp.experiments) == null ? void 0 : (ref2 = ref1.basePath) == null ? void 0 : ref2.replace(/\/+$/, "")) != null ? ref4 : "").trim();
62
+ ].includes((ref1 = (ref = exp.web) == null ? void 0 : ref.output) != null ? ref1 : "");
63
+ const baseUrl = (0, _metroOptions).getBaseUrlFromExpoConfig(exp);
65
64
  // Print out logs
66
- if (basePath) {
65
+ if (baseUrl) {
67
66
  Log.log();
68
- Log.log(_chalk.default.gray`Using (experimental) base path: ${basePath}`);
67
+ Log.log(_chalk.default.gray`Using (experimental) base path: ${baseUrl}`);
69
68
  // Warn if not using an absolute path.
70
- if (!basePath.startsWith("/")) {
69
+ if (!baseUrl.startsWith("/")) {
71
70
  Log.log(_chalk.default.yellow` Base path does not start with a slash. Requests will not be absolute.`);
72
71
  }
73
72
  }
@@ -84,20 +83,23 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
84
83
  // Run metro bundler and create the JS bundles/source maps.
85
84
  const bundles = await (0, _forkBundleAsync).createBundlesAsync(projectRoot, projectConfig, {
86
85
  clear: !!clear,
87
- platforms,
88
86
  minify,
89
- sourcemaps: dumpSourcemap,
90
- // TODO: Breaks asset exports
91
- // platforms: useServerRendering
92
- // ? platforms.filter((platform) => platform !== 'web')
93
- // : platforms,
87
+ sourcemaps: sourceMaps,
88
+ platforms: useServerRendering ? platforms.filter((platform)=>platform !== "web"
89
+ ) : platforms,
94
90
  dev
95
91
  });
92
+ // Write the JS bundles to disk, and get the bundle file names (this could change with async chunk loading support).
93
+ const { hashes , fileNames } = await (0, _writeContents).writeBundlesAsync({
94
+ bundles,
95
+ useServerRendering,
96
+ outputDir: bundlesPath
97
+ });
96
98
  const bundleEntries = Object.entries(bundles);
97
99
  if (bundleEntries.length) {
98
100
  // Log bundle size info to the user
99
101
  (0, _printBundleSizes).printBundleSizes(Object.fromEntries(bundleEntries.map(([key, value])=>{
100
- if (!dumpSourcemap) {
102
+ if (!sourceMaps) {
101
103
  return [
102
104
  key,
103
105
  {
@@ -112,68 +114,14 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
112
114
  value
113
115
  ];
114
116
  })));
115
- }
116
- // Write the JS bundles to disk, and get the bundle file names (this could change with async chunk loading support).
117
- const { hashes , fileNames } = await (0, _writeContents).writeBundlesAsync({
118
- bundles,
119
- useServerRendering,
120
- outputDir: bundlesPath
121
- });
122
- Log.log("Finished saving JS Bundles");
123
- if (platforms.includes("web")) {
124
- if (useServerRendering) {
125
- var ref5;
126
- await (0, _exportStaticAsync).unstable_exportStaticAsync(projectRoot, {
127
- outputDir: outputPath,
128
- minify,
129
- basePath,
130
- includeMaps: dumpSourcemap,
131
- // @ts-expect-error: server not on type yet
132
- exportServer: ((ref5 = exp.web) == null ? void 0 : ref5.output) === "server"
133
- });
134
- Log.log("Finished saving static files");
135
- } else {
136
- const cssLinks = await (0, _exportAssets).exportCssAssetsAsync({
137
- outputDir,
138
- bundles,
139
- basePath
140
- });
141
- let html = await (0, _webTemplate).createTemplateHtmlFromExpoConfigAsync(projectRoot, {
142
- scripts: [
143
- `${basePath}/bundles/${fileNames.web}`
144
- ],
145
- cssLinks
146
- });
147
- // Add the favicon assets to the HTML.
148
- const modifyHtml = await (0, _favicon).getVirtualFaviconAssetsAsync(projectRoot, {
149
- outputDir,
150
- basePath
151
- });
152
- if (modifyHtml) {
153
- html = modifyHtml(html);
154
- }
155
- // Generate SPA-styled HTML file.
156
- // If web exists, then write the template HTML file.
157
- await _fs.default.promises.writeFile(_path.default.join(staticFolder, "index.html"), html);
158
- }
159
- // TODO: Use a different mechanism for static web.
160
- if (bundles.web) {
161
- // Save assets like a typical bundler, preserving the file paths on web.
162
- // TODO: Update React Native Web to support loading files from asset hashes.
163
- await (0, _persistMetroAssets).persistMetroAssetsAsync(bundles.web.assets, {
164
- platform: "web",
165
- outputDirectory: staticFolder,
166
- basePath
167
- });
168
- }
169
- }
170
- // Can be empty during web-only SSG.
171
- // TODO: Use same asset system across platforms again.
172
- if (Object.keys(fileNames).length) {
173
- const { assets } = await (0, _exportAssets).exportAssetsAsync(projectRoot, {
117
+ Log.log("Finished saving JS Bundles");
118
+ // Can be empty during web-only SSG.
119
+ // TODO: Use same asset system across platforms again.
120
+ const { assets , embeddedHashSet } = await (0, _exportAssets).exportAssetsAsync(projectRoot, {
174
121
  exp,
175
122
  outputDir: staticFolder,
176
- bundles
123
+ bundles,
124
+ baseUrl
177
125
  });
178
126
  if (dumpAssetmap) {
179
127
  Log.log("Dumping asset map");
@@ -183,8 +131,8 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
183
131
  });
184
132
  }
185
133
  // build source maps
186
- if (dumpSourcemap) {
187
- Log.log("Dumping source maps");
134
+ if (sourceMaps) {
135
+ Log.log("Emitting source maps");
188
136
  await (0, _writeContents).writeSourceMapsAsync({
189
137
  bundles,
190
138
  hashes,
@@ -203,8 +151,49 @@ async function exportAppAsync(projectRoot, { platforms , outputDir , clear , dev
203
151
  await (0, _writeContents).writeMetadataJsonAsync({
204
152
  outputDir: staticFolder,
205
153
  bundles,
206
- fileNames
154
+ fileNames,
155
+ embeddedHashSet
156
+ });
157
+ }
158
+ // Additional web-only steps...
159
+ if (!platforms.includes("web")) {
160
+ return;
161
+ }
162
+ if (useServerRendering) {
163
+ var ref2;
164
+ await (0, _exportStaticAsync).unstable_exportStaticAsync(projectRoot, {
165
+ clear: !!clear,
166
+ outputDir: outputPath,
167
+ minify,
168
+ baseUrl,
169
+ includeMaps: sourceMaps,
170
+ // @ts-expect-error: server not on type yet
171
+ exportServer: ((ref2 = exp.web) == null ? void 0 : ref2.output) === "server"
172
+ });
173
+ Log.log("Finished saving static files");
174
+ } else {
175
+ const cssLinks = await (0, _exportAssets).exportCssAssetsAsync({
176
+ outputDir,
177
+ bundles,
178
+ baseUrl
179
+ });
180
+ let html = await (0, _webTemplate).createTemplateHtmlFromExpoConfigAsync(projectRoot, {
181
+ scripts: [
182
+ `${baseUrl}/bundles/${fileNames.web}`
183
+ ],
184
+ cssLinks
207
185
  });
186
+ // Add the favicon assets to the HTML.
187
+ const modifyHtml = await (0, _favicon).getVirtualFaviconAssetsAsync(projectRoot, {
188
+ outputDir,
189
+ baseUrl
190
+ });
191
+ if (modifyHtml) {
192
+ html = modifyHtml(html);
193
+ }
194
+ // Generate SPA-styled HTML file.
195
+ // If web exists, then write the template HTML file.
196
+ await _fs.default.promises.writeFile(_path.default.join(staticFolder, "index.html"), html);
208
197
  }
209
198
  }
210
199
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/export/exportApp.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { exportAssetsAsync, exportCssAssetsAsync } from './exportAssets';\nimport { unstable_exportStaticAsync } from './exportStaticAsync';\nimport { getVirtualFaviconAssetsAsync } from './favicon';\nimport { createBundlesAsync } from './fork-bundleAsync';\nimport { getPublicExpoManifestAsync } from './getPublicExpoManifest';\nimport { persistMetroAssetsAsync } from './persistMetroAssets';\nimport { printBundleSizes } from './printBundleSizes';\nimport { Options } from './resolveOptions';\nimport {\n writeAssetMapAsync,\n writeBundlesAsync,\n writeDebugHtmlAsync,\n writeMetadataJsonAsync,\n writeSourceMapsAsync,\n} from './writeContents';\nimport * as Log from '../log';\nimport { createTemplateHtmlFromExpoConfigAsync } from '../start/server/webTemplate';\nimport { copyAsync, ensureDirectoryAsync } from '../utils/dir';\nimport { env } from '../utils/env';\nimport { setNodeEnv } from '../utils/nodeEnv';\n\n/**\n * The structure of the outputDir will be:\n *\n * ```\n * ├── assets\n * │ └── *\n * ├── bundles\n * │ ├── android-01ee6e3ab3e8c16a4d926c91808d5320.js\n * │ └── ios-ee8206cc754d3f7aa9123b7f909d94ea.js\n * └── metadata.json\n * ```\n */\nexport async function exportAppAsync(\n projectRoot: string,\n {\n platforms,\n outputDir,\n clear,\n dev,\n dumpAssetmap,\n dumpSourcemap,\n minify,\n }: Pick<\n Options,\n 'dumpAssetmap' | 'dumpSourcemap' | 'dev' | 'clear' | 'outputDir' | 'platforms' | 'minify'\n >\n): Promise<void> {\n setNodeEnv(dev ? 'development' : 'production');\n require('@expo/env').load(projectRoot);\n\n const projectConfig = getConfig(projectRoot);\n const exp = await getPublicExpoManifestAsync(projectRoot, {\n // Web doesn't require validation.\n skipValidation: platforms.length === 1 && platforms[0] === 'web',\n });\n\n const useServerRendering = ['static', 'server'].includes(exp.web?.output ?? '');\n const basePath = (exp.experiments?.basePath?.replace(/\\/+$/, '') ?? '').trim();\n\n // Print out logs\n if (basePath) {\n Log.log();\n Log.log(chalk.gray`Using (experimental) base path: ${basePath}`);\n // Warn if not using an absolute path.\n if (!basePath.startsWith('/')) {\n Log.log(\n chalk.yellow` Base path does not start with a slash. Requests will not be absolute.`\n );\n }\n }\n\n const publicPath = path.resolve(projectRoot, env.EXPO_PUBLIC_FOLDER);\n\n const outputPath = path.resolve(projectRoot, outputDir);\n const staticFolder = outputPath;\n const assetsPath = path.join(staticFolder, 'assets');\n const bundlesPath = path.join(staticFolder, 'bundles');\n\n await Promise.all([assetsPath, bundlesPath].map(ensureDirectoryAsync));\n\n await copyPublicFolderAsync(publicPath, staticFolder);\n\n // Run metro bundler and create the JS bundles/source maps.\n const bundles = await createBundlesAsync(projectRoot, projectConfig, {\n clear: !!clear,\n platforms,\n minify,\n sourcemaps: dumpSourcemap,\n // TODO: Breaks asset exports\n // platforms: useServerRendering\n // ? platforms.filter((platform) => platform !== 'web')\n // : platforms,\n dev,\n });\n\n const bundleEntries = Object.entries(bundles);\n if (bundleEntries.length) {\n // Log bundle size info to the user\n printBundleSizes(\n Object.fromEntries(\n bundleEntries.map(([key, value]) => {\n if (!dumpSourcemap) {\n return [\n key,\n {\n ...value,\n // Remove source maps from the bundles if they aren't going to be written.\n map: undefined,\n },\n ];\n }\n\n return [key, value];\n })\n )\n );\n }\n\n // Write the JS bundles to disk, and get the bundle file names (this could change with async chunk loading support).\n const { hashes, fileNames } = await writeBundlesAsync({\n bundles,\n useServerRendering,\n outputDir: bundlesPath,\n });\n\n Log.log('Finished saving JS Bundles');\n\n if (platforms.includes('web')) {\n if (useServerRendering) {\n await unstable_exportStaticAsync(projectRoot, {\n outputDir: outputPath,\n minify,\n basePath,\n includeMaps: dumpSourcemap,\n // @ts-expect-error: server not on type yet\n exportServer: exp.web?.output === 'server',\n });\n Log.log('Finished saving static files');\n } else {\n const cssLinks = await exportCssAssetsAsync({\n outputDir,\n bundles,\n basePath,\n });\n let html = await createTemplateHtmlFromExpoConfigAsync(projectRoot, {\n scripts: [`${basePath}/bundles/${fileNames.web}`],\n cssLinks,\n });\n // Add the favicon assets to the HTML.\n const modifyHtml = await getVirtualFaviconAssetsAsync(projectRoot, {\n outputDir,\n basePath,\n });\n if (modifyHtml) {\n html = modifyHtml(html);\n }\n // Generate SPA-styled HTML file.\n // If web exists, then write the template HTML file.\n await fs.promises.writeFile(path.join(staticFolder, 'index.html'), html);\n }\n\n // TODO: Use a different mechanism for static web.\n if (bundles.web) {\n // Save assets like a typical bundler, preserving the file paths on web.\n // TODO: Update React Native Web to support loading files from asset hashes.\n await persistMetroAssetsAsync(bundles.web.assets, {\n platform: 'web',\n outputDirectory: staticFolder,\n basePath,\n });\n }\n }\n\n // Can be empty during web-only SSG.\n // TODO: Use same asset system across platforms again.\n if (Object.keys(fileNames).length) {\n const { assets } = await exportAssetsAsync(projectRoot, {\n exp,\n outputDir: staticFolder,\n bundles,\n });\n\n if (dumpAssetmap) {\n Log.log('Dumping asset map');\n await writeAssetMapAsync({ outputDir: staticFolder, assets });\n }\n // build source maps\n if (dumpSourcemap) {\n Log.log('Dumping source maps');\n await writeSourceMapsAsync({\n bundles,\n hashes,\n outputDir: bundlesPath,\n fileNames,\n });\n\n Log.log('Preparing additional debugging files');\n // If we output source maps, then add a debug HTML file which the user can open in\n // the web browser to inspect the output like web.\n await writeDebugHtmlAsync({\n outputDir: staticFolder,\n fileNames,\n });\n }\n\n // Generate a `metadata.json` and the export is complete.\n await writeMetadataJsonAsync({ outputDir: staticFolder, bundles, fileNames });\n }\n}\n\n/**\n * Copy the contents of the public folder into the output folder.\n * This enables users to add static files like `favicon.ico` or `serve.json`.\n *\n * The contents of this folder are completely universal since they refer to\n * static network requests which fall outside the scope of React Native's magic\n * platform resolution patterns.\n */\nasync function copyPublicFolderAsync(publicFolder: string, outputFolder: string) {\n if (fs.existsSync(publicFolder)) {\n await copyAsync(publicFolder, outputFolder);\n }\n}\n"],"names":["exportAppAsync","Log","projectRoot","platforms","outputDir","clear","dev","dumpAssetmap","dumpSourcemap","minify","exp","setNodeEnv","require","load","projectConfig","getConfig","getPublicExpoManifestAsync","skipValidation","length","useServerRendering","includes","web","output","basePath","experiments","replace","trim","log","chalk","gray","startsWith","yellow","publicPath","path","resolve","env","EXPO_PUBLIC_FOLDER","outputPath","staticFolder","assetsPath","join","bundlesPath","Promise","all","map","ensureDirectoryAsync","copyPublicFolderAsync","bundles","createBundlesAsync","sourcemaps","bundleEntries","Object","entries","printBundleSizes","fromEntries","key","value","undefined","hashes","fileNames","writeBundlesAsync","unstable_exportStaticAsync","includeMaps","exportServer","cssLinks","exportCssAssetsAsync","html","createTemplateHtmlFromExpoConfigAsync","scripts","modifyHtml","getVirtualFaviconAssetsAsync","fs","promises","writeFile","persistMetroAssetsAsync","assets","platform","outputDirectory","keys","exportAssetsAsync","writeAssetMapAsync","writeSourceMapsAsync","writeDebugHtmlAsync","writeMetadataJsonAsync","publicFolder","outputFolder","existsSync","copyAsync"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/export/exportApp.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { exportAssetsAsync, exportCssAssetsAsync } from './exportAssets';\nimport { unstable_exportStaticAsync } from './exportStaticAsync';\nimport { getVirtualFaviconAssetsAsync } from './favicon';\nimport { createBundlesAsync } from './fork-bundleAsync';\nimport { getPublicExpoManifestAsync } from './getPublicExpoManifest';\nimport { printBundleSizes } from './printBundleSizes';\nimport { Options } from './resolveOptions';\nimport {\n writeAssetMapAsync,\n writeBundlesAsync,\n writeDebugHtmlAsync,\n writeMetadataJsonAsync,\n writeSourceMapsAsync,\n} from './writeContents';\nimport * as Log from '../log';\nimport { getBaseUrlFromExpoConfig } from '../start/server/middleware/metroOptions';\nimport { createTemplateHtmlFromExpoConfigAsync } from '../start/server/webTemplate';\nimport { copyAsync, ensureDirectoryAsync } from '../utils/dir';\nimport { env } from '../utils/env';\nimport { setNodeEnv } from '../utils/nodeEnv';\n\n/**\n * The structure of the outputDir will be:\n *\n * ```\n * ├── assets\n * │ └── *\n * ├── bundles\n * │ ├── android-01ee6e3ab3e8c16a4d926c91808d5320.js\n * │ └── ios-ee8206cc754d3f7aa9123b7f909d94ea.js\n * └── metadata.json\n * ```\n */\nexport async function exportAppAsync(\n projectRoot: string,\n {\n platforms,\n outputDir,\n clear,\n dev,\n dumpAssetmap,\n sourceMaps,\n minify,\n }: Pick<\n Options,\n 'dumpAssetmap' | 'sourceMaps' | 'dev' | 'clear' | 'outputDir' | 'platforms' | 'minify'\n >\n): Promise<void> {\n setNodeEnv(dev ? 'development' : 'production');\n require('@expo/env').load(projectRoot);\n\n const projectConfig = getConfig(projectRoot);\n const exp = await getPublicExpoManifestAsync(projectRoot, {\n // Web doesn't require validation.\n skipValidation: platforms.length === 1 && platforms[0] === 'web',\n });\n\n const useServerRendering = ['static', 'server'].includes(exp.web?.output ?? '');\n const baseUrl = getBaseUrlFromExpoConfig(exp);\n\n // Print out logs\n if (baseUrl) {\n Log.log();\n Log.log(chalk.gray`Using (experimental) base path: ${baseUrl}`);\n // Warn if not using an absolute path.\n if (!baseUrl.startsWith('/')) {\n Log.log(\n chalk.yellow` Base path does not start with a slash. Requests will not be absolute.`\n );\n }\n }\n\n const publicPath = path.resolve(projectRoot, env.EXPO_PUBLIC_FOLDER);\n\n const outputPath = path.resolve(projectRoot, outputDir);\n const staticFolder = outputPath;\n const assetsPath = path.join(staticFolder, 'assets');\n const bundlesPath = path.join(staticFolder, 'bundles');\n\n await Promise.all([assetsPath, bundlesPath].map(ensureDirectoryAsync));\n\n await copyPublicFolderAsync(publicPath, staticFolder);\n\n // Run metro bundler and create the JS bundles/source maps.\n const bundles = await createBundlesAsync(projectRoot, projectConfig, {\n clear: !!clear,\n minify,\n sourcemaps: sourceMaps,\n platforms: useServerRendering ? platforms.filter((platform) => platform !== 'web') : platforms,\n dev,\n });\n\n // Write the JS bundles to disk, and get the bundle file names (this could change with async chunk loading support).\n const { hashes, fileNames } = await writeBundlesAsync({\n bundles,\n useServerRendering,\n outputDir: bundlesPath,\n });\n const bundleEntries = Object.entries(bundles);\n if (bundleEntries.length) {\n // Log bundle size info to the user\n printBundleSizes(\n Object.fromEntries(\n bundleEntries.map(([key, value]) => {\n if (!sourceMaps) {\n return [\n key,\n {\n ...value,\n // Remove source maps from the bundles if they aren't going to be written.\n map: undefined,\n },\n ];\n }\n\n return [key, value];\n })\n )\n );\n\n Log.log('Finished saving JS Bundles');\n\n // Can be empty during web-only SSG.\n // TODO: Use same asset system across platforms again.\n const { assets, embeddedHashSet } = await exportAssetsAsync(projectRoot, {\n exp,\n outputDir: staticFolder,\n bundles,\n baseUrl,\n });\n\n if (dumpAssetmap) {\n Log.log('Dumping asset map');\n await writeAssetMapAsync({ outputDir: staticFolder, assets });\n }\n // build source maps\n if (sourceMaps) {\n Log.log('Emitting source maps');\n await writeSourceMapsAsync({\n bundles,\n hashes,\n outputDir: bundlesPath,\n fileNames,\n });\n\n Log.log('Preparing additional debugging files');\n // If we output source maps, then add a debug HTML file which the user can open in\n // the web browser to inspect the output like web.\n await writeDebugHtmlAsync({\n outputDir: staticFolder,\n fileNames,\n });\n }\n\n // Generate a `metadata.json` and the export is complete.\n await writeMetadataJsonAsync({ outputDir: staticFolder, bundles, fileNames, embeddedHashSet });\n }\n\n // Additional web-only steps...\n\n if (!platforms.includes('web')) {\n return;\n }\n\n if (useServerRendering) {\n await unstable_exportStaticAsync(projectRoot, {\n clear: !!clear,\n outputDir: outputPath,\n minify,\n baseUrl,\n includeMaps: sourceMaps,\n // @ts-expect-error: server not on type yet\n exportServer: exp.web?.output === 'server',\n });\n Log.log('Finished saving static files');\n } else {\n const cssLinks = await exportCssAssetsAsync({\n outputDir,\n bundles,\n baseUrl,\n });\n let html = await createTemplateHtmlFromExpoConfigAsync(projectRoot, {\n scripts: [`${baseUrl}/bundles/${fileNames.web}`],\n cssLinks,\n });\n // Add the favicon assets to the HTML.\n const modifyHtml = await getVirtualFaviconAssetsAsync(projectRoot, {\n outputDir,\n baseUrl,\n });\n if (modifyHtml) {\n html = modifyHtml(html);\n }\n // Generate SPA-styled HTML file.\n // If web exists, then write the template HTML file.\n await fs.promises.writeFile(path.join(staticFolder, 'index.html'), html);\n }\n}\n\n/**\n * Copy the contents of the public folder into the output folder.\n * This enables users to add static files like `favicon.ico` or `serve.json`.\n *\n * The contents of this folder are completely universal since they refer to\n * static network requests which fall outside the scope of React Native's magic\n * platform resolution patterns.\n */\nasync function copyPublicFolderAsync(publicFolder: string, outputFolder: string) {\n if (fs.existsSync(publicFolder)) {\n await copyAsync(publicFolder, outputFolder);\n }\n}\n"],"names":["exportAppAsync","Log","projectRoot","platforms","outputDir","clear","dev","dumpAssetmap","sourceMaps","minify","exp","setNodeEnv","require","load","projectConfig","getConfig","getPublicExpoManifestAsync","skipValidation","length","useServerRendering","includes","web","output","baseUrl","getBaseUrlFromExpoConfig","log","chalk","gray","startsWith","yellow","publicPath","path","resolve","env","EXPO_PUBLIC_FOLDER","outputPath","staticFolder","assetsPath","join","bundlesPath","Promise","all","map","ensureDirectoryAsync","copyPublicFolderAsync","bundles","createBundlesAsync","sourcemaps","filter","platform","hashes","fileNames","writeBundlesAsync","bundleEntries","Object","entries","printBundleSizes","fromEntries","key","value","undefined","assets","embeddedHashSet","exportAssetsAsync","writeAssetMapAsync","writeSourceMapsAsync","writeDebugHtmlAsync","writeMetadataJsonAsync","unstable_exportStaticAsync","includeMaps","exportServer","cssLinks","exportCssAssetsAsync","html","createTemplateHtmlFromExpoConfigAsync","scripts","modifyHtml","getVirtualFaviconAssetsAsync","fs","promises","writeFile","publicFolder","outputFolder","existsSync","copyAsync"],"mappings":"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"}
@@ -2,12 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- exports.resolveAssetBundlePatternsAsync = resolveAssetBundlePatternsAsync;
5
+ exports.assetPatternsToBeBundled = assetPatternsToBeBundled;
6
+ exports.resolveAssetPatternsToBeBundled = resolveAssetPatternsToBeBundled;
6
7
  exports.exportAssetsAsync = exportAssetsAsync;
7
8
  exports.exportCssAssetsAsync = exportCssAssetsAsync;
8
9
  var _fs = _interopRequireDefault(require("fs"));
9
10
  var _minimatch = _interopRequireDefault(require("minimatch"));
10
11
  var _path = _interopRequireDefault(require("path"));
12
+ var _persistMetroAssets = require("./persistMetroAssets");
11
13
  var _saveAssets = require("./saveAssets");
12
14
  var Log = _interopRequireWildcard(require("../log"));
13
15
  var _resolveAssets = require("../start/server/middleware/resolveAssets");
@@ -39,17 +41,39 @@ function _interopRequireWildcard(obj) {
39
41
  }
40
42
  }
41
43
  const debug = require("debug")("expo:export:exportAssets");
42
- async function resolveAssetBundlePatternsAsync(projectRoot, exp, assets) {
43
- var ref1;
44
- if (!((ref1 = exp.assetBundlePatterns) == null ? void 0 : ref1.length) || !assets.length) {
45
- delete exp.assetBundlePatterns;
46
- return exp;
44
+ function mapAssetHashToAssetString(asset, hash) {
45
+ return "asset_" + hash + ("type" in asset && asset.type ? "." + asset.type : "");
46
+ }
47
+ function assetPatternsToBeBundled(exp) {
48
+ var ref, ref1, ref2, ref3, ref4;
49
+ return (exp == null ? void 0 : (ref = exp.extra) == null ? void 0 : (ref1 = ref.updates) == null ? void 0 : (ref2 = ref1.assetPatternsToBeBundled) == null ? void 0 : ref2.length) ? exp == null ? void 0 : (ref3 = exp.extra) == null ? void 0 : (ref4 = ref3.updates) == null ? void 0 : ref4.assetPatternsToBeBundled : undefined;
50
+ }
51
+ /**
52
+ * Given an asset and a set of strings representing the assets to be bundled, returns true if
53
+ * the asset is part of the set to be bundled.
54
+ * @param asset Asset object
55
+ * @param bundledAssetsSet Set of strings
56
+ * @returns true if the asset should be bundled
57
+ */ function assetShouldBeIncludedInExport(asset, bundledAssetsSet) {
58
+ if (!bundledAssetsSet) {
59
+ return true;
47
60
  }
61
+ return asset.fileHashes.filter((hash)=>bundledAssetsSet.has(mapAssetHashToAssetString(asset, hash))
62
+ ).length > 0;
63
+ }
64
+ /**
65
+ * Computes a set of strings representing the assets to be bundled with an export, given an array of assets,
66
+ * and a set of patterns to match
67
+ * @param assets The asset array
68
+ * @param assetPatternsToBeBundled An array of strings with glob patterns to match
69
+ * @param projectRoot The project root
70
+ * @returns A set of asset strings
71
+ */ function setOfAssetsToBeBundled(assets, assetPatternsToBeBundled1, projectRoot) {
48
72
  // Convert asset patterns to a list of asset strings that match them.
49
73
  // Assets strings are formatted as `asset_<hash>.<type>` and represent
50
74
  // the name that the file will have in the app bundle. The `asset_` prefix is
51
75
  // needed because android doesn't support assets that start with numbers.
52
- const fullPatterns = exp.assetBundlePatterns.map((p)=>_path.default.join(projectRoot, p)
76
+ const fullPatterns = assetPatternsToBeBundled1.map((p)=>_path.default.join(projectRoot, p)
53
77
  );
54
78
  logPatterns(fullPatterns);
55
79
  const allBundledAssets = assets.map((asset)=>{
@@ -57,18 +81,24 @@ async function resolveAssetBundlePatternsAsync(projectRoot, exp, assets) {
57
81
  if (shouldBundle) {
58
82
  var ref;
59
83
  debug(`${shouldBundle ? "Include" : "Exclude"} asset ${(ref = asset.files) == null ? void 0 : ref[0]}`);
60
- return asset.fileHashes.map((hash)=>"asset_" + hash + ("type" in asset && asset.type ? "." + asset.type : "")
84
+ return asset.fileHashes.map((hash)=>mapAssetHashToAssetString(asset, hash)
61
85
  );
62
86
  }
63
87
  return [];
64
88
  }).flat();
65
89
  // The assets returned by the RN packager has duplicates so make sure we
66
90
  // only bundle each once.
67
- (exp).bundledAssets = [
68
- ...new Set(allBundledAssets)
69
- ];
70
- delete exp.assetBundlePatterns;
71
- return exp;
91
+ return new Set(allBundledAssets);
92
+ }
93
+ function resolveAssetPatternsToBeBundled(projectRoot, exp, assets) {
94
+ if (!assetPatternsToBeBundled(exp)) {
95
+ return undefined;
96
+ }
97
+ var ref;
98
+ const bundledAssets = setOfAssetsToBeBundled(assets, (ref = assetPatternsToBeBundled(exp)) != null ? ref : [
99
+ "**/*"
100
+ ], projectRoot);
101
+ return bundledAssets;
72
102
  }
73
103
  function logPatterns(patterns) {
74
104
  // Only log the patterns in debug mode, if they aren't already defined in the app.json, then all files will be targeted.
@@ -82,28 +112,58 @@ function shouldBundleAsset(asset, patterns) {
82
112
  return !!("__packager_asset" in asset && asset.__packager_asset && file && patterns.some((pattern)=>(0, _minimatch).default(file, pattern)
83
113
  ));
84
114
  }
85
- async function exportAssetsAsync(projectRoot, { exp , outputDir , bundles }) {
115
+ async function exportAssetsAsync(projectRoot, { exp , outputDir , bundles: { web , ...bundles } , baseUrl }) {
86
116
  var ref;
117
+ // NOTE: We use a different system for static web
118
+ if (web) {
119
+ // Save assets like a typical bundler, preserving the file paths on web.
120
+ // TODO: Update React Native Web to support loading files from asset hashes.
121
+ await (0, _persistMetroAssets).persistMetroAssetsAsync(web.assets, {
122
+ platform: "web",
123
+ outputDirectory: outputDir,
124
+ baseUrl
125
+ });
126
+ }
87
127
  const assets = (0, _array).uniqBy(Object.values(bundles).flatMap((bundle)=>bundle.assets
88
128
  ), (asset)=>asset.hash
89
129
  );
130
+ let bundledAssetsSet = undefined;
131
+ let filteredAssets = assets;
132
+ const embeddedHashSet = new Set();
90
133
  if ((ref = assets[0]) == null ? void 0 : ref.fileHashes) {
134
+ debug(`Assets = ${JSON.stringify(assets, null, 2)}`);
135
+ // Updates the manifest to reflect additional asset bundling + configs
136
+ // Get only asset strings for assets we will save
137
+ bundledAssetsSet = resolveAssetPatternsToBeBundled(projectRoot, exp, assets);
138
+ if (bundledAssetsSet) {
139
+ debug(`Bundled assets = ${JSON.stringify([
140
+ ...bundledAssetsSet
141
+ ], null, 2)}`);
142
+ // Filter asset objects to only ones that include assetPatternsToBeBundled matches
143
+ filteredAssets = assets.filter((asset)=>{
144
+ const shouldInclude = assetShouldBeIncludedInExport(asset, bundledAssetsSet);
145
+ if (!shouldInclude) {
146
+ embeddedHashSet.add(asset.hash);
147
+ }
148
+ return shouldInclude;
149
+ });
150
+ debug(`Filtered assets count = ${filteredAssets.length}`);
151
+ }
91
152
  Log.log("Saving assets");
92
- await (0, _saveAssets).saveAssetsAsync(projectRoot, {
93
- assets,
153
+ await (0, _saveAssets).saveAssetsAsync({
154
+ assets: filteredAssets,
94
155
  outputDir
95
156
  });
96
157
  }
97
158
  // Add google services file if it exists
98
159
  await (0, _resolveAssets).resolveGoogleServicesFile(projectRoot, exp);
99
- // Updates the manifest to reflect additional asset bundling + configs
100
- await resolveAssetBundlePatternsAsync(projectRoot, exp, assets);
101
160
  return {
102
161
  exp,
103
- assets
162
+ assets,
163
+ embeddedHashSet
104
164
  };
105
165
  }
106
- async function exportCssAssetsAsync({ outputDir , bundles , basePath }) {
166
+ async function exportCssAssetsAsync({ outputDir , bundles , baseUrl }) {
107
167
  var ref;
108
168
  const assets = (0, _array).uniqBy(Object.values(bundles).flatMap((bundle)=>bundle.css
109
169
  ), (asset)=>asset.filename
@@ -115,7 +175,7 @@ async function exportCssAssetsAsync({ outputDir , bundles , basePath }) {
115
175
  });
116
176
  await Promise.all(assets.map((v)=>_fs.default.promises.writeFile(_path.default.join(outputDir, v.filename), v.source)
117
177
  ));
118
- return assets.map((v)=>basePath + "/" + v.filename
178
+ return assets.map((v)=>baseUrl + "/" + v.filename
119
179
  );
120
180
  }
121
181
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/export/exportAssets.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport { ModPlatform } from '@expo/config-plugins';\nimport fs from 'fs';\nimport minimatch from 'minimatch';\nimport path from 'path';\n\nimport { BundleOutput } from './fork-bundleAsync';\nimport { Asset, saveAssetsAsync } from './saveAssets';\nimport * as Log from '../log';\nimport { resolveGoogleServicesFile } from '../start/server/middleware/resolveAssets';\nimport { uniqBy } from '../utils/array';\n\nconst debug = require('debug')('expo:export:exportAssets') as typeof console.log;\n\n/**\n * Resolves the assetBundlePatterns from the manifest and returns a list of assets to bundle.\n *\n * @modifies {exp}\n */\nexport async function resolveAssetBundlePatternsAsync<T extends ExpoConfig>(\n projectRoot: string,\n exp: T,\n assets: Asset[]\n): Promise<Omit<T, 'assetBundlePatterns'> & { bundledAssets?: string[] }> {\n if (!exp.assetBundlePatterns?.length || !assets.length) {\n delete exp.assetBundlePatterns;\n return exp;\n }\n // Convert asset patterns to a list of asset strings that match them.\n // Assets strings are formatted as `asset_<hash>.<type>` and represent\n // the name that the file will have in the app bundle. The `asset_` prefix is\n // needed because android doesn't support assets that start with numbers.\n\n const fullPatterns: string[] = exp.assetBundlePatterns.map((p: string) =>\n path.join(projectRoot, p)\n );\n\n logPatterns(fullPatterns);\n\n const allBundledAssets = assets\n .map((asset) => {\n const shouldBundle = shouldBundleAsset(asset, fullPatterns);\n if (shouldBundle) {\n debug(`${shouldBundle ? 'Include' : 'Exclude'} asset ${asset.files?.[0]}`);\n return asset.fileHashes.map(\n (hash) => 'asset_' + hash + ('type' in asset && asset.type ? '.' + asset.type : '')\n );\n }\n return [];\n })\n .flat();\n\n // The assets returned by the RN packager has duplicates so make sure we\n // only bundle each once.\n (exp as any).bundledAssets = [...new Set(allBundledAssets)];\n delete exp.assetBundlePatterns;\n\n return exp;\n}\n\nfunction logPatterns(patterns: string[]) {\n // Only log the patterns in debug mode, if they aren't already defined in the app.json, then all files will be targeted.\n Log.log('\\nProcessing asset bundle patterns:');\n patterns.forEach((p) => Log.log('- ' + p));\n}\n\nfunction shouldBundleAsset(asset: Asset, patterns: string[]) {\n const file = asset.files?.[0];\n return !!(\n '__packager_asset' in asset &&\n asset.__packager_asset &&\n file &&\n patterns.some((pattern) => minimatch(file, pattern))\n );\n}\n\nexport async function exportAssetsAsync(\n projectRoot: string,\n {\n exp,\n outputDir,\n bundles,\n }: {\n exp: ExpoConfig;\n bundles: Partial<Record<ModPlatform, BundleOutput>>;\n outputDir: string;\n }\n) {\n const assets: Asset[] = uniqBy(\n Object.values(bundles).flatMap((bundle) => bundle!.assets),\n (asset) => asset.hash\n );\n\n if (assets[0]?.fileHashes) {\n Log.log('Saving assets');\n await saveAssetsAsync(projectRoot, { assets, outputDir });\n }\n\n // Add google services file if it exists\n await resolveGoogleServicesFile(projectRoot, exp);\n\n // Updates the manifest to reflect additional asset bundling + configs\n await resolveAssetBundlePatternsAsync(projectRoot, exp, assets);\n\n return { exp, assets };\n}\n\nexport async function exportCssAssetsAsync({\n outputDir,\n bundles,\n basePath,\n}: {\n bundles: Partial<Record<ModPlatform, BundleOutput>>;\n outputDir: string;\n basePath: string;\n}) {\n const assets = uniqBy(\n Object.values(bundles).flatMap((bundle) => bundle!.css),\n (asset) => asset.filename\n );\n\n const cssDirectory = assets[0]?.filename;\n if (!cssDirectory) return [];\n\n await fs.promises.mkdir(path.join(outputDir, path.dirname(cssDirectory)), { recursive: true });\n\n await Promise.all(\n assets.map((v) => fs.promises.writeFile(path.join(outputDir, v.filename), v.source))\n );\n\n return assets.map((v) => basePath + '/' + v.filename);\n}\n"],"names":["resolveAssetBundlePatternsAsync","exportAssetsAsync","exportCssAssetsAsync","Log","debug","require","projectRoot","exp","assets","assetBundlePatterns","length","fullPatterns","map","p","path","join","logPatterns","allBundledAssets","asset","shouldBundle","shouldBundleAsset","files","fileHashes","hash","type","flat","bundledAssets","Set","patterns","log","forEach","file","__packager_asset","some","pattern","minimatch","outputDir","bundles","uniqBy","Object","values","flatMap","bundle","saveAssetsAsync","resolveGoogleServicesFile","basePath","css","filename","cssDirectory","fs","promises","mkdir","dirname","recursive","Promise","all","v","writeFile","source"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/export/exportAssets.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport { ModPlatform } from '@expo/config-plugins';\nimport fs from 'fs';\nimport minimatch from 'minimatch';\nimport path from 'path';\n\nimport { BundleOutput } from './fork-bundleAsync';\nimport { persistMetroAssetsAsync } from './persistMetroAssets';\nimport { Asset, saveAssetsAsync } from './saveAssets';\nimport * as Log from '../log';\nimport { resolveGoogleServicesFile } from '../start/server/middleware/resolveAssets';\nimport { uniqBy } from '../utils/array';\n\nconst debug = require('debug')('expo:export:exportAssets') as typeof console.log;\n\nfunction mapAssetHashToAssetString(asset: Asset, hash: string) {\n return 'asset_' + hash + ('type' in asset && asset.type ? '.' + asset.type : '');\n}\n\nexport function assetPatternsToBeBundled(\n exp: ExpoConfig & { extra?: { updates?: { assetPatternsToBeBundled?: string[] } } }\n): string[] | undefined {\n return exp?.extra?.updates?.assetPatternsToBeBundled?.length\n ? exp?.extra?.updates?.assetPatternsToBeBundled\n : undefined;\n}\n\n/**\n * Given an asset and a set of strings representing the assets to be bundled, returns true if\n * the asset is part of the set to be bundled.\n * @param asset Asset object\n * @param bundledAssetsSet Set of strings\n * @returns true if the asset should be bundled\n */\nfunction assetShouldBeIncludedInExport(asset: Asset, bundledAssetsSet: Set<string> | undefined) {\n if (!bundledAssetsSet) {\n return true;\n }\n return (\n asset.fileHashes.filter((hash) => bundledAssetsSet.has(mapAssetHashToAssetString(asset, hash)))\n .length > 0\n );\n}\n\n/**\n * Computes a set of strings representing the assets to be bundled with an export, given an array of assets,\n * and a set of patterns to match\n * @param assets The asset array\n * @param assetPatternsToBeBundled An array of strings with glob patterns to match\n * @param projectRoot The project root\n * @returns A set of asset strings\n */\nfunction setOfAssetsToBeBundled(\n assets: Asset[],\n assetPatternsToBeBundled: string[],\n projectRoot: string\n): Set<string> | undefined {\n // Convert asset patterns to a list of asset strings that match them.\n // Assets strings are formatted as `asset_<hash>.<type>` and represent\n // the name that the file will have in the app bundle. The `asset_` prefix is\n // needed because android doesn't support assets that start with numbers.\n\n const fullPatterns: string[] = assetPatternsToBeBundled.map((p: string) =>\n path.join(projectRoot, p)\n );\n\n logPatterns(fullPatterns);\n\n const allBundledAssets = assets\n .map((asset) => {\n const shouldBundle = shouldBundleAsset(asset, fullPatterns);\n if (shouldBundle) {\n debug(`${shouldBundle ? 'Include' : 'Exclude'} asset ${asset.files?.[0]}`);\n return asset.fileHashes.map((hash) => mapAssetHashToAssetString(asset, hash));\n }\n return [];\n })\n .flat();\n\n // The assets returned by the RN packager has duplicates so make sure we\n // only bundle each once.\n return new Set(allBundledAssets);\n}\n\n/**\n * Resolves the assetBundlePatterns from the manifest and returns the set of assets to bundle.\n *\n * @modifies {exp}\n */\nexport function resolveAssetPatternsToBeBundled<T extends ExpoConfig>(\n projectRoot: string,\n exp: T,\n assets: Asset[]\n): Set<string> | undefined {\n if (!assetPatternsToBeBundled(exp)) {\n return undefined;\n }\n const bundledAssets = setOfAssetsToBeBundled(\n assets,\n assetPatternsToBeBundled(exp) ?? ['**/*'],\n projectRoot\n );\n return bundledAssets;\n}\n\nfunction logPatterns(patterns: string[]) {\n // Only log the patterns in debug mode, if they aren't already defined in the app.json, then all files will be targeted.\n Log.log('\\nProcessing asset bundle patterns:');\n patterns.forEach((p) => Log.log('- ' + p));\n}\n\nfunction shouldBundleAsset(asset: Asset, patterns: string[]) {\n const file = asset.files?.[0];\n return !!(\n '__packager_asset' in asset &&\n asset.__packager_asset &&\n file &&\n patterns.some((pattern) => minimatch(file, pattern))\n );\n}\n\nexport async function exportAssetsAsync(\n projectRoot: string,\n {\n exp,\n outputDir,\n bundles: { web, ...bundles },\n baseUrl,\n }: {\n exp: ExpoConfig;\n bundles: Partial<Record<string, BundleOutput>>;\n outputDir: string;\n baseUrl: string;\n }\n) {\n // NOTE: We use a different system for static web\n if (web) {\n // Save assets like a typical bundler, preserving the file paths on web.\n // TODO: Update React Native Web to support loading files from asset hashes.\n await persistMetroAssetsAsync(web.assets, {\n platform: 'web',\n outputDirectory: outputDir,\n baseUrl,\n });\n }\n\n const assets: Asset[] = uniqBy(\n Object.values(bundles).flatMap((bundle) => bundle!.assets),\n (asset) => asset.hash\n );\n\n let bundledAssetsSet: Set<string> | undefined = undefined;\n let filteredAssets = assets;\n const embeddedHashSet: Set<string> = new Set();\n\n if (assets[0]?.fileHashes) {\n debug(`Assets = ${JSON.stringify(assets, null, 2)}`);\n // Updates the manifest to reflect additional asset bundling + configs\n // Get only asset strings for assets we will save\n bundledAssetsSet = resolveAssetPatternsToBeBundled(projectRoot, exp, assets);\n if (bundledAssetsSet) {\n debug(`Bundled assets = ${JSON.stringify([...bundledAssetsSet], null, 2)}`);\n // Filter asset objects to only ones that include assetPatternsToBeBundled matches\n filteredAssets = assets.filter((asset) => {\n const shouldInclude = assetShouldBeIncludedInExport(asset, bundledAssetsSet);\n if (!shouldInclude) {\n embeddedHashSet.add(asset.hash);\n }\n return shouldInclude;\n });\n debug(`Filtered assets count = ${filteredAssets.length}`);\n }\n Log.log('Saving assets');\n await saveAssetsAsync({ assets: filteredAssets, outputDir });\n }\n\n // Add google services file if it exists\n await resolveGoogleServicesFile(projectRoot, exp);\n\n return { exp, assets, embeddedHashSet };\n}\n\nexport async function exportCssAssetsAsync({\n outputDir,\n bundles,\n baseUrl,\n}: {\n bundles: Partial<Record<ModPlatform, BundleOutput>>;\n outputDir: string;\n baseUrl: string;\n}) {\n const assets = uniqBy(\n Object.values(bundles).flatMap((bundle) => bundle!.css),\n (asset) => asset.filename\n );\n\n const cssDirectory = assets[0]?.filename;\n if (!cssDirectory) return [];\n\n await fs.promises.mkdir(path.join(outputDir, path.dirname(cssDirectory)), { recursive: true });\n\n await Promise.all(\n assets.map((v) => fs.promises.writeFile(path.join(outputDir, v.filename), v.source))\n );\n\n return assets.map((v) => baseUrl + '/' + v.filename);\n}\n"],"names":["assetPatternsToBeBundled","resolveAssetPatternsToBeBundled","exportAssetsAsync","exportCssAssetsAsync","Log","debug","require","mapAssetHashToAssetString","asset","hash","type","exp","extra","updates","length","undefined","assetShouldBeIncludedInExport","bundledAssetsSet","fileHashes","filter","has","setOfAssetsToBeBundled","assets","projectRoot","fullPatterns","map","p","path","join","logPatterns","allBundledAssets","shouldBundle","shouldBundleAsset","files","flat","Set","bundledAssets","patterns","log","forEach","file","__packager_asset","some","pattern","minimatch","outputDir","bundles","web","baseUrl","persistMetroAssetsAsync","platform","outputDirectory","uniqBy","Object","values","flatMap","bundle","filteredAssets","embeddedHashSet","JSON","stringify","shouldInclude","add","saveAssetsAsync","resolveGoogleServicesFile","css","filename","cssDirectory","fs","promises","mkdir","dirname","recursive","Promise","all","v","writeFile","source"],"mappings":"AAAA;;;;QAmBgBA,wBAAwB,GAAxBA,wBAAwB;QAsExBC,+BAA+B,GAA/BA,+BAA+B;QAgCzBC,iBAAiB,GAAjBA,iBAAiB;QA6DjBC,oBAAoB,GAApBA,oBAAoB;AApL3B,IAAA,GAAI,kCAAJ,IAAI,EAAA;AACG,IAAA,UAAW,kCAAX,WAAW,EAAA;AAChB,IAAA,KAAM,kCAAN,MAAM,EAAA;AAGiB,IAAA,mBAAsB,WAAtB,sBAAsB,CAAA;AACvB,IAAA,WAAc,WAAd,cAAc,CAAA;AACzCC,IAAAA,GAAG,mCAAM,QAAQ,EAAd;AAC2B,IAAA,cAA0C,WAA1C,0CAA0C,CAAA;AAC7D,IAAA,MAAgB,WAAhB,gBAAgB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEvC,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,0BAA0B,CAAC,AAAsB,AAAC;AAEjF,SAASC,yBAAyB,CAACC,KAAY,EAAEC,IAAY,EAAE;IAC7D,OAAO,QAAQ,GAAGA,IAAI,GAAG,CAAC,MAAM,IAAID,KAAK,IAAIA,KAAK,CAACE,IAAI,GAAG,GAAG,GAAGF,KAAK,CAACE,IAAI,GAAG,EAAE,CAAC,CAAC;CAClF;AAEM,SAASV,wBAAwB,CACtCW,GAAmF,EAC7D;QACfA,GAAU,cACbA,IAAU;IADd,OAAOA,CAAAA,GAAG,QAAO,GAAVA,KAAAA,CAAU,GAAVA,CAAAA,GAAU,GAAVA,GAAG,CAAEC,KAAK,SAAA,GAAVD,KAAAA,CAAU,GAAVA,QAAAA,GAAU,CAAEE,OAAO,SAAT,GAAVF,KAAAA,CAAU,GAAVA,aAAqBX,wBAAwB,SAAnC,GAAVW,KAAAA,CAAU,QAAqCG,MAAM,AAA3C,CAAA,GACbH,GAAG,QAAO,GAAVA,KAAAA,CAAU,GAAVA,CAAAA,IAAU,GAAVA,GAAG,CAAEC,KAAK,SAAA,GAAVD,KAAAA,CAAU,GAAVA,QAAAA,IAAU,CAAEE,OAAO,SAAT,GAAVF,KAAAA,CAAU,QAAWX,wBAAwB,AAAnC,GACVe,SAAS,CAAC;CACf;AAED;;;;;;GAMG,CACH,SAASC,6BAA6B,CAACR,KAAY,EAAES,gBAAyC,EAAE;IAC9F,IAAI,CAACA,gBAAgB,EAAE;QACrB,OAAO,IAAI,CAAC;KACb;IACD,OACET,KAAK,CAACU,UAAU,CAACC,MAAM,CAAC,CAACV,IAAI,GAAKQ,gBAAgB,CAACG,GAAG,CAACb,yBAAyB,CAACC,KAAK,EAAEC,IAAI,CAAC,CAAC;IAAA,CAAC,CAC5FK,MAAM,GAAG,CAAC,CACb;CACH;AAED;;;;;;;GAOG,CACH,SAASO,sBAAsB,CAC7BC,MAAe,EACftB,yBAAkC,EAClCuB,WAAmB,EACM;IACzB,qEAAqE;IACrE,sEAAsE;IACtE,6EAA6E;IAC7E,yEAAyE;IAEzE,MAAMC,YAAY,GAAaxB,yBAAwB,CAACyB,GAAG,CAAC,CAACC,CAAS,GACpEC,KAAI,QAAA,CAACC,IAAI,CAACL,WAAW,EAAEG,CAAC,CAAC;IAAA,CAC1B,AAAC;IAEFG,WAAW,CAACL,YAAY,CAAC,CAAC;IAE1B,MAAMM,gBAAgB,GAAGR,MAAM,CAC5BG,GAAG,CAAC,CAACjB,KAAK,GAAK;QACd,MAAMuB,YAAY,GAAGC,iBAAiB,CAACxB,KAAK,EAAEgB,YAAY,CAAC,AAAC;QAC5D,IAAIO,YAAY,EAAE;gBACuCvB,GAAW;YAAlEH,KAAK,CAAC,CAAC,EAAE0B,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC,OAAO,EAAEvB,CAAAA,GAAW,GAAXA,KAAK,CAACyB,KAAK,SAAK,GAAhBzB,KAAAA,CAAgB,GAAhBA,GAAW,AAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,OAAOA,KAAK,CAACU,UAAU,CAACO,GAAG,CAAC,CAAChB,IAAI,GAAKF,yBAAyB,CAACC,KAAK,EAAEC,IAAI,CAAC;YAAA,CAAC,CAAC;SAC/E;QACD,OAAO,EAAE,CAAC;KACX,CAAC,CACDyB,IAAI,EAAE,AAAC;IAEV,wEAAwE;IACxE,yBAAyB;IACzB,OAAO,IAAIC,GAAG,CAACL,gBAAgB,CAAC,CAAC;CAClC;AAOM,SAAS7B,+BAA+B,CAC7CsB,WAAmB,EACnBZ,GAAM,EACNW,MAAe,EACU;IACzB,IAAI,CAACtB,wBAAwB,CAACW,GAAG,CAAC,EAAE;QAClC,OAAOI,SAAS,CAAC;KAClB;QAGCf,GAA6B;IAF/B,MAAMoC,aAAa,GAAGf,sBAAsB,CAC1CC,MAAM,EACNtB,CAAAA,GAA6B,GAA7BA,wBAAwB,CAACW,GAAG,CAAC,YAA7BX,GAA6B,GAAI;QAAC,MAAM;KAAC,EACzCuB,WAAW,CACZ,AAAC;IACF,OAAOa,aAAa,CAAC;CACtB;AAED,SAASP,WAAW,CAACQ,QAAkB,EAAE;IACvC,wHAAwH;IACxHjC,GAAG,CAACkC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAC/CD,QAAQ,CAACE,OAAO,CAAC,CAACb,CAAC,GAAKtB,GAAG,CAACkC,GAAG,CAAC,IAAI,GAAGZ,CAAC,CAAC;IAAA,CAAC,CAAC;CAC5C;AAED,SAASM,iBAAiB,CAACxB,KAAY,EAAE6B,QAAkB,EAAE;QAC9C7B,GAAW;IAAxB,MAAMgC,IAAI,GAAGhC,CAAAA,GAAW,GAAXA,KAAK,CAACyB,KAAK,SAAK,GAAhBzB,KAAAA,CAAgB,GAAhBA,GAAW,AAAE,CAAC,CAAC,CAAC,AAAC;IAC9B,OAAO,CAAC,CAAC,CACP,kBAAkB,IAAIA,KAAK,IAC3BA,KAAK,CAACiC,gBAAgB,IACtBD,IAAI,IACJH,QAAQ,CAACK,IAAI,CAAC,CAACC,OAAO,GAAKC,CAAAA,GAAAA,UAAS,AAAe,CAAA,QAAf,CAACJ,IAAI,EAAEG,OAAO,CAAC;IAAA,CAAC,CACrD,CAAC;CACH;AAEM,eAAezC,iBAAiB,CACrCqB,WAAmB,EACnB,EACEZ,GAAG,CAAA,EACHkC,SAAS,CAAA,EACTC,OAAO,EAAE,EAAEC,GAAG,CAAA,EAAE,GAAGD,OAAO,EAAE,CAAA,EAC5BE,OAAO,CAAA,EAMR,EACD;QAqBI1B,GAAS;IApBb,iDAAiD;IACjD,IAAIyB,GAAG,EAAE;QACP,wEAAwE;QACxE,4EAA4E;QAC5E,MAAME,CAAAA,GAAAA,mBAAuB,AAI3B,CAAA,wBAJ2B,CAACF,GAAG,CAACzB,MAAM,EAAE;YACxC4B,QAAQ,EAAE,KAAK;YACfC,eAAe,EAAEN,SAAS;YAC1BG,OAAO;SACR,CAAC,CAAC;KACJ;IAED,MAAM1B,MAAM,GAAY8B,CAAAA,GAAAA,MAAM,AAG7B,CAAA,OAH6B,CAC5BC,MAAM,CAACC,MAAM,CAACR,OAAO,CAAC,CAACS,OAAO,CAAC,CAACC,MAAM,GAAKA,MAAM,CAAElC,MAAM;IAAA,CAAC,EAC1D,CAACd,KAAK,GAAKA,KAAK,CAACC,IAAI;IAAA,CACtB,AAAC;IAEF,IAAIQ,gBAAgB,GAA4BF,SAAS,AAAC;IAC1D,IAAI0C,cAAc,GAAGnC,MAAM,AAAC;IAC5B,MAAMoC,eAAe,GAAgB,IAAIvB,GAAG,EAAE,AAAC;IAE/C,IAAIb,CAAAA,GAAS,GAATA,MAAM,CAAC,CAAC,CAAC,SAAY,GAArBA,KAAAA,CAAqB,GAArBA,GAAS,CAAEJ,UAAU,EAAE;QACzBb,KAAK,CAAC,CAAC,SAAS,EAAEsD,IAAI,CAACC,SAAS,CAACtC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,sEAAsE;QACtE,iDAAiD;QACjDL,gBAAgB,GAAGhB,+BAA+B,CAACsB,WAAW,EAAEZ,GAAG,EAAEW,MAAM,CAAC,CAAC;QAC7E,IAAIL,gBAAgB,EAAE;YACpBZ,KAAK,CAAC,CAAC,iBAAiB,EAAEsD,IAAI,CAACC,SAAS,CAAC;mBAAI3C,gBAAgB;aAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,kFAAkF;YAClFwC,cAAc,GAAGnC,MAAM,CAACH,MAAM,CAAC,CAACX,KAAK,GAAK;gBACxC,MAAMqD,aAAa,GAAG7C,6BAA6B,CAACR,KAAK,EAAES,gBAAgB,CAAC,AAAC;gBAC7E,IAAI,CAAC4C,aAAa,EAAE;oBAClBH,eAAe,CAACI,GAAG,CAACtD,KAAK,CAACC,IAAI,CAAC,CAAC;iBACjC;gBACD,OAAOoD,aAAa,CAAC;aACtB,CAAC,CAAC;YACHxD,KAAK,CAAC,CAAC,wBAAwB,EAAEoD,cAAc,CAAC3C,MAAM,CAAC,CAAC,CAAC,CAAC;SAC3D;QACDV,GAAG,CAACkC,GAAG,CAAC,eAAe,CAAC,CAAC;QACzB,MAAMyB,CAAAA,GAAAA,WAAe,AAAuC,CAAA,gBAAvC,CAAC;YAAEzC,MAAM,EAAEmC,cAAc;YAAEZ,SAAS;SAAE,CAAC,CAAC;KAC9D;IAED,wCAAwC;IACxC,MAAMmB,CAAAA,GAAAA,cAAyB,AAAkB,CAAA,0BAAlB,CAACzC,WAAW,EAAEZ,GAAG,CAAC,CAAC;IAElD,OAAO;QAAEA,GAAG;QAAEW,MAAM;QAAEoC,eAAe;KAAE,CAAC;CACzC;AAEM,eAAevD,oBAAoB,CAAC,EACzC0C,SAAS,CAAA,EACTC,OAAO,CAAA,EACPE,OAAO,CAAA,EAKR,EAAE;QAMoB1B,GAAS;IAL9B,MAAMA,MAAM,GAAG8B,CAAAA,GAAAA,MAAM,AAGpB,CAAA,OAHoB,CACnBC,MAAM,CAACC,MAAM,CAACR,OAAO,CAAC,CAACS,OAAO,CAAC,CAACC,MAAM,GAAKA,MAAM,CAAES,GAAG;IAAA,CAAC,EACvD,CAACzD,KAAK,GAAKA,KAAK,CAAC0D,QAAQ;IAAA,CAC1B,AAAC;IAEF,MAAMC,YAAY,GAAG7C,CAAAA,GAAS,GAATA,MAAM,CAAC,CAAC,CAAC,SAAU,GAAnBA,KAAAA,CAAmB,GAAnBA,GAAS,CAAE4C,QAAQ,AAAC;IACzC,IAAI,CAACC,YAAY,EAAE,OAAO,EAAE,CAAC;IAE7B,MAAMC,GAAE,QAAA,CAACC,QAAQ,CAACC,KAAK,CAAC3C,KAAI,QAAA,CAACC,IAAI,CAACiB,SAAS,EAAElB,KAAI,QAAA,CAAC4C,OAAO,CAACJ,YAAY,CAAC,CAAC,EAAE;QAAEK,SAAS,EAAE,IAAI;KAAE,CAAC,CAAC;IAE/F,MAAMC,OAAO,CAACC,GAAG,CACfpD,MAAM,CAACG,GAAG,CAAC,CAACkD,CAAC,GAAKP,GAAE,QAAA,CAACC,QAAQ,CAACO,SAAS,CAACjD,KAAI,QAAA,CAACC,IAAI,CAACiB,SAAS,EAAE8B,CAAC,CAACT,QAAQ,CAAC,EAAES,CAAC,CAACE,MAAM,CAAC;IAAA,CAAC,CACrF,CAAC;IAEF,OAAOvD,MAAM,CAACG,GAAG,CAAC,CAACkD,CAAC,GAAK3B,OAAO,GAAG,GAAG,GAAG2B,CAAC,CAACT,QAAQ;IAAA,CAAC,CAAC;CACtD"}
@@ -14,10 +14,11 @@ exports.isHermesBytecodeBundleAsync = isHermesBytecodeBundleAsync;
14
14
  exports.getHermesBytecodeBundleVersionAsync = getHermesBytecodeBundleVersionAsync;
15
15
  var _spawnAsync = _interopRequireDefault(require("@expo/spawn-async"));
16
16
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
17
+ var _metroSourceMap = require("metro-source-map");
17
18
  var _os = _interopRequireDefault(require("os"));
18
19
  var _path = _interopRequireDefault(require("path"));
19
20
  var _process = _interopRequireDefault(require("process"));
20
- var _resolveFromProject = require("../start/server/metro/resolveFromProject");
21
+ var _resolveFrom = _interopRequireDefault(require("resolve-from"));
21
22
  function _interopRequireDefault(obj) {
22
23
  return obj && obj.__esModule ? obj : {
23
24
  default: obj
@@ -37,7 +38,7 @@ function importHermesCommandFromProject(projectRoot) {
37
38
  ];
38
39
  for (const location of hermescLocations){
39
40
  try {
40
- return (0, _resolveFromProject).resolveFromProject(projectRoot, location);
41
+ return (0, _resolveFrom).default(projectRoot, location);
41
42
  } catch {}
42
43
  }
43
44
  throw new Error("Cannot find the hermesc executable.");
@@ -116,10 +117,9 @@ async function buildHermesBundleAsync(projectRoot, { code , map , minify =false
116
117
  }
117
118
  }
118
119
  async function createHermesSourcemapAsync(projectRoot, sourcemap, hermesMapFile) {
119
- const composeSourceMaps = (0, _resolveFromProject).importMetroSourceMapComposeSourceMapsFromProject(projectRoot);
120
120
  const bundlerSourcemap = JSON.parse(sourcemap);
121
121
  const hermesSourcemap = await _fsExtra.default.readJSON(hermesMapFile);
122
- return JSON.stringify(composeSourceMaps([
122
+ return JSON.stringify((0, _metroSourceMap).composeSourceMaps([
123
123
  bundlerSourcemap,
124
124
  hermesSourcemap
125
125
  ]));