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.
Files changed (158) hide show
  1. package/package.json +28 -25
  2. package/src/Assets.js +42 -29
  3. package/src/Assets.js.flow +26 -15
  4. package/src/Bundler/util.js +25 -21
  5. package/src/Bundler/util.js.flow +2 -2
  6. package/src/Bundler.js.flow +1 -1
  7. package/src/DeltaBundler/DeltaCalculator.js +4 -4
  8. package/src/DeltaBundler/DeltaCalculator.js.flow +8 -8
  9. package/src/DeltaBundler/Graph.js +16 -16
  10. package/src/DeltaBundler/Graph.js.flow +30 -30
  11. package/src/DeltaBundler/Serializers/baseJSBundle.js.flow +1 -1
  12. package/src/DeltaBundler/Serializers/getAllFiles.js.flow +2 -2
  13. package/src/DeltaBundler/Serializers/getAssets.js.flow +2 -2
  14. package/src/DeltaBundler/Serializers/getExplodedSourceMap.js.flow +2 -2
  15. package/src/DeltaBundler/Serializers/getRamBundleInfo.js.flow +8 -8
  16. package/src/DeltaBundler/Serializers/helpers/js.js +25 -21
  17. package/src/DeltaBundler/Serializers/helpers/js.js.flow +6 -6
  18. package/src/DeltaBundler/Serializers/helpers/processModules.js.flow +3 -3
  19. package/src/DeltaBundler/Serializers/hmrJSBundle.js +25 -21
  20. package/src/DeltaBundler/Serializers/hmrJSBundle.js.flow +5 -5
  21. package/src/DeltaBundler/Serializers/sourceMapGenerator.js.flow +6 -6
  22. package/src/DeltaBundler/Serializers/sourceMapObject.js.flow +2 -2
  23. package/src/DeltaBundler/Serializers/sourceMapString.js.flow +2 -2
  24. package/src/DeltaBundler/Transformer.js.flow +3 -3
  25. package/src/DeltaBundler/Worker.flow.js.flow +1 -1
  26. package/src/DeltaBundler/WorkerFarm.js +1 -1
  27. package/src/DeltaBundler/WorkerFarm.js.flow +26 -13
  28. package/src/DeltaBundler/buildSubgraph.js +4 -4
  29. package/src/DeltaBundler/buildSubgraph.js.flow +8 -8
  30. package/src/DeltaBundler/types.js.flow +36 -34
  31. package/src/DeltaBundler.js.flow +2 -2
  32. package/src/HmrServer.js +34 -29
  33. package/src/HmrServer.js.flow +17 -12
  34. package/src/IncrementalBundler.js +29 -21
  35. package/src/IncrementalBundler.js.flow +13 -9
  36. package/src/ModuleGraph/worker/JsFileWrapping.js +25 -21
  37. package/src/ModuleGraph/worker/JsFileWrapping.js.flow +10 -5
  38. package/src/ModuleGraph/worker/collectDependencies.js +25 -21
  39. package/src/ModuleGraph/worker/collectDependencies.js.flow +27 -21
  40. package/src/ModuleGraph/worker/generateImportNames.js.flow +4 -2
  41. package/src/ModuleGraph/worker/importLocationsPlugin.js.flow +7 -3
  42. package/src/Server/MultipartResponse.js.flow +1 -1
  43. package/src/Server/symbolicate.js.flow +4 -4
  44. package/src/Server.js +139 -39
  45. package/src/Server.js.flow +158 -47
  46. package/src/cli/parseKeyValueParamArray.js.flow +1 -1
  47. package/src/cli-utils.js.flow +2 -2
  48. package/src/commands/build.js.flow +11 -10
  49. package/src/commands/dependencies.js.flow +8 -4
  50. package/src/commands/serve.js +2 -0
  51. package/src/commands/serve.js.flow +14 -9
  52. package/src/index.flow.js +30 -26
  53. package/src/index.flow.js.flow +25 -20
  54. package/src/integration_tests/basic_bundle/AssetRegistry.js.flow +1 -1
  55. package/src/integration_tests/basic_bundle/ErrorBundle.js.flow +1 -1
  56. package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-import.js.flow +1 -1
  57. package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-multi-line-import-with-escapes.js.flow +1 -1
  58. package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-multi-line-import.js.flow +1 -1
  59. package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-require-with-embedded-comment.js.flow +1 -1
  60. package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-require.js.flow +1 -1
  61. package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-specifier-with-escapes.js.flow +1 -1
  62. package/src/integration_tests/basic_bundle/build-errors/inline-requires-cannot-resolve-import.js.flow +1 -1
  63. package/src/integration_tests/basic_bundle/build-errors/inline-requires-cannot-resolve-require.js.flow +1 -1
  64. package/src/integration_tests/basic_bundle/import-export/index.js +25 -21
  65. package/src/integration_tests/basic_bundle/import-export/index.js.flow +3 -3
  66. package/src/integration_tests/basic_bundle/import-export/utils.js.flow +2 -2
  67. package/src/integration_tests/basic_bundle/loadBundleAsyncForTest.js.flow +1 -1
  68. package/src/integration_tests/basic_bundle/optional-dependencies/index.js.flow +1 -1
  69. package/src/integration_tests/basic_bundle/require-context/conflict.js.flow +1 -1
  70. package/src/integration_tests/basic_bundle/require-context/empty.js.flow +1 -1
  71. package/src/integration_tests/basic_bundle/require-context/matching.js.flow +1 -1
  72. package/src/integration_tests/basic_bundle/require-context/mode-eager.js.flow +1 -1
  73. package/src/integration_tests/basic_bundle/require-context/mode-lazy-once.js.flow +1 -1
  74. package/src/integration_tests/basic_bundle/require-context/mode-lazy.js.flow +1 -1
  75. package/src/integration_tests/basic_bundle/require-context/mode-sync.js.flow +2 -2
  76. package/src/integration_tests/basic_bundle/require-context/utils.js.flow +1 -1
  77. package/src/integration_tests/basic_bundle/require-resolveWeak/import-and-resolveWeak.js.flow +1 -1
  78. package/src/integration_tests/basic_bundle/require-resolveWeak/multiple.js.flow +1 -1
  79. package/src/integration_tests/basic_bundle/require-resolveWeak/never-required.js.flow +1 -1
  80. package/src/integration_tests/basic_bundle/require-resolveWeak/require-and-resolveWeak.js.flow +1 -1
  81. package/src/integration_tests/execBundle.js.flow +1 -1
  82. package/src/lib/BatchProcessor.js +5 -2
  83. package/src/lib/BatchProcessor.js.flow +10 -7
  84. package/src/lib/CountingSet.js.flow +4 -4
  85. package/src/lib/JsonReporter.js +5 -3
  86. package/src/lib/JsonReporter.js.flow +19 -17
  87. package/src/lib/RamBundleParser.js.flow +1 -1
  88. package/src/lib/TerminalReporter.js +31 -27
  89. package/src/lib/TerminalReporter.js.flow +15 -15
  90. package/src/lib/contextModule.js.flow +1 -1
  91. package/src/lib/contextModuleTemplates.js +25 -21
  92. package/src/lib/countLines.js +4 -3
  93. package/src/lib/countLines.js.flow +3 -4
  94. package/src/lib/createWebsocketServer.js +9 -2
  95. package/src/lib/createWebsocketServer.js.flow +16 -9
  96. package/src/lib/debounceAsyncQueue.js.flow +1 -1
  97. package/src/lib/formatBundlingError.js.flow +1 -1
  98. package/src/lib/getAppendScripts.js.flow +4 -4
  99. package/src/lib/getGraphId.js.flow +1 -1
  100. package/src/lib/getPreludeCode.js +4 -0
  101. package/src/lib/getPreludeCode.js.flow +10 -3
  102. package/src/lib/getPrependedScripts.js +36 -22
  103. package/src/lib/getPrependedScripts.js.flow +10 -3
  104. package/src/lib/logToConsole.js.flow +2 -2
  105. package/src/lib/parseBundleOptionsFromBundleRequestUrl.js +25 -21
  106. package/src/lib/parseCustomResolverOptions.js.flow +2 -2
  107. package/src/lib/parseCustomTransformOptions.js.flow +1 -1
  108. package/src/lib/parseJsonBody.js.flow +11 -1
  109. package/src/lib/pathUtils.js +25 -21
  110. package/src/lib/pathUtils.js.flow +1 -1
  111. package/src/lib/reporting.js.flow +4 -4
  112. package/src/lib/transformHelpers.js +11 -9
  113. package/src/lib/transformHelpers.js.flow +17 -15
  114. package/src/node-haste/DependencyGraph/ModuleResolution.js +48 -42
  115. package/src/node-haste/DependencyGraph/ModuleResolution.js.flow +35 -32
  116. package/src/node-haste/DependencyGraph/createFileMap.js +56 -38
  117. package/src/node-haste/DependencyGraph/createFileMap.js.flow +44 -18
  118. package/src/node-haste/DependencyGraph.js +40 -31
  119. package/src/node-haste/DependencyGraph.js.flow +35 -37
  120. package/src/node-haste/lib/AssetPaths.js +2 -2
  121. package/src/node-haste/lib/AssetPaths.js.flow +4 -4
  122. package/src/node-haste/lib/parsePlatformFilePath.js +6 -6
  123. package/src/node-haste/lib/parsePlatformFilePath.js.flow +4 -4
  124. package/src/shared/output/RamBundle/as-assets.js.flow +6 -6
  125. package/src/shared/output/RamBundle/as-indexed-file.js.flow +5 -5
  126. package/src/shared/output/RamBundle/buildSourcemapWithMetadata.js.flow +5 -5
  127. package/src/shared/output/RamBundle/util.js.flow +5 -5
  128. package/src/shared/output/RamBundle/write-sourcemap.js.flow +1 -1
  129. package/src/shared/output/RamBundle.js.flow +1 -1
  130. package/src/shared/output/bundle.flow.js.flow +3 -3
  131. package/src/shared/output/meta.js +2 -2
  132. package/src/shared/output/meta.js.flow +1 -1
  133. package/src/shared/output/writeFile.js +8 -3
  134. package/src/shared/output/writeFile.js.flow +8 -2
  135. package/src/shared/types.js.flow +20 -5
  136. package/src/Asset.d.ts +0 -25
  137. package/src/Bundler.d.ts +0 -39
  138. package/src/DeltaBundler/Graph.d.ts +0 -40
  139. package/src/DeltaBundler/Serializers/getExplodedSourceMap.d.ts +0 -26
  140. package/src/DeltaBundler/Serializers/getRamBundleInfo.d.ts +0 -18
  141. package/src/DeltaBundler/Worker.d.ts +0 -45
  142. package/src/DeltaBundler/types.d.ts +0 -166
  143. package/src/DeltaBundler.d.ts +0 -58
  144. package/src/IncrementalBundler.d.ts +0 -98
  145. package/src/ModuleGraph/test-helpers.js +0 -75
  146. package/src/ModuleGraph/worker/collectDependencies.d.ts +0 -27
  147. package/src/Server/MultipartResponse.d.ts +0 -31
  148. package/src/Server/symbolicate.d.ts +0 -31
  149. package/src/Server.d.ts +0 -118
  150. package/src/index.d.ts +0 -193
  151. package/src/lib/CountingSet.d.ts +0 -48
  152. package/src/lib/TerminalReporter.d.ts +0 -27
  153. package/src/lib/contextModule.d.ts +0 -22
  154. package/src/lib/getGraphId.d.ts +0 -11
  155. package/src/lib/reporting.d.ts +0 -144
  156. package/src/node-haste/DependencyGraph.d.ts +0 -62
  157. package/src/shared/output/bundle.d.ts +0 -35
  158. package/src/shared/types.d.ts +0 -130
