UNPKG

@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
// @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 };