From 21cd2dda44714b0191601fbd9db25532560b0e6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?= Date: Mon, 2 Sep 2024 18:04:36 +0800 Subject: [PATCH] feat: add dependency kind --- README.md | 7 +++++++ src/core/options.ts | 5 +++++ src/index.ts | 13 ++++++++----- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 773a669..286fa6d 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,14 @@ Unused({ include: [/\.([cm]?[jt]sx?|vue)$/], exclude: [/node_modules/], level: 'warning', // or 'error' + /** + * Ignore some dependencies. + */ ignore: ['vue'], + /** + * Dependency kinds to check. + */ + depKinds: ['dependencies', 'peerDependencies'], }) ``` diff --git a/src/core/options.ts b/src/core/options.ts index 2a0a911..c9538bd 100644 --- a/src/core/options.ts +++ b/src/core/options.ts @@ -9,6 +9,10 @@ export interface Options { * @default 'warning' */ level?: 'warning' | 'error' + /** + * @default ['dependencies', 'peerDependencies'] + */ + depKinds?: Array<'dependencies' | 'devDependencies' | 'peerDependencies'> } type Overwrite = Pick> & U @@ -24,5 +28,6 @@ export function resolveOptions(options: Options): OptionsResolved { exclude: options.exclude || [/node_modules/], ignore: options.ignore || [], level: options.level || 'warning', + depKinds: options.depKinds || ['dependencies', 'peerDependencies'], } } diff --git a/src/index.ts b/src/index.ts index e1eb598..ebddcec 100644 --- a/src/index.ts +++ b/src/index.ts @@ -24,11 +24,14 @@ const plugin: UnpluginInstance = createUnplugin( options.root ||= process.cwd() pkgPath = path.resolve(await resolvePackageJSON(options.root)) const pkg = await readPackageJSON(pkgPath) - const dependencies = Object.keys(pkg.dependencies || {}) - for (const dep of dependencies) { - if (options.ignore.includes(dep)) continue - deps.add(dep) - depsRegex[dep] = new RegExp(`["']${escapeStringRegexp(dep)}['"\\/]`) + + for (const kind of options.depKinds) { + const dependencies = Object.keys(pkg[kind] || {}) + for (const dep of dependencies) { + if (options.ignore.includes(dep) || deps.has(dep)) continue + deps.add(dep) + depsRegex[dep] = new RegExp(`["']${escapeStringRegexp(dep)}['"\\/]`) + } } },