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.
- package/package.json +16 -16
- package/src/Assets.js +68 -42
- package/src/Assets.js.flow +13 -24
- package/src/Bundler/util.js +40 -17
- package/src/Bundler/util.js.flow +6 -13
- package/src/Bundler.js +17 -6
- package/src/Bundler.js.flow +3 -7
- package/src/DeltaBundler/DeltaCalculator.js +15 -15
- package/src/DeltaBundler/DeltaCalculator.js.flow +4 -7
- package/src/DeltaBundler/Graph.js +45 -40
- package/src/DeltaBundler/Graph.js.flow +3 -4
- package/src/DeltaBundler/Serializers/baseJSBundle.js +24 -10
- package/src/DeltaBundler/Serializers/baseJSBundle.js.flow +6 -9
- package/src/DeltaBundler/Serializers/getAllFiles.js +9 -6
- package/src/DeltaBundler/Serializers/getAllFiles.js.flow +4 -8
- package/src/DeltaBundler/Serializers/getAssets.js +18 -11
- package/src/DeltaBundler/Serializers/getAssets.js.flow +5 -9
- package/src/DeltaBundler/Serializers/getExplodedSourceMap.d.ts +26 -0
- package/src/DeltaBundler/Serializers/getExplodedSourceMap.js +7 -6
- package/src/DeltaBundler/Serializers/getExplodedSourceMap.js.flow +3 -9
- package/src/DeltaBundler/Serializers/getRamBundleInfo.js +40 -23
- package/src/DeltaBundler/Serializers/getRamBundleInfo.js.flow +11 -18
- package/src/DeltaBundler/Serializers/helpers/getInlineSourceMappingURL.js +4 -1
- package/src/DeltaBundler/Serializers/helpers/getInlineSourceMappingURL.js.flow +1 -5
- package/src/DeltaBundler/Serializers/helpers/getSourceMapInfo.js +7 -4
- package/src/DeltaBundler/Serializers/helpers/getSourceMapInfo.js.flow +3 -7
- package/src/DeltaBundler/Serializers/helpers/getTransitiveDependencies.js +4 -1
- package/src/DeltaBundler/Serializers/helpers/getTransitiveDependencies.js.flow +2 -6
- package/src/DeltaBundler/Serializers/helpers/js.js +65 -31
- package/src/DeltaBundler/Serializers/helpers/js.js.flow +21 -21
- package/src/DeltaBundler/Serializers/helpers/processModules.js +8 -5
- package/src/DeltaBundler/Serializers/helpers/processModules.js.flow +3 -7
- package/src/DeltaBundler/Serializers/hmrJSBundle.js +70 -25
- package/src/DeltaBundler/Serializers/hmrJSBundle.js.flow +43 -33
- package/src/DeltaBundler/Serializers/sourceMapGenerator.js +19 -16
- package/src/DeltaBundler/Serializers/sourceMapGenerator.js.flow +6 -14
- package/src/DeltaBundler/Serializers/sourceMapObject.js +12 -10
- package/src/DeltaBundler/Serializers/sourceMapObject.js.flow +4 -9
- package/src/DeltaBundler/Serializers/sourceMapString.js +14 -12
- package/src/DeltaBundler/Serializers/sourceMapString.js.flow +4 -9
- package/src/DeltaBundler/Transformer.js +32 -27
- package/src/DeltaBundler/Transformer.js.flow +10 -17
- package/src/DeltaBundler/Worker.flow.js +25 -18
- package/src/DeltaBundler/Worker.flow.js.flow +12 -18
- package/src/DeltaBundler/Worker.js.flow +2 -0
- package/src/DeltaBundler/WorkerFarm.js +13 -11
- package/src/DeltaBundler/WorkerFarm.js.flow +7 -9
- package/src/DeltaBundler/buildSubgraph.js +13 -17
- package/src/DeltaBundler/buildSubgraph.js.flow +1 -1
- package/src/DeltaBundler/getTransformCacheKey.js +12 -6
- package/src/DeltaBundler/getTransformCacheKey.js.flow +5 -7
- package/src/DeltaBundler/mergeDeltas.js +4 -1
- package/src/DeltaBundler/mergeDeltas.js.flow +5 -6
- package/src/DeltaBundler/types.d.ts +4 -1
- package/src/DeltaBundler/{types.flow.js → types.js} +1 -5
- package/src/DeltaBundler/{types.flow.js.flow → types.js.flow} +5 -3
- package/src/DeltaBundler.js +15 -6
- package/src/DeltaBundler.js.flow +4 -8
- package/src/HmrServer.js +116 -68
- package/src/HmrServer.js.flow +41 -52
- package/src/IncrementalBundler/GraphNotFoundError.js +5 -1
- package/src/IncrementalBundler/GraphNotFoundError.js.flow +1 -5
- package/src/IncrementalBundler/ResourceNotFoundError.js +5 -1
- package/src/IncrementalBundler/ResourceNotFoundError.js.flow +1 -5
- package/src/IncrementalBundler/RevisionNotFoundError.js +5 -1
- package/src/IncrementalBundler/RevisionNotFoundError.js.flow +1 -5
- package/src/IncrementalBundler.js +71 -35
- package/src/IncrementalBundler.js.flow +12 -16
- package/src/ModuleGraph/test-helpers.js +19 -14
- package/src/ModuleGraph/worker/JsFileWrapping.js +22 -29
- package/src/ModuleGraph/worker/JsFileWrapping.js.flow +1 -10
- package/src/ModuleGraph/worker/collectDependencies.js +81 -52
- package/src/ModuleGraph/worker/collectDependencies.js.flow +15 -22
- package/src/ModuleGraph/worker/generateImportNames.js +12 -6
- package/src/ModuleGraph/worker/generateImportNames.js.flow +3 -7
- package/src/ModuleGraph/worker/importLocationsPlugin.js +5 -4
- package/src/ModuleGraph/worker/importLocationsPlugin.js.flow +2 -4
- package/src/Server/MultipartResponse.js +11 -4
- package/src/Server/MultipartResponse.js.flow +2 -5
- package/src/Server/symbolicate.d.ts +31 -0
- package/src/Server/symbolicate.js +15 -16
- package/src/Server/symbolicate.js.flow +6 -16
- package/src/Server.d.ts +0 -1
- package/src/Server.js +298 -191
- package/src/Server.js.flow +136 -99
- package/src/cli-utils.js +13 -4
- package/src/cli-utils.js.flow +3 -5
- package/src/cli.js.flow +2 -0
- package/src/commands/build.js +18 -15
- package/src/commands/build.js.flow +6 -6
- package/src/commands/dependencies.js +26 -16
- package/src/commands/dependencies.js.flow +7 -9
- package/src/commands/serve.js +16 -11
- package/src/commands/serve.js.flow +5 -6
- package/src/index.d.ts +26 -3
- package/src/index.flow.js +162 -72
- package/src/index.flow.js.flow +60 -47
- package/src/index.js.flow +2 -0
- package/src/integration_tests/basic_bundle/TestBundle.js.flow +2 -1
- package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-import.js +1 -5
- package/src/integration_tests/basic_bundle/build-errors/inline-requires-cannot-resolve-import.js +1 -5
- package/src/integration_tests/basic_bundle/import-export/index.js +5 -13
- package/src/integration_tests/basic_bundle/require-context/mode-eager.js +2 -2
- package/src/integration_tests/basic_bundle/require-context/mode-lazy-once.js +2 -2
- package/src/integration_tests/basic_bundle/require-context/mode-lazy.js +2 -2
- package/src/integration_tests/basic_bundle/require-context/mode-sync.js +1 -1
- package/src/integration_tests/basic_bundle/require-context/utils.js +1 -1
- package/src/integration_tests/execBundle.js +7 -4
- package/src/integration_tests/execBundle.js.flow +1 -3
- package/src/integration_tests/metro.config.js +3 -3
- package/src/lib/BatchProcessor.js +15 -5
- package/src/lib/BatchProcessor.js.flow +2 -6
- package/src/lib/CountingSet.js.flow +2 -2
- package/src/lib/JsonReporter.js +6 -2
- package/src/lib/JsonReporter.js.flow +1 -5
- package/src/lib/RamBundleParser.js +12 -3
- package/src/lib/RamBundleParser.js.flow +2 -6
- package/src/lib/TerminalReporter.js +95 -56
- package/src/lib/TerminalReporter.js.flow +9 -12
- package/src/lib/bundleToString.js +4 -1
- package/src/lib/bundleToString.js.flow +2 -9
- package/src/lib/contextModule.js +3 -7
- package/src/lib/contextModuleTemplates.js +9 -19
- package/src/lib/countLines.js +5 -1
- package/src/lib/countLines.js.flow +1 -3
- package/src/lib/createWebsocketServer.js +7 -7
- package/src/lib/createWebsocketServer.js.flow +4 -4
- package/src/lib/debounceAsyncQueue.js +4 -1
- package/src/lib/debounceAsyncQueue.js.flow +1 -5
- package/src/lib/formatBundlingError.js +32 -22
- package/src/lib/formatBundlingError.js.flow +18 -20
- package/src/lib/getAppendScripts.js +20 -20
- package/src/lib/getAppendScripts.js.flow +9 -13
- package/src/lib/getGraphId.js +12 -6
- package/src/lib/getGraphId.js.flow +4 -10
- package/src/lib/getPreludeCode.js +7 -10
- package/src/lib/getPreludeCode.js.flow +2 -6
- package/src/lib/getPrependedScripts.js +40 -16
- package/src/lib/getPrependedScripts.js.flow +8 -13
- package/src/lib/isResolvedDependency.js.flow +1 -1
- package/src/lib/logToConsole.js +18 -12
- package/src/lib/logToConsole.js.flow +5 -14
- package/src/lib/parseBundleOptionsFromBundleRequestUrl.js +144 -0
- package/src/lib/parseBundleOptionsFromBundleRequestUrl.js.flow +146 -0
- package/src/lib/parseCustomResolverOptions.js +8 -6
- package/src/lib/parseCustomResolverOptions.js.flow +6 -12
- package/src/lib/parseCustomTransformOptions.js +8 -6
- package/src/lib/parseCustomTransformOptions.js.flow +11 -14
- package/src/lib/parseJsonBody.js +4 -1
- package/src/lib/parseJsonBody.js.flow +1 -3
- package/src/lib/pathUtils.js +34 -0
- package/src/lib/pathUtils.js.flow +16 -0
- package/src/lib/relativizeSourceMap.js +12 -3
- package/src/lib/relativizeSourceMap.js.flow +2 -6
- package/src/lib/reporting.js +25 -19
- package/src/lib/reporting.js.flow +6 -16
- package/src/lib/splitBundleOptions.js +4 -2
- package/src/lib/splitBundleOptions.js.flow +4 -7
- package/src/lib/transformHelpers.js +19 -25
- package/src/lib/transformHelpers.js.flow +5 -15
- package/src/node-haste/DependencyGraph/ModuleResolution.js +75 -57
- package/src/node-haste/DependencyGraph/ModuleResolution.js.flow +28 -44
- package/src/node-haste/DependencyGraph/createFileMap.js +15 -13
- package/src/node-haste/DependencyGraph/createFileMap.js.flow +2 -5
- package/src/node-haste/DependencyGraph.js +61 -45
- package/src/node-haste/DependencyGraph.js.flow +34 -31
- package/src/node-haste/Package.js +13 -6
- package/src/node-haste/Package.js.flow +3 -7
- package/src/node-haste/{ModuleCache.js → PackageCache.js} +11 -19
- package/src/node-haste/{ModuleCache.js.flow → PackageCache.js.flow} +2 -30
- package/src/node-haste/lib/AssetPaths.js +14 -8
- package/src/node-haste/lib/AssetPaths.js.flow +7 -8
- package/src/node-haste/lib/parsePlatformFilePath.js +10 -4
- package/src/node-haste/lib/parsePlatformFilePath.js.flow +2 -6
- package/src/shared/output/RamBundle/as-assets.js +42 -22
- package/src/shared/output/RamBundle/as-assets.js.flow +12 -15
- package/src/shared/output/RamBundle/as-indexed-file.js +33 -23
- package/src/shared/output/RamBundle/as-indexed-file.js.flow +10 -16
- package/src/shared/output/RamBundle/buildSourcemapWithMetadata.js +11 -10
- package/src/shared/output/RamBundle/buildSourcemapWithMetadata.js.flow +4 -6
- package/src/shared/output/RamBundle/magic-number.js +5 -1
- package/src/shared/output/RamBundle/magic-number.js.flow +1 -3
- package/src/shared/output/RamBundle/util.js +21 -18
- package/src/shared/output/RamBundle/util.js.flow +4 -6
- package/src/shared/output/RamBundle/write-sourcemap.js +9 -3
- package/src/shared/output/RamBundle/write-sourcemap.js.flow +2 -6
- package/src/shared/output/RamBundle.js +16 -9
- package/src/shared/output/RamBundle.js.flow +8 -12
- package/src/shared/output/bundle.flow.js +37 -13
- package/src/shared/output/bundle.flow.js.flow +24 -12
- package/src/shared/output/bundle.js.flow +2 -0
- package/src/shared/output/meta.js +16 -9
- package/src/shared/output/meta.js.flow +3 -5
- package/src/shared/output/unbundle.js +14 -1
- package/src/shared/output/unbundle.js.flow +1 -3
- package/src/shared/output/writeFile.js +11 -4
- package/src/shared/output/writeFile.js.flow +3 -5
- package/src/shared/types.d.ts +0 -1
- package/src/shared/{types.flow.js.flow → types.js.flow} +16 -17
- package/src/lib/createModuleIdFactory.js +0 -15
- package/src/lib/createModuleIdFactory.js.flow +0 -27
- package/src/lib/getMaxWorkers.js +0 -9
- package/src/lib/getMaxWorkers.js.flow +0 -22
- package/src/lib/parseOptionsFromUrl.js +0 -62
- package/src/lib/parseOptionsFromUrl.js.flow +0 -97
- package/src/node-haste/Module.js +0 -24
- package/src/node-haste/Module.js.flow +0 -41
- /package/src/shared/{types.flow.js → types.js} +0 -0
package/src/DeltaBundler.js.flow
CHANGED
|
@@ -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
|
|
19
|
+
} from './DeltaBundler/types';
|
|
22
20
|
import type EventEmitter from 'events';
|
|
23
21
|
|
|
24
|
-
|
|
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
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
38
|
-
const { bundleType: _bundleType, ...options } =
|
|
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
|
-
|
|
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 =
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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:
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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 =
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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:
|
|
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:
|
|
236
|
-
new
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
334
|
+
exports.default = HmrServer;
|
package/src/HmrServer.js.flow
CHANGED
|
@@ -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
|
|
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
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
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:
|
|
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
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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
|
-
|
|
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
|
-
|
|
13
|
+
exports.default = ResourceNotFoundError;
|
|
@@ -9,9 +9,7 @@
|
|
|
9
9
|
* @oncall react_native
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
|
|
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
|
-
|
|
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;
|