@almadar/runtime 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/loader/external-loader.ts","../src/EventBus.ts","../src/BindingResolver.ts","../src/StateMachineCore.ts","../src/EffectExecutor.ts","../src/resolver/reference-resolver.ts","../src/loader/index.ts","../src/UsesIntegration.ts"],"names":["path"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * External Orbital Loader\n *\n * Loads external .orb files from various sources:\n * - Local filesystem (relative paths)\n * - Standard library (std/...)\n * - Scoped packages (@name/...)\n *\n * @packageDocumentation\n */\n\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { Orbital, OrbitalSchema } from \"@almadar/core\";\nimport { OrbitalSchemaSchema } from \"@almadar/core\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Result of loading an orbital.\n */\nexport interface LoadedOrbital {\n /** The loaded orbital */\n orbital: Orbital;\n\n /** Source path (resolved absolute path) */\n sourcePath: string;\n\n /** Original import path */\n importPath: string;\n}\n\n/**\n * Result of loading an orbital schema (may contain multiple orbitals).\n */\nexport interface LoadedSchema {\n /** The loaded schema */\n schema: OrbitalSchema;\n\n /** Source path (resolved absolute path) */\n sourcePath: string;\n\n /** Original import path */\n importPath: string;\n}\n\n/**\n * Loader options.\n */\nexport interface LoaderOptions {\n /** Base directory for resolving relative imports */\n basePath: string;\n\n /** Standard library root path */\n stdLibPath?: string;\n\n /** Scoped package roots (e.g., { \"@game-lib\": \"/path/to/lib\" }) */\n scopedPaths?: Record<string, string>;\n\n /** Whether to allow paths outside basePath (security) */\n allowOutsideBasePath?: boolean;\n}\n\n/**\n * Loader result with error handling.\n */\nexport type LoadResult<T> =\n | { success: true; data: T }\n | { success: false; error: string };\n\n// ============================================================================\n// Circular Import Detection\n// ============================================================================\n\n/**\n * Tracks import chains to detect circular imports.\n */\nexport class ImportChain {\n private chain: string[] = [];\n\n /**\n * Try to add a path to the chain.\n * @returns Error message if circular, null if OK\n */\n push(absolutePath: string): string | null {\n if (this.chain.includes(absolutePath)) {\n const cycle = [...this.chain.slice(this.chain.indexOf(absolutePath)), absolutePath];\n return `Circular import detected: ${cycle.join(\" -> \")}`;\n }\n this.chain.push(absolutePath);\n return null;\n }\n\n /**\n * Remove the last path from the chain.\n */\n pop(): void {\n this.chain.pop();\n }\n\n /**\n * Clone the chain for nested loading.\n */\n clone(): ImportChain {\n const newChain = new ImportChain();\n newChain.chain = [...this.chain];\n return newChain;\n }\n}\n\n// ============================================================================\n// Cache\n// ============================================================================\n\n/**\n * Cache for loaded schemas to avoid re-loading.\n */\nexport class LoaderCache {\n private cache = new Map<string, LoadedSchema>();\n\n get(absolutePath: string): LoadedSchema | undefined {\n return this.cache.get(absolutePath);\n }\n\n set(absolutePath: string, schema: LoadedSchema): void {\n this.cache.set(absolutePath, schema);\n }\n\n has(absolutePath: string): boolean {\n return this.cache.has(absolutePath);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n get size(): number {\n return this.cache.size;\n }\n}\n\n// ============================================================================\n// External Orbital Loader\n// ============================================================================\n\n/**\n * ExternalOrbitalLoader - Loads external .orb files with security and caching.\n *\n * Security Model:\n * - By default, only allows loading from within basePath\n * - std library has its own allowed path\n * - Scoped packages have their own allowed paths\n * - No path traversal outside allowed directories\n *\n * @example\n * ```typescript\n * const loader = new ExternalOrbitalLoader({\n * basePath: \"/project/schemas\",\n * stdLibPath: \"/project/std\",\n * });\n *\n * // Load relative .orb file\n * const result = await loader.load(\"./shared/health.orb\");\n *\n * // Load from std library\n * const stdResult = await loader.load(\"std/behaviors/game-core\");\n * ```\n */\nexport class ExternalOrbitalLoader {\n private options: Required<LoaderOptions>;\n private cache: LoaderCache;\n\n constructor(options: LoaderOptions) {\n this.options = {\n stdLibPath: options.stdLibPath ?? \"\",\n scopedPaths: options.scopedPaths ?? {},\n allowOutsideBasePath: options.allowOutsideBasePath ?? false,\n ...options,\n };\n this.cache = new LoaderCache();\n }\n\n /**\n * Load a schema from an import path.\n *\n * @param importPath - The import path (e.g., \"./health.orb\", \"std/behaviors/game-core\")\n * @param fromPath - The path of the file doing the import (for relative resolution)\n * @param chain - Import chain for circular detection\n */\n async load(\n importPath: string,\n fromPath?: string,\n chain?: ImportChain\n ): Promise<LoadResult<LoadedSchema>> {\n const importChain = chain ?? new ImportChain();\n\n // Resolve the absolute path\n const resolveResult = this.resolvePath(importPath, fromPath);\n if (!resolveResult.success) {\n return resolveResult;\n }\n const absolutePath = resolveResult.data;\n\n // Check for circular imports\n const circularError = importChain.push(absolutePath);\n if (circularError) {\n return { success: false, error: circularError };\n }\n\n try {\n // Check cache\n const cached = this.cache.get(absolutePath);\n if (cached) {\n return { success: true, data: cached };\n }\n\n // Load and parse the file\n const loadResult = await this.loadFile(absolutePath);\n if (!loadResult.success) {\n return loadResult;\n }\n\n const loaded: LoadedSchema = {\n schema: loadResult.data,\n sourcePath: absolutePath,\n importPath,\n };\n\n // Cache the result\n this.cache.set(absolutePath, loaded);\n\n return { success: true, data: loaded };\n } finally {\n importChain.pop();\n }\n }\n\n /**\n * Load a specific orbital from a schema by name.\n *\n * @param importPath - The import path\n * @param orbitalName - The orbital name (optional, defaults to first orbital)\n * @param fromPath - The path of the file doing the import\n * @param chain - Import chain for circular detection\n */\n async loadOrbital(\n importPath: string,\n orbitalName?: string,\n fromPath?: string,\n chain?: ImportChain\n ): Promise<LoadResult<LoadedOrbital>> {\n const schemaResult = await this.load(importPath, fromPath, chain);\n if (!schemaResult.success) {\n return schemaResult;\n }\n\n const schema = schemaResult.data.schema;\n let orbital: Orbital;\n\n if (orbitalName) {\n const found = schema.orbitals.find((o: Orbital) => o.name === orbitalName);\n if (!found) {\n return {\n success: false,\n error: `Orbital \"${orbitalName}\" not found in ${importPath}. Available: ${schema.orbitals.map((o: Orbital) => o.name).join(\", \")}`,\n };\n }\n orbital = found;\n } else {\n // Default to first orbital\n if (schema.orbitals.length === 0) {\n return {\n success: false,\n error: `No orbitals found in ${importPath}`,\n };\n }\n orbital = schema.orbitals[0];\n }\n\n return {\n success: true,\n data: {\n orbital,\n sourcePath: schemaResult.data.sourcePath,\n importPath,\n },\n };\n }\n\n /**\n * Resolve an import path to an absolute filesystem path.\n */\n resolvePath(importPath: string, fromPath?: string): LoadResult<string> {\n // Standard library\n if (importPath.startsWith(\"std/\")) {\n return this.resolveStdPath(importPath);\n }\n\n // Scoped packages\n if (importPath.startsWith(\"@\")) {\n return this.resolveScopedPath(importPath);\n }\n\n // Relative paths\n if (importPath.startsWith(\"./\") || importPath.startsWith(\"../\")) {\n return this.resolveRelativePath(importPath, fromPath);\n }\n\n // Absolute paths (only if allowed)\n if (path.isAbsolute(importPath)) {\n if (!this.options.allowOutsideBasePath) {\n return {\n success: false,\n error: `Absolute paths not allowed: ${importPath}`,\n };\n }\n return { success: true, data: importPath };\n }\n\n // Default: treat as relative to base path\n return this.resolveRelativePath(`./${importPath}`, fromPath);\n }\n\n /**\n * Resolve a standard library path.\n */\n private resolveStdPath(importPath: string): LoadResult<string> {\n if (!this.options.stdLibPath) {\n return {\n success: false,\n error: `Standard library path not configured. Cannot load: ${importPath}`,\n };\n }\n\n // std/behaviors/game-core -> stdLibPath/behaviors/game-core.orb\n const relativePath = importPath.slice(4); // Remove \"std/\"\n let absolutePath = path.join(this.options.stdLibPath, relativePath);\n\n // Add .orb extension if not present\n if (!absolutePath.endsWith(\".orb\")) {\n absolutePath += \".orb\";\n }\n\n // Validate it's within std library\n const normalizedPath = path.normalize(absolutePath);\n const normalizedStdLib = path.normalize(this.options.stdLibPath);\n if (!normalizedPath.startsWith(normalizedStdLib)) {\n return {\n success: false,\n error: `Path traversal outside std library: ${importPath}`,\n };\n }\n\n return { success: true, data: absolutePath };\n }\n\n /**\n * Resolve a scoped package path.\n */\n private resolveScopedPath(importPath: string): LoadResult<string> {\n // Extract scope: @game-lib/enemies.orb -> @game-lib\n const match = importPath.match(/^(@[^/]+)/);\n if (!match) {\n return {\n success: false,\n error: `Invalid scoped package path: ${importPath}`,\n };\n }\n\n const scope = match[1];\n const scopeRoot = this.options.scopedPaths[scope];\n if (!scopeRoot) {\n return {\n success: false,\n error: `Scoped package \"${scope}\" not configured. Available: ${Object.keys(this.options.scopedPaths).join(\", \") || \"none\"}`,\n };\n }\n\n // @game-lib/enemies.orb -> scopeRoot/enemies.orb\n const relativePath = importPath.slice(scope.length + 1); // Remove \"@scope/\"\n let absolutePath = path.join(scopeRoot, relativePath);\n\n // Add .orb extension if not present\n if (!absolutePath.endsWith(\".orb\")) {\n absolutePath += \".orb\";\n }\n\n // Validate it's within scope root\n const normalizedPath = path.normalize(absolutePath);\n const normalizedRoot = path.normalize(scopeRoot);\n if (!normalizedPath.startsWith(normalizedRoot)) {\n return {\n success: false,\n error: `Path traversal outside scoped package: ${importPath}`,\n };\n }\n\n return { success: true, data: absolutePath };\n }\n\n /**\n * Resolve a relative path.\n */\n private resolveRelativePath(\n importPath: string,\n fromPath?: string\n ): LoadResult<string> {\n const baseDir = fromPath\n ? path.dirname(fromPath)\n : this.options.basePath;\n\n let absolutePath = path.resolve(baseDir, importPath);\n\n // Add .orb extension if not present\n if (!absolutePath.endsWith(\".orb\")) {\n absolutePath += \".orb\";\n }\n\n // Security check: ensure within base path\n if (!this.options.allowOutsideBasePath) {\n const normalizedPath = path.normalize(absolutePath);\n const normalizedBase = path.normalize(this.options.basePath);\n if (!normalizedPath.startsWith(normalizedBase)) {\n return {\n success: false,\n error: `Path traversal outside base path: ${importPath}. Base: ${this.options.basePath}`,\n };\n }\n }\n\n return { success: true, data: absolutePath };\n }\n\n /**\n * Load and parse an .orb file.\n */\n private async loadFile(absolutePath: string): Promise<LoadResult<OrbitalSchema>> {\n try {\n // Check file exists\n if (!fs.existsSync(absolutePath)) {\n return {\n success: false,\n error: `File not found: ${absolutePath}`,\n };\n }\n\n // Read file\n const content = await fs.promises.readFile(absolutePath, \"utf-8\");\n\n // Parse JSON\n let data: unknown;\n try {\n data = JSON.parse(content);\n } catch (e) {\n return {\n success: false,\n error: `Invalid JSON in ${absolutePath}: ${e instanceof Error ? e.message : String(e)}`,\n };\n }\n\n // Validate with Zod\n const parseResult = OrbitalSchemaSchema.safeParse(data);\n if (!parseResult.success) {\n const errors = parseResult.error.errors\n .map((e) => ` - ${e.path.join(\".\")}: ${e.message}`)\n .join(\"\\n\");\n return {\n success: false,\n error: `Invalid schema in ${absolutePath}:\\n${errors}`,\n };\n }\n\n return { success: true, data: parseResult.data as OrbitalSchema };\n } catch (e) {\n return {\n success: false,\n error: `Failed to load ${absolutePath}: ${e instanceof Error ? e.message : String(e)}`,\n };\n }\n }\n\n /**\n * Clear the cache.\n */\n clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Get cache statistics.\n */\n getCacheStats(): { size: number } {\n return { size: this.cache.size };\n }\n}\n\n// ============================================================================\n// Factory Function\n// ============================================================================\n\n/**\n * Create a loader with sensible defaults.\n */\nexport function createLoader(basePath: string, options?: Partial<LoaderOptions>): ExternalOrbitalLoader {\n return new ExternalOrbitalLoader({\n basePath,\n ...options,\n });\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Parse an import path with optional fragment.\n *\n * @example\n * parseImportPath(\"./health.orb\") // { path: \"./health.orb\", fragment: undefined }\n * parseImportPath(\"./game.orb#Player\") // { path: \"./game.orb\", fragment: \"Player\" }\n */\nexport function parseImportPath(importPath: string): { path: string; fragment?: string } {\n const hashIndex = importPath.indexOf(\"#\");\n if (hashIndex === -1) {\n return { path: importPath };\n }\n return {\n path: importPath.slice(0, hashIndex),\n fragment: importPath.slice(hashIndex + 1),\n };\n}\n","/**\n * EventBus - Platform-Agnostic Pub/Sub Implementation\n *\n * Pure TypeScript event bus for cross-trait communication.\n * Works on both client (browser) and server (Node.js).\n *\n * @packageDocumentation\n */\n\nimport type { IEventBus, RuntimeEvent, EventListener, Unsubscribe } from './types.js';\n\n/**\n * EventBus - Simple pub/sub event bus\n *\n * @example\n * ```typescript\n * const bus = new EventBus({ debug: true });\n *\n * // Subscribe\n * const unsub = bus.on('ORDER_CONFIRMED', (event) => {\n * console.log('Order confirmed:', event.payload);\n * });\n *\n * // Emit\n * bus.emit('ORDER_CONFIRMED', { orderId: '123' });\n *\n * // Unsubscribe\n * unsub();\n * ```\n */\nexport class EventBus implements IEventBus {\n private listeners: Map<string, Set<EventListener>> = new Map();\n private debug: boolean;\n\n constructor(options: { debug?: boolean } = {}) {\n this.debug = options.debug ?? false;\n }\n\n /**\n * Emit an event to all registered listeners\n */\n emit(\n type: string,\n payload?: Record<string, unknown>,\n source?: RuntimeEvent['source']\n ): void {\n const event: RuntimeEvent = {\n type,\n payload,\n timestamp: Date.now(),\n source,\n };\n\n const listeners = this.listeners.get(type);\n const listenerCount = listeners?.size ?? 0;\n\n if (this.debug) {\n if (listenerCount > 0) {\n console.log(`[EventBus] Emit: ${type} → ${listenerCount} listener(s)`, payload);\n } else {\n console.warn(`[EventBus] Emit: ${type} (NO LISTENERS)`, payload);\n }\n }\n\n if (listeners) {\n // Copy to avoid mutation during iteration\n const listenersCopy = Array.from(listeners);\n for (const listener of listenersCopy) {\n try {\n listener(event);\n } catch (error) {\n console.error(`[EventBus] Error in listener for '${type}':`, error);\n }\n }\n }\n\n // Wildcard listeners receive all events\n if (type !== '*') {\n const wildcardListeners = this.listeners.get('*');\n if (wildcardListeners) {\n for (const listener of Array.from(wildcardListeners)) {\n try {\n listener(event);\n } catch (error) {\n console.error(`[EventBus] Error in wildcard listener:`, error);\n }\n }\n }\n }\n }\n\n /**\n * Subscribe to an event type\n */\n on(type: string, listener: EventListener): Unsubscribe {\n if (!this.listeners.has(type)) {\n this.listeners.set(type, new Set());\n }\n\n const listeners = this.listeners.get(type)!;\n listeners.add(listener);\n\n if (this.debug) {\n console.log(`[EventBus] Subscribed to '${type}', total: ${listeners.size}`);\n }\n\n return () => {\n listeners.delete(listener);\n if (this.debug) {\n console.log(`[EventBus] Unsubscribed from '${type}', remaining: ${listeners.size}`);\n }\n if (listeners.size === 0) {\n this.listeners.delete(type);\n }\n };\n }\n\n /**\n * Subscribe to ALL events (wildcard listener)\n * Useful for event tracking, logging, debugging\n */\n onAny(listener: EventListener): Unsubscribe {\n return this.on('*', listener);\n }\n\n /**\n * Check if there are listeners for an event type\n */\n hasListeners(type: string): boolean {\n const listeners = this.listeners.get(type);\n return listeners !== undefined && listeners.size > 0;\n }\n\n /**\n * Get all registered event types\n */\n getRegisteredEvents(): string[] {\n return Array.from(this.listeners.keys());\n }\n\n /**\n * Clear all listeners\n */\n clear(): void {\n if (this.debug) {\n console.log(`[EventBus] Clearing all listeners (${this.listeners.size} event types)`);\n }\n this.listeners.clear();\n }\n\n /**\n * Get listener count for an event type (for testing)\n */\n getListenerCount(type: string): number {\n return this.listeners.get(type)?.size ?? 0;\n }\n}\n\n/**\n * Create a new EventBus instance\n */\nexport function createEventBus(options?: { debug?: boolean }): IEventBus {\n return new EventBus(options);\n}\n","/**\n * BindingResolver - Platform-Agnostic Binding Resolution\n *\n * Resolves binding references like @entity.field, @payload.value, @state\n * in props and values. Works on both client and server.\n *\n * Uses the shared S-expression evaluator for actual resolution.\n *\n * @packageDocumentation\n */\n\nimport {\n evaluate,\n resolveBinding,\n createMinimalContext,\n type EvaluationContext,\n} from '@almadar/evaluator';\nimport type { BindingContext } from './types.js';\n\n// Re-export for convenience\nexport { createMinimalContext, type EvaluationContext };\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Known S-expression operators for detecting embedded expressions\n */\nconst OPERATORS = new Set([\n // Comparison\n '=', '!=', '<', '>', '<=', '>=',\n // Logic\n 'and', 'or', 'not', 'if',\n // Math\n '+', '-', '*', '/', '%',\n // Array\n 'count', 'first', 'last', 'map', 'filter', 'find', 'some', 'every', 'reduce',\n // String\n 'concat', 'upper', 'lower', 'trim', 'substring', 'split', 'join', 'str',\n // Effects\n 'set', 'emit', 'navigate', 'persist', 'notify', 'render-ui', 'render', 'spawn', 'despawn',\n 'call-service', 'do', 'when', 'increment', 'decrement', 'log',\n]);\n\n// ============================================================================\n// Main Functions\n// ============================================================================\n\n/**\n * Interpolate binding references in props.\n *\n * @param props - Props object with potential binding references\n * @param ctx - Evaluation context with bindings\n * @returns New props object with resolved values\n *\n * @example\n * ```ts\n * const ctx = createContextFromBindings({ name: 'Project Alpha', count: 42 });\n * const props = {\n * title: '@entity.name',\n * total: ['+', '@entity.count', 10],\n * };\n * const result = interpolateProps(props, ctx);\n * // { title: 'Project Alpha', total: 52 }\n * ```\n */\nexport function interpolateProps(\n props: Record<string, unknown>,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(props)) {\n result[key] = interpolateValue(value, ctx);\n }\n return result;\n}\n\n/**\n * Interpolate a single value.\n */\nexport function interpolateValue(value: unknown, ctx: EvaluationContext): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === 'string') {\n return interpolateString(value, ctx);\n }\n\n if (Array.isArray(value)) {\n return interpolateArray(value, ctx);\n }\n\n if (typeof value === 'object') {\n return interpolateProps(value as Record<string, unknown>, ctx);\n }\n\n return value;\n}\n\n// ============================================================================\n// String Interpolation\n// ============================================================================\n\n/**\n * Interpolate a string value.\n */\nfunction interpolateString(value: string, ctx: EvaluationContext): unknown {\n // Pure binding - resolve directly\n if (value.startsWith('@') && isPureBinding(value)) {\n return resolveBinding(value, ctx);\n }\n\n // Embedded bindings\n if (value.includes('@')) {\n return interpolateEmbeddedBindings(value, ctx);\n }\n\n return value;\n}\n\n/**\n * Check if a string is a pure binding (no embedded text).\n */\nfunction isPureBinding(value: string): boolean {\n return /^@[\\w]+(?:\\.[\\w]+)*$/.test(value);\n}\n\n/**\n * Interpolate embedded bindings in a string.\n */\nfunction interpolateEmbeddedBindings(value: string, ctx: EvaluationContext): string {\n return value.replace(/@[\\w]+(?:\\.[\\w]+)*/g, (match) => {\n const resolved = resolveBinding(match, ctx);\n return resolved !== undefined ? String(resolved) : match;\n });\n}\n\n// ============================================================================\n// Array Interpolation\n// ============================================================================\n\n/**\n * Interpolate an array value.\n */\nfunction interpolateArray(value: unknown[], ctx: EvaluationContext): unknown {\n if (value.length === 0) {\n return [];\n }\n\n if (isSExpression(value)) {\n return evaluate(value as Parameters<typeof evaluate>[0], ctx);\n }\n\n return value.map((item) => interpolateValue(item, ctx));\n}\n\n/**\n * Check if an array is an S-expression.\n */\nfunction isSExpression(value: unknown[]): boolean {\n if (value.length === 0) return false;\n\n const first = value[0];\n if (typeof first !== 'string') return false;\n\n if (OPERATORS.has(first)) return true;\n if (first.includes('/')) return true;\n if (first === 'lambda' || first === 'let') return true;\n\n return false;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Check if a value contains any binding references.\n */\nexport function containsBindings(value: unknown): boolean {\n if (typeof value === 'string') {\n return value.includes('@');\n }\n\n if (Array.isArray(value)) {\n return value.some(containsBindings);\n }\n\n if (value !== null && typeof value === 'object') {\n return Object.values(value as Record<string, unknown>).some(containsBindings);\n }\n\n return false;\n}\n\n/**\n * Extract all binding references from a value.\n */\nexport function extractBindings(value: unknown): string[] {\n const bindings: string[] = [];\n\n function collect(v: unknown): void {\n if (typeof v === 'string') {\n const matches = v.match(/@[\\w]+(?:\\.[\\w]+)*/g);\n if (matches) {\n bindings.push(...matches);\n }\n } else if (Array.isArray(v)) {\n v.forEach(collect);\n } else if (v !== null && typeof v === 'object') {\n Object.values(v as Record<string, unknown>).forEach(collect);\n }\n }\n\n collect(value);\n return [...new Set(bindings)];\n}\n\n/**\n * Create an EvaluationContext from a BindingContext.\n */\nexport function createContextFromBindings(bindings: BindingContext): EvaluationContext {\n return createMinimalContext(\n bindings.entity || {},\n bindings.payload || {},\n bindings.state || 'idle'\n );\n}\n","/**\n * StateMachineCore - Platform-Agnostic State Machine Logic\n *\n * Pure TypeScript implementation of trait state machine execution.\n * Extracts the core logic from useTraitStateMachine for use on\n * both client and server.\n *\n * @packageDocumentation\n */\n\nimport type {\n TraitState,\n TraitDefinition,\n TransitionResult,\n BindingContext,\n} from './types.js';\nimport { interpolateValue, createContextFromBindings } from './BindingResolver.js';\nimport { evaluateGuard } from '@almadar/evaluator';\n\n// ============================================================================\n// Core Functions\n// ============================================================================\n\n/**\n * Find the initial state for a trait definition.\n */\nexport function findInitialState(trait: TraitDefinition): string {\n // Guard against missing or empty states array\n if (!trait.states || trait.states.length === 0) {\n console.warn(`[StateMachine] Trait \"${trait.name}\" has no states defined, using \"unknown\"`);\n return 'unknown';\n }\n const markedInitial = trait.states.find((s) => s.isInitial)?.name;\n const firstState = trait.states[0]?.name;\n return markedInitial || firstState || 'unknown';\n}\n\n/**\n * Create initial trait state for a trait definition.\n */\nexport function createInitialTraitState(trait: TraitDefinition): TraitState {\n return {\n traitName: trait.name,\n currentState: findInitialState(trait),\n previousState: null,\n lastEvent: null,\n context: {},\n };\n}\n\n/**\n * Find a matching transition from the current state for the given event.\n */\nexport function findTransition(\n trait: TraitDefinition,\n currentState: string,\n eventKey: string\n): TraitDefinition['transitions'][0] | undefined {\n // Guard against missing transitions array\n if (!trait.transitions || trait.transitions.length === 0) {\n return undefined;\n }\n return trait.transitions.find((t) => {\n // Handle array 'from' (multiple source states)\n if (Array.isArray(t.from)) {\n return t.from.includes(currentState) && t.event === eventKey;\n }\n return t.from === currentState && t.event === eventKey;\n });\n}\n\n/**\n * Normalize event key - strip UI: prefix if present.\n */\nexport function normalizeEventKey(eventKey: string): string {\n return eventKey.startsWith('UI:') ? eventKey.slice(3) : eventKey;\n}\n\n// ============================================================================\n// State Machine Processor\n// ============================================================================\n\n/**\n * Options for processing an event through the state machine.\n */\nexport interface ProcessEventOptions {\n /** Current trait state */\n traitState: TraitState;\n /** Trait definition */\n trait: TraitDefinition;\n /** Event key to process */\n eventKey: string;\n /** Event payload */\n payload?: Record<string, unknown>;\n /** Entity data for binding resolution */\n entityData?: Record<string, unknown>;\n}\n\n/**\n * Process an event through a trait's state machine.\n *\n * This is a pure function that:\n * 1. Finds matching transitions\n * 2. Evaluates guards\n * 3. Returns the transition result (but does not execute effects)\n *\n * @returns TransitionResult with effects to execute\n *\n * @example\n * ```ts\n * const result = processEvent({\n * traitState: { traitName: 'Cart', currentState: 'empty', ... },\n * trait: cartTraitDefinition,\n * eventKey: 'ADD_ITEM',\n * payload: { productId: '123' },\n * });\n *\n * if (result.executed) {\n * // Execute effects\n * for (const effect of result.effects) {\n * effectExecutor.execute(effect);\n * }\n * // Update state\n * traitState.currentState = result.newState;\n * }\n * ```\n */\nexport function processEvent(options: ProcessEventOptions): TransitionResult {\n const { traitState, trait, eventKey, payload, entityData } = options;\n const normalizedEvent = normalizeEventKey(eventKey);\n\n // Find transition from current state\n const transition = findTransition(trait, traitState.currentState, normalizedEvent);\n\n if (!transition) {\n return {\n executed: false,\n newState: traitState.currentState,\n previousState: traitState.currentState,\n effects: [],\n };\n }\n\n // Evaluate guard if present\n if (transition.guard) {\n const ctx = createContextFromBindings({\n entity: entityData,\n payload,\n state: traitState.currentState,\n });\n\n try {\n const guardPasses = evaluateGuard(\n transition.guard as Parameters<typeof evaluateGuard>[0],\n ctx\n );\n if (!guardPasses) {\n return {\n executed: false,\n newState: traitState.currentState,\n previousState: traitState.currentState,\n effects: [],\n transition: {\n from: traitState.currentState,\n to: transition.to,\n event: normalizedEvent,\n },\n guardResult: false,\n };\n }\n } catch (error) {\n // On error, allow transition (fail-open for better UX)\n console.error('[StateMachineCore] Guard evaluation error:', error);\n }\n }\n\n // Transition should execute\n return {\n executed: true,\n newState: transition.to,\n previousState: traitState.currentState,\n effects: transition.effects || [],\n transition: {\n from: traitState.currentState,\n to: transition.to,\n event: normalizedEvent,\n },\n guardResult: transition.guard ? true : undefined,\n };\n}\n\n// ============================================================================\n// State Machine Manager\n// ============================================================================\n\n/**\n * Stateful manager for multiple trait state machines.\n *\n * Platform-agnostic - can be used directly on server or wrapped\n * in a React hook on client.\n *\n * @example\n * ```ts\n * const manager = new StateMachineManager([cartTrait, userTrait]);\n *\n * // Process event\n * const results = manager.sendEvent('ADD_ITEM', { productId: '123' });\n *\n * // Get current states\n * const cartState = manager.getState('Cart');\n * ```\n */\nexport class StateMachineManager {\n private traits: Map<string, TraitDefinition> = new Map();\n private states: Map<string, TraitState> = new Map();\n\n constructor(traits: TraitDefinition[] = []) {\n for (const trait of traits) {\n this.addTrait(trait);\n }\n }\n\n /**\n * Add a trait to the manager.\n */\n addTrait(trait: TraitDefinition): void {\n this.traits.set(trait.name, trait);\n this.states.set(trait.name, createInitialTraitState(trait));\n }\n\n /**\n * Remove a trait from the manager.\n */\n removeTrait(traitName: string): void {\n this.traits.delete(traitName);\n this.states.delete(traitName);\n }\n\n /**\n * Get current state for a trait.\n */\n getState(traitName: string): TraitState | undefined {\n return this.states.get(traitName);\n }\n\n /**\n * Get all current states.\n */\n getAllStates(): Map<string, TraitState> {\n return new Map(this.states);\n }\n\n /**\n * Check if a trait can handle an event from its current state.\n */\n canHandleEvent(traitName: string, eventKey: string): boolean {\n const trait = this.traits.get(traitName);\n const state = this.states.get(traitName);\n if (!trait || !state) return false;\n\n return !!findTransition(trait, state.currentState, normalizeEventKey(eventKey));\n }\n\n /**\n * Send an event to all traits.\n *\n * @returns Array of transition results (one per trait that had a matching transition)\n */\n sendEvent(\n eventKey: string,\n payload?: Record<string, unknown>,\n entityData?: Record<string, unknown>\n ): Array<{ traitName: string; result: TransitionResult }> {\n const results: Array<{ traitName: string; result: TransitionResult }> = [];\n\n for (const [traitName, trait] of this.traits) {\n const traitState = this.states.get(traitName);\n if (!traitState) continue;\n\n const result = processEvent({\n traitState,\n trait,\n eventKey,\n payload,\n entityData,\n });\n\n if (result.executed) {\n // Update state\n this.states.set(traitName, {\n ...traitState,\n currentState: result.newState,\n previousState: result.previousState,\n lastEvent: normalizeEventKey(eventKey),\n context: { ...traitState.context, ...payload },\n });\n\n results.push({ traitName, result });\n }\n }\n\n return results;\n }\n\n /**\n * Reset a trait to its initial state.\n */\n resetTrait(traitName: string): void {\n const trait = this.traits.get(traitName);\n if (trait) {\n this.states.set(traitName, createInitialTraitState(trait));\n }\n }\n\n /**\n * Reset all traits to initial states.\n */\n resetAll(): void {\n for (const [traitName, trait] of this.traits) {\n this.states.set(traitName, createInitialTraitState(trait));\n }\n }\n}\n","/**\n * EffectExecutor - Platform-Agnostic Effect Dispatch\n *\n * Routes S-expression effects to appropriate handlers.\n * Platform-specific adapters provide handler implementations.\n *\n * @packageDocumentation\n */\n\nimport type { EffectHandlers, Effect, EffectContext } from './types.js';\nimport { interpolateValue, createContextFromBindings } from './BindingResolver.js';\nimport type { BindingContext } from './types.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Full executor options with handlers and context.\n */\nexport interface EffectExecutorOptions {\n /** Effect handlers (platform-specific) */\n handlers: EffectHandlers;\n /** Binding context for resolving @entity.field references */\n bindings: BindingContext;\n /** Effect execution context (trait name, state, etc.) */\n context: EffectContext;\n /** Enable debug logging */\n debug?: boolean;\n}\n\n// ============================================================================\n// Effect Parsing\n// ============================================================================\n\n/**\n * Parse an effect into operator and arguments.\n */\nfunction parseEffect(effect: unknown): { operator: string; args: unknown[] } | null {\n if (!Array.isArray(effect) || effect.length === 0) {\n return null;\n }\n\n const [operator, ...args] = effect;\n if (typeof operator !== 'string') {\n return null;\n }\n\n return { operator, args };\n}\n\n/**\n * Resolve all bindings in effect arguments.\n */\nfunction resolveArgs(\n args: unknown[],\n bindings: BindingContext\n): unknown[] {\n const ctx = createContextFromBindings(bindings);\n return args.map((arg) => interpolateValue(arg, ctx));\n}\n\n// ============================================================================\n// Effect Executor\n// ============================================================================\n\n/**\n * EffectExecutor - Routes effects to handlers.\n *\n * @example\n * ```ts\n * const executor = new EffectExecutor({\n * handlers: {\n * emit: (event, payload) => eventBus.emit(event, payload),\n * persist: async (action, entity, data) => { ... },\n * set: (id, field, value) => { ... },\n * callService: async (service, action, params) => { ... },\n * },\n * bindings: { entity: { name: 'Product' }, payload: { id: '123' } },\n * context: { traitName: 'Cart', state: 'active', transition: 'idle->active' },\n * });\n *\n * // Execute a single effect\n * executor.execute(['emit', 'ITEM_ADDED', { count: 1 }]);\n *\n * // Execute multiple effects\n * executor.executeAll([\n * ['set', 'item', 'quantity', 5],\n * ['emit', 'QUANTITY_UPDATED'],\n * ]);\n * ```\n */\nexport class EffectExecutor {\n private handlers: EffectHandlers;\n private bindings: BindingContext;\n private context: EffectContext;\n private debug: boolean;\n\n constructor(options: EffectExecutorOptions) {\n this.handlers = options.handlers;\n this.bindings = options.bindings;\n this.context = options.context;\n this.debug = options.debug ?? false;\n }\n\n /**\n * Execute a single effect.\n */\n async execute(effect: unknown): Promise<void> {\n const parsed = parseEffect(effect);\n if (!parsed) {\n if (this.debug) {\n console.warn('[EffectExecutor] Invalid effect format:', effect);\n }\n return;\n }\n\n const { operator, args } = parsed;\n const resolvedArgs = resolveArgs(args, this.bindings);\n\n if (this.debug) {\n console.log('[EffectExecutor] Executing:', operator, resolvedArgs);\n }\n\n try {\n await this.dispatch(operator, resolvedArgs);\n } catch (error) {\n console.error('[EffectExecutor] Error executing effect:', operator, error);\n throw error;\n }\n }\n\n /**\n * Execute multiple effects in sequence.\n */\n async executeAll(effects: unknown[]): Promise<void> {\n for (const effect of effects) {\n await this.execute(effect);\n }\n }\n\n /**\n * Execute multiple effects in parallel.\n */\n async executeParallel(effects: unknown[]): Promise<void> {\n await Promise.all(effects.map((effect) => this.execute(effect)));\n }\n\n // ==========================================================================\n // Effect Dispatch\n // ==========================================================================\n\n private async dispatch(operator: string, args: unknown[]): Promise<void> {\n switch (operator) {\n // === Universal Effects ===\n\n case 'emit': {\n const event = args[0] as string;\n const payload = args[1] as Record<string, unknown> | undefined;\n this.handlers.emit(event, payload);\n break;\n }\n\n case 'set': {\n const [entityId, field, value] = args as [string, string, unknown];\n this.handlers.set(entityId, field, value);\n break;\n }\n\n case 'persist': {\n const action = args[0] as 'create' | 'update' | 'delete';\n const entityType = args[1] as string;\n const data = args[2] as Record<string, unknown> | undefined;\n await this.handlers.persist(action, entityType, data);\n break;\n }\n\n case 'call-service': {\n const service = args[0] as string;\n const action = args[1] as string;\n const params = args[2] as Record<string, unknown> | undefined;\n await this.handlers.callService(service, action, params);\n break;\n }\n\n case 'fetch': {\n if (this.handlers.fetch) {\n const entityType = args[0] as string;\n const options = args[1] as {\n id?: string;\n filter?: unknown;\n limit?: number;\n offset?: number;\n } | undefined;\n await this.handlers.fetch(entityType, options);\n } else {\n this.logUnsupported('fetch');\n }\n break;\n }\n\n case 'spawn': {\n if (this.handlers.spawn) {\n const entityType = args[0] as string;\n const props = args[1] as Record<string, unknown> | undefined;\n this.handlers.spawn(entityType, props);\n } else {\n this.logUnsupported('spawn');\n }\n break;\n }\n\n case 'despawn': {\n if (this.handlers.despawn) {\n const entityId = args[0] as string;\n this.handlers.despawn(entityId);\n } else {\n this.logUnsupported('despawn');\n }\n break;\n }\n\n case 'log': {\n if (this.handlers.log) {\n const message = args[0] as string;\n const level = args[1] as 'log' | 'warn' | 'error' | undefined;\n const data = args[2];\n this.handlers.log(message, level, data);\n } else {\n console.log(args[0], args.slice(1));\n }\n break;\n }\n\n // === Client-Only Effects ===\n\n case 'render-ui':\n case 'render': {\n if (this.handlers.renderUI) {\n const slot = args[0] as string;\n const pattern = args[1];\n const props = args[2] as Record<string, unknown> | undefined;\n const priority = args[3] as number | undefined;\n this.handlers.renderUI(slot, pattern, props, priority);\n } else {\n this.logUnsupported('render-ui');\n }\n break;\n }\n\n case 'navigate': {\n if (this.handlers.navigate) {\n const path = args[0] as string;\n const params = args[1] as Record<string, unknown> | undefined;\n this.handlers.navigate(path, params);\n } else {\n this.logUnsupported('navigate');\n }\n break;\n }\n\n case 'notify': {\n if (this.handlers.notify) {\n const message = args[0] as string;\n const type = (args[1] as 'success' | 'error' | 'warning' | 'info') || 'info';\n this.handlers.notify(message, type);\n } else {\n console.log(`[Notify:${args[1] || 'info'}] ${args[0]}`);\n }\n break;\n }\n\n // === Compound Effects ===\n\n case 'do': {\n // Sequential execution of nested effects\n const nestedEffects = args as unknown[];\n for (const nested of nestedEffects) {\n await this.execute(nested);\n }\n break;\n }\n\n case 'when': {\n // Conditional effect: ['when', condition, thenEffect, elseEffect?]\n // Condition should already be resolved by binding resolution\n const condition = args[0];\n const thenEffect = args[1];\n const elseEffect = args[2];\n\n if (condition) {\n await this.execute(thenEffect);\n } else if (elseEffect) {\n await this.execute(elseEffect);\n }\n break;\n }\n\n default: {\n if (this.debug) {\n console.warn('[EffectExecutor] Unknown operator:', operator);\n }\n }\n }\n }\n\n private logUnsupported(operator: string): void {\n if (this.debug) {\n console.warn(\n `[EffectExecutor] Effect \"${operator}\" not supported on this platform`\n );\n }\n }\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\n/**\n * Create a minimal EffectExecutor for testing or simple scenarios.\n */\nexport function createTestExecutor(\n overrides: Partial<EffectHandlers> = {}\n): EffectExecutor {\n const noopAsync = async () => { };\n const noop = () => { };\n\n return new EffectExecutor({\n handlers: {\n emit: overrides.emit ?? noop,\n persist: overrides.persist ?? noopAsync,\n set: overrides.set ?? noop,\n callService: overrides.callService ?? (async () => ({})),\n ...overrides,\n },\n bindings: {},\n context: {\n traitName: 'TestTrait',\n state: 'test',\n transition: 'test->test',\n },\n debug: true,\n });\n}\n","/**\n * Reference Resolver\n *\n * Resolves `uses` imports and component references in OrbitalSchema.\n * Handles:\n * - `Alias.entity` entity references\n * - `Alias.traits.TraitName` trait references\n * - `Alias.pages.PageName` page references\n *\n * @packageDocumentation\n */\n\nimport type {\n Orbital,\n OrbitalDefinition,\n EntityRef,\n PageRef,\n PageRefObject,\n Entity,\n Page,\n Trait,\n TraitRef,\n OrbitalSchema,\n UseDeclaration,\n} from \"@almadar/core\";\nimport {\n isEntityReference,\n isPageReference,\n isPageReferenceString,\n isPageReferenceObject,\n parseEntityRef,\n parsePageRef,\n parseImportedTraitRef,\n} from \"@almadar/core\";\nimport {\n ExternalOrbitalLoader,\n ImportChain,\n type LoaderOptions,\n} from \"../loader/external-loader.js\";\nimport type {\n SchemaLoader,\n ImportChainLike,\n} from \"../loader/schema-loader.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Resolved imports from `uses` declarations.\n */\nexport interface ResolvedImports {\n /** Map of alias -> loaded orbital */\n orbitals: Map<string, ResolvedImport>;\n}\n\n/**\n * A single resolved import.\n */\nexport interface ResolvedImport {\n /** The alias used for this import */\n alias: string;\n\n /** The original import path */\n from: string;\n\n /** The loaded orbital */\n orbital: Orbital;\n\n /** Absolute source path */\n sourcePath: string;\n}\n\n/**\n * Fully resolved orbital with all references expanded.\n */\nexport interface ResolvedOrbital {\n /** Original orbital name */\n name: string;\n\n /** Resolved entity (always inline after resolution) */\n entity: Entity;\n\n /** Whether entity was referenced from an import */\n entitySource?: {\n alias: string;\n persistence: \"persistent\" | \"runtime\" | \"singleton\";\n };\n\n /** Resolved traits (references expanded) */\n traits: ResolvedTrait[];\n\n /** Resolved pages (references expanded with path overrides applied) */\n pages: ResolvedPage[];\n\n /** Resolved imports */\n imports: ResolvedImports;\n\n /** Original orbital definition */\n original: OrbitalDefinition;\n}\n\n/**\n * Resolved trait with source tracking.\n */\nexport interface ResolvedTrait {\n /** The trait definition */\n trait: Trait;\n\n /** Source of the trait */\n source:\n | { type: \"inline\" }\n | { type: \"local\"; name: string }\n | { type: \"imported\"; alias: string; traitName: string };\n\n /** Linked entity for this trait */\n linkedEntity?: string;\n\n /** Configuration overrides */\n config?: Record<string, unknown>;\n}\n\n/**\n * Resolved page with source tracking.\n */\nexport interface ResolvedPage {\n /** The page definition */\n page: Page;\n\n /** Source of the page */\n source:\n | { type: \"inline\" }\n | { type: \"imported\"; alias: string; pageName: string };\n\n /** Whether path was overridden */\n pathOverridden: boolean;\n\n /** Original path before override */\n originalPath?: string;\n}\n\n/**\n * Resolution options.\n */\nexport interface ResolveOptions extends LoaderOptions {\n /** Map of local trait definitions (name -> trait) */\n localTraits?: Map<string, Trait>;\n\n /** Whether to skip loading external imports (for testing) */\n skipExternalLoading?: boolean;\n\n /** Custom schema loader instance (optional, defaults to ExternalOrbitalLoader) */\n loader?: SchemaLoader;\n}\n\n/**\n * Resolution result.\n */\nexport type ResolveResult<T> =\n | { success: true; data: T; warnings: string[] }\n | { success: false; errors: string[] };\n\n// ============================================================================\n// Reference Resolver\n// ============================================================================\n\n/**\n * ReferenceResolver - Resolves all references in an orbital.\n */\nexport class ReferenceResolver {\n private loader: SchemaLoader;\n private options: ResolveOptions;\n private localTraits: Map<string, Trait>;\n\n constructor(options: ResolveOptions) {\n this.options = options;\n // Use provided loader or create default ExternalOrbitalLoader\n this.loader = options.loader ?? new ExternalOrbitalLoader(options);\n this.localTraits = options.localTraits ?? new Map();\n }\n\n /**\n * Resolve all references in an orbital.\n */\n async resolve(\n orbital: OrbitalDefinition,\n sourcePath?: string,\n chain?: ImportChainLike\n ): Promise<ResolveResult<ResolvedOrbital>> {\n const errors: string[] = [];\n const warnings: string[] = [];\n const importChain = chain ?? new ImportChain();\n\n // Step 1: Resolve imports\n const importsResult = await this.resolveImports(\n orbital.uses ?? [],\n sourcePath,\n importChain\n );\n if (!importsResult.success) {\n return { success: false, errors: importsResult.errors };\n }\n const imports = importsResult.data;\n\n // Step 2: Resolve entity\n const entityResult = this.resolveEntity(orbital.entity, imports);\n if (!entityResult.success) {\n errors.push(...entityResult.errors);\n }\n\n // Step 3: Resolve traits\n const traitsResult = this.resolveTraits(orbital.traits, imports);\n if (!traitsResult.success) {\n errors.push(...traitsResult.errors);\n }\n\n // Step 4: Resolve pages\n const pagesResult = this.resolvePages(orbital.pages, imports);\n if (!pagesResult.success) {\n errors.push(...pagesResult.errors);\n }\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n // At this point all results are successful (errors array is empty)\n // Use type narrowing to access data safely\n if (!entityResult.success || !traitsResult.success || !pagesResult.success) {\n // This should never happen since we checked errors above\n return { success: false, errors: ['Internal error: unexpected failure state'] };\n }\n\n return {\n success: true,\n data: {\n name: orbital.name,\n entity: entityResult.data.entity,\n entitySource: entityResult.data.source,\n traits: traitsResult.data,\n pages: pagesResult.data,\n imports,\n original: orbital,\n },\n warnings,\n };\n }\n\n /**\n * Resolve `uses` declarations to loaded orbitals.\n */\n private async resolveImports(\n uses: UseDeclaration[],\n sourcePath?: string,\n chain?: ImportChainLike\n ): Promise<ResolveResult<ResolvedImports>> {\n const errors: string[] = [];\n const orbitals = new Map<string, ResolvedImport>();\n\n if (this.options.skipExternalLoading) {\n return {\n success: true,\n data: { orbitals },\n warnings: [\"External loading skipped\"],\n };\n }\n\n for (const use of uses) {\n // Check for duplicate aliases\n if (orbitals.has(use.as)) {\n errors.push(`Duplicate import alias: ${use.as}`);\n continue;\n }\n\n // Load the orbital\n const loadResult = await this.loader.loadOrbital(\n use.from,\n undefined,\n sourcePath,\n chain\n );\n\n if (!loadResult.success) {\n errors.push(`Failed to load \"${use.from}\" as \"${use.as}\": ${loadResult.error}`);\n continue;\n }\n\n orbitals.set(use.as, {\n alias: use.as,\n from: use.from,\n orbital: loadResult.data.orbital,\n sourcePath: loadResult.data.sourcePath,\n });\n }\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n return { success: true, data: { orbitals }, warnings: [] };\n }\n\n /**\n * Resolve entity reference.\n */\n private resolveEntity(\n entityRef: EntityRef,\n imports: ResolvedImports\n ): ResolveResult<{\n entity: Entity;\n source?: { alias: string; persistence: \"persistent\" | \"runtime\" | \"singleton\" };\n }> {\n // Inline entity\n if (!isEntityReference(entityRef)) {\n return {\n success: true,\n data: { entity: entityRef },\n warnings: [],\n };\n }\n\n // Reference: \"Alias.entity\"\n const parsed = parseEntityRef(entityRef);\n if (!parsed) {\n return {\n success: false,\n errors: [`Invalid entity reference format: ${entityRef}. Expected \"Alias.entity\"`],\n };\n }\n\n const imported = imports.orbitals.get(parsed.alias);\n if (!imported) {\n return {\n success: false,\n errors: [\n `Unknown import alias in entity reference: ${parsed.alias}. ` +\n `Available aliases: ${Array.from(imports.orbitals.keys()).join(\", \") || \"none\"}`,\n ],\n };\n }\n\n // Get entity from imported orbital\n const importedEntity = this.getEntityFromOrbital(imported.orbital);\n if (!importedEntity) {\n return {\n success: false,\n errors: [\n `Imported orbital \"${parsed.alias}\" does not have an inline entity. ` +\n `Entity references cannot be chained.`,\n ],\n };\n }\n\n // Determine persistence type\n const persistence = importedEntity.persistence ?? \"persistent\";\n\n return {\n success: true,\n data: {\n entity: importedEntity,\n source: {\n alias: parsed.alias,\n persistence: persistence as \"persistent\" | \"runtime\" | \"singleton\",\n },\n },\n warnings: [],\n };\n }\n\n /**\n * Get the entity from an orbital (handling EntityRef).\n */\n private getEntityFromOrbital(orbital: Orbital): Entity | null {\n const entityRef = orbital.entity;\n if (typeof entityRef === \"string\") {\n // It's a reference - we don't support chained references\n return null;\n }\n return entityRef;\n }\n\n /**\n * Resolve trait references.\n */\n private resolveTraits(\n traitRefs: TraitRef[],\n imports: ResolvedImports\n ): ResolveResult<ResolvedTrait[]> {\n const errors: string[] = [];\n const resolved: ResolvedTrait[] = [];\n\n for (const traitRef of traitRefs) {\n const result = this.resolveTraitRef(traitRef, imports);\n if (!result.success) {\n errors.push(...result.errors);\n } else {\n resolved.push(result.data!);\n }\n }\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n return { success: true, data: resolved, warnings: [] };\n }\n\n /**\n * Resolve a single trait reference.\n */\n private resolveTraitRef(\n traitRef: TraitRef,\n imports: ResolvedImports\n ): ResolveResult<ResolvedTrait> {\n // Case 1: Inline trait definition\n if (typeof traitRef !== \"string\" && \"stateMachine\" in traitRef) {\n return {\n success: true,\n data: {\n trait: traitRef as Trait,\n source: { type: \"inline\" },\n },\n warnings: [],\n };\n }\n\n // Case 2: Reference object { ref: \"...\", config: {...} }\n if (typeof traitRef !== \"string\" && \"ref\" in traitRef) {\n const refObj = traitRef as { ref: string; config?: Record<string, unknown>; linkedEntity?: string };\n return this.resolveTraitRefString(refObj.ref, imports, refObj.config, refObj.linkedEntity);\n }\n\n // Case 3: String reference\n if (typeof traitRef === \"string\") {\n return this.resolveTraitRefString(traitRef, imports);\n }\n\n return {\n success: false,\n errors: [`Unknown trait reference format: ${JSON.stringify(traitRef)}`],\n };\n }\n\n /**\n * Resolve a trait reference string.\n */\n private resolveTraitRefString(\n ref: string,\n imports: ResolvedImports,\n config?: Record<string, unknown>,\n linkedEntity?: string\n ): ResolveResult<ResolvedTrait> {\n // Check if it's an imported trait reference: \"Alias.traits.TraitName\"\n const parsed = parseImportedTraitRef(ref);\n\n if (parsed) {\n // Imported trait\n const imported = imports.orbitals.get(parsed.alias);\n if (!imported) {\n return {\n success: false,\n errors: [\n `Unknown import alias in trait reference: ${parsed.alias}. ` +\n `Available aliases: ${Array.from(imports.orbitals.keys()).join(\", \") || \"none\"}`,\n ],\n };\n }\n\n // Find the trait in the imported orbital\n const trait = this.findTraitInOrbital(imported.orbital, parsed.traitName);\n if (!trait) {\n return {\n success: false,\n errors: [\n `Trait \"${parsed.traitName}\" not found in imported orbital \"${parsed.alias}\". ` +\n `Available traits: ${this.listTraitsInOrbital(imported.orbital).join(\", \") || \"none\"}`,\n ],\n };\n }\n\n return {\n success: true,\n data: {\n trait,\n source: { type: \"imported\", alias: parsed.alias, traitName: parsed.traitName },\n config,\n linkedEntity,\n },\n warnings: [],\n };\n }\n\n // Local trait (from localTraits map)\n const localTrait = this.localTraits.get(ref);\n if (localTrait) {\n return {\n success: true,\n data: {\n trait: localTrait,\n source: { type: \"local\", name: ref },\n config,\n linkedEntity,\n },\n warnings: [],\n };\n }\n\n return {\n success: false,\n errors: [\n `Trait \"${ref}\" not found. ` +\n `For imported traits, use format \"Alias.traits.TraitName\". ` +\n `Local traits available: ${Array.from(this.localTraits.keys()).join(\", \") || \"none\"}`,\n ],\n };\n }\n\n /**\n * Find a trait in an orbital by name.\n */\n private findTraitInOrbital(orbital: Orbital, traitName: string): Trait | null {\n for (const traitRef of orbital.traits) {\n // Inline trait\n if (typeof traitRef !== \"string\" && \"stateMachine\" in traitRef) {\n if ((traitRef as Trait).name === traitName) {\n return traitRef as Trait;\n }\n }\n // Reference with name\n if (typeof traitRef !== \"string\" && \"ref\" in traitRef) {\n const refObj = traitRef as { ref?: string; name?: string };\n if (refObj.ref === traitName || refObj.name === traitName) {\n // This is a reference, not an inline definition\n // We can't return it directly - need to look up in local traits\n // For now, skip these\n }\n }\n }\n return null;\n }\n\n /**\n * List trait names in an orbital.\n */\n private listTraitsInOrbital(orbital: Orbital): string[] {\n const names: string[] = [];\n for (const traitRef of orbital.traits) {\n if (typeof traitRef !== \"string\" && \"stateMachine\" in traitRef) {\n names.push((traitRef as Trait).name);\n }\n }\n return names;\n }\n\n /**\n * Resolve page references.\n */\n private resolvePages(\n pageRefs: PageRef[],\n imports: ResolvedImports\n ): ResolveResult<ResolvedPage[]> {\n const errors: string[] = [];\n const resolved: ResolvedPage[] = [];\n\n for (const pageRef of pageRefs) {\n const result = this.resolvePageRef(pageRef, imports);\n if (!result.success) {\n errors.push(...result.errors);\n } else {\n resolved.push(result.data!);\n }\n }\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n return { success: true, data: resolved, warnings: [] };\n }\n\n /**\n * Resolve a single page reference.\n */\n private resolvePageRef(\n pageRef: PageRef,\n imports: ResolvedImports\n ): ResolveResult<ResolvedPage> {\n // Case 1: Inline page definition\n if (!isPageReference(pageRef)) {\n return {\n success: true,\n data: {\n page: pageRef as Page,\n source: { type: \"inline\" },\n pathOverridden: false,\n },\n warnings: [],\n };\n }\n\n // Case 2: String reference \"Alias.pages.PageName\"\n if (isPageReferenceString(pageRef)) {\n return this.resolvePageRefString(pageRef, imports);\n }\n\n // Case 3: Object reference { ref: \"Alias.pages.PageName\", path?: \"/override\" }\n if (isPageReferenceObject(pageRef)) {\n return this.resolvePageRefObject(pageRef, imports);\n }\n\n return {\n success: false,\n errors: [`Unknown page reference format: ${JSON.stringify(pageRef)}`],\n };\n }\n\n /**\n * Resolve a page reference string.\n */\n private resolvePageRefString(\n ref: string,\n imports: ResolvedImports\n ): ResolveResult<ResolvedPage> {\n const parsed = parsePageRef(ref);\n if (!parsed) {\n return {\n success: false,\n errors: [`Invalid page reference format: ${ref}. Expected \"Alias.pages.PageName\"`],\n };\n }\n\n const imported = imports.orbitals.get(parsed.alias);\n if (!imported) {\n return {\n success: false,\n errors: [\n `Unknown import alias in page reference: ${parsed.alias}. ` +\n `Available aliases: ${Array.from(imports.orbitals.keys()).join(\", \") || \"none\"}`,\n ],\n };\n }\n\n const page = this.findPageInOrbital(imported.orbital, parsed.pageName);\n if (!page) {\n return {\n success: false,\n errors: [\n `Page \"${parsed.pageName}\" not found in imported orbital \"${parsed.alias}\". ` +\n `Available pages: ${this.listPagesInOrbital(imported.orbital).join(\", \") || \"none\"}`,\n ],\n };\n }\n\n return {\n success: true,\n data: {\n page,\n source: { type: \"imported\", alias: parsed.alias, pageName: parsed.pageName },\n pathOverridden: false,\n },\n warnings: [],\n };\n }\n\n /**\n * Resolve a page reference object with optional path override.\n */\n private resolvePageRefObject(\n refObj: PageRefObject,\n imports: ResolvedImports\n ): ResolveResult<ResolvedPage> {\n const baseResult = this.resolvePageRefString(refObj.ref, imports);\n if (!baseResult.success) {\n return baseResult;\n }\n\n const resolved = baseResult.data!;\n\n // Apply path override if provided\n if (refObj.path) {\n const originalPath = resolved.page.path;\n resolved.page = {\n ...resolved.page,\n path: refObj.path,\n };\n resolved.pathOverridden = true;\n resolved.originalPath = originalPath;\n }\n\n return {\n success: true,\n data: resolved,\n warnings: baseResult.warnings,\n };\n }\n\n /**\n * Find a page in an orbital by name.\n */\n private findPageInOrbital(orbital: Orbital, pageName: string): Page | null {\n const pages = orbital.pages;\n if (!pages) return null;\n\n for (const pageRef of pages) {\n // Only look at inline pages (we don't support chained page references)\n if (typeof pageRef !== \"string\" && !(\"ref\" in pageRef)) {\n const page = pageRef as Page;\n if (page.name === pageName) {\n // Return a copy to avoid mutation issues\n return { ...page };\n }\n }\n }\n return null;\n }\n\n /**\n * List page names in an orbital.\n */\n private listPagesInOrbital(orbital: Orbital): string[] {\n const pages = orbital.pages;\n if (!pages) return [];\n\n const names: string[] = [];\n for (const pageRef of pages) {\n if (typeof pageRef !== \"string\" && !(\"ref\" in pageRef)) {\n names.push((pageRef as Page).name);\n }\n }\n return names;\n }\n\n /**\n * Add local traits for resolution.\n */\n addLocalTraits(traits: Trait[]): void {\n for (const trait of traits) {\n this.localTraits.set(trait.name, trait);\n }\n }\n\n /**\n * Clear loader cache.\n */\n clearCache(): void {\n this.loader.clearCache();\n }\n}\n\n// ============================================================================\n// Factory Function\n// ============================================================================\n\n/**\n * Create a reference resolver with sensible defaults.\n */\nexport function createResolver(\n basePath: string,\n options?: Partial<ResolveOptions>\n): ReferenceResolver {\n return new ReferenceResolver({\n basePath,\n ...options,\n });\n}\n\n// ============================================================================\n// Schema Resolution\n// ============================================================================\n\n/**\n * Resolve all references in an OrbitalSchema.\n */\nexport async function resolveSchema(\n schema: OrbitalSchema,\n options: ResolveOptions\n): Promise<ResolveResult<ResolvedOrbital[]>> {\n const resolver = new ReferenceResolver(options);\n const errors: string[] = [];\n const warnings: string[] = [];\n const resolved: ResolvedOrbital[] = [];\n\n // Collect all inline traits from all orbitals for local trait resolution\n for (const orbital of schema.orbitals) {\n const inlineTraits = orbital.traits.filter(\n (t): t is Trait => typeof t !== \"string\" && \"stateMachine\" in t\n );\n resolver.addLocalTraits(inlineTraits);\n }\n\n // Resolve each orbital\n for (const orbital of schema.orbitals) {\n const result = await resolver.resolve(orbital);\n if (!result.success) {\n errors.push(`Orbital \"${orbital.name}\": ${result.errors.join(\", \")}`);\n } else {\n resolved.push(result.data);\n warnings.push(...result.warnings.map((w) => `Orbital \"${orbital.name}\": ${w}`));\n }\n }\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n return { success: true, data: resolved, warnings };\n}\n","/**\n * Orbital Loader Module\n *\n * Provides functionality for loading external .orb files from various sources:\n * - FileSystemLoader (Node.js) - ExternalOrbitalLoader\n * - HttpLoader (Browser) - Uses fetch API\n * - UnifiedLoader (Auto-detect) - Routes to appropriate loader\n *\n * @packageDocumentation\n */\n\n// Schema Loader Interface\nexport {\n type SchemaLoader,\n type LoadedSchema,\n type LoadedOrbital,\n type LoadResult,\n type BaseLoaderOptions,\n type FileSystemLoaderOptions,\n type HttpLoaderOptions,\n type UnifiedLoaderOptions,\n type LoaderStrategy,\n type ImportChainLike,\n type SchemaLoaderFactory,\n isElectron,\n isBrowser,\n isNode,\n getDefaultLoaderStrategy,\n} from \"./schema-loader.js\";\n\n// FileSystem Loader (Node.js)\nexport {\n ExternalOrbitalLoader,\n ImportChain,\n LoaderCache,\n createLoader,\n parseImportPath,\n type LoaderOptions,\n // Re-export for backwards compatibility\n type LoadedOrbital as FSLoadedOrbital,\n type LoadedSchema as FSLoadedSchema,\n} from \"./external-loader.js\";\n\n// HTTP Loader (Browser)\nexport {\n HttpLoader,\n HttpImportChain,\n createHttpLoader,\n} from \"./http-loader.js\";\n\n// Unified Loader (Auto-detect)\nexport {\n UnifiedLoader,\n UnifiedImportChain,\n createUnifiedLoader,\n createAutoLoader,\n} from \"./unified-loader.js\";\n\n// Almadar Studio Configuration (Electron)\nexport {\n createAlmadarLoaderOptions,\n resolveAlmadarPaths,\n needsStdLibDownload,\n getStdLibDownloadUrl,\n getStdLibDownloadTarget,\n detectWorkspace,\n ALMADAR_DEFAULTS,\n type AlmadarStudioConfig,\n type ResolvedAlmadarPaths,\n} from \"./almadar-studio-config.js\";\n","/**\n * Uses Integration for OrbitalServerRuntime\n *\n * Pre-processes OrbitalSchema to resolve `uses` declarations\n * before registration with the runtime.\n *\n * Features:\n * - Resolves all `uses` imports\n * - Expands entity/trait/page references\n * - Handles entity persistence semantics\n * - Applies event namespacing for imported traits\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalSchema, Orbital, OrbitalDefinition, Entity, Page, Trait, TraitRef } from \"@almadar/core\";\nimport {\n isEntityReference,\n isPageReference,\n isPageReferenceString,\n isPageReferenceObject,\n} from \"@almadar/core\";\nimport {\n ReferenceResolver,\n resolveSchema,\n type ResolvedOrbital,\n type ResolveOptions,\n} from \"./resolver/reference-resolver.js\";\nimport {\n type SchemaLoader,\n createUnifiedLoader,\n isBrowser,\n} from \"./loader/index.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Result of pre-processing a schema.\n */\nexport interface PreprocessedSchema {\n /** Schema with all references resolved */\n schema: OrbitalSchema;\n\n /** Entity sharing information (for runtime isolation) */\n entitySharing: EntitySharingMap;\n\n /** Event namespace mapping */\n eventNamespaces: EventNamespaceMap;\n\n /** Warnings from resolution */\n warnings: string[];\n}\n\n/**\n * Map of orbital -> entity sharing info\n */\nexport interface EntitySharingMap {\n [orbitalName: string]: {\n /** The entity name */\n entityName: string;\n /** Persistence type */\n persistence: \"persistent\" | \"runtime\" | \"singleton\";\n /** Whether this entity is shared with other orbitals */\n isShared: boolean;\n /** Source orbital if imported */\n sourceAlias?: string;\n /** Collection name for persistent entities */\n collectionName?: string;\n };\n}\n\n/**\n * Map of trait events to namespaced events\n */\nexport interface EventNamespaceMap {\n [orbitalName: string]: {\n [traitName: string]: {\n /** Original event -> namespaced event */\n emits: Record<string, string>;\n /** Namespaced event -> original event (for listeners) */\n listens: Record<string, string>;\n };\n };\n}\n\n/**\n * Options for preprocessing.\n */\nexport interface PreprocessOptions extends ResolveOptions {\n /** Apply event namespacing to imported traits */\n namespaceEvents?: boolean;\n}\n\n/**\n * Result type for preprocessing.\n */\nexport type PreprocessResult =\n | { success: true; data: PreprocessedSchema }\n | { success: false; errors: string[] };\n\n// ============================================================================\n// Pre-processor\n// ============================================================================\n\n/**\n * Preprocess a schema to resolve all `uses` references.\n *\n * This is the integration point between the new `uses` system and the\n * existing OrbitalServerRuntime. It:\n *\n * 1. Resolves all `uses` declarations\n * 2. Expands entity references to inline definitions\n * 3. Expands trait references to inline definitions\n * 4. Expands page references with path overrides\n * 5. Builds entity sharing map for runtime isolation\n * 6. Builds event namespace map for cross-orbital events\n *\n * @example\n * ```typescript\n * const result = await preprocessSchema(schema, {\n * basePath: \"/project/schemas\",\n * });\n *\n * if (result.success) {\n * // Register the preprocessed schema\n * runtime.register(result.data.schema);\n *\n * // Use entitySharing for isolation decisions\n * if (result.data.entitySharing[\"Level1\"].persistence === \"runtime\") {\n * // Entities are isolated per orbital\n * }\n * }\n * ```\n */\nexport async function preprocessSchema(\n schema: OrbitalSchema,\n options: PreprocessOptions\n): Promise<PreprocessResult> {\n const namespaceEvents = options.namespaceEvents ?? true;\n\n // Resolve all references\n const resolveResult = await resolveSchema(schema, options);\n if (!resolveResult.success) {\n return { success: false, errors: resolveResult.errors };\n }\n\n const resolved = resolveResult.data;\n const warnings = resolveResult.warnings;\n\n // Build preprocessed orbitals\n const preprocessedOrbitals: Orbital[] = [];\n const entitySharing: EntitySharingMap = {};\n const eventNamespaces: EventNamespaceMap = {};\n\n for (const resolvedOrbital of resolved) {\n const orbitalName = resolvedOrbital.name;\n\n // Build entity sharing info\n const persistence = resolvedOrbital.entitySource?.persistence ??\n (resolvedOrbital.entity.persistence as \"persistent\" | \"runtime\" | \"singleton\" | undefined) ??\n \"persistent\";\n\n entitySharing[orbitalName] = {\n entityName: resolvedOrbital.entity.name,\n persistence,\n isShared: persistence !== \"runtime\",\n sourceAlias: resolvedOrbital.entitySource?.alias,\n collectionName: resolvedOrbital.entity.collection,\n };\n\n // Build event namespace map\n eventNamespaces[orbitalName] = {};\n for (const resolvedTrait of resolvedOrbital.traits) {\n const traitName = resolvedTrait.trait.name;\n const namespace: { emits: Record<string, string>; listens: Record<string, string> } = {\n emits: {},\n listens: {},\n };\n\n // Namespace emitted events if the trait is imported\n if (namespaceEvents && resolvedTrait.source.type === \"imported\") {\n const emits = resolvedTrait.trait.emits ?? [];\n for (const emit of emits) {\n const eventName = typeof emit === \"string\" ? emit : emit.event;\n // External events get namespaced: OrbitalName.TraitName.EVENT\n namespace.emits[eventName] = `${orbitalName}.${traitName}.${eventName}`;\n }\n\n const listens = resolvedTrait.trait.listens ?? [];\n for (const listen of listens) {\n // Listening to namespaced events\n namespace.listens[listen.event] = listen.event;\n }\n }\n\n eventNamespaces[orbitalName][traitName] = namespace;\n }\n\n // Build preprocessed orbital with resolved inline definitions\n const preprocessedOrbital: OrbitalDefinition = {\n name: orbitalName,\n description: resolvedOrbital.original.description,\n visual_prompt: resolvedOrbital.original.visual_prompt,\n // Resolved entity (always inline now)\n entity: resolvedOrbital.entity,\n // Resolved traits (inline definitions)\n traits: resolvedOrbital.traits.map((rt) => {\n // If it has config or linkedEntity, wrap in reference object\n if (rt.config || rt.linkedEntity) {\n return {\n ref: rt.trait.name,\n config: rt.config,\n linkedEntity: rt.linkedEntity,\n // Include the resolved trait definition for runtime\n _resolved: rt.trait,\n } as TraitRef;\n }\n // Otherwise return the inline trait\n return rt.trait as TraitRef;\n }),\n // Resolved pages (inline definitions with path overrides applied)\n pages: resolvedOrbital.pages.map((rp) => rp.page),\n // Preserve other fields\n exposes: resolvedOrbital.original.exposes,\n domainContext: resolvedOrbital.original.domainContext,\n design: resolvedOrbital.original.design,\n };\n\n preprocessedOrbitals.push(preprocessedOrbital);\n }\n\n // Build preprocessed schema\n const preprocessedSchema: OrbitalSchema = {\n ...schema,\n orbitals: preprocessedOrbitals,\n };\n\n return {\n success: true,\n data: {\n schema: preprocessedSchema,\n entitySharing,\n eventNamespaces,\n warnings,\n },\n };\n}\n\n// ============================================================================\n// Entity Isolation Helper\n// ============================================================================\n\n/**\n * Get the collection name for an orbital's entity, considering isolation.\n *\n * - `persistent` entities share the same collection\n * - `runtime` entities get isolated collections per orbital\n * - `singleton` entities share a single-record collection\n */\nexport function getIsolatedCollectionName(\n orbitalName: string,\n entitySharing: EntitySharingMap\n): string {\n const info = entitySharing[orbitalName];\n if (!info) {\n throw new Error(`Unknown orbital: ${orbitalName}`);\n }\n\n if (info.persistence === \"runtime\") {\n // Isolated: use orbital-prefixed collection\n return `${orbitalName}_${info.entityName}`;\n }\n\n // Shared: use the entity's collection name or default\n return info.collectionName || info.entityName.toLowerCase() + \"s\";\n}\n\n// ============================================================================\n// Event Namespacing Helper\n// ============================================================================\n\n/**\n * Get the namespaced event name for an orbital's trait event.\n */\nexport function getNamespacedEvent(\n orbitalName: string,\n traitName: string,\n eventName: string,\n eventNamespaces: EventNamespaceMap\n): string {\n const orbitalNs = eventNamespaces[orbitalName];\n if (!orbitalNs) return eventName;\n\n const traitNs = orbitalNs[traitName];\n if (!traitNs) return eventName;\n\n return traitNs.emits[eventName] || eventName;\n}\n\n/**\n * Check if an event name is namespaced (contains dots).\n */\nexport function isNamespacedEvent(eventName: string): boolean {\n return eventName.includes(\".\");\n}\n\n/**\n * Parse a namespaced event name.\n */\nexport function parseNamespacedEvent(\n eventName: string\n): { orbital?: string; trait?: string; event: string } {\n const parts = eventName.split(\".\");\n if (parts.length === 3) {\n return { orbital: parts[0], trait: parts[1], event: parts[2] };\n }\n if (parts.length === 2) {\n return { trait: parts[0], event: parts[1] };\n }\n return { event: eventName };\n}\n\n// ============================================================================\n// Loader Factory Helper\n// ============================================================================\n\n/**\n * Options for creating a schema preprocessor.\n */\nexport interface CreatePreprocessorOptions {\n /** Base path for schema files */\n basePath: string;\n\n /** Standard library path (filesystem or URL) */\n stdLibPath?: string;\n\n /** Scoped package paths */\n scopedPaths?: Record<string, string>;\n\n /** Custom loader instance (optional) */\n loader?: SchemaLoader;\n\n /** Apply event namespacing to imported traits */\n namespaceEvents?: boolean;\n}\n\n/**\n * Create a schema preprocessor with automatic loader selection.\n *\n * In browser environments, uses HttpLoader.\n * In Node.js/Electron, uses UnifiedLoader (filesystem + HTTP fallback).\n *\n * @example\n * ```typescript\n * // Server-side (Node.js)\n * const preprocessor = createPreprocessor({\n * basePath: \"/project/schemas\",\n * stdLibPath: \"/project/std\",\n * });\n *\n * // Browser-side (uses HTTP)\n * const preprocessor = createPreprocessor({\n * basePath: \"/api/schemas\",\n * stdLibPath: \"https://cdn.example.com/orbital-std\",\n * });\n *\n * // Custom loader\n * const preprocessor = createPreprocessor({\n * basePath: \"/schemas\",\n * loader: myCustomLoader,\n * });\n * ```\n */\nexport function createPreprocessor(options: CreatePreprocessorOptions): {\n preprocess: (schema: OrbitalSchema) => Promise<PreprocessResult>;\n loader: SchemaLoader;\n} {\n // Create loader if not provided\n const loader = options.loader ?? createUnifiedLoader({\n basePath: options.basePath,\n stdLibPath: options.stdLibPath,\n scopedPaths: options.scopedPaths,\n });\n\n const preprocess = (schema: OrbitalSchema) =>\n preprocessSchema(schema, {\n basePath: options.basePath,\n stdLibPath: options.stdLibPath,\n scopedPaths: options.scopedPaths,\n loader,\n namespaceEvents: options.namespaceEvents,\n });\n\n return { preprocess, loader };\n}\n\n/**\n * Preprocess a schema with automatic loader selection.\n *\n * Convenience wrapper around `preprocessSchema` that creates\n * an appropriate loader based on the environment.\n *\n * @example\n * ```typescript\n * const result = await preprocessSchemaAuto(schema, {\n * basePath: \"/schemas\",\n * stdLibPath: \"/std\",\n * });\n * ```\n */\nexport async function preprocessSchemaAuto(\n schema: OrbitalSchema,\n options: Omit<CreatePreprocessorOptions, \"loader\">\n): Promise<PreprocessResult> {\n const { preprocess } = createPreprocessor(options);\n return preprocess(schema);\n}\n"]}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Unified Runtime Types
3
+ *
4
+ * Platform-agnostic interfaces for trait execution on client or server.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ /**
9
+ * Event structure for cross-trait communication
10
+ */
11
+ interface RuntimeEvent {
12
+ /** Event type (e.g., "ORDER_CONFIRMED", "TraitName.EVENT_NAME") */
13
+ type: string;
14
+ /** Event payload data */
15
+ payload?: Record<string, unknown>;
16
+ /** Timestamp when event was emitted */
17
+ timestamp: number;
18
+ /** Source information for debugging */
19
+ source?: {
20
+ orbital?: string;
21
+ trait?: string;
22
+ transition?: string;
23
+ tick?: string;
24
+ };
25
+ }
26
+ type EventListener = (event: RuntimeEvent) => void;
27
+ type Unsubscribe = () => void;
28
+ /**
29
+ * Event bus interface for pub/sub communication
30
+ */
31
+ interface IEventBus {
32
+ /** Emit an event */
33
+ emit(type: string, payload?: Record<string, unknown>, source?: RuntimeEvent['source']): void;
34
+ /** Subscribe to an event */
35
+ on(type: string, listener: EventListener): Unsubscribe;
36
+ /** Subscribe to ALL events (wildcard listener) */
37
+ onAny(listener: EventListener): Unsubscribe;
38
+ /** Check if there are listeners for an event */
39
+ hasListeners(type: string): boolean;
40
+ /** Get all registered event types */
41
+ getRegisteredEvents(): string[];
42
+ /** Clear all listeners */
43
+ clear(): void;
44
+ }
45
+ /**
46
+ * State of a single trait's state machine
47
+ */
48
+ interface TraitState {
49
+ /** Trait name */
50
+ traitName: string;
51
+ /** Current state name */
52
+ currentState: string;
53
+ /** Previous state (null if initial) */
54
+ previousState: string | null;
55
+ /** Last event that caused a transition */
56
+ lastEvent: string | null;
57
+ /** Custom context data */
58
+ context: Record<string, unknown>;
59
+ }
60
+ /**
61
+ * Result of processing an event through a state machine
62
+ */
63
+ interface TransitionResult {
64
+ /** Whether a transition was executed */
65
+ executed: boolean;
66
+ /** New state after transition (same as current if not executed) */
67
+ newState: string;
68
+ /** Previous state before transition */
69
+ previousState: string;
70
+ /** Effects to execute (empty if guard failed or no transition found) */
71
+ effects: unknown[];
72
+ /** The transition that was executed (undefined if none) */
73
+ transition?: {
74
+ from: string;
75
+ to: string;
76
+ event: string;
77
+ };
78
+ /** Guard evaluation result (undefined if no guard) */
79
+ guardResult?: boolean;
80
+ }
81
+ /**
82
+ * Minimal trait definition for state machine processing
83
+ */
84
+ interface TraitDefinition {
85
+ name: string;
86
+ states: Array<{
87
+ name: string;
88
+ isInitial?: boolean;
89
+ }>;
90
+ transitions: Array<{
91
+ from: string | string[];
92
+ to: string;
93
+ event: string;
94
+ guard?: unknown;
95
+ effects?: unknown[];
96
+ }>;
97
+ /** Cross-trait event listeners (optional) */
98
+ listens?: Array<{
99
+ event: string;
100
+ triggers: string;
101
+ payloadMapping?: Record<string, unknown>;
102
+ }>;
103
+ }
104
+ /**
105
+ * Effect handlers interface - platform-specific implementations
106
+ *
107
+ * Client: React hooks, DOM, router
108
+ * Server: Express, database, integrators
109
+ */
110
+ interface EffectHandlers {
111
+ /** Emit an event to the event bus */
112
+ emit: (event: string, payload?: Record<string, unknown>) => void;
113
+ /** Persist data (create/update/delete) */
114
+ persist: (action: 'create' | 'update' | 'delete', entityType: string, data?: Record<string, unknown>) => Promise<void>;
115
+ /** Set a field value on an entity */
116
+ set: (entityId: string, field: string, value: unknown) => void;
117
+ /** Call an external service */
118
+ callService: (service: string, action: string, params?: Record<string, unknown>) => Promise<unknown>;
119
+ /** Fetch entity data (server only) - returns data for client-side rendering */
120
+ fetch?: (entityType: string, options?: {
121
+ id?: string;
122
+ filter?: unknown;
123
+ limit?: number;
124
+ offset?: number;
125
+ }) => Promise<Record<string, unknown> | Record<string, unknown>[] | null>;
126
+ /** Spawn a new entity instance */
127
+ spawn?: (entityType: string, props?: Record<string, unknown>) => void;
128
+ /** Despawn (delete) an entity instance */
129
+ despawn?: (entityId: string) => void;
130
+ /** Render UI to a slot (client only) */
131
+ renderUI?: (slot: string, pattern: unknown, props?: Record<string, unknown>, priority?: number) => void;
132
+ /** Navigate to a route (client only) */
133
+ navigate?: (path: string, params?: Record<string, unknown>) => void;
134
+ /** Show a notification (client: toast, server: log) */
135
+ notify?: (message: string, type: 'success' | 'error' | 'warning' | 'info') => void;
136
+ /** Log a message */
137
+ log?: (message: string, level?: 'log' | 'warn' | 'error', data?: unknown) => void;
138
+ }
139
+ /**
140
+ * Context for resolving bindings like @entity.field, @payload.value
141
+ */
142
+ interface BindingContext {
143
+ /** Current entity data */
144
+ entity?: Record<string, unknown>;
145
+ /** Event payload data */
146
+ payload?: Record<string, unknown>;
147
+ /** Current state name */
148
+ state?: string;
149
+ /** Trait-level state/config */
150
+ config?: Record<string, unknown>;
151
+ /** Additional custom bindings */
152
+ [key: string]: unknown;
153
+ }
154
+ /**
155
+ * S-expression effect array
156
+ * First element is the operator, rest are arguments
157
+ */
158
+ type Effect = [string, ...unknown[]];
159
+ /**
160
+ * Effect execution context
161
+ */
162
+ interface EffectContext {
163
+ /** Trait name */
164
+ traitName: string;
165
+ /** Current state */
166
+ state: string;
167
+ /** Transition description */
168
+ transition: string;
169
+ /** Linked entity name */
170
+ linkedEntity?: string;
171
+ /** Entity ID (if available) */
172
+ entityId?: string;
173
+ }
174
+
175
+ export type { BindingContext as B, EffectHandlers as E, IEventBus as I, RuntimeEvent as R, TraitState as T, Unsubscribe as U, TraitDefinition as a, TransitionResult as b, EffectContext as c, Effect as d, EventListener as e };
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@almadar/runtime",
3
+ "version": "1.0.0",
4
+ "description": "Interpreted runtime for Almadar orbital applications (OrbitalServerRuntime)",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ },
14
+ "./OrbitalServerRuntime": {
15
+ "import": "./dist/OrbitalServerRuntime.js",
16
+ "types": "./dist/OrbitalServerRuntime.d.ts"
17
+ },
18
+ "./ServerBridge": {
19
+ "import": "./dist/ServerBridge.js",
20
+ "types": "./dist/ServerBridge.d.ts"
21
+ }
22
+ },
23
+ "files": [
24
+ "dist"
25
+ ],
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "dependencies": {
30
+ "@faker-js/faker": "^9.3.0",
31
+ "@almadar/server": "1.0.0",
32
+ "@almadar/evaluator": "1.0.0",
33
+ "@almadar/core": "1.0.0"
34
+ },
35
+ "peerDependencies": {
36
+ "express": "^4.0.0"
37
+ },
38
+ "devDependencies": {
39
+ "@types/express": "^5.0.0",
40
+ "@types/node": "^20.0.0",
41
+ "express": "^4.21.0",
42
+ "tsup": "^8.0.0",
43
+ "typescript": "^5.7.0",
44
+ "vitest": "^2.1.0"
45
+ },
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "https://github.com/almadar-io/almadar.git",
49
+ "directory": "packages/almadar-runtime"
50
+ },
51
+ "license": "MIT",
52
+ "keywords": [
53
+ "almadar",
54
+ "runtime",
55
+ "orbital",
56
+ "interpreter"
57
+ ],
58
+ "scripts": {
59
+ "build": "tsup",
60
+ "build:watch": "tsup --watch",
61
+ "lint": "eslint src/",
62
+ "typecheck": "tsc --noEmit",
63
+ "test": "vitest --run"
64
+ }
65
+ }