metro 0.83.0 → 0.83.2

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 (208) hide show
  1. package/package.json +16 -16
  2. package/src/Assets.js +68 -42
  3. package/src/Assets.js.flow +13 -24
  4. package/src/Bundler/util.js +40 -17
  5. package/src/Bundler/util.js.flow +6 -13
  6. package/src/Bundler.js +17 -6
  7. package/src/Bundler.js.flow +3 -7
  8. package/src/DeltaBundler/DeltaCalculator.js +15 -15
  9. package/src/DeltaBundler/DeltaCalculator.js.flow +4 -7
  10. package/src/DeltaBundler/Graph.js +45 -40
  11. package/src/DeltaBundler/Graph.js.flow +3 -4
  12. package/src/DeltaBundler/Serializers/baseJSBundle.js +24 -10
  13. package/src/DeltaBundler/Serializers/baseJSBundle.js.flow +6 -9
  14. package/src/DeltaBundler/Serializers/getAllFiles.js +9 -6
  15. package/src/DeltaBundler/Serializers/getAllFiles.js.flow +4 -8
  16. package/src/DeltaBundler/Serializers/getAssets.js +18 -11
  17. package/src/DeltaBundler/Serializers/getAssets.js.flow +5 -9
  18. package/src/DeltaBundler/Serializers/getExplodedSourceMap.d.ts +26 -0
  19. package/src/DeltaBundler/Serializers/getExplodedSourceMap.js +7 -6
  20. package/src/DeltaBundler/Serializers/getExplodedSourceMap.js.flow +3 -9
  21. package/src/DeltaBundler/Serializers/getRamBundleInfo.js +40 -23
  22. package/src/DeltaBundler/Serializers/getRamBundleInfo.js.flow +11 -18
  23. package/src/DeltaBundler/Serializers/helpers/getInlineSourceMappingURL.js +4 -1
  24. package/src/DeltaBundler/Serializers/helpers/getInlineSourceMappingURL.js.flow +1 -5
  25. package/src/DeltaBundler/Serializers/helpers/getSourceMapInfo.js +7 -4
  26. package/src/DeltaBundler/Serializers/helpers/getSourceMapInfo.js.flow +3 -7
  27. package/src/DeltaBundler/Serializers/helpers/getTransitiveDependencies.js +4 -1
  28. package/src/DeltaBundler/Serializers/helpers/getTransitiveDependencies.js.flow +2 -6
  29. package/src/DeltaBundler/Serializers/helpers/js.js +65 -31
  30. package/src/DeltaBundler/Serializers/helpers/js.js.flow +21 -21
  31. package/src/DeltaBundler/Serializers/helpers/processModules.js +8 -5
  32. package/src/DeltaBundler/Serializers/helpers/processModules.js.flow +3 -7
  33. package/src/DeltaBundler/Serializers/hmrJSBundle.js +70 -25
  34. package/src/DeltaBundler/Serializers/hmrJSBundle.js.flow +43 -33
  35. package/src/DeltaBundler/Serializers/sourceMapGenerator.js +19 -16
  36. package/src/DeltaBundler/Serializers/sourceMapGenerator.js.flow +6 -14
  37. package/src/DeltaBundler/Serializers/sourceMapObject.js +12 -10
  38. package/src/DeltaBundler/Serializers/sourceMapObject.js.flow +4 -9
  39. package/src/DeltaBundler/Serializers/sourceMapString.js +14 -12
  40. package/src/DeltaBundler/Serializers/sourceMapString.js.flow +4 -9
  41. package/src/DeltaBundler/Transformer.js +32 -27
  42. package/src/DeltaBundler/Transformer.js.flow +10 -17
  43. package/src/DeltaBundler/Worker.flow.js +25 -18
  44. package/src/DeltaBundler/Worker.flow.js.flow +12 -18
  45. package/src/DeltaBundler/Worker.js.flow +2 -0
  46. package/src/DeltaBundler/WorkerFarm.js +13 -11
  47. package/src/DeltaBundler/WorkerFarm.js.flow +7 -9
  48. package/src/DeltaBundler/buildSubgraph.js +13 -17
  49. package/src/DeltaBundler/buildSubgraph.js.flow +1 -1
  50. package/src/DeltaBundler/getTransformCacheKey.js +12 -6
  51. package/src/DeltaBundler/getTransformCacheKey.js.flow +5 -7
  52. package/src/DeltaBundler/mergeDeltas.js +4 -1
  53. package/src/DeltaBundler/mergeDeltas.js.flow +5 -6
  54. package/src/DeltaBundler/types.d.ts +4 -1
  55. package/src/DeltaBundler/{types.flow.js → types.js} +1 -5
  56. package/src/DeltaBundler/{types.flow.js.flow → types.js.flow} +5 -3
  57. package/src/DeltaBundler.js +15 -6
  58. package/src/DeltaBundler.js.flow +4 -8
  59. package/src/HmrServer.js +116 -68
  60. package/src/HmrServer.js.flow +41 -52
  61. package/src/IncrementalBundler/GraphNotFoundError.js +5 -1
  62. package/src/IncrementalBundler/GraphNotFoundError.js.flow +1 -5
  63. package/src/IncrementalBundler/ResourceNotFoundError.js +5 -1
  64. package/src/IncrementalBundler/ResourceNotFoundError.js.flow +1 -5
  65. package/src/IncrementalBundler/RevisionNotFoundError.js +5 -1
  66. package/src/IncrementalBundler/RevisionNotFoundError.js.flow +1 -5
  67. package/src/IncrementalBundler.js +71 -35
  68. package/src/IncrementalBundler.js.flow +12 -16
  69. package/src/ModuleGraph/test-helpers.js +19 -14
  70. package/src/ModuleGraph/worker/JsFileWrapping.js +22 -29
  71. package/src/ModuleGraph/worker/JsFileWrapping.js.flow +1 -10
  72. package/src/ModuleGraph/worker/collectDependencies.js +81 -52
  73. package/src/ModuleGraph/worker/collectDependencies.js.flow +15 -22
  74. package/src/ModuleGraph/worker/generateImportNames.js +12 -6
  75. package/src/ModuleGraph/worker/generateImportNames.js.flow +3 -7
  76. package/src/ModuleGraph/worker/importLocationsPlugin.js +5 -4
  77. package/src/ModuleGraph/worker/importLocationsPlugin.js.flow +2 -4
  78. package/src/Server/MultipartResponse.js +11 -4
  79. package/src/Server/MultipartResponse.js.flow +2 -5
  80. package/src/Server/symbolicate.d.ts +31 -0
  81. package/src/Server/symbolicate.js +15 -16
  82. package/src/Server/symbolicate.js.flow +6 -16
  83. package/src/Server.d.ts +0 -1
  84. package/src/Server.js +298 -191
  85. package/src/Server.js.flow +136 -99
  86. package/src/cli-utils.js +13 -4
  87. package/src/cli-utils.js.flow +3 -5
  88. package/src/cli.js.flow +2 -0
  89. package/src/commands/build.js +18 -15
  90. package/src/commands/build.js.flow +6 -6
  91. package/src/commands/dependencies.js +26 -16
  92. package/src/commands/dependencies.js.flow +7 -9
  93. package/src/commands/serve.js +16 -11
  94. package/src/commands/serve.js.flow +5 -6
  95. package/src/index.d.ts +26 -3
  96. package/src/index.flow.js +162 -72
  97. package/src/index.flow.js.flow +60 -47
  98. package/src/index.js.flow +2 -0
  99. package/src/integration_tests/basic_bundle/TestBundle.js.flow +2 -1
  100. package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-import.js +1 -5
  101. package/src/integration_tests/basic_bundle/build-errors/inline-requires-cannot-resolve-import.js +1 -5
  102. package/src/integration_tests/basic_bundle/import-export/index.js +5 -13
  103. package/src/integration_tests/basic_bundle/require-context/mode-eager.js +2 -2
  104. package/src/integration_tests/basic_bundle/require-context/mode-lazy-once.js +2 -2
  105. package/src/integration_tests/basic_bundle/require-context/mode-lazy.js +2 -2
  106. package/src/integration_tests/basic_bundle/require-context/mode-sync.js +1 -1
  107. package/src/integration_tests/basic_bundle/require-context/utils.js +1 -1
  108. package/src/integration_tests/execBundle.js +7 -4
  109. package/src/integration_tests/execBundle.js.flow +1 -3
  110. package/src/integration_tests/metro.config.js +3 -3
  111. package/src/lib/BatchProcessor.js +15 -5
  112. package/src/lib/BatchProcessor.js.flow +2 -6
  113. package/src/lib/CountingSet.js.flow +2 -2
  114. package/src/lib/JsonReporter.js +6 -2
  115. package/src/lib/JsonReporter.js.flow +1 -5
  116. package/src/lib/RamBundleParser.js +12 -3
  117. package/src/lib/RamBundleParser.js.flow +2 -6
  118. package/src/lib/TerminalReporter.js +95 -56
  119. package/src/lib/TerminalReporter.js.flow +9 -12
  120. package/src/lib/bundleToString.js +4 -1
  121. package/src/lib/bundleToString.js.flow +2 -9
  122. package/src/lib/contextModule.js +3 -7
  123. package/src/lib/contextModuleTemplates.js +9 -19
  124. package/src/lib/countLines.js +5 -1
  125. package/src/lib/countLines.js.flow +1 -3
  126. package/src/lib/createWebsocketServer.js +7 -7
  127. package/src/lib/createWebsocketServer.js.flow +4 -4
  128. package/src/lib/debounceAsyncQueue.js +4 -1
  129. package/src/lib/debounceAsyncQueue.js.flow +1 -5
  130. package/src/lib/formatBundlingError.js +32 -22
  131. package/src/lib/formatBundlingError.js.flow +18 -20
  132. package/src/lib/getAppendScripts.js +20 -20
  133. package/src/lib/getAppendScripts.js.flow +9 -13
  134. package/src/lib/getGraphId.js +12 -6
  135. package/src/lib/getGraphId.js.flow +4 -10
  136. package/src/lib/getPreludeCode.js +7 -10
  137. package/src/lib/getPreludeCode.js.flow +2 -6
  138. package/src/lib/getPrependedScripts.js +40 -16
  139. package/src/lib/getPrependedScripts.js.flow +8 -13
  140. package/src/lib/isResolvedDependency.js.flow +1 -1
  141. package/src/lib/logToConsole.js +18 -12
  142. package/src/lib/logToConsole.js.flow +5 -14
  143. package/src/lib/parseBundleOptionsFromBundleRequestUrl.js +144 -0
  144. package/src/lib/parseBundleOptionsFromBundleRequestUrl.js.flow +146 -0
  145. package/src/lib/parseCustomResolverOptions.js +8 -6
  146. package/src/lib/parseCustomResolverOptions.js.flow +6 -12
  147. package/src/lib/parseCustomTransformOptions.js +8 -6
  148. package/src/lib/parseCustomTransformOptions.js.flow +11 -14
  149. package/src/lib/parseJsonBody.js +4 -1
  150. package/src/lib/parseJsonBody.js.flow +1 -3
  151. package/src/lib/pathUtils.js +34 -0
  152. package/src/lib/pathUtils.js.flow +16 -0
  153. package/src/lib/relativizeSourceMap.js +12 -3
  154. package/src/lib/relativizeSourceMap.js.flow +2 -6
  155. package/src/lib/reporting.js +25 -19
  156. package/src/lib/reporting.js.flow +6 -16
  157. package/src/lib/splitBundleOptions.js +4 -2
  158. package/src/lib/splitBundleOptions.js.flow +4 -7
  159. package/src/lib/transformHelpers.js +19 -25
  160. package/src/lib/transformHelpers.js.flow +5 -15
  161. package/src/node-haste/DependencyGraph/ModuleResolution.js +75 -57
  162. package/src/node-haste/DependencyGraph/ModuleResolution.js.flow +28 -44
  163. package/src/node-haste/DependencyGraph/createFileMap.js +15 -13
  164. package/src/node-haste/DependencyGraph/createFileMap.js.flow +2 -5
  165. package/src/node-haste/DependencyGraph.js +61 -45
  166. package/src/node-haste/DependencyGraph.js.flow +34 -31
  167. package/src/node-haste/Package.js +13 -6
  168. package/src/node-haste/Package.js.flow +3 -7
  169. package/src/node-haste/{ModuleCache.js → PackageCache.js} +11 -19
  170. package/src/node-haste/{ModuleCache.js.flow → PackageCache.js.flow} +2 -30
  171. package/src/node-haste/lib/AssetPaths.js +14 -8
  172. package/src/node-haste/lib/AssetPaths.js.flow +7 -8
  173. package/src/node-haste/lib/parsePlatformFilePath.js +10 -4
  174. package/src/node-haste/lib/parsePlatformFilePath.js.flow +2 -6
  175. package/src/shared/output/RamBundle/as-assets.js +42 -22
  176. package/src/shared/output/RamBundle/as-assets.js.flow +12 -15
  177. package/src/shared/output/RamBundle/as-indexed-file.js +33 -23
  178. package/src/shared/output/RamBundle/as-indexed-file.js.flow +10 -16
  179. package/src/shared/output/RamBundle/buildSourcemapWithMetadata.js +11 -10
  180. package/src/shared/output/RamBundle/buildSourcemapWithMetadata.js.flow +4 -6
  181. package/src/shared/output/RamBundle/magic-number.js +5 -1
  182. package/src/shared/output/RamBundle/magic-number.js.flow +1 -3
  183. package/src/shared/output/RamBundle/util.js +21 -18
  184. package/src/shared/output/RamBundle/util.js.flow +4 -6
  185. package/src/shared/output/RamBundle/write-sourcemap.js +9 -3
  186. package/src/shared/output/RamBundle/write-sourcemap.js.flow +2 -6
  187. package/src/shared/output/RamBundle.js +16 -9
  188. package/src/shared/output/RamBundle.js.flow +8 -12
  189. package/src/shared/output/bundle.flow.js +37 -13
  190. package/src/shared/output/bundle.flow.js.flow +24 -12
  191. package/src/shared/output/bundle.js.flow +2 -0
  192. package/src/shared/output/meta.js +16 -9
  193. package/src/shared/output/meta.js.flow +3 -5
  194. package/src/shared/output/unbundle.js +14 -1
  195. package/src/shared/output/unbundle.js.flow +1 -3
  196. package/src/shared/output/writeFile.js +11 -4
  197. package/src/shared/output/writeFile.js.flow +3 -5
  198. package/src/shared/types.d.ts +0 -1
  199. package/src/shared/{types.flow.js.flow → types.js.flow} +16 -17
  200. package/src/lib/createModuleIdFactory.js +0 -15
  201. package/src/lib/createModuleIdFactory.js.flow +0 -27
  202. package/src/lib/getMaxWorkers.js +0 -9
  203. package/src/lib/getMaxWorkers.js.flow +0 -22
  204. package/src/lib/parseOptionsFromUrl.js +0 -62
  205. package/src/lib/parseOptionsFromUrl.js.flow +0 -97
  206. package/src/node-haste/Module.js +0 -24
  207. package/src/node-haste/Module.js.flow +0 -41
  208. /package/src/shared/{types.flow.js → types.js} +0 -0
