metro 0.66.2 → 0.69.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 (255) hide show
  1. package/package.json +22 -24
  2. package/src/Assets.js +9 -9
  3. package/src/Assets.js.flow +5 -7
  4. package/src/Bundler/util.js +16 -15
  5. package/src/Bundler/util.js.flow +11 -10
  6. package/src/Bundler.js +21 -8
  7. package/src/Bundler.js.flow +19 -7
  8. package/src/DeltaBundler/DeltaCalculator.js +15 -15
  9. package/src/DeltaBundler/DeltaCalculator.js.flow +7 -7
  10. package/src/DeltaBundler/Serializers/baseBytecodeBundle.js +13 -13
  11. package/src/DeltaBundler/Serializers/baseBytecodeBundle.js.flow +6 -7
  12. package/src/DeltaBundler/Serializers/baseJSBundle.js +4 -4
  13. package/src/DeltaBundler/Serializers/baseJSBundle.js.flow +4 -4
  14. package/src/DeltaBundler/Serializers/getAllFiles.js +1 -1
  15. package/src/DeltaBundler/Serializers/getAllFiles.js.flow +3 -3
  16. package/src/DeltaBundler/Serializers/getAssets.js +3 -3
  17. package/src/DeltaBundler/Serializers/getAssets.js.flow +4 -5
  18. package/src/DeltaBundler/Serializers/getExplodedSourceMap.js +4 -4
  19. package/src/DeltaBundler/Serializers/getExplodedSourceMap.js.flow +4 -4
  20. package/src/DeltaBundler/Serializers/getRamBundleInfo.js +20 -20
  21. package/src/DeltaBundler/Serializers/getRamBundleInfo.js.flow +9 -10
  22. package/src/DeltaBundler/Serializers/helpers/bytecode.js +11 -11
  23. package/src/DeltaBundler/Serializers/helpers/bytecode.js.flow +5 -6
  24. package/src/DeltaBundler/Serializers/helpers/getInlineSourceMappingURL.js +1 -1
  25. package/src/DeltaBundler/Serializers/helpers/getInlineSourceMappingURL.js.flow +1 -1
  26. package/src/DeltaBundler/Serializers/helpers/getSourceMapInfo.js +2 -2
  27. package/src/DeltaBundler/Serializers/helpers/getSourceMapInfo.js.flow +4 -4
  28. package/src/DeltaBundler/Serializers/helpers/getTransitiveDependencies.js +1 -1
  29. package/src/DeltaBundler/Serializers/helpers/getTransitiveDependencies.js.flow +1 -1
  30. package/src/DeltaBundler/Serializers/helpers/js.js +6 -6
  31. package/src/DeltaBundler/Serializers/helpers/js.js.flow +11 -12
  32. package/src/DeltaBundler/Serializers/helpers/processBytecodeModules.js +4 -4
  33. package/src/DeltaBundler/Serializers/helpers/processBytecodeModules.js.flow +3 -3
  34. package/src/DeltaBundler/Serializers/helpers/processModules.js +4 -4
  35. package/src/DeltaBundler/Serializers/helpers/processModules.js.flow +3 -3
  36. package/src/DeltaBundler/Serializers/hmrJSBundle.js +9 -9
  37. package/src/DeltaBundler/Serializers/hmrJSBundle.js.flow +9 -8
  38. package/src/DeltaBundler/Serializers/sourceMapGenerator.js +6 -6
  39. package/src/DeltaBundler/Serializers/sourceMapGenerator.js.flow +3 -4
  40. package/src/DeltaBundler/Serializers/sourceMapObject.js +5 -5
  41. package/src/DeltaBundler/Serializers/sourceMapObject.js.flow +4 -4
  42. package/src/DeltaBundler/Serializers/sourceMapString.js +2 -2
  43. package/src/DeltaBundler/Serializers/sourceMapString.js.flow +3 -3
  44. package/src/DeltaBundler/Transformer.js +9 -9
  45. package/src/DeltaBundler/Transformer.js.flow +7 -9
  46. package/src/DeltaBundler/Worker.js +8 -11
  47. package/src/DeltaBundler/Worker.js.flow +8 -11
  48. package/src/DeltaBundler/WorkerFarm.js +14 -17
  49. package/src/DeltaBundler/WorkerFarm.js.flow +7 -10
  50. package/src/DeltaBundler/__fixtures__/hasteImpl.js +2 -2
  51. package/src/DeltaBundler/computeDelta.js +2 -2
  52. package/src/DeltaBundler/computeDelta.js.flow +2 -2
  53. package/src/DeltaBundler/getTransformCacheKey.js +4 -4
  54. package/src/DeltaBundler/getTransformCacheKey.js.flow +5 -6
  55. package/src/DeltaBundler/mergeDeltas.js +2 -2
  56. package/src/DeltaBundler/mergeDeltas.js.flow +1 -1
  57. package/src/DeltaBundler/traverseDependencies.js +22 -22
  58. package/src/DeltaBundler/traverseDependencies.js.flow +3 -3
  59. package/src/DeltaBundler/types.flow.js +1 -1
  60. package/src/DeltaBundler/types.flow.js.flow +1 -1
  61. package/src/DeltaBundler.js +5 -5
  62. package/src/DeltaBundler.js.flow +4 -4
  63. package/src/HmrServer.js +71 -55
  64. package/src/HmrServer.js.flow +40 -37
  65. package/src/IncrementalBundler/GraphNotFoundError.js +1 -1
  66. package/src/IncrementalBundler/GraphNotFoundError.js.flow +1 -1
  67. package/src/IncrementalBundler/ResourceNotFoundError.js +1 -1
  68. package/src/IncrementalBundler/ResourceNotFoundError.js.flow +1 -1
  69. package/src/IncrementalBundler/RevisionNotFoundError.js +1 -1
  70. package/src/IncrementalBundler/RevisionNotFoundError.js.flow +1 -1
  71. package/src/IncrementalBundler.js +44 -32
  72. package/src/IncrementalBundler.js.flow +30 -24
  73. package/src/ModuleGraph/module.js +3 -3
  74. package/src/ModuleGraph/module.js.flow +1 -1
  75. package/src/ModuleGraph/node-haste/HasteFS.js +2 -2
  76. package/src/ModuleGraph/node-haste/HasteFS.js.flow +1 -1
  77. package/src/ModuleGraph/node-haste/Module.js +1 -1
  78. package/src/ModuleGraph/node-haste/Module.js.flow +1 -1
  79. package/src/ModuleGraph/node-haste/ModuleCache.js +1 -1
  80. package/src/ModuleGraph/node-haste/ModuleCache.js.flow +3 -3
  81. package/src/ModuleGraph/node-haste/Package.js +3 -3
  82. package/src/ModuleGraph/node-haste/Package.js.flow +3 -3
  83. package/src/ModuleGraph/node-haste/node-haste.flow.js +1 -1
  84. package/src/ModuleGraph/node-haste/node-haste.flow.js.flow +1 -1
  85. package/src/ModuleGraph/node-haste/node-haste.js +42 -32
  86. package/src/ModuleGraph/node-haste/node-haste.js.flow +28 -23
  87. package/src/ModuleGraph/output/indexed-ram-bundle.js +17 -17
  88. package/src/ModuleGraph/output/indexed-ram-bundle.js.flow +41 -9
  89. package/src/ModuleGraph/output/multiple-files-ram-bundle.js +18 -18
  90. package/src/ModuleGraph/output/multiple-files-ram-bundle.js.flow +21 -9
  91. package/src/ModuleGraph/output/plain-bundle.js +6 -6
  92. package/src/ModuleGraph/output/plain-bundle.js.flow +7 -7
  93. package/src/ModuleGraph/output/reverse-dependency-map-references.js +3 -3
  94. package/src/ModuleGraph/output/reverse-dependency-map-references.js.flow +4 -8
  95. package/src/ModuleGraph/output/util.js +31 -30
  96. package/src/ModuleGraph/output/util.js.flow +15 -16
  97. package/src/ModuleGraph/silent-console.js +2 -2
  98. package/src/ModuleGraph/silent-console.js.flow +1 -1
  99. package/src/ModuleGraph/test-helpers.js +7 -7
  100. package/src/ModuleGraph/types.flow.js +1 -1
  101. package/src/ModuleGraph/types.flow.js.flow +7 -7
  102. package/src/ModuleGraph/worker/JsFileWrapping.js +7 -7
  103. package/src/ModuleGraph/worker/JsFileWrapping.js.flow +3 -2
  104. package/src/ModuleGraph/worker/Platforms.js +2 -2
  105. package/src/ModuleGraph/worker/Platforms.js.flow +1 -1
  106. package/src/ModuleGraph/worker/collectDependencies.js +24 -25
  107. package/src/ModuleGraph/worker/collectDependencies.js.flow +15 -17
  108. package/src/ModuleGraph/worker/generate.js +2 -2
  109. package/src/ModuleGraph/worker/generate.js.flow +3 -3
  110. package/src/ModuleGraph/worker/generateImportNames.js +5 -5
  111. package/src/ModuleGraph/worker/generateImportNames.js.flow +3 -5
  112. package/src/ModuleGraph/worker/mergeSourceMaps.js +8 -7
  113. package/src/ModuleGraph/worker/mergeSourceMaps.js.flow +3 -3
  114. package/src/Server/MultipartResponse.js +4 -8
  115. package/src/Server/symbolicate.js +8 -8
  116. package/src/Server/symbolicate.js.flow +17 -5
  117. package/src/Server.js +202 -150
  118. package/src/Server.js.flow +129 -87
  119. package/src/cli-utils.js +4 -4
  120. package/src/cli-utils.js.flow +15 -13
  121. package/src/cli.js +4 -4
  122. package/src/cli.js.flow +2 -4
  123. package/src/commands/build.js +23 -24
  124. package/src/commands/build.js.flow +6 -9
  125. package/src/commands/dependencies.js +25 -19
  126. package/src/commands/serve.js +17 -18
  127. package/src/commands/serve.js.flow +6 -9
  128. package/src/index.js +116 -51
  129. package/src/index.js.flow +107 -41
  130. package/src/integration_tests/basic_bundle/AssetRegistry.js +2 -2
  131. package/src/integration_tests/basic_bundle/AssetRegistry.js.flow +1 -1
  132. package/src/integration_tests/basic_bundle/Bar.js +2 -2
  133. package/src/integration_tests/basic_bundle/Bar.js.flow +1 -1
  134. package/src/integration_tests/basic_bundle/ErrorBundle.js +2 -2
  135. package/src/integration_tests/basic_bundle/ErrorBundle.js.flow +1 -1
  136. package/src/integration_tests/basic_bundle/Foo.js +2 -2
  137. package/src/integration_tests/basic_bundle/Foo.js.flow +1 -1
  138. package/src/integration_tests/basic_bundle/TestBundle.js +3 -2
  139. package/src/integration_tests/basic_bundle/TestBundle.js.flow +3 -1
  140. package/src/integration_tests/basic_bundle/TestPolyfill.js +1 -1
  141. package/src/integration_tests/basic_bundle/TestPolyfill.js.flow +1 -1
  142. package/src/integration_tests/basic_bundle/TypeScript.ts +1 -1
  143. package/src/integration_tests/basic_bundle/import-export/export-1.js +2 -2
  144. package/src/integration_tests/basic_bundle/import-export/export-1.js.flow +1 -1
  145. package/src/integration_tests/basic_bundle/import-export/export-2.js +2 -2
  146. package/src/integration_tests/basic_bundle/import-export/export-2.js.flow +1 -1
  147. package/src/integration_tests/basic_bundle/import-export/export-3.js +2 -2
  148. package/src/integration_tests/basic_bundle/import-export/export-3.js.flow +1 -1
  149. package/src/integration_tests/basic_bundle/import-export/export-4.js +2 -2
  150. package/src/integration_tests/basic_bundle/import-export/export-4.js.flow +1 -1
  151. package/src/integration_tests/basic_bundle/import-export/export-5.js +2 -2
  152. package/src/integration_tests/basic_bundle/import-export/export-5.js.flow +1 -1
  153. package/src/integration_tests/basic_bundle/import-export/export-6.js +2 -2
  154. package/src/integration_tests/basic_bundle/import-export/export-6.js.flow +1 -1
  155. package/src/integration_tests/basic_bundle/import-export/export-null.js +2 -2
  156. package/src/integration_tests/basic_bundle/import-export/export-null.js.flow +1 -1
  157. package/src/integration_tests/basic_bundle/import-export/export-primitive-default.js +2 -2
  158. package/src/integration_tests/basic_bundle/import-export/export-primitive-default.js.flow +1 -1
  159. package/src/integration_tests/basic_bundle/import-export/index.js +8 -8
  160. package/src/integration_tests/basic_bundle/import-export/index.js.flow +1 -1
  161. package/src/integration_tests/basic_bundle/polyfill.js +1 -1
  162. package/src/integration_tests/execBundle.js +2 -2
  163. package/src/integration_tests/execBundle.js.flow +1 -1
  164. package/src/integration_tests/metro.config.js +8 -8
  165. package/src/lib/BatchProcessor.js +3 -3
  166. package/src/lib/BatchProcessor.js.flow +1 -1
  167. package/src/lib/JsonReporter.js +2 -2
  168. package/src/lib/JsonReporter.js.flow +1 -1
  169. package/src/lib/RamBundleParser.js +1 -1
  170. package/src/lib/RamBundleParser.js.flow +1 -1
  171. package/src/lib/TerminalReporter.js +14 -14
  172. package/src/lib/TerminalReporter.js.flow +9 -10
  173. package/src/lib/bundleToBytecode.js +6 -7
  174. package/src/lib/bundleToBytecode.js.flow +8 -7
  175. package/src/lib/bundleToString.js +3 -3
  176. package/src/lib/bundleToString.js.flow +5 -4
  177. package/src/lib/countLines.js +3 -7
  178. package/src/lib/countLines.js.flow +4 -7
  179. package/src/lib/createModuleIdFactory.js +2 -2
  180. package/src/lib/createModuleIdFactory.js.flow +1 -1
  181. package/src/lib/{attachWebsocketServer.js → createWebsocketServer.js} +18 -17
  182. package/src/lib/{attachWebsocketServer.js.flow → createWebsocketServer.js.flow} +12 -21
  183. package/src/lib/debounceAsyncQueue.js +2 -2
  184. package/src/lib/debounceAsyncQueue.js.flow +1 -1
  185. package/src/lib/formatBundlingError.js +21 -21
  186. package/src/lib/formatBundlingError.js.flow +6 -8
  187. package/src/lib/getAppendScripts.js +26 -27
  188. package/src/lib/getAppendScripts.js.flow +7 -8
  189. package/src/lib/getGraphId.js +3 -3
  190. package/src/lib/getGraphId.js.flow +3 -3
  191. package/src/lib/getMaxWorkers.js +2 -2
  192. package/src/lib/getMaxWorkers.js.flow +1 -1
  193. package/src/lib/getPreludeCode.js +2 -2
  194. package/src/lib/getPreludeCode.js.flow +1 -1
  195. package/src/lib/getPrependedScripts.js +15 -15
  196. package/src/lib/getPrependedScripts.js.flow +7 -8
  197. package/src/lib/logToConsole.js +1 -1
  198. package/src/lib/logToConsole.js.flow +3 -3
  199. package/src/lib/parseCustomTransformOptions.js +2 -2
  200. package/src/lib/parseCustomTransformOptions.js.flow +3 -3
  201. package/src/lib/parseOptionsFromUrl.js +7 -7
  202. package/src/lib/parseOptionsFromUrl.js.flow +29 -9
  203. package/src/lib/relativizeSourceMap.js +1 -1
  204. package/src/lib/relativizeSourceMap.js.flow +3 -3
  205. package/src/lib/reporting.js +5 -5
  206. package/src/lib/reporting.js.flow +16 -3
  207. package/src/lib/splitBundleOptions.js +5 -5
  208. package/src/lib/splitBundleOptions.js.flow +1 -1
  209. package/src/lib/transformHelpers.js +10 -10
  210. package/src/lib/transformHelpers.js.flow +5 -5
  211. package/src/node-haste/DependencyGraph/ModuleResolution.js +51 -30
  212. package/src/node-haste/DependencyGraph/ModuleResolution.js.flow +46 -42
  213. package/src/node-haste/DependencyGraph/createHasteMap.js +99 -0
  214. package/src/node-haste/DependencyGraph/createHasteMap.js.flow +88 -0
  215. package/src/node-haste/DependencyGraph/{assets/empty-module.js → types.js} +2 -2
  216. package/src/node-haste/DependencyGraph/types.js.flow +88 -0
  217. package/src/node-haste/DependencyGraph.js +49 -117
  218. package/src/node-haste/DependencyGraph.js.flow +36 -111
  219. package/src/node-haste/Module.js +1 -1
  220. package/src/node-haste/Module.js.flow +3 -3
  221. package/src/node-haste/ModuleCache.js +54 -13
  222. package/src/node-haste/ModuleCache.js.flow +53 -12
  223. package/src/node-haste/Package.js +7 -9
  224. package/src/node-haste/Package.js.flow +1 -8
  225. package/src/node-haste/lib/AssetPaths.js +5 -5
  226. package/src/node-haste/lib/AssetPaths.js.flow +2 -4
  227. package/src/node-haste/lib/parsePlatformFilePath.js +4 -4
  228. package/src/node-haste/lib/parsePlatformFilePath.js.flow +1 -1
  229. package/src/shared/output/RamBundle/as-assets.js +16 -17
  230. package/src/shared/output/RamBundle/as-assets.js.flow +11 -15
  231. package/src/shared/output/RamBundle/as-indexed-file.js +14 -15
  232. package/src/shared/output/RamBundle/as-indexed-file.js.flow +8 -12
  233. package/src/shared/output/RamBundle/buildSourcemapWithMetadata.js +7 -7
  234. package/src/shared/output/RamBundle/buildSourcemapWithMetadata.js.flow +4 -4
  235. package/src/shared/output/RamBundle/magic-number.js +1 -1
  236. package/src/shared/output/RamBundle/magic-number.js.flow +1 -1
  237. package/src/shared/output/RamBundle/util.js +21 -19
  238. package/src/shared/output/RamBundle/util.js.flow +5 -8
  239. package/src/shared/output/RamBundle/write-sourcemap.js +1 -1
  240. package/src/shared/output/RamBundle/write-sourcemap.js.flow +1 -1
  241. package/src/shared/output/RamBundle.js +2 -2
  242. package/src/shared/output/RamBundle.js.flow +4 -5
  243. package/src/shared/output/bundle.js +6 -6
  244. package/src/shared/output/bundle.js.flow +4 -5
  245. package/src/shared/output/meta.js +4 -5
  246. package/src/shared/output/meta.js.flow +2 -4
  247. package/src/shared/output/unbundle.js +1 -1
  248. package/src/shared/output/unbundle.js.flow +1 -1
  249. package/src/shared/output/writeFile.js +1 -1
  250. package/src/shared/output/writeFile.js.flow +1 -1
  251. package/src/shared/types.flow.js +1 -1
  252. package/src/shared/types.flow.js.flow +2 -2
  253. package/src/node-haste/DependencyGraph/assets/empty-module.js.flow +0 -9
  254. package/src/node-haste/types.js +0 -10
  255. package/src/node-haste/types.js.flow +0 -23
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -9,47 +9,14 @@
9
9
  */
