-
Notifications
You must be signed in to change notification settings - Fork 169
/
transformer.ts
26 lines (24 loc) · 1 KB
/
transformer.ts
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
import { transform } from "https://esm.sh/@babel/standalone@7.19.2";
import babelPresetSolid from "https://esm.sh/babel-preset-solid@1.5.5";
import solidRefresh from "https://esm.sh/solid-refresh@0.4.1/babel";
import type { ModuleLoader, ModuleLoaderEnv, ModuleLoaderOutput } from "../../server/types.ts";
export default class SolidTransformer implements ModuleLoader {
test(path: string): boolean {
return path.endsWith(".tsx") || path.endsWith(".jsx");
}
load(specifier: string, content: string, env: ModuleLoaderEnv): ModuleLoaderOutput {
const { code, map } = transform(content, {
presets: [
[babelPresetSolid, { generate: env.ssr ? "ssr" : "dom", hydratable: env.ssr || !env.spaMode }],
["typescript", { onlyRemoveTypeImports: true }],
],
plugins: env.isDev && !env.ssr ? [[solidRefresh, { bundler: "vite" }]] : [],
filename: specifier,
});
return {
code: code ?? "",
lang: "js",
map: map ? JSON.stringify(map) : undefined,
};
}
}