@@ -9,8 +9,6 @@
9
9
  * @oncall react_native
10
10
  */
11
11
 
12
- 'use strict';
13
-
14
12
  import type {
15
13
  DeltaResult,
16
14
  Graph,
@@ -18,10 +16,10 @@ import type {
18
16
  MixedOutput,
19
17
  Options,
20
18
  ReadOnlyGraph,
21
- } from './DeltaBundler/types.flow';
19
+ } from './DeltaBundler/types';
22
20
  import type EventEmitter from 'events';
23
21
 
24
- const DeltaCalculator = require('./DeltaBundler/DeltaCalculator');
22
+ import DeltaCalculator from './DeltaBundler/DeltaCalculator';
25
23
 
26
24
  export type {
27
25
  DeltaResult,
@@ -34,7 +32,7 @@ export type {
34
32
  TransformResult,
35
33
  TransformResultDependency,
36
34
  TransformResultWithSource,
37
- } from './DeltaBundler/types.flow';
35
+ } from './DeltaBundler/types';
38
36
 
39
37
  /**
40
38
  * `DeltaBundler` uses the `DeltaTransformer` to build bundle deltas. This
@@ -42,7 +40,7 @@ export type {
42
40
  * concurrent clients requesting their own deltas. This is done through the
43
41
  * `clientId` param (which maps a client to a specific delta transformer).
44
42
  */
