From 512c3e480fe0271ab9a773679ba111d697b1ac3d Mon Sep 17 00:00:00 2001 From: Lars Kappert Date: Sun, 23 Feb 2025 10:37:49 +0100 Subject: [PATCH] Refine input methods --- packages/knip/src/graph/build.ts | 12 ++++++++++-- packages/knip/src/util/get-referenced-inputs.ts | 4 ++-- packages/knip/src/util/input.ts | 11 +++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/packages/knip/src/graph/build.ts b/packages/knip/src/graph/build.ts index 3016c4480..0842e5c4e 100644 --- a/packages/knip/src/graph/build.ts +++ b/packages/knip/src/graph/build.ts @@ -179,8 +179,16 @@ export async function build({ } else if (!isConfigPattern(dependency)) { const ws = (dependency.containingFilePath && chief.findWorkspaceByFilePath(dependency.containingFilePath)) || workspace; - const specifierFilePath = getReferencedInternalFilePath(dependency, ws); - if (specifierFilePath) principal.addEntryPath(specifierFilePath, { skipExportsAnalysis: true }); + const resolvedFilePath = getReferencedInternalFilePath(dependency, ws); + if (resolvedFilePath) { + if (isDeferResolveProductionEntry(dependency)) { + productionEntryFilePatterns.add(resolvedFilePath); + } else if (isDeferResolveEntry(dependency)) { + entryFilePatterns.add(resolvedFilePath); + } else { + principal.addEntryPath(resolvedFilePath, { skipExportsAnalysis: true }); + } + } } } diff --git a/packages/knip/src/util/get-referenced-inputs.ts b/packages/knip/src/util/get-referenced-inputs.ts index e96c41238..7f8960bd6 100644 --- a/packages/knip/src/util/get-referenced-inputs.ts +++ b/packages/knip/src/util/get-referenced-inputs.ts @@ -3,7 +3,7 @@ import type { DependencyDeputy } from '../DependencyDeputy.js'; import type { IssueCollector } from '../IssueCollector.js'; import { IGNORED_RUNTIME_DEPENDENCIES } from '../constants.js'; import { debugLog } from './debug.js'; -import { toDebugString } from './input.js'; +import { isDeferResolve, toDebugString } from './input.js'; import { type Input, fromBinary, isBinary, isConfigPattern, isDeferResolveEntry, isDependency } from './input.js'; import { getPackageNameFromSpecifier } from './modules.js'; import { dirname, isAbsolute, isInternal, join } from './path.js'; @@ -81,7 +81,7 @@ export const getReferencedInputsHandler = } } - if (!isConfigPattern(input) && deputy.isProduction && !input.production) { + if (isDeferResolve(input) && deputy.isProduction && !input.production) { return; } diff --git a/packages/knip/src/util/input.ts b/packages/knip/src/util/input.ts index 509f81544..035353d54 100644 --- a/packages/knip/src/util/input.ts +++ b/packages/knip/src/util/input.ts @@ -74,6 +74,17 @@ export const toDevDependency = (specifier: string): Input => ({ type: 'dependenc export const toDeferResolve = (specifier: string): Input => ({ type: 'deferResolve', specifier }); +export const isDeferResolve = (input: Input) => input.type === 'deferResolve'; + +export const toDeferResolveProductionEntry = (specifier: string): Input => ({ + type: 'deferResolveEntry', + specifier, + production: true, +}); + +export const isDeferResolveProductionEntry = (input: Input) => + input.type === 'deferResolveEntry' && input.production === true; + export const toDeferResolveEntry = (specifier: string): Input => ({ type: 'deferResolveEntry', specifier }); export const isDeferResolveEntry = (input: Input) => input.type === 'deferResolveEntry';