UNPKG

@cordxapp/lintydeps

Version:

Finds and reports missing or unused dependencies and dev dependencies

92 lines (79 loc) 3.65 kB
import { logger } from '../utils/logger' import { buildStatus } from '../utils/status' import depcheck, { Results } from 'depcheck' let BUILD_FAILED = { state: 'failed', message: 'Unable to lint dependencies,' } let BUILD_PASSED = { state: 'passed', message: 'All dependencies are up to date,' } let BUILD_PENDING = { state: 'pending', message: 'Checking dependencies, please wait...' } interface Config { withoutDev: boolean ignoreBinPackage: boolean ignoreDirs: string[] ignoreMatches: string[] parsers?: any detectors?: any specials?: any } const lintydeps = async (rootPath: string, config: Config): Promise<void> => { logger.process(`Analysing dependencies in ${rootPath}...`) await buildStatus(BUILD_PENDING) depcheck(rootPath, config, async (unused: Results) => { const invalidFiles = Object.keys(unused.invalidFiles) const invalidDirs = Object.keys(unused.invalidDirs) const missingDependencies = Object.keys(unused.missing) const unusedDependencies = unused.dependencies const unusedDevDependencies = unused.devDependencies if (unusedDependencies.length) { logger.error( `\n ${unusedDependencies.length} Unused Dependencies: Declared in the package.json file, but not used by any code.` ) unusedDependencies.forEach((fileName: string) => { console.log(' -- ', fileName) }) BUILD_FAILED.message = `(${unusedDependencies.length}) Unused dependencies found.` await buildStatus(BUILD_FAILED) throw new Error(BUILD_FAILED.message) } else { logger.success('\n✓ No unused dependencies found.') } if (unusedDevDependencies.length) { logger.error( `\n ${unusedDevDependencies.length} Unused Dev Dependencies: Declared in the package.json file, but not used by any code.` ) unusedDevDependencies.forEach((fileName: string) => { console.log(' -- ', fileName) }) BUILD_FAILED.message = `(${unusedDevDependencies.length}) Unused dev dependencies found.` await buildStatus(BUILD_FAILED) throw new Error(BUILD_FAILED.message) } else { logger.success('\n✓ No unused dev dependencies found.') } if (missingDependencies.length) { logger.error( `\n ${missingDependencies.length} Missing Dependencies: is used somewhere in the code, but not declared in the package.json file.` ) missingDependencies.forEach(fileName => { console.log(' -- ', fileName) }) BUILD_FAILED.message = `(${missingDependencies.length}) Missing dependencies found.` await buildStatus(BUILD_FAILED) throw new Error(BUILD_FAILED.message) } else { logger.success('\n✓ No missing dependencies found.') } if (invalidFiles.length) { logger.warning(`\nFailed to parse ${invalidFiles.length} files`) invalidFiles.forEach(fileName => { console.log(' -- ', fileName) }) } if (invalidDirs.length) { logger.warning(`Failed to parse ${invalidDirs.length} directories`) invalidDirs.forEach(fileName => { console.log(' -- ', fileName) }) } await buildStatus(BUILD_PASSED) }) } export default lintydeps