45
- class DeltaBundler<T = MixedOutput> {
43
+ export default class DeltaBundler<T = MixedOutput> {
46
44
  _changeEventSource: EventEmitter;
47
45
  _deltaCalculators: Map<Graph<T>, DeltaCalculator<T>> = new Map();
48
46
 
@@ -140,5 +138,3 @@ class DeltaBundler<T = MixedOutput> {
140
138
  this._deltaCalculators.delete(graph);
141
139
  }
142
140
  }
143
-
144
- module.exports = DeltaBundler;
package/src/HmrServer.js CHANGED
@@ -1,19 +1,64 @@
1
1
  "use strict";
2
2
 
3
- const hmrJSBundle = require("./DeltaBundler/Serializers/hmrJSBundle");
4
- const GraphNotFoundError = require("./IncrementalBundler/GraphNotFoundError");
5
- const RevisionNotFoundError = require("./IncrementalBundler/RevisionNotFoundError");
6
- const debounceAsyncQueue = require("./lib/debounceAsyncQueue");
7
- const formatBundlingError = require("./lib/formatBundlingError");
8
- const getGraphId = require("./lib/getGraphId");
9
- const parseOptionsFromUrl = require("./lib/parseOptionsFromUrl");
10
- const splitBundleOptions = require("./lib/splitBundleOptions");
11
- const transformHelpers = require("./lib/transformHelpers");
12
- const {
13
- Logger: { createActionStartEntry, createActionEndEntry, log },
14
- } = require("metro-core");
15
- const nullthrows = require("nullthrows");
16
- const url = require("url");
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true,
5
+ });
6
+ exports.default = void 0;
7
+ var _hmrJSBundle = _interopRequireDefault(
8
+ require("./DeltaBundler/Serializers/hmrJSBundle"),
9
+ );
10
+ var _GraphNotFoundError = _interopRequireDefault(
11
+ require("./IncrementalBundler/GraphNotFoundError"),
12
+ );
13
+ var _RevisionNotFoundError = _interopRequireDefault(
14
+ require("./IncrementalBundler/RevisionNotFoundError"),
15
+ );
16
+ var _debounceAsyncQueue = _interopRequireDefault(
17
+ require("./lib/debounceAsyncQueue"),
18
+ );
19
+ var _formatBundlingError = _interopRequireDefault(
20
+ require("./lib/formatBundlingError"),
21
+ );
22
+ var _getGraphId = _interopRequireDefault(require("./lib/getGraphId"));
23
+ var _parseBundleOptionsFromBundleRequestUrl = _interopRequireDefault(
24
+ require("./lib/parseBundleOptionsFromBundleRequestUrl"),
25
+ );
26
+ var _splitBundleOptions = _interopRequireDefault(
27
+ require("./lib/splitBundleOptions"),
28
+ );
29
+ var transformHelpers = _interopRequireWildcard(
30
+ require("./lib/transformHelpers"),
31
+ );
32
+ var _metroCore = require("metro-core");
33
+ var _nullthrows = _interopRequireDefault(require("nullthrows"));
34
+ function _getRequireWildcardCache(e) {
35
+ if ("function" != typeof WeakMap) return null;
36
+ var r = new WeakMap(),
37
+ t = new WeakMap();
38
+ return (_getRequireWildcardCache = function (e) {
39
+ return e ? t : r;
40
+ })(e);
41
+ }
42
+ function _interopRequireWildcard(e, r) {
43
+ if (!r && e && e.__esModule) return e;
44
+ if (null === e || ("object" != typeof e && "function" != typeof e))
45
+ return { default: e };
46
+ var t = _getRequireWildcardCache(r);
47
+ if (t && t.has(e)) return t.get(e);
48
+ var n = { __proto__: null },
49
+ a = Object.defineProperty && Object.getOwnPropertyDescriptor;
50
+ for (var u in e)
51
+ if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
52
+ var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
53
+ i && (i.get || i.set) ? Object.defineProperty(n, u, i) : (n[u] = e[u]);
54
+ }
55
+ return ((n.default = e), t && t.set(e, n), n);
56
+ }
57
+ function _interopRequireDefault(e) {
58
+ return e && e.__esModule ? e : { default: e };
59
+ }
60
+ const debug = require("debug")("Metro:HMR");
61
+ const { createActionStartEntry, createActionEndEntry, log } = _metroCore.Logger;
17
62
  function send(sendFns, message) {
18
63
  const strMessage = JSON.stringify(message);
19
64
  sendFns.forEach((sendFn) => sendFn(strMessage));
@@ -33,18 +78,20 @@ class HmrServer {
33
78
  };
34
79
  };
