metro-transform-worker 0.82.4 → 0.83.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,15 +1,12 @@
1
1
  {
2
2
  "name": "metro-transform-worker",
3
- "version": "0.82.4",
3
+ "version": "0.83.0",
4
4
  "description": "🚇 Transform worker for Metro.",
5
5
  "main": "src/index.js",
6
6
  "exports": {
7
7
  ".": "./src/index.js",
8
8
  "./package.json": "./package.json",
9
- "./private/*": "./src/*.js",
10
- "./src": "./src/index.js",
11
- "./src/*.js": "./src/*.js",
12
- "./src/*": "./src/*.js"
9
+ "./private/*": "./src/*.js"
13
10
  },
14
11
  "repository": {
15
12
  "type": "git",
@@ -26,20 +23,20 @@
26
23
  "@babel/parser": "^7.25.3",
27
24
  "@babel/types": "^7.25.2",
28
25
  "flow-enums-runtime": "^0.0.6",
29
- "metro": "0.82.4",
30
- "metro-babel-transformer": "0.82.4",
31
- "metro-cache": "0.82.4",
32
- "metro-cache-key": "0.82.4",
33
- "metro-minify-terser": "0.82.4",
34
- "metro-source-map": "0.82.4",
35
- "metro-transform-plugins": "0.82.4",
26
+ "metro": "0.83.0",
27
+ "metro-babel-transformer": "0.83.0",
28
+ "metro-cache": "0.83.0",
29
+ "metro-cache-key": "0.83.0",
30
+ "metro-minify-terser": "0.83.0",
31
+ "metro-source-map": "0.83.0",
32
+ "metro-transform-plugins": "0.83.0",
36
33
  "nullthrows": "^1.1.1"
37
34
  },
38
35
  "devDependencies": {
39
36
  "@react-native/metro-babel-transformer": "0.78.0",
40
- "metro-memory-fs": "0.82.4"
37
+ "metro-memory-fs": "*"
41
38
  },
42
39
  "engines": {
43
- "node": ">=18.18"
40
+ "node": ">=22.14"
44
41
  }
45
42
  }
package/src/index.d.ts CHANGED
@@ -18,8 +18,8 @@ import type {
18
18
  FBSourceFunctionMap,
19
19
  MetroSourceMapSegmentTuple,
20
20
  } from 'metro-source-map';
21
- import type {TransformResultDependency} from 'metro/src/DeltaBundler';
22
- import type {AllowOptionalDependencies} from 'metro/src/DeltaBundler/types';
21
+ import type {TransformResultDependency} from 'metro/private/DeltaBundler';
22
+ import type {AllowOptionalDependencies} from 'metro/private/DeltaBundler/types';
23
23
 
24
24
  export type MinifierConfig = Readonly<Record<string, unknown>>;
25
25
 
package/src/index.js CHANGED
@@ -6,7 +6,7 @@ const generate = require("@babel/generator").default;
6
6
  const babylon = require("@babel/parser");
7
7
  const types = require("@babel/types");
8
8
  const { stableHash } = require("metro-cache");
9
- const getCacheKey = require("metro-cache-key");
9
+ const { getCacheKey } = require("metro-cache-key");
10
10
  const {
11
11
  fromRawMappings,
12
12
  functionMapBabelPlugin,
@@ -14,16 +14,16 @@ const {
14
14
  toSegmentTuple,
15
15
  } = require("metro-source-map");
16
16
  const metroTransformPlugins = require("metro-transform-plugins");
17
- const collectDependencies = require("metro/src/ModuleGraph/worker/collectDependencies");
17
+ const collectDependencies = require("metro/private/ModuleGraph/worker/collectDependencies");
18
18
  const {
19
19
  InvalidRequireCallError: InternalInvalidRequireCallError,
20
- } = require("metro/src/ModuleGraph/worker/collectDependencies");
21
- const generateImportNames = require("metro/src/ModuleGraph/worker/generateImportNames");
20
+ } = require("metro/private/ModuleGraph/worker/collectDependencies");
21
+ const generateImportNames = require("metro/private/ModuleGraph/worker/generateImportNames");
22
22
  const {
23
23
  importLocationsPlugin,
24
24
  locToKey,
25
- } = require("metro/src/ModuleGraph/worker/importLocationsPlugin");
26
- const JsFileWrapping = require("metro/src/ModuleGraph/worker/JsFileWrapping");
25
+ } = require("metro/private/ModuleGraph/worker/importLocationsPlugin");
26
+ const JsFileWrapping = require("metro/private/ModuleGraph/worker/JsFileWrapping");
27
27
  const nullthrows = require("nullthrows");
28
28
  function getDynamicDepsBehavior(inPackages, filename) {
29
29
  switch (inPackages) {
@@ -220,7 +220,13 @@ async function transformJS(file, { config, options, projectRoot }) {
220
220
  importAll,
221
221
  dependencyMapName,
222
222
  config.globalPrefix,
223
- config.unstable_renameRequire === false
223
+ config.unstable_renameRequire === false,
224
+ {
225
+ unstable_useStaticHermesModuleFactory: Boolean(
226
+ options.customTransformOptions
227
+ ?.unstable_staticHermesOptimizedRequire
228
+ ),
229
+ }
224
230
  ));
225
231
  }
