metro 0.83.2 → 0.83.4

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 (192) hide show
  1. package/package.json +25 -23
  2. package/src/Assets.js +50 -30
  3. package/src/Assets.js.flow +26 -15
  4. package/src/Bundler/util.js +33 -22
  5. package/src/Bundler/util.js.flow +2 -2
  6. package/src/Bundler.js +5 -1
  7. package/src/Bundler.js.flow +1 -1
  8. package/src/DeltaBundler/DeltaCalculator.js +9 -5
  9. package/src/DeltaBundler/DeltaCalculator.js.flow +8 -8
  10. package/src/DeltaBundler/Graph.js +21 -17
  11. package/src/DeltaBundler/Graph.js.flow +30 -30
  12. package/src/DeltaBundler/Serializers/baseJSBundle.js +5 -1
  13. package/src/DeltaBundler/Serializers/baseJSBundle.js.flow +1 -1
  14. package/src/DeltaBundler/Serializers/getAllFiles.js.flow +2 -2
  15. package/src/DeltaBundler/Serializers/getAssets.js +5 -1
  16. package/src/DeltaBundler/Serializers/getAssets.js.flow +2 -2
  17. package/src/DeltaBundler/Serializers/getExplodedSourceMap.js.flow +2 -2
  18. package/src/DeltaBundler/Serializers/getRamBundleInfo.js +5 -1
  19. package/src/DeltaBundler/Serializers/getRamBundleInfo.js.flow +8 -8
  20. package/src/DeltaBundler/Serializers/helpers/js.js +33 -22
  21. package/src/DeltaBundler/Serializers/helpers/js.js.flow +6 -6
  22. package/src/DeltaBundler/Serializers/helpers/processModules.js.flow +3 -3
  23. package/src/DeltaBundler/Serializers/hmrJSBundle.js +33 -22
  24. package/src/DeltaBundler/Serializers/hmrJSBundle.js.flow +5 -5
  25. package/src/DeltaBundler/Serializers/sourceMapGenerator.js +5 -1
  26. package/src/DeltaBundler/Serializers/sourceMapGenerator.js.flow +6 -6
  27. package/src/DeltaBundler/Serializers/sourceMapObject.js.flow +2 -2
  28. package/src/DeltaBundler/Serializers/sourceMapString.js.flow +2 -2
  29. package/src/DeltaBundler/Transformer.js +5 -1
  30. package/src/DeltaBundler/Transformer.js.flow +3 -3
  31. package/src/DeltaBundler/Worker.flow.js +5 -1
  32. package/src/DeltaBundler/Worker.flow.js.flow +1 -1
  33. package/src/DeltaBundler/WorkerFarm.js +1 -1
  34. package/src/DeltaBundler/WorkerFarm.js.flow +26 -13
  35. package/src/DeltaBundler/buildSubgraph.js +9 -5
  36. package/src/DeltaBundler/buildSubgraph.js.flow +8 -8
  37. package/src/DeltaBundler/getTransformCacheKey.js +5 -1
  38. package/src/DeltaBundler/types.js +5 -1
  39. package/src/DeltaBundler/types.js.flow +36 -34
  40. package/src/DeltaBundler.js +5 -1
  41. package/src/DeltaBundler.js.flow +2 -2
  42. package/src/HmrServer.js +42 -30
  43. package/src/HmrServer.js.flow +17 -12
  44. package/src/IncrementalBundler.js +37 -22
  45. package/src/IncrementalBundler.js.flow +13 -9
  46. package/src/ModuleGraph/worker/JsFileWrapping.js +33 -22
  47. package/src/ModuleGraph/worker/JsFileWrapping.js.flow +10 -5
  48. package/src/ModuleGraph/worker/collectDependencies.js +33 -22
  49. package/src/ModuleGraph/worker/collectDependencies.js.flow +27 -21
  50. package/src/ModuleGraph/worker/generateImportNames.js +5 -1
  51. package/src/ModuleGraph/worker/generateImportNames.js.flow +4 -2
  52. package/src/ModuleGraph/worker/importLocationsPlugin.js.flow +7 -3
  53. package/src/Server/MultipartResponse.js +5 -1
  54. package/src/Server/MultipartResponse.js.flow +1 -1
  55. package/src/Server/symbolicate.js.flow +4 -4
  56. package/src/Server.js +112 -40
  57. package/src/Server.js.flow +110 -47
  58. package/src/cli/parseKeyValueParamArray.js.flow +1 -1
  59. package/src/cli-utils.js +5 -1
  60. package/src/cli-utils.js.flow +2 -2
  61. package/src/commands/build.js +5 -1
  62. package/src/commands/build.js.flow +11 -10
  63. package/src/commands/dependencies.js +5 -1
  64. package/src/commands/dependencies.js.flow +8 -4
  65. package/src/commands/serve.js +2 -0
  66. package/src/commands/serve.js.flow +14 -9
  67. package/src/index.flow.js +38 -27
  68. package/src/index.flow.js.flow +25 -20
  69. package/src/integration_tests/basic_bundle/AssetRegistry.js.flow +1 -1
  70. package/src/integration_tests/basic_bundle/ErrorBundle.js.flow +1 -1
  71. package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-import.js +5 -1
  72. package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-import.js.flow +1 -1
  73. package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-multi-line-import-with-escapes.js.flow +1 -1
  74. package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-multi-line-import.js.flow +1 -1
  75. package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-require-with-embedded-comment.js.flow +1 -1
  76. package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-require.js.flow +1 -1
  77. package/src/integration_tests/basic_bundle/build-errors/cannot-resolve-specifier-with-escapes.js.flow +1 -1
  78. package/src/integration_tests/basic_bundle/build-errors/inline-requires-cannot-resolve-import.js +5 -1
  79. package/src/integration_tests/basic_bundle/build-errors/inline-requires-cannot-resolve-import.js.flow +1 -1
  80. package/src/integration_tests/basic_bundle/build-errors/inline-requires-cannot-resolve-require.js.flow +1 -1
  81. package/src/integration_tests/basic_bundle/import-export/index.js +33 -22
  82. package/src/integration_tests/basic_bundle/import-export/index.js.flow +3 -3
  83. package/src/integration_tests/basic_bundle/import-export/utils.js.flow +2 -2
  84. package/src/integration_tests/basic_bundle/loadBundleAsyncForTest.js.flow +1 -1
  85. package/src/integration_tests/basic_bundle/optional-dependencies/index.js.flow +1 -1
  86. package/src/integration_tests/basic_bundle/require-context/conflict.js.flow +1 -1
  87. package/src/integration_tests/basic_bundle/require-context/empty.js.flow +1 -1
  88. package/src/integration_tests/basic_bundle/require-context/matching.js.flow +1 -1
  89. package/src/integration_tests/basic_bundle/require-context/mode-eager.js.flow +1 -1
  90. package/src/integration_tests/basic_bundle/require-context/mode-lazy-once.js.flow +1 -1
  91. package/src/integration_tests/basic_bundle/require-context/mode-lazy.js.flow +1 -1
  92. package/src/integration_tests/basic_bundle/require-context/mode-sync.js.flow +2 -2
  93. package/src/integration_tests/basic_bundle/require-context/utils.js.flow +1 -1
  94. package/src/integration_tests/basic_bundle/require-resolveWeak/import-and-resolveWeak.js.flow +1 -1
  95. package/src/integration_tests/basic_bundle/require-resolveWeak/multiple.js.flow +1 -1
  96. package/src/integration_tests/basic_bundle/require-resolveWeak/never-required.js.flow +1 -1
  97. package/src/integration_tests/basic_bundle/require-resolveWeak/require-and-resolveWeak.js.flow +1 -1
  98. package/src/integration_tests/execBundle.js +5 -1
  99. package/src/integration_tests/execBundle.js.flow +1 -1
  100. package/src/lib/BatchProcessor.js +10 -3
  101. package/src/lib/BatchProcessor.js.flow +10 -7
  102. package/src/lib/CountingSet.js.flow +4 -4
  103. package/src/lib/JsonReporter.js +5 -3
  104. package/src/lib/JsonReporter.js.flow +19 -17
  105. package/src/lib/RamBundleParser.js +5 -1
  106. package/src/lib/RamBundleParser.js.flow +1 -1
  107. package/src/lib/TerminalReporter.js +39 -28
  108. package/src/lib/TerminalReporter.js.flow +15 -15
  109. package/src/lib/contextModule.js +5 -1
  110. package/src/lib/contextModule.js.flow +1 -1
  111. package/src/lib/contextModuleTemplates.js +28 -21
  112. package/src/lib/countLines.js +4 -3
  113. package/src/lib/countLines.js.flow +3 -4
  114. package/src/lib/createWebsocketServer.js +14 -3
  115. package/src/lib/createWebsocketServer.js.flow +16 -9
  116. package/src/lib/debounceAsyncQueue.js.flow +1 -1
  117. package/src/lib/formatBundlingError.js +5 -1
  118. package/src/lib/formatBundlingError.js.flow +1 -1
  119. package/src/lib/getAppendScripts.js +5 -1
  120. package/src/lib/getAppendScripts.js.flow +4 -4
  121. package/src/lib/getGraphId.js +5 -1
  122. package/src/lib/getGraphId.js.flow +1 -1
  123. package/src/lib/getPreludeCode.js +4 -0
  124. package/src/lib/getPreludeCode.js.flow +10 -3
  125. package/src/lib/getPrependedScripts.js +44 -23
  126. package/src/lib/getPrependedScripts.js.flow +10 -3
  127. package/src/lib/logToConsole.js +5 -1
  128. package/src/lib/logToConsole.js.flow +2 -2
  129. package/src/lib/parseBundleOptionsFromBundleRequestUrl.js +33 -22
  130. package/src/lib/parseCustomResolverOptions.js.flow +2 -2
  131. package/src/lib/parseCustomTransformOptions.js.flow +1 -1
  132. package/src/lib/parseJsonBody.js.flow +11 -1
  133. package/src/lib/pathUtils.js +28 -21
  134. package/src/lib/pathUtils.js.flow +1 -1
  135. package/src/lib/relativizeSourceMap.js +5 -1
  136. package/src/lib/reporting.js +5 -1
  137. package/src/lib/reporting.js.flow +4 -4
  138. package/src/lib/transformHelpers.js +16 -10
  139. package/src/lib/transformHelpers.js.flow +17 -15
  140. package/src/node-haste/DependencyGraph/ModuleResolution.js +56 -43
  141. package/src/node-haste/DependencyGraph/ModuleResolution.js.flow +35 -32
  142. package/src/node-haste/DependencyGraph/createFileMap.js +64 -39
  143. package/src/node-haste/DependencyGraph/createFileMap.js.flow +44 -18
  144. package/src/node-haste/DependencyGraph.js +45 -32
  145. package/src/node-haste/DependencyGraph.js.flow +35 -37
  146. package/src/node-haste/Package.js +5 -1
  147. package/src/node-haste/PackageCache.js +5 -1
  148. package/src/node-haste/lib/AssetPaths.js +7 -3
  149. package/src/node-haste/lib/AssetPaths.js.flow +4 -4
  150. package/src/node-haste/lib/parsePlatformFilePath.js +11 -7
  151. package/src/node-haste/lib/parsePlatformFilePath.js.flow +4 -4
  152. package/src/shared/output/RamBundle/as-assets.js +5 -1
  153. package/src/shared/output/RamBundle/as-assets.js.flow +6 -6
  154. package/src/shared/output/RamBundle/as-indexed-file.js +5 -1
  155. package/src/shared/output/RamBundle/as-indexed-file.js.flow +5 -5
  156. package/src/shared/output/RamBundle/buildSourcemapWithMetadata.js.flow +5 -5
  157. package/src/shared/output/RamBundle/util.js +5 -1
  158. package/src/shared/output/RamBundle/util.js.flow +5 -5
  159. package/src/shared/output/RamBundle/write-sourcemap.js +5 -1
  160. package/src/shared/output/RamBundle/write-sourcemap.js.flow +1 -1
  161. package/src/shared/output/RamBundle.js +5 -1
  162. package/src/shared/output/RamBundle.js.flow +1 -1
  163. package/src/shared/output/bundle.flow.js +5 -1
  164. package/src/shared/output/bundle.flow.js.flow +3 -3
  165. package/src/shared/output/meta.js +7 -3
  166. package/src/shared/output/meta.js.flow +1 -1
  167. package/src/shared/output/writeFile.js +13 -4
  168. package/src/shared/output/writeFile.js.flow +8 -2
  169. package/src/shared/types.js.flow +20 -5
  170. package/src/Asset.d.ts +0 -25
  171. package/src/Bundler.d.ts +0 -39
  172. package/src/DeltaBundler/Graph.d.ts +0 -40
  173. package/src/DeltaBundler/Serializers/getExplodedSourceMap.d.ts +0 -26
  174. package/src/DeltaBundler/Serializers/getRamBundleInfo.d.ts +0 -18
  175. package/src/DeltaBundler/Worker.d.ts +0 -45
  176. package/src/DeltaBundler/types.d.ts +0 -166
  177. package/src/DeltaBundler.d.ts +0 -58
  178. package/src/IncrementalBundler.d.ts +0 -98
  179. package/src/ModuleGraph/test-helpers.js +0 -75
  180. package/src/ModuleGraph/worker/collectDependencies.d.ts +0 -27
  181. package/src/Server/MultipartResponse.d.ts +0 -31
  182. package/src/Server/symbolicate.d.ts +0 -31
  183. package/src/Server.d.ts +0 -118
  184. package/src/index.d.ts +0 -193
  185. package/src/lib/CountingSet.d.ts +0 -48
  186. package/src/lib/TerminalReporter.d.ts +0 -27
  187. package/src/lib/contextModule.d.ts +0 -22
  188. package/src/lib/getGraphId.d.ts +0 -11
  189. package/src/lib/reporting.d.ts +0 -144
  190. package/src/node-haste/DependencyGraph.d.ts +0 -62
  191. package/src/shared/output/bundle.d.ts +0 -35
  192. package/src/shared/types.d.ts +0 -130
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "metro",
3
- "version": "0.83.2",
3
+ "version": "0.83.4",
4
4
  "description": "🚇 The JavaScript bundler for React Native.",
