esbuild-plugin-solid
Version:
Solid's integration for ESBuild
41 lines (35 loc) • 1.34 kB
JavaScript
;
const node_path = require('node:path');
const promises = require('node:fs/promises');
const core = require('@babel/core');
const solid = require('babel-preset-solid');
const ts = require('@babel/preset-typescript');
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
const solid__default = /*#__PURE__*/_interopDefaultCompat(solid);
const ts__default = /*#__PURE__*/_interopDefaultCompat(ts);
function solidPlugin(options) {
return {
name: "esbuild:solid",
setup(build) {
build.onLoad({ filter: /\.(t|j)sx$/ }, async (args) => {
const source = await promises.readFile(args.path, { encoding: "utf-8" });
const { name, ext } = node_path.parse(args.path);
const filename = name + ext;
const result = await core.transformAsync(source, {
presets: [
[solid__default, options?.solid ?? {}],
[ts__default, 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" };
});
}
};
}
exports.solidPlugin = solidPlugin;