From 5b01323f97837b28442819cae16cbd64fd75f421 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Date: Fri, 4 Sep 2026 11:22:50 +0900 Subject: [PATCH] refactor: group worker config metadata Co-authored-by: OpenCode (gpt-5.6-sol) --- packages/extension/src/api.ts | 4 ++-- packages/extension/src/apiProcess.ts | 14 +++++++++----- packages/extension/src/spawn/terminal.ts | 2 -- packages/extension/src/spawn/ws.ts | 17 +++++++++-------- packages/extension/src/worker/index.ts | 9 ++++++--- packages/shared/src/emitter.ts | 12 +++--------- packages/shared/src/index.ts | 4 ++-- packages/worker-legacy/src/index.ts | 4 +--- packages/worker/src/index.ts | 4 +--- 9 files changed, 33 insertions(+), 37 deletions(-) diff --git a/packages/extension/src/api.ts b/packages/extension/src/api.ts index 438a72b..78f9fb3 100644 --- a/packages/extension/src/api.ts +++ b/packages/extension/src/api.ts @@ -187,13 +187,13 @@ async function createVitestProcessAPI( pkg: VitestPackage, ): Promise { return withProcess(pkg, async (meta) => { - meta.projects.forEach((project) => { + meta.config.projects.forEach((project) => { if (project.config) { usedConfigs.add(project.config) } }) const files = await meta.rpc.getFiles() - const config = new VitestProjectConfig(pkg, meta.projects, meta.workspaceSource, meta.config) + const config = new VitestProjectConfig(pkg, 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 100bff8..2076ec8 100644 --- a/packages/extension/src/apiProcess.ts +++ b/packages/extension/src/apiProcess.ts @@ -22,8 +22,6 @@ export class VitestProjectConfig { constructor( readonly pkg: VitestPackage, - readonly projects: SerializedProject[], - readonly workspaceSource: string | false, readonly extensionConfig: ExtensionWorkerConfig, ) { this.id = normalize(pkg.id) @@ -43,6 +41,14 @@ export class VitestProjectConfig { return this.projects.map((p) => p.config).filter((n) => n != null) } + get projects(): SerializedProject[] { + return this.extensionConfig.projects + } + + get workspaceSource() { + return this.extensionConfig.workspaceSource + } + get version() { return this.pkg.version } @@ -118,7 +124,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, meta.config) + const config = new VitestProjectConfig(pkg, meta.config) const api = new VitestProcessAPI(config) api.currentMeta = meta return api @@ -330,9 +336,7 @@ export interface ResolvedMeta { rpc: VitestExtensionRPC config: ExtensionWorkerConfig process: ExtensionWorkerProcess - workspaceSource: string | false pkg: VitestPackage - projects: SerializedProject[] handlers: { onProcessLog: (listener: ExtensionWorkerEvents['onProcessLog']) => void onConsoleLog: (listener: ExtensionWorkerEvents['onConsoleLog']) => void diff --git a/packages/extension/src/spawn/terminal.ts b/packages/extension/src/spawn/terminal.ts index eea0cfc..221939b 100644 --- a/packages/extension/src/spawn/terminal.ts +++ b/packages/extension/src/spawn/terminal.ts @@ -96,9 +96,7 @@ export async function createVitestTerminalProcess( config: meta.config, handlers: meta.handlers, pkg, - workspaceSource: meta.workspaceSource, process: vitestProcess, - projects: meta.projects, dispose: meta.dispose, } } diff --git a/packages/extension/src/spawn/ws.ts b/packages/extension/src/spawn/ws.ts index 2c15f7b..b0ab02a 100644 --- a/packages/extension/src/spawn/ws.ts +++ b/packages/extension/src/spawn/ws.ts @@ -114,15 +114,16 @@ export function onWsConnection( } onStart({ rpc: api, - config: message.config, - workspaceSource: message.workspaceSource, + config: { + ...message.config, + projects: message.config.projects.map((p) => { + if (p.dir) { + p.dir = resolve(pkg.cwd, p.dir) + } + return p + }), + }, handlers, - projects: message.projects.map((p) => { - if (p.dir) { - p.dir = resolve(pkg.cwd, p.dir) - } - return p - }), ws, pkg, async dispose() { diff --git a/packages/extension/src/worker/index.ts b/packages/extension/src/worker/index.ts index 52658a1..7105368 100644 --- a/packages/extension/src/worker/index.ts +++ b/packages/extension/src/worker/index.ts @@ -39,8 +39,11 @@ emitter.on('message', async function onMessage(message: any) { const workerPath = pathToFileURL(join(__dirname, workerName)) const initModule = await import(workerPath.toString()) - const { config, createWorker, reporter, projects, workspaceSource } = - await initModule.initVitest(vitestModule, data, emitter) + const { config, createWorker, reporter } = await initModule.initVitest( + vitestModule, + data, + emitter, + ) const worker = createWorker() @@ -70,7 +73,7 @@ emitter.on('message', async function onMessage(message: any) { }) worker.initRpc(rpc) reporter.initRpc(rpc) - emitter.ready(config, projects, workspaceSource, isLegacy, vitestModule.version) + emitter.ready(config, 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 f1a937d7..c2b60df 100644 --- a/packages/shared/src/emitter.ts +++ b/packages/shared/src/emitter.ts @@ -1,4 +1,4 @@ -import type { ExtensionWorkerConfig, SerializedProject, WorkerEvent } from 'vitest-vscode-shared' +import type { ExtensionWorkerConfig, WorkerEvent } from 'vitest-vscode-shared' import type WebSocket from 'ws' abstract class WorkerEventEmitter { @@ -8,14 +8,8 @@ abstract class WorkerEventEmitter { abstract on(event: string, listener: (...args: any[]) => void): void 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', config, projects, workspaceSource, legacy, version }) + ready(config: ExtensionWorkerConfig, legacy: boolean, version: string | undefined) { + this.sendWorkerEvent({ type: 'ready', config, legacy, version }) } error(err: any) { diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 6b1a2b4..bae2793 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -52,6 +52,8 @@ export interface ExtensionEnvironment { export interface ExtensionWorkerConfig { root: string + projects: SerializedProject[] + workspaceSource: string | false htmlReporter?: { outputDir?: string } @@ -199,8 +201,6 @@ export interface SerializedProject { export interface EventReady { type: 'ready' config: ExtensionWorkerConfig - projects: SerializedProject[] - workspaceSource: string | false legacy: boolean // the actual runtime version, unlike VitestPackage.version // this is also defined when vitest is resolved via yarn pnp diff --git a/packages/worker-legacy/src/index.ts b/packages/worker-legacy/src/index.ts index 7542fa6..58c1616 100644 --- a/packages/worker-legacy/src/index.ts +++ b/packages/worker-legacy/src/index.ts @@ -203,13 +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 } + const config: ExtensionWorkerConfig = { root: vitest.config.root, projects, workspaceSource } return { vitest, reporter, config, - workspaceSource, - projects, meta, createWorker() { return new ExtensionWorker(vitest, !!data.debug, emitter) diff --git a/packages/worker/src/index.ts b/packages/worker/src/index.ts index a203467..d0611b5 100644 --- a/packages/worker/src/index.ts +++ b/packages/worker/src/index.ts @@ -168,7 +168,7 @@ 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 } + const config: ExtensionWorkerConfig = { root: vitest.config.root, projects, workspaceSource } for (const reporter of vitest.config.reporters) { if (Array.isArray(reporter) && reporter[0] === 'html') { const options = reporter[1] as { outputDir?: string } @@ -180,8 +180,6 @@ export async function initVitest( vitest, reporter, config, - workspaceSource, - projects, meta, createWorker() { return new ExtensionWorker(vitest, !!data.debug, emitter) -- 2.51.2