@@ -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
- event = Object.assign(event, {
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(event) + "\n");
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?: $ReadOnlyArray<SerializedError>,
17
+ errors?: ReadonlyArray<SerializedError>,
18
18
  cause?: SerializedError,
19
19
  ...
20
20
  };
21
21
 
22
- export type SerializedEvent<TEvent: {[string]: any, ...}> = TEvent extends {
23
- error: Error,
24
- ...
25
- }
26
- ? {
27
- ...Omit<TEvent, 'error'>,
28
- error: SerializedError,
29
- ...
30
- }
31
- : TEvent;
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]: any, ...}> {
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
- // $FlowFixMe[unsafe-object-assign]
48
- event = Object.assign(event, {
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(event) + '\n');
59
+ this._stream.write(JSON.stringify(eventToWrite) + '\n');
58
60
  }
59
61
  }
60
62
 
@@ -4,8 +4,8 @@
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
- * @format
8
7
  * @flow strict
8
+ * @format
9
9
  */
10
10
 
11
11
  import MAGIC_NUMBER from '../shared/output/RamBundle/magic-number';
@@ -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 _getRequireWildcardCache(e) {
14
- if ("function" != typeof WeakMap) return null;
15
- var r = new WeakMap(),
16
- t = new WeakMap();
17
- return (_getRequireWildcardCache = function (e) {
18
- return e ? t : r;
19
- })(e);
20
- }
21
- function _interopRequireWildcard(e, r) {
22
- if (!r && e && e.__esModule) return e;
23
- if (null === e || ("object" != typeof e && "function" != typeof e))
24
- return { default: e };
25
- var t = _getRequireWildcardCache(r);
26
- if (t && t.has(e)) return t.get(e);
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
- return ((n.default = e), t && t.set(e, n), n);
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(` ${bundleType.toUpperCase()} `) +
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
- if (error.filename && !message.includes(error.filename)) {
265
- message += ` [${error.filename}]`;
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<mixed>,
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
- type SnippetError = ErrnoError &
60
- interface {
61
- filename?: string,
62
- snippet?: string,
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(` ${bundleType.toUpperCase()} `) +
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
- if (error.filename && !message.includes(error.filename)) {
335
- // $FlowFixMe[incompatible-type]
336
- message += ` [${error.filename}]`;
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 = $ReadOnly<{
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 _getRequireWildcardCache(e) {
10
- if ("function" != typeof WeakMap) return null;
11
- var r = new WeakMap(),
12
- t = new WeakMap();
13
- return (_getRequireWildcardCache = function (e) {
14
- return e ? t : r;
15
- })(e);
16
- }
17
- function _interopRequireWildcard(e, r) {
18
- if (!r && e && e.__esModule) return e;
19
- if (null === e || ("object" != typeof e && "function" != typeof e))
20
- return { default: e };
21
- var t = _getRequireWildcardCache(r);
22
- if (t && t.has(e)) return t.get(e);
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
- return ((n.default = e), t && t.set(e, n), n);
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";
@@ -3,7 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true,
5
5
  });
6
- exports.default = void 0;
6
+ exports.default = countLines;
7
7
  const newline = /\r\n?|\n|\u2028|\u2029/g;
8
- const countLines = (string) => (string.match(newline) || []).length + 1;
9
- var _default = (exports.default = countLines);
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
- const countLines = (string: string): number =>
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 = (...args) => {
20
+ const sendFn = (data) => {
19
21
  if (connected) {
20
- ws.send(...args);
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) => mixed,
20
- +onClientError?: (client: T, e: ErrorEvent) => mixed,
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
- ) => mixed,
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: Object>({
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 = (...args: Array<string>) => {
58
+ const sendFn = (data: string) => {
56
59
  if (connected) {
57
- // $FlowFixMe[incompatible-type]
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;
@@ -33,7 +33,7 @@ export default function debounceAsyncQueue<T>(
33
33
  }
34
34
 
35
35
  return () =>
36
- new Promise((resolve: T => void, reject: mixed => void) => {
36
+ new Promise((resolve: T => void, reject: unknown => void) => {
37
37
  callbacks.push(resolve);
38
38
 
39
39
  if (!executing) {
@@ -4,8 +4,8 @@
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
- * @format
8
7
  * @flow
8
+ * @format
9
9
  */
10
10
 
11
11
  import type {FormattedError} from 'metro-runtime/src/modules/types';
@@ -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> = $ReadOnly<{
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: $ReadOnlyArray<string>,
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: $ReadOnlyArray<Module<>>,
38
+ modules: ReadonlyArray<Module<>>,
39
39
  options: Options<T>,
40
- ): $ReadOnlyArray<Module<>> {
40
+ ): ReadonlyArray<Module<>> {
41
41
  const output: Array<Module<>> = [];
42
42
 
43
43
  if (options.runModule) {
@@ -24,7 +24,7 @@ export default function getGraphId(
24
24
  lazy,
25
25
  unstable_allowRequireContext,
26
26
  resolverOptions,
27
- }: $ReadOnly<{
27
+ }: Readonly<{
28
28
  shallow: boolean,
29
29
  lazy: boolean,
30
30
  unstable_allowRequireContext: boolean,
@@ -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]: mixed, ...},
19
+ +extraVars?: {[string]: unknown, ...},
19
20
  +isDev: boolean,
20
21
  +globalPrefix: string,
21
- +requireCycleIgnorePatterns: $ReadOnlyArray<RegExp>,
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]: mixed, ...}): Array<string> {
57
+ function formatExtraVars(extraVars: ?{[string]: unknown, ...}): Array<string> {
51
58
  const assignments = [];
52
59
 
53
60
  for (const key in extraVars) {