UNPKG

solid-register

Version:

integrated package to run solid browser code in node

61 lines (60 loc) 2.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.init = exports.registerCompiler = void 0; const fs_1 = require("fs"); const compile_aliases_1 = require("./compile-aliases"); const registeredCompilers = {}; const registerCompiler = (extension, compiler) => { if (!(extension in registeredCompilers)) { registeredCompilers[extension] = []; } registeredCompilers[extension].push(compiler); }; exports.registerCompiler = registerCompiler; const originalLoader = require.extensions[".js"]; const loadModule = (module, filename) => { try { originalLoader(module, filename); } catch (error) { if (error && error.code) { if (error.code === "ERR_REQUIRE_ESM") { try { const code = (0, fs_1.readFileSync)(filename, "utf-8"); return module._compile(code, filename); } catch (e) { throw e ?? error; } } } throw error ?? new Error(`error when compiling ${filename}`); } }; const registerExtension = (extension) => { if (Array.isArray(extension)) { extension.forEach((ext) => registerExtension(ext)); } else { require.extensions[extension] = (module, filename) => { const oldname = filename; filename = (0, compile_aliases_1.solidAliasing)(filename); if (registeredCompilers[extension]) { const mod = module; const modCompile = mod._compile.bind(mod); mod._compile = (code) => modCompile(registeredCompilers[extension].reduce((code, compiler) => compiler.call(module, code, filename), code), code); loadModule(mod, filename); } else { loadModule(module, filename); } }; } }; const init = () => { registerExtension(Object.keys(registeredCompilers)); if (!registeredCompilers[".cjs"]) { registerExtension(".cjs"); } }; exports.init = init;