@almadar/runtime 1.0.10 → 1.0.13

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/EventBus.ts","../src/BindingResolver.ts","../src/StateMachineCore.ts","../src/EffectExecutor.ts","../src/loader/schema-loader.ts","../src/loader/http-loader.ts","../src/loader/unified-loader.ts","../src/resolver/reference-resolver.ts","../src/UsesIntegration.ts"],"names":[],"mappings":"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","file":"chunk-VW6RWQA5.js","sourcesContent":["/**\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 if (!eventKey) return '';\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 include?: string[];\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 * SchemaLoader Interface\n *\n * Abstract interface for loading OrbitalSchema files from various sources.\n * Implementations exist for:\n * - FileSystemLoader (Node.js) - uses fs module\n * - HttpLoader (Browser) - uses fetch API\n * - UnifiedLoader (Auto-detect) - routes to appropriate loader\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalSchema, Orbital } from \"@almadar/core\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Result of loading a schema.\n */\nexport interface LoadedSchema {\n /** The loaded schema */\n schema: OrbitalSchema;\n\n /** Source path/URL (resolved) */\n sourcePath: string;\n\n /** Original import path */\n importPath: string;\n}\n\n/**\n * Result of loading a single orbital from a schema.\n */\nexport interface LoadedOrbital {\n /** The loaded orbital */\n orbital: Orbital;\n\n /** Source path/URL (resolved) */\n sourcePath: string;\n\n /** Original import path */\n importPath: string;\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 * Base options for all loaders.\n */\nexport interface BaseLoaderOptions {\n /** Base path/URL for resolving relative imports */\n basePath: string;\n\n /** Standard library root path/URL */\n stdLibPath?: string;\n\n /** Scoped package roots (e.g., { \"@game-lib\": \"/path/to/lib\" }) */\n scopedPaths?: Record<string, string>;\n}\n\n/**\n * Options for file system loading.\n */\nexport interface FileSystemLoaderOptions extends BaseLoaderOptions {\n /** Whether to allow paths outside basePath (security) */\n allowOutsideBasePath?: boolean;\n}\n\n/**\n * Options for HTTP loading.\n */\nexport interface HttpLoaderOptions extends BaseLoaderOptions {\n /** Default fetch options */\n fetchOptions?: RequestInit;\n\n /** Request timeout in milliseconds */\n timeout?: number;\n\n /** Whether to use credentials (cookies, auth headers) */\n credentials?: RequestCredentials;\n}\n\n/**\n * Combined options for unified loader.\n */\nexport interface UnifiedLoaderOptions extends BaseLoaderOptions {\n /** File system specific options */\n fileSystem?: Omit<FileSystemLoaderOptions, keyof BaseLoaderOptions>;\n\n /** HTTP specific options */\n http?: Omit<HttpLoaderOptions, keyof BaseLoaderOptions>;\n\n /** Force a specific loader type */\n forceLoader?: \"filesystem\" | \"http\";\n}\n\n/**\n * Loader strategy type for environment-specific loading.\n */\nexport type LoaderStrategy = \"filesystem\" | \"http\" | \"auto\";\n\n// ============================================================================\n// SchemaLoader Interface\n// ============================================================================\n\n/**\n * Abstract interface for schema loaders.\n *\n * All loaders must implement:\n * - load() - Load a schema from an import path\n * - resolvePath() - Resolve an import path to absolute path/URL\n *\n * @example\n * ```typescript\n * // Using FileSystemLoader (Node.js)\n * const loader: SchemaLoader = new FileSystemLoader({ basePath: \"/schemas\" });\n * const result = await loader.load(\"./my-schema.orb\");\n *\n * // Using HttpLoader (Browser)\n * const loader: SchemaLoader = new HttpLoader({ basePath: \"/api/schemas\" });\n * const result = await loader.load(\"./my-schema.orb\");\n *\n * // Using UnifiedLoader (auto-detect)\n * const loader: SchemaLoader = createUnifiedLoader({ basePath: \"/schemas\" });\n * const result = await loader.load(\"./my-schema.orb\");\n * ```\n */\nexport interface SchemaLoader {\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 (optional)\n */\n load(\n importPath: string,\n fromPath?: string,\n chain?: ImportChainLike\n ): Promise<LoadResult<LoadedSchema>>;\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 (optional)\n */\n loadOrbital(\n importPath: string,\n orbitalName?: string,\n fromPath?: string,\n chain?: ImportChainLike\n ): Promise<LoadResult<LoadedOrbital>>;\n\n /**\n * Resolve an import path to an absolute path/URL.\n *\n * @param importPath - The import path\n * @param fromPath - The path of the file doing the import (optional)\n */\n resolvePath(importPath: string, fromPath?: string): LoadResult<string>;\n\n /**\n * Clear the loader's cache.\n */\n clearCache(): void;\n\n /**\n * Get cache statistics.\n */\n getCacheStats(): { size: number };\n}\n\n/**\n * Interface for import chain (circular detection).\n * This allows different implementations to interoperate.\n */\nexport interface ImportChainLike {\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\n /**\n * Remove the last path from the chain.\n */\n pop(): void;\n\n /**\n * Clone the chain for nested loading.\n */\n clone(): ImportChainLike;\n}\n\n// ============================================================================\n// Environment Detection\n// ============================================================================\n\n/**\n * Detect if running in Electron.\n */\nexport function isElectron(): boolean {\n return typeof process !== \"undefined\" && !!process.versions?.electron;\n}\n\n/**\n * Detect if running in browser (not Electron).\n */\nexport function isBrowser(): boolean {\n return typeof window !== \"undefined\" && !isElectron();\n}\n\n/**\n * Detect if running in Node.js (not browser).\n */\nexport function isNode(): boolean {\n return typeof process !== \"undefined\" && !isBrowser();\n}\n\n/**\n * Get the recommended loader strategy for the current environment.\n */\nexport function getDefaultLoaderStrategy(): LoaderStrategy {\n if (isBrowser()) {\n return \"http\";\n }\n return \"filesystem\";\n}\n\n// ============================================================================\n// Utility Types\n// ============================================================================\n\n/**\n * Schema loader factory function type.\n */\nexport type SchemaLoaderFactory<T extends BaseLoaderOptions = BaseLoaderOptions> = (\n options: T\n) => SchemaLoader;\n","/**\n * HTTP Schema Loader\n *\n * Loads OrbitalSchema files via HTTP/fetch for browser environments.\n * Also works in Node.js with the fetch API.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalSchema, Orbital } from \"@almadar/core\";\nimport { OrbitalSchemaSchema } from \"@almadar/core\";\nimport type {\n SchemaLoader,\n LoadedSchema,\n LoadedOrbital,\n LoadResult,\n HttpLoaderOptions,\n ImportChainLike,\n} from \"./schema-loader.js\";\n\n// ============================================================================\n// Import Chain Implementation\n// ============================================================================\n\n/**\n * Tracks import chains to detect circular imports.\n * Compatible with ImportChainLike interface.\n */\nexport class HttpImportChain implements ImportChainLike {\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 = [\n ...this.chain.slice(this.chain.indexOf(absolutePath)),\n absolutePath,\n ];\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(): HttpImportChain {\n const newChain = new HttpImportChain();\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-fetching.\n */\nclass HttpLoaderCache {\n private cache = new Map<string, LoadedSchema>();\n\n get(url: string): LoadedSchema | undefined {\n return this.cache.get(url);\n }\n\n set(url: string, schema: LoadedSchema): void {\n this.cache.set(url, schema);\n }\n\n has(url: string): boolean {\n return this.cache.has(url);\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// HTTP Loader\n// ============================================================================\n\n/**\n * HttpLoader - Loads OrbitalSchema files via HTTP/fetch.\n *\n * Designed for browser environments where file system access is not available.\n * Uses the fetch API for loading schemas.\n *\n * Path Resolution:\n * - Relative paths: `./health.orb` -> base URL + path\n * - Standard library: `std/behaviors/game-core` -> std lib URL + path\n * - Scoped packages: `@scope/pkg.orb` -> scoped URL + path\n * - Absolute URLs: `https://...` -> used directly\n *\n * @example\n * ```typescript\n * const loader = new HttpLoader({\n * basePath: \"/api/schemas\",\n * stdLibPath: \"https://cdn.example.com/orbital-std\",\n * });\n *\n * // Load from relative path\n * const result = await loader.load(\"./my-schema.orb\");\n *\n * // Load from std library\n * const stdResult = await loader.load(\"std/behaviors/game-core\");\n * ```\n */\nexport class HttpLoader implements SchemaLoader {\n private options: Required<\n Pick<HttpLoaderOptions, \"basePath\" | \"stdLibPath\" | \"scopedPaths\">\n > &\n HttpLoaderOptions;\n private cache: HttpLoaderCache;\n\n constructor(options: HttpLoaderOptions) {\n this.options = {\n basePath: options.basePath,\n stdLibPath: options.stdLibPath ?? \"\",\n scopedPaths: options.scopedPaths ?? {},\n fetchOptions: options.fetchOptions,\n timeout: options.timeout ?? 30000,\n credentials: options.credentials ?? \"same-origin\",\n };\n this.cache = new HttpLoaderCache();\n }\n\n /**\n * Load a schema from an import path.\n */\n async load(\n importPath: string,\n fromPath?: string,\n chain?: ImportChainLike\n ): Promise<LoadResult<LoadedSchema>> {\n const importChain = chain ?? new HttpImportChain();\n\n // Resolve to absolute URL\n const resolveResult = this.resolvePath(importPath, fromPath);\n if (!resolveResult.success) {\n return resolveResult;\n }\n const absoluteUrl = resolveResult.data;\n\n // Check for circular imports\n const circularError = importChain.push(absoluteUrl);\n if (circularError) {\n return { success: false, error: circularError };\n }\n\n try {\n // Check cache\n const cached = this.cache.get(absoluteUrl);\n if (cached) {\n return { success: true, data: cached };\n }\n\n // Fetch and parse the schema\n const loadResult = await this.fetchSchema(absoluteUrl);\n if (!loadResult.success) {\n return loadResult;\n }\n\n const loaded: LoadedSchema = {\n schema: loadResult.data,\n sourcePath: absoluteUrl,\n importPath,\n };\n\n // Cache the result\n this.cache.set(absoluteUrl, 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 async loadOrbital(\n importPath: string,\n orbitalName?: string,\n fromPath?: string,\n chain?: ImportChainLike\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(\n (o: Orbital) => o.name === orbitalName\n );\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 URL.\n */\n resolvePath(importPath: string, fromPath?: string): LoadResult<string> {\n // Already absolute URL\n if (importPath.startsWith(\"http://\") || importPath.startsWith(\"https://\")) {\n return { success: true, data: importPath };\n }\n\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 // 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 URL 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 absoluteUrl = this.joinUrl(this.options.stdLibPath, relativePath);\n\n // Add .orb extension if not present\n if (!absoluteUrl.endsWith(\".orb\")) {\n absoluteUrl += \".orb\";\n }\n\n return { success: true, data: absoluteUrl };\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 absoluteUrl = this.joinUrl(scopeRoot, relativePath);\n\n // Add .orb extension if not present\n if (!absoluteUrl.endsWith(\".orb\")) {\n absoluteUrl += \".orb\";\n }\n\n return { success: true, data: absoluteUrl };\n }\n\n /**\n * Resolve a relative path.\n */\n private resolveRelativePath(\n importPath: string,\n fromPath?: string\n ): LoadResult<string> {\n const baseUrl = fromPath ? this.getParentUrl(fromPath) : this.options.basePath;\n\n let absoluteUrl = this.joinUrl(baseUrl, importPath);\n\n // Add .orb extension if not present\n if (!absoluteUrl.endsWith(\".orb\")) {\n absoluteUrl += \".orb\";\n }\n\n return { success: true, data: absoluteUrl };\n }\n\n /**\n * Fetch and parse an OrbitalSchema from a URL.\n */\n private async fetchSchema(url: string): Promise<LoadResult<OrbitalSchema>> {\n try {\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n this.options.timeout\n );\n\n try {\n const response = await fetch(url, {\n ...this.options.fetchOptions,\n credentials: this.options.credentials,\n signal: controller.signal,\n headers: {\n Accept: \"application/json\",\n ...this.options.fetchOptions?.headers,\n },\n });\n\n if (!response.ok) {\n return {\n success: false,\n error: `HTTP ${response.status}: ${response.statusText} for ${url}`,\n };\n }\n\n const text = await response.text();\n\n // Parse JSON\n let data: unknown;\n try {\n data = JSON.parse(text);\n } catch (e) {\n return {\n success: false,\n error: `Invalid JSON in ${url}: ${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 ${url}:\\n${errors}`,\n };\n }\n\n return { success: true, data: parseResult.data as OrbitalSchema };\n } finally {\n clearTimeout(timeoutId);\n }\n } catch (e) {\n if (e instanceof Error && e.name === \"AbortError\") {\n return {\n success: false,\n error: `Request timeout for ${url} (${this.options.timeout}ms)`,\n };\n }\n return {\n success: false,\n error: `Failed to fetch ${url}: ${e instanceof Error ? e.message : String(e)}`,\n };\n }\n }\n\n /**\n * Join URL parts, handling relative paths and trailing slashes.\n */\n private joinUrl(base: string, path: string): string {\n // Handle absolute URLs in path\n if (path.startsWith(\"http://\") || path.startsWith(\"https://\")) {\n return path;\n }\n\n // Use URL API if available (browser and modern Node.js)\n if (typeof URL !== \"undefined\") {\n try {\n // Ensure base has a trailing slash for proper resolution\n const baseUrl = base.endsWith(\"/\") ? base : base + \"/\";\n return new URL(path, baseUrl).href;\n } catch {\n // Fall back to string manipulation\n }\n }\n\n // Simple string manipulation fallback\n const normalizedBase = base.endsWith(\"/\") ? base.slice(0, -1) : base;\n const normalizedPath = path.startsWith(\"/\") ? path : \"/\" + path;\n\n // Handle relative path navigation\n if (normalizedPath.startsWith(\"/./\")) {\n return normalizedBase + normalizedPath.slice(2);\n }\n\n // Handle parent directory navigation\n if (normalizedPath.startsWith(\"/../\")) {\n const baseParts = normalizedBase.split(\"/\");\n baseParts.pop(); // Remove last segment\n return baseParts.join(\"/\") + normalizedPath.slice(3);\n }\n\n return normalizedBase + normalizedPath;\n }\n\n /**\n * Get parent URL (directory) from a URL.\n */\n private getParentUrl(url: string): string {\n if (typeof URL !== \"undefined\") {\n try {\n const urlObj = new URL(url);\n const pathParts = urlObj.pathname.split(\"/\");\n pathParts.pop(); // Remove file name\n urlObj.pathname = pathParts.join(\"/\");\n return urlObj.href;\n } catch {\n // Fall back to string manipulation\n }\n }\n\n const lastSlash = url.lastIndexOf(\"/\");\n if (lastSlash !== -1) {\n return url.slice(0, lastSlash);\n }\n return url;\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 an HTTP loader with sensible defaults.\n */\nexport function createHttpLoader(\n basePath: string,\n options?: Partial<HttpLoaderOptions>\n): HttpLoader {\n return new HttpLoader({\n basePath,\n ...options,\n });\n}\n","/**\n * Unified Schema Loader\n *\n * Auto-detects the environment and routes to the appropriate loader:\n * - FileSystemLoader for Node.js/Electron\n * - HttpLoader for browser\n *\n * Also handles mixed loading scenarios where some imports use filesystem\n * and others use HTTP.\n *\n * @packageDocumentation\n */\n\nimport type {\n SchemaLoader,\n LoadedSchema,\n LoadedOrbital,\n LoadResult,\n UnifiedLoaderOptions,\n ImportChainLike,\n} from \"./schema-loader.js\";\nimport { isElectron, isBrowser, isNode } from \"./schema-loader.js\";\nimport { HttpLoader, HttpImportChain } from \"./http-loader.js\";\n\n// ============================================================================\n// Dynamic Import for FileSystem Loader\n// ============================================================================\n\n// Type for the external loader module (loaded dynamically in Node.js)\ntype ExternalLoaderModule = typeof import(\"./external-loader.js\");\n\nlet externalLoaderModule: ExternalLoaderModule | null = null;\n\n/**\n * Dynamically import the external loader (Node.js only).\n * This avoids bundling fs module in browser builds.\n */\nasync function getExternalLoaderModule(): Promise<ExternalLoaderModule | null> {\n if (externalLoaderModule) {\n return externalLoaderModule;\n }\n\n if (isBrowser()) {\n return null;\n }\n\n try {\n // Dynamic import to avoid bundling fs in browser\n externalLoaderModule = await import(\"./external-loader.js\");\n return externalLoaderModule;\n } catch {\n return null;\n }\n}\n\n// ============================================================================\n// Unified Import Chain\n// ============================================================================\n\n/**\n * Import chain that works with both loaders.\n */\nexport class UnifiedImportChain implements ImportChainLike {\n private chain: string[] = [];\n\n push(path: string): string | null {\n // Normalize path for comparison (handle both file paths and URLs)\n const normalized = this.normalizePath(path);\n if (this.chain.includes(normalized)) {\n const cycle = [\n ...this.chain.slice(this.chain.indexOf(normalized)),\n normalized,\n ];\n return `Circular import detected: ${cycle.join(\" -> \")}`;\n }\n this.chain.push(normalized);\n return null;\n }\n\n pop(): void {\n this.chain.pop();\n }\n\n clone(): UnifiedImportChain {\n const newChain = new UnifiedImportChain();\n newChain.chain = [...this.chain];\n return newChain;\n }\n\n private normalizePath(path: string): string {\n // For URLs, use the full URL\n if (path.startsWith(\"http://\") || path.startsWith(\"https://\")) {\n return path;\n }\n // For file paths, normalize path separators\n return path.replace(/\\\\/g, \"/\");\n }\n}\n\n// ============================================================================\n// Unified Loader\n// ============================================================================\n\n/**\n * UnifiedLoader - Auto-detects environment and routes to appropriate loader.\n *\n * Loading Strategy:\n * - Electron: Uses FileSystemLoader with HTTP fallback for remote URLs\n * - Browser: Uses HttpLoader only (no filesystem access)\n * - Node.js: Uses FileSystemLoader with HTTP for remote URLs\n *\n * Import Type Resolution:\n * - `./local.orb`: FileSystem (Node/Electron) or Error (Browser)\n * - `std/behaviors/x`: FileSystem OR HTTP (configurable)\n * - `@scope/pkg.orb`: FileSystem OR HTTP (configurable)\n * - `https://...`: Always HTTP\n *\n * @example\n * ```typescript\n * const loader = createUnifiedLoader({\n * basePath: \"/project/schemas\",\n * stdLibPath: \"/project/std\", // or \"https://cdn.example.com/std\"\n * });\n *\n * // Load relative file (uses FileSystem in Node, error in Browser)\n * const local = await loader.load(\"./my-schema.orb\");\n *\n * // Load from URL (always uses HTTP)\n * const remote = await loader.load(\"https://example.com/schema.orb\");\n *\n * // Load from std library (uses configured path type)\n * const std = await loader.load(\"std/behaviors/game-core\");\n * ```\n */\nexport class UnifiedLoader implements SchemaLoader {\n private options: UnifiedLoaderOptions;\n private httpLoader: HttpLoader | null = null;\n private fsLoader: SchemaLoader | null = null;\n private fsLoaderInitialized = false;\n private cache = new Map<string, LoadedSchema>();\n\n constructor(options: UnifiedLoaderOptions) {\n this.options = options;\n\n // Initialize HTTP loader (always available)\n this.httpLoader = new HttpLoader({\n basePath: options.basePath,\n stdLibPath: options.stdLibPath,\n scopedPaths: options.scopedPaths,\n ...options.http,\n });\n }\n\n /**\n * Initialize the filesystem loader if available.\n */\n private async initFsLoader(): Promise<void> {\n if (this.fsLoaderInitialized) {\n return;\n }\n\n this.fsLoaderInitialized = true;\n\n if (this.options.forceLoader === \"http\") {\n return;\n }\n\n const module = await getExternalLoaderModule();\n if (module) {\n this.fsLoader = new module.ExternalOrbitalLoader({\n basePath: this.options.basePath,\n stdLibPath: this.options.stdLibPath,\n scopedPaths: this.options.scopedPaths,\n ...this.options.fileSystem,\n }) as unknown as SchemaLoader;\n }\n }\n\n /**\n * Determine which loader to use for an import path.\n */\n private getLoaderForPath(importPath: string): \"http\" | \"filesystem\" {\n // Force loader if configured\n if (this.options.forceLoader) {\n return this.options.forceLoader;\n }\n\n // HTTP URLs always use HTTP loader\n if (importPath.startsWith(\"http://\") || importPath.startsWith(\"https://\")) {\n return \"http\";\n }\n\n // Check if std lib is configured as HTTP\n if (importPath.startsWith(\"std/\") && this.options.stdLibPath) {\n if (\n this.options.stdLibPath.startsWith(\"http://\") ||\n this.options.stdLibPath.startsWith(\"https://\")\n ) {\n return \"http\";\n }\n }\n\n // Check if scoped package is configured as HTTP\n if (importPath.startsWith(\"@\") && this.options.scopedPaths) {\n const match = importPath.match(/^(@[^/]+)/);\n if (match) {\n const scopePath = this.options.scopedPaths[match[1]];\n if (\n scopePath &&\n (scopePath.startsWith(\"http://\") || scopePath.startsWith(\"https://\"))\n ) {\n return \"http\";\n }\n }\n }\n\n // Browser always uses HTTP (no filesystem)\n if (isBrowser()) {\n return \"http\";\n }\n\n // Node.js/Electron use filesystem for local files\n return \"filesystem\";\n }\n\n /**\n * Load a schema from an import path.\n *\n * Note: We delegate chain management to the inner loader (HttpLoader or FsLoader).\n * The inner loader handles circular import detection, so we don't push/pop here.\n * We only use the unified cache to avoid duplicate loads across loaders.\n */\n async load(\n importPath: string,\n fromPath?: string,\n chain?: ImportChainLike\n ): Promise<LoadResult<LoadedSchema>> {\n // Ensure filesystem loader is initialized\n await this.initFsLoader();\n\n const importChain = chain ?? new UnifiedImportChain();\n const loaderType = this.getLoaderForPath(importPath);\n\n // Resolve path first to check cache\n const resolveResult = this.resolvePath(importPath, fromPath);\n if (!resolveResult.success) {\n return resolveResult;\n }\n const absolutePath = resolveResult.data;\n\n // Check unified cache\n const cached = this.cache.get(absolutePath);\n if (cached) {\n return { success: true, data: cached };\n }\n\n // Delegate to appropriate loader - the inner loader handles chain management\n let result: LoadResult<LoadedSchema>;\n\n if (loaderType === \"http\") {\n if (!this.httpLoader) {\n return {\n success: false,\n error: \"HTTP loader not available\",\n };\n }\n result = await this.httpLoader.load(importPath, fromPath, importChain);\n } else {\n if (!this.fsLoader) {\n // Fall back to HTTP if filesystem not available\n if (this.httpLoader) {\n result = await this.httpLoader.load(\n importPath,\n fromPath,\n importChain\n );\n } else {\n return {\n success: false,\n error: `Filesystem loader not available and import \"${importPath}\" cannot be loaded via HTTP. ` +\n `This typically happens when loading local files in a browser environment.`,\n };\n }\n } else {\n result = await this.fsLoader.load(importPath, fromPath, importChain);\n }\n }\n\n // Cache successful results in unified cache\n if (result.success) {\n this.cache.set(absolutePath, result.data);\n }\n\n return result;\n }\n\n /**\n * Load a specific orbital from a schema by name.\n */\n async loadOrbital(\n importPath: string,\n orbitalName?: string,\n fromPath?: string,\n chain?: ImportChainLike\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\n if (orbitalName) {\n const found = schema.orbitals.find((o) => o.name === orbitalName);\n if (!found) {\n return {\n success: false,\n error: `Orbital \"${orbitalName}\" not found in ${importPath}. Available: ${schema.orbitals.map((o) => o.name).join(\", \")}`,\n };\n }\n return {\n success: true,\n data: {\n orbital: found,\n sourcePath: schemaResult.data.sourcePath,\n importPath,\n },\n };\n }\n\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\n return {\n success: true,\n data: {\n orbital: schema.orbitals[0],\n sourcePath: schemaResult.data.sourcePath,\n importPath,\n },\n };\n }\n\n /**\n * Resolve an import path to an absolute path/URL.\n */\n resolvePath(importPath: string, fromPath?: string): LoadResult<string> {\n const loaderType = this.getLoaderForPath(importPath);\n\n if (loaderType === \"http\" && this.httpLoader) {\n return this.httpLoader.resolvePath(importPath, fromPath);\n }\n\n if (this.fsLoader) {\n return this.fsLoader.resolvePath(importPath, fromPath);\n }\n\n // Fallback to HTTP loader\n if (this.httpLoader) {\n return this.httpLoader.resolvePath(importPath, fromPath);\n }\n\n return {\n success: false,\n error: \"No loader available for path resolution\",\n };\n }\n\n /**\n * Clear all caches.\n */\n clearCache(): void {\n this.cache.clear();\n this.httpLoader?.clearCache();\n this.fsLoader?.clearCache();\n }\n\n /**\n * Get combined cache statistics.\n */\n getCacheStats(): { size: number } {\n let size = this.cache.size;\n if (this.httpLoader) {\n size += this.httpLoader.getCacheStats().size;\n }\n if (this.fsLoader) {\n size += this.fsLoader.getCacheStats().size;\n }\n return { size };\n }\n\n /**\n * Check if filesystem loading is available.\n */\n async hasFilesystemAccess(): Promise<boolean> {\n await this.initFsLoader();\n return this.fsLoader !== null;\n }\n\n /**\n * Get current environment info.\n */\n getEnvironmentInfo(): {\n isElectron: boolean;\n isBrowser: boolean;\n isNode: boolean;\n hasFilesystem: boolean;\n } {\n return {\n isElectron: isElectron(),\n isBrowser: isBrowser(),\n isNode: isNode(),\n hasFilesystem: this.fsLoader !== null,\n };\n }\n}\n\n// ============================================================================\n// Factory Function\n// ============================================================================\n\n/**\n * Create a unified loader with sensible defaults.\n *\n * @example\n * ```typescript\n * // Basic usage\n * const loader = createUnifiedLoader({\n * basePath: \"/schemas\",\n * stdLibPath: \"/std\",\n * });\n *\n * // With HTTP std library\n * const loader = createUnifiedLoader({\n * basePath: \"/schemas\",\n * stdLibPath: \"https://cdn.example.com/orbital-std\",\n * });\n *\n * // Force HTTP only (browser-like behavior)\n * const loader = createUnifiedLoader({\n * basePath: \"/api/schemas\",\n * forceLoader: \"http\",\n * });\n * ```\n */\nexport function createUnifiedLoader(\n options: UnifiedLoaderOptions\n): UnifiedLoader {\n return new UnifiedLoader(options);\n}\n\n/**\n * Create a loader appropriate for the current environment.\n *\n * Convenience function that:\n * - In browser: Creates HttpLoader\n * - In Node.js/Electron: Creates UnifiedLoader\n */\nexport async function createAutoLoader(\n options: UnifiedLoaderOptions\n): Promise<SchemaLoader> {\n if (isBrowser()) {\n return new HttpLoader({\n basePath: options.basePath,\n stdLibPath: options.stdLibPath,\n scopedPaths: options.scopedPaths,\n ...options.http,\n });\n }\n\n const loader = new UnifiedLoader(options);\n await loader.hasFilesystemAccess(); // Trigger initialization\n return loader;\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 type {\n 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 private loaderInitialized = false;\n\n constructor(options: ResolveOptions) {\n this.options = options;\n // Use provided loader; filesystem loader will be created lazily if needed\n this.loader = options.loader as SchemaLoader;\n this.localTraits = options.localTraits ?? new Map();\n }\n\n private async ensureLoader(): Promise<void> {\n if (this.loader || this.loaderInitialized) return;\n this.loaderInitialized = true;\n try {\n const { ExternalOrbitalLoader } = await import(\"../loader/external-loader.js\");\n this.loader = new ExternalOrbitalLoader(this.options);\n } catch {\n // Filesystem loader not available (browser environment)\n }\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 ?? { push: () => null, pop: () => {}, clone() { return this; } } as ImportChainLike;\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 await this.ensureLoader();\n if (!this.loader) {\n errors.push(`No loader available to resolve import: ${use.from}`);\n continue;\n }\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 * 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"]}