@hypen-space/core 0.4.82 → 0.4.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -4
- package/dist/app.d.ts +78 -1
- package/dist/app.js +102 -46
- package/dist/app.js.map +6 -5
- package/dist/components/builtin.js +102 -46
- package/dist/components/builtin.js.map +6 -5
- package/dist/engine-base.d.ts +19 -0
- package/dist/engine-base.js +32 -1
- package/dist/engine-base.js.map +3 -3
- package/dist/index.browser.js +117 -85
- package/dist/index.browser.js.map +7 -6
- package/dist/index.d.ts +4 -0
- package/dist/index.js +318 -85
- package/dist/index.js.map +9 -7
- package/dist/managed-router.d.ts +121 -5
- package/dist/portable.d.ts +62 -0
- package/dist/router.d.ts +7 -1
- package/dist/router.js +60 -81
- package/dist/router.js.map +6 -5
- package/dist/state.js +49 -46
- package/dist/state.js.map +5 -4
- package/dist/types.d.ts +12 -1
- package/package.json +7 -1
- package/src/app.ts +131 -1
- package/src/engine-base.ts +55 -0
- package/src/index.ts +13 -0
- package/src/managed-router.ts +285 -35
- package/src/portable.ts +113 -0
- package/src/router.ts +25 -50
- package/src/state.ts +11 -70
- package/src/types.ts +23 -1
package/dist/engine-base.js.map
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\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 // Handle structured WASM errors: { type: string, message: string }\n if (err && typeof err === 'object' && 'message' in err && 'type' in err) {\n const structured = err as { type: string; message: string };\n switch (structured.type) {\n case 'parseError': return new ParseError(structured.message);\n case 'stateError': return new StateError(structured.message);\n case 'renderError': return new RenderError(structured.message);\n case 'actionError': return new HypenError('ACTION_ERROR', structured.message);\n default: return new HypenError('UNKNOWN_ERROR', structured.message);\n }\n }\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",
|
|
6
6
|
"/**\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\" : \"info\",\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",
|
|
7
|
-
"/**\n * Abstract base class for Hypen WASM engine wrappers.\n *\n * The Hypen engine is distributed as a wasm-bindgen module — two builds:\n *\n * - `wasm-node` (bundler target) — used by `@hypen-space/server` on Node/Bun\n * - `wasm-browser` (web target) — used by `@hypen-space/web-engine` in browsers\n *\n * Both builds expose an identical `WasmEngine` class; the only genuine\n * platform differences are:\n *\n * 1. How the WASM module is *instantiated*. Node can synchronously `new\n * WasmEngine()` (the bundler target auto-initializes); the browser\n * target needs an async dynamic import of the JS glue code and an\n * explicit `wasm_init(url)` call before any `new WasmEngine()`.\n *\n * 2. How host state is *unwrapped* before it crosses the WASM boundary.\n * Node can use `structuredClone` (with a `__getSnapshot` fast path for\n * Hypen's proxy-backed state); the browser path does a\n * `JSON.parse(JSON.stringify())` round-trip plus a Map-to-Object\n * conversion for the native Map values that the wasm-bindgen browser\n * target returns in action payloads.\n *\n * Everything else — method wrappers, error classification, callback wiring,\n * revision plumbing — is identical between the two. That shared surface\n * lives here.\n *\n * Subclasses implement two abstract hooks:\n *\n * - `init(options?): Promise<void>` — platform-specific WASM setup. Must\n * assign `this.wasmEngine` and set `this.initialized = true` on success.\n *\n * - `unwrapForWasm<T>(value: T): T` — platform-specific proxy-to-plain\n * conversion. Called before any value crosses into WASM.\n */\n\nimport { frameworkLoggers } from \"./logger.js\";\nimport { classifyEngineError } from \"./result.js\";\nimport type {\n Patch,\n Action,\n RenderCallback,\n ActionHandler,\n ComponentResolver,\n} from \"./types.js\";\n\nconst log = frameworkLoggers.engine;\n\n/**\n * Shared base wrapping a wasm-bindgen `WasmEngine`. `any` here is load-\n * bearing: the concrete type is `WasmEngine` from either the `wasm-node`\n * or `wasm-browser` build, and those are separate generated `.d.ts`\n * files that core cannot (and should not) depend on. Subclasses keep\n * their own typed reference if they want stricter checking locally.\n */\nexport abstract class BaseEngine {\n protected wasmEngine: any = null;\n protected initialized = false;\n\n /**\n * Initialize the WASM module. Platform-specific.\n *\n * Must assign `this.wasmEngine` and set `this.initialized = true`.\n * Idempotent: must early-return if already initialized.\n */\n abstract init(options?: unknown): Promise<void>;\n\n /**\n * Convert a host value (possibly a Proxy, possibly containing Maps,\n * possibly wrapped in Hypen's observable state) into a plain-object\n * form safe to pass across the WASM boundary.\n *\n * Called on every `updateState` / `updateStateSparse` / `renderInto`\n * / `setContext` / `registerModule` entry point.\n */\n protected abstract unwrapForWasm<T>(value: T): T;\n\n /**\n * Guard that throws if the engine hasn't been initialized.\n * Returns the underlying WASM engine for chained access.\n */\n protected ensureInitialized(): any {\n if (!this.wasmEngine) {\n throw new Error(\"Engine not initialized. Call init() first.\");\n }\n return this.wasmEngine;\n }\n\n /**\n * Set the render callback that receives patches.\n */\n setRenderCallback(callback: RenderCallback): void {\n const engine = this.ensureInitialized();\n engine.setRenderCallback((patches: Patch[]) => {\n callback(patches);\n });\n }\n\n /**\n * Set the component resolver for dynamic component composition.\n */\n setComponentResolver(resolver: ComponentResolver): void {\n const engine = this.ensureInitialized();\n engine.setComponentResolver(\n (componentName: string, contextPath: string | null) => {\n return resolver(componentName, contextPath);\n },\n );\n }\n\n /**\n * Parse and render Hypen DSL source code.\n * @throws {ParseError} if the source fails to parse\n * @throws {RenderError} if rendering fails\n */\n renderSource(source: string): void {\n const engine = this.ensureInitialized();\n try {\n engine.renderSource(source);\n } catch (err) {\n throw classifyEngineError(err);\n }\n }\n\n /**\n * Render a lazy component (for lazy route loading).\n */\n renderLazyComponent(source: string): void {\n const engine = this.ensureInitialized();\n engine.renderLazyComponent(source);\n }\n\n /**\n * Render a component into a specific parent node (subtree rendering).\n * @throws {ParseError} if the source fails to parse\n * @throws {RenderError} if the parent node is not found or rendering fails\n */\n renderInto(\n source: string,\n parentNodeId: string,\n state: Record<string, any>,\n ): void {\n const engine = this.ensureInitialized();\n try {\n engine.renderInto(source, parentNodeId, this.unwrapForWasm(state));\n } catch (err) {\n throw classifyEngineError(err);\n }\n }\n\n /**\n * Apply a sparse state update.\n *\n * @param scope Lowercase module name to target a named module registered\n * via `registerModule`. Pass `null` (or empty string) to\n * target the primary module set via `setModule`.\n * @param paths Changed state paths (relative to the targeted module).\n * @param values Map of `path -> new value`.\n * @throws {StateError} if the state patch is invalid\n */\n updateStateSparse(\n scope: string | null,\n paths: string[],\n values: Record<string, any>,\n ): void {\n const engine = this.ensureInitialized();\n\n if (paths.length === 0) {\n return;\n }\n\n try {\n engine.updateStateSparse(scope ?? \"\", paths, this.unwrapForWasm(values));\n } catch (err) {\n throw classifyEngineError(err);\n }\n log.debug(\"State changed (sparse):\", { scope, paths });\n }\n\n /**\n * Apply a full-state patch. See [updateStateSparse] for `scope` semantics.\n * Prefer the sparse form when only a few paths changed.\n */\n updateState(scope: string | null, statePatch: Record<string, any>): void {\n const engine = this.ensureInitialized();\n engine.updateState(scope ?? \"\", this.unwrapForWasm(statePatch));\n }\n\n /**\n * Dispatch an action.\n * @throws {HypenError} if the action dispatch fails\n */\n dispatchAction(name: string, payload?: any): void {\n const engine = this.ensureInitialized();\n try {\n engine.dispatchAction(name, payload ?? null);\n } catch (err) {\n throw classifyEngineError(err);\n }\n }\n\n /**\n * Register an action handler. Errors thrown synchronously or via rejected\n * promises are caught and logged at the framework level; caller-side error\n * recovery should happen inside `handler`.\n *\n * Action payloads may contain platform-specific native values (e.g. Maps\n * in the browser target). Subclasses can override `normalizeAction` to\n * pre-process the action before calling the user handler.\n */\n onAction(actionName: string, handler: ActionHandler): void {\n const engine = this.ensureInitialized();\n engine.onAction(actionName, (action: Action) => {\n const normalized = this.normalizeAction(action);\n Promise.resolve(handler(normalized)).catch((err) => {\n log.error(\"Action handler error:\", err);\n });\n });\n }\n\n /**\n * Platform hook: normalize an incoming action before the user handler\n * sees it. Default identity; subclasses can override to unwrap native\n * values (e.g. browser Maps in action payloads).\n */\n protected normalizeAction(action: Action): Action {\n return action;\n }\n\n /**\n * Initialize the primary module.\n */\n setModule(\n name: string,\n actions: string[],\n stateKeys: string[],\n initialState: Record<string, any>,\n ): void {\n const engine = this.ensureInitialized();\n engine.setModule(name, actions, stateKeys, initialState);\n }\n\n /**\n * Register a named module for multi-module apps.\n *\n * Unlike setModule which sets the primary module, this registers an\n * additional module whose state is scoped to `module <name> { ... }`\n * blocks in the DSL.\n */\n registerModule(\n name: string,\n actions: string[],\n stateKeys: string[],\n initialState: Record<string, any>,\n ): void {\n const engine = this.ensureInitialized();\n engine.registerModule(\n name,\n actions,\n stateKeys,\n this.unwrapForWasm(initialState),\n );\n }\n\n /**\n * Get the current revision number.\n *\n * Note: the underlying WASM builder returns `bigint` in some targets\n * and `number` in others; this normalizes to `number` for consumer\n * ergonomics (revision counts don't exceed 2^53).\n */\n getRevision(): number {\n const engine = this.ensureInitialized();\n return Number(engine.getRevision());\n }\n\n /**\n * Clear resolved components and caches, preserving primitives and resolver.\n * Call before renderSource() during hot-reload so components are re-resolved\n * from fresh source files.\n */\n clearResolvedComponents(): void {\n const engine = this.ensureInitialized();\n engine.clearResolvedComponents();\n }\n\n /**\n * Clear the engine tree.\n */\n clearTree(): void {\n const engine = this.ensureInitialized();\n engine.clearTree();\n }\n\n /**\n * Full reset: clears tree, module, component registry, dependencies,\n * and revision. Render callback and component resolver are preserved.\n */\n reset(): void {\n const engine = this.ensureInitialized();\n engine.reset();\n }\n\n /**\n * Debug method to inspect parsed components.\n */\n debugParseComponent(source: string): string {\n const engine = this.ensureInitialized();\n return engine.debugParseComponent(source);\n }\n\n // ── Data Source Context ────────────────────────────────────────\n\n /**\n * Set (or replace) a named data source context.\n *\n * Registers the provider in the dependency graph, stores the data,\n * and re-renders every node bound to `$name.*`.\n *\n * @param name - Provider name (e.g., \"spacetime\", \"firebase\")\n * @param data - Full state object for this provider\n */\n setContext(name: string, data: Record<string, unknown>): void {\n const engine = this.ensureInitialized();\n try {\n engine.setContext(name, this.unwrapForWasm(data));\n } catch (err) {\n throw classifyEngineError(err);\n }\n log.debug(`Data source \"${name}\" context set`);\n }\n\n /**\n * Remove a data source context entirely.\n * Drops the provider's state and re-renders bound nodes (they resolve to null).\n */\n removeContext(name: string): void {\n const engine = this.ensureInitialized();\n engine.removeContext(name);\n }\n\n // ── Resource System ─────────────────────────────────────────────────\n\n /**\n * Register resources (name → raw SVG string) with the engine.\n *\n * Each SVG is parsed by the WASM engine. When the engine encounters\n * `Icon(@resources.heart)` in the DSL, it resolves the name from registered\n * resources and injects SVG path data into the Create patch props.\n *\n * @param map - Flat map of resource name to raw SVG string\n */\n registerResources(map: Record<string, string>): void {\n const engine = this.ensureInitialized();\n engine.registerResources(map);\n log.debug(`Resources registered (${Object.keys(map).length} entries)`);\n }\n}\n"
|
|
7
|
+
"/**\n * Abstract base class for Hypen WASM engine wrappers.\n *\n * The Hypen engine is distributed as a wasm-bindgen module — two builds:\n *\n * - `wasm-node` (bundler target) — used by `@hypen-space/server` on Node/Bun\n * - `wasm-browser` (web target) — used by `@hypen-space/web-engine` in browsers\n *\n * Both builds expose an identical `WasmEngine` class; the only genuine\n * platform differences are:\n *\n * 1. How the WASM module is *instantiated*. Node can synchronously `new\n * WasmEngine()` (the bundler target auto-initializes); the browser\n * target needs an async dynamic import of the JS glue code and an\n * explicit `wasm_init(url)` call before any `new WasmEngine()`.\n *\n * 2. How host state is *unwrapped* before it crosses the WASM boundary.\n * Node can use `structuredClone` (with a `__getSnapshot` fast path for\n * Hypen's proxy-backed state); the browser path does a\n * `JSON.parse(JSON.stringify())` round-trip plus a Map-to-Object\n * conversion for the native Map values that the wasm-bindgen browser\n * target returns in action payloads.\n *\n * Everything else — method wrappers, error classification, callback wiring,\n * revision plumbing — is identical between the two. That shared surface\n * lives here.\n *\n * Subclasses implement two abstract hooks:\n *\n * - `init(options?): Promise<void>` — platform-specific WASM setup. Must\n * assign `this.wasmEngine` and set `this.initialized = true` on success.\n *\n * - `unwrapForWasm<T>(value: T): T` — platform-specific proxy-to-plain\n * conversion. Called before any value crosses into WASM.\n */\n\nimport { frameworkLoggers } from \"./logger.js\";\nimport { classifyEngineError } from \"./result.js\";\nimport type {\n Patch,\n Action,\n RenderCallback,\n ActionHandler,\n ComponentResolver,\n} from \"./types.js\";\n\nconst log = frameworkLoggers.engine;\n\n/**\n * Shared base wrapping a wasm-bindgen `WasmEngine`. `any` here is load-\n * bearing: the concrete type is `WasmEngine` from either the `wasm-node`\n * or `wasm-browser` build, and those are separate generated `.d.ts`\n * files that core cannot (and should not) depend on. Subclasses keep\n * their own typed reference if they want stricter checking locally.\n */\nexport abstract class BaseEngine {\n protected wasmEngine: any = null;\n protected initialized = false;\n\n /**\n * Initialize the WASM module. Platform-specific.\n *\n * Must assign `this.wasmEngine` and set `this.initialized = true`.\n * Idempotent: must early-return if already initialized.\n */\n abstract init(options?: unknown): Promise<void>;\n\n /**\n * Convert a host value (possibly a Proxy, possibly containing Maps,\n * possibly wrapped in Hypen's observable state) into a plain-object\n * form safe to pass across the WASM boundary.\n *\n * Called on every `updateState` / `updateStateSparse` / `renderInto`\n * / `setContext` / `registerModule` entry point.\n */\n protected abstract unwrapForWasm<T>(value: T): T;\n\n /**\n * Guard that throws if the engine hasn't been initialized.\n * Returns the underlying WASM engine for chained access.\n */\n protected ensureInitialized(): any {\n if (!this.wasmEngine) {\n throw new Error(\"Engine not initialized. Call init() first.\");\n }\n return this.wasmEngine;\n }\n\n /**\n * Set the render callback that receives patches.\n */\n setRenderCallback(callback: RenderCallback): void {\n const engine = this.ensureInitialized();\n engine.setRenderCallback((patches: Patch[]) => {\n callback(patches);\n });\n }\n\n /**\n * Set the component resolver for dynamic component composition.\n */\n setComponentResolver(resolver: ComponentResolver): void {\n const engine = this.ensureInitialized();\n engine.setComponentResolver(\n (componentName: string, contextPath: string | null) => {\n return resolver(componentName, contextPath);\n },\n );\n }\n\n /**\n * Parse and render Hypen DSL source code.\n * @throws {ParseError} if the source fails to parse\n * @throws {RenderError} if rendering fails\n */\n renderSource(source: string): void {\n const engine = this.ensureInitialized();\n try {\n engine.renderSource(source);\n } catch (err) {\n throw classifyEngineError(err);\n }\n }\n\n /**\n * Render a lazy component (for lazy route loading).\n */\n renderLazyComponent(source: string): void {\n const engine = this.ensureInitialized();\n engine.renderLazyComponent(source);\n }\n\n /**\n * Render a component into a specific parent node (subtree rendering).\n * @throws {ParseError} if the source fails to parse\n * @throws {RenderError} if the parent node is not found or rendering fails\n */\n renderInto(\n source: string,\n parentNodeId: string,\n state: Record<string, any>,\n ): void {\n const engine = this.ensureInitialized();\n try {\n engine.renderInto(source, parentNodeId, this.unwrapForWasm(state));\n } catch (err) {\n throw classifyEngineError(err);\n }\n }\n\n /**\n * Apply a sparse state update.\n *\n * @param scope Lowercase module name to target a named module registered\n * via `registerModule`. Pass `null` (or empty string) to\n * target the primary module set via `setModule`.\n * @param paths Changed state paths (relative to the targeted module).\n * @param values Map of `path -> new value`.\n * @throws {StateError} if the state patch is invalid\n */\n updateStateSparse(\n scope: string | null,\n paths: string[],\n values: Record<string, any>,\n ): void {\n const engine = this.ensureInitialized();\n\n if (paths.length === 0) {\n return;\n }\n\n try {\n engine.updateStateSparse(scope ?? \"\", paths, this.unwrapForWasm(values));\n } catch (err) {\n throw classifyEngineError(err);\n }\n log.debug(\"State changed (sparse):\", { scope, paths });\n }\n\n /**\n * Apply a full-state patch. See [updateStateSparse] for `scope` semantics.\n * Prefer the sparse form when only a few paths changed.\n */\n updateState(scope: string | null, statePatch: Record<string, any>): void {\n const engine = this.ensureInitialized();\n engine.updateState(scope ?? \"\", this.unwrapForWasm(statePatch));\n }\n\n /**\n * Dispatch an action.\n * @throws {HypenError} if the action dispatch fails\n */\n dispatchAction(name: string, payload?: any): void {\n const engine = this.ensureInitialized();\n try {\n engine.dispatchAction(name, payload ?? null);\n } catch (err) {\n throw classifyEngineError(err);\n }\n }\n\n /**\n * Register an action handler. Errors thrown synchronously or via rejected\n * promises are caught and logged at the framework level; caller-side error\n * recovery should happen inside `handler`.\n *\n * Action payloads may contain platform-specific native values (e.g. Maps\n * in the browser target). Subclasses can override `normalizeAction` to\n * pre-process the action before calling the user handler.\n */\n onAction(actionName: string, handler: ActionHandler): void {\n const engine = this.ensureInitialized();\n engine.onAction(actionName, (action: Action) => {\n const normalized = this.normalizeAction(action);\n Promise.resolve(handler(normalized)).catch((err) => {\n log.error(\"Action handler error:\", err);\n });\n });\n }\n\n /**\n * Platform hook: normalize an incoming action before the user handler\n * sees it. Default identity; subclasses can override to unwrap native\n * values (e.g. browser Maps in action payloads).\n */\n protected normalizeAction(action: Action): Action {\n return action;\n }\n\n /**\n * Parse a Hypen DSL source and return every `Router { Route ... }`\n * block found in it. The SDK uses this to auto-wire a ManagedRouter\n * against the template without the user having to repeat the route\n * table in code.\n *\n * `moduleScope` is the enclosing `module X { ... }` scope (lowercased)\n * — `null` for the document root. `elementNames` is BFS-ordered so\n * the SDK can pick the first name that matches a registered\n * `HypenApp` module (wrappers like Column / Row come before the\n * real route component).\n */\n discoverRouters(source: string): Array<{\n moduleScope: string | null;\n routes: Array<{ path: string; elementNames: string[] }>;\n }> {\n const engine = this.ensureInitialized();\n const raw = (engine as any).discoverRouters?.(source);\n if (!raw) return [];\n // wasm-bindgen returns Maps; normalize to plain objects for\n // ergonomic downstream consumption. The nested structures were\n // encoded with serde_wasm_bindgen so plain objects is the right\n // post-decode shape for most consumers.\n const mapToObj = (v: unknown): any => {\n if (v instanceof Map) {\n const obj: Record<string, unknown> = {};\n for (const [k, val] of v.entries()) obj[String(k)] = mapToObj(val);\n return obj;\n }\n if (Array.isArray(v)) return v.map(mapToObj);\n if (v && typeof v === \"object\") {\n const obj: Record<string, unknown> = {};\n for (const [k, val] of Object.entries(v)) obj[k] = mapToObj(val);\n return obj;\n }\n return v;\n };\n const normalized = mapToObj(raw) as Array<{\n module_scope: string | null;\n moduleScope?: string | null;\n routes: Array<{\n path: string;\n element_names?: string[];\n elementNames?: string[];\n }>;\n }>;\n return normalized.map((r) => ({\n moduleScope: r.moduleScope ?? r.module_scope ?? null,\n routes: r.routes.map((route) => ({\n path: route.path,\n elementNames: route.elementNames ?? route.element_names ?? [],\n })),\n }));\n }\n\n /**\n * Initialize the primary module.\n */\n setModule(\n name: string,\n actions: string[],\n stateKeys: string[],\n initialState: Record<string, any>,\n ): void {\n const engine = this.ensureInitialized();\n engine.setModule(name, actions, stateKeys, initialState);\n }\n\n /**\n * Register a named module for multi-module apps.\n *\n * Unlike setModule which sets the primary module, this registers an\n * additional module whose state is scoped to `module <name> { ... }`\n * blocks in the DSL.\n */\n registerModule(\n name: string,\n actions: string[],\n stateKeys: string[],\n initialState: Record<string, any>,\n ): void {\n const engine = this.ensureInitialized();\n engine.registerModule(\n name,\n actions,\n stateKeys,\n this.unwrapForWasm(initialState),\n );\n }\n\n /**\n * Get the current revision number.\n *\n * Note: the underlying WASM builder returns `bigint` in some targets\n * and `number` in others; this normalizes to `number` for consumer\n * ergonomics (revision counts don't exceed 2^53).\n */\n getRevision(): number {\n const engine = this.ensureInitialized();\n return Number(engine.getRevision());\n }\n\n /**\n * Clear resolved components and caches, preserving primitives and resolver.\n * Call before renderSource() during hot-reload so components are re-resolved\n * from fresh source files.\n */\n clearResolvedComponents(): void {\n const engine = this.ensureInitialized();\n engine.clearResolvedComponents();\n }\n\n /**\n * Clear the engine tree.\n */\n clearTree(): void {\n const engine = this.ensureInitialized();\n engine.clearTree();\n }\n\n /**\n * Full reset: clears tree, module, component registry, dependencies,\n * and revision. Render callback and component resolver are preserved.\n */\n reset(): void {\n const engine = this.ensureInitialized();\n engine.reset();\n }\n\n /**\n * Debug method to inspect parsed components.\n */\n debugParseComponent(source: string): string {\n const engine = this.ensureInitialized();\n return engine.debugParseComponent(source);\n }\n\n // ── Data Source Context ────────────────────────────────────────\n\n /**\n * Set (or replace) a named data source context.\n *\n * Registers the provider in the dependency graph, stores the data,\n * and re-renders every node bound to `$name.*`.\n *\n * @param name - Provider name (e.g., \"spacetime\", \"firebase\")\n * @param data - Full state object for this provider\n */\n setContext(name: string, data: Record<string, unknown>): void {\n const engine = this.ensureInitialized();\n try {\n engine.setContext(name, this.unwrapForWasm(data));\n } catch (err) {\n throw classifyEngineError(err);\n }\n log.debug(`Data source \"${name}\" context set`);\n }\n\n /**\n * Remove a data source context entirely.\n * Drops the provider's state and re-renders bound nodes (they resolve to null).\n */\n removeContext(name: string): void {\n const engine = this.ensureInitialized();\n engine.removeContext(name);\n }\n\n // ── Resource System ─────────────────────────────────────────────────\n\n /**\n * Register resources (name → raw SVG string) with the engine.\n *\n * Each SVG is parsed by the WASM engine. When the engine encounters\n * `Icon(@resources.heart)` in the DSL, it resolves the name from registered\n * resources and injects SVG path data into the Create patch props.\n *\n * @param map - Flat map of resource name to raw SVG string\n */\n registerResources(map: Record<string, string>): void {\n const engine = this.ensureInitialized();\n engine.registerResources(map);\n log.debug(`Resources registered (${Object.keys(map).length} entries)`);\n }\n}\n"
|
|
8
8
|
],
|
|
9
|
-
"mappings": "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",
|
|
10
|
-
"debugId": "
|
|
9
|
+
"mappings": "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",
|
|
10
|
+
"debugId": "F470DF8DA6B0624C64756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
package/dist/index.browser.js
CHANGED
|
@@ -262,6 +262,53 @@ class DataSourceManager {
|
|
|
262
262
|
}
|
|
263
263
|
}
|
|
264
264
|
|
|
265
|
+
// src/portable.ts
|
|
266
|
+
function notInstalled(name) {
|
|
267
|
+
throw new Error(`[@hypen-space/core] Portable helper "${name}" called before the engine was installed. ` + `Import @hypen-space/server, @hypen-space/web-engine, or call setPortableImpl() before use.`);
|
|
268
|
+
}
|
|
269
|
+
var current = {
|
|
270
|
+
diffState: () => notInstalled("diffState"),
|
|
271
|
+
matchPath: () => notInstalled("matchPath"),
|
|
272
|
+
pathGet: () => notInstalled("pathGet"),
|
|
273
|
+
pathHas: () => notInstalled("pathHas"),
|
|
274
|
+
pathSet: () => notInstalled("pathSet"),
|
|
275
|
+
pathDelete: () => notInstalled("pathDelete"),
|
|
276
|
+
encodeUriComponent: () => notInstalled("encodeUriComponent"),
|
|
277
|
+
decodeUriComponent: () => notInstalled("decodeUriComponent"),
|
|
278
|
+
parseQuery: () => notInstalled("parseQuery"),
|
|
279
|
+
buildUrl: () => notInstalled("buildUrl")
|
|
280
|
+
};
|
|
281
|
+
function setPortableImpl(impl) {
|
|
282
|
+
if (impl === null) {
|
|
283
|
+
current = {
|
|
284
|
+
diffState: () => notInstalled("diffState"),
|
|
285
|
+
matchPath: () => notInstalled("matchPath"),
|
|
286
|
+
pathGet: () => notInstalled("pathGet"),
|
|
287
|
+
pathHas: () => notInstalled("pathHas"),
|
|
288
|
+
pathSet: () => notInstalled("pathSet"),
|
|
289
|
+
pathDelete: () => notInstalled("pathDelete"),
|
|
290
|
+
encodeUriComponent: () => notInstalled("encodeUriComponent"),
|
|
291
|
+
decodeUriComponent: () => notInstalled("decodeUriComponent"),
|
|
292
|
+
parseQuery: () => notInstalled("parseQuery"),
|
|
293
|
+
buildUrl: () => notInstalled("buildUrl")
|
|
294
|
+
};
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
current = impl;
|
|
298
|
+
}
|
|
299
|
+
var portable = {
|
|
300
|
+
diffState: (o, n, b) => current.diffState(o, n, b),
|
|
301
|
+
matchPath: (p, path) => current.matchPath(p, path),
|
|
302
|
+
pathGet: (v, p) => current.pathGet(v, p),
|
|
303
|
+
pathHas: (v, p) => current.pathHas(v, p),
|
|
304
|
+
pathSet: (v, p, nv) => current.pathSet(v, p, nv),
|
|
305
|
+
pathDelete: (v, p) => current.pathDelete(v, p),
|
|
306
|
+
encodeUriComponent: (s) => current.encodeUriComponent(s),
|
|
307
|
+
decodeUriComponent: (s) => current.decodeUriComponent(s),
|
|
308
|
+
parseQuery: (f) => current.parseQuery(f),
|
|
309
|
+
buildUrl: (p, q) => current.buildUrl(p, q)
|
|
310
|
+
};
|
|
311
|
+
|
|
265
312
|
// src/state.ts
|
|
266
313
|
var IS_PROXY = Symbol.for("hypen.isProxy");
|
|
267
314
|
var RAW_TARGET = Symbol.for("hypen.rawTarget");
|
|
@@ -321,51 +368,7 @@ function deepClone(obj) {
|
|
|
321
368
|
return cloneInternal(obj);
|
|
322
369
|
}
|
|
323
370
|
function diffState(oldState, newState, basePath = "") {
|
|
324
|
-
|
|
325
|
-
const newValues = {};
|
|
326
|
-
function diff(oldVal, newVal, path) {
|
|
327
|
-
if (oldVal === newVal)
|
|
328
|
-
return;
|
|
329
|
-
if (typeof oldVal !== "object" || typeof newVal !== "object" || oldVal === null || newVal === null) {
|
|
330
|
-
if (oldVal !== newVal) {
|
|
331
|
-
paths.push(path);
|
|
332
|
-
newValues[path] = newVal;
|
|
333
|
-
}
|
|
334
|
-
return;
|
|
335
|
-
}
|
|
336
|
-
if (Array.isArray(oldVal) || Array.isArray(newVal)) {
|
|
337
|
-
if (!Array.isArray(oldVal) || !Array.isArray(newVal) || oldVal.length !== newVal.length) {
|
|
338
|
-
paths.push(path);
|
|
339
|
-
newValues[path] = newVal;
|
|
340
|
-
return;
|
|
341
|
-
}
|
|
342
|
-
for (let i = 0;i < newVal.length; i++) {
|
|
343
|
-
const itemPath = path ? `${path}.${i}` : `${i}`;
|
|
344
|
-
diff(oldVal[i], newVal[i], itemPath);
|
|
345
|
-
}
|
|
346
|
-
return;
|
|
347
|
-
}
|
|
348
|
-
const oldKeys = new Set(Object.keys(oldVal));
|
|
349
|
-
const newKeys = new Set(Object.keys(newVal));
|
|
350
|
-
for (const key of newKeys) {
|
|
351
|
-
const propPath = path ? `${path}.${key}` : key;
|
|
352
|
-
if (!oldKeys.has(key)) {
|
|
353
|
-
paths.push(propPath);
|
|
354
|
-
newValues[propPath] = newVal[key];
|
|
355
|
-
} else {
|
|
356
|
-
diff(oldVal[key], newVal[key], propPath);
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
for (const key of oldKeys) {
|
|
360
|
-
if (!newKeys.has(key)) {
|
|
361
|
-
const propPath = path ? `${path}.${key}` : key;
|
|
362
|
-
paths.push(propPath);
|
|
363
|
-
newValues[propPath] = undefined;
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
diff(oldState, newState, basePath);
|
|
368
|
-
return { paths, newValues };
|
|
371
|
+
return portable.diffState(oldState, newState, basePath);
|
|
369
372
|
}
|
|
370
373
|
function createObservableState(initialState, options) {
|
|
371
374
|
const opts = options || { onChange: () => {} };
|
|
@@ -714,6 +717,8 @@ class HypenAppBuilder {
|
|
|
714
717
|
initialState;
|
|
715
718
|
options;
|
|
716
719
|
createdHandler;
|
|
720
|
+
activatedHandler;
|
|
721
|
+
deactivatedHandler;
|
|
717
722
|
actionHandlers = new Map;
|
|
718
723
|
destroyedHandler;
|
|
719
724
|
disconnectHandler;
|
|
@@ -737,6 +742,14 @@ class HypenAppBuilder {
|
|
|
737
742
|
this.actionHandlers.set(name, fn);
|
|
738
743
|
return this;
|
|
739
744
|
}
|
|
745
|
+
onActivated(fn) {
|
|
746
|
+
this.activatedHandler = fn;
|
|
747
|
+
return this;
|
|
748
|
+
}
|
|
749
|
+
onDeactivated(fn) {
|
|
750
|
+
this.deactivatedHandler = fn;
|
|
751
|
+
return this;
|
|
752
|
+
}
|
|
740
753
|
onDestroyed(fn) {
|
|
741
754
|
this.destroyedHandler = fn;
|
|
742
755
|
return this;
|
|
@@ -788,6 +801,8 @@ class HypenAppBuilder {
|
|
|
788
801
|
stateStore: this._stateStore,
|
|
789
802
|
handlers: {
|
|
790
803
|
onCreated: this.createdHandler,
|
|
804
|
+
onActivated: this.activatedHandler,
|
|
805
|
+
onDeactivated: this.deactivatedHandler,
|
|
791
806
|
onAction: this.actionHandlers,
|
|
792
807
|
onDestroyed: this.destroyedHandler,
|
|
793
808
|
onDisconnect: this.disconnectHandler,
|
|
@@ -845,6 +860,7 @@ class HypenModuleInstance {
|
|
|
845
860
|
definition;
|
|
846
861
|
state;
|
|
847
862
|
isDestroyed = false;
|
|
863
|
+
isActive = false;
|
|
848
864
|
router;
|
|
849
865
|
globalContext;
|
|
850
866
|
stateChangeCallbacks = [];
|
|
@@ -924,6 +940,43 @@ class HypenModuleInstance {
|
|
|
924
940
|
async waitForReady() {
|
|
925
941
|
await this._readyPromise;
|
|
926
942
|
}
|
|
943
|
+
async activate() {
|
|
944
|
+
if (this.isDestroyed || this.isActive)
|
|
945
|
+
return;
|
|
946
|
+
await this._readyPromise;
|
|
947
|
+
if (this.isDestroyed || this.isActive)
|
|
948
|
+
return;
|
|
949
|
+
this.isActive = true;
|
|
950
|
+
if (this.definition.handlers.onActivated) {
|
|
951
|
+
const context = this.globalContext ? this.createGlobalContextAPI() : undefined;
|
|
952
|
+
try {
|
|
953
|
+
await this.definition.handlers.onActivated(this.state, context);
|
|
954
|
+
} catch (e) {
|
|
955
|
+
const error = e instanceof HypenError ? e : new ActionError("onActivated", e);
|
|
956
|
+
const shouldRethrow = await this.handleError(error, { lifecycle: "activated" });
|
|
957
|
+
if (shouldRethrow) {
|
|
958
|
+
throw error;
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
async deactivate() {
|
|
964
|
+
if (this.isDestroyed || !this.isActive)
|
|
965
|
+
return;
|
|
966
|
+
this.isActive = false;
|
|
967
|
+
if (this.definition.handlers.onDeactivated) {
|
|
968
|
+
const context = this.globalContext ? this.createGlobalContextAPI() : undefined;
|
|
969
|
+
try {
|
|
970
|
+
await this.definition.handlers.onDeactivated(this.state, context);
|
|
971
|
+
} catch (e) {
|
|
972
|
+
const error = e instanceof HypenError ? e : new ActionError("onDeactivated", e);
|
|
973
|
+
const shouldRethrow = await this.handleError(error, { lifecycle: "deactivated" });
|
|
974
|
+
if (shouldRethrow) {
|
|
975
|
+
throw error;
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
}
|
|
927
980
|
createGlobalContextAPI() {
|
|
928
981
|
if (!this.globalContext) {
|
|
929
982
|
throw new Error("Global context not available");
|
|
@@ -1072,6 +1125,9 @@ class HypenModuleInstance {
|
|
|
1072
1125
|
async destroy() {
|
|
1073
1126
|
if (this.isDestroyed)
|
|
1074
1127
|
return;
|
|
1128
|
+
if (this.isActive) {
|
|
1129
|
+
await this.deactivate();
|
|
1130
|
+
}
|
|
1075
1131
|
if (this.currentPersistKey && this.stateStore) {
|
|
1076
1132
|
clearTimeout(this.persistDebounceTimer);
|
|
1077
1133
|
const snapshot = getStateSnapshot(this.state);
|
|
@@ -1430,46 +1486,22 @@ class HypenRouter {
|
|
|
1430
1486
|
return getStateSnapshot(this.state);
|
|
1431
1487
|
}
|
|
1432
1488
|
matchPath(pattern, path) {
|
|
1433
|
-
if (!pattern || typeof pattern !== "string")
|
|
1489
|
+
if (!pattern || typeof pattern !== "string")
|
|
1434
1490
|
return null;
|
|
1435
|
-
|
|
1436
|
-
if (!path || typeof path !== "string") {
|
|
1491
|
+
if (!path || typeof path !== "string")
|
|
1437
1492
|
return null;
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
params: {},
|
|
1442
|
-
query: this.state.query,
|
|
1443
|
-
path
|
|
1444
|
-
};
|
|
1445
|
-
}
|
|
1446
|
-
if (pattern.endsWith("/*")) {
|
|
1447
|
-
const prefix = pattern.slice(0, -2);
|
|
1448
|
-
if (path === prefix || path.startsWith(prefix + "/")) {
|
|
1449
|
-
return {
|
|
1450
|
-
params: {},
|
|
1451
|
-
query: this.state.query,
|
|
1452
|
-
path
|
|
1453
|
-
};
|
|
1454
|
-
}
|
|
1455
|
-
return null;
|
|
1456
|
-
}
|
|
1457
|
-
const paramNames = [];
|
|
1458
|
-
const regexPattern = pattern.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g, (_, name) => {
|
|
1459
|
-
paramNames.push(name);
|
|
1460
|
-
return "([^/]+)";
|
|
1461
|
-
}).replace(/\*/g, ".*");
|
|
1462
|
-
const regex = new RegExp(`^${regexPattern}$`);
|
|
1463
|
-
const match2 = path.match(regex);
|
|
1464
|
-
if (!match2)
|
|
1493
|
+
const cleanPath = path.split("?")[0] ?? path;
|
|
1494
|
+
const result = portable.matchPath(pattern, cleanPath);
|
|
1495
|
+
if (!result)
|
|
1465
1496
|
return null;
|
|
1466
1497
|
const params = {};
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1498
|
+
for (const [name, raw] of Object.entries(result.params)) {
|
|
1499
|
+
try {
|
|
1500
|
+
params[name] = decodeURIComponent(raw);
|
|
1501
|
+
} catch {
|
|
1502
|
+
params[name] = raw;
|
|
1471
1503
|
}
|
|
1472
|
-
}
|
|
1504
|
+
}
|
|
1473
1505
|
return {
|
|
1474
1506
|
params,
|
|
1475
1507
|
query: this.state.query,
|
|
@@ -1944,13 +1976,13 @@ class RemoteEngine {
|
|
|
1944
1976
|
if (!state || typeof state !== "object")
|
|
1945
1977
|
return;
|
|
1946
1978
|
const parts = key.split(".");
|
|
1947
|
-
let
|
|
1979
|
+
let current2 = state;
|
|
1948
1980
|
for (const part of parts) {
|
|
1949
|
-
if (
|
|
1981
|
+
if (current2 == null || typeof current2 !== "object")
|
|
1950
1982
|
return;
|
|
1951
|
-
|
|
1983
|
+
current2 = current2[part];
|
|
1952
1984
|
}
|
|
1953
|
-
return typeof
|
|
1985
|
+
return typeof current2 === "string" ? current2 : undefined;
|
|
1954
1986
|
}
|
|
1955
1987
|
dispatchAction(action, payload) {
|
|
1956
1988
|
if (this.state !== "connected" || !this.ws) {
|
|
@@ -2154,4 +2186,4 @@ export {
|
|
|
2154
2186
|
BaseRenderer
|
|
2155
2187
|
};
|
|
2156
2188
|
|
|
2157
|
-
//# debugId=
|
|
2189
|
+
//# debugId=6B26429FE11452AB64756E2164756E21
|