Skip to content

Commit 2fa02de

Browse files
committed
fix(typescript): exclude effective outDir from filter to avoid re-processing outputs\n\n- Exclude user-configured or auto temp outDir from the plugin filter\n- Guard against excluding sources when outDir contains the filter root (e.g., outDir='.' with rootDir='src')\n\nImplements review feedback to avoid feedback loops with allowJs and user outDir.
1 parent 7e8812d commit 2fa02de

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

packages/typescript/src/index.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,22 @@ export default function typescript(options: RollupTypescriptOptions = {}): Plugi
6363
? '{,**/}*.{cts,mts,ts,tsx,js,jsx,mjs,cjs}'
6464
: '{,**/}*.{cts,mts,ts,tsx}';
6565

66+
// Build filter exclusions, ensuring we never re-process TypeScript emit outputs.
67+
// Always exclude the effective outDir (user-provided or the auto-created temp dir).
6668
const filterExclude = Array.isArray(exclude) ? [...exclude] : exclude ? [exclude] : [];
67-
if (autoOutDir) {
68-
filterExclude.push(normalizePath(path.join(autoOutDir, '**')));
69+
const effectiveOutDir = parsedOptions.options.outDir
70+
? path.resolve(parsedOptions.options.outDir)
71+
: null;
72+
const filterBase = (filterRoot ?? parsedOptions.options.rootDir) || null;
73+
const filterBaseAbs = filterBase ? path.resolve(filterBase) : null;
74+
if (effectiveOutDir) {
75+
// Avoid excluding sources: skip when the filter base (rootDir) lives inside outDir
76+
const outDirContainsFilterBase =
77+
filterBaseAbs &&
78+
(filterBaseAbs === effectiveOutDir || filterBaseAbs.startsWith(effectiveOutDir + path.sep));
79+
if (!outDirContainsFilterBase) {
80+
filterExclude.push(normalizePath(path.join(effectiveOutDir, '**')));
81+
}
6982
}
7083
const filter = createFilter(include || defaultInclude, filterExclude, {
7184
resolve: filterRoot ?? parsedOptions.options.rootDir

0 commit comments

Comments
 (0)