Skip to content

Commit b757af1

Browse files
committed
fix(vitest-pool-workers): allow Vite query parameters like ?raw on module imports
1 parent b9eec1d commit b757af1

6 files changed

Lines changed: 30 additions & 2 deletions

File tree

.changeset/fix-raw-imports.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
"@cloudflare/vitest-pool-workers": patch
3+
---
4+
5+
fix: allow Vite query parameters like `?raw` on `.sql` file imports
6+
7+
Importing `.sql` files with Vite query parameters (e.g., `import sql from "./query.sql?raw"`) would fail with "No such module" errors in vitest-pool-workers 0.12.x. Both import styles now work:
8+
9+
- `import sql from "./query.sql?raw"` (Vite handles the `?raw` transform)
10+
- `import sql from "./query.sql"` (loaded as Text module)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
SELECT * FROM users WHERE id = 1;

fixtures/vitest-pool-workers-examples/module-resolution/test/index.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,9 @@ declare module "ext-dep" {
22
var x: number;
33
export default x;
44
}
5+
6+
// .sql files are loaded as Text modules by default in wrangler
7+
declare module "*.sql" {
8+
const content: string;
9+
export default content;
10+
}

fixtures/vitest-pool-workers-examples/module-resolution/test/index.spec.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { instrument } from "@microlabs/otel-cf-workers";
22
import { Utils } from "discord-api-types/v10";
33
import dep from "ext-dep";
44
import { assert, describe, test } from "vitest";
5+
import sqlPlain from "../src/test.sql";
6+
import sqlRaw from "../src/test.sql?raw";
57

68
describe("test", () => {
79
test("resolves commonjs directory dependencies correctly", async () => {
@@ -17,4 +19,10 @@ describe("test", () => {
1719
test("resolves dependency with mapping on the browser field", async () => {
1820
assert.isFunction(instrument);
1921
});
22+
23+
// Regression test for https://github.com/cloudflare/workers-sdk/issues/12049
24+
// Vite query parameters like ?raw should be handled by Vite, not module rules
25+
test("resolves file with ?raw query parameter", async () => {
26+
assert.equal(sqlRaw, sqlPlain);
27+
});
2028
});

fixtures/vitest-pool-workers-examples/tsconfig.workerd-test.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
"compilerOptions": {
44
"types": [
55
"@cloudflare/workers-types/experimental",
6-
"@cloudflare/vitest-pool-workers" // For `cloudflare:test` types
6+
"@cloudflare/vitest-pool-workers", // For `cloudflare:test` types
7+
"vite/client" // For `?raw`, `?url`, etc. import types
78
]
89
}
910
}

packages/vitest-pool-workers/src/pool/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -936,7 +936,9 @@ async function runTests(
936936
const maybeRule = compiledRules.find((rule) =>
937937
testRegExps(rule.include, specifier)
938938
);
939-
if (maybeRule !== undefined) {
939+
940+
// Skip if specifier already has query params (e.g. `?raw`), letting Vite handle it.
941+
if (maybeRule !== undefined && !specifier.includes("?")) {
940942
const externalize = specifier + `?mf_vitest_force=${maybeRule.type}`;
941943
return { externalize };
942944
}

0 commit comments

Comments
 (0)