Skip to content

Commit d026375

Browse files
fix(vite): error when npm package requires json files (#3210)
1 parent 1f3f0a4 commit d026375

7 files changed

Lines changed: 81 additions & 3 deletions

File tree

deno.lock

Lines changed: 15 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import * as mime from "mime-db";
2+
import { useEffect, useState } from "preact/hooks";
3+
4+
export function MimeIsland() {
5+
// deno-lint-ignore no-console
6+
console.log(mime);
7+
8+
const [ready, setReady] = useState(false);
9+
useEffect(() => {
10+
setReady(true);
11+
}, []);
12+
13+
return <h1 class={ready ? "ready" : ""}>mime</h1>;
14+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { MimeIsland } from "../../islands/tests/Mime.tsx";
2+
3+
export default function Page() {
4+
return <MimeIsland />;
5+
}

packages/plugin-vite/deno.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"@prefresh/vite": "npm:@prefresh/vite@^2.4.8",
2525
"@types/babel__core": "npm:@types/babel__core@^7.20.5",
2626
"@types/node": "npm:@types/node@^24.1.0",
27+
"mime-db": "npm:mime-db@^1.54.0",
2728
"preact": "npm:preact@^10.26.9",
2829
"vite": "npm:vite@^7.0.6",
2930
"vite-plugin-inspect": "npm:vite-plugin-inspect@^11.3.2"

packages/plugin-vite/src/plugins/deno.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export function deno(): Plugin {
5050
return id;
5151
}
5252

53-
const type = getDenoType(options.attributes.type ?? "default");
53+
const type = getDenoType(id, options.attributes.type ?? "default");
5454
if (
5555
type !== RequestedModuleType.Default ||
5656
/^(https?|jsr|npm):/.test(resolved) ||
@@ -179,7 +179,7 @@ function parseDenoSpecifier(
179179
return { type: +match[1], specifier };
180180
}
181181

182-
function getDenoType(type: string): RequestedModuleType {
182+
function getDenoType(id: string, type: string): RequestedModuleType {
183183
switch (type) {
184184
case "json":
185185
return RequestedModuleType.Json;
@@ -188,6 +188,9 @@ function getDenoType(type: string): RequestedModuleType {
188188
case "text":
189189
return RequestedModuleType.Text;
190190
default:
191+
if (id.endsWith(".json")) {
192+
return RequestedModuleType.Json;
193+
}
191194
return RequestedModuleType.Default;
192195
}
193196
}

packages/plugin-vite/tests/build_test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,28 @@ Deno.test({
142142
sanitizeOps: false,
143143
sanitizeResources: false,
144144
});
145+
146+
Deno.test({
147+
name: "vite build - load json inside npm package",
148+
fn: async () => {
149+
await using res = await buildVite(DEMO_DIR);
150+
151+
await withChildProcessServer(
152+
{
153+
cwd: res.tmp,
154+
args: ["serve", "-A", "--port", "0", "_fresh/server.js"],
155+
},
156+
async (address) => {
157+
await withBrowser(async (page) => {
158+
await page.goto(`${address}/tests/mime`, {
159+
waitUntil: "networkidle2",
160+
});
161+
162+
await page.locator(".ready").wait();
163+
});
164+
},
165+
);
166+
},
167+
sanitizeOps: false,
168+
sanitizeResources: false,
169+
});

packages/plugin-vite/tests/dev_server_test.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,3 +128,19 @@ Deno.test({
128128
sanitizeResources: false,
129129
sanitizeOps: false,
130130
});
131+
132+
Deno.test({
133+
name: "vite dev - can import json in npm package",
134+
fn: async () => {
135+
await withDevServer(DEMO_DIR, async (address) => {
136+
await withBrowser(async (page) => {
137+
await page.goto(`${address}/tests/mime`, {
138+
waitUntil: "networkidle2",
139+
});
140+
await page.locator(".ready").wait();
141+
});
142+
});
143+
},
144+
sanitizeResources: false,
145+
sanitizeOps: false,
146+
});

0 commit comments

Comments
 (0)