@almadar/runtime 5.11.2 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { B as BindingContext, E as EvaluationContextExtensions, P as PatternProps, a as EffectHandlers, b as EffectContext, c as ExecutionEnvironment, d as EffectResult, T as TraitDefinition } from './types-cuy5gd29.js';
2
2
  export { e as Effect, f as EventListener, H as HANDLER_MANIFEST, I as IEventBus, R as RuntimeConfig, g as RuntimeEvent, h as TraitState, i as TransitionObserver, j as TransitionResult, U as Unsubscribe } from './types-cuy5gd29.js';
3
- import { U as UnifiedLoaderOptions, S as SchemaLoader, I as ImportChainLike, L as LoadResult, a as LoadedSchema, b as LoadedOrbital } from './OrbitalServerRuntime-B-8J_5e9.js';
4
- export { E as EntitySharingMap, c as EventBus, d as EventNamespaceMap, O as OrbitalEventRequest, e as OrbitalEventResponse, f as OrbitalServerRuntimeConfig, P as PreprocessOptions, g as PreprocessResult, h as PreprocessedSchema, i as ProcessEventOptions, R as RegisteredOrbital, j as RuntimeOrbital, k as RuntimeOrbitalSchema, l as RuntimeTrait, m as StateMachineManager, n as collectDeclaredConfigDefaults, o as createInitialTraitState, p as findInitialState, q as findTransition, r as getIsolatedCollectionName, s as getNamespacedEvent, t as isBrowser, u as isElectron, v as isNamespacedEvent, w as isNode, x as normalizeEventKey, y as parseNamespacedEvent, z as preprocessSchema, A as processEvent } from './OrbitalServerRuntime-B-8J_5e9.js';
3
+ import { U as UnifiedLoaderOptions, S as SchemaLoader, I as ImportChainLike, L as LoadResult, a as LoadedSchema, b as LoadedOrbital } from './OrbitalServerRuntime-D0ciuYXu.js';
4
+ export { E as EntitySharingMap, c as EventBus, d as EventNamespaceMap, O as OrbitalEventRequest, e as OrbitalEventResponse, f as OrbitalServerRuntimeConfig, P as PreprocessOptions, g as PreprocessResult, h as PreprocessedSchema, i as ProcessEventOptions, R as RegisteredOrbital, j as RuntimeOrbital, k as RuntimeOrbitalSchema, l as RuntimeTrait, m as StateMachineManager, n as collectDeclaredConfigDefaults, o as createInitialTraitState, p as findInitialState, q as findTransition, r as getIsolatedCollectionName, s as getNamespacedEvent, t as isBrowser, u as isElectron, v as isNamespacedEvent, w as isNode, x as normalizeEventKey, y as parseNamespacedEvent, z as preprocessSchema, A as processEvent } from './OrbitalServerRuntime-D0ciuYXu.js';
5
5
  import { EvaluationContext } from '@almadar/evaluator';
6
6
  export { EvaluationContext, createMinimalContext } from '@almadar/evaluator';
7
7
  import { EventPayload, EntityRow, PayloadField, OrbitalDefinition, OrbitalSchema } from '@almadar/core';
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { createLogger, EffectExecutor, createContextFromBindings } from './chunk-NPMVEFV6.js';
2
- export { EffectExecutor, EventBus, HANDLER_MANIFEST, InMemoryPersistence, MockPersistenceAdapter, StateMachineManager, buildEmitsFromTraits, collectDeclaredConfigDefaults, containsBindings, createContextFromBindings, createInitialTraitState, createMinimalContext, createMockPersistence, createTestExecutor, createUnifiedLoader, extractBindings, findInitialState, findTransition, formatPayloadValidationError, getIsolatedCollectionName, getNamespacedEvent, interpolateProps, interpolateValue, isBrowser, isElectron, isNamespacedEvent, isNode, normalizeEventKey, parseNamespacedEvent, preprocessSchema, processEvent, validateEventPayload, validatePayloadShapes } from './chunk-NPMVEFV6.js';
1
+ import { createLogger, EffectExecutor, createContextFromBindings } from './chunk-KQBM5UQ2.js';
2
+ export { EffectExecutor, EventBus, HANDLER_MANIFEST, InMemoryPersistence, MockPersistenceAdapter, StateMachineManager, buildEmitsFromTraits, collectDeclaredConfigDefaults, containsBindings, createContextFromBindings, createInitialTraitState, createMinimalContext, createMockPersistence, createTestExecutor, createUnifiedLoader, extractBindings, findInitialState, findTransition, formatPayloadValidationError, getIsolatedCollectionName, getNamespacedEvent, interpolateProps, interpolateValue, isBrowser, isElectron, isNamespacedEvent, isNode, normalizeEventKey, parseNamespacedEvent, preprocessSchema, processEvent, validateEventPayload, validatePayloadShapes } from './chunk-KQBM5UQ2.js';
3
3
  import { __export } from './chunk-PZ5AY32C.js';
4
4
  import { evaluate } from '@almadar/evaluator';
5
5
  import { isInlineTrait } from '@almadar/core';
@@ -335,16 +335,6 @@ function createServerEffectHandlers(opts) {
335
335
  if (fetchedData) fetchedData[fetchEntityType] = entities;
336
336
  result = entities;
337
337
  }
338
- if (bindings && result) {
339
- const records = Array.isArray(result) ? result : [result];
340
- if (records.length > 0) {
341
- const merged = Object.assign([...records], records[0]);
342
- bindings[fetchEntityType] = merged;
343
- if (fetchEntityType === entityType) {
344
- bindings.entity = merged;
345
- }
346
- }
347
- }
348
338
  return result === null ? null : { rows: result, total };