35
80
  async _registerEntryPoint(client, requestUrl, sendFn) {
81
+ debug("Registering entry point: %s", requestUrl);
36
82
  requestUrl = this._config.server.rewriteRequestUrl(requestUrl);
37
- const clientUrl = nullthrows(url.parse(requestUrl, true));
38
- const { bundleType: _bundleType, ...options } = parseOptionsFromUrl(
83
+ debug("Rewritten as: %s", requestUrl);
84
+ const { bundleType: _bundleType, ...options } = (0,
85
+ _parseBundleOptionsFromBundleRequestUrl.default)(
39
86
  requestUrl,
40
- new Set(this._config.resolver.platforms)
87
+ new Set(this._config.resolver.platforms),
41
88
  );
42
- const { entryFile, resolverOptions, transformOptions, graphOptions } =
43
- splitBundleOptions(options);
89
+ const { entryFile, resolverOptions, transformOptions, graphOptions } = (0,
90
+ _splitBundleOptions.default)(options);
44
91
  const resolutionFn = await transformHelpers.getResolveDependencyFn(
45
92
  this._bundler.getBundler(),
46
93
  transformOptions.platform,
47
- resolverOptions
94
+ resolverOptions,
48
95
  );
49
96
  const resolvedEntryFilePath = resolutionFn(
50
97
  (this._config.server.unstable_serverRoot ?? this._config.projectRoot) +
@@ -57,20 +104,26 @@ class HmrServer {
57
104
  isESMImport: false,
58
105
  locs: [],
59
106
  },
60
- }
107
+ },
61
108
  ).filePath;
