import type { BirpcReturn } from 'birpc' import type { RunnerTaskResultPack, RunnerTestFile, UserConsoleLog } from 'vitest' export { WorkerWSEventEmitter } from './emitter' export { createWorkerRPC } from './rpc' export { assert, createQueuedHandler, getSuggestedInstallCommand, limitConcurrency, normalizeDriveLetter, } from './utils' export type ExtensionTestSpecificationOptions = { testNamePattern?: string } export type ExtensionTestSpecification = [ project: string, file: string, options?: ExtensionTestSpecificationOptions, ] export interface ExtensionTestFileMetadata { project: string pool: string browser?: { provider: string name: string webRoot: string } } export type ExtensionTestFileSpecification = [file: string, ExtensionTestFileMetadata] export interface ExtensionUserConsoleLog extends UserConsoleLog { // Parsed location from stack trace for inline display parsedLocation?: { file: string line: number // 0-based line number column: number } } export interface ExtensionEnvironment { name: string environments: { name: string transformTimestamp: number }[] } export interface ExtensionWorkerTransport { getFiles: () => Promise collectTests: (testFile: ExtensionTestSpecification[]) => Promise cancelRun: () => Promise // accepts files with the project or folders (project doesn't matter for them) runTests: ( filesOrDirectories?: ExtensionTestSpecification[] | string[], testNamePattern?: string, ) => Promise updateSnapshots: ( filesOrDirectories?: ExtensionTestSpecification[] | string[], testNamePattern?: string, ) => Promise watchTests: ( filesOrDirectories?: ExtensionTestSpecification[] | string[], testNamePattern?: string, ) => Promise getSourceModuleDiagnostic: (moduleId: string) => Promise exit: () => void onFilesCreated: (files: string[]) => void onFilesChanged: (files: string[]) => void initRpc: (rpc: VitestWorkerRPC) => void getModuleEnvironments: (moduleId: string) => ExtensionEnvironment[] getTransformedModule: (project: string, environment: string, moduleId: string) => string | null onDebugAttached: (fulfilled: boolean) => void } export interface ExtensionWorkerEvents { onConsoleLog: (log: ExtensionUserConsoleLog) => void onTaskUpdate: (task: RunnerTaskResultPack[]) => void onTestRunEnd: ( files: RunnerTestFile[], unhandledError: string, collecting?: boolean, coverage?: unknown, ) => void onCollected: (file: RunnerTestFile, collecting?: boolean) => void onTestRunStart: (files: string[]) => void onProcessLog: (type: 'stdout' | 'stderr', log: string) => void } // todo@vitest4 when supporting only vitest 4, import from vitest interface ModuleDefinitionLocation { line: number column: number } export interface ModuleDefinitionDiagnostic { start: ModuleDefinitionLocation end: ModuleDefinitionLocation startIndex: number endIndex: number rawUrl: string resolvedUrl: string resolvedId: string } export interface ModuleDefinitionDurationsDiagnostic extends ModuleDefinitionDiagnostic { selfTime: number totalTime: number transformTime?: number external?: boolean importer?: string } export interface UntrackedModuleDefinitionDiagnostic { url: string resolvedId: string resolvedUrl: string selfTime: number totalTime: number transformTime?: number external?: boolean importer?: string } export interface SourceModuleDiagnostic { modules: ModuleDefinitionDurationsDiagnostic[] untrackedModules: UntrackedModuleDefinitionDiagnostic[] } export type VitestExtensionRPC = BirpcReturn export type VitestWorkerRPC = BirpcReturn export interface WorkerInitMetadata { vitestNodePath: string id: string cwd: string arguments?: string runtime: 'node' | 'deno' configFile?: string workspaceFile?: string env: Record | undefined shellType: 'terminal' | 'child_process' pnpApi?: string pnpLoader?: string setupFilePaths: { browserDebug: string browserDebugLegacy: string } finalCoverageFileName: string projectFilter?: string[] related?: string } export interface WorkerRunnerDebugOptions { browser?: string port: number host: string } export interface WorkerRunnerOptions { type: 'init' meta: WorkerInitMetadata sendLog?: boolean debug?: WorkerRunnerDebugOptions | boolean coverage?: boolean } export interface SerializedProject { config: string | undefined root: string pool: string name: string dir?: string include: string[] exclude: string[] includeSource: string[] browser?: { provider: string name: string webRoot: string } } export interface WorkerReadyMetadata { projects: SerializedProject[] workspaceSource: string | false htmlReportPath?: string } export interface EventReady { type: 'ready' metadata: WorkerReadyMetadata legacy: boolean // the actual runtime version, unlike VitestPackage.version // this is also defined when vitest is resolved via yarn pnp version: string | undefined } export interface EventDebug { type: 'debug' args: string[] } export interface EventError { type: 'error' error: string } export type WorkerEvent = EventReady | EventDebug | EventError