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
package/src/HmrServer.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.
@@ -9,10 +9,12 @@
9
9
  */
10
10
  "use strict";
11
11
 
12
- const GraphNotFoundError = require("./IncrementalBundler/GraphNotFoundError");
12
+ const hmrJSBundle = require("./DeltaBundler/Serializers/hmrJSBundle");
13
13
 
14
14
  const IncrementalBundler = require("./IncrementalBundler");
15
15
 
16
+ const GraphNotFoundError = require("./IncrementalBundler/GraphNotFoundError");
17
+
16
18
  const RevisionNotFoundError = require("./IncrementalBundler/RevisionNotFoundError");
17
19
 
18
20
  const debounceAsyncQueue = require("./lib/debounceAsyncQueue");
@@ -21,27 +23,25 @@ const formatBundlingError = require("./lib/formatBundlingError");
21
23
 
22
24
  const getGraphId = require("./lib/getGraphId");
23
25
 
24
- const hmrJSBundle = require("./DeltaBundler/Serializers/hmrJSBundle");
25
-
26
- const nullthrows = require("nullthrows");
27
-
28
26
  const parseOptionsFromUrl = require("./lib/parseOptionsFromUrl");
29
27
 
30
28
  const splitBundleOptions = require("./lib/splitBundleOptions");
31
29
 
32
30
  const transformHelpers = require("./lib/transformHelpers");
33
31
 
34
- const url = require("url");
35
-
36
32
  const {
37
- Logger: { createActionStartEntry, createActionEndEntry, log }
33
+ Logger: { createActionStartEntry, createActionEndEntry, log },
38
34
  } = require("metro-core");
39
35
 
40
36
  const { VERSION: BYTECODE_VERSION } = require("metro-hermes-compiler");
41
37
 
38
+ const nullthrows = require("nullthrows");
39
+
40
+ const url = require("url");
41
+
42
42
  function send(sendFns, message) {
43
43
  const strMessage = JSON.stringify(message);
44
- sendFns.forEach(sendFn => sendFn(strMessage));
44
+ sendFns.forEach((sendFn) => sendFn(strMessage));
45
45
  }
