@jucie.io/engine 1.1.39

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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/lib/relay/src/Relay.js", "../../src/utils/typeChecker.js", "../../src/definitions/createDefinition.js", "../../src/utils/asserts.js", "../../src/definitions/defaults.js", "../../src/definitions/DefinitionBuilder.js", "../../src/ServiceProvider.js", "../../src/global.js", "../../services/state-machine/src/StateMachine.js"],
4
+ "sourcesContent": ["// 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", "/**\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}; ", "// 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", "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}", "import { ServiceProvider, createDefinition, definitionType } from '@jucie.io/engine';\n\nconst DEFINITIONS_TYPES = {\n TRANSITION: 'TRANSITION',\n MACHINE: 'MACHINE'\n};\n\nexport const defineTransition = createDefinition(DEFINITIONS_TYPES.TRANSITION, [Object]);\nexport const defineMachine = createDefinition(DEFINITIONS_TYPES.MACHINE, [Object]);\n\nexport class StateMachine extends ServiceProvider {\n static manifest = {\n name: 'stateMachine',\n namespace: 'stateMachine',\n dependencies: [],\n version: '1.0.0',\n description: 'State machine extension for handling complex state transitions',\n author: '',\n license: 'MIT',\n homepage: '',\n repository: {\n type: 'git',\n url: ''\n },\n defaults: {\n debug: false\n }\n };\n\n #transitionsRef = null;\n\n initialize(useContext) {\n let state = useContext('state');\n if (!state) {\n state = createState().install(OnChange);\n }\n this.#transitionsRef = state.ref('_transitions');\n }\n\n actions(_, config) {\n return {\n create: (id) => {\n const machine = defineMachine(id, () => config);\n this.#use(machine);\n },\n use: (...machines) => {\n for (const machine of machines) {\n this.#use(machine);\n }\n },\n transition: (machineId, event) => this.transition(machineId, event),\n getCurrentState: (machineId) => this.getCurrentState(machineId)\n };\n }\n\n getters() {\n return {\n transitions: () => this.#transitionsRef.get()\n };\n }\n \n #use(machine) {\n if (definitionType(machine) !== DEFINITIONS_TYPES.MACHINE) {\n throw new Error('Machine must be a machine definition');\n }\n \n const id = machine._name;\n const machineConfig = machine();\n if (!id || typeof id !== 'string') {\n throw new Error('Machine ID must be a string');\n }\n if (!machineConfig || typeof machineConfig !== 'object') {\n throw new Error('Machine config must be an object');\n }\n this.createMachine(id, machineConfig);\n }\n\n createMachine(id, config) {\n this.#transitionsRef.set([id], {\n currentState: config.initialState,\n transitions: {},\n actions: {},\n conditions: {}\n });\n\n if (config.actions) {\n this.#transitionsRef.set([id, 'actions'], config.actions);\n }\n\n if (config.conditions) {\n this.#transitionsRef.set([id, 'conditions'], config.conditions);\n }\n\n if (config.transitions) {\n if (Array.isArray(config.transitions)) {\n for (const transitionDefinition of config.transitions) {\n if (definitionType(transitionDefinition) === DEFINITIONS_TYPES.TRANSITION) {\n const name = transitionDefinition._name;\n const { entry = null, loop = null, exit = null, on = null, actions = null, conditions = null } = transitionDefinition(this.useContext);\n this.#transitionsRef.set([id, 'transitions', name], { entry, loop, exit, on } );\n if (actions) {\n this.#transitionsRef.update([id, 'actions'], currentActions => ({ ...currentActions, ...actions }));\n }\n if (conditions) {\n this.#transitionsRef.update([id, 'conditions'], currentConditions => ({ ...currentConditions, ...conditions }));\n }\n }\n }\n } else {\n this.#transitionsRef.set([id, 'transitions'], config.transitions);\n }\n }\n\n // Run initial state's entry action if it exists\n const initialStateConfig = this.#transitionsRef.get([id, 'transitions', config.initialState]);\n if (initialStateConfig.entry) {\n this.executeAction(id, initialStateConfig.entry);\n }\n }\n\n\n findValidTransition(machineId, transitions) {\n if (!Array.isArray(transitions)) {\n if (!transitions.when) return transitions;\n return this.evaluateCondition(machineId, transitions.when) ? transitions : null;\n }\n\n // Handle array of transitions\n for (const t of transitions) {\n if (t.to) {\n // If it's an array of nested transitions\n if (Array.isArray(t.to)) {\n if (!t.when || this.evaluateCondition(machineId, t.when)) {\n const nestedTransition = this.findValidTransition(machineId, t.to);\n if (nestedTransition) return nestedTransition;\n }\n }\n // If it's a direct transition\n else {\n if (!t.when || this.evaluateCondition(machineId, t.when)) {\n return t;\n }\n }\n }\n }\n \n return null;\n }\n\n transition(machineId, event, args = {}) {\n const machine = this.#transitionsRef.get([machineId]);\n if (!machine) return;\n\n const currentState = machine.transitions[machine.currentState];\n if (!currentState) {\n console.warn(`[StateMachine] No current state found for machine \"${machine.currentState}\" in machine \"${machineId}\"`);\n return;\n }\n\n const transitions = currentState.on?.[event] || [];\n\n const validTransition = this.findValidTransition(machineId, transitions);\n\n if (validTransition) {\n // Execute transition actions and handle state changes\n if (validTransition.do) {\n this.executeAction(machineId, validTransition.do, args);\n }\n\n // Handle self transitions (both explicit and via 'self' keyword)\n const isSelfTransition = validTransition.to === machine.currentState || \n validTransition.to === 'self';\n \n if (isSelfTransition && currentState.loop) {\n this.executeAction(machineId, currentState.loop, args);\n return;\n }\n\n // Execute exit action of current state\n if (currentState.exit) {\n this.executeAction(machineId, currentState.exit);\n }\n\n // Update state (resolve 'self' to current state name)\n const nextStateName = validTransition.to === 'self' ? \n machine.currentState : \n validTransition.to;\n \n const nextState = machine.transitions[nextStateName];\n if (!nextState) {\n console.warn(`[StateMachine] No next state found for machine \"${machineId}\" - must be a valid state name`, nextStateName);\n return;\n }\n this.#transitionsRef.set([machineId, 'currentState'], nextStateName);\n\n // Execute entry action of next state\n if (nextState.entry) {\n this.executeAction(machineId, nextState.entry);\n }\n\n if (this.log) {\n console.log(`[StateMachine:${machineId}] ${machine.currentState} -> ${nextStateName}`);\n }\n }\n }\n\n executeAction(machineId, action, args = []) {\n if (!action) return;\n\n const machine = this.#transitionsRef.get([machineId]);\n \n // Handle string (action name)\n if (typeof action === 'string') {\n const namedAction = machine.actions[action];\n if (typeof namedAction === 'function') {\n namedAction(this._engine);\n } else {\n console.warn(`[StateMachine] Action \"${action}\" not found in machine \"${machineId}\"`);\n }\n return;\n }\n\n // Handle function\n if (typeof action === 'function') {\n action(this._engine, ...args);\n return;\n }\n\n console.warn(`[StateMachine] Invalid action type in machine \"${machineId}\" - must be string or function`, action);\n }\n\n evaluateCondition(machineId, condition) {\n if (!condition) return true;\n\n const machine = this.#transitionsRef.get([machineId]);\n\n // Handle string (condition name)\n if (typeof condition === 'string') {\n const namedCondition = machine.conditions[condition];\n if (typeof namedCondition === 'function') {\n return Boolean(namedCondition(this));\n } else {\n console.warn(`[StateMachine] Condition \"${condition}\" not found in machine \"${machineId}\"`);\n return false;\n }\n }\n\n // Handle function\n if (typeof condition === 'function') {\n return Boolean(condition(this));\n }\n\n // Handle computed\n if (this.reactors.isReactor(condition)) {\n return Boolean(condition.value);\n }\n\n if (condition?.all && Array.isArray(condition.all)) {\n return condition.all.every(c => this.evaluateCondition(machineId, c));\n }\n \n if (condition?.some && Array.isArray(condition.some)) {\n return condition.some.some(c => this.evaluateCondition(machineId, c));\n }\n\n console.warn(`[StateMachine] Invalid condition type in machine \"${machineId}\" - must be string, function, array, or computed`, condition);\n return false;\n }\n\n getCurrentState(machineId) {\n return this.#transitionsRef.get([machineId, 'currentState']);\n }\n} "],
5
+ "mappings": "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",
6
+ "names": ["GLOBAL_NS_OBJ", "checkType", "value", "expectedType", "name", "type", "matchesType", "typeNames", "getTypeName", "createTypeChecker", "DefinitionTypes", "Definitions", "definitionType", "definition", "createDefinition", "type", "returnTypes", "returnTypeChecker", "createTypeChecker", "name", "factory", "defaultArgs", "args", "combinedArgs", "res", "error", "BAD_KEYS", "RESERVED_NAMESPACES", "MAX_NAME_LENGTH", "VALID_NAME", "assertSafeKey", "key", "where", "assertNamespace", "ns", "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", "DEFINITIONS_TYPES", "defineTransition", "createDefinition", "defineMachine", "StateMachine", "ServiceProvider", "#transitionsRef", "useContext", "state", "_", "config", "id", "machine", "#use", "machines", "machineId", "event", "definitionType", "machineConfig", "transitionDefinition", "name", "entry", "loop", "exit", "on", "actions", "conditions", "currentActions", "currentConditions", "initialStateConfig", "transitions", "t", "nestedTransition", "args", "currentState", "validTransition", "nextStateName", "nextState", "action", "namedAction", "condition", "namedCondition", "c"]
7
+ }
@@ -0,0 +1,5 @@
1
+ var Nt=Object.defineProperty;var I=(t,e)=>()=>(t&&(e=t(t=0)),e);var M=(t,e)=>{for(var r in e)Nt(t,r,{get:e[r],enumerable:!0})};var y,F=I(()=>{y=class t{static metaFile="index.state";initialized=!1;constructor(e={}){this.config=e}static async create(e){let r=new this(e);return await r.initialize(e),r}async initialize(){this.initialized=!0}async cleanup(){this.initialized=!1}async read(e){throw new Error("read() not implemented")}async write(e,r){throw new Error("write() not implemented")}async delete(e){throw new Error("delete() not implemented")}async exists(e){throw new Error("exists() not implemented")}async hasIndex(){return await this.exists(t.metaFile)}async getIndex(){return await this.read(t.metaFile)}async setIndex(e){return this.write(t.metaFile,e)}getEncodingFromMimeType(e){return!e||e.startsWith("text/")||e==="application/json"?"utf-8":"binary"}}});var It={};M(It,{IndexedDBProvider:()=>pe,default:()=>fr});var pe,fr,kt=I(()=>{F();pe=class extends y{constructor(e={}){e.dbName=e.dbName||"jucie-storage",e.storeName=e.storeName||"files",super(e),this.db=null}async initialize(e){if(this.initialized)return this;try{return this.db=await new Promise((r,n)=>{let s=indexedDB.open(this.config.dbName,1);s.onerror=()=>n(s.error),s.onsuccess=()=>r(s.result),s.onupgradeneeded=i=>{let o=i.target.result;o.objectStoreNames.contains(this.config.storeName)||o.createObjectStore(this.config.storeName)}}),this.initialized=!0,this}catch(r){throw new Error(`Failed to actions IndexedDB: ${r.message}`)}}async destroy(){this.db&&(this.db.close(),await new Promise((e,r)=>{let n=indexedDB.deleteDatabase(this.config.dbName);n.onerror=()=>r(n.error),n.onsuccess=()=>e()}),this.db=null,this.initialized=!1)}async cleanup(){this.db&&(this.db.close(),this.db=null),this.initialized=!1}async read(e){try{let r=await new Promise((n,s)=>{let c=this.db.transaction(this.config.storeName,"readonly").objectStore(this.config.storeName).get(e);c.onerror=()=>s(c.error),c.onsuccess=()=>n(c.result)});if(!r)throw new Error(`File not found: ${e}`);return r}catch(r){throw new Error(`Failed to read file ${e}: ${r.message}`)}}async write(e,r){try{return await new Promise((n,s)=>{let c=this.db.transaction(this.config.storeName,"readwrite").objectStore(this.config.storeName).put(r,e);c.onerror=()=>s(c.error),c.onsuccess=()=>n()}),!0}catch(n){throw new Error(`Failed to write file ${e}: ${n.message}`)}}async delete(e){try{return await new Promise((r,n)=>{let o=this.db.transaction(this.config.storeName,"readwrite").objectStore(this.config.storeName).delete(e);o.onerror=()=>n(o.error),o.onsuccess=()=>r()}),!0}catch(r){throw new Error(`Failed to delete file ${e}: ${r.message}`)}}async exists(e){try{return await new Promise((n,s)=>{let c=this.db.transaction(this.config.storeName,"readonly").objectStore(this.config.storeName).count(e);c.onerror=()=>s(c.error),c.onsuccess=()=>n(c.result)})>0}catch(r){throw new Error(`Failed to check if file exists ${e}: ${r.message}`)}}},fr=pe});var $t={};M($t,{FirebaseProvider:()=>me,default:()=>dr});import Be from"firebase-admin";var me,dr,Tt=I(()=>{F();me=class extends y{constructor(e={}){super(e)}async initialize(e){if(this.initialized)return this;try{this.app=Be.app(),this.storage=this.app.storage()}catch{this.app=Be.initializeApp({credential:Be.credential.cert(e.credentials),storageBucket:e.storageBucket}),this.storage=this.app.storage()}return this.initialized=!0,this}async cleanup(){this.app&&(await this.app.delete(),this.app=null,this.storage=null)}resolveFile(e){return this.storage.bucket(this.config.bucket).file(e)}async read(e){let r=this.resolveFile(e);try{let[n]=await r.exists();if(!n)throw new Error(`File not found: ${e}`);let[s]=await r.download();return s.toString()}catch(n){throw n.message.includes("File not found")?n:new Error(`Failed to read file ${e}: ${n.message}`)}}async exists(e){let r=this.resolveFile(e);try{let[n]=await r.exists();return n}catch(n){throw new Error(`Failed to check if file exists ${e}: ${n.message}`)}}async write(e,r){let n=this.resolveFile(e);try{let s=JSON.stringify(r,null,2);return await n.save(s,{metadata:{contentType:"application/json"}}),!0}catch(s){throw new Error(`Failed to write file ${e}: ${s.message}`)}}async delete(e){let r=this.resolveFile(e);try{return await r.delete(),!0}catch(n){throw new Error(`Failed to delete file ${e}: ${n.message}`)}}},dr=me});var Rt={};M(Rt,{LocalProvider:()=>ye,default:()=>yr});import{promises as N}from"fs";import{dirname as pr,resolve as mr}from"path";var ye,yr,jt=I(()=>{F();ye=class extends y{constructor(e={}){e.root=e.root||process.cwd(),super(e)}async initialize(e){return await N.mkdir(e.root,{recursive:!0}),this.initialized=!0,this}async cleanup(){this.initialized=!1}async exists(e){let r=this.resolvePath(e);try{return await N.access(r),!0}catch(n){if(n.code==="ENOENT")return!1;throw new Error(`Failed to check file existence: ${n.message}`)}}async read(e,r){let n=this.resolvePath(e),s=this.getEncodingFromMimeType(r?.mimeType);try{return await N.readFile(n,s)}catch(i){throw i.code==="ENOENT"?new Error(`File not found: ${n}`):new Error(`Failed to read file ${e}: ${i.message}`)}}async write(e,r){let n=this.resolvePath(e),s=pr(n);try{return await N.mkdir(s,{recursive:!0}),await N.writeFile(n,JSON.stringify(r,null,2),"utf-8"),!0}catch(i){throw new Error(`Failed to write file: ${i.message}`)}}async delete(e){let r=this.resolvePath(e);try{return await N.unlink(r),!0}catch(n){throw n.code==="ENOENT"?new Error(`File not found: ${r}`):new Error(`Failed to delete file: ${n.message}`)}}resolvePath(e){return e?mr(this.config.root,e):this.config.root}},yr=ye});var vt={};M(vt,{MinioProvider:()=>ge,default:()=>Cr});import{S3Client as gr,GetObjectCommand as wr,PutObjectCommand as br,DeleteObjectCommand as xr,HeadObjectCommand as Er,CreateBucketCommand as Ar}from"@aws-sdk/client-s3";var ge,Cr,Dt=I(()=>{F();ge=class extends y{constructor(e={}){super(e)}async initialize(e){if(this.initialized)return this;this.client=new gr({endpoint:e.endpoint||"http://localhost:9000",region:e.region||"us-east-1",credentials:{accessKeyId:e.accessKeyId||"minioadmin",secretAccessKey:e.secretAccessKey||"minioadmin"},forcePathStyle:!0}),this.bucket=e.bucket;try{await this.client.send(new Ar({Bucket:this.bucket}))}catch(r){if(r.name!=="BucketAlreadyExists"&&r.Code!=="BucketAlreadyOwnedByYou")throw new Error(`Failed to actions storage: ${r.message}`)}return this.initialized=!0,this}async cleanup(){this.client.destroy(),this.client=null}async read(e){try{let r=new wr({Bucket:this.bucket,Key:e});return await(await this.client.send(r)).Body.transformToString()}catch(r){throw r.name==="NoSuchKey"?new Error(`File not found: ${e}`):new Error(`Failed to read file ${e}: ${r.message}`)}}async exists(e){try{let r=new Er({Bucket:this.bucket,Key:e});return await this.client.send(r),!0}catch(r){if(r.name==="NotFound")return!1;throw new Error(`Failed to check if file exists ${e}: ${r.message}`)}}async write(e,r){try{let n=new br({Bucket:this.bucket,Key:e,Body:JSON.stringify(r,null,2),ContentType:"application/json"});return await this.client.send(n),!0}catch(n){throw new Error(`Failed to write file ${e}: ${n.message}`)}}async delete(e){try{let r=new xr({Bucket:this.bucket,Key:e});return await this.client.send(r),!0}catch(r){throw r.name==="NoSuchKey"?new Error(`File not found: ${e}`):new Error(`Failed to delete file ${e}: ${r.message}`)}}},Cr=ge});var Pt={};M(Pt,{S3Provider:()=>we,default:()=>Rr});import{S3Client as Sr,GetObjectCommand as Or,PutObjectCommand as Ir,DeleteObjectCommand as kr,HeadObjectCommand as $r,CreateBucketCommand as Tr}from"@aws-sdk/client-s3";var we,Rr,Ft=I(()=>{F();we=class extends y{constructor(e={}){super(e),this.client=null}async initialize(e){if(this.initialized)return this;this.client=new Sr({region:e.region||"us-east-1",endpoint:e.endpoint,credentials:e.credentials||{accessKeyId:e.accessKeyId,secretAccessKey:e.secretAccessKey},forcePathStyle:!0}),this.bucket=e.bucket;try{await this.client.send(new Tr({Bucket:this.bucket}))}catch(r){if(r.name!=="BucketAlreadyExists"&&r.Code!=="BucketAlreadyOwnedByYou")throw new Error(`Failed to actions storage: ${r.message}`)}return this.initialized=!0,this}async cleanup(){this.client.destroy(),this.client=null}async read(e){try{let r=new Or({Bucket:this.bucket,Key:e});return await(await this.client.send(r)).Body.transformToString()}catch(r){throw r.name==="NoSuchKey"?new Error(`File not found: ${e}`):new Error(`Failed to read file ${e}: ${r.message}`)}}async exists(e){try{let r=new $r({Bucket:this.bucket,Key:e});return await this.client.send(r),!0}catch(r){if(r.name==="NotFound")return!1;throw new Error(`Failed to check if file exists ${e}: ${r.message}`)}}async write(e,r){try{let n=new Ir({Bucket:this.bucket,Key:e,Body:JSON.stringify(r,null,2),ContentType:"application/json"});return await this.client.send(n),!0}catch(n){throw new Error(`Failed to write file ${e}: ${n.message}`)}}async delete(e){try{let r=new kr({Bucket:this.bucket,Key:e});return await this.client.send(r),!0}catch(r){throw r.name==="NoSuchKey"?new Error(`File not found: ${e}`):new Error(`Failed to delete file ${e}: ${r.message}`)}}},Rr=we});var Dr=Object.freeze(Object.create(null));function ze(t,e,r="value"){if(Array.isArray(e)){for(let s of e)if(Ue(t,s))return!0;let n=e.map(H).join(" | ");throw new TypeError(`${r} must be one of: ${n}. Got ${H(t)}`)}if(!Ue(t,e))throw new TypeError(`${r} must be ${H(e)}. Got ${H(t)}`);return!0}function Ue(t,e){return e===String?typeof t=="string":e===Number?typeof t=="number"&&!isNaN(t):e===Boolean?typeof t=="boolean":e===Symbol?typeof t=="symbol":e===BigInt?typeof t=="bigint":e===Function?typeof t=="function":e===Array?Array.isArray(t):e===Object?t!==null&&typeof t=="object"&&!Array.isArray(t):t instanceof e}function H(t){return t===String?"String":t===Number?"Number":t===Boolean?"Boolean":t===Array?"Array":t===Object?"Object":t===Function?"Function":t===Date?"Date":t===RegExp?"RegExp":t===Promise?"Promise":t===Map?"Map":t===Set?"Set":t===WeakMap?"WeakMap":t===WeakSet?"WeakSet":t===Symbol?"Symbol":t===BigInt?"BigInt":t===Error?"Error":typeof t=="string"?"string":typeof t=="number"?"number":typeof t=="boolean"?"boolean":typeof t=="symbol"?"symbol":typeof t=="bigint"?"bigint":typeof t=="function"?"function":Array.isArray(t)?"Array":t===null?"null":t===void 0?"undefined":typeof t=="object"?t.constructor?.name||"Object":"unknown"}function B(t,e="value"){return r=>ze(r,t,e)}var be=new Map,Mt=new WeakMap;var A=(t,e=[])=>{let r=e.length>0?B(e,"return value"):null;if(be.has(t))return console.warn(`Definition type "${t}" already exists`),be.get(t);let n=(s,i,...o)=>{B(String,"name")(s),B(Function,"factory")(i);let c=(...a)=>{try{let l=[...a,...o],d=i(...l);if(r&&d===void 0)throw new Error(`Factory ${t} must return a value for ${s}`);return r&&r(d),d}catch(l){throw console.error(`Error creating definition "${s}"`,l),l}};return Object.defineProperty(c,"_name",{value:s,enumerable:!1,configurable:!1}),Mt.set(c,t),c};return be.set(t,n),n};var zt=new Set(["__proto__","prototype","constructor"]),Vt=new Set(["use","install","uninstall","relay","state","debug"]),Ve=64,Kt=/^[a-zA-Z_$][a-zA-Z_$0-9]*$/;function Wt(t,e="key"){if(zt.has(t))throw new Error(`Illegal key "${t}" in ${e}`)}function xe(t){if(Wt(t,"namespace"),typeof t!="string")throw new Error(`Namespace must be a string, got ${typeof t}`);if(!Kt.test(t))throw new Error(`Invalid namespace "${t}". Must be a valid JS identifier`);if(t.length>Ve)throw new Error(`Namespace "${t}" too long (max ${Ve} chars)`);if(Vt.has(t))throw new Error(`Namespace "${t}" is reserved`);return t}var Ee=A("MIDDLEWARE",[Function,Array]),Ae=A("ACTIONS",[Object]),Ce=A("UNINSTALL"),Se=A("INITIALIZE"),Oe=A("GETTERS",[Object]);var q=class t{static create(e){return new t(e)}#e;#t;#n={MIDDLEWARE:null,GETTERS:null,ACTIONS:null,INITIALIZE:null,UNINSTALL:null};constructor(e){this.#e=e}#r(e,r,n){if(this.#n[e])throw new Error(`${e} already defined for ${this.#e}`);this.#n[e]=n(this.#e,r)}defineMiddleware=e=>this.#r("MIDDLEWARE",e,Ee);defineGetters=e=>this.#r("GETTERS",e,Oe);defineActions=e=>this.#r("ACTIONS",e,Ae);defineInitialize=e=>this.#r("INITIALIZE",e,Se);defineUninstall=e=>this.#r("UNINSTALL",e,Ce);_toArray(){return[this.#n.MIDDLEWARE,this.#n.GETTERS,this.#n.ACTIONS,this.#n.INITIALIZE,this.#n.UNINSTALL].filter(Boolean)}};var L=class t{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:(r,n)=>this.install(r,n),manifest:this.manifest,config:{...this.config||this.manifest.defaults||{},...e},unique:!0,configured:!0}}static install(e,r){try{let{namespace:n}=this.manifest;xe(n);let s=new this;t.#e.add(s),Object.defineProperty(s,"config",{value:Object.freeze({...r}),writable:!1,configurable:!1,enumerable:!1}),Object.defineProperty(s,"context",{get:()=>e(),configurable:!1,enumerable:!1}),Object.defineProperty(s,"useContext",{value:(...o)=>e(...o),writable:!1,configurable:!1,enumerable:!1});let i=q.create(n);if(s.setup){let o={defineActions:a=>i.defineActions(()=>a(e,r)),defineMiddleware:a=>i.defineMiddleware(()=>a(e,r)),defineGetters:a=>i.defineGetters(()=>a(e,r)),defineInitialize:a=>i.defineInitialize(()=>a(e,r)),defineUninstall:a=>i.defineUninstall(()=>a(e,r))},c=s.setup(o);return c?.then?c.then(()=>i._toArray()):i._toArray()}return s.middleware&&i.defineMiddleware(()=>s.middleware(e,r)),s.getters&&i.defineGetters(()=>s.getters(e,r)),s.actions&&i.defineActions(()=>s.actions(e,r)),s.initialize&&i.defineInitialize(()=>s.initialize(e,r)),s.uninstall&&i.defineUninstall(()=>s.uninstall(e,r)),i._toArray()}catch(n){throw n}}};var Rn=Symbol("jucie.engine");import qe from"crypto";var He="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var qt=128,C,k,Yt=t=>{!C||C.length<t?(C=Buffer.allocUnsafe(t*qt),qe.randomFillSync(C),k=0):k+t>C.length&&(qe.randomFillSync(C),k=0),k+=t};var Ye=(t=21)=>{Yt(t|=0);let e="";for(let r=k-t;r<k;r++)e+=He[C[r]&63];return e};var p={DIRECTORY:"directory",FILE:"file",LOCAL:"local",INDEX:"index"},Jt={[p.FILE]:"uk_",[p.DIRECTORY]:"dk_",[p.LOCAL]:"lk_",[p.INDEX]:"ik_"},Xt=t=>(t.split("").reduce((r,n)=>r+n.charCodeAt(0),0)%100).toString().padStart(2,"0");async function Zt(t=32){let e;if(typeof crypto<"u"&&crypto.getRandomValues)e=new Uint8Array(t),crypto.getRandomValues(e);else{let{randomBytes:s}=await import("node:crypto");e=new Uint8Array(s(t))}let r=String.fromCharCode(...e);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var _=async(t=p.PROJECT,e=null)=>{let r=t===p.PROJECT||t===p.LOCAL?30:14,n=e?e-2:r,s=await Zt(n),i=Xt(s),o=s+i;return`${Jt[t]}${o}`};var Je=async(t,e,r={})=>{let n=new Date().toISOString(),s=new Date().toISOString();switch(t){case"file":return{type:t,id:e,version:0,created:n,updated:s,meta:r,accessKey:await _(p.FILE),dependencies:[],access:{granted:{},denied:{}}};case"directory":return{type:t,id:e,children:[],created:n,updated:s,meta:r,accessKey:await _(p.DIRECTORY),access:{granted:{},denied:{}}}}};function Xe(t){return typeof window<"u"&&window.requestIdleCallback?window.requestIdleCallback(t,{timeout:100}):typeof window<"u"?window.requestAnimationFrame?window.requestAnimationFrame(()=>{setTimeout(t,0)}):setTimeout(t,0):(typeof t=="function"&&t(),null)}var Y=class{constructor(){this.roots=new Map,this.pending=new Set,this.onCompleteCallbacks=new Set,this.onNextIdle=new Set,this.idleScheduled=!1}markAsDirty(e){if(!e.isDirty&&(e.isDirty=!0,e.isAsync||e.immediate||e.effects&&e.effects.size>0?this.scheduleRecomputation(e):(this.onNextIdle.add(e),this.idleScheduled||(this.idleScheduled=!0,Xe(()=>{for(let r of this.onNextIdle)this.pending.add(r);this.flush(null),this.onNextIdle.clear(),this.idleScheduled=!1}))),e.dependants&&e.dependants.size>0)){let r=[],n=new Set;e.dependants.forEach(s=>{let i=s.deref();i?(this.markAsDirty(i),n.add(i._id)):r.push(s)}),r.forEach(s=>e.dependants.delete(s)),e.dependantIds=n}}scheduleRecomputation(e){if(!e.debounce)return this.recompute(e);let r=Date.now(),n=e._lastComputeTime?r-e._lastComputeTime:1/0;return!e._hasPendingDebounce||n>=e.debounce?(clearTimeout(e._debounceTimer),e._hasPendingDebounce=!0,e._lastComputeTime=r,e._debounceTimer=setTimeout(()=>{e._hasPendingDebounce=!1,e._debounceTimer=null},e.debounce),this.recompute(e)):e.cachedValue}removeReactive(e){this.pending.delete(e),this.onNextIdle.delete(e)}recompute(e){return this.pending.add(e),this.flush(e)}flush(e){let r=Array.from(this.pending);this.pending.clear();let n=this.sortByDependencies(r);for(let s of n)this.onNextIdle.delete(s),s.compute();for(let s of this.onCompleteCallbacks)try{s()}catch(i){console.error("Error in batch completion callback:",i)}if(e)return n.includes(e)||e.compute(),e.cachedValue}sortByDependencies(e){let r=[],n=new Set,s=new Set,i=o=>{if(s.has(o)||n.has(o))return;s.add(o);let c=o.dependants;c&&c.size>0&&c.forEach(a=>{let l=a.deref();l&&e.includes(l)&&i(l)}),s.delete(o),n.add(o),r.unshift(o)};for(let o of e)n.has(o)||i(o);return r}};var u=class t{static computationManager=new Y;static awaitingRecomputation=new Set;static reactives=new WeakMap;static currentlyComputing=null;static computationStack=[];static currentDepth=0;static effectsCache=new Set;static processingEffects=!1;static _nextId=1;static config={maxDepth:2e3};static ctx={};static nextId(){return t._nextId++}static addContext(e,r){if(!e||typeof e!="string")throw new Error("Invalid context key");if(typeof r>"u")throw new Error("Invalid context value");if(e in t.ctx)throw new Error("Context key already exists");t.ctx[e]=r}static useContext(e){if(!e||e.length===0)return t.ctx;if(e.length===1)return t.ctx[e[0]];let r=new Array(e.length);for(let n=0;n<e.length;n++)r[n]=t.ctx[e[n]];return r}static hasContext(e){if(!e||e.length===0)return Object.keys(t.ctx).length>0;if(e.length===1)return e[0]in t.ctx;for(let r of e)if(!(r in t.ctx))return!1;return!0}static clearContext(){t.ctx={}}static begin(e){t.awaitingRecomputation.has(e)&&t.awaitingRecomputation.delete(e);let r=t.computationStack.indexOf(e);if(r!==-1){if(e.isAsync){t.computationStack.splice(r,1),t.computationStack.push(e),t.currentlyComputing=e;return}let n=t.computationStack.slice(r).concat(e),s=new Error(`Circular dependency detected: ${n.map(i=>i).join(" -> ")}`);throw s.name="CircularDependencyError",s.displayed=!1,s}if(t.currentDepth>=t.config.maxDepth)throw new Error(`Maximum reactive depth of ${t.config.maxDepth} exceeded`);t.computationStack.push(e),t.currentlyComputing=e,t.currentDepth++}static end(e){if(e.isAsync){t.computationStack.splice(t.computationStack.indexOf(e),1),t.currentlyComputing=t.computationStack[t.computationStack.length-1]||null,t.currentDepth--;return}t.computationStack.pop(),t.currentlyComputing=t.computationStack[t.computationStack.length-1]||null,t.currentDepth--}static addEffect(e,r){let n=t.reactives.get(e);return n.isDirty&&t.computationManager.scheduleRecomputation(n),n.effects||(n.effects=new Set),n.effects.add(r),()=>t.removeEffect(e,r)}static removeEffect(e,r){let n=t.reactives.get(e);n.effects&&n.effects.delete(r)}static recompute(e){return t.awaitingRecomputation.has(e)||t.awaitingRecomputation.add(e),t.computationManager.scheduleRecomputation(e)}static callEffects(e){t.effectsCache.add(e),t.processingEffects||(t.processingEffects=!0,setTimeout(()=>{t.processEffectsCache(),t.processingEffects=!1},0))}static processEffectsCache(){let e=new Set(t.effectsCache);t.effectsCache.clear();for(let r of e)try{(r.effects||new Set).forEach(s=>{s&&s(r.cachedValue)})}catch(n){console.error(`Error in reactive ${r._id} effect:`,n)}t.effectsCache.size>0&&setTimeout(()=>{t.processEffectsCache()},0)}static markAsDirty(e){if(!e.isDirty){e.isDirty=!0,(e.immediate||e.effects&&e.effects.size>0)&&t.computationManager.scheduleRecomputation(e);let r=[],n=new Set;e.dependants.forEach(s=>{let i=s.deref();i?(t.markAsDirty(i),n.add(i._id)):r.push(s)}),r.forEach(s=>e.dependants.delete(s)),e.dependantIds=n}}static destroy(e){let r=t.reactives.get(e);t.computationManager.removeReactive(r),t.reactives.delete(e)}};var Ze=t=>u.reactives.has(t),J=(t,e)=>{if(!Ze(t))throw new Error("Invalid effect getter");if(!e||typeof e!="function")throw new Error("Invalid effect function");return u.addEffect(t,e)};var Qe=t=>typeof t=="function"&&(t.constructor.name==="AsyncFunction"||t.constructor.name==="AsyncGeneratorFunction");var Ie=class t{static create(e,r={}){let n=new t(e,r);return u.reactives.set(n.getter,n),n.getter}constructor(e,r={}){this.fn=e,this.isAsync=Qe(e),this.pendingResolve=void 0,this.roots=new Set,this.dependants=new Set,this.dependantIds=new Set,this.effects=new Set(Array.isArray(r.effects)?r.effects:[]),this.cachedValue=r.initialValue||void 0,this.isDirty=!0,this.debounce=r.debounce||0,this.onAccess=r.onAccess||void 0,this.detatched=r.detatched||!1,this.immediate=r.immediate||!1,this.context=r.context||void 0,this.useContext=()=>this.context?this.context:u.hasContext()?u.useContext():void 0,this.resolvers=[],this.rejectors=[],this._id=u.nextId(),this._lastComputeTime=void 0,this._hasPendingDebounce=!1,this._debounceTimer=void 0,this._computationId=0,this.getter=this.#e.bind(this),this.immediate&&this.compute()}compute(){u.begin(this);try{if(!this.isAsync)return this.cachedValue=this.fn(this.useContext(),this.cachedValue),this.isDirty=!1,this.cachedValue;this._computationId=(this._computationId||0)+1;let e=this._computationId;return this.pendingResolve=this.fn(this.useContext(),this.cachedValue),this.pendingResolve.then(r=>(this._computationId===e&&(this.resolvers.forEach(n=>n(r)),this.resolvers=[],this.cachedValue=r,this.isDirty=!1),r)).catch(r=>{this._computationId===e&&(this.rejectors.forEach(n=>n(r)),this.rejectors=[])}).finally(()=>{this.pendingResolve=null,this._computationId===e&&(u.end(this),u.callEffects(this))}),this.cachedValue=new Promise((r,n)=>{this.resolvers.push(r),this.rejectors.push(n)}),this.cachedValue}finally{this.isAsync||(u.end(this),u.callEffects(this))}}#e(){try{return!this.detatched&&u.currentlyComputing&&u.currentlyComputing!==this&&!this.dependantIds.has(u.currentlyComputing._id)&&(this.dependantIds.add(u.currentlyComputing._id),this.dependants.add(new WeakRef(u.currentlyComputing))),this.isDirty?u.recompute(this):this.isAsync?Promise.resolve(this.cachedValue):this.cachedValue}catch(e){throw e}finally{this.onAccess&&this.onAccess(this.cachedValue)}}},$=(t,e={})=>Ie.create(t,e);var ke=class t{static create(e,r,n={}){let s=new t(e,r,n);return u.reactives.set(s.getter,s),()=>u.destroy(s.getter)}constructor(e,r,n={}){this._id=u.nextId(),this.getter=e,this.isDirty=!1,this.subscriber=r,this.debounce=n.debounce||0,this.onAccess=n.onAccess||null,this.immediate=!0,this._hasPendingDebounce=!1,this._lastComputeTime=null,this._debounceTimer=null,this.dependants=new Set,this.dependantIds=new Set,this.unsubscribe=()=>u.computationManager.removeReactive(this),u.begin(this),this.cachedValue=this.getter(),this.subscriber(this.cachedValue),u.end(this)}compute(){try{this.cachedValue=this.getter(),this.subscriber(this.cachedValue),this.isDirty=!1}catch(e){throw e}}},$e=(t,e,r={})=>ke.create(t,e,r);var gs=Symbol();var b="*",tr=Symbol("STATE_CONTEXT"),Us=Symbol("MATCHER"),T="CREATED",R="DELETED",j="UPDATED",X=1,v=2,Z=4,Q=8;function rr(t){let e="";for(let r=0;r<t.length;r++){let n=t[r];n==="~"?e+="~~":n==="."?e+="~d":e+=n}return e.length===0?"~e":e}function et(t){let e=new Array(t.length);for(let r=0;r<t.length;r++){let n=t[r];if(typeof n=="number"&&Number.isInteger(n))e[r]="n"+String(n);else if(typeof n=="string")e[r]="s"+rr(n);else throw new TypeError(`Unsupported segment type at index ${r}: ${n}`)}return e.join(".")}function tt(t){return(t.type&X)===X}function Te(t){return(t.type&v)===v}function Re(t){return(t.type&Z)===Z}function rt(t){return(t.type&Q)===Q}function je(t){return!t||t.length===0||t===b||t[0]===b}function nt(t=[]){let e=t.length;return e===0?[0,[]]:e===1&&t[0]===b?[0,[]]:Array.isArray(t[0])?e===1?[1,[t[0]]]:[e,t]:[1,[[...t]]]}function nr(t){if(!Array.isArray(t))return!1;for(let e=0;e<t.length;e++){let r=t[e];if(typeof r=="string"&&r.charCodeAt(0)===46)return!0}return!1}function x(t=[]){if(je(t))return{address:b,isMarker:!0,length:0,path:[],children:null,type:X};let[e,r]=nt(t),n=e===1?v:Z,s=e===1?r[0]:r,i=e>1?r.map(a=>x(a)):null,o=n===v?nr(s):i.some(a=>rt(a)),c=n;return o&&(c|=Q),{address:n===v?et(s):null,isMarker:!0,length:e,path:s,children:i,type:c}}function m(t,e){if(e.length===0)return t;let[r,n]=nt(e);if(tt(t))return x(n,t.state);if(Te(t)){if(r===0)return t;if(r===1){let s=[...t.path,...n[0]];return x(s,t.state)}else{let s=n.map(i=>[...t.path,...i]);return x(s,t.state)}}if(Re(t)){let s=new Array(t.length),i=0;for(;i<t.length;)s[i]=m(t.children[i],e),i++;let o=[];for(i=0;i<s.length;){let c=s[i];if(Te(c))o.push(c.path);else if(Re(c)){let a=0;for(;a<c.length;)o.push(c.children[a].path),a++}i++}return x(o,t.state)}return t}function f(t,{global:e,path:r,ephemeral:n,error:s}){try{if(!t.isMarker)return;if(tt(t))return e?e(t):void 0;if(rt(t))return n?n(t):r?r(t):void 0;if(Te(t))return r?r(t):void 0;if(Re(t)){let i=new Array(t.length),o=0;for(;o<t.length;){let c=t.children[o];i[o]=f(c,{global:e,path:r,ephemeral:n,error:s}),o++}return i}return}catch(i){return s?s(i.message):void 0}}var S=class{static name=null;static options={};static configure(e){return e={...this.options,...e},{install:r=>this.install(r,e),name:this.name,options:e}}static install(e,r){r={...this.options,...r};let n=new this(e,r);return Object.defineProperty(n,"state",{value:e,writable:!1,configurable:!1}),Object.defineProperty(n,"options",{value:r,writable:!1,configurable:!1}),n}};function st(t){return typeof window<"u"&&window.requestIdleCallback?window.requestIdleCallback(t,{timeout:100}):typeof window<"u"?window.requestAnimationFrame?window.requestAnimationFrame(()=>{setTimeout(t,0)}):setTimeout(t,0):(typeof t=="function"&&t(),null)}var U=class t{static create(){return new t}constructor(){this.reactives=new Set,this.reactiveIds=new Set,this.childReactives=new Set,this.childReactiveIds=new Set,this.children=new Map,this.hasChildReactives=!1}},z=class t extends S{static name="reactive";static roots=new WeakMap;static states=new Set;#e=!1;#t=new Set;initialize(e){t.states.add(new WeakRef(e)),t.roots.set(e,U.create())}actions(e){return{createComputed:(r,n={})=>$(r,{...n,context:e}),createSubscriber:(r,n,s={})=>$e(()=>r(e),n,s)}}onBatchStart(){this.#e=!0}onBatchEnd(){this.#e=!1,this.#t.forEach(e=>{this.propagateChange(this.state,e)}),this.#t.clear()}onStateChange(e){if(!this.#e){this.propagateChange(this.state,e);return}this.#t.add(e)}onStateAccess(e){f(e,{global:()=>{this.addReactive(this.state,null)},path:({path:r})=>{this.addReactive(this.state,r)}})}propagateChange(e,r){f(r,{global:()=>{this.walkMarkerPath(this.getRoot(e),null)},path:({path:n})=>{this.walkMarkerPath(this.getRoot(e),n)}})}walkMarkerPath(e,r,n=new Set){if(this.processReactives(e.reactives,e.reactiveIds,n),!r||r==="*")return this.processReactives(e.childReactives,e.childReactiveIds,n),n;let s=r.length-1,i=0;for(;i<=s;){let o=r[i];if(!e.children.has(o))break;e=e.children.get(o),this.processReactives(e.reactives,e.reactiveIds,n),i===s&&this.processReactives(e.childReactives,e.childReactiveIds,n),i++}return n}processReactives(e,r,n){let s=[],i=new Set;e.forEach(o=>{let c=o.deref();c?(n.has(c)||(n.add(c),u.markAsDirty(c)),i.add(c._id)):s.push(o)}),s.forEach(o=>e.delete(o)),r&&(r.clear(),i.forEach(o=>r.add(o)))}addWeakRefIfNotExists(e,r,n){r.has(n._id)||(r.add(n._id),e.add(new WeakRef(n)))}addReactive(e,r){let n=u.currentlyComputing;if(!n)return;let s=this.getRoot(e),i=s,o=Array.isArray(r)?r:[];(o.length===0||r==="*"||!r)&&this.addWeakRefIfNotExists(i.reactives,i.reactiveIds,n),this.addWeakRefIfNotExists(i.childReactives,i.childReactiveIds,n);let c=o.length;for(let a=0;a<c;a++){let l=o[a];i.children.has(l)||i.children.set(l,U.create()),i=i.children.get(l),a!==c-1?this.addWeakRefIfNotExists(i.childReactives,i.childReactiveIds,n):this.addWeakRefIfNotExists(i.reactives,i.reactiveIds,n)}this.updateHasChildReactives(s,o)}removeReactive(e){t.states.forEach(r=>{let n=this.getRoot(r.deref());n&&this.removeReactiveFromNode(n,e)}),st(()=>{t.states.forEach(r=>{let n=this.getRoot(r.deref());n&&(this.cleanupEmptyNodes(n),this.updateHasChildReactives(n))})})}removeReactiveFromNode(e,r){let n=s=>{let i=[];s.forEach(o=>{let c=o.deref();(c===r||!c)&&i.push(o)}),i.forEach(o=>s.delete(o))};if(n(e.reactives),n(e.childReactives),e.children.size>0)for(let s of e.children.values())this.removeReactiveFromNode(s,r)}getRoot(e){let r=t.roots.get(e);return r||(r=U.create(),t.roots.set(e,r)),r}cleanupEmptyNodes(e){let r=n=>{let s=0,i=[];return n.forEach(o=>{o.deref()?s++:i.push(o)}),i.forEach(o=>n.delete(o)),s};for(let[n,s]of e.children){this.cleanupEmptyNodes(s);let i=r(s.reactives)>0,o=r(s.childReactives)>0;!i&&!o&&s.children.size===0&&e.children.delete(n)}}updateHasChildReactives(e,r=null){let n=i=>{for(let o of i)if(o.deref())return!0;return!1};if(!r){let i=o=>{o.hasChildReactives=Array.from(o.children.values()).some(c=>n(c.reactives)||n(c.childReactives)||c.hasChildReactives);for(let c of o.children.values())i(c)};return i(e)}let s=[];for(let i of r){if(!e.children.has(i))return;s.push(e),e=e.children.get(i)}for(let i=s.length-1;i>=0;i--){let o=s[i],c=Array.from(o.children.values()).some(a=>n(a.reactives)||n(a.childReactives)||a.hasChildReactives);if(o.hasChildReactives!==c)o.hasChildReactives=c;else break}}};var D=[null,null,(t,e)=>t?.[e[0]]?.[e[1]],(t,e)=>t?.[e[0]]?.[e[1]]?.[e[2]],(t,e)=>t?.[e[0]]?.[e[1]]?.[e[2]]?.[e[3]],(t,e)=>t?.[e[0]]?.[e[1]]?.[e[2]]?.[e[3]]?.[e[4]],(t,e)=>t?.[e[0]]?.[e[1]]?.[e[2]]?.[e[3]]?.[e[4]]?.[e[5]],(t,e)=>t?.[e[0]]?.[e[1]]?.[e[2]]?.[e[3]]?.[e[4]]?.[e[5]]?.[e[6]],(t,e)=>t?.[e[0]]?.[e[1]]?.[e[2]]?.[e[3]]?.[e[4]]?.[e[5]]?.[e[6]]?.[e[7]]];function sr(t){let r="obj"+Array.from({length:t},(s,i)=>`?.[path[${i}]]`).join(""),n=new Function("obj","path",`return ${r}`);return D[t]=n,n}function P(t,e){let r=e.length;return r===0?t:r===1?t[e[0]]:r<D.length&&D[r]||D[r]?D[r](t,e):sr(r)(t,e)}function h(t){return typeof t=="number"?[]:{}}var ee=[null,null,(t,e,r)=>{let[n,s]=e;return t[n]=n in t?t[n]:h(s),t[n][s]=r,r},(t,e,r)=>{let[n,s,i]=e;return t[n]=n in t?t[n]:h(s),t[n][s]=s in t[n]?t[n][s]:h(i),t[n][s][i]=r,r},(t,e,r)=>{let[n,s,i,o]=e;return t[n]=n in t?t[n]:h(s),t[n][s]=s in t[n]?t[n][s]:h(i),t[n][s][i]=i in t[n][s]?t[n][s][i]:h(o),t[n][s][i][o]=r,r},(t,e,r)=>{let[n,s,i,o,c]=e;return t[n]=n in t?t[n]:h(s),t[n][s]=s in t[n]?t[n][s]:h(i),t[n][s][i]=i in t[n][s]?t[n][s][i]:h(o),t[n][s][i][o]=o in t[n][s][i]?t[n][s][i][o]:h(c),t[n][s][i][o][c]=r,r},(t,e,r)=>{let[n,s,i,o,c,a]=e;return t[n]=n in t?t[n]:h(s),t[n][s]=s in t[n]?t[n][s]:h(i),t[n][s][i]=i in t[n][s]?t[n][s][i]:h(o),t[n][s][i][o]=o in t[n][s][i]?t[n][s][i][o]:h(c),t[n][s][i][o][c]=c in t[n][s][i][o]?t[n][s][i][o][c]:h(a),t[n][s][i][o][c][a]=r,r},(t,e,r)=>{let[n,s,i,o,c,a,l]=e;return t[n]=n in t?t[n]:h(s),t[n][s]=s in t[n]?t[n][s]:h(i),t[n][s][i]=i in t[n][s]?t[n][s][i]:h(o),t[n][s][i][o]=o in t[n][s][i]?t[n][s][i][o]:h(c),t[n][s][i][o][c]=c in t[n][s][i][o]?t[n][s][i][o][c]:h(a),t[n][s][i][o][c][a]=a in t[n][s][i][o][c]?t[n][s][i][o][c][a]:h(l),t[n][s][i][o][c][a][l]=r,r},(t,e,r)=>{let[n,s,i,o,c,a,l,d]=e;return t[n]=n in t?t[n]:h(s),t[n][s]=s in t[n]?t[n][s]:h(i),t[n][s][i]=i in t[n][s]?t[n][s][i]:h(o),t[n][s][i][o]=o in t[n][s][i]?t[n][s][i][o]:h(c),t[n][s][i][o][c]=c in t[n][s][i][o]?t[n][s][i][o][c]:h(a),t[n][s][i][o][c][a]=a in t[n][s][i][o][c]?t[n][s][i][o][c][a]:h(l),t[n][s][i][o][c][a][l]=l in t[n][s][i][o][c][a]?t[n][s][i][o][c][a][l]:h(d),t[n][s][i][o][c][a][l][d]=r,r}];function ir(t){let e=Array.from({length:t},(o,c)=>`v${c}`),n=`const [${e.join(", ")}] = path;
2
+ `,s="state";for(let o=0;o<t-1;o++){let c=e[o],a=e[o+1];n+=`${s}[${c}] = (${s}[${c}] !== undefined && typeof ${s}[${c}] === 'object') ? ${s}[${c}] : createNodeType(${a});
3
+ `,s+=`[${c}]`}n+=`${s}[${e[t-1]}] = value;
4
+ return state;`;let i=new Function("state","path","value","createNodeType",n);return ee[t]=(o,c,a)=>i(o,c,a,h),ee[t]}function ve(t,e,r){let n=e.length;return n===0?Object.assign(t,r):n===1?t[e[0]]=r:ee[n]?ee[n](t,e,r):ir(n)(t,e,r)}function it(t,e){let r=e.length;if(r===0)return;if(r===1){let c=t[e[0]];return Array.isArray(t)?t.splice(e[0],1):delete t[e[0]],c}let n=e.slice(0,-1),s=e[r-1],i=P(t,n);if(!i)return;let o=i[s];return Array.isArray(i)?i.splice(s,1):delete i[s],o}function V(t,e){let r=Object.keys(t),n=0;for(;n<r.length;)delete t[r[n]],n++;let s=Object.keys(e);for(n=0;n<s.length;){let i=s[n],o=e[i];o&&typeof o=="object"&&!Array.isArray(o)?(t[i]=t[i]||{},V(t[i],o)):t[i]=o,n++}return t}function ot(t){let e=Object.keys(t);for(let r of e)delete t[r];return t}function ct(t){let e=typeof t;return t==null||e==="string"||e==="number"||e==="boolean"||e==="bigint"||e==="symbol"||e==="function"}var at=t=>structuredClone?structuredClone(t):JSON.parse(JSON.stringify(t));function or(t){return Array.isArray(t)?[...t]:typeof t=="object"&&t!==null?{...t}:t}function E(t,e,r){let n=!1;try{return f(e,{global:()=>(n=!0,t),path:({path:s})=>(n=!0,P(t,s))})}catch(s){console.error(s);return}finally{n&&r&&r(e)}}function te(t,e,r,n,s){let i,o=!1;try{return f(e,{global:()=>(i={...t},t=V(t,r),o=!0,r),path:({path:c})=>(i=or(P(t,c)),ve(t,c,r),o=!0,r)})}catch(c){console.error(c);return}finally{o&&s&&s(e,n,r,i)}}function De(t,e,r,n){let s,i=!1;try{return f(e,{global:()=>(s=t,t=V(t,{}),i=!0,s),path:({path:o})=>(s=it(t,o),i=!0,s)})}catch(o){console.error(o);return}finally{n&&n(e,r,void 0,s)}}function lt(t,e,r,n,s){let i,o,c=!1;try{return f(e,{global:()=>(i=t,o=r(t),t=V(t,o),c=!0,o),path:({path:a})=>{i=je(a)?t:P(t,a);let l=ct(i)?i:at(i);return o=r(l),ve(t,a,o),c=!0,o}})}catch(a){console.error(a);return}finally{c&&s&&s(e,n,o,i)}}function Pe(t,e){if(!(t&&t[0]==="."))return e}function re(t,e=Pe,r=""){if(t===null||typeof t!="object")return t;if(Array.isArray(t))return t.map(s=>re(s,e));let n={};for(let s of Object.keys(t)){let i=e(s,t[s]);typeof i<"u"&&(n[s]=re(i,e,s))}return n}import{encode as cr,decode as ar}from"cbor-x";var ne=new Uint8Array([74,83,67,50]),se=2;function ut(t){let r="";for(let n=0;n<t.length;n+=8192){let s=t.slice(n,n+8192);r+=String.fromCharCode(...s)}return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function ht(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=e+"=".repeat((4-e.length%4)%4),n=atob(r),s=new Uint8Array(n.length);for(let i=0;i<n.length;i++)s[i]=n.charCodeAt(i);return s}function ie(t){let e=0;for(let r=0;r<t.length;r++)e=(e<<5)-e+t[r]>>>0;return e}function oe(t,e,r=0){return new DataView(e.buffer,e.byteOffset+r,4).setUint32(0,t,!0),r+4}function ce(t,e=0){return new DataView(t.buffer,t.byteOffset+e,4).getUint32(0,!0)}function ft(t,e,r=0){return new DataView(e.buffer,e.byteOffset+r,2).setUint16(0,t,!0),r+2}function dt(t,e=0){return new DataView(t.buffer,t.byteOffset+e,2).getUint16(0,!0)}function pt(t,e,r=0){return e[r]=t,r+1}function mt(t,e=0){return t[e]}function yt(t){return cr(t)}function gt(t){return[ar(t),t.length]}async function Fe(t,{replacer:e=Pe}={}){let r=re(t,e),n=yt(r),s=4+n.length,i=new Uint8Array(s),o=0;o=oe(n.length,i,o),i.set(n,o);let c=ie(i),a=15,l=new Uint8Array(a+i.length);return l.set(ne,0),ft(se,l,4),pt(0,l,6),oe(c,l,7),oe(i.length,l,11),l.set(i,15),ut(l)}async function wt(t,e){let r=ht(t);if(r.length<15)throw new Error("Invalid capsule: too short");for(let G=0;G<4;G++)if(r[G]!==ne[G])throw new Error("Invalid capsule: bad magic");let n=dt(r,4);if(n!==se)throw new Error(`Unsupported capsule version: ${n}`);let s=mt(r,6),i=ce(r,7),o=ce(r,11);if(o<0)throw new Error("Invalid capsule: negative payload length");if(r.length!==15+o)throw new Error("Invalid capsule: length mismatch");let c=r.slice(15),a=ie(c);if(i!==a)throw new Error("Integrity check failed: checksum mismatch");let l=0,d=ce(c,l);if(l+=4,l+d>c.length)throw new Error(`Data length ${d} exceeds payload bounds at offset ${l}`);let[W]=gt(c.slice(l,l+d));return e&&e(W),{data:W,meta:{version:n,flags:s,bytes:r.length,checksum:a.toString(16)}}}function lr(t,e,r){switch(e){case"is":case"===":case"==":return t===r;case"not":case"!==":case"!=":return t!==r;case"includes":return Array.isArray(t)&&t.includes(r);case"has":return typeof t=="object"&&t!==null&&Object.values(t).includes(r);case"in":return typeof t=="object"&&t!==null&&r in t;case"gt":case">":return t>r;case"lt":case"<":return t<r;case"gte":case">=":return t>=r;case"lte":case"<=":return t<=r;default:throw new Error(`Unknown matcher: ${e}`)}}function ae(t,e,r,n,s=[],i=!1){let o=[];if(t===null||typeof t!="object")return o;for(let[c,a]of Object.entries(t)){if(c===e&&lr(a,r,n)&&(o.push([...s,c]),!i))return o;if(typeof a=="object"&&a!==null)if(Array.isArray(a))for(let l=0;l<a.length;l++){let d=a[l];if(d&&typeof d=="object"){let W=ae(d,e,r,n,[...s,c,l],i);if(o.push(...W),!i&&o.length>0)return o}}else{let l=ae(a,e,r,n,[...s,c],i);if(o.push(...l),!i&&o.length>0)return o}}return o}function bt(t,e,r="is",n){return ae(t,e,r,n,[],!1)?.[0]}function xt(t,e,r="is",n){return ae(t,e,r,n,[],!0)}var ur={[T]:R,[R]:T,[j]:j};function Et(t,e){return e===void 0?T:t===void 0?R:j}function At(t,e,r,n){return f(t,{global:()=>({path:b,method:e,operation:Et(r,n),from:n,to:r}),path:s=>({path:s.path,method:e,operation:Et(r,n),from:n,to:r})})}function Ct(t){let{address:e,path:r,method:n,from:s,to:i,operation:o}=t;return{address:e,path:r,method:n,to:s,from:i,operation:hr(o)}}function hr(t){return ur[t]}var le=class t{#e;#t;#n=0;#r;#s;#i=new Map;static create(e={}){return new t(e)}constructor(e,r=null,n=null,s=null){this.#e=e,this.#r=n||this.#o(),this.#s=s||this.#c(),this.#t=r||x(),this.#n=0}install(...e){let r=new Map;for(let n of e){if(this.#i.has(n.name)){console.warn(`Plugin "${n.name}" already installed`);continue}if(!n.install){console.warn(`Plugin "${n.name}" does not have an install function`);continue}let s=n.install(this);if(this.#i.set(n.name,s),s.initialize&&r.set(n.name,()=>s.initialize(this,s.options)),s.actions){let i=s.actions(this,s.options);Object.defineProperty(this,n.name,{value:i,writable:!1,enumerable:!0,configurable:!1})}}return r.forEach(n=>n()),this}get batching(){return this.#n>0}get(...e){return E(this.#e,m(this.#t,e),this.#s)}has(...e){let r=m(this.#t,e);return f(r,{global:()=>{},path:n=>E(this.#e,n,this.#s)!==void 0})}keys(...e){let r=m(this.#t,e);return f(r,{global:()=>Object.keys(this.#e),path:n=>Object.keys(E(this.#e,n,this.#s)||{})})}typeof(...e){let r=m(this.#t,e);return f(r,{global:()=>{},path:({path:s})=>typeof E(this.#e,s,this.#s)})}findWhere(e,r="is",n){let s=E(this.#e,this.#t,this.#s);return bt(s,e,r,n)}findAllWhere(e,r="is",n){let s=E(this.#e,this.#t,this.#s);return xt(s,e,r,n)}set(...e){let r=e.pop(),n=m(this.#t,e);return te(this.#e,n,r,"set",this.#r)}update(...e){let r=e.pop(),n=m(this.#t,e);return lt(this.#e,n,r,"update",this.#r)}apply(e){for(let r of e){let{path:n,operation:s,to:i}=r,o=m(this.#t,n);switch(s){case T:case j:te(this.#e,o,i,"apply",this.#r);break;case R:De(this.#e,o,"apply",this.#r);break}}}load(e){return te(this.#e,this.#t,e,"load",this.#r),this}remove(...e){let r=m(this.#t,e);return De(this.#e,r,"remove",this.#r)}async export(...e){try{let r=m(this.#t,e),n=f(r,{global:async()=>await Fe(this.#e),path:async s=>await Fe(E(this.#e,s,this.#s))});return Array.isArray(n)?await Promise.all(n):await n}catch(r){throw console.trace(`Failed to export state: ${r.message}`),r}}async import(e){try{let{data:r}=await wt(e);return this.load(r),this}catch(r){throw console.trace(`Failed to import state: ${r.message}`),r}}reset(){ot(this.#e);for(let e of this.#i.values())e.reset&&e.reset();this.#r=this.#o(),this.#t=x([],this),this.#n=0}ref(...e){let r=m(this.#t,e);return new t(this.#e,r,this.#r,this.#s)}batch(e){return this.#n++,this.#a("onBatchStart",this.batching),e?(e(this),this.endBatch()):()=>this.endBatch()}endBatch(){return this.#n--,this.#n===0&&this.#a("onBatchEnd"),this}#o(){return(e,r,n=void 0,s=void 0)=>{this.#a("onStateChange",e,At(e,r,n,s),this.batching)}}#c(){return e=>this.#a("onStateAccess",e)}#a(e,...r){for(let n of this.#i.values())typeof n[e]=="function"&&n[e](...r)}},ue=(...t)=>le.create(...t);function he(t,e){let r=null,n=0;return typeof t=="function"?(r=t,typeof e=="number"&&(n=e)):typeof t=="number"&&(n=t),(...s)=>new Promise((i,o)=>{setTimeout(()=>{try{let c=r?r(...s):void 0;i(c)}catch(c){o(c)}},n)})}var g=class{constructor(e=""){this.isMarker=!0,this.description=e}},K=class extends S{static name="history";static options={maxSize:100};#e=[];#t=!1;#n=new Set;#r=0;#s=0;#i=new Map;#o=!0;#c=!1;onUndoRedo=null;initialize(e){this.onUndoRedo=r=>e.apply(r)}#a(){this.#e=[new g("History Start")],this.#r=0,this.#t=!0,this.#i.clear(),this.#s=0,this.#c=!1}actions(e){return{undo:r=>this.undo(r),redo:r=>this.redo(r),canUndo:()=>this.canUndo(),canRedo:()=>this.canRedo(),batch:()=>this.batch(),commit:()=>this.commit(),onCommit:r=>this.onCommit(r),addMarker:r=>this.addMarker(r),size:()=>this.size(),start:()=>this.#a()}}#u=he(()=>{this.#l(),this.#c=!1});onStateChange(e,r,n){if(!this.#t||!this.#o||r.method==="apply")return;let s=this.#i.get(e.address),i=s?{...r,from:s.from}:r;this.#i.set(e.address,i),!n&&this.#s===0&&this.#h()}addMarker(e=""){this.#l(e),this.#r=this.#e.length-1}undo=he(e=>{if(!this.onUndoRedo)throw new Error("Undo/redo handler is required for undo operation");if(this.#l(),this.#r<=0)return!1;if(this.#o=!1,!(this.#e[this.#r]instanceof g))return console.warn("Expected to be at a marker for undo operation"),!1;let r=new Set,n=this.#r-1;for(;n>0;){let s=this.#e[n];if(s instanceof g)break;r.add(Ct(s)),n--}return this.#r=n,this.onUndoRedo(Array.from(r)),e&&typeof e=="function"&&e(),this.#o=!0,!0});redo=he(e=>{if(!this.onUndoRedo)throw new Error("Undo/redo handler is required for redo operation");if(this.#r>=this.#e.length-1)return!1;if(this.#o=!1,!(this.#e[this.#r]instanceof g))return console.warn("Expected to be at a marker for redo operation"),!1;let r=new Set;for(this.#r++;this.#r<this.#e.length;){let n=this.#e[this.#r];if(n instanceof g)break;r.add(n),this.#r++}return this.onUndoRedo(r),e&&typeof e=="function"&&e(),this.#o=!0,!0});canUndo(){return this.#r>0}canRedo(){return this.#r<this.#e.length-1}size(){return this.#e.length}batch(){return this.#s++,()=>{this.#s--}}commit(){return this.#s=this.#s-1<0?0:this.#s-1,this.#s===0&&this.#l(),this}pause(){this.#o=!1}resume(){this.#o=!0}onCommit(e){return this.#n.add(e),()=>{this.#n.delete(e)}}reset(){this.#e=[new g("History Start")],this.#n=new Set,this.#r=0,this.#s=0,this.#i=new Map,this.#o=!0,this.#c=!1,this.#t=!1,this.onUndoRedo=null}#h(){this.#c||(this.#c=!0,this.#u())}#l(e=""){if(this.#i.size===0)return;this.#r<this.#e.length-1&&this.#e.splice(this.#r+1);let r=Array.from(this.#i.values());for(this.#e.push(...r),this.#n.forEach(s=>s(r)),this.#e[this.#e.length-1]instanceof g||this.#e.push(new g(e||Date.now().toString()));this.#e.length>this.options.maxSize;)this.#e.shift();this.#i.clear(),this.#r=this.#e.length-1}};var St=t=>{let e;return(...r)=>{clearTimeout(e),e=setTimeout(()=>t(...r),0)}};function Ne(t,e,r=[]){if(e.length===0)return r;for(let n of e){if(!n)continue;let s=t[n];if(!s)continue;let i=s.children&&s.children.length>0?Ne(t,s.children):[];r.push([n,s,i])}return r}var Ot=async(t=null)=>({version:"1.0.0",created:new Date().toISOString(),updated:new Date().toISOString(),email:t,children:[],starred:[],recent:[],items:{},accessKey:await _(p.USER),indexes:{byType:{document:[],project:[],asset:[]},byTag:{}},settings:{},tags:[],status:"active"});import{Result as w}from"@brickworks/result";var fe=class t{#e;#t;#n;#r;constructor(e,r={}){this.#e=e,this.#t=ue().install(z),this.#n=r,this.#r=J($(()=>this.#t.get()),St(async()=>{let n=await this.#t.export();await this.#e.setIndex(n)}))}static async create(e,r={}){try{let n=ue().install(z,K);if(await e.hasIndex())try{let o=await e.getIndex();await n.import(o)}catch(o){throw console.trace(`Failed to import index: ${o.message}`),o}else{let o=await Ot();await n.load(o);let c=await n.export();await e.setIndex(c)}return new t(e,n,r)}catch(n){throw console.trace(`Failed to create StorageInstance: ${n.message}`),n}}async create(e,r,n={}){try{let s=Ye(32);n.fileType=n.fileType||"application/octet-stream";let i=await Je(e,s,n);return this.#t.set(["items",s],i),this.#t.update(["children"],(o=[])=>(o.push(s),o)),await this.#e.write(s,r),s}catch(s){return w.error(`Failed to create file "${id}": ${s.message}`,{id,type:e,meta:n})}}async read(e){try{let r=this.#t.get(["items",e]);if(!r)throw new Error(`File "${e}" not found`);return await this.#e.read(e,r.meta)}catch(r){return w.error(`Failed to read file "${e}": ${r.message}`,{id:e})}}async update(e,r){try{if(!this.#t.get(["items",e]))throw new Error(`File "${e}" not found`);return await this.#e.write(e,r),this}catch(n){return w.error(`Failed to update file "${e}": ${n.message}`,{id:e})}}async delete(e){try{if(!this.#t.has(["items",e]))return w.failure("FILE_NOT_FOUND",{fileId:e});let r=this.#t.findAllWhere("children","includes",e);r&&r.length>0&&r.forEach(i=>{this.#t.update(i,(o=[])=>o.filter(c=>c!==e))});let s=this.#t.get(["items",e])?.fileId||e;return await this.#e.delete(s),this.#t.remove(["items",e]),this}catch(r){return w.error(`Failed to delete file "${e}": ${r.message}`,{fileId:e})}}async addDependency(e,r){try{return this.#t.update(["items",e,"dependencies"],(n=[])=>(n.includes(r)||(n.push(r),n=n.filter(s=>!!s)),n)),this}catch(n){return w.error(`Failed to add dependency "${e}": ${n.message}`,{dependantId:e,id:r})}}move(e,r){try{if(e===r)return this.getFileList();let n=this.#t.findAllWhere("children","includes",e);return n?.length>0&&n.forEach(s=>{this.#t.update(s,(i=[])=>i.filter(o=>o!==e))}),!r||r==="root"?(this.#t.update(["children"],(s=[])=>(s.push(e),s)),this):(this.#t.update(["items",r,"children"],(s=[])=>(s.push(e),s)),this)}catch(n){return w.error(`Failed to move file "${e}": ${n.message}`,{id:e,newParentId:r})}}exists(e){return this.#t.has(["items",e])}getMeta(e){return this.#t.get(["items",e])}getFileList(){try{let e=this.#t.get(["children"])||[],r=this.#t.get(["items"])||{};return Ne(r,e)}catch(e){return w.error(`Failed to get file list: ${e.message}`)}}async findWhere(e,r){let n=this.#t.findWhere(e,"is",r);if(!n||n.length===0)return;let[s,i]=n;return await this.read(i)}async destroy(){try{return this.#r&&this.#r(),await this.#e.destroy(),this}catch(e){return w.error(`Failed to destroy storage instance: ${e.message}`)}}};import{Result as de}from"@brickworks/result";var O=class extends L{#e=new Map;#t=null;static manifest={name:"Storage",namespace:"storage",version:"1.0.0",description:"Core storage service for managing file operations across providers",defaults:{defaultProvider:"local"}};actions(e){return{create:async(r,n,s)=>{try{if(this.#e.has(r))return this.#e.get(r);let i=await this.loadStorageProvider(n,s),o=await fe.create(i,s);return this.#e.set(r,o),this.#t||(this.#t=r),o}catch(i){return de.failure(`Failed to connect provider "${r}": ${i.message}`)}},use:(r=null)=>{try{let n=r||this.#t,s=this.#e.get(n);if(!s)throw de.error(`Storage provider "${n}" not found. Use create() first.`);return s}catch(n){return de.error(`Failed to use provider "${r}": ${n.message}`)}},list:async()=>({providers:Array.from(this.#e.keys()),default:this.#t}),has:r=>this.#e.has(r),setDefault:async r=>{if(!this.#e.has(r))throw new Error(`Provider "${r}" not found`);return this.#t=r,!0},remove:async r=>{try{let n=this.#e.get(r);if(!n)throw new Error(`Provider "${r}" not found`);return await n.destroy(),this.#e.delete(r),this.#t===r&&(this.#t=this.#e.size>0?Array.from(this.#e.keys())[0]:null),!0}catch(n){return de.failure(`Failed to remove provider "${r}": ${n.message}`)}},destroy:async(r=this.#t)=>{let n=this.#e.get(r);return n&&await n.destroy(),!0}}}};var Me=class extends O{constructor(e,r={}){super(e,r)}async loadStorageProvider(e=null,r={}){let n={indexedDb:()=>Promise.resolve().then(()=>(kt(),It))};if(!(e in n))throw new Error(`Unsupported provider: ${e}`);let{default:s}=await n[e]();return s.create(r)}};var Le=class extends O{constructor(e,r={}){super(e,r)}async loadStorageProvider(e=null,r={}){try{let n={firebase:()=>Promise.resolve().then(()=>(Tt(),$t)),local:()=>Promise.resolve().then(()=>(jt(),Rt)),minio:()=>Promise.resolve().then(()=>(Dt(),vt)),s3:()=>Promise.resolve().then(()=>(Ft(),Pt))};if(!(e in n))throw new Error(`Unsupported provider: ${e}`);let{default:s}=await n[e]();return s.create(r)}catch(n){throw console.trace(`Failed to load storage provider: ${n.message}`),n}}};export{O as Storage,Me as StorageClient,Le as StorageServer};
5
+ //# sourceMappingURL=storage.js.map