From 4557841aac839f28008545189df53dfa240a475e Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Thu, 26 Jun 2025 13:37:31 +0200 Subject: [PATCH] revert(typescript): reverts #1653 This reverts commit 40a38b13cb21d41d832588fe8a6d106b3c0a9079 This commit caused certain files to no longer be included in the project. --- packages/typescript/src/index.ts | 64 ++++++------------- .../included-declarations/declarations.d.ts | 3 + .../fixtures/included-declarations/main.ts | 3 + .../included-declarations/tsconfig.json | 3 + .../invalid.ts | 2 - .../with-invalid-sources-inside-cwd/main.ts | 3 - .../with-invalid-sources-inside-cwd/valid.ts | 1 - packages/typescript/test/test.js | 30 ++++----- packages/typescript/test/tslib.ts | 17 ++--- 9 files changed, 52 insertions(+), 74 deletions(-) create mode 100644 packages/typescript/test/fixtures/included-declarations/declarations.d.ts create mode 100644 packages/typescript/test/fixtures/included-declarations/main.ts create mode 100644 packages/typescript/test/fixtures/included-declarations/tsconfig.json delete mode 100644 packages/typescript/test/fixtures/with-invalid-sources-inside-cwd/invalid.ts delete mode 100644 packages/typescript/test/fixtures/with-invalid-sources-inside-cwd/main.ts delete mode 100644 packages/typescript/test/fixtures/with-invalid-sources-inside-cwd/valid.ts diff --git a/packages/typescript/src/index.ts b/packages/typescript/src/index.ts index a5c82af8d..339a8ba40 100644 --- a/packages/typescript/src/index.ts +++ b/packages/typescript/src/index.ts @@ -2,7 +2,7 @@ import * as path from 'path'; import { createFilter } from '@rollup/pluginutils'; -import type { Plugin, PluginContext, SourceDescription } from 'rollup'; +import type { Plugin, SourceDescription } from 'rollup'; import type { Watch } from 'typescript'; import type { RollupTypescriptOptions } from '../types'; @@ -37,31 +37,6 @@ export default function typescript(options: RollupTypescriptOptions = {}): Plugi tslib, typescript: ts } = getPluginOptions(options); - const createProgram = (context: PluginContext) => - createWatchProgram(ts, context, { - formatHost, - resolveModule, - parsedOptions, - writeFile(fileName, data, _writeByteOrderMark, _onError, sourceFiles) { - if (sourceFiles) { - for (const sourceFile of sourceFiles) { - if (!parsedOptions.fileNames.includes(sourceFile.fileName)) { - parsedOptions.fileNames.push(sourceFile.fileName); - } - } - } - - if (parsedOptions.options.composite || parsedOptions.options.incremental) { - tsCache.cacheCode(fileName, data); - } - emittedFiles.set(fileName, data); - }, - status(diagnostic) { - watchProgramHelper.handleStatus(diagnostic); - }, - transformers - }); - const tsCache = new TSCache(cacheDir); const emittedFiles = new Map(); const watchProgramHelper = new WatchProgramHelper(); @@ -81,14 +56,6 @@ export default function typescript(options: RollupTypescriptOptions = {}): Plugi name: 'typescript', buildStart(rollupOptions) { - if (typeof rollupOptions.input === 'string') { - rollupOptions.input = [rollupOptions.input]; - } - - if (Array.isArray(rollupOptions.input)) { - parsedOptions.fileNames = rollupOptions.input.map((fileName) => path.resolve(fileName)); - } - emitParsedOptionsErrors(ts, this, parsedOptions); preflight({ @@ -107,7 +74,21 @@ export default function typescript(options: RollupTypescriptOptions = {}): Plugi program = null; } if (!program) { - program = createProgram(this); + program = createWatchProgram(ts, this, { + formatHost, + resolveModule, + parsedOptions, + writeFile(fileName, data) { + if (parsedOptions.options.composite || parsedOptions.options.incremental) { + tsCache.cacheCode(fileName, data); + } + emittedFiles.set(fileName, data); + }, + status(diagnostic) { + watchProgramHelper.handleStatus(diagnostic); + }, + transformers + }); } }, @@ -158,6 +139,7 @@ export default function typescript(options: RollupTypescriptOptions = {}): Plugi if (resolved) { if (/\.d\.[cm]?ts/.test(resolved.extension)) return null; + if (!filter(resolved.resolvedFileName)) return null; return path.normalize(resolved.resolvedFileName); } @@ -167,20 +149,16 @@ export default function typescript(options: RollupTypescriptOptions = {}): Plugi async load(id) { if (!filter(id)) return null; - const resolvedId = path.resolve(id); - - this.addWatchFile(resolvedId); + this.addWatchFile(id); await watchProgramHelper.wait(); - const fileName = normalizePath(resolvedId); + const fileName = normalizePath(id); if (!parsedOptions.fileNames.includes(fileName)) { // Discovered new file that was not known when originally parsing the TypeScript config - parsedOptions.fileNames.push(path.resolve(fileName)); - - createProgram(this).close(); + parsedOptions.fileNames.push(fileName); } - const output = findTypescriptOutput(ts, parsedOptions, resolvedId, emittedFiles, tsCache); + const output = findTypescriptOutput(ts, parsedOptions, id, emittedFiles, tsCache); return output.code != null ? (output as SourceDescription) : null; }, diff --git a/packages/typescript/test/fixtures/included-declarations/declarations.d.ts b/packages/typescript/test/fixtures/included-declarations/declarations.d.ts new file mode 100644 index 000000000..7df317724 --- /dev/null +++ b/packages/typescript/test/fixtures/included-declarations/declarations.d.ts @@ -0,0 +1,3 @@ +declare module 'declared-module' { + export function declaredFunction(): void; +} diff --git a/packages/typescript/test/fixtures/included-declarations/main.ts b/packages/typescript/test/fixtures/included-declarations/main.ts new file mode 100644 index 000000000..d9cd1867f --- /dev/null +++ b/packages/typescript/test/fixtures/included-declarations/main.ts @@ -0,0 +1,3 @@ +import { declaredFunction } from 'declared-module'; + +declaredFunction(); diff --git a/packages/typescript/test/fixtures/included-declarations/tsconfig.json b/packages/typescript/test/fixtures/included-declarations/tsconfig.json new file mode 100644 index 000000000..489211ee8 --- /dev/null +++ b/packages/typescript/test/fixtures/included-declarations/tsconfig.json @@ -0,0 +1,3 @@ +{ + "include": ["main.ts", "declarations.d.ts"], +} diff --git a/packages/typescript/test/fixtures/with-invalid-sources-inside-cwd/invalid.ts b/packages/typescript/test/fixtures/with-invalid-sources-inside-cwd/invalid.ts deleted file mode 100644 index efa311cae..000000000 --- a/packages/typescript/test/fixtures/with-invalid-sources-inside-cwd/invalid.ts +++ /dev/null @@ -1,2 +0,0 @@ -// eslint-disable-next-line -foo diff --git a/packages/typescript/test/fixtures/with-invalid-sources-inside-cwd/main.ts b/packages/typescript/test/fixtures/with-invalid-sources-inside-cwd/main.ts deleted file mode 100644 index 949e87258..000000000 --- a/packages/typescript/test/fixtures/with-invalid-sources-inside-cwd/main.ts +++ /dev/null @@ -1,3 +0,0 @@ -import {foo} from "./valid"; - -console.log(foo); diff --git a/packages/typescript/test/fixtures/with-invalid-sources-inside-cwd/valid.ts b/packages/typescript/test/fixtures/with-invalid-sources-inside-cwd/valid.ts deleted file mode 100644 index ac7c27324..000000000 --- a/packages/typescript/test/fixtures/with-invalid-sources-inside-cwd/valid.ts +++ /dev/null @@ -1 +0,0 @@ -export const foo = 5; diff --git a/packages/typescript/test/test.js b/packages/typescript/test/test.js index 0e005fa14..d9b9f6a31 100644 --- a/packages/typescript/test/test.js +++ b/packages/typescript/test/test.js @@ -1154,8 +1154,7 @@ test.serial('does it support tsconfig.rootDir for filtering', async (t) => { t.is(files.length, 1); }); -// todo: why would want to deliberately forbid resolution from outside of CWD? What problem does it solve to add such a constraint? -test.skip('does it fail for filtering with incorrect rootDir in nested projects', async (t) => { +test.serial('does it fail for filtering with incorrect rootDir in nested projects', async (t) => { process.chdir('fixtures/root-dir/packages/test-2'); const error = await t.throwsAsync( rollup({ @@ -1615,17 +1614,18 @@ test.serial('compiled external library', async (t) => { t.pass(); }); -test.serial( - 'do not consider files that are not part of the entry point dependency graph', - async (t) => { - process.chdir('fixtures/with-invalid-sources-inside-cwd'); - const input = 'main.ts'; - - const build = await rollup({ - input, - plugins: [typescript()] - }); +test.serial('observes included declarations', async (t) => { + const warnings = []; + const bundle = await rollup({ + input: 'fixtures/included-declarations/main.ts', + external: ['declared-module'], + plugins: [typescript({ tsconfig: 'fixtures/included-declarations/tsconfig.json' })], + onwarn(warning) { + warnings.push(warning); + } + }); + t.deepEqual(warnings, []); - t.deepEqual(build.watchFiles, [path.resolve('main.ts'), path.resolve('valid.ts')]); - } -); + const files = await getCode(bundle, { format: 'es' }, true); + t.is(files.length, 1); +}); diff --git a/packages/typescript/test/tslib.ts b/packages/typescript/test/tslib.ts index 530534046..cbb95820a 100644 --- a/packages/typescript/test/tslib.ts +++ b/packages/typescript/test/tslib.ts @@ -1,5 +1,4 @@ import { platform } from 'os'; -import { resolve } from 'path'; import test from 'ava'; import type { RollupError } from 'rollup'; @@ -63,15 +62,13 @@ test.serial('fails on bad tslib path', async (t) => { return; } - t.deepEqual( - error.message, - `Could not load fixtures/joker/tslib.js (imported by fixtures/overriding-tslib/main.ts): ENOENT: no such file or directory, open 'fixtures/joker/tslib.js'` - ); - t.deepEqual(error.watchFiles, [ - resolve('fixtures/overriding-tslib/main.ts'), - 'fixtures/joker/tslib.js' - ]); - t.deepEqual(error.code, 'ENOENT'); + if (error.watchFiles) { + let [filePath] = error.watchFiles; + filePath = filePath.substring(filePath.indexOf('packages')); + error.watchFiles[0] = filePath; + } + + t.snapshot(error); }); test.serial('fails without tslib installed', async (t) => {