UNPKG

@trifrost/core

Version:

Blazingly fast, runtime-agnostic server framework for modern edge and node environments

72 lines (71 loc) 2.11 kB
"use strict"; // eslint-disable-next-line @typescript-eslint/triple-slash-reference /// <reference path="../atomic.d.ts" /> Object.defineProperty(exports, "__esModule", { value: true }); exports.setActiveScriptEngine = setActiveScriptEngine; exports.getActiveScriptEngine = getActiveScriptEngine; exports.createScript = createScript; exports.createModule = createModule; const Engine_1 = require("./Engine"); const env_1 = require("../ctx/env"); const state_1 = require("../ctx/state"); const nonce_1 = require("../ctx/nonce"); const Script_1 = require("./Script"); const Module_1 = require("./Module"); let active_engine = null; function setActiveScriptEngine(engine) { active_engine = engine; return engine; } function getActiveScriptEngine() { return active_engine; } /** * MARK: Script Factory */ function createScript(config) { let mountPath = null; const isAtomic = 'atomic' in config && config.atomic === true; if (!active_engine) setActiveScriptEngine(new Engine_1.ScriptEngine()); if (isAtomic) active_engine.setAtomic(true); const modMap = config.modules ?? {}; const env = (key) => (0, env_1.env)(key); const state = (key) => (0, state_1.state)(key); const Script = (props) => { if (!active_engine) setActiveScriptEngine(new Engine_1.ScriptEngine()); if (!active_engine.known_modules_rgx) active_engine?.setModules(modMap); return (0, Script_1.Script)(props); }; const root = () => { if (mountPath) active_engine.setMountPath(mountPath); active_engine.setRoot(true); }; const setMountPath = (path) => { mountPath = typeof path === 'string' ? path : null; }; return { Script, script: { env, state, nonce: nonce_1.nonce, root, isAtomic, setMountPath, }, }; } /** * MARK: Module Factory */ function createModule(config = {}) { function Module(props) { return (0, Module_1.Module)(props); } return { Module }; }