metro 0.83.3 → 0.84.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 +28 -25
- package/src/Assets.js +42 -29
- package/src/Assets.js.flow +26 -15
- package/src/Bundler/util.js +25 -21
- package/src/Bundler/util.js.flow +2 -2
- package/src/Bundler.js.flow +1 -1
- package/src/DeltaBundler/DeltaCalculator.js +4 -4
- package/src/DeltaBundler/DeltaCalculator.js.flow +8 -8
- package/src/DeltaBundler/Graph.js +16 -16
- package/src/DeltaBundler/Graph.js.flow +30 -30
- package/src/DeltaBundler/Serializers/baseJSBundle.js.flow +1 -1
- package/src/DeltaBundler/Serializers/getAllFiles.js.flow +2 -2
- package/src/DeltaBundler/Serializers/getAssets.js.flow +2 -2
- package/src/DeltaBundler/Serializers/getExplodedSourceMap.js.flow +2 -2
- package/src/DeltaBundler/Serializers/getRamBundleInfo.js.flow +8 -8
- 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.js.flow +3 -3
- package/src/DeltaBundler/Serializers/hmrJSBundle.js +25 -21
- package/src/DeltaBundler/Serializers/hmrJSBundle.js.flow +5 -5
- package/src/DeltaBundler/Serializers/sourceMapGenerator.js.flow +6 -6
- package/src/DeltaBundler/Serializers/sourceMapObject.js.flow +2 -2
- package/src/DeltaBundler/Serializers/sourceMapString.js.flow +2 -2
- package/src/DeltaBundler/Transformer.js.flow +3 -3
- package/src/DeltaBundler/Worker.flow.js.flow +1 -1
- package/src/DeltaBundler/WorkerFarm.js +1 -1
- package/src/DeltaBundler/WorkerFarm.js.flow +26 -13
- package/src/DeltaBundler/buildSubgraph.js +4 -4
- package/src/DeltaBundler/buildSubgraph.js.flow +8 -8
- package/src/DeltaBundler/types.js.flow +36 -34
- package/src/DeltaBundler.js.flow +2 -2
- package/src/HmrServer.js +34 -29
- package/src/HmrServer.js.flow +17 -12
- package/src/IncrementalBundler.js +29 -21
- package/src/IncrementalBundler.js.flow +13 -9
- package/src/ModuleGraph/worker/JsFileWrapping.js +25 -21
- package/src/ModuleGraph/worker/JsFileWrapping.js.flow +10 -5
- package/src/ModuleGraph/worker/collectDependencies.js +25 -21
- package/src/ModuleGraph/worker/collectDependencies.js.flow +27 -21
- package/src/ModuleGraph/worker/generateImportNames.js.flow +4 -2
- package/src/ModuleGraph/worker/importLocationsPlugin.js.flow +7 -3
- package/src/Server/MultipartResponse.js.flow +1 -1
- package/src/Server/symbolicate.js.flow +4 -4
- package/src/Server.js +139 -39
- package/src/Server.js.flow +158 -47
- package/src/cli/parseKeyValueParamArray.js.flow +1 -1
- package/src/cli-utils.js.flow +2 -2
- package/src/commands/build.js.flow +11 -10
- package/src/commands/dependencies.js.flow +8 -4
- package/src/commands/serve.js +2 -0
- package/src/commands/serve.js.flow +14 -9
- package/src/index.flow.js +30 -26
- package/src/index.flow.js.flow +25 -20
- 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.js +5 -2
- package/src/lib/BatchProcessor.js.flow +10 -7
- package/src/lib/CountingSet.js.flow +4 -4
- package/src/lib/JsonReporter.js +5 -3
- package/src/lib/JsonReporter.js.flow +19 -17
- package/src/lib/RamBundleParser.js.flow +1 -1
- package/src/lib/TerminalReporter.js +31 -27
- package/src/lib/TerminalReporter.js.flow +15 -15
- package/src/lib/contextModule.js.flow +1 -1
- package/src/lib/contextModuleTemplates.js +25 -21
- package/src/lib/countLines.js +4 -3
- package/src/lib/countLines.js.flow +3 -4
- package/src/lib/createWebsocketServer.js +9 -2
- package/src/lib/createWebsocketServer.js.flow +16 -9
- package/src/lib/debounceAsyncQueue.js.flow +1 -1
- package/src/lib/formatBundlingError.js.flow +1 -1
- package/src/lib/getAppendScripts.js.flow +4 -4
- package/src/lib/getGraphId.js.flow +1 -1
- package/src/lib/getPreludeCode.js +4 -0
- package/src/lib/getPreludeCode.js.flow +10 -3
- package/src/lib/getPrependedScripts.js +36 -22
- package/src/lib/getPrependedScripts.js.flow +10 -3
- package/src/lib/logToConsole.js.flow +2 -2
- package/src/lib/parseBundleOptionsFromBundleRequestUrl.js +25 -21
- package/src/lib/parseCustomResolverOptions.js.flow +2 -2
- package/src/lib/parseCustomTransformOptions.js.flow +1 -1
- package/src/lib/parseJsonBody.js.flow +11 -1
- package/src/lib/pathUtils.js +25 -21
- package/src/lib/pathUtils.js.flow +1 -1
- package/src/lib/reporting.js.flow +4 -4
- package/src/lib/transformHelpers.js +11 -9
- package/src/lib/transformHelpers.js.flow +17 -15
- 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.js +56 -38
- package/src/node-haste/DependencyGraph/createFileMap.js.flow +44 -18
- package/src/node-haste/DependencyGraph.js +40 -31
- package/src/node-haste/DependencyGraph.js.flow +35 -37
- 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.js +6 -6
- package/src/node-haste/lib/parsePlatformFilePath.js.flow +4 -4
- package/src/shared/output/RamBundle/as-assets.js.flow +6 -6
- package/src/shared/output/RamBundle/as-indexed-file.js.flow +5 -5
- package/src/shared/output/RamBundle/buildSourcemapWithMetadata.js.flow +5 -5
- package/src/shared/output/RamBundle/util.js.flow +5 -5
- package/src/shared/output/RamBundle/write-sourcemap.js.flow +1 -1
- package/src/shared/output/RamBundle.js.flow +1 -1
- package/src/shared/output/bundle.flow.js.flow +3 -3
- package/src/shared/output/meta.js +2 -2
- package/src/shared/output/meta.js.flow +1 -1
- package/src/shared/output/writeFile.js +8 -3
- package/src/shared/output/writeFile.js.flow +8 -2
- package/src/shared/types.js.flow +20 -5
- package/src/Asset.d.ts +0 -25
- package/src/Bundler.d.ts +0 -39
- package/src/DeltaBundler/Graph.d.ts +0 -40
- package/src/DeltaBundler/Serializers/getExplodedSourceMap.d.ts +0 -26
- package/src/DeltaBundler/Serializers/getRamBundleInfo.d.ts +0 -18
- package/src/DeltaBundler/Worker.d.ts +0 -45
- package/src/DeltaBundler/types.d.ts +0 -166
- package/src/DeltaBundler.d.ts +0 -58
- package/src/IncrementalBundler.d.ts +0 -98
- package/src/ModuleGraph/test-helpers.js +0 -75
- package/src/ModuleGraph/worker/collectDependencies.d.ts +0 -27
- package/src/Server/MultipartResponse.d.ts +0 -31
- package/src/Server/symbolicate.d.ts +0 -31
- package/src/Server.d.ts +0 -118
- package/src/index.d.ts +0 -193
- package/src/lib/CountingSet.d.ts +0 -48
- package/src/lib/TerminalReporter.d.ts +0 -27
- package/src/lib/contextModule.d.ts +0 -22
- package/src/lib/getGraphId.d.ts +0 -11
- package/src/lib/reporting.d.ts +0 -144
- package/src/node-haste/DependencyGraph.d.ts +0 -62
- package/src/shared/output/bundle.d.ts +0 -35
- package/src/shared/types.d.ts +0 -130
package/src/lib/JsonReporter.js
CHANGED
|
@@ -9,15 +9,17 @@ class JsonReporter {
|
|
|
9
9
|
this._stream = stream;
|
|
10
10
|
}
|
|
11
11
|
update(event) {
|
|
12
|
+
let eventToWrite = event;
|
|
12
13
|
if (event.error instanceof Error) {
|
|
13
14
|
const { message, stack } = event.error;
|
|
14
|
-
|
|
15
|
+
eventToWrite = {
|
|
16
|
+
...eventToWrite,
|
|
15
17
|
error: serializeError(event.error),
|
|
16
18
|
message,
|
|
17
19
|
stack,
|
|
18
|
-
}
|
|
20
|
+
};
|
|
19
21
|
}
|
|
20
|
-
this._stream.write(JSON.stringify(
|
|
22
|
+
this._stream.write(JSON.stringify(eventToWrite) + "\n");
|
|
21
23
|
}
|
|
22
24
|
}
|
|
23
25
|
exports.default = JsonReporter;
|
|
@@ -4,7 +4,7 @@
|
|
|
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.
|
|
6
6
|
*
|
|
7
|
-
* @flow
|
|
7
|
+
* @flow strict-local
|
|
8
8
|
* @format
|
|
9
9
|
* @oncall react_native
|
|
10
10
|
*/
|
|
@@ -14,23 +14,24 @@ import type {Writable} from 'stream';
|
|
|
14
14
|
export type SerializedError = {
|
|
15
15
|
message: string,
|
|
16
16
|
stack: string,
|
|
17
|
-
errors?:
|
|
17
|
+
errors?: ReadonlyArray<SerializedError>,
|
|
18
18
|
cause?: SerializedError,
|
|
19
19
|
...
|
|
20
20
|
};
|
|
21
21
|
|
|
22
|
-
export type SerializedEvent<TEvent: {[string]:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
22
|
+
export type SerializedEvent<TEvent: {+[string]: unknown, ...}> =
|
|
23
|
+
TEvent extends {
|
|
24
|
+
error: Error,
|
|
25
|
+
...
|
|
26
|
+
}
|
|
27
|
+
? {
|
|
28
|
+
...Omit<TEvent, 'error'>,
|
|
29
|
+
error: SerializedError,
|
|
30
|
+
...
|
|
31
|
+
}
|
|
32
|
+
: TEvent;
|
|
32
33
|
|
|
33
|
-
export default class JsonReporter<TEvent: {[string]:
|
|
34
|
+
export default class JsonReporter<TEvent: {+[string]: unknown, ...}> {
|
|
34
35
|
_stream: Writable;
|
|
35
36
|
|
|
36
37
|
constructor(stream: Writable) {
|
|
@@ -42,19 +43,20 @@ export default class JsonReporter<TEvent: {[string]: any, ...}> {
|
|
|
42
43
|
* (Perhaps we should switch in favor of plain object?)
|
|
43
44
|
*/
|
|
44
45
|
update(event: TEvent): void {
|
|
46
|
+
let eventToWrite = event;
|
|
45
47
|
if (event.error instanceof Error) {
|
|
46
48
|
const {message, stack} = event.error;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
+
eventToWrite = {
|
|
50
|
+
...eventToWrite,
|
|
49
51
|
error: serializeError(event.error),
|
|
50
52
|
// TODO: Preexisting issue - this writes message, stack, etc. as
|
|
51
53
|
// top-level siblings of event.error (which was serialized to {}), whereas it was presumably
|
|
52
54
|
// intended to nest them _under_ error. Fix this in a breaking change.
|
|
53
55
|
message,
|
|
54
56
|
stack,
|
|
55
|
-
}
|
|
57
|
+
};
|
|
56
58
|
}
|
|
57
|
-
this._stream.write(JSON.stringify(
|
|
59
|
+
this._stream.write(JSON.stringify(eventToWrite) + '\n');
|
|
58
60
|
}
|
|
59
61
|
}
|
|
60
62
|
|
|
@@ -10,28 +10,32 @@ var _chalk = _interopRequireDefault(require("chalk"));
|
|
|
10
10
|
var _lodash = _interopRequireDefault(require("lodash.throttle"));
|
|
11
11
|
var _metroCore = require("metro-core");
|
|
12
12
|
var _path = _interopRequireDefault(require("path"));
|
|
13
|
-
function
|
|
14
|
-
if ("function"
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return (
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
var n = { __proto__: null },
|
|
28
|
-
a = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
29
|
-
for (var u in e)
|
|
30
|
-
if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
|
|
31
|
-
var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
|
|
32
|
-
i && (i.get || i.set) ? Object.defineProperty(n, u, i) : (n[u] = e[u]);
|
|
13
|
+
function _interopRequireWildcard(e, t) {
|
|
14
|
+
if ("function" == typeof WeakMap)
|
|
15
|
+
var r = new WeakMap(),
|
|
16
|
+
n = new WeakMap();
|
|
17
|
+
return (_interopRequireWildcard = function (e, t) {
|
|
18
|
+
if (!t && e && e.__esModule) return e;
|
|
19
|
+
var o,
|
|
20
|
+
i,
|
|
21
|
+
f = { __proto__: null, default: e };
|
|
22
|
+
if (null === e || ("object" != typeof e && "function" != typeof e))
|
|
23
|
+
return f;
|
|
24
|
+
if ((o = t ? n : r)) {
|
|
25
|
+
if (o.has(e)) return o.get(e);
|
|
26
|
+
o.set(e, f);
|
|
33
27
|
}
|
|
34
|
-
|
|
28
|
+
for (const t in e)
|
|
29
|
+
"default" !== t &&
|
|
30
|
+
{}.hasOwnProperty.call(e, t) &&
|
|
31
|
+
((i =
|
|
32
|
+
(o = Object.defineProperty) &&
|
|
33
|
+
Object.getOwnPropertyDescriptor(e, t)) &&
|
|
34
|
+
(i.get || i.set)
|
|
35
|
+
? o(f, t, i)
|
|
36
|
+
: (f[t] = e[t]));
|
|
37
|
+
return f;
|
|
38
|
+
})(e, t);
|
|
35
39
|
}
|
|
36
40
|
function _interopRequireDefault(e) {
|
|
37
41
|
return e && e.__esModule ? e : { default: e };
|
|
@@ -60,9 +64,6 @@ class TerminalReporter {
|
|
|
60
64
|
},
|
|
61
65
|
phase,
|
|
62
66
|
) {
|
|
63
|
-
if (isPrefetch) {
|
|
64
|
-
bundleType = "PREBUNDLE";
|
|
65
|
-
}
|
|
66
67
|
const localPath = _path.default.relative(".", entryFile);
|
|
67
68
|
const filledBar = Math.floor(ratio * MAX_PROGRESS_BAR_CHAR_WIDTH);
|
|
68
69
|
const bundleTypeColor =
|
|
@@ -81,7 +82,9 @@ class TerminalReporter {
|
|
|
81
82
|
_chalk.default.dim(`(${transformedFileCount}/${totalFileCount})`)
|
|
82
83
|
: "";
|
|
83
84
|
return (
|
|
84
|
-
bundleTypeColor.inverse.bold(
|
|
85
|
+
bundleTypeColor.inverse.bold(
|
|
86
|
+
` ${isPrefetch === true ? "PREBUNDLE" : bundleType.toUpperCase()} `,
|
|
87
|
+
) +
|
|
85
88
|
_chalk.default.reset.dim(` ${_path.default.dirname(localPath)}/`) +
|
|
86
89
|
_chalk.default.bold(_path.default.basename(localPath)) +
|
|
87
90
|
" " +
|
|
@@ -261,8 +264,9 @@ class TerminalReporter {
|
|
|
261
264
|
message = error.stack;
|
|
262
265
|
}
|
|
263
266
|
}
|
|
264
|
-
|
|
265
|
-
|
|
267
|
+
const filename = error.filename;
|
|
268
|
+
if (filename?.length && !message.includes(filename)) {
|
|
269
|
+
message += ` [${filename}]`;
|
|
266
270
|
}
|
|
267
271
|
if (error.snippet != null) {
|
|
268
272
|
message += "\n" + error.snippet;
|
|
@@ -4,7 +4,7 @@
|
|
|
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.
|
|
6
6
|
*
|
|
7
|
-
* @flow
|
|
7
|
+
* @flow strict-local
|
|
8
8
|
* @format
|
|
9
9
|
* @oncall react_native
|
|
10
10
|
*/
|
|
@@ -16,6 +16,7 @@ import type {HealthCheckResult, WatcherStatus} from 'metro-file-map';
|
|
|
16
16
|
import logToConsole from './logToConsole';
|
|
17
17
|
import * as reporting from './reporting';
|
|
18
18
|
import chalk from 'chalk';
|
|
19
|
+
// $FlowFixMe[untyped-import] lodash.throttle
|
|
19
20
|
import throttle from 'lodash.throttle';
|
|
20
21
|
import {AmbiguousModuleResolutionError} from 'metro-core';
|
|
21
22
|
import path from 'path';
|
|
@@ -41,7 +42,7 @@ export type TerminalReportableEvent =
|
|
|
41
42
|
| {
|
|
42
43
|
type: 'unstable_server_log',
|
|
43
44
|
level: 'info' | 'warn' | 'error',
|
|
44
|
-
data: string | Array<
|
|
45
|
+
data: string | Array<unknown>,
|
|
45
46
|
...
|
|
46
47
|
}
|
|
47
48
|
| {
|
|
@@ -56,11 +57,11 @@ export type TerminalReportableEvent =
|
|
|
56
57
|
|
|
57
58
|
type BuildPhase = 'in_progress' | 'done' | 'failed';
|
|
58
59
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
interface SnippetError extends Error {
|
|
61
|
+
code?: string;
|
|
62
|
+
filename?: string;
|
|
63
|
+
snippet?: string;
|
|
64
|
+
}
|
|
64
65
|
|
|
65
66
|
const DARK_BLOCK_CHAR = '\u2593';
|
|
66
67
|
const LIGHT_BLOCK_CHAR = '\u2591';
|
|
@@ -117,10 +118,6 @@ export default class TerminalReporter {
|
|
|
117
118
|
}: BundleProgress,
|
|
118
119
|
phase: BuildPhase,
|
|
119
120
|
): string {
|
|
120
|
-
if (isPrefetch) {
|
|
121
|
-
bundleType = 'PREBUNDLE';
|
|
122
|
-
}
|
|
123
|
-
|
|
124
121
|
const localPath = path.relative('.', entryFile);
|
|
125
122
|
const filledBar = Math.floor(ratio * MAX_PROGRESS_BAR_CHAR_WIDTH);
|
|
126
123
|
const bundleTypeColor =
|
|
@@ -140,7 +137,9 @@ export default class TerminalReporter {
|
|
|
140
137
|
: '';
|
|
141
138
|
|
|
142
139
|
return (
|
|
143
|
-
bundleTypeColor.inverse.bold(
|
|
140
|
+
bundleTypeColor.inverse.bold(
|
|
141
|
+
` ${isPrefetch === true ? 'PREBUNDLE' : bundleType.toUpperCase()} `,
|
|
142
|
+
) +
|
|
144
143
|
chalk.reset.dim(` ${path.dirname(localPath)}/`) +
|
|
145
144
|
chalk.bold(path.basename(localPath)) +
|
|
146
145
|
' ' +
|
|
@@ -273,6 +272,7 @@ export default class TerminalReporter {
|
|
|
273
272
|
case 'dep_graph_loading':
|
|
274
273
|
const color = event.hasReducedPerformance ? chalk.red : chalk.blue;
|
|
275
274
|
// eslint-disable-next-line import/no-commonjs
|
|
275
|
+
// $FlowFixMe[untyped-import] package.json
|
|
276
276
|
const version = 'v' + require('../../package.json').version;
|
|
277
277
|
this.terminal.log(
|
|
278
278
|
color.bold(
|
|
@@ -331,9 +331,9 @@ export default class TerminalReporter {
|
|
|
331
331
|
}
|
|
332
332
|
}
|
|
333
333
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
message += ` [${
|
|
334
|
+
const filename = error.filename;
|
|
335
|
+
if (filename?.length && !message.includes(filename)) {
|
|
336
|
+
message += ` [${filename}]`;
|
|
337
337
|
}
|
|
338
338
|
|
|
339
339
|
if (error.snippet != null) {
|
|
@@ -18,7 +18,7 @@ import crypto from 'crypto';
|
|
|
18
18
|
import nullthrows from 'nullthrows';
|
|
19
19
|
import path from 'path';
|
|
20
20
|
|
|
21
|
-
export type RequireContext =
|
|
21
|
+
export type RequireContext = Readonly<{
|
|
22
22
|
/* Should search for files recursively. Optional, default `true` when `require.context` is used */
|
|
23
23
|
recursive: boolean,
|
|
24
24
|
/* Filename filter pattern for use in `require.context`. Optional, default `.*` (any file) when `require.context` is used */
|
|
@@ -6,28 +6,32 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.getContextModuleTemplate = getContextModuleTemplate;
|
|
7
7
|
var os = _interopRequireWildcard(require("os"));
|
|
8
8
|
var path = _interopRequireWildcard(require("path"));
|
|
9
|
-
function
|
|
10
|
-
if ("function"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return (
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
var n = { __proto__: null },
|
|
24
|
-
a = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
25
|
-
for (var u in e)
|
|
26
|
-
if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
|
|
27
|
-
var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
|
|
28
|
-
i && (i.get || i.set) ? Object.defineProperty(n, u, i) : (n[u] = e[u]);
|
|
9
|
+
function _interopRequireWildcard(e, t) {
|
|
10
|
+
if ("function" == typeof WeakMap)
|
|
11
|
+
var r = new WeakMap(),
|
|
12
|
+
n = new WeakMap();
|
|
13
|
+
return (_interopRequireWildcard = function (e, t) {
|
|
14
|
+
if (!t && e && e.__esModule) return e;
|
|
15
|
+
var o,
|
|
16
|
+
i,
|
|
17
|
+
f = { __proto__: null, default: e };
|
|
18
|
+
if (null === e || ("object" != typeof e && "function" != typeof e))
|
|
19
|
+
return f;
|
|
20
|
+
if ((o = t ? n : r)) {
|
|
21
|
+
if (o.has(e)) return o.get(e);
|
|
22
|
+
o.set(e, f);
|
|
29
23
|
}
|
|
30
|
-
|
|
24
|
+
for (const t in e)
|
|
25
|
+
"default" !== t &&
|
|
26
|
+
{}.hasOwnProperty.call(e, t) &&
|
|
27
|
+
((i =
|
|
28
|
+
(o = Object.defineProperty) &&
|
|
29
|
+
Object.getOwnPropertyDescriptor(e, t)) &&
|
|
30
|
+
(i.get || i.set)
|
|
31
|
+
? o(f, t, i)
|
|
32
|
+
: (f[t] = e[t]));
|
|
33
|
+
return f;
|
|
34
|
+
})(e, t);
|
|
31
35
|
}
|
|
32
36
|
function createFileMap(modulePath, files, processModule) {
|
|
33
37
|
let mapString = "\n";
|
package/src/lib/countLines.js
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true,
|
|
5
5
|
});
|
|
6
|
-
exports.default =
|
|
6
|
+
exports.default = countLines;
|
|
7
7
|
const newline = /\r\n?|\n|\u2028|\u2029/g;
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
function countLines(string) {
|
|
9
|
+
return (string.match(newline) || []).length + 1;
|
|
10
|
+
}
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
|
|
12
12
|
const newline = /\r\n?|\n|\u2028|\u2029/g;
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
(string.match(newline) || []).length + 1;
|
|
16
|
-
|
|
17
|
-
export default countLines;
|
|
14
|
+
export default function countLines(string: string): number {
|
|
15
|
+
return (string.match(newline) || []).length + 1;
|
|
16
|
+
}
|
|
@@ -4,10 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true,
|
|
5
5
|
});
|
|
6
6
|
exports.default = createWebsocketServer;
|
|
7
|
+
var _timers = require("timers");
|
|
7
8
|
var _ws = _interopRequireDefault(require("ws"));
|
|
8
9
|
function _interopRequireDefault(e) {
|
|
9
10
|
return e && e.__esModule ? e : { default: e };
|
|
10
11
|
}
|
|
12
|
+
const KEEP_ALIVE_INTERVAL_MS = 20000;
|
|
11
13
|
function createWebsocketServer({ websocketServer }) {
|
|
12
14
|
const wss = new _ws.default.Server({
|
|
13
15
|
noServer: true,
|
|
@@ -15,9 +17,9 @@ function createWebsocketServer({ websocketServer }) {
|
|
|
15
17
|
wss.on("connection", async (ws, req) => {
|
|
16
18
|
let connected = true;
|
|
17
19
|
const url = req.url;
|
|
18
|
-
const sendFn = (
|
|
20
|
+
const sendFn = (data) => {
|
|
19
21
|
if (connected) {
|
|
20
|
-
ws.send(
|
|
22
|
+
ws.send(data);
|
|
21
23
|
}
|
|
22
24
|
};
|
|
23
25
|
const client = await websocketServer.onClientConnect(url, sendFn);
|
|
@@ -25,10 +27,15 @@ function createWebsocketServer({ websocketServer }) {
|
|
|
25
27
|
ws.close();
|
|
26
28
|
return;
|
|
27
29
|
}
|
|
30
|
+
const keepAliveInterval = (0, _timers.setInterval)(
|
|
31
|
+
() => ws.ping(),
|
|
32
|
+
KEEP_ALIVE_INTERVAL_MS,
|
|
33
|
+
).unref();
|
|
28
34
|
ws.on("error", (e) => {
|
|
29
35
|
websocketServer.onClientError && websocketServer.onClientError(client, e);
|
|
30
36
|
});
|
|
31
37
|
ws.on("close", () => {
|
|
38
|
+
(0, _timers.clearInterval)(keepAliveInterval);
|
|
32
39
|
websocketServer.onClientDisconnect &&
|
|
33
40
|
websocketServer.onClientDisconnect(client);
|
|
34
41
|
connected = false;
|
|
@@ -4,11 +4,12 @@
|
|
|
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.
|
|
6
6
|
*
|
|
7
|
-
* @flow
|
|
7
|
+
* @flow strict
|
|
8
8
|
* @format
|
|
9
9
|
* @oncall react_native
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
+
import {clearInterval, setInterval} from 'timers';
|
|
12
13
|
import ws from 'ws';
|
|
13
14
|
|
|
14
15
|
type WebsocketServiceInterface<T> = interface {
|
|
@@ -16,13 +17,13 @@ type WebsocketServiceInterface<T> = interface {
|
|
|
16
17
|
url: string,
|
|
17
18
|
sendFn: (data: string) => void,
|
|
18
19
|
) => Promise<?T>,
|
|
19
|
-
+onClientDisconnect?: (client: T) =>
|
|
20
|
-
+onClientError?: (client: T, e:
|
|
20
|
+
+onClientDisconnect?: (client: T) => unknown,
|
|
21
|
+
+onClientError?: (client: T, e: Error) => unknown,
|
|
21
22
|
+onClientMessage?: (
|
|
22
23
|
client: T,
|
|
23
24
|
message: string | Buffer | ArrayBuffer | Array<Buffer>,
|
|
24
25
|
sendFn: (data: string) => void,
|
|
25
|
-
) =>
|
|
26
|
+
) => unknown,
|
|
26
27
|
};
|
|
27
28
|
|
|
28
29
|
type HMROptions<TClient> = {
|
|
@@ -30,6 +31,8 @@ type HMROptions<TClient> = {
|
|
|
30
31
|
...
|
|
31
32
|
};
|
|
32
33
|
|
|
34
|
+
const KEEP_ALIVE_INTERVAL_MS = 20000;
|
|
35
|
+
|
|
33
36
|
/**
|
|
34
37
|
* Returns a WebSocketServer to be attached to an existing HTTP instance. It forwards
|
|
35
38
|
* the received events on the given "websocketServer" parameter. It must be an
|
|
@@ -41,7 +44,7 @@ type HMROptions<TClient> = {
|
|
|
41
44
|
* - onClientDisconnect
|
|
42
45
|
*/
|
|
43
46
|
|
|
44
|
-
export default function createWebsocketServer<TClient
|
|
47
|
+
export default function createWebsocketServer<TClient>({
|
|
45
48
|
websocketServer,
|
|
46
49
|
}: HMROptions<TClient>): ws.Server {
|
|
47
50
|
const wss = new ws.Server({
|
|
@@ -52,10 +55,9 @@ export default function createWebsocketServer<TClient: Object>({
|
|
|
52
55
|
let connected = true;
|
|
53
56
|
const url = req.url;
|
|
54
57
|
|
|
55
|
-
const sendFn = (
|
|
58
|
+
const sendFn = (data: string) => {
|
|
56
59
|
if (connected) {
|
|
57
|
-
|
|
58
|
-
ws.send(...args);
|
|
60
|
+
ws.send(data);
|
|
59
61
|
}
|
|
60
62
|
};
|
|
61
63
|
|
|
@@ -66,12 +68,17 @@ export default function createWebsocketServer<TClient: Object>({
|
|
|
66
68
|
return;
|
|
67
69
|
}
|
|
68
70
|
|
|
71
|
+
const keepAliveInterval = setInterval(
|
|
72
|
+
() => ws.ping(),
|
|
73
|
+
KEEP_ALIVE_INTERVAL_MS,
|
|
74
|
+
).unref();
|
|
75
|
+
|
|
69
76
|
ws.on('error', e => {
|
|
70
|
-
// $FlowFixMe[incompatible-type]
|
|
71
77
|
websocketServer.onClientError && websocketServer.onClientError(client, e);
|
|
72
78
|
});
|
|
73
79
|
|
|
74
80
|
ws.on('close', () => {
|
|
81
|
+
clearInterval(keepAliveInterval);
|
|
75
82
|
websocketServer.onClientDisconnect &&
|
|
76
83
|
websocketServer.onClientDisconnect(client);
|
|
77
84
|
connected = false;
|
|
@@ -18,13 +18,13 @@ import CountingSet from './CountingSet';
|
|
|
18
18
|
import countLines from './countLines';
|
|
19
19
|
import nullthrows from 'nullthrows';
|
|
20
20
|
|
|
21
|
-
type Options<T: number | string> =
|
|
21
|
+
type Options<T: number | string> = Readonly<{
|
|
22
22
|
asyncRequireModulePath: string,
|
|
23
23
|
createModuleId: string => T,
|
|
24
24
|
getRunModuleStatement: (moduleId: T, globalPrefix: string) => string,
|
|
25
25
|
globalPrefix: string,
|
|
26
26
|
inlineSourceMap: ?boolean,
|
|
27
|
-
runBeforeMainModule:
|
|
27
|
+
runBeforeMainModule: ReadonlyArray<string>,
|
|
28
28
|
runModule: boolean,
|
|
29
29
|
shouldAddToIgnoreList: (Module<>) => boolean,
|
|
30
30
|
sourceMapUrl: ?string,
|
|
@@ -35,9 +35,9 @@ type Options<T: number | string> = $ReadOnly<{
|
|
|
35
35
|
|
|
36
36
|
export default function getAppendScripts<T: number | string>(
|
|
37
37
|
entryPoint: string,
|
|
38
|
-
modules:
|
|
38
|
+
modules: ReadonlyArray<Module<>>,
|
|
39
39
|
options: Options<T>,
|
|
40
|
-
):
|
|
40
|
+
): ReadonlyArray<Module<>> {
|
|
41
41
|
const output: Array<Module<>> = [];
|
|
42
42
|
|
|
43
43
|
if (options.runModule) {
|
|
@@ -9,6 +9,7 @@ function getPreludeCode({
|
|
|
9
9
|
isDev,
|
|
10
10
|
globalPrefix,
|
|
11
11
|
requireCycleIgnorePatterns,
|
|
12
|
+
unstable_forceFullRefreshPatterns,
|
|
12
13
|
}) {
|
|
13
14
|
const vars = [
|
|
14
15
|
"__BUNDLE_START_TIME__=globalThis.nativePerformanceNow?nativePerformanceNow():Date.now()",
|
|
@@ -21,6 +22,9 @@ function getPreludeCode({
|
|
|
21
22
|
vars.push(
|
|
22
23
|
`${globalPrefix}__requireCycleIgnorePatterns=[${requireCycleIgnorePatterns.map((regex) => regex.toString()).join(",")}]`,
|
|
23
24
|
);
|
|
25
|
+
vars.push(
|
|
26
|
+
`${globalPrefix}__unstable_forceFullRefreshPatterns=[${unstable_forceFullRefreshPatterns.map((regex) => regex.toString()).join(",")}]`,
|
|
27
|
+
);
|
|
24
28
|
}
|
|
25
29
|
return `var ${vars.join(",")};${processEnv(isDev ? "development" : "production")}`;
|
|
26
30
|
}
|
|
@@ -14,11 +14,13 @@ export default function getPreludeCode({
|
|
|
14
14
|
isDev,
|
|
15
15
|
globalPrefix,
|
|
16
16
|
requireCycleIgnorePatterns,
|
|
17
|
+
unstable_forceFullRefreshPatterns,
|
|
17
18
|
}: {
|
|
18
|
-
+extraVars?: {[string]:
|
|
19
|
+
+extraVars?: {[string]: unknown, ...},
|
|
19
20
|
+isDev: boolean,
|
|
20
21
|
+globalPrefix: string,
|
|
21
|
-
+requireCycleIgnorePatterns:
|
|
22
|
+
+requireCycleIgnorePatterns: ReadonlyArray<RegExp>,
|
|
23
|
+
+unstable_forceFullRefreshPatterns: ReadonlyArray<RegExp>,
|
|
22
24
|
}): string {
|
|
23
25
|
const vars = [
|
|
24
26
|
// Ensure these variable names match the ones referenced in metro-runtime
|
|
@@ -38,6 +40,11 @@ export default function getPreludeCode({
|
|
|
38
40
|
.map(regex => regex.toString())
|
|
39
41
|
.join(',')}]`,
|
|
40
42
|
);
|
|
43
|
+
vars.push(
|
|
44
|
+
`${globalPrefix}__unstable_forceFullRefreshPatterns=[${unstable_forceFullRefreshPatterns
|
|
45
|
+
.map(regex => regex.toString())
|
|
46
|
+
.join(',')}]`,
|
|
47
|
+
);
|
|
41
48
|
}
|
|
42
49
|
|
|
43
50
|
return `var ${vars.join(',')};${processEnv(
|
|
@@ -47,7 +54,7 @@ export default function getPreludeCode({
|
|
|
47
54
|
|
|
48
55
|
const excluded = new Set(['__BUNDLE_START_TIME__', '__DEV__', 'process']);
|
|
49
56
|
|
|
50
|
-
function formatExtraVars(extraVars: ?{[string]:
|
|
57
|
+
function formatExtraVars(extraVars: ?{[string]: unknown, ...}): Array<string> {
|
|
51
58
|
const assignments = [];
|
|
52
59
|
|
|
53
60
|
for (const key in extraVars) {
|