metro 0.83.3 → 0.83.5
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 +28 -24
- package/src/Assets.d.ts +83 -0
- package/src/Assets.js +42 -29
- package/src/Assets.js.flow +26 -15
- package/src/Bundler/util.d.ts +27 -0
- package/src/Bundler/util.js +25 -21
- package/src/Bundler/util.js.flow +2 -2
- package/src/Bundler.d.ts +14 -15
- package/src/Bundler.js.flow +1 -1
- package/src/DeltaBundler/DeltaCalculator.d.ts +71 -0
- package/src/DeltaBundler/DeltaCalculator.js +4 -4
- package/src/DeltaBundler/DeltaCalculator.js.flow +8 -8
- package/src/DeltaBundler/Graph.d.ts +135 -8
- package/src/DeltaBundler/Graph.js +16 -16
- package/src/DeltaBundler/Graph.js.flow +30 -30
- package/src/DeltaBundler/Serializers/baseJSBundle.d.ts +20 -0
- package/src/DeltaBundler/Serializers/baseJSBundle.js.flow +1 -1
- package/src/DeltaBundler/Serializers/getAllFiles.d.ts +22 -0
- package/src/DeltaBundler/Serializers/getAllFiles.js.flow +2 -2
- package/src/DeltaBundler/Serializers/getAssets.d.ts +25 -0
- package/src/DeltaBundler/Serializers/getAssets.js.flow +2 -2
- package/src/DeltaBundler/Serializers/getExplodedSourceMap.js.flow +2 -2
- package/src/DeltaBundler/Serializers/getRamBundleInfo.d.ts +36 -6
- package/src/DeltaBundler/Serializers/getRamBundleInfo.js.flow +8 -8
- package/src/DeltaBundler/Serializers/helpers/getInlineSourceMappingURL.d.ts +12 -0
- package/src/DeltaBundler/Serializers/helpers/getSourceMapInfo.d.ts +33 -0
- package/src/DeltaBundler/Serializers/helpers/getTransitiveDependencies.d.ts +17 -0
- package/src/DeltaBundler/Serializers/helpers/js.d.ts +30 -0
- package/src/DeltaBundler/Serializers/helpers/js.js +25 -21
- package/src/DeltaBundler/Serializers/helpers/js.js.flow +6 -6
- package/src/DeltaBundler/Serializers/helpers/processModules.d.ts +25 -0
- package/src/DeltaBundler/Serializers/helpers/processModules.js.flow +3 -3
- package/src/DeltaBundler/Serializers/hmrJSBundle.d.ts +30 -0
- package/src/DeltaBundler/Serializers/hmrJSBundle.js +25 -21
- package/src/DeltaBundler/Serializers/hmrJSBundle.js.flow +5 -5
- package/src/DeltaBundler/Serializers/sourceMapGenerator.d.ts +29 -0
- package/src/DeltaBundler/Serializers/sourceMapGenerator.js.flow +6 -6
- package/src/DeltaBundler/Serializers/sourceMapObject.d.ts +23 -0
- package/src/DeltaBundler/Serializers/sourceMapObject.js.flow +2 -2
- package/src/DeltaBundler/Serializers/sourceMapString.d.ts +22 -0
- package/src/DeltaBundler/Serializers/sourceMapString.js.flow +2 -2
- package/src/DeltaBundler/Transformer.d.ts +38 -0
- package/src/DeltaBundler/Transformer.js.flow +3 -3
- package/src/DeltaBundler/Worker.d.ts +19 -27
- package/src/DeltaBundler/Worker.flow.js.flow +1 -1
- package/src/DeltaBundler/WorkerFarm.d.ts +70 -0
- package/src/DeltaBundler/WorkerFarm.js +1 -1
- package/src/DeltaBundler/WorkerFarm.js.flow +26 -13
- package/src/DeltaBundler/buildSubgraph.d.ts +30 -0
- package/src/DeltaBundler/buildSubgraph.js +4 -4
- package/src/DeltaBundler/buildSubgraph.js.flow +8 -8
- package/src/DeltaBundler/getTransformCacheKey.d.ts +18 -0
- package/src/DeltaBundler/mergeDeltas.d.ts +17 -0
- package/src/DeltaBundler/types.d.ts +97 -100
- package/src/DeltaBundler/types.js.flow +36 -34
- package/src/DeltaBundler.d.ts +14 -12
- package/src/DeltaBundler.js.flow +2 -2
- package/src/HmrServer.d.ts +79 -0
- package/src/HmrServer.js +34 -29
- package/src/HmrServer.js.flow +17 -12
- package/src/IncrementalBundler/GraphNotFoundError.d.ts +17 -0
- package/src/IncrementalBundler/ResourceNotFoundError.d.ts +15 -0
- package/src/IncrementalBundler/RevisionNotFoundError.d.ts +17 -0
- package/src/IncrementalBundler.d.ts +43 -45
- package/src/IncrementalBundler.js +29 -21
- package/src/IncrementalBundler.js.flow +13 -9
- package/src/ModuleGraph/worker/JsFileWrapping.d.ts +29 -0
- package/src/ModuleGraph/worker/JsFileWrapping.js +25 -21
- package/src/ModuleGraph/worker/JsFileWrapping.js.flow +10 -5
- package/src/ModuleGraph/worker/collectDependencies.d.ts +118 -14
- package/src/ModuleGraph/worker/collectDependencies.js +25 -21
- package/src/ModuleGraph/worker/collectDependencies.js.flow +27 -21
- package/src/ModuleGraph/worker/generateImportNames.d.ts +19 -0
- package/src/ModuleGraph/worker/generateImportNames.js.flow +4 -2
- package/src/ModuleGraph/worker/importLocationsPlugin.d.ts +26 -0
- package/src/ModuleGraph/worker/importLocationsPlugin.js.flow +7 -3
- package/src/Server/MultipartResponse.d.ts +5 -6
- package/src/Server/MultipartResponse.js.flow +1 -1
- package/src/Server/symbolicate.js.flow +4 -4
- package/src/Server.d.ts +220 -67
- package/src/Server.js +149 -45
- package/src/Server.js.flow +167 -57
- package/src/cli/parseKeyValueParamArray.d.ts +14 -0
- package/src/cli/parseKeyValueParamArray.js.flow +1 -1
- package/src/cli-utils.d.ts +19 -0
- package/src/cli-utils.js.flow +2 -2
- package/src/commands/build.d.ts +16 -0
- package/src/commands/build.js.flow +11 -10
- package/src/commands/dependencies.d.ts +16 -0
- package/src/commands/dependencies.js.flow +8 -4
- package/src/commands/serve.d.ts +16 -0
- package/src/commands/serve.js +2 -0
- package/src/commands/serve.js.flow +14 -9
- package/src/index.d.ts +97 -110
- package/src/index.flow.js +53 -35
- package/src/index.flow.js.flow +49 -29
- package/src/integration_tests/basic_bundle/AssetRegistry.js.flow +1 -1
- package/src/integration_tests/basic_bundle/ErrorBundle.js.flow +1 -1
- package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-import.js.flow +1 -1
- package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-multi-line-import-with-escapes.js.flow +1 -1
- package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-multi-line-import.js.flow +1 -1
- package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-require-with-embedded-comment.js.flow +1 -1
- package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-require.js.flow +1 -1
- package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-specifier-with-escapes.js.flow +1 -1
- package/src/integration_tests/basic_bundle/build-errors/inline-requires-cannot-resolve-import.js.flow +1 -1
- package/src/integration_tests/basic_bundle/build-errors/inline-requires-cannot-resolve-require.js.flow +1 -1
- package/src/integration_tests/basic_bundle/import-export/index.js +25 -21
- package/src/integration_tests/basic_bundle/import-export/index.js.flow +3 -3
- package/src/integration_tests/basic_bundle/import-export/utils.js.flow +2 -2
- package/src/integration_tests/basic_bundle/loadBundleAsyncForTest.js.flow +1 -1
- package/src/integration_tests/basic_bundle/optional-dependencies/index.js.flow +1 -1
- package/src/integration_tests/basic_bundle/require-context/conflict.js.flow +1 -1
- package/src/integration_tests/basic_bundle/require-context/empty.js.flow +1 -1
- package/src/integration_tests/basic_bundle/require-context/matching.js.flow +1 -1
- package/src/integration_tests/basic_bundle/require-context/mode-eager.js.flow +1 -1
- package/src/integration_tests/basic_bundle/require-context/mode-lazy-once.js.flow +1 -1
- package/src/integration_tests/basic_bundle/require-context/mode-lazy.js.flow +1 -1
- package/src/integration_tests/basic_bundle/require-context/mode-sync.js.flow +2 -2
- package/src/integration_tests/basic_bundle/require-context/utils.js.flow +1 -1
- package/src/integration_tests/basic_bundle/require-resolveWeak/import-and-resolveWeak.js.flow +1 -1
- package/src/integration_tests/basic_bundle/require-resolveWeak/multiple.js.flow +1 -1
- package/src/integration_tests/basic_bundle/require-resolveWeak/never-required.js.flow +1 -1
- package/src/integration_tests/basic_bundle/require-resolveWeak/require-and-resolveWeak.js.flow +1 -1
- package/src/integration_tests/execBundle.js.flow +1 -1
- package/src/lib/BatchProcessor.d.ts +54 -0
- package/src/lib/BatchProcessor.js +5 -2
- package/src/lib/BatchProcessor.js.flow +10 -7
- package/src/lib/CountingSet.d.ts +10 -10
- package/src/lib/CountingSet.js.flow +4 -4
- package/src/lib/JsonReporter.d.ts +37 -0
- package/src/lib/JsonReporter.js +5 -3
- package/src/lib/JsonReporter.js.flow +19 -17
- package/src/lib/RamBundleParser.d.ts +29 -0
- package/src/lib/RamBundleParser.js.flow +1 -1
- package/src/lib/TerminalReporter.d.ts +97 -6
- package/src/lib/TerminalReporter.js +37 -34
- package/src/lib/TerminalReporter.js.flow +21 -30
- package/src/lib/bundleProgressUtils.d.ts +26 -0
- package/src/lib/bundleProgressUtils.js +19 -0
- package/src/lib/bundleProgressUtils.js.flow +35 -0
- package/src/lib/bundleToString.d.ts +19 -0
- package/src/lib/contextModule.d.ts +20 -9
- package/src/lib/contextModule.js.flow +1 -1
- package/src/lib/contextModuleTemplates.d.ts +25 -0
- package/src/lib/contextModuleTemplates.js +25 -21
- package/src/lib/countLines.d.ts +12 -0
- package/src/lib/countLines.js +4 -3
- package/src/lib/countLines.js.flow +3 -4
- package/src/lib/createWebsocketServer.d.ts +43 -0
- package/src/lib/createWebsocketServer.js +9 -2
- package/src/lib/createWebsocketServer.js.flow +16 -9
- package/src/lib/debounceAsyncQueue.d.ts +15 -0
- package/src/lib/debounceAsyncQueue.js.flow +1 -1
- package/src/lib/formatBundlingError.d.ts +23 -0
- package/src/lib/formatBundlingError.js.flow +1 -1
- package/src/lib/getAppendScripts.d.ts +31 -0
- package/src/lib/getAppendScripts.js.flow +4 -4
- package/src/lib/getGraphId.d.ts +15 -1
- package/src/lib/getGraphId.js.flow +1 -1
- package/src/lib/getPreludeCode.d.ts +18 -0
- package/src/lib/getPreludeCode.js +4 -0
- package/src/lib/getPreludeCode.js.flow +10 -3
- package/src/lib/getPrependedScripts.d.ts +24 -0
- package/src/lib/getPrependedScripts.js +36 -22
- package/src/lib/getPrependedScripts.js.flow +10 -3
- package/src/lib/isResolvedDependency.d.ts +15 -0
- package/src/lib/logToConsole.d.ts +19 -0
- package/src/lib/logToConsole.js.flow +2 -2
- package/src/lib/parseBundleOptionsFromBundleRequestUrl.d.ts +17 -0
- package/src/lib/parseBundleOptionsFromBundleRequestUrl.js +25 -21
- package/src/lib/parseCustomResolverOptions.d.ts +16 -0
- package/src/lib/parseCustomResolverOptions.js.flow +2 -2
- package/src/lib/parseCustomTransformOptions.d.ts +16 -0
- package/src/lib/parseCustomTransformOptions.js.flow +1 -1
- package/src/lib/parseJsonBody.d.ts +27 -0
- package/src/lib/parseJsonBody.js.flow +11 -1
- package/src/lib/pathUtils.d.ts +14 -0
- package/src/lib/pathUtils.js +25 -21
- package/src/lib/pathUtils.js.flow +1 -1
- package/src/lib/relativizeSourceMap.d.ts +17 -0
- package/src/lib/reporting.d.ts +65 -81
- package/src/lib/reporting.js.flow +4 -4
- package/src/lib/splitBundleOptions.d.ts +16 -0
- package/src/lib/transformHelpers.d.ts +35 -0
- package/src/lib/transformHelpers.js +11 -9
- package/src/lib/transformHelpers.js.flow +17 -15
- package/src/node-haste/DependencyGraph/ModuleResolution.d.ts +126 -0
- package/src/node-haste/DependencyGraph/ModuleResolution.js +48 -42
- package/src/node-haste/DependencyGraph/ModuleResolution.js.flow +35 -32
- package/src/node-haste/DependencyGraph/createFileMap.d.ts +29 -0
- package/src/node-haste/DependencyGraph/createFileMap.js +56 -38
- package/src/node-haste/DependencyGraph/createFileMap.js.flow +44 -18
- package/src/node-haste/DependencyGraph.d.ts +57 -33
- package/src/node-haste/DependencyGraph.js +40 -31
- package/src/node-haste/DependencyGraph.js.flow +35 -37
- package/src/node-haste/Package.d.ts +21 -0
- package/src/node-haste/PackageCache.d.ts +34 -0
- package/src/node-haste/lib/AssetPaths.d.ts +29 -0
- package/src/node-haste/lib/AssetPaths.js +2 -2
- package/src/node-haste/lib/AssetPaths.js.flow +4 -4
- package/src/node-haste/lib/parsePlatformFilePath.d.ts +25 -0
- package/src/node-haste/lib/parsePlatformFilePath.js +6 -6
- package/src/node-haste/lib/parsePlatformFilePath.js.flow +4 -4
- package/src/shared/output/RamBundle/as-assets.d.ts +25 -0
- package/src/shared/output/RamBundle/as-assets.js.flow +6 -6
- package/src/shared/output/RamBundle/as-indexed-file.d.ts +38 -0
- package/src/shared/output/RamBundle/as-indexed-file.js.flow +5 -5
- package/src/shared/output/RamBundle/buildSourcemapWithMetadata.d.ts +23 -0
- package/src/shared/output/RamBundle/buildSourcemapWithMetadata.js.flow +5 -5
- package/src/shared/output/RamBundle/magic-number.d.ts +14 -0
- package/src/shared/output/RamBundle/util.d.ts +41 -0
- package/src/shared/output/RamBundle/util.js.flow +5 -5
- package/src/shared/output/RamBundle/write-sourcemap.d.ts +16 -0
- package/src/shared/output/RamBundle/write-sourcemap.js.flow +1 -1
- package/src/shared/output/RamBundle.d.ts +26 -0
- package/src/shared/output/RamBundle.js.flow +1 -1
- package/src/shared/output/bundle.d.ts +9 -17
- package/src/shared/output/bundle.flow.js.flow +3 -3
- package/src/shared/output/meta.d.ts +15 -0
- package/src/shared/output/meta.js +2 -2
- package/src/shared/output/meta.js.flow +1 -1
- package/src/shared/output/unbundle.d.ts +11 -0
- package/src/shared/output/writeFile.d.ts +16 -0
- package/src/shared/output/writeFile.js +8 -3
- package/src/shared/output/writeFile.js.flow +8 -2
- package/src/shared/types.d.ts +81 -66
- package/src/shared/types.js.flow +20 -5
- package/src/Asset.d.ts +0 -25
- package/src/ModuleGraph/test-helpers.js +0 -75
package/src/Server.js
CHANGED
|
@@ -25,6 +25,7 @@ var _IncrementalBundler = _interopRequireDefault(
|
|
|
25
25
|
var _ResourceNotFoundError = _interopRequireDefault(
|
|
26
26
|
require("./IncrementalBundler/ResourceNotFoundError"),
|
|
27
27
|
);
|
|
28
|
+
var _bundleProgressUtils = require("./lib/bundleProgressUtils");
|
|
28
29
|
var _bundleToString = _interopRequireDefault(require("./lib/bundleToString"));
|
|
29
30
|
var _formatBundlingError = _interopRequireDefault(
|
|
30
31
|
require("./lib/formatBundlingError"),
|
|
@@ -51,7 +52,6 @@ var _symbolicate = _interopRequireDefault(require("./Server/symbolicate"));
|
|
|
51
52
|
var _types = require("./shared/types");
|
|
52
53
|
var _codeFrame = require("@babel/code-frame");
|
|
53
54
|
var fs = _interopRequireWildcard(require("graceful-fs"));
|
|
54
|
-
var _invariant = _interopRequireDefault(require("invariant"));
|
|
55
55
|
var jscSafeUrl = _interopRequireWildcard(require("jsc-safe-url"));
|
|
56
56
|
var _metroCore = require("metro-core");
|
|
57
57
|
var _mimeTypes = _interopRequireDefault(require("mime-types"));
|
|
@@ -59,28 +59,32 @@ var _nullthrows = _interopRequireDefault(require("nullthrows"));
|
|
|
59
59
|
var _path = _interopRequireDefault(require("path"));
|
|
60
60
|
var _perf_hooks = require("perf_hooks");
|
|
61
61
|
var _querystring = _interopRequireDefault(require("querystring"));
|
|
62
|
-
function
|
|
63
|
-
if ("function"
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
return (
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
var n = { __proto__: null },
|
|
77
|
-
a = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
78
|
-
for (var u in e)
|
|
79
|
-
if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
|
|
80
|
-
var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
|
|
81
|
-
i && (i.get || i.set) ? Object.defineProperty(n, u, i) : (n[u] = e[u]);
|
|
62
|
+
function _interopRequireWildcard(e, t) {
|
|
63
|
+
if ("function" == typeof WeakMap)
|
|
64
|
+
var r = new WeakMap(),
|
|
65
|
+
n = new WeakMap();
|
|
66
|
+
return (_interopRequireWildcard = function (e, t) {
|
|
67
|
+
if (!t && e && e.__esModule) return e;
|
|
68
|
+
var o,
|
|
69
|
+
i,
|
|
70
|
+
f = { __proto__: null, default: e };
|
|
71
|
+
if (null === e || ("object" != typeof e && "function" != typeof e))
|
|
72
|
+
return f;
|
|
73
|
+
if ((o = t ? n : r)) {
|
|
74
|
+
if (o.has(e)) return o.get(e);
|
|
75
|
+
o.set(e, f);
|
|
82
76
|
}
|
|
83
|
-
|
|
77
|
+
for (const t in e)
|
|
78
|
+
"default" !== t &&
|
|
79
|
+
{}.hasOwnProperty.call(e, t) &&
|
|
80
|
+
((i =
|
|
81
|
+
(o = Object.defineProperty) &&
|
|
82
|
+
Object.getOwnPropertyDescriptor(e, t)) &&
|
|
83
|
+
(i.get || i.set)
|
|
84
|
+
? o(f, t, i)
|
|
85
|
+
: (f[t] = e[t]));
|
|
86
|
+
return f;
|
|
87
|
+
})(e, t);
|
|
84
88
|
}
|
|
85
89
|
function _interopRequireDefault(e) {
|
|
86
90
|
return e && e.__esModule ? e : { default: e };
|
|
@@ -126,6 +130,8 @@ class Server {
|
|
|
126
130
|
]),
|
|
127
131
|
];
|
|
128
132
|
this._isEnded = false;
|
|
133
|
+
this._fetchTimings = [];
|
|
134
|
+
this._activeFetchCount = 0;
|
|
129
135
|
this._createModuleId = config.serializer.createModuleIdFactory();
|
|
130
136
|
this._bundler = new _IncrementalBundler.default(config, {
|
|
131
137
|
hasReducedPerformance: options && options.hasReducedPerformance,
|
|
@@ -433,12 +439,14 @@ class Server {
|
|
|
433
439
|
}),
|
|
434
440
|
);
|
|
435
441
|
try {
|
|
442
|
+
const depGraph = await this._bundler.getBundler().getDependencyGraph();
|
|
436
443
|
const data = await (0, _Assets.getAsset)(
|
|
437
444
|
assetPath,
|
|
438
445
|
this._config.projectRoot,
|
|
439
446
|
this._config.watchFolders,
|
|
440
447
|
urlObj.searchParams.get("platform"),
|
|
441
448
|
this._config.resolver.assetExts,
|
|
449
|
+
(filePath) => depGraph.doesFileExist(filePath),
|
|
442
450
|
);
|
|
443
451
|
if (process.env.REACT_NATIVE_ENABLE_ASSET_CACHING === true) {
|
|
444
452
|
res.setHeader("Cache-Control", "max-age=31536000");
|
|
@@ -481,6 +489,13 @@ class Server {
|
|
|
481
489
|
debug("Rewritten to: %s", req.url);
|
|
482
490
|
}
|
|
483
491
|
const reqHost = req.headers["x-forwarded-host"] || req.headers["host"];
|
|
492
|
+
debug("Request host is: %s", req.headers["host"]);
|
|
493
|
+
if (req.headers["x-forwarded-host"]) {
|
|
494
|
+
debug(
|
|
495
|
+
"Request x-forwarded-host is: %s",
|
|
496
|
+
req.headers["x-forwarded-host"],
|
|
497
|
+
);
|
|
498
|
+
}
|
|
484
499
|
if (!reqHost) {
|
|
485
500
|
throw new Error("No host header was found.");
|
|
486
501
|
}
|
|
@@ -665,14 +680,16 @@ class Server {
|
|
|
665
680
|
}
|
|
666
681
|
const mres = _MultipartResponse.default.wrapIfSupported(req, res);
|
|
667
682
|
let onProgress = null;
|
|
668
|
-
let
|
|
683
|
+
let lastRatio = -1;
|
|
669
684
|
if (this._config.reporter) {
|
|
670
685
|
onProgress = (transformedFileCount, totalFileCount) => {
|
|
671
|
-
const
|
|
672
|
-
|
|
673
|
-
|
|
686
|
+
const newRatio = (0,
|
|
687
|
+
_bundleProgressUtils.calculateBundleProgressRatio)(
|
|
688
|
+
transformedFileCount,
|
|
689
|
+
totalFileCount,
|
|
690
|
+
lastRatio,
|
|
674
691
|
);
|
|
675
|
-
if (
|
|
692
|
+
if (newRatio > lastRatio) {
|
|
676
693
|
if (mres instanceof _MultipartResponse.default) {
|
|
677
694
|
mres.writeChunk(
|
|
678
695
|
{
|
|
@@ -681,13 +698,14 @@ class Server {
|
|
|
681
698
|
JSON.stringify({
|
|
682
699
|
done: transformedFileCount,
|
|
683
700
|
total: totalFileCount,
|
|
701
|
+
percent: Math.floor(newRatio * 100),
|
|
684
702
|
}),
|
|
685
703
|
);
|
|
686
704
|
}
|
|
687
705
|
if (res.socket != null && res.socket.uncork != null) {
|
|
688
706
|
res.socket.uncork();
|
|
689
707
|
}
|
|
690
|
-
|
|
708
|
+
lastRatio = newRatio;
|
|
691
709
|
}
|
|
692
710
|
this._reporter.update({
|
|
693
711
|
buildID: getBuildID(buildNumber),
|
|
@@ -729,8 +747,16 @@ class Server {
|
|
|
729
747
|
const logEntry = log(
|
|
730
748
|
createActionStartEntry(createStartEntry(startContext)),
|
|
731
749
|
);
|
|
750
|
+
const fetchTiming = {
|
|
751
|
+
graphId,
|
|
752
|
+
startTime: requestStartTimestamp,
|
|
753
|
+
endTime: null,
|
|
754
|
+
isPrefetch: req.method === "HEAD",
|
|
755
|
+
};
|
|
732
756
|
let result;
|
|
733
757
|
try {
|
|
758
|
+
this._fetchTimings.push(fetchTiming);
|
|
759
|
+
this._activeFetchCount++;
|
|
734
760
|
result = await build(startContext);
|
|
735
761
|
} catch (error) {
|
|
736
762
|
const formattedError = (0, _formatBundlingError.default)(error);
|
|
@@ -760,6 +786,31 @@ class Server {
|
|
|
760
786
|
debug("Bundling error", error);
|
|
761
787
|
buildContext.bundlePerfLogger.end("FAIL");
|
|
762
788
|
return;
|
|
789
|
+
} finally {
|
|
790
|
+
fetchTiming.endTime =
|
|
791
|
+
_perf_hooks.performance.timeOrigin + _perf_hooks.performance.now();
|
|
792
|
+
if (!fetchTiming.isPrefetch) {
|
|
793
|
+
buildContext.bundlePerfLogger.annotate({
|
|
794
|
+
bool: {
|
|
795
|
+
had_competing_prefetch: this._fetchTimings
|
|
796
|
+
.filter((t) => t.isPrefetch && t.graphId !== graphId)
|
|
797
|
+
.some((prefetch) => {
|
|
798
|
+
const prefetchEndTime =
|
|
799
|
+
prefetch.endTime ?? Number.MAX_SAFE_INTEGER;
|
|
800
|
+
const fetchEndTime =
|
|
801
|
+
fetchTiming.endTime ?? Number.MAX_SAFE_INTEGER;
|
|
802
|
+
return (
|
|
803
|
+
prefetch.startTime < fetchEndTime &&
|
|
804
|
+
prefetchEndTime > fetchTiming.startTime
|
|
805
|
+
);
|
|
806
|
+
}),
|
|
807
|
+
},
|
|
808
|
+
});
|
|
809
|
+
}
|
|
810
|
+
this._activeFetchCount--;
|
|
811
|
+
if (this._activeFetchCount === 0) {
|
|
812
|
+
this._fetchTimings = [];
|
|
813
|
+
}
|
|
763
814
|
}
|
|
764
815
|
const endContext = {
|
|
765
816
|
...startContext,
|
|
@@ -784,6 +835,7 @@ class Server {
|
|
|
784
835
|
return {
|
|
785
836
|
action_name: "Requesting bundle",
|
|
786
837
|
bundle_url: context.req.url,
|
|
838
|
+
bundle_original_url: context.req.originalUrl ?? "unknown",
|
|
787
839
|
entry_point: context.entryFile,
|
|
788
840
|
bundler: "delta",
|
|
789
841
|
build_id: getBuildID(context.buildNumber),
|
|
@@ -1068,6 +1120,7 @@ class Server {
|
|
|
1068
1120
|
},
|
|
1069
1121
|
});
|
|
1070
1122
|
async _symbolicate(req, res) {
|
|
1123
|
+
const depGraph = await this._bundler.getBundler().getDependencyGraph();
|
|
1071
1124
|
const getCodeFrame = (urls, symbolicatedStack) => {
|
|
1072
1125
|
const allFramesCollapsed = symbolicatedStack.every(
|
|
1073
1126
|
({ collapse }) => collapse,
|
|
@@ -1085,6 +1138,13 @@ class Server {
|
|
|
1085
1138
|
this._config.projectRoot,
|
|
1086
1139
|
file ?? "",
|
|
1087
1140
|
);
|
|
1141
|
+
if (!depGraph.doesFileExist(fileAbsolute)) {
|
|
1142
|
+
debug(
|
|
1143
|
+
"Skipping code frame for file not in dependency graph.",
|
|
1144
|
+
fileAbsolute,
|
|
1145
|
+
);
|
|
1146
|
+
continue;
|
|
1147
|
+
}
|
|
1088
1148
|
try {
|
|
1089
1149
|
return {
|
|
1090
1150
|
content: (0, _codeFrame.codeFrameColumns)(
|
|
@@ -1115,6 +1175,7 @@ class Server {
|
|
|
1115
1175
|
}
|
|
1116
1176
|
return null;
|
|
1117
1177
|
};
|
|
1178
|
+
let inputValidated = false;
|
|
1118
1179
|
try {
|
|
1119
1180
|
const symbolicatingLogEntry = log(
|
|
1120
1181
|
createActionStartEntry("Symbolicating"),
|
|
@@ -1125,25 +1186,68 @@ class Server {
|
|
|
1125
1186
|
const body = await req.rawBody;
|
|
1126
1187
|
parsedBody = JSON.parse(body);
|
|
1127
1188
|
} else {
|
|
1128
|
-
parsedBody = await (0, _parseJsonBody.default)(req
|
|
1189
|
+
parsedBody = await (0, _parseJsonBody.default)(req, {
|
|
1190
|
+
strict: false,
|
|
1191
|
+
});
|
|
1129
1192
|
}
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1193
|
+
let validatedBody;
|
|
1194
|
+
if (
|
|
1195
|
+
parsedBody != null &&
|
|
1196
|
+
typeof parsedBody === "object" &&
|
|
1197
|
+
!Array.isArray(parsedBody) &&
|
|
1198
|
+
Array.isArray(parsedBody["stack"])
|
|
1199
|
+
) {
|
|
1200
|
+
const maybeStack = parsedBody["stack"];
|
|
1201
|
+
const extraData = parsedBody["extraData"];
|
|
1202
|
+
validatedBody = {
|
|
1203
|
+
stack: maybeStack,
|
|
1204
|
+
extraData,
|
|
1205
|
+
};
|
|
1206
|
+
} else {
|
|
1207
|
+
throw new Error(
|
|
1208
|
+
`Bad symbolication input, expected object with stack array, got: ${JSON.stringify(parsedBody)}`,
|
|
1136
1209
|
);
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1210
|
+
}
|
|
1211
|
+
const validateAndNormalizeStackFrame = (frame) => {
|
|
1212
|
+
if (
|
|
1213
|
+
frame == null ||
|
|
1214
|
+
typeof frame !== "object" ||
|
|
1215
|
+
Array.isArray(frame)
|
|
1216
|
+
) {
|
|
1217
|
+
throw new Error("Expected frame to be a JSON object");
|
|
1143
1218
|
}
|
|
1144
|
-
|
|
1219
|
+
if (frame.file != null && typeof frame.file !== "string") {
|
|
1220
|
+
throw new Error("Expected file to be string or nullish");
|
|
1221
|
+
}
|
|
1222
|
+
let frameFile = frame.file;
|
|
1223
|
+
if (frameFile != null && frameFile.includes("://")) {
|
|
1224
|
+
frameFile = this._rewriteAndNormalizeUrl(frameFile);
|
|
1225
|
+
}
|
|
1226
|
+
if (frame.methodName != null && typeof frame.methodName !== "string") {
|
|
1227
|
+
throw new Error("Expected methodName to be string or nullish");
|
|
1228
|
+
}
|
|
1229
|
+
if (frame.lineNumber != null && typeof frame.lineNumber !== "number") {
|
|
1230
|
+
throw new Error("Expected lineNumber to be number or nullish");
|
|
1231
|
+
}
|
|
1232
|
+
if (frame.column != null && typeof frame.column !== "number") {
|
|
1233
|
+
throw new Error("Expected column to be number or nullish");
|
|
1234
|
+
}
|
|
1235
|
+
return {
|
|
1236
|
+
...frame,
|
|
1237
|
+
file: frameFile,
|
|
1238
|
+
lineNumber: frame.lineNumber,
|
|
1239
|
+
column: frame.column,
|
|
1240
|
+
methodName: frame.methodName,
|
|
1241
|
+
};
|
|
1145
1242
|
};
|
|
1146
|
-
const stack =
|
|
1243
|
+
const stack = validatedBody.stack.map((frame, lineNumber) => {
|
|
1244
|
+
try {
|
|
1245
|
+
return validateAndNormalizeStackFrame(frame);
|
|
1246
|
+
} catch (e) {
|
|
1247
|
+
throw new Error(`Bad frame at line ${lineNumber}: ${e.message}`);
|
|
1248
|
+
}
|
|
1249
|
+
});
|
|
1250
|
+
inputValidated = true;
|
|
1147
1251
|
const urls = new Set();
|
|
1148
1252
|
stack.forEach((frame) => {
|
|
1149
1253
|
const sourceUrl = frame.file;
|
|
@@ -1169,7 +1273,7 @@ class Server {
|
|
|
1169
1273
|
stack,
|
|
1170
1274
|
zip(urls.values(), sourceMaps),
|
|
1171
1275
|
this._config,
|
|
1172
|
-
|
|
1276
|
+
validatedBody.extraData ?? {},
|
|
1173
1277
|
);
|
|
1174
1278
|
debug("Symbolication done");
|
|
1175
1279
|
res.end(
|
|
@@ -1183,7 +1287,7 @@ class Server {
|
|
|
1183
1287
|
});
|
|
1184
1288
|
} catch (error) {
|
|
1185
1289
|
debug("Symbolication failed", error.stack || error);
|
|
1186
|
-
res.statusCode = 500;
|
|
1290
|
+
res.statusCode = inputValidated ? 500 : 400;
|
|
1187
1291
|
res.end(
|
|
1188
1292
|
JSON.stringify({
|
|
1189
1293
|
error: error.message,
|