metro 0.65.2 → 0.67.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 +27 -27
  2. package/src/Assets.js +9 -9
  3. package/src/Assets.js.flow +5 -7
  4. package/src/Bundler/util.js +17 -15
  5. package/src/Bundler/util.js.flow +12 -10
  6. package/src/Bundler.js +22 -9
  7. package/src/Bundler.js.flow +20 -7
  8. package/src/DeltaBundler/DeltaCalculator.js +17 -15
  9. package/src/DeltaBundler/DeltaCalculator.js.flow +9 -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 +18 -8
  31. package/src/DeltaBundler/Serializers/helpers/js.js.flow +19 -10
  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 +16 -14
  45. package/src/DeltaBundler/Transformer.js.flow +15 -15
  46. package/src/DeltaBundler/Worker.js +8 -11
  47. package/src/DeltaBundler/Worker.js.flow +8 -11
  48. package/src/DeltaBundler/WorkerFarm.js +15 -18
  49. package/src/DeltaBundler/WorkerFarm.js.flow +9 -11
  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 +15 -1
  61. package/src/DeltaBundler.js +5 -5
  62. package/src/DeltaBundler.js.flow +4 -4
  63. package/src/HmrServer.js +73 -55
  64. package/src/HmrServer.js.flow +42 -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 +46 -32
  72. package/src/IncrementalBundler.js.flow +32 -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 +5 -3
  76. package/src/ModuleGraph/node-haste/HasteFS.js.flow +3 -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 +41 -31
  86. package/src/ModuleGraph/node-haste/node-haste.js.flow +28 -22
  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 +61 -40
  96. package/src/ModuleGraph/output/util.js.flow +51 -28
  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 +47 -31
  102. package/src/ModuleGraph/worker/JsFileWrapping.js +16 -16
  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 +16 -18
  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 +204 -150
  118. package/src/Server.js.flow +131 -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 +19 -19
  127. package/src/commands/serve.js.flow +7 -9
  128. package/src/index.js +117 -50
  129. package/src/index.js.flow +108 -40
  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 +2 -2
  139. package/src/integration_tests/basic_bundle/TestBundle.js.flow +1 -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 +17 -17
  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 +10 -6
  166. package/src/lib/BatchProcessor.js.flow +6 -1
  167. package/src/lib/JsonReporter.js +3 -2
  168. package/src/lib/JsonReporter.js.flow +2 -1
  169. package/src/lib/RamBundleParser.js +1 -1
  170. package/src/lib/RamBundleParser.js.flow +1 -1
  171. package/src/lib/TerminalReporter.js +15 -15
  172. package/src/lib/TerminalReporter.js.flow +15 -16
  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} +13 -23
  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 +18 -20
  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 +16 -15
  196. package/src/lib/getPrependedScripts.js.flow +8 -8
  197. package/src/lib/logToConsole.js +12 -5
  198. package/src/lib/logToConsole.js.flow +19 -6
  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 +18 -4
  207. package/src/lib/splitBundleOptions.js +5 -5
  208. package/src/lib/splitBundleOptions.js.flow +1 -1
  209. package/src/lib/transformHelpers.js +11 -10
  210. package/src/lib/transformHelpers.js.flow +6 -13
  211. package/src/node-haste/DependencyGraph/ModuleResolution.js +51 -30
  212. package/src/node-haste/DependencyGraph/ModuleResolution.js.flow +49 -48
  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 +51 -118
  218. package/src/node-haste/DependencyGraph.js.flow +38 -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 +2 -2
  224. package/src/node-haste/Package.js.flow +1 -1
  225. package/src/node-haste/lib/AssetPaths.js +5 -5
  226. package/src/node-haste/lib/AssetPaths.js.flow +7 -6
  227. package/src/node-haste/lib/parsePlatformFilePath.js +4 -4
  228. package/src/node-haste/lib/parsePlatformFilePath.js.flow +2 -2
  229. package/src/shared/output/RamBundle/as-assets.js +14 -15
  230. package/src/shared/output/RamBundle/as-assets.js.flow +9 -11
  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 +6 -4
  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.
@@ -10,18 +10,18 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- const DeltaCalculator = require('./DeltaBundler/DeltaCalculator');
14
-
15
13
  import type Bundler from './Bundler';
16
14
  import type {
17
15
  DeltaResult,
18
- Graph,
19
16
  Dependencies,
17
+ Graph,
20
18
  // eslint-disable-next-line no-unused-vars
21
19
  MixedOutput,
22
20
  Options,
23
21
  } from './DeltaBundler/types.flow';
24
22
 