349
339
  } catch (err) {
350
340
  console.error(
@@ -374,16 +364,6 @@ function createServerEffectHandlers(opts) {
374
364
  result = entities;
375
365
  total = entities.length;
376
366
  }
377
- if (bindings && result) {
378
- const records = Array.isArray(result) ? result : [result];
379
- if (records.length > 0) {
380
- const merged = Object.assign([...records], records[0]);
381
- bindings[derefEntityType] = merged;
382
- if (derefEntityType === entityType) {
383
- bindings.entity = merged;
384
- }
385
- }
386
- }
387
367
  record({
388
368
  effect: "deref",
389
369
  entityType: derefEntityType,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ClientEffectHandlers.ts","../src/ServerEffectHandlers.ts","../src/composition/index.ts","../src/composition/event-wiring.ts","../src/composition/layout-strategy.ts","../src/composition/compose-behaviors.ts","../src/composition/pipe.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Client Effect Handlers Factory\n *\n * Creates the standard effect handler set for client-side trait execution.\n * Platform-agnostic — works with any UI framework that provides the required interfaces.\n *\n * @packageDocumentation\n */\n\nimport type { EffectHandlers, EventPayload, PatternProps } from './types.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Minimal event bus interface required by the factory.\n */\nexport interface ClientEventBus {\n emit: (type: string, payload?: EventPayload) => void;\n}\n\n/**\n * Slot setter interface for render-ui effects.\n * The factory doesn't know about React state — it just calls this function.\n */\nexport interface SlotSetter {\n /** Accumulate a pattern into the pending slot map */\n addPattern: (slot: string, pattern: unknown, props?: PatternProps) => void;\n /** Mark a slot for clearing */\n clearSlot: (slot: string) => void;\n}\n\n/**\n * Options for creating client effect handlers.\n */\nexport interface CreateClientEffectHandlersOptions {\n /** Event bus for emit effects */\n eventBus: ClientEventBus;\n /** Slot setter for render-ui effects */\n slotSetter: SlotSetter;\n /** Navigate function for navigate effects */\n navigate?: (path: string, params?: { [key: string]: string }) => void;\n /** Notify function for notification effects */\n notify?: (message: string, type: 'success' | 'error' | 'warning' | 'info') => void;\n}\n\n// ============================================================================\n// Factory\n// ============================================================================\n\n/**\n * Create client-side effect handlers for trait state machine execution.\n *\n * Client handles: emit, renderUI, navigate, notify\n * Server handles: persist, set, callService (logged as warnings on client)\n *\n * @example\n * ```ts\n * const handlers = createClientEffectHandlers({\n * eventBus,\n * slotSetter: {\n * addPattern: (slot, pattern, props) => pendingSlots.get(slot)?.push({ pattern, props }),\n * clearSlot: (slot) => pendingSlots.set(slot, []),\n * },\n * navigate: (path) => router.push(path),\n * notify: (msg, type) => toast[type](msg),\n * });\n * ```\n */\nexport function createClientEffectHandlers(\n options: CreateClientEffectHandlersOptions\n): EffectHandlers {\n const { eventBus, slotSetter, navigate, notify } = options;\n\n return {\n emit: (event: string, payload?: EventPayload) => {\n // The event bus emits with shape `{ type, payload, source }` per\n // IEventBus. Subscribers read `event.payload` to get the trait-\n // supplied payload. Wrapping it again as `{ payload }` here\n // produced a doubly-nested envelope — `@payload.X` bindings on\n // the receiving render-ui then resolved to `undefined` because\n // the real keys lived one level deeper. Pass the payload through\n // directly so the subscriber sees exactly what the trait emitted.\n const prefixedEvent = event.startsWith('UI:') ? event : `UI:${event}`;\n eventBus.emit(prefixedEvent, payload);\n },\n\n persist: async () => {\n console.warn('[ClientEffectHandlers] persist is server-side only, ignored on client');\n },\n\n set: () => {\n console.warn('[ClientEffectHandlers] set is server-side only, ignored on client');\n },\n\n callService: async () => {\n console.warn('[ClientEffectHandlers] callService is server-side only, ignored on client');\n return {};\n },\n\n renderUI: (slot: string, pattern: unknown, props?: PatternProps) => {\n if (pattern === null) {\n slotSetter.clearSlot(slot);\n return;\n }\n slotSetter.addPattern(slot, pattern, props);\n },\n\n navigate: navigate ?? ((path: string) => {\n console.warn('[ClientEffectHandlers] No navigate handler, ignoring:', path);\n }),\n\n notify: notify ?? ((msg: string, type?: string) => {\n console.log(`[ClientEffectHandlers] notify (${type}):`, msg);\n }),\n };\n}\n","/**\n * ServerEffectHandlers — reusable factory for the server-side effect layer.\n *\n * Mirrors the handlers built inline in\n * `OrbitalServerRuntime.executeEffects` so both the real server runtime\n * AND the in-browser mock runtime (`@almadar/ui` OrbPreview autoMock) can\n * share the same `fetch` / `persist` / `set` / `ref` / `deref` / `swap!` /\n * `atomic` / `callService` semantics against a `PersistenceAdapter`.\n *\n * Browser-safe: only imports core + this package's browser-safe modules.\n * Does NOT import express/Node, so it is reachable from `@almadar/ui`.\n *\n * @packageDocumentation\n */\n\nimport type { EventPayload, SExpr } from \"@almadar/core\";\nimport type { PersistenceAdapter } from \"./PersistenceAdapter.js\";\nimport type {\n EffectHandlers,\n BindingContext,\n EffectContext,\n EntityRow,\n} from \"./types.js\";\nimport { EffectExecutor } from \"./EffectExecutor.js\";\nimport { createContextFromBindings } from \"./BindingResolver.js\";\nimport { evaluate } from \"@almadar/evaluator\";\nimport { createLogger } from \"./logger.js\";\n\nconst effectLog = createLogger(\"almadar:runtime:effects\");\n\n/**\n * Minimal event-bus contract the server handlers need. Narrower than the\n * full `IEventBus` so clients with a React-context bus (only `emit` is\n * relevant for effect dispatch) can hand it in without adapter code.\n */\nexport interface ServerEffectEventBus {\n emit(\n event: string,\n payload?: EventPayload,\n source?: { orbital?: string; trait?: string },\n ): void;\n}\n\n/**\n * Result entry recorded for each effect invocation. Mirrors the server\n * runtime's `EffectResult`. Callers who want telemetry pass an array that\n * the factory appends to; otherwise it's unused.\n */\nexport interface ServerEffectResult {\n effect:\n | \"set\"\n | \"persist\"\n | \"call-service\"\n | \"fetch\"\n | \"ref\"\n | \"deref\"\n | \"swap\"\n | \"atomic\";\n action?: string;\n entityType?: string;\n data?: unknown;\n success: boolean;\n error?: string;\n}\n\nexport interface CreateServerEffectHandlersOptions {\n /** Persistent store backing `fetch` / `persist` / `ref` / `deref` / `swap`. */\n persistence: PersistenceAdapter;\n /** Event bus that `emit` delegates to. Only `.emit()` is required. */\n eventBus: ServerEffectEventBus;\n /** The trait's linked entity type (used as the default for persist/set). */\n entityType: string;\n /** Current entity row id (used by `set`, `persist update/delete` fallback). */\n entityId?: string;\n /**\n * Binding object passed to inner `atomic` evaluator. When absent, atomic\n * effects still run but have no access to `@entity` / `@payload` bindings.\n */\n bindings?: BindingContext;\n /** Effect context passed to the inner `atomic` executor. */\n context?: EffectContext;\n /** Per-event result sink. Optional — telemetry only. */\n effectResults?: ServerEffectResult[];\n /**\n * Per-event fetched-data cache. `fetch` writes here so downstream UI\n * renderers can resolve `@entity` bindings from the latest load without\n * a separate round-trip.\n */\n fetchedData?: Record<string, EntityRow[]>;\n /** Per-event emit log. Optional — telemetry only. */\n emittedEvents?: Array<{ event: string; payload?: EventPayload }>;\n /** Source stamp applied to all emits. */\n source?: { orbital?: string; trait?: string };\n /** Consumer-supplied `call-service` handler. When absent, calls warn and return null. */\n callService?: (\n service: string,\n action: string,\n params: unknown,\n ) => Promise<unknown>;\n /** Verbose logging. */\n debug?: boolean;\n}\n\n/**\n * Build the full server-side effect handler set bound to a persistence\n * adapter. The returned object satisfies `EffectHandlers` and can be\n * handed directly to `EffectExecutor`.\n *\n * Scope: one handler object per transition — capture `entityId`,\n * `bindings`, `context`, and the sink arrays at build time. For a new\n * transition, call this factory again.\n *\n * Intentionally does NOT implement:\n * - `renderUI` / `notify` / `navigate` — these are client-side, provided\n * by `createClientEffectHandlers`. A mock runtime merges both handler\n * sets.\n * - `os/watch-*` observers — these are a no-op outside the server.\n * - Schema-aware relation cardinality / on-delete cascades — those live\n * in `OrbitalServerRuntime` and depend on the full registered schema.\n * Clients that need them can wrap the persist handler with their own\n * validation.\n */\nexport function createServerEffectHandlers(\n opts: CreateServerEffectHandlersOptions,\n): EffectHandlers {\n const {\n persistence,\n eventBus,\n entityType,\n entityId,\n bindings,\n context,\n effectResults,\n fetchedData,\n emittedEvents,\n source,\n callService: consumerCallService,\n debug,\n } = opts;\n\n const record = (entry: ServerEffectResult): void => {\n effectResults?.push(entry);\n };\n\n const handlers: EffectHandlers = {\n emit: (event, eventPayload, emitSource) => {\n if (debug) {\n console.log(`[ServerEffectHandlers] emit ${event}`, eventPayload);\n }\n const stamp = emitSource ?? source;\n eventBus.emit(event, eventPayload, stamp);\n emittedEvents?.push({ event, payload: eventPayload });\n effectLog.debug(\"emit:push\", {\n event,\n cumulativeEmittedCount: emittedEvents?.length,\n sourceTrait: stamp?.trait,\n sourceOrbital: stamp?.orbital,\n emittedEventsBound: emittedEvents !== undefined,\n });\n },\n\n set: async (targetId, field, value) => {\n const id = targetId || entityId;\n if (!id) return;\n try {\n await persistence.update(entityType, id, { [field]: value } as EntityRow);\n record({\n effect: \"set\",\n entityType,\n data: { id, field, value },\n success: true,\n });\n } catch (err) {\n record({\n effect: \"set\",\n entityType,\n data: { id, field, value },\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n },\n\n persist: async (action, targetEntityType, data) => {\n if (action === \"batch\") {\n const operations = (data as { operations?: unknown[] } | undefined)?.operations;\n if (!Array.isArray(operations) || operations.length === 0) {\n record({\n effect: \"persist\",\n action: \"batch\",\n success: false,\n error: \"Batch requires a non-empty operations array\",\n });\n return;\n }\n const batchResults: unknown[] = [];\n const completed: unknown[] = [];\n let batchFailed = false;\n let batchError = \"\";\n for (const op of operations) {\n if (!Array.isArray(op) || op.length < 2) {\n batchFailed = true;\n batchError = `Invalid batch operation format: ${JSON.stringify(op)}`;\n break;\n }\n const [opAction, opEntityType, ...opRest] = op as [\n string,\n string,\n ...unknown[],\n ];\n try {\n switch (opAction) {\n case \"create\": {\n const createData = (opRest[0] as EntityRow) || ({} as EntityRow);\n const { id: newId } = await persistence.create(\n opEntityType,\n createData,\n );\n batchResults.push({\n action: \"create\",\n entityType: opEntityType,\n id: newId,\n ...createData,\n });\n completed.push({\n action: \"create\",\n entityType: opEntityType,\n id: newId,\n });\n break;\n }\n case \"update\": {\n const updateId = opRest[0] as string;\n const updateData = (opRest[1] as EntityRow) || ({} as EntityRow);\n await persistence.update(opEntityType, updateId, updateData);\n const updated = await persistence.getById(opEntityType, updateId);\n batchResults.push({\n action: \"update\",\n entityType: opEntityType,\n id: updateId,\n ...(updated || updateData),\n });\n completed.push({\n action: \"update\",\n entityType: opEntityType,\n id: updateId,\n });\n break;\n }\n case \"delete\": {\n const deleteId = opRest[0] as string;\n await persistence.delete(opEntityType, deleteId);\n batchResults.push({\n action: \"delete\",\n entityType: opEntityType,\n id: deleteId,\n deleted: true,\n });\n completed.push({\n action: \"delete\",\n entityType: opEntityType,\n id: deleteId,\n });\n break;\n }\n default:\n batchFailed = true;\n batchError = `Unknown batch operation action: ${opAction}`;\n break;\n }\n } catch (err) {\n batchFailed = true;\n batchError = `Batch operation [${opAction}, ${opEntityType}] failed: ${\n err instanceof Error ? err.message : String(err)\n }`;\n break;\n }\n if (batchFailed) break;\n }\n record({\n effect: \"persist\",\n action: \"batch\",\n data: {\n operations: batchResults,\n completedCount: completed.length,\n totalCount: operations.length,\n },\n success: !batchFailed,\n ...(batchFailed ? { error: batchError } : {}),\n });\n return;\n }\n\n const type = targetEntityType || entityType;\n let resultData: EntityRow | undefined;\n const sizeBefore = (await persistence.list(type)).length;\n try {\n switch (action) {\n case \"create\": {\n const { id } = await persistence.create(type, (data ?? {}) as EntityRow);\n resultData = { id, ...((data ?? {}) as EntityRow) };\n break;\n }\n case \"update\": {\n const row = (data ?? {}) as EntityRow;\n const idOrFallback = (row.id as string | undefined) ?? entityId;\n if (idOrFallback) {\n await persistence.update(type, idOrFallback, row);\n const updated = await persistence.getById(type, idOrFallback);\n resultData = updated ?? { id: idOrFallback, ...row };\n }\n break;\n }\n case \"delete\": {\n const directId = typeof data === \"string\" ? data : undefined;\n const nestedId =\n typeof data === \"object\" && data !== null\n ? ((data as { id?: string }).id)\n : undefined;\n const deleteId = directId ?? nestedId ?? entityId;\n if (deleteId) {\n await persistence.delete(type, deleteId);\n resultData = { id: deleteId, deleted: true } as EntityRow;\n }\n break;\n }\n }\n const sizeAfter = (await persistence.list(type)).length;\n effectLog.debug(\"persist:store-mutate\", {\n action,\n entityType: type,\n resultId: resultData?.id as string | undefined,\n sizeBefore,\n sizeAfter,\n delta: sizeAfter - sizeBefore,\n });\n record({\n effect: \"persist\",\n action,\n entityType: type,\n data: resultData,\n success: true,\n });\n } catch (err) {\n effectLog.error(\"persist:store-mutate-error\", {\n action,\n entityType: type,\n error: err instanceof Error ? err.message : String(err),\n });\n record({\n effect: \"persist\",\n action,\n entityType: type,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n },\n\n callService: async (service, action, params) => {\n try {\n let result: unknown = null;\n if (consumerCallService) {\n result = await consumerCallService(service, action, params);\n } else if (debug) {\n console.warn(\n `[ServerEffectHandlers] call-service not configured: ${service}.${action}`,\n );\n }\n record({\n effect: \"call-service\",\n action: `${service}.${action}`,\n data: result,\n success: true,\n });\n return result;\n } catch (err) {\n record({\n effect: \"call-service\",\n action: `${service}.${action}`,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n return null;\n }\n },\n\n fetch: async (fetchEntityType, options) => {\n try {\n effectLog.info(\"clientFetch:enter\", {\n entityType: fetchEntityType,\n hasOptions: options !== undefined && options !== null,\n optionsKeys: options ? Object.keys(options).join(',') : '',\n filterType: typeof options?.filter,\n filterIsArray: Array.isArray(options?.filter),\n filterJson: JSON.stringify(options?.filter ?? null).slice(0, 300),\n payloadJson: JSON.stringify(bindings?.payload ?? null).slice(0, 300),\n });\n let result: EntityRow | EntityRow[] | null = null;\n let total = 0;\n if (options?.id) {\n const entity = await persistence.getById(fetchEntityType, options.id);\n if (entity) {\n if (fetchedData) fetchedData[fetchEntityType] = [entity];\n result = entity;\n total = 1;\n }\n } else {\n let entities = await persistence.list(fetchEntityType);\n if (options?.filter !== undefined && options.filter !== null) {\n const predicate = options.filter as SExpr;\n entities = entities.filter((entity) => {\n const ctx = createContextFromBindings(\n { entity, payload: bindings?.payload, current: entity },\n false,\n );\n try {\n return Boolean(evaluate(predicate, ctx));\n } catch (err) {\n console.error(\n `[ServerEffectHandlers] fetch filter eval error for ${fetchEntityType}:`,\n err,\n );\n return false;\n }\n });\n }\n // Capture total AFTER filter, BEFORE offset/limit so paginating\n // consumers receive the count of rows matching the filter.\n total = entities.length;\n if (options?.offset && options.offset > 0) {\n entities = entities.slice(options.offset);\n }\n if (options?.limit && options.limit > 0) {\n entities = entities.slice(0, options.limit);\n }\n if (fetchedData) fetchedData[fetchEntityType] = entities;\n result = entities;\n }\n if (bindings && result) {\n const records = Array.isArray(result) ? result : [result];\n if (records.length > 0) {\n const merged: EntityRow & EntityRow[] = Object.assign([...records], records[0]);\n bindings[fetchEntityType] = merged;\n if (fetchEntityType === entityType) {\n bindings.entity = merged;\n }\n }\n }\n return result === null ? null : { rows: result, total };\n } catch (err) {\n console.error(\n `[ServerEffectHandlers] fetch error for ${fetchEntityType}:`,\n err,\n );\n return null;\n }\n },\n\n ref: async (refEntityType, options) => {\n // `ref` = `fetch` for mock/dev runtimes; real server uses the same\n // underlying persistence read, the difference (reactive subscription\n // vs one-shot) is a render-layer concern.\n return handlers.fetch!(refEntityType, options);\n },\n\n deref: async (derefEntityType, options) => {\n try {\n let result: EntityRow | EntityRow[] | null = null;\n let total = 0;\n if (options?.id) {\n const entity = await persistence.getById(derefEntityType, options.id);\n if (entity) {\n if (fetchedData) fetchedData[derefEntityType] = [entity];\n result = entity;\n total = 1;\n }\n } else {\n const entities = await persistence.list(derefEntityType);\n if (fetchedData) fetchedData[derefEntityType] = entities;\n result = entities;\n total = entities.length;\n }\n if (bindings && result) {\n const records = Array.isArray(result) ? result : [result];\n if (records.length > 0) {\n const merged: EntityRow & EntityRow[] = Object.assign([...records], records[0]);\n bindings[derefEntityType] = merged;\n if (derefEntityType === entityType) {\n bindings.entity = merged;\n }\n }\n }\n record({\n effect: \"deref\",\n entityType: derefEntityType,\n success: true,\n });\n return result === null ? null : { rows: result, total };\n } catch (err) {\n record({\n effect: \"deref\",\n entityType: derefEntityType,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n return null;\n }\n },\n\n swap: async (swapEntityType, swapEntityId, transform) => {\n try {\n const current = await persistence.getById(swapEntityType, swapEntityId);\n if (!current) {\n record({\n effect: \"swap\",\n entityType: swapEntityType,\n success: false,\n error: `Entity ${swapEntityType}/${swapEntityId} not found`,\n });\n return null;\n }\n const ctx = createContextFromBindings(\n { current, entity: bindings?.entity, payload: bindings?.payload },\n false,\n );\n let newData: EntityRow;\n if (Array.isArray(transform)) {\n const evalResult = evaluate(transform as SExpr, ctx);\n if (\n evalResult &&\n typeof evalResult === \"object\" &&\n !Array.isArray(evalResult)\n ) {\n newData = evalResult as EntityRow;\n } else {\n newData = current;\n }\n } else if (typeof transform === \"object\" && transform !== null) {\n newData = { ...current, ...transform };\n } else {\n record({\n effect: \"swap\",\n entityType: swapEntityType,\n success: false,\n error: \"swap! transform must be an S-expression or object\",\n });\n return null;\n }\n await persistence.update(swapEntityType, swapEntityId, newData);\n record({\n effect: \"swap\",\n entityType: swapEntityType,\n data: { id: swapEntityId, ...newData },\n success: true,\n });\n return newData;\n } catch (err) {\n record({\n effect: \"swap\",\n entityType: swapEntityType,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n return null;\n }\n },\n\n watch: (_watchEntityType: string) => {\n // watch is a server-only reactive subscription. In the browser mock\n // runtime there is no long-lived observation — every render already\n // re-reads the persistence snapshot, so this is a no-op.\n },\n\n atomic: async (atomicEffects) => {\n const atomicExecutor = new EffectExecutor({\n handlers,\n bindings: bindings ?? ({} as BindingContext),\n context:\n context ?? ({\n traitName: \"atomic\",\n state: \"unknown\",\n transition: \"unknown\",\n } as EffectContext),\n });\n try {\n await atomicExecutor.executeAll(atomicEffects as unknown[]);\n record({ effect: \"atomic\", success: true });\n } catch (err) {\n record({\n effect: \"atomic\",\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n },\n };\n\n return handlers;\n}\n","/**\n * Composition Module\n *\n * Runtime-side TypeScript composition layer for behavior/* operators.\n *\n * Composition is normally a compile-time concept, evaluated by the Rust\n * compiler pass before code generation. The runtime ships an equivalent\n * TypeScript implementation so dev-mode hot reload, agent-driven dynamic\n * composition, and the legacy `composeBehaviors()` callers all have a\n * usable in-process implementation. The handlers are wired into\n * `EffectExecutor` as optional handlers (`composeBehaviors`,\n * `applyEventWiring`, `detectLayoutStrategy`, `pipeBehaviors`) so\n * consumers that do not need composition pay no cost.\n *\n * @packageDocumentation\n */\n\n// Compose behaviors (main entry point)\nexport {\n type ComposeBehaviorsInput,\n type ComposeBehaviorsResult,\n composeBehaviors,\n} from './compose-behaviors.js';\n\n// Event wiring\nexport { type EventWiringEntry, applyEventWiring } from './event-wiring.js';\n\n// Layout strategy detection\nexport { type LayoutStrategy, detectLayoutStrategy } from './layout-strategy.js';\n\n// Pipe (left-to-right behavior pipeline)\nexport { type PipeStep, pipeBehaviors } from './pipe.js';\n","/**\n * Event Wiring\n *\n * Applies cross-orbital event wiring to orbital definitions.\n * Adds emits/listens declarations to traits so they can communicate\n * across orbital boundaries.\n *\n * @packageDocumentation\n */\n\nimport type {\n OrbitalDefinition,\n Trait,\n TraitEventContract,\n TraitEventListener,\n} from '@almadar/core';\nimport { isInlineTrait } from '@almadar/core';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * A single event wiring entry connecting two traits across orbitals.\n */\nexport interface EventWiringEntry {\n /** Source trait name or orbital name */\n from: string;\n /** Event name (UPPER_SNAKE_CASE) */\n event: string;\n /** Target trait name or orbital name */\n to: string;\n /** Event to trigger on the listener side */\n triggers: string;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Find a trait by name across all orbitals.\n * Only inline traits can be mutated; string/ref traits are skipped.\n * Returns the inline Trait object if found, or null.\n */\nfunction findInlineTrait(\n orbitals: OrbitalDefinition[],\n name: string,\n): Trait | null {\n for (const orbital of orbitals) {\n for (const traitRef of orbital.traits) {\n if (isInlineTrait(traitRef) && traitRef.name === name) {\n return traitRef;\n }\n }\n }\n return null;\n}\n\n/**\n * Check if an emit already exists in the list.\n * @internal\n */\nfunction hasEmit(emits: TraitEventContract[], event: string): boolean {\n return emits.some((e) => e.event === event);\n}\n\n/**\n * Check if a listen already exists in the list.\n * @internal\n */\nfunction hasListen(\n listens: TraitEventListener[],\n event: string,\n triggers: string,\n): boolean {\n return listens.some((l) => l.event === event && l.triggers === triggers);\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Apply event wiring to orbital definitions.\n *\n * For each wiring entry:\n * 1. Find the source trait and add an external emit (if not already present)\n * 2. Find the target trait and add an external listen (if not already present)\n *\n * Returns a new array of orbitals with wiring applied (deep-cloned).\n */\nexport function applyEventWiring(\n orbitals: OrbitalDefinition[],\n wiring: EventWiringEntry[],\n): OrbitalDefinition[] {\n // Deep clone to avoid mutating input\n const cloned: OrbitalDefinition[] = JSON.parse(\n JSON.stringify(orbitals),\n ) as OrbitalDefinition[];\n\n for (const entry of wiring) {\n // Wire the source: add emit\n const sourceTrait = findInlineTrait(cloned, entry.from);\n if (sourceTrait) {\n if (!sourceTrait.emits) {\n sourceTrait.emits = [];\n }\n if (!hasEmit(sourceTrait.emits, entry.event)) {\n sourceTrait.emits.push({\n event: entry.event,\n scope: 'external',\n });\n }\n }\n\n // Wire the target: add listen\n const targetTrait = findInlineTrait(cloned, entry.to);\n if (targetTrait) {\n if (!targetTrait.listens) {\n targetTrait.listens = [];\n }\n if (!hasListen(targetTrait.listens, entry.event, entry.triggers)) {\n targetTrait.listens.push({\n event: entry.event,\n triggers: entry.triggers,\n scope: 'external',\n });\n }\n }\n }\n\n return cloned;\n}\n","/**\n * Layout Strategy Detection\n *\n * Auto-detects the best layout strategy for a composed application\n * based on the number of orbitals and their event wiring topology.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalDefinition } from '@almadar/core';\nimport type { EventWiringEntry } from './event-wiring.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Layout strategy for the composed application.\n *\n * - 'single': One orbital, one page\n * - 'tabs': 2-4 orbitals with no sequential chain\n * - 'sidebar': 5+ orbitals (navigation-heavy)\n * - 'dashboard': Single page with all orbitals visible\n * - 'wizard-flow': Sequential event chain detected (A -> B -> C)\n */\nexport type LayoutStrategy =\n | 'sidebar'\n | 'tabs'\n | 'dashboard'\n | 'wizard-flow'\n | 'single';\n\n// ============================================================================\n// Chain Detection\n// ============================================================================\n\n/**\n * Detect whether the event wiring forms a sequential chain.\n *\n * A sequential chain exists when orbital A's `from` feeds into B's `to`,\n * and B's `from` feeds into C's `to`, forming A -> B -> C.\n *\n * We build a directed graph from wiring entries and look for a chain\n * that covers 3+ nodes (the minimum for a meaningful wizard flow).\n */\nfunction hasSequentialChain(wiring: EventWiringEntry[]): boolean {\n if (wiring.length < 2) {\n return false;\n }\n\n // Build adjacency: from -> Set<to>\n const adjacency = new Map<string, Set<string>>();\n const allTargets = new Set<string>();\n\n for (const entry of wiring) {\n let targets = adjacency.get(entry.from);\n if (!targets) {\n targets = new Set<string>();\n adjacency.set(entry.from, targets);\n }\n targets.add(entry.to);\n allTargets.add(entry.to);\n }\n\n // Find roots (nodes that are sources but never targets)\n const roots: string[] = [];\n for (const from of adjacency.keys()) {\n if (!allTargets.has(from)) {\n roots.push(from);\n }\n }\n\n // If no clear root, try all sources\n const starts = roots.length > 0 ? roots : [...adjacency.keys()];\n\n // Walk from each start and measure chain length\n for (const start of starts) {\n let current = start;\n let length = 1;\n const visited = new Set<string>([current]);\n\n while (true) {\n const nexts = adjacency.get(current);\n if (!nexts || nexts.size === 0) break;\n\n // Follow the first unvisited successor (linear chain)\n let advanced = false;\n for (const next of nexts) {\n if (!visited.has(next)) {\n visited.add(next);\n current = next;\n length++;\n advanced = true;\n break;\n }\n }\n\n if (!advanced) break;\n }\n\n // A chain of 3+ nodes qualifies as wizard-flow\n if (length >= 3) {\n return true;\n }\n }\n\n return false;\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Detect the best layout strategy based on orbital count and event wiring.\n *\n * Heuristic:\n * 1. Sequential event chain detected -> 'wizard-flow'\n * 2. 1 orbital -> 'single'\n * 3. 2-4 orbitals -> 'tabs'\n * 4. 5+ orbitals -> 'sidebar'\n */\nexport function detectLayoutStrategy(\n orbitals: OrbitalDefinition[],\n eventWiring?: EventWiringEntry[],\n): LayoutStrategy {\n // Check for sequential chain first (takes priority)\n if (eventWiring && eventWiring.length > 0 && hasSequentialChain(eventWiring)) {\n return 'wizard-flow';\n }\n\n const count = orbitals.length;\n\n if (count <= 1) {\n return 'single';\n }\n\n if (count <= 4) {\n return 'tabs';\n }\n\n return 'sidebar';\n}\n","/**\n * Compose Behaviors\n *\n * Main entry point for composing multiple orbital definitions into\n * a single OrbitalSchema application. Handles event wiring, layout\n * strategy detection, and page generation.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalDefinition, OrbitalSchema, Page } from '@almadar/core';\nimport type { EventWiringEntry } from './event-wiring.js';\nimport { applyEventWiring } from './event-wiring.js';\nimport type { LayoutStrategy } from './layout-strategy.js';\nimport { detectLayoutStrategy } from './layout-strategy.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Input for composing behaviors into an application.\n */\nexport interface ComposeBehaviorsInput {\n /** Application name */\n appName: string;\n /** Orbital definitions to compose */\n orbitals: OrbitalDefinition[];\n /** Layout strategy override, or 'auto' to detect */\n layoutStrategy?: LayoutStrategy | 'auto';\n /** Cross-orbital event wiring */\n eventWiring?: EventWiringEntry[];\n /** Optional entity name mappings (original -> renamed) */\n entityMappings?: Record<string, string>;\n}\n\n/**\n * Result of composing behaviors.\n */\nexport interface ComposeBehaviorsResult {\n /** The composed OrbitalSchema */\n schema: OrbitalSchema;\n /** Layout metadata */\n layout: { strategy: LayoutStrategy; pageCount: number };\n /** Wiring metadata */\n wiring: { connections: number };\n}\n\n// ============================================================================\n// Page Generation\n// ============================================================================\n\nfunction toKebabCase(name: string): string {\n return name\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n\n/**\n * Generate pages for each orbital based on the layout strategy.\n *\n * For strategies that produce one page per orbital (sidebar, tabs, wizard-flow),\n * each orbital gets a page at `/<kebab-name>` with `isInitial` on the first.\n *\n * For 'dashboard', all orbitals share a single page.\n * For 'single', the lone orbital gets a single root page.\n */\nfunction generatePages(\n orbitals: OrbitalDefinition[],\n strategy: LayoutStrategy,\n): Page[] {\n switch (strategy) {\n case 'single': {\n const orbital = orbitals[0];\n const name = orbital?.name ?? 'Main';\n return [\n {\n name: `${name}Page`,\n path: '/',\n isInitial: true,\n primaryEntity: getEntityName(orbital),\n },\n ];\n }\n\n case 'dashboard': {\n return [\n {\n name: 'DashboardPage',\n path: '/',\n viewType: 'dashboard',\n isInitial: true,\n },\n ];\n }\n\n case 'sidebar':\n case 'tabs':\n case 'wizard-flow': {\n return orbitals.map((orbital, index) => ({\n name: `${orbital.name}Page`,\n path: index === 0 ? '/' : `/${toKebabCase(orbital.name)}`,\n isInitial: index === 0,\n primaryEntity: getEntityName(orbital),\n }));\n }\n }\n}\n\n/**\n * Extract entity name from an orbital definition.\n * Handles both inline entities and string references.\n */\nfunction getEntityName(orbital: OrbitalDefinition | undefined): string | undefined {\n if (!orbital) return undefined;\n const entity = orbital.entity;\n if (typeof entity === 'string') {\n // Reference like \"Alias.entity\" - extract the alias as entity name\n return entity.replace('.entity', '');\n }\n return entity.name;\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Compose multiple orbital definitions into a single application schema.\n *\n * Steps:\n * 1. Apply event wiring (adds emits/listens to traits)\n * 2. Detect or use provided layout strategy\n * 3. Generate pages based on the strategy\n * 4. Build the final OrbitalSchema\n */\nexport function composeBehaviors(\n input: ComposeBehaviorsInput,\n): ComposeBehaviorsResult {\n const {\n appName,\n orbitals: rawOrbitals,\n layoutStrategy: strategyInput,\n eventWiring,\n } = input;\n\n // Step 1: Apply event wiring\n const wiredOrbitals =\n eventWiring && eventWiring.length > 0\n ? applyEventWiring(rawOrbitals, eventWiring)\n : rawOrbitals;\n\n // Step 2: Determine layout strategy\n const strategy: LayoutStrategy =\n !strategyInput || strategyInput === 'auto'\n ? detectLayoutStrategy(wiredOrbitals, eventWiring)\n : strategyInput;\n\n // Step 3: Generate pages\n const pages = generatePages(wiredOrbitals, strategy);\n\n // Step 4: Assign generated pages to orbitals (merge, don't replace existing)\n const orbitalsWithPages = wiredOrbitals.map((orbital, index) => {\n // If the orbital already has pages, keep them\n if (orbital.pages && orbital.pages.length > 0) {\n return orbital;\n }\n\n // Assign the generated page for this orbital\n const page = strategy === 'dashboard' || strategy === 'single'\n ? pages[0]\n : pages[index];\n\n return {\n ...orbital,\n pages: page ? [page] : [],\n };\n });\n\n // Step 5: Build the schema\n const schema: OrbitalSchema = {\n name: appName,\n version: '1.0.0',\n orbitals: orbitalsWithPages,\n };\n\n return {\n schema,\n layout: {\n strategy,\n pageCount: pages.length,\n },\n wiring: {\n connections: eventWiring?.length ?? 0,\n },\n };\n}\n","/**\n * Pipe Behaviors\n *\n * Left-to-right composition. Each step receives the previous result as its\n * first argument and returns the value handed to the next step.\n *\n * @packageDocumentation\n */\n\n/**\n * A single step in a behavior pipeline.\n */\nexport type PipeStep<I, O> = (input: I) => O;\n\n/**\n * Apply a series of transformation steps to a seed value, left to right.\n * Each step receives the previous step's output as its first argument.\n *\n * @example\n * ```ts\n * pipeBehaviors(1, (n) => n + 1, (n) => n * 10); // -> 20\n * ```\n */\nexport function pipeBehaviors<T>(\n seed: T,\n ...steps: Array<PipeStep<unknown, unknown>>\n): unknown {\n let current: unknown = seed;\n for (const step of steps) {\n current = step(current);\n }\n return current;\n}\n"]}
1
+ {"version":3,"sources":["../src/ClientEffectHandlers.ts","../src/ServerEffectHandlers.ts","../src/composition/index.ts","../src/composition/event-wiring.ts","../src/composition/layout-strategy.ts","../src/composition/compose-behaviors.ts","../src/composition/pipe.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Client Effect Handlers Factory\n *\n * Creates the standard effect handler set for client-side trait execution.\n * Platform-agnostic — works with any UI framework that provides the required interfaces.\n *\n * @packageDocumentation\n */\n\nimport type { EffectHandlers, EventPayload, PatternProps } from './types.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Minimal event bus interface required by the factory.\n */\nexport interface ClientEventBus {\n emit: (type: string, payload?: EventPayload) => void;\n}\n\n/**\n * Slot setter interface for render-ui effects.\n * The factory doesn't know about React state — it just calls this function.\n */\nexport interface SlotSetter {\n /** Accumulate a pattern into the pending slot map */\n addPattern: (slot: string, pattern: unknown, props?: PatternProps) => void;\n /** Mark a slot for clearing */\n clearSlot: (slot: string) => void;\n}\n\n/**\n * Options for creating client effect handlers.\n */\nexport interface CreateClientEffectHandlersOptions {\n /** Event bus for emit effects */\n eventBus: ClientEventBus;\n /** Slot setter for render-ui effects */\n slotSetter: SlotSetter;\n /** Navigate function for navigate effects */\n navigate?: (path: string, params?: { [key: string]: string }) => void;\n /** Notify function for notification effects */\n notify?: (message: string, type: 'success' | 'error' | 'warning' | 'info') => void;\n}\n\n// ============================================================================\n// Factory\n// ============================================================================\n\n/**\n * Create client-side effect handlers for trait state machine execution.\n *\n * Client handles: emit, renderUI, navigate, notify\n * Server handles: persist, set, callService (logged as warnings on client)\n *\n * @example\n * ```ts\n * const handlers = createClientEffectHandlers({\n * eventBus,\n * slotSetter: {\n * addPattern: (slot, pattern, props) => pendingSlots.get(slot)?.push({ pattern, props }),\n * clearSlot: (slot) => pendingSlots.set(slot, []),\n * },\n * navigate: (path) => router.push(path),\n * notify: (msg, type) => toast[type](msg),\n * });\n * ```\n */\nexport function createClientEffectHandlers(\n options: CreateClientEffectHandlersOptions\n): EffectHandlers {\n const { eventBus, slotSetter, navigate, notify } = options;\n\n return {\n emit: (event: string, payload?: EventPayload) => {\n // The event bus emits with shape `{ type, payload, source }` per\n // IEventBus. Subscribers read `event.payload` to get the trait-\n // supplied payload. Wrapping it again as `{ payload }` here\n // produced a doubly-nested envelope — `@payload.X` bindings on\n // the receiving render-ui then resolved to `undefined` because\n // the real keys lived one level deeper. Pass the payload through\n // directly so the subscriber sees exactly what the trait emitted.\n const prefixedEvent = event.startsWith('UI:') ? event : `UI:${event}`;\n eventBus.emit(prefixedEvent, payload);\n },\n\n persist: async () => {\n console.warn('[ClientEffectHandlers] persist is server-side only, ignored on client');\n },\n\n set: () => {\n console.warn('[ClientEffectHandlers] set is server-side only, ignored on client');\n },\n\n callService: async () => {\n console.warn('[ClientEffectHandlers] callService is server-side only, ignored on client');\n return {};\n },\n\n renderUI: (slot: string, pattern: unknown, props?: PatternProps) => {\n if (pattern === null) {\n slotSetter.clearSlot(slot);\n return;\n }\n slotSetter.addPattern(slot, pattern, props);\n },\n\n navigate: navigate ?? ((path: string) => {\n console.warn('[ClientEffectHandlers] No navigate handler, ignoring:', path);\n }),\n\n notify: notify ?? ((msg: string, type?: string) => {\n console.log(`[ClientEffectHandlers] notify (${type}):`, msg);\n }),\n };\n}\n","/**\n * ServerEffectHandlers — reusable factory for the server-side effect layer.\n *\n * Mirrors the handlers built inline in\n * `OrbitalServerRuntime.executeEffects` so both the real server runtime\n * AND the in-browser mock runtime (`@almadar/ui` OrbPreview autoMock) can\n * share the same `fetch` / `persist` / `set` / `ref` / `deref` / `swap!` /\n * `atomic` / `callService` semantics against a `PersistenceAdapter`.\n *\n * Browser-safe: only imports core + this package's browser-safe modules.\n * Does NOT import express/Node, so it is reachable from `@almadar/ui`.\n *\n * @packageDocumentation\n */\n\nimport type { EventPayload, SExpr } from \"@almadar/core\";\nimport type { PersistenceAdapter } from \"./PersistenceAdapter.js\";\nimport type {\n EffectHandlers,\n BindingContext,\n EffectContext,\n EntityRow,\n} from \"./types.js\";\nimport { EffectExecutor } from \"./EffectExecutor.js\";\nimport { createContextFromBindings } from \"./BindingResolver.js\";\nimport { evaluate } from \"@almadar/evaluator\";\nimport { createLogger } from \"./logger.js\";\n\nconst effectLog = createLogger(\"almadar:runtime:effects\");\n\n/**\n * Minimal event-bus contract the server handlers need. Narrower than the\n * full `IEventBus` so clients with a React-context bus (only `emit` is\n * relevant for effect dispatch) can hand it in without adapter code.\n */\nexport interface ServerEffectEventBus {\n emit(\n event: string,\n payload?: EventPayload,\n source?: { orbital?: string; trait?: string },\n ): void;\n}\n\n/**\n * Result entry recorded for each effect invocation. Mirrors the server\n * runtime's `EffectResult`. Callers who want telemetry pass an array that\n * the factory appends to; otherwise it's unused.\n */\nexport interface ServerEffectResult {\n effect:\n | \"set\"\n | \"persist\"\n | \"call-service\"\n | \"fetch\"\n | \"ref\"\n | \"deref\"\n | \"swap\"\n | \"atomic\";\n action?: string;\n entityType?: string;\n data?: unknown;\n success: boolean;\n error?: string;\n}\n\nexport interface CreateServerEffectHandlersOptions {\n /** Persistent store backing `fetch` / `persist` / `ref` / `deref` / `swap`. */\n persistence: PersistenceAdapter;\n /** Event bus that `emit` delegates to. Only `.emit()` is required. */\n eventBus: ServerEffectEventBus;\n /** The trait's linked entity type (used as the default for persist/set). */\n entityType: string;\n /** Current entity row id (used by `set`, `persist update/delete` fallback). */\n entityId?: string;\n /**\n * Binding object passed to inner `atomic` evaluator. When absent, atomic\n * effects still run but have no access to `@entity` / `@payload` bindings.\n */\n bindings?: BindingContext;\n /** Effect context passed to the inner `atomic` executor. */\n context?: EffectContext;\n /** Per-event result sink. Optional — telemetry only. */\n effectResults?: ServerEffectResult[];\n /**\n * Per-event fetched-data cache. `fetch` writes here so downstream UI\n * renderers can resolve `@entity` bindings from the latest load without\n * a separate round-trip.\n */\n fetchedData?: Record<string, EntityRow[]>;\n /** Per-event emit log. Optional — telemetry only. */\n emittedEvents?: Array<{ event: string; payload?: EventPayload }>;\n /** Source stamp applied to all emits. */\n source?: { orbital?: string; trait?: string };\n /** Consumer-supplied `call-service` handler. When absent, calls warn and return null. */\n callService?: (\n service: string,\n action: string,\n params: unknown,\n ) => Promise<unknown>;\n /** Verbose logging. */\n debug?: boolean;\n}\n\n/**\n * Build the full server-side effect handler set bound to a persistence\n * adapter. The returned object satisfies `EffectHandlers` and can be\n * handed directly to `EffectExecutor`.\n *\n * Scope: one handler object per transition — capture `entityId`,\n * `bindings`, `context`, and the sink arrays at build time. For a new\n * transition, call this factory again.\n *\n * Intentionally does NOT implement:\n * - `renderUI` / `notify` / `navigate` — these are client-side, provided\n * by `createClientEffectHandlers`. A mock runtime merges both handler\n * sets.\n * - `os/watch-*` observers — these are a no-op outside the server.\n * - Schema-aware relation cardinality / on-delete cascades — those live\n * in `OrbitalServerRuntime` and depend on the full registered schema.\n * Clients that need them can wrap the persist handler with their own\n * validation.\n */\nexport function createServerEffectHandlers(\n opts: CreateServerEffectHandlersOptions,\n): EffectHandlers {\n const {\n persistence,\n eventBus,\n entityType,\n entityId,\n bindings,\n context,\n effectResults,\n fetchedData,\n emittedEvents,\n source,\n callService: consumerCallService,\n debug,\n } = opts;\n\n const record = (entry: ServerEffectResult): void => {\n effectResults?.push(entry);\n };\n\n const handlers: EffectHandlers = {\n emit: (event, eventPayload, emitSource) => {\n if (debug) {\n console.log(`[ServerEffectHandlers] emit ${event}`, eventPayload);\n }\n const stamp = emitSource ?? source;\n eventBus.emit(event, eventPayload, stamp);\n emittedEvents?.push({ event, payload: eventPayload });\n effectLog.debug(\"emit:push\", {\n event,\n cumulativeEmittedCount: emittedEvents?.length,\n sourceTrait: stamp?.trait,\n sourceOrbital: stamp?.orbital,\n emittedEventsBound: emittedEvents !== undefined,\n });\n },\n\n set: async (targetId, field, value) => {\n const id = targetId || entityId;\n if (!id) return;\n try {\n await persistence.update(entityType, id, { [field]: value } as EntityRow);\n record({\n effect: \"set\",\n entityType,\n data: { id, field, value },\n success: true,\n });\n } catch (err) {\n record({\n effect: \"set\",\n entityType,\n data: { id, field, value },\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n },\n\n persist: async (action, targetEntityType, data) => {\n if (action === \"batch\") {\n const operations = (data as { operations?: unknown[] } | undefined)?.operations;\n if (!Array.isArray(operations) || operations.length === 0) {\n record({\n effect: \"persist\",\n action: \"batch\",\n success: false,\n error: \"Batch requires a non-empty operations array\",\n });\n return;\n }\n const batchResults: unknown[] = [];\n const completed: unknown[] = [];\n let batchFailed = false;\n let batchError = \"\";\n for (const op of operations) {\n if (!Array.isArray(op) || op.length < 2) {\n batchFailed = true;\n batchError = `Invalid batch operation format: ${JSON.stringify(op)}`;\n break;\n }\n const [opAction, opEntityType, ...opRest] = op as [\n string,\n string,\n ...unknown[],\n ];\n try {\n switch (opAction) {\n case \"create\": {\n const createData = (opRest[0] as EntityRow) || ({} as EntityRow);\n const { id: newId } = await persistence.create(\n opEntityType,\n createData,\n );\n batchResults.push({\n action: \"create\",\n entityType: opEntityType,\n id: newId,\n ...createData,\n });\n completed.push({\n action: \"create\",\n entityType: opEntityType,\n id: newId,\n });\n break;\n }\n case \"update\": {\n const updateId = opRest[0] as string;\n const updateData = (opRest[1] as EntityRow) || ({} as EntityRow);\n await persistence.update(opEntityType, updateId, updateData);\n const updated = await persistence.getById(opEntityType, updateId);\n batchResults.push({\n action: \"update\",\n entityType: opEntityType,\n id: updateId,\n ...(updated || updateData),\n });\n completed.push({\n action: \"update\",\n entityType: opEntityType,\n id: updateId,\n });\n break;\n }\n case \"delete\": {\n const deleteId = opRest[0] as string;\n await persistence.delete(opEntityType, deleteId);\n batchResults.push({\n action: \"delete\",\n entityType: opEntityType,\n id: deleteId,\n deleted: true,\n });\n completed.push({\n action: \"delete\",\n entityType: opEntityType,\n id: deleteId,\n });\n break;\n }\n default:\n batchFailed = true;\n batchError = `Unknown batch operation action: ${opAction}`;\n break;\n }\n } catch (err) {\n batchFailed = true;\n batchError = `Batch operation [${opAction}, ${opEntityType}] failed: ${\n err instanceof Error ? err.message : String(err)\n }`;\n break;\n }\n if (batchFailed) break;\n }\n record({\n effect: \"persist\",\n action: \"batch\",\n data: {\n operations: batchResults,\n completedCount: completed.length,\n totalCount: operations.length,\n },\n success: !batchFailed,\n ...(batchFailed ? { error: batchError } : {}),\n });\n return;\n }\n\n const type = targetEntityType || entityType;\n let resultData: EntityRow | undefined;\n const sizeBefore = (await persistence.list(type)).length;\n try {\n switch (action) {\n case \"create\": {\n const { id } = await persistence.create(type, (data ?? {}) as EntityRow);\n resultData = { id, ...((data ?? {}) as EntityRow) };\n break;\n }\n case \"update\": {\n const row = (data ?? {}) as EntityRow;\n const idOrFallback = (row.id as string | undefined) ?? entityId;\n if (idOrFallback) {\n await persistence.update(type, idOrFallback, row);\n const updated = await persistence.getById(type, idOrFallback);\n resultData = updated ?? { id: idOrFallback, ...row };\n }\n break;\n }\n case \"delete\": {\n const directId = typeof data === \"string\" ? data : undefined;\n const nestedId =\n typeof data === \"object\" && data !== null\n ? ((data as { id?: string }).id)\n : undefined;\n const deleteId = directId ?? nestedId ?? entityId;\n if (deleteId) {\n await persistence.delete(type, deleteId);\n resultData = { id: deleteId, deleted: true } as EntityRow;\n }\n break;\n }\n }\n const sizeAfter = (await persistence.list(type)).length;\n effectLog.debug(\"persist:store-mutate\", {\n action,\n entityType: type,\n resultId: resultData?.id as string | undefined,\n sizeBefore,\n sizeAfter,\n delta: sizeAfter - sizeBefore,\n });\n record({\n effect: \"persist\",\n action,\n entityType: type,\n data: resultData,\n success: true,\n });\n } catch (err) {\n effectLog.error(\"persist:store-mutate-error\", {\n action,\n entityType: type,\n error: err instanceof Error ? err.message : String(err),\n });\n record({\n effect: \"persist\",\n action,\n entityType: type,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n },\n\n callService: async (service, action, params) => {\n try {\n let result: unknown = null;\n if (consumerCallService) {\n result = await consumerCallService(service, action, params);\n } else if (debug) {\n console.warn(\n `[ServerEffectHandlers] call-service not configured: ${service}.${action}`,\n );\n }\n record({\n effect: \"call-service\",\n action: `${service}.${action}`,\n data: result,\n success: true,\n });\n return result;\n } catch (err) {\n record({\n effect: \"call-service\",\n action: `${service}.${action}`,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n return null;\n }\n },\n\n fetch: async (fetchEntityType, options) => {\n try {\n effectLog.info(\"clientFetch:enter\", {\n entityType: fetchEntityType,\n hasOptions: options !== undefined && options !== null,\n optionsKeys: options ? Object.keys(options).join(',') : '',\n filterType: typeof options?.filter,\n filterIsArray: Array.isArray(options?.filter),\n filterJson: JSON.stringify(options?.filter ?? null).slice(0, 300),\n payloadJson: JSON.stringify(bindings?.payload ?? null).slice(0, 300),\n });\n let result: EntityRow | EntityRow[] | null = null;\n let total = 0;\n if (options?.id) {\n const entity = await persistence.getById(fetchEntityType, options.id);\n if (entity) {\n if (fetchedData) fetchedData[fetchEntityType] = [entity];\n result = entity;\n total = 1;\n }\n } else {\n let entities = await persistence.list(fetchEntityType);\n if (options?.filter !== undefined && options.filter !== null) {\n const predicate = options.filter as SExpr;\n entities = entities.filter((entity) => {\n const ctx = createContextFromBindings(\n { entity, payload: bindings?.payload, current: entity },\n false,\n );\n try {\n return Boolean(evaluate(predicate, ctx));\n } catch (err) {\n console.error(\n `[ServerEffectHandlers] fetch filter eval error for ${fetchEntityType}:`,\n err,\n );\n return false;\n }\n });\n }\n // Capture total AFTER filter, BEFORE offset/limit so paginating\n // consumers receive the count of rows matching the filter.\n total = entities.length;\n if (options?.offset && options.offset > 0) {\n entities = entities.slice(options.offset);\n }\n if (options?.limit && options.limit > 0) {\n entities = entities.slice(0, options.limit);\n }\n if (fetchedData) fetchedData[fetchEntityType] = entities;\n result = entities;\n }\n return result === null ? null : { rows: result, total };\n } catch (err) {\n console.error(\n `[ServerEffectHandlers] fetch error for ${fetchEntityType}:`,\n err,\n );\n return null;\n }\n },\n\n ref: async (refEntityType, options) => {\n // `ref` = `fetch` for mock/dev runtimes; real server uses the same\n // underlying persistence read, the difference (reactive subscription\n // vs one-shot) is a render-layer concern.\n return handlers.fetch!(refEntityType, options);\n },\n\n deref: async (derefEntityType, options) => {\n try {\n let result: EntityRow | EntityRow[] | null = null;\n let total = 0;\n if (options?.id) {\n const entity = await persistence.getById(derefEntityType, options.id);\n if (entity) {\n if (fetchedData) fetchedData[derefEntityType] = [entity];\n result = entity;\n total = 1;\n }\n } else {\n const entities = await persistence.list(derefEntityType);\n if (fetchedData) fetchedData[derefEntityType] = entities;\n result = entities;\n total = entities.length;\n }\n record({\n effect: \"deref\",\n entityType: derefEntityType,\n success: true,\n });\n return result === null ? null : { rows: result, total };\n } catch (err) {\n record({\n effect: \"deref\",\n entityType: derefEntityType,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n return null;\n }\n },\n\n swap: async (swapEntityType, swapEntityId, transform) => {\n try {\n const current = await persistence.getById(swapEntityType, swapEntityId);\n if (!current) {\n record({\n effect: \"swap\",\n entityType: swapEntityType,\n success: false,\n error: `Entity ${swapEntityType}/${swapEntityId} not found`,\n });\n return null;\n }\n const ctx = createContextFromBindings(\n { current, entity: bindings?.entity, payload: bindings?.payload },\n false,\n );\n let newData: EntityRow;\n if (Array.isArray(transform)) {\n const evalResult = evaluate(transform as SExpr, ctx);\n if (\n evalResult &&\n typeof evalResult === \"object\" &&\n !Array.isArray(evalResult)\n ) {\n newData = evalResult as EntityRow;\n } else {\n newData = current;\n }\n } else if (typeof transform === \"object\" && transform !== null) {\n newData = { ...current, ...transform };\n } else {\n record({\n effect: \"swap\",\n entityType: swapEntityType,\n success: false,\n error: \"swap! transform must be an S-expression or object\",\n });\n return null;\n }\n await persistence.update(swapEntityType, swapEntityId, newData);\n record({\n effect: \"swap\",\n entityType: swapEntityType,\n data: { id: swapEntityId, ...newData },\n success: true,\n });\n return newData;\n } catch (err) {\n record({\n effect: \"swap\",\n entityType: swapEntityType,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n return null;\n }\n },\n\n watch: (_watchEntityType: string) => {\n // watch is a server-only reactive subscription. In the browser mock\n // runtime there is no long-lived observation — every render already\n // re-reads the persistence snapshot, so this is a no-op.\n },\n\n atomic: async (atomicEffects) => {\n const atomicExecutor = new EffectExecutor({\n handlers,\n bindings: bindings ?? ({} as BindingContext),\n context:\n context ?? ({\n traitName: \"atomic\",\n state: \"unknown\",\n transition: \"unknown\",\n } as EffectContext),\n });\n try {\n await atomicExecutor.executeAll(atomicEffects as unknown[]);\n record({ effect: \"atomic\", success: true });\n } catch (err) {\n record({\n effect: \"atomic\",\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n },\n };\n\n return handlers;\n}\n","/**\n * Composition Module\n *\n * Runtime-side TypeScript composition layer for behavior/* operators.\n *\n * Composition is normally a compile-time concept, evaluated by the Rust\n * compiler pass before code generation. The runtime ships an equivalent\n * TypeScript implementation so dev-mode hot reload, agent-driven dynamic\n * composition, and the legacy `composeBehaviors()` callers all have a\n * usable in-process implementation. The handlers are wired into\n * `EffectExecutor` as optional handlers (`composeBehaviors`,\n * `applyEventWiring`, `detectLayoutStrategy`, `pipeBehaviors`) so\n * consumers that do not need composition pay no cost.\n *\n * @packageDocumentation\n */\n\n// Compose behaviors (main entry point)\nexport {\n type ComposeBehaviorsInput,\n type ComposeBehaviorsResult,\n composeBehaviors,\n} from './compose-behaviors.js';\n\n// Event wiring\nexport { type EventWiringEntry, applyEventWiring } from './event-wiring.js';\n\n// Layout strategy detection\nexport { type LayoutStrategy, detectLayoutStrategy } from './layout-strategy.js';\n\n// Pipe (left-to-right behavior pipeline)\nexport { type PipeStep, pipeBehaviors } from './pipe.js';\n","/**\n * Event Wiring\n *\n * Applies cross-orbital event wiring to orbital definitions.\n * Adds emits/listens declarations to traits so they can communicate\n * across orbital boundaries.\n *\n * @packageDocumentation\n */\n\nimport type {\n OrbitalDefinition,\n Trait,\n TraitEventContract,\n TraitEventListener,\n} from '@almadar/core';\nimport { isInlineTrait } from '@almadar/core';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * A single event wiring entry connecting two traits across orbitals.\n */\nexport interface EventWiringEntry {\n /** Source trait name or orbital name */\n from: string;\n /** Event name (UPPER_SNAKE_CASE) */\n event: string;\n /** Target trait name or orbital name */\n to: string;\n /** Event to trigger on the listener side */\n triggers: string;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Find a trait by name across all orbitals.\n * Only inline traits can be mutated; string/ref traits are skipped.\n * Returns the inline Trait object if found, or null.\n */\nfunction findInlineTrait(\n orbitals: OrbitalDefinition[],\n name: string,\n): Trait | null {\n for (const orbital of orbitals) {\n for (const traitRef of orbital.traits) {\n if (isInlineTrait(traitRef) && traitRef.name === name) {\n return traitRef;\n }\n }\n }\n return null;\n}\n\n/**\n * Check if an emit already exists in the list.\n * @internal\n */\nfunction hasEmit(emits: TraitEventContract[], event: string): boolean {\n return emits.some((e) => e.event === event);\n}\n\n/**\n * Check if a listen already exists in the list.\n * @internal\n */\nfunction hasListen(\n listens: TraitEventListener[],\n event: string,\n triggers: string,\n): boolean {\n return listens.some((l) => l.event === event && l.triggers === triggers);\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Apply event wiring to orbital definitions.\n *\n * For each wiring entry:\n * 1. Find the source trait and add an external emit (if not already present)\n * 2. Find the target trait and add an external listen (if not already present)\n *\n * Returns a new array of orbitals with wiring applied (deep-cloned).\n */\nexport function applyEventWiring(\n orbitals: OrbitalDefinition[],\n wiring: EventWiringEntry[],\n): OrbitalDefinition[] {\n // Deep clone to avoid mutating input\n const cloned: OrbitalDefinition[] = JSON.parse(\n JSON.stringify(orbitals),\n ) as OrbitalDefinition[];\n\n for (const entry of wiring) {\n // Wire the source: add emit\n const sourceTrait = findInlineTrait(cloned, entry.from);\n if (sourceTrait) {\n if (!sourceTrait.emits) {\n sourceTrait.emits = [];\n }\n if (!hasEmit(sourceTrait.emits, entry.event)) {\n sourceTrait.emits.push({\n event: entry.event,\n scope: 'external',\n });\n }\n }\n\n // Wire the target: add listen\n const targetTrait = findInlineTrait(cloned, entry.to);\n if (targetTrait) {\n if (!targetTrait.listens) {\n targetTrait.listens = [];\n }\n if (!hasListen(targetTrait.listens, entry.event, entry.triggers)) {\n targetTrait.listens.push({\n event: entry.event,\n triggers: entry.triggers,\n scope: 'external',\n });\n }\n }\n }\n\n return cloned;\n}\n","/**\n * Layout Strategy Detection\n *\n * Auto-detects the best layout strategy for a composed application\n * based on the number of orbitals and their event wiring topology.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalDefinition } from '@almadar/core';\nimport type { EventWiringEntry } from './event-wiring.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Layout strategy for the composed application.\n *\n * - 'single': One orbital, one page\n * - 'tabs': 2-4 orbitals with no sequential chain\n * - 'sidebar': 5+ orbitals (navigation-heavy)\n * - 'dashboard': Single page with all orbitals visible\n * - 'wizard-flow': Sequential event chain detected (A -> B -> C)\n */\nexport type LayoutStrategy =\n | 'sidebar'\n | 'tabs'\n | 'dashboard'\n | 'wizard-flow'\n | 'single';\n\n// ============================================================================\n// Chain Detection\n// ============================================================================\n\n/**\n * Detect whether the event wiring forms a sequential chain.\n *\n * A sequential chain exists when orbital A's `from` feeds into B's `to`,\n * and B's `from` feeds into C's `to`, forming A -> B -> C.\n *\n * We build a directed graph from wiring entries and look for a chain\n * that covers 3+ nodes (the minimum for a meaningful wizard flow).\n */\nfunction hasSequentialChain(wiring: EventWiringEntry[]): boolean {\n if (wiring.length < 2) {\n return false;\n }\n\n // Build adjacency: from -> Set<to>\n const adjacency = new Map<string, Set<string>>();\n const allTargets = new Set<string>();\n\n for (const entry of wiring) {\n let targets = adjacency.get(entry.from);\n if (!targets) {\n targets = new Set<string>();\n adjacency.set(entry.from, targets);\n }\n targets.add(entry.to);\n allTargets.add(entry.to);\n }\n\n // Find roots (nodes that are sources but never targets)\n const roots: string[] = [];\n for (const from of adjacency.keys()) {\n if (!allTargets.has(from)) {\n roots.push(from);\n }\n }\n\n // If no clear root, try all sources\n const starts = roots.length > 0 ? roots : [...adjacency.keys()];\n\n // Walk from each start and measure chain length\n for (const start of starts) {\n let current = start;\n let length = 1;\n const visited = new Set<string>([current]);\n\n while (true) {\n const nexts = adjacency.get(current);\n if (!nexts || nexts.size === 0) break;\n\n // Follow the first unvisited successor (linear chain)\n let advanced = false;\n for (const next of nexts) {\n if (!visited.has(next)) {\n visited.add(next);\n current = next;\n length++;\n advanced = true;\n break;\n }\n }\n\n if (!advanced) break;\n }\n\n // A chain of 3+ nodes qualifies as wizard-flow\n if (length >= 3) {\n return true;\n }\n }\n\n return false;\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Detect the best layout strategy based on orbital count and event wiring.\n *\n * Heuristic:\n * 1. Sequential event chain detected -> 'wizard-flow'\n * 2. 1 orbital -> 'single'\n * 3. 2-4 orbitals -> 'tabs'\n * 4. 5+ orbitals -> 'sidebar'\n */\nexport function detectLayoutStrategy(\n orbitals: OrbitalDefinition[],\n eventWiring?: EventWiringEntry[],\n): LayoutStrategy {\n // Check for sequential chain first (takes priority)\n if (eventWiring && eventWiring.length > 0 && hasSequentialChain(eventWiring)) {\n return 'wizard-flow';\n }\n\n const count = orbitals.length;\n\n if (count <= 1) {\n return 'single';\n }\n\n if (count <= 4) {\n return 'tabs';\n }\n\n return 'sidebar';\n}\n","/**\n * Compose Behaviors\n *\n * Main entry point for composing multiple orbital definitions into\n * a single OrbitalSchema application. Handles event wiring, layout\n * strategy detection, and page generation.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalDefinition, OrbitalSchema, Page } from '@almadar/core';\nimport type { EventWiringEntry } from './event-wiring.js';\nimport { applyEventWiring } from './event-wiring.js';\nimport type { LayoutStrategy } from './layout-strategy.js';\nimport { detectLayoutStrategy } from './layout-strategy.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Input for composing behaviors into an application.\n */\nexport interface ComposeBehaviorsInput {\n /** Application name */\n appName: string;\n /** Orbital definitions to compose */\n orbitals: OrbitalDefinition[];\n /** Layout strategy override, or 'auto' to detect */\n layoutStrategy?: LayoutStrategy | 'auto';\n /** Cross-orbital event wiring */\n eventWiring?: EventWiringEntry[];\n /** Optional entity name mappings (original -> renamed) */\n entityMappings?: Record<string, string>;\n}\n\n/**\n * Result of composing behaviors.\n */\nexport interface ComposeBehaviorsResult {\n /** The composed OrbitalSchema */\n schema: OrbitalSchema;\n /** Layout metadata */\n layout: { strategy: LayoutStrategy; pageCount: number };\n /** Wiring metadata */\n wiring: { connections: number };\n}\n\n// ============================================================================\n// Page Generation\n// ============================================================================\n\nfunction toKebabCase(name: string): string {\n return name\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n\n/**\n * Generate pages for each orbital based on the layout strategy.\n *\n * For strategies that produce one page per orbital (sidebar, tabs, wizard-flow),\n * each orbital gets a page at `/<kebab-name>` with `isInitial` on the first.\n *\n * For 'dashboard', all orbitals share a single page.\n * For 'single', the lone orbital gets a single root page.\n */\nfunction generatePages(\n orbitals: OrbitalDefinition[],\n strategy: LayoutStrategy,\n): Page[] {\n switch (strategy) {\n case 'single': {\n const orbital = orbitals[0];\n const name = orbital?.name ?? 'Main';\n return [\n {\n name: `${name}Page`,\n path: '/',\n isInitial: true,\n primaryEntity: getEntityName(orbital),\n },\n ];\n }\n\n case 'dashboard': {\n return [\n {\n name: 'DashboardPage',\n path: '/',\n viewType: 'dashboard',\n isInitial: true,\n },\n ];\n }\n\n case 'sidebar':\n case 'tabs':\n case 'wizard-flow': {\n return orbitals.map((orbital, index) => ({\n name: `${orbital.name}Page`,\n path: index === 0 ? '/' : `/${toKebabCase(orbital.name)}`,\n isInitial: index === 0,\n primaryEntity: getEntityName(orbital),\n }));\n }\n }\n}\n\n/**\n * Extract entity name from an orbital definition.\n * Handles both inline entities and string references.\n */\nfunction getEntityName(orbital: OrbitalDefinition | undefined): string | undefined {\n if (!orbital) return undefined;\n const entity = orbital.entity;\n if (typeof entity === 'string') {\n // Reference like \"Alias.entity\" - extract the alias as entity name\n return entity.replace('.entity', '');\n }\n return entity.name;\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Compose multiple orbital definitions into a single application schema.\n *\n * Steps:\n * 1. Apply event wiring (adds emits/listens to traits)\n * 2. Detect or use provided layout strategy\n * 3. Generate pages based on the strategy\n * 4. Build the final OrbitalSchema\n */\nexport function composeBehaviors(\n input: ComposeBehaviorsInput,\n): ComposeBehaviorsResult {\n const {\n appName,\n orbitals: rawOrbitals,\n layoutStrategy: strategyInput,\n eventWiring,\n } = input;\n\n // Step 1: Apply event wiring\n const wiredOrbitals =\n eventWiring && eventWiring.length > 0\n ? applyEventWiring(rawOrbitals, eventWiring)\n : rawOrbitals;\n\n // Step 2: Determine layout strategy\n const strategy: LayoutStrategy =\n !strategyInput || strategyInput === 'auto'\n ? detectLayoutStrategy(wiredOrbitals, eventWiring)\n : strategyInput;\n\n // Step 3: Generate pages\n const pages = generatePages(wiredOrbitals, strategy);\n\n // Step 4: Assign generated pages to orbitals (merge, don't replace existing)\n const orbitalsWithPages = wiredOrbitals.map((orbital, index) => {\n // If the orbital already has pages, keep them\n if (orbital.pages && orbital.pages.length > 0) {\n return orbital;\n }\n\n // Assign the generated page for this orbital\n const page = strategy === 'dashboard' || strategy === 'single'\n ? pages[0]\n : pages[index];\n\n return {\n ...orbital,\n pages: page ? [page] : [],\n };\n });\n\n // Step 5: Build the schema\n const schema: OrbitalSchema = {\n name: appName,\n version: '1.0.0',\n orbitals: orbitalsWithPages,\n };\n\n return {\n schema,\n layout: {\n strategy,\n pageCount: pages.length,\n },\n wiring: {\n connections: eventWiring?.length ?? 0,\n },\n };\n}\n","/**\n * Pipe Behaviors\n *\n * Left-to-right composition. Each step receives the previous result as its\n * first argument and returns the value handed to the next step.\n *\n * @packageDocumentation\n */\n\n/**\n * A single step in a behavior pipeline.\n */\nexport type PipeStep<I, O> = (input: I) => O;\n\n/**\n * Apply a series of transformation steps to a seed value, left to right.\n * Each step receives the previous step's output as its first argument.\n *\n * @example\n * ```ts\n * pipeBehaviors(1, (n) => n + 1, (n) => n * 10); // -> 20\n * ```\n */\nexport function pipeBehaviors<T>(\n seed: T,\n ...steps: Array<PipeStep<unknown, unknown>>\n): unknown {\n let current: unknown = seed;\n for (const step of steps) {\n current = step(current);\n }\n return current;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/runtime",
3
- "version": "5.11.2",
3
+ "version": "6.0.1",
4
4
  "description": "Interpreted runtime for Almadar orbital applications (OrbitalServerRuntime)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -41,7 +41,7 @@
41
41
  "access": "public"
42
42
  },
43
43
  "dependencies": {
44
- "@almadar/core": "^7.7.0",
44
+ "@almadar/core": "^7.8.0",
45
45
  "@almadar/evaluator": ">=2.9.2",
46
46
  "@almadar/std": ">=7.2.4",
47
47
  "@faker-js/faker": "^9.3.0"