knip
Version:
Find and fix unused dependencies, exports and files in your TypeScript and JavaScript projects
37 lines (36 loc) • 1.93 kB
JavaScript
import { ISSUE_TYPES } from '../constants.js';
import { ConfigurationError } from './errors.js';
export const defaultExcludedIssueTypes = ['classMembers', 'nsExports', 'nsTypes'];
const defaultIssueTypes = ISSUE_TYPES.filter(type => !defaultExcludedIssueTypes.includes(type));
const normalize = (values) => values.flatMap(value => value.split(','));
export const shorthandDeps = ['dependencies', 'unlisted', 'binaries', 'unresolved', 'catalog'];
export const shorthandExports = ['exports', 'types', 'enumMembers', 'duplicates'];
export const shorthandFiles = ['files'];
export const getIncludedIssueTypes = (options) => {
const incl = normalize(options.includeOverrides ?? []);
const excl = normalize(options.excludeOverrides ?? []);
for (const type of [...incl, ...excl, ...options.include, ...options.exclude]) {
if (!ISSUE_TYPES.includes(type))
throw new ConfigurationError(`Invalid issue type: ${type}`);
}
const excludes = options.exclude.filter(exclude => !incl.includes(exclude));
const includes = options.include.filter(include => !excl.includes(include));
const _include = [...incl, ...includes];
const _exclude = [...excl, ...excludes];
if (options.isProduction) {
_exclude.push('devDependencies');
_exclude.push('catalog');
}
else {
if (_include.includes('dependencies'))
_include.push('devDependencies', 'optionalPeerDependencies');
if (_exclude.includes('dependencies'))
_exclude.push('devDependencies', 'optionalPeerDependencies');
}
const included = (_include.length > 0
? _include.some(type => !defaultExcludedIssueTypes.includes(type))
? _include
: [..._include, ...defaultIssueTypes]
: defaultIssueTypes).filter(group => !_exclude.includes(group));
return Object.fromEntries(ISSUE_TYPES.map(group => [group, included.includes(group)]));
};