@dschz/bun-plugin-solid
Version:
A Bun plugin for transforming SolidJS TSX/JSX files at runtime or build time using Babel. Supports SSR and DOM output.
74 lines (72 loc) • 2.3 kB
JavaScript
// @bun
var __create = Object.create;
var __getProtoOf = Object.getPrototypeOf;
var __defProp = Object.defineProperty;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __toESM = (mod, isNodeMode, target) => {
target = mod != null ? __create(__getProtoOf(mod)) : {};
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
for (let key of __getOwnPropNames(mod))
if (!__hasOwnProp.call(to, key))
__defProp(to, key, {
get: () => mod[key],
enumerable: true
});
return to;
};
var __require = import.meta.require;
// src/index.ts
import tsPreset from "@babel/preset-typescript";
import solidPreset from "babel-preset-solid";
var logPrefix = "\x1B[36m[bun-plugin-solid-jsx]\x1B[0m";
var warnPrefix = "\x1B[33m[bun-plugin-solid-jsx]\x1B[0m";
var SolidPlugin = (options = {}) => {
const { generate = "dom", hydratable = true, sourceMaps = "inline", debug = false } = options;
const debugLog = (msg) => {
if (debug)
console.log(`${logPrefix} ${msg}`);
};
const debugWarn = (msg) => {
if (debug)
console.warn(`${warnPrefix} ${msg}`);
};
const plugin = {
name: "bun-plugin-solid",
setup: (build) => {
let babel;
let babelTransformPresets;
build.onLoad({ filter: /\.[tj]sx$/ }, async ({ path }) => {
if (!babel)
babel = await import("@babel/core");
if (!babelTransformPresets) {
babelTransformPresets = [
[tsPreset, {}],
[solidPreset, { generate, hydratable }]
];
}
debugLog(`Transforming: ${path}`);
const start = performance.now();
const result = await babel.transformFileAsync(path, {
presets: babelTransformPresets,
filename: path,
sourceMaps
});
const end = performance.now();
debugLog(`Transformed: ${path} in ${Math.round(end - start)}ms`);
if (!result || !result.code) {
debugWarn(`No code for: ${path}`);
return;
}
return {
loader: "js",
contents: result.code
};
});
}
};
return Object.freeze(plugin);
};
export {
SolidPlugin
};