diff --git a/packages/extension/src/api.ts b/packages/extension/src/api.ts index acbeb4e..438a72b 100644 --- a/packages/extension/src/api.ts +++ b/packages/extension/src/api.ts @@ -192,11 +192,8 @@ async function createVitestProcessAPI( usedConfigs.add(project.config) } }) - const [files, workerConfig] = await Promise.all([ - meta.rpc.getFiles(), - meta.rpc.getExtensionConfig(), - ]) - const config = new VitestProjectConfig(pkg, meta.projects, meta.workspaceSource, workerConfig) + const files = await meta.rpc.getFiles() + const config = new VitestProjectConfig(pkg, meta.projects, meta.workspaceSource, meta.config) const api = new VitestProcessAPI(config) return { api, files } }) diff --git a/packages/extension/src/apiProcess.ts b/packages/extension/src/apiProcess.ts index 2e9431b..a729797 100644 --- a/packages/extension/src/apiProcess.ts +++ b/packages/extension/src/apiProcess.ts @@ -24,7 +24,7 @@ export class VitestProjectConfig { readonly pkg: VitestPackage, readonly projects: SerializedProject[], readonly workspaceSource: string | false, - readonly workerConfig?: ExtensionWorkerConfig, + readonly extensionConfig?: ExtensionWorkerConfig, ) { this.id = normalize(pkg.id) this.workspaceFolder = pkg.folder @@ -52,7 +52,7 @@ export class VitestProjectConfig { } get htmlReportPath() { - const config = this.workerConfig + const config = this.extensionConfig if (!config?.htmlReporter) return return resolve(config.root, config.htmlReporter.outputDir || '.vitest', 'index.html') } @@ -118,7 +118,7 @@ export class VitestProcessAPI { * a handle wrapping the existing process (without closing it). */ static forDebug(pkg: VitestPackage, meta: ResolvedMeta): VitestProcessAPI { - const config = new VitestProjectConfig(pkg, meta.projects, meta.workspaceSource) + const config = new VitestProjectConfig(pkg, meta.projects, meta.workspaceSource, meta.config) const api = new VitestProcessAPI(config) api.currentMeta = meta return api @@ -328,6 +328,7 @@ export interface RunHandlers { export interface ResolvedMeta { rpc: VitestExtensionRPC + config: ExtensionWorkerConfig process: ExtensionWorkerProcess workspaceSource: string | false pkg: VitestPackage diff --git a/packages/extension/src/spawn/terminal.ts b/packages/extension/src/spawn/terminal.ts index 793efc4..eea0cfc 100644 --- a/packages/extension/src/spawn/terminal.ts +++ b/packages/extension/src/spawn/terminal.ts @@ -93,6 +93,7 @@ export async function createVitestTerminalProcess( const vitestProcess = new ExtensionTerminalProcess(terminal, server, meta.ws) return { rpc: meta.rpc, + config: meta.config, handlers: meta.handlers, pkg, workspaceSource: meta.workspaceSource, diff --git a/packages/extension/src/spawn/ws.ts b/packages/extension/src/spawn/ws.ts index b25b20a..2c15f7b 100644 --- a/packages/extension/src/spawn/ws.ts +++ b/packages/extension/src/spawn/ws.ts @@ -114,6 +114,7 @@ export function onWsConnection( } onStart({ rpc: api, + config: message.config, workspaceSource: message.workspaceSource, handlers, projects: message.projects.map((p) => { diff --git a/packages/extension/src/worker/index.ts b/packages/extension/src/worker/index.ts index 91ca4b2..52658a1 100644 --- a/packages/extension/src/worker/index.ts +++ b/packages/extension/src/worker/index.ts @@ -39,11 +39,8 @@ emitter.on('message', async function onMessage(message: any) { const workerPath = pathToFileURL(join(__dirname, workerName)) const initModule = await import(workerPath.toString()) - const { createWorker, reporter, projects, workspaceSource } = await initModule.initVitest( - vitestModule, - data, - emitter, - ) + const { config, createWorker, reporter, projects, workspaceSource } = + await initModule.initVitest(vitestModule, data, emitter) const worker = createWorker() @@ -73,7 +70,7 @@ emitter.on('message', async function onMessage(message: any) { }) worker.initRpc(rpc) reporter.initRpc(rpc) - emitter.ready(projects, workspaceSource, isLegacy, vitestModule.version) + emitter.ready(config, projects, workspaceSource, isLegacy, vitestModule.version) await worker.vitest.report('onInit', worker.vitest) } catch (err: any) { diff --git a/packages/shared/src/emitter.ts b/packages/shared/src/emitter.ts index 14e3ea2..f1a937d7 100644 --- a/packages/shared/src/emitter.ts +++ b/packages/shared/src/emitter.ts @@ -1,4 +1,4 @@ -import type { SerializedProject, WorkerEvent } from 'vitest-vscode-shared' +import type { ExtensionWorkerConfig, SerializedProject, WorkerEvent } from 'vitest-vscode-shared' import type WebSocket from 'ws' abstract class WorkerEventEmitter { @@ -9,12 +9,13 @@ abstract class WorkerEventEmitter { abstract off(event: string, listener: (...args: any[]) => void): void ready( + config: ExtensionWorkerConfig, projects: SerializedProject[], workspaceSource: string | false, legacy: boolean, version: string | undefined, ) { - this.sendWorkerEvent({ type: 'ready', projects, workspaceSource, legacy, version }) + this.sendWorkerEvent({ type: 'ready', config, projects, workspaceSource, legacy, version }) } error(err: any) { diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 6f351ea..6b1a2b4 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -58,7 +58,6 @@ export interface ExtensionWorkerConfig { } export interface ExtensionWorkerTransport { - getExtensionConfig: () => ExtensionWorkerConfig getFiles: () => Promise collectTests: (testFile: ExtensionTestSpecification[]) => Promise cancelRun: () => Promise @@ -199,6 +198,7 @@ export interface SerializedProject { export interface EventReady { type: 'ready' + config: ExtensionWorkerConfig projects: SerializedProject[] workspaceSource: string | false legacy: boolean diff --git a/packages/worker-legacy/src/index.ts b/packages/worker-legacy/src/index.ts index c1c9405..7542fa6 100644 --- a/packages/worker-legacy/src/index.ts +++ b/packages/worker-legacy/src/index.ts @@ -1,4 +1,5 @@ import type { + ExtensionWorkerConfig, SerializedProject, WorkerRunnerOptions, WorkerWSEventEmitter, @@ -202,9 +203,11 @@ export async function initVitest( : vitest.config.workspace != null || vitest.config.projects != null ? vitest.server.config.configFile || false : false + const config: ExtensionWorkerConfig = { root: vitest.config.root } return { vitest, reporter, + config, workspaceSource, projects, meta, diff --git a/packages/worker-legacy/src/worker.ts b/packages/worker-legacy/src/worker.ts index c730a07..3205845 100644 --- a/packages/worker-legacy/src/worker.ts +++ b/packages/worker-legacy/src/worker.ts @@ -43,10 +43,6 @@ export class ExtensionWorker implements ExtensionWorkerTransport { ) } - getExtensionConfig() { - return { root: this.vitest.config.root } - } - private get configOverride(): Partial { return (this.vitest as any).configOverride } diff --git a/packages/worker/src/index.ts b/packages/worker/src/index.ts index d5c5583..a203467 100644 --- a/packages/worker/src/index.ts +++ b/packages/worker/src/index.ts @@ -1,4 +1,5 @@ import type { + ExtensionWorkerConfig, SerializedProject, WorkerRunnerOptions, WorkerWSEventEmitter, @@ -167,9 +168,18 @@ export async function initVitest( const workspaceSource: string | false = vitest.config.projects != null ? vitest.vite.config.configFile || false : false + const config: ExtensionWorkerConfig = { root: vitest.config.root } + for (const reporter of vitest.config.reporters) { + if (Array.isArray(reporter) && reporter[0] === 'html') { + const options = reporter[1] as { outputDir?: string } + config.htmlReporter = { outputDir: options.outputDir } + break + } + } return { vitest, reporter, + config, workspaceSource, projects, meta, diff --git a/packages/worker/src/worker.ts b/packages/worker/src/worker.ts index f92b11a..6d1924b 100644 --- a/packages/worker/src/worker.ts +++ b/packages/worker/src/worker.ts @@ -26,18 +26,6 @@ export class ExtensionWorker implements ExtensionWorkerTransport { this.watcher = new ExtensionWorkerWatcher(vitest, this.runner) } - getExtensionConfig() { - let htmlReporter: { outputDir?: string } | undefined - for (const reporter of this.vitest.config.reporters) { - if (Array.isArray(reporter) && reporter[0] === 'html') { - const options = reporter[1] as { outputDir?: string } - htmlReporter = { outputDir: options.outputDir } - break - } - } - return { root: this.vitest.config.root, htmlReporter } - } - async getFiles(): Promise { return this.runner.getFiles() }