metro 0.65.2 → 0.67.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/package.json +27 -27
  2. package/src/Assets.js +9 -9
  3. package/src/Assets.js.flow +5 -7
  4. package/src/Bundler/util.js +17 -15
  5. package/src/Bundler/util.js.flow +12 -10
  6. package/src/Bundler.js +22 -9
  7. package/src/Bundler.js.flow +20 -7
  8. package/src/DeltaBundler/DeltaCalculator.js +17 -15
  9. package/src/DeltaBundler/DeltaCalculator.js.flow +9 -7
  10. package/src/DeltaBundler/Serializers/baseBytecodeBundle.js +13 -13
  11. package/src/DeltaBundler/Serializers/baseBytecodeBundle.js.flow +6 -7
  12. package/src/DeltaBundler/Serializers/baseJSBundle.js +4 -4
  13. package/src/DeltaBundler/Serializers/baseJSBundle.js.flow +4 -4
  14. package/src/DeltaBundler/Serializers/getAllFiles.js +1 -1
  15. package/src/DeltaBundler/Serializers/getAllFiles.js.flow +3 -3
  16. package/src/DeltaBundler/Serializers/getAssets.js +3 -3
  17. package/src/DeltaBundler/Serializers/getAssets.js.flow +4 -5
  18. package/src/DeltaBundler/Serializers/getExplodedSourceMap.js +4 -4
  19. package/src/DeltaBundler/Serializers/getExplodedSourceMap.js.flow +4 -4
  20. package/src/DeltaBundler/Serializers/getRamBundleInfo.js +20 -20
  21. package/src/DeltaBundler/Serializers/getRamBundleInfo.js.flow +9 -10
  22. package/src/DeltaBundler/Serializers/helpers/bytecode.js +11 -11
  23. package/src/DeltaBundler/Serializers/helpers/bytecode.js.flow +5 -6
  24. package/src/DeltaBundler/Serializers/helpers/getInlineSourceMappingURL.js +1 -1
  25. package/src/DeltaBundler/Serializers/helpers/getInlineSourceMappingURL.js.flow +1 -1
  26. package/src/DeltaBundler/Serializers/helpers/getSourceMapInfo.js +2 -2
  27. package/src/DeltaBundler/Serializers/helpers/getSourceMapInfo.js.flow +4 -4
  28. package/src/DeltaBundler/Serializers/helpers/getTransitiveDependencies.js +1 -1
  29. package/src/DeltaBundler/Serializers/helpers/getTransitiveDependencies.js.flow +1 -1
  30. package/src/DeltaBundler/Serializers/helpers/js.js +18 -8
  31. package/src/DeltaBundler/Serializers/helpers/js.js.flow +19 -10
  32. package/src/DeltaBundler/Serializers/helpers/processBytecodeModules.js +4 -4
  33. package/src/DeltaBundler/Serializers/helpers/processBytecodeModules.js.flow +3 -3
  34. package/src/DeltaBundler/Serializers/helpers/processModules.js +4 -4
  35. package/src/DeltaBundler/Serializers/helpers/processModules.js.flow +3 -3
  36. package/src/DeltaBundler/Serializers/hmrJSBundle.js +9 -9
  37. package/src/DeltaBundler/Serializers/hmrJSBundle.js.flow +9 -8
  38. package/src/DeltaBundler/Serializers/sourceMapGenerator.js +6 -6
  39. package/src/DeltaBundler/Serializers/sourceMapGenerator.js.flow +3 -4
  40. package/src/DeltaBundler/Serializers/sourceMapObject.js +5 -5
  41. package/src/DeltaBundler/Serializers/sourceMapObject.js.flow +4 -4
  42. package/src/DeltaBundler/Serializers/sourceMapString.js +2 -2
  43. package/src/DeltaBundler/Serializers/sourceMapString.js.flow +3 -3
  44. package/src/DeltaBundler/Transformer.js +16 -14
  45. package/src/DeltaBundler/Transformer.js.flow +15 -15
  46. package/src/DeltaBundler/Worker.js +8 -11
  47. package/src/DeltaBundler/Worker.js.flow +8 -11
  48. package/src/DeltaBundler/WorkerFarm.js +15 -18
  49. package/src/DeltaBundler/WorkerFarm.js.flow +9 -11
  50. package/src/DeltaBundler/__fixtures__/hasteImpl.js +2 -2
  51. package/src/DeltaBundler/computeDelta.js +2 -2
  52. package/src/DeltaBundler/computeDelta.js.flow +2 -2
  53. package/src/DeltaBundler/getTransformCacheKey.js +4 -4
  54. package/src/DeltaBundler/getTransformCacheKey.js.flow +5 -6
  55. package/src/DeltaBundler/mergeDeltas.js +2 -2
  56. package/src/DeltaBundler/mergeDeltas.js.flow +1 -1
  57. package/src/DeltaBundler/traverseDependencies.js +22 -22
  58. package/src/DeltaBundler/traverseDependencies.js.flow +3 -3
  59. package/src/DeltaBundler/types.flow.js +1 -1
  60. package/src/DeltaBundler/types.flow.js.flow +15 -1
  61. package/src/DeltaBundler.js +5 -5
  62. package/src/DeltaBundler.js.flow +4 -4
  63. package/src/HmrServer.js +73 -55
  64. package/src/HmrServer.js.flow +42 -37
  65. package/src/IncrementalBundler/GraphNotFoundError.js +1 -1
  66. package/src/IncrementalBundler/GraphNotFoundError.js.flow +1 -1
  67. package/src/IncrementalBundler/ResourceNotFoundError.js +1 -1
  68. package/src/IncrementalBundler/ResourceNotFoundError.js.flow +1 -1
  69. package/src/IncrementalBundler/RevisionNotFoundError.js +1 -1
  70. package/src/IncrementalBundler/RevisionNotFoundError.js.flow +1 -1
  71. package/src/IncrementalBundler.js +46 -32
  72. package/src/IncrementalBundler.js.flow +32 -24
  73. package/src/ModuleGraph/module.js +3 -3
  74. package/src/ModuleGraph/module.js.flow +1 -1
  75. package/src/ModuleGraph/node-haste/HasteFS.js +5 -3
  76. package/src/ModuleGraph/node-haste/HasteFS.js.flow +3 -1
  77. package/src/ModuleGraph/node-haste/Module.js +1 -1
  78. package/src/ModuleGraph/node-haste/Module.js.flow +1 -1
  79. package/src/ModuleGraph/node-haste/ModuleCache.js +1 -1
  80. package/src/ModuleGraph/node-haste/ModuleCache.js.flow +3 -3
  81. package/src/ModuleGraph/node-haste/Package.js +3 -3
  82. package/src/ModuleGraph/node-haste/Package.js.flow +3 -3
  83. package/src/ModuleGraph/node-haste/node-haste.flow.js +1 -1
  84. package/src/ModuleGraph/node-haste/node-haste.flow.js.flow +1 -1
  85. package/src/ModuleGraph/node-haste/node-haste.js +41 -31
  86. package/src/ModuleGraph/node-haste/node-haste.js.flow +28 -22
  87. package/src/ModuleGraph/output/indexed-ram-bundle.js +17 -17
  88. package/src/ModuleGraph/output/indexed-ram-bundle.js.flow +41 -9
  89. package/src/ModuleGraph/output/multiple-files-ram-bundle.js +18 -18
  90. package/src/ModuleGraph/output/multiple-files-ram-bundle.js.flow +21 -9
  91. package/src/ModuleGraph/output/plain-bundle.js +6 -6
  92. package/src/ModuleGraph/output/plain-bundle.js.flow +7 -7
  93. package/src/ModuleGraph/output/reverse-dependency-map-references.js +3 -3
  94. package/src/ModuleGraph/output/reverse-dependency-map-references.js.flow +4 -8
  95. package/src/ModuleGraph/output/util.js +61 -40
  96. package/src/ModuleGraph/output/util.js.flow +51 -28
  97. package/src/ModuleGraph/silent-console.js +2 -2
  98. package/src/ModuleGraph/silent-console.js.flow +1 -1
  99. package/src/ModuleGraph/test-helpers.js +7 -7
  100. package/src/ModuleGraph/types.flow.js +1 -1
  101. package/src/ModuleGraph/types.flow.js.flow +47 -31
  102. package/src/ModuleGraph/worker/JsFileWrapping.js +16 -16
  103. package/src/ModuleGraph/worker/JsFileWrapping.js.flow +3 -2
  104. package/src/ModuleGraph/worker/Platforms.js +2 -2
  105. package/src/ModuleGraph/worker/Platforms.js.flow +1 -1
  106. package/src/ModuleGraph/worker/collectDependencies.js +24 -25
  107. package/src/ModuleGraph/worker/collectDependencies.js.flow +16 -18
  108. package/src/ModuleGraph/worker/generate.js +2 -2
  109. package/src/ModuleGraph/worker/generate.js.flow +3 -3
  110. package/src/ModuleGraph/worker/generateImportNames.js +5 -5
  111. package/src/ModuleGraph/worker/generateImportNames.js.flow +3 -5
  112. package/src/ModuleGraph/worker/mergeSourceMaps.js +8 -7
  113. package/src/ModuleGraph/worker/mergeSourceMaps.js.flow +3 -3
  114. package/src/Server/MultipartResponse.js +4 -8
  115. package/src/Server/symbolicate.js +8 -8
  116. package/src/Server/symbolicate.js.flow +17 -5
  117. package/src/Server.js +204 -150
  118. package/src/Server.js.flow +131 -87
  119. package/src/cli-utils.js +4 -4
  120. package/src/cli-utils.js.flow +15 -13
  121. package/src/cli.js +4 -4
  122. package/src/cli.js.flow +2 -4
  123. package/src/commands/build.js +23 -24
  124. package/src/commands/build.js.flow +6 -9
  125. package/src/commands/dependencies.js +25 -19
  126. package/src/commands/serve.js +19 -19
  127. package/src/commands/serve.js.flow +7 -9
  128. package/src/index.js +117 -50
  129. package/src/index.js.flow +108 -40
  130. package/src/integration_tests/basic_bundle/AssetRegistry.js +2 -2
  131. package/src/integration_tests/basic_bundle/AssetRegistry.js.flow +1 -1
  132. package/src/integration_tests/basic_bundle/Bar.js +2 -2
  133. package/src/integration_tests/basic_bundle/Bar.js.flow +1 -1
  134. package/src/integration_tests/basic_bundle/ErrorBundle.js +2 -2
  135. package/src/integration_tests/basic_bundle/ErrorBundle.js.flow +1 -1
  136. package/src/integration_tests/basic_bundle/Foo.js +2 -2
  137. package/src/integration_tests/basic_bundle/Foo.js.flow +1 -1
  138. package/src/integration_tests/basic_bundle/TestBundle.js +2 -2
  139. package/src/integration_tests/basic_bundle/TestBundle.js.flow +1 -1
  140. package/src/integration_tests/basic_bundle/TestPolyfill.js +1 -1
  141. package/src/integration_tests/basic_bundle/TestPolyfill.js.flow +1 -1
  142. package/src/integration_tests/basic_bundle/TypeScript.ts +1 -1
  143. package/src/integration_tests/basic_bundle/import-export/export-1.js +2 -2
  144. package/src/integration_tests/basic_bundle/import-export/export-1.js.flow +1 -1
  145. package/src/integration_tests/basic_bundle/import-export/export-2.js +2 -2
  146. package/src/integration_tests/basic_bundle/import-export/export-2.js.flow +1 -1
  147. package/src/integration_tests/basic_bundle/import-export/export-3.js +2 -2
  148. package/src/integration_tests/basic_bundle/import-export/export-3.js.flow +1 -1
  149. package/src/integration_tests/basic_bundle/import-export/export-4.js +2 -2
  150. package/src/integration_tests/basic_bundle/import-export/export-4.js.flow +1 -1
  151. package/src/integration_tests/basic_bundle/import-export/export-5.js +2 -2
  152. package/src/integration_tests/basic_bundle/import-export/export-5.js.flow +1 -1
  153. package/src/integration_tests/basic_bundle/import-export/export-6.js +2 -2
  154. package/src/integration_tests/basic_bundle/import-export/export-6.js.flow +1 -1
  155. package/src/integration_tests/basic_bundle/import-export/export-null.js +2 -2
  156. package/src/integration_tests/basic_bundle/import-export/export-null.js.flow +1 -1
  157. package/src/integration_tests/basic_bundle/import-export/export-primitive-default.js +2 -2
  158. package/src/integration_tests/basic_bundle/import-export/export-primitive-default.js.flow +1 -1
  159. package/src/integration_tests/basic_bundle/import-export/index.js +17 -17
  160. package/src/integration_tests/basic_bundle/import-export/index.js.flow +1 -1
  161. package/src/integration_tests/basic_bundle/polyfill.js +1 -1
  162. package/src/integration_tests/execBundle.js +2 -2
  163. package/src/integration_tests/execBundle.js.flow +1 -1
  164. package/src/integration_tests/metro.config.js +8 -8
  165. package/src/lib/BatchProcessor.js +10 -6
  166. package/src/lib/BatchProcessor.js.flow +6 -1
  167. package/src/lib/JsonReporter.js +3 -2
  168. package/src/lib/JsonReporter.js.flow +2 -1
  169. package/src/lib/RamBundleParser.js +1 -1
  170. package/src/lib/RamBundleParser.js.flow +1 -1
  171. package/src/lib/TerminalReporter.js +15 -15
  172. package/src/lib/TerminalReporter.js.flow +15 -16
  173. package/src/lib/bundleToBytecode.js +6 -7
  174. package/src/lib/bundleToBytecode.js.flow +8 -7
  175. package/src/lib/bundleToString.js +3 -3
  176. package/src/lib/bundleToString.js.flow +5 -4
  177. package/src/lib/countLines.js +3 -7
  178. package/src/lib/countLines.js.flow +4 -7
  179. package/src/lib/createModuleIdFactory.js +2 -2
  180. package/src/lib/createModuleIdFactory.js.flow +1 -1
  181. package/src/lib/{attachWebsocketServer.js → createWebsocketServer.js} +18 -17
  182. package/src/lib/{attachWebsocketServer.js.flow → createWebsocketServer.js.flow} +13 -23
  183. package/src/lib/debounceAsyncQueue.js +2 -2
  184. package/src/lib/debounceAsyncQueue.js.flow +1 -1
  185. package/src/lib/formatBundlingError.js +21 -21
  186. package/src/lib/formatBundlingError.js.flow +18 -20
  187. package/src/lib/getAppendScripts.js +26 -27
  188. package/src/lib/getAppendScripts.js.flow +7 -8
  189. package/src/lib/getGraphId.js +3 -3
  190. package/src/lib/getGraphId.js.flow +3 -3
  191. package/src/lib/getMaxWorkers.js +2 -2
  192. package/src/lib/getMaxWorkers.js.flow +1 -1
  193. package/src/lib/getPreludeCode.js +2 -2
  194. package/src/lib/getPreludeCode.js.flow +1 -1
  195. package/src/lib/getPrependedScripts.js +16 -15
  196. package/src/lib/getPrependedScripts.js.flow +8 -8
  197. package/src/lib/logToConsole.js +12 -5
  198. package/src/lib/logToConsole.js.flow +19 -6
  199. package/src/lib/parseCustomTransformOptions.js +2 -2
  200. package/src/lib/parseCustomTransformOptions.js.flow +3 -3
  201. package/src/lib/parseOptionsFromUrl.js +7 -7
  202. package/src/lib/parseOptionsFromUrl.js.flow +29 -9
  203. package/src/lib/relativizeSourceMap.js +1 -1
  204. package/src/lib/relativizeSourceMap.js.flow +3 -3
  205. package/src/lib/reporting.js +5 -5
  206. package/src/lib/reporting.js.flow +18 -4
  207. package/src/lib/splitBundleOptions.js +5 -5
  208. package/src/lib/splitBundleOptions.js.flow +1 -1
  209. package/src/lib/transformHelpers.js +11 -10
  210. package/src/lib/transformHelpers.js.flow +6 -13
  211. package/src/node-haste/DependencyGraph/ModuleResolution.js +51 -30
  212. package/src/node-haste/DependencyGraph/ModuleResolution.js.flow +49 -48
  213. package/src/node-haste/DependencyGraph/createHasteMap.js +99 -0
  214. package/src/node-haste/DependencyGraph/createHasteMap.js.flow +88 -0
  215. package/src/node-haste/DependencyGraph/{assets/empty-module.js → types.js} +2 -2
  216. package/src/node-haste/DependencyGraph/types.js.flow +88 -0
  217. package/src/node-haste/DependencyGraph.js +51 -118
  218. package/src/node-haste/DependencyGraph.js.flow +38 -111
  219. package/src/node-haste/Module.js +1 -1
  220. package/src/node-haste/Module.js.flow +3 -3
  221. package/src/node-haste/ModuleCache.js +54 -13
  222. package/src/node-haste/ModuleCache.js.flow +53 -12
  223. package/src/node-haste/Package.js +2 -2
  224. package/src/node-haste/Package.js.flow +1 -1
  225. package/src/node-haste/lib/AssetPaths.js +5 -5
  226. package/src/node-haste/lib/AssetPaths.js.flow +7 -6
  227. package/src/node-haste/lib/parsePlatformFilePath.js +4 -4
  228. package/src/node-haste/lib/parsePlatformFilePath.js.flow +2 -2
  229. package/src/shared/output/RamBundle/as-assets.js +14 -15
  230. package/src/shared/output/RamBundle/as-assets.js.flow +9 -11
  231. package/src/shared/output/RamBundle/as-indexed-file.js +14 -15
  232. package/src/shared/output/RamBundle/as-indexed-file.js.flow +8 -12
  233. package/src/shared/output/RamBundle/buildSourcemapWithMetadata.js +7 -7
  234. package/src/shared/output/RamBundle/buildSourcemapWithMetadata.js.flow +4 -4
  235. package/src/shared/output/RamBundle/magic-number.js +1 -1
  236. package/src/shared/output/RamBundle/magic-number.js.flow +1 -1
  237. package/src/shared/output/RamBundle/util.js +21 -19
  238. package/src/shared/output/RamBundle/util.js.flow +5 -8
  239. package/src/shared/output/RamBundle/write-sourcemap.js +1 -1
  240. package/src/shared/output/RamBundle/write-sourcemap.js.flow +1 -1
  241. package/src/shared/output/RamBundle.js +2 -2
  242. package/src/shared/output/RamBundle.js.flow +4 -5
  243. package/src/shared/output/bundle.js +6 -6
  244. package/src/shared/output/bundle.js.flow +4 -5
  245. package/src/shared/output/meta.js +4 -5
  246. package/src/shared/output/meta.js.flow +2 -4
  247. package/src/shared/output/unbundle.js +1 -1
  248. package/src/shared/output/unbundle.js.flow +1 -1
  249. package/src/shared/output/writeFile.js +1 -1
  250. package/src/shared/output/writeFile.js.flow +1 -1
  251. package/src/shared/types.flow.js +1 -1
  252. package/src/shared/types.flow.js.flow +6 -4
  253. package/src/node-haste/DependencyGraph/assets/empty-module.js.flow +0 -9
  254. package/src/node-haste/types.js +0 -10
  255. package/src/node-haste/types.js.flow +0 -23
