esbuild-plugin-solid
Version:
Solid's integration for ESBuild
34 lines (31 loc) • 1.03 kB
JavaScript
import { parse } from 'node:path';
import { readFile } from 'node:fs/promises';
import { transformAsync } from '@babel/core';
import solid from 'babel-preset-solid';
import ts from '@babel/preset-typescript';
function solidPlugin(options) {
return {
name: "esbuild:solid",
setup(build) {
build.onLoad({ filter: /\.(t|j)sx$/ }, async (args) => {
const source = await readFile(args.path, { encoding: "utf-8" });
const { name, ext } = parse(args.path);
const filename = name + ext;
const result = await transformAsync(source, {
presets: [
[solid, options?.solid ?? {}],
[ts, options?.typescript ?? {}]
],
filename,
sourceMaps: "inline",
...options?.babel ?? {}
});
if (result?.code === void 0 || result.code === null) {
throw new Error("No result was provided from Babel");
}
return { contents: result.code, loader: "js" };
});
}
};
}
export { solidPlugin };