diff --git a/knip.jsonc b/knip.jsonc index d6526c36f..392f3b860 100644 --- a/knip.jsonc +++ b/knip.jsonc @@ -23,9 +23,6 @@ "unresolved", "exports" ], - // The "./src/*" package export used to make every src file a public entry - // point, hiding dead code from Knip. TODO(follow-up) Clean these up and drop the ignore. - "packages/vitest/src/**": ["files", "exports", "types"], "packages/vitest/src/integrations/vi.ts": ["duplicates"], "packages/vitest/src/runtime/runner/suite.ts": ["duplicates"] }, diff --git a/packages/vitest/src/constants.ts b/packages/vitest/src/constants.ts index 2124ef641..4e6b33c42 100644 --- a/packages/vitest/src/constants.ts +++ b/packages/vitest/src/constants.ts @@ -5,9 +5,9 @@ export const defaultInspectPort = 9229 export const API_PATH = '/__vitest_api__' -export const CONFIG_NAMES: string[] = ['vitest.config', 'vite.config'] +const CONFIG_NAMES: string[] = ['vitest.config', 'vite.config'] -export const CONFIG_EXTENSIONS: string[] = ['.ts', '.mts', '.cts', '.js', '.mjs', '.cjs'] +const CONFIG_EXTENSIONS: string[] = ['.ts', '.mts', '.cts', '.js', '.mjs', '.cjs'] export const configFiles: string[] = CONFIG_NAMES.flatMap(name => CONFIG_EXTENSIONS.map(ext => name + ext), diff --git a/packages/vitest/src/defaults.ts b/packages/vitest/src/defaults.ts index ecaabfe27..1aa7f251f 100644 --- a/packages/vitest/src/defaults.ts +++ b/packages/vitest/src/defaults.ts @@ -58,7 +58,7 @@ export const coverageConfigDefaults: Required = { +const fakeTimersDefaults: NonNullable = { loopLimit: 10_000, shouldClearNativeTimers: true, } diff --git a/packages/vitest/src/integrations/env/index.ts b/packages/vitest/src/integrations/env/index.ts index cdc552b52..203e7450b 100644 --- a/packages/vitest/src/integrations/env/index.ts +++ b/packages/vitest/src/integrations/env/index.ts @@ -15,5 +15,3 @@ export const environments: { 'happy-dom': happy, 'edge-runtime': edge, } - -export const envs: string[] = Object.keys(environments) diff --git a/packages/vitest/src/integrations/env/loader.ts b/packages/vitest/src/integrations/env/loader.ts index cd06d913a..334685955 100644 --- a/packages/vitest/src/integrations/env/loader.ts +++ b/packages/vitest/src/integrations/env/loader.ts @@ -19,7 +19,7 @@ function isBuiltinEnvironment( const isWindows = process.platform === 'win32' const _loaders = new Map() -export function createEnvironmentLoader(root: string, rpc: WorkerRPC): ModuleRunner { +function createEnvironmentLoader(root: string, rpc: WorkerRPC): ModuleRunner { const cachedLoader = _loaders.get(root) if (!cachedLoader || cachedLoader.isClosed()) { _loaders.delete(root) @@ -54,7 +54,7 @@ export function createEnvironmentLoader(root: string, rpc: WorkerRPC): ModuleRun return _loaders.get(root)! } -export async function loadNativeEnvironment( +async function loadNativeEnvironment( name: string, root: string, traces: Traces, diff --git a/packages/vitest/src/integrations/env/utils.ts b/packages/vitest/src/integrations/env/utils.ts index 684c5aeb3..4465aaeec 100644 --- a/packages/vitest/src/integrations/env/utils.ts +++ b/packages/vitest/src/integrations/env/utils.ts @@ -2,7 +2,7 @@ import { KEYS } from './jsdom-keys' const skipKeys = ['window', 'self', 'top', 'parent'] -export function getWindowKeys( +function getWindowKeys( global: any, win: any, additionalKeys: string[] = [], diff --git a/packages/vitest/src/node/ast-collect.ts b/packages/vitest/src/node/ast-collect.ts index c90364703..6db0a07e7 100644 --- a/packages/vitest/src/node/ast-collect.ts +++ b/packages/vitest/src/node/ast-collect.ts @@ -30,7 +30,7 @@ interface ParsedSuite extends Suite { dynamic: boolean } -export interface LocalCallDefinition { +interface LocalCallDefinition { start: number end: number name: string diff --git a/packages/vitest/src/node/cli/cli-api.ts b/packages/vitest/src/node/cli/cli-api.ts index 17f4190de..e583a656c 100644 --- a/packages/vitest/src/node/cli/cli-api.ts +++ b/packages/vitest/src/node/cli/cli-api.ts @@ -343,14 +343,14 @@ function forEachSuite(modules: TestModule[], callback: (suite: TestSuite | TestM }) } -export interface TestCollectJSONResult { +interface TestCollectJSONResult { name: string file: string projectName?: string location?: { line: number; column: number } } -export function formatCollectedAsJSON(files: TestModule[]): TestCollectJSONResult[] { +function formatCollectedAsJSON(files: TestModule[]): TestCollectJSONResult[] { const results: TestCollectJSONResult[] = [] files.forEach((file) => { @@ -374,7 +374,7 @@ export function formatCollectedAsJSON(files: TestModule[]): TestCollectJSONResul return results } -export function formatCollectedAsString(testModules: TestModule[]): string[] { +function formatCollectedAsString(testModules: TestModule[]): string[] { const results: string[] = [] testModules.forEach((testModule) => { diff --git a/packages/vitest/src/node/config/resolveConfig.ts b/packages/vitest/src/node/config/resolveConfig.ts index fa6b96843..317c09ae3 100644 --- a/packages/vitest/src/node/config/resolveConfig.ts +++ b/packages/vitest/src/node/config/resolveConfig.ts @@ -175,7 +175,7 @@ function resolveInlineWorkerOption(value: string | number): number { * the raw user config sources BEFORE `configDefaults` is merged in - the * merged object cannot distinguish a default from a user-provided value. */ -export function captureProvidedOptions( +function captureProvidedOptions( ...sources: (UserConfig | undefined)[] ): ResolvedConfig['providedOptions'] { return { diff --git a/packages/vitest/src/node/errors.ts b/packages/vitest/src/node/errors.ts index 5d030767e..d4ffa49e2 100644 --- a/packages/vitest/src/node/errors.ts +++ b/packages/vitest/src/node/errors.ts @@ -39,11 +39,3 @@ export class RangeLocationFilterProvidedError extends Error { + `are not supported. Consider specifying the exact line numbers of your tests.`) } } - -export class VitestFilteredOutProjectError extends Error { - code = 'VITEST_FILTERED_OUT_PROJECT' - - constructor() { - super('VITEST_FILTERED_OUT_PROJECT') - } -} diff --git a/packages/vitest/src/node/pool.ts b/packages/vitest/src/node/pool.ts index 8daf4b690..1118e51e8 100644 --- a/packages/vitest/src/node/pool.ts +++ b/packages/vitest/src/node/pool.ts @@ -4,7 +4,7 @@ import type { Vitest } from './core' import type { PoolTask } from './pools/types' import type { TestProject } from './project' import type { TestSpecification } from './test-specification' -import type { BuiltinPool, ResolvedConfig } from './types/config' +import type { ResolvedConfig } from './types/config' import * as nodeos from 'node:os' import process from 'node:process' import { isatty } from 'node:tty' @@ -31,20 +31,11 @@ export interface ProcessPool { close?: () => Awaitable } -export interface PoolProcessOptions { +interface PoolProcessOptions { execArgv: string[] env: Record } -export const builtinPools: BuiltinPool[] = [ - 'forks', - 'threads', - 'browser', - 'vmThreads', - 'vmForks', - 'typescript', -] - export function getFilePoolName(project: TestProject): ResolvedConfig['pool'] { if (project.config.browser.enabled) { return 'browser' diff --git a/packages/vitest/src/node/reporters/durationBreakdown.ts b/packages/vitest/src/node/reporters/durationBreakdown.ts index 7d65912fc..6bd7332fe 100644 --- a/packages/vitest/src/node/reporters/durationBreakdown.ts +++ b/packages/vitest/src/node/reporters/durationBreakdown.ts @@ -1,6 +1,6 @@ import type { File } from '../../runtime/runner/types' -export interface DurationPhase { +interface DurationPhase { name: string time: number /** Share of the tracked time, in percent (0-100). */ diff --git a/packages/vitest/src/node/reporters/index.ts b/packages/vitest/src/node/reporters/index.ts index e058597e3..2d0f37955 100644 --- a/packages/vitest/src/node/reporters/index.ts +++ b/packages/vitest/src/node/reporters/index.ts @@ -13,21 +13,21 @@ import { GithubActionsReporter } from './github-actions' import { HangingProcessReporter } from './hanging-process' import { JsonReporter } from './json' import { JUnitReporter } from './junit' -import { AgentReporter } from './minimal' +import { MinimalReporter } from './minimal' import { TapReporter } from './tap' import { TapFlatReporter } from './tap-flat' import { TreeReporter } from './tree' import { VerboseReporter } from './verbose' export { - AgentReporter, + MinimalReporter as AgentReporter, DefaultReporter, DotReporter, GithubActionsReporter, HangingProcessReporter, JsonReporter, JUnitReporter, - AgentReporter as MinimalReporter, + MinimalReporter, TapFlatReporter, TapReporter, TreeReporter, @@ -43,8 +43,8 @@ export type { export const ReportersMap = { 'default': DefaultReporter as typeof DefaultReporter, - 'agent': AgentReporter as typeof AgentReporter, - 'minimal': AgentReporter as typeof AgentReporter, + 'agent': MinimalReporter as typeof MinimalReporter, + 'minimal': MinimalReporter as typeof MinimalReporter, 'blob': BlobReporter as typeof BlobReporter, 'verbose': VerboseReporter as typeof VerboseReporter, 'dot': DotReporter as typeof DotReporter, diff --git a/packages/vitest/src/node/reporters/minimal.ts b/packages/vitest/src/node/reporters/minimal.ts index 11a655e60..c2923edf5 100644 --- a/packages/vitest/src/node/reporters/minimal.ts +++ b/packages/vitest/src/node/reporters/minimal.ts @@ -29,5 +29,3 @@ export class MinimalReporter extends DefaultReporter { } } } - -export { MinimalReporter as AgentReporter } diff --git a/packages/vitest/src/node/reporters/renderers/figures.ts b/packages/vitest/src/node/reporters/renderers/figures.ts index 855a14eb4..27d0a609a 100644 --- a/packages/vitest/src/node/reporters/renderers/figures.ts +++ b/packages/vitest/src/node/reporters/renderers/figures.ts @@ -1,13 +1,11 @@ export const F_RIGHT = '→' export const F_DOWN = '↓' -export const F_UP = '↑' export const F_DOWN_RIGHT = '↳' export const F_POINTER = '❯' export const F_DOT = '·' export const F_CHECK = '✓' export const F_CROSS = '×' export const F_LONG_DASH = '⎯' -export const F_RIGHT_TRI = '▶' export const F_TODO = '□' export const F_TREE_NODE_MIDDLE = '├──' export const F_TREE_NODE_END = '└──' diff --git a/packages/vitest/src/node/reporters/renderers/utils.ts b/packages/vitest/src/node/reporters/renderers/utils.ts index 09aa5007b..d6b374816 100644 --- a/packages/vitest/src/node/reporters/renderers/utils.ts +++ b/packages/vitest/src/node/reporters/renderers/utils.ts @@ -18,14 +18,14 @@ import { F_TODO, } from './figures' -export const pointer: string = c.yellow(F_POINTER) -export const skipped: string = c.dim(c.gray(F_DOWN)) -export const todo: string = c.dim(c.gray(F_TODO)) -export const benchmarkPass: string = c.green(F_DOT) -export const testPass: string = c.green(F_CHECK) +const pointer: string = c.yellow(F_POINTER) +const skipped: string = c.dim(c.gray(F_DOWN)) +const todo: string = c.dim(c.gray(F_TODO)) +const benchmarkPass: string = c.green(F_DOT) +const testPass: string = c.green(F_CHECK) export const taskFail: string = c.red(F_CROSS) -export const suiteFail: string = c.red(F_POINTER) -export const pending: string = c.gray('·') +const suiteFail: string = c.red(F_POINTER) +const pending: string = c.gray('·') export const separator: string = c.dim(' > ') const labelDefaultColors = [c.bgYellow, c.bgCyan, c.bgGreen, c.bgMagenta] as const @@ -67,7 +67,7 @@ export function divider( return F_LONG_DASH.repeat(cols) } -export function formatTestPath(root: string, path: string): string { +function formatTestPath(root: string, path: string): string { if (isAbsolute(path)) { path = relative(root, path) } @@ -213,30 +213,6 @@ export function getStateSymbol(task: Task): string { return ' ' } -export function duration(time: number, locale = 'en-us'): string { - if (time < 1) { - return `${Number((time * 1e3).toFixed(2)).toLocaleString(locale)} ps` - } - - if (time < 1e3) { - return `${Number(time.toFixed(2)).toLocaleString(locale)} ns` - } - if (time < 1e6) { - return `${Number((time / 1e3).toFixed(2)).toLocaleString(locale)} µs` - } - if (time < 1e9) { - return `${Number((time / 1e6).toFixed(2)).toLocaleString(locale)} ms` - } - if (time < 1e12) { - return `${Number((time / 1e9).toFixed(2)).toLocaleString(locale)} s` - } - if (time < 36e11) { - return `${Number((time / 60e9).toFixed(2)).toLocaleString(locale)} m` - } - - return `${Number((time / 36e11).toFixed(2)).toLocaleString(locale)} h` -} - export function formatTimeString(date: Date): string { return date.toTimeString().split(' ')[0] } diff --git a/packages/vitest/src/node/resolver.ts b/packages/vitest/src/node/resolver.ts index f229f0e8f..2ce43ae9b 100644 --- a/packages/vitest/src/node/resolver.ts +++ b/packages/vitest/src/node/resolver.ts @@ -107,7 +107,7 @@ const depsExternal = [ /\/node_modules\/.*\.mjs$/, ] -export function guessCJSversion(id: string): string | undefined { +function guessCJSversion(id: string): string | undefined { if (ESM_EXT_RE.test(id)) { for (const i of [ id.replace(ESM_EXT_RE, '.mjs'), @@ -235,7 +235,7 @@ export async function detectModuleType( return 'esm' } -export async function shouldExternalize( +async function shouldExternalize( id: string, options: ExternalizeOptions, cache: Map>, diff --git a/packages/vitest/src/node/stdin.ts b/packages/vitest/src/node/stdin.ts index 619e85460..1f5f3334a 100644 --- a/packages/vitest/src/node/stdin.ts +++ b/packages/vitest/src/node/stdin.ts @@ -22,7 +22,7 @@ const keys = [ ] const cancelKeys = ['space', 'c', 'h', ...keys.map(key => key[0]).flat()] -export function printShortcutsHelp(): void { +function printShortcutsHelp(): void { stdout().write( ` ${c.bold(' Watch Usage')} diff --git a/packages/vitest/src/node/types/config.ts b/packages/vitest/src/node/types/config.ts index d37aa4dd3..c97af93ea 100644 --- a/packages/vitest/src/node/types/config.ts +++ b/packages/vitest/src/node/types/config.ts @@ -25,12 +25,11 @@ import type { BrowserConfigOptions, BrowserServerContribution, ResolvedBrowserOp import type { CoverageOptions, ResolvedCoverageOptions } from './coverage' import type { Reporter } from './reporter' -export type { CoverageOptions, ResolvedCoverageOptions } -export type { BenchmarkUserOptions, ResolvedBenchmarkOptions } +export type { CoverageOptions } +export type { ResolvedBenchmarkOptions } export type { RuntimeConfig, SerializedConfig } from '../../runtime/config' export type { SequenceHooks, SequenceSetupFiles } from '../../runtime/runner/types' -export type { BrowserConfigOptions, BrowserInstanceOption, BrowserScript } from './browser' -export type { CoverageIstanbulOptions, CoverageV8Options } from './coverage' +export type { BrowserInstanceOption } from './browser' export type BuiltinEnvironment = | 'node' @@ -74,8 +73,6 @@ export interface EnvironmentOptions { [x: string]: unknown } -export type { HappyDOMOptions, JSDOMOptions } - /** * @deprecated */ @@ -226,7 +223,7 @@ export type ResolveSnapshotPathHandler = ( context: ResolveSnapshotPathHandlerContext, ) => string -export type BuiltinPool +type BuiltinPool = | 'browser' | 'threads' | 'forks' diff --git a/packages/vitest/src/node/types/coverage.ts b/packages/vitest/src/node/types/coverage.ts index 73d43c9e4..665a4dad7 100644 --- a/packages/vitest/src/node/types/coverage.ts +++ b/packages/vitest/src/node/types/coverage.ts @@ -93,8 +93,6 @@ export type CoverageReporterWithOptions< : [ReporterName, Partial] : [ReporterName, Record] -export type CoverageProviderName = 'v8' | 'istanbul' | 'custom' | undefined - /** Fields that have default values. Internally these will always be defined. */ export type FieldsWithDefaultValues = | 'provider' diff --git a/packages/vitest/src/public/index.ts b/packages/vitest/src/public/index.ts index 1d901e1b1..9b2f59c5a 100644 --- a/packages/vitest/src/public/index.ts +++ b/packages/vitest/src/public/index.ts @@ -105,6 +105,7 @@ export type { TaskState, TestAnnotation, TestAnnotationArtifact, + TestAnnotationLocation, TestAPI, TestArtifact, TestArtifactBase, diff --git a/packages/vitest/src/public/node.ts b/packages/vitest/src/public/node.ts index 948566c1b..1799d1c41 100644 --- a/packages/vitest/src/public/node.ts +++ b/packages/vitest/src/public/node.ts @@ -71,7 +71,7 @@ export type { export type { HTMLOptions } from '../node/reporters/html' export type { JsonOptions } from '../node/reporters/json' -export type { JUnitOptions } from '../node/reporters/junit' +export type { JUnitOptions, SuiteNameTemplateVariables } from '../node/reporters/junit' export type { Report } from '../node/reporters/report' export type { ModuleDiagnostic, @@ -85,6 +85,7 @@ export type { TestResult, TestResultFailed, TestResultPassed, + TestResultPending, TestResultSkipped, TestState, TestSuite, @@ -117,6 +118,7 @@ export type { BrowserServerFactory, BrowserServerState, BrowserServerStateSession, + BrowserTraceViewOptions, CDPSession, ParentProjectBrowser, ProjectBrowser, diff --git a/packages/vitest/src/runtime/benchmark.ts b/packages/vitest/src/runtime/benchmark.ts index 2f043d410..8893b6d0f 100644 --- a/packages/vitest/src/runtime/benchmark.ts +++ b/packages/vitest/src/runtime/benchmark.ts @@ -123,7 +123,7 @@ async function loadProviderModule( * provider module on first use. The result is cached for the lifetime of the * worker so a custom provider is imported at most once. */ -export function resolveBenchmarkProvider( +function resolveBenchmarkProvider( config: SerializedConfig, moduleRunner: TestModuleRunner, ): Promise { diff --git a/packages/vitest/src/runtime/cleanup.ts b/packages/vitest/src/runtime/cleanup.ts deleted file mode 100644 index 15d24123f..000000000 --- a/packages/vitest/src/runtime/cleanup.ts +++ /dev/null @@ -1,14 +0,0 @@ -const listeners = new Set<() => unknown>() - -export function addCleanupListener(listener: () => unknown): void { - listeners.add(listener) -} - -export function removeCleanupListener(listener: () => unknown): void { - listeners.delete(listener) -} - -export async function cleanup(): Promise { - const promises = Array.from(listeners, l => l()) - await Promise.all(promises) -} diff --git a/packages/vitest/src/runtime/console.ts b/packages/vitest/src/runtime/console.ts index ca805d491..48c08cd05 100644 --- a/packages/vitest/src/runtime/console.ts +++ b/packages/vitest/src/runtime/console.ts @@ -8,7 +8,7 @@ import { getWorkerState } from './utils' const RealDate = globalThis.Date -export const UNKNOWN_TEST_ID = '__vitest__unknown_test__' +const UNKNOWN_TEST_ID = '__vitest__unknown_test__' function getTaskIdByStack(root: string) { const stack = new Error('STACK_TRACE_ERROR').stack?.split('\n') diff --git a/packages/vitest/src/runtime/rpc.ts b/packages/vitest/src/runtime/rpc.ts index 753a80344..4306b1483 100644 --- a/packages/vitest/src/runtime/rpc.ts +++ b/packages/vitest/src/runtime/rpc.ts @@ -97,7 +97,7 @@ export function createRuntimeRpc( ) } -export function createSafeRpc(rpc: WorkerRPC): WorkerRPC { +function createSafeRpc(rpc: WorkerRPC): WorkerRPC { return new Proxy(rpc, { get(target, p, handler) { // keep $rejectPendingCalls as sync function diff --git a/packages/vitest/src/runtime/runner/run.ts b/packages/vitest/src/runtime/runner/run.ts index e2f553796..0f21ad7f0 100644 --- a/packages/vitest/src/runtime/runner/run.ts +++ b/packages/vitest/src/runtime/runner/run.ts @@ -165,7 +165,7 @@ async function callTestHooks( context.onTestFinished = onTestFinished } -export async function callSuiteHook( +async function callSuiteHook( suite: Suite, currentTask: Task, name: T, @@ -523,7 +523,7 @@ function throttle void>(fn: T, ms: number): T { // throttle based on summary reporter's DURATION_UPDATE_INTERVAL_MS const sendTasksUpdateThrottled = throttle(sendTasksUpdate, 100) -export function updateTask(event: TaskUpdateEvent, task: Task, runner: VitestRunner): void { +function updateTask(event: TaskUpdateEvent, task: Task, runner: VitestRunner): void { eventsPacks.push([task.id, event, undefined]) packs.set(task.id, [task.result, task.meta]) sendTasksUpdateThrottled(runner) @@ -582,7 +582,7 @@ function passesRetryCondition(test: Test, errors: TestError[] | undefined): bool return false } -export async function runTest(test: Test, runner: VitestRunner): Promise { +async function runTest(test: Test, runner: VitestRunner): Promise { await runner.onBeforeRunTask?.(test) if (test.mode !== 'run' && test.mode !== 'queued') { @@ -835,7 +835,7 @@ function markPendingTasksAsSkipped(suite: Suite, runner: VitestRunner, note?: st }) } -export async function runSuite(suite: Suite, runner: VitestRunner): Promise { +async function runSuite(suite: Suite, runner: VitestRunner): Promise { await runner.onBeforeRunSuite?.(suite) if (suite.result?.state === 'fail') { @@ -1007,7 +1007,7 @@ async function runSuiteChild(c: Task, runner: VitestRunner) { } } -export async function runFiles(files: File[], runner: VitestRunner): Promise { +async function runFiles(files: File[], runner: VitestRunner): Promise { limitMaxConcurrency ??= limitConcurrency(runner.config.maxConcurrency) for (const file of files) { diff --git a/packages/vitest/src/runtime/runner/suite.ts b/packages/vitest/src/runtime/runner/suite.ts index 37ff8c76f..8e4bd7430 100644 --- a/packages/vitest/src/runtime/runner/suite.ts +++ b/packages/vitest/src/runtime/runner/suite.ts @@ -207,10 +207,6 @@ export function getDefaultSuite(): SuiteCollector { return defaultSuite } -export function getTestFilepath(): string { - return currentTestFilepath -} - export function getRunner(): VitestRunner { assert(runner, 'the runner') return runner diff --git a/packages/vitest/src/runtime/runner/types.ts b/packages/vitest/src/runtime/runner/types.ts index dcd3f976b..4cabdb998 100644 --- a/packages/vitest/src/runtime/runner/types.ts +++ b/packages/vitest/src/runtime/runner/types.ts @@ -392,7 +392,7 @@ export interface TestBenchmark { tasks: TestBenchmarkTask[] } -export type TestBenchmarkStatistics = Statistics +type TestBenchmarkStatistics = Statistics export interface BaselineData { latency: TestBenchmarkStatistics @@ -560,7 +560,7 @@ type TestCollectorOptions = Omit * Retry configuration for tests. * Can be a number for simple retry count, or an object for advanced retry control. */ -export type Retry = number | { +type Retry = number | { /** * The number of times to retry the test if it fails. * @default 0 @@ -931,7 +931,7 @@ export interface FixtureOptions { * Options for test-scoped fixtures. * Test fixtures are set up before each test and have access to all fixtures. */ -export interface TestScopeFixtureOptions extends Omit { +interface TestScopeFixtureOptions extends Omit { /** * @default 'test' */ @@ -942,7 +942,7 @@ export interface TestScopeFixtureOptions extends Omit { * Options for file-scoped fixtures. * File fixtures are set up once per file and can only access other file fixtures and worker fixtures. */ -export interface FileScopeFixtureOptions extends Omit { +interface FileScopeFixtureOptions extends Omit { /** * Must be 'file' for file-scoped fixtures. */ @@ -953,14 +953,14 @@ export interface FileScopeFixtureOptions extends Omit { * Options for worker-scoped fixtures. * Worker fixtures are set up once per worker and can only access other worker fixtures. */ -export interface WorkerScopeFixtureOptions extends Omit { +interface WorkerScopeFixtureOptions extends Omit { /** * Must be 'worker' for worker-scoped fixtures. */ scope: 'worker' } -export type Use = (value: T) => Promise +type Use = (value: T) => Promise /** * Cleanup registration function for builder pattern fixtures. @@ -970,7 +970,7 @@ export type Use = (value: T) => Promise * cleanup operations, either combine them into a single cleanup function or split * your fixture into multiple smaller fixtures. */ -export type OnCleanup = (cleanup: () => Awaitable) => void +type OnCleanup = (cleanup: () => Awaitable) => void /** * Builder pattern fixture function with automatic type inference. @@ -982,12 +982,12 @@ export type OnCleanup = (cleanup: () => Awaitable) => void * - `async ({ dep }) => value` - with dependencies, no cleanup * - `async ({ dep }, { onCleanup }) => value` - with dependencies and cleanup */ -export type BuilderFixtureFn = ( +type BuilderFixtureFn = ( context: Context, fixture: { onCleanup: OnCleanup }, ) => T | Promise -export type ExtractSuiteContext +type ExtractSuiteContext = C extends { $__worker?: any } | { $__file?: any } | { $__test?: any } ? ExtractBuilderWorker & ExtractBuilderFile : C @@ -995,28 +995,28 @@ export type ExtractSuiteContext /** * Extracts worker-scoped fixtures from a context that includes scope info. */ -export type ExtractBuilderWorker = C extends { $__worker?: infer W } +type ExtractBuilderWorker = C extends { $__worker?: infer W } ? W extends Record ? W : object : object /** * Extracts file-scoped fixtures from a context that includes scope info. */ -export type ExtractBuilderFile = C extends { $__file?: infer F } +type ExtractBuilderFile = C extends { $__file?: infer F } ? F extends Record ? F : object : object /** * Extracts test-scoped fixtures from a context that includes scope info. */ -export type ExtractBuilderTest = C extends { $__test?: infer T } +type ExtractBuilderTest = C extends { $__test?: infer T } ? T extends Record ? T : object : object /** * Adds a worker fixture to the context with proper scope tracking. */ -export type AddBuilderWorker = Omit & Record & { +type AddBuilderWorker = Omit & Record & { readonly $__worker?: ExtractBuilderWorker & Record readonly $__file?: ExtractBuilderFile readonly $__test?: ExtractBuilderTest @@ -1025,7 +1025,7 @@ export type AddBuilderWorker = Omit & Re /** * Adds a file fixture to the context with proper scope tracking. */ -export type AddBuilderFile = Omit & Record & { +type AddBuilderFile = Omit & Record & { readonly $__worker?: ExtractBuilderWorker readonly $__file?: ExtractBuilderFile & Record readonly $__test?: ExtractBuilderTest @@ -1034,7 +1034,7 @@ export type AddBuilderFile = Omit & Record /** * Adds a test fixture to the context with proper scope tracking. */ -export type AddBuilderTest = Omit & Record & { +type AddBuilderTest = Omit & Record & { readonly $__worker?: ExtractBuilderWorker readonly $__file?: ExtractBuilderFile readonly $__test?: ExtractBuilderTest & Record @@ -1046,7 +1046,7 @@ export type AddBuilderTest = Omit & Record * They do NOT have access to test context (task, expect, onTestFailed, etc.) * since they run once per worker, outside of any specific test. */ -export type WorkerScopeContext = ExtractBuilderWorker +type WorkerScopeContext = ExtractBuilderWorker /** * Context available to file-scoped fixtures. @@ -1054,17 +1054,17 @@ export type WorkerScopeContext = ExtractBuilderWorker * They do NOT have access to test context (task, expect, onTestFailed, etc.) * since they run once per file, outside of any specific test. */ -export type FileScopeContext = ExtractBuilderWorker & ExtractBuilderFile +type FileScopeContext = ExtractBuilderWorker & ExtractBuilderFile /** * Context available to test-scoped fixtures (all fixtures + test context). */ -export type TestScopeContext = C & TestContext +type TestScopeContext = C & TestContext export type FixtureFn = ( context: Omit & ExtraContext, use: Use, ) => Promise -export type Fixture = (( +type Fixture = (( ...args: any ) => any) extends T[K] ? T[K] extends any @@ -1078,7 +1078,7 @@ export type Fixture = (( /** * Fixture function with explicit context type for scoped fixtures. */ -export type ScopedFixtureFn = ( +type ScopedFixtureFn = ( context: Context, use: Use, ) => Promise @@ -1087,7 +1087,7 @@ export type ScopedFixtureFn = ( * Fixtures definition for backward compatibility. * All fixtures are in T and any scope is allowed. */ -export type Fixtures = { +type Fixtures = { [K in keyof T]: | Fixture | [Fixture, FixtureOptions?] @@ -1107,7 +1107,7 @@ export type Fixtures = { * }>({ ... }) * ``` */ -export interface ScopedFixturesDef { +interface ScopedFixturesDef { $test?: Record $file?: Record $worker?: Record @@ -1117,7 +1117,7 @@ export interface ScopedFixturesDef { * Extracts fixture types from a ScopedFixturesDef. * Handles optional properties by using Exclude to remove undefined. */ -export type ExtractScopedFixtures +type ExtractScopedFixtures = ([Exclude] extends [never] ? object : Exclude) & ([Exclude] extends [never] ? object : Exclude) & ([Exclude] extends [never] ? object : Exclude) @@ -1128,7 +1128,7 @@ export type ExtractScopedFixtures * - File fixtures: MUST have { scope: 'file' } * - Worker fixtures: MUST have { scope: 'worker' } */ -export type ScopedFixturesObject = { +type ScopedFixturesObject = { // Test fixtures - scope is optional, have access to all fixtures + TestContext [K in keyof NonNullable]: | NonNullable[K] @@ -1219,7 +1219,7 @@ export interface AroundAllListener { } // Contexts are provided when registered, not when invoked -export interface RegisteredAllListener { +interface RegisteredAllListener { (suite: Readonly): Awaitable } @@ -1394,14 +1394,14 @@ export interface TestAttachment { bodyEncoding?: 'base64' | 'utf-8' } -export interface Location { +interface Location { /** Line number in the source file (1-indexed) */ line: number /** Column number in the line (1-indexed) */ column: number } -export interface FileLocation extends Location { +interface FileLocation extends Location { /** Line number in the source file (1-indexed) */ line: number /** Column number in the line (1-indexed) */ diff --git a/packages/vitest/src/runtime/setup-node.ts b/packages/vitest/src/runtime/setup-node.ts index a7ecf2161..d48521692 100644 --- a/packages/vitest/src/runtime/setup-node.ts +++ b/packages/vitest/src/runtime/setup-node.ts @@ -69,7 +69,7 @@ function resolveAsset(mod: NodeJS.Module, url: string) { mod.exports = url } -export async function setupConsoleLogSpy(): Promise { +async function setupConsoleLogSpy(): Promise { const { createCustomConsole } = await import('./console') globalThis.console = createCustomConsole() diff --git a/packages/vitest/src/runtime/utils.ts b/packages/vitest/src/runtime/utils.ts index 9abed5491..f257d628a 100644 --- a/packages/vitest/src/runtime/utils.ts +++ b/packages/vitest/src/runtime/utils.ts @@ -39,11 +39,6 @@ export function provideWorkerState(context: any, state: WorkerGlobalState): Work return state } -export function getCurrentEnvironment(): string { - const state = getWorkerState() - return state.environment.name -} - export function isChildProcess(): boolean { return typeof process !== 'undefined' && !!process.send } diff --git a/packages/vitest/src/runtime/vm/types.ts b/packages/vitest/src/runtime/vm/types.ts index 6fd78504c..4dec6c311 100644 --- a/packages/vitest/src/runtime/vm/types.ts +++ b/packages/vitest/src/runtime/vm/types.ts @@ -66,7 +66,7 @@ export declare class VMSyntheticModule extends VMModule { setExport(name: string, value: any): void } -export declare interface ImportModuleDynamically { +declare interface ImportModuleDynamically { (specifier: string, script: VMModule, importAssertions: object): | VMModule | Promise diff --git a/packages/vitest/src/typecheck/parse.ts b/packages/vitest/src/typecheck/parse.ts index fb8490045..3e4583444 100644 --- a/packages/vitest/src/typecheck/parse.ts +++ b/packages/vitest/src/typecheck/parse.ts @@ -3,7 +3,7 @@ import type { RawErrsMap, TscErrorInfo } from './types' const newLineRegExp = /\r?\n/ const errCodeRegExp = /error TS(?\d+)/ -export async function makeTscErrorInfo( +async function makeTscErrorInfo( errInfo: string, ): Promise<[string, TscErrorInfo | null]> { const [errFilePathPos = '', ...errMsgRawArr] = errInfo.split(':') diff --git a/packages/vitest/src/types/environment.ts b/packages/vitest/src/types/environment.ts index 41a8d0275..e165bc228 100644 --- a/packages/vitest/src/types/environment.ts +++ b/packages/vitest/src/types/environment.ts @@ -28,8 +28,3 @@ export interface Environment { options: Record, ) => Awaitable } - -export interface ResolvedTestEnvironment { - environment: Environment - options: Record | null -} diff --git a/packages/vitest/src/utils/base.ts b/packages/vitest/src/utils/base.ts index 7ff8dab88..f0a769ca6 100644 --- a/packages/vitest/src/utils/base.ts +++ b/packages/vitest/src/utils/base.ts @@ -1,7 +1,5 @@ import type { ModuleDefinitionLocation } from '../types/module-locations' -export { getCallLastIndex, nanoid, notNullish } from '@vitest/utils/helpers' - export function groupBy( collection: T[], iteratee: (item: T) => K, diff --git a/packages/vitest/src/utils/env.ts b/packages/vitest/src/utils/env.ts index 625edd40c..70bcfb891 100644 --- a/packages/vitest/src/utils/env.ts +++ b/packages/vitest/src/utils/env.ts @@ -1,16 +1,15 @@ import { isCI } from 'std-env' -export const isNode: boolean +const isNode: boolean = typeof process < 'u' && typeof process.stdout < 'u' && !process.versions?.deno && !globalThis.window -export const isDeno: boolean +const isDeno: boolean = typeof process < 'u' && typeof process.stdout < 'u' && process.versions?.deno !== undefined export const isWindows: boolean = (isNode || isDeno) && process.platform === 'win32' -export const isBrowser: boolean = typeof window !== 'undefined' export const isTTY: boolean = ((isNode || isDeno) && process.stdout?.isTTY && !isCI) export const isForceColor = (): boolean => 'FORCE_COLOR' in process.env export { isAgent, isCI, provider as stdProvider } from 'std-env' diff --git a/packages/vitest/src/utils/modules.ts b/packages/vitest/src/utils/modules.ts index 5a2300e69..1137dc484 100644 --- a/packages/vitest/src/utils/modules.ts +++ b/packages/vitest/src/utils/modules.ts @@ -24,7 +24,7 @@ export function isBuiltin(id: string): boolean { return isNodeBuiltin(id) } -export function isNodeBuiltin(id: string): boolean { +function isNodeBuiltin(id: string): boolean { if (id.startsWith(NODE_BUILTIN_NAMESPACE)) { return true } diff --git a/packages/vitest/src/utils/source-map.ts b/packages/vitest/src/utils/source-map.ts index a3025b390..074dfdb9e 100644 --- a/packages/vitest/src/utils/source-map.ts +++ b/packages/vitest/src/utils/source-map.ts @@ -1,11 +1,9 @@ export { lineSplitRE, - offsetToLineNumber, positionToOffset, } from '@vitest/utils/offset' export { defaultStackIgnorePatterns, parseErrorStacktrace, parseSingleStack, - parseStacktrace, } from '@vitest/utils/source-map' diff --git a/packages/vitest/src/utils/timers.ts b/packages/vitest/src/utils/timers.ts deleted file mode 100644 index dd79b8904..000000000 --- a/packages/vitest/src/utils/timers.ts +++ /dev/null @@ -1 +0,0 @@ -export { getSafeTimers } from '@vitest/utils/timers' diff --git a/test/e2e/test/reporters/junit.test.ts b/test/e2e/test/reporters/junit.test.ts index bcd656d37..f1a5c0269 100644 --- a/test/e2e/test/reporters/junit.test.ts +++ b/test/e2e/test/reporters/junit.test.ts @@ -1,9 +1,10 @@ -import type { RunnerTaskResult, RunnerTestCase, RunnerTestFile, RunnerTestSuite, RunnerTask as Task } from 'vitest' +import type { RunnerTaskResult, RunnerTestCase, RunnerTestFile, RunnerTestSuite } from 'vitest' import { readFileSync } from 'node:fs' import { resolve } from 'pathe' import { expect, test, TestRunner } from 'vitest' import { rolldownVersion } from 'vitest/node' import { runVitest, runVitestCli } from '#test-utils' +import { getDuration } from '../../../../packages/vitest/src/node/reporters/junit' const root = resolve(import.meta.dirname, '../../fixtures/reporters') @@ -385,15 +386,3 @@ test('resolves unhandled errors to the owning project in a multi-project workspa }) expect(stabilizeReport(readJunitReport(ctx!.config.root))).toMatchSnapshot() }) - -function executionTime(durationMS: number) { - return (durationMS / 1000).toLocaleString('en-US', { - useGrouping: false, - maximumFractionDigits: 10, - }) -} - -export function getDuration(task: Task): string | undefined { - const duration = task.result?.duration ?? 0 - return executionTime(duration) -}