226
232
  }
@@ -327,7 +333,14 @@ async function transformJSON(file, { options, config, projectRoot }) {
327
333
  let code =
328
334
  config.unstable_disableModuleWrapping === true
329
335
  ? JsFileWrapping.jsonToCommonJS(file.code)
330
- : JsFileWrapping.wrapJson(file.code, config.globalPrefix);
336
+ : JsFileWrapping.wrapJson(
337
+ file.code,
338
+ config.globalPrefix,
339
+ Boolean(
340
+ options.customTransformOptions
341
+ ?.unstable_staticHermesOptimizedRequire
342
+ )
343
+ );
331
344
  let map = [];
332
345
  const minify =
333
346
  options.minify &&
@@ -398,13 +411,22 @@ module.exports = {
398
411
  options,
399
412
  };
400
413
  const sourceCode = data.toString("utf8");
401
- const { unstable_dependencyMapReservedName } = config;
402
- if (unstable_dependencyMapReservedName != null) {
403
- const position = sourceCode.indexOf(unstable_dependencyMapReservedName);
414
+ const reservedStrings = [];
415
+ if (
416
+ options.customTransformOptions?.unstable_staticHermesOptimizedRequire ==
417
+ true
418
+ ) {
419
+ reservedStrings.push("_$$_METRO_MODULE_ID");
420
+ }
421
+ if (config.unstable_dependencyMapReservedName != null) {
422
+ reservedStrings.push(config.unstable_dependencyMapReservedName);
423
+ }
424
+ for (const reservedString of reservedStrings) {
425
+ const position = sourceCode.indexOf(reservedString);
404
426
  if (position > -1) {
405
427
  throw new SyntaxError(
406
428
  "Source code contains the reserved string `" +
407
- unstable_dependencyMapReservedName +
429
+ reservedString +
408
430
  "` at character offset " +
409
431
  position
410
432
  );
@@ -445,8 +467,8 @@ module.exports = {
445
467
  require.resolve(minifierPath),
446
468
  require.resolve("./utils/getMinifier"),
447
469
  require.resolve("./utils/assetTransformer"),
448
- require.resolve("metro/src/ModuleGraph/worker/generateImportNames"),
449
- require.resolve("metro/src/ModuleGraph/worker/JsFileWrapping"),
470
+ require.resolve("metro/private/ModuleGraph/worker/generateImportNames"),
471
+ require.resolve("metro/private/ModuleGraph/worker/JsFileWrapping"),
450
472
  ...metroTransformPlugins.getTransformPluginCacheKeyFiles(),
451
473
  ]);
452
474
  const babelTransformer = require(babelTransformerPath);
package/src/index.js.flow CHANGED
@@ -28,12 +28,12 @@ import type {
28
28
  InlinePluginOptions,
29
29
  InlineRequiresPluginOptions,
30
30
  } from 'metro-transform-plugins';
31
- import type {TransformResultDependency} from 'metro/src/DeltaBundler';
32
- import type {AllowOptionalDependencies} from 'metro/src/DeltaBundler/types.flow.js';
31
+ import type {TransformResultDependency} from 'metro/private/DeltaBundler';
32
+ import type {AllowOptionalDependencies} from 'metro/private/DeltaBundler/types.flow';
33
33
  import type {
34
34
  DependencyTransformer,
35
35
  DynamicRequiresBehavior,
36
- } from 'metro/src/ModuleGraph/worker/collectDependencies';
36
+ } from 'metro/private/ModuleGraph/worker/collectDependencies';
37
37
 
38
38
  const getMinifier = require('./utils/getMinifier');
39
39
  const {transformFromAstSync} = require('@babel/core');
@@ -41,7 +41,7 @@ const generate = require('@babel/generator').default;
41
41
  const babylon = require('@babel/parser');
42
42
  const types = require('@babel/types');
43
43
  const {stableHash} = require('metro-cache');
44
- const getCacheKey = require('metro-cache-key');
44
+ const {getCacheKey} = require('metro-cache-key');
45
45
  const {
46
46
  fromRawMappings,
47
47
  functionMapBabelPlugin,
@@ -49,16 +49,16 @@ const {
49
49
  toSegmentTuple,
50
50
  } = require('metro-source-map');
51
51
  const metroTransformPlugins = require('metro-transform-plugins');
52
- const collectDependencies = require('metro/src/ModuleGraph/worker/collectDependencies');
52
+ const collectDependencies = require('metro/private/ModuleGraph/worker/collectDependencies');
53
53
  const {
54
54
  InvalidRequireCallError: InternalInvalidRequireCallError,
55
- } = require('metro/src/ModuleGraph/worker/collectDependencies');
56
- const generateImportNames = require('metro/src/ModuleGraph/worker/generateImportNames');
55
+ } = require('metro/private/ModuleGraph/worker/collectDependencies');
56
+ const generateImportNames = require('metro/private/ModuleGraph/worker/generateImportNames');
57
57
  const {
58
58
  importLocationsPlugin,
59
59
  locToKey,
60
- } = require('metro/src/ModuleGraph/worker/importLocationsPlugin');
61
- const JsFileWrapping = require('metro/src/ModuleGraph/worker/JsFileWrapping');
60
+ } = require('metro/private/ModuleGraph/worker/importLocationsPlugin');
61
+ const JsFileWrapping = require('metro/private/ModuleGraph/worker/JsFileWrapping');
62
62
  const nullthrows = require('nullthrows');
63
63
 
64
64
  type MinifierConfig = $ReadOnly<{[string]: mixed, ...}>;
@@ -129,6 +129,7 @@ export type JsTransformOptions = $ReadOnly<{
129
129
  unstable_disableES6Transforms?: boolean,
130
130
  unstable_memoizeInlineRequires?: boolean,
131
131
  unstable_nonMemoizedInlineRequires?: $ReadOnlyArray<string>,
132
+ unstable_staticHermesOptimizedRequire?: boolean,
132
133
  unstable_transformProfile: TransformProfile,
133
134
  }>;
134
135
 
@@ -429,6 +430,12 @@ async function transformJS(
429
430
  // release. It should be made non-optional in ConfigT or removed in
430
431
  // future.
431
432
  config.unstable_renameRequire === false,
433
+ {
434
+ unstable_useStaticHermesModuleFactory: Boolean(
435
+ options.customTransformOptions
436
+ ?.unstable_staticHermesOptimizedRequire,
437
+ ),
438
+ },
432
439
  ));
