@hypen-space/core 0.4.3 → 0.4.5

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.
Files changed (47) hide show
  1. package/README.md +1 -1
  2. package/dist/app.d.ts +79 -22
  3. package/dist/app.js +111 -18
  4. package/dist/app.js.map +4 -4
  5. package/dist/components/builtin.js +114 -21
  6. package/dist/components/builtin.js.map +5 -5
  7. package/dist/discovery.d.ts +1 -1
  8. package/dist/discovery.js +112 -19
  9. package/dist/discovery.js.map +5 -5
  10. package/dist/engine.browser.d.ts +6 -0
  11. package/dist/engine.browser.js +192 -5
  12. package/dist/engine.browser.js.map +5 -4
  13. package/dist/engine.d.ts +6 -0
  14. package/dist/engine.js +192 -5
  15. package/dist/engine.js.map +5 -4
  16. package/dist/index.browser.d.ts +1 -1
  17. package/dist/index.browser.js +111 -18
  18. package/dist/index.browser.js.map +5 -5
  19. package/dist/index.d.ts +2 -2
  20. package/dist/index.js +117 -21
  21. package/dist/index.js.map +6 -6
  22. package/dist/managed-router.d.ts +3 -4
  23. package/dist/remote/client.js +34 -2
  24. package/dist/remote/client.js.map +3 -3
  25. package/dist/remote/index.js +472 -26
  26. package/dist/remote/index.js.map +8 -7
  27. package/dist/remote/server.d.ts +46 -15
  28. package/dist/remote/server.js +472 -26
  29. package/dist/remote/server.js.map +8 -7
  30. package/dist/result.d.ts +18 -0
  31. package/package.json +1 -1
  32. package/src/app.ts +162 -41
  33. package/src/components/builtin.ts +3 -4
  34. package/src/discovery.ts +2 -2
  35. package/src/engine.browser.ts +27 -4
  36. package/src/engine.ts +27 -4
  37. package/src/index.browser.ts +0 -2
  38. package/src/index.ts +3 -2
  39. package/src/managed-router.ts +5 -6
  40. package/src/remote/server.ts +116 -21
  41. package/src/result.ts +48 -0
  42. package/wasm-browser/hypen_engine_bg.wasm +0 -0
  43. package/wasm-browser/package.json +1 -1
  44. package/wasm-node/hypen_engine_bg.wasm +0 -0
  45. package/wasm-node/package.json +1 -1
  46. package/dist/module-registry.d.ts +0 -42
  47. package/src/module-registry.ts +0 -76
