solid-register
Version:
integrated package to run solid browser code in node
60 lines (59 loc) • 2.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const read_config_1 = require("./read-config");
let babelTransformSync = (code, _options) => ({ code });
let presetSolid = (_context, _option = {}) => { };
let solidPresetPresent = false;
try {
babelTransformSync = require("@babel/core").transformSync;
presetSolid = require("babel-preset-solid");
solidPresetPresent = true;
}
catch (e) { }
const esbuild_1 = require("esbuild");
require("regenerator-runtime/runtime");
const register_extension_1 = require("./register-extension");
const useSSR = (read_config_1.conditions.length && read_config_1.conditions.includes("server")) ||
read_config_1.config.aliases?.solid === "server";
const esbuildTransform = (code, filename, options = {}, noJsx = false) => {
const loader = /\.([jt]sx?)$/i.test(filename)
? RegExp.$1.toLowerCase().slice(0, noJsx ? 2 : 3)
: "js";
const esbuilt = (0, esbuild_1.transformSync)(code, {
format: "esm",
loader,
sourcemap: "inline",
target: "node10",
...options,
});
if (esbuilt.warnings.length) {
console.warn(esbuilt.warnings);
}
if (esbuilt.code == null) {
console.warn("\x1b[33m⚠️ could not transform file with esbuild", filename);
}
return esbuilt.code ?? code;
};
const babelTransform = solidPresetPresent ? (code, filename) => {
const solidCode = babelTransformSync(code, {
filename,
presets: [
useSSR
? [presetSolid, { generate: "ssr", hydratable: true }]
: presetSolid,
],
sourceMaps: "inline",
});
if (solidCode.code == null) {
console.warn("\x1b[33m⚠️ could not transform file with solid-babel-preset", filename);
}
return solidCode.code ?? code;
} : (code, _filename) => code;
const transformer = (code, filename) => filename.endsWith("x")
? esbuildTransform(babelTransform(esbuildTransform(code, filename, { jsx: "preserve" }), filename), filename, { format: "cjs" })
: esbuildTransform(code, filename, { format: "cjs" }, true);
const extensions = (read_config_1.config.compile?.solid &&
typeof read_config_1.config.compile?.solid === "object" &&
read_config_1.config.compile.solid.engine === "solid" &&
read_config_1.config.compile.solid.extensions) || [".jsx", ".ts", ".tsx"];
extensions.forEach((extension) => (0, register_extension_1.registerCompiler)(extension, transformer));