46
46
  /**
47
47
  * The HmrServer (Hot Module Reloading) implements a lightweight interface
@@ -61,15 +61,17 @@ class HmrServer {
61
61
  this._clientGroups = new Map();
62
62
  }
63
63
 
64
- async onClientConnect(requestUrl, sendFn) {
64
+ onClientConnect = async (requestUrl, sendFn) => {
65
65
  return {
66
66
  sendFn,
67
67
  revisionIds: [],
68
- optedIntoHMR: false
68
+ optedIntoHMR: false,
69
69
  };
70
- }
70
+ };
71
71
 
72
72
  async _registerEntryPoint(client, requestUrl, sendFn) {
73
+ var _this$_config$server$;
74
+
73
75
  requestUrl = this._config.server.rewriteRequestUrl(requestUrl);
74
76
  const clientUrl = nullthrows(url.parse(requestUrl, true));
75
77
  const options = parseOptionsFromUrl(
@@ -77,9 +79,8 @@ class HmrServer {
77
79
  new Set(this._config.resolver.platforms),
78
80
  BYTECODE_VERSION
79
81
  );
80
- const { entryFile, transformOptions, graphOptions } = splitBundleOptions(
81
- options
82
- );
82
+ const { entryFile, transformOptions, graphOptions } =
83
+ splitBundleOptions(options);
83
84
  /**
84
85
  * `entryFile` is relative to projectRoot, we need to use resolution function
85
86
  * to find the appropriate file with supported extensions.
@@ -90,13 +91,16 @@ class HmrServer {
90
91
  transformOptions.platform
91
92
  );
92
93
  const resolvedEntryFilePath = resolutionFn(
93
- this._config.projectRoot + "/.",
94
+ ((_this$_config$server$ = this._config.server.unstable_serverRoot) !==
95
+ null && _this$_config$server$ !== void 0
96
+ ? _this$_config$server$
97
+ : this._config.projectRoot) + "/.",
94
98
  entryFile
95
99
  );
96
100
  const graphId = getGraphId(resolvedEntryFilePath, transformOptions, {
97
101
  shallow: graphOptions.shallow,
98
- experimentalImportBundleSupport: this._config.transformer
99
- .experimentalImportBundleSupport
102
+ experimentalImportBundleSupport:
103
+ this._config.transformer.experimentalImportBundleSupport,
100
104
  });
101
105
 
102
106
  const revPromise = this._bundler.getRevisionByGraphId(graphId);
@@ -104,7 +108,7 @@ class HmrServer {
104
108
  if (!revPromise) {
105
109
  send([sendFn], {
106
110
  type: "error",
107
- body: formatBundlingError(new GraphNotFoundError(graphId))
111
+ body: formatBundlingError(new GraphNotFoundError(graphId)),
108
112
  });
109
113
  return;
110
114
  }
@@ -119,23 +123,27 @@ class HmrServer {
119
123
  } else {
120
124
  // Prepare the clientUrl to be used as sourceUrl in HMR updates.
121
125
  clientUrl.protocol = "http";
122
- const { dev, minify, runModule, bundleEntry: _bundleEntry, ...query } =
123
- clientUrl.query || {}; // $FlowFixMe[incompatible-type]
124
-
126
+ const {
127
+ dev,
128
+ minify,
129
+ runModule,
130
+ bundleEntry: _bundleEntry,
131
+ ...query
132
+ } = clientUrl.query || {};
125
133
  clientUrl.query = {
126
134
  ...query,
127
135
  dev: dev || "true",
128
136
  minify: minify || "false",
129
137
  modulesOnly: "true",
130
138
  runModule: runModule || "false",
131
- shallow: "true"
139
+ shallow: "true",
132
140
  };
133
141
  clientUrl.search = "";
134
142
  clientGroup = {
135
143
  clients: new Set([client]),
136
144
  clientUrl,
137
145
  revisionId: id,
138
- unlisten: () => unlisten()
146
+ unlisten: () => unlisten(),
139
147
  };
140
148
 
141
149
  this._clientGroups.set(id, clientGroup);
@@ -145,7 +153,7 @@ class HmrServer {
145
153
  debounceAsyncQueue(
146
154
  // $FlowFixMe[method-unbinding] added when improving typing for this parameters
147
155
  this._handleFileChange.bind(this, clientGroup, {
148
- isInitialUpdate: false
156
+ isInitialUpdate: false,
149
157
  }),
150
158
  50
151
159
  )
@@ -153,14 +161,14 @@ class HmrServer {
153
161
  }
154
162
 
155
163
  await this._handleFileChange(clientGroup, {
156
- isInitialUpdate: true
164
+ isInitialUpdate: true,
157
165
  });
158
166
  send([sendFn], {
159
- type: "bundle-registered"
167
+ type: "bundle-registered",
160
168
  });
161
169
  }
162
170
 
163
- async onClientMessage(client, message, sendFn) {
171
+ onClientMessage = async (client, message, sendFn) => {
164
172
  let data;
165
173
 
166
174
  try {
@@ -168,7 +176,7 @@ class HmrServer {
168
176
  } catch (error) {
169
177
  send([sendFn], {
170
178
  type: "error",
171
- body: formatBundlingError(error)
179
+ body: formatBundlingError(error),
172
180
  });
173
181
  return Promise.resolve();
174
182
  }
@@ -177,7 +185,7 @@ class HmrServer {
177
185
  switch (data.type) {
178
186
  case "register-entrypoints":
179
187
  return Promise.all(
180
- data.entryPoints.map(entryPoint =>
188
+ data.entryPoints.map((entryPoint) =>
181
189
  this._registerEntryPoint(client, entryPoint, sendFn)
182
190
  )
183
191
  );
@@ -187,7 +195,7 @@ class HmrServer {
187
195
  type: "client_log",
188
196
  level: data.level,
189
197
  data: data.data,
190
- mode: data.mode
198
+ mode: data.mode,
191
199
  });
192
200
 
193
201
  break;
@@ -202,19 +210,17 @@ class HmrServer {
202
210
  }
203
211
 
204
212
  return Promise.resolve();
205
- }
206
-
207
- onClientError(client, e) {
213
+ };
214
+ onClientError = (client, e) => {
208
215
  this._config.reporter.update({
209
216
  type: "hmr_client_error",
210
- error: e
217
+ error: e.error,
211
218
  });
212
219
 
213
220
  this.onClientDisconnect(client);
214
- }
215
-
216
- onClientDisconnect(client) {
217
- client.revisionIds.forEach(revisionId => {
221
+ };
222
+ onClientDisconnect = (client) => {
223
+ client.revisionIds.forEach((revisionId) => {
218
224
  const group = this._clientGroups.get(revisionId);
219
225
 
220
226
  if (group != null) {
@@ -227,10 +233,12 @@ class HmrServer {
227
233
  }
228
234
  }
229
235
  });
230
- }
236
+ };
231
237
 
232
238
  async _handleFileChange(group, options) {
233
- const optedIntoHMR = [...group.clients].some(client => client.optedIntoHMR);
239
+ const optedIntoHMR = [...group.clients].some(
240
+ (client) => client.optedIntoHMR
241
+ );
234
242
  const processingHmrChange = log(
235
243
  createActionStartEntry({
236
244
  // Even when HMR is disabled on the client, this function still
@@ -241,36 +249,40 @@ class HmrServer {
241
249
  // that didn't explicitly opt into HMR.
242
250
  action_name: optedIntoHMR
243
251
  ? "Processing HMR change"
244
- : "Processing HMR change (no client opt-in)"
252
+ : "Processing HMR change (no client opt-in)",
245
253
  })
246
254
  );
247
- const sendFns = [...group.clients].map(client => client.sendFn);
255
+ const sendFns = [...group.clients].map((client) => client.sendFn);
248
256
  send(sendFns, {
249
257
  type: "update-start",
250
- body: options
258
+ body: options,
251
259
  });
252
260
  const message = await this._prepareMessage(group, options);
253
261
  send(sendFns, message);
254
262
  send(sendFns, {
255
- type: "update-done"
263
+ type: "update-done",
256
264
  });
257
265
  log({
258
266
  ...createActionEndEntry(processingHmrChange),
259
267
  outdated_modules:
260
268
  message.type === "update"
261
269
  ? message.body.added.length + message.body.modified.length
262
- : undefined
270
+ : undefined,
263
271
  });
264
272
  }
265
273
 
266
274
  async _prepareMessage(group, options) {
267
275
  try {
276
+ var _this$_config$server$2;
277
+
268
278
  const revPromise = this._bundler.getRevision(group.revisionId);
269
279
 
270
280
  if (!revPromise) {
271
281
  return {
272
282
  type: "error",
273
- body: formatBundlingError(new RevisionNotFoundError(group.revisionId))
283
+ body: formatBundlingError(
284
+ new RevisionNotFoundError(group.revisionId)
285
+ ),
274
286
  };
275
287
  }
276
288
 
@@ -285,7 +297,7 @@ class HmrServer {
285
297
 
286
298
  for (const client of group.clients) {
287
299
  client.revisionIds = client.revisionIds.filter(
288
- revisionId => revisionId !== group.revisionId
300
+ (revisionId) => revisionId !== group.revisionId
289
301
  );
290
302
  client.revisionIds.push(revision.id);
291
303
  }
@@ -294,28 +306,32 @@ class HmrServer {
294
306
 
295
307
  const hmrUpdate = hmrJSBundle(delta, revision.graph, {
296
308
  createModuleId: this._createModuleId,
297
- projectRoot: this._config.projectRoot,
298
- clientUrl: group.clientUrl
309
+ projectRoot:
310
+ (_this$_config$server$2 = this._config.server.unstable_serverRoot) !==
311
+ null && _this$_config$server$2 !== void 0
312
+ ? _this$_config$server$2
313
+ : this._config.projectRoot,
314
+ clientUrl: group.clientUrl,
299
315
  });
300
316
  return {
301
317
  type: "update",
302
318
  body: {
303
319
  revisionId: revision.id,
304
320
  isInitialUpdate: options.isInitialUpdate,
305
- ...hmrUpdate
306
- }
321
+ ...hmrUpdate,
322
+ },
307
323
  };
308
324
  } catch (error) {
309
325
  const formattedError = formatBundlingError(error);
310
326
 
311
327
  this._config.reporter.update({
312
328
  type: "bundling_error",
313
- error
329
+ error,
314
330
  });
315
331
 
316
332
  return {
317
333
  type: "error",
318
- body: formattedError
334
+ body: formattedError,
319
335
  };
320
336
  }
321
337
  }
@@ -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,33 +10,31 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- const GraphNotFoundError = require('./IncrementalBundler/GraphNotFoundError');
13
+ import type {RevisionId} from './IncrementalBundler';
14
+ import type {ConfigT} from 'metro-config/src/configTypes.flow';
15
+ import type {
16
+ HmrClientMessage,
17
+ HmrErrorMessage,
18
+ HmrMessage,
19
+ HmrUpdateMessage,
20
+ } from 'metro-runtime/src/modules/types.flow';
21
+
22
+ const hmrJSBundle = require('./DeltaBundler/Serializers/hmrJSBundle');
14
23
  const IncrementalBundler = require('./IncrementalBundler');
24
+ const GraphNotFoundError = require('./IncrementalBundler/GraphNotFoundError');
15
25
  const RevisionNotFoundError = require('./IncrementalBundler/RevisionNotFoundError');
16
-
17
26
  const debounceAsyncQueue = require('./lib/debounceAsyncQueue');
18
27
  const formatBundlingError = require('./lib/formatBundlingError');
19
28
  const getGraphId = require('./lib/getGraphId');
20
- const hmrJSBundle = require('./DeltaBundler/Serializers/hmrJSBundle');
21
- const nullthrows = require('nullthrows');
22
29
  const parseOptionsFromUrl = require('./lib/parseOptionsFromUrl');
23
30
  const splitBundleOptions = require('./lib/splitBundleOptions');
24
31
  const transformHelpers = require('./lib/transformHelpers');
25
- const url = require('url');
26
-
27
32
  const {
28
33
  Logger: {createActionStartEntry, createActionEndEntry, log},
29
34
  } = require('metro-core');
30
35
  const {VERSION: BYTECODE_VERSION} = require('metro-hermes-compiler');
31
-
32
- import type {RevisionId} from './IncrementalBundler';
33
- import type {ConfigT} from 'metro-config/src/configTypes.flow';
34
- import type {
35
- HmrMessage,
36
- HmrClientMessage,
37
- HmrUpdateMessage,
38
- HmrErrorMessage,
39
- } from 'metro-runtime/src/modules/types.flow';
36
+ const nullthrows = require('nullthrows');
37
+ const url = require('url');
40
38
 
41
39
  type $ReturnType<F> = $Call<<A, R>((...A) => R) => R, F>;
42
40
  export type EntryPointURL = $ReturnType<typeof url.parse>;
@@ -85,16 +83,16 @@ class HmrServer<TClient: Client> {
85
83
  this._clientGroups = new Map();
86
84
  }
87
85
 
88
- async onClientConnect(
86
+ onClientConnect: (
89
87
  requestUrl: string,
90
88
  sendFn: (data: string) => void,
91
- ): Promise<Client> {
89
+ ) => Promise<Client> = async (requestUrl, sendFn) => {
92
90
  return {
93
91
  sendFn,
94
92
  revisionIds: [],
95
93
  optedIntoHMR: false,
96
94
  };
97
- }
95
+ };
98
96
 
99
97
  async _registerEntryPoint(
100
98
  client: Client,
@@ -108,9 +106,8 @@ class HmrServer<TClient: Client> {
108
106
  new Set(this._config.resolver.platforms),
109
107
  BYTECODE_VERSION,
110
108
  );
111
- const {entryFile, transformOptions, graphOptions} = splitBundleOptions(
112
- options,
113
- );
109
+ const {entryFile, transformOptions, graphOptions} =
110
+ splitBundleOptions(options);
114
111
 
115
112
  /**
116
113
  * `entryFile` is relative to projectRoot, we need to use resolution function
@@ -121,13 +118,14 @@ class HmrServer<TClient: Client> {
121
118
  transformOptions.platform,
122
119
  );
123
120
  const resolvedEntryFilePath = resolutionFn(
124
- this._config.projectRoot + '/.',
121
+ (this._config.server.unstable_serverRoot ?? this._config.projectRoot) +
122
+ '/.',
125
123
  entryFile,
126
124
  );
127
125
  const graphId = getGraphId(resolvedEntryFilePath, transformOptions, {
128
126
  shallow: graphOptions.shallow,
129
- experimentalImportBundleSupport: this._config.transformer
130
- .experimentalImportBundleSupport,
127
+ experimentalImportBundleSupport:
128
+ this._config.transformer.experimentalImportBundleSupport,
131
129
  });
132
130
  const revPromise = this._bundler.getRevisionByGraphId(graphId);
133
131
  if (!revPromise) {
@@ -147,9 +145,13 @@ class HmrServer<TClient: Client> {
147
145
  } else {
148
146
  // Prepare the clientUrl to be used as sourceUrl in HMR updates.
149
147
  clientUrl.protocol = 'http';
150
- const {dev, minify, runModule, bundleEntry: _bundleEntry, ...query} =
151
- clientUrl.query || {};
152
- // $FlowFixMe[incompatible-type]
148
+ const {
149
+ dev,
150
+ minify,
151
+ runModule,
152
+ bundleEntry: _bundleEntry,
153
+ ...query
154
+ } = clientUrl.query || {};
153
155
  clientUrl.query = {
154
156
  ...query,
155
157
  dev: dev || 'true',
@@ -185,11 +187,11 @@ class HmrServer<TClient: Client> {
185
187
  send([sendFn], {type: 'bundle-registered'});
186
188
  }
187
189
 
188
- async onClientMessage(
190
+ onClientMessage: (
189
191
  client: TClient,
190
192
  message: string,
191
193
  sendFn: (data: string) => void,
192
- ): Promise<void> {
194
+ ) => Promise<void> = async (client, message, sendFn) => {
193
195
  let data: HmrClientMessage;
194
196
  try {
195
197
  data = JSON.parse(message);
@@ -224,17 +226,17 @@ class HmrServer<TClient: Client> {
224
226
  }
225
227
  }
226
228
  return Promise.resolve();
227
- }
229
+ };
228
230
 
229
- onClientError(client: TClient, e: Error): void {
231
+ onClientError: (client: TClient, e: ErrorEvent) => void = (client, e) => {
230
232
  this._config.reporter.update({
231
233
  type: 'hmr_client_error',
232
- error: e,
234
+ error: e.error,
233
235
  });
234
236
  this.onClientDisconnect(client);
235
- }
237
+ };
236
238
 
237
- onClientDisconnect(client: TClient): void {
239
+ onClientDisconnect: (client: TClient) => void = client => {
238
240
  client.revisionIds.forEach(revisionId => {
239
241
  const group = this._clientGroups.get(revisionId);
240
242
  if (group != null) {
@@ -246,7 +248,7 @@ class HmrServer<TClient: Client> {
246
248
  }
247
249
  }
248
250
  });
249
- }
251
+ };
250
252
 
251
253
  async _handleFileChange(
252
254
  group: ClientGroup,
@@ -320,7 +322,8 @@ class HmrServer<TClient: Client> {
320
322
 
321
323
  const hmrUpdate = hmrJSBundle(delta, revision.graph, {
322
324
  createModuleId: this._createModuleId,
323
- projectRoot: this._config.projectRoot,
325
+ projectRoot:
326
+ this._config.server.unstable_serverRoot ?? this._config.projectRoot,
324
327
  clientUrl: group.clientUrl,
325
328
  });
326
329
 
@@ -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.
@@ -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.
@@ -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.
@@ -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.
@@ -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.
@@ -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.