package/src/index.js.flow CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -10,26 +10,9 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- const IncrementalBundler = require('./IncrementalBundler');
14
- const MetroHmrServer = require('./HmrServer');
15
- const MetroServer = require('./Server');
16
-
17
- const attachWebsocketServer = require('./lib/attachWebsocketServer');
18
- const chalk = require('chalk');
19
- const fs = require('fs');
20
- const http = require('http');
21
- const https = require('https');
22
- const makeBuildCommand = require('./commands/build');
23
- const makeDependenciesCommand = require('./commands/dependencies');
24
- const makeServeCommand = require('./commands/serve');
25
- const outputBundle = require('./shared/output/bundle');
26
-
27
- const {loadConfig, mergeConfig, getDefaultConfig} = require('metro-config');
28
- const {InspectorProxy} = require('metro-inspector-proxy');
29
-
30
13
  import type {Graph} from './DeltaBundler';
31
14
  import type {ServerOptions} from './Server';
32
- import type {RequestOptions, OutputOptions} from './shared/types.flow.js';
15
+ import type {OutputOptions, RequestOptions} from './shared/types.flow.js';
33
16
  import type {Server as HttpServer} from 'http';
34
17
  import type {Server as HttpsServer} from 'https';
35
18
  import type {
@@ -40,6 +23,23 @@ import type {
40
23
  import type {CustomTransformOptions} from 'metro-transform-worker';
41
24
  import typeof Yargs from 'yargs';
42
25
 
26
+ const makeBuildCommand = require('./commands/build');
27
+ const makeDependenciesCommand = require('./commands/dependencies');
28
+ const makeServeCommand = require('./commands/serve');
29
+ const MetroHmrServer = require('./HmrServer');
30
+ const IncrementalBundler = require('./IncrementalBundler');
31
+ const createWebsocketServer = require('./lib/createWebsocketServer');
32
+ const MetroServer = require('./Server');
33
+ const outputBundle = require('./shared/output/bundle');
34
+ const chalk = require('chalk');
35
+ const fs = require('fs');
36
+ const http = require('http');
37
+ const https = require('https');
38
+ const {getDefaultConfig, loadConfig, mergeConfig} = require('metro-config');
39
+ const {InspectorProxy} = require('metro-inspector-proxy');
40
+ const {parse} = require('url');
41
+ const ws = require('ws');
42
+
43
43
  type MetroMiddleWare = {|
44
44
  attachHmrServer: (httpServer: HttpServer | HttpsServer) => void,
45
45
  end: () => void,
@@ -47,6 +47,11 @@ type MetroMiddleWare = {|
47
47
  middleware: Middleware,
48
48
  |};
49
49
 
50
+ export type RunMetroOptions = {
51
+ ...ServerOptions,
52
+ waitForBundler?: boolean,
53
+ };
54
+
50
55
  export type RunServerOptions = {|
51
56
  hasReducedPerformance?: boolean,
52
57
  host?: string,
@@ -57,6 +62,10 @@ export type RunServerOptions = {|
57
62
  secure?: boolean, // deprecated
58
63
  secureCert?: string, // deprecated
59
64
  secureKey?: string, // deprecated
65
+ waitForBundler?: boolean,
66
+ websocketEndpoints?: {
67
+ [path: string]: typeof ws.Server,
68
+ },
60
69
  |};
61
70
 
62
71
  type BuildGraphOptions = {|
@@ -112,27 +121,53 @@ async function getConfig(config: InputConfigT): Promise<ConfigT> {
112
121
 
113
122
  async function runMetro(
114
123
  config: InputConfigT,
115
- options?: ServerOptions,
124
+ options?: RunMetroOptions,
116
125
  ): Promise<MetroServer> {
117
126
  const mergedConfig = await getConfig(config);
127
+ const {
128
+ reporter,
129
+ server: {port},
130
+ } = mergedConfig;
118
131
 
119
- mergedConfig.reporter.update({
132
+ reporter.update({
120
133
  hasReducedPerformance: options
121
134
  ? Boolean(options.hasReducedPerformance)
122
135
  : false,
123
- port: mergedConfig.server.port,
136
+ port,
124
137
  type: 'initialize_started',
125
138
  });
126
139
 
127
- return new MetroServer(mergedConfig, options);
140
+ const {waitForBundler = false, ...serverOptions} = options ?? {};
141
+ const server = new MetroServer(mergedConfig, serverOptions);
142
+
143
+ const readyPromise = server
144
+ .ready()
145
+ .then(() => {
146
+ reporter.update({
147
+ type: 'initialize_done',
148
+ port,
149
+ });
150
+ })
151
+ .catch(error => {
152
+ reporter.update({
153
+ type: 'initialize_failed',
154
+ port,
155
+ error,
156
+ });
157
+ });
158
+ if (waitForBundler) {
159
+ await readyPromise;
160
+ }
161
+
162
+ return server;
128
163
  }
129
164
 
130
165
  exports.runMetro = runMetro;
131
166
  exports.loadConfig = loadConfig;
132
167
 
133
- exports.createConnectMiddleware = async function(
168
+ const createConnectMiddleware = async function (
134
169
  config: ConfigT,
135
- options?: ServerOptions,
170
+ options?: RunMetroOptions,
136
171
  ): Promise<MetroMiddleWare> {
137
172
  const metroServer = await runMetro(config, options);
138
173
 
@@ -148,15 +183,23 @@ exports.createConnectMiddleware = async function(
148
183
 
149
184
  return {
150
185
  attachHmrServer(httpServer: HttpServer | HttpsServer): void {
151
- attachWebsocketServer({
152
- httpServer,
153
- path: '/hot',
186
+ const wss = createWebsocketServer({
154
187
  websocketServer: new MetroHmrServer(
155
188
  metroServer.getBundler(),
156
189
  metroServer.getCreateModuleId(),
157
190
  config,
158
191
  ),
159
192
  });
193
+ httpServer.on('upgrade', (request, socket, head) => {
194
+ const {pathname} = parse(request.url);
195
+ if (pathname === '/hot') {
196
+ wss.handleUpgrade(request, socket, head, ws => {
197
+ wss.emit('connection', ws, request);
198
+ });
199
+ } else {
200
+ socket.destroy();
201
+ }
202
+ });
160
203
  },
161
204
  metroServer,
162
205
  middleware: enhancedMiddleware,
@@ -165,6 +208,7 @@ exports.createConnectMiddleware = async function(
165
208
  },
166
209
  };
167
210
  };
211
+ exports.createConnectMiddleware = createConnectMiddleware;
168
212
 
169
213
  exports.runServer = async (
170
214
  config: ConfigT,
@@ -177,6 +221,8 @@ exports.runServer = async (
177
221
  secure, //deprecated
178
222
  secureCert, // deprecated
179
223
  secureKey, // deprecated
224
+ waitForBundler = false,
225
+ websocketEndpoints = {},
180
226
  }: RunServerOptions,
181
227
  ): Promise<HttpServer | HttpsServer> => {
182
228
  if (secure != null || secureCert != null || secureKey != null) {
@@ -193,12 +239,9 @@ exports.runServer = async (
193
239
 
194
240
  const serverApp = connect();
195
241
 
196
- const {
197
- attachHmrServer,
198
- middleware,
199
- end,
200
- } = await exports.createConnectMiddleware(config, {
242
+ const {middleware, end, metroServer} = await createConnectMiddleware(config, {
201
243
  hasReducedPerformance,
244
+ waitForBundler,
202
245
  });
203
246
 
204
247
  serverApp.use(middleware);
@@ -243,13 +286,40 @@ exports.runServer = async (
243
286
  onReady(httpServer);
244
287
  }
245
288
 
246
- attachHmrServer(httpServer);
247
- if (inspectorProxy) {
248
- inspectorProxy.addWebSocketListener(httpServer);
289
+ Object.assign(websocketEndpoints, {
290
+ ...(inspectorProxy
291
+ ? {...inspectorProxy.createWebSocketListeners(httpServer)}
292
+ : {}),
293
+ '/hot': createWebsocketServer({
294
+ websocketServer: new MetroHmrServer(
295
+ metroServer.getBundler(),
296
+ metroServer.getCreateModuleId(),
297
+ config,
298
+ ),
299
+ }),
300
+ });
301
+
302
+ httpServer.on('upgrade', (request, socket, head) => {
303
+ const {pathname} = parse(request.url);
304
+ if (pathname != null && websocketEndpoints[pathname]) {
305
+ websocketEndpoints[pathname].handleUpgrade(
306
+ request,
307
+ socket,
308
+ head,
309
+ ws => {
310
+ websocketEndpoints[pathname].emit('connection', ws, request);
311
+ },
312
+ );
313
+ } else {
314
+ socket.destroy();
315
+ }
316
+ });
249
317
 
318
+ if (inspectorProxy) {
250
319
  // TODO(hypuk): Refactor inspectorProxy.processRequest into separate request handlers
251
320
  // so that we could provide routes (/json/list and /json/version) here.
252
321
  // Currently this causes Metro to give warning about T31407894.
322
+ // $FlowFixMe[method-unbinding] added when improving typing for this parameters
253
323
  serverApp.use(inspectorProxy.processRequest.bind(inspectorProxy));
254
324
  }
255
325
 
@@ -341,7 +411,7 @@ exports.runBuild = async (
341
411
  }
342
412
  };
343
413
 
344
- exports.buildGraph = async function(
414
+ exports.buildGraph = async function (
345
415
  config: InputConfigT,
346
416
  {
347
417
  customTransformOptions = Object.create(null),
@@ -371,8 +441,7 @@ exports.buildGraph = async function(
371
441
  }
372
442
  };
373
443
 
374
- exports.attachMetroCli = function(
375
- // $FlowFixMe[value-as-type]
444
+ exports.attachMetroCli = function (
376
445
  yargs: Yargs,
377
446
  {
378
447
  build = {},
@@ -384,7 +453,6 @@ exports.attachMetroCli = function(
384
453
  dependencies: any,
385
454
  ...
386
455
  } = {},
387
- // $FlowFixMe[value-as-type]
388
456
  ): Yargs {
389
457
  if (build) {
390
458
  const {command, description, builder, handler} = makeBuildCommand();
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -12,5 +12,5 @@
12
12
  module.exports = {
13
13
  registerAsset(data) {
14
14
  return data;
15
- }
15
+ },
16
16
  };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -13,5 +13,5 @@ const Foo = require("./Foo");
13
13
 
14
14
  module.exports = {
15
15
  type: "bar",
16
- foo: Foo.type
16
+ foo: Foo.type,
17
17
  };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -11,7 +11,7 @@
11
11
 
12
12
  require("./AssetRegistry");
13
13
 
14
- const calcSum = value => {
14
+ const calcSum = (value) => {
15
15
  // some random function
16
16
  const error = new Error("SOURCEMAP: value: " + value);
17
17
  return error;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -13,5 +13,5 @@ const asset = require("./test.png");
13
13
 
14
14
  module.exports = {
15
15
  type: "foo",
16
- asset
16
+ asset,
17
17
  };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -18,5 +18,5 @@ const TypeScript = require("./TypeScript");
18
18
  module.exports = {
19
19
  Foo,
20
20
  Bar,
21
- TypeScript
21
+ TypeScript,
22
22
  };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -10,7 +10,7 @@
10
10
  "use strict";
11
11
 
12
12
  Object.defineProperty(exports, "__esModule", {
13
- value: true
13
+ value: true,
14
14
  });
15
15
  exports.myFunction = myFunction;
16
16
  exports.foo = exports.default = void 0;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -10,7 +10,7 @@
10
10
  "use strict";
11
11
 
12
12
  Object.defineProperty(exports, "__esModule", {
13
- value: true
13
+ value: true,
14
14
  });
15
15
  exports.myFunction = myFunction;
16
16
  exports.foo = exports.default = void 0;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -10,7 +10,7 @@
10
10
  "use strict";
11
11
 
12
12
  Object.defineProperty(exports, "__esModule", {
13
- value: true
13
+ value: true,
14
14
  });
15
15
  exports.myFunction = myFunction;
16
16
  exports.foo = exports.default = void 0;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -10,7 +10,7 @@
10
10
  "use strict";
11
11
 
12
12
  Object.defineProperty(exports, "__esModule", {
13
- value: true
13
+ value: true,
14
14
  });
15
15
  exports.myFunction = myFunction;
16
16
  exports.foo = exports.default = void 0;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -10,5 +10,5 @@
10
10
  "use strict";
11
11
 
12
12
  module.exports = {
13
- foo: "export-5: FOO"
13
+ foo: "export-5: FOO",
14
14
  };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -10,7 +10,7 @@
10
10
  "use strict";
11
11
 
12
12
  Object.defineProperty(exports, "__esModule", {
13
- value: true
13
+ value: true,
14
14
  });
15
15
  exports.foo = exports.default = void 0;
16
16
  var _default = "export-6: DEFAULT";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -10,7 +10,7 @@
10
10
  "use strict";
11
11
 
12
12
  Object.defineProperty(exports, "__esModule", {
13
- value: true
13
+ value: true,
14
14
  });
15
15
  exports.foo = exports.default = void 0;
16
16
  var _default = null;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -10,7 +10,7 @@
10
10
  "use strict";
11
11
 
12
12
  Object.defineProperty(exports, "__esModule", {
13
- value: true
13
+ value: true,
14
14
  });
15
15
  exports.foo = exports.default = void 0;
16
16
  var _default = "export-primitive-default: DEFAULT";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.