@trifrost/core
Version:
Blazingly fast, runtime-agnostic server framework for modern edge and node environments
72 lines (71 loc) • 2.11 kB
JavaScript
;
// 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 };
}