amis-rpc-design/node_modules/@react-native-community/cli-plugin-metro/build/tools/loadMetroConfig.js
2023-10-07 19:42:30 +08:00

100 lines
3.7 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = loadMetroConfig;
function _fs() {
const data = _interopRequireDefault(require("fs"));
_fs = function () {
return data;
};
return data;
}
function _path() {
const data = _interopRequireDefault(require("path"));
_path = function () {
return data;
};
return data;
}
function _metroConfig() {
const data = require("metro-config");
_metroConfig = function () {
return data;
};
return data;
}
function _cliTools() {
const data = require("@react-native-community/cli-tools");
_cliTools = function () {
return data;
};
return data;
}
var _getDefaultMetroConfig = _interopRequireDefault(require("./getDefaultMetroConfig"));
var _metroPlatformResolver = require("./metroPlatformResolver");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Get the config options to override based on RN CLI inputs.
*/
function getOverrideConfig(ctx) {
const outOfTreePlatforms = Object.keys(ctx.platforms).filter(platform => ctx.platforms[platform].npmPackageName);
const resolver = {
platforms: [...Object.keys(ctx.platforms), 'native']
};
if (outOfTreePlatforms.length) {
resolver.resolveRequest = (0, _metroPlatformResolver.reactNativePlatformResolver)(outOfTreePlatforms.reduce((result, platform) => {
result[platform] = ctx.platforms[platform].npmPackageName;
return result;
}, {}));
}
return {
resolver,
serializer: {
// We can include multiple copies of InitializeCore here because metro will
// only add ones that are already part of the bundle
getModulesRunBeforeMainModule: () => [require.resolve(_path().default.join(ctx.reactNativePath, 'Libraries/Core/InitializeCore')), ...outOfTreePlatforms.map(platform => require.resolve(`${ctx.platforms[platform].npmPackageName}/Libraries/Core/InitializeCore`, {
paths: [ctx.root]
}))]
}
};
}
/**
* Load Metro config.
*
* Allows the CLI to override select values in `metro.config.js` based on
* dynamic user options in `ctx`.
*/
async function loadMetroConfig(ctx, options = {}) {
const overrideConfig = getOverrideConfig(ctx);
if (options.reporter) {
overrideConfig.reporter = options.reporter;
}
const cwd = ctx.root;
const projectConfig = await (0, _metroConfig().resolveConfig)(options.config, cwd);
if (projectConfig.isEmpty) {
throw new (_cliTools().CLIError)(`No Metro config found in ${cwd}`);
}
_cliTools().logger.debug(`Reading Metro config from ${projectConfig.filepath}`);
if (!global.__REACT_NATIVE_METRO_CONFIG_LOADED &&
// TODO(huntie): Remove this check from 0.73 onwards (all users will be on
// the next major @react-native/metro-config version)
!/['"']@react-native\/metro-config['"']/.test(_fs().default.readFileSync(projectConfig.filepath, 'utf8'))) {
_cliTools().logger.warn('From React Native 0.72, your metro.config.js file should extend' + "'@react-native/metro-config'. Please see the React Native 0.72 " + 'changelog, or copy the template at:\n' + 'https://github.com/facebook/react-native/blob/main/packages/react-native/template/metro.config.js');
_cliTools().logger.warn('Falling back to internal defaults.');
const loadedConfig = await (0, _metroConfig().loadConfig)({
cwd: ctx.root,
...options
},
// Provide React Native defaults on top of Metro defaults
(0, _getDefaultMetroConfig.default)(ctx));
return (0, _metroConfig().mergeConfig)(loadedConfig, overrideConfig);
}
return (0, _metroConfig().mergeConfig)(await (0, _metroConfig().loadConfig)({
cwd,
...options
}), overrideConfig);
}
//# sourceMappingURL=loadMetroConfig.ts.map