diff --git a/test/vitest/vitest.cli-process.config.ts b/test/vitest/vitest.cli-process.config.ts index 47da79d9fdb2..24405e2f2284 100644 --- a/test/vitest/vitest.cli-process.config.ts +++ b/test/vitest/vitest.cli-process.config.ts @@ -1,9 +1,12 @@ +import type { ViteUserConfig } from "vitest/config"; import { cliProcessTestFiles } from "./vitest.cli-process-paths.mjs"; // CLI process tests run serially in isolated forks so child startup deadlines // measure the CLI rather than contention from the shared CLI test graph. import { createScopedVitestConfig } from "./vitest.scoped-config.ts"; -export function createCliProcessVitestConfig(env?: Record) { +export function createCliProcessVitestConfig( + env?: Record, +): ViteUserConfig { const config = createScopedVitestConfig(cliProcessTestFiles, { env, fileParallelism: false, diff --git a/test/vitest/vitest.extension-config.ts b/test/vitest/vitest.extension-config.ts index a2764bc63fda..e252a3a4c8f7 100644 --- a/test/vitest/vitest.extension-config.ts +++ b/test/vitest/vitest.extension-config.ts @@ -1,4 +1,5 @@ // Vitest extension config helpers keep extension shard defaults aligned. +import type { ViteUserConfig } from "vitest/config"; import { loadPatternListFromEnv } from "./vitest.pattern-file.ts"; import { createScopedVitestConfig } from "./vitest.scoped-config.ts"; @@ -13,7 +14,7 @@ export function createExtensionVitestConfig( testRoots: readonly string[], env: Record = process.env, options: ExtensionVitestConfigOptions = {}, -) { +): ViteUserConfig { return createScopedVitestConfig( loadPatternListFromEnv("OPENCLAW_VITEST_INCLUDE_FILE", env) ?? testRoots.map((root) => `${root}/**/*.test.ts`), diff --git a/test/vitest/vitest.extension-provider-openai.config.ts b/test/vitest/vitest.extension-provider-openai.config.ts index 849d0dbe6690..544e1f70090f 100644 --- a/test/vitest/vitest.extension-provider-openai.config.ts +++ b/test/vitest/vitest.extension-provider-openai.config.ts @@ -1,12 +1,13 @@ -// Vitest extension provider openai config wires the extension provider openai test shard. import path from "node:path"; +// Vitest extension provider openai config wires the extension provider openai test shard. +import type { ViteUserConfig } from "vitest/config"; import { createExtensionVitestConfig } from "./vitest.extension-config.ts"; import { providerOpenAiExtensionTestRoots } from "./vitest.extension-provider-paths.mjs"; import { repoRoot } from "./vitest.shared.config.ts"; export function createExtensionProviderOpenAiVitestConfig( env: Record = process.env, -) { +): ViteUserConfig { const config = createExtensionVitestConfig( "provider-openai", providerOpenAiExtensionTestRoots, diff --git a/test/vitest/vitest.process.config.ts b/test/vitest/vitest.process.config.ts index 4a122d597bd9..b66651df1535 100644 --- a/test/vitest/vitest.process.config.ts +++ b/test/vitest/vitest.process.config.ts @@ -1,7 +1,10 @@ // Vitest process config wires the process test shard. +import type { ViteUserConfig } from "vitest/config"; import { createScopedVitestConfig } from "./vitest.scoped-config.ts"; -export function createProcessVitestConfig(env?: Record) { +export function createProcessVitestConfig( + env?: Record, +): ViteUserConfig { const config = createScopedVitestConfig(["src/process/**/*.test.ts"], { dir: "src", env, diff --git a/test/vitest/vitest.runtime-config.config.ts b/test/vitest/vitest.runtime-config.config.ts index c96900c064d3..afa23924274c 100644 --- a/test/vitest/vitest.runtime-config.config.ts +++ b/test/vitest/vitest.runtime-config.config.ts @@ -1,7 +1,10 @@ // Vitest runtime config config wires the runtime config test shard. +import type { ViteUserConfig } from "vitest/config"; import { createScopedVitestConfig } from "./vitest.scoped-config.ts"; -export function createRuntimeConfigVitestConfig(env?: Record) { +export function createRuntimeConfigVitestConfig( + env?: Record, +): ViteUserConfig { const config = createScopedVitestConfig(["src/config/**/*.test.ts"], { dir: "src", env, diff --git a/test/vitest/vitest.scoped-config.ts b/test/vitest/vitest.scoped-config.ts index 63bf5ce17678..638b05fa6a97 100644 --- a/test/vitest/vitest.scoped-config.ts +++ b/test/vitest/vitest.scoped-config.ts @@ -1,6 +1,6 @@ // Vitest scoped config helper builds test configs for scoped file patterns. import path from "node:path"; -import { defineConfig } from "vitest/config"; +import { defineConfig, type ViteUserConfig } from "vitest/config"; import { intersectIncludePatterns, loadPatternListFromEnv, @@ -219,7 +219,9 @@ export function createScopedVitestConfig( setupFiles?: string[]; useNonIsolatedRunner?: boolean; }, -) { + // Explicit nameable return type: inference otherwise reaches vite-internal + // names (TS4058/TS4082) in every downstream scoped-config creator. +): ViteUserConfig { const base = sharedVitestConfig as Record; const baseTest = sharedVitestConfig.test ?? {}; const baseSequence = (baseTest as { sequence?: { groupOrder?: number } }).sequence; diff --git a/test/vitest/vitest.ui-isolated.config.ts b/test/vitest/vitest.ui-isolated.config.ts index f3ef7a776527..15acbeb1776a 100644 --- a/test/vitest/vitest.ui-isolated.config.ts +++ b/test/vitest/vitest.ui-isolated.config.ts @@ -2,12 +2,16 @@ // The shared ui shard runs non-isolated for speed, but tests that spy on module // internals and assert the component uses that spy must not share a module cache // with stateful predecessor files (see uiIsolatedTestFiles). +import type { ViteUserConfig } from "vitest/config"; import { controlUiLocaleModulesPlugin } from "../../ui/config/control-ui-locales.ts"; import { createScopedVitestConfig } from "./vitest.scoped-config.ts"; import { jsdomOptimizedDeps } from "./vitest.shared.config.ts"; import { uiIsolatedTestFiles } from "./vitest.ui-isolated-paths.mjs"; -export function createUiIsolatedVitestConfig(env?: Record) { +// Explicit nameable return type: inference reaches vite-internal names (TS4058/TS4082). +export function createUiIsolatedVitestConfig( + env?: Record, +): ViteUserConfig { const config = createScopedVitestConfig(uiIsolatedTestFiles, { deps: jsdomOptimizedDeps, environment: "jsdom", diff --git a/test/vitest/vitest.ui.config.ts b/test/vitest/vitest.ui.config.ts index e2eee123450e..5f6505075247 100644 --- a/test/vitest/vitest.ui.config.ts +++ b/test/vitest/vitest.ui.config.ts @@ -1,13 +1,15 @@ // Vitest ui config wires the ui test shard. +import type { ViteUserConfig } from "vitest/config"; import { controlUiLocaleModulesPlugin } from "../../ui/config/control-ui-locales.ts"; import { createScopedVitestConfig } from "./vitest.scoped-config.ts"; import { jsdomOptimizedDeps } from "./vitest.shared.config.ts"; import { uiIsolatedTestFiles } from "./vitest.ui-isolated-paths.mjs"; +// Explicit nameable return type: inference reaches vite-internal names (TS4058/TS4082). export function createUiVitestConfig( env?: Record, options?: { includePatterns?: string[]; name?: string }, -) { +): ViteUserConfig { const includePatterns = options?.includePatterns ?? ["ui/src/**/*.test.ts"]; // Isolated files must never enter the shared module graph, including scoped runs. const exclude = ["ui/src/**/*.e2e.test.ts", ...uiIsolatedTestFiles];