Special handlers recognize dependencies that are not typically detected by standard parsers. They parse configuration files and detect dependencies used by build tools, linters, test frameworks, and other tooling.
type Special = (
filePath: string,
deps: string[],
rootDir: string
) => Promise<string[]>;Parameters:
filePath: Path to the configuration file being parseddeps: Array of available dependencies to match againstrootDir: Project root directory pathReturns: Promise resolving to array of dependency names found in the configuration
// Babel configuration parser
depcheck.special.babel: Special;
// Webpack configuration parser
depcheck.special.webpack: Special;
// Gulp load plugins parser
depcheck.special['gulp-load-plugins']: Special;
// ttypescript transformers parser
depcheck.special.ttypescript: Special;// ESLint configuration parser
depcheck.special.eslint: Special;
// TSLint configuration parser (deprecated)
depcheck.special.tslint: Special;
// Prettier configuration parser
depcheck.special.prettier: Special;
// Standard.js configuration parser
depcheck.special['feross-standard']: Special;// Jest configuration parser
depcheck.special.jest: Special;
// Mocha configuration parser
depcheck.special.mocha: Special;
// Karma configuration parser
depcheck.special.karma: Special;// Binary/executable detection
depcheck.special.bin: Special;
// Husky git hooks parser
depcheck.special.husky: Special;
// Lint-staged configuration parser
depcheck.special['lint-staged']: Special;
// Commitizen configuration parser
depcheck.special.commitizen: Special;
// Istanbul/NYC coverage parser
depcheck.special.istanbul: Special;// Gatsby configuration parser
depcheck.special.gatsby: Special;
// Serverless framework parser
depcheck.special.serverless: Special;
// React 17+ JSX transform handler
depcheck.special.react17: Special;By default, all available specials are enabled:
const defaultSpecials = [
depcheck.special.babel,
depcheck.special.bin,
depcheck.special.commitizen,
depcheck.special.eslint,
depcheck.special['feross-standard'],
depcheck.special.gatsby,
depcheck.special['gulp-load-plugins'],
depcheck.special.husky,
depcheck.special.istanbul,
depcheck.special.jest,
depcheck.special.karma,
depcheck.special['lint-staged'],
depcheck.special.mocha,
depcheck.special.prettier,
depcheck.special.react17,
depcheck.special.serverless,
depcheck.special.tslint,
depcheck.special.ttypescript,
depcheck.special.webpack
];You can customize which special handlers to use:
import depcheck from 'depcheck';
const options = {
specials: [
depcheck.special.eslint,
depcheck.special.webpack,
depcheck.special.jest
]
};
depcheck('/path/to/project', options).then(result => {
// Only ESLint, Webpack, and Jest configurations will be parsed
});Detects dependencies in ESLint configuration files:
.eslintrc.*, eslint field in package.jsoneslint-plugin-react, @typescript-eslint/parser// .eslintrc.js
module.exports = {
extends: ['airbnb', 'plugin:react/recommended'], // eslint-config-airbnb, eslint-plugin-react
parser: '@typescript-eslint/parser', // @typescript-eslint/parser
plugins: ['import', 'jsx-a11y'], // eslint-plugin-import, eslint-plugin-jsx-a11y
settings: {
'import/resolver': {
'webpack': {} // eslint-import-resolver-webpack
}
}
};Detects dependencies in Webpack configuration:
webpack.config.*, webpack.*.config.*babel-loader, css-loader, webpack-dev-serverDetects dependencies in Jest configuration:
jest.config.*, jest field in package.jsonjest-environment-jsdom, babel-jestDetects dependencies in Babel configuration:
.babelrc.*, babel.config.*, babel field in package.json@babel/preset-env, @babel/plugin-transform-runtimeDetects dependencies referenced in npm scripts and CI configurations:
package.json scripts, .travis.yml, GitHub Actions workflowseslint, webpack-cli, typescriptIn .depcheckrc files, specify specials as an array:
{
"specials": [
"eslint",
"webpack",
"jest",
"babel"
]
}While not part of the public API, the pattern for custom special handlers follows:
async function customSpecial(filePath: string, deps: string[], rootDir: string): Promise<string[]> {
// Parse configuration file
// Extract dependency names
// Return array of dependencies
return foundDependencies;
}Note: Custom special handlers are advanced usage and require deep understanding of the configuration format being parsed.