10
10
 
11
11
  'use strict';
12
- const IncrementalBundler = require('./IncrementalBundler');
13
- const MultipartResponse = require('./Server/MultipartResponse');
14
- const ResourceNotFoundError = require('./IncrementalBundler/ResourceNotFoundError');
15
-
16
- const baseBytecodeBundle = require('./DeltaBundler/Serializers/baseBytecodeBundle');
17
- const baseJSBundle = require('./DeltaBundler/Serializers/baseJSBundle');
18
- const bundleToBytecode = require('./lib/bundleToBytecode');
19
- const bundleToString = require('./lib/bundleToString');
20
-
21
- const {codeFrameColumns} = require('@babel/code-frame');
22
- const debug = require('debug')('Metro:Server');
23
- const formatBundlingError = require('./lib/formatBundlingError');
24
- const fs = require('graceful-fs');
25
- const getAllFiles = require('./DeltaBundler/Serializers/getAllFiles');
26
- const getAssets = require('./DeltaBundler/Serializers/getAssets');
27
- const getGraphId = require('./lib/getGraphId');
28
- const getRamBundleInfo = require('./DeltaBundler/Serializers/getRamBundleInfo');
29
- const mime = require('mime-types');
30
- const parseOptionsFromUrl = require('./lib/parseOptionsFromUrl');
31
- const parsePlatformFilePath = require('./node-haste/lib/parsePlatformFilePath');
32
- const path = require('path');
33
- const sourceMapString = require('./DeltaBundler/Serializers/sourceMapString');
34
- const splitBundleOptions = require('./lib/splitBundleOptions');
35
- const symbolicate = require('./Server/symbolicate');
36
- const transformHelpers = require('./lib/transformHelpers');
37
- const url = require('url');
38
-
39
- const {VERSION: BYTECODE_VERSION} = require('metro-hermes-compiler');
40
- const {getAsset} = require('./Assets');
41
- const {
42
- getExplodedSourceMap,
43
- } = require('./DeltaBundler/Serializers/getExplodedSourceMap');
44
- const {
45
- Logger,
46
- Logger: {createActionStartEntry, createActionEndEntry, log},
47
- } = require('metro-core');
48
-
49
12
  import type {AssetData} from './Assets';