62
- const graphId = getGraphId(resolvedEntryFilePath, transformOptions, {
63
- resolverOptions,
64
- shallow: graphOptions.shallow,
65
- lazy: graphOptions.lazy,
66
- unstable_allowRequireContext:
67
- this._config.transformer.unstable_allowRequireContext,
68
- });
109
+ const graphId = (0, _getGraphId.default)(
110
+ resolvedEntryFilePath,
111
+ transformOptions,
112
+ {
113
+ resolverOptions,
114
+ shallow: graphOptions.shallow,
115
+ lazy: graphOptions.lazy,
116
+ unstable_allowRequireContext:
117
+ this._config.transformer.unstable_allowRequireContext,
118
+ },
119
+ );
69
120
  const revPromise = this._bundler.getRevisionByGraphId(graphId);
70
121
  if (!revPromise) {
71
122
  send([sendFn], {
72
123
  type: "error",
73
- body: formatBundlingError(new GraphNotFoundError(graphId)),
124
+ body: (0, _formatBundlingError.default)(
125
+ new _GraphNotFoundError.default(graphId),
126
+ ),
74
127
  });
75
128
  return;
76
129
  }
@@ -80,41 +133,36 @@ class HmrServer {
80
133
  if (clientGroup != null) {
81
134
  clientGroup.clients.add(client);
82
135
  } else {
136
+ const clientUrl = new URL(requestUrl);
83
137
  clientUrl.protocol = "http";
84
- const {
85
- dev,
86
- minify,
87
- runModule,
88
- bundleEntry: _bundleEntry,
89
- ...query
90
- } = clientUrl.query || {};
91
- clientUrl.query = {
92
- ...query,
93
- dev: dev || "true",
94
- minify: minify || "false",
95
- modulesOnly: "true",
96
- runModule: runModule || "false",
97
- shallow: "true",
98
- };
99
- clientUrl.search = "";
138
+ const clientQuery = clientUrl.searchParams;
139
+ clientQuery.delete("bundleEntry");
140
+ clientQuery.set("dev", clientQuery.get("dev") || "true");
141
+ clientQuery.set("minify", clientQuery.get("minify") || "false");
142
+ clientQuery.set("modulesOnly", "true");
143
+ clientQuery.set("runModule", clientQuery.get("runModule") || "false");
144
+ clientQuery.set("shallow", "true");
100
145
  clientGroup = {
101
146
  clients: new Set([client]),
102
- clientUrl,
147
+ clientUrl: new URL(clientUrl),
103
148
  revisionId: id,
104
149
  graphOptions,
105
150
  unlisten: () => unlisten(),
106
151
  };
107
152
  this._clientGroups.set(id, clientGroup);
108
153
  let latestEventArgs = [];
109
- const debounceCallHandleFileChange = debounceAsyncQueue(async () => {
110
- await this._handleFileChange(
111
- nullthrows(clientGroup),
112
- {
113
- isInitialUpdate: false,
114
- },
115
- ...latestEventArgs
116
- );
117
- }, 50);
154
+ const debounceCallHandleFileChange = (0, _debounceAsyncQueue.default)(
155
+ async () => {
156
+ await this._handleFileChange(
157
+ (0, _nullthrows.default)(clientGroup),
158
+ {
159
+ isInitialUpdate: false,
160
+ },
161
+ ...latestEventArgs,
162
+ );
163
+ },
164
+ 50,
165
+ );
118
166
  const unlisten = this._bundler
119
167
  .getDeltaBundler()
120
168
  .listen(graph, async (...args) => {
@@ -136,7 +184,7 @@ class HmrServer {
136
184
  } catch (error) {
137
185
  send([sendFn], {
138
186
  type: "error",
139
- body: formatBundlingError(error),
187
+ body: (0, _formatBundlingError.default)(error),
140
188
  });
141
189
  return Promise.resolve();
142
190
  }
@@ -145,8 +193,8 @@ class HmrServer {
145
193
  case "register-entrypoints":
146
194
  return Promise.all(
147
195
  data.entryPoints.map((entryPoint) =>
148
- this._registerEntryPoint(client, entryPoint, sendFn)
149
- )
196
+ this._registerEntryPoint(client, entryPoint, sendFn),
197
+ ),
150
198
  );
151
199
  case "log":
152
200
  if (this._config.server.forwardClientLogs) {
@@ -194,14 +242,14 @@ class HmrServer {
194
242
  logger.point("hmrPrepareAndSendMessage_start");
195
243
  }
196
244
  const optedIntoHMR = [...group.clients].some(
197
- (client) => client.optedIntoHMR
245
+ (client) => client.optedIntoHMR,
198
246
  );
199
247
  const processingHmrChange = log(
200
248
  createActionStartEntry({
201
249
  action_name: optedIntoHMR
202
250
  ? "Processing HMR change"
203
251
  : "Processing HMR change (no client opt-in)",
204
- })
252
+ }),
205
253
  );
206
254
  const sendFns = [...group.clients].map((client) => client.sendFn);
207
255
  send(sendFns, {
@@ -232,29 +280,29 @@ class HmrServer {
232
280
  if (!revPromise) {
233
281
  return {
234
282
  type: "error",
235
- body: formatBundlingError(
236
- new RevisionNotFoundError(group.revisionId)
283
+ body: (0, _formatBundlingError.default)(
284
+ new _RevisionNotFoundError.default(group.revisionId),
237
285
  ),
238
286
  };
239
287
  }
240
288
  logger?.point("updateGraph_start");
241
289
  const { revision, delta } = await this._bundler.updateGraph(
242
290
  await revPromise,
243
- false
291
+ false,
244
292
  );
245
293
  logger?.point("updateGraph_end");
246
294
  this._clientGroups.delete(group.revisionId);
247
295
  group.revisionId = revision.id;
248
296
  for (const client of group.clients) {
249
297
  client.revisionIds = client.revisionIds.filter(
250
- (revisionId) => revisionId !== group.revisionId
298
+ (revisionId) => revisionId !== group.revisionId,
251
299
  );
252
300
  client.revisionIds.push(revision.id);
253
301
  }
254
302
  this._clientGroups.set(group.revisionId, group);
255
303
  logger?.point("serialize_start");
256
- const hmrUpdate = hmrJSBundle(delta, revision.graph, {
257
- clientUrl: group.clientUrl,
304
+ const hmrUpdate = (0, _hmrJSBundle.default)(delta, revision.graph, {
305
+ clientUrl: new URL(group.clientUrl),
258
306
  createModuleId: this._createModuleId,
259
307
  includeAsyncPaths: group.graphOptions.lazy,
260
308
  projectRoot: this._config.projectRoot,
@@ -271,7 +319,7 @@ class HmrServer {
271
319
  },
272
320
  };
273
321
  } catch (error) {
274
- const formattedError = formatBundlingError(error);
322
+ const formattedError = (0, _formatBundlingError.default)(error);
275
323
  this._config.reporter.update({
276
324
  type: "bundling_error",
277
325
  error,
@@ -283,4 +331,4 @@ class HmrServer {
283
331
  }
284
332
  }
285
333
  }
286
- module.exports = HmrServer;
334
+ exports.default = HmrServer;
@@ -8,35 +8,32 @@
8
8
  * @flow
9
9
  */
10
10
 
11
- 'use strict';
12
-
13
11
  import type IncrementalBundler, {RevisionId} from './IncrementalBundler';
14
- import type {GraphOptions} from './shared/types.flow';
12
+ import type {GraphOptions} from './shared/types';
15
13
  import type {ConfigT, RootPerfLogger} from 'metro-config';
16
14
  import type {
17
15
  HmrClientMessage,
18
16
  HmrErrorMessage,
19
17
  HmrMessage,
20
18
  HmrUpdateMessage,
21
- } from 'metro-runtime/src/modules/types.flow';
22
- import type {UrlWithParsedQuery} from 'url';
23
-
24
- const hmrJSBundle = require('./DeltaBundler/Serializers/hmrJSBundle');
25
- const GraphNotFoundError = require('./IncrementalBundler/GraphNotFoundError');
26
- const RevisionNotFoundError = require('./IncrementalBundler/RevisionNotFoundError');
27
- const debounceAsyncQueue = require('./lib/debounceAsyncQueue');
28
- const formatBundlingError = require('./lib/formatBundlingError');
29
- const getGraphId = require('./lib/getGraphId');
30
- const parseOptionsFromUrl = require('./lib/parseOptionsFromUrl');
31
- const splitBundleOptions = require('./lib/splitBundleOptions');
32
- const transformHelpers = require('./lib/transformHelpers');
33
- const {
34
- Logger: {createActionStartEntry, createActionEndEntry, log},
35
- } = require('metro-core');
36
- const nullthrows = require('nullthrows');
37
- const url = require('url');
38
-
39
- export type EntryPointURL = UrlWithParsedQuery;
19
+ } from 'metro-runtime/src/modules/types';
20
+
21
+ import hmrJSBundle from './DeltaBundler/Serializers/hmrJSBundle';
22
+ import GraphNotFoundError from './IncrementalBundler/GraphNotFoundError';
23
+ import RevisionNotFoundError from './IncrementalBundler/RevisionNotFoundError';
24
+ import debounceAsyncQueue from './lib/debounceAsyncQueue';
25
+ import formatBundlingError from './lib/formatBundlingError';
26
+ import getGraphId from './lib/getGraphId';
27
+ import parseBundleOptionsFromBundleRequestUrl from './lib/parseBundleOptionsFromBundleRequestUrl';
28
+ import splitBundleOptions from './lib/splitBundleOptions';
29
+ import * as transformHelpers from './lib/transformHelpers';
30
+ import {Logger} from 'metro-core';
31
+ import nullthrows from 'nullthrows';
32
+
33
+ // eslint-disable-next-line import/no-commonjs
34
+ const debug = require('debug')('Metro:HMR');
35
+
36
+ const {createActionStartEntry, createActionEndEntry, log} = Logger;
40
37
 
41
38
  export type Client = {
42
39
  optedIntoHMR: boolean,
@@ -46,7 +43,7 @@ export type Client = {
46
43
 
47
44
  type ClientGroup = {
48
45
  +clients: Set<Client>,
49
- clientUrl: EntryPointURL,
46
+ clientUrl: URL,
50
47
  revisionId: RevisionId,
51
48
  +unlisten: () => void,
52
49
  +graphOptions: GraphOptions,
@@ -66,7 +63,7 @@ function send(sendFns: Array<(string) => void>, message: HmrMessage): void {
66
63
  * getting connected, disconnected or having errors (through the
67
64
  * `onClientConnect`, `onClientDisconnect` and `onClientError` methods).
68
65
  */
69
- class HmrServer<TClient: Client> {
66
+ export default class HmrServer<TClient: Client> {
70
67
  _config: ConfigT;
71
68
  _bundler: IncrementalBundler;
72
69
  _createModuleId: (path: string) => number;
@@ -99,12 +96,15 @@ class HmrServer<TClient: Client> {
99
96
  requestUrl: string,
100
97
  sendFn: (data: string) => void,
101
98
  ): Promise<void> {
99
+ debug('Registering entry point: %s', requestUrl);
102
100
  requestUrl = this._config.server.rewriteRequestUrl(requestUrl);
103
- const clientUrl = nullthrows(url.parse(requestUrl, true));
104
- const {bundleType: _bundleType, ...options} = parseOptionsFromUrl(
105
- requestUrl,
106
- new Set(this._config.resolver.platforms),
107
- );
101
+ debug('Rewritten as: %s', requestUrl);
102
+
103
+ const {bundleType: _bundleType, ...options} =
104
+ parseBundleOptionsFromBundleRequestUrl(
105
+ requestUrl,
106
+ new Set(this._config.resolver.platforms),
107
+ );
108
108
  const {entryFile, resolverOptions, transformOptions, graphOptions} =
109
109
  splitBundleOptions(options);
110
110
 
@@ -153,31 +153,22 @@ class HmrServer<TClient: Client> {
153
153
  if (clientGroup != null) {
154
154
  clientGroup.clients.add(client);
155
155
  } else {
156
+ const clientUrl = new URL(requestUrl);
157
+
156
158
  // Prepare the clientUrl to be used as sourceUrl in HMR updates.
157
159
  clientUrl.protocol = 'http';
158
- const {
159
- dev,
160
- minify,
161
- runModule,
162
- bundleEntry: _bundleEntry,
163
- ...query
164
- } = clientUrl.query || {};
165
- clientUrl.query = {
166
- ...query,
167
- dev: dev || 'true',
168
- minify: minify || 'false',
169
- modulesOnly: 'true',
170
- runModule: runModule || 'false',
171
- shallow: 'true',
172
- };
173
- // the legacy url object is parsed with both "search" and "query" fields.
174
- // for the "query" field to be used when formatting the object bach to string, the "search" field must be empty.
175
- // https://nodejs.org/api/url.html#urlformaturlobject:~:text=If%20the%20urlObject.search%20property%20is%20undefined
176
- clientUrl.search = '';
160
+
161
+ const clientQuery = clientUrl.searchParams;
162
+ clientQuery.delete('bundleEntry');
163
+ clientQuery.set('dev', clientQuery.get('dev') || 'true');
164
+ clientQuery.set('minify', clientQuery.get('minify') || 'false');
165
+ clientQuery.set('modulesOnly', 'true');
166
+ clientQuery.set('runModule', clientQuery.get('runModule') || 'false');
167
+ clientQuery.set('shallow', 'true');
177
168
 
178
169
  clientGroup = {
179
170
  clients: new Set([client]),
180
- clientUrl,
171
+ clientUrl: new URL(clientUrl),
181
172
  revisionId: id,
182
173
  graphOptions,
183
174
  unlisten: (): void => unlisten(),
@@ -369,7 +360,7 @@ class HmrServer<TClient: Client> {
369
360
  logger?.point('serialize_start');
370
361
 
371
362
  const hmrUpdate = hmrJSBundle(delta, revision.graph, {
372
- clientUrl: group.clientUrl,
363
+ clientUrl: new URL(group.clientUrl),
373
364
  createModuleId: this._createModuleId,
374
365
  includeAsyncPaths: group.graphOptions.lazy,
375
366
  projectRoot: this._config.projectRoot,
@@ -396,5 +387,3 @@ class HmrServer<TClient: Client> {
396
387
  }
397
388
  }
398
389
  }
399
-
400
- module.exports = HmrServer;
@@ -1,9 +1,13 @@
1
1
  "use strict";
2
2
 
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true,
5
+ });
6
+ exports.default = void 0;
3
7
  class GraphNotFoundError extends Error {
4
8
  constructor(graphId) {
5
9
  super(`The graph \`${graphId}\` was not found.`);
6
10
  this.graphId = graphId;
7
11
  }
8
12
  }
9
- module.exports = GraphNotFoundError;
13
+ exports.default = GraphNotFoundError;
@@ -9,11 +9,9 @@
9
9
  * @oncall react_native
10
10
  */
11
11
 
12
- 'use strict';
13
-
14
12
  import type {GraphId} from '../lib/getGraphId';
15
13
 
16
- class GraphNotFoundError extends Error {
14
+ export default class GraphNotFoundError extends Error {
17
15
  graphId: GraphId;
18
16
 
19
17
  constructor(graphId: GraphId) {
@@ -21,5 +19,3 @@ class GraphNotFoundError extends Error {
21
19
  this.graphId = graphId;
22
20
  }
23
21
  }
24
-
25
- module.exports = GraphNotFoundError;
@@ -1,9 +1,13 @@
1
1
  "use strict";
2
2
 
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true,
5
+ });
6
+ exports.default = void 0;
3
7
  class ResourceNotFoundError extends Error {
4
8
  constructor(resourcePath) {
5
9
  super(`The resource \`${resourcePath}\` was not found.`);
6
10
  this.resourcePath = resourcePath;
7
11
  }
8
12
  }
9
- module.exports = ResourceNotFoundError;
13
+ exports.default = ResourceNotFoundError;
@@ -9,9 +9,7 @@
9
9
  * @oncall react_native
10
10
  */
11
11
 
12
- 'use strict';
13
-
14
- class ResourceNotFoundError extends Error {
12
+ export default class ResourceNotFoundError extends Error {
15
13
  resourcePath: string;
16
14
 
17
15
  constructor(resourcePath: string) {
@@ -19,5 +17,3 @@ class ResourceNotFoundError extends Error {
19
17
  this.resourcePath = resourcePath;
20
18
  }
21
19
  }
22
-
23
- module.exports = ResourceNotFoundError;
@@ -1,9 +1,13 @@
1
1
  "use strict";
2
2
 
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true,
5
+ });
6
+ exports.default = void 0;
3
7
  class RevisionNotFoundError extends Error {
4
8
  constructor(revisionId) {
5
9
  super(`The revision \`${revisionId}\` was not found.`);
6
10
  this.revisionId = revisionId;
7
11
  }
8
12
  }
9
- module.exports = RevisionNotFoundError;
13
+ exports.default = RevisionNotFoundError;
@@ -9,11 +9,9 @@
9
9
  * @oncall react_native
10
10
  */
11
11
 
12
- 'use strict';
13
-
14
12
  import type {RevisionId} from '../IncrementalBundler';
15
13
 
16
- class RevisionNotFoundError extends Error {
14
+ export default class RevisionNotFoundError extends Error {
17
15
  revisionId: RevisionId;
18
16
 
19
17
  constructor(revisionId: RevisionId) {
@@ -21,5 +19,3 @@ class RevisionNotFoundError extends Error {
21
19
  this.revisionId = revisionId;
22
20
  }
23
21
  }
24
-
25
- module.exports = RevisionNotFoundError;