package/dist/app.js.map CHANGED
@@ -3,11 +3,11 @@
3
3
  "sources": ["../src/state.ts", "../src/result.ts", "../src/logger.ts", "../src/app.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * State management with observer pattern and diffing\n *\n * Uses a proxy-based approach with self-detection to avoid\n * creating nested proxies repeatedly.\n */\n\n// Symbol for proxy detection (more robust than string property)\nconst IS_PROXY = Symbol.for('hypen.isProxy');\nconst RAW_TARGET = Symbol.for('hypen.rawTarget');\n\nexport type StatePath = string; // e.g., \"user.name\", \"items.0.title\"\n\n/**\n * Represents a change in state with full path information\n */\nexport interface StateChange {\n paths: StatePath[];\n newValues: Record<StatePath, any>;\n}\n\n/**\n * Options for state observer\n */\nexport interface StateObserverOptions {\n onChange: (change: StateChange) => void;\n pathPrefix?: string; // For nested observers\n}\n\n/**\n * Deep clone an object, using structuredClone when available.\n * Handles proxy objects, circular references, and special types.\n */\nfunction deepClone<T>(obj: T): T {\n // Handle primitives and null\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // Handle functions (pass through, can't be cloned)\n if (typeof obj === 'function') {\n return obj;\n }\n\n // Handle proxy objects with snapshot method\n if (typeof (obj as any).__getSnapshot === 'function') {\n return (obj as any).__getSnapshot() as T;\n }\n\n // Handle types that can't be cloned (return as-is)\n if (obj instanceof WeakMap || obj instanceof WeakSet) {\n return obj;\n }\n\n // Use a WeakMap to track visited objects and handle circular references\n const visited = new WeakMap();\n\n function cloneInternal(value: any): any {\n if (value === null || typeof value !== 'object') {\n return value;\n }\n\n // Functions can't be cloned, pass through\n if (typeof value === 'function') {\n return value;\n }\n\n // Check for circular reference\n if (visited.has(value)) {\n return visited.get(value);\n }\n\n // Handle types that can't be cloned\n if (value instanceof WeakMap || value instanceof WeakSet) {\n return value;\n }\n\n // Try structuredClone for supported types (Date, Map, Set, etc.)\n // This is faster than manual cloning for these types\n if (\n value instanceof Date ||\n value instanceof RegExp ||\n value instanceof Map ||\n value instanceof Set ||\n ArrayBuffer.isView(value) ||\n value instanceof ArrayBuffer\n ) {\n try {\n return structuredClone(value);\n } catch {\n // If structuredClone fails, fall through to manual handling\n }\n }\n\n // Handle arrays\n if (Array.isArray(value)) {\n const arrClone: any[] = [];\n visited.set(value, arrClone);\n for (let i = 0; i < value.length; i++) {\n arrClone[i] = cloneInternal(value[i]);\n }\n return arrClone;\n }\n\n // Handle plain objects\n const objClone: any = {};\n visited.set(value, objClone);\n\n // Clone string keys\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n objClone[key] = cloneInternal(value[key]);\n }\n }\n\n // Clone Symbol keys\n const symbolKeys = Object.getOwnPropertySymbols(value);\n for (const sym of symbolKeys) {\n objClone[sym] = cloneInternal(value[sym]);\n }\n\n return objClone;\n }\n\n return cloneInternal(obj);\n}\n\n/**\n * Compare two values and detect changes with full paths\n */\nfunction diffState(\n oldState: any,\n newState: any,\n basePath: string = \"\"\n): StateChange {\n const paths: StatePath[] = [];\n const newValues: Record<StatePath, any> = {};\n\n function diff(oldVal: any, newVal: any, path: string) {\n // Handle null/undefined\n if (oldVal === newVal) return;\n\n // Different types or primitives\n if (\n typeof oldVal !== \"object\" ||\n typeof newVal !== \"object\" ||\n oldVal === null ||\n newVal === null\n ) {\n if (oldVal !== newVal) {\n paths.push(path);\n newValues[path] = newVal;\n }\n return;\n }\n\n // Arrays\n if (Array.isArray(oldVal) || Array.isArray(newVal)) {\n if (\n !Array.isArray(oldVal) ||\n !Array.isArray(newVal) ||\n oldVal.length !== newVal.length\n ) {\n paths.push(path);\n newValues[path] = newVal;\n return;\n }\n\n for (let i = 0; i < newVal.length; i++) {\n const itemPath = path ? `${path}.${i}` : `${i}`;\n diff(oldVal[i], newVal[i], itemPath);\n }\n return;\n }\n\n // Objects\n const oldKeys = new Set(Object.keys(oldVal));\n const newKeys = new Set(Object.keys(newVal));\n\n // Check for added or changed keys\n for (const key of newKeys) {\n const propPath = path ? `${path}.${key}` : key;\n if (!oldKeys.has(key)) {\n // New property\n paths.push(propPath);\n newValues[propPath] = newVal[key];\n } else {\n // Existing property, recurse\n diff(oldVal[key], newVal[key], propPath);\n }\n }\n\n // Check for removed keys\n for (const key of oldKeys) {\n if (!newKeys.has(key)) {\n const propPath = path ? `${path}.${key}` : key;\n paths.push(propPath);\n newValues[propPath] = undefined;\n }\n }\n }\n\n diff(oldState, newState, basePath);\n return { paths, newValues };\n}\n\n/**\n * Create an observable state object that tracks changes\n */\nexport function createObservableState<T extends object>(\n initialState: T,\n options?: StateObserverOptions\n): T {\n // Use default options if not provided\n const opts: StateObserverOptions = options || { onChange: () => {} };\n\n // Handle null/undefined by using an empty object\n // This allows modules to start with null state\n if (initialState === null || initialState === undefined) {\n initialState = {} as T;\n }\n\n // Detect and reject primitive wrapper objects (Number, String, Boolean)\n // These cannot be properly proxied due to internal slots\n if (\n initialState instanceof Number ||\n initialState instanceof String ||\n initialState instanceof Boolean\n ) {\n throw new TypeError(\n \"Cannot create observable state from primitive wrapper objects (Number, String, Boolean). \" +\n \"Use plain primitives or regular objects instead.\"\n );\n }\n\n // Clone the initial state to ensure each observable has its own copy\n // This prevents multiple modules from sharing the same underlying state object\n initialState = deepClone(initialState);\n\n // Keep a snapshot of the last known state\n let lastSnapshot = deepClone(initialState);\n const pathPrefix = opts.pathPrefix || \"\";\n\n // Track if we're in a batch update\n let batchDepth = 0;\n let pendingChange: StateChange | null = null;\n\n function notifyChange() {\n if (batchDepth > 0) return;\n\n // Compare current state with last snapshot\n const change = diffState(lastSnapshot, state, pathPrefix);\n\n if (change.paths.length > 0) {\n // Update snapshot\n lastSnapshot = deepClone(state);\n\n // Merge with pending changes if any\n if (pendingChange) {\n change.paths.push(...pendingChange.paths);\n Object.assign(change.newValues, pendingChange.newValues);\n pendingChange = null;\n }\n\n // Notify\n opts.onChange(change);\n }\n }\n\n // Track if we have a pending microtask notification\n let notificationPending = false;\n\n function scheduleBatch() {\n if (batchDepth === 0) {\n // If not in a batch, schedule notification in next microtask to coalesce rapid changes\n if (!notificationPending) {\n notificationPending = true;\n queueMicrotask(() => {\n notificationPending = false;\n if (batchDepth === 0) {\n notifyChange();\n }\n });\n }\n }\n }\n\n // WeakMap to cache proxies by their raw target\n // This is essential for circular reference handling\n const proxyCache = new WeakMap<object, any>();\n\n function createProxy(target: any, basePath: string): any {\n // Check cache first (handles circular references)\n const cached = proxyCache.get(target);\n if (cached) return cached;\n\n const proxy = new Proxy(target, {\n get(obj, prop) {\n // Self-detection: if checking IS_PROXY, return true\n // This allows us to detect if a value is already proxied\n if (prop === IS_PROXY) return true;\n\n // Allow access to raw target (useful for debugging/serialization)\n if (prop === RAW_TARGET) return obj;\n\n // Expose batch control methods\n if (prop === \"__beginBatch\") {\n return () => {\n batchDepth++;\n };\n }\n if (prop === \"__endBatch\") {\n return () => {\n batchDepth--;\n if (batchDepth === 0) {\n notifyChange();\n }\n };\n }\n if (prop === \"__getSnapshot\") {\n return () => deepClone(obj);\n }\n\n const value = obj[prop];\n\n // Return proxied nested objects/arrays, but NOT special types\n if (value && typeof value === \"object\") {\n // Fast path: if already a proxy, return as-is\n // This check is O(1) and avoids WeakMap lookup\n if ((value as any)[IS_PROXY]) {\n return value;\n }\n\n // Check for special object types that should not be proxied\n if (\n value instanceof Date ||\n value instanceof RegExp ||\n value instanceof Map ||\n value instanceof Set ||\n value instanceof WeakMap ||\n value instanceof WeakSet\n ) {\n return value;\n }\n\n // Check cache for this value (handles circular refs and repeated access)\n const cachedNested = proxyCache.get(value);\n if (cachedNested) {\n return cachedNested;\n }\n\n // Create proxy for nested object/array\n const nestedProxy = createProxy(value, basePath ? `${basePath}.${String(prop)}` : String(prop));\n return nestedProxy;\n }\n\n return value;\n },\n\n set(obj, prop, value) {\n const oldValue = obj[prop];\n\n // If setting an object that's already a proxy, unwrap it first\n // to store the raw value (prevents proxy-wrapping-proxy)\n if (value && typeof value === \"object\" && (value as any)[IS_PROXY]) {\n value = (value as any)[RAW_TARGET];\n }\n\n // Set the new value\n obj[prop] = value;\n\n if (oldValue !== value) {\n scheduleBatch();\n }\n\n return true;\n },\n\n deleteProperty(obj, prop) {\n if (prop in obj) {\n delete obj[prop];\n scheduleBatch();\n }\n return true;\n },\n });\n\n // Cache the proxy before returning\n proxyCache.set(target, proxy);\n return proxy;\n }\n\n const state = createProxy(initialState, pathPrefix);\n return state as T;\n}\n\n/**\n * Helper to batch multiple state updates\n */\nexport function batchStateUpdates<T>(state: T, fn: () => void): void {\n const s = state as any;\n if (s.__beginBatch && s.__endBatch) {\n s.__beginBatch();\n try {\n fn();\n } finally {\n s.__endBatch();\n }\n } else {\n fn();\n }\n}\n\n/**\n * Get a snapshot of the current state\n */\nexport function getStateSnapshot<T>(state: T): T {\n const s = state as any;\n if (s.__getSnapshot) {\n return s.__getSnapshot();\n }\n return deepClone(state);\n}\n\n/**\n * Check if a value is a Hypen state proxy\n */\nexport function isStateProxy(value: unknown): boolean {\n return value !== null && typeof value === 'object' && (value as any)[IS_PROXY] === true;\n}\n\n/**\n * Get the raw (unwrapped) target from a proxy\n * Returns the value as-is if not a proxy\n */\nexport function unwrapProxy<T>(value: T): T {\n if (value !== null && typeof value === 'object' && (value as any)[IS_PROXY]) {\n return (value as any)[RAW_TARGET];\n }\n return value;\n}\n",
6
- "/**\n * Result Type for Error Handling\n *\n * A lightweight Result type for explicit error handling without exceptions.\n * Provides type-safe error propagation and composition.\n */\n\n/**\n * Represents either a successful value or an error\n */\nexport type Result<T, E = Error> =\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly error: E };\n\n/**\n * Create a successful Result\n */\nexport function Ok<T>(value: T): Result<T, never> {\n return { ok: true, value };\n}\n\n/**\n * Create a failed Result\n */\nexport function Err<E>(error: E): Result<never, E> {\n return { ok: false, error };\n}\n\n/**\n * Check if a Result is Ok\n */\nexport function isOk<T, E>(result: Result<T, E>): result is { ok: true; value: T } {\n return result.ok;\n}\n\n/**\n * Check if a Result is Err\n */\nexport function isErr<T, E>(result: Result<T, E>): result is { ok: false; error: E } {\n return !result.ok;\n}\n\n/**\n * Wrap a Promise in a Result, catching any thrown errors\n */\nexport async function fromPromise<T, E = Error>(\n promise: Promise<T>,\n mapError?: (e: unknown) => E\n): Promise<Result<T, E>> {\n try {\n const value = await promise;\n return Ok(value);\n } catch (e) {\n if (mapError) {\n return Err(mapError(e));\n }\n return Err(e as E);\n }\n}\n\n/**\n * Wrap a synchronous function in a Result, catching any thrown errors\n */\nexport function fromTry<T, E = Error>(\n fn: () => T,\n mapError?: (e: unknown) => E\n): Result<T, E> {\n try {\n return Ok(fn());\n } catch (e) {\n if (mapError) {\n return Err(mapError(e));\n }\n return Err(e as E);\n }\n}\n\n/**\n * Map over a successful Result value\n */\nexport function map<T, U, E>(\n result: Result<T, E>,\n fn: (value: T) => U\n): Result<U, E> {\n if (result.ok) {\n return Ok(fn(result.value));\n }\n return result;\n}\n\n/**\n * Map over a failed Result error\n */\nexport function mapErr<T, E, F>(\n result: Result<T, E>,\n fn: (error: E) => F\n): Result<T, F> {\n if (!result.ok) {\n return Err(fn(result.error));\n }\n return result;\n}\n\n/**\n * Chain Results together (flatMap)\n */\nexport function flatMap<T, U, E>(\n result: Result<T, E>,\n fn: (value: T) => Result<U, E>\n): Result<U, E> {\n if (result.ok) {\n return fn(result.value);\n }\n return result;\n}\n\n/**\n * Unwrap a Result, throwing if it's an error\n */\nexport function unwrap<T, E>(result: Result<T, E>): T {\n if (result.ok) {\n return result.value;\n }\n throw result.error;\n}\n\n/**\n * Unwrap a Result with a default value\n */\nexport function unwrapOr<T, E>(result: Result<T, E>, defaultValue: T): T {\n if (result.ok) {\n return result.value;\n }\n return defaultValue;\n}\n\n/**\n * Unwrap a Result with a lazy default value\n */\nexport function unwrapOrElse<T, E>(result: Result<T, E>, fn: (error: E) => T): T {\n if (result.ok) {\n return result.value;\n }\n return fn(result.error);\n}\n\n/**\n * Match on a Result, providing handlers for both cases\n */\nexport function match<T, E, U>(\n result: Result<T, E>,\n handlers: {\n ok: (value: T) => U;\n err: (error: E) => U;\n }\n): U {\n if (result.ok) {\n return handlers.ok(result.value);\n }\n return handlers.err(result.error);\n}\n\n/**\n * Combine multiple Results into a single Result containing an array\n * Returns the first error encountered, or Ok with all values\n */\nexport function all<T, E>(results: Result<T, E>[]): Result<T[], E> {\n const values: T[] = [];\n for (const result of results) {\n if (!result.ok) {\n return result;\n }\n values.push(result.value);\n }\n return Ok(values);\n}\n\n/**\n * Base class for typed errors with context\n */\nexport class HypenError extends Error {\n readonly code: string;\n readonly context?: Record<string, unknown>;\n override readonly cause?: Error;\n\n constructor(\n code: string,\n message: string,\n options?: { context?: Record<string, unknown>; cause?: Error }\n ) {\n super(message);\n this.name = 'HypenError';\n this.code = code;\n this.context = options?.context;\n this.cause = options?.cause;\n\n // Maintain proper prototype chain\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * Error thrown when an action handler fails\n */\nexport class ActionError extends HypenError {\n readonly actionName: string;\n\n constructor(actionName: string, cause?: unknown) {\n super(\n 'ACTION_ERROR',\n `Action handler \"${actionName}\" failed: ${cause instanceof Error ? cause.message : String(cause)}`,\n {\n context: { actionName },\n cause: cause instanceof Error ? cause : undefined,\n }\n );\n this.name = 'ActionError';\n this.actionName = actionName;\n }\n}\n\n/**\n * Error thrown when a connection fails\n */\nexport class ConnectionError extends HypenError {\n readonly url: string;\n readonly attempt?: number;\n\n constructor(url: string, cause?: unknown, attempt?: number) {\n super(\n 'CONNECTION_ERROR',\n `Connection to \"${url}\" failed${attempt ? ` (attempt ${attempt})` : ''}: ${\n cause instanceof Error ? cause.message : String(cause)\n }`,\n {\n context: { url, attempt },\n cause: cause instanceof Error ? cause : undefined,\n }\n );\n this.name = 'ConnectionError';\n this.url = url;\n this.attempt = attempt;\n }\n}\n\n/**\n * Error thrown when state operations fail\n */\nexport class StateError extends HypenError {\n readonly path?: string;\n\n constructor(message: string, path?: string, cause?: unknown) {\n super('STATE_ERROR', message, {\n context: { path },\n cause: cause instanceof Error ? cause : undefined,\n });\n this.name = 'StateError';\n this.path = path;\n }\n}\n",
6
+ "/**\n * Result Type for Error Handling\n *\n * A lightweight Result type for explicit error handling without exceptions.\n * Provides type-safe error propagation and composition.\n */\n\n/**\n * Represents either a successful value or an error\n */\nexport type Result<T, E = Error> =\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly error: E };\n\n/**\n * Create a successful Result\n */\nexport function Ok<T>(value: T): Result<T, never> {\n return { ok: true, value };\n}\n\n/**\n * Create a failed Result\n */\nexport function Err<E>(error: E): Result<never, E> {\n return { ok: false, error };\n}\n\n/**\n * Check if a Result is Ok\n */\nexport function isOk<T, E>(result: Result<T, E>): result is { ok: true; value: T } {\n return result.ok;\n}\n\n/**\n * Check if a Result is Err\n */\nexport function isErr<T, E>(result: Result<T, E>): result is { ok: false; error: E } {\n return !result.ok;\n}\n\n/**\n * Wrap a Promise in a Result, catching any thrown errors\n */\nexport async function fromPromise<T, E = Error>(\n promise: Promise<T>,\n mapError?: (e: unknown) => E\n): Promise<Result<T, E>> {\n try {\n const value = await promise;\n return Ok(value);\n } catch (e) {\n if (mapError) {\n return Err(mapError(e));\n }\n return Err(e as E);\n }\n}\n\n/**\n * Wrap a synchronous function in a Result, catching any thrown errors\n */\nexport function fromTry<T, E = Error>(\n fn: () => T,\n mapError?: (e: unknown) => E\n): Result<T, E> {\n try {\n return Ok(fn());\n } catch (e) {\n if (mapError) {\n return Err(mapError(e));\n }\n return Err(e as E);\n }\n}\n\n/**\n * Map over a successful Result value\n */\nexport function map<T, U, E>(\n result: Result<T, E>,\n fn: (value: T) => U\n): Result<U, E> {\n if (result.ok) {\n return Ok(fn(result.value));\n }\n return result;\n}\n\n/**\n * Map over a failed Result error\n */\nexport function mapErr<T, E, F>(\n result: Result<T, E>,\n fn: (error: E) => F\n): Result<T, F> {\n if (!result.ok) {\n return Err(fn(result.error));\n }\n return result;\n}\n\n/**\n * Chain Results together (flatMap)\n */\nexport function flatMap<T, U, E>(\n result: Result<T, E>,\n fn: (value: T) => Result<U, E>\n): Result<U, E> {\n if (result.ok) {\n return fn(result.value);\n }\n return result;\n}\n\n/**\n * Unwrap a Result, throwing if it's an error\n */\nexport function unwrap<T, E>(result: Result<T, E>): T {\n if (result.ok) {\n return result.value;\n }\n throw result.error;\n}\n\n/**\n * Unwrap a Result with a default value\n */\nexport function unwrapOr<T, E>(result: Result<T, E>, defaultValue: T): T {\n if (result.ok) {\n return result.value;\n }\n return defaultValue;\n}\n\n/**\n * Unwrap a Result with a lazy default value\n */\nexport function unwrapOrElse<T, E>(result: Result<T, E>, fn: (error: E) => T): T {\n if (result.ok) {\n return result.value;\n }\n return fn(result.error);\n}\n\n/**\n * Match on a Result, providing handlers for both cases\n */\nexport function match<T, E, U>(\n result: Result<T, E>,\n handlers: {\n ok: (value: T) => U;\n err: (error: E) => U;\n }\n): U {\n if (result.ok) {\n return handlers.ok(result.value);\n }\n return handlers.err(result.error);\n}\n\n/**\n * Combine multiple Results into a single Result containing an array\n * Returns the first error encountered, or Ok with all values\n */\nexport function all<T, E>(results: Result<T, E>[]): Result<T[], E> {\n const values: T[] = [];\n for (const result of results) {\n if (!result.ok) {\n return result;\n }\n values.push(result.value);\n }\n return Ok(values);\n}\n\n/**\n * Base class for typed errors with context\n */\nexport class HypenError extends Error {\n readonly code: string;\n readonly context?: Record<string, unknown>;\n override readonly cause?: Error;\n\n constructor(\n code: string,\n message: string,\n options?: { context?: Record<string, unknown>; cause?: Error }\n ) {\n super(message);\n this.name = 'HypenError';\n this.code = code;\n this.context = options?.context;\n this.cause = options?.cause;\n\n // Maintain proper prototype chain\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/**\n * Error thrown when an action handler fails\n */\nexport class ActionError extends HypenError {\n readonly actionName: string;\n\n constructor(actionName: string, cause?: unknown) {\n super(\n 'ACTION_ERROR',\n `Action handler \"${actionName}\" failed: ${cause instanceof Error ? cause.message : String(cause)}`,\n {\n context: { actionName },\n cause: cause instanceof Error ? cause : undefined,\n }\n );\n this.name = 'ActionError';\n this.actionName = actionName;\n }\n}\n\n/**\n * Error thrown when a connection fails\n */\nexport class ConnectionError extends HypenError {\n readonly url: string;\n readonly attempt?: number;\n\n constructor(url: string, cause?: unknown, attempt?: number) {\n super(\n 'CONNECTION_ERROR',\n `Connection to \"${url}\" failed${attempt ? ` (attempt ${attempt})` : ''}: ${\n cause instanceof Error ? cause.message : String(cause)\n }`,\n {\n context: { url, attempt },\n cause: cause instanceof Error ? cause : undefined,\n }\n );\n this.name = 'ConnectionError';\n this.url = url;\n this.attempt = attempt;\n }\n}\n\n/**\n * Error thrown when state operations fail\n */\nexport class StateError extends HypenError {\n readonly path?: string;\n\n constructor(message: string, path?: string, cause?: unknown) {\n super('STATE_ERROR', message, {\n context: { path },\n cause: cause instanceof Error ? cause : undefined,\n });\n this.name = 'StateError';\n this.path = path;\n }\n}\n\n/**\n * Error thrown when parsing Hypen DSL source fails\n */\nexport class ParseError extends HypenError {\n readonly source?: string;\n\n constructor(message: string, source?: string, cause?: unknown) {\n super('PARSE_ERROR', message, {\n context: { source },\n cause: cause instanceof Error ? cause : undefined,\n });\n this.name = 'ParseError';\n this.source = source;\n }\n}\n\n/**\n * Error thrown when rendering fails\n */\nexport class RenderError extends HypenError {\n constructor(message: string, cause?: unknown) {\n super('RENDER_ERROR', message, {\n cause: cause instanceof Error ? cause : undefined,\n });\n this.name = 'RenderError';\n }\n}\n\n/**\n * Classify a WASM engine error string into the appropriate HypenError subclass.\n * The engine returns JsValue error strings with known prefixes.\n */\nexport function classifyEngineError(err: unknown): HypenError {\n const message = err instanceof Error ? err.message : String(err);\n\n if (message.startsWith('Parse error:')) {\n return new ParseError(message);\n }\n if (message.startsWith('Invalid state:') || message.startsWith('Invalid state patch:')) {\n return new StateError(message);\n }\n if (message.startsWith('Parent node not found:')) {\n return new RenderError(message);\n }\n\n return new RenderError(message);\n}\n",
7
7
  "/**\n * Configurable Debug Logger\n *\n * Provides environment-aware logging that can be disabled in production.\n * Supports log levels, tagged output, and performance timing.\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"none\";\n\nexport interface LoggerConfig {\n /** Minimum log level (default: \"debug\" in dev, \"error\" in prod) */\n level: LogLevel;\n /** Enable colored output (default: true) */\n colors: boolean;\n /** Include timestamps (default: false) */\n timestamps: boolean;\n /** Custom log handler (default: console) */\n handler?: LogHandler;\n}\n\nexport interface LogHandler {\n debug(tag: string, ...args: unknown[]): void;\n info(tag: string, ...args: unknown[]): void;\n warn(tag: string, ...args: unknown[]): void;\n error(tag: string, ...args: unknown[]): void;\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst LOG_LEVEL_ORDER: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n none: 4,\n};\n\nconst LOG_LEVEL_COLORS: Record<Exclude<LogLevel, \"none\">, string> = {\n debug: \"\\x1b[36m\", // Cyan\n info: \"\\x1b[32m\", // Green\n warn: \"\\x1b[33m\", // Yellow\n error: \"\\x1b[31m\", // Red\n};\n\nconst RESET_COLOR = \"\\x1b[0m\";\n\n// ============================================================================\n// Global Configuration\n// ============================================================================\n\n/**\n * Detect if running in production environment\n */\nfunction isProduction(): boolean {\n if (typeof process !== \"undefined\" && process.env) {\n return process.env.NODE_ENV === \"production\";\n }\n return false;\n}\n\n/**\n * Default configuration\n */\nlet config: LoggerConfig = {\n level: isProduction() ? \"error\" : \"debug\",\n colors: true,\n timestamps: false,\n};\n\n// ============================================================================\n// Configuration API\n// ============================================================================\n\n/**\n * Set the global log level\n */\nexport function setLogLevel(level: LogLevel): void {\n config.level = level;\n}\n\n/**\n * Get the current log level\n */\nexport function getLogLevel(): LogLevel {\n return config.level;\n}\n\n/**\n * Configure the logger\n */\nexport function configureLogger(options: Partial<LoggerConfig>): void {\n config = { ...config, ...options };\n}\n\n/**\n * Enable all logging (sets level to \"debug\")\n */\nexport function enableLogging(): void {\n config.level = \"debug\";\n}\n\n/**\n * Disable all logging (sets level to \"none\")\n */\nexport function disableLogging(): void {\n config.level = \"none\";\n}\n\n/**\n * Enable debug mode - alias for enableLogging()\n * Call this at app startup to see all debug logs\n *\n * @example\n * ```typescript\n * import { setDebugMode } from \"@hypen-space/core\";\n * setDebugMode(true);\n * ```\n */\nexport function setDebugMode(enabled: boolean): void {\n config.level = enabled ? \"debug\" : \"error\";\n}\n\n/**\n * Check if debug mode is enabled\n */\nexport function isDebugMode(): boolean {\n return config.level === \"debug\";\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\nfunction shouldLog(level: LogLevel): boolean {\n return LOG_LEVEL_ORDER[level] >= LOG_LEVEL_ORDER[config.level];\n}\n\nfunction formatTag(tag: string, level: LogLevel): string {\n const timestamp = config.timestamps ? `${new Date().toISOString()} ` : \"\";\n\n if (config.colors && level !== \"none\") {\n const color = LOG_LEVEL_COLORS[level as Exclude<LogLevel, \"none\">];\n return `${timestamp}${color}[${tag}]${RESET_COLOR}`;\n }\n\n return `${timestamp}[${tag}]`;\n}\n\n// ============================================================================\n// Logger Class\n// ============================================================================\n\n/**\n * Tagged logger instance\n *\n * @example\n * ```typescript\n * const log = createLogger(\"MyComponent\");\n * log.debug(\"initialized with\", { props });\n * log.error(\"failed to load\", error);\n * ```\n */\nexport class Logger {\n private readonly tag: string;\n\n constructor(tag: string) {\n this.tag = tag;\n }\n\n debug(...args: unknown[]): void {\n if (!shouldLog(\"debug\")) return;\n\n if (config.handler) {\n config.handler.debug(this.tag, ...args);\n } else {\n console.log(formatTag(this.tag, \"debug\"), ...args);\n }\n }\n\n info(...args: unknown[]): void {\n if (!shouldLog(\"info\")) return;\n\n if (config.handler) {\n config.handler.info(this.tag, ...args);\n } else {\n console.info(formatTag(this.tag, \"info\"), ...args);\n }\n }\n\n warn(...args: unknown[]): void {\n if (!shouldLog(\"warn\")) return;\n\n if (config.handler) {\n config.handler.warn(this.tag, ...args);\n } else {\n console.warn(formatTag(this.tag, \"warn\"), ...args);\n }\n }\n\n error(...args: unknown[]): void {\n if (!shouldLog(\"error\")) return;\n\n if (config.handler) {\n config.handler.error(this.tag, ...args);\n } else {\n console.error(formatTag(this.tag, \"error\"), ...args);\n }\n }\n\n /**\n * Time a function execution\n */\n time<T>(label: string, fn: () => T): T {\n if (!shouldLog(\"debug\")) {\n return fn();\n }\n\n const start = performance.now();\n try {\n return fn();\n } finally {\n const duration = performance.now() - start;\n this.debug(`${label}: ${duration.toFixed(2)}ms`);\n }\n }\n\n /**\n * Time an async function execution\n */\n async timeAsync<T>(label: string, fn: () => Promise<T>): Promise<T> {\n if (!shouldLog(\"debug\")) {\n return fn();\n }\n\n const start = performance.now();\n try {\n return await fn();\n } finally {\n const duration = performance.now() - start;\n this.debug(`${label}: ${duration.toFixed(2)}ms`);\n }\n }\n\n /**\n * Create a child logger with additional context\n */\n child(subTag: string): Logger {\n return new Logger(`${this.tag}:${subTag}`);\n }\n\n /**\n * Conditionally log based on a condition\n */\n debugIf(condition: boolean, ...args: unknown[]): void {\n if (condition) this.debug(...args);\n }\n\n warnIf(condition: boolean, ...args: unknown[]): void {\n if (condition) this.warn(...args);\n }\n\n errorIf(condition: boolean, ...args: unknown[]): void {\n if (condition) this.error(...args);\n }\n\n /**\n * Log once (useful for deprecation warnings)\n */\n private loggedOnce = new Set<string>();\n\n warnOnce(key: string, ...args: unknown[]): void {\n if (this.loggedOnce.has(key)) return;\n this.loggedOnce.add(key);\n this.warn(...args);\n }\n\n debugOnce(key: string, ...args: unknown[]): void {\n if (this.loggedOnce.has(key)) return;\n this.loggedOnce.add(key);\n this.debug(...args);\n }\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\n/**\n * Create a tagged logger\n *\n * @example\n * ```typescript\n * const log = createLogger(\"Router\");\n * log.info(\"navigating to\", path);\n * ```\n */\nexport function createLogger(tag: string): Logger {\n return new Logger(tag);\n}\n\n// ============================================================================\n// Default Logger Instance\n// ============================================================================\n\n/**\n * Default logger for general use\n */\nexport const logger = createLogger(\"Hypen\");\n\n// ============================================================================\n// Shorthand Functions (untagged)\n// ============================================================================\n\n/**\n * Shorthand logging functions for quick use\n * Prefer createLogger() for component-specific logging\n */\nexport const log = {\n debug: (tag: string, ...args: unknown[]): void => {\n if (!shouldLog(\"debug\")) return;\n console.log(formatTag(tag, \"debug\"), ...args);\n },\n\n info: (tag: string, ...args: unknown[]): void => {\n if (!shouldLog(\"info\")) return;\n console.info(formatTag(tag, \"info\"), ...args);\n },\n\n warn: (tag: string, ...args: unknown[]): void => {\n if (!shouldLog(\"warn\")) return;\n console.warn(formatTag(tag, \"warn\"), ...args);\n },\n\n error: (tag: string, ...args: unknown[]): void => {\n if (!shouldLog(\"error\")) return;\n console.error(formatTag(tag, \"error\"), ...args);\n },\n};\n\n// ============================================================================\n// Predefined Loggers for Framework Components\n// ============================================================================\n\nexport const frameworkLoggers = {\n hypen: createLogger(\"Hypen\"),\n engine: createLogger(\"Engine\"),\n router: createLogger(\"Router\"),\n state: createLogger(\"State\"),\n events: createLogger(\"Events\"),\n remote: createLogger(\"Remote\"),\n renderer: createLogger(\"Renderer\"),\n module: createLogger(\"Module\"),\n lifecycle: createLogger(\"Lifecycle\"),\n loader: createLogger(\"Loader\"),\n context: createLogger(\"Context\"),\n discovery: createLogger(\"Discovery\"),\n plugin: createLogger(\"Plugin\"),\n canvas: createLogger(\"Canvas\"),\n debug: createLogger(\"Debug\"),\n};\n",
8
- "/**\n * Hypen App Builder API\n * Implements the stateful module system from RFC-0001\n */\n\nimport type { Action } from \"./types.js\";\nimport type { Session } from \"./remote/types.js\";\nimport { type Result, Ok, Err, fromPromise, ActionError, HypenError } from \"./result.js\";\n\n// Interface for engine compatibility (works with both engine.js and engine.browser.js)\nexport interface IEngine {\n setModule(name: string, actions: string[], stateKeys: string[], initialState: unknown): void;\n onAction(actionName: string, handler: (action: Action) => void | Promise<void>): void;\n notifyStateChange(paths: string[], changedValues: Record<string, unknown>): void;\n}\n\nimport { createObservableState, type StateChange, getStateSnapshot } from \"./state.js\";\nimport type { HypenRouter } from \"./router.js\";\nimport type { HypenGlobalContext, ModuleReference } from \"./context.js\";\nimport { createLogger } from \"./logger.js\";\n\nconst log = createLogger(\"ModuleInstance\");\n\nexport type RouterContext = {\n root: HypenRouter;\n current?: HypenRouter;\n parent?: HypenRouter;\n};\n\nexport type ActionContext = {\n name: string;\n payload?: unknown;\n sender?: string;\n};\n\nexport type ActionNext = {\n router: HypenRouter; // Direct access to router instance (from nearest parent)\n};\n\nexport type GlobalContext = {\n getModule: <T = unknown>(id: string) => ModuleReference<T>;\n hasModule: (id: string) => boolean;\n getModuleIds: () => string[];\n getGlobalState: () => Record<string, unknown>;\n emit: (event: string, payload?: unknown) => void;\n on: (event: string, handler: (payload?: unknown) => void) => () => void;\n __router?: unknown; // Internal: router instance for built-in Router component\n};\n\nexport type LifecycleHandler<T> = (\n state: T,\n context?: GlobalContext\n) => void | Promise<void>;\n\n/**\n * Action handler context - all parameters available explicitly\n */\nexport interface ActionHandlerContext<T> {\n action: ActionContext;\n state: T;\n next: ActionNext;\n context: GlobalContext;\n}\n\n/**\n * Action handler - receives all context in a single object\n */\nexport type ActionHandler<T> = (ctx: ActionHandlerContext<T>) => void | Promise<void>;\n\n/**\n * Context passed to onDisconnect handler\n */\nexport interface DisconnectContext<T> {\n /** Current state snapshot (ready to serialize and save) */\n state: T;\n /** Session information */\n session: Session;\n}\n\n/**\n * Context passed to onReconnect handler\n */\nexport interface ReconnectContext<T> {\n /** Session information */\n session: Session;\n /** Call this with saved state to restore it */\n restore: (savedState: T) => void;\n}\n\n/**\n * Context passed to onExpire handler\n */\nexport interface ExpireContext {\n /** Session information */\n session: Session;\n}\n\n/**\n * Handler called when client disconnects (session still alive for TTL)\n */\nexport type DisconnectHandler<T> = (ctx: DisconnectContext<T>) => void | Promise<void>;\n\n/**\n * Handler called when client reconnects with existing session\n */\nexport type ReconnectHandler<T> = (ctx: ReconnectContext<T>) => void | Promise<void>;\n\n/**\n * Handler called when session TTL expires (client never reconnected)\n */\nexport type ExpireHandler = (ctx: ExpireContext) => void | Promise<void>;\n\n/**\n * Context passed to onError handler\n */\nexport interface ErrorContext<T> {\n /** The error that occurred */\n error: HypenError;\n /** Current state (for inspection, not mutation during error handling) */\n state: T;\n /** The action name if error occurred in an action handler */\n actionName?: string;\n /** The lifecycle phase if error occurred in a lifecycle handler */\n lifecycle?: \"created\" | \"destroyed\" | \"disconnect\" | \"reconnect\" | \"expire\";\n}\n\n/**\n * Error handler return type - controls error propagation\n */\nexport type ErrorHandlerResult =\n | void // Continue with default behavior (log + emit)\n | { handled: true } // Error was handled, skip default behavior\n | { retry: true } // Retry the operation (only for actions)\n | { rethrow: true }; // Re-throw the error\n\n/**\n * Handler called when an error occurs in the module\n */\nexport type ErrorHandler<T> = (ctx: ErrorContext<T>) => ErrorHandlerResult | Promise<ErrorHandlerResult>;\n\nexport interface HypenModuleDefinition<T = unknown> {\n name?: string;\n actions: string[];\n stateKeys: string[];\n persist?: boolean;\n version?: number;\n initialState: T;\n /**\n * Inline UI template for single-file components.\n * Set via the `.ui(hypen`...`)` method.\n */\n template?: string;\n handlers: {\n onCreated?: LifecycleHandler<T>;\n onAction: Map<string, ActionHandler<T>>;\n onDestroyed?: LifecycleHandler<T>;\n /** Called when client disconnects (session persists for TTL) */\n onDisconnect?: DisconnectHandler<T>;\n /** Called when client reconnects with existing session */\n onReconnect?: ReconnectHandler<T>;\n /** Called when session TTL expires */\n onExpire?: ExpireHandler;\n /** Called when any error occurs in the module */\n onError?: ErrorHandler<T>;\n };\n}\n\n/**\n * Alias for HypenModuleDefinition for backward compatibility\n */\nexport type HypenModule<T = unknown> = HypenModuleDefinition<T>;\n\n/**\n * Builder for creating Hypen app modules\n */\nexport class HypenAppBuilder<T> {\n private initialState: T;\n private options: { persist?: boolean; version?: number; name?: string };\n private createdHandler?: LifecycleHandler<T>;\n private actionHandlers: Map<string, ActionHandler<T>> = new Map();\n private destroyedHandler?: LifecycleHandler<T>;\n private disconnectHandler?: DisconnectHandler<T>;\n private reconnectHandler?: ReconnectHandler<T>;\n private expireHandler?: ExpireHandler;\n private errorHandler?: ErrorHandler<T>;\n private template?: string;\n\n constructor(\n initialState: T,\n options?: { persist?: boolean; version?: number; name?: string }\n ) {\n this.initialState = initialState;\n this.options = options || {};\n }\n\n /**\n * Register a handler for module creation\n */\n onCreated(fn: LifecycleHandler<T>): this {\n this.createdHandler = fn;\n return this;\n }\n\n /**\n * Register a handler for a specific action\n */\n onAction(name: string, fn: ActionHandler<T>): this {\n this.actionHandlers.set(name, fn);\n return this;\n }\n\n /**\n * Register a handler for module destruction\n */\n onDestroyed(fn: LifecycleHandler<T>): this {\n this.destroyedHandler = fn;\n return this;\n }\n\n /**\n * Register a handler for client disconnection\n * Called when client disconnects; session persists for TTL\n * Use this to save state for later restoration\n */\n onDisconnect(fn: DisconnectHandler<T>): this {\n this.disconnectHandler = fn;\n return this;\n }\n\n /**\n * Register a handler for session reconnection\n * Called when client reconnects with an existing session ID\n * Use restore() to hydrate state from saved data\n */\n onReconnect(fn: ReconnectHandler<T>): this {\n this.reconnectHandler = fn;\n return this;\n }\n\n /**\n * Register a handler for session expiration\n * Called when TTL expires and client never reconnected\n * Use this to clean up stored state\n */\n onExpire(fn: ExpireHandler): this {\n this.expireHandler = fn;\n return this;\n }\n\n /**\n * Register an error handler for the module\n * Called when any error occurs in action handlers or lifecycle hooks\n *\n * @example\n * ```typescript\n * app\n * .defineState({ count: 0 })\n * .onAction(\"increment\", ({ state }) => {\n * if (state.count > 100) throw new Error(\"Count too high\");\n * state.count += 1;\n * })\n * .onError(({ error, actionName, state }) => {\n * console.error(`Error in ${actionName}:`, error.message);\n * // Optionally recover\n * if (error.message.includes(\"too high\")) {\n * return { handled: true }; // Don't propagate\n * }\n * // Or retry\n * // return { retry: true };\n * })\n * .build();\n * ```\n *\n * @param fn - Error handler function\n * @returns Builder for chaining\n */\n onError(fn: ErrorHandler<T>): this {\n this.errorHandler = fn;\n return this;\n }\n\n /**\n * Define the component's UI template inline (single-file component).\n *\n * Use with the `hypen` tagged template literal and binding proxies:\n *\n * @example\n * ```typescript\n * import { app, hypen, state } from \"@hypen-space/core\";\n *\n * export default app\n * .defineState({ count: 0 })\n * .onAction(\"increment\", ({ state }) => {\n * state.count += 1;\n * })\n * .ui(hypen`\n * Column {\n * Text(\"Count: ${state.count}\")\n * Button { Text(\"+\") }\n * .onClick(\"@actions.increment\")\n * }\n * `);\n * ```\n *\n * @param template - The Hypen DSL template string\n * @returns The built module definition (calls build() internally)\n */\n ui(template: string): HypenModuleDefinition<T> {\n this.template = template;\n return this.build();\n }\n\n /**\n * Build the module definition\n */\n build(): HypenModuleDefinition<T> {\n // Safe way to get keys from initialState\n const stateKeys = this.initialState !== null && typeof this.initialState === 'object'\n ? Object.keys(this.initialState)\n : [];\n\n return {\n name: this.options.name,\n actions: Array.from(this.actionHandlers.keys()),\n stateKeys,\n persist: this.options.persist,\n version: this.options.version,\n initialState: this.initialState,\n template: this.template,\n handlers: {\n onCreated: this.createdHandler,\n onAction: this.actionHandlers,\n onDestroyed: this.destroyedHandler,\n onDisconnect: this.disconnectHandler,\n onReconnect: this.reconnectHandler,\n onExpire: this.expireHandler,\n onError: this.errorHandler,\n },\n };\n }\n}\n\n/**\n * Hypen App API\n */\nexport class HypenApp {\n /**\n * Define the initial state for a module\n */\n defineState<T>(\n initial: T,\n options?: { persist?: boolean; version?: number; name?: string }\n ): HypenAppBuilder<T> {\n return new HypenAppBuilder(initial, options);\n }\n}\n\n/**\n * The main app instance for creating modules\n */\nexport const app = new HypenApp();\n\n/**\n * Module Instance - manages a running module with typed state\n */\nexport class HypenModuleInstance<T extends object = any> {\n private engine: IEngine;\n private definition: HypenModuleDefinition<T>;\n private state: T;\n private isDestroyed = false;\n private routerContext?: RouterContext;\n private globalContext?: HypenGlobalContext;\n private stateChangeCallbacks: Array<() => void> = [];\n\n constructor(\n engine: IEngine,\n definition: HypenModuleDefinition<T>,\n routerContext?: RouterContext,\n globalContext?: HypenGlobalContext\n ) {\n this.engine = engine;\n this.definition = definition;\n this.routerContext = routerContext;\n this.globalContext = globalContext;\n\n // Named state prefix — all lowercase per convention\n const statePrefix = (definition.name || \"\").toLowerCase();\n\n // Create observable state that sends only changed paths and values to engine\n // When a prefix is set, all paths are namespaced (e.g., \"homepage.count\")\n this.state = createObservableState<T>(definition.initialState as T & object, {\n onChange: (change: StateChange) => {\n // Send only the changed paths and their new values (not the whole state)\n this.engine.notifyStateChange(change.paths, change.newValues);\n // Notify all registered callbacks\n this.stateChangeCallbacks.forEach(cb => cb());\n },\n pathPrefix: statePrefix || undefined,\n });\n\n // Register with engine (initial state registration)\n // When prefixed, nest the state under the module name so the engine sees\n // e.g., { homepage: { count: 0 } } instead of { count: 0 }\n const snapshot = getStateSnapshot(this.state);\n const prefixedState = statePrefix\n ? { [statePrefix]: snapshot }\n : snapshot;\n\n this.engine.setModule(\n definition.name || \"AnonymousModule\",\n definition.actions,\n definition.stateKeys,\n prefixedState\n );\n\n // Register action handlers with flexible parameter support\n for (const [actionName, handler] of definition.handlers.onAction) {\n log.debug(`Registering action handler: ${actionName} for module ${definition.name}`);\n this.engine.onAction(actionName, async (action: Action) => {\n log.debug(`Action handler fired: ${actionName}`, action);\n\n const actionCtx: ActionContext = {\n name: action.name,\n payload: action.payload,\n sender: action.sender,\n };\n\n const next: ActionNext = {\n router: this.routerContext?.root || (null as any),\n };\n\n const context: GlobalContext | undefined = this.globalContext\n ? this.createGlobalContextAPI()\n : undefined;\n\n // Use Result type for error handling\n const result = await this.executeAction(actionName, handler, {\n action: actionCtx,\n state: this.state,\n next,\n context: context!,\n });\n\n if (!result.ok) {\n const shouldRethrow = await this.handleError(result.error, { actionName });\n if (shouldRethrow) {\n throw result.error;\n }\n } else {\n log.debug(`Action handler completed: ${actionName}`);\n }\n });\n }\n\n // Call onCreated\n this.callCreatedHandler();\n }\n\n /**\n * Create the global context API for this module\n */\n private createGlobalContextAPI(): GlobalContext {\n if (!this.globalContext) {\n throw new Error(\"Global context not available\");\n }\n\n const ctx = this.globalContext;\n const api: GlobalContext = {\n getModule: (id: string) => ctx.getModule(id),\n hasModule: (id: string) => ctx.hasModule(id),\n getModuleIds: () => ctx.getModuleIds(),\n getGlobalState: () => ctx.getGlobalState(),\n emit: (event: string, payload?: any) => ctx.emit(event, payload),\n on: (event: string, handler: (payload?: any) => void) =>\n ctx.on(event, handler),\n };\n\n // Expose router and hypen engine for built-in components (if available)\n if ((ctx as any).__router) {\n api.__router = (ctx as any).__router;\n }\n if ((ctx as any).__hypenEngine) {\n (api as any).__hypenEngine = (ctx as any).__hypenEngine;\n }\n\n return api;\n }\n\n /**\n * Execute an action handler with Result-based error handling\n * Handles both synchronous throws and async rejections\n */\n private async executeAction(\n actionName: string,\n handler: ActionHandler<T>,\n ctx: ActionHandlerContext<T>\n ): Promise<Result<void, ActionError>> {\n try {\n // Wrap in try-catch to handle synchronous throws\n const result = handler(ctx);\n // Await in case handler returns a promise\n await result;\n return Ok(undefined);\n } catch (e) {\n return Err(new ActionError(actionName, e));\n }\n }\n\n /**\n * Handle an error with module-level error handler support\n * Falls back to default behavior (emit + log) if no handler or handler doesn't suppress\n * @returns true if the error should be rethrown\n */\n private async handleError(\n error: HypenError,\n context: { actionName?: string; lifecycle?: ErrorContext<T>[\"lifecycle\"] }\n ): Promise<boolean> {\n const errorCtx: ErrorContext<T> = {\n error,\n state: this.state,\n actionName: context.actionName,\n lifecycle: context.lifecycle,\n };\n\n // Call module-level error handler if defined\n if (this.definition.handlers.onError) {\n try {\n const result = await this.definition.handlers.onError(errorCtx);\n\n // Check if error was handled\n if (result && typeof result === \"object\") {\n if (\"handled\" in result && result.handled) {\n // Error was handled, skip default behavior\n return false;\n }\n if (\"rethrow\" in result && result.rethrow) {\n // Signal caller to rethrow\n return true;\n }\n // Note: 'retry' would need to be handled at the action execution level\n // For now, we just continue with default behavior\n }\n } catch (handlerError) {\n // Error in error handler - log and continue with default behavior\n log.error(\"Error in onError handler:\", handlerError);\n }\n }\n\n // Default behavior: emit to global context and log\n if (this.globalContext) {\n const eventContext = context.actionName\n ? `action:${context.actionName}`\n : context.lifecycle\n ? `lifecycle:${context.lifecycle}`\n : \"unknown\";\n\n this.globalContext.emit(\"error\", {\n message: error.message,\n error,\n context: eventContext,\n });\n }\n\n log.error(\n `${context.actionName ? `Action \"${context.actionName}\"` : `Lifecycle \"${context.lifecycle}\"`} error:`,\n error\n );\n\n return false;\n }\n\n /**\n * Call the onCreated handler\n */\n private async callCreatedHandler(): Promise<void> {\n if (this.definition.handlers.onCreated) {\n const context = this.globalContext ? this.createGlobalContextAPI() : undefined;\n await this.definition.handlers.onCreated(this.state, context);\n }\n }\n\n /**\n * Register a callback to be notified when state changes\n */\n onStateChange(callback: () => void): void {\n this.stateChangeCallbacks.push(callback);\n }\n\n /**\n * Destroy the module instance\n */\n async destroy(): Promise<void> {\n if (this.isDestroyed) return;\n\n if (this.definition.handlers.onDestroyed) {\n await this.definition.handlers.onDestroyed(this.state);\n }\n\n this.isDestroyed = true;\n }\n\n /**\n * Get the current state (returns a snapshot)\n */\n getState(): T {\n return getStateSnapshot(this.state);\n }\n\n /**\n * Get the live observable state\n */\n getLiveState(): T {\n return this.state;\n }\n\n /**\n * Update state directly (merges with existing state)\n */\n updateState(patch: Partial<T>): void {\n Object.assign(this.state, patch);\n }\n}\n"
8
+ "/**\n * Hypen App Builder API\n * Implements the stateful module system from RFC-0001\n */\n\nimport type { Action } from \"./types.js\";\nimport type { Session } from \"./remote/types.js\";\nimport { type Result, Ok, Err, fromPromise, ActionError, HypenError } from \"./result.js\";\n\n// Interface for engine compatibility (works with both engine.js and engine.browser.js)\nexport interface IEngine {\n setModule(name: string, actions: string[], stateKeys: string[], initialState: unknown): void;\n onAction(actionName: string, handler: (action: Action) => void | Promise<void>): void;\n notifyStateChange(paths: string[], changedValues: Record<string, unknown>): void;\n}\n\nimport { createObservableState, type StateChange, getStateSnapshot } from \"./state.js\";\nimport type { HypenRouter } from \"./router.js\";\nimport type { HypenGlobalContext, ModuleReference } from \"./context.js\";\nimport { createLogger } from \"./logger.js\";\n\nconst log = createLogger(\"ModuleInstance\");\n\nexport type ActionContext<P = unknown> = {\n name: string;\n payload?: P;\n sender?: string;\n};\n\nexport type GlobalContext = {\n getModule: <T = unknown>(id: string) => ModuleReference<T>;\n hasModule: (id: string) => boolean;\n getModuleIds: () => string[];\n getGlobalState: () => Record<string, unknown>;\n emit: (event: string, payload?: unknown) => void;\n on: (event: string, handler: (payload?: unknown) => void) => () => void;\n router: HypenRouter | null;\n};\n\nexport type LifecycleHandler<T> = (\n state: T,\n context?: GlobalContext\n) => void | Promise<void>;\n\n/**\n * Action handler context - all parameters available explicitly\n */\nexport interface ActionHandlerContext<T, P = unknown> {\n action: ActionContext<P>;\n state: T;\n context: GlobalContext;\n}\n\n/**\n * Action handler - receives all context in a single object\n */\nexport type ActionHandler<T, P = unknown> = (ctx: ActionHandlerContext<T, P>) => void | Promise<void>;\n\n/**\n * Context passed to onDisconnect handler\n */\nexport interface DisconnectContext<T> {\n /** Current state snapshot (ready to serialize and save) */\n state: T;\n /** Session information */\n session: Session;\n}\n\n/**\n * Context passed to onReconnect handler\n */\nexport interface ReconnectContext<T> {\n /** Session information */\n session: Session;\n /** Call this with saved state to restore it */\n restore: (savedState: T) => void;\n}\n\n/**\n * Context passed to onExpire handler\n */\nexport interface ExpireContext {\n /** Session information */\n session: Session;\n}\n\n/**\n * Handler called when client disconnects (session still alive for TTL)\n */\nexport type DisconnectHandler<T> = (ctx: DisconnectContext<T>) => void | Promise<void>;\n\n/**\n * Handler called when client reconnects with existing session\n */\nexport type ReconnectHandler<T> = (ctx: ReconnectContext<T>) => void | Promise<void>;\n\n/**\n * Handler called when session TTL expires (client never reconnected)\n */\nexport type ExpireHandler = (ctx: ExpireContext) => void | Promise<void>;\n\n/**\n * Context passed to onError handler\n */\nexport interface ErrorContext<T> {\n /** The error that occurred */\n error: HypenError;\n /** Current state (for inspection, not mutation during error handling) */\n state: T;\n /** The action name if error occurred in an action handler */\n actionName?: string;\n /** The lifecycle phase if error occurred in a lifecycle handler */\n lifecycle?: \"created\" | \"destroyed\" | \"disconnect\" | \"reconnect\" | \"expire\";\n}\n\n/**\n * Error handler return type - controls error propagation\n */\nexport type ErrorHandlerResult =\n | void // Continue with default behavior (log + emit)\n | { handled: true } // Error was handled, skip default behavior\n | { retry: true } // Retry the operation (only for actions)\n | { rethrow: true }; // Re-throw the error\n\n/**\n * Handler called when an error occurs in the module\n */\nexport type ErrorHandler<T> = (ctx: ErrorContext<T>) => ErrorHandlerResult | Promise<ErrorHandlerResult>;\n\nexport interface HypenModuleDefinition<T = unknown> {\n name?: string;\n actions: string[];\n stateKeys: string[];\n persist?: boolean;\n version?: number;\n initialState: T;\n /**\n * Inline UI template for single-file components.\n * Set via the `.ui(hypen`...`)` method.\n */\n template?: string;\n handlers: {\n onCreated?: LifecycleHandler<T>;\n onAction: Map<string, ActionHandler<T, any>>;\n onDestroyed?: LifecycleHandler<T>;\n /** Called when client disconnects (session persists for TTL) */\n onDisconnect?: DisconnectHandler<T>;\n /** Called when client reconnects with existing session */\n onReconnect?: ReconnectHandler<T>;\n /** Called when session TTL expires */\n onExpire?: ExpireHandler;\n /** Called when any error occurs in the module */\n onError?: ErrorHandler<T>;\n };\n}\n\n/**\n * Alias for HypenModuleDefinition for backward compatibility\n */\nexport type HypenModule<T = unknown> = HypenModuleDefinition<T>;\n\n/**\n * Builder for creating Hypen app modules\n */\nexport class HypenAppBuilder<T> {\n private initialState: T;\n private options: { persist?: boolean; version?: number; name?: string };\n private createdHandler?: LifecycleHandler<T>;\n private actionHandlers: Map<string, ActionHandler<T, any>> = new Map();\n private destroyedHandler?: LifecycleHandler<T>;\n private disconnectHandler?: DisconnectHandler<T>;\n private reconnectHandler?: ReconnectHandler<T>;\n private expireHandler?: ExpireHandler;\n private errorHandler?: ErrorHandler<T>;\n private template?: string;\n private _registry?: Map<string, HypenModuleDefinition>;\n\n constructor(\n initialState: T,\n options?: { persist?: boolean; version?: number; name?: string },\n registry?: Map<string, HypenModuleDefinition>\n ) {\n this.initialState = initialState;\n this.options = options || {};\n this._registry = registry;\n }\n\n /**\n * Register a handler for module creation\n */\n onCreated(fn: LifecycleHandler<T>): this {\n this.createdHandler = fn;\n return this;\n }\n\n /**\n * Register a handler for a specific action.\n * Optionally provide a payload type parameter for typed action payloads.\n *\n * @example\n * ```typescript\n * // Typed payload:\n * .onAction<{ amount: number }>(\"add\", ({ action, state }) => {\n * action.payload.amount; // fully typed\n * })\n *\n * // Untyped (payload is unknown):\n * .onAction(\"add\", ({ action, state }) => {\n * action.payload; // unknown\n * })\n * ```\n */\n onAction<P = unknown>(name: string, fn: ActionHandler<T, P>): this {\n this.actionHandlers.set(name, fn as ActionHandler<T, any>);\n return this;\n }\n\n /**\n * Register a handler for module destruction\n */\n onDestroyed(fn: LifecycleHandler<T>): this {\n this.destroyedHandler = fn;\n return this;\n }\n\n /**\n * Register a handler for client disconnection\n * Called when client disconnects; session persists for TTL\n * Use this to save state for later restoration\n */\n onDisconnect(fn: DisconnectHandler<T>): this {\n this.disconnectHandler = fn;\n return this;\n }\n\n /**\n * Register a handler for session reconnection\n * Called when client reconnects with an existing session ID\n * Use restore() to hydrate state from saved data\n */\n onReconnect(fn: ReconnectHandler<T>): this {\n this.reconnectHandler = fn;\n return this;\n }\n\n /**\n * Register a handler for session expiration\n * Called when TTL expires and client never reconnected\n * Use this to clean up stored state\n */\n onExpire(fn: ExpireHandler): this {\n this.expireHandler = fn;\n return this;\n }\n\n /**\n * Register an error handler for the module\n * Called when any error occurs in action handlers or lifecycle hooks\n *\n * @example\n * ```typescript\n * app\n * .defineState({ count: 0 })\n * .onAction(\"increment\", ({ state }) => {\n * if (state.count > 100) throw new Error(\"Count too high\");\n * state.count += 1;\n * })\n * .onError(({ error, actionName, state }) => {\n * console.error(`Error in ${actionName}:`, error.message);\n * // Optionally recover\n * if (error.message.includes(\"too high\")) {\n * return { handled: true }; // Don't propagate\n * }\n * // Or retry\n * // return { retry: true };\n * })\n * .build();\n * ```\n *\n * @param fn - Error handler function\n * @returns Builder for chaining\n */\n onError(fn: ErrorHandler<T>): this {\n this.errorHandler = fn;\n return this;\n }\n\n /**\n * Define the component's UI template inline (single-file component).\n *\n * Use with the `hypen` tagged template literal and binding proxies:\n *\n * @example\n * ```typescript\n * import { app, hypen, state } from \"@hypen-space/core\";\n *\n * export default app\n * .defineState({ count: 0 })\n * .onAction(\"increment\", ({ state }) => {\n * state.count += 1;\n * })\n * .ui(hypen`\n * Column {\n * Text(\"Count: ${state.count}\")\n * Button { Text(\"+\") }\n * .onClick(\"@actions.increment\")\n * }\n * `);\n * ```\n *\n * @param template - The Hypen DSL template string\n * @returns The built module definition (calls build() internally)\n */\n ui(template: string): HypenModuleDefinition<T> {\n this.template = template;\n return this.build();\n }\n\n /**\n * Build the module definition\n */\n build(): HypenModuleDefinition<T> {\n // Safe way to get keys from initialState\n const stateKeys = this.initialState !== null && typeof this.initialState === 'object'\n ? Object.keys(this.initialState)\n : [];\n\n const definition: HypenModuleDefinition<T> = {\n name: this.options.name,\n actions: Array.from(this.actionHandlers.keys()),\n stateKeys,\n persist: this.options.persist,\n version: this.options.version,\n initialState: this.initialState,\n template: this.template,\n handlers: {\n onCreated: this.createdHandler,\n onAction: this.actionHandlers,\n onDestroyed: this.destroyedHandler,\n onDisconnect: this.disconnectHandler,\n onReconnect: this.reconnectHandler,\n onExpire: this.expireHandler,\n onError: this.errorHandler,\n },\n };\n\n // Auto-register in the app registry when the module has a name\n if (this.options.name && this._registry) {\n this._registry.set(this.options.name, definition as HypenModuleDefinition);\n }\n\n return definition;\n }\n}\n\n/**\n * Hypen App API — singleton factory and component registry.\n *\n * Modules built with a `name` are automatically registered here.\n * Consumers (ManagedRouter, RemoteServer, ComponentResolver) read from this\n * registry instead of requiring a separate ModuleRegistry instance.\n */\nexport class HypenApp {\n /** @internal */\n readonly _registry = new Map<string, HypenModuleDefinition>();\n\n /**\n * Define the initial state for a module\n */\n defineState<T>(\n initial: T,\n options?: { persist?: boolean; version?: number; name?: string }\n ): HypenAppBuilder<T> {\n return new HypenAppBuilder(initial, options, this._registry);\n }\n\n /**\n * Convenience: start a module builder with a name pre-set.\n *\n * @example\n * ```typescript\n * export default app\n * .module(\"Settings\")\n * .defineState({ theme: \"dark\" })\n * .ui(hypen`...`);\n * ```\n */\n module(name: string) {\n const registry = this._registry;\n return {\n defineState: <T>(\n initial: T,\n options?: { persist?: boolean; version?: number }\n ): HypenAppBuilder<T> => {\n return new HypenAppBuilder(initial, { ...options, name }, registry);\n },\n };\n }\n\n // ---------------------------------------------------------------------------\n // Registry API\n // ---------------------------------------------------------------------------\n\n /**\n * Get a registered module definition by component name.\n */\n get(name: string): HypenModuleDefinition | undefined {\n return this._registry.get(name);\n }\n\n /**\n * Check if a module definition is registered.\n */\n has(name: string): boolean {\n return this._registry.has(name);\n }\n\n /**\n * Read-only view of all registered component definitions.\n */\n get components(): ReadonlyMap<string, HypenModuleDefinition> {\n return this._registry;\n }\n\n /**\n * Get all registered component names.\n */\n getNames(): string[] {\n return Array.from(this._registry.keys());\n }\n\n /**\n * Number of registered definitions.\n */\n get size(): number {\n return this._registry.size;\n }\n\n /**\n * Unregister a module definition.\n */\n unregister(name: string): void {\n this._registry.delete(name);\n }\n\n /**\n * Clear all registered definitions.\n */\n clear(): void {\n this._registry.clear();\n }\n}\n\n/**\n * The main app instance for creating modules\n */\nexport const app = new HypenApp();\n\n/**\n * Module Instance - manages a running module with typed state\n */\nexport class HypenModuleInstance<T extends object = any> {\n private engine: IEngine;\n private definition: HypenModuleDefinition<T>;\n private state: T;\n private isDestroyed = false;\n private router: HypenRouter | null;\n private globalContext?: HypenGlobalContext;\n private stateChangeCallbacks: Array<() => void> = [];\n\n constructor(\n engine: IEngine,\n definition: HypenModuleDefinition<T>,\n router?: HypenRouter | null,\n globalContext?: HypenGlobalContext\n ) {\n this.engine = engine;\n this.definition = definition;\n this.router = router ?? null;\n this.globalContext = globalContext;\n\n // Named state prefix — all lowercase per convention\n const statePrefix = (definition.name || \"\").toLowerCase();\n\n // Create observable state that sends only changed paths and values to engine\n // When a prefix is set, all paths are namespaced (e.g., \"homepage.count\")\n this.state = createObservableState<T>(definition.initialState as T & object, {\n onChange: (change: StateChange) => {\n // Send only the changed paths and their new values (not the whole state)\n this.engine.notifyStateChange(change.paths, change.newValues);\n // Notify all registered callbacks\n this.stateChangeCallbacks.forEach(cb => cb());\n },\n pathPrefix: statePrefix || undefined,\n });\n\n // Register with engine (initial state registration)\n // When prefixed, nest the state under the module name so the engine sees\n // e.g., { homepage: { count: 0 } } instead of { count: 0 }\n const snapshot = getStateSnapshot(this.state);\n const prefixedState = statePrefix\n ? { [statePrefix]: snapshot }\n : snapshot;\n\n this.engine.setModule(\n definition.name || \"AnonymousModule\",\n definition.actions,\n definition.stateKeys,\n prefixedState\n );\n\n // Register action handlers with flexible parameter support\n for (const [actionName, handler] of definition.handlers.onAction) {\n log.debug(`Registering action handler: ${actionName} for module ${definition.name}`);\n this.engine.onAction(actionName, async (action: Action) => {\n log.debug(`Action handler fired: ${actionName}`, action);\n\n const actionCtx: ActionContext = {\n name: action.name,\n payload: action.payload,\n sender: action.sender,\n };\n\n const context: GlobalContext | undefined = this.globalContext\n ? this.createGlobalContextAPI()\n : undefined;\n\n // Use Result type for error handling\n const result = await this.executeAction(actionName, handler, {\n action: actionCtx,\n state: this.state,\n context: context!,\n });\n\n if (!result.ok) {\n const shouldRethrow = await this.handleError(result.error, { actionName });\n if (shouldRethrow) {\n throw result.error;\n }\n } else {\n log.debug(`Action handler completed: ${actionName}`);\n }\n });\n }\n\n // Auto-register __hypen_bind for .bind() two-way binding support\n this.engine.onAction(\"__hypen_bind\", (action: Action) => {\n const payload = action.payload as { path?: string; value?: unknown } | null;\n if (!payload?.path) return;\n\n const segments = payload.path.split(\".\");\n let target: any = this.state;\n for (let i = 0; i < segments.length - 1; i++) {\n const seg = segments[i]!;\n target = target?.[seg];\n if (target == null) return;\n }\n const lastSeg = segments[segments.length - 1]!;\n target[lastSeg] = payload.value;\n });\n\n // Call onCreated\n this.callCreatedHandler();\n }\n\n /**\n * Create the global context API for this module\n */\n private createGlobalContextAPI(): GlobalContext {\n if (!this.globalContext) {\n throw new Error(\"Global context not available\");\n }\n\n const ctx = this.globalContext;\n const api: GlobalContext = {\n getModule: (id: string) => ctx.getModule(id),\n hasModule: (id: string) => ctx.hasModule(id),\n getModuleIds: () => ctx.getModuleIds(),\n getGlobalState: () => ctx.getGlobalState(),\n emit: (event: string, payload?: any) => ctx.emit(event, payload),\n on: (event: string, handler: (payload?: any) => void) =>\n ctx.on(event, handler),\n router: this.router,\n };\n\n // Expose hypen engine for built-in components (if available)\n if ((ctx as any).__hypenEngine) {\n (api as any).__hypenEngine = (ctx as any).__hypenEngine;\n }\n\n return api;\n }\n\n /**\n * Execute an action handler with Result-based error handling\n * Handles both synchronous throws and async rejections\n */\n private async executeAction(\n actionName: string,\n handler: ActionHandler<T, any>,\n ctx: ActionHandlerContext<T>\n ): Promise<Result<void, ActionError>> {\n try {\n // Wrap in try-catch to handle synchronous throws\n const result = handler(ctx);\n // Await in case handler returns a promise\n await result;\n return Ok(undefined);\n } catch (e) {\n return Err(new ActionError(actionName, e));\n }\n }\n\n /**\n * Handle an error with module-level error handler support\n * Falls back to default behavior (emit + log) if no handler or handler doesn't suppress\n * @returns true if the error should be rethrown\n */\n private async handleError(\n error: HypenError,\n context: { actionName?: string; lifecycle?: ErrorContext<T>[\"lifecycle\"] }\n ): Promise<boolean> {\n const errorCtx: ErrorContext<T> = {\n error,\n state: this.state,\n actionName: context.actionName,\n lifecycle: context.lifecycle,\n };\n\n // Call module-level error handler if defined\n if (this.definition.handlers.onError) {\n try {\n const result = await this.definition.handlers.onError(errorCtx);\n\n // Check if error was handled\n if (result && typeof result === \"object\") {\n if (\"handled\" in result && result.handled) {\n // Error was handled, skip default behavior\n return false;\n }\n if (\"rethrow\" in result && result.rethrow) {\n // Signal caller to rethrow\n return true;\n }\n // Note: 'retry' would need to be handled at the action execution level\n // For now, we just continue with default behavior\n }\n } catch (handlerError) {\n // Error in error handler - log and continue with default behavior\n log.error(\"Error in onError handler:\", handlerError);\n }\n }\n\n // Default behavior: emit to global context and log\n if (this.globalContext) {\n const eventContext = context.actionName\n ? `action:${context.actionName}`\n : context.lifecycle\n ? `lifecycle:${context.lifecycle}`\n : \"unknown\";\n\n this.globalContext.emit(\"error\", {\n message: error.message,\n error,\n context: eventContext,\n });\n }\n\n log.error(\n `${context.actionName ? `Action \"${context.actionName}\"` : `Lifecycle \"${context.lifecycle}\"`} error:`,\n error\n );\n\n return false;\n }\n\n /**\n * Call the onCreated handler\n */\n private async callCreatedHandler(): Promise<void> {\n if (this.definition.handlers.onCreated) {\n const context = this.globalContext ? this.createGlobalContextAPI() : undefined;\n try {\n await this.definition.handlers.onCreated(this.state, context);\n } catch (e) {\n const error = e instanceof HypenError ? e : new ActionError(\"onCreated\", e);\n const shouldRethrow = await this.handleError(error, { lifecycle: \"created\" });\n if (shouldRethrow) {\n throw error;\n }\n }\n }\n }\n\n /**\n * Register a callback to be notified when state changes\n */\n onStateChange(callback: () => void): void {\n this.stateChangeCallbacks.push(callback);\n }\n\n /**\n * Destroy the module instance\n */\n async destroy(): Promise<void> {\n if (this.isDestroyed) return;\n\n if (this.definition.handlers.onDestroyed) {\n try {\n await this.definition.handlers.onDestroyed(this.state);\n } catch (e) {\n const error = e instanceof HypenError ? e : new ActionError(\"onDestroyed\", e);\n const shouldRethrow = await this.handleError(error, { lifecycle: \"destroyed\" });\n if (shouldRethrow) {\n throw error;\n }\n }\n }\n\n this.isDestroyed = true;\n }\n\n /**\n * Get the current state (returns a snapshot)\n */\n getState(): T {\n return getStateSnapshot(this.state);\n }\n\n /**\n * Get the live observable state\n */\n getLiveState(): T {\n return this.state;\n }\n\n /**\n * Update state directly (merges with existing state)\n */\n updateState(patch: Partial<T>): void {\n Object.assign(this.state, patch);\n }\n}\n"
9
9
  ],