433
440
  }
434
441
  }
@@ -572,7 +579,14 @@ async function transformJSON(
572
579
  let code =
573
580
  config.unstable_disableModuleWrapping === true
574
581
  ? JsFileWrapping.jsonToCommonJS(file.code)
575
- : JsFileWrapping.wrapJson(file.code, config.globalPrefix);
582
+ : JsFileWrapping.wrapJson(
583
+ file.code,
584
+ config.globalPrefix,
585
+ Boolean(
586
+ options.customTransformOptions
587
+ ?.unstable_staticHermesOptimizedRequire,
588
+ ),
589
+ );
576
590
  let map: Array<MetroSourceMapSegmentTuple> = [];
577
591
 
578
592
  // TODO: When we can reuse transformJS for JSON, we should not derive `minify` separately.
@@ -654,13 +668,22 @@ module.exports = {
654
668
  };
655
669
  const sourceCode = data.toString('utf8');
656
670
 
657
- const {unstable_dependencyMapReservedName} = config;
658
- if (unstable_dependencyMapReservedName != null) {
659
- const position = sourceCode.indexOf(unstable_dependencyMapReservedName);
671
+ const reservedStrings = [];
672
+ if (
673
+ options.customTransformOptions?.unstable_staticHermesOptimizedRequire ==
674
+ true
675
+ ) {
676
+ reservedStrings.push('_$$_METRO_MODULE_ID');
677
+ }
678
+ if (config.unstable_dependencyMapReservedName != null) {
679
+ reservedStrings.push(config.unstable_dependencyMapReservedName);
680
+ }
681
+ for (const reservedString of reservedStrings) {
682
+ const position = sourceCode.indexOf(reservedString);
660
683
  if (position > -1) {
661
684
  throw new SyntaxError(
662
685
  'Source code contains the reserved string `' +
663
- unstable_dependencyMapReservedName +
686
+ reservedString +
664
687
  '` at character offset ' +
665
688
  position,
666
689
  );
@@ -709,8 +732,8 @@ module.exports = {
709
732
  require.resolve(minifierPath),
710
733
  require.resolve('./utils/getMinifier'),
711
734
  require.resolve('./utils/assetTransformer'),
712
- require.resolve('metro/src/ModuleGraph/worker/generateImportNames'),
713
- require.resolve('metro/src/ModuleGraph/worker/JsFileWrapping'),
735
+ require.resolve('metro/private/ModuleGraph/worker/generateImportNames'),
736
+ require.resolve('metro/private/ModuleGraph/worker/JsFileWrapping'),
714
737
  ...metroTransformPlugins.getTransformPluginCacheKeyFiles(),
715
738
  ]);
716
739
 
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
- const { getAssetData } = require("metro/src/Assets");
4
- const { generateAssetCodeFileAst } = require("metro/src/Bundler/util");
3
+ const { getAssetData } = require("metro/private/Assets");
4
+ const { generateAssetCodeFileAst } = require("metro/private/Bundler/util");
5
5
  const path = require("path");
6
6
  async function transform(
7
7
  { filename, options, src },
@@ -14,8 +14,8 @@
14
14
  import type {File} from '@babel/types';
15
15
  import type {BabelTransformerArgs} from 'metro-babel-transformer';
16
16
 
17
- const {getAssetData} = require('metro/src/Assets');
18
- const {generateAssetCodeFileAst} = require('metro/src/Bundler/util');
17
+ const {getAssetData} = require('metro/private/Assets');
18
+ const {generateAssetCodeFileAst} = require('metro/private/Bundler/util');
19
19
  const path = require('path');
20
20
 
21
21
  async function transform(