50
13
  import type {ExplodedSourceMap} from './DeltaBundler/Serializers/getExplodedSourceMap';
51
14
  import type {RamBundleInfo} from './DeltaBundler/Serializers/getRamBundleInfo';
52
- import type {Graph, Module} from './DeltaBundler/types.flow';
15
+ import type {
16
+ Graph,
17
+ Module,
18
+ TransformInputOptions,
19
+ } from './DeltaBundler/types.flow';
53
20
  import type {MixedOutput, TransformResult} from './DeltaBundler/types.flow';
54
21
  import type {RevisionId} from './IncrementalBundler';
55
22
  import type {GraphId} from './lib/getGraphId';
@@ -68,6 +35,42 @@ import type {
68
35
  LogEntry,
69
36
  } from 'metro-core/src/Logger';
70
37
 
38
+ const {getAsset} = require('./Assets');
39
+ const baseBytecodeBundle = require('./DeltaBundler/Serializers/baseBytecodeBundle');
40
+ const baseJSBundle = require('./DeltaBundler/Serializers/baseJSBundle');
41
+ const getAllFiles = require('./DeltaBundler/Serializers/getAllFiles');
42
+ const getAssets = require('./DeltaBundler/Serializers/getAssets');
43
+ const {
44
+ getExplodedSourceMap,
45
+ } = require('./DeltaBundler/Serializers/getExplodedSourceMap');
46
+ const getRamBundleInfo = require('./DeltaBundler/Serializers/getRamBundleInfo');
47
+ const sourceMapString = require('./DeltaBundler/Serializers/sourceMapString');
48
+ const IncrementalBundler = require('./IncrementalBundler');
49
+ const ResourceNotFoundError = require('./IncrementalBundler/ResourceNotFoundError');
50
+ const bundleToBytecode = require('./lib/bundleToBytecode');
51
+ const bundleToString = require('./lib/bundleToString');
52
+ const formatBundlingError = require('./lib/formatBundlingError');
53
+ const getGraphId = require('./lib/getGraphId');
54
+ const parseOptionsFromUrl = require('./lib/parseOptionsFromUrl');
55
+ const splitBundleOptions = require('./lib/splitBundleOptions');
56
+ const transformHelpers = require('./lib/transformHelpers');
57
+ const parsePlatformFilePath = require('./node-haste/lib/parsePlatformFilePath');
58
+ const MultipartResponse = require('./Server/MultipartResponse');
59
+ const symbolicate = require('./Server/symbolicate');
60
+ const {codeFrameColumns} = require('@babel/code-frame');
61
+ const debug = require('debug')('Metro:Server');
62
+ const fs = require('graceful-fs');
63
+ const {
64
+ Logger,
65
+ Logger: {createActionStartEntry, createActionEndEntry, log},
66
+ } = require('metro-core');
67
+ const {VERSION: BYTECODE_VERSION} = require('metro-hermes-compiler');
68
+ const mime = require('mime-types');
69
+ const nullthrows = require('nullthrows');
70
+ const path = require('path');
71
+ const querystring = require('querystring');
72
+ const url = require('url');
73
+
71
74
  export type SegmentLoadData = {[number]: [Array<number>, ?number], ...};
