diff --git a/packages/runner/src/types/tasks.ts b/packages/runner/src/types/tasks.ts index db5eb0b61e74..8a1528dbbdac 100644 --- a/packages/runner/src/types/tasks.ts +++ b/packages/runner/src/types/tasks.ts @@ -1262,7 +1262,7 @@ export interface TestAttachment { /** File system path to the attachment */ path?: string /** Inline attachment content as a string or raw binary data */ - body?: string | Uint8Array + body?: string | Uint8Array | undefined } export interface Location { diff --git a/packages/spy/optional-types.d.ts b/packages/spy/optional-types.d.ts new file mode 100644 index 000000000000..ba94336682fd --- /dev/null +++ b/packages/spy/optional-types.d.ts @@ -0,0 +1,6 @@ +/* eslint-disable ts/ban-ts-comment */ + +export interface Disposable { + // @ts-ignore -- Symbol.dispose might not be in user types + [Symbol.dispose]: () => void +} diff --git a/packages/spy/package.json b/packages/spy/package.json index 472e3197ec23..045d22eaf8bf 100644 --- a/packages/spy/package.json +++ b/packages/spy/package.json @@ -27,13 +27,17 @@ "types": "./dist/index.d.ts", "default": "./dist/index.js" }, + "./optional-types.js": { + "types": "./optional-types.d.ts" + }, "./*": "./*" }, "main": "./dist/index.js", "module": "./dist/index.js", "types": "./dist/index.d.ts", "files": [ - "dist" + "dist", + "optional-types.d.ts" ], "scripts": { "build": "premove dist && rollup -c", diff --git a/packages/spy/rollup.config.js b/packages/spy/rollup.config.js index 98195169d7db..3f9e6e234d31 100644 --- a/packages/spy/rollup.config.js +++ b/packages/spy/rollup.config.js @@ -10,6 +10,7 @@ const external = [ ...builtinModules, ...Object.keys(pkg.dependencies || {}), ...Object.keys(pkg.peerDependencies || {}), + '@vitest/spy/optional-types.js', ] const dtsUtils = createDtsUtils() diff --git a/packages/spy/src/types.ts b/packages/spy/src/types.ts index 14b9d4dc3b3d..dada97940ec0 100644 --- a/packages/spy/src/types.ts +++ b/packages/spy/src/types.ts @@ -1,3 +1,5 @@ +import type { Disposable } from '@vitest/spy/optional-types.js' + export interface MockResultReturn { type: 'return' /** diff --git a/packages/vitest/optional-runtime-types.d.ts b/packages/vitest/optional-runtime-types.d.ts new file mode 100644 index 000000000000..ba94336682fd --- /dev/null +++ b/packages/vitest/optional-runtime-types.d.ts @@ -0,0 +1,6 @@ +/* eslint-disable ts/ban-ts-comment */ + +export interface Disposable { + // @ts-ignore -- Symbol.dispose might not be in user types + [Symbol.dispose]: () => void +} diff --git a/packages/vitest/package.json b/packages/vitest/package.json index fd6b7d53e42f..0205a64a1cbf 100644 --- a/packages/vitest/package.json +++ b/packages/vitest/package.json @@ -48,6 +48,9 @@ "./optional-types.js": { "types": "./optional-types.d.ts" }, + "./optional-runtime-types.js": { + "types": "./optional-runtime-types.d.ts" + }, "./src/*": "./src/*", "./globals": { "types": "./globals.d.ts" diff --git a/packages/vitest/rollup.config.js b/packages/vitest/rollup.config.js index c0a0cf549d02..1766f7a66a38 100644 --- a/packages/vitest/rollup.config.js +++ b/packages/vitest/rollup.config.js @@ -75,6 +75,7 @@ const external = [ 'node:console', 'node:events', 'inspector', + 'vitest/optional-runtime-types.js', 'vitest/optional-types.js', 'vitest/browser', 'vite/module-runner', diff --git a/packages/vitest/src/integrations/vi.ts b/packages/vitest/src/integrations/vi.ts index 86a9abb9d42b..4b1822223f5a 100644 --- a/packages/vitest/src/integrations/vi.ts +++ b/packages/vitest/src/integrations/vi.ts @@ -6,6 +6,7 @@ import type { MaybePartiallyMockedDeep, MockInstance, } from '@vitest/spy' +import type { Disposable } from 'vitest/optional-runtime-types.js' import type { RuntimeOptions, SerializedConfig } from '../runtime/config' import type { VitestMocker } from '../runtime/moduleRunner/moduleMocker' import type { MockFactoryWithHelper, MockOptions } from '../types/mocker' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a907a964e130..1d44e98c9965 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1351,7 +1351,16 @@ importers: specifier: workspace:* version: link:../../../../packages/vitest - test/cli/dts/exact-optional-property: + test/cli/dts/exact-optional-property-no-node: + devDependencies: + '@vitest/runner': + specifier: workspace:* + version: link:../../../../packages/runner + vitest: + specifier: workspace:* + version: link:../../../../packages/vitest + + test/cli/dts/exact-optional-property-node: devDependencies: '@vitest/runner': specifier: workspace:* @@ -1366,6 +1375,15 @@ importers: specifier: workspace:* version: link:../../../../packages/vitest + test/cli/dts/no-dispose: + devDependencies: + '@vitest/runner': + specifier: workspace:* + version: link:../../../../packages/runner + vitest: + specifier: workspace:* + version: link:../../../../packages/vitest + test/config: devDependencies: '@test/test-dep-config': diff --git a/test/cli/dts/exact-optional-property/package.json b/test/cli/dts/exact-optional-property-no-node/package.json similarity index 100% rename from test/cli/dts/exact-optional-property/package.json rename to test/cli/dts/exact-optional-property-no-node/package.json diff --git a/test/cli/dts/exact-optional-property/src/runner.ts b/test/cli/dts/exact-optional-property-no-node/src/runner.ts similarity index 60% rename from test/cli/dts/exact-optional-property/src/runner.ts rename to test/cli/dts/exact-optional-property-no-node/src/runner.ts index da41cb84a9f5..a48f41075b04 100644 --- a/test/cli/dts/exact-optional-property/src/runner.ts +++ b/test/cli/dts/exact-optional-property-no-node/src/runner.ts @@ -1,4 +1,7 @@ import type { VitestRunner } from '@vitest/runner' +import type { FailureScreenshotArtifact } from '@vitest/runner/types' import { VitestTestRunner } from 'vitest/runners' +type _Override = FailureScreenshotArtifact + export class MyRunner extends VitestTestRunner implements VitestRunner {} diff --git a/test/cli/dts/exact-optional-property-no-node/tsconfig.json b/test/cli/dts/exact-optional-property-no-node/tsconfig.json new file mode 100644 index 000000000000..9e1ce6d9410d --- /dev/null +++ b/test/cli/dts/exact-optional-property-no-node/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": ["../_shared/tsconfig.patch.json"], + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "types": [], + "strict": true, + "exactOptionalPropertyTypes": true, + "declaration": true, + "declarationMap": true, + "outDir": "dist", + "sourceMap": true, + "verbatimModuleSyntax": true, + "skipLibCheck": false + } +} diff --git a/test/cli/dts/exact-optional-property-node/package.json b/test/cli/dts/exact-optional-property-node/package.json new file mode 100644 index 000000000000..51c24416b172 --- /dev/null +++ b/test/cli/dts/exact-optional-property-node/package.json @@ -0,0 +1,12 @@ +{ + "name": "@vitest/test-integration-dts-exact-optional-property", + "type": "module", + "private": true, + "scripts": { + "test": "tsc -b" + }, + "devDependencies": { + "@vitest/runner": "workspace:*", + "vitest": "workspace:*" + } +} diff --git a/test/cli/dts/exact-optional-property/src/reporter.ts b/test/cli/dts/exact-optional-property-node/src/reporter.ts similarity index 82% rename from test/cli/dts/exact-optional-property/src/reporter.ts rename to test/cli/dts/exact-optional-property-node/src/reporter.ts index a0b76ae951ec..758bc40a4353 100644 --- a/test/cli/dts/exact-optional-property/src/reporter.ts +++ b/test/cli/dts/exact-optional-property-node/src/reporter.ts @@ -1,5 +1,5 @@ import type { File } from '@vitest/runner' -import { DefaultReporter } from 'vitest/reporters' +import { DefaultReporter } from 'vitest/node' export class MyReporter extends DefaultReporter { override reportTestSummary(files: File[], errors: unknown[], leakCount: number): void { diff --git a/test/cli/dts/exact-optional-property/tsconfig.json b/test/cli/dts/exact-optional-property-node/tsconfig.json similarity index 95% rename from test/cli/dts/exact-optional-property/tsconfig.json rename to test/cli/dts/exact-optional-property-node/tsconfig.json index f41906c5b6a2..004e6a8ea87e 100644 --- a/test/cli/dts/exact-optional-property/tsconfig.json +++ b/test/cli/dts/exact-optional-property-node/tsconfig.json @@ -4,6 +4,7 @@ "target": "ESNext", "module": "ESNext", "moduleResolution": "Bundler", + "types": [], "strict": true, "exactOptionalPropertyTypes": true, "declaration": true, diff --git a/test/cli/dts/no-dispose/package.json b/test/cli/dts/no-dispose/package.json new file mode 100644 index 000000000000..51c24416b172 --- /dev/null +++ b/test/cli/dts/no-dispose/package.json @@ -0,0 +1,12 @@ +{ + "name": "@vitest/test-integration-dts-exact-optional-property", + "type": "module", + "private": true, + "scripts": { + "test": "tsc -b" + }, + "devDependencies": { + "@vitest/runner": "workspace:*", + "vitest": "workspace:*" + } +} diff --git a/test/cli/dts/no-dispose/src/vitest.ts b/test/cli/dts/no-dispose/src/vitest.ts new file mode 100644 index 000000000000..d308614f9ec4 --- /dev/null +++ b/test/cli/dts/no-dispose/src/vitest.ts @@ -0,0 +1,4 @@ +import { vi } from 'vitest' + +const _fn = vi.fn() +const _mock = vi.doMock('./vitest.ts') diff --git a/test/cli/dts/no-dispose/tsconfig.json b/test/cli/dts/no-dispose/tsconfig.json new file mode 100644 index 000000000000..4d6e3973862c --- /dev/null +++ b/test/cli/dts/no-dispose/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": ["../_shared/tsconfig.patch.json"], + "compilerOptions": { + "target": "es2020", + "lib": ["DOM", "ES2020"], + "module": "node16", + "types": [], + "strict": true, + "declaration": true, + "declarationMap": true, + "outDir": "dist", + "sourceMap": true, + "verbatimModuleSyntax": true, + "skipLibCheck": false + }, + "include": ["src/*.ts"] +}