5
5
  "main": "src/index.js",
6
6
  "bin": "src/cli.js",
@@ -18,14 +18,14 @@
18
18
  "cleanup-release": "test ! -e build && mv src build && mv src.real src"
19
19
  },
20
20
  "dependencies": {
21
- "@babel/code-frame": "^7.24.7",
21
+ "@babel/code-frame": "^7.29.0",
22
22
  "@babel/core": "^7.25.2",
23
- "@babel/generator": "^7.25.0",
24
- "@babel/parser": "^7.25.3",
25
- "@babel/template": "^7.25.0",
26
- "@babel/traverse": "^7.25.3",
27
- "@babel/types": "^7.25.2",
28
- "accepts": "^1.3.7",
23
+ "@babel/generator": "^7.29.1",
24
+ "@babel/parser": "^7.29.0",
25
+ "@babel/template": "^7.28.6",
26
+ "@babel/traverse": "^7.29.0",
27
+ "@babel/types": "^7.29.0",
28
+ "accepts": "^2.0.0",
29
29
  "chalk": "^4.0.0",
30
30
  "ci-info": "^2.0.0",
31
31
  "connect": "^3.6.5",
@@ -33,25 +33,25 @@
33
33
  "error-stack-parser": "^2.0.6",
34
34
  "flow-enums-runtime": "^0.0.6",
35
35
  "graceful-fs": "^4.2.4",
36
- "hermes-parser": "0.32.0",
36
+ "hermes-parser": "0.33.3",
37
37
  "image-size": "^1.0.2",
38
38
  "invariant": "^2.2.4",
39
39
  "jest-worker": "^29.7.0",
40
40
  "jsc-safe-url": "^0.2.2",
41
41
  "lodash.throttle": "^4.1.1",
42
- "metro-babel-transformer": "0.83.2",
43
- "metro-cache": "0.83.2",
44
- "metro-cache-key": "0.83.2",
45
- "metro-config": "0.83.2",
46
- "metro-core": "0.83.2",
47
- "metro-file-map": "0.83.2",
48
- "metro-resolver": "0.83.2",
49
- "metro-runtime": "0.83.2",
50
- "metro-source-map": "0.83.2",
51
- "metro-symbolicate": "0.83.2",
52
- "metro-transform-plugins": "0.83.2",
53
- "metro-transform-worker": "0.83.2",
54
- "mime-types": "^2.1.27",
42
+ "metro-babel-transformer": "0.83.4",
43
+ "metro-cache": "0.83.4",
44
+ "metro-cache-key": "0.83.4",
45
+ "metro-config": "0.83.4",
46
+ "metro-core": "0.83.4",
47
+ "metro-file-map": "0.83.4",
48
+ "metro-resolver": "0.83.4",
49
+ "metro-runtime": "0.83.4",
50
+ "metro-source-map": "0.83.4",
51
+ "metro-symbolicate": "0.83.4",
52
+ "metro-transform-plugins": "0.83.4",
53
+ "metro-transform-worker": "0.83.4",
54
+ "mime-types": "^3.0.1",
55
55
  "nullthrows": "^1.1.1",
56
56
  "serialize-error": "^2.1.0",
57
57
  "source-map": "^0.5.6",
@@ -65,11 +65,13 @@
65
65
  "@babel/plugin-transform-runtime": "^7.24.7",
66
66
  "@react-native/babel-preset": "0.78.0",
67
67
  "@react-native/metro-babel-transformer": "0.78.0",
68
+ "@types/ws": "^7.4.7",
69
+ "@types/yargs": "^17.0.35",
68
70
  "babel-jest": "^29.7.0",
69
71
  "dedent": "^0.7.0",
70
72
  "jest-snapshot": "^29.7.0",
71
73
  "jest-snapshot-serializer-raw": "^1.2.0",
72
- "metro-babel-register": "0.83.2",
74
+ "metro-babel-register": "0.83.4",
73
75
  "metro-memory-fs": "*",
74
76
  "mock-req": "^0.2.0",
75
77
  "mock-res": "^0.6.0",
package/src/Assets.js CHANGED
@@ -17,30 +17,41 @@ var _fs = _interopRequireDefault(require("fs"));
17
17
  var _imageSize = _interopRequireDefault(require("image-size"));
18
18
  var _path = _interopRequireDefault(require("path"));
19
19
  function _interopRequireDefault(e) {
20
- return e && e.__esModule ? e : { default: e };
21
- }
22
- function _getRequireWildcardCache(e) {
23
- if ("function" != typeof WeakMap) return null;
24
- var r = new WeakMap(),
25
- t = new WeakMap();
26
- return (_getRequireWildcardCache = function (e) {
27
- return e ? t : r;
28
- })(e);
20
+ return e && e.__esModule
21
+ ? e
22
+ : {
23
+ default: e,
24
+ };
29
25
  }
30
- function _interopRequireWildcard(e, r) {
31
- if (!r && e && e.__esModule) return e;
32
- if (null === e || ("object" != typeof e && "function" != typeof e))
33
- return { default: e };
34
- var t = _getRequireWildcardCache(r);
35
- if (t && t.has(e)) return t.get(e);
36
- var n = { __proto__: null },
37
- a = Object.defineProperty && Object.getOwnPropertyDescriptor;
38
- for (var u in e)
39
- if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
40
- var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
41
- i && (i.get || i.set) ? Object.defineProperty(n, u, i) : (n[u] = e[u]);
26
+ function _interopRequireWildcard(e, t) {
27
+ if ("function" == typeof WeakMap)
28
+ var r = new WeakMap(),
29
+ n = new WeakMap();
30
+ return (_interopRequireWildcard = function (e, t) {
31
+ if (!t && e && e.__esModule) return e;
32
+ var o,
33
+ i,
34
+ f = {
35
+ __proto__: null,
36
+ default: e,
37
+ };
38
+ if (null === e || ("object" != typeof e && "function" != typeof e))
39
+ return f;
40
+ if ((o = t ? n : r)) {
41
+ if (o.has(e)) return o.get(e);
42
+ o.set(e, f);
42
43
  }
43
- return ((n.default = e), t && t.set(e, n), n);
44
+ for (const t in e)
45
+ "default" !== t &&
46
+ {}.hasOwnProperty.call(e, t) &&
47
+ ((i =
48
+ (o = Object.defineProperty) &&
49
+ Object.getOwnPropertyDescriptor(e, t)) &&
50
+ (i.get || i.set)
51
+ ? o(f, t, i)
52
+ : (f[t] = e[t]));
53
+ return f;
54
+ })(e, t);
44
55
  }
45
56
  function isAssetTypeAnImage(type) {
46
57
  return (
@@ -158,7 +169,7 @@ async function getAssetData(
158
169
  assetPath,
159
170
  localPath,
160
171
  assetDataPlugins,
161
- platform = null,
172
+ platform,
162
173
  publicPath,
163
174
  ) {
164
175
  let assetUrlPath = localPath.startsWith("..")
@@ -166,7 +177,7 @@ async function getAssetData(
166
177
  : _path.default.join(publicPath, _path.default.dirname(localPath));
167
178
  assetUrlPath = (0, _pathUtils.normalizePathSeparatorsToPosix)(assetUrlPath);
168
179
  const isImage = isAssetTypeAnImage(_path.default.extname(assetPath).slice(1));
169
- const assetInfo = await getAbsoluteAssetInfo(assetPath, platform);
180
+ const assetInfo = await getAbsoluteAssetInfo(assetPath, platform ?? null);
170
181
  const isImageInput = assetInfo.files[0].includes(".zip/")
171
182
  ? _fs.default.readFileSync(assetInfo.files[0])
172
183
  : assetInfo.files[0];
@@ -203,8 +214,9 @@ async function getAsset(
203
214
  relativePath,
204
215
  projectRoot,
205
216
  watchFolders,
206
- platform = null,
217
+ platform,
207
218
  assetExts,
219
+ fileExistsInFileMap,
208
220
  ) {
209
221
  const assetData = AssetPaths.parse(
210
222
  relativePath,
@@ -216,12 +228,20 @@ async function getAsset(
216
228
  `'${relativePath}' cannot be loaded as its extension is not registered in assetExts`,
217
229
  );
218
230
  }
219
- if (!pathBelongsToRoots(absolutePath, [projectRoot, ...watchFolders])) {
220
- throw new Error(
221
- `'${relativePath}' could not be found, because it cannot be found in the project root or any watch folder`,
222
- );
231
+ if (fileExistsInFileMap != null) {
232
+ if (!fileExistsInFileMap(absolutePath)) {
233
+ throw new Error(
234
+ `'${relativePath}' could not be found, because it is not within the projectRoot or watchFolders, or it is blocked via the resolver.blockList config`,
235
+ );
236
+ }
237
+ } else {
238
+ if (!pathBelongsToRoots(absolutePath, [projectRoot, ...watchFolders])) {
239
+ throw new Error(
240
+ `'${relativePath}' could not be found, because it cannot be found in the project root or any watch folder`,
241
+ );
242
+ }
223
243
  }
224
- const record = await getAbsoluteAssetRecord(absolutePath, platform);
244
+ const record = await getAbsoluteAssetRecord(absolutePath, platform ?? null);
225
245
  for (let i = 0; i < record.scales.length; i++) {
226
246
  if (record.scales[i] >= assetData.resolution) {
227
247
  return _fs.default.promises.readFile(record.files[i]);
@@ -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
  */
@@ -15,6 +15,7 @@ import {normalizePathSeparatorsToPosix} from './lib/pathUtils';
15
15
  import * as AssetPaths from './node-haste/lib/AssetPaths';
16
16
  import crypto from 'crypto';
17
17
  import fs from 'fs';
18
+ // $FlowFixMe[untyped-import] image-size
18
19
  import getImageSize from 'image-size';
19
20
  import path from 'path';
20
21
 
@@ -92,7 +93,7 @@ export type AssetDataPlugin = (
92
93
 
93
94
  function buildAssetMap(
94
95
  dir: string,
95
- files: $ReadOnlyArray<string>,
96
+ files: ReadonlyArray<string>,
96
97
  platform: ?string,
97
98
  ): Map<string, {files: Array<string>, scales: Array<number>}> {
98
99
  const platforms = new Set(platform != null ? [platform] : []);
@@ -200,8 +201,8 @@ async function getAbsoluteAssetInfo(
200
201
  export async function getAssetData(
201
202
  assetPath: string,
202
203
  localPath: string,
203
- assetDataPlugins: $ReadOnlyArray<string>,
204
- platform: ?string = null,
204
+ assetDataPlugins: ReadonlyArray<string>,
205
+ platform: ?string,
205
206
  publicPath: string,
206
207
  ): Promise<AssetData> {
207
208
  // If the path of the asset is outside of the projectRoot, we don't want to
@@ -215,7 +216,7 @@ export async function getAssetData(
215
216
  assetUrlPath = normalizePathSeparatorsToPosix(assetUrlPath);
216
217
 
217
218
  const isImage = isAssetTypeAnImage(path.extname(assetPath).slice(1));
218
- const assetInfo = await getAbsoluteAssetInfo(assetPath, platform);
219
+ const assetInfo = await getAbsoluteAssetInfo(assetPath, platform ?? null);
219
220
 
220
221
  const isImageInput = assetInfo.files[0].includes('.zip/')
221
222
  ? fs.readFileSync(assetInfo.files[0])
@@ -239,7 +240,7 @@ export async function getAssetData(
239
240
  }
240
241
 
241
242
  async function applyAssetDataPlugins(
242
- assetDataPlugins: $ReadOnlyArray<string>,
243
+ assetDataPlugins: ReadonlyArray<string>,
243
244
  assetData: AssetData,
244
245
  ): Promise<AssetData> {
245
246
  if (!assetDataPlugins.length) {
@@ -279,9 +280,10 @@ export async function getAssetFiles(
279
280
  export async function getAsset(
280
281
  relativePath: string,
281
282
  projectRoot: string,
282
- watchFolders: $ReadOnlyArray<string>,
283
- platform: ?string = null,
284
- assetExts: $ReadOnlyArray<string>,
283
+ watchFolders: ReadonlyArray<string>,
284
+ platform: ?string,
285
+ assetExts: ReadonlyArray<string>,
286
+ fileExistsInFileMap?: (absolutePath: string) => boolean,
285
287
  ): Promise<Buffer> {
286
288
  const assetData = AssetPaths.parse(
287
289
  relativePath,
@@ -296,13 +298,22 @@ export async function getAsset(
296
298
  );
297
299
  }
298
300
 
299
- if (!pathBelongsToRoots(absolutePath, [projectRoot, ...watchFolders])) {
300
- throw new Error(
301
- `'${relativePath}' could not be found, because it cannot be found in the project root or any watch folder`,
302
- );
301
+ // NOTE: If fileExistsInFileMap is not provided, we fall back to pathBelongsToRoots for backward compatibility, as getAsset is part of the public API.
302
+ if (fileExistsInFileMap != null) {
303
+ if (!fileExistsInFileMap(absolutePath)) {
304
+ throw new Error(
305
+ `'${relativePath}' could not be found, because it is not within the projectRoot or watchFolders, or it is blocked via the resolver.blockList config`,
306
+ );
307
+ }
308
+ } else {
309
+ if (!pathBelongsToRoots(absolutePath, [projectRoot, ...watchFolders])) {
310
+ throw new Error(
311
+ `'${relativePath}' could not be found, because it cannot be found in the project root or any watch folder`,
312
+ );
313
+ }
303
314
  }
304
315
 
305
- const record = await getAbsoluteAssetRecord(absolutePath, platform);
316
+ const record = await getAbsoluteAssetRecord(absolutePath, platform ?? null);
306
317
 
307
318
  for (let i = 0; i < record.scales.length; i++) {
308
319
  if (record.scales[i] >= assetData.resolution) {
@@ -315,7 +326,7 @@ export async function getAsset(
315
326
 
316
327
  function pathBelongsToRoots(
317
328
  pathToCheck: string,
318
- roots: $ReadOnlyArray<string>,
329
+ roots: ReadonlyArray<string>,
319
330
  ): boolean {
320
331
  for (const rootFolder of roots) {
321
332
  if (pathToCheck.startsWith(path.resolve(rootFolder))) {
@@ -9,30 +9,41 @@ var babylon = _interopRequireWildcard(require("@babel/parser"));
9
9
  var _template = _interopRequireDefault(require("@babel/template"));
10
10
  var babelTypes = _interopRequireWildcard(require("@babel/types"));
11
11
  function _interopRequireDefault(e) {
12
- return e && e.__esModule ? e : { default: e };
12
+ return e && e.__esModule
13
+ ? e
14
+ : {
15
+ default: e,
16
+ };
13
17
  }
14
- function _getRequireWildcardCache(e) {
15
- if ("function" != typeof WeakMap) return null;
16
- var r = new WeakMap(),
17
- t = new WeakMap();
18
- return (_getRequireWildcardCache = function (e) {
19
- return e ? t : r;
20
- })(e);
21
- }
22
- function _interopRequireWildcard(e, r) {
23
- if (!r && e && e.__esModule) return e;
24
- if (null === e || ("object" != typeof e && "function" != typeof e))
25
- return { default: e };
26
- var t = _getRequireWildcardCache(r);
27
- if (t && t.has(e)) return t.get(e);
28
- var n = { __proto__: null },
29
- a = Object.defineProperty && Object.getOwnPropertyDescriptor;
30
- for (var u in e)
31
- if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
32
- var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
33
- i && (i.get || i.set) ? Object.defineProperty(n, u, i) : (n[u] = e[u]);
18
+ function _interopRequireWildcard(e, t) {
19
+ if ("function" == typeof WeakMap)
20
+ var r = new WeakMap(),
21
+ n = new WeakMap();
22
+ return (_interopRequireWildcard = function (e, t) {
23
+ if (!t && e && e.__esModule) return e;
24
+ var o,
25
+ i,
26
+ f = {
27
+ __proto__: null,
28
+ default: e,
29
+ };
30
+ if (null === e || ("object" != typeof e && "function" != typeof e))
31
+ return f;
32
+ if ((o = t ? n : r)) {
33
+ if (o.has(e)) return o.get(e);
34
+ o.set(e, f);
34
35
  }
35
- return ((n.default = e), t && t.set(e, n), n);
36
+ for (const t in e)
37
+ "default" !== t &&
38
+ {}.hasOwnProperty.call(e, t) &&
39
+ ((i =
40
+ (o = Object.defineProperty) &&
41
+ Object.getOwnPropertyDescriptor(e, t)) &&
42
+ (i.get || i.set)
43
+ ? o(f, t, i)
44
+ : (f[t] = e[t]));
45
+ return f;
46
+ })(e, t);
36
47
  }
37
48
  const assetPropertyBlockList = new Set(["files", "fileSystemLocation", "path"]);
38
49
  function generateAssetCodeFileAst(assetRegistryPath, assetDescriptor) {
@@ -67,8 +67,8 @@ function filterObject(
67
67
  }
68
68
 
69
69
  export function createRamBundleGroups<T: ModuleTransportLike>(
70
- ramGroups: $ReadOnlyArray<string>,
71
- groupableModules: $ReadOnlyArray<T>,
70
+ ramGroups: ReadonlyArray<string>,
71
+ groupableModules: ReadonlyArray<T>,
72
72
  subtree: SubTree<T>,
73
73
  ): Map<number, Set<number>> {
74
74
  // build two maps that allow to lookup module data
package/src/Bundler.js CHANGED
@@ -11,7 +11,11 @@ var _DependencyGraph = _interopRequireDefault(
11
11
  require("./node-haste/DependencyGraph"),
12
12
  );
13
13
  function _interopRequireDefault(e) {
14
- return e && e.__esModule ? e : { default: e };
14
+ return e && e.__esModule
15
+ ? e
16
+ : {
17
+ default: e,
18
+ };
15
19
  }
16
20
  class Bundler {
17
21
  constructor(config, options) {
@@ -17,7 +17,7 @@ import type {ConfigT} from 'metro-config';
17
17
  import Transformer from './DeltaBundler/Transformer';
18
18
  import DependencyGraph from './node-haste/DependencyGraph';
19
19
 
20
- export type BundlerOptions = $ReadOnly<{
20
+ export type BundlerOptions = Readonly<{
21
21
  hasReducedPerformance?: boolean,
22
22
  watch?: boolean,
23
23
  }>;
@@ -8,7 +8,11 @@ var _Graph = require("./Graph");
8
8
  var _events = _interopRequireDefault(require("events"));
9
9
  var _path = _interopRequireDefault(require("path"));
10
10
  function _interopRequireDefault(e) {
11
- return e && e.__esModule ? e : { default: e };
11
+ return e && e.__esModule
12
+ ? e
13
+ : {
14
+ default: e,
15
+ };
12
16
  }
13
17
  const debug = require("debug")("Metro:DeltaCalculator");
14
18
  class DeltaCalculator extends _events.default {
@@ -84,8 +88,8 @@ class DeltaCalculator extends _events.default {
84
88
  });
85
89
  return {
86
90
  added: this._graph.dependencies,
87
- modified: new Map(),
88
91
  deleted: new Set(),
92
+ modified: new Map(),
89
93
  reset: true,
90
94
  };
91
95
  }
@@ -157,8 +161,8 @@ class DeltaCalculator extends _events.default {
157
161
  );
158
162
  return {
159
163
  added,
160
- modified: new Map(),
161
164
  deleted: new Set(),
165
+ modified: new Map(),
162
166
  reset: true,
163
167
  };
164
168
  }
@@ -182,8 +186,8 @@ class DeltaCalculator extends _events.default {
182
186
  if (modifiedDependencies.length === 0) {
183
187
  return {
184
188
  added: new Map(),
185
- modified: new Map(),
186
189
  deleted: new Set(),
190
+ modified: new Map(),
187
191
  reset: false,
188
192
  };
189
193
  }
@@ -200,8 +204,8 @@ class DeltaCalculator extends _events.default {
200
204
  );
201
205
  return {
202
206
  added,
203
- modified,
204
207
  deleted,
208
+ modified,
205
209
  reset: false,
206
210
  };
207
211
  }
@@ -34,12 +34,12 @@ export default class DeltaCalculator<T> extends EventEmitter {
34
34
  _deletedFiles: Set<string> = new Set();
35
35
  _modifiedFiles: Set<string> = new Set();
36
36
  _addedFiles: Set<string> = new Set();
37
- _requiresReset = false;
37
+ _requiresReset: boolean = false;
38
38
 
39
39
  _graph: Graph<T>;
40
40
 
41
41
  constructor(
42
- entryPoints: $ReadOnlySet<string>,
42
+ entryPoints: ReadonlySet<string>,
43
43
  changeEventSource: EventEmitter,
44
44
  options: Options<T>,
45
45
  ) {
@@ -154,8 +154,8 @@ export default class DeltaCalculator<T> extends EventEmitter {
154
154
 
155
155
  return {
156
156
  added: this._graph.dependencies,
157
- modified: new Map(),
158
157
  deleted: new Set(),
158
+ modified: new Map(),
159
159
  reset: true,
160
160
  };
161
161
  }
@@ -186,7 +186,7 @@ export default class DeltaCalculator<T> extends EventEmitter {
186
186
  _handleFileChange = (
187
187
  {type, filePath, metadata}: ChangeEvent['eventsQueue'][number],
188
188
  logger: ?RootPerfLogger,
189
- ): mixed => {
189
+ ): unknown => {
190
190
  debug('Handling %s: %s (type: %s)', type, filePath, metadata.type);
191
191
  if (
192
192
  metadata.type === 'l' ||
@@ -234,7 +234,7 @@ export default class DeltaCalculator<T> extends EventEmitter {
234
234
  this._addedFiles.delete(filePath);
235
235
  break;
236
236
  default:
237
- (nextState: empty);
237
+ nextState as empty;
238
238
  }
239
239
 
240
240
  // Notify users that there is a change in some of the bundle files. This
@@ -256,8 +256,8 @@ export default class DeltaCalculator<T> extends EventEmitter {
256
256
 
257
257
  return {
258
258
  added,
259
- modified: new Map(),
260
259
  deleted: new Set(),
260
+ modified: new Map(),
261
261
  reset: true,
262
262
  };
263
263
  }
@@ -297,8 +297,8 @@ export default class DeltaCalculator<T> extends EventEmitter {
297
297
  if (modifiedDependencies.length === 0) {
298
298
  return {
299
299
  added: new Map(),
300
- modified: new Map(),
301
300
  deleted: new Set(),
301
+ modified: new Map(),
302
302
  reset: false,
303
303
  };
304
304
  }
@@ -317,8 +317,8 @@ export default class DeltaCalculator<T> extends EventEmitter {
317
317
 
318
318
  return {
319
319
  added,
320
- modified,
321
320
  deleted,
321
+ modified,
322
322
  reset: false,
323
323
  };
324
324
  }
@@ -11,18 +11,22 @@ var _buildSubgraph = require("./buildSubgraph");
11
11
  var _invariant = _interopRequireDefault(require("invariant"));
12
12
  var _nullthrows = _interopRequireDefault(require("nullthrows"));
13
13
  function _interopRequireDefault(e) {
14
- return e && e.__esModule ? e : { default: e };
14
+ return e && e.__esModule
15
+ ? e
16
+ : {
17
+ default: e,
18
+ };
15
19
  }
16
20
  function getInternalOptions({ transform, resolve, onProgress, lazy, shallow }) {
17
21
  let numProcessed = 0;
18
22
  let total = 0;
19
23
  return {
20
24
  lazy,
21
- transform,
22
- resolve,
23
25
  onDependencyAdd: () => onProgress && onProgress(numProcessed, ++total),
24
26
  onDependencyAdded: () => onProgress && onProgress(++numProcessed, total),
27
+ resolve,
25
28
  shallow,
29
+ transform,
26
30
  };
27
31
  }
28
32
  function isWeakOrLazy(dependency, options) {
@@ -88,11 +92,11 @@ class Graph {
88
92
  } catch (error) {
89
93
  const rollbackDelta = {
90
94
  added: delta.added,
95
+ baseModuleData: new Map(),
91
96
  deleted: delta.deleted,
97
+ errors: new Map(),
92
98
  touched: new Set(),
93
99
  updatedModuleData: delta.baseModuleData,
94
- baseModuleData: new Map(),
95
- errors: new Map(),
96
100
  };
97
101
  for (const modified of modifiedPathsInBaseGraph) {
98
102
  const module = this.dependencies.get(modified);
@@ -127,8 +131,8 @@ class Graph {
127
131
  }
128
132
  return {
129
133
  added,
130
- modified,
131
134
  deleted: delta.deleted,
135
+ modified,
132
136
  };
133
137
  }
134
138
  async initialTraverseDependencies(options) {
@@ -155,8 +159,8 @@ class Graph {
155
159
  });
156
160
  return {
157
161
  added: this.dependencies,
158
- modified: new Map(),
159
162
  deleted: new Set(),
163
+ modified: new Map(),
160
164
  };
161
165
  }
162
166
  async _buildDelta(pathsToVisit, options, moduleFilter) {
@@ -165,27 +169,27 @@ class Graph {
165
169
  this.#resolvedContexts,
166
170
  {
167
171
  resolve: options.resolve,
168
- transform: async (absolutePath, requireContext) => {
169
- options.onDependencyAdd();
170
- const result = await options.transform(absolutePath, requireContext);
171
- options.onDependencyAdded();
172
- return result;
173
- },
174
172
  shouldTraverse: (dependency) => {
175
173
  if (options.shallow || isWeakOrLazy(dependency, options)) {
176
174
  return false;
177
175
  }
178
176
  return moduleFilter == null || moduleFilter(dependency.absolutePath);
179
177
  },
178
+ transform: async (absolutePath, requireContext) => {
179
+ options.onDependencyAdd();
180
+ const result = await options.transform(absolutePath, requireContext);
181
+ options.onDependencyAdded();
182
+ return result;
183
+ },
180
184
  },
181
185
  );
182
186
  return {
183
187
  added: new Set(),
184
- touched: new Set(),
185
- deleted: new Set(),
186
- updatedModuleData: subGraph.moduleData,
187
188
  baseModuleData: new Map(),
189
+ deleted: new Set(),
188
190
  errors: subGraph.errors,
191
+ touched: new Set(),
192
+ updatedModuleData: subGraph.moduleData,
189
193
  };
190
194
  }
191
195
  _recursivelyCommitModule(
@@ -462,9 +466,9 @@ class Graph {
462
466
  }
463
467
  return {
464
468
  dependencies: new Map(dependencies),
465
- resolvedContexts,
466
469
  getSource,
467
470
  output,
471
+ resolvedContexts,
468
472
  unstable_transformResultKey,
469
473
  };
470
474
  }