UNPKG

solid-register

Version:

integrated package to run solid browser code in node

60 lines (59 loc) 2.5 kB
"use strict"; 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));