From 8e5ea59d5c23421ae0b6b64181f667972f319b52 Mon Sep 17 00:00:00 2001 From: vvsamin Date: Sat, 26 Oct 2024 05:03:17 +0300 Subject: [PATCH 1/4] Fix and improve metro config merging --- .../src/adapters/metroAdapter.ts | 69 ++++++++------ .../src/adapters/metroAdapter.ts | 93 +++++++++++++------ .../src/adapters/metroAdapter.ts | 78 +++++++++------- .../engine-rn/src/adapters/metroAdapter.ts | 56 +++++++---- packages/sdk-react-native/src/adapters.ts | 6 +- 5 files changed, 193 insertions(+), 109 deletions(-) diff --git a/packages/engine-rn-macos/src/adapters/metroAdapter.ts b/packages/engine-rn-macos/src/adapters/metroAdapter.ts index d27df9aec9..1f87d2de6f 100644 --- a/packages/engine-rn-macos/src/adapters/metroAdapter.ts +++ b/packages/engine-rn-macos/src/adapters/metroAdapter.ts @@ -1,5 +1,5 @@ import { Env } from '@rnv/core'; -import { InputConfig } from '@rnv/sdk-react-native'; +import { withMetroConfig, mergeConfig, InputConfig } from '@rnv/sdk-react-native'; const path = require('path'); @@ -29,12 +29,14 @@ function blacklist(additionalBlacklist: RegExp[]) { } export const withRNVMetro = (config: InputConfig): InputConfig => { - const projectPath = process.env.RNV_PROJECT_ROOT || process.cwd(); + const projectPath = env.RNV_PROJECT_ROOT || process.cwd(); + + const defaultConfig = withMetroConfig(projectPath); const watchFolders = [path.resolve(projectPath, 'node_modules')]; if (env.RNV_IS_MONOREPO === 'true' || env.RNV_IS_MONOREPO === true) { - const monoRootPath = process.env.RNV_MONO_ROOT || projectPath; + const monoRootPath = env.RNV_MONO_ROOT || projectPath; watchFolders.push(path.resolve(monoRootPath, 'node_modules')); watchFolders.push(path.resolve(monoRootPath, 'packages')); } @@ -44,37 +46,50 @@ export const withRNVMetro = (config: InputConfig): InputConfig => { const exts: string = env.RNV_EXTENSIONS || ''; - const cnf = { - ...config, + let blacklistRE = [ + blacklist([ + /platformBuilds\/.*/, + /buildHooks\/.*/, + /projectConfig\/.*/, + /website\/.*/, + /appConfigs\/.*/, + /renative.local.*/, + /metro.config.local.*/, + /.expo\/.*/, + /.rollup.cache\/.*/, + ]), + ]; + + if (config?.resolver?.blacklistRE) { + blacklistRE = blacklistRE.concat(config.resolver.blacklistRE); + } + + const cnfRnv: InputConfig = { transformer: { - getTransformOptions: async () => ({ - transform: { - experimentalImportSupport: false, - // this defeats the RCTDeviceEventEmitter is not a registered callable module - inlineRequires: true, - }, - }), - ...(config?.transformer || {}), + getTransformOptions: async (entryPoints, options, getDependenciesOf) => { + const transformOptions = + (await config?.transformer?.getTransformOptions?.(entryPoints, options, getDependenciesOf)) || {}; + + return { + ...transformOptions, + transform: { + experimentalImportSupport: false, + // this defeats the RCTDeviceEventEmitter is not a registered callable module + inlineRequires: true, + ...(transformOptions?.transform || {}), + }, + }; + }, }, resolver: { - blacklistRE: blacklist([ - /platformBuilds\/.*/, - /buildHooks\/.*/, - /projectConfig\/.*/, - /website\/.*/, - /appConfigs\/.*/, - /renative.local.*/, - /metro.config.local.*/, - /.expo\/.*/, - /.rollup.cache\/.*/, - ]), - ...(config?.resolver || {}), + blacklistRE, sourceExts: [...(config?.resolver?.sourceExts || []), ...exts.split(',')], - extraNodeModules: config?.resolver?.extraNodeModules, }, watchFolders, - projectRoot: path.resolve(projectPath), + projectRoot: config?.projectRoot || path.resolve(projectPath), }; + const cnf = mergeConfig(defaultConfig, config, cnfRnv); + return cnf; }; diff --git a/packages/engine-rn-tvos/src/adapters/metroAdapter.ts b/packages/engine-rn-tvos/src/adapters/metroAdapter.ts index fddcdf2e6e..e4428e771a 100644 --- a/packages/engine-rn-tvos/src/adapters/metroAdapter.ts +++ b/packages/engine-rn-tvos/src/adapters/metroAdapter.ts @@ -52,21 +52,62 @@ export const withRNVMetro = (config: InputConfig) => { const exts: string = env.RNV_EXTENSIONS || ''; + let blacklistRE = [ + blacklist([ + /platformBuilds\/.*/, + /buildHooks\/.*/, + /projectConfig\/.*/, + /website\/.*/, + /appConfigs\/.*/, + /renative.local.*/, + /metro.config.local.*/, + /.expo\/.*/, + /.rollup.cache\/.*/, + ]), + ]; + + if (config?.resolver?.blacklistRE) { + blacklistRE = blacklistRE.concat(config.resolver.blacklistRE); + } + const cnfRnv: InputConfig = { - cacheStores: [ - new FileStore({ - root: path.join(os.tmpdir(), 'metro-cache-tvos'), - }), - ], + cacheStores: (metroCache) => { + let cacheStores: ReturnType any>> = []; + + if (typeof config?.cacheStores === 'function') { + cacheStores = config.cacheStores(metroCache); + } else if (config?.cacheStores?.length) { + // eslint-disable-next-line prefer-destructuring + cacheStores = config.cacheStores; + } + + cacheStores = [ + ...cacheStores, + new FileStore({ + root: path.join(os.tmpdir(), 'metro-cache-tvos'), + }), + ]; + + return cacheStores; + }, transformer: { - getTransformOptions: async () => ({ - transform: { - experimentalImportSupport: false, - // this defeats the RCTDeviceEventEmitter is not a registered callable module - inlineRequires: true, - }, - }), - assetRegistryPath: path.resolve(`${doResolve('react-native-tvos')}/Libraries/Image/AssetRegistry.js`), + getTransformOptions: async (entryPoints, options, getDependenciesOf) => { + const transformOptions = + (await config?.transformer?.getTransformOptions?.(entryPoints, options, getDependenciesOf)) || {}; + + return { + ...transformOptions, + transform: { + experimentalImportSupport: false, + // this defeats the RCTDeviceEventEmitter is not a registered callable module + inlineRequires: true, + ...(transformOptions?.transform || {}), + }, + }; + }, + assetRegistryPath: + config?.transformer?.assetRegistryPath || + path.resolve(`${doResolve('react-native-tvos')}/Libraries/Image/AssetRegistry.js`), }, resolver: { resolveRequest: (context, moduleName, platform) => { @@ -77,31 +118,23 @@ export const withRNVMetro = (config: InputConfig) => { platform ); } + + // Chain to the custom config resolver if provided. + if (typeof config?.resolver?.resolveRequest === 'function') { + return config.resolver.resolveRequest(context, moduleName, platform); + } + // Optionally, chain to the standard Metro resolver. return context.resolveRequest(context, moduleName, platform); }, - blacklistRE: blacklist([ - /platformBuilds\/.*/, - /buildHooks\/.*/, - /projectConfig\/.*/, - /website\/.*/, - /appConfigs\/.*/, - /renative.local.*/, - /metro.config.local.*/, - /.expo\/.*/, - /.rollup.cache\/.*/, - ]), - ...(config?.resolver || {}), + blacklistRE, sourceExts: [...(config?.resolver?.sourceExts || []), ...exts.split(',')], - extraNodeModules: config?.resolver?.extraNodeModules, }, watchFolders, - projectRoot: path.resolve(projectPath), + projectRoot: config?.projectRoot || path.resolve(projectPath), }; - const cnfWithRnv = mergeConfig(defaultConfig, cnfRnv); - - const cnf = mergeConfig(cnfWithRnv, config); + const cnf = mergeConfig(defaultConfig, config, cnfRnv); return cnf; }; diff --git a/packages/engine-rn-windows/src/adapters/metroAdapter.ts b/packages/engine-rn-windows/src/adapters/metroAdapter.ts index 20fae5ece8..a9023854e5 100644 --- a/packages/engine-rn-windows/src/adapters/metroAdapter.ts +++ b/packages/engine-rn-windows/src/adapters/metroAdapter.ts @@ -1,7 +1,8 @@ -const path = require('path'); import { Env } from '@rnv/core'; import fs from 'fs'; -import { InputConfig } from '@rnv/sdk-react-native'; +import { withMetroConfig, mergeConfig, InputConfig } from '@rnv/sdk-react-native'; + +const path = require('path'); const sharedBlacklist = [ /node_modules\/react\/dist\/.*/, @@ -29,13 +30,16 @@ function blacklist(additionalBlacklist: RegExp[]) { } export const withRNVMetro = (config: InputConfig): InputConfig => { - const projectPath = process.env.RNV_PROJECT_ROOT || process.cwd(); + const projectPath = env.RNV_PROJECT_ROOT || process.cwd(); + const rnwPath = fs.realpathSync(path.resolve(require.resolve('react-native-windows/package.json'), '..')); + const defaultConfig = withMetroConfig(projectPath); + const watchFolders = [path.resolve(projectPath, 'node_modules')]; if (env.RNV_IS_MONOREPO === 'true' || env.RNV_IS_MONOREPO === true) { - const monoRootPath = process.env.RNV_MONO_ROOT || projectPath; + const monoRootPath = env.RNV_MONO_ROOT || projectPath; watchFolders.push(path.resolve(monoRootPath, 'node_modules')); watchFolders.push(path.resolve(monoRootPath, 'packages')); } @@ -45,42 +49,54 @@ export const withRNVMetro = (config: InputConfig): InputConfig => { const exts: string = env.RNV_EXTENSIONS || ''; - const cnf = { - ...config, + let blacklistRE = [ + blacklist([ + /platformBuilds\/.*/, + /buildHooks\/.*/, + /projectConfig\/.*/, + /website\/.*/, + /appConfigs\/.*/, + /renative.local.*/, + /metro.config.local.*/, + /.expo\/.*/, + /.rollup.cache\/.*/, + ]), + ]; + + if (config?.resolver?.blacklistRE) { + blacklistRE = blacklistRE.concat(config.resolver.blacklistRE); + } + + const cnfRnv: InputConfig = { transformer: { - getTransformOptions: async () => ({ - transform: { - experimentalImportSupport: false, - // this defeats the RCTDeviceEventEmitter is not a registered callable module - inlineRequires: true, - }, - }), - ...(config?.resolver || {}), - sourceExts: [...(config?.resolver?.sourceExts || []), ...exts.split(',')], - extraNodeModules: config?.resolver?.extraNodeModules, - ...(config?.transformer || {}), + getTransformOptions: async (entryPoints, options, getDependenciesOf) => { + const transformOptions = + (await config?.transformer?.getTransformOptions?.(entryPoints, options, getDependenciesOf)) || {}; + + return { + ...transformOptions, + transform: { + experimentalImportSupport: false, + // this defeats the RCTDeviceEventEmitter is not a registered callable module + inlineRequires: true, + ...(transformOptions?.transform || {}), + }, + }; + }, }, resolver: { - blacklistRE: blacklist([ - /platformBuilds\/.*/, - /buildHooks\/.*/, - /projectConfig\/.*/, - /website\/.*/, - /appConfigs\/.*/, - /renative.local.*/, - /metro.config.local.*/, - /.expo\/.*/, - /.rollup.cache\/.*/, - ]), + blacklistRE, + sourceExts: [...(config?.resolver?.sourceExts || []), ...exts.split(',')], extraNodeModules: { - // Redirect react-native-windows to avoid symlink (metro doesn't like symlinks) + ...(config?.resolver?.extraNodeModules || {}), 'react-native-windows': rnwPath, }, }, watchFolders, - sourceExts: [...(config?.resolver?.sourceExts || []), ...exts.split(',')], - projectRoot: path.resolve(projectPath), + projectRoot: config?.projectRoot || path.resolve(projectPath), }; + const cnf = mergeConfig(defaultConfig, config, cnfRnv); + return cnf; }; diff --git a/packages/engine-rn/src/adapters/metroAdapter.ts b/packages/engine-rn/src/adapters/metroAdapter.ts index 8a2deb8ad7..68637525e1 100644 --- a/packages/engine-rn/src/adapters/metroAdapter.ts +++ b/packages/engine-rn/src/adapters/metroAdapter.ts @@ -47,30 +47,50 @@ export const withRNVMetro = (config: InputConfig): InputConfig => { const exts: string = env.RNV_EXTENSIONS || ''; - const cnfRnv = { + let blacklistRE = [ + blacklist([ + /platformBuilds\/.*/, + /buildHooks\/.*/, + /projectConfig\/.*/, + /website\/.*/, + /appConfigs\/.*/, + /renative.local.*/, + /metro.config.local.*/, + /.expo\/.*/, + /.rollup.cache\/.*/, + ]), + ]; + + if (config?.resolver?.blacklistRE) { + blacklistRE = blacklistRE.concat(config.resolver.blacklistRE); + } + + const cnfRnv: InputConfig = { + transformer: { + getTransformOptions: async (entryPoints, options, getDependenciesOf) => { + const transformOptions = + (await config?.transformer?.getTransformOptions?.(entryPoints, options, getDependenciesOf)) || {}; + + return { + ...transformOptions, + transform: { + experimentalImportSupport: false, + // this defeats the RCTDeviceEventEmitter is not a registered callable module + inlineRequires: true, + ...(transformOptions?.transform || {}), + }, + }; + }, + }, resolver: { - blacklistRE: blacklist([ - /platformBuilds\/.*/, - /buildHooks\/.*/, - /projectConfig\/.*/, - /website\/.*/, - /appConfigs\/.*/, - /renative.local.*/, - /metro.config.local.*/, - /.expo\/.*/, - /.rollup.cache\/.*/, - ]), - ...(config?.resolver || {}), + blacklistRE, sourceExts: [...(config?.resolver?.sourceExts || []), ...exts.split(',')], - extraNodeModules: config?.resolver?.extraNodeModules, }, watchFolders, - projectRoot: path.resolve(projectPath), + projectRoot: config?.projectRoot || path.resolve(projectPath), }; - const cnfWithRnv = mergeConfig(defaultConfig, cnfRnv); - - const cnf = mergeConfig(cnfWithRnv, config); + const cnf = mergeConfig(defaultConfig, config, cnfRnv); return cnf; }; diff --git a/packages/sdk-react-native/src/adapters.ts b/packages/sdk-react-native/src/adapters.ts index 32b211dd78..2a0bb4e8c3 100644 --- a/packages/sdk-react-native/src/adapters.ts +++ b/packages/sdk-react-native/src/adapters.ts @@ -128,7 +128,7 @@ export const withMetroConfig = (projectRoot: string): ConfigT => { ].join('|') ); - const config = { + const config: InputConfig = { resolver: { resolverMainFields: ['react-native', 'browser', 'main'], platforms: ['android', 'ios'], @@ -179,7 +179,7 @@ export const withMetroConfig = (projectRoot: string): ConfigT => { return mergeConfig(getDefaultConfig.getDefaultValues(projectRoot), config); }; -export const mergeConfig = (config1: ConfigT, config2: InputConfig) => { +export const mergeConfig = (defaultConfig: ConfigT, ...configs: InputConfig[]): ConfigT => { const mc = require('metro-config'); - return mc.mergeConfig(config1, config2); + return mc.mergeConfig(defaultConfig, ...configs); }; From 5d16085342cef3c724e887e7eb1abff52557fe24 Mon Sep 17 00:00:00 2001 From: vvsamin Date: Sat, 26 Oct 2024 08:20:45 +0300 Subject: [PATCH 2/4] Metro config option 'blacklistRE' is deprecated. Migrate to 'blockList'. --- .../src/adapters/metroAdapter.ts | 38 +++++++++---------- .../src/adapters/metroAdapter.ts | 38 +++++++++---------- .../src/adapters/metroAdapter.ts | 38 +++++++++---------- .../engine-rn/src/adapters/metroAdapter.ts | 38 +++++++++---------- 4 files changed, 68 insertions(+), 84 deletions(-) diff --git a/packages/engine-rn-macos/src/adapters/metroAdapter.ts b/packages/engine-rn-macos/src/adapters/metroAdapter.ts index 1f87d2de6f..502bb0c2e5 100644 --- a/packages/engine-rn-macos/src/adapters/metroAdapter.ts +++ b/packages/engine-rn-macos/src/adapters/metroAdapter.ts @@ -24,8 +24,8 @@ function escapeRegExp(pattern: RegExp | string) { throw new Error(`Unexpected blacklist pattern: ${pattern}`); } -function blacklist(additionalBlacklist: RegExp[]) { - return new RegExp(`(${(additionalBlacklist || []).concat(sharedBlacklist).map(escapeRegExp).join('|')})$`); +function blocklist(additionalBlacklist: RegExp[]) { + return [...additionalBlacklist, ...sharedBlacklist].map((regexp) => new RegExp(escapeRegExp(regexp))); } export const withRNVMetro = (config: InputConfig): InputConfig => { @@ -46,24 +46,6 @@ export const withRNVMetro = (config: InputConfig): InputConfig => { const exts: string = env.RNV_EXTENSIONS || ''; - let blacklistRE = [ - blacklist([ - /platformBuilds\/.*/, - /buildHooks\/.*/, - /projectConfig\/.*/, - /website\/.*/, - /appConfigs\/.*/, - /renative.local.*/, - /metro.config.local.*/, - /.expo\/.*/, - /.rollup.cache\/.*/, - ]), - ]; - - if (config?.resolver?.blacklistRE) { - blacklistRE = blacklistRE.concat(config.resolver.blacklistRE); - } - const cnfRnv: InputConfig = { transformer: { getTransformOptions: async (entryPoints, options, getDependenciesOf) => { @@ -82,7 +64,21 @@ export const withRNVMetro = (config: InputConfig): InputConfig => { }, }, resolver: { - blacklistRE, + blockList: blocklist( + [ + /platformBuilds\/.*/, + /buildHooks\/.*/, + /projectConfig\/.*/, + /website\/.*/, + /appConfigs\/.*/, + /renative.local.*/, + /metro.config.local.*/, + /.expo\/.*/, + /.rollup.cache\/.*/, + ] + .concat(config?.resolver?.blockList || []) + .concat(config?.resolver?.blacklistRE || []) + ), sourceExts: [...(config?.resolver?.sourceExts || []), ...exts.split(',')], }, watchFolders, diff --git a/packages/engine-rn-tvos/src/adapters/metroAdapter.ts b/packages/engine-rn-tvos/src/adapters/metroAdapter.ts index e4428e771a..fb2742f2bc 100644 --- a/packages/engine-rn-tvos/src/adapters/metroAdapter.ts +++ b/packages/engine-rn-tvos/src/adapters/metroAdapter.ts @@ -26,8 +26,8 @@ function escapeRegExp(pattern: RegExp | string) { throw new Error(`Unexpected blacklist pattern: ${pattern}`); } -function blacklist(additionalBlacklist: RegExp[]) { - return new RegExp(`(${(additionalBlacklist || []).concat(sharedBlacklist).map(escapeRegExp).join('|')})$`); +function blocklist(additionalBlacklist: RegExp[]) { + return [...additionalBlacklist, ...sharedBlacklist].map((regexp) => new RegExp(escapeRegExp(regexp))); } export const withRNVMetro = (config: InputConfig) => { @@ -52,24 +52,6 @@ export const withRNVMetro = (config: InputConfig) => { const exts: string = env.RNV_EXTENSIONS || ''; - let blacklistRE = [ - blacklist([ - /platformBuilds\/.*/, - /buildHooks\/.*/, - /projectConfig\/.*/, - /website\/.*/, - /appConfigs\/.*/, - /renative.local.*/, - /metro.config.local.*/, - /.expo\/.*/, - /.rollup.cache\/.*/, - ]), - ]; - - if (config?.resolver?.blacklistRE) { - blacklistRE = blacklistRE.concat(config.resolver.blacklistRE); - } - const cnfRnv: InputConfig = { cacheStores: (metroCache) => { let cacheStores: ReturnType any>> = []; @@ -127,7 +109,21 @@ export const withRNVMetro = (config: InputConfig) => { // Optionally, chain to the standard Metro resolver. return context.resolveRequest(context, moduleName, platform); }, - blacklistRE, + blockList: blocklist( + [ + /platformBuilds\/.*/, + /buildHooks\/.*/, + /projectConfig\/.*/, + /website\/.*/, + /appConfigs\/.*/, + /renative.local.*/, + /metro.config.local.*/, + /.expo\/.*/, + /.rollup.cache\/.*/, + ] + .concat(config?.resolver?.blockList || []) + .concat(config?.resolver?.blacklistRE || []) + ), sourceExts: [...(config?.resolver?.sourceExts || []), ...exts.split(',')], }, watchFolders, diff --git a/packages/engine-rn-windows/src/adapters/metroAdapter.ts b/packages/engine-rn-windows/src/adapters/metroAdapter.ts index a9023854e5..d1f072664f 100644 --- a/packages/engine-rn-windows/src/adapters/metroAdapter.ts +++ b/packages/engine-rn-windows/src/adapters/metroAdapter.ts @@ -25,8 +25,8 @@ function escapeRegExp(pattern: RegExp | string) { throw new Error(`Unexpected blacklist pattern: ${pattern}`); } -function blacklist(additionalBlacklist: RegExp[]) { - return new RegExp(`(${(additionalBlacklist || []).concat(sharedBlacklist).map(escapeRegExp).join('|')})$`); +function blocklist(additionalBlacklist: RegExp[]) { + return [...additionalBlacklist, ...sharedBlacklist].map((regexp) => new RegExp(escapeRegExp(regexp))); } export const withRNVMetro = (config: InputConfig): InputConfig => { @@ -49,24 +49,6 @@ export const withRNVMetro = (config: InputConfig): InputConfig => { const exts: string = env.RNV_EXTENSIONS || ''; - let blacklistRE = [ - blacklist([ - /platformBuilds\/.*/, - /buildHooks\/.*/, - /projectConfig\/.*/, - /website\/.*/, - /appConfigs\/.*/, - /renative.local.*/, - /metro.config.local.*/, - /.expo\/.*/, - /.rollup.cache\/.*/, - ]), - ]; - - if (config?.resolver?.blacklistRE) { - blacklistRE = blacklistRE.concat(config.resolver.blacklistRE); - } - const cnfRnv: InputConfig = { transformer: { getTransformOptions: async (entryPoints, options, getDependenciesOf) => { @@ -85,7 +67,21 @@ export const withRNVMetro = (config: InputConfig): InputConfig => { }, }, resolver: { - blacklistRE, + blockList: blocklist( + [ + /platformBuilds\/.*/, + /buildHooks\/.*/, + /projectConfig\/.*/, + /website\/.*/, + /appConfigs\/.*/, + /renative.local.*/, + /metro.config.local.*/, + /.expo\/.*/, + /.rollup.cache\/.*/, + ] + .concat(config?.resolver?.blockList || []) + .concat(config?.resolver?.blacklistRE || []) + ), sourceExts: [...(config?.resolver?.sourceExts || []), ...exts.split(',')], extraNodeModules: { ...(config?.resolver?.extraNodeModules || {}), diff --git a/packages/engine-rn/src/adapters/metroAdapter.ts b/packages/engine-rn/src/adapters/metroAdapter.ts index 68637525e1..e4c4a99aed 100644 --- a/packages/engine-rn/src/adapters/metroAdapter.ts +++ b/packages/engine-rn/src/adapters/metroAdapter.ts @@ -25,8 +25,8 @@ function escapeRegExp(pattern: RegExp | string) { throw new Error(`Unexpected blacklist pattern: ${pattern}`); } -function blacklist(additionalBlacklist: RegExp[]) { - return new RegExp(`(${(additionalBlacklist || []).concat(sharedBlacklist).map(escapeRegExp).join('|')})$`); +function blocklist(additionalBlacklist: RegExp[]) { + return [...additionalBlacklist, ...sharedBlacklist].map((regexp) => new RegExp(escapeRegExp(regexp))); } export const withRNVMetro = (config: InputConfig): InputConfig => { @@ -47,24 +47,6 @@ export const withRNVMetro = (config: InputConfig): InputConfig => { const exts: string = env.RNV_EXTENSIONS || ''; - let blacklistRE = [ - blacklist([ - /platformBuilds\/.*/, - /buildHooks\/.*/, - /projectConfig\/.*/, - /website\/.*/, - /appConfigs\/.*/, - /renative.local.*/, - /metro.config.local.*/, - /.expo\/.*/, - /.rollup.cache\/.*/, - ]), - ]; - - if (config?.resolver?.blacklistRE) { - blacklistRE = blacklistRE.concat(config.resolver.blacklistRE); - } - const cnfRnv: InputConfig = { transformer: { getTransformOptions: async (entryPoints, options, getDependenciesOf) => { @@ -83,7 +65,21 @@ export const withRNVMetro = (config: InputConfig): InputConfig => { }, }, resolver: { - blacklistRE, + blockList: blocklist( + [ + /platformBuilds\/.*/, + /buildHooks\/.*/, + /projectConfig\/.*/, + /website\/.*/, + /appConfigs\/.*/, + /renative.local.*/, + /metro.config.local.*/, + /.expo\/.*/, + /.rollup.cache\/.*/, + ] + .concat(config?.resolver?.blockList || []) + .concat(config?.resolver?.blacklistRE || []) + ), sourceExts: [...(config?.resolver?.sourceExts || []), ...exts.split(',')], }, watchFolders, From 73ba2c0c5a5603877e6b7c2685ce5f564a71519d Mon Sep 17 00:00:00 2001 From: vvsamin Date: Sat, 26 Oct 2024 08:31:27 +0300 Subject: [PATCH 3/4] Names changed to match metro config exclusionList. --- packages/engine-rn-macos/src/adapters/metroAdapter.ts | 10 +++++----- packages/engine-rn-tvos/src/adapters/metroAdapter.ts | 10 +++++----- .../engine-rn-windows/src/adapters/metroAdapter.ts | 10 +++++----- packages/engine-rn/src/adapters/metroAdapter.ts | 10 +++++----- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/packages/engine-rn-macos/src/adapters/metroAdapter.ts b/packages/engine-rn-macos/src/adapters/metroAdapter.ts index 502bb0c2e5..7a68132997 100644 --- a/packages/engine-rn-macos/src/adapters/metroAdapter.ts +++ b/packages/engine-rn-macos/src/adapters/metroAdapter.ts @@ -3,7 +3,7 @@ import { withMetroConfig, mergeConfig, InputConfig } from '@rnv/sdk-react-native const path = require('path'); -const sharedBlacklist = [ +const sharedExclusions = [ /node_modules\/react\/dist\/.*/, /website\/node_modules\/.*/, /heapCapture\/bundle\.js/, @@ -21,11 +21,11 @@ function escapeRegExp(pattern: RegExp | string) { } else if (Object.prototype.toString.call(pattern) === '[object RegExp]') { return pattern.source.replace(/\//g, path.sep); } - throw new Error(`Unexpected blacklist pattern: ${pattern}`); + throw new Error(`Unexpected exclusion pattern: ${pattern}`); } -function blocklist(additionalBlacklist: RegExp[]) { - return [...additionalBlacklist, ...sharedBlacklist].map((regexp) => new RegExp(escapeRegExp(regexp))); +function exclusionList(additionalExclusions: RegExp[]) { + return [...additionalExclusions, ...sharedExclusions].map((regexp) => new RegExp(escapeRegExp(regexp))); } export const withRNVMetro = (config: InputConfig): InputConfig => { @@ -64,7 +64,7 @@ export const withRNVMetro = (config: InputConfig): InputConfig => { }, }, resolver: { - blockList: blocklist( + blockList: exclusionList( [ /platformBuilds\/.*/, /buildHooks\/.*/, diff --git a/packages/engine-rn-tvos/src/adapters/metroAdapter.ts b/packages/engine-rn-tvos/src/adapters/metroAdapter.ts index fb2742f2bc..8e312e5561 100644 --- a/packages/engine-rn-tvos/src/adapters/metroAdapter.ts +++ b/packages/engine-rn-tvos/src/adapters/metroAdapter.ts @@ -5,7 +5,7 @@ const path = require('path'); const os = require('os'); const { doResolve } = require('@rnv/core'); -const sharedBlacklist = [ +const sharedExclusions = [ /node_modules\/react\/dist\/.*/, /website\/node_modules\/.*/, /heapCapture\/bundle\.js/, @@ -23,11 +23,11 @@ function escapeRegExp(pattern: RegExp | string) { } else if (Object.prototype.toString.call(pattern) === '[object RegExp]') { return pattern.source.replace(/\//g, path.sep); } - throw new Error(`Unexpected blacklist pattern: ${pattern}`); + throw new Error(`Unexpected exclusion pattern: ${pattern}`); } -function blocklist(additionalBlacklist: RegExp[]) { - return [...additionalBlacklist, ...sharedBlacklist].map((regexp) => new RegExp(escapeRegExp(regexp))); +function exclusionList(additionalExclusions: RegExp[]) { + return [...additionalExclusions, ...sharedExclusions].map((regexp) => new RegExp(escapeRegExp(regexp))); } export const withRNVMetro = (config: InputConfig) => { @@ -109,7 +109,7 @@ export const withRNVMetro = (config: InputConfig) => { // Optionally, chain to the standard Metro resolver. return context.resolveRequest(context, moduleName, platform); }, - blockList: blocklist( + blockList: exclusionList( [ /platformBuilds\/.*/, /buildHooks\/.*/, diff --git a/packages/engine-rn-windows/src/adapters/metroAdapter.ts b/packages/engine-rn-windows/src/adapters/metroAdapter.ts index d1f072664f..b276c45d33 100644 --- a/packages/engine-rn-windows/src/adapters/metroAdapter.ts +++ b/packages/engine-rn-windows/src/adapters/metroAdapter.ts @@ -4,7 +4,7 @@ import { withMetroConfig, mergeConfig, InputConfig } from '@rnv/sdk-react-native const path = require('path'); -const sharedBlacklist = [ +const sharedExclusions = [ /node_modules\/react\/dist\/.*/, /website\/node_modules\/.*/, /heapCapture\/bundle\.js/, @@ -22,11 +22,11 @@ function escapeRegExp(pattern: RegExp | string) { } else if (Object.prototype.toString.call(pattern) === '[object RegExp]') { return pattern.source.replace(/\//g, path.sep); } - throw new Error(`Unexpected blacklist pattern: ${pattern}`); + throw new Error(`Unexpected exclusion pattern: ${pattern}`); } -function blocklist(additionalBlacklist: RegExp[]) { - return [...additionalBlacklist, ...sharedBlacklist].map((regexp) => new RegExp(escapeRegExp(regexp))); +function exclusionList(additionalExclusions: RegExp[]) { + return [...additionalExclusions, ...sharedExclusions].map((regexp) => new RegExp(escapeRegExp(regexp))); } export const withRNVMetro = (config: InputConfig): InputConfig => { @@ -67,7 +67,7 @@ export const withRNVMetro = (config: InputConfig): InputConfig => { }, }, resolver: { - blockList: blocklist( + blockList: exclusionList( [ /platformBuilds\/.*/, /buildHooks\/.*/, diff --git a/packages/engine-rn/src/adapters/metroAdapter.ts b/packages/engine-rn/src/adapters/metroAdapter.ts index e4c4a99aed..4f65393351 100644 --- a/packages/engine-rn/src/adapters/metroAdapter.ts +++ b/packages/engine-rn/src/adapters/metroAdapter.ts @@ -4,7 +4,7 @@ import { withMetroConfig, mergeConfig, InputConfig } from '@rnv/sdk-react-native // TODO merge with packages/engine-rn-macos/src/adapters/metroAdapter.ts and place in @rnv/sdk-react-native const path = require('path'); -const sharedBlacklist = [ +const sharedExclusions = [ /node_modules\/react\/dist\/.*/, /website\/node_modules\/.*/, /heapCapture\/bundle\.js/, @@ -22,11 +22,11 @@ function escapeRegExp(pattern: RegExp | string) { } else if (Object.prototype.toString.call(pattern) === '[object RegExp]') { return pattern.source.replace(/\//g, path.sep); } - throw new Error(`Unexpected blacklist pattern: ${pattern}`); + throw new Error(`Unexpected exclusion pattern: ${pattern}`); } -function blocklist(additionalBlacklist: RegExp[]) { - return [...additionalBlacklist, ...sharedBlacklist].map((regexp) => new RegExp(escapeRegExp(regexp))); +function exclusionList(additionalExclusions: RegExp[]) { + return [...additionalExclusions, ...sharedExclusions].map((regexp) => new RegExp(escapeRegExp(regexp))); } export const withRNVMetro = (config: InputConfig): InputConfig => { @@ -65,7 +65,7 @@ export const withRNVMetro = (config: InputConfig): InputConfig => { }, }, resolver: { - blockList: blocklist( + blockList: exclusionList( [ /platformBuilds\/.*/, /buildHooks\/.*/, From 5c7c066b28a01a0225d4002fb2bd88379bc8aa9e Mon Sep 17 00:00:00 2001 From: vvsamin Date: Sat, 26 Oct 2024 22:17:43 +0300 Subject: [PATCH 4/4] Reset 'blacklistRE' property --- packages/engine-rn-macos/src/adapters/metroAdapter.ts | 1 + packages/engine-rn-tvos/src/adapters/metroAdapter.ts | 1 + packages/engine-rn-windows/src/adapters/metroAdapter.ts | 1 + packages/engine-rn/src/adapters/metroAdapter.ts | 1 + 4 files changed, 4 insertions(+) diff --git a/packages/engine-rn-macos/src/adapters/metroAdapter.ts b/packages/engine-rn-macos/src/adapters/metroAdapter.ts index 7a68132997..9cdce8e29b 100644 --- a/packages/engine-rn-macos/src/adapters/metroAdapter.ts +++ b/packages/engine-rn-macos/src/adapters/metroAdapter.ts @@ -79,6 +79,7 @@ export const withRNVMetro = (config: InputConfig): InputConfig => { .concat(config?.resolver?.blockList || []) .concat(config?.resolver?.blacklistRE || []) ), + blacklistRE: undefined, // must be reset to prevent it from being processed by metro sourceExts: [...(config?.resolver?.sourceExts || []), ...exts.split(',')], }, watchFolders, diff --git a/packages/engine-rn-tvos/src/adapters/metroAdapter.ts b/packages/engine-rn-tvos/src/adapters/metroAdapter.ts index 8e312e5561..e0f1d3f1c0 100644 --- a/packages/engine-rn-tvos/src/adapters/metroAdapter.ts +++ b/packages/engine-rn-tvos/src/adapters/metroAdapter.ts @@ -124,6 +124,7 @@ export const withRNVMetro = (config: InputConfig) => { .concat(config?.resolver?.blockList || []) .concat(config?.resolver?.blacklistRE || []) ), + blacklistRE: undefined, // must be reset to prevent it from being processed by metro sourceExts: [...(config?.resolver?.sourceExts || []), ...exts.split(',')], }, watchFolders, diff --git a/packages/engine-rn-windows/src/adapters/metroAdapter.ts b/packages/engine-rn-windows/src/adapters/metroAdapter.ts index b276c45d33..d2d5d6d547 100644 --- a/packages/engine-rn-windows/src/adapters/metroAdapter.ts +++ b/packages/engine-rn-windows/src/adapters/metroAdapter.ts @@ -82,6 +82,7 @@ export const withRNVMetro = (config: InputConfig): InputConfig => { .concat(config?.resolver?.blockList || []) .concat(config?.resolver?.blacklistRE || []) ), + blacklistRE: undefined, // must be reset to prevent it from being processed by metro sourceExts: [...(config?.resolver?.sourceExts || []), ...exts.split(',')], extraNodeModules: { ...(config?.resolver?.extraNodeModules || {}), diff --git a/packages/engine-rn/src/adapters/metroAdapter.ts b/packages/engine-rn/src/adapters/metroAdapter.ts index 4f65393351..401e0cc838 100644 --- a/packages/engine-rn/src/adapters/metroAdapter.ts +++ b/packages/engine-rn/src/adapters/metroAdapter.ts @@ -80,6 +80,7 @@ export const withRNVMetro = (config: InputConfig): InputConfig => { .concat(config?.resolver?.blockList || []) .concat(config?.resolver?.blacklistRE || []) ), + blacklistRE: undefined, // must be reset to prevent it from being processed by metro sourceExts: [...(config?.resolver?.sourceExts || []), ...exts.split(',')], }, watchFolders,