knip
Version:
Find unused files, dependencies and exports in your TypeScript and JavaScript projects
62 lines (61 loc) • 2.49 kB
JavaScript
import { compact } from '../../util/array.js';
import { toDependency } from '../../util/input.js';
import { hasDependency } from '../../util/plugin.js';
const title = 'Nx';
const enablers = ['nx', /^@nrwl\//, /^@nx\//];
const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers);
const config = ['nx.json', 'project.json', '{apps,libs}/**/project.json', 'package.json'];
const findNxDependenciesInNxJson = async (localConfig) => {
const targetsDefault = localConfig.targetDefaults
? Object.keys(localConfig.targetDefaults)
.filter(it => it.includes(':') && it.startsWith('@'))
.map(it => it.split(':')[0])
: [];
const plugins = localConfig.plugins && Array.isArray(localConfig.plugins)
? localConfig.plugins
.map(value => (typeof value === 'string' ? value : value.plugin))
.filter(value => value !== undefined)
: [];
const generators = localConfig.generators
? Object.keys(localConfig.generators)
.filter(value => value !== undefined)
.map(value => value.split(':')[0])
: [];
return compact([...targetsDefault, ...plugins, ...generators]).map(id => toDependency(id));
};
const resolveConfig = async (localConfig, options) => {
const { configFileName } = options;
if (configFileName === 'nx.json') {
return findNxDependenciesInNxJson(localConfig, options);
}
const config = localConfig;
const targets = config.targets ? Object.values(config.targets) : [];
const executors = targets
.map(target => target?.executor)
.filter(executor => executor && !executor.startsWith('.'))
.map(executor => executor?.split(':')[0]);
const scripts = targets
.filter(target => target.executor === 'nx:run-commands' || target.command)
.flatMap(target => {
if (target.command)
return [target.command];
if (target.options?.command)
return [target.options.command];
if (target.options?.commands)
return target.options.commands;
return [];
});
const inputs = options.getInputsFromScripts(scripts);
return compact([...executors, ...inputs]).map(id => (typeof id === 'string' ? toDependency(id) : id));
};
const args = {
fromArgs: (parsed) => (parsed._[0] === 'exec' ? parsed._.slice(1) : []),
};
export default {
title,
enablers,
isEnabled,
config,
resolveConfig,
args,
};