10
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,SAAS,SAAY,CAAC,KAAW;AAAA,EAE/B,IAAI,QAAQ,QAAQ,OAAO,QAAQ,UAAU;AAAA,IAC3C,OAAO;AAAA,EACT;AAAA,EAGA,IAAI,OAAO,QAAQ,YAAY;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EAGA,IAAI,OAAQ,IAAY,kBAAkB,YAAY;AAAA,IACpD,OAAQ,IAAY,cAAc;AAAA,EACpC;AAAA,EAGA,IAAI,eAAe,WAAW,eAAe,SAAS;AAAA,IACpD,OAAO;AAAA,EACT;AAAA,EAGA,MAAM,UAAU,IAAI;AAAA,EAEpB,SAAS,aAAa,CAAC,OAAiB;AAAA,IACtC,IAAI,UAAU,QAAQ,OAAO,UAAU,UAAU;AAAA,MAC/C,OAAO;AAAA,IACT;AAAA,IAGA,IAAI,OAAO,UAAU,YAAY;AAAA,MAC/B,OAAO;AAAA,IACT;AAAA,IAGA,IAAI,QAAQ,IAAI,KAAK,GAAG;AAAA,MACtB,OAAO,QAAQ,IAAI,KAAK;AAAA,IAC1B;AAAA,IAGA,IAAI,iBAAiB,WAAW,iBAAiB,SAAS;AAAA,MACxD,OAAO;AAAA,IACT;AAAA,IAIA,IACE,iBAAiB,QACjB,iBAAiB,UACjB,iBAAiB,OACjB,iBAAiB,OACjB,YAAY,OAAO,KAAK,KACxB,iBAAiB,aACjB;AAAA,MACA,IAAI;AAAA,QACF,OAAO,gBAAgB,KAAK;AAAA,QAC5B,MAAM;AAAA,IAGV;AAAA,IAGA,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,MACxB,MAAM,WAAkB,CAAC;AAAA,MACzB,QAAQ,IAAI,OAAO,QAAQ;AAAA,MAC3B,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK;AAAA,QACrC,SAAS,KAAK,cAAc,MAAM,EAAE;AAAA,MACtC;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,WAAgB,CAAC;AAAA,IACvB,QAAQ,IAAI,OAAO,QAAQ;AAAA,IAG3B,WAAW,OAAO,OAAO;AAAA,MACvB,IAAI,OAAO,UAAU,eAAe,KAAK,OAAO,GAAG,GAAG;AAAA,QACpD,SAAS,OAAO,cAAc,MAAM,IAAI;AAAA,MAC1C;AAAA,IACF;AAAA,IAGA,MAAM,aAAa,OAAO,sBAAsB,KAAK;AAAA,IACrD,WAAW,OAAO,YAAY;AAAA,MAC5B,SAAS,OAAO,cAAc,MAAM,IAAI;AAAA,IAC1C;AAAA,IAEA,OAAO;AAAA;AAAA,EAGT,OAAO,cAAc,GAAG;AAAA;AAM1B,SAAS,SAAS,CAChB,UACA,UACA,WAAmB,IACN;AAAA,EACb,MAAM,QAAqB,CAAC;AAAA,EAC5B,MAAM,YAAoC,CAAC;AAAA,EAE3C,SAAS,IAAI,CAAC,QAAa,QAAa,MAAc;AAAA,IAEpD,IAAI,WAAW;AAAA,MAAQ;AAAA,IAGvB,IACE,OAAO,WAAW,YAClB,OAAO,WAAW,YAClB,WAAW,QACX,WAAW,MACX;AAAA,MACA,IAAI,WAAW,QAAQ;AAAA,QACrB,MAAM,KAAK,IAAI;AAAA,QACf,UAAU,QAAQ;AAAA,MACpB;AAAA,MACA;AAAA,IACF;AAAA,IAGA,IAAI,MAAM,QAAQ,MAAM,KAAK,MAAM,QAAQ,MAAM,GAAG;AAAA,MAClD,IACE,CAAC,MAAM,QAAQ,MAAM,KACrB,CAAC,MAAM,QAAQ,MAAM,KACrB,OAAO,WAAW,OAAO,QACzB;AAAA,QACA,MAAM,KAAK,IAAI;AAAA,QACf,UAAU,QAAQ;AAAA,QAClB;AAAA,MACF;AAAA,MAEA,SAAS,IAAI,EAAG,IAAI,OAAO,QAAQ,KAAK;AAAA,QACtC,MAAM,WAAW,OAAO,GAAG,QAAQ,MAAM,GAAG;AAAA,QAC5C,KAAK,OAAO,IAAI,OAAO,IAAI,QAAQ;AAAA,MACrC;AAAA,MACA;AAAA,IACF;AAAA,IAGA,MAAM,UAAU,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC;AAAA,IAC3C,MAAM,UAAU,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC;AAAA,IAG3C,WAAW,OAAO,SAAS;AAAA,MACzB,MAAM,WAAW,OAAO,GAAG,QAAQ,QAAQ;AAAA,MAC3C,IAAI,CAAC,QAAQ,IAAI,GAAG,GAAG;AAAA,QAErB,MAAM,KAAK,QAAQ;AAAA,QACnB,UAAU,YAAY,OAAO;AAAA,MAC/B,EAAO;AAAA,QAEL,KAAK,OAAO,MAAM,OAAO,MAAM,QAAQ;AAAA;AAAA,IAE3C;AAAA,IAGA,WAAW,OAAO,SAAS;AAAA,MACzB,IAAI,CAAC,QAAQ,IAAI,GAAG,GAAG;AAAA,QACrB,MAAM,WAAW,OAAO,GAAG,QAAQ,QAAQ;AAAA,QAC3C,MAAM,KAAK,QAAQ;AAAA,QACnB,UAAU,YAAY;AAAA,MACxB;AAAA,IACF;AAAA;AAAA,EAGF,KAAK,UAAU,UAAU,QAAQ;AAAA,EACjC,OAAO,EAAE,OAAO,UAAU;AAAA;AAMrB,SAAS,qBAAuC,CACrD,cACA,SACG;AAAA,EAEH,MAAM,OAA6B,WAAW,EAAE,UAAU,MAAM,GAAG;AAAA,EAInE,IAAI,iBAAiB,QAAQ,iBAAiB,WAAW;AAAA,IACvD,eAAe,CAAC;AAAA,EAClB;AAAA,EAIA,IACE,wBAAwB,UACxB,wBAAwB,UACxB,wBAAwB,SACxB;AAAA,IACA,MAAM,IAAI,UACR,8FACA,kDACF;AAAA,EACF;AAAA,EAIA,eAAe,UAAU,YAAY;AAAA,EAGrC,IAAI,eAAe,UAAU,YAAY;AAAA,EACzC,MAAM,aAAa,KAAK,cAAc;AAAA,EAGtC,IAAI,aAAa;AAAA,EACjB,IAAI,gBAAoC;AAAA,EAExC,SAAS,YAAY,GAAG;AAAA,IACtB,IAAI,aAAa;AAAA,MAAG;AAAA,IAGpB,MAAM,SAAS,UAAU,cAAc,OAAO,UAAU;AAAA,IAExD,IAAI,OAAO,MAAM,SAAS,GAAG;AAAA,MAE3B,eAAe,UAAU,KAAK;AAAA,MAG9B,IAAI,eAAe;AAAA,QACjB,OAAO,MAAM,KAAK,GAAG,cAAc,KAAK;AAAA,QACxC,OAAO,OAAO,OAAO,WAAW,cAAc,SAAS;AAAA,QACvD,gBAAgB;AAAA,MAClB;AAAA,MAGA,KAAK,SAAS,MAAM;AAAA,IACtB;AAAA;AAAA,EAIF,IAAI,sBAAsB;AAAA,EAE1B,SAAS,aAAa,GAAG;AAAA,IACvB,IAAI,eAAe,GAAG;AAAA,MAEpB,IAAI,CAAC,qBAAqB;AAAA,QACxB,sBAAsB;AAAA,QACtB,eAAe,MAAM;AAAA,UACnB,sBAAsB;AAAA,UACtB,IAAI,eAAe,GAAG;AAAA,YACpB,aAAa;AAAA,UACf;AAAA,SACD;AAAA,MACH;AAAA,IACF;AAAA;AAAA,EAKF,MAAM,aAAa,IAAI;AAAA,EAEvB,SAAS,WAAW,CAAC,QAAa,UAAuB;AAAA,IAEvD,MAAM,SAAS,WAAW,IAAI,MAAM;AAAA,IACpC,IAAI;AAAA,MAAQ,OAAO;AAAA,IAEnB,MAAM,QAAQ,IAAI,MAAM,QAAQ;AAAA,MAC9B,GAAG,CAAC,KAAK,MAAM;AAAA,QAGb,IAAI,SAAS;AAAA,UAAU,OAAO;AAAA,QAG9B,IAAI,SAAS;AAAA,UAAY,OAAO;AAAA,QAGhC,IAAI,SAAS,gBAAgB;AAAA,UAC3B,OAAO,MAAM;AAAA,YACX;AAAA;AAAA,QAEJ;AAAA,QACA,IAAI,SAAS,cAAc;AAAA,UACzB,OAAO,MAAM;AAAA,YACX;AAAA,YACA,IAAI,eAAe,GAAG;AAAA,cACpB,aAAa;AAAA,YACf;AAAA;AAAA,QAEJ;AAAA,QACA,IAAI,SAAS,iBAAiB;AAAA,UAC5B,OAAO,MAAM,UAAU,GAAG;AAAA,QAC5B;AAAA,QAEA,MAAM,QAAQ,IAAI;AAAA,QAGlB,IAAI,SAAS,OAAO,UAAU,UAAU;AAAA,UAGtC,IAAK,MAAc,WAAW;AAAA,YAC5B,OAAO;AAAA,UACT;AAAA,UAGA,IACE,iBAAiB,QACjB,iBAAiB,UACjB,iBAAiB,OACjB,iBAAiB,OACjB,iBAAiB,WACjB,iBAAiB,SACjB;AAAA,YACA,OAAO;AAAA,UACT;AAAA,UAGA,MAAM,eAAe,WAAW,IAAI,KAAK;AAAA,UACzC,IAAI,cAAc;AAAA,YAChB,OAAO;AAAA,UACT;AAAA,UAGA,MAAM,cAAc,YAAY,OAAO,WAAW,GAAG,YAAY,OAAO,IAAI,MAAM,OAAO,IAAI,CAAC;AAAA,UAC9F,OAAO;AAAA,QACT;AAAA,QAEA,OAAO;AAAA;AAAA,MAGT,GAAG,CAAC,KAAK,MAAM,OAAO;AAAA,QACpB,MAAM,WAAW,IAAI;AAAA,QAIrB,IAAI,SAAS,OAAO,UAAU,YAAa,MAAc,WAAW;AAAA,UAClE,QAAS,MAAc;AAAA,QACzB;AAAA,QAGA,IAAI,QAAQ;AAAA,QAEZ,IAAI,aAAa,OAAO;AAAA,UACtB,cAAc;AAAA,QAChB;AAAA,QAEA,OAAO;AAAA;AAAA,MAGT,cAAc,CAAC,KAAK,MAAM;AAAA,QACxB,IAAI,QAAQ,KAAK;AAAA,UACf,OAAO,IAAI;AAAA,UACX,cAAc;AAAA,QAChB;AAAA,QACA,OAAO;AAAA;AAAA,IAEX,CAAC;AAAA,IAGD,WAAW,IAAI,QAAQ,KAAK;AAAA,IAC5B,OAAO;AAAA;AAAA,EAGT,MAAM,QAAQ,YAAY,cAAc,UAAU;AAAA,EAClD,OAAO;AAAA;AAMF,SAAS,iBAAoB,CAAC,OAAU,IAAsB;AAAA,EACnE,MAAM,IAAI;AAAA,EACV,IAAI,EAAE,gBAAgB,EAAE,YAAY;AAAA,IAClC,EAAE,aAAa;AAAA,IACf,IAAI;AAAA,MACF,GAAG;AAAA,cACH;AAAA,MACA,EAAE,WAAW;AAAA;AAAA,EAEjB,EAAO;AAAA,IACL,GAAG;AAAA;AAAA;AAOA,SAAS,gBAAmB,CAAC,OAAa;AAAA,EAC/C,MAAM,IAAI;AAAA,EACV,IAAI,EAAE,eAAe;AAAA,IACnB,OAAO,EAAE,cAAc;AAAA,EACzB;AAAA,EACA,OAAO,UAAU,KAAK;AAAA;AAMjB,SAAS,YAAY,CAAC,OAAyB;AAAA,EACpD,OAAO,UAAU,QAAQ,OAAO,UAAU,YAAa,MAAc,cAAc;AAAA;AAO9E,SAAS,WAAc,CAAC,OAAa;AAAA,EAC1C,IAAI,UAAU,QAAQ,OAAO,UAAU,YAAa,MAAc,WAAW;AAAA,IAC3E,OAAQ,MAAc;AAAA,EACxB;AAAA,EACA,OAAO;AAAA;AAAA,IA/aH,UACA;AAAA;AAAA,EADA,WAAW,OAAO,IAAI,eAAe;AAAA,EACrC,aAAa,OAAO,IAAI,iBAAiB;AAAA;;;ACQxC,SAAS,EAAK,CAAC,OAA4B;AAAA,EAChD,OAAO,EAAE,IAAI,MAAM,MAAM;AAAA;AAMpB,SAAS,GAAM,CAAC,OAA4B;AAAA,EACjD,OAAO,EAAE,IAAI,OAAO,MAAM;AAAA;AAMrB,SAAS,IAAU,CAAC,QAAwD;AAAA,EACjF,OAAO,OAAO;AAAA;AAMT,SAAS,KAAW,CAAC,QAAyD;AAAA,EACnF,OAAO,CAAC,OAAO;AAAA;AAMjB,eAAsB,WAAyB,CAC7C,SACA,UACuB;AAAA,EACvB,IAAI;AAAA,IACF,MAAM,QAAQ,MAAM;AAAA,IACpB,OAAO,GAAG,KAAK;AAAA,IACf,OAAO,GAAG;AAAA,IACV,IAAI,UAAU;AAAA,MACZ,OAAO,IAAI,SAAS,CAAC,CAAC;AAAA,IACxB;AAAA,IACA,OAAO,IAAI,CAAM;AAAA;AAAA;AAOd,SAAS,OAAqB,CACnC,IACA,UACc;AAAA,EACd,IAAI;AAAA,IACF,OAAO,GAAG,GAAG,CAAC;AAAA,IACd,OAAO,GAAG;AAAA,IACV,IAAI,UAAU;AAAA,MACZ,OAAO,IAAI,SAAS,CAAC,CAAC;AAAA,IACxB;AAAA,IACA,OAAO,IAAI,CAAM;AAAA;AAAA;AAOd,SAAS,GAAY,CAC1B,QACA,IACc;AAAA,EACd,IAAI,OAAO,IAAI;AAAA,IACb,OAAO,GAAG,GAAG,OAAO,KAAK,CAAC;AAAA,EAC5B;AAAA,EACA,OAAO;AAAA;AAMF,SAAS,MAAe,CAC7B,QACA,IACc;AAAA,EACd,IAAI,CAAC,OAAO,IAAI;AAAA,IACd,OAAO,IAAI,GAAG,OAAO,KAAK,CAAC;AAAA,EAC7B;AAAA,EACA,OAAO;AAAA;AAMF,SAAS,OAAgB,CAC9B,QACA,IACc;AAAA,EACd,IAAI,OAAO,IAAI;AAAA,IACb,OAAO,GAAG,OAAO,KAAK;AAAA,EACxB;AAAA,EACA,OAAO;AAAA;AAMF,SAAS,MAAY,CAAC,QAAyB;AAAA,EACpD,IAAI,OAAO,IAAI;AAAA,IACb,OAAO,OAAO;AAAA,EAChB;AAAA,EACA,MAAM,OAAO;AAAA;AAMR,SAAS,QAAc,CAAC,QAAsB,cAAoB;AAAA,EACvE,IAAI,OAAO,IAAI;AAAA,IACb,OAAO,OAAO;AAAA,EAChB;AAAA,EACA,OAAO;AAAA;AAMF,SAAS,YAAkB,CAAC,QAAsB,IAAwB;AAAA,EAC/E,IAAI,OAAO,IAAI;AAAA,IACb,OAAO,OAAO;AAAA,EAChB;AAAA,EACA,OAAO,GAAG,OAAO,KAAK;AAAA;AAMjB,SAAS,KAAc,CAC5B,QACA,UAIG;AAAA,EACH,IAAI,OAAO,IAAI;AAAA,IACb,OAAO,SAAS,GAAG,OAAO,KAAK;AAAA,EACjC;AAAA,EACA,OAAO,SAAS,IAAI,OAAO,KAAK;AAAA;AAO3B,SAAS,GAAS,CAAC,SAAyC;AAAA,EACjE,MAAM,SAAc,CAAC;AAAA,EACrB,WAAW,UAAU,SAAS;AAAA,IAC5B,IAAI,CAAC,OAAO,IAAI;AAAA,MACd,OAAO;AAAA,IACT;AAAA,IACA,OAAO,KAAK,OAAO,KAAK;AAAA,EAC1B;AAAA,EACA,OAAO,GAAG,MAAM;AAAA;AAAA,IAML,YAwBA,aAoBA,iBAwBA;AAAA;AAAA,EApEA,aAAN,MAAM,mBAAmB,MAAM;AAAA,IAC3B;AAAA,IACA;AAAA,IACS;AAAA,IAElB,WAAW,CACT,MACA,SACA,SACA;AAAA,MACA,MAAM,OAAO;AAAA,MACb,KAAK,OAAO;AAAA,MACZ,KAAK,OAAO;AAAA,MACZ,KAAK,UAAU,SAAS;AAAA,MACxB,KAAK,QAAQ,SAAS;AAAA,MAGtB,OAAO,eAAe,MAAM,WAAW,SAAS;AAAA;AAAA,EAEpD;AAAA,EAKa,cAAN,MAAM,oBAAoB,WAAW;AAAA,IACjC;AAAA,IAET,WAAW,CAAC,YAAoB,OAAiB;AAAA,MAC/C,MACE,gBACA,mBAAmB,uBAAuB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KAC/F;AAAA,QACE,SAAS,EAAE,WAAW;AAAA,QACtB,OAAO,iBAAiB,QAAQ,QAAQ;AAAA,MAC1C,CACF;AAAA,MACA,KAAK,OAAO;AAAA,MACZ,KAAK,aAAa;AAAA;AAAA,EAEtB;AAAA,EAKa,kBAAN,MAAM,wBAAwB,WAAW;AAAA,IACrC;AAAA,IACA;AAAA,IAET,WAAW,CAAC,KAAa,OAAiB,SAAkB;AAAA,MAC1D,MACE,oBACA,kBAAkB,cAAc,UAAU,aAAa,aAAa,OAClE,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KAEvD;AAAA,QACE,SAAS,EAAE,KAAK,QAAQ;AAAA,QACxB,OAAO,iBAAiB,QAAQ,QAAQ;AAAA,MAC1C,CACF;AAAA,MACA,KAAK,OAAO;AAAA,MACZ,KAAK,MAAM;AAAA,MACX,KAAK,UAAU;AAAA;AAAA,EAEnB;AAAA,EAKa,aAAN,MAAM,mBAAmB,WAAW;AAAA,IAChC;AAAA,IAET,WAAW,CAAC,SAAiB,MAAe,OAAiB;AAAA,MAC3D,MAAM,eAAe,SAAS;AAAA,QAC5B,SAAS,EAAE,KAAK;AAAA,QAChB,OAAO,iBAAiB,QAAQ,QAAQ;AAAA,MAC1C,CAAC;AAAA,MACD,KAAK,OAAO;AAAA,MACZ,KAAK,OAAO;AAAA;AAAA,EAEhB;AAAA;;;ACxMA,SAAS,YAAY,GAAY;AAAA,EAC/B,IAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAA,IACjD,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAmBF,SAAS,WAAW,CAAC,OAAuB;AAAA,EACjD,OAAO,QAAQ;AAAA;AAMV,SAAS,WAAW,GAAa;AAAA,EACtC,OAAO,OAAO;AAAA;AAMT,SAAS,eAAe,CAAC,SAAsC;AAAA,EACpE,SAAS,KAAK,WAAW,QAAQ;AAAA;AAM5B,SAAS,aAAa,GAAS;AAAA,EACpC,OAAO,QAAQ;AAAA;AAMV,SAAS,cAAc,GAAS;AAAA,EACrC,OAAO,QAAQ;AAAA;AAaV,SAAS,YAAY,CAAC,SAAwB;AAAA,EACnD,OAAO,QAAQ,UAAU,UAAU;AAAA;AAM9B,SAAS,WAAW,GAAY;AAAA,EACrC,OAAO,OAAO,UAAU;AAAA;AAO1B,SAAS,SAAS,CAAC,OAA0B;AAAA,EAC3C,OAAO,gBAAgB,UAAU,gBAAgB,OAAO;AAAA;AAG1D,SAAS,SAAS,CAAC,KAAa,OAAyB;AAAA,EACvD,MAAM,YAAY,OAAO,aAAa,GAAG,IAAI,KAAK,EAAE,YAAY,OAAO;AAAA,EAEvE,IAAI,OAAO,UAAU,UAAU,QAAQ;AAAA,IACrC,MAAM,QAAQ,iBAAiB;AAAA,IAC/B,OAAO,GAAG,YAAY,SAAS,OAAO;AAAA,EACxC;AAAA,EAEA,OAAO,GAAG,aAAa;AAAA;AAAA;AAiBlB,MAAM,OAAO;AAAA,EACD;AAAA,EAEjB,WAAW,CAAC,KAAa;AAAA,IACvB,KAAK,MAAM;AAAA;AAAA,EAGb,KAAK,IAAI,MAAuB;AAAA,IAC9B,IAAI,CAAC,UAAU,OAAO;AAAA,MAAG;AAAA,IAEzB,IAAI,OAAO,SAAS;AAAA,MAClB,OAAO,QAAQ,MAAM,KAAK,KAAK,GAAG,IAAI;AAAA,IACxC,EAAO;AAAA,MACL,QAAQ,IAAI,UAAU,KAAK,KAAK,OAAO,GAAG,GAAG,IAAI;AAAA;AAAA;AAAA,EAIrD,IAAI,IAAI,MAAuB;AAAA,IAC7B,IAAI,CAAC,UAAU,MAAM;AAAA,MAAG;AAAA,IAExB,IAAI,OAAO,SAAS;AAAA,MAClB,OAAO,QAAQ,KAAK,KAAK,KAAK,GAAG,IAAI;AAAA,IACvC,EAAO;AAAA,MACL,QAAQ,KAAK,UAAU,KAAK,KAAK,MAAM,GAAG,GAAG,IAAI;AAAA;AAAA;AAAA,EAIrD,IAAI,IAAI,MAAuB;AAAA,IAC7B,IAAI,CAAC,UAAU,MAAM;AAAA,MAAG;AAAA,IAExB,IAAI,OAAO,SAAS;AAAA,MAClB,OAAO,QAAQ,KAAK,KAAK,KAAK,GAAG,IAAI;AAAA,IACvC,EAAO;AAAA,MACL,QAAQ,KAAK,UAAU,KAAK,KAAK,MAAM,GAAG,GAAG,IAAI;AAAA;AAAA;AAAA,EAIrD,KAAK,IAAI,MAAuB;AAAA,IAC9B,IAAI,CAAC,UAAU,OAAO;AAAA,MAAG;AAAA,IAEzB,IAAI,OAAO,SAAS;AAAA,MAClB,OAAO,QAAQ,MAAM,KAAK,KAAK,GAAG,IAAI;AAAA,IACxC,EAAO;AAAA,MACL,QAAQ,MAAM,UAAU,KAAK,KAAK,OAAO,GAAG,GAAG,IAAI;AAAA;AAAA;AAAA,EAOvD,IAAO,CAAC,OAAe,IAAgB;AAAA,IACrC,IAAI,CAAC,UAAU,OAAO,GAAG;AAAA,MACvB,OAAO,GAAG;AAAA,IACZ;AAAA,IAEA,MAAM,QAAQ,YAAY,IAAI;AAAA,IAC9B,IAAI;AAAA,MACF,OAAO,GAAG;AAAA,cACV;AAAA,MACA,MAAM,WAAW,YAAY,IAAI,IAAI;AAAA,MACrC,KAAK,MAAM,GAAG,UAAU,SAAS,QAAQ,CAAC,KAAK;AAAA;AAAA;AAAA,OAO7C,UAAY,CAAC,OAAe,IAAkC;AAAA,IAClE,IAAI,CAAC,UAAU,OAAO,GAAG;AAAA,MACvB,OAAO,GAAG;AAAA,IACZ;AAAA,IAEA,MAAM,QAAQ,YAAY,IAAI;AAAA,IAC9B,IAAI;AAAA,MACF,OAAO,MAAM,GAAG;AAAA,cAChB;AAAA,MACA,MAAM,WAAW,YAAY,IAAI,IAAI;AAAA,MACrC,KAAK,MAAM,GAAG,UAAU,SAAS,QAAQ,CAAC,KAAK;AAAA;AAAA;AAAA,EAOnD,KAAK,CAAC,QAAwB;AAAA,IAC5B,OAAO,IAAI,OAAO,GAAG,KAAK,OAAO,QAAQ;AAAA;AAAA,EAM3C,OAAO,CAAC,cAAuB,MAAuB;AAAA,IACpD,IAAI;AAAA,MAAW,KAAK,MAAM,GAAG,IAAI;AAAA;AAAA,EAGnC,MAAM,CAAC,cAAuB,MAAuB;AAAA,IACnD,IAAI;AAAA,MAAW,KAAK,KAAK,GAAG,IAAI;AAAA;AAAA,EAGlC,OAAO,CAAC,cAAuB,MAAuB;AAAA,IACpD,IAAI;AAAA,MAAW,KAAK,MAAM,GAAG,IAAI;AAAA;AAAA,EAM3B,aAAa,IAAI;AAAA,EAEzB,QAAQ,CAAC,QAAgB,MAAuB;AAAA,IAC9C,IAAI,KAAK,WAAW,IAAI,GAAG;AAAA,MAAG;AAAA,IAC9B,KAAK,WAAW,IAAI,GAAG;AAAA,IACvB,KAAK,KAAK,GAAG,IAAI;AAAA;AAAA,EAGnB,SAAS,CAAC,QAAgB,MAAuB;AAAA,IAC/C,IAAI,KAAK,WAAW,IAAI,GAAG;AAAA,MAAG;AAAA,IAC9B,KAAK,WAAW,IAAI,GAAG;AAAA,IACvB,KAAK,MAAM,GAAG,IAAI;AAAA;AAEtB;AAeO,SAAS,YAAY,CAAC,KAAqB;AAAA,EAChD,OAAO,IAAI,OAAO,GAAG;AAAA;AAAA,IA5QjB,iBAQA,kBAOA,cAAc,WAmBhB,QAoPS,QAUA,KA0BA;AAAA;AAAA,EA1TP,kBAA4C;AAAA,IAChD,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EAEM,mBAA8D;AAAA,IAClE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EAqBI,SAAuB;AAAA,IACzB,OAAO,aAAa,IAAI,UAAU;AAAA,IAClC,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AAAA,EAgPa,SAAS,aAAa,OAAO;AAAA,EAU7B,MAAM;AAAA,IACjB,OAAO,CAAC,QAAgB,SAA0B;AAAA,MAChD,IAAI,CAAC,UAAU,OAAO;AAAA,QAAG;AAAA,MACzB,QAAQ,IAAI,UAAU,KAAK,OAAO,GAAG,GAAG,IAAI;AAAA;AAAA,IAG9C,MAAM,CAAC,QAAgB,SAA0B;AAAA,MAC/C,IAAI,CAAC,UAAU,MAAM;AAAA,QAAG;AAAA,MACxB,QAAQ,KAAK,UAAU,KAAK,MAAM,GAAG,GAAG,IAAI;AAAA;AAAA,IAG9C,MAAM,CAAC,QAAgB,SAA0B;AAAA,MAC/C,IAAI,CAAC,UAAU,MAAM;AAAA,QAAG;AAAA,MACxB,QAAQ,KAAK,UAAU,KAAK,MAAM,GAAG,GAAG,IAAI;AAAA;AAAA,IAG9C,OAAO,CAAC,QAAgB,SAA0B;AAAA,MAChD,IAAI,CAAC,UAAU,OAAO;AAAA,QAAG;AAAA,MACzB,QAAQ,MAAM,UAAU,KAAK,OAAO,GAAG,GAAG,IAAI;AAAA;AAAA,EAElD;AAAA,EAMa,mBAAmB;AAAA,IAC9B,OAAO,aAAa,OAAO;AAAA,IAC3B,QAAQ,aAAa,QAAQ;AAAA,IAC7B,QAAQ,aAAa,QAAQ;AAAA,IAC7B,OAAO,aAAa,OAAO;AAAA,IAC3B,QAAQ,aAAa,QAAQ;AAAA,IAC7B,QAAQ,aAAa,QAAQ;AAAA,IAC7B,UAAU,aAAa,UAAU;AAAA,IACjC,QAAQ,aAAa,QAAQ;AAAA,IAC7B,WAAW,aAAa,WAAW;AAAA,IACnC,QAAQ,aAAa,QAAQ;AAAA,IAC7B,SAAS,aAAa,SAAS;AAAA,IAC/B,WAAW,aAAa,WAAW;AAAA,IACnC,QAAQ,aAAa,QAAQ;AAAA,IAC7B,QAAQ,aAAa,QAAQ;AAAA,IAC7B,OAAO,aAAa,OAAO;AAAA,EAC7B;AAAA;;;;;;;;;;;AC9LO,MAAM,gBAAmB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAgD,IAAI;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,WAAW,CACT,cACA,SACA;AAAA,IACA,KAAK,eAAe;AAAA,IACpB,KAAK,UAAU,WAAW,CAAC;AAAA;AAAA,EAM7B,SAAS,CAAC,IAA+B;AAAA,IACvC,KAAK,iBAAiB;AAAA,IACtB,OAAO;AAAA;AAAA,EAMT,QAAQ,CAAC,MAAc,IAA4B;AAAA,IACjD,KAAK,eAAe,IAAI,MAAM,EAAE;AAAA,IAChC,OAAO;AAAA;AAAA,EAMT,WAAW,CAAC,IAA+B;AAAA,IACzC,KAAK,mBAAmB;AAAA,IACxB,OAAO;AAAA;AAAA,EAQT,YAAY,CAAC,IAAgC;AAAA,IAC3C,KAAK,oBAAoB;AAAA,IACzB,OAAO;AAAA;AAAA,EAQT,WAAW,CAAC,IAA+B;AAAA,IACzC,KAAK,mBAAmB;AAAA,IACxB,OAAO;AAAA;AAAA,EAQT,QAAQ,CAAC,IAAyB;AAAA,IAChC,KAAK,gBAAgB;AAAA,IACrB,OAAO;AAAA;AAAA,EA8BT,OAAO,CAAC,IAA2B;AAAA,IACjC,KAAK,eAAe;AAAA,IACpB,OAAO;AAAA;AAAA,EA6BT,EAAE,CAAC,UAA4C;AAAA,IAC7C,KAAK,WAAW;AAAA,IAChB,OAAO,KAAK,MAAM;AAAA;AAAA,EAMpB,KAAK,GAA6B;AAAA,IAEhC,MAAM,YAAY,KAAK,iBAAiB,QAAQ,OAAO,KAAK,iBAAiB,WACzE,OAAO,KAAK,KAAK,YAAY,IAC7B,CAAC;AAAA,IAEL,OAAO;AAAA,MACL,MAAM,KAAK,QAAQ;AAAA,MACnB,SAAS,MAAM,KAAK,KAAK,eAAe,KAAK,CAAC;AAAA,MAC9C;AAAA,MACA,SAAS,KAAK,QAAQ;AAAA,MACtB,SAAS,KAAK,QAAQ;AAAA,MACtB,cAAc,KAAK;AAAA,MACnB,UAAU,KAAK;AAAA,MACf,UAAU;AAAA,QACR,WAAW,KAAK;AAAA,QAChB,UAAU,KAAK;AAAA,QACf,aAAa,KAAK;AAAA,QAClB,cAAc,KAAK;AAAA,QACnB,aAAa,KAAK;AAAA,QAClB,UAAU,KAAK;AAAA,QACf,SAAS,KAAK;AAAA,MAChB;AAAA,IACF;AAAA;AAEJ;AAAA;AAKO,MAAM,SAAS;AAAA,EAIpB,WAAc,CACZ,SACA,SACoB;AAAA,IACpB,OAAO,IAAI,gBAAgB,SAAS,OAAO;AAAA;AAE/C;AAAA;AAUO,MAAM,oBAA4C;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,uBAA0C,CAAC;AAAA,EAEnD,WAAW,CACT,QACA,YACA,eACA,eACA;AAAA,IACA,KAAK,SAAS;AAAA,IACd,KAAK,aAAa;AAAA,IAClB,KAAK,gBAAgB;AAAA,IACrB,KAAK,gBAAgB;AAAA,IAGrB,MAAM,eAAe,WAAW,QAAQ,IAAI,YAAY;AAAA,IAIxD,KAAK,QAAQ,sBAAyB,WAAW,cAA4B;AAAA,MAC3E,UAAU,CAAC,WAAwB;AAAA,QAEjC,KAAK,OAAO,kBAAkB,OAAO,OAAO,OAAO,SAAS;AAAA,QAE5D,KAAK,qBAAqB,QAAQ,QAAM,GAAG,CAAC;AAAA;AAAA,MAE9C,YAAY,eAAe;AAAA,IAC7B,CAAC;AAAA,IAKD,MAAM,WAAW,iBAAiB,KAAK,KAAK;AAAA,IAC5C,MAAM,gBAAgB,cAClB,GAAG,cAAc,SAAS,IAC1B;AAAA,IAEJ,KAAK,OAAO,UACV,WAAW,QAAQ,mBACnB,WAAW,SACX,WAAW,WACX,aACF;AAAA,IAGA,YAAY,YAAY,YAAY,WAAW,SAAS,UAAU;AAAA,MAChE,KAAI,MAAM,+BAA+B,yBAAyB,WAAW,MAAM;AAAA,MACnF,KAAK,OAAO,SAAS,YAAY,OAAO,WAAmB;AAAA,QACzD,KAAI,MAAM,yBAAyB,cAAc,MAAM;AAAA,QAEvD,MAAM,YAA2B;AAAA,UAC/B,MAAM,OAAO;AAAA,UACb,SAAS,OAAO;AAAA,UAChB,QAAQ,OAAO;AAAA,QACjB;AAAA,QAEA,MAAM,OAAmB;AAAA,UACvB,QAAQ,KAAK,eAAe,QAAS;AAAA,QACvC;AAAA,QAEA,MAAM,UAAqC,KAAK,gBAC5C,KAAK,uBAAuB,IAC5B;AAAA,QAGJ,MAAM,SAAS,MAAM,KAAK,cAAc,YAAY,SAAS;AAAA,UAC3D,QAAQ;AAAA,UACR,OAAO,KAAK;AAAA,UACZ;AAAA,UACA;AAAA,QACF,CAAC;AAAA,QAED,IAAI,CAAC,OAAO,IAAI;AAAA,UACd,MAAM,gBAAgB,MAAM,KAAK,YAAY,OAAO,OAAO,EAAE,WAAW,CAAC;AAAA,UACzE,IAAI,eAAe;AAAA,YACjB,MAAM,OAAO;AAAA,UACf;AAAA,QACF,EAAO;AAAA,UACL,KAAI,MAAM,6BAA6B,YAAY;AAAA;AAAA,OAEtD;AAAA,IACH;AAAA,IAGA,KAAK,mBAAmB;AAAA;AAAA,EAMlB,sBAAsB,GAAkB;AAAA,IAC9C,IAAI,CAAC,KAAK,eAAe;AAAA,MACvB,MAAM,IAAI,MAAM,8BAA8B;AAAA,IAChD;AAAA,IAEA,MAAM,MAAM,KAAK;AAAA,IACjB,MAAM,MAAqB;AAAA,MACzB,WAAW,CAAC,OAAe,IAAI,UAAU,EAAE;AAAA,MAC3C,WAAW,CAAC,OAAe,IAAI,UAAU,EAAE;AAAA,MAC3C,cAAc,MAAM,IAAI,aAAa;AAAA,MACrC,gBAAgB,MAAM,IAAI,eAAe;AAAA,MACzC,MAAM,CAAC,OAAe,YAAkB,IAAI,KAAK,OAAO,OAAO;AAAA,MAC/D,IAAI,CAAC,OAAe,YAClB,IAAI,GAAG,OAAO,OAAO;AAAA,IACzB;AAAA,IAGA,IAAK,IAAY,UAAU;AAAA,MACzB,IAAI,WAAY,IAAY;AAAA,IAC9B;AAAA,IACA,IAAK,IAAY,eAAe;AAAA,MAC7B,IAAY,gBAAiB,IAAY;AAAA,IAC5C;AAAA,IAEA,OAAO;AAAA;AAAA,OAOK,cAAa,CACzB,YACA,SACA,KACoC;AAAA,IACpC,IAAI;AAAA,MAEF,MAAM,SAAS,QAAQ,GAAG;AAAA,MAE1B,MAAM;AAAA,MACN,OAAO,GAAG,SAAS;AAAA,MACnB,OAAO,GAAG;AAAA,MACV,OAAO,IAAI,IAAI,YAAY,YAAY,CAAC,CAAC;AAAA;AAAA;AAAA,OAS/B,YAAW,CACvB,OACA,SACkB;AAAA,IAClB,MAAM,WAA4B;AAAA,MAChC;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,YAAY,QAAQ;AAAA,MACpB,WAAW,QAAQ;AAAA,IACrB;AAAA,IAGA,IAAI,KAAK,WAAW,SAAS,SAAS;AAAA,MACpC,IAAI;AAAA,QACF,MAAM,SAAS,MAAM,KAAK,WAAW,SAAS,QAAQ,QAAQ;AAAA,QAG9D,IAAI,UAAU,OAAO,WAAW,UAAU;AAAA,UACxC,IAAI,aAAa,UAAU,OAAO,SAAS;AAAA,YAEzC,OAAO;AAAA,UACT;AAAA,UACA,IAAI,aAAa,UAAU,OAAO,SAAS;AAAA,YAEzC,OAAO;AAAA,UACT;AAAA,QAGF;AAAA,QACA,OAAO,cAAc;AAAA,QAErB,KAAI,MAAM,6BAA6B,YAAY;AAAA;AAAA,IAEvD;AAAA,IAGA,IAAI,KAAK,eAAe;AAAA,MACtB,MAAM,eAAe,QAAQ,aACzB,UAAU,QAAQ,eAClB,QAAQ,YACN,aAAa,QAAQ,cACrB;AAAA,MAEN,KAAK,cAAc,KAAK,SAAS;AAAA,QAC/B,SAAS,MAAM;AAAA,QACf;AAAA,QACA,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,IAEA,KAAI,MACF,GAAG,QAAQ,aAAa,WAAW,QAAQ,gBAAgB,cAAc,QAAQ,uBACjF,KACF;AAAA,IAEA,OAAO;AAAA;AAAA,OAMK,mBAAkB,GAAkB;AAAA,IAChD,IAAI,KAAK,WAAW,SAAS,WAAW;AAAA,MACtC,MAAM,UAAU,KAAK,gBAAgB,KAAK,uBAAuB,IAAI;AAAA,MACrE,MAAM,KAAK,WAAW,SAAS,UAAU,KAAK,OAAO,OAAO;AAAA,IAC9D;AAAA;AAAA,EAMF,aAAa,CAAC,UAA4B;AAAA,IACxC,KAAK,qBAAqB,KAAK,QAAQ;AAAA;AAAA,OAMnC,QAAO,GAAkB;AAAA,IAC7B,IAAI,KAAK;AAAA,MAAa;AAAA,IAEtB,IAAI,KAAK,WAAW,SAAS,aAAa;AAAA,MACxC,MAAM,KAAK,WAAW,SAAS,YAAY,KAAK,KAAK;AAAA,IACvD;AAAA,IAEA,KAAK,cAAc;AAAA;AAAA,EAMrB,QAAQ,GAAM;AAAA,IACZ,OAAO,iBAAiB,KAAK,KAAK;AAAA;AAAA,EAMpC,YAAY,GAAM;AAAA,IAChB,OAAO,KAAK;AAAA;AAAA,EAMd,WAAW,CAAC,OAAyB;AAAA,IACnC,OAAO,OAAO,KAAK,OAAO,KAAK;AAAA;AAEnC;AAAA,IAxlBM,MAmVO;AAAA;AAAA,EAjWb;AAAA,EASA;AAAA,EAGA;AAAA,EAEM,OAAM,aAAa,gBAAgB;AAAA,EAmV5B,MAAM,IAAI;AAAA;",
11
- "debugId": "047B2B99C6893ED464756E2164756E21",
10
+ "mappings": "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",
11
+ "debugId": "1CB58A0A6CF4765E64756E2164756E21",
12
12
  "names": []
