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.
- package/package.json +27 -27
- package/src/Assets.js +9 -9
- package/src/Assets.js.flow +5 -7
- package/src/Bundler/util.js +17 -15
- package/src/Bundler/util.js.flow +12 -10
- package/src/Bundler.js +22 -9
- package/src/Bundler.js.flow +20 -7
- package/src/DeltaBundler/DeltaCalculator.js +17 -15
- package/src/DeltaBundler/DeltaCalculator.js.flow +9 -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 +18 -8
- package/src/DeltaBundler/Serializers/helpers/js.js.flow +19 -10
- 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 +16 -14
- package/src/DeltaBundler/Transformer.js.flow +15 -15
- package/src/DeltaBundler/Worker.js +8 -11
- package/src/DeltaBundler/Worker.js.flow +8 -11
- package/src/DeltaBundler/WorkerFarm.js +15 -18
- package/src/DeltaBundler/WorkerFarm.js.flow +9 -11
- 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 +15 -1
- package/src/DeltaBundler.js +5 -5
- package/src/DeltaBundler.js.flow +4 -4
- package/src/HmrServer.js +73 -55
- package/src/HmrServer.js.flow +42 -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 +46 -32
- package/src/IncrementalBundler.js.flow +32 -24
- package/src/ModuleGraph/module.js +3 -3
- package/src/ModuleGraph/module.js.flow +1 -1
- package/src/ModuleGraph/node-haste/HasteFS.js +5 -3
- package/src/ModuleGraph/node-haste/HasteFS.js.flow +3 -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 +41 -31
- package/src/ModuleGraph/node-haste/node-haste.js.flow +28 -22
- 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 +61 -40
- package/src/ModuleGraph/output/util.js.flow +51 -28
- 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 +47 -31
- package/src/ModuleGraph/worker/JsFileWrapping.js +16 -16
- 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 +16 -18
- 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 +204 -150
- package/src/Server.js.flow +131 -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 +19 -19
- package/src/commands/serve.js.flow +7 -9
- package/src/index.js +117 -50
- package/src/index.js.flow +108 -40
- 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 +2 -2
- package/src/integration_tests/basic_bundle/TestBundle.js.flow +1 -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 +17 -17
- 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 +10 -6
- package/src/lib/BatchProcessor.js.flow +6 -1
- package/src/lib/JsonReporter.js +3 -2
- package/src/lib/JsonReporter.js.flow +2 -1
- package/src/lib/RamBundleParser.js +1 -1
- package/src/lib/RamBundleParser.js.flow +1 -1
- package/src/lib/TerminalReporter.js +15 -15
- package/src/lib/TerminalReporter.js.flow +15 -16
- 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} +13 -23
- 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 +18 -20
- 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 +16 -15
- package/src/lib/getPrependedScripts.js.flow +8 -8
- package/src/lib/logToConsole.js +12 -5
- package/src/lib/logToConsole.js.flow +19 -6
- 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 +18 -4
- package/src/lib/splitBundleOptions.js +5 -5
- package/src/lib/splitBundleOptions.js.flow +1 -1
- package/src/lib/transformHelpers.js +11 -10
- package/src/lib/transformHelpers.js.flow +6 -13
- package/src/node-haste/DependencyGraph/ModuleResolution.js +51 -30
- package/src/node-haste/DependencyGraph/ModuleResolution.js.flow +49 -48
- 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 +51 -118
- package/src/node-haste/DependencyGraph.js.flow +38 -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 +2 -2
- package/src/node-haste/Package.js.flow +1 -1
- package/src/node-haste/lib/AssetPaths.js +5 -5
- package/src/node-haste/lib/AssetPaths.js.flow +7 -6
- package/src/node-haste/lib/parsePlatformFilePath.js +4 -4
- package/src/node-haste/lib/parsePlatformFilePath.js.flow +2 -2
- package/src/shared/output/RamBundle/as-assets.js +14 -15
- package/src/shared/output/RamBundle/as-assets.js.flow +9 -11
- 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 +6 -4
- 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/DeltaBundler.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,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)
|
|
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);
|
|
@@ -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
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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:
|
|
296
|
-
|
|
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
|
}
|
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',
|
|
@@ -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
|
-
|
|
190
|
+
onClientMessage: (
|
|
188
191
|
client: TClient,
|
|
189
192
|
message: string,
|
|
190
193
|
sendFn: (data: string) => void,
|
|
191
|
-
)
|
|
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:
|
|
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)
|
|
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:
|
|
325
|
+
projectRoot:
|
|
326
|
+
this._config.server.unstable_serverRoot ?? this._config.projectRoot,
|
|
322
327
|
clientUrl: group.clientUrl,
|
|
323
328
|
});
|
|
324
329
|
|