@jucie.io/engine 1.1.43 → 1.1.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ServiceProvider.js +2 -0
- package/dist/ServiceProvider.js.map +7 -0
- package/dist/main.js +4 -1
- package/dist/main.js.map +4 -4
- package/package.json +5 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var N=new Set(["__proto__","prototype","constructor"]),T=new Set(["use","install","uninstall","relay","state","debug"]),E=64,M=/^[a-zA-Z_$][a-zA-Z_$0-9]*$/;function D(e,r="key"){if(N.has(e))throw new Error(`Illegal key "${e}" in ${r}`)}function y(e){if(D(e,"namespace"),typeof e!="string")throw new Error(`Namespace must be a string, got ${typeof e}`);if(!M.test(e))throw new Error(`Invalid namespace "${e}". Must be a valid JS identifier`);if(e.length>E)throw new Error(`Namespace "${e}" too long (max ${E} chars)`);if(T.has(e))throw new Error(`Namespace "${e}" is reserved`);return e}function O(e,r,t="value"){if(Array.isArray(r)){for(let n of r)if(h(e,n))return!0;let o=r.map(u).join(" | ");throw new TypeError(`${t} must be one of: ${o}. Got ${u(e)}`)}if(!h(e,r))throw new TypeError(`${t} must be ${u(r)}. Got ${u(e)}`);return!0}function h(e,r){return r===String?typeof e=="string":r===Number?typeof e=="number"&&!isNaN(e):r===Boolean?typeof e=="boolean":r===Symbol?typeof e=="symbol":r===BigInt?typeof e=="bigint":r===Function?typeof e=="function":r===Array?Array.isArray(e):r===Object?e!==null&&typeof e=="object"&&!Array.isArray(e):e instanceof r}function u(e){return e===String?"String":e===Number?"Number":e===Boolean?"Boolean":e===Array?"Array":e===Object?"Object":e===Function?"Function":e===Date?"Date":e===RegExp?"RegExp":e===Promise?"Promise":e===Map?"Map":e===Set?"Set":e===WeakMap?"WeakMap":e===WeakSet?"WeakSet":e===Symbol?"Symbol":e===BigInt?"BigInt":e===Error?"Error":typeof e=="string"?"string":typeof e=="number"?"number":typeof e=="boolean"?"boolean":typeof e=="symbol"?"symbol":typeof e=="bigint"?"bigint":typeof e=="function"?"function":Array.isArray(e)?"Array":e===null?"null":e===void 0?"undefined":typeof e=="object"?e.constructor?.name||"Object":"unknown"}function d(e,r="value"){return t=>O(t,e,r)}var m=new Map,j=new WeakMap;var a=(e,r=[])=>{let t=r.length>0?d(r,"return value"):null;if(m.has(e))return console.warn(`Definition type "${e}" already exists`),m.get(e);let o=(n,i,...c)=>{d(String,"name")(n),d(Function,"factory")(i);let s=(...f)=>{try{let l=[...f,...c],b=i(...l);if(t&&b===void 0)throw new Error(`Factory ${e} must return a value for ${n}`);return t&&t(b),b}catch(l){throw console.error(`Error creating definition "${n}"`,l),l}};return Object.defineProperty(s,"_name",{value:n,enumerable:!1,configurable:!1}),j.set(s,e),s};return m.set(e,o),o};var A=a("MIDDLEWARE",[Function,Array]),w=a("ACTIONS",[Object]),I=a("UNINSTALL"),g=a("INITIALIZE"),S=a("GETTERS",[Object]);var p=class e{static create(r){return new e(r)}#r;#n;#e={MIDDLEWARE:null,GETTERS:null,ACTIONS:null,INITIALIZE:null,UNINSTALL:null};constructor(r){this.#r=r}#t(r,t,o){if(this.#e[r])throw new Error(`${r} already defined for ${this.#r}`);this.#e[r]=o(this.#r,t)}defineMiddleware=r=>this.#t("MIDDLEWARE",r,A);defineGetters=r=>this.#t("GETTERS",r,S);defineActions=r=>this.#t("ACTIONS",r,w);defineInitialize=r=>this.#t("INITIALIZE",r,g);defineUninstall=r=>this.#t("UNINSTALL",r,I);_toArray(){return[this.#e.MIDDLEWARE,this.#e.GETTERS,this.#e.ACTIONS,this.#e.INITIALIZE,this.#e.UNINSTALL].filter(Boolean)}};var $=class e{static#r=new Set;static manifest={name:"base",dependencies:[],version:"1.0.0",description:"Base extension template"};static config=null;static unique=!1;static configure(r={}){return{install:(t,o)=>this.install(t,o),manifest:this.manifest,config:{...this.config||this.manifest.defaults||{},...r},unique:!0,configured:!0}}static install(r,t){try{let{namespace:o}=this.manifest;y(o);let n=new this;e.#r.add(n),Object.defineProperty(n,"config",{value:Object.freeze({...t}),writable:!1,configurable:!1,enumerable:!1}),Object.defineProperty(n,"context",{get:()=>r(),configurable:!1,enumerable:!1}),Object.defineProperty(n,"useContext",{value:(...c)=>r(...c),writable:!1,configurable:!1,enumerable:!1});let i=p.create(o);if(n.setup){let c={defineActions:f=>i.defineActions(()=>f(r,t)),defineMiddleware:f=>i.defineMiddleware(()=>f(r,t)),defineGetters:f=>i.defineGetters(()=>f(r,t)),defineInitialize:f=>i.defineInitialize(()=>f(r,t)),defineUninstall:f=>i.defineUninstall(()=>f(r,t))},s=n.setup(c);return s?.then?s.then(()=>i._toArray()):i._toArray()}return n.middleware&&i.defineMiddleware(()=>n.middleware(r,t)),n.getters&&i.defineGetters(()=>n.getters(r,t)),n.actions&&i.defineActions(()=>n.actions(r,t)),n.initialize&&i.defineInitialize(()=>n.initialize(r,t)),n.uninstall&&i.defineUninstall(()=>n.uninstall(r,t)),i._toArray()}catch(o){throw o}}};export{$ as ServiceProvider};
|
|
2
|
+
//# sourceMappingURL=ServiceProvider.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/asserts.js", "../src/utils/typeChecker.js", "../src/definitions/createDefinition.js", "../src/definitions/defaults.js", "../src/definitions/DefinitionBuilder.js", "../src/ServiceProvider.js"],
|
|
4
|
+
"sourcesContent": ["// utils/asserts.js\n\nconst BAD_KEYS = new Set(['__proto__', 'prototype', 'constructor']);\nconst RESERVED_NAMESPACES = new Set(['use', 'install', 'uninstall', 'relay', 'state', 'debug']);\n\nconst MAX_NAME_LENGTH = 64;\nconst VALID_NAME = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/**\n * Throw if key is unsafe (__proto__, constructor, etc.)\n */\nexport function assertSafeKey(key, where = 'key') {\n if (BAD_KEYS.has(key)) {\n throw new Error(`Illegal key \"${key}\" in ${where}`);\n }\n}\n\n/**\n * Validate a namespace string: format, length, reserved words, proto poisoning.\n */\nexport function assertNamespace(ns) {\n assertSafeKey(ns, 'namespace');\n if (typeof ns !== 'string') {\n throw new Error(`Namespace must be a string, got ${typeof ns}`);\n }\n if (!VALID_NAME.test(ns)) {\n throw new Error(`Invalid namespace \"${ns}\". Must be a valid JS identifier`);\n }\n if (ns.length > MAX_NAME_LENGTH) {\n throw new Error(`Namespace \"${ns}\" too long (max ${MAX_NAME_LENGTH} chars)`);\n }\n if (RESERVED_NAMESPACES.has(ns)) {\n throw new Error(`Namespace \"${ns}\" is reserved`);\n }\n return ns;\n}\n\n/**\n * Validate an action or getter name within a namespace.\n */\nexport function assertMemberName(name, namespace, kind = 'member') {\n assertSafeKey(name, `${kind}:${namespace}`);\n if (typeof name !== 'string') {\n throw new Error(`${kind} name in ${namespace} must be a string`);\n }\n if (!VALID_NAME.test(name)) {\n throw new Error(`Invalid ${kind} name \"${name}\" in ${namespace}`);\n }\n if (name.length > MAX_NAME_LENGTH) {\n throw new Error(\n `${kind} name \"${name}\" in ${namespace} too long (max ${MAX_NAME_LENGTH})`\n );\n }\n return name;\n}\n", "/**\n * Type Checker Utility\n * \n * Supports syntax like:\n * - createDefinition('action', [Array, Function]) // Array or Function\n * - createDefinition('name', String) // Must be String\n * - createDefinition('items', Array) // Must be Array\n * - createDefinition('callback', Function) // Must be Function\n * - createDefinition('value', [String, Number]) // String or Number\n */\n\n/**\n * Type definitions mapping constructor names to actual constructors\n */\nconst TYPE_MAP = {\n String,\n Number,\n Boolean,\n Array,\n Object,\n Function,\n Date,\n RegExp,\n Promise,\n Map,\n Set,\n WeakMap,\n WeakSet,\n Symbol,\n BigInt,\n Error,\n TypeError,\n RangeError,\n ReferenceError,\n SyntaxError,\n EvalError,\n URIError\n};\n\n/**\n * Checks if a value matches the expected type(s)\n * @param {*} value - The value to check\n * @param {Function|Array<Function>} expectedType - Single type or array of possible types\n * @param {string} name - Name of the parameter for error messages\n * @returns {boolean} - True if value matches expected type(s)\n */\nexport function checkType(value, expectedType, name = 'value') {\n // Handle array of possible types\n if (Array.isArray(expectedType)) {\n for (const type of expectedType) {\n if (matchesType(value, type)) {\n return true;\n }\n }\n \n const typeNames = expectedType.map(getTypeName).join(' | ');\n throw new TypeError(`${name} must be one of: ${typeNames}. Got ${getTypeName(value)}`);\n }\n \n // Handle single type\n if (!matchesType(value, expectedType)) {\n throw new TypeError(`${name} must be ${getTypeName(expectedType)}. Got ${getTypeName(value)}`);\n }\n \n return true;\n}\n\n/**\n * Checks if a value matches a specific type\n * @param {*} value - The value to check\n * @param {Function} type - The expected constructor/type\n * @returns {boolean} - True if value matches the type\n */\nfunction matchesType(value, type) {\n // Handle primitive constructors\n if (type === String) {\n return typeof value === 'string';\n }\n if (type === Number) {\n return typeof value === 'number' && !isNaN(value);\n }\n if (type === Boolean) {\n return typeof value === 'boolean';\n }\n if (type === Symbol) {\n return typeof value === 'symbol';\n }\n if (type === BigInt) {\n return typeof value === 'bigint';\n }\n if (type === Function) {\n return typeof value === 'function';\n }\n \n // Handle object constructors (including Array, Object, Date, etc.)\n if (type === Array) {\n return Array.isArray(value);\n }\n if (type === Object) {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n }\n \n // Handle other constructors (Date, RegExp, Map, Set, etc.)\n return value instanceof type;\n}\n\n/**\n * Gets a human-readable name for a type\n * @param {*} value - The value or constructor to get name for\n * @returns {string} - Human-readable type name\n */\nfunction getTypeName(value) {\n if (value === String) return 'String';\n if (value === Number) return 'Number';\n if (value === Boolean) return 'Boolean';\n if (value === Array) return 'Array';\n if (value === Object) return 'Object';\n if (value === Function) return 'Function';\n if (value === Date) return 'Date';\n if (value === RegExp) return 'RegExp';\n if (value === Promise) return 'Promise';\n if (value === Map) return 'Map';\n if (value === Set) return 'Set';\n if (value === WeakMap) return 'WeakMap';\n if (value === WeakSet) return 'WeakSet';\n if (value === Symbol) return 'Symbol';\n if (value === BigInt) return 'BigInt';\n if (value === Error) return 'Error';\n \n if (typeof value === 'string') return 'string';\n if (typeof value === 'number') return 'number';\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'symbol') return 'symbol';\n if (typeof value === 'bigint') return 'bigint';\n if (typeof value === 'function') return 'function';\n if (Array.isArray(value)) return 'Array';\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'object') {\n return value.constructor?.name || 'Object';\n }\n \n return 'unknown';\n}\n\n/**\n * Creates a type checker function for a specific parameter\n * @param {Function|Array<Function>} expectedType - Expected type(s)\n * @param {string} name - Parameter name\n * @returns {Function} - Type checker function\n */\nexport function createTypeChecker(expectedType, name = 'value') {\n return (value) => checkType(value, expectedType, name);\n}\n\n/**\n * Validates an object against a schema\n * @param {Object} obj - Object to validate\n * @param {Object} schema - Schema definition { prop: Type, prop2: [Type1, Type2] }\n * @param {string} objName - Name of the object for error messages\n */\nexport function validateObject(obj, schema, objName = 'object') {\n if (!obj || typeof obj !== 'object') {\n throw new TypeError(`${objName} must be an object`);\n }\n \n for (const [prop, expectedType] of Object.entries(schema)) {\n if (prop in obj) {\n checkType(obj[prop], expectedType, `${objName}.${prop}`);\n }\n }\n}\n\n/**\n * Creates a validator function for an object schema\n * @param {Object} schema - Schema definition\n * @param {string} objName - Name of the object\n * @returns {Function} - Validator function\n */\nexport function createObjectValidator(schema, objName = 'object') {\n return (obj) => validateObject(obj, schema, objName);\n}\n\n// Export the type map for advanced usage\nexport { TYPE_MAP };\n", "const DefinitionTypes = new Map();\nconst Definitions = new WeakMap();\nimport { createTypeChecker } from '../utils/typeChecker.js';\n\n/**\n * Creates a definition type with return type validation\n * @param {string} type - The definition type name\n * @param {Function|Array<Function>} returnTypes - Expected return type(s)\n * @returns {Function} - Definition creator function\n */\n\n\nexport const definitionType = (definition) => {\n if (Definitions.has(definition)) {\n return Definitions.get(definition);\n }\n return undefined;\n}\n\nexport const createDefinition = (type, returnTypes = []) => { \n // Create type checker for return values if returnTypes specified\n const returnTypeChecker = returnTypes.length > 0 ? createTypeChecker(returnTypes, 'return value') : null;\n \n if (DefinitionTypes.has(type)) {\n console.warn(`Definition type \"${type}\" already exists`);\n return DefinitionTypes.get(type);\n }\n\n const definitionType = (name, factory, ...defaultArgs) => {\n // Validate inputs using type checker\n createTypeChecker(String, 'name')(name);\n createTypeChecker(Function, 'factory')(factory);\n\n const definition = (...args) => {\n try {\n const combinedArgs = [...args, ...defaultArgs];\n const res = factory(...combinedArgs);\n \n if (returnTypeChecker && res === undefined) {\n throw new Error(`Factory ${type} must return a value for ${name}`);\n }\n\n // Use type checker to validate return value\n if (returnTypeChecker) {\n returnTypeChecker(res);\n }\n\n return res\n } catch (error) {\n console.error(`Error creating definition \"${name}\"`, error);\n throw error;\n }\n }\n\n Object.defineProperty(definition, '_name', {\n value: name,\n enumerable: false,\n configurable: false\n });\n\n Definitions.set(definition, type);\n\n return definition;\n }\n\n DefinitionTypes.set(type, definitionType);\n\n return definitionType;\n}; ", "import { createDefinition, definitionType } from './createDefinition.js';\nexport const defineMiddleware = createDefinition('MIDDLEWARE', [Function, Array]);\nexport const defineActions = createDefinition('ACTIONS', [Object]);\nexport const defineUninstall = createDefinition('UNINSTALL');\nexport const defineInitialize = createDefinition('INITIALIZE');\nexport const defineGetters = createDefinition('GETTERS', [Object]);\nexport { createDefinition, definitionType };", "// DefinitionBuilder.js\nimport { defineActions, defineGetters, defineMiddleware, defineInitialize, defineUninstall } from './defaults.js';\n\nexport class DefinitionBuilder {\n static create(namespace) {\n return new DefinitionBuilder(namespace);\n }\n\n #ns; #args;\n #slots = { MIDDLEWARE:null, GETTERS:null, ACTIONS:null, INITIALIZE:null, UNINSTALL:null };\n constructor(namespace) { this.#ns = namespace }\n\n #set(type, factory, creator) {\n if (this.#slots[type]) throw new Error(`${type} already defined for ${this.#ns}`);\n this.#slots[type] = creator(this.#ns, factory);\n }\n\n defineMiddleware = (factory) => this.#set('MIDDLEWARE', factory, defineMiddleware);\n defineGetters = (factory) => this.#set('GETTERS', factory, defineGetters);\n defineActions = (factory) => this.#set('ACTIONS', factory, defineActions);\n defineInitialize = (factory) => this.#set('INITIALIZE', factory, defineInitialize);\n defineUninstall = (factory) => this.#set('UNINSTALL', factory, defineUninstall);\n\n _toArray() {\n return [\n this.#slots.MIDDLEWARE,\n this.#slots.GETTERS,\n this.#slots.ACTIONS,\n this.#slots.INITIALIZE,\n this.#slots.UNINSTALL\n ].filter(Boolean);\n }\n}\n\n", "import { assertNamespace } from './utils/asserts.js';\nimport { DefinitionBuilder } from './definitions/DefinitionBuilder.js';\n\n\nexport class ServiceProvider {\n static #services = new Set();\n\n static manifest = {\n name: 'base',\n dependencies: [],\n version: '1.0.0',\n description: 'Base extension template',\n };\n\n static config = null;\n\n static unique = false;\n\n static configure(options = {}) {\n return {\n install: (useContext, config) => this.install(useContext, config),\n manifest: this.manifest,\n config: { ...(this.config || this.manifest.defaults || {}), ...options },\n unique: true,\n configured: true\n };\n }\n\n static install(useContext, config) { \n try {\n const {namespace} = this.manifest;\n assertNamespace(namespace);\n\n // instantiate\n const instance = new this();\n ServiceProvider.#services.add(instance);\n\n // bind context/config\n // bind config (frozen to avoid accidental mutation)\n Object.defineProperty(instance, 'config', {\n value: Object.freeze({ ...config }),\n writable: false,\n configurable: false,\n enumerable: false,\n });\n\n // expose both a live context getter AND the keyed accessor\n Object.defineProperty(instance, 'context', {\n get: () => useContext(), // always fresh, via your proxy\n configurable: false,\n enumerable: false,\n });\n \n Object.defineProperty(instance, 'useContext', {\n value: (...keys) => useContext(...keys),\n writable: false,\n configurable: false,\n enumerable: false,\n });\n\n const builder = DefinitionBuilder.create(namespace);\n\n if (instance.setup) {\n // Create properly bound context for setup pattern\n const setupContext = {\n defineActions: (factory) => builder.defineActions(() => factory(useContext, config)),\n defineMiddleware: (factory) => builder.defineMiddleware(() => factory(useContext, config)),\n defineGetters: (factory) => builder.defineGetters(() => factory(useContext, config)),\n defineInitialize: (factory) => builder.defineInitialize(() => factory(useContext, config)),\n defineUninstall: (factory) => builder.defineUninstall(() => factory(useContext, config))\n };\n const maybe = instance.setup(setupContext);\n return maybe?.then ? maybe.then(() => builder._toArray()) : builder._toArray();\n }\n\n if (instance.middleware) builder.defineMiddleware(() => instance.middleware(useContext, config));\n if (instance.getters) builder.defineGetters (() => instance.getters(useContext, config));\n if (instance.actions) builder.defineActions (() => instance.actions(useContext, config));\n if (instance.initialize) builder.defineInitialize(() => instance.initialize(useContext, config));\n if (instance.uninstall) builder.defineUninstall (() => instance.uninstall(useContext, config));\n\n return builder._toArray();\n } catch (error) {\n throw error;\n }\n }\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["BAD_KEYS", "RESERVED_NAMESPACES", "MAX_NAME_LENGTH", "VALID_NAME", "assertSafeKey", "key", "where", "assertNamespace", "ns", "checkType", "value", "expectedType", "name", "type", "matchesType", "typeNames", "getTypeName", "createTypeChecker", "DefinitionTypes", "Definitions", "createDefinition", "type", "returnTypes", "returnTypeChecker", "createTypeChecker", "DefinitionTypes", "definitionType", "name", "factory", "defaultArgs", "definition", "args", "combinedArgs", "res", "error", "Definitions", "defineMiddleware", "createDefinition", "defineActions", "defineUninstall", "defineInitialize", "defineGetters", "DefinitionBuilder", "_DefinitionBuilder", "namespace", "#ns", "#args", "#slots", "#set", "type", "factory", "creator", "defineMiddleware", "defineGetters", "defineActions", "defineInitialize", "defineUninstall", "ServiceProvider", "_ServiceProvider", "#services", "options", "useContext", "config", "namespace", "assertNamespace", "instance", "keys", "builder", "DefinitionBuilder", "setupContext", "factory", "maybe", "error"]
|
|
7
|
+
}
|
package/dist/main.js
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
var u={PRIMITIVE:0,OBJECT:1,ARRAY:2,RESERVED:3},A=class s{constructor(e){this.flags=0,e!==void 0&&(typeof e=="function"?this.flags|=1:typeof e=="object"&&e!==null&&!Array.isArray(e)?(this._children=new Map(Object.entries(e).map(([t,r])=>[t,new s(r)])),this.flags|=16,this.originalType=u.OBJECT):Array.isArray(e)?(this._children=new Map(e.map((t,r)=>[r,new s(t)])),this.flags|=16,this.originalType=u.ARRAY):(this.value=e,this.originalType=u.PRIMITIVE))}get isFunction(){return(this.flags&1)!==0}set isFunction(e){this.flags=e?this.flags|1:this.flags&-2}get isSetOnce(){return(this.flags&2)!==0}set isSetOnce(e){this.flags=e?this.flags|2:this.flags&-3}get cached(){return(this.flags&4)!==0}set cached(e){this.flags=e?this.flags|4:this.flags&-5}get executed(){return(this.flags&8)!==0}set executed(e){this.flags=e?this.flags|8:this.flags&-9}get hasChildrenFlag(){return(this.flags&16)!==0}set hasChildrenFlag(e){this.flags=e?this.flags|16:this.flags&-17}get isFixed(){return(this.flags&32)!==0}set isFixed(e){this.flags=e?this.flags|32:this.flags&-33}get originalType(){return this.flags>>6&3}set originalType(e){this.flags=this.flags&-193|(e&3)<<6}get children(){return this._children||(this._children=new Map,this.hasChildrenFlag=!0),this._children}hasChildren(){return this.hasChildrenFlag&&this._children&&this._children.size>0}get cachedResult(){return this._cachedResult}set cachedResult(e){this._cachedResult=e}get cachedAt(){return this._cachedAt}set cachedAt(e){this._cachedAt=e}get(e){let t=e.shift();if(t===void 0){if(this.flags&1){if((this.flags&6)===6)return this.cachedResult;let r=this.value();return this.flags&2&&(this.flags|=4,this.cachedResult=r,this.cachedAt=Date.now()),this.flags|=8,r}return this.value!==void 0?this.value:this.hasChildren()?this._reconstructFromChildren():void 0}if(this._children?.has(t))return this._children.get(t).get(e)}set(e,t){let r=e.shift();if(r===void 0){if(this.isFixed)throw new Error("Cannot overwrite fixed value at path. Use clearFixed() first if you need to modify it.");return typeof t=="object"&&t!==null&&!Array.isArray(t)&&typeof t!="function"?this._syncObjectChildren(t):Array.isArray(t)?this._syncArrayChildren(t):(this.value=t,this.flags=typeof t=="function"?1:0,this.originalType=u.PRIMITIVE),this}let n=this.children;return n.has(r)||n.set(r,new s),n.get(r).set(e,t),this}setOnce(e,t){let r=e.shift();if(r===void 0){if(this.isFixed)throw new Error("Cannot overwrite fixed value at path. Use clearFixed() first if you need to modify it.");return typeof t=="object"&&t!==null&&!Array.isArray(t)&&typeof t!="function"?(this._syncObjectChildren(t),this.flags=this.flags|2):Array.isArray(t)?(this._syncArrayChildren(t),this.flags=this.flags|2):(this.value=t,this.flags=typeof t=="function"?3:2,this.originalType=u.PRIMITIVE),this}let n=this.children;return n.has(r)||n.set(r,new s),n.get(r).setOnce(e,t),this}has(e){let t=e.shift();return t===void 0?this.value!==void 0:this._children?.has(t)?this._children.get(t).has(e):!1}remove(e){let t=e.shift();return t===void 0?(this.value=void 0,this.flags=this.flags&-16,this):(this._children?.has(t)&&this._children.get(t).remove(e),this)}clearCache(e){let t=e.shift();return t===void 0?(this.flags=this.flags&-5,this.cachedResult=null,this.cachedAt=null,this):(this._children?.has(t)&&this._children.get(t).clearCache(e),this)}fixed(e,t){let r=e.shift();if(r===void 0){if(this.value!==void 0&&this.isFixed)throw new Error("Value at path is already fixed and cannot be changed. Use clearFixed() first if needed.");return this.value=t,this.flags=(typeof t=="function"?1:0)|32,this}let n=this.children;return n.has(r)||n.set(r,new s),n.get(r).fixed(e,t),this}clearFixed(e){let t=e.shift();return t===void 0?this.isFixed?(this.flags=this.flags&-33,this):(console.warn("Attempted to clear fixed flag on non-fixed value"),this):(this._children?.has(t)&&this._children.get(t).clearFixed(e),this)}isFixedValue(e){let t=e.shift();return t===void 0?this.isFixed:this._children?.has(t)?this._children.get(t).isFixedValue(e):!1}_syncObjectChildren(e){let t=new Set(Object.keys(e)),r=new Set(this.children.keys());for(let n of r)t.has(n)||this.children.delete(n);for(let[n,i]of Object.entries(e))if(this.children.has(n)||this.children.set(n,new s),typeof i=="object"&&i!==null&&!Array.isArray(i)&&typeof i!="function")this.children.get(n)._syncObjectChildren(i);else if(Array.isArray(i))this.children.get(n)._syncArrayChildren(i);else{let o=this.children.get(n);o.value=i,o.flags=typeof i=="function"?1:0}this.value=void 0,this.flags=this.flags&-2,this.originalType=u.OBJECT}_syncArrayChildren(e){let t=new Set(e.map((n,i)=>i)),r=new Set(this.children.keys());for(let n of r)typeof n=="number"&&!t.has(n)&&this.children.delete(n);for(let n=0;n<e.length;n++){let i=e[n];if(this.children.has(n)||this.children.set(n,new s),typeof i=="object"&&i!==null&&!Array.isArray(i)&&typeof i!="function")this.children.get(n)._syncObjectChildren(i);else if(Array.isArray(i))this.children.get(n)._syncArrayChildren(i);else{let o=this.children.get(n);o.value=i,o.flags=typeof i=="function"?1:0}}this.value=void 0,this.flags=this.flags&-2,this.originalType=u.ARRAY}_reconstructFromChildren(){if(!this._children||this._children.size===0)return;if(this.originalType===u.ARRAY){let t=[];for(let[r,n]of this._children)typeof r=="number"&&(t[r]=n.get([]));return t}else{let t={};for(let[r,n]of this._children)t[r]=n.get([]);return t}}},x=class s{static create(e){return new s(e)}constructor(e={}){return this.load(e)}load(e){return this.root=new A(e),this}get(e){let t=Array.isArray(e)?[...e]:[e];return this.root.get(t)}update(e,t){let r=Array.isArray(e)?[...e]:[e],n=this.root.get([...r]),i=t(n);return this.root.set([...r],i),this}set(e,t){let r=Array.isArray(e)?[...e]:[e];return this.root.set(r,t),this}setOnce(e,t){let r=Array.isArray(e)?[...e]:[e];return this.root.setOnce(r,t),this}fixed(e,t){let r=Array.isArray(e)?[...e]:[e];return this.root.fixed(r,t),this}has(e){let t=Array.isArray(e)?[...e]:[e];return this.root.has(t)}remove(e){let t=Array.isArray(e)?[...e]:[e];return this.root.remove(t),this}clearCache(e){let t=Array.isArray(e)?[...e]:[e];return this.root.clearCache(t),this}clearFixed(e){let t=Array.isArray(e)?[...e]:[e];return this.root.clearFixed(t),this}isFixed(e){let t=Array.isArray(e)?[...e]:[e];return this.root.isFixedValue(t)}export(){return this._exportNode(this.root)}static import(e){let t=new s;return t.root=t._importNode(e),t}_exportNode(e){let t={flags:e.flags};if(e.isFunction)t.type="function",t.skipped=!0;else if(e.hasChildren()){t.type="map",t.value=[];for(let[r,n]of e._children)t.value.push([r,this._exportNode(n)]);e.value!==void 0&&(t.nodeValue=e.value)}else e.value!==void 0?(t.type="primitive",t.value=e.value):t.type="empty";return t}_importNode(e){let t=new A;switch(t.flags=e.flags||0,e.type){case"function":t.value=void 0,t.flags=t.flags&-16;break;case"primitive":t.value=e.value;break;case"map":if(e.value&&e.value.length>0){t._children=new Map;for(let[r,n]of e.value){let i=typeof r=="string"&&/^\d+$/.test(r)?parseInt(r,10):r;t._children.set(i,this._importNode(n))}t.hasChildrenFlag=!0}e.nodeValue!==void 0&&(t.value=e.nodeValue);break;case"empty":default:break}return t}};var d=Object.freeze(Object.create(null));function V(s){if(globalThis.queueMicrotask&&typeof globalThis.queueMicrotask=="function"){globalThis.queueMicrotask(s);return}setTimeout(s,0)}var _=class{#t;#e;constructor(e,t){this.#t=e,this.#e=t}on(e,t){return this.#e.subscribe(e,d,this.#t,t)}once(e,t){return this.#e.once(e,d,this.#t,t)}broadcast(e,...t){this.#e.publish(e,this.#t,d,t)}from(e){return{subscribe:(t,r)=>this.#e.subscribe(t,e,this.#t,r),once:(t,r)=>this.#e.once(t,e,this.#t,r)}}to(e){return{publish:(t,...r)=>this.#e.publish(t,this.#t,e,r),publishAsync:(t,...r)=>this.#e.publishAsync(t,this.#t,e,r)}}},b=class s{#t=new WeakMap;#e=new Map;#r=null;static create(e={}){return new s(e)}constructor({onError:e=null}={}){this.#r=e,this.createChannel(d)}channel(e){return this.createChannel(e)}createChannel(e){if(this.#t.has(e))return this.#t.get(e);let t=new _(e,this);return this.#t.set(e,t),t}#n(e){let t=this.#e.get(e);return t||(t=new Set,this.#e.set(e,t)),t}static#s(e,t){return e===d||t===d||e===t}static#i(e,t,r,n){return s.#s(e,r)&&s.#s(t,n)}subscribe(e,t,r,n){let i={from:t,to:r,handler:n};return this.#n(e).add(i),()=>{let o=this.#e.get(e);o&&o.delete(i)}}once(e,t,r,n){let i=null,o=c=>{try{n(c)}finally{i&&i()}};return i=this.subscribe(e,t,r,o),i}offAllFor(e){for(let t of this.#e.values())for(let r of Array.from(t))(r.from===e||r.to===e)&&t.delete(r)}listenerCount(e){let t=this.#e.get(e);return t?t.size:0}#o(e,t,r,n){let i=this.#e.get(e);if(!(!i||i.size===0)){for(let o of i)if(o.to!==t&&s.#i(t,r,o.from,o.to))try{o.handler(...n)}catch(c){this.#r&&this.#r(c,{event:e,from:t,to:r,listener:o})}}}publish(e,t,r,n){this.#o(e,t,r,n)}publishAsync(e,t,r,n){V(()=>this.#o(e,t,r,n))}broadcast(e,t,r){this.publish(e,t,d,r)}};var y={trace:10,debug:20,info:30,warn:40,error:50,silent:90},E=class s{static create(e={}){return new s(e)}#t;#e;#r;constructor({level:e="info",sinks:t=[],base:r={}}={}){this.#t=y[e]??y.info,this.#e=t,this.#r=r}setLevel(e){this.#t=y[e]??this.#t}child(e={},t=[]){return new s({level:this.level,sinks:[...this.#e,...t],base:{...this.#r,...e}})}get level(){return Object.entries(y).find(([e,t])=>t===this.#t)?.[0]??"info"}log(e,t,r={}){if((y[e]??y.info)<this.#t)return;let i={t:Date.now(),level:e,msg:t,...this.#r,...r};for(let o of this.#e)o(i)}trace(e,t){this.log("trace",e,t)}debug(e,t){this.log("debug",e,t)}info(e,t){this.log("info",e,t)}warn(e,t){this.log("warn",e,t)}error(e,t){this.log("error",e,t)}progress(e,t,r="",n={}){let i={t:Date.now(),type:"progress",level:"info",msg:r,current:e,total:t,message:r,percentage:Math.round(e/t*100),...this.#r,...n};for(let o of this.#e)o(i)}metric(e,t,r="ms",n={}){let i={t:Date.now(),type:"metric",level:"info",msg:`${e}: ${t}${r}`,name:e,value:t,unit:r,...this.#r,...n};for(let o of this.#e)o(i)}},j=s=>{let{t:e,level:t,msg:r,ns:n,...i}=s,o=new Date(e).toISOString(),c=t==="error"?console.error:t==="warn"?console.warn:console.log,a=`${n?`[${n}] `:""}${r}`;Object.keys(i).length>0?c(`[${o}] ${t.toUpperCase()} ${a}`,i):c(`[${o}] ${t.toUpperCase()} ${a}`)},N=(s=1e3)=>{let e=[];return{sink:t=>{e.push(t),e.length>s&&e.shift()},read:()=>e.slice(),clear:()=>{e.length=0}}};var I=new WeakMap,k=s=>{if(I.has(s))return I.get(s)};var w=s=>s&&s.constructor&&s.constructor.name==="AsyncFunction",M=(s,e)=>w(e)||s.some(w);var C=(s,e)=>e.length===0?s:e.length===1&&Array.isArray(e[0])?e[0]:e;var p=s=>s?Array.isArray(s)?s:[s]:[];var v=new Set(["__proto__","prototype","constructor"]),L=new Set(["use","install","uninstall","relay","state","debug"]),O=64,F=/^[a-zA-Z_$][a-zA-Z_$0-9]*$/;function R(s,e="key"){if(v.has(s))throw new Error(`Illegal key "${s}" in ${e}`)}function g(s){if(R(s,"namespace"),typeof s!="string")throw new Error(`Namespace must be a string, got ${typeof s}`);if(!F.test(s))throw new Error(`Invalid namespace "${s}". Must be a valid JS identifier`);if(s.length>O)throw new Error(`Namespace "${s}" too long (max ${O} chars)`);if(L.has(s))throw new Error(`Namespace "${s}" is reserved`);return s}function S(s,e,t="member"){if(R(s,`${t}:${e}`),typeof s!="string")throw new Error(`${t} name in ${e} must be a string`);if(!F.test(s))throw new Error(`Invalid ${t} name "${s}" in ${e}`);if(s.length>O)throw new Error(`${t} name "${s}" in ${e} too long (max ${O})`);return s}function T(s,e){if(!e||typeof e!="object")return e||s;if(!s||typeof s!="object")return e;let t={...s};for(let r in e)e.hasOwnProperty(r)&&(e[r]&&typeof e[r]=="object"&&!Array.isArray(e[r])&&s[r]&&typeof s[r]=="object"&&!Array.isArray(s[r])?t[r]=T(s[r],e[r]):t[r]=e[r]);return t}var D=()=>{let s=["DEVELOPMENT","TEST","DEV"];return typeof process<"u"&&process?.env?.NODE_ENV?s.includes(process.env.NODE_ENV.toUpperCase()):typeof globalThis<"u"&&globalThis.__ENV__?.NODE_ENV?s.includes(globalThis.__ENV__.NODE_ENV.toUpperCase()):!1};var P=class s{static options={};static create(e={}){return new s(e,s.options)}#t=new WeakMap;#e=new WeakMap;#r=new WeakMap;#n=new WeakMap;#s=new WeakMap;#i=void 0;#o={};#a=void 0;#l=void 0;#f=void 0;static configure(e){return e={...s.options,...e},{create:(t={})=>new s(t,e)}}constructor(e={},t=s.options){this.#i={...s.options,...t},this.#o={...e};for(let[r,n]of Object.entries(this.#o))Object.defineProperty(this,r,{value:n,enumerable:!0,configurable:!1,writable:!1});this.#f=x.create(),this.#a=b.create(),this.#l=E.create({level:D()?"debug":"info",sinks:[j,N(2e3).sink]})}get cache(){return this.#f}get relay(){return this.#a}get log(){return this.#l}use(...e){return this.#y(e,this)}install(...e){return this.#u(this,e)}#u(e,t){try{for(let n of t){if(!n.manifest?.namespace||!n.install)throw new Error(`${n.manifest?.name??"<unknown service>"} must have a namespace and install method`);if(Object.prototype.hasOwnProperty.call(e,n.manifest.namespace))throw new Error(`${n.manifest.namespace} already exists`);let i=T(this.#i||{},n.config||n.manifest.defaults||{}),o=this.#c(e,n.manifest.namespace),c=this.#m(e,n.manifest.namespace,o,i,n.manifest);if(n.manifest.dependencies?.length){let a=n.manifest.dependencies.filter(f=>f.unique),l=n.manifest.dependencies.filter(f=>!f.unique&&!Object.prototype.hasOwnProperty.call(e,f.manifest.namespace));a.length>0&&this.#u(c,a),l.length>0&&this.#u(e,l)}let h=this.#h(e,n.manifest.namespace,o,i,n.manifest);this.#y(n.install(h,i),e)}let r=this.#n.get(e);if(r?.size){for(let[n,i]of r)try{i()}finally{r.delete(n)}this.#n.delete(e)}return e}catch(r){throw r}}uninstall(...e){return this.#b(this,e)}#b(e,t){let r=this.#s.get(e),n=this.#t.get(e),i=this.#e.get(e),o=this.#d(e);for(let c of t)if(r?.get(c)?.(),r?.delete(c),o?.delete(c),this.#n.get(e)?.delete(c),Object.prototype.hasOwnProperty.call(e,c)&&delete e[c],n?.delete(c),i)for(let h of i.values())Object.prototype.hasOwnProperty.call(h,c)&&delete h[c];return r&&r.size===0&&this.#s.delete(e),this}#y(e,t=this){for(let r of e)if(r)switch(k(r)){case"MIDDLEWARE":this.#x(r,t);break;case"GETTERS":this.#A(r,t);break;case"ACTIONS":this.#w(r,t);break;case"INITIALIZE":this.#E(r,t);break;case"UNINSTALL":this.#C(r,t);break;default:throw new Error(`Unknown definition type: ${k(r)}`)}return this}#w(e,t=this){let r=g(e._name),n=this.#c(t,r),i=this.#h(t,r,n),o=e(i),c=this.#d(t).get(r)||[];for(let[h,a]of Object.entries(o)){if(h=S(h,r,"action"),Object.prototype.hasOwnProperty.call(n,h))throw new Error(`Action "${r}.${h}" already exists on this target`);let l=this.#O(r,h,a,n);if(c.length===0){n[h]=l;continue}let f=this.#$(c,l);n[h]=(...m)=>f(h,{namespace:r,action:h,args:m})}return this.#p(t,r,n)}#A(e,t=this){let r=g(e._name),n=this.#c(t,r),i=this.#h(t,r,n),o=e(i);for(let[c,h]of Object.entries(o)){S(c,r,"getter");let a=h.bind(n);Object.defineProperty(n,c,{get:()=>a(),enumerable:!0,configurable:!1})}return this.#p(t,r,n)}#x(e,t=this){let r=g(e._name),n=this.#c(t,r),i=this.#h(t,r,n),o=e(i),c=this.#d(t),h=c.get(r)||[],a=p(o).map(l=>{if(typeof l!="function")throw new Error("Middleware must be a function");return l});return c.set(r,h.concat(a)),this}#E(e,t=this){let r=g(e._name),n=this.#c(t,r),i=this.#h(t,r,n),o=()=>e(i),c=this.#n.get(t);return c||(c=new Map,this.#n.set(t,c)),c.set(r,o),this}#C(e,t=this){let r=g(e._name),n=this.#c(t,r),i=this.#h(t,r,n),o=()=>e(i),c=this.#s.get(t);return c||(c=new Map,this.#s.set(t,c)),c.set(r,o),this}#p(e,t,r){return Object.prototype.hasOwnProperty.call(e,t)?r=e[t]:Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!1}),this.#t.get(e)?.set(t,r),e}#O(e,t,r,n){let i=r.bind(n);return w(i)?async(...o)=>{try{return await i(...o)}catch(c){throw c.action=t,c.namespace=e,console.error(`Error in action "${e}.${t}":`,c),c}}:(...o)=>{try{return i(...o)}catch(c){throw c.action=t,c.namespace=e,console.error(`Error in action "${e}.${t}":`,c),c}}}#$(e,t){return M(p(e),t)?this.#k(e,t):this.#_(e,t)}#_(e,t){let r=p(e);return(n,i)=>{let o=-1,c=(h,a)=>{if(h<=o)throw new Error("next() called multiple times");o=h;let l=r[h];if(!l)return t(...a);let f={...i,args:a};return this.#g(l,n,f,(...m)=>{let $=C(a,m);return c(h+1,$)})};return c(0,i.args)}}#k(e,t){let r=p(e);return async(n,i)=>{let o=-1,c=async(h,a)=>{if(h<=o)throw new Error("next() called multiple times");o=h;let l=r[h];if(!l)return await t(...a);let f={...i,args:a};return await this.#g(l,n,f,(...m)=>{let $=C(a,m);return c(h+1,$)})};return c(0,i.args)}}#g(e,t,r,n){try{return e(t,r,n)}catch(i){throw i.middleware=e.name||"<anon>",i.action=t,i}}#d(e){let t=this.#r.get(e);return t||(t=new Map,this.#r.set(e,t)),t}#c(e,t){let r=this.#t.get(e);if(r||(r=new Map,this.#t.set(e,r)),r.has(t))return r.get(t);let n=Object.create(null);return r.set(t,n),n}#m(e,t,r,n=this.#i||{},i={}){let o=this.#e.get(e);if(o||(o=new Map,this.#e.set(e,o)),o.has(t))return o.get(t);let c={...this.#o,log:this.#l.child({ns:t},i.log?.sinks||[]),relay:this.#a.createChannel(r),cache:this.#f,config:n},h=new Proxy(c,{get(a,l,f){return l in a?Reflect.get(a,l,f):Reflect.get(e,l,f)},has(a,l){return l in a||l in e}});return o.set(t,h),h}#h(e,t,r,n=this.#i||{},i={}){return(...o)=>{let c=this.#m(e,t,r,n,i);if(!o||o.length===0)return c;if(o.length===1)return c[o[0]];let h=new Array(o.length);for(let a=0;a<o.length;a++)h[a]=c[o[a]];return h}}};export{P as Engine};
|
|
1
|
+
var d={PRIMITIVE:0,OBJECT:1,ARRAY:2,RESERVED:3},C=class n{constructor(e){this.flags=0,e!==void 0&&(typeof e=="function"?this.flags|=1:typeof e=="object"&&e!==null&&!Array.isArray(e)?(this._children=new Map(Object.entries(e).map(([t,r])=>[t,new n(r)])),this.flags|=16,this.originalType=d.OBJECT):Array.isArray(e)?(this._children=new Map(e.map((t,r)=>[r,new n(t)])),this.flags|=16,this.originalType=d.ARRAY):(this.value=e,this.originalType=d.PRIMITIVE))}get isFunction(){return(this.flags&1)!==0}set isFunction(e){this.flags=e?this.flags|1:this.flags&-2}get isSetOnce(){return(this.flags&2)!==0}set isSetOnce(e){this.flags=e?this.flags|2:this.flags&-3}get cached(){return(this.flags&4)!==0}set cached(e){this.flags=e?this.flags|4:this.flags&-5}get executed(){return(this.flags&8)!==0}set executed(e){this.flags=e?this.flags|8:this.flags&-9}get hasChildrenFlag(){return(this.flags&16)!==0}set hasChildrenFlag(e){this.flags=e?this.flags|16:this.flags&-17}get isFixed(){return(this.flags&32)!==0}set isFixed(e){this.flags=e?this.flags|32:this.flags&-33}get originalType(){return this.flags>>6&3}set originalType(e){this.flags=this.flags&-193|(e&3)<<6}get children(){return this._children||(this._children=new Map,this.hasChildrenFlag=!0),this._children}hasChildren(){return this.hasChildrenFlag&&this._children&&this._children.size>0}get cachedResult(){return this._cachedResult}set cachedResult(e){this._cachedResult=e}get cachedAt(){return this._cachedAt}set cachedAt(e){this._cachedAt=e}get(e){let t=e.shift();if(t===void 0){if(this.flags&1){if((this.flags&6)===6)return this.cachedResult;let r=this.value();return this.flags&2&&(this.flags|=4,this.cachedResult=r,this.cachedAt=Date.now()),this.flags|=8,r}return this.value!==void 0?this.value:this.hasChildren()?this._reconstructFromChildren():void 0}if(this._children?.has(t))return this._children.get(t).get(e)}set(e,t){let r=e.shift();if(r===void 0){if(this.isFixed)throw new Error("Cannot overwrite fixed value at path. Use clearFixed() first if you need to modify it.");return typeof t=="object"&&t!==null&&!Array.isArray(t)&&typeof t!="function"?this._syncObjectChildren(t):Array.isArray(t)?this._syncArrayChildren(t):(this.value=t,this.flags=typeof t=="function"?1:0,this.originalType=d.PRIMITIVE),this}let i=this.children;return i.has(r)||i.set(r,new n),i.get(r).set(e,t),this}setOnce(e,t){let r=e.shift();if(r===void 0){if(this.isFixed)throw new Error("Cannot overwrite fixed value at path. Use clearFixed() first if you need to modify it.");return typeof t=="object"&&t!==null&&!Array.isArray(t)&&typeof t!="function"?(this._syncObjectChildren(t),this.flags=this.flags|2):Array.isArray(t)?(this._syncArrayChildren(t),this.flags=this.flags|2):(this.value=t,this.flags=typeof t=="function"?3:2,this.originalType=d.PRIMITIVE),this}let i=this.children;return i.has(r)||i.set(r,new n),i.get(r).setOnce(e,t),this}has(e){let t=e.shift();return t===void 0?this.value!==void 0:this._children?.has(t)?this._children.get(t).has(e):!1}remove(e){let t=e.shift();return t===void 0?(this.value=void 0,this.flags=this.flags&-16,this):(this._children?.has(t)&&this._children.get(t).remove(e),this)}clearCache(e){let t=e.shift();return t===void 0?(this.flags=this.flags&-5,this.cachedResult=null,this.cachedAt=null,this):(this._children?.has(t)&&this._children.get(t).clearCache(e),this)}fixed(e,t){let r=e.shift();if(r===void 0){if(this.value!==void 0&&this.isFixed)throw new Error("Value at path is already fixed and cannot be changed. Use clearFixed() first if needed.");return this.value=t,this.flags=(typeof t=="function"?1:0)|32,this}let i=this.children;return i.has(r)||i.set(r,new n),i.get(r).fixed(e,t),this}clearFixed(e){let t=e.shift();return t===void 0?this.isFixed?(this.flags=this.flags&-33,this):(console.warn("Attempted to clear fixed flag on non-fixed value"),this):(this._children?.has(t)&&this._children.get(t).clearFixed(e),this)}isFixedValue(e){let t=e.shift();return t===void 0?this.isFixed:this._children?.has(t)?this._children.get(t).isFixedValue(e):!1}_syncObjectChildren(e){let t=new Set(Object.keys(e)),r=new Set(this.children.keys());for(let i of r)t.has(i)||this.children.delete(i);for(let[i,s]of Object.entries(e))if(this.children.has(i)||this.children.set(i,new n),typeof s=="object"&&s!==null&&!Array.isArray(s)&&typeof s!="function")this.children.get(i)._syncObjectChildren(s);else if(Array.isArray(s))this.children.get(i)._syncArrayChildren(s);else{let o=this.children.get(i);o.value=s,o.flags=typeof s=="function"?1:0}this.value=void 0,this.flags=this.flags&-2,this.originalType=d.OBJECT}_syncArrayChildren(e){let t=new Set(e.map((i,s)=>s)),r=new Set(this.children.keys());for(let i of r)typeof i=="number"&&!t.has(i)&&this.children.delete(i);for(let i=0;i<e.length;i++){let s=e[i];if(this.children.has(i)||this.children.set(i,new n),typeof s=="object"&&s!==null&&!Array.isArray(s)&&typeof s!="function")this.children.get(i)._syncObjectChildren(s);else if(Array.isArray(s))this.children.get(i)._syncArrayChildren(s);else{let o=this.children.get(i);o.value=s,o.flags=typeof s=="function"?1:0}}this.value=void 0,this.flags=this.flags&-2,this.originalType=d.ARRAY}_reconstructFromChildren(){if(!this._children||this._children.size===0)return;if(this.originalType===d.ARRAY){let t=[];for(let[r,i]of this._children)typeof r=="number"&&(t[r]=i.get([]));return t}else{let t={};for(let[r,i]of this._children)t[r]=i.get([]);return t}}},g=class n{static create(e){return new n(e)}constructor(e={}){return this.load(e)}load(e){return this.root=new C(e),this}get(e){let t=Array.isArray(e)?[...e]:[e];return this.root.get(t)}update(e,t){let r=Array.isArray(e)?[...e]:[e],i=this.root.get([...r]),s=t(i);return this.root.set([...r],s),this}set(e,t){let r=Array.isArray(e)?[...e]:[e];return this.root.set(r,t),this}setOnce(e,t){let r=Array.isArray(e)?[...e]:[e];return this.root.setOnce(r,t),this}fixed(e,t){let r=Array.isArray(e)?[...e]:[e];return this.root.fixed(r,t),this}has(e){let t=Array.isArray(e)?[...e]:[e];return this.root.has(t)}remove(e){let t=Array.isArray(e)?[...e]:[e];return this.root.remove(t),this}clearCache(e){let t=Array.isArray(e)?[...e]:[e];return this.root.clearCache(t),this}clearFixed(e){let t=Array.isArray(e)?[...e]:[e];return this.root.clearFixed(t),this}isFixed(e){let t=Array.isArray(e)?[...e]:[e];return this.root.isFixedValue(t)}export(){return this._exportNode(this.root)}static import(e){let t=new n;return t.root=t._importNode(e),t}_exportNode(e){let t={flags:e.flags};if(e.isFunction)t.type="function",t.skipped=!0;else if(e.hasChildren()){t.type="map",t.value=[];for(let[r,i]of e._children)t.value.push([r,this._exportNode(i)]);e.value!==void 0&&(t.nodeValue=e.value)}else e.value!==void 0?(t.type="primitive",t.value=e.value):t.type="empty";return t}_importNode(e){let t=new C;switch(t.flags=e.flags||0,e.type){case"function":t.value=void 0,t.flags=t.flags&-16;break;case"primitive":t.value=e.value;break;case"map":if(e.value&&e.value.length>0){t._children=new Map;for(let[r,i]of e.value){let s=typeof r=="string"&&/^\d+$/.test(r)?parseInt(r,10):r;t._children.set(s,this._importNode(i))}t.hasChildrenFlag=!0}e.nodeValue!==void 0&&(t.value=e.nodeValue);break;case"empty":default:break}return t}};function ie(n){return g.create(n)}var m=Object.freeze(Object.create(null));function se(n){if(globalThis.queueMicrotask&&typeof globalThis.queueMicrotask=="function"){globalThis.queueMicrotask(n);return}setTimeout(n,0)}var N=class{#e;#t;constructor(e,t){this.#e=e,this.#t=t}on(e,t){return this.#t.subscribe(e,m,this.#e,t)}once(e,t){return this.#t.once(e,m,this.#e,t)}broadcast(e,...t){this.#t.publish(e,this.#e,m,t)}from(e){return{subscribe:(t,r)=>this.#t.subscribe(t,e,this.#e,r),once:(t,r)=>this.#t.once(t,e,this.#e,r)}}to(e){return{publish:(t,...r)=>this.#t.publish(t,this.#e,e,r),publishAsync:(t,...r)=>this.#t.publishAsync(t,this.#e,e,r)}}},b=class n{#e=new WeakMap;#t=new Map;#r=null;static create(e={}){return new n(e)}constructor({onError:e=null}={}){this.#r=e,this.createChannel(m)}channel(e){return this.createChannel(e)}createChannel(e){if(this.#e.has(e))return this.#e.get(e);let t=new N(e,this);return this.#e.set(e,t),t}#n(e){let t=this.#t.get(e);return t||(t=new Set,this.#t.set(e,t)),t}static#i(e,t){return e===m||t===m||e===t}static#s(e,t,r,i){return n.#i(e,r)&&n.#i(t,i)}subscribe(e,t,r,i){let s={from:t,to:r,handler:i};return this.#n(e).add(s),()=>{let o=this.#t.get(e);o&&o.delete(s)}}once(e,t,r,i){let s=null,o=c=>{try{i(c)}finally{s&&s()}};return s=this.subscribe(e,t,r,o),s}offAllFor(e){for(let t of this.#t.values())for(let r of Array.from(t))(r.from===e||r.to===e)&&t.delete(r)}listenerCount(e){let t=this.#t.get(e);return t?t.size:0}#o(e,t,r,i){let s=this.#t.get(e);if(!(!s||s.size===0)){for(let o of s)if(o.to!==t&&n.#s(t,r,o.from,o.to))try{o.handler(...i)}catch(c){this.#r&&this.#r(c,{event:e,from:t,to:r,listener:o})}}}publish(e,t,r,i){this.#o(e,t,r,i)}publishAsync(e,t,r,i){se(()=>this.#o(e,t,r,i))}broadcast(e,t,r){this.publish(e,t,m,r)}};var w={trace:10,debug:20,info:30,warn:40,error:50,silent:90},A=class n{static create(e={}){return new n(e)}#e;#t;#r;constructor({level:e="info",sinks:t=[],base:r={}}={}){this.#e=w[e]??w.info,this.#t=t,this.#r=r}setLevel(e){this.#e=w[e]??this.#e}child(e={},t=[]){return new n({level:this.level,sinks:[...this.#t,...t],base:{...this.#r,...e}})}get level(){return Object.entries(w).find(([e,t])=>t===this.#e)?.[0]??"info"}log(e,t,r={}){if((w[e]??w.info)<this.#e)return;let s={t:Date.now(),level:e,msg:t,...this.#r,...r};for(let o of this.#t)o(s)}trace(e,t){this.log("trace",e,t)}debug(e,t){this.log("debug",e,t)}info(e,t){this.log("info",e,t)}warn(e,t){this.log("warn",e,t)}error(e,t){this.log("error",e,t)}progress(e,t,r="",i={}){let s={t:Date.now(),type:"progress",level:"info",msg:r,current:e,total:t,message:r,percentage:Math.round(e/t*100),...this.#r,...i};for(let o of this.#t)o(s)}metric(e,t,r="ms",i={}){let s={t:Date.now(),type:"metric",level:"info",msg:`${e}: ${t}${r}`,name:e,value:t,unit:r,...this.#r,...i};for(let o of this.#t)o(s)}},j=n=>{let{t:e,level:t,msg:r,ns:i,...s}=n,o=new Date(e).toISOString(),c=t==="error"?console.error:t==="warn"?console.warn:console.log,l=`${i?`[${i}] `:""}${r}`;Object.keys(s).length>0?c(`[${o}] ${t.toUpperCase()} ${l}`,s):c(`[${o}] ${t.toUpperCase()} ${l}`)},R=(n=1e3)=>{let e=[];return{sink:t=>{e.push(t),e.length>n&&e.shift()},read:()=>e.slice(),clear:()=>{e.length=0}}},oe=(n,e={})=>{let{append:t=!0,maxSize:r=10*1024*1024}=e;return i=>{let s=JSON.stringify(i)+`
|
|
2
|
+
`;console.log(`[FILE:${n}] ${s.trim()}`)}},ce=(n={})=>{let e=null,{width:t=40,showPercentage:r=!0}=n,i=s=>{if(s.type==="progress"){let{current:o,total:c,message:a=""}=s,l=Math.round(o/c*100),f=Math.round(o/c*t),h="\u2588".repeat(f)+"\u2591".repeat(t-f),u=r?` ${l}%`:"";process.stdout.write(`\r${a} [${h}]${u}`),o>=c&&process.stdout.write(`
|
|
3
|
+
`)}};return s=>{s.type==="progress"?(e=s,i(s)):e&&(process.stdout.write(`
|
|
4
|
+
`),e=null)}},ae=(n={})=>{let e=new Map,{collectTimings:t=!0,collectCounts:r=!0}=n;return i=>{if(i.type==="metric"){let{name:s,value:o,unit:c="ms"}=i;e.has(s)||e.set(s,{count:0,total:0,min:1/0,max:-1/0});let a=e.get(s);a.count++,a.total+=o,a.min=Math.min(a.min,o),a.max=Math.max(a.max,o)}}},le=(n={})=>{let{colors:e=!0,icons:t=!0}=n,r={trace:"\x1B[90m",debug:"\x1B[36m",info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",reset:"\x1B[0m"},i={trace:"\u{1F50D}",debug:"\u{1F41B}",info:"\u2139\uFE0F",warn:"\u26A0\uFE0F",error:"\u274C"};return s=>{let{t:o,level:c,msg:a,ns:l,...f}=s,h=new Date(o).toISOString(),u=e&&r[c]||"",O=e?r.reset:"",re=t&&i[c]||"",ne=l?`[${l}] `:"",Z=`${u}${re} [${h}] ${ne}${c.toUpperCase()} ${a}${O}`,J=c==="error"?console.error:c==="warn"?console.warn:console.log;Object.keys(f).length?J(Z,f):J(Z)}};var H={String,Number,Boolean,Array,Object,Function,Date,RegExp,Promise,Map,Set,WeakMap,WeakSet,Symbol,BigInt,Error,TypeError,RangeError,ReferenceError,SyntaxError,EvalError,URIError};function F(n,e,t="value"){if(Array.isArray(e)){for(let i of e)if(K(n,i))return!0;let r=e.map($).join(" | ");throw new TypeError(`${t} must be one of: ${r}. Got ${$(n)}`)}if(!K(n,e))throw new TypeError(`${t} must be ${$(e)}. Got ${$(n)}`);return!0}function K(n,e){return e===String?typeof n=="string":e===Number?typeof n=="number"&&!isNaN(n):e===Boolean?typeof n=="boolean":e===Symbol?typeof n=="symbol":e===BigInt?typeof n=="bigint":e===Function?typeof n=="function":e===Array?Array.isArray(n):e===Object?n!==null&&typeof n=="object"&&!Array.isArray(n):n instanceof e}function $(n){return n===String?"String":n===Number?"Number":n===Boolean?"Boolean":n===Array?"Array":n===Object?"Object":n===Function?"Function":n===Date?"Date":n===RegExp?"RegExp":n===Promise?"Promise":n===Map?"Map":n===Set?"Set":n===WeakMap?"WeakMap":n===WeakSet?"WeakSet":n===Symbol?"Symbol":n===BigInt?"BigInt":n===Error?"Error":typeof n=="string"?"string":typeof n=="number"?"number":typeof n=="boolean"?"boolean":typeof n=="symbol"?"symbol":typeof n=="bigint"?"bigint":typeof n=="function"?"function":Array.isArray(n)?"Array":n===null?"null":n===void 0?"undefined":typeof n=="object"?n.constructor?.name||"Object":"unknown"}function T(n,e="value"){return t=>F(t,n,e)}function X(n,e,t="object"){if(!n||typeof n!="object")throw new TypeError(`${t} must be an object`);for(let[r,i]of Object.entries(e))r in n&&F(n[r],i,`${t}.${r}`)}function fe(n,e="object"){return t=>X(t,n,e)}var D=new Map,L=new WeakMap,E=n=>{if(L.has(n))return L.get(n)},p=(n,e=[])=>{let t=e.length>0?T(e,"return value"):null;if(D.has(n))return console.warn(`Definition type "${n}" already exists`),D.get(n);let r=(i,s,...o)=>{T(String,"name")(i),T(Function,"factory")(s);let c=(...a)=>{try{let l=[...a,...o],f=s(...l);if(t&&f===void 0)throw new Error(`Factory ${n} must return a value for ${i}`);return t&&t(f),f}catch(l){throw console.error(`Error creating definition "${i}"`,l),l}};return Object.defineProperty(c,"_name",{value:i,enumerable:!1,configurable:!1}),L.set(c,n),c};return D.set(n,r),r};var I=n=>n&&n.constructor&&n.constructor.name==="AsyncFunction",P=(n,e)=>I(e)||n.some(I);var M=(n,e)=>e.length===0?n:e.length===1&&Array.isArray(e[0])?e[0]:e;var x=n=>n?Array.isArray(n)?n:[n]:[];var he=new Set(["__proto__","prototype","constructor"]),ue=new Set(["use","install","uninstall","relay","state","debug"]),k=64,Q=/^[a-zA-Z_$][a-zA-Z_$0-9]*$/;function ee(n,e="key"){if(he.has(n))throw new Error(`Illegal key "${n}" in ${e}`)}function y(n){if(ee(n,"namespace"),typeof n!="string")throw new Error(`Namespace must be a string, got ${typeof n}`);if(!Q.test(n))throw new Error(`Invalid namespace "${n}". Must be a valid JS identifier`);if(n.length>k)throw new Error(`Namespace "${n}" too long (max ${k} chars)`);if(ue.has(n))throw new Error(`Namespace "${n}" is reserved`);return n}function U(n,e,t="member"){if(ee(n,`${t}:${e}`),typeof n!="string")throw new Error(`${t} name in ${e} must be a string`);if(!Q.test(n))throw new Error(`Invalid ${t} name "${n}" in ${e}`);if(n.length>k)throw new Error(`${t} name "${n}" in ${e} too long (max ${k})`);return n}function z(n,e){if(!e||typeof e!="object")return e||n;if(!n||typeof n!="object")return e;let t={...n};for(let r in e)e.hasOwnProperty(r)&&(e[r]&&typeof e[r]=="object"&&!Array.isArray(e[r])&&n[r]&&typeof n[r]=="object"&&!Array.isArray(n[r])?t[r]=z(n[r],e[r]):t[r]=e[r]);return t}var te=()=>{let n=["DEVELOPMENT","TEST","DEV"];return typeof process<"u"&&process?.env?.NODE_ENV?n.includes(process.env.NODE_ENV.toUpperCase()):typeof globalThis<"u"&&globalThis.__ENV__?.NODE_ENV?n.includes(globalThis.__ENV__.NODE_ENV.toUpperCase()):!1};var V=class n{static options={};static create(e={}){return new n(e,n.options)}#e=new WeakMap;#t=new WeakMap;#r=new WeakMap;#n=new WeakMap;#i=new WeakMap;#s=void 0;#o={};#l=void 0;#f=void 0;#h=void 0;static configure(e){return e={...n.options,...e},{create:(t={})=>new n(t,e)}}constructor(e={},t=n.options){this.#s={...n.options,...t},this.#o={...e};for(let[r,i]of Object.entries(this.#o))Object.defineProperty(this,r,{value:i,enumerable:!0,configurable:!1,writable:!1});this.#h=g.create(),this.#l=b.create(),this.#f=A.create({level:te()?"debug":"info",sinks:[j,R(2e3).sink]})}get cache(){return this.#h}get relay(){return this.#l}get log(){return this.#f}use(...e){return this.#p(e,this)}install(...e){return this.#u(this,e)}#u(e,t){try{for(let i of t){if(!i.manifest?.namespace||!i.install)throw new Error(`${i.manifest?.name??"<unknown service>"} must have a namespace and install method`);if(Object.prototype.hasOwnProperty.call(e,i.manifest.namespace))throw new Error(`${i.manifest.namespace} already exists`);let s=z(this.#s||{},i.config||i.manifest.defaults||{}),o=this.#c(e,i.manifest.namespace),c=this.#m(e,i.manifest.namespace,o,s,i.manifest);if(i.manifest.dependencies?.length){let l=i.manifest.dependencies.filter(h=>h.unique),f=i.manifest.dependencies.filter(h=>!h.unique&&!Object.prototype.hasOwnProperty.call(e,h.manifest.namespace));l.length>0&&this.#u(c,l),f.length>0&&this.#u(e,f)}let a=this.#a(e,i.manifest.namespace,o,s,i.manifest);this.#p(i.install(a,s),e)}let r=this.#n.get(e);if(r?.size){for(let[i,s]of r)try{s()}finally{r.delete(i)}this.#n.delete(e)}return e}catch(r){throw r}}uninstall(...e){return this.#b(this,e)}#b(e,t){let r=this.#i.get(e),i=this.#e.get(e),s=this.#t.get(e),o=this.#d(e);for(let c of t)if(r?.get(c)?.(),r?.delete(c),o?.delete(c),this.#n.get(e)?.delete(c),Object.prototype.hasOwnProperty.call(e,c)&&delete e[c],i?.delete(c),s)for(let a of s.values())Object.prototype.hasOwnProperty.call(a,c)&&delete a[c];return r&&r.size===0&&this.#i.delete(e),this}#p(e,t=this){for(let r of e)if(r)switch(E(r)){case"MIDDLEWARE":this.#E(r,t);break;case"GETTERS":this.#A(r,t);break;case"ACTIONS":this.#w(r,t);break;case"INITIALIZE":this.#x(r,t);break;case"UNINSTALL":this.#O(r,t);break;default:throw new Error(`Unknown definition type: ${E(r)}`)}return this}#w(e,t=this){let r=y(e._name),i=this.#c(t,r),s=this.#a(t,r,i),o=e(s),c=this.#d(t).get(r)||[];for(let[a,l]of Object.entries(o)){if(a=U(a,r,"action"),Object.prototype.hasOwnProperty.call(i,a))throw new Error(`Action "${r}.${a}" already exists on this target`);let f=this.#T(r,a,l,i);if(c.length===0){i[a]=f;continue}let h=this.#I(c,f);i[a]=(...u)=>h(a,{namespace:r,action:a,args:u})}return this.#y(t,r,i)}#A(e,t=this){let r=y(e._name),i=this.#c(t,r),s=this.#a(t,r,i),o=e(s);for(let[c,a]of Object.entries(o)){U(c,r,"getter");let l=a.bind(i);Object.defineProperty(i,c,{get:()=>l(),enumerable:!0,configurable:!1})}return this.#y(t,r,i)}#E(e,t=this){let r=y(e._name),i=this.#c(t,r),s=this.#a(t,r,i),o=e(s),c=this.#d(t),a=c.get(r)||[],l=x(o).map(f=>{if(typeof f!="function")throw new Error("Middleware must be a function");return f});return c.set(r,a.concat(l)),this}#x(e,t=this){let r=y(e._name),i=this.#c(t,r),s=this.#a(t,r,i),o=()=>e(s),c=this.#n.get(t);return c||(c=new Map,this.#n.set(t,c)),c.set(r,o),this}#O(e,t=this){let r=y(e._name),i=this.#c(t,r),s=this.#a(t,r,i),o=()=>e(s),c=this.#i.get(t);return c||(c=new Map,this.#i.set(t,c)),c.set(r,o),this}#y(e,t,r){return Object.prototype.hasOwnProperty.call(e,t)?r=e[t]:Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!1}),this.#e.get(e)?.set(t,r),e}#T(e,t,r,i){let s=r.bind(i);return I(s)?async(...o)=>{try{return await s(...o)}catch(c){throw c.action=t,c.namespace=e,console.error(`Error in action "${e}.${t}":`,c),c}}:(...o)=>{try{return s(...o)}catch(c){throw c.action=t,c.namespace=e,console.error(`Error in action "${e}.${t}":`,c),c}}}#I(e,t){return P(x(e),t)?this.#C(e,t):this.#S(e,t)}#S(e,t){let r=x(e);return(i,s)=>{let o=-1,c=(a,l)=>{if(a<=o)throw new Error("next() called multiple times");o=a;let f=r[a];if(!f)return t(...l);let h={...s,args:l};return this.#g(f,i,h,(...u)=>{let O=M(l,u);return c(a+1,O)})};return c(0,s.args)}}#C(e,t){let r=x(e);return async(i,s)=>{let o=-1,c=async(a,l)=>{if(a<=o)throw new Error("next() called multiple times");o=a;let f=r[a];if(!f)return await t(...l);let h={...s,args:l};return await this.#g(f,i,h,(...u)=>{let O=M(l,u);return c(a+1,O)})};return c(0,s.args)}}#g(e,t,r,i){try{return e(t,r,i)}catch(s){throw s.middleware=e.name||"<anon>",s.action=t,s}}#d(e){let t=this.#r.get(e);return t||(t=new Map,this.#r.set(e,t)),t}#c(e,t){let r=this.#e.get(e);if(r||(r=new Map,this.#e.set(e,r)),r.has(t))return r.get(t);let i=Object.create(null);return r.set(t,i),i}#m(e,t,r,i=this.#s||{},s={}){let o=this.#t.get(e);if(o||(o=new Map,this.#t.set(e,o)),o.has(t))return o.get(t);let c={...this.#o,log:this.#f.child({ns:t},s.log?.sinks||[]),relay:this.#l.createChannel(r),cache:this.#h,config:i},a=new Proxy(c,{get(l,f,h){return f in l?Reflect.get(l,f,h):Reflect.get(e,f,h)},has(l,f){return f in l||f in e}});return o.set(t,a),a}#a(e,t,r,i=this.#s||{},s={}){return(...o)=>{let c=this.#m(e,t,r,i,s);if(!o||o.length===0)return c;if(o.length===1)return c[o[0]];let a=new Array(o.length);for(let l=0;l<o.length;l++)a[l]=c[o[l]];return a}}};var B=p("MIDDLEWARE",[Function,Array]),v=p("ACTIONS",[Object]),G=p("UNINSTALL"),W=p("INITIALIZE"),q=p("GETTERS",[Object]);var _=class n{static create(e){return new n(e)}#e;#t;#r={MIDDLEWARE:null,GETTERS:null,ACTIONS:null,INITIALIZE:null,UNINSTALL:null};constructor(e){this.#e=e}#n(e,t,r){if(this.#r[e])throw new Error(`${e} already defined for ${this.#e}`);this.#r[e]=r(this.#e,t)}defineMiddleware=e=>this.#n("MIDDLEWARE",e,B);defineGetters=e=>this.#n("GETTERS",e,q);defineActions=e=>this.#n("ACTIONS",e,v);defineInitialize=e=>this.#n("INITIALIZE",e,W);defineUninstall=e=>this.#n("UNINSTALL",e,G);_toArray(){return[this.#r.MIDDLEWARE,this.#r.GETTERS,this.#r.ACTIONS,this.#r.INITIALIZE,this.#r.UNINSTALL].filter(Boolean)}};var Y=class n{static#e=new Set;static manifest={name:"base",dependencies:[],version:"1.0.0",description:"Base extension template"};static config=null;static unique=!1;static configure(e={}){return{install:(t,r)=>this.install(t,r),manifest:this.manifest,config:{...this.config||this.manifest.defaults||{},...e},unique:!0,configured:!0}}static install(e,t){try{let{namespace:r}=this.manifest;y(r);let i=new this;n.#e.add(i),Object.defineProperty(i,"config",{value:Object.freeze({...t}),writable:!1,configurable:!1,enumerable:!1}),Object.defineProperty(i,"context",{get:()=>e(),configurable:!1,enumerable:!1}),Object.defineProperty(i,"useContext",{value:(...o)=>e(...o),writable:!1,configurable:!1,enumerable:!1});let s=_.create(r);if(i.setup){let o={defineActions:a=>s.defineActions(()=>a(e,t)),defineMiddleware:a=>s.defineMiddleware(()=>a(e,t)),defineGetters:a=>s.defineGetters(()=>a(e,t)),defineInitialize:a=>s.defineInitialize(()=>a(e,t)),defineUninstall:a=>s.defineUninstall(()=>a(e,t))},c=i.setup(o);return c?.then?c.then(()=>s._toArray()):s._toArray()}return i.middleware&&s.defineMiddleware(()=>i.middleware(e,t)),i.getters&&s.defineGetters(()=>i.getters(e,t)),i.actions&&s.defineActions(()=>i.actions(e,t)),i.initialize&&s.defineInitialize(()=>i.initialize(e,t)),i.uninstall&&s.defineUninstall(()=>i.uninstall(e,t)),s._toArray()}catch(r){throw r}}};var S=Symbol("jucie.engine");function de(n){globalThis[S]||(globalThis[S]=n)}function pe(){return globalThis[S]!==void 0}function ye(n){globalThis[S]=n}function ge(){return globalThis[S]||null}function me(){return ge()}export{g as Cache,V as Engine,A as Logger,b as Relay,Y as ServiceProvider,p as createDefinition,v as defineActions,q as defineGetters,W as defineInitialize,B as defineMiddleware,G as defineUninstall,E as definitionType,ye as forceEngine,pe as hasEngine,de as provideEngine,me as useEngine};
|
|
2
5
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/lib/cache/src/Cache.js", "../src/lib/relay/src/Relay.js", "../src/lib/logger/src/Logger.js", "../src/definitions/createDefinition.js", "../src/utils/async.js", "../src/utils/normalizeArgs.js", "../src/utils/toArray.js", "../src/utils/asserts.js", "../src/utils/deepMerge.js", "../src/utils/isDev.js", "../src/Engine.js"],
|
|
4
|
-
"sourcesContent": ["// Original type constants for bits 6-7\nconst ORIGINAL_TYPE = {\n PRIMITIVE: 0, // 00\n OBJECT: 1, // 01\n ARRAY: 2, // 10\n RESERVED: 3 // 11\n};\n\nclass TrieNode {\n // \uD83D\uDE80 BIT-PACKED FLAGS - Ultra-efficient metadata storage\n // Bit layout:\n // Bit 0: isFunction\n // Bit 1: setOnce \n // Bit 2: cached\n // Bit 3: executed\n // Bit 4: hasChildren\n // Bit 5: isFixed (immutable - cannot be overwritten)\n // Bits 6-7: originalType (00=primitive, 01=object, 10=array, 11=reserved)\n\n constructor(data) {\n this.flags = 0; // Single integer for all boolean metadata!\n\n if (data === undefined) {\n return;\n }\n \n if (typeof data === 'function') {\n this.flags |= 1; // Set isFunction bit\n } else if (typeof data === 'object' && data !== null && !Array.isArray(data)) {\n this._children = new Map(Object.entries(data).map(([key, value]) => [key, new TrieNode(value)]));\n this.flags |= 16; // Set hasChildren bit\n this.originalType = ORIGINAL_TYPE.OBJECT; // Mark as originally an object\n } else if (Array.isArray(data)) {\n this._children = new Map(data.map((value, index) => [index, new TrieNode(value)]));\n this.flags |= 16; // Set hasChildren bit\n this.originalType = ORIGINAL_TYPE.ARRAY; // Mark as originally an array\n } else {\n this.value = data;\n this.originalType = ORIGINAL_TYPE.PRIMITIVE; // Mark as primitive\n }\n // For primitive values (including undefined), no additional setup needed\n // Note: undefined data creates an empty node ready for value assignment\n }\n\n // \u26A1 Lightning-fast bit operations for metadata\n get isFunction() { return (this.flags & 1) !== 0; }\n set isFunction(val) { this.flags = val ? (this.flags | 1) : (this.flags & ~1); }\n \n get isSetOnce() { return (this.flags & 2) !== 0; }\n set isSetOnce(val) { this.flags = val ? (this.flags | 2) : (this.flags & ~2); }\n \n get cached() { return (this.flags & 4) !== 0; }\n set cached(val) { this.flags = val ? (this.flags | 4) : (this.flags & ~4); }\n \n get executed() { return (this.flags & 8) !== 0; }\n set executed(val) { this.flags = val ? (this.flags | 8) : (this.flags & ~8); }\n \n get hasChildrenFlag() { return (this.flags & 16) !== 0; }\n set hasChildrenFlag(val) { this.flags = val ? (this.flags | 16) : (this.flags & ~16); }\n\n get isFixed() { return (this.flags & 32) !== 0; }\n set isFixed(val) { this.flags = val ? (this.flags | 32) : (this.flags & ~32); }\n\n // Original type stored in bits 6-7 (0=primitive, 1=object, 2=array, 3=reserved)\n get originalType() { return (this.flags >> 6) & 3; }\n set originalType(val) { this.flags = (this.flags & ~192) | ((val & 3) << 6); }\n\n // \uD83D\uDD04 Lazy children creation - only when needed\n get children() {\n if (!this._children) {\n this._children = new Map();\n this.hasChildrenFlag = true;\n }\n return this._children;\n }\n \n hasChildren() {\n return this.hasChildrenFlag && this._children && this._children.size > 0;\n }\n\n // \uD83D\uDCBE Expensive properties - only created when used\n get cachedResult() { return this._cachedResult; }\n set cachedResult(val) { this._cachedResult = val; }\n \n get cachedAt() { return this._cachedAt; }\n set cachedAt(val) { this._cachedAt = val; }\n\n get (path) {\n const key = path.shift();\n \n if (key === undefined) {\n if (this.flags & 1) { // isFunction bit check\n if ((this.flags & 6) === 6) { // setOnce AND cached (bits 1 & 2)\n return this.cachedResult;\n }\n const result = this.value();\n if (this.flags & 2) { // setOnce bit check\n this.flags |= 4; // Set cached bit (bit 2)\n this.cachedResult = result;\n this.cachedAt = Date.now();\n }\n this.flags |= 8; // Set executed bit (bit 3)\n return result;\n }\n // If there's a direct value, return it\n if (this.value !== undefined) {\n return this.value;\n }\n \n // If there are children, reconstruct the object/array\n if (this.hasChildren()) {\n return this._reconstructFromChildren();\n }\n \n // No value and no children\n return undefined;\n }\n\n if (this._children?.has(key)) {\n return this._children.get(key).get(path);\n }\n\n return undefined;\n }\n\n set (path, value) {\n const key = path.shift();\n \n if (key === undefined) {\n // \uD83D\uDD12 Check if this value is fixed (immutable)\n if (this.isFixed) {\n throw new Error(`Cannot overwrite fixed value at path. Use clearFixed() first if you need to modify it.`);\n }\n \n // If setting an object, check for key changes and clean up\n if (typeof value === 'object' && value !== null && !Array.isArray(value) && typeof value !== 'function') {\n this._syncObjectChildren(value);\n } else if (Array.isArray(value)) {\n this._syncArrayChildren(value);\n } else {\n this.value = value;\n // \uD83D\uDE80 Direct bit manipulation - much faster than individual setters\n this.flags = typeof value === 'function' ? 1 : 0; // Reset flags, set isFunction if needed\n this.originalType = ORIGINAL_TYPE.PRIMITIVE; // Mark as primitive\n // Bits: isFunction(0), setOnce(1), cached(2), executed(3) = all reset except isFunction\n }\n return this;\n }\n \n // Create child if it doesn't exist\n const children = this.children; // Get the children map once\n if (!children.has(key)) {\n children.set(key, new TrieNode());\n }\n \n children.get(key).set(path, value);\n return this;\n }\n\n setOnce (path, value) {\n const key = path.shift();\n \n if (key === undefined) {\n // \uD83D\uDD12 Check if this value is fixed (immutable)\n if (this.isFixed) {\n throw new Error(`Cannot overwrite fixed value at path. Use clearFixed() first if you need to modify it.`);\n }\n \n // If setting an object, check for key changes and clean up\n if (typeof value === 'object' && value !== null && !Array.isArray(value) && typeof value !== 'function') {\n this._syncObjectChildren(value);\n // \uD83D\uDE80 Set setOnce flag for objects\n this.flags = this.flags | 2; // Set setOnce bit (bit 1)\n } else if (Array.isArray(value)) {\n this._syncArrayChildren(value);\n // \uD83D\uDE80 Set setOnce flag for arrays\n this.flags = this.flags | 2; // Set setOnce bit (bit 1)\n } else {\n this.value = value;\n // \uD83D\uDE80 Direct bit manipulation for setOnce - set bits 0 and 1, clear 2 and 3\n this.flags = typeof value === 'function' ? 3 : 2; // setOnce=true, isFunction=maybe\n this.originalType = ORIGINAL_TYPE.PRIMITIVE; // Mark as primitive\n // Bits: 3 = 0011 (isFunction=1, setOnce=1), 2 = 0010 (setOnce=1)\n }\n return this;\n }\n \n // Create child if it doesn't exist\n const children = this.children; // Get the children map once\n if (!children.has(key)) {\n children.set(key, new TrieNode());\n }\n \n children.get(key).setOnce(path, value);\n return this;\n }\n\n has (path) {\n const key = path.shift();\n \n if (key === undefined) {\n return this.value !== undefined;\n }\n\n if (this._children?.has(key)) {\n return this._children.get(key).has(path);\n }\n\n return false;\n }\n\n remove (path) {\n const key = path.shift();\n \n if (key === undefined) {\n this.value = undefined;\n // \uD83D\uDE80 Direct bit reset - clear all metadata flags at once\n this.flags = this.flags & ~15; // Clear bits 0-3 (keep bit 4+ for hasChildren etc)\n return this;\n }\n\n if (this._children?.has(key)) {\n this._children.get(key).remove(path);\n }\n\n return this;\n }\n\n clearCache (path) {\n const key = path.shift();\n \n if (key === undefined) {\n // \uD83D\uDE80 Direct bit manipulation - clear cached bit only\n this.flags = this.flags & ~4; // Clear bit 2 (cached)\n this.cachedResult = null;\n this.cachedAt = null;\n return this;\n }\n\n if (this._children?.has(key)) {\n this._children.get(key).clearCache(path);\n }\n\n return this;\n }\n\n // \uD83D\uDD12 Fixed (immutable) value operations\n fixed (path, value) {\n const key = path.shift();\n \n if (key === undefined) {\n // \uD83D\uDD12 Check if already set as fixed\n if (this.value !== undefined && this.isFixed) {\n throw new Error(`Value at path is already fixed and cannot be changed. Use clearFixed() first if needed.`);\n }\n \n this.value = value;\n // \uD83D\uDE80 Set isFixed flag (bit 5) + function flag if needed\n this.flags = (typeof value === 'function' ? 1 : 0) | 32; // isFunction + isFixed\n return this;\n }\n \n // Create child if it doesn't exist\n const children = this.children;\n if (!children.has(key)) {\n children.set(key, new TrieNode());\n }\n \n children.get(key).fixed(path, value);\n return this;\n }\n\n clearFixed (path) {\n const key = path.shift();\n \n if (key === undefined) {\n if (!this.isFixed) {\n console.warn('Attempted to clear fixed flag on non-fixed value');\n return this;\n }\n \n // \uD83D\uDE80 Clear isFixed bit (bit 5)\n this.flags = this.flags & ~32;\n return this;\n }\n\n if (this._children?.has(key)) {\n this._children.get(key).clearFixed(path);\n }\n\n return this;\n }\n\n isFixedValue (path) {\n const key = path.shift();\n \n if (key === undefined) {\n return this.isFixed;\n }\n\n if (this._children?.has(key)) {\n return this._children.get(key).isFixedValue(path);\n }\n\n return false;\n }\n\n // Sync children with object keys - delete old keys, set new ones\n _syncObjectChildren(obj) {\n const newKeys = new Set(Object.keys(obj));\n const existingKeys = new Set(this.children.keys());\n \n // Delete keys that are no longer in the new object\n for (const key of existingKeys) {\n if (!newKeys.has(key)) {\n this.children.delete(key);\n }\n }\n \n // Set/update values for new object keys\n for (const [key, value] of Object.entries(obj)) {\n if (!this.children.has(key)) {\n this.children.set(key, new TrieNode());\n }\n \n if (typeof value === 'object' && value !== null && !Array.isArray(value) && typeof value !== 'function') {\n this.children.get(key)._syncObjectChildren(value);\n } else if (Array.isArray(value)) {\n this.children.get(key)._syncArrayChildren(value);\n } else {\n const child = this.children.get(key);\n child.value = value;\n // \uD83D\uDE80 Direct bit manipulation for child sync\n child.flags = typeof value === 'function' ? 1 : 0; // Reset flags, set isFunction if needed\n }\n }\n \n // \uD83D\uDE80 Update this node's flags - clear isFunction bit, set object type\n this.value = undefined; // Objects don't have direct values\n this.flags = this.flags & ~1; // Clear isFunction bit (bit 0)\n this.originalType = ORIGINAL_TYPE.OBJECT; // Mark as originally an object\n }\n\n // Sync children with array elements - delete old indices, set new ones\n _syncArrayChildren(arr) {\n const newIndices = new Set(arr.map((_, index) => index));\n const existingIndices = new Set(this.children.keys());\n \n // Delete indices that are no longer in the new array\n for (const index of existingIndices) {\n if (typeof index === 'number' && !newIndices.has(index)) {\n this.children.delete(index);\n }\n }\n \n // Set/update values for new array elements\n for (let i = 0; i < arr.length; i++) {\n const value = arr[i];\n if (!this.children.has(i)) {\n this.children.set(i, new TrieNode());\n }\n \n if (typeof value === 'object' && value !== null && !Array.isArray(value) && typeof value !== 'function') {\n this.children.get(i)._syncObjectChildren(value);\n } else if (Array.isArray(value)) {\n this.children.get(i)._syncArrayChildren(value);\n } else {\n const child = this.children.get(i);\n child.value = value;\n // \uD83D\uDE80 Direct bit manipulation for child sync\n child.flags = typeof value === 'function' ? 1 : 0; // Reset flags, set isFunction if needed\n }\n }\n \n // \uD83D\uDE80 Update this node's flags - clear isFunction bit, set array type\n this.value = undefined; // Arrays don't have direct values\n this.flags = this.flags & ~1; // Clear isFunction bit (bit 0)\n this.originalType = ORIGINAL_TYPE.ARRAY; // Mark as originally an array\n }\n\n // \uD83D\uDD04 Reconstruct object/array from children\n _reconstructFromChildren() {\n if (!this._children || this._children.size === 0) {\n return undefined;\n }\n\n // \uD83D\uDE80 Use stored originalType for fast reconstruction (no key analysis needed!)\n const type = this.originalType;\n \n if (type === ORIGINAL_TYPE.ARRAY) { // Originally an array\n const result = [];\n for (const [key, child] of this._children) {\n if (typeof key === 'number') {\n result[key] = child.get([]); // Recursive call to get child value\n }\n }\n return result;\n } else { // Originally an object or fallback for incrementally built structures\n const result = {};\n for (const [key, child] of this._children) {\n result[key] = child.get([]); // Recursive call to get child value\n }\n return result;\n }\n }\n\n}\n\nexport class Cache {\n static create(data) {\n return new Cache(data);\n }\n\n constructor(data = {}) {\n return this.load(data);\n }\n\n load(data) {\n this.root = new TrieNode(data);\n return this;\n }\n\n get (path) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n return this.root.get(pathCopy);\n }\n\n update (path, updateFn) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n\n const value = this.root.get([...pathCopy]);\n const newValue = updateFn(value);\n this.root.set([...pathCopy], newValue);\n return this;\n }\n\n set (path, value) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n this.root.set(pathCopy, value);\n return this;\n }\n \n setOnce (path, value) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n this.root.setOnce(pathCopy, value);\n return this;\n }\n\n // \uD83D\uDD12 Fixed (immutable) values - cannot be overwritten\n fixed (path, value) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n this.root.fixed(pathCopy, value);\n return this;\n }\n\n has (path) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n return this.root.has(pathCopy);\n }\n\n remove (path) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n this.root.remove(pathCopy);\n return this;\n }\n \n clearCache (path) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n this.root.clearCache(pathCopy);\n return this;\n }\n\n // \uD83D\uDD12 Fixed value management\n clearFixed (path) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n this.root.clearFixed(pathCopy);\n return this;\n }\n\n isFixed (path) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n return this.root.isFixedValue(pathCopy);\n }\n\n // \uD83D\uDCE4 Export trie structure to JSON-serializable descriptive object\n export() {\n return this._exportNode(this.root);\n }\n\n // \uD83D\uDCE5 Import from JSON-serializable descriptive object to recreate Cache instance\n static import(descriptor) {\n const instance = new Cache();\n instance.root = instance._importNode(descriptor);\n return instance;\n }\n\n // \uD83D\uDD04 Recursive helper to export a TrieNode to descriptive object\n _exportNode(node) {\n const descriptor = {\n flags: node.flags\n };\n\n // Handle different node types\n if (node.isFunction) {\n // Skip functions - they cannot be reliably serialized/deserialized\n descriptor.type = 'function';\n descriptor.skipped = true;\n } else if (node.hasChildren()) {\n // Node has children - export as map\n descriptor.type = 'map';\n descriptor.value = [];\n for (const [key, child] of node._children) {\n descriptor.value.push([key, this._exportNode(child)]);\n }\n \n // Also include node's direct value if it exists\n if (node.value !== undefined) {\n descriptor.nodeValue = node.value;\n }\n } else if (node.value !== undefined) {\n // Primitive value\n descriptor.type = 'primitive';\n descriptor.value = node.value;\n } else {\n // Empty node\n descriptor.type = 'empty';\n }\n\n return descriptor;\n }\n\n // \uD83D\uDD04 Recursive helper to import a descriptive object to TrieNode\n _importNode(descriptor) {\n const node = new TrieNode();\n \n // Restore flags (but clear function-related flags since we skip functions)\n node.flags = descriptor.flags || 0;\n \n switch (descriptor.type) {\n case 'function':\n // Functions are skipped - create empty node and clear function flags\n node.value = undefined;\n node.flags = node.flags & ~15; // Clear bits 0-3 (isFunction, setOnce, cached, executed)\n break;\n \n case 'primitive':\n node.value = descriptor.value;\n break;\n \n case 'map':\n // Reconstruct children\n if (descriptor.value && descriptor.value.length > 0) {\n node._children = new Map();\n for (const [key, childDescriptor] of descriptor.value) {\n // Convert string keys back to numbers for array indices if needed\n const actualKey = typeof key === 'string' && /^\\d+$/.test(key) ? parseInt(key, 10) : key;\n node._children.set(actualKey, this._importNode(childDescriptor));\n }\n node.hasChildrenFlag = true;\n }\n \n // Set node's direct value if it exists\n if (descriptor.nodeValue !== undefined) {\n node.value = descriptor.nodeValue;\n }\n break;\n \n case 'empty':\n default:\n // Empty node - no additional setup needed\n break;\n }\n\n return node;\n }\n}\n\nexport function createCache(data) {\n return Cache.create(data);\n}", "// Simple, readable relay with wildcard matching and no indexing\n\nconst GLOBAL_NS_OBJ = Object.freeze(Object.create(null));\n\nfunction queueMicrotask(fn) {\n if (globalThis.queueMicrotask && typeof globalThis.queueMicrotask === 'function') {\n globalThis.queueMicrotask(fn);\n return;\n }\n setTimeout(fn, 0);\n}\n\nclass Channel {\n #nsObj; #relay;\n constructor(nsObj, relay) { this.#nsObj = nsObj; this.#relay = relay; }\n\n // Any source -> me\n on(event, handler) {\n return this.#relay.subscribe(event, GLOBAL_NS_OBJ, this.#nsObj, handler);\n }\n\n once(event, handler) {\n return this.#relay.once(event, GLOBAL_NS_OBJ, this.#nsObj, handler);\n }\n\n // Me -> everyone (sender never hears itself)\n broadcast(event, ...payload) {\n this.#relay.publish(event, this.#nsObj, GLOBAL_NS_OBJ, payload);\n }\n\n // Specific source -> me\n from(fromNs) {\n return {\n subscribe: (event, handler) => this.#relay.subscribe(event, fromNs, this.#nsObj, handler),\n once: (event, handler) => this.#relay.once(event, fromNs, this.#nsObj, handler),\n };\n }\n\n // Me -> specific target\n to(toNs) {\n return {\n publish: (event, ...payload) => this.#relay.publish(event, this.#nsObj, toNs, payload),\n publishAsync: (event, ...payload) => this.#relay.publishAsync(event, this.#nsObj, toNs, payload),\n };\n }\n}\n\nexport class Relay {\n #channels = new WeakMap(); // nsObj -> Channel\n #events = new Map(); // eventName -> Set<Listener>\n #onError = null;\n\n static create(config = {}) {\n return new Relay(config);\n }\n\n constructor({ onError = null } = {}) {\n this.#onError = onError;\n this.createChannel(GLOBAL_NS_OBJ);\n }\n\n // Public convenience\n channel(nsObj) { return this.createChannel(nsObj); }\n createChannel(nsObj) {\n if (this.#channels.has(nsObj)) return this.#channels.get(nsObj);\n const ch = new Channel(nsObj, this);\n this.#channels.set(nsObj, ch);\n return ch;\n }\n\n // Internal helpers\n #listeners(event) {\n let set = this.#events.get(event);\n if (!set) { set = new Set(); this.#events.set(event, set); }\n return set;\n }\n\n // Wildcard matcher:\n // - If published `from` is GLOBAL, it matches every listener.from\n // - If listener.from is GLOBAL, it matches every published from\n // Same for `to`. This makes broadcast (to = GLOBAL) hit specific targets too.\n static #matchSide(published, constraint) {\n return published === GLOBAL_NS_OBJ || constraint === GLOBAL_NS_OBJ || published === constraint;\n }\n\n static #matches(publishedFrom, publishedTo, listenerFrom, listenerTo) {\n return Relay.#matchSide(publishedFrom, listenerFrom)\n && Relay.#matchSide(publishedTo, listenerTo);\n }\n\n subscribe(event, from, to, handler) {\n const listener = { from, to, handler };\n this.#listeners(event).add(listener);\n return () => {\n const set = this.#events.get(event);\n if (set) set.delete(listener);\n };\n }\n\n once(event, from, to, handler) {\n let off = null;\n const wrapped = (payload) => {\n try { handler(payload); } finally { off && off(); }\n };\n off = this.subscribe(event, from, to, wrapped);\n return off;\n }\n\n offAllFor(nsObj) {\n for (const set of this.#events.values()) {\n for (const l of Array.from(set)) {\n if (l.from === nsObj || l.to === nsObj) set.delete(l);\n }\n }\n }\n\n listenerCount(event) {\n const set = this.#events.get(event);\n return set ? set.size : 0;\n }\n\n #deliver(event, from, to, payload) {\n const set = this.#events.get(event);\n if (!set || set.size === 0) return;\n\n for (const l of set) {\n // Always skip self-delivery\n if (l.to === from) continue;\n\n if (Relay.#matches(from, to, l.from, l.to)) {\n try { l.handler(...payload); }\n catch (err) { if (this.#onError) this.#onError(err, { event, from, to, listener: l }); }\n }\n }\n }\n\n publish(event, from, to, payload) {\n this.#deliver(event, from, to, payload);\n }\n\n publishAsync(event, from, to, payload) {\n queueMicrotask(() => this.#deliver(event, from, to, payload));\n }\n\n broadcast(event, from, payload) {\n this.publish(event, from, GLOBAL_NS_OBJ, payload);\n }\n}\n", "// logger/Logger.js\nexport const Levels = { trace:10, debug:20, info:30, warn:40, error:50, silent:90 };\n\nexport class Logger {\n static create(config = {}) {\n return new Logger(config);\n }\n\n #level; #sinks; #base;\n\n constructor({ level = 'info', sinks = [], base = {} } = {}) {\n this.#level = Levels[level] ?? Levels.info;\n this.#sinks = sinks;\n this.#base = base;\n }\n\n setLevel(lvl) { this.#level = Levels[lvl] ?? this.#level; }\n\n child(extra = {}, additionalSinks = []) {\n return new Logger({ \n level: this.level, \n sinks: [...this.#sinks, ...additionalSinks], \n base: { ...this.#base, ...extra } \n });\n }\n\n get level() { return Object.entries(Levels).find(([k,v]) => v === this.#level)?.[0] ?? 'info'; }\n\n log(level, msg, data = {}) {\n const n = Levels[level] ?? Levels.info;\n if (n < this.#level) return;\n const rec = { t: Date.now(), level, msg, ...this.#base, ...data };\n for (const sink of this.#sinks) sink(rec);\n }\n\n trace(msg, data) { this.log('trace', msg, data); }\n debug(msg, data) { this.log('debug', msg, data); }\n info (msg, data) { this.log('info', msg, data); }\n warn (msg, data) { this.log('warn', msg, data); }\n error(msg, data) { this.log('error', msg, data); }\n \n // Specialized logging methods\n progress(current, total, message = '', data = {}) {\n const rec = { \n t: Date.now(), \n type: 'progress', \n level: 'info',\n msg: message, // Set msg field for consoleSink compatibility\n current, \n total, \n message,\n percentage: Math.round((current / total) * 100),\n ...this.#base, \n ...data \n };\n for (const sink of this.#sinks) sink(rec);\n }\n \n metric(name, value, unit = 'ms', data = {}) {\n const rec = { \n t: Date.now(), \n type: 'metric', \n level: 'info',\n msg: `${name}: ${value}${unit}`, // Set msg field for consoleSink compatibility\n name, \n value, \n unit,\n ...this.#base, \n ...data \n };\n for (const sink of this.#sinks) sink(rec);\n }\n}\n\n// logger/sinks.js\nexport const consoleSink = (rec) => {\n const { t, level, msg, ns, ...rest } = rec;\n const ts = new Date(t).toISOString();\n const fn = level === 'error' ? console.error : level === 'warn' ? console.warn : console.log;\n \n // Include namespace in the message if present, but don't show it as separate data\n const namespace = ns ? `[${ns}] ` : '';\n const message = `${namespace}${msg}`;\n \n // Only show additional data if there are meaningful properties (not just namespace)\n const hasAdditionalData = Object.keys(rest).length > 0;\n hasAdditionalData ? fn(`[${ts}] ${level.toUpperCase()} ${message}`, rest)\n : fn(`[${ts}] ${level.toUpperCase()} ${message}`);\n};\n\nexport const ringBufferSink = (size = 1000) => {\n const buf = [];\n return {\n sink: (rec) => { buf.push(rec); if (buf.length > size) buf.shift(); },\n read: () => buf.slice(),\n clear: () => { buf.length = 0; },\n };\n};\n\n// File sink for writing logs to files\nexport const fileSink = (filename, options = {}) => {\n const { append = true, maxSize = 10 * 1024 * 1024 } = options; // 10MB default\n return (rec) => {\n // This would need a file system implementation\n // For now, just demonstrate the pattern\n const logLine = JSON.stringify(rec) + '\\n';\n console.log(`[FILE:${filename}] ${logLine.trim()}`);\n };\n};\n\n// Progress bar sink\nexport const progressSink = (options = {}) => {\n let currentProgress = null;\n const { width = 40, showPercentage = true } = options;\n \n const updateProgressBar = (rec) => {\n if (rec.type === 'progress') {\n const { current, total, message = '' } = rec;\n const percentage = Math.round((current / total) * 100);\n const filled = Math.round((current / total) * width);\n const bar = '\u2588'.repeat(filled) + '\u2591'.repeat(width - filled);\n const pct = showPercentage ? ` ${percentage}%` : '';\n process.stdout.write(`\\r${message} [${bar}]${pct}`);\n if (current >= total) process.stdout.write('\\n');\n }\n };\n \n return (rec) => {\n if (rec.type === 'progress') {\n currentProgress = rec;\n updateProgressBar(rec);\n } else {\n // Clear progress bar for regular logs\n if (currentProgress) {\n process.stdout.write('\\n');\n currentProgress = null;\n }\n // Don't handle regular logs here - let other sinks handle them\n }\n };\n};\n\n// Metrics sink for collecting performance data\nexport const metricsSink = (options = {}) => {\n const metrics = new Map();\n const { collectTimings = true, collectCounts = true } = options;\n \n return (rec) => {\n if (rec.type === 'metric') {\n const { name, value, unit = 'ms' } = rec;\n if (!metrics.has(name)) {\n metrics.set(name, { count: 0, total: 0, min: Infinity, max: -Infinity });\n }\n const metric = metrics.get(name);\n metric.count++;\n metric.total += value;\n metric.min = Math.min(metric.min, value);\n metric.max = Math.max(metric.max, value);\n }\n };\n};\n\n// Pretty formatted sink with colors and icons\nexport const prettySink = (options = {}) => {\n const { colors = true, icons = true } = options;\n \n const colorMap = {\n trace: '\\x1b[90m', // gray\n debug: '\\x1b[36m', // cyan\n info: '\\x1b[32m', // green\n warn: '\\x1b[33m', // yellow\n error: '\\x1b[31m', // red\n reset: '\\x1b[0m'\n };\n \n const iconMap = {\n trace: '\uD83D\uDD0D',\n debug: '\uD83D\uDC1B',\n info: '\u2139\uFE0F',\n warn: '\u26A0\uFE0F',\n error: '\u274C'\n };\n \n return (rec) => {\n const { t, level, msg, ns, ...rest } = rec;\n const ts = new Date(t).toISOString();\n const color = colors ? colorMap[level] || '' : '';\n const reset = colors ? colorMap.reset : '';\n const icon = icons ? iconMap[level] || '' : '';\n const namespace = ns ? `[${ns}] ` : '';\n \n const formatted = `${color}${icon} [${ts}] ${namespace}${level.toUpperCase()} ${msg}${reset}`;\n const fn = level === 'error' ? console.error : level === 'warn' ? console.warn : console.log;\n \n if (Object.keys(rest).length) {\n fn(formatted, rest);\n } else {\n fn(formatted);\n }\n };\n};", "const DefinitionTypes = new Map();\nconst Definitions = new WeakMap();\nimport { createTypeChecker } from '../utils/typeChecker.js';\n\n/**\n * Creates a definition type with return type validation\n * @param {string} type - The definition type name\n * @param {Function|Array<Function>} returnTypes - Expected return type(s)\n * @returns {Function} - Definition creator function\n */\n\n\nexport const definitionType = (definition) => {\n if (Definitions.has(definition)) {\n return Definitions.get(definition);\n }\n return undefined;\n}\n\nexport const createDefinition = (type, returnTypes = []) => { \n // Create type checker for return values if returnTypes specified\n const returnTypeChecker = returnTypes.length > 0 ? createTypeChecker(returnTypes, 'return value') : null;\n \n if (DefinitionTypes.has(type)) {\n console.warn(`Definition type \"${type}\" already exists`);\n return DefinitionTypes.get(type);\n }\n\n const definitionType = (name, factory, ...defaultArgs) => {\n // Validate inputs using type checker\n createTypeChecker(String, 'name')(name);\n createTypeChecker(Function, 'factory')(factory);\n\n const definition = (...args) => {\n try {\n const combinedArgs = [...args, ...defaultArgs];\n const res = factory(...combinedArgs);\n \n if (returnTypeChecker && res === undefined) {\n throw new Error(`Factory ${type} must return a value for ${name}`);\n }\n\n // Use type checker to validate return value\n if (returnTypeChecker) {\n returnTypeChecker(res);\n }\n\n return res\n } catch (error) {\n console.error(`Error creating definition \"${name}\"`, error);\n throw error;\n }\n }\n\n Object.defineProperty(definition, '_name', {\n value: name,\n enumerable: false,\n configurable: false\n });\n\n Definitions.set(definition, type);\n\n return definition;\n }\n\n DefinitionTypes.set(type, definitionType);\n\n return definitionType;\n}; ", "export const isAsyncFn = (fn) => fn && fn.constructor && fn.constructor.name === 'AsyncFunction';\nexport const hasAsync = (stack, finalFn) => isAsyncFn(finalFn) || stack.some(isAsyncFn);\n", "export const normalizeArgs = (fallback, nextArgs) => {\n if (nextArgs.length === 0) return fallback;\n if (nextArgs.length === 1 && Array.isArray(nextArgs[0])) return nextArgs[0];\n return nextArgs;\n};", "export const toArray = (x) => x ? (Array.isArray(x) ? x : [x]) : [];", "// utils/asserts.js\n\nconst BAD_KEYS = new Set(['__proto__', 'prototype', 'constructor']);\nconst RESERVED_NAMESPACES = new Set(['use', 'install', 'uninstall', 'relay', 'state', 'debug']);\n\nconst MAX_NAME_LENGTH = 64;\nconst VALID_NAME = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/**\n * Throw if key is unsafe (__proto__, constructor, etc.)\n */\nexport function assertSafeKey(key, where = 'key') {\n if (BAD_KEYS.has(key)) {\n throw new Error(`Illegal key \"${key}\" in ${where}`);\n }\n}\n\n/**\n * Validate a namespace string: format, length, reserved words, proto poisoning.\n */\nexport function assertNamespace(ns) {\n assertSafeKey(ns, 'namespace');\n if (typeof ns !== 'string') {\n throw new Error(`Namespace must be a string, got ${typeof ns}`);\n }\n if (!VALID_NAME.test(ns)) {\n throw new Error(`Invalid namespace \"${ns}\". Must be a valid JS identifier`);\n }\n if (ns.length > MAX_NAME_LENGTH) {\n throw new Error(`Namespace \"${ns}\" too long (max ${MAX_NAME_LENGTH} chars)`);\n }\n if (RESERVED_NAMESPACES.has(ns)) {\n throw new Error(`Namespace \"${ns}\" is reserved`);\n }\n return ns;\n}\n\n/**\n * Validate an action or getter name within a namespace.\n */\nexport function assertMemberName(name, namespace, kind = 'member') {\n assertSafeKey(name, `${kind}:${namespace}`);\n if (typeof name !== 'string') {\n throw new Error(`${kind} name in ${namespace} must be a string`);\n }\n if (!VALID_NAME.test(name)) {\n throw new Error(`Invalid ${kind} name \"${name}\" in ${namespace}`);\n }\n if (name.length > MAX_NAME_LENGTH) {\n throw new Error(\n `${kind} name \"${name}\" in ${namespace} too long (max ${MAX_NAME_LENGTH})`\n );\n }\n return name;\n}\n", "/**\n * Deep merge utility - recursively merges objects with service defaults taking precedence\n * @param {Object} target - Target object (engine config)\n * @param {Object} source - Source object (service defaults/config)\n * @returns {Object} - Deeply merged object\n */\nexport function deepMerge(target, source) {\n if (!source || typeof source !== 'object') return source || target;\n if (!target || typeof target !== 'object') return source;\n \n const result = { ...target };\n \n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key]) &&\n target[key] && typeof target[key] === 'object' && !Array.isArray(target[key])) {\n result[key] = deepMerge(target[key], source[key]);\n } else {\n result[key] = source[key];\n }\n }\n }\n \n return result;\n}", "export const isDev = () => {\n const envs = ['DEVELOPMENT', 'TEST', 'DEV']\n \n // Node.js environment check\n if (typeof process !== 'undefined' && process?.env?.NODE_ENV) {\n return envs.includes(process.env.NODE_ENV.toUpperCase());\n }\n \n // Optional global fallback\n if (typeof globalThis !== 'undefined' && globalThis.__ENV__?.NODE_ENV) {\n return envs.includes(globalThis.__ENV__.NODE_ENV.toUpperCase());\n }\n \n return false;\n};", "// Core services\nimport { Cache } from './lib/cache/src/Cache.js';\nimport { Relay } from './lib/relay/src/main.js';\nimport { Logger, consoleSink, ringBufferSink } from './lib/logger/src/Logger.js';\n\n// Definitions\nimport { definitionType } from './definitions/createDefinition.js';\n\n// Utils\nimport { toArray, normalizeArgs, hasAsync, isAsyncFn } from './utils/index.js';\nimport { assertNamespace, assertMemberName } from './utils/asserts.js';\nimport { deepMerge } from './utils/deepMerge.js';\nimport { isDev } from './utils/isDev.js';\n\nexport class Engine {\n static options = {}\n \n static create(globalContext = {}) {\n return new Engine(globalContext, Engine.options);\n }\n\n // Per-target registries\n #nsByTarget = new WeakMap(); // target -> Map(namespace -> nsObj)\n #ctxByTarget = new WeakMap(); // target -> Map(namespace -> contextProxy)\n #middleware = new WeakMap(); // target -> Map(namespace -> [mw,...])\n #initialize = new WeakMap(); // target -> Map(namespace -> initFn)\n #uninstall = new WeakMap(); // target -> Map(namespace -> uninstallFn)\n #engineConfig = undefined;\n #globalContext = {};\n #RELAY = undefined;\n #LOG = undefined;\n #CACHE = undefined;\n\n static configure(options) {\n options = {...Engine.options, ...options};\n return {\n create: (globalContext = {}) => new Engine(globalContext, options),\n }\n }\n \n constructor(globalContext = {}, options = Engine.options) {\n this.#engineConfig = {...Engine.options, ...options};\n this.#globalContext = {...globalContext};\n \n for (const [key, value] of Object.entries(this.#globalContext)) {\n Object.defineProperty(this, key, {\n value: value,\n enumerable: true,\n configurable: false,\n writable: false,\n });\n }\n\n this.#CACHE = Cache.create();\n this.#RELAY = Relay.create();\n this.#LOG = Logger.create({\n level: (isDev() ? 'debug' : 'info'),\n sinks: [consoleSink, ringBufferSink(2000).sink],\n });\n }\n\n get cache() {\n return this.#CACHE;\n }\n\n get relay() {\n return this.#RELAY;\n }\n\n get log() {\n return this.#LOG;\n }\n\n use(...definitions) {\n return this.#use(definitions, this);\n }\n\n install(...services) {\n return this.#installTo(this, services);\n }\n\n /* ===========================\n * Core install pipeline\n * =========================== */\n #installTo(target, services) {\n try {\n\n for (const service of services) {\n if (!service.manifest?.namespace || !service.install) {\n throw new Error(`${service.manifest?.name ?? '<unknown service>'} must have a namespace and install method`);\n }\n\n if (Object.prototype.hasOwnProperty.call(target, service.manifest.namespace)) {\n throw new Error(`${service.manifest.namespace} already exists`);\n }\n\n const finalConfig = deepMerge(this.#engineConfig || {}, service.config || service.manifest.defaults || {});\n const nsObj = this.#getOrCreateNsObj(target, service.manifest.namespace);\n const context = this.#getOrCreateContext(target, service.manifest.namespace, nsObj, finalConfig, service.manifest);\n \n // Install dependencies onto the *context* as their target to isolate instances\n if (service.manifest.dependencies?.length) {\n const unique = service.manifest.dependencies.filter(d => d.unique);\n const nonUnique = service.manifest.dependencies.filter(d => !d.unique && !Object.prototype.hasOwnProperty.call(target, d.manifest.namespace));\n \n if (unique.length > 0) { \n this.#installTo(context, unique);\n }\n \n if (nonUnique.length > 0) {\n this.#installTo(target, nonUnique);\n }\n }\n\n // Handle config merging at Engine level for consistency\n\n const useContext = this.#createUseContext(target, service.manifest.namespace, nsObj, finalConfig, service.manifest);\n this.#use(service.install(useContext, finalConfig), target);\n }\n\n // Run per-target initialize hooks (once)\n const byInit = this.#initialize.get(target);\n if (byInit?.size) {\n for (const [ns, init] of byInit) {\n try { init(); } finally { byInit.delete(ns); }\n }\n this.#initialize.delete(target);\n }\n\n return target;\n } catch (error) {\n throw error;\n }\n }\n\n /* ===========================\n * Uninstall API\n * =========================== */\n uninstall(...namespaces) {\n // Global helper targets 'this'\n return this.#uninstallFrom(this, namespaces);\n }\n\n #uninstallFrom(target, namespaces) {\n const byUn = this.#uninstall.get(target);\n const byNs = this.#nsByTarget.get(target);\n const byCtx = this.#ctxByTarget.get(target);\n const mwByNs = this.#getMwMap(target);\n\n for (const ns of namespaces) {\n // run uninstall hook if present\n byUn?.get(ns)?.();\n byUn?.delete(ns);\n\n // middleware and initializers\n mwByNs?.delete(ns);\n this.#initialize.get(target)?.delete(ns);\n\n // remove namespace surface from target and caches\n if (Object.prototype.hasOwnProperty.call(target, ns)) {\n delete target[ns];\n }\n byNs?.delete(ns);\n\n // drop from each context (but keep contexts themselves alive)\n if (byCtx) {\n for (const ctx of byCtx.values()) {\n if (Object.prototype.hasOwnProperty.call(ctx, ns)) {\n delete ctx[ns];\n }\n }\n }\n }\n\n if (byUn && byUn.size === 0) this.#uninstall.delete(target);\n return this;\n }\n\n /* ===========================\n * Definition installers\n * =========================== */\n #use(definitions, target = this) {\n for (const definition of definitions) {\n if (!definition) continue;\n switch (definitionType(definition)) {\n case 'MIDDLEWARE':\n this.#installMiddleware(definition, target);\n break;\n case 'GETTERS':\n this.#installGetters(definition, target);\n break;\n case 'ACTIONS':\n this.#installActions(definition, target);\n break;\n case 'INITIALIZE':\n this.#installInitialize(definition, target);\n break;\n case 'UNINSTALL':\n this.#installUninstall(definition, target);\n break;\n default:\n throw new Error(`Unknown definition type: ${definitionType(definition)}`);\n }\n }\n return this;\n }\n\n #installActions(definition, target = this) {\n const namespace = assertNamespace(definition._name);\n const nsObj = this.#getOrCreateNsObj(target, namespace);\n const useContext = this.#createUseContext(target, namespace, nsObj);\n const actions = definition(useContext);\n\n const svcMw = this.#getMwMap(target).get(namespace) || [];\n\n for (let [name, action] of Object.entries(actions)) {\n name = assertMemberName(name, namespace, 'action');\n\n if (Object.prototype.hasOwnProperty.call(nsObj, name)) {\n throw new Error(`Action \"${namespace}.${name}\" already exists on this target`);\n }\n\n const final = this.#bindAndWrap(namespace, name, action, nsObj);\n\n if (svcMw.length === 0) {\n nsObj[name] = final;\n continue;\n }\n\n const run = this.#compose(svcMw, final);\n nsObj[name] = (...args) =>\n run(name, { namespace, action: name, args });\n }\n\n return this.#bindNsObjToTarget(target, namespace, nsObj);\n }\n\n #installGetters(definition, target = this) {\n const namespace = assertNamespace(definition._name);\n const nsObj = this.#getOrCreateNsObj(target, namespace);\n const useContext = this.#createUseContext(target, namespace, nsObj);\n const getters = definition(useContext);\n\n for (const [name, getter] of Object.entries(getters)) {\n assertMemberName(name, namespace, 'getter');\n const bound = getter.bind(nsObj);\n\n Object.defineProperty(nsObj, name, {\n get: () => bound(),\n enumerable: true,\n configurable: false,\n });\n }\n\n return this.#bindNsObjToTarget(target, namespace, nsObj);\n }\n\n #installMiddleware(definition, target = this) {\n const namespace = assertNamespace(definition._name);\n const nsObj = this.#getOrCreateNsObj(target, namespace);\n const useContext = this.#createUseContext(target, namespace, nsObj);\n const fns = definition(useContext); // fn or [fn]\n\n const mwByNs = this.#getMwMap(target);\n const list = mwByNs.get(namespace) || [];\n const add = toArray(fns).map(fn => {\n if (typeof fn !== 'function') {\n throw new Error('Middleware must be a function');\n }\n return fn;\n });\n\n mwByNs.set(namespace, list.concat(add));\n return this;\n }\n\n #installInitialize(definition, target = this) {\n const namespace = assertNamespace(definition._name);\n const nsObj = this.#getOrCreateNsObj(target, namespace);\n const useContext = this.#createUseContext(target, namespace, nsObj);\n const setupFn = () => definition(useContext);\n\n let byInit = this.#initialize.get(target);\n if (!byInit) { byInit = new Map(); this.#initialize.set(target, byInit); }\n byInit.set(namespace, setupFn);\n\n return this;\n }\n\n #installUninstall(definition, target = this) {\n const namespace = assertNamespace(definition._name);\n const nsObj = this.#getOrCreateNsObj(target, namespace);\n const useContext = this.#createUseContext(target, namespace, nsObj);\n const uninstall = () => definition(useContext);\n\n let byUn = this.#uninstall.get(target);\n if (!byUn) { byUn = new Map(); this.#uninstall.set(target, byUn); }\n byUn.set(namespace, uninstall);\n\n return this;\n }\n\n /* ===========================\n * Binding & composition\n * =========================== */\n #bindNsObjToTarget(target, namespace, nsObj) {\n // Ensure the target exposes the canonical ns object\n if (!Object.prototype.hasOwnProperty.call(target, namespace)) {\n Object.defineProperty(target, namespace, {\n value: nsObj,\n enumerable: true,\n configurable: true,\n writable: false,\n });\n } else {\n // Reuse whatever is already bound on the target as canonical\n nsObj = target[namespace];\n }\n \n // Update the ns cache for this target\n this.#nsByTarget.get(target)?.set(namespace, nsObj);\n \n return target;\n }\n \n\n #bindAndWrap(namespace, actionName, action, nsObj) {\n const bound = action.bind(nsObj);\n if (isAsyncFn(bound)) {\n return async (...args) => {\n try { return await bound(...args); }\n catch (e) {\n e.action = actionName;\n e.namespace = namespace;\n console.error(`Error in action \"${namespace}.${actionName}\":`, e);\n throw e;\n }\n };\n }\n return (...args) => {\n try { return bound(...args); }\n catch (e) {\n e.action = actionName;\n e.namespace = namespace;\n console.error(`Error in action \"${namespace}.${actionName}\":`, e);\n throw e;\n }\n };\n }\n\n #compose(stack, finalFn) {\n return hasAsync(toArray(stack), finalFn)\n ? this.#composeAsync(stack, finalFn)\n : this.#composeSync(stack, finalFn);\n }\n\n #composeSync(stack, finalFn) {\n const fns = toArray(stack);\n return (name, ctx) => {\n let i = -1;\n const dispatch = (k, args) => {\n if (k <= i) throw new Error('next() called multiple times');\n i = k;\n const mw = fns[k];\n if (!mw) return finalFn(...args);\n const local = { ...ctx, args };\n return this.#callMw(mw, name, local, (...nextArgs) => {\n const newArgs = normalizeArgs(args, nextArgs);\n return dispatch(k + 1, newArgs);\n });\n };\n return dispatch(0, ctx.args);\n };\n }\n\n #composeAsync(stack, finalFn) {\n const fns = toArray(stack);\n return async (name, ctx) => {\n let i = -1;\n const dispatch = async (k, args) => {\n if (k <= i) throw new Error('next() called multiple times');\n i = k;\n const mw = fns[k];\n if (!mw) return await finalFn(...args);\n const local = { ...ctx, args };\n return await this.#callMw(mw, name, local, (...nextArgs) => {\n const newArgs = normalizeArgs(args, nextArgs);\n return dispatch(k + 1, newArgs);\n });\n };\n return dispatch(0, ctx.args);\n };\n }\n\n #callMw(mw, name, local, next) {\n try { return mw(name, local, next); }\n catch (e) {\n e.middleware = mw.name || '<anon>';\n e.action = name;\n throw e;\n }\n }\n\n /* ===========================\n * Per-target helpers\n * =========================== */\n #getMwMap(target) {\n let m = this.#middleware.get(target);\n if (!m) { m = new Map(); this.#middleware.set(target, m); }\n return m;\n }\n\n #getOrCreateNsObj(target, namespace) {\n let byNs = this.#nsByTarget.get(target);\n if (!byNs) { byNs = new Map(); this.#nsByTarget.set(target, byNs); }\n if (byNs.has(namespace)) return byNs.get(namespace);\n\n const nsObj = Object.create(null);\n byNs.set(namespace, nsObj);\n return nsObj;\n }\n\n #getOrCreateContext(target, namespace, nsObj, config = this.#engineConfig || {}, manifest = {}) {\n let byCtx = this.#ctxByTarget.get(target);\n if (!byCtx) { byCtx = new Map(); this.#ctxByTarget.set(target, byCtx); }\n if (byCtx.has(namespace)) return byCtx.get(namespace);\n\n // Provide core services to the context\n const base = {\n ...this.#globalContext,\n log: this.#LOG.child({ ns: namespace }, (manifest.log?.sinks || [])),\n relay: this.#RELAY.createChannel(nsObj),\n cache: this.#CACHE,\n config,\n };\n\n const context = new Proxy(base, {\n get(b, prop, rx) {\n if (prop in b) return Reflect.get(b, prop, rx);\n return Reflect.get(target, prop, rx); // live fall-through to target namespaces\n },\n has(b, prop) { return prop in b || prop in target; },\n });\n\n byCtx.set(namespace, context);\n return context;\n }\n\n #createUseContext(target, namespace, nsObj, config = this.#engineConfig || {}, manifest = {}) {\n return (...keys) => {\n const ctx = this.#getOrCreateContext(target, namespace, nsObj, config, manifest);\n \n if (!keys || keys.length === 0) return ctx;\n if (keys.length === 1) return ctx[keys[0]];\n \n const out = new Array(keys.length);\n for (let i = 0; i < keys.length; i++) {\n out[i] = ctx[keys[i]];\n }\n return out;\n }\n } \n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["ORIGINAL_TYPE", "TrieNode", "_TrieNode", "data", "key", "value", "index", "val", "path", "result", "children", "obj", "newKeys", "existingKeys", "child", "arr", "newIndices", "_", "existingIndices", "
|
|
3
|
+
"sources": ["../src/lib/cache/src/Cache.js", "../src/lib/relay/src/Relay.js", "../src/lib/logger/src/Logger.js", "../src/utils/typeChecker.js", "../src/definitions/createDefinition.js", "../src/utils/async.js", "../src/utils/normalizeArgs.js", "../src/utils/toArray.js", "../src/utils/asserts.js", "../src/utils/deepMerge.js", "../src/utils/isDev.js", "../src/Engine.js", "../src/definitions/defaults.js", "../src/definitions/DefinitionBuilder.js", "../src/ServiceProvider.js", "../src/global.js"],
|
|
4
|
+
"sourcesContent": ["// Original type constants for bits 6-7\nconst ORIGINAL_TYPE = {\n PRIMITIVE: 0, // 00\n OBJECT: 1, // 01\n ARRAY: 2, // 10\n RESERVED: 3 // 11\n};\n\nclass TrieNode {\n // \uD83D\uDE80 BIT-PACKED FLAGS - Ultra-efficient metadata storage\n // Bit layout:\n // Bit 0: isFunction\n // Bit 1: setOnce \n // Bit 2: cached\n // Bit 3: executed\n // Bit 4: hasChildren\n // Bit 5: isFixed (immutable - cannot be overwritten)\n // Bits 6-7: originalType (00=primitive, 01=object, 10=array, 11=reserved)\n\n constructor(data) {\n this.flags = 0; // Single integer for all boolean metadata!\n\n if (data === undefined) {\n return;\n }\n \n if (typeof data === 'function') {\n this.flags |= 1; // Set isFunction bit\n } else if (typeof data === 'object' && data !== null && !Array.isArray(data)) {\n this._children = new Map(Object.entries(data).map(([key, value]) => [key, new TrieNode(value)]));\n this.flags |= 16; // Set hasChildren bit\n this.originalType = ORIGINAL_TYPE.OBJECT; // Mark as originally an object\n } else if (Array.isArray(data)) {\n this._children = new Map(data.map((value, index) => [index, new TrieNode(value)]));\n this.flags |= 16; // Set hasChildren bit\n this.originalType = ORIGINAL_TYPE.ARRAY; // Mark as originally an array\n } else {\n this.value = data;\n this.originalType = ORIGINAL_TYPE.PRIMITIVE; // Mark as primitive\n }\n // For primitive values (including undefined), no additional setup needed\n // Note: undefined data creates an empty node ready for value assignment\n }\n\n // \u26A1 Lightning-fast bit operations for metadata\n get isFunction() { return (this.flags & 1) !== 0; }\n set isFunction(val) { this.flags = val ? (this.flags | 1) : (this.flags & ~1); }\n \n get isSetOnce() { return (this.flags & 2) !== 0; }\n set isSetOnce(val) { this.flags = val ? (this.flags | 2) : (this.flags & ~2); }\n \n get cached() { return (this.flags & 4) !== 0; }\n set cached(val) { this.flags = val ? (this.flags | 4) : (this.flags & ~4); }\n \n get executed() { return (this.flags & 8) !== 0; }\n set executed(val) { this.flags = val ? (this.flags | 8) : (this.flags & ~8); }\n \n get hasChildrenFlag() { return (this.flags & 16) !== 0; }\n set hasChildrenFlag(val) { this.flags = val ? (this.flags | 16) : (this.flags & ~16); }\n\n get isFixed() { return (this.flags & 32) !== 0; }\n set isFixed(val) { this.flags = val ? (this.flags | 32) : (this.flags & ~32); }\n\n // Original type stored in bits 6-7 (0=primitive, 1=object, 2=array, 3=reserved)\n get originalType() { return (this.flags >> 6) & 3; }\n set originalType(val) { this.flags = (this.flags & ~192) | ((val & 3) << 6); }\n\n // \uD83D\uDD04 Lazy children creation - only when needed\n get children() {\n if (!this._children) {\n this._children = new Map();\n this.hasChildrenFlag = true;\n }\n return this._children;\n }\n \n hasChildren() {\n return this.hasChildrenFlag && this._children && this._children.size > 0;\n }\n\n // \uD83D\uDCBE Expensive properties - only created when used\n get cachedResult() { return this._cachedResult; }\n set cachedResult(val) { this._cachedResult = val; }\n \n get cachedAt() { return this._cachedAt; }\n set cachedAt(val) { this._cachedAt = val; }\n\n get (path) {\n const key = path.shift();\n \n if (key === undefined) {\n if (this.flags & 1) { // isFunction bit check\n if ((this.flags & 6) === 6) { // setOnce AND cached (bits 1 & 2)\n return this.cachedResult;\n }\n const result = this.value();\n if (this.flags & 2) { // setOnce bit check\n this.flags |= 4; // Set cached bit (bit 2)\n this.cachedResult = result;\n this.cachedAt = Date.now();\n }\n this.flags |= 8; // Set executed bit (bit 3)\n return result;\n }\n // If there's a direct value, return it\n if (this.value !== undefined) {\n return this.value;\n }\n \n // If there are children, reconstruct the object/array\n if (this.hasChildren()) {\n return this._reconstructFromChildren();\n }\n \n // No value and no children\n return undefined;\n }\n\n if (this._children?.has(key)) {\n return this._children.get(key).get(path);\n }\n\n return undefined;\n }\n\n set (path, value) {\n const key = path.shift();\n \n if (key === undefined) {\n // \uD83D\uDD12 Check if this value is fixed (immutable)\n if (this.isFixed) {\n throw new Error(`Cannot overwrite fixed value at path. Use clearFixed() first if you need to modify it.`);\n }\n \n // If setting an object, check for key changes and clean up\n if (typeof value === 'object' && value !== null && !Array.isArray(value) && typeof value !== 'function') {\n this._syncObjectChildren(value);\n } else if (Array.isArray(value)) {\n this._syncArrayChildren(value);\n } else {\n this.value = value;\n // \uD83D\uDE80 Direct bit manipulation - much faster than individual setters\n this.flags = typeof value === 'function' ? 1 : 0; // Reset flags, set isFunction if needed\n this.originalType = ORIGINAL_TYPE.PRIMITIVE; // Mark as primitive\n // Bits: isFunction(0), setOnce(1), cached(2), executed(3) = all reset except isFunction\n }\n return this;\n }\n \n // Create child if it doesn't exist\n const children = this.children; // Get the children map once\n if (!children.has(key)) {\n children.set(key, new TrieNode());\n }\n \n children.get(key).set(path, value);\n return this;\n }\n\n setOnce (path, value) {\n const key = path.shift();\n \n if (key === undefined) {\n // \uD83D\uDD12 Check if this value is fixed (immutable)\n if (this.isFixed) {\n throw new Error(`Cannot overwrite fixed value at path. Use clearFixed() first if you need to modify it.`);\n }\n \n // If setting an object, check for key changes and clean up\n if (typeof value === 'object' && value !== null && !Array.isArray(value) && typeof value !== 'function') {\n this._syncObjectChildren(value);\n // \uD83D\uDE80 Set setOnce flag for objects\n this.flags = this.flags | 2; // Set setOnce bit (bit 1)\n } else if (Array.isArray(value)) {\n this._syncArrayChildren(value);\n // \uD83D\uDE80 Set setOnce flag for arrays\n this.flags = this.flags | 2; // Set setOnce bit (bit 1)\n } else {\n this.value = value;\n // \uD83D\uDE80 Direct bit manipulation for setOnce - set bits 0 and 1, clear 2 and 3\n this.flags = typeof value === 'function' ? 3 : 2; // setOnce=true, isFunction=maybe\n this.originalType = ORIGINAL_TYPE.PRIMITIVE; // Mark as primitive\n // Bits: 3 = 0011 (isFunction=1, setOnce=1), 2 = 0010 (setOnce=1)\n }\n return this;\n }\n \n // Create child if it doesn't exist\n const children = this.children; // Get the children map once\n if (!children.has(key)) {\n children.set(key, new TrieNode());\n }\n \n children.get(key).setOnce(path, value);\n return this;\n }\n\n has (path) {\n const key = path.shift();\n \n if (key === undefined) {\n return this.value !== undefined;\n }\n\n if (this._children?.has(key)) {\n return this._children.get(key).has(path);\n }\n\n return false;\n }\n\n remove (path) {\n const key = path.shift();\n \n if (key === undefined) {\n this.value = undefined;\n // \uD83D\uDE80 Direct bit reset - clear all metadata flags at once\n this.flags = this.flags & ~15; // Clear bits 0-3 (keep bit 4+ for hasChildren etc)\n return this;\n }\n\n if (this._children?.has(key)) {\n this._children.get(key).remove(path);\n }\n\n return this;\n }\n\n clearCache (path) {\n const key = path.shift();\n \n if (key === undefined) {\n // \uD83D\uDE80 Direct bit manipulation - clear cached bit only\n this.flags = this.flags & ~4; // Clear bit 2 (cached)\n this.cachedResult = null;\n this.cachedAt = null;\n return this;\n }\n\n if (this._children?.has(key)) {\n this._children.get(key).clearCache(path);\n }\n\n return this;\n }\n\n // \uD83D\uDD12 Fixed (immutable) value operations\n fixed (path, value) {\n const key = path.shift();\n \n if (key === undefined) {\n // \uD83D\uDD12 Check if already set as fixed\n if (this.value !== undefined && this.isFixed) {\n throw new Error(`Value at path is already fixed and cannot be changed. Use clearFixed() first if needed.`);\n }\n \n this.value = value;\n // \uD83D\uDE80 Set isFixed flag (bit 5) + function flag if needed\n this.flags = (typeof value === 'function' ? 1 : 0) | 32; // isFunction + isFixed\n return this;\n }\n \n // Create child if it doesn't exist\n const children = this.children;\n if (!children.has(key)) {\n children.set(key, new TrieNode());\n }\n \n children.get(key).fixed(path, value);\n return this;\n }\n\n clearFixed (path) {\n const key = path.shift();\n \n if (key === undefined) {\n if (!this.isFixed) {\n console.warn('Attempted to clear fixed flag on non-fixed value');\n return this;\n }\n \n // \uD83D\uDE80 Clear isFixed bit (bit 5)\n this.flags = this.flags & ~32;\n return this;\n }\n\n if (this._children?.has(key)) {\n this._children.get(key).clearFixed(path);\n }\n\n return this;\n }\n\n isFixedValue (path) {\n const key = path.shift();\n \n if (key === undefined) {\n return this.isFixed;\n }\n\n if (this._children?.has(key)) {\n return this._children.get(key).isFixedValue(path);\n }\n\n return false;\n }\n\n // Sync children with object keys - delete old keys, set new ones\n _syncObjectChildren(obj) {\n const newKeys = new Set(Object.keys(obj));\n const existingKeys = new Set(this.children.keys());\n \n // Delete keys that are no longer in the new object\n for (const key of existingKeys) {\n if (!newKeys.has(key)) {\n this.children.delete(key);\n }\n }\n \n // Set/update values for new object keys\n for (const [key, value] of Object.entries(obj)) {\n if (!this.children.has(key)) {\n this.children.set(key, new TrieNode());\n }\n \n if (typeof value === 'object' && value !== null && !Array.isArray(value) && typeof value !== 'function') {\n this.children.get(key)._syncObjectChildren(value);\n } else if (Array.isArray(value)) {\n this.children.get(key)._syncArrayChildren(value);\n } else {\n const child = this.children.get(key);\n child.value = value;\n // \uD83D\uDE80 Direct bit manipulation for child sync\n child.flags = typeof value === 'function' ? 1 : 0; // Reset flags, set isFunction if needed\n }\n }\n \n // \uD83D\uDE80 Update this node's flags - clear isFunction bit, set object type\n this.value = undefined; // Objects don't have direct values\n this.flags = this.flags & ~1; // Clear isFunction bit (bit 0)\n this.originalType = ORIGINAL_TYPE.OBJECT; // Mark as originally an object\n }\n\n // Sync children with array elements - delete old indices, set new ones\n _syncArrayChildren(arr) {\n const newIndices = new Set(arr.map((_, index) => index));\n const existingIndices = new Set(this.children.keys());\n \n // Delete indices that are no longer in the new array\n for (const index of existingIndices) {\n if (typeof index === 'number' && !newIndices.has(index)) {\n this.children.delete(index);\n }\n }\n \n // Set/update values for new array elements\n for (let i = 0; i < arr.length; i++) {\n const value = arr[i];\n if (!this.children.has(i)) {\n this.children.set(i, new TrieNode());\n }\n \n if (typeof value === 'object' && value !== null && !Array.isArray(value) && typeof value !== 'function') {\n this.children.get(i)._syncObjectChildren(value);\n } else if (Array.isArray(value)) {\n this.children.get(i)._syncArrayChildren(value);\n } else {\n const child = this.children.get(i);\n child.value = value;\n // \uD83D\uDE80 Direct bit manipulation for child sync\n child.flags = typeof value === 'function' ? 1 : 0; // Reset flags, set isFunction if needed\n }\n }\n \n // \uD83D\uDE80 Update this node's flags - clear isFunction bit, set array type\n this.value = undefined; // Arrays don't have direct values\n this.flags = this.flags & ~1; // Clear isFunction bit (bit 0)\n this.originalType = ORIGINAL_TYPE.ARRAY; // Mark as originally an array\n }\n\n // \uD83D\uDD04 Reconstruct object/array from children\n _reconstructFromChildren() {\n if (!this._children || this._children.size === 0) {\n return undefined;\n }\n\n // \uD83D\uDE80 Use stored originalType for fast reconstruction (no key analysis needed!)\n const type = this.originalType;\n \n if (type === ORIGINAL_TYPE.ARRAY) { // Originally an array\n const result = [];\n for (const [key, child] of this._children) {\n if (typeof key === 'number') {\n result[key] = child.get([]); // Recursive call to get child value\n }\n }\n return result;\n } else { // Originally an object or fallback for incrementally built structures\n const result = {};\n for (const [key, child] of this._children) {\n result[key] = child.get([]); // Recursive call to get child value\n }\n return result;\n }\n }\n\n}\n\nexport class Cache {\n static create(data) {\n return new Cache(data);\n }\n\n constructor(data = {}) {\n return this.load(data);\n }\n\n load(data) {\n this.root = new TrieNode(data);\n return this;\n }\n\n get (path) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n return this.root.get(pathCopy);\n }\n\n update (path, updateFn) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n\n const value = this.root.get([...pathCopy]);\n const newValue = updateFn(value);\n this.root.set([...pathCopy], newValue);\n return this;\n }\n\n set (path, value) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n this.root.set(pathCopy, value);\n return this;\n }\n \n setOnce (path, value) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n this.root.setOnce(pathCopy, value);\n return this;\n }\n\n // \uD83D\uDD12 Fixed (immutable) values - cannot be overwritten\n fixed (path, value) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n this.root.fixed(pathCopy, value);\n return this;\n }\n\n has (path) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n return this.root.has(pathCopy);\n }\n\n remove (path) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n this.root.remove(pathCopy);\n return this;\n }\n \n clearCache (path) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n this.root.clearCache(pathCopy);\n return this;\n }\n\n // \uD83D\uDD12 Fixed value management\n clearFixed (path) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n this.root.clearFixed(pathCopy);\n return this;\n }\n\n isFixed (path) {\n // Copy path once at the Static level\n const pathCopy = Array.isArray(path) ? [...path] : [path];\n return this.root.isFixedValue(pathCopy);\n }\n\n // \uD83D\uDCE4 Export trie structure to JSON-serializable descriptive object\n export() {\n return this._exportNode(this.root);\n }\n\n // \uD83D\uDCE5 Import from JSON-serializable descriptive object to recreate Cache instance\n static import(descriptor) {\n const instance = new Cache();\n instance.root = instance._importNode(descriptor);\n return instance;\n }\n\n // \uD83D\uDD04 Recursive helper to export a TrieNode to descriptive object\n _exportNode(node) {\n const descriptor = {\n flags: node.flags\n };\n\n // Handle different node types\n if (node.isFunction) {\n // Skip functions - they cannot be reliably serialized/deserialized\n descriptor.type = 'function';\n descriptor.skipped = true;\n } else if (node.hasChildren()) {\n // Node has children - export as map\n descriptor.type = 'map';\n descriptor.value = [];\n for (const [key, child] of node._children) {\n descriptor.value.push([key, this._exportNode(child)]);\n }\n \n // Also include node's direct value if it exists\n if (node.value !== undefined) {\n descriptor.nodeValue = node.value;\n }\n } else if (node.value !== undefined) {\n // Primitive value\n descriptor.type = 'primitive';\n descriptor.value = node.value;\n } else {\n // Empty node\n descriptor.type = 'empty';\n }\n\n return descriptor;\n }\n\n // \uD83D\uDD04 Recursive helper to import a descriptive object to TrieNode\n _importNode(descriptor) {\n const node = new TrieNode();\n \n // Restore flags (but clear function-related flags since we skip functions)\n node.flags = descriptor.flags || 0;\n \n switch (descriptor.type) {\n case 'function':\n // Functions are skipped - create empty node and clear function flags\n node.value = undefined;\n node.flags = node.flags & ~15; // Clear bits 0-3 (isFunction, setOnce, cached, executed)\n break;\n \n case 'primitive':\n node.value = descriptor.value;\n break;\n \n case 'map':\n // Reconstruct children\n if (descriptor.value && descriptor.value.length > 0) {\n node._children = new Map();\n for (const [key, childDescriptor] of descriptor.value) {\n // Convert string keys back to numbers for array indices if needed\n const actualKey = typeof key === 'string' && /^\\d+$/.test(key) ? parseInt(key, 10) : key;\n node._children.set(actualKey, this._importNode(childDescriptor));\n }\n node.hasChildrenFlag = true;\n }\n \n // Set node's direct value if it exists\n if (descriptor.nodeValue !== undefined) {\n node.value = descriptor.nodeValue;\n }\n break;\n \n case 'empty':\n default:\n // Empty node - no additional setup needed\n break;\n }\n\n return node;\n }\n}\n\nexport function createCache(data) {\n return Cache.create(data);\n}", "// Simple, readable relay with wildcard matching and no indexing\n\nconst GLOBAL_NS_OBJ = Object.freeze(Object.create(null));\n\nfunction queueMicrotask(fn) {\n if (globalThis.queueMicrotask && typeof globalThis.queueMicrotask === 'function') {\n globalThis.queueMicrotask(fn);\n return;\n }\n setTimeout(fn, 0);\n}\n\nclass Channel {\n #nsObj; #relay;\n constructor(nsObj, relay) { this.#nsObj = nsObj; this.#relay = relay; }\n\n // Any source -> me\n on(event, handler) {\n return this.#relay.subscribe(event, GLOBAL_NS_OBJ, this.#nsObj, handler);\n }\n\n once(event, handler) {\n return this.#relay.once(event, GLOBAL_NS_OBJ, this.#nsObj, handler);\n }\n\n // Me -> everyone (sender never hears itself)\n broadcast(event, ...payload) {\n this.#relay.publish(event, this.#nsObj, GLOBAL_NS_OBJ, payload);\n }\n\n // Specific source -> me\n from(fromNs) {\n return {\n subscribe: (event, handler) => this.#relay.subscribe(event, fromNs, this.#nsObj, handler),\n once: (event, handler) => this.#relay.once(event, fromNs, this.#nsObj, handler),\n };\n }\n\n // Me -> specific target\n to(toNs) {\n return {\n publish: (event, ...payload) => this.#relay.publish(event, this.#nsObj, toNs, payload),\n publishAsync: (event, ...payload) => this.#relay.publishAsync(event, this.#nsObj, toNs, payload),\n };\n }\n}\n\nexport class Relay {\n #channels = new WeakMap(); // nsObj -> Channel\n #events = new Map(); // eventName -> Set<Listener>\n #onError = null;\n\n static create(config = {}) {\n return new Relay(config);\n }\n\n constructor({ onError = null } = {}) {\n this.#onError = onError;\n this.createChannel(GLOBAL_NS_OBJ);\n }\n\n // Public convenience\n channel(nsObj) { return this.createChannel(nsObj); }\n createChannel(nsObj) {\n if (this.#channels.has(nsObj)) return this.#channels.get(nsObj);\n const ch = new Channel(nsObj, this);\n this.#channels.set(nsObj, ch);\n return ch;\n }\n\n // Internal helpers\n #listeners(event) {\n let set = this.#events.get(event);\n if (!set) { set = new Set(); this.#events.set(event, set); }\n return set;\n }\n\n // Wildcard matcher:\n // - If published `from` is GLOBAL, it matches every listener.from\n // - If listener.from is GLOBAL, it matches every published from\n // Same for `to`. This makes broadcast (to = GLOBAL) hit specific targets too.\n static #matchSide(published, constraint) {\n return published === GLOBAL_NS_OBJ || constraint === GLOBAL_NS_OBJ || published === constraint;\n }\n\n static #matches(publishedFrom, publishedTo, listenerFrom, listenerTo) {\n return Relay.#matchSide(publishedFrom, listenerFrom)\n && Relay.#matchSide(publishedTo, listenerTo);\n }\n\n subscribe(event, from, to, handler) {\n const listener = { from, to, handler };\n this.#listeners(event).add(listener);\n return () => {\n const set = this.#events.get(event);\n if (set) set.delete(listener);\n };\n }\n\n once(event, from, to, handler) {\n let off = null;\n const wrapped = (payload) => {\n try { handler(payload); } finally { off && off(); }\n };\n off = this.subscribe(event, from, to, wrapped);\n return off;\n }\n\n offAllFor(nsObj) {\n for (const set of this.#events.values()) {\n for (const l of Array.from(set)) {\n if (l.from === nsObj || l.to === nsObj) set.delete(l);\n }\n }\n }\n\n listenerCount(event) {\n const set = this.#events.get(event);\n return set ? set.size : 0;\n }\n\n #deliver(event, from, to, payload) {\n const set = this.#events.get(event);\n if (!set || set.size === 0) return;\n\n for (const l of set) {\n // Always skip self-delivery\n if (l.to === from) continue;\n\n if (Relay.#matches(from, to, l.from, l.to)) {\n try { l.handler(...payload); }\n catch (err) { if (this.#onError) this.#onError(err, { event, from, to, listener: l }); }\n }\n }\n }\n\n publish(event, from, to, payload) {\n this.#deliver(event, from, to, payload);\n }\n\n publishAsync(event, from, to, payload) {\n queueMicrotask(() => this.#deliver(event, from, to, payload));\n }\n\n broadcast(event, from, payload) {\n this.publish(event, from, GLOBAL_NS_OBJ, payload);\n }\n}\n", "// logger/Logger.js\nexport const Levels = { trace:10, debug:20, info:30, warn:40, error:50, silent:90 };\n\nexport class Logger {\n static create(config = {}) {\n return new Logger(config);\n }\n\n #level; #sinks; #base;\n\n constructor({ level = 'info', sinks = [], base = {} } = {}) {\n this.#level = Levels[level] ?? Levels.info;\n this.#sinks = sinks;\n this.#base = base;\n }\n\n setLevel(lvl) { this.#level = Levels[lvl] ?? this.#level; }\n\n child(extra = {}, additionalSinks = []) {\n return new Logger({ \n level: this.level, \n sinks: [...this.#sinks, ...additionalSinks], \n base: { ...this.#base, ...extra } \n });\n }\n\n get level() { return Object.entries(Levels).find(([k,v]) => v === this.#level)?.[0] ?? 'info'; }\n\n log(level, msg, data = {}) {\n const n = Levels[level] ?? Levels.info;\n if (n < this.#level) return;\n const rec = { t: Date.now(), level, msg, ...this.#base, ...data };\n for (const sink of this.#sinks) sink(rec);\n }\n\n trace(msg, data) { this.log('trace', msg, data); }\n debug(msg, data) { this.log('debug', msg, data); }\n info (msg, data) { this.log('info', msg, data); }\n warn (msg, data) { this.log('warn', msg, data); }\n error(msg, data) { this.log('error', msg, data); }\n \n // Specialized logging methods\n progress(current, total, message = '', data = {}) {\n const rec = { \n t: Date.now(), \n type: 'progress', \n level: 'info',\n msg: message, // Set msg field for consoleSink compatibility\n current, \n total, \n message,\n percentage: Math.round((current / total) * 100),\n ...this.#base, \n ...data \n };\n for (const sink of this.#sinks) sink(rec);\n }\n \n metric(name, value, unit = 'ms', data = {}) {\n const rec = { \n t: Date.now(), \n type: 'metric', \n level: 'info',\n msg: `${name}: ${value}${unit}`, // Set msg field for consoleSink compatibility\n name, \n value, \n unit,\n ...this.#base, \n ...data \n };\n for (const sink of this.#sinks) sink(rec);\n }\n}\n\n// logger/sinks.js\nexport const consoleSink = (rec) => {\n const { t, level, msg, ns, ...rest } = rec;\n const ts = new Date(t).toISOString();\n const fn = level === 'error' ? console.error : level === 'warn' ? console.warn : console.log;\n \n // Include namespace in the message if present, but don't show it as separate data\n const namespace = ns ? `[${ns}] ` : '';\n const message = `${namespace}${msg}`;\n \n // Only show additional data if there are meaningful properties (not just namespace)\n const hasAdditionalData = Object.keys(rest).length > 0;\n hasAdditionalData ? fn(`[${ts}] ${level.toUpperCase()} ${message}`, rest)\n : fn(`[${ts}] ${level.toUpperCase()} ${message}`);\n};\n\nexport const ringBufferSink = (size = 1000) => {\n const buf = [];\n return {\n sink: (rec) => { buf.push(rec); if (buf.length > size) buf.shift(); },\n read: () => buf.slice(),\n clear: () => { buf.length = 0; },\n };\n};\n\n// File sink for writing logs to files\nexport const fileSink = (filename, options = {}) => {\n const { append = true, maxSize = 10 * 1024 * 1024 } = options; // 10MB default\n return (rec) => {\n // This would need a file system implementation\n // For now, just demonstrate the pattern\n const logLine = JSON.stringify(rec) + '\\n';\n console.log(`[FILE:${filename}] ${logLine.trim()}`);\n };\n};\n\n// Progress bar sink\nexport const progressSink = (options = {}) => {\n let currentProgress = null;\n const { width = 40, showPercentage = true } = options;\n \n const updateProgressBar = (rec) => {\n if (rec.type === 'progress') {\n const { current, total, message = '' } = rec;\n const percentage = Math.round((current / total) * 100);\n const filled = Math.round((current / total) * width);\n const bar = '\u2588'.repeat(filled) + '\u2591'.repeat(width - filled);\n const pct = showPercentage ? ` ${percentage}%` : '';\n process.stdout.write(`\\r${message} [${bar}]${pct}`);\n if (current >= total) process.stdout.write('\\n');\n }\n };\n \n return (rec) => {\n if (rec.type === 'progress') {\n currentProgress = rec;\n updateProgressBar(rec);\n } else {\n // Clear progress bar for regular logs\n if (currentProgress) {\n process.stdout.write('\\n');\n currentProgress = null;\n }\n // Don't handle regular logs here - let other sinks handle them\n }\n };\n};\n\n// Metrics sink for collecting performance data\nexport const metricsSink = (options = {}) => {\n const metrics = new Map();\n const { collectTimings = true, collectCounts = true } = options;\n \n return (rec) => {\n if (rec.type === 'metric') {\n const { name, value, unit = 'ms' } = rec;\n if (!metrics.has(name)) {\n metrics.set(name, { count: 0, total: 0, min: Infinity, max: -Infinity });\n }\n const metric = metrics.get(name);\n metric.count++;\n metric.total += value;\n metric.min = Math.min(metric.min, value);\n metric.max = Math.max(metric.max, value);\n }\n };\n};\n\n// Pretty formatted sink with colors and icons\nexport const prettySink = (options = {}) => {\n const { colors = true, icons = true } = options;\n \n const colorMap = {\n trace: '\\x1b[90m', // gray\n debug: '\\x1b[36m', // cyan\n info: '\\x1b[32m', // green\n warn: '\\x1b[33m', // yellow\n error: '\\x1b[31m', // red\n reset: '\\x1b[0m'\n };\n \n const iconMap = {\n trace: '\uD83D\uDD0D',\n debug: '\uD83D\uDC1B',\n info: '\u2139\uFE0F',\n warn: '\u26A0\uFE0F',\n error: '\u274C'\n };\n \n return (rec) => {\n const { t, level, msg, ns, ...rest } = rec;\n const ts = new Date(t).toISOString();\n const color = colors ? colorMap[level] || '' : '';\n const reset = colors ? colorMap.reset : '';\n const icon = icons ? iconMap[level] || '' : '';\n const namespace = ns ? `[${ns}] ` : '';\n \n const formatted = `${color}${icon} [${ts}] ${namespace}${level.toUpperCase()} ${msg}${reset}`;\n const fn = level === 'error' ? console.error : level === 'warn' ? console.warn : console.log;\n \n if (Object.keys(rest).length) {\n fn(formatted, rest);\n } else {\n fn(formatted);\n }\n };\n};", "/**\n * Type Checker Utility\n * \n * Supports syntax like:\n * - createDefinition('action', [Array, Function]) // Array or Function\n * - createDefinition('name', String) // Must be String\n * - createDefinition('items', Array) // Must be Array\n * - createDefinition('callback', Function) // Must be Function\n * - createDefinition('value', [String, Number]) // String or Number\n */\n\n/**\n * Type definitions mapping constructor names to actual constructors\n */\nconst TYPE_MAP = {\n String,\n Number,\n Boolean,\n Array,\n Object,\n Function,\n Date,\n RegExp,\n Promise,\n Map,\n Set,\n WeakMap,\n WeakSet,\n Symbol,\n BigInt,\n Error,\n TypeError,\n RangeError,\n ReferenceError,\n SyntaxError,\n EvalError,\n URIError\n};\n\n/**\n * Checks if a value matches the expected type(s)\n * @param {*} value - The value to check\n * @param {Function|Array<Function>} expectedType - Single type or array of possible types\n * @param {string} name - Name of the parameter for error messages\n * @returns {boolean} - True if value matches expected type(s)\n */\nexport function checkType(value, expectedType, name = 'value') {\n // Handle array of possible types\n if (Array.isArray(expectedType)) {\n for (const type of expectedType) {\n if (matchesType(value, type)) {\n return true;\n }\n }\n \n const typeNames = expectedType.map(getTypeName).join(' | ');\n throw new TypeError(`${name} must be one of: ${typeNames}. Got ${getTypeName(value)}`);\n }\n \n // Handle single type\n if (!matchesType(value, expectedType)) {\n throw new TypeError(`${name} must be ${getTypeName(expectedType)}. Got ${getTypeName(value)}`);\n }\n \n return true;\n}\n\n/**\n * Checks if a value matches a specific type\n * @param {*} value - The value to check\n * @param {Function} type - The expected constructor/type\n * @returns {boolean} - True if value matches the type\n */\nfunction matchesType(value, type) {\n // Handle primitive constructors\n if (type === String) {\n return typeof value === 'string';\n }\n if (type === Number) {\n return typeof value === 'number' && !isNaN(value);\n }\n if (type === Boolean) {\n return typeof value === 'boolean';\n }\n if (type === Symbol) {\n return typeof value === 'symbol';\n }\n if (type === BigInt) {\n return typeof value === 'bigint';\n }\n if (type === Function) {\n return typeof value === 'function';\n }\n \n // Handle object constructors (including Array, Object, Date, etc.)\n if (type === Array) {\n return Array.isArray(value);\n }\n if (type === Object) {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n }\n \n // Handle other constructors (Date, RegExp, Map, Set, etc.)\n return value instanceof type;\n}\n\n/**\n * Gets a human-readable name for a type\n * @param {*} value - The value or constructor to get name for\n * @returns {string} - Human-readable type name\n */\nfunction getTypeName(value) {\n if (value === String) return 'String';\n if (value === Number) return 'Number';\n if (value === Boolean) return 'Boolean';\n if (value === Array) return 'Array';\n if (value === Object) return 'Object';\n if (value === Function) return 'Function';\n if (value === Date) return 'Date';\n if (value === RegExp) return 'RegExp';\n if (value === Promise) return 'Promise';\n if (value === Map) return 'Map';\n if (value === Set) return 'Set';\n if (value === WeakMap) return 'WeakMap';\n if (value === WeakSet) return 'WeakSet';\n if (value === Symbol) return 'Symbol';\n if (value === BigInt) return 'BigInt';\n if (value === Error) return 'Error';\n \n if (typeof value === 'string') return 'string';\n if (typeof value === 'number') return 'number';\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'symbol') return 'symbol';\n if (typeof value === 'bigint') return 'bigint';\n if (typeof value === 'function') return 'function';\n if (Array.isArray(value)) return 'Array';\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'object') {\n return value.constructor?.name || 'Object';\n }\n \n return 'unknown';\n}\n\n/**\n * Creates a type checker function for a specific parameter\n * @param {Function|Array<Function>} expectedType - Expected type(s)\n * @param {string} name - Parameter name\n * @returns {Function} - Type checker function\n */\nexport function createTypeChecker(expectedType, name = 'value') {\n return (value) => checkType(value, expectedType, name);\n}\n\n/**\n * Validates an object against a schema\n * @param {Object} obj - Object to validate\n * @param {Object} schema - Schema definition { prop: Type, prop2: [Type1, Type2] }\n * @param {string} objName - Name of the object for error messages\n */\nexport function validateObject(obj, schema, objName = 'object') {\n if (!obj || typeof obj !== 'object') {\n throw new TypeError(`${objName} must be an object`);\n }\n \n for (const [prop, expectedType] of Object.entries(schema)) {\n if (prop in obj) {\n checkType(obj[prop], expectedType, `${objName}.${prop}`);\n }\n }\n}\n\n/**\n * Creates a validator function for an object schema\n * @param {Object} schema - Schema definition\n * @param {string} objName - Name of the object\n * @returns {Function} - Validator function\n */\nexport function createObjectValidator(schema, objName = 'object') {\n return (obj) => validateObject(obj, schema, objName);\n}\n\n// Export the type map for advanced usage\nexport { TYPE_MAP };\n", "const DefinitionTypes = new Map();\nconst Definitions = new WeakMap();\nimport { createTypeChecker } from '../utils/typeChecker.js';\n\n/**\n * Creates a definition type with return type validation\n * @param {string} type - The definition type name\n * @param {Function|Array<Function>} returnTypes - Expected return type(s)\n * @returns {Function} - Definition creator function\n */\n\n\nexport const definitionType = (definition) => {\n if (Definitions.has(definition)) {\n return Definitions.get(definition);\n }\n return undefined;\n}\n\nexport const createDefinition = (type, returnTypes = []) => { \n // Create type checker for return values if returnTypes specified\n const returnTypeChecker = returnTypes.length > 0 ? createTypeChecker(returnTypes, 'return value') : null;\n \n if (DefinitionTypes.has(type)) {\n console.warn(`Definition type \"${type}\" already exists`);\n return DefinitionTypes.get(type);\n }\n\n const definitionType = (name, factory, ...defaultArgs) => {\n // Validate inputs using type checker\n createTypeChecker(String, 'name')(name);\n createTypeChecker(Function, 'factory')(factory);\n\n const definition = (...args) => {\n try {\n const combinedArgs = [...args, ...defaultArgs];\n const res = factory(...combinedArgs);\n \n if (returnTypeChecker && res === undefined) {\n throw new Error(`Factory ${type} must return a value for ${name}`);\n }\n\n // Use type checker to validate return value\n if (returnTypeChecker) {\n returnTypeChecker(res);\n }\n\n return res\n } catch (error) {\n console.error(`Error creating definition \"${name}\"`, error);\n throw error;\n }\n }\n\n Object.defineProperty(definition, '_name', {\n value: name,\n enumerable: false,\n configurable: false\n });\n\n Definitions.set(definition, type);\n\n return definition;\n }\n\n DefinitionTypes.set(type, definitionType);\n\n return definitionType;\n}; ", "export const isAsyncFn = (fn) => fn && fn.constructor && fn.constructor.name === 'AsyncFunction';\nexport const hasAsync = (stack, finalFn) => isAsyncFn(finalFn) || stack.some(isAsyncFn);\n", "export const normalizeArgs = (fallback, nextArgs) => {\n if (nextArgs.length === 0) return fallback;\n if (nextArgs.length === 1 && Array.isArray(nextArgs[0])) return nextArgs[0];\n return nextArgs;\n};", "export const toArray = (x) => x ? (Array.isArray(x) ? x : [x]) : [];", "// utils/asserts.js\n\nconst BAD_KEYS = new Set(['__proto__', 'prototype', 'constructor']);\nconst RESERVED_NAMESPACES = new Set(['use', 'install', 'uninstall', 'relay', 'state', 'debug']);\n\nconst MAX_NAME_LENGTH = 64;\nconst VALID_NAME = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/**\n * Throw if key is unsafe (__proto__, constructor, etc.)\n */\nexport function assertSafeKey(key, where = 'key') {\n if (BAD_KEYS.has(key)) {\n throw new Error(`Illegal key \"${key}\" in ${where}`);\n }\n}\n\n/**\n * Validate a namespace string: format, length, reserved words, proto poisoning.\n */\nexport function assertNamespace(ns) {\n assertSafeKey(ns, 'namespace');\n if (typeof ns !== 'string') {\n throw new Error(`Namespace must be a string, got ${typeof ns}`);\n }\n if (!VALID_NAME.test(ns)) {\n throw new Error(`Invalid namespace \"${ns}\". Must be a valid JS identifier`);\n }\n if (ns.length > MAX_NAME_LENGTH) {\n throw new Error(`Namespace \"${ns}\" too long (max ${MAX_NAME_LENGTH} chars)`);\n }\n if (RESERVED_NAMESPACES.has(ns)) {\n throw new Error(`Namespace \"${ns}\" is reserved`);\n }\n return ns;\n}\n\n/**\n * Validate an action or getter name within a namespace.\n */\nexport function assertMemberName(name, namespace, kind = 'member') {\n assertSafeKey(name, `${kind}:${namespace}`);\n if (typeof name !== 'string') {\n throw new Error(`${kind} name in ${namespace} must be a string`);\n }\n if (!VALID_NAME.test(name)) {\n throw new Error(`Invalid ${kind} name \"${name}\" in ${namespace}`);\n }\n if (name.length > MAX_NAME_LENGTH) {\n throw new Error(\n `${kind} name \"${name}\" in ${namespace} too long (max ${MAX_NAME_LENGTH})`\n );\n }\n return name;\n}\n", "/**\n * Deep merge utility - recursively merges objects with service defaults taking precedence\n * @param {Object} target - Target object (engine config)\n * @param {Object} source - Source object (service defaults/config)\n * @returns {Object} - Deeply merged object\n */\nexport function deepMerge(target, source) {\n if (!source || typeof source !== 'object') return source || target;\n if (!target || typeof target !== 'object') return source;\n \n const result = { ...target };\n \n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key]) &&\n target[key] && typeof target[key] === 'object' && !Array.isArray(target[key])) {\n result[key] = deepMerge(target[key], source[key]);\n } else {\n result[key] = source[key];\n }\n }\n }\n \n return result;\n}", "export const isDev = () => {\n const envs = ['DEVELOPMENT', 'TEST', 'DEV']\n \n // Node.js environment check\n if (typeof process !== 'undefined' && process?.env?.NODE_ENV) {\n return envs.includes(process.env.NODE_ENV.toUpperCase());\n }\n \n // Optional global fallback\n if (typeof globalThis !== 'undefined' && globalThis.__ENV__?.NODE_ENV) {\n return envs.includes(globalThis.__ENV__.NODE_ENV.toUpperCase());\n }\n \n return false;\n};", "// Core services\nimport { Cache } from './lib/cache/src/Cache.js';\nimport { Relay } from './lib/relay/src/main.js';\nimport { Logger, consoleSink, ringBufferSink } from './lib/logger/src/Logger.js';\n\n// Definitions\nimport { definitionType } from './definitions/createDefinition.js';\n\n// Utils\nimport { toArray, normalizeArgs, hasAsync, isAsyncFn } from './utils/index.js';\nimport { assertNamespace, assertMemberName } from './utils/asserts.js';\nimport { deepMerge } from './utils/deepMerge.js';\nimport { isDev } from './utils/isDev.js';\n\nexport class Engine {\n static options = {}\n \n static create(globalContext = {}) {\n return new Engine(globalContext, Engine.options);\n }\n\n // Per-target registries\n #nsByTarget = new WeakMap(); // target -> Map(namespace -> nsObj)\n #ctxByTarget = new WeakMap(); // target -> Map(namespace -> contextProxy)\n #middleware = new WeakMap(); // target -> Map(namespace -> [mw,...])\n #initialize = new WeakMap(); // target -> Map(namespace -> initFn)\n #uninstall = new WeakMap(); // target -> Map(namespace -> uninstallFn)\n #engineConfig = undefined;\n #globalContext = {};\n #RELAY = undefined;\n #LOG = undefined;\n #CACHE = undefined;\n\n static configure(options) {\n options = {...Engine.options, ...options};\n return {\n create: (globalContext = {}) => new Engine(globalContext, options),\n }\n }\n \n constructor(globalContext = {}, options = Engine.options) {\n this.#engineConfig = {...Engine.options, ...options};\n this.#globalContext = {...globalContext};\n \n for (const [key, value] of Object.entries(this.#globalContext)) {\n Object.defineProperty(this, key, {\n value: value,\n enumerable: true,\n configurable: false,\n writable: false,\n });\n }\n\n this.#CACHE = Cache.create();\n this.#RELAY = Relay.create();\n this.#LOG = Logger.create({\n level: (isDev() ? 'debug' : 'info'),\n sinks: [consoleSink, ringBufferSink(2000).sink],\n });\n }\n\n get cache() {\n return this.#CACHE;\n }\n\n get relay() {\n return this.#RELAY;\n }\n\n get log() {\n return this.#LOG;\n }\n\n use(...definitions) {\n return this.#use(definitions, this);\n }\n\n install(...services) {\n return this.#installTo(this, services);\n }\n\n /* ===========================\n * Core install pipeline\n * =========================== */\n #installTo(target, services) {\n try {\n\n for (const service of services) {\n if (!service.manifest?.namespace || !service.install) {\n throw new Error(`${service.manifest?.name ?? '<unknown service>'} must have a namespace and install method`);\n }\n\n if (Object.prototype.hasOwnProperty.call(target, service.manifest.namespace)) {\n throw new Error(`${service.manifest.namespace} already exists`);\n }\n\n const finalConfig = deepMerge(this.#engineConfig || {}, service.config || service.manifest.defaults || {});\n const nsObj = this.#getOrCreateNsObj(target, service.manifest.namespace);\n const context = this.#getOrCreateContext(target, service.manifest.namespace, nsObj, finalConfig, service.manifest);\n \n // Install dependencies onto the *context* as their target to isolate instances\n if (service.manifest.dependencies?.length) {\n const unique = service.manifest.dependencies.filter(d => d.unique);\n const nonUnique = service.manifest.dependencies.filter(d => !d.unique && !Object.prototype.hasOwnProperty.call(target, d.manifest.namespace));\n \n if (unique.length > 0) { \n this.#installTo(context, unique);\n }\n \n if (nonUnique.length > 0) {\n this.#installTo(target, nonUnique);\n }\n }\n\n // Handle config merging at Engine level for consistency\n\n const useContext = this.#createUseContext(target, service.manifest.namespace, nsObj, finalConfig, service.manifest);\n this.#use(service.install(useContext, finalConfig), target);\n }\n\n // Run per-target initialize hooks (once)\n const byInit = this.#initialize.get(target);\n if (byInit?.size) {\n for (const [ns, init] of byInit) {\n try { init(); } finally { byInit.delete(ns); }\n }\n this.#initialize.delete(target);\n }\n\n return target;\n } catch (error) {\n throw error;\n }\n }\n\n /* ===========================\n * Uninstall API\n * =========================== */\n uninstall(...namespaces) {\n // Global helper targets 'this'\n return this.#uninstallFrom(this, namespaces);\n }\n\n #uninstallFrom(target, namespaces) {\n const byUn = this.#uninstall.get(target);\n const byNs = this.#nsByTarget.get(target);\n const byCtx = this.#ctxByTarget.get(target);\n const mwByNs = this.#getMwMap(target);\n\n for (const ns of namespaces) {\n // run uninstall hook if present\n byUn?.get(ns)?.();\n byUn?.delete(ns);\n\n // middleware and initializers\n mwByNs?.delete(ns);\n this.#initialize.get(target)?.delete(ns);\n\n // remove namespace surface from target and caches\n if (Object.prototype.hasOwnProperty.call(target, ns)) {\n delete target[ns];\n }\n byNs?.delete(ns);\n\n // drop from each context (but keep contexts themselves alive)\n if (byCtx) {\n for (const ctx of byCtx.values()) {\n if (Object.prototype.hasOwnProperty.call(ctx, ns)) {\n delete ctx[ns];\n }\n }\n }\n }\n\n if (byUn && byUn.size === 0) this.#uninstall.delete(target);\n return this;\n }\n\n /* ===========================\n * Definition installers\n * =========================== */\n #use(definitions, target = this) {\n for (const definition of definitions) {\n if (!definition) continue;\n switch (definitionType(definition)) {\n case 'MIDDLEWARE':\n this.#installMiddleware(definition, target);\n break;\n case 'GETTERS':\n this.#installGetters(definition, target);\n break;\n case 'ACTIONS':\n this.#installActions(definition, target);\n break;\n case 'INITIALIZE':\n this.#installInitialize(definition, target);\n break;\n case 'UNINSTALL':\n this.#installUninstall(definition, target);\n break;\n default:\n throw new Error(`Unknown definition type: ${definitionType(definition)}`);\n }\n }\n return this;\n }\n\n #installActions(definition, target = this) {\n const namespace = assertNamespace(definition._name);\n const nsObj = this.#getOrCreateNsObj(target, namespace);\n const useContext = this.#createUseContext(target, namespace, nsObj);\n const actions = definition(useContext);\n\n const svcMw = this.#getMwMap(target).get(namespace) || [];\n\n for (let [name, action] of Object.entries(actions)) {\n name = assertMemberName(name, namespace, 'action');\n\n if (Object.prototype.hasOwnProperty.call(nsObj, name)) {\n throw new Error(`Action \"${namespace}.${name}\" already exists on this target`);\n }\n\n const final = this.#bindAndWrap(namespace, name, action, nsObj);\n\n if (svcMw.length === 0) {\n nsObj[name] = final;\n continue;\n }\n\n const run = this.#compose(svcMw, final);\n nsObj[name] = (...args) =>\n run(name, { namespace, action: name, args });\n }\n\n return this.#bindNsObjToTarget(target, namespace, nsObj);\n }\n\n #installGetters(definition, target = this) {\n const namespace = assertNamespace(definition._name);\n const nsObj = this.#getOrCreateNsObj(target, namespace);\n const useContext = this.#createUseContext(target, namespace, nsObj);\n const getters = definition(useContext);\n\n for (const [name, getter] of Object.entries(getters)) {\n assertMemberName(name, namespace, 'getter');\n const bound = getter.bind(nsObj);\n\n Object.defineProperty(nsObj, name, {\n get: () => bound(),\n enumerable: true,\n configurable: false,\n });\n }\n\n return this.#bindNsObjToTarget(target, namespace, nsObj);\n }\n\n #installMiddleware(definition, target = this) {\n const namespace = assertNamespace(definition._name);\n const nsObj = this.#getOrCreateNsObj(target, namespace);\n const useContext = this.#createUseContext(target, namespace, nsObj);\n const fns = definition(useContext); // fn or [fn]\n\n const mwByNs = this.#getMwMap(target);\n const list = mwByNs.get(namespace) || [];\n const add = toArray(fns).map(fn => {\n if (typeof fn !== 'function') {\n throw new Error('Middleware must be a function');\n }\n return fn;\n });\n\n mwByNs.set(namespace, list.concat(add));\n return this;\n }\n\n #installInitialize(definition, target = this) {\n const namespace = assertNamespace(definition._name);\n const nsObj = this.#getOrCreateNsObj(target, namespace);\n const useContext = this.#createUseContext(target, namespace, nsObj);\n const setupFn = () => definition(useContext);\n\n let byInit = this.#initialize.get(target);\n if (!byInit) { byInit = new Map(); this.#initialize.set(target, byInit); }\n byInit.set(namespace, setupFn);\n\n return this;\n }\n\n #installUninstall(definition, target = this) {\n const namespace = assertNamespace(definition._name);\n const nsObj = this.#getOrCreateNsObj(target, namespace);\n const useContext = this.#createUseContext(target, namespace, nsObj);\n const uninstall = () => definition(useContext);\n\n let byUn = this.#uninstall.get(target);\n if (!byUn) { byUn = new Map(); this.#uninstall.set(target, byUn); }\n byUn.set(namespace, uninstall);\n\n return this;\n }\n\n /* ===========================\n * Binding & composition\n * =========================== */\n #bindNsObjToTarget(target, namespace, nsObj) {\n // Ensure the target exposes the canonical ns object\n if (!Object.prototype.hasOwnProperty.call(target, namespace)) {\n Object.defineProperty(target, namespace, {\n value: nsObj,\n enumerable: true,\n configurable: true,\n writable: false,\n });\n } else {\n // Reuse whatever is already bound on the target as canonical\n nsObj = target[namespace];\n }\n \n // Update the ns cache for this target\n this.#nsByTarget.get(target)?.set(namespace, nsObj);\n \n return target;\n }\n \n\n #bindAndWrap(namespace, actionName, action, nsObj) {\n const bound = action.bind(nsObj);\n if (isAsyncFn(bound)) {\n return async (...args) => {\n try { return await bound(...args); }\n catch (e) {\n e.action = actionName;\n e.namespace = namespace;\n console.error(`Error in action \"${namespace}.${actionName}\":`, e);\n throw e;\n }\n };\n }\n return (...args) => {\n try { return bound(...args); }\n catch (e) {\n e.action = actionName;\n e.namespace = namespace;\n console.error(`Error in action \"${namespace}.${actionName}\":`, e);\n throw e;\n }\n };\n }\n\n #compose(stack, finalFn) {\n return hasAsync(toArray(stack), finalFn)\n ? this.#composeAsync(stack, finalFn)\n : this.#composeSync(stack, finalFn);\n }\n\n #composeSync(stack, finalFn) {\n const fns = toArray(stack);\n return (name, ctx) => {\n let i = -1;\n const dispatch = (k, args) => {\n if (k <= i) throw new Error('next() called multiple times');\n i = k;\n const mw = fns[k];\n if (!mw) return finalFn(...args);\n const local = { ...ctx, args };\n return this.#callMw(mw, name, local, (...nextArgs) => {\n const newArgs = normalizeArgs(args, nextArgs);\n return dispatch(k + 1, newArgs);\n });\n };\n return dispatch(0, ctx.args);\n };\n }\n\n #composeAsync(stack, finalFn) {\n const fns = toArray(stack);\n return async (name, ctx) => {\n let i = -1;\n const dispatch = async (k, args) => {\n if (k <= i) throw new Error('next() called multiple times');\n i = k;\n const mw = fns[k];\n if (!mw) return await finalFn(...args);\n const local = { ...ctx, args };\n return await this.#callMw(mw, name, local, (...nextArgs) => {\n const newArgs = normalizeArgs(args, nextArgs);\n return dispatch(k + 1, newArgs);\n });\n };\n return dispatch(0, ctx.args);\n };\n }\n\n #callMw(mw, name, local, next) {\n try { return mw(name, local, next); }\n catch (e) {\n e.middleware = mw.name || '<anon>';\n e.action = name;\n throw e;\n }\n }\n\n /* ===========================\n * Per-target helpers\n * =========================== */\n #getMwMap(target) {\n let m = this.#middleware.get(target);\n if (!m) { m = new Map(); this.#middleware.set(target, m); }\n return m;\n }\n\n #getOrCreateNsObj(target, namespace) {\n let byNs = this.#nsByTarget.get(target);\n if (!byNs) { byNs = new Map(); this.#nsByTarget.set(target, byNs); }\n if (byNs.has(namespace)) return byNs.get(namespace);\n\n const nsObj = Object.create(null);\n byNs.set(namespace, nsObj);\n return nsObj;\n }\n\n #getOrCreateContext(target, namespace, nsObj, config = this.#engineConfig || {}, manifest = {}) {\n let byCtx = this.#ctxByTarget.get(target);\n if (!byCtx) { byCtx = new Map(); this.#ctxByTarget.set(target, byCtx); }\n if (byCtx.has(namespace)) return byCtx.get(namespace);\n\n // Provide core services to the context\n const base = {\n ...this.#globalContext,\n log: this.#LOG.child({ ns: namespace }, (manifest.log?.sinks || [])),\n relay: this.#RELAY.createChannel(nsObj),\n cache: this.#CACHE,\n config,\n };\n\n const context = new Proxy(base, {\n get(b, prop, rx) {\n if (prop in b) return Reflect.get(b, prop, rx);\n return Reflect.get(target, prop, rx); // live fall-through to target namespaces\n },\n has(b, prop) { return prop in b || prop in target; },\n });\n\n byCtx.set(namespace, context);\n return context;\n }\n\n #createUseContext(target, namespace, nsObj, config = this.#engineConfig || {}, manifest = {}) {\n return (...keys) => {\n const ctx = this.#getOrCreateContext(target, namespace, nsObj, config, manifest);\n \n if (!keys || keys.length === 0) return ctx;\n if (keys.length === 1) return ctx[keys[0]];\n \n const out = new Array(keys.length);\n for (let i = 0; i < keys.length; i++) {\n out[i] = ctx[keys[i]];\n }\n return out;\n }\n } \n}\n", "import { createDefinition, definitionType } from './createDefinition.js';\nexport const defineMiddleware = createDefinition('MIDDLEWARE', [Function, Array]);\nexport const defineActions = createDefinition('ACTIONS', [Object]);\nexport const defineUninstall = createDefinition('UNINSTALL');\nexport const defineInitialize = createDefinition('INITIALIZE');\nexport const defineGetters = createDefinition('GETTERS', [Object]);\nexport { createDefinition, definitionType };", "// DefinitionBuilder.js\nimport { defineActions, defineGetters, defineMiddleware, defineInitialize, defineUninstall } from './defaults.js';\n\nexport class DefinitionBuilder {\n static create(namespace) {\n return new DefinitionBuilder(namespace);\n }\n\n #ns; #args;\n #slots = { MIDDLEWARE:null, GETTERS:null, ACTIONS:null, INITIALIZE:null, UNINSTALL:null };\n constructor(namespace) { this.#ns = namespace }\n\n #set(type, factory, creator) {\n if (this.#slots[type]) throw new Error(`${type} already defined for ${this.#ns}`);\n this.#slots[type] = creator(this.#ns, factory);\n }\n\n defineMiddleware = (factory) => this.#set('MIDDLEWARE', factory, defineMiddleware);\n defineGetters = (factory) => this.#set('GETTERS', factory, defineGetters);\n defineActions = (factory) => this.#set('ACTIONS', factory, defineActions);\n defineInitialize = (factory) => this.#set('INITIALIZE', factory, defineInitialize);\n defineUninstall = (factory) => this.#set('UNINSTALL', factory, defineUninstall);\n\n _toArray() {\n return [\n this.#slots.MIDDLEWARE,\n this.#slots.GETTERS,\n this.#slots.ACTIONS,\n this.#slots.INITIALIZE,\n this.#slots.UNINSTALL\n ].filter(Boolean);\n }\n}\n\n", "import { assertNamespace } from './utils/asserts.js';\nimport { DefinitionBuilder } from './definitions/DefinitionBuilder.js';\n\n\nexport class ServiceProvider {\n static #services = new Set();\n\n static manifest = {\n name: 'base',\n dependencies: [],\n version: '1.0.0',\n description: 'Base extension template',\n };\n\n static config = null;\n\n static unique = false;\n\n static configure(options = {}) {\n return {\n install: (useContext, config) => this.install(useContext, config),\n manifest: this.manifest,\n config: { ...(this.config || this.manifest.defaults || {}), ...options },\n unique: true,\n configured: true\n };\n }\n\n static install(useContext, config) { \n try {\n const {namespace} = this.manifest;\n assertNamespace(namespace);\n\n // instantiate\n const instance = new this();\n ServiceProvider.#services.add(instance);\n\n // bind context/config\n // bind config (frozen to avoid accidental mutation)\n Object.defineProperty(instance, 'config', {\n value: Object.freeze({ ...config }),\n writable: false,\n configurable: false,\n enumerable: false,\n });\n\n // expose both a live context getter AND the keyed accessor\n Object.defineProperty(instance, 'context', {\n get: () => useContext(), // always fresh, via your proxy\n configurable: false,\n enumerable: false,\n });\n \n Object.defineProperty(instance, 'useContext', {\n value: (...keys) => useContext(...keys),\n writable: false,\n configurable: false,\n enumerable: false,\n });\n\n const builder = DefinitionBuilder.create(namespace);\n\n if (instance.setup) {\n // Create properly bound context for setup pattern\n const setupContext = {\n defineActions: (factory) => builder.defineActions(() => factory(useContext, config)),\n defineMiddleware: (factory) => builder.defineMiddleware(() => factory(useContext, config)),\n defineGetters: (factory) => builder.defineGetters(() => factory(useContext, config)),\n defineInitialize: (factory) => builder.defineInitialize(() => factory(useContext, config)),\n defineUninstall: (factory) => builder.defineUninstall(() => factory(useContext, config))\n };\n const maybe = instance.setup(setupContext);\n return maybe?.then ? maybe.then(() => builder._toArray()) : builder._toArray();\n }\n\n if (instance.middleware) builder.defineMiddleware(() => instance.middleware(useContext, config));\n if (instance.getters) builder.defineGetters (() => instance.getters(useContext, config));\n if (instance.actions) builder.defineActions (() => instance.actions(useContext, config));\n if (instance.initialize) builder.defineInitialize(() => instance.initialize(useContext, config));\n if (instance.uninstall) builder.defineUninstall (() => instance.uninstall(useContext, config));\n\n return builder._toArray();\n } catch (error) {\n throw error;\n }\n }\n}", "const ENGINE_CONTEXT = Symbol('jucie.engine');\n\n/**\n * Registers the engine globally, but only if no engine has already been set.\n * @param {object} engine \n */\n\nexport function provideEngine(engine) {\n if (!globalThis[ENGINE_CONTEXT]) {\n globalThis[ENGINE_CONTEXT] = engine;\n }\n}\n\nexport function hasEngine() {\n return globalThis[ENGINE_CONTEXT] !== undefined;\n}\n\n/**\n * Forcefully override the engine in the global context.\n * Useful for testing or resetting.\n */\nexport function forceEngine(engine) {\n globalThis[ENGINE_CONTEXT] = engine;\n}\n\n/**\n * Retrieves the globally registered engine.\n */\nexport function getEngine() {\n return globalThis[ENGINE_CONTEXT] || null;\n}\n\n/**\n * Retrieves the globally registered engine.\n */\nexport function useEngine() {\n return getEngine();\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ORIGINAL_TYPE", "TrieNode", "_TrieNode", "data", "key", "value", "index", "val", "path", "result", "children", "obj", "newKeys", "existingKeys", "child", "arr", "newIndices", "_", "existingIndices", "Cache", "_Cache", "pathCopy", "updateFn", "newValue", "descriptor", "instance", "node", "childDescriptor", "actualKey", "createCache", "GLOBAL_NS_OBJ", "queueMicrotask", "fn", "Channel", "#nsObj", "#relay", "nsObj", "relay", "event", "handler", "payload", "fromNs", "toNs", "Relay", "_Relay", "#channels", "#events", "#onError", "config", "onError", "ch", "#listeners", "set", "#matchSide", "published", "constraint", "#matches", "publishedFrom", "publishedTo", "listenerFrom", "listenerTo", "from", "to", "listener", "off", "wrapped", "l", "#deliver", "err", "Levels", "Logger", "_Logger", "config", "#level", "#sinks", "#base", "level", "sinks", "base", "lvl", "extra", "additionalSinks", "k", "v", "msg", "data", "rec", "sink", "current", "total", "message", "name", "value", "unit", "consoleSink", "t", "ns", "rest", "ts", "fn", "ringBufferSink", "size", "buf", "fileSink", "filename", "options", "append", "maxSize", "logLine", "progressSink", "currentProgress", "width", "showPercentage", "updateProgressBar", "percentage", "filled", "bar", "pct", "metricsSink", "metrics", "collectTimings", "collectCounts", "metric", "prettySink", "colors", "icons", "colorMap", "iconMap", "color", "reset", "icon", "namespace", "formatted", "TYPE_MAP", "checkType", "value", "expectedType", "name", "type", "matchesType", "typeNames", "getTypeName", "createTypeChecker", "validateObject", "obj", "schema", "objName", "prop", "createObjectValidator", "DefinitionTypes", "Definitions", "definitionType", "definition", "createDefinition", "type", "returnTypes", "returnTypeChecker", "createTypeChecker", "name", "factory", "defaultArgs", "args", "combinedArgs", "res", "error", "isAsyncFn", "fn", "hasAsync", "stack", "finalFn", "normalizeArgs", "fallback", "nextArgs", "toArray", "x", "BAD_KEYS", "RESERVED_NAMESPACES", "MAX_NAME_LENGTH", "VALID_NAME", "assertSafeKey", "key", "where", "assertNamespace", "ns", "assertMemberName", "name", "namespace", "kind", "deepMerge", "target", "source", "result", "key", "isDev", "envs", "Engine", "_Engine", "globalContext", "#nsByTarget", "#ctxByTarget", "#middleware", "#initialize", "#uninstall", "#engineConfig", "#globalContext", "#RELAY", "#LOG", "#CACHE", "options", "key", "value", "Cache", "Relay", "Logger", "isDev", "consoleSink", "ringBufferSink", "definitions", "#use", "services", "#installTo", "target", "service", "finalConfig", "deepMerge", "nsObj", "#getOrCreateNsObj", "context", "#getOrCreateContext", "unique", "d", "nonUnique", "useContext", "#createUseContext", "byInit", "ns", "init", "error", "namespaces", "#uninstallFrom", "byUn", "byNs", "byCtx", "mwByNs", "#getMwMap", "ctx", "definition", "definitionType", "#installMiddleware", "#installGetters", "#installActions", "#installInitialize", "#installUninstall", "namespace", "assertNamespace", "actions", "svcMw", "name", "action", "assertMemberName", "final", "#bindAndWrap", "run", "#compose", "args", "#bindNsObjToTarget", "getters", "getter", "bound", "fns", "list", "add", "toArray", "fn", "setupFn", "uninstall", "actionName", "isAsyncFn", "e", "stack", "finalFn", "hasAsync", "#composeAsync", "#composeSync", "i", "dispatch", "k", "mw", "local", "#callMw", "nextArgs", "newArgs", "normalizeArgs", "next", "m", "config", "manifest", "base", "b", "prop", "rx", "keys", "out", "defineMiddleware", "createDefinition", "defineActions", "defineUninstall", "defineInitialize", "defineGetters", "DefinitionBuilder", "_DefinitionBuilder", "namespace", "#ns", "#args", "#slots", "#set", "type", "factory", "creator", "defineMiddleware", "defineGetters", "defineActions", "defineInitialize", "defineUninstall", "ServiceProvider", "_ServiceProvider", "#services", "options", "useContext", "config", "namespace", "assertNamespace", "instance", "keys", "builder", "DefinitionBuilder", "setupContext", "factory", "maybe", "error", "ENGINE_CONTEXT", "provideEngine", "engine", "hasEngine", "forceEngine", "getEngine", "useEngine"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jucie.io/engine",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.45",
|
|
4
4
|
"description": "A powerful, extensible service engine with middleware, async operations, and lifecycle management (includes core + services)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/main.js",
|
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
"types": "./dist/types.d.ts",
|
|
11
11
|
"import": "./dist/main.js"
|
|
12
12
|
},
|
|
13
|
+
"./service-provider": {
|
|
14
|
+
"types": "./dist/ServiceProvider.d.ts",
|
|
15
|
+
"import": "./dist/ServiceProvider.js"
|
|
16
|
+
},
|
|
13
17
|
"./command-manager": "./dist/services/command-manager.js",
|
|
14
18
|
"./message": "./dist/services/message.js",
|
|
15
19
|
"./painter": "./dist/services/painter.js",
|