-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest-setup-svelte.ts
More file actions
27 lines (25 loc) · 981 Bytes
/
Copy pathtest-setup-svelte.ts
File metadata and controls
27 lines (25 loc) · 981 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import { compile } from "svelte/compiler";
const typescript = new Bun.Transpiler({ loader: "ts", target: "browser" });
const svelteClient = new URL("./src/index-client.js", import.meta.resolve("svelte/package.json"))
.pathname;
Bun.plugin({
name: "svelte-test-compiler",
setup(build) {
build.onResolve({ filter: /^svelte$/ }, () => ({ path: svelteClient }));
build.onLoad({ filter: /\.svelte$/ }, async ({ path }) => {
let source = await Bun.file(path).text();
source = source.replace(
/<script([^>]*\blang=["']ts["'][^>]*)>([\s\S]*?)<\/script>/g,
(_match, attributes: string, script: string) =>
`<script${attributes.replace(/\s*lang=["']ts["']/, "")}>${typescript.transformSync(script)}</script>`,
);
const result = compile(source, {
filename: path,
generate: "client",
dev: true,
accessors: true,
});
return { contents: result.js.code, loader: "js" };
});
},
});