23
+ const DeltaCalculator = require('./DeltaBundler/DeltaCalculator');
24
+
25
25
  export type {
26
26
  DeltaResult,
27
27
  Graph,
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);
@@ -143,8 +151,9 @@ class HmrServer {
143
151
  const unlisten = this._bundler.getDeltaBundler().listen(
144
152
  graph,
145
153
  debounceAsyncQueue(
154
+ // $FlowFixMe[method-unbinding] added when improving typing for this parameters
146
155
  this._handleFileChange.bind(this, clientGroup, {
147
- isInitialUpdate: false
156
+ isInitialUpdate: false,
148
157
  }),
149
158
  50
150
159
  )
@@ -152,14 +161,14 @@ class HmrServer {
152
161
  }
153
162
 
154
163
  await this._handleFileChange(clientGroup, {
155
- isInitialUpdate: true
164
+ isInitialUpdate: true,
156
165
  });
157
166
  send([sendFn], {
158
- type: "bundle-registered"
167
+ type: "bundle-registered",
159
168
  });
160
169
  }
161
170
 
162
- async onClientMessage(client, message, sendFn) {
171
+ onClientMessage = async (client, message, sendFn) => {
163
172
  let data;
164
173
 
165
174
  try {
@@ -167,7 +176,7 @@ class HmrServer {
167
176
  } catch (error) {
168
177
  send([sendFn], {
169
178
  type: "error",
170
- body: formatBundlingError(error)
179
+ body: formatBundlingError(error),
171
180
  });
172
181
  return Promise.resolve();
173
182
  }
@@ -176,7 +185,7 @@ class HmrServer {
176
185
  switch (data.type) {
177
186
  case "register-entrypoints":
178
187
  return Promise.all(
179
- data.entryPoints.map(entryPoint =>
188
+ data.entryPoints.map((entryPoint) =>
180
189
  this._registerEntryPoint(client, entryPoint, sendFn)
181
190
  )
182
191
  );
@@ -185,7 +194,8 @@ class HmrServer {
185
194
  this._config.reporter.update({
186
195
  type: "client_log",
187
196
  level: data.level,
188
- data: data.data
197
+ data: data.data,
198
+ mode: data.mode,
189
199
  });
190
200
 
191
201
  break;
@@ -200,19 +210,17 @@ class HmrServer {
200
210
  }
201
211
 
202
212
  return Promise.resolve();
203
- }
204
-
205
- onClientError(client, e) {
213
+ };
214
+ onClientError = (client, e) => {
206
215
  this._config.reporter.update({
207
216
  type: "hmr_client_error",
208
- error: e
217
+ error: e.error,
209
218
  });
210
219
 
211
220
  this.onClientDisconnect(client);
212
- }
213
-
214
- onClientDisconnect(client) {
215
- client.revisionIds.forEach(revisionId => {
221
+ };
222
+ onClientDisconnect = (client) => {
223
+ client.revisionIds.forEach((revisionId) => {
216
224
  const group = this._clientGroups.get(revisionId);
217
225
 
218
226
  if (group != null) {
@@ -225,10 +233,12 @@ class HmrServer {
225
233
  }
226
234
  }
227
235
  });
228
- }
236
+ };
229
237
 
230
238
  async _handleFileChange(group, options) {
231
- const optedIntoHMR = [...group.clients].some(client => client.optedIntoHMR);
239
+ const optedIntoHMR = [...group.clients].some(
240
+ (client) => client.optedIntoHMR
241
+ );
232
242
  const processingHmrChange = log(
233
243
  createActionStartEntry({
234
244
  // Even when HMR is disabled on the client, this function still
@@ -239,36 +249,40 @@ class HmrServer {
239
249
  // that didn't explicitly opt into HMR.
240
250
  action_name: optedIntoHMR
241
251
  ? "Processing HMR change"
242
- : "Processing HMR change (no client opt-in)"
252
+ : "Processing HMR change (no client opt-in)",
243
253
  })
244
254
  );
245
- const sendFns = [...group.clients].map(client => client.sendFn);
255
+ const sendFns = [...group.clients].map((client) => client.sendFn);
246
256
  send(sendFns, {
247
257
  type: "update-start",
248
- body: options
258
+ body: options,
249
259
  });
250
260
  const message = await this._prepareMessage(group, options);
251
261
  send(sendFns, message);
252
262
  send(sendFns, {
253
- type: "update-done"
263
+ type: "update-done",
254
264
  });
255
265
  log({
256
266
  ...createActionEndEntry(processingHmrChange),
257
267
  outdated_modules:
258
268
  message.type === "update"
259
269
  ? message.body.added.length + message.body.modified.length
260
- : undefined
270
+ : undefined,
261
271
  });
262
272
  }
263
273
 
264
274
  async _prepareMessage(group, options) {
265
275
  try {
276
+ var _this$_config$server$2;
277
+
266
278
  const revPromise = this._bundler.getRevision(group.revisionId);
267
279
 
268
280
  if (!revPromise) {
269
281
  return {
270
282
  type: "error",
271
- body: formatBundlingError(new RevisionNotFoundError(group.revisionId))
283
+ body: formatBundlingError(
284
+ new RevisionNotFoundError(group.revisionId)
285
+ ),
272
286
  };
273
287
  }
274
288
 
@@ -283,7 +297,7 @@ class HmrServer {
283
297
 
284
298
  for (const client of group.clients) {
285
299
  client.revisionIds = client.revisionIds.filter(
286
- revisionId => revisionId !== group.revisionId
300
+ (revisionId) => revisionId !== group.revisionId
287
301
  );
288
302
  client.revisionIds.push(revision.id);
289
303
  }
@@ -292,28 +306,32 @@ class HmrServer {
292
306
 
293
307
  const hmrUpdate = hmrJSBundle(delta, revision.graph, {
294
308
  createModuleId: this._createModuleId,
295
- projectRoot: this._config.projectRoot,
296
- 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,
297
315
  });
298
316
  return {
299
317
  type: "update",
300
318
  body: {
301
319
  revisionId: revision.id,
302
320
  isInitialUpdate: options.isInitialUpdate,
303
- ...hmrUpdate
304
- }
321
+ ...hmrUpdate,
322
+ },
305
323
  };
306
324
  } catch (error) {
307
325
  const formattedError = formatBundlingError(error);
308
326
 
309
327
  this._config.reporter.update({
310
328
  type: "bundling_error",
311
- error
329
+ error,
312
330
  });
313
331
 
314
332
  return {
315
333
  type: "error",
316
- body: formattedError
334
+ body: formattedError,
317
335
  };
318
336
  }
319
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',
@@ -172,6 +174,7 @@ class HmrServer<TClient: Client> {
172
174
  const unlisten = this._bundler.getDeltaBundler().listen(
173
175
  graph,
174
176
  debounceAsyncQueue(
177
+ // $FlowFixMe[method-unbinding] added when improving typing for this parameters
175
178
  this._handleFileChange.bind(this, clientGroup, {
176
179
  isInitialUpdate: false,
177
180
  }),
@@ -184,11 +187,11 @@ class HmrServer<TClient: Client> {
184
187
  send([sendFn], {type: 'bundle-registered'});
185
188
  }
186
189
 
187
- async onClientMessage(
190
+ onClientMessage: (
188
191
  client: TClient,
189
192
  message: string,
190
193
  sendFn: (data: string) => void,
191
- ): Promise<void> {
194
+ ) => Promise<void> = async (client, message, sendFn) => {
192
195
  let data: HmrClientMessage;
193
196
  try {
194
197
  data = JSON.parse(message);
@@ -212,6 +215,7 @@ class HmrServer<TClient: Client> {
212
215
  type: 'client_log',
213
216
  level: data.level,
214
217
  data: data.data,
218
+ mode: data.mode,
215
219
  });
216
220
  break;
217
221
  case 'log-opt-in':
@@ -222,17 +226,17 @@ class HmrServer<TClient: Client> {
222
226
  }
223
227
  }
224
228
  return Promise.resolve();
225
- }
229
+ };
226
230
 
227
- onClientError(client: TClient, e: Error): void {
231
+ onClientError: (client: TClient, e: ErrorEvent) => void = (client, e) => {
228
232
  this._config.reporter.update({
229
233
  type: 'hmr_client_error',
230
- error: e,
234
+ error: e.error,
231
235
  });
232
236
  this.onClientDisconnect(client);
233
- }
237
+ };
234
238
 
235
- onClientDisconnect(client: TClient): void {
239
+ onClientDisconnect: (client: TClient) => void = client => {
236
240
  client.revisionIds.forEach(revisionId => {
237
241
  const group = this._clientGroups.get(revisionId);
238
242
  if (group != null) {
@@ -244,7 +248,7 @@ class HmrServer<TClient: Client> {
244
248
  }
245
249
  }
246
250
  });
247
- }
251
+ };
248
252
 
249
253
  async _handleFileChange(
250
254
  group: ClientGroup,
@@ -318,7 +322,8 @@ class HmrServer<TClient: Client> {
318
322
 
319
323
  const hmrUpdate = hmrJSBundle(delta, revision.graph, {
320
324
  createModuleId: this._createModuleId,
321
- projectRoot: this._config.projectRoot,
325
+ projectRoot:
326
+ this._config.server.unstable_serverRoot ?? this._config.projectRoot,
322
327
  clientUrl: group.clientUrl,
323
328
  });
324
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.