13
13
  }
@@ -361,7 +361,20 @@ function all(results) {
361
361
  }
362
362
  return Ok(values);
363
363
  }
364
- var HypenError, ActionError, ConnectionError, StateError;
364
+ function classifyEngineError(err) {
365
+ const message = err instanceof Error ? err.message : String(err);
366
+ if (message.startsWith("Parse error:")) {
367
+ return new ParseError(message);
368
+ }
369
+ if (message.startsWith("Invalid state:") || message.startsWith("Invalid state patch:")) {
370
+ return new StateError(message);
371
+ }
372
+ if (message.startsWith("Parent node not found:")) {
373
+ return new RenderError(message);
374
+ }
375
+ return new RenderError(message);
376
+ }
377
+ var HypenError, ActionError, ConnectionError, StateError, ParseError, RenderError;
365
378
  var init_result = __esm(() => {
366
379
  HypenError = class HypenError extends Error {
367
380
  code;
@@ -411,6 +424,25 @@ var init_result = __esm(() => {
411
424
  this.path = path;
412
425
  }
413
426
  };
427
+ ParseError = class ParseError extends HypenError {
428
+ source;
429
+ constructor(message, source, cause) {
430
+ super("PARSE_ERROR", message, {
431
+ context: { source },
432
+ cause: cause instanceof Error ? cause : undefined
433
+ });
434
+ this.name = "ParseError";
435
+ this.source = source;
436
+ }
437
+ };
438
+ RenderError = class RenderError extends HypenError {
439
+ constructor(message, cause) {
440
+ super("RENDER_ERROR", message, {
441
+ cause: cause instanceof Error ? cause : undefined
442
+ });
443
+ this.name = "RenderError";
444
+ }
445
+ };
414
446
  });
415
447
 
416
448
  // src/logger.ts
@@ -632,9 +664,11 @@ class HypenAppBuilder {
632
664
  expireHandler;
633
665
  errorHandler;
634
666
  template;
635
- constructor(initialState, options) {
667
+ _registry;
668
+ constructor(initialState, options, registry) {
636
669
  this.initialState = initialState;
637
670
  this.options = options || {};
671
+ this._registry = registry;
638
672
  }
639
673
  onCreated(fn) {
640
674
  this.createdHandler = fn;
@@ -670,7 +704,7 @@ class HypenAppBuilder {
670
704
  }
671
705
  build() {
672
706
  const stateKeys = this.initialState !== null && typeof this.initialState === "object" ? Object.keys(this.initialState) : [];
673
- return {
707
+ const definition = {
674
708
  name: this.options.name,
675
709
  actions: Array.from(this.actionHandlers.keys()),
676
710
  stateKeys,
@@ -688,12 +722,46 @@ class HypenAppBuilder {
688
722
  onError: this.errorHandler
689
723
  }
690
724
  };
725
+ if (this.options.name && this._registry) {
726
+ this._registry.set(this.options.name, definition);
727
+ }
728
+ return definition;
691
729
  }
692
730
  }
693
731
 
694
732
  class HypenApp {
733
+ _registry = new Map;
695
734
  defineState(initial, options) {
696
- return new HypenAppBuilder(initial, options);
735
+ return new HypenAppBuilder(initial, options, this._registry);
736
+ }
737
+ module(name) {
738
+ const registry = this._registry;
739
+ return {
740
+ defineState: (initial, options) => {
741
+ return new HypenAppBuilder(initial, { ...options, name }, registry);
742
+ }
743
+ };
744
+ }
745
+ get(name) {
746
+ return this._registry.get(name);
747
+ }
748
+ has(name) {
749
+ return this._registry.has(name);
750
+ }
751
+ get components() {
752
+ return this._registry;
753
+ }
754
+ getNames() {
755
+ return Array.from(this._registry.keys());
756
+ }
757
+ get size() {
758
+ return this._registry.size;
759
+ }
760
+ unregister(name) {
761
+ this._registry.delete(name);
762
+ }
763
+ clear() {
764
+ this._registry.clear();
697
765
  }
698
766
  }
699
767
 
@@ -702,13 +770,13 @@ class HypenModuleInstance {
702
770
  definition;
703
771
  state;
704
772
  isDestroyed = false;
705
- routerContext;
773
+ router;
706
774
  globalContext;
707
775
  stateChangeCallbacks = [];
708
- constructor(engine, definition, routerContext, globalContext) {
776
+ constructor(engine, definition, router, globalContext) {
709
777
  this.engine = engine;
710
778
  this.definition = definition;
711
- this.routerContext = routerContext;
779
+ this.router = router ?? null;
712
780
  this.globalContext = globalContext;
713
781
  const statePrefix = (definition.name || "").toLowerCase();
714
782
  this.state = createObservableState(definition.initialState, {
@@ -730,14 +798,10 @@ class HypenModuleInstance {
730
798
  payload: action.payload,
731
799
  sender: action.sender
732
800
  };
733
- const next = {
734
- router: this.routerContext?.root || null
735
- };
736
801
  const context = this.globalContext ? this.createGlobalContextAPI() : undefined;
737
802
  const result = await this.executeAction(actionName, handler, {
738
803
  action: actionCtx,
739
804
  state: this.state,
740
- next,
741
805
  context
742
806
  });
743
807
  if (!result.ok) {
@@ -750,6 +814,21 @@ class HypenModuleInstance {
750
814
  }
751
815
  });
752
816
  }
817
+ this.engine.onAction("__hypen_bind", (action) => {
818
+ const payload = action.payload;
819
+ if (!payload?.path)
820
+ return;
821
+ const segments = payload.path.split(".");
822
+ let target = this.state;
823
+ for (let i = 0;i < segments.length - 1; i++) {
824
+ const seg = segments[i];
825
+ target = target?.[seg];
826
+ if (target == null)
827
+ return;
828
+ }
829
+ const lastSeg = segments[segments.length - 1];
830
+ target[lastSeg] = payload.value;
831
+ });
753
832
  this.callCreatedHandler();
754
833
  }
755
834
  createGlobalContextAPI() {
@@ -763,11 +842,9 @@ class HypenModuleInstance {
763
842
  getModuleIds: () => ctx.getModuleIds(),
764
843
  getGlobalState: () => ctx.getGlobalState(),
765
844
  emit: (event, payload) => ctx.emit(event, payload),
766
- on: (event, handler) => ctx.on(event, handler)
845
+ on: (event, handler) => ctx.on(event, handler),
846
+ router: this.router
767
847
  };
768
- if (ctx.__router) {
769
- api.__router = ctx.__router;
770
- }
771
848
  if (ctx.__hypenEngine) {
772
849
  api.__hypenEngine = ctx.__hypenEngine;
773
850
  }
@@ -818,7 +895,15 @@ class HypenModuleInstance {
818
895
  async callCreatedHandler() {
819
896
  if (this.definition.handlers.onCreated) {
820
897
  const context = this.globalContext ? this.createGlobalContextAPI() : undefined;
821
- await this.definition.handlers.onCreated(this.state, context);
898
+ try {
899
+ await this.definition.handlers.onCreated(this.state, context);
900
+ } catch (e) {
901
+ const error = e instanceof HypenError ? e : new ActionError("onCreated", e);
902
+ const shouldRethrow = await this.handleError(error, { lifecycle: "created" });
903
+ if (shouldRethrow) {
904
+ throw error;
905
+ }
906
+ }
822
907
  }
823
908
  }
824
909
  onStateChange(callback) {
@@ -828,7 +913,15 @@ class HypenModuleInstance {
828
913
  if (this.isDestroyed)
829
914
  return;
830
915
  if (this.definition.handlers.onDestroyed) {
831
- await this.definition.handlers.onDestroyed(this.state);
916
+ try {
917
+ await this.definition.handlers.onDestroyed(this.state);
918
+ } catch (e) {
919
+ const error = e instanceof HypenError ? e : new ActionError("onDestroyed", e);
920
+ const shouldRethrow = await this.handleError(error, { lifecycle: "destroyed" });
921
+ if (shouldRethrow) {
922
+ throw error;
923
+ }
924
+ }
832
925
  }
833
926
  this.isDestroyed = true;
834
927
  }
@@ -864,7 +957,7 @@ var Router = app.defineState({
864
957
  log3.error("Requires global context");
865
958
  return;
866
959
  }
867
- const router = context.__router;
960
+ const router = context.router;
868
961
  if (!router) {
869
962
  log3.error("Router not found in context");
870
963
  return;
@@ -911,7 +1004,7 @@ var Link = app.defineState({
911
1004
  to: "/",
912
1005
  isActive: false
913
1006
  }, { name: "__Link" }).onAction("navigate", ({ state, context }) => {
914
- const router = context?.__router;
1007
+ const router = context?.router;
915
1008
  if (!router) {
916
1009
  log3.error("Link requires router context");
917
1010
  return;
@@ -921,7 +1014,7 @@ var Link = app.defineState({
921
1014
  }).onCreated((state, context) => {
922
1015
  if (!context)
923
1016
  return;
924
- const router = context.__router;
1017
+ const router = context.router;
925
1018
  if (router) {
926
1019
  router.onNavigate((routeState) => {
927
1020
  state.isActive = routeState.currentPath === state.to;
@@ -934,4 +1027,4 @@ export {
934
1027
  Link
935
1028
  };
936
1029
 
937
- //# debugId=D077B126E1354AF564756E2164756E21
1030
+ //# debugId=DD5D8D37F76A253064756E2164756E21