1 line
6.8 KiB
Plaintext
1 line
6.8 KiB
Plaintext
|
{"version":3,"names":["getOverrideConfig","ctx","outOfTreePlatforms","Object","keys","platforms","filter","platform","npmPackageName","resolver","length","resolveRequest","reactNativePlatformResolver","reduce","result","serializer","getModulesRunBeforeMainModule","require","resolve","path","join","reactNativePath","map","paths","root","loadMetroConfig","options","overrideConfig","reporter","cwd","projectConfig","resolveConfig","config","isEmpty","CLIError","logger","debug","filepath","global","__REACT_NATIVE_METRO_CONFIG_LOADED","test","fs","readFileSync","warn","loadedConfig","loadConfig","getDefaultMetroConfig","mergeConfig"],"sources":["../../src/tools/loadMetroConfig.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport {\n ConfigT,\n InputConfigT,\n loadConfig,\n mergeConfig,\n resolveConfig,\n ResolverConfigT,\n} from 'metro-config';\nimport {CLIError, logger} from '@react-native-community/cli-tools';\nimport type {Config} from '@react-native-community/cli-types';\nimport getDefaultMetroConfig from './getDefaultMetroConfig';\nimport {reactNativePlatformResolver} from './metroPlatformResolver';\n\nexport type {Config};\n\nexport type ConfigLoadingContext = Pick<\n Config,\n 'root' | 'reactNativePath' | 'platforms'\n>;\n\ndeclare global {\n var __REACT_NATIVE_METRO_CONFIG_LOADED: boolean;\n}\n\n/**\n * Get the config options to override based on RN CLI inputs.\n */\nfunction getOverrideConfig(ctx: ConfigLoadingContext): InputConfigT {\n const outOfTreePlatforms = Object.keys(ctx.platforms).filter(\n (platform) => ctx.platforms[platform].npmPackageName,\n );\n const resolver: Partial<ResolverConfigT> = {\n platforms: [...Object.keys(ctx.platforms), 'native'],\n };\n\n if (outOfTreePlatforms.length) {\n resolver.resolveRequest = reactNativePlatformResolver(\n outOfTreePlatforms.reduce<{[platform: string]: string}>(\n (result, platform) => {\n result[platform] = ctx.platforms[platform].npmPackageName!;\n return result;\n },\n {},\n ),\n );\n }\n\n return {\n resolver,\n serializer: {\n // We can include multiple copies of InitializeCore here because metro will\n // only add ones that are already part of the bundle\n getModulesRunBeforeMainModule: () => [\n require.resolve(\n path.join(ctx.reactNativePath, 'Libraries/Core/InitializeCore'),\n ),\n ...outOfTreePlatforms.map((platform) =>\n require.resolve(\n `${ctx.platforms[platform]\n .npmPackageName!}/Libraries/Core/InitializeCore`,\n {paths: [ctx.root]},\n ),\n ),\n ],\n },\n };\n}\n\nexport interface ConfigOptionsT {\n maxWorkers?: number;\n port?: number;\n projectRoot?: string;\n resetCache?: boolean;\n watchFolders?: string[];\n sourceExts?: string[];\n reporter?: any;\n config?: string;\n}\n\n/**\n * Load Metro config.\n *\n * Allows the CLI to override select values in `metro.config.js` based on\n * dynamic user options in `ctx`.\n */\nexport default async function loadMetroConfig(\n ctx: ConfigLoadingContext,\n options: ConfigOptionsT = {},\n): Promise<ConfigT> {\n const overrideConfig = getOverrideConfig(ctx);\n if (options.reporter) {\n overrideConfig.reporter = options.reporter;\n }\n\n const cwd = ctx.root;\n const projectConfig = await resolveConfig(options.config, cwd);\n\n if (projectConfig.isEmpty) {\n throw new CLIError(`No Metro config found in ${cwd}`);\n }\n\n logger.debug(`Reading Metro config from ${projectConfig.filepath}`);\n\n if (\n !global.__REACT_NATIVE_METRO_CONFIG_LOADED &&\n // TODO(huntie): Remove this check from 0.73 onwards (all users will be on\n // the next major @react-native/metro-config version)\n !/['\"']@react-native\\/metro-config['\"']/.test(\n fs.readFileSync(projectConfig.filepath, 'utf8'),\n )\n ) {\n logger.warn(\n 'From React Native 0.72, your metro.config.js file should extend' +\n \"'@react-native/metro-config'. Please see the React Native 0.
|