From 6f8af70a2ff82cb5907b5edd507d6eaa67992986 Mon Sep 17 00:00:00 2001 From: Yevhenii Date: Fri, 6 Mar 2026 14:27:50 +0200 Subject: [PATCH 1/2] fix(types): remove extends ImportMeta from ModuleRunnerImportMeta --- packages/vite/package.json | 2 +- .../module-runner/__tests_dts__/importMeta.ts | 20 +++++++++++++++++++ .../module-runner/__tests_dts__/tsconfig.json | 9 +++++++++ .../src/module-runner/createImportMeta.ts | 4 ++-- packages/vite/src/module-runner/types.ts | 7 ++++++- 5 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 packages/vite/src/module-runner/__tests_dts__/importMeta.ts create mode 100644 packages/vite/src/module-runner/__tests_dts__/tsconfig.json diff --git a/packages/vite/package.json b/packages/vite/package.json index 93bf04b014d2ee..0f195bb8c1331c 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -65,7 +65,7 @@ "build-types": "pnpm build-types-roll && pnpm build-types-check", "build-types-roll": "rolldown --config rolldown.dts.config.ts", "build-types-check": "tsc --project tsconfig.check.json", - "typecheck": "tsc && tsc -p src/node && tsc -p src/module-runner && tsc -p src/shared && tsc -p src/node/__tests_dts__", + "typecheck": "tsc && tsc -p src/node && tsc -p src/module-runner && tsc -p src/shared && tsc -p src/node/__tests_dts__ && tsc -p src/module-runner/__tests_dts__", "lint": "eslint --cache --ext .ts src/**", "format": "prettier --write --cache --parser typescript \"src/**/*.ts\"", "generate-target": "tsx scripts/generateTarget.ts", diff --git a/packages/vite/src/module-runner/__tests_dts__/importMeta.ts b/packages/vite/src/module-runner/__tests_dts__/importMeta.ts new file mode 100644 index 00000000000000..d447e71951aeba --- /dev/null +++ b/packages/vite/src/module-runner/__tests_dts__/importMeta.ts @@ -0,0 +1,20 @@ +/** + * Type test to verify ModuleRunnerImportMeta is structurally compatible + * with ImportMeta (including @types/node augmentations). + * + * This replaces `extends ImportMeta` in the interface declaration with a + * test-only assignability check that won't cause TS2717 "subsequent property + * declarations must have the same type" errors in consumer projects using + * skipLibCheck: false with augmented ImportMeta. + */ + +import type { ExpectExtends, ExpectTrue } from '@type-challenges/utils' +import type { ModuleRunnerImportMeta } from '../types' + +export type cases = [ + // Ensure ModuleRunnerImportMeta is assignable to ImportMeta + // (which includes @types/node augmentations: dirname, filename, url, resolve, main) + ExpectTrue>, +] + +export {} diff --git a/packages/vite/src/module-runner/__tests_dts__/tsconfig.json b/packages/vite/src/module-runner/__tests_dts__/tsconfig.json new file mode 100644 index 00000000000000..0ba0f7e065d784 --- /dev/null +++ b/packages/vite/src/module-runner/__tests_dts__/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "isolatedDeclarations": false, + "declaration": false + }, + "include": ["../", "../../types"], + "exclude": ["../**/__tests__"] +} diff --git a/packages/vite/src/module-runner/createImportMeta.ts b/packages/vite/src/module-runner/createImportMeta.ts index f007dadde8e343..5b17d433e46171 100644 --- a/packages/vite/src/module-runner/createImportMeta.ts +++ b/packages/vite/src/module-runner/createImportMeta.ts @@ -25,6 +25,7 @@ export function createDefaultImportMeta( resolve(_id: string, _parent?: string) { throw new Error('[module runner] "import.meta.resolve" is not supported.') }, + main: false, // should be replaced during transformation glob() { throw new Error( @@ -32,8 +33,7 @@ export function createDefaultImportMeta( `file transformation. Make sure to reference it by the full name.`, ) }, - // @types/node adds `main` to `import.meta`, but we don't add that for the defaultImportMeta - } satisfies Omit as any + } } /** diff --git a/packages/vite/src/module-runner/types.ts b/packages/vite/src/module-runner/types.ts index 8ccf4b5edb0a4c..791fa96d5b0900 100644 --- a/packages/vite/src/module-runner/types.ts +++ b/packages/vite/src/module-runner/types.ts @@ -24,10 +24,15 @@ import type { InterceptorOptions } from './sourcemap/interceptor' export type { DefineImportMetadata, SSRImportMetadata } -export interface ModuleRunnerImportMeta extends ImportMeta { +export interface ModuleRunnerImportMeta { url: string env: ImportMetaEnv hot?: ViteHotContext + dirname: string + filename: string + glob: (...args: any[]) => any + resolve(specifier: string, parent?: string): string + main: boolean [key: string]: any } From 7733df4ad652d5de77f72b3bd268f7a9b510add8 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Fri, 6 Mar 2026 22:07:11 +0900 Subject: [PATCH 2/2] fix: remove main --- packages/vite/src/module-runner/__tests_dts__/importMeta.ts | 2 +- packages/vite/src/module-runner/createImportMeta.ts | 1 - packages/vite/src/module-runner/types.ts | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/vite/src/module-runner/__tests_dts__/importMeta.ts b/packages/vite/src/module-runner/__tests_dts__/importMeta.ts index d447e71951aeba..d187a8924b5c3f 100644 --- a/packages/vite/src/module-runner/__tests_dts__/importMeta.ts +++ b/packages/vite/src/module-runner/__tests_dts__/importMeta.ts @@ -14,7 +14,7 @@ import type { ModuleRunnerImportMeta } from '../types' export type cases = [ // Ensure ModuleRunnerImportMeta is assignable to ImportMeta // (which includes @types/node augmentations: dirname, filename, url, resolve, main) - ExpectTrue>, + ExpectTrue, ModuleRunnerImportMeta>>, ] export {} diff --git a/packages/vite/src/module-runner/createImportMeta.ts b/packages/vite/src/module-runner/createImportMeta.ts index 5b17d433e46171..a72b9b5d63ed75 100644 --- a/packages/vite/src/module-runner/createImportMeta.ts +++ b/packages/vite/src/module-runner/createImportMeta.ts @@ -25,7 +25,6 @@ export function createDefaultImportMeta( resolve(_id: string, _parent?: string) { throw new Error('[module runner] "import.meta.resolve" is not supported.') }, - main: false, // should be replaced during transformation glob() { throw new Error( diff --git a/packages/vite/src/module-runner/types.ts b/packages/vite/src/module-runner/types.ts index 791fa96d5b0900..38586c2900d288 100644 --- a/packages/vite/src/module-runner/types.ts +++ b/packages/vite/src/module-runner/types.ts @@ -32,7 +32,6 @@ export interface ModuleRunnerImportMeta { filename: string glob: (...args: any[]) => any resolve(specifier: string, parent?: string): string - main: boolean [key: string]: any }