From 40ab7fdf7ebaf3337d0f51a3c088f86e28542dfc Mon Sep 17 00:00:00 2001 From: D N <4661784+retyui@users.noreply.github.com> Date: Fri, 12 Jun 2026 13:31:16 +0200 Subject: [PATCH 1/2] feat: Adapt an inline-plugin for more cases --- .../metro-babel-transformer/types/index.d.ts | 15 +- .../types/stores/AutoCleanFileStore.d.ts | 4 +- packages/metro-config/types/types.d.ts | 14 +- .../types/plugins/FileDataPlugin.d.ts | 4 +- .../types/createDefaultContext.d.ts | 8 +- packages/metro-resolver/types/types.d.ts | 14 +- .../metro-runtime/types/modules/types.d.ts | 11 +- .../src/__mocks__/test-helpers.js | 19 +- .../src/__tests__/inline-plugin-test.js | 196 ++++++++++++++++++ .../src/inline-plugin.js | 8 +- .../src/utils/createInlinePlatformChecks.js | 152 +++++++++++--- .../types/inline-plugin.d.ts | 4 +- .../utils/createInlinePlatformChecks.d.ts | 6 +- .../Serializers/getRamBundleInfo.d.ts | 19 +- .../DeltaBundler/Serializers/helpers/js.d.ts | 4 +- packages/metro/types/DeltaBundler/types.d.ts | 8 +- .../worker/collectDependencies.d.ts | 8 +- packages/metro/types/Server.d.ts | 15 +- packages/metro/types/Server/symbolicate.d.ts | 6 +- packages/metro/types/index.d.ts | 6 +- packages/metro/types/lib/JsonReporter.d.ts | 8 +- ...arseBundleOptionsFromBundleRequestUrl.d.ts | 4 +- packages/metro/types/shared/types.d.ts | 4 +- 23 files changed, 445 insertions(+), 92 deletions(-) diff --git a/packages/metro-babel-transformer/types/index.d.ts b/packages/metro-babel-transformer/types/index.d.ts index 02c6b4f6d6..b7baf124f0 100644 --- a/packages/metro-babel-transformer/types/index.d.ts +++ b/packages/metro-babel-transformer/types/index.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<85fbaab46b394d6f88bab75eee343d36>> + * @generated SignedSource<<3c63576001545645ba590c12adfd1748>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-babel-transformer/src/index.js @@ -52,7 +52,18 @@ export type BabelFileFunctionMapMetadata = Readonly<{ mappings: string; }>; export type BabelFileImportLocsMetadata = ReadonlySet; -export type MetroBabelFileMetadata = Omit & { +export type MetroBabelFileMetadata = Omit< + BabelFileMetadata, + keyof { + metro?: + | null + | undefined + | { + functionMap?: null | undefined | BabelFileFunctionMapMetadata; + unstable_importDeclarationLocs?: null | undefined | BabelFileImportLocsMetadata; + }; + } +> & { metro?: | null | undefined diff --git a/packages/metro-cache/types/stores/AutoCleanFileStore.d.ts b/packages/metro-cache/types/stores/AutoCleanFileStore.d.ts index d6e2e55222..f3cc4b3a81 100644 --- a/packages/metro-cache/types/stores/AutoCleanFileStore.d.ts +++ b/packages/metro-cache/types/stores/AutoCleanFileStore.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-cache/src/stores/AutoCleanFileStore.js @@ -20,7 +20,7 @@ import type {Options} from './FileStore'; import FileStore from './FileStore'; type CleanOptions = Readonly< - Omit & { + Omit & { intervalMs?: number; cleanupThresholdMs?: number; } diff --git a/packages/metro-config/types/types.d.ts b/packages/metro-config/types/types.d.ts index fda3ce1d02..879d4a164b 100644 --- a/packages/metro-config/types/types.d.ts +++ b/packages/metro-config/types/types.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<3f0c3f9093e9a6eadd3a8885218f8f45>> + * @generated SignedSource<<2be417f711921cf51677da9330cc97d8>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-config/src/types.js @@ -112,7 +112,17 @@ type SerializerConfigT = { processModuleFilter: (modules: Module) => boolean; isThirdPartyModule: (module: Readonly<{path: string}>) => boolean; }; -type TransformerConfigT = Omit & { +type TransformerConfigT = Omit< + JsTransformerConfig, + keyof { + getTransformOptions: GetTransformOptions; + transformVariants: { + readonly [name: string]: Partial; + }; + publicPath: string; + unstable_workerThreads: boolean; + } +> & { getTransformOptions: GetTransformOptions; transformVariants: { readonly [name: string]: Partial; diff --git a/packages/metro-file-map/types/plugins/FileDataPlugin.d.ts b/packages/metro-file-map/types/plugins/FileDataPlugin.d.ts index 1bd88a6d63..d60ffdbaad 100644 --- a/packages/metro-file-map/types/plugins/FileDataPlugin.d.ts +++ b/packages/metro-file-map/types/plugins/FileDataPlugin.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<54f6248424a42ea2eb7966fc06105eb3>> + * @generated SignedSource<<928292862ce27bcd6b8441ad5cc402ee>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-file-map/src/plugins/FileDataPlugin.js @@ -18,7 +18,7 @@ import type {FileMapPlugin, FileMapPluginInitOptions, FileMapPluginWorker, ReadonlyFileSystemChanges, V8Serializable} from '../flow-types'; export type FileDataPluginOptions = Readonly< - Omit & { + Omit & { name: string; cacheKey: string; } diff --git a/packages/metro-resolver/types/createDefaultContext.d.ts b/packages/metro-resolver/types/createDefaultContext.d.ts index 1232c95567..26c1a20b89 100644 --- a/packages/metro-resolver/types/createDefaultContext.d.ts +++ b/packages/metro-resolver/types/createDefaultContext.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<31a9b3b916ff14dc24a254ab9039a8c9>> + * @generated SignedSource<<91afc5df98c20f7940ae313045da7d51>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-resolver/src/createDefaultContext.js @@ -18,11 +18,7 @@ import type {ResolutionContext} from './types'; import type {TransformResultDependency} from 'metro/private/DeltaBundler/types'; -type PartialContext = Readonly< - Omit & { - redirectModulePath?: ResolutionContext['redirectModulePath']; - } ->; +type PartialContext = Readonly & {redirectModulePath?: ResolutionContext['redirectModulePath']}>; /** * Helper used by the `metro` package to create the `ResolutionContext` object. * As context values can be overridden by callers, this occurs externally to diff --git a/packages/metro-resolver/types/types.d.ts b/packages/metro-resolver/types/types.d.ts index af18b361a0..0889817486 100644 --- a/packages/metro-resolver/types/types.d.ts +++ b/packages/metro-resolver/types/types.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<58467833638b1ab05fcf02a24738f4ab>> + * @generated SignedSource<<1ac471db899e408116787abf9da2d550>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-resolver/src/types.js @@ -74,7 +74,11 @@ export type PackageInfo = Readonly<{ packageJson: PackageJson; rootPath: string; }>; -export type PackageForModule = Readonly & {packageRelativePath: string}>; +export type PackageForModule = Readonly< + Omit & { + packageRelativePath: string; + } +>; /** * Check existence of a single file. */ @@ -176,7 +180,11 @@ export type ResolutionContext = Readonly<{ unstable_incrementalResolution: boolean; unstable_logWarning: (message: string) => void; }>; -export type CustomResolutionContext = Readonly & {resolveRequest: CustomResolver}>; +export type CustomResolutionContext = Readonly< + Omit & { + resolveRequest: CustomResolver; + } +>; export type CustomResolver = (context: CustomResolutionContext, moduleName: string, platform: string | null) => Resolution; export type CustomResolverOptions = { readonly [$$Key$$: string]: unknown; diff --git a/packages/metro-runtime/types/modules/types.d.ts b/packages/metro-runtime/types/modules/types.d.ts index 366a81e8eb..28faa78508 100644 --- a/packages/metro-runtime/types/modules/types.d.ts +++ b/packages/metro-runtime/types/modules/types.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<6699c9b4e3ffd1142e3253a834be43e9>> + * @generated SignedSource<<3ff5e6379d94db2cf24b884dc9b00e3e>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-runtime/src/modules/types.js @@ -27,9 +27,14 @@ export type DeltaBundle = { readonly deleted: ReadonlyArray; }; export type BundleVariant = - | Readonly & {base: true; revisionId: string}> | Readonly< - Omit & { + Omit & { + base: true; + revisionId: string; + } + > + | Readonly< + Omit & { base: false; revisionId: string; } diff --git a/packages/metro-transform-plugins/src/__mocks__/test-helpers.js b/packages/metro-transform-plugins/src/__mocks__/test-helpers.js index 785dbdf50d..05e75ab994 100644 --- a/packages/metro-transform-plugins/src/__mocks__/test-helpers.js +++ b/packages/metro-transform-plugins/src/__mocks__/test-helpers.js @@ -20,7 +20,8 @@ const nullthrows = require('nullthrows'); function makeTransformOptions( plugins: ReadonlyArray, - options: OptionsT, + pluginOptions: OptionsT, + babelOptions?: BabelCoreOptions, ): BabelCoreOptions { return { ast: true, @@ -30,9 +31,12 @@ function makeTransformOptions( compact: true, configFile: false, plugins: plugins.length - ? plugins.map(plugin => [plugin, options]) + ? plugins.map(plugin => [plugin, pluginOptions]) : [() => ({visitor: {}})], sourceType: 'module', + filename: + '/Users/test/app/node_modules/react-native/Libraries/Components/Pressable/useAndroidRippleForView.js', + ...babelOptions, }; } @@ -55,10 +59,11 @@ function transformToAst( plugins: ReadonlyArray, code: string, options: T, + babelOptions?: BabelCoreOptions, ): BabelNodeFile { const transformResult = transformSync( code, - makeTransformOptions(plugins, options), + makeTransformOptions(plugins, options, babelOptions), ); const ast = nullthrows(transformResult.ast); validateOutputAst(ast); @@ -69,8 +74,9 @@ function transform( code: string, plugins: ReadonlyArray, options: ?EntryOptions, + babelOptions?: BabelCoreOptions, ) { - return generate(transformToAst(plugins, code, options)).code; + return generate(transformToAst(plugins, code, options, babelOptions)).code; } exports.compare = function ( @@ -78,8 +84,11 @@ exports.compare = function ( code: string, expected: string, options: ?EntryOptions = {}, + babelOptions?: BabelCoreOptions, ) { - expect(transform(code, plugins, options)).toBe(transform(expected, [], {})); + expect(transform(code, plugins, options, babelOptions)).toBe( + transform(expected, [], {}), + ); }; exports.transformToAst = transformToAst; diff --git a/packages/metro-transform-plugins/src/__tests__/inline-plugin-test.js b/packages/metro-transform-plugins/src/__tests__/inline-plugin-test.js index a1b1010354..1fed423188 100644 --- a/packages/metro-transform-plugins/src/__tests__/inline-plugin-test.js +++ b/packages/metro-transform-plugins/src/__tests__/inline-plugin-test.js @@ -934,4 +934,200 @@ describe('inline constants', () => { compare([stripFlow, inlinePlugin], code, expected, {dev: false}); }); + + test('replaces Platform.OS in the code if Platform is a top level relative Node.js require()', () => { + // Source code before `@react-native/babel-preset`: + // ``` + // const Platform = require('../../Utilities/Platform').default; + // ``` + const code = ` + var Platform = require('../../Utilities/Platform').default; + var test = Platform.OS === 'ios' ? 'ios' : 'not-ios'; + `; + + compare([inlinePlugin], code, code.replace('Platform.OS', '"android"'), { + inlinePlatform: true, + platform: 'android', + }); + }); + + test('replaces Platform.OS in the code if Platform is a top level relative ES import', () => { + // Source code before `@react-native/babel-preset`: + // ``` + // import Platform from '../../Utilities/Platform'; + // ``` + const code = ` + var _Platform = _interopRequireDefault(require("../../Utilities/Platform")); + var test = _Platform.default.OS === 'ios' ? 'ios' : 'not-ios'; + `; + + compare( + [inlinePlugin], + code, + code.replace('_Platform.default.OS', '"android"'), + { + inlinePlatform: true, + platform: 'android', + }, + ); + }); + + test('should not replace Platform.OS in the code if Platform was exported from unexpected place', () => { + // Source code before `@react-native/babel-preset`: + // ``` + // import Platform from '../../diff/lib/name.js'; + // ``` + const code = ` + var _Platform = _interopRequireDefault(require("../../diff/lib/name.js")); + var test = _Platform.default.OS === 'ios' ? 'ios' : 'not-ios'; + `; + + compare([inlinePlugin], code, code, { + inlinePlatform: true, + platform: 'android', + }); + }); + + test('replaces Platform.OS in the code if babel helper wrap require call', () => { + // Source code before `@react-native/babel-preset`: + // ``` + // import * as RN from 'react-native'; + // ``` + const code = ` + var RN = _interopRequireWildcard(require('react-native')); + var test = RN.Platform.OS === 'ios' ? 'ios' : 'not-ios'; + `; + + compare([inlinePlugin], code, code.replace('RN.Platform.OS', '"android"'), { + inlinePlatform: 'true', + platform: 'android', + }); + }); + + test('replaces Platform.select in the code if Platform is a top level relative Node.js require()', () => { + // Source code before `@react-native/babel-preset`: + // ``` + // const Platform = require('../../Utilities/Platform').default; + // ``` + const code = ` + var Platform = require('../../Utilities/Platform').default; + + function a() { + Platform.select({ios: 1, android: 2}); + var b = a.Platform.select({}); + } + `; + + compare([inlinePlugin], code, code.replace(/Platform\.select[^;]+/, '2'), { + inlinePlatform: 'true', + platform: 'android', + }); + }); + + test('replaces Platform.select in the code if Platform is a top level relative ES import', () => { + // Source code before `@react-native/babel-preset`: + // ``` + // import Platform from '../../Utilities/Platform'; + // ``` + const code = ` + var _Platform = _interopRequireDefault(require("../../Utilities/Platform")); + + function a() { + _Platform.default.select({ios: 1, android: 2}); + var b = a.Platform.select({}); + } + `; + + compare( + [inlinePlugin], + code, + code.replace(/_Platform\.default\.select[^;]+/, '2'), + { + inlinePlatform: 'true', + platform: 'android', + }, + ); + }); + + test('should not replace Platform.select in the code if Platform was imported from non react-native package files', () => { + // Source code before `@react-native/babel-preset`: + // ``` + // import Platform from '../../Utilities/Platform'; + // ``` + const code = ` + var _Platform = _interopRequireDefault(require("../Platform")); + + function a() { + _Platform.default.select({ios: 1, android: 2}); + var b = a.Platform.select({}); + } + `; + + compare( + [inlinePlugin], + code, + code, + { + inlinePlatform: 'true', + platform: 'android', + }, + { + filename: '/Users/test/app/src/myCode.js', + }, + ); + }); + + test('replaces Platform.select in the code if Platform is a top level relative ES import on Windows', () => { + // Source code before `@react-native/babel-preset`: + // ``` + // import Platform from '../../Utilities/Platform'; + // ``` + const code = ` + var _Platform = _interopRequireDefault(require("../../Utilities/Platform")); + + function a() { + _Platform.default.select({ios: 1, android: 2}); + var b = a.Platform.select({}); + } + `; + + compare( + [inlinePlugin], + code, + code.replace(/_Platform\.default\.select[^;]+/, '2'), + { + inlinePlatform: 'true', + platform: 'android', + }, + { + filename: + 'C:\\Users\\test\\app\\node_modules\\react-native\\Libraries\\Components\\Pressable\\useAndroidRippleForView.js', + }, + ); + }); + + test('replaces Platform.select in the code if babel helper wrap require call', () => { + // Source code before `@react-native/babel-preset`: + // ``` + // import * as RN from 'react-native'; + // ``` + const code = ` + var RN = _interopRequireWildcard(require('react-native')); + + function a() { + RN.Platform.select({ios: 1, android: 2}); + var b = a.Platform.select({}); + } + `; + + compare( + [inlinePlugin], + code, + code.replace(/RN\.Platform\.select[^;]+/, '2'), + { + inlinePlatform: 'true', + platform: 'android', + }, + ); + }); }); diff --git a/packages/metro-transform-plugins/src/inline-plugin.js b/packages/metro-transform-plugins/src/inline-plugin.js index 2cc055d260..a25c3316b2 100644 --- a/packages/metro-transform-plugins/src/inline-plugin.js +++ b/packages/metro-transform-plugins/src/inline-plugin.js @@ -31,7 +31,7 @@ export type Options = Readonly<{ platform: string, }>; -type State = {opts: Options}; +type State = {opts: Options, filename?: string}; const env = {name: 'env'}; const nodeEnv = {name: 'NODE_ENV'}; @@ -137,11 +137,12 @@ export default function inlinePlugin( const node = path.node; const scope = path.scope; const opts = state.opts; + const filename = state.filename; if (!isLeftHandSideOfAssignmentExpression(node, path.parent)) { if ( opts.inlinePlatform && - isPlatformNode(node, scope, !!opts.isWrapped) + isPlatformNode(node, scope, !!opts.isWrapped, filename) ) { path.replaceWith(t.stringLiteral(opts.platform)); } else if (!opts.dev && isProcessEnvNodeEnv(node, scope)) { @@ -156,10 +157,11 @@ export default function inlinePlugin( const scope = path.scope; const arg = node.arguments[0]; const opts = state.opts; + const filename = state.filename; if ( opts.inlinePlatform && - isPlatformSelectNode(node, scope, !!opts.isWrapped) && + isPlatformSelectNode(node, scope, !!opts.isWrapped, filename) && isObjectExpression(arg) ) { if (hasStaticProperties(arg)) { diff --git a/packages/metro-transform-plugins/src/utils/createInlinePlatformChecks.js b/packages/metro-transform-plugins/src/utils/createInlinePlatformChecks.js index 86121f16fa..0b5606c796 100644 --- a/packages/metro-transform-plugins/src/utils/createInlinePlatformChecks.js +++ b/packages/metro-transform-plugins/src/utils/createInlinePlatformChecks.js @@ -15,21 +15,40 @@ import type {CallExpression, MemberExpression} from '@babel/types'; // eslint-disable-next-line import/no-extraneous-dependencies import typeof * as Types from '@babel/types'; -const importMap = new Map([['ReactNative', 'react-native']]); +const PLATFORM_MODULE_RELATIVE_IMPORTS = /^(\.\.?\/).*Platform(\.js)?$/; + +const allowedPlatformImports = [ + // 1. ES imports: `import {Platform} from 'react-native'` + (importSource: string): boolean => importSource === 'react-native', + // 2. Relative imports inside react-native package: `import Platform from '../../Utilities/Platform'` + (importSource: string): boolean => + PLATFORM_MODULE_RELATIVE_IMPORTS.test(importSource), + // 3. Haste modules `require('Platform')` + (importSource: string): boolean => importSource === 'Platform', + // 4. Exotic imports `require('React').Platform` + (importSource: string): boolean => importSource === 'React', +]; type PlatformChecks = { isPlatformNode: ( node: MemberExpression, scope: Scope, isWrappedModule: boolean, + filename?: string, ) => boolean, isPlatformSelectNode: ( node: CallExpression, scope: Scope, isWrappedModule: boolean, + filename?: string, ) => boolean, }; +const REACT_NATIVE_MODULES_REGEX = /[\/\\]node_modules[\/\\]react-native[\/\\]/; + +const isReactNativeFile = (filename?: string): boolean => + filename != null && REACT_NATIVE_MODULES_REGEX.test(filename); + export default function createInlinePlatformChecks( t: Types, requireName: string = 'require', @@ -45,32 +64,43 @@ export default function createInlinePlatformChecks( node: MemberExpression, scope: Scope, isWrappedModule: boolean, + filename?: string, ): boolean => - isPlatformOS(node, scope, isWrappedModule) || - isReactPlatformOS(node, scope, isWrappedModule); + isIdentifier(node.property, {name: 'OS'}) && + (isPlatformOS(node, scope, isWrappedModule) || + isReactPlatformOS(node, scope, isWrappedModule) || + isPlatformDefaultOS(node, scope, isWrappedModule, filename)); const isPlatformSelectNode = ( node: CallExpression, scope: Scope, isWrappedModule: boolean, + filename?: string, ): boolean => - isPlatformSelect(node, scope, isWrappedModule) || - isReactPlatformSelect(node, scope, isWrappedModule); + isMemberExpression(node.callee) && + isIdentifier(node.callee.property, {name: 'select'}) && + (isPlatformSelect(node, scope, isWrappedModule) || + isReactPlatformSelect(node, scope, isWrappedModule) || + isPlatformDefaultSelect(node, scope, isWrappedModule, filename)); + /** + * Platform.OS + */ const isPlatformOS = ( node: MemberExpression, scope: Scope, isWrappedModule: boolean, ): boolean => - isIdentifier(node.property, {name: 'OS'}) && isImportOrGlobal(node.object, scope, [{name: 'Platform'}], isWrappedModule); + /** + * React.Platform.OS + */ const isReactPlatformOS = ( node: MemberExpression, scope: Scope, isWrappedModule: boolean, ): boolean => - isIdentifier(node.property, {name: 'OS'}) && isMemberExpression(node.object) && isIdentifier(node.object.property, {name: 'Platform'}) && isImportOrGlobal( @@ -81,13 +111,35 @@ export default function createInlinePlatformChecks( isWrappedModule, ); + /** + * `_Platform.default.OS` + */ + const isPlatformDefaultOS = ( + node: MemberExpression, + scope: Scope, + isWrappedModule: boolean, + filename?: string, + ): boolean => + isReactNativeFile(filename) && + isMemberExpression(node.object) && + isIdentifier(node.object.property, {name: 'default'}) && + isIdentifier(node.object.object, {name: '_Platform'}) && + isImportOrGlobal( + // $FlowFixMe[incompatible-type] + node.object.object, + scope, + [], + isWrappedModule, + ); + + /** + * Platform.select(...) + */ const isPlatformSelect = ( node: CallExpression, scope: Scope, isWrappedModule: boolean, ): boolean => - isMemberExpression(node.callee) && - isIdentifier(node.callee.property, {name: 'select'}) && isImportOrGlobal( // $FlowFixMe[incompatible-type] node.callee.object, @@ -96,13 +148,14 @@ export default function createInlinePlatformChecks( isWrappedModule, ); + /** + * React.Platform.select(...) + */ const isReactPlatformSelect = ( node: CallExpression, scope: Scope, isWrappedModule: boolean, ): boolean => - isMemberExpression(node.callee) && - isIdentifier(node.callee.property, {name: 'select'}) && isMemberExpression(node.callee.object) && isIdentifier(node.callee.object.property, {name: 'Platform'}) && isImportOrGlobal( @@ -114,24 +167,51 @@ export default function createInlinePlatformChecks( isWrappedModule, ); - const isRequireCall = ( - node: BabelNodeExpression, - dependencyId: string, + /** + * _Platform.default.select(...) + */ + const isPlatformDefaultSelect = ( + node: CallExpression, scope: Scope, + isWrappedModule: boolean, + filename?: string, ): boolean => - isCallExpression(node) && - isIdentifier(node.callee, {name: requireName}) && - checkRequireArgs(node.arguments, dependencyId); + isReactNativeFile(filename) && + isMemberExpression(node.callee.object) && + isIdentifier(node.callee.object.property, {name: 'default'}) && + // $FlowFixMe[incompatible-type] + // $FlowFixMe[incompatible-use] + isIdentifier(node.callee.object.object, {name: '_Platform'}) && + isImportOrGlobal( + // $FlowFixMe[incompatible-type] + // $FlowFixMe[incompatible-use] + node.callee.object.object, + scope, + [], + isWrappedModule, + ); - const isImport = ( - node: BabelNodeExpression, - scope: Scope, - patterns: Array<{name: string}>, - ): boolean => - patterns.some((pattern: {name: string}) => { - const importName = importMap.get(pattern.name) || pattern.name; - return isRequireCall(node, importName, scope); - }); + const isRequireCall = (node: BabelNodeExpression): boolean => + // 1. Simple case: `require('react-native')` + (isCallExpression(node) && + isIdentifier(node.callee, {name: requireName}) && + checkRequireArgs(node.arguments)) || + // 2. Require a babel helpers + // ``` + // // Before + // import Platform from '../Platform'; + // import * as RN from 'react-native'; + // // After + // var _Platform = _interopRequireDefault(require('../Platform')); + // var RN = _interopRequireWildcard(require('react-native')); + // ``` + ((isIdentifier(node.callee, {name: '_interopRequireDefault'}) || + isIdentifier(node.callee, {name: '_interopRequireWildcard'})) && + // $FlowFixMe[incompatible-type] + // $FlowFixMe[incompatible-use] + isRequireCall(node.arguments[0])); + + const isImport = (node: BabelNodeExpression): boolean => isRequireCall(node); const isImportOrGlobal = ( node: BabelNodeExpression, @@ -143,12 +223,12 @@ export default function createInlinePlatformChecks( isIdentifier(node, pattern), ); if ( - !!identifier && + identifier != null && isToplevelBinding(scope.getBinding(identifier.name), isWrappedModule) ) { return true; } - if (isImport(node, scope, patterns)) { + if (isImport(node)) { return true; } if (isIdentifier(node)) { @@ -160,7 +240,7 @@ export default function createInlinePlatformChecks( ) { const init = binding.path.node.init; // $FlowFixMe[incompatible-type] Flow doesn't narrow binding.path.node through isVariableDeclarator() - if (init != null && isImport(init, scope, patterns)) { + if (init != null && isImport(init)) { return true; } } @@ -174,14 +254,20 @@ export default function createInlinePlatformChecks( | BabelNodeSpreadElement | BabelNodeArgumentPlaceholder, >, - dependencyId: string, ): boolean => { - const pattern = t.stringLiteral(dependencyId); return ( - isStringLiteral(args[0], pattern) || + // Basic case: `require('')` + (isStringLiteral(args[0]) && + allowedPlatformImports.some( + check => typeof args[0].value === 'string' && check(args[0].value), + )) || + // Transformed require calls: `require(arbitraryMapName[321], '')` (isMemberExpression(args[0]) && isNumericLiteral(args[0].property) && - isStringLiteral(args[1], pattern)) + isStringLiteral(args[1]) && + allowedPlatformImports.some( + check => typeof args[1].value === 'string' && check(args[1].value), + )) ); }; diff --git a/packages/metro-transform-plugins/types/inline-plugin.d.ts b/packages/metro-transform-plugins/types/inline-plugin.d.ts index 22e860d6b5..f8e33706da 100644 --- a/packages/metro-transform-plugins/types/inline-plugin.d.ts +++ b/packages/metro-transform-plugins/types/inline-plugin.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<6ad5ab4e71a8640def9e767946693ec9>> + * @generated SignedSource<<072607b544aed94524450c6a0b5c3253>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-transform-plugins/src/inline-plugin.js @@ -26,6 +26,6 @@ export type Options = Readonly<{ requireName?: string; platform: string; }>; -type State = {opts: Options}; +type State = {opts: Options; filename?: string}; declare function inlinePlugin($$PARAM_0$$: {types: Types}, options: Options): PluginObj; export default inlinePlugin; diff --git a/packages/metro-transform-plugins/types/utils/createInlinePlatformChecks.d.ts b/packages/metro-transform-plugins/types/utils/createInlinePlatformChecks.d.ts index 5200d6aff2..cc4a48b8f1 100644 --- a/packages/metro-transform-plugins/types/utils/createInlinePlatformChecks.d.ts +++ b/packages/metro-transform-plugins/types/utils/createInlinePlatformChecks.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<03de55110a92713945c8e6470f410a10>> + * @generated SignedSource<<6d7a6c754c0072c22e60af364433386e>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-transform-plugins/src/utils/createInlinePlatformChecks.js @@ -21,8 +21,8 @@ import type {CallExpression, MemberExpression} from '@babel/types'; type Types = typeof $$IMPORT_TYPEOF_1$$; type PlatformChecks = { - isPlatformNode: (node: MemberExpression, scope: Scope, isWrappedModule: boolean) => boolean; - isPlatformSelectNode: (node: CallExpression, scope: Scope, isWrappedModule: boolean) => boolean; + isPlatformNode: (node: MemberExpression, scope: Scope, isWrappedModule: boolean, filename?: string) => boolean; + isPlatformSelectNode: (node: CallExpression, scope: Scope, isWrappedModule: boolean, filename?: string) => boolean; }; declare function createInlinePlatformChecks(t: Types, requireName?: string): PlatformChecks; export default createInlinePlatformChecks; diff --git a/packages/metro/types/DeltaBundler/Serializers/getRamBundleInfo.d.ts b/packages/metro/types/DeltaBundler/Serializers/getRamBundleInfo.d.ts index 5d502dc939..645d042c0c 100644 --- a/packages/metro/types/DeltaBundler/Serializers/getRamBundleInfo.d.ts +++ b/packages/metro/types/DeltaBundler/Serializers/getRamBundleInfo.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<> + * @generated SignedSource<<6be27173d3ee2d221a2679d8392fed0a>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/DeltaBundler/Serializers/getRamBundleInfo.js @@ -21,8 +21,21 @@ import type {SourceMapGeneratorOptions} from './sourceMapGenerator'; import type {GetTransformOptions} from 'metro-config'; type Options = Readonly< - Omit & - Omit & { + Omit< + SerializerOptions, + | keyof SourceMapGeneratorOptions + | keyof { + getTransformOptions: null | undefined | GetTransformOptions; + platform: null | undefined | string; + } + > & + Omit< + SourceMapGeneratorOptions, + keyof { + getTransformOptions: null | undefined | GetTransformOptions; + platform: null | undefined | string; + } + > & { getTransformOptions: null | undefined | GetTransformOptions; platform: null | undefined | string; } diff --git a/packages/metro/types/DeltaBundler/Serializers/helpers/js.d.ts b/packages/metro/types/DeltaBundler/Serializers/helpers/js.d.ts index b3ea436de3..05f720b6c7 100644 --- a/packages/metro/types/DeltaBundler/Serializers/helpers/js.d.ts +++ b/packages/metro/types/DeltaBundler/Serializers/helpers/js.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/DeltaBundler/Serializers/helpers/js.js @@ -18,8 +18,6 @@ import type {MixedOutput, Module} from '../../types'; import type {JsOutput} from 'metro-transform-worker'; -import path from 'node:path'; - export type Options = Readonly<{ createModuleId: ($$PARAM_0$$: string) => number | string; dev: boolean; diff --git a/packages/metro/types/DeltaBundler/types.d.ts b/packages/metro/types/DeltaBundler/types.d.ts index ffd1307eed..ad14929e55 100644 --- a/packages/metro/types/DeltaBundler/types.d.ts +++ b/packages/metro/types/DeltaBundler/types.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<295faf3dbcdeffd6b15b9fa949b501cb>> + * @generated SignedSource<<8c9fef2fd822c16190446b9a276bca51>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/DeltaBundler/types.js @@ -95,7 +95,11 @@ export type TransformResult = Readonly<{ output: ReadonlyArray; unstable_transformResultKey?: null | undefined | string; }>; -export type TransformResultWithSource = Readonly, 'getSource'> & {getSource: () => Buffer}>; +export type TransformResultWithSource = Readonly< + Omit, keyof {getSource: () => Buffer}> & { + getSource: () => Buffer; + } +>; export type TransformFn = ($$PARAM_0$$: string, $$PARAM_1$$: null | undefined | RequireContext) => Promise>; export type ResolveFn = (from: string, dependency: TransformResultDependency) => BundlerResolution; export type AllowOptionalDependenciesWithOptions = { diff --git a/packages/metro/types/ModuleGraph/worker/collectDependencies.d.ts b/packages/metro/types/ModuleGraph/worker/collectDependencies.d.ts index e37ba74c90..a357428adb 100644 --- a/packages/metro/types/ModuleGraph/worker/collectDependencies.d.ts +++ b/packages/metro/types/ModuleGraph/worker/collectDependencies.d.ts @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @noformat - * @generated SignedSource<<780e521123ff9528911d3a6307815dee>> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/ModuleGraph/worker/collectDependencies.js @@ -37,7 +37,11 @@ type DependencyData = Readonly<{ /** Context for requiring a collection of modules. */ contextParams?: RequireContextParams; }>; -export type MutableInternalDependency = Omit & {locs: Array; index: number; name: string}; +export type MutableInternalDependency = Omit; index: number; name: string}> & { + locs: Array; + index: number; + name: string; +}; export type InternalDependency = Readonly; export type State = { asyncRequireModulePathStringLiteral: null | undefined | StringLiteral; diff --git a/packages/metro/types/Server.d.ts b/packages/metro/types/Server.d.ts index 688eaf0385..391b621103 100644 --- a/packages/metro/types/Server.d.ts +++ b/packages/metro/types/Server.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/Server.js @@ -64,7 +64,18 @@ declare class Server { }>; static DEFAULT_BUNDLE_OPTIONS: Omit< typeof Server.DEFAULT_GRAPH_OPTIONS, - 'excludeSource' | 'inlineSourceMap' | 'lazy' | 'modulesOnly' | 'onProgress' | 'runModule' | 'shallow' | 'sourceMapUrl' | 'sourceUrl' | 'sourcePaths' + keyof { + excludeSource: false; + inlineSourceMap: false; + lazy: false; + modulesOnly: false; + onProgress: null; + runModule: true; + shallow: false; + sourceMapUrl: null; + sourceUrl: null; + sourcePaths: SourcePathsMode; + } > & { excludeSource: false; inlineSourceMap: false; diff --git a/packages/metro/types/Server/symbolicate.d.ts b/packages/metro/types/Server/symbolicate.d.ts index 494195184e..9ae72171bb 100644 --- a/packages/metro/types/Server/symbolicate.d.ts +++ b/packages/metro/types/Server/symbolicate.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<2f4c251ae251c041be068cf3d50ce560>> + * @generated SignedSource<<823c26d53c6b12598c83c2bdee576fc7>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/Server/symbolicate.js @@ -24,9 +24,7 @@ export type StackFrameInput = { readonly column: null | undefined | number; readonly methodName: null | undefined | string; }; -export type IntermediateStackFrame = Omit & { - collapse?: boolean; -}; +export type IntermediateStackFrame = Omit & {collapse?: boolean}; export type StackFrameOutput = Readonly; declare function symbolicate(stack: ReadonlyArray, maps: Iterable<[string, ExplodedSourceMap]>, config: ConfigT, extraData: unknown): Promise>; export default symbolicate; diff --git a/packages/metro/types/index.d.ts b/packages/metro/types/index.d.ts index 0fe870cbf1..62c8a18e2b 100644 --- a/packages/metro/types/index.d.ts +++ b/packages/metro/types/index.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<4aca97550eb6e579e435254037e38616>> + * @generated SignedSource<<0db5148fb0acea9a8a9da44c1853752a>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/index.flow.js @@ -42,9 +42,7 @@ type MetroMiddleWare = { metroServer: MetroServer; middleware: Middleware; }; -export type RunMetroOptions = Omit & { - waitForBundler?: boolean; -}; +export type RunMetroOptions = Omit & {waitForBundler?: boolean}; export type RunServerOptions = Readonly<{ hasReducedPerformance?: boolean; host?: string; diff --git a/packages/metro/types/lib/JsonReporter.d.ts b/packages/metro/types/lib/JsonReporter.d.ts index ae637cb643..6289854d3c 100644 --- a/packages/metro/types/lib/JsonReporter.d.ts +++ b/packages/metro/types/lib/JsonReporter.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<1c9e77c89ab61bbb8fea403a63e33ab2>> + * @generated SignedSource<<5231fd3327eed54836eccb956c1eabc3>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/lib/JsonReporter.js @@ -23,7 +23,11 @@ export type SerializedError = { errors?: ReadonlyArray; cause?: SerializedError; }; -export type SerializedEvent = TEvent extends {error: Error} ? Omit, 'error'> & {error: SerializedError} : TEvent; +export type SerializedEvent = TEvent extends {error: Error} + ? Omit, keyof {error: SerializedError}> & { + error: SerializedError; + } + : TEvent; declare class JsonReporter { constructor(stream: Writable); /** diff --git a/packages/metro/types/lib/parseBundleOptionsFromBundleRequestUrl.d.ts b/packages/metro/types/lib/parseBundleOptionsFromBundleRequestUrl.d.ts index be62439edd..a6b6e782ac 100644 --- a/packages/metro/types/lib/parseBundleOptionsFromBundleRequestUrl.d.ts +++ b/packages/metro/types/lib/parseBundleOptionsFromBundleRequestUrl.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/lib/parseBundleOptionsFromBundleRequestUrl.js @@ -17,5 +17,5 @@ import type {BundleOptions} from '../shared/types'; -declare function parseBundleOptionsFromBundleRequestUrl(rawNonJscSafeUrlEncodedUrl: string, platforms: Set): Omit & {bundleType: string}; +declare function parseBundleOptionsFromBundleRequestUrl(rawNonJscSafeUrlEncodedUrl: string, platforms: Set): Omit & {bundleType: string}; export default parseBundleOptionsFromBundleRequestUrl; diff --git a/packages/metro/types/shared/types.d.ts b/packages/metro/types/shared/types.d.ts index c79266edab..de0aaf7e59 100644 --- a/packages/metro/types/shared/types.d.ts +++ b/packages/metro/types/shared/types.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<6d2429c6b34b624881402caa12117d34>> + * @generated SignedSource<<7c33bbd1ff74878c022143eb61319922>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/shared/types.js @@ -101,7 +101,7 @@ export type ModuleTransportLikeStrict = { readonly name?: string; readonly sourcePath: string; }; -export type RamModuleTransport = Omit & {readonly source: string; readonly type: string}; +export type RamModuleTransport = Omit & {readonly source: string; readonly type: string}; export type OutputOptions = { bundleOutput: string; bundleEncoding?: 'utf8' | 'utf16le' | 'ascii'; From 96c43d7fb2d50db8e28070340437908c8c564d54 Mon Sep 17 00:00:00 2001 From: D N <4661784+retyui@users.noreply.github.com> Date: Tue, 21 Jul 2026 09:36:54 +0200 Subject: [PATCH 2/2] Run: `yarn run build-ts-defs` --- .../metro-babel-transformer/types/index.d.ts | 15 ++------------- .../types/stores/AutoCleanFileStore.d.ts | 4 ++-- packages/metro-config/types/types.d.ts | 14 ++------------ .../types/plugins/FileDataPlugin.d.ts | 4 ++-- .../types/createDefaultContext.d.ts | 8 ++++++-- packages/metro-resolver/types/types.d.ts | 14 +++----------- .../metro-runtime/types/modules/types.d.ts | 11 +++-------- .../Serializers/getRamBundleInfo.d.ts | 19 +++---------------- .../DeltaBundler/Serializers/helpers/js.d.ts | 4 +++- packages/metro/types/DeltaBundler/types.d.ts | 8 ++------ .../worker/collectDependencies.d.ts | 8 ++------ packages/metro/types/Server.d.ts | 15 ++------------- packages/metro/types/Server/symbolicate.d.ts | 6 ++++-- packages/metro/types/index.d.ts | 6 ++++-- packages/metro/types/lib/JsonReporter.d.ts | 8 ++------ ...arseBundleOptionsFromBundleRequestUrl.d.ts | 4 ++-- packages/metro/types/shared/types.d.ts | 4 ++-- 17 files changed, 46 insertions(+), 106 deletions(-) diff --git a/packages/metro-babel-transformer/types/index.d.ts b/packages/metro-babel-transformer/types/index.d.ts index b7baf124f0..02c6b4f6d6 100644 --- a/packages/metro-babel-transformer/types/index.d.ts +++ b/packages/metro-babel-transformer/types/index.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<3c63576001545645ba590c12adfd1748>> + * @generated SignedSource<<85fbaab46b394d6f88bab75eee343d36>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-babel-transformer/src/index.js @@ -52,18 +52,7 @@ export type BabelFileFunctionMapMetadata = Readonly<{ mappings: string; }>; export type BabelFileImportLocsMetadata = ReadonlySet; -export type MetroBabelFileMetadata = Omit< - BabelFileMetadata, - keyof { - metro?: - | null - | undefined - | { - functionMap?: null | undefined | BabelFileFunctionMapMetadata; - unstable_importDeclarationLocs?: null | undefined | BabelFileImportLocsMetadata; - }; - } -> & { +export type MetroBabelFileMetadata = Omit & { metro?: | null | undefined diff --git a/packages/metro-cache/types/stores/AutoCleanFileStore.d.ts b/packages/metro-cache/types/stores/AutoCleanFileStore.d.ts index f3cc4b3a81..d6e2e55222 100644 --- a/packages/metro-cache/types/stores/AutoCleanFileStore.d.ts +++ b/packages/metro-cache/types/stores/AutoCleanFileStore.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-cache/src/stores/AutoCleanFileStore.js @@ -20,7 +20,7 @@ import type {Options} from './FileStore'; import FileStore from './FileStore'; type CleanOptions = Readonly< - Omit & { + Omit & { intervalMs?: number; cleanupThresholdMs?: number; } diff --git a/packages/metro-config/types/types.d.ts b/packages/metro-config/types/types.d.ts index 879d4a164b..fda3ce1d02 100644 --- a/packages/metro-config/types/types.d.ts +++ b/packages/metro-config/types/types.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<2be417f711921cf51677da9330cc97d8>> + * @generated SignedSource<<3f0c3f9093e9a6eadd3a8885218f8f45>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-config/src/types.js @@ -112,17 +112,7 @@ type SerializerConfigT = { processModuleFilter: (modules: Module) => boolean; isThirdPartyModule: (module: Readonly<{path: string}>) => boolean; }; -type TransformerConfigT = Omit< - JsTransformerConfig, - keyof { - getTransformOptions: GetTransformOptions; - transformVariants: { - readonly [name: string]: Partial; - }; - publicPath: string; - unstable_workerThreads: boolean; - } -> & { +type TransformerConfigT = Omit & { getTransformOptions: GetTransformOptions; transformVariants: { readonly [name: string]: Partial; diff --git a/packages/metro-file-map/types/plugins/FileDataPlugin.d.ts b/packages/metro-file-map/types/plugins/FileDataPlugin.d.ts index d60ffdbaad..1bd88a6d63 100644 --- a/packages/metro-file-map/types/plugins/FileDataPlugin.d.ts +++ b/packages/metro-file-map/types/plugins/FileDataPlugin.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<928292862ce27bcd6b8441ad5cc402ee>> + * @generated SignedSource<<54f6248424a42ea2eb7966fc06105eb3>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-file-map/src/plugins/FileDataPlugin.js @@ -18,7 +18,7 @@ import type {FileMapPlugin, FileMapPluginInitOptions, FileMapPluginWorker, ReadonlyFileSystemChanges, V8Serializable} from '../flow-types'; export type FileDataPluginOptions = Readonly< - Omit & { + Omit & { name: string; cacheKey: string; } diff --git a/packages/metro-resolver/types/createDefaultContext.d.ts b/packages/metro-resolver/types/createDefaultContext.d.ts index 26c1a20b89..1232c95567 100644 --- a/packages/metro-resolver/types/createDefaultContext.d.ts +++ b/packages/metro-resolver/types/createDefaultContext.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<91afc5df98c20f7940ae313045da7d51>> + * @generated SignedSource<<31a9b3b916ff14dc24a254ab9039a8c9>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-resolver/src/createDefaultContext.js @@ -18,7 +18,11 @@ import type {ResolutionContext} from './types'; import type {TransformResultDependency} from 'metro/private/DeltaBundler/types'; -type PartialContext = Readonly & {redirectModulePath?: ResolutionContext['redirectModulePath']}>; +type PartialContext = Readonly< + Omit & { + redirectModulePath?: ResolutionContext['redirectModulePath']; + } +>; /** * Helper used by the `metro` package to create the `ResolutionContext` object. * As context values can be overridden by callers, this occurs externally to diff --git a/packages/metro-resolver/types/types.d.ts b/packages/metro-resolver/types/types.d.ts index 0889817486..af18b361a0 100644 --- a/packages/metro-resolver/types/types.d.ts +++ b/packages/metro-resolver/types/types.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<1ac471db899e408116787abf9da2d550>> + * @generated SignedSource<<58467833638b1ab05fcf02a24738f4ab>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-resolver/src/types.js @@ -74,11 +74,7 @@ export type PackageInfo = Readonly<{ packageJson: PackageJson; rootPath: string; }>; -export type PackageForModule = Readonly< - Omit & { - packageRelativePath: string; - } ->; +export type PackageForModule = Readonly & {packageRelativePath: string}>; /** * Check existence of a single file. */ @@ -180,11 +176,7 @@ export type ResolutionContext = Readonly<{ unstable_incrementalResolution: boolean; unstable_logWarning: (message: string) => void; }>; -export type CustomResolutionContext = Readonly< - Omit & { - resolveRequest: CustomResolver; - } ->; +export type CustomResolutionContext = Readonly & {resolveRequest: CustomResolver}>; export type CustomResolver = (context: CustomResolutionContext, moduleName: string, platform: string | null) => Resolution; export type CustomResolverOptions = { readonly [$$Key$$: string]: unknown; diff --git a/packages/metro-runtime/types/modules/types.d.ts b/packages/metro-runtime/types/modules/types.d.ts index 28faa78508..366a81e8eb 100644 --- a/packages/metro-runtime/types/modules/types.d.ts +++ b/packages/metro-runtime/types/modules/types.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<3ff5e6379d94db2cf24b884dc9b00e3e>> + * @generated SignedSource<<6699c9b4e3ffd1142e3253a834be43e9>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-runtime/src/modules/types.js @@ -27,14 +27,9 @@ export type DeltaBundle = { readonly deleted: ReadonlyArray; }; export type BundleVariant = + | Readonly & {base: true; revisionId: string}> | Readonly< - Omit & { - base: true; - revisionId: string; - } - > - | Readonly< - Omit & { + Omit & { base: false; revisionId: string; } diff --git a/packages/metro/types/DeltaBundler/Serializers/getRamBundleInfo.d.ts b/packages/metro/types/DeltaBundler/Serializers/getRamBundleInfo.d.ts index 645d042c0c..5d502dc939 100644 --- a/packages/metro/types/DeltaBundler/Serializers/getRamBundleInfo.d.ts +++ b/packages/metro/types/DeltaBundler/Serializers/getRamBundleInfo.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<6be27173d3ee2d221a2679d8392fed0a>> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/DeltaBundler/Serializers/getRamBundleInfo.js @@ -21,21 +21,8 @@ import type {SourceMapGeneratorOptions} from './sourceMapGenerator'; import type {GetTransformOptions} from 'metro-config'; type Options = Readonly< - Omit< - SerializerOptions, - | keyof SourceMapGeneratorOptions - | keyof { - getTransformOptions: null | undefined | GetTransformOptions; - platform: null | undefined | string; - } - > & - Omit< - SourceMapGeneratorOptions, - keyof { - getTransformOptions: null | undefined | GetTransformOptions; - platform: null | undefined | string; - } - > & { + Omit & + Omit & { getTransformOptions: null | undefined | GetTransformOptions; platform: null | undefined | string; } diff --git a/packages/metro/types/DeltaBundler/Serializers/helpers/js.d.ts b/packages/metro/types/DeltaBundler/Serializers/helpers/js.d.ts index 05f720b6c7..b3ea436de3 100644 --- a/packages/metro/types/DeltaBundler/Serializers/helpers/js.d.ts +++ b/packages/metro/types/DeltaBundler/Serializers/helpers/js.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/DeltaBundler/Serializers/helpers/js.js @@ -18,6 +18,8 @@ import type {MixedOutput, Module} from '../../types'; import type {JsOutput} from 'metro-transform-worker'; +import path from 'node:path'; + export type Options = Readonly<{ createModuleId: ($$PARAM_0$$: string) => number | string; dev: boolean; diff --git a/packages/metro/types/DeltaBundler/types.d.ts b/packages/metro/types/DeltaBundler/types.d.ts index ad14929e55..ffd1307eed 100644 --- a/packages/metro/types/DeltaBundler/types.d.ts +++ b/packages/metro/types/DeltaBundler/types.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<8c9fef2fd822c16190446b9a276bca51>> + * @generated SignedSource<<295faf3dbcdeffd6b15b9fa949b501cb>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/DeltaBundler/types.js @@ -95,11 +95,7 @@ export type TransformResult = Readonly<{ output: ReadonlyArray; unstable_transformResultKey?: null | undefined | string; }>; -export type TransformResultWithSource = Readonly< - Omit, keyof {getSource: () => Buffer}> & { - getSource: () => Buffer; - } ->; +export type TransformResultWithSource = Readonly, 'getSource'> & {getSource: () => Buffer}>; export type TransformFn = ($$PARAM_0$$: string, $$PARAM_1$$: null | undefined | RequireContext) => Promise>; export type ResolveFn = (from: string, dependency: TransformResultDependency) => BundlerResolution; export type AllowOptionalDependenciesWithOptions = { diff --git a/packages/metro/types/ModuleGraph/worker/collectDependencies.d.ts b/packages/metro/types/ModuleGraph/worker/collectDependencies.d.ts index a357428adb..e37ba74c90 100644 --- a/packages/metro/types/ModuleGraph/worker/collectDependencies.d.ts +++ b/packages/metro/types/ModuleGraph/worker/collectDependencies.d.ts @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @noformat - * @generated SignedSource<> + * @generated SignedSource<<780e521123ff9528911d3a6307815dee>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/ModuleGraph/worker/collectDependencies.js @@ -37,11 +37,7 @@ type DependencyData = Readonly<{ /** Context for requiring a collection of modules. */ contextParams?: RequireContextParams; }>; -export type MutableInternalDependency = Omit; index: number; name: string}> & { - locs: Array; - index: number; - name: string; -}; +export type MutableInternalDependency = Omit & {locs: Array; index: number; name: string}; export type InternalDependency = Readonly; export type State = { asyncRequireModulePathStringLiteral: null | undefined | StringLiteral; diff --git a/packages/metro/types/Server.d.ts b/packages/metro/types/Server.d.ts index 391b621103..688eaf0385 100644 --- a/packages/metro/types/Server.d.ts +++ b/packages/metro/types/Server.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/Server.js @@ -64,18 +64,7 @@ declare class Server { }>; static DEFAULT_BUNDLE_OPTIONS: Omit< typeof Server.DEFAULT_GRAPH_OPTIONS, - keyof { - excludeSource: false; - inlineSourceMap: false; - lazy: false; - modulesOnly: false; - onProgress: null; - runModule: true; - shallow: false; - sourceMapUrl: null; - sourceUrl: null; - sourcePaths: SourcePathsMode; - } + 'excludeSource' | 'inlineSourceMap' | 'lazy' | 'modulesOnly' | 'onProgress' | 'runModule' | 'shallow' | 'sourceMapUrl' | 'sourceUrl' | 'sourcePaths' > & { excludeSource: false; inlineSourceMap: false; diff --git a/packages/metro/types/Server/symbolicate.d.ts b/packages/metro/types/Server/symbolicate.d.ts index 9ae72171bb..494195184e 100644 --- a/packages/metro/types/Server/symbolicate.d.ts +++ b/packages/metro/types/Server/symbolicate.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<823c26d53c6b12598c83c2bdee576fc7>> + * @generated SignedSource<<2f4c251ae251c041be068cf3d50ce560>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/Server/symbolicate.js @@ -24,7 +24,9 @@ export type StackFrameInput = { readonly column: null | undefined | number; readonly methodName: null | undefined | string; }; -export type IntermediateStackFrame = Omit & {collapse?: boolean}; +export type IntermediateStackFrame = Omit & { + collapse?: boolean; +}; export type StackFrameOutput = Readonly; declare function symbolicate(stack: ReadonlyArray, maps: Iterable<[string, ExplodedSourceMap]>, config: ConfigT, extraData: unknown): Promise>; export default symbolicate; diff --git a/packages/metro/types/index.d.ts b/packages/metro/types/index.d.ts index 62c8a18e2b..0fe870cbf1 100644 --- a/packages/metro/types/index.d.ts +++ b/packages/metro/types/index.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<0db5148fb0acea9a8a9da44c1853752a>> + * @generated SignedSource<<4aca97550eb6e579e435254037e38616>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/index.flow.js @@ -42,7 +42,9 @@ type MetroMiddleWare = { metroServer: MetroServer; middleware: Middleware; }; -export type RunMetroOptions = Omit & {waitForBundler?: boolean}; +export type RunMetroOptions = Omit & { + waitForBundler?: boolean; +}; export type RunServerOptions = Readonly<{ hasReducedPerformance?: boolean; host?: string; diff --git a/packages/metro/types/lib/JsonReporter.d.ts b/packages/metro/types/lib/JsonReporter.d.ts index 6289854d3c..ae637cb643 100644 --- a/packages/metro/types/lib/JsonReporter.d.ts +++ b/packages/metro/types/lib/JsonReporter.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<5231fd3327eed54836eccb956c1eabc3>> + * @generated SignedSource<<1c9e77c89ab61bbb8fea403a63e33ab2>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/lib/JsonReporter.js @@ -23,11 +23,7 @@ export type SerializedError = { errors?: ReadonlyArray; cause?: SerializedError; }; -export type SerializedEvent = TEvent extends {error: Error} - ? Omit, keyof {error: SerializedError}> & { - error: SerializedError; - } - : TEvent; +export type SerializedEvent = TEvent extends {error: Error} ? Omit, 'error'> & {error: SerializedError} : TEvent; declare class JsonReporter { constructor(stream: Writable); /** diff --git a/packages/metro/types/lib/parseBundleOptionsFromBundleRequestUrl.d.ts b/packages/metro/types/lib/parseBundleOptionsFromBundleRequestUrl.d.ts index a6b6e782ac..be62439edd 100644 --- a/packages/metro/types/lib/parseBundleOptionsFromBundleRequestUrl.d.ts +++ b/packages/metro/types/lib/parseBundleOptionsFromBundleRequestUrl.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/lib/parseBundleOptionsFromBundleRequestUrl.js @@ -17,5 +17,5 @@ import type {BundleOptions} from '../shared/types'; -declare function parseBundleOptionsFromBundleRequestUrl(rawNonJscSafeUrlEncodedUrl: string, platforms: Set): Omit & {bundleType: string}; +declare function parseBundleOptionsFromBundleRequestUrl(rawNonJscSafeUrlEncodedUrl: string, platforms: Set): Omit & {bundleType: string}; export default parseBundleOptionsFromBundleRequestUrl; diff --git a/packages/metro/types/shared/types.d.ts b/packages/metro/types/shared/types.d.ts index de0aaf7e59..c79266edab 100644 --- a/packages/metro/types/shared/types.d.ts +++ b/packages/metro/types/shared/types.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<7c33bbd1ff74878c022143eb61319922>> + * @generated SignedSource<<6d2429c6b34b624881402caa12117d34>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/shared/types.js @@ -101,7 +101,7 @@ export type ModuleTransportLikeStrict = { readonly name?: string; readonly sourcePath: string; }; -export type RamModuleTransport = Omit & {readonly source: string; readonly type: string}; +export type RamModuleTransport = Omit & {readonly source: string; readonly type: string}; export type OutputOptions = { bundleOutput: string; bundleEncoding?: 'utf8' | 'utf16le' | 'ascii';