rock
Version:
Command-line interface for Rock - a React Native development toolkit
56 lines • 2.13 kB
JavaScript
function isValidRNDependency(config) {
return (Object.keys(config.platforms).filter((key) => Boolean(config.platforms[key])).length !== 0);
}
function filterConfig(config) {
const filtered = { ...config };
// `react-native` is not a dependency. When loading it through community CLI it's not an issue,
// but in our case we don't install `@react-native-community/cli-platform-*` as a dependencies
// so the config.platforms key is empty, which makes autolinking treat it as a dependency.
delete filtered.dependencies['react-native'];
// we don't want to show commands in the config
filtered.commands = [];
const dependencies = {};
Object.keys(filtered.dependencies).forEach((item) => {
if (isValidRNDependency(filtered.dependencies[item])) {
dependencies[item] = filtered.dependencies[item];
}
});
return {
...filtered,
dependencies,
};
}
export const logConfig = async (args, ownConfig) => {
const { loadConfigAsync } = await import('@react-native-community/cli-config');
const config = await loadConfigAsync({
projectRoot: ownConfig.root,
selectedPlatform: args.platform,
});
const platforms = ownConfig.platforms && args.platform
? { [args.platform]: ownConfig.platforms[args.platform] }
: ownConfig.platforms;
for (const platform in platforms) {
config.project[platform] = platforms[platform].autolinkingConfig.project;
}
console.log(JSON.stringify(filterConfig(config), null, 2));
};
export const logConfigPlugin = (ownConfig) => (api) => {
api.registerCommand({
name: 'config',
description: 'Output autolinking config',
action: async (args) => {
await logConfig(args, ownConfig);
},
options: [
{
name: '-p, --platform <string>',
description: 'Select platform, e.g. ios, android, or harmony',
},
],
});
return {
name: 'internal_config',
description: 'Configuration plugin',
};
};
//# sourceMappingURL=logConfig.js.map