72
75
  export type BundleMetadata = {
73
76
  hash: string,
@@ -164,9 +167,7 @@ class Server {
164
167
  return this._createModuleId;
165
168
  }
166
169
 
167
- async build(
168
- options: BundleOptions,
169
- ): Promise<{
170
+ async build(options: BundleOptions): Promise<{
170
171
  code: string,
171
172
  map: string,
172
173
  ...
@@ -188,12 +189,12 @@ class Server {
188
189
  },
189
190
  );
190
191
 
191
- const entryPoint = path.resolve(this._config.projectRoot, entryFile);
192
+ const entryPoint = this._getEntryPointAbsolutePath(entryFile);
192
193
 
193
194
  const bundleOptions = {
194
195
  asyncRequireModulePath: await this._resolveRelativePath(
195
196
  this._config.transformer.asyncRequireModulePath,
196
- {transformOptions},
197
+ {transformOptions, relativeTo: 'project'},
197
198
  ),
198
199
  processModuleFilter: this._config.serializer.processModuleFilter,
199
200
  createModuleId: this._createModuleId,
@@ -201,9 +202,10 @@ class Server {
201
202
  dev: transformOptions.dev,
202
203
  projectRoot: this._config.projectRoot,
203
204
  modulesOnly: serializerOptions.modulesOnly,
204
- runBeforeMainModule: this._config.serializer.getModulesRunBeforeMainModule(
205
- path.relative(this._config.projectRoot, entryPoint),
206
- ),
205
+ runBeforeMainModule:
206
+ this._config.serializer.getModulesRunBeforeMainModule(
207
+ path.relative(this._config.projectRoot, entryPoint),
208
+ ),
207
209
  runModule: serializerOptions.runModule,
208
210
  sourceMapUrl: serializerOptions.sourceMapUrl,
209
211
  sourceUrl: serializerOptions.sourceUrl,
@@ -259,12 +261,12 @@ class Server {
259
261
  {onProgress, shallow: graphOptions.shallow},
260
262
  );
261
263
 
262
- const entryPoint = path.resolve(this._config.projectRoot, entryFile);
264
+ const entryPoint = this._getEntryPointAbsolutePath(entryFile);
263
265
 
264
266
  return await getRamBundleInfo(entryPoint, prepend, graph, {
265
267
  asyncRequireModulePath: await this._resolveRelativePath(
266
268
  this._config.transformer.asyncRequireModulePath,
267
- {transformOptions},
269
+ {transformOptions, relativeTo: 'project'},
268
270
  ),
269
271
  processModuleFilter: this._config.serializer.processModuleFilter,
270
272
  createModuleId: this._createModuleId,
@@ -275,9 +277,10 @@ class Server {
275
277
  platform: transformOptions.platform,
276
278
  projectRoot: this._config.projectRoot,
277
279
  modulesOnly: serializerOptions.modulesOnly,
278
- runBeforeMainModule: this._config.serializer.getModulesRunBeforeMainModule(
279
- path.relative(this._config.projectRoot, entryPoint),
280
- ),
280
+ runBeforeMainModule:
281
+ this._config.serializer.getModulesRunBeforeMainModule(
282
+ path.relative(this._config.projectRoot, entryPoint),
283
+ ),
281
284
  runModule: serializerOptions.runModule,
282
285
  sourceMapUrl: serializerOptions.sourceMapUrl,
283
286
  sourceUrl: serializerOptions.sourceUrl,
@@ -286,9 +289,8 @@ class Server {
286
289
  }
287
290
 
288
291
  async getAssets(options: BundleOptions): Promise<$ReadOnlyArray<AssetData>> {
289
- const {entryFile, transformOptions, onProgress} = splitBundleOptions(
290
- options,
291
- );
292
+ const {entryFile, transformOptions, onProgress} =
293
+ splitBundleOptions(options);
292
294
 
293
295
  const dependencies = await this._bundler.getDependencies(
294
296
  [entryFile],
@@ -300,7 +302,7 @@ class Server {
300
302
  processModuleFilter: this._config.serializer.processModuleFilter,
301
303
  assetPlugins: this._config.transformer.assetPlugins,
302
304
  platform: transformOptions.platform,
303
- projectRoot: this._config.projectRoot,
305
+ projectRoot: this._getServerRootDir(),
304
306
  publicPath: this._config.transformer.publicPath,
305
307
  });
306
308
  }
@@ -367,8 +369,21 @@ class Server {
367
369
 
368
370
  async _processSingleAssetRequest(req: IncomingMessage, res: ServerResponse) {
369
371
  const urlObj = url.parse(decodeURI(req.url), true);
370
- const assetPath =
371
- urlObj && urlObj.pathname && urlObj.pathname.match(/^\/assets\/(.+)$/);
372
+ let [, assetPath] =
373
+ (urlObj &&
374
+ urlObj.pathname &&
375
+ urlObj.pathname.match(/^\/assets\/(.+)$/)) ||
376
+ [];
377
+
378
+ if (!assetPath && urlObj && urlObj.query && urlObj.query.unstable_path) {
379
+ const [, actualPath, secondaryQuery] = nullthrows(
380
+ urlObj.query.unstable_path.match(/^([^?]*)\??(.*)$/),
381
+ );
382
+ if (secondaryQuery) {
383
+ Object.assign(urlObj.query, querystring.parse(secondaryQuery));
384
+ }
385
+ assetPath = actualPath;
386
+ }
372
387
 
373
388
  if (!assetPath) {
374
389
  throw new Error('Could not extract asset path from URL');
@@ -383,7 +398,7 @@ class Server {
383
398
 
384
399
  try {
385
400
  const data = await getAsset(
386
- assetPath[1],
401
+ assetPath,
387
402
  this._config.projectRoot,
388
403
  this._config.watchFolders,
389
404
  urlObj.query.platform,
@@ -394,7 +409,7 @@ class Server {
394
409
  if (process.env.REACT_NATIVE_ENABLE_ASSET_CACHING === true) {
395
410
  res.setHeader('Cache-Control', 'max-age=31536000');
396
411
  }
397
- res.end(this._rangeRequestMiddleware(req, res, data, assetPath[1]));
412
+ res.end(this._rangeRequestMiddleware(req, res, data, assetPath));
398
413
  process.nextTick(() => {
399
414
  log(createActionEndEntry(processingAssetRequestLogEntry));
400
415
  });
@@ -408,7 +423,7 @@ class Server {
408
423
  processRequest: (
409
424
  IncomingMessage,
410
425
  ServerResponse,
411
- (e: ?Error) => mixed,
426
+ ((e: ?Error) => mixed),
412
427
  ) => void = (
413
428
  req: IncomingMessage,
414
429
  res: ServerResponse,
@@ -470,7 +485,7 @@ class Server {
470
485
  res,
471
486
  this._parseOptions(formattedUrl),
472
487
  );
473
- } else if (pathname.startsWith('/assets/')) {
488
+ } else if (pathname.startsWith('/assets/') || pathname === '/assets') {
474
489
  await this._processSingleAssetRequest(req, res);
475
490
  } else if (pathname === '/symbolicate') {
476
491
  await this._symbolicate(req, res);
@@ -499,12 +514,8 @@ class Server {
499
514
  res: ServerResponse,
500
515
  bundleOptions: BundleOptions,
501
516
  ): Promise<void> {
502
- const {
503
- entryFile,
504
- graphOptions,
505
- transformOptions,
506
- serializerOptions,
507
- } = splitBundleOptions(bundleOptions);
517
+ const {entryFile, graphOptions, transformOptions, serializerOptions} =
518
+ splitBundleOptions(bundleOptions);
508
519
 
509
520
  /**
510
521
  * `entryFile` is relative to projectRoot, we need to use resolution function
@@ -512,11 +523,12 @@ class Server {
512
523
  */
513
524
  const resolvedEntryFilePath = await this._resolveRelativePath(entryFile, {
514
525
  transformOptions,
526
+ relativeTo: 'server',
515
527
  });
516
528
  const graphId = getGraphId(resolvedEntryFilePath, transformOptions, {
517
529
  shallow: graphOptions.shallow,
518
- experimentalImportBundleSupport: this._config.transformer
519
- .experimentalImportBundleSupport,
530
+ experimentalImportBundleSupport:
531
+ this._config.transformer.experimentalImportBundleSupport,
520
532
  });
521
533
 
522
534
  // For resources that support deletion, handle the DELETE method.
@@ -646,6 +658,8 @@ class Server {
646
658
  stack: formattedError.message,
647
659
  });
648
660
 
661
+ debug('Bundling error', error);
662
+
649
663
  return;
650
664
  }
651
665
 
@@ -724,7 +738,7 @@ class Server {
724
738
  {
725
739
  asyncRequireModulePath: await this._resolveRelativePath(
726
740
  this._config.transformer.asyncRequireModulePath,
727
- {transformOptions},
741
+ {transformOptions, relativeTo: 'project'},
728
742
  ),
729
743
  processModuleFilter: this._config.serializer.processModuleFilter,
730
744
  createModuleId: this._createModuleId,
@@ -732,9 +746,10 @@ class Server {
732
746
  dev: transformOptions.dev,
733
747
  projectRoot: this._config.projectRoot,
734
748
  modulesOnly: serializerOptions.modulesOnly,
735
- runBeforeMainModule: this._config.serializer.getModulesRunBeforeMainModule(
736
- path.relative(this._config.projectRoot, entryFile),
737
- ),
749
+ runBeforeMainModule:
750
+ this._config.serializer.getModulesRunBeforeMainModule(
751
+ path.relative(this._config.projectRoot, entryFile),
752
+ ),
738
753
  runModule: serializerOptions.runModule,
739
754
  sourceMapUrl: serializerOptions.sourceMapUrl,
740
755
  sourceUrl: serializerOptions.sourceUrl,
@@ -770,7 +785,7 @@ class Server {
770
785
  String(result.numModifiedFiles),
771
786
  );
772
787
  mres.setHeader(DELTA_ID_HEADER, String(result.nextRevId));
773
- mres.setHeader('Content-Type', 'application/javascript');
788
+ mres.setHeader('Content-Type', 'application/javascript; charset=UTF-8');
774
789
  mres.setHeader('Last-Modified', result.lastModifiedDate.toUTCString());
775
790
  mres.setHeader(
776
791
  'Content-Length',
@@ -831,7 +846,7 @@ class Server {
831
846
  baseBytecodeBundle(entryFile, revision.prepend, revision.graph, {
832
847
  asyncRequireModulePath: await this._resolveRelativePath(
833
848
  this._config.transformer.asyncRequireModulePath,
834
- {transformOptions},
849
+ {transformOptions, relativeTo: 'project'},
835
850
  ),
836
851
  processModuleFilter: this._config.serializer.processModuleFilter,
837
852
  createModuleId: this._createModuleId,
@@ -839,9 +854,10 @@ class Server {
839
854
  dev: transformOptions.dev,
840
855
  projectRoot: this._config.projectRoot,
841
856
  modulesOnly: serializerOptions.modulesOnly,
842
- runBeforeMainModule: this._config.serializer.getModulesRunBeforeMainModule(
843
- path.relative(this._config.projectRoot, entryFile),
844
- ),
857
+ runBeforeMainModule:
858
+ this._config.serializer.getModulesRunBeforeMainModule(
859
+ path.relative(this._config.projectRoot, entryFile),
860
+ ),
845
861
  runModule: serializerOptions.runModule,
846
862
  sourceMapUrl: serializerOptions.sourceMapUrl,
847
863
  sourceUrl: serializerOptions.sourceUrl,
@@ -990,16 +1006,15 @@ class Server {
990
1006
  const getCodeFrame = (urls, symbolicatedStack) => {
991
1007
  for (let i = 0; i < symbolicatedStack.length; i++) {
992
1008
  const {collapse, column, file, lineNumber} = symbolicatedStack[i];
993
- // $FlowFixMe[incompatible-call]
994
- const entryPoint = path.resolve(this._config.projectRoot, file);
995
- if (collapse || lineNumber == null || urls.has(entryPoint)) {
1009
+ const fileAbsolute = path.resolve(this._config.projectRoot, file ?? '');
1010
+ if (collapse || lineNumber == null || urls.has(fileAbsolute)) {
996
1011
  continue;
997
1012
  }
998
1013
 
999
1014
  try {
1000
1015
  return {
1001
1016
  content: codeFrameColumns(
1002
- fs.readFileSync(entryPoint, 'utf8'),
1017
+ fs.readFileSync(fileAbsolute, 'utf8'),
1003
1018
  {
1004
1019
  // Metro returns 0 based columns but codeFrameColumns expects 1-based columns
1005
1020
  // $FlowFixMe[unsafe-addition]
@@ -1104,12 +1119,13 @@ class Server {
1104
1119
  */
1105
1120
  const resolvedEntryFilePath = await this._resolveRelativePath(entryFile, {
1106
1121
  transformOptions,
1122
+ relativeTo: 'server',
1107
1123
  });
1108
1124
 
1109
1125
  const graphId = getGraphId(resolvedEntryFilePath, transformOptions, {
1110
1126
  shallow: graphOptions.shallow,
1111
- experimentalImportBundleSupport: this._config.transformer
1112
- .experimentalImportBundleSupport,
1127
+ experimentalImportBundleSupport:
1128
+ this._config.transformer.experimentalImportBundleSupport,
1113
1129
  });
1114
1130
  let revision;
1115
1131
  const revPromise = this._bundler.getRevisionByGraphId(graphId);
@@ -1136,12 +1152,25 @@ class Server {
1136
1152
  );
1137
1153
  }
1138
1154
 
1139
- async _resolveRelativePath(filePath, {transformOptions}) {
1155
+ async _resolveRelativePath(
1156
+ filePath,
1157
+ {
1158
+ transformOptions,
1159
+ relativeTo,
1160
+ }: $ReadOnly<{
1161
+ transformOptions: TransformInputOptions,
1162
+ relativeTo: 'project' | 'server',
1163
+ }>,
1164
+ ) {
1140
1165
  const resolutionFn = await transformHelpers.getResolveDependencyFn(
1141
1166
  this._bundler.getBundler(),
1142
1167
  transformOptions.platform,
1143
1168
  );
1144
- return resolutionFn(`${this._config.projectRoot}/.`, filePath);
1169
+ const rootDir =
1170
+ relativeTo === 'server'
1171
+ ? this._getServerRootDir()
1172
+ : this._config.projectRoot;
1173
+ return resolutionFn(`${rootDir}/.`, filePath);
1145
1174
  }
1146
1175
 
1147
1176
  getNewBuildID(): string {
@@ -1193,6 +1222,19 @@ class Server {
1193
1222
  sourceMapUrl: null,
1194
1223
  sourceUrl: null,
1195
1224
  };
1225
+
1226
+ _getServerRootDir() {
1227
+ return this._config.server.unstable_serverRoot ?? this._config.projectRoot;
1228
+ }
1229
+
1230
+ _getEntryPointAbsolutePath(entryFile: string) {
1231
+ return path.resolve(this._getServerRootDir(), entryFile);
1232
+ }
1233
+
1234
+ // Wait for the server to finish initializing.
1235
+ async ready(): Promise<void> {
1236
+ await this._bundler.ready();
1237
+ }
1196
1238
  }
1197
1239
 
1198
1240
  function* zip<X, Y>(xs: Iterable<X>, ys: Iterable<Y>): Iterable<[X, Y]> {
package/src/cli-utils.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -11,15 +11,15 @@
11
11
 
12
12
  const fs = require("fs-extra");
13
13
 
14
- exports.watchFile = async function(filename, callback) {
14
+ exports.watchFile = async function (filename, callback) {
15
15
  fs.watchFile(filename, () => {
16
16
  callback();
17
17
  });
18
18
  await callback();
19
19
  };
20
20
 
21
- exports.makeAsyncCommand = command => argv => {
22
- Promise.resolve(command(argv)).catch(error => {
21
+ exports.makeAsyncCommand = (command) => (argv) => {
22
+ Promise.resolve(command(argv)).catch((error) => {
23
23
  console.error(error.stack);
24
24
  process.exitCode = 1;
25
25
  });
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -10,13 +10,13 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- const fs = require('fs-extra');
14
-
15
13
  import type {YargArguments} from 'metro-config/src/configTypes.flow';
16
14
 
17
- exports.watchFile = async function(
15
+ const fs = require('fs-extra');
16
+
17
+ exports.watchFile = async function (
18
18
  filename: string,
19
- callback: () => *,
19
+ callback: () => any,
20
20
  ): Promise<void> {
21
21
  fs.watchFile(filename, () => {
22
22
  callback();
@@ -25,11 +25,13 @@ exports.watchFile = async function(
25
25
  await callback();
26
26
  };
27
27
 
28
- exports.makeAsyncCommand = (
29
- command: (argv: YargArguments) => Promise<*>,
30
- ): ((argv: YargArguments) => void) => (argv: YargArguments) => {
31
- Promise.resolve(command(argv)).catch(error => {
32
- console.error(error.stack);
33
- process.exitCode = 1;
34
- });
35
- };
28
+ exports.makeAsyncCommand =
29
+ (
30
+ command: (argv: YargArguments) => Promise<mixed>,
31
+ ): ((argv: YargArguments) => void) =>
32
+ (argv: YargArguments) => {
33
+ Promise.resolve(command(argv)).catch(error => {
34
+ console.error(error.stack);
35
+ process.exitCode = 1;
36
+ });
37
+ };
package/src/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * Copyright (c) Facebook, Inc. and its affiliates.
4
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
5
5
  *
6
6
  * This source code is licensed under the MIT license found in the
7
7
  * LICENSE file in the root directory of this source tree.
@@ -9,10 +9,10 @@
9
9
  *
10
10
  * @format
11
11
  */
12
- "use strict"; // flowlint-next-line untyped-import:off
13
-
14
- const yargs = require("yargs");
12
+ "use strict";
15
13
 
16
14
  const { attachMetroCli } = require("./index");
17
15
 
16
+ const yargs = require("yargs");
17
+
18
18
  attachMetroCli(yargs.demandCommand(1)).argv;
package/src/cli.js.flow CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Copyright (c) Facebook, Inc. and its affiliates.
3
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
4
4
  *
5
5
  * This source code is licensed under the MIT license found in the
6
6
  * LICENSE file in the root directory of this source tree.
@@ -11,9 +11,7 @@
11
11
 
12
12
  'use strict';
13
13
 
14
- // flowlint-next-line untyped-import:off
15
- const yargs = require('yargs');
16
-
17
14
  const {attachMetroCli} = require('./index');
15
+ const yargs = require('yargs');
18
16
 
19
17
  attachMetroCli(yargs.demandCommand(1)).argv;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -9,12 +9,12 @@
9
9
  */
10
10
  "use strict";
11
11
 
12
+ const { makeAsyncCommand } = require("../cli-utils");
13
+
12
14
  const MetroApi = require("../index");
13
15
 
14
16
  const TerminalReporter = require("../lib/TerminalReporter");
15
17
 
16
- const { makeAsyncCommand } = require("../cli-utils");
17
-
18
18
  const { loadConfig } = require("metro-config");
19
19
 
20
20
  const { Terminal } = require("metro-core");
@@ -26,57 +26,56 @@ module.exports = () => ({
26
26
  command: "build <entry>",
27
27
  description:
28
28
  "Generates a JavaScript bundle containing the specified entrypoint and its descendants",
29
- // $FlowFixMe[value-as-type]
30
- builder: yargs => {
29
+ builder: (yargs) => {
31
30
  yargs.option("project-roots", {
32
31
  alias: "P",
33
32
  type: "string",
34
- array: true
33
+ array: true,
35
34
  });
36
35
  yargs.option("out", {
37
36
  alias: "O",
38
37
  type: "string",
39
- demandOption: true
38
+ demandOption: true,
40
39
  });
41
40
  yargs.option("platform", {
42
41
  alias: "p",
43
- type: "string"
42
+ type: "string",
44
43
  });
45
44
  yargs.option("output-type", {
46
45
  alias: "t",
47
- type: "string"
46
+ type: "string",
48
47
  });
49
48
  yargs.option("max-workers", {
50
49
  alias: "j",
51
- type: "number"
50
+ type: "number",
52
51
  });
53
52
  yargs.option("minify", {
54
53
  alias: "z",
55
- type: "boolean"
54
+ type: "boolean",
56
55
  });
57
56
  yargs.option("dev", {
58
57
  alias: "g",
59
- type: "boolean"
58
+ type: "boolean",
60
59
  });
61
60
  yargs.option("source-map", {
62
- type: "boolean"
61
+ type: "boolean",
63
62
  });
64
63
  yargs.option("source-map-url", {
65
- type: "string"
64
+ type: "string",
66
65
  });
67
66
  yargs.option("legacy-bundler", {
68
- type: "boolean"
67
+ type: "boolean",
69
68
  });
70
69
  yargs.option("config", {
71
70
  alias: "c",
72
- type: "string"
71
+ type: "string",
73
72
  }); // Deprecated
74
73
 
75
74
  yargs.option("reset-cache", {
76
- type: "boolean"
75
+ type: "boolean",
77
76
  });
78
77
  },
79
- handler: makeAsyncCommand(async argv => {
78
+ handler: makeAsyncCommand(async (argv) => {
80
79
  const config = await loadConfig(argv); // $FlowExpectedError YargArguments and RunBuildOptions are used interchangeable but their types are not yet compatible
81
80
 
82
81
  const options = argv;
@@ -94,8 +93,8 @@ module.exports = () => ({
94
93
  platform: options.platform,
95
94
  // Bytecode bundles in Metro are not meant for production use. Instead,
96
95
  // the Hermes Bytecode Compiler should be invoked on the resulting JS bundle from Metro.
97
- runtimeBytecodeVersion: null
98
- }
96
+ runtimeBytecodeVersion: null,
97
+ },
99
98
  });
100
99
  },
101
100
  onProgress: (transformedFileCount, totalFileCount) => {
@@ -103,15 +102,15 @@ module.exports = () => ({
103
102
  buildID: "$",
104
103
  type: "bundle_transform_progressed",
105
104
  transformedFileCount,
106
- totalFileCount
105
+ totalFileCount,
107
106
  });
108
107
  },
109
108
  onComplete: () => {
110
109
  updateReporter.update({
111
110
  buildID: "$",
112
- type: "bundle_build_done"
111
+ type: "bundle_build_done",
113
112
  });
114
- }
113
+ },
115
114
  });
116
- })
115
+ }),
117
116
  });