From fb150158b3499ae9e2bd52defd90b0a09b860424 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Fri, 16 Oct 2026 18:17:50 +0200 Subject: [PATCH] fix: reference chai types in every d.ts chunk (#11618) --- packages/vitest/rollup.config.js | 10 + pnpm-lock.yaml | 220 ++++++++++++++++++ test/e2e/dts/chai-types/package.json | 15 ++ test/e2e/dts/chai-types/src/environment.ts | 11 + test/e2e/dts/chai-types/src/expect.ts | 11 + test/e2e/dts/chai-types/tsconfig.json | 13 ++ test/e2e/dts/chai-types/tsconfig.runtime.json | 4 + .../tsconfig.json | 3 +- 8 files changed, 286 insertions(+), 1 deletion(-) create mode 100644 test/e2e/dts/chai-types/package.json create mode 100644 test/e2e/dts/chai-types/src/environment.ts create mode 100644 test/e2e/dts/chai-types/src/expect.ts create mode 100644 test/e2e/dts/chai-types/tsconfig.json create mode 100644 test/e2e/dts/chai-types/tsconfig.runtime.json diff --git a/packages/vitest/rollup.config.js b/packages/vitest/rollup.config.js index 9d2635da9..292ac3895 100644 --- a/packages/vitest/rollup.config.js +++ b/packages/vitest/rollup.config.js @@ -165,6 +165,16 @@ export default ({ watch }) => } }, }, + { + // rollup-plugin-dts drops reference directives of .ts sources, + // so every chunk that uses the global `Chai` namespace loads @types/chai here + name: 'vitest-chai-type-reference', + renderChunk(code) { + if (/\bChai\./.test(code)) { + return `/// \n${code}` + } + }, + }, ], }, ]) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5674aeb7c..7cb6a13c4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1384,6 +1384,18 @@ importers: specifier: workspace:* version: link:../../../../packages/vitest + test/e2e/dts/chai-types: + devDependencies: + typescript: + specifier: 'catalog:' + version: 5.9.3 + typescript-7: + specifier: npm:typescript@^7.0.2 + version: typescript@7.0.2 + vitest: + specifier: workspace:* + version: link:../../../../packages/vitest + test/e2e/dts/config: devDependencies: vitest: @@ -5701,6 +5713,126 @@ packages: '@types/yauzl@3.4.0': resolution: {integrity: sha512-NRPn5w6h8dhcnmx3YIRQcqMywY/+nND/uOkJessedcrowO3C0AssHp3tMJpxKAwOhFOo0OV1y9VtsC5hbKKBAw==} + '@typescript/typescript-aix-ppc64@7.0.2': + resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [aix] + + '@typescript/typescript-darwin-arm64@7.0.2': + resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [darwin] + + '@typescript/typescript-darwin-x64@7.0.2': + resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [darwin] + + '@typescript/typescript-freebsd-arm64@7.0.2': + resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [freebsd] + + '@typescript/typescript-freebsd-x64@7.0.2': + resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [freebsd] + + '@typescript/typescript-linux-arm64@7.0.2': + resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [linux] + + '@typescript/typescript-linux-arm@7.0.2': + resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==} + engines: {node: '>=16.20.0'} + cpu: [arm] + os: [linux] + + '@typescript/typescript-linux-loong64@7.0.2': + resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==} + engines: {node: '>=16.20.0'} + cpu: [loong64] + os: [linux] + + '@typescript/typescript-linux-mips64el@7.0.2': + resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==} + engines: {node: '>=16.20.0'} + cpu: [mips64el] + os: [linux] + + '@typescript/typescript-linux-ppc64@7.0.2': + resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [linux] + + '@typescript/typescript-linux-riscv64@7.0.2': + resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==} + engines: {node: '>=16.20.0'} + cpu: [riscv64] + os: [linux] + + '@typescript/typescript-linux-s390x@7.0.2': + resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==} + engines: {node: '>=16.20.0'} + cpu: [s390x] + os: [linux] + + '@typescript/typescript-linux-x64@7.0.2': + resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] + + '@typescript/typescript-netbsd-arm64@7.0.2': + resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [netbsd] + + '@typescript/typescript-netbsd-x64@7.0.2': + resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [netbsd] + + '@typescript/typescript-openbsd-arm64@7.0.2': + resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [openbsd] + + '@typescript/typescript-openbsd-x64@7.0.2': + resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [openbsd] + + '@typescript/typescript-sunos-x64@7.0.2': + resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [sunos] + + '@typescript/typescript-win32-arm64@7.0.2': + resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + + '@typescript/typescript-win32-x64@7.0.2': + resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + '@typescript/vfs@1.6.4': resolution: {integrity: sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ==} peerDependencies: @@ -9856,6 +9988,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@7.0.2: + resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} + engines: {node: '>=16.20.0'} + hasBin: true + uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} @@ -13948,6 +14085,66 @@ snapshots: dependencies: '@types/node': 24.19.2 + '@typescript/typescript-aix-ppc64@7.0.2': + optional: true + + '@typescript/typescript-darwin-arm64@7.0.2': + optional: true + + '@typescript/typescript-darwin-x64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-x64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm@7.0.2': + optional: true + + '@typescript/typescript-linux-loong64@7.0.2': + optional: true + + '@typescript/typescript-linux-mips64el@7.0.2': + optional: true + + '@typescript/typescript-linux-ppc64@7.0.2': + optional: true + + '@typescript/typescript-linux-riscv64@7.0.2': + optional: true + + '@typescript/typescript-linux-s390x@7.0.2': + optional: true + + '@typescript/typescript-linux-x64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-sunos-x64@7.0.2': + optional: true + + '@typescript/typescript-win32-arm64@7.0.2': + optional: true + + '@typescript/typescript-win32-x64@7.0.2': + optional: true + '@typescript/vfs@1.6.4(supports-color@10.2.2)(typescript@5.9.3)': dependencies: debug: 4.4.3(supports-color@10.2.2) @@ -18931,6 +19128,29 @@ snapshots: typescript@5.9.3: {} + typescript@7.0.2: + optionalDependencies: + '@typescript/typescript-aix-ppc64': 7.0.2 + '@typescript/typescript-darwin-arm64': 7.0.2 + '@typescript/typescript-darwin-x64': 7.0.2 + '@typescript/typescript-freebsd-arm64': 7.0.2 + '@typescript/typescript-freebsd-x64': 7.0.2 + '@typescript/typescript-linux-arm': 7.0.2 + '@typescript/typescript-linux-arm64': 7.0.2 + '@typescript/typescript-linux-loong64': 7.0.2 + '@typescript/typescript-linux-mips64el': 7.0.2 + '@typescript/typescript-linux-ppc64': 7.0.2 + '@typescript/typescript-linux-riscv64': 7.0.2 + '@typescript/typescript-linux-s390x': 7.0.2 + '@typescript/typescript-linux-x64': 7.0.2 + '@typescript/typescript-netbsd-arm64': 7.0.2 + '@typescript/typescript-netbsd-x64': 7.0.2 + '@typescript/typescript-openbsd-arm64': 7.0.2 + '@typescript/typescript-openbsd-x64': 7.0.2 + '@typescript/typescript-sunos-x64': 7.0.2 + '@typescript/typescript-win32-arm64': 7.0.2 + '@typescript/typescript-win32-x64': 7.0.2 + uc.micro@2.1.0: {} uc.micro@3.0.0: {} diff --git a/test/e2e/dts/chai-types/package.json b/test/e2e/dts/chai-types/package.json new file mode 100644 index 000000000..1da2bd06b --- /dev/null +++ b/test/e2e/dts/chai-types/package.json @@ -0,0 +1,15 @@ +{ + "name": "@vitest/test-integration-dts-chai-types", + "type": "module", + "private": true, + "scripts": { + "test": "pnpm test:ts5 && pnpm test:ts7", + "test:ts5": "node node_modules/typescript/bin/tsc -b --force tsconfig.json tsconfig.runtime.json", + "test:ts7": "node node_modules/typescript-7/bin/tsc -b --force tsconfig.json tsconfig.runtime.json" + }, + "devDependencies": { + "typescript": "catalog:", + "typescript-7": "npm:typescript@^7.0.2", + "vitest": "workspace:*" + } +} diff --git a/test/e2e/dts/chai-types/src/environment.ts b/test/e2e/dts/chai-types/src/environment.ts new file mode 100644 index 000000000..2f60312dd --- /dev/null +++ b/test/e2e/dts/chai-types/src/environment.ts @@ -0,0 +1,11 @@ +import type { Environment } from 'vitest/runtime' + +export default { + name: 'custom', + viteEnvironment: 'ssr', + setup() { + return { + teardown() {}, + } + }, +} diff --git a/test/e2e/dts/chai-types/src/expect.ts b/test/e2e/dts/chai-types/src/expect.ts new file mode 100644 index 000000000..d190aa43c --- /dev/null +++ b/test/e2e/dts/chai-types/src/expect.ts @@ -0,0 +1,11 @@ +import { assert, expect, test } from 'vitest' + +test('chai api', async () => { + expect('a').not.toBe('b') + expect(1).to.equal(1) + expect([1, 2]).to.not.include(3) + expect({ a: 1 }).to.have.property('a').that.is.a('number') + expect.soft(1).not.toBe(2) + await expect(Promise.resolve(1)).resolves.not.toBe(2) + assert.strictEqual(1, 1) +}) diff --git a/test/e2e/dts/chai-types/tsconfig.json b/test/e2e/dts/chai-types/tsconfig.json new file mode 100644 index 000000000..481934322 --- /dev/null +++ b/test/e2e/dts/chai-types/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": ["../_shared/tsconfig.patch.json"], + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "types": [], + "strict": true, + "noEmit": true, + "skipLibCheck": false + }, + "include": ["src/expect.ts"] +} diff --git a/test/e2e/dts/chai-types/tsconfig.runtime.json b/test/e2e/dts/chai-types/tsconfig.runtime.json new file mode 100644 index 000000000..5a7bd33a2 --- /dev/null +++ b/test/e2e/dts/chai-types/tsconfig.runtime.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["src/environment.ts"] +} diff --git a/test/e2e/dts/exact-optional-property-no-node/tsconfig.json b/test/e2e/dts/exact-optional-property-no-node/tsconfig.json index b7634cc60..423c90b14 100644 --- a/test/e2e/dts/exact-optional-property-no-node/tsconfig.json +++ b/test/e2e/dts/exact-optional-property-no-node/tsconfig.json @@ -11,6 +11,7 @@ "declarationMap": true, "sourceMap": true, "verbatimModuleSyntax": true, - "skipLibCheck": false + "skipLibCheck": false, + "noEmit": true } } -- 2.54.0