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.
- package/package.json +22 -24
- package/src/Assets.js +9 -9
- package/src/Assets.js.flow +5 -7
- package/src/Bundler/util.js +16 -15
- package/src/Bundler/util.js.flow +11 -10
- package/src/Bundler.js +21 -8
- package/src/Bundler.js.flow +19 -7
- package/src/DeltaBundler/DeltaCalculator.js +15 -15
- package/src/DeltaBundler/DeltaCalculator.js.flow +7 -7
- package/src/DeltaBundler/Serializers/baseBytecodeBundle.js +13 -13
- package/src/DeltaBundler/Serializers/baseBytecodeBundle.js.flow +6 -7
- package/src/DeltaBundler/Serializers/baseJSBundle.js +4 -4
- package/src/DeltaBundler/Serializers/baseJSBundle.js.flow +4 -4
- package/src/DeltaBundler/Serializers/getAllFiles.js +1 -1
- package/src/DeltaBundler/Serializers/getAllFiles.js.flow +3 -3
- package/src/DeltaBundler/Serializers/getAssets.js +3 -3
- package/src/DeltaBundler/Serializers/getAssets.js.flow +4 -5
- package/src/DeltaBundler/Serializers/getExplodedSourceMap.js +4 -4
- package/src/DeltaBundler/Serializers/getExplodedSourceMap.js.flow +4 -4
- package/src/DeltaBundler/Serializers/getRamBundleInfo.js +20 -20
- package/src/DeltaBundler/Serializers/getRamBundleInfo.js.flow +9 -10
- package/src/DeltaBundler/Serializers/helpers/bytecode.js +11 -11
- package/src/DeltaBundler/Serializers/helpers/bytecode.js.flow +5 -6
- package/src/DeltaBundler/Serializers/helpers/getInlineSourceMappingURL.js +1 -1
- package/src/DeltaBundler/Serializers/helpers/getInlineSourceMappingURL.js.flow +1 -1
- package/src/DeltaBundler/Serializers/helpers/getSourceMapInfo.js +2 -2
- package/src/DeltaBundler/Serializers/helpers/getSourceMapInfo.js.flow +4 -4
- package/src/DeltaBundler/Serializers/helpers/getTransitiveDependencies.js +1 -1
- package/src/DeltaBundler/Serializers/helpers/getTransitiveDependencies.js.flow +1 -1
- package/src/DeltaBundler/Serializers/helpers/js.js +6 -6
- package/src/DeltaBundler/Serializers/helpers/js.js.flow +11 -12
- package/src/DeltaBundler/Serializers/helpers/processBytecodeModules.js +4 -4
- package/src/DeltaBundler/Serializers/helpers/processBytecodeModules.js.flow +3 -3
- package/src/DeltaBundler/Serializers/helpers/processModules.js +4 -4
- package/src/DeltaBundler/Serializers/helpers/processModules.js.flow +3 -3
- package/src/DeltaBundler/Serializers/hmrJSBundle.js +9 -9
- package/src/DeltaBundler/Serializers/hmrJSBundle.js.flow +9 -8
- package/src/DeltaBundler/Serializers/sourceMapGenerator.js +6 -6
- package/src/DeltaBundler/Serializers/sourceMapGenerator.js.flow +3 -4
- package/src/DeltaBundler/Serializers/sourceMapObject.js +5 -5
- package/src/DeltaBundler/Serializers/sourceMapObject.js.flow +4 -4
- package/src/DeltaBundler/Serializers/sourceMapString.js +2 -2
- package/src/DeltaBundler/Serializers/sourceMapString.js.flow +3 -3
- package/src/DeltaBundler/Transformer.js +9 -9
- package/src/DeltaBundler/Transformer.js.flow +7 -9
- package/src/DeltaBundler/Worker.js +8 -11
- package/src/DeltaBundler/Worker.js.flow +8 -11
- package/src/DeltaBundler/WorkerFarm.js +14 -17
- package/src/DeltaBundler/WorkerFarm.js.flow +7 -10
- package/src/DeltaBundler/__fixtures__/hasteImpl.js +2 -2
- package/src/DeltaBundler/computeDelta.js +2 -2
- package/src/DeltaBundler/computeDelta.js.flow +2 -2
- package/src/DeltaBundler/getTransformCacheKey.js +4 -4
- package/src/DeltaBundler/getTransformCacheKey.js.flow +5 -6
- package/src/DeltaBundler/mergeDeltas.js +2 -2
- package/src/DeltaBundler/mergeDeltas.js.flow +1 -1
- package/src/DeltaBundler/traverseDependencies.js +22 -22
- package/src/DeltaBundler/traverseDependencies.js.flow +3 -3
- package/src/DeltaBundler/types.flow.js +1 -1
- package/src/DeltaBundler/types.flow.js.flow +1 -1
- package/src/DeltaBundler.js +5 -5
- package/src/DeltaBundler.js.flow +4 -4
- package/src/HmrServer.js +71 -55
- package/src/HmrServer.js.flow +40 -37
- package/src/IncrementalBundler/GraphNotFoundError.js +1 -1
- package/src/IncrementalBundler/GraphNotFoundError.js.flow +1 -1
- package/src/IncrementalBundler/ResourceNotFoundError.js +1 -1
- package/src/IncrementalBundler/ResourceNotFoundError.js.flow +1 -1
- package/src/IncrementalBundler/RevisionNotFoundError.js +1 -1
- package/src/IncrementalBundler/RevisionNotFoundError.js.flow +1 -1
- package/src/IncrementalBundler.js +44 -32
- package/src/IncrementalBundler.js.flow +30 -24
- package/src/ModuleGraph/module.js +3 -3
- package/src/ModuleGraph/module.js.flow +1 -1
- package/src/ModuleGraph/node-haste/HasteFS.js +2 -2
- package/src/ModuleGraph/node-haste/HasteFS.js.flow +1 -1
- package/src/ModuleGraph/node-haste/Module.js +1 -1
- package/src/ModuleGraph/node-haste/Module.js.flow +1 -1
- package/src/ModuleGraph/node-haste/ModuleCache.js +1 -1
- package/src/ModuleGraph/node-haste/ModuleCache.js.flow +3 -3
- package/src/ModuleGraph/node-haste/Package.js +3 -3
- package/src/ModuleGraph/node-haste/Package.js.flow +3 -3
- package/src/ModuleGraph/node-haste/node-haste.flow.js +1 -1
- package/src/ModuleGraph/node-haste/node-haste.flow.js.flow +1 -1
- package/src/ModuleGraph/node-haste/node-haste.js +42 -32
- package/src/ModuleGraph/node-haste/node-haste.js.flow +28 -23
- package/src/ModuleGraph/output/indexed-ram-bundle.js +17 -17
- package/src/ModuleGraph/output/indexed-ram-bundle.js.flow +41 -9
- package/src/ModuleGraph/output/multiple-files-ram-bundle.js +18 -18
- package/src/ModuleGraph/output/multiple-files-ram-bundle.js.flow +21 -9
- package/src/ModuleGraph/output/plain-bundle.js +6 -6
- package/src/ModuleGraph/output/plain-bundle.js.flow +7 -7
- package/src/ModuleGraph/output/reverse-dependency-map-references.js +3 -3
- package/src/ModuleGraph/output/reverse-dependency-map-references.js.flow +4 -8
- package/src/ModuleGraph/output/util.js +31 -30
- package/src/ModuleGraph/output/util.js.flow +15 -16
- package/src/ModuleGraph/silent-console.js +2 -2
- package/src/ModuleGraph/silent-console.js.flow +1 -1
- package/src/ModuleGraph/test-helpers.js +7 -7
- package/src/ModuleGraph/types.flow.js +1 -1
- package/src/ModuleGraph/types.flow.js.flow +7 -7
- package/src/ModuleGraph/worker/JsFileWrapping.js +7 -7
- package/src/ModuleGraph/worker/JsFileWrapping.js.flow +3 -2
- package/src/ModuleGraph/worker/Platforms.js +2 -2
- package/src/ModuleGraph/worker/Platforms.js.flow +1 -1
- package/src/ModuleGraph/worker/collectDependencies.js +24 -25
- package/src/ModuleGraph/worker/collectDependencies.js.flow +15 -17
- package/src/ModuleGraph/worker/generate.js +2 -2
- package/src/ModuleGraph/worker/generate.js.flow +3 -3
- package/src/ModuleGraph/worker/generateImportNames.js +5 -5
- package/src/ModuleGraph/worker/generateImportNames.js.flow +3 -5
- package/src/ModuleGraph/worker/mergeSourceMaps.js +8 -7
- package/src/ModuleGraph/worker/mergeSourceMaps.js.flow +3 -3
- package/src/Server/MultipartResponse.js +4 -8
- package/src/Server/symbolicate.js +8 -8
- package/src/Server/symbolicate.js.flow +17 -5
- package/src/Server.js +202 -150
- package/src/Server.js.flow +129 -87
- package/src/cli-utils.js +4 -4
- package/src/cli-utils.js.flow +15 -13
- package/src/cli.js +4 -4
- package/src/cli.js.flow +2 -4
- package/src/commands/build.js +23 -24
- package/src/commands/build.js.flow +6 -9
- package/src/commands/dependencies.js +25 -19
- package/src/commands/serve.js +17 -18
- package/src/commands/serve.js.flow +6 -9
- package/src/index.js +116 -51
- package/src/index.js.flow +107 -41
- package/src/integration_tests/basic_bundle/AssetRegistry.js +2 -2
- package/src/integration_tests/basic_bundle/AssetRegistry.js.flow +1 -1
- package/src/integration_tests/basic_bundle/Bar.js +2 -2
- package/src/integration_tests/basic_bundle/Bar.js.flow +1 -1
- package/src/integration_tests/basic_bundle/ErrorBundle.js +2 -2
- package/src/integration_tests/basic_bundle/ErrorBundle.js.flow +1 -1
- package/src/integration_tests/basic_bundle/Foo.js +2 -2
- package/src/integration_tests/basic_bundle/Foo.js.flow +1 -1
- package/src/integration_tests/basic_bundle/TestBundle.js +3 -2
- package/src/integration_tests/basic_bundle/TestBundle.js.flow +3 -1
- package/src/integration_tests/basic_bundle/TestPolyfill.js +1 -1
- package/src/integration_tests/basic_bundle/TestPolyfill.js.flow +1 -1
- package/src/integration_tests/basic_bundle/TypeScript.ts +1 -1
- package/src/integration_tests/basic_bundle/import-export/export-1.js +2 -2
- package/src/integration_tests/basic_bundle/import-export/export-1.js.flow +1 -1
- package/src/integration_tests/basic_bundle/import-export/export-2.js +2 -2
- package/src/integration_tests/basic_bundle/import-export/export-2.js.flow +1 -1
- package/src/integration_tests/basic_bundle/import-export/export-3.js +2 -2
- package/src/integration_tests/basic_bundle/import-export/export-3.js.flow +1 -1
- package/src/integration_tests/basic_bundle/import-export/export-4.js +2 -2
- package/src/integration_tests/basic_bundle/import-export/export-4.js.flow +1 -1
- package/src/integration_tests/basic_bundle/import-export/export-5.js +2 -2
- package/src/integration_tests/basic_bundle/import-export/export-5.js.flow +1 -1
- package/src/integration_tests/basic_bundle/import-export/export-6.js +2 -2
- package/src/integration_tests/basic_bundle/import-export/export-6.js.flow +1 -1
- package/src/integration_tests/basic_bundle/import-export/export-null.js +2 -2
- package/src/integration_tests/basic_bundle/import-export/export-null.js.flow +1 -1
- package/src/integration_tests/basic_bundle/import-export/export-primitive-default.js +2 -2
- package/src/integration_tests/basic_bundle/import-export/export-primitive-default.js.flow +1 -1
- package/src/integration_tests/basic_bundle/import-export/index.js +8 -8
- package/src/integration_tests/basic_bundle/import-export/index.js.flow +1 -1
- package/src/integration_tests/basic_bundle/polyfill.js +1 -1
- package/src/integration_tests/execBundle.js +2 -2
- package/src/integration_tests/execBundle.js.flow +1 -1
- package/src/integration_tests/metro.config.js +8 -8
- package/src/lib/BatchProcessor.js +3 -3
- package/src/lib/BatchProcessor.js.flow +1 -1
- package/src/lib/JsonReporter.js +2 -2
- package/src/lib/JsonReporter.js.flow +1 -1
- package/src/lib/RamBundleParser.js +1 -1
- package/src/lib/RamBundleParser.js.flow +1 -1
- package/src/lib/TerminalReporter.js +14 -14
- package/src/lib/TerminalReporter.js.flow +9 -10
- package/src/lib/bundleToBytecode.js +6 -7
- package/src/lib/bundleToBytecode.js.flow +8 -7
- package/src/lib/bundleToString.js +3 -3
- package/src/lib/bundleToString.js.flow +5 -4
- package/src/lib/countLines.js +3 -7
- package/src/lib/countLines.js.flow +4 -7
- package/src/lib/createModuleIdFactory.js +2 -2
- package/src/lib/createModuleIdFactory.js.flow +1 -1
- package/src/lib/{attachWebsocketServer.js → createWebsocketServer.js} +18 -17
- package/src/lib/{attachWebsocketServer.js.flow → createWebsocketServer.js.flow} +12 -21
- package/src/lib/debounceAsyncQueue.js +2 -2
- package/src/lib/debounceAsyncQueue.js.flow +1 -1
- package/src/lib/formatBundlingError.js +21 -21
- package/src/lib/formatBundlingError.js.flow +6 -8
- package/src/lib/getAppendScripts.js +26 -27
- package/src/lib/getAppendScripts.js.flow +7 -8
- package/src/lib/getGraphId.js +3 -3
- package/src/lib/getGraphId.js.flow +3 -3
- package/src/lib/getMaxWorkers.js +2 -2
- package/src/lib/getMaxWorkers.js.flow +1 -1
- package/src/lib/getPreludeCode.js +2 -2
- package/src/lib/getPreludeCode.js.flow +1 -1
- package/src/lib/getPrependedScripts.js +15 -15
- package/src/lib/getPrependedScripts.js.flow +7 -8
- package/src/lib/logToConsole.js +1 -1
- package/src/lib/logToConsole.js.flow +3 -3
- package/src/lib/parseCustomTransformOptions.js +2 -2
- package/src/lib/parseCustomTransformOptions.js.flow +3 -3
- package/src/lib/parseOptionsFromUrl.js +7 -7
- package/src/lib/parseOptionsFromUrl.js.flow +29 -9
- package/src/lib/relativizeSourceMap.js +1 -1
- package/src/lib/relativizeSourceMap.js.flow +3 -3
- package/src/lib/reporting.js +5 -5
- package/src/lib/reporting.js.flow +16 -3
- package/src/lib/splitBundleOptions.js +5 -5
- package/src/lib/splitBundleOptions.js.flow +1 -1
- package/src/lib/transformHelpers.js +10 -10
- package/src/lib/transformHelpers.js.flow +5 -5
- package/src/node-haste/DependencyGraph/ModuleResolution.js +51 -30
- package/src/node-haste/DependencyGraph/ModuleResolution.js.flow +46 -42
- package/src/node-haste/DependencyGraph/createHasteMap.js +99 -0
- package/src/node-haste/DependencyGraph/createHasteMap.js.flow +88 -0
- package/src/node-haste/DependencyGraph/{assets/empty-module.js → types.js} +2 -2
- package/src/node-haste/DependencyGraph/types.js.flow +88 -0
- package/src/node-haste/DependencyGraph.js +49 -117
- package/src/node-haste/DependencyGraph.js.flow +36 -111
- package/src/node-haste/Module.js +1 -1
- package/src/node-haste/Module.js.flow +3 -3
- package/src/node-haste/ModuleCache.js +54 -13
- package/src/node-haste/ModuleCache.js.flow +53 -12
- package/src/node-haste/Package.js +7 -9
- package/src/node-haste/Package.js.flow +1 -8
- package/src/node-haste/lib/AssetPaths.js +5 -5
- package/src/node-haste/lib/AssetPaths.js.flow +2 -4
- package/src/node-haste/lib/parsePlatformFilePath.js +4 -4
- package/src/node-haste/lib/parsePlatformFilePath.js.flow +1 -1
- package/src/shared/output/RamBundle/as-assets.js +16 -17
- package/src/shared/output/RamBundle/as-assets.js.flow +11 -15
- package/src/shared/output/RamBundle/as-indexed-file.js +14 -15
- package/src/shared/output/RamBundle/as-indexed-file.js.flow +8 -12
- package/src/shared/output/RamBundle/buildSourcemapWithMetadata.js +7 -7
- package/src/shared/output/RamBundle/buildSourcemapWithMetadata.js.flow +4 -4
- package/src/shared/output/RamBundle/magic-number.js +1 -1
- package/src/shared/output/RamBundle/magic-number.js.flow +1 -1
- package/src/shared/output/RamBundle/util.js +21 -19
- package/src/shared/output/RamBundle/util.js.flow +5 -8
- package/src/shared/output/RamBundle/write-sourcemap.js +1 -1
- package/src/shared/output/RamBundle/write-sourcemap.js.flow +1 -1
- package/src/shared/output/RamBundle.js +2 -2
- package/src/shared/output/RamBundle.js.flow +4 -5
- package/src/shared/output/bundle.js +6 -6
- package/src/shared/output/bundle.js.flow +4 -5
- package/src/shared/output/meta.js +4 -5
- package/src/shared/output/meta.js.flow +2 -4
- package/src/shared/output/unbundle.js +1 -1
- package/src/shared/output/unbundle.js.flow +1 -1
- package/src/shared/output/writeFile.js +1 -1
- package/src/shared/output/writeFile.js.flow +1 -1
- package/src/shared/types.flow.js +1 -1
- package/src/shared/types.flow.js.flow +2 -2
- package/src/node-haste/DependencyGraph/assets/empty-module.js.flow +0 -9
- package/src/node-haste/types.js +0 -10
- package/src/node-haste/types.js.flow +0 -23
package/src/HmrServer.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
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
|
|
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
|
|
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 } =
|
|
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.
|
|
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:
|
|
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 {
|
|
123
|
-
|
|
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
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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:
|
|
298
|
-
|
|
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
|
}
|
package/src/HmrServer.js.flow
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
86
|
+
onClientConnect: (
|
|
89
87
|
requestUrl: string,
|
|
90
88
|
sendFn: (data: string) => void,
|
|
91
|
-
)
|
|
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} =
|
|
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:
|
|
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 {
|
|
151
|
-
|
|
152
|
-
|
|
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
|
-
|
|
190
|
+
onClientMessage: (
|
|
189
191
|
client: TClient,
|
|
190
192
|
message: string,
|
|
191
193
|
sendFn: (data: string) => void,
|
|
192
|
-
)
|
|
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:
|
|
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)
|
|
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:
|
|
325
|
+
projectRoot:
|
|
326
|
+
this._config.server.unstable_serverRoot ?? this._config.projectRoot,
|
|
324
327
|
clientUrl: group.clientUrl,
|
|
325
328
|
});
|
|
326
329
|
|