Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .changeset/vpw-log-level.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
"@cloudflare/vitest-pool-workers": minor
---

Add configurable `logLevel` option to control `[vpw:*]` pool log verbosity

The pool logger was previously hardcoded to `VERBOSE`, causing debug messages like `[vpw:debug] Adding compatibility flag...` to always appear with no way to suppress them. A new `logLevel` option lets you control this:

```ts
import { cloudflareTest } from "@cloudflare/vitest-pool-workers";

export default defineConfig({
plugins: [
cloudflareTest({
logLevel: "warn", // "none" | "error" | "warn" | "info" | "debug" | "verbose"
}),
],
});
```

The default is now `"info"`, which hides debug/verbose messages while still showing informational, warning, and error output.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
getProjectMiniflare,
getRunnerName,
maybeGetResolvedMainPath,
setPoolLogLevel,
structuredSerializableParse,
structuredSerializableStringify,
} from ".";
Expand Down Expand Up @@ -76,6 +77,9 @@ export class CloudflarePoolWorker implements PoolWorker {
this.options.project,
resolvedPoolOptions
);
if (this.parsedPoolOptions.logLevel) {
setPoolLogLevel(this.parsedPoolOptions.logLevel);
}
this.main = maybeGetResolvedMainPath(
this.options.project,
this.parsedPoolOptions
Expand Down
7 changes: 7 additions & 0 deletions packages/vitest-pool-workers/src/pool/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,13 @@ const WorkersPoolOptionsSchema = z.object({
* bindings.
*/
main: z.ostring(),
/**
* Controls the verbosity of `[vpw:*]` pool log messages.
* Defaults to `"info"`.
*/
logLevel: z
.enum(["none", "error", "warn", "info", "debug", "verbose"])
.default("info"),
/**
* Enables remote bindings to access remote resources configured
* with `remote: true` in the wrangler configuration file.
Expand Down
25 changes: 24 additions & 1 deletion packages/vitest-pool-workers/src/pool/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,30 @@ export function structuredSerializableParse(value: string): unknown {
}

// Log for informational pool messages
const log = new Log(LogLevel.VERBOSE, { prefix: "vpw" });
let log = new Log(LogLevel.INFO, { prefix: "vpw" });

function logLevelFromString(level: string): LogLevel {
switch (level) {
case "none":
return LogLevel.NONE;
case "error":
return LogLevel.ERROR;
case "warn":
return LogLevel.WARN;
case "info":
return LogLevel.INFO;
case "debug":
return LogLevel.DEBUG;
case "verbose":
return LogLevel.VERBOSE;
default:
return LogLevel.INFO;
}
}

export function setPoolLogLevel(level: string): void {
log = new Log(logLevelFromString(level), { prefix: "vpw" });
}
// Log for Miniflare instances, used for user code warnings/errors
const mfLog = new Log(LogLevel.WARN);

Expand Down
58 changes: 58 additions & 0 deletions packages/vitest-pool-workers/test/log-level.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import dedent from "ts-dedent";
import { test, vitestConfig } from "./helpers";

const simpleTest = dedent`
import { it, expect } from "vitest";
it("passes", () => {
expect(true).toBe(true);
});
`;

test("default logLevel suppresses debug messages", async ({
expect,
seed,
vitestRun,
}) => {
await seed({
"vitest.config.mts": vitestConfig(),
"index.test.ts": simpleTest,
});

const result = await vitestRun();
await expect(result.exitCode).resolves.toBe(0);
// Default is "info": info messages should appear, debug should not
expect(result.stdout).toContain("[vpw:info]");
expect(result.stdout).not.toContain("[vpw:debug]");
});

test('logLevel "verbose" shows debug messages', async ({
expect,
seed,
vitestRun,
}) => {
await seed({
"vitest.config.mts": vitestConfig({ logLevel: "verbose" }),
"index.test.ts": simpleTest,
});

const result = await vitestRun();
await expect(result.exitCode).resolves.toBe(0);
expect(result.stdout).toContain("[vpw:debug]");
expect(result.stdout).toContain("[vpw:info]");
});

test('logLevel "warn" suppresses info and debug messages', async ({
expect,
seed,
vitestRun,
}) => {
await seed({
"vitest.config.mts": vitestConfig({ logLevel: "warn" }),
"index.test.ts": simpleTest,
});

const result = await vitestRun();
await expect(result.exitCode).resolves.toBe(0);
expect(result.stdout).not.toContain("[vpw:info]");
expect(result.stdout).not.toContain("[vpw:debug]");
});
Loading