const { getDefaultConfig } = require('@react-native/metro-config');
const { resolveUniqueModule } = require('@rnx-kit/metro-config');
* Metro configuration
* https://reactnative.dev/docs/metro
*
* @type {import('@react-native/metro-config').MetroConfig}
*/
const config = getDefaultConfig(__dirname);
const PATH = require('path');
const metroConfigPackageJsonPath = require.resolve('metro-config/package.json', {
paths: [__dirname],
});
const metroExclusionList = require(
PATH.join(PATH.dirname(metroConfigPackageJsonPath), 'src/defaults/exclusionList.js'),
);
const exclusionList = metroExclusionList.default || metroExclusionList;
const packageDirPath = PATH.resolve(__dirname, '../../package');
const nativePackageDirPath = PATH.resolve(__dirname, '../../package/native-package');
const symlinked = {
'stream-chat-react-native': nativePackageDirPath,
'stream-chat-react-native-core': packageDirPath,
};
const dependencyPackageNames = Object.keys(require('./package.json').dependencies);
const uniqueModules = dependencyPackageNames.map((packageName) => {
if (symlinked[packageName]) {
const modulePath = symlinked[packageName];
const escapedPackageName = PATH.normalize(packageName).replace(/\\/g, '\\\\');
const exclusionRE = new RegExp(
`.*${PATH.sep}node_modules\\${PATH.sep}${escapedPackageName}\\${PATH.sep}.*`,
);
return {
packageName,
modulePath,
blockPattern: exclusionRE,
};
}
const [modulePath, blockPattern] = resolveUniqueModule(packageName, __dirname);
const fixedBlockPattern = new RegExp(blockPattern.source + '.*');
return {
packageName,
modulePath,
blockPattern: fixedBlockPattern,
};
});
const blockList = uniqueModules.map(({ blockPattern }) => blockPattern);
const extraNodeModules = uniqueModules.reduce((acc, item) => {
acc[item.packageName] = item.modulePath;
return acc;
}, {});
config.resolver.blockList = exclusionList(blockList);
config.resolver.extraNodeModules = extraNodeModules;
config.resolver.nodeModulesPaths = [PATH.resolve(__dirname, 'node_modules')];
config.watchFolders = [packageDirPath];
module.exports = config;