@almadar/evaluator 1.0.16 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -72
- package/README.md +25 -0
- package/dist/{index-DsM_--K3.d.ts → index-csemIxy4.d.ts} +14 -4
- package/dist/index.d.ts +2 -2
- package/dist/index.js +57 -3
- package/dist/index.js.map +1 -1
- package/dist/operators/index.d.ts +1 -1
- package/dist/operators/index.js +35 -2
- package/dist/operators/index.js.map +1 -1
- package/package.json +5 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../context.ts","../operators/arithmetic.ts","../operators/comparison.ts","../operators/logic.ts","../operators/control.ts","../operators/collections.ts","../operators/effects.ts","../std/math.ts","../std/str.ts","../std/array.ts","../std/object.ts","../std/validate.ts","../std/time.ts","../std/format.ts","../std/async.ts","../SExpressionEvaluator.ts"],"names":["evaluate","toNumber","evalLambda","deepEqual"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Evaluation Context\n *\n * Defines the context for evaluating S-expressions at runtime.\n * This context provides access to entity data, payload, state, and effect handlers.\n *\n * @packageDocumentation\n */\n\n/**\n * User context for @user bindings (role-based UI).\n */\nexport interface UserContext {\n /** User's unique ID */\n id: string;\n /** User's email */\n email?: string;\n /** User's display name */\n name?: string;\n /** User's role (for RBAC) */\n role?: string;\n /** User's permissions */\n permissions?: string[];\n /** Additional custom profile fields */\n [key: string]: unknown;\n}\n\n/**\n * Evaluation context for S-expression evaluation.\n * Provides all bindings and effect handlers needed at runtime.\n */\nexport interface EvaluationContext {\n /** Entity data for @entity bindings */\n entity: Record<string, unknown>;\n\n /** Payload data for @payload bindings */\n payload: Record<string, unknown>;\n\n /** Current state for @state binding */\n state: string;\n\n /** Current timestamp for @now binding (defaults to Date.now()) */\n now: number;\n\n /** User data for @user bindings (role-based UI) */\n user?: UserContext;\n\n /** Singleton entities for @EntityName bindings */\n singletons: Map<string, Record<string, unknown>>;\n\n /** Local variables from 'let' bindings */\n locals?: Map<string, unknown>;\n\n // ============================================================================\n // Effect Handlers (for executing side effects)\n // ============================================================================\n\n /** Mutate entity fields */\n mutateEntity?: (changes: Record<string, unknown>) => void;\n\n /** Emit an event */\n emit?: (event: string, payload?: unknown) => void;\n\n /** Navigate to a route */\n navigate?: (route: string, params?: Record<string, unknown>) => void;\n\n /** Persist data (create/update/delete) */\n persist?: (action: 'create' | 'update' | 'delete', data?: Record<string, unknown>) => Promise<void>;\n\n /** Show a notification */\n notify?: (message: string, type?: 'success' | 'error' | 'warning' | 'info') => void;\n\n /** Spawn a new entity instance */\n spawn?: (entityType: string, props?: Record<string, unknown>) => void;\n\n /** Despawn an entity instance */\n despawn?: (entityId?: string) => void;\n\n /** Call an external service */\n callService?: (service: string, method: string, params?: Record<string, unknown>) => Promise<unknown>;\n\n /** Render UI to a slot */\n renderUI?: (slot: string, pattern: unknown, props?: Record<string, unknown>, priority?: number) => void;\n}\n\n/**\n * Create a minimal evaluation context for testing/guards.\n * Only includes bindings, no effect handlers.\n */\nexport function createMinimalContext(\n entity: Record<string, unknown> = {},\n payload: Record<string, unknown> = {},\n state: string = 'initial'\n): EvaluationContext {\n return {\n entity,\n payload,\n state,\n now: Date.now(),\n singletons: new Map(),\n };\n}\n\n/**\n * Create a context with effect handlers.\n * Used for runtime evaluation where effects need to execute.\n */\nexport function createEffectContext(\n base: EvaluationContext,\n handlers: Partial<Pick<EvaluationContext,\n 'mutateEntity' | 'emit' | 'navigate' | 'persist' | 'notify' | 'spawn' | 'despawn' | 'callService' | 'renderUI'\n >>\n): EvaluationContext {\n return {\n ...base,\n ...handlers,\n };\n}\n\n/**\n * Create a child context with additional local bindings.\n * Used for 'let' expressions.\n */\nexport function createChildContext(\n parent: EvaluationContext,\n locals: Map<string, unknown>\n): EvaluationContext {\n // Merge parent locals with new locals\n const mergedLocals = new Map(parent.locals);\n locals.forEach((value, key) => mergedLocals.set(key, value));\n\n return {\n ...parent,\n locals: mergedLocals,\n };\n}\n\n/**\n * Resolve a binding in the context.\n *\n * @param binding - Binding string (e.g., \"@entity.health\", \"@payload.amount\")\n * @param ctx - Evaluation context\n * @returns Resolved value or undefined\n */\nexport function resolveBinding(binding: string, ctx: EvaluationContext): unknown {\n if (!binding.startsWith('@')) {\n return undefined;\n }\n\n const withoutPrefix = binding.slice(1);\n const parts = withoutPrefix.split('.');\n const root = parts[0];\n const path = parts.slice(1);\n\n let value: unknown;\n\n // Check locals first\n if (ctx.locals?.has(root)) {\n value = ctx.locals.get(root);\n } else {\n // Core bindings\n switch (root) {\n case 'entity':\n value = ctx.entity;\n break;\n case 'payload':\n value = ctx.payload;\n break;\n case 'state':\n return ctx.state; // @state has no path\n case 'now':\n return ctx.now; // @now has no path\n case 'user':\n value = ctx.user;\n break;\n default:\n // Singleton entity reference (@EntityName.field)\n value = ctx.singletons.get(root);\n break;\n }\n }\n\n // Navigate path\n for (const segment of path) {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === 'object') {\n value = (value as Record<string, unknown>)[segment];\n } else {\n return undefined;\n }\n }\n\n return value;\n}\n","/**\n * Arithmetic Operator Implementations\n *\n * Implements: +, -, *, /, %, abs, min, max, floor, ceil, round, clamp\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype Evaluator = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * Evaluate addition: [\"+\", a, b, ...]\n */\nexport function evalAdd(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n return args.reduce((sum: number, arg) => sum + toNumber(evaluate(arg, ctx)), 0);\n}\n\n/**\n * Evaluate subtraction: [\"-\", a] (negate) or [\"-\", a, b] (subtract)\n */\nexport function evalSubtract(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n if (args.length === 1) {\n return -toNumber(evaluate(args[0], ctx));\n }\n return toNumber(evaluate(args[0], ctx)) - toNumber(evaluate(args[1], ctx));\n}\n\n/**\n * Evaluate multiplication: [\"*\", a, b, ...]\n */\nexport function evalMultiply(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n return args.reduce((product: number, arg) => product * toNumber(evaluate(arg, ctx)), 1);\n}\n\n/**\n * Evaluate division: [\"/\", a, b]\n */\nexport function evalDivide(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n const dividend = toNumber(evaluate(args[0], ctx));\n const divisor = toNumber(evaluate(args[1], ctx));\n if (divisor === 0) {\n return dividend >= 0 ? Infinity : -Infinity;\n }\n return dividend / divisor;\n}\n\n/**\n * Evaluate modulo: [\"%\", a, b]\n */\nexport function evalModulo(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n return toNumber(evaluate(args[0], ctx)) % toNumber(evaluate(args[1], ctx));\n}\n\n/**\n * Evaluate absolute value: [\"abs\", a]\n */\nexport function evalAbs(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n return Math.abs(toNumber(evaluate(args[0], ctx)));\n}\n\n/**\n * Evaluate minimum: [\"min\", a, b, ...]\n */\nexport function evalMin(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n const values = args.map((arg) => toNumber(evaluate(arg, ctx)));\n return Math.min(...values);\n}\n\n/**\n * Evaluate maximum: [\"max\", a, b, ...]\n */\nexport function evalMax(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n const values = args.map((arg) => toNumber(evaluate(arg, ctx)));\n return Math.max(...values);\n}\n\n/**\n * Evaluate floor: [\"floor\", a]\n */\nexport function evalFloor(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n return Math.floor(toNumber(evaluate(args[0], ctx)));\n}\n\n/**\n * Evaluate ceiling: [\"ceil\", a]\n */\nexport function evalCeil(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n return Math.ceil(toNumber(evaluate(args[0], ctx)));\n}\n\n/**\n * Evaluate round: [\"round\", a]\n */\nexport function evalRound(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n return Math.round(toNumber(evaluate(args[0], ctx)));\n}\n\n/**\n * Evaluate clamp: [\"clamp\", value, min, max]\n */\nexport function evalClamp(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n const value = toNumber(evaluate(args[0], ctx));\n const min = toNumber(evaluate(args[1], ctx));\n const max = toNumber(evaluate(args[2], ctx));\n return Math.max(min, Math.min(max, value));\n}\n\n/**\n * Convert a value to a number, defaulting to 0 for non-numbers.\n */\nfunction toNumber(value: unknown): number {\n if (typeof value === 'number') return value;\n if (typeof value === 'string') {\n const parsed = parseFloat(value);\n return isNaN(parsed) ? 0 : parsed;\n }\n if (typeof value === 'boolean') return value ? 1 : 0;\n return 0;\n}\n","/**\n * Comparison Operator Implementations\n *\n * Implements: =, !=, <, >, <=, >=\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype Evaluator = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * Evaluate equality: [\"=\", a, b]\n * Uses strict equality (===) for type safety.\n */\nexport function evalEqual(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const left = evaluate(args[0], ctx);\n const right = evaluate(args[1], ctx);\n return deepEqual(left, right);\n}\n\n/**\n * Evaluate not-equal: [\"!=\", a, b]\n */\nexport function evalNotEqual(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const left = evaluate(args[0], ctx);\n const right = evaluate(args[1], ctx);\n return !deepEqual(left, right);\n}\n\n/**\n * Evaluate less-than: [\"<\", a, b]\n */\nexport function evalLessThan(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const left = evaluate(args[0], ctx);\n const right = evaluate(args[1], ctx);\n return toComparable(left) < toComparable(right);\n}\n\n/**\n * Evaluate greater-than: [\">\", a, b]\n */\nexport function evalGreaterThan(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const left = evaluate(args[0], ctx);\n const right = evaluate(args[1], ctx);\n return toComparable(left) > toComparable(right);\n}\n\n/**\n * Evaluate less-than-or-equal: [\"<=\", a, b]\n */\nexport function evalLessThanOrEqual(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const left = evaluate(args[0], ctx);\n const right = evaluate(args[1], ctx);\n return toComparable(left) <= toComparable(right);\n}\n\n/**\n * Evaluate greater-than-or-equal: [\">=\", a, b]\n */\nexport function evalGreaterThanOrEqual(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const left = evaluate(args[0], ctx);\n const right = evaluate(args[1], ctx);\n return toComparable(left) >= toComparable(right);\n}\n\n/**\n * Evaluate regex match: [\"matches\", subject, pattern]\n * Returns true if subject matches the regex pattern.\n */\nexport function evalMatches(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const subject = evaluate(args[0], ctx);\n const pattern = evaluate(args[1], ctx);\n\n if (typeof subject !== 'string' || typeof pattern !== 'string') {\n return false;\n }\n\n try {\n const regex = new RegExp(pattern);\n return regex.test(subject);\n } catch {\n // Invalid regex pattern\n return false;\n }\n}\n\n/**\n * Deep equality check for objects and arrays.\n */\nfunction deepEqual(a: unknown, b: unknown): boolean {\n // Primitive equality\n if (a === b) return true;\n\n // Null/undefined checks\n if (a === null || b === null) return a === b;\n if (a === undefined || b === undefined) return a === b;\n\n // Type checks\n if (typeof a !== typeof b) return false;\n\n // Array equality\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((val, idx) => deepEqual(val, b[idx]));\n }\n\n // Object equality\n if (typeof a === 'object' && typeof b === 'object') {\n const keysA = Object.keys(a as object);\n const keysB = Object.keys(b as object);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((key) =>\n deepEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key])\n );\n }\n\n return false;\n}\n\n/**\n * Convert to a comparable value for ordering operations.\n */\nfunction toComparable(value: unknown): number | string {\n if (typeof value === 'number') return value;\n if (typeof value === 'string') return value;\n if (typeof value === 'boolean') return value ? 1 : 0;\n if (value === null || value === undefined) return 0;\n return String(value);\n}\n","/**\n * Logic Operator Implementations\n *\n * Implements: and, or, not, if\n * All logic operators support short-circuit evaluation.\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype Evaluator = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * Evaluate logical AND: [\"and\", a, b, ...]\n * Short-circuits: returns false as soon as any argument is falsy.\n */\nexport function evalAnd(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n for (const arg of args) {\n if (!toBoolean(evaluate(arg, ctx))) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Evaluate logical OR: [\"or\", a, b, ...]\n * Short-circuits: returns true as soon as any argument is truthy.\n */\nexport function evalOr(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n for (const arg of args) {\n if (toBoolean(evaluate(arg, ctx))) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Evaluate logical NOT: [\"not\", a]\n */\nexport function evalNot(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n return !toBoolean(evaluate(args[0], ctx));\n}\n\n/**\n * Evaluate conditional: [\"if\", condition, then, else]\n * Only evaluates the branch that matches the condition.\n */\nexport function evalIf(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown {\n const condition = toBoolean(evaluate(args[0], ctx));\n if (condition) {\n return evaluate(args[1], ctx);\n }\n return evaluate(args[2], ctx);\n}\n\n/**\n * Convert a value to boolean.\n * Follows JavaScript truthy/falsy semantics:\n * - false, 0, '', null, undefined, NaN are falsy\n * - Everything else is truthy\n */\nfunction toBoolean(value: unknown): boolean {\n return Boolean(value);\n}\n","/**\n * Control Operator Implementations\n *\n * Implements: let, do, when, fn\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\nimport { createChildContext } from '../context.js';\n\ntype Evaluator = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * Evaluate let binding: [\"let\", [[name, value], ...], body]\n * Creates local bindings for use in body.\n */\nexport function evalLet(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown {\n const bindings = args[0] as SExpr[][];\n const body = args[1];\n\n // Evaluate bindings and create new context\n const locals = new Map<string, unknown>();\n for (const binding of bindings) {\n const name = binding[0] as string;\n const value = evaluate(binding[1], ctx);\n locals.set(name, value);\n }\n\n // Evaluate body with new context\n const childCtx = createChildContext(ctx, locals);\n return evaluate(body, childCtx);\n}\n\n/**\n * Evaluate do block: [\"do\", expr1, expr2, ...]\n * Executes expressions in sequence, returns last result.\n */\nexport function evalDo(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown {\n let result: unknown = undefined;\n for (const expr of args) {\n result = evaluate(expr, ctx);\n }\n return result;\n}\n\n/**\n * Evaluate when: [\"when\", condition, effect]\n * Executes effect only when condition is truthy.\n */\nexport function evalWhen(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const condition = evaluate(args[0], ctx);\n if (Boolean(condition)) {\n evaluate(args[1], ctx);\n }\n}\n\n/**\n * Evaluate lambda: [\"fn\", varName, body] or [\"fn\", [vars], body]\n * Creates a function that can be passed to collection operators.\n */\nexport function evalFn(\n args: SExpr[],\n _evaluate: Evaluator,\n _ctx: EvaluationContext\n): (item: unknown, evaluate: Evaluator, ctx: EvaluationContext) => unknown {\n const params = args[0];\n const body = args[1];\n\n // Return a closure that can be called with an item\n return (item: unknown, evaluate: Evaluator, ctx: EvaluationContext) => {\n const locals = new Map<string, unknown>();\n\n // Handle single variable or array of variables\n if (typeof params === 'string') {\n locals.set(params, item);\n } else if (Array.isArray(params)) {\n const itemArray = Array.isArray(item) ? item : [item];\n for (let i = 0; i < params.length; i++) {\n locals.set(params[i] as string, itemArray[i]);\n }\n }\n\n const childCtx = createChildContext(ctx, locals);\n return evaluate(body, childCtx);\n };\n}\n","/**\n * Collection Operator Implementations\n *\n * Implements: map, filter, find, count, sum, first, last, nth, concat, includes, empty\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\nimport { createChildContext } from '../context.js';\n\ntype Evaluator = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * Evaluate map: [\"map\", collection, [\"fn\", varName, body]]\n */\nexport function evalMap(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown[] {\n const collection = toArray(evaluate(args[0], ctx));\n const fnExpr = args[1] as SExpr[];\n\n // Get function params and body\n const params = fnExpr[1];\n const body = fnExpr[2];\n const varName = typeof params === 'string' ? params : (params as SExpr[])[0] as string;\n\n return collection.map((item) => {\n const locals = new Map<string, unknown>();\n locals.set(varName, item);\n const childCtx = createChildContext(ctx, locals);\n return evaluate(body, childCtx);\n });\n}\n\n/**\n * Evaluate filter: [\"filter\", collection, [\"fn\", varName, predicate]]\n */\nexport function evalFilter(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown[] {\n const collection = toArray(evaluate(args[0], ctx));\n const fnExpr = args[1] as SExpr[];\n\n const params = fnExpr[1];\n const body = fnExpr[2];\n const varName = typeof params === 'string' ? params : (params as SExpr[])[0] as string;\n\n return collection.filter((item) => {\n const locals = new Map<string, unknown>();\n locals.set(varName, item);\n const childCtx = createChildContext(ctx, locals);\n return Boolean(evaluate(body, childCtx));\n });\n}\n\n/**\n * Evaluate find: [\"find\", collection, [\"fn\", varName, predicate]]\n */\nexport function evalFind(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown {\n const collection = toArray(evaluate(args[0], ctx));\n const fnExpr = args[1] as SExpr[];\n\n const params = fnExpr[1];\n const body = fnExpr[2];\n const varName = typeof params === 'string' ? params : (params as SExpr[])[0] as string;\n\n return collection.find((item) => {\n const locals = new Map<string, unknown>();\n locals.set(varName, item);\n const childCtx = createChildContext(ctx, locals);\n return Boolean(evaluate(body, childCtx));\n });\n}\n\n/**\n * Evaluate count: [\"count\", collection]\n */\nexport function evalCount(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n const collection = toArray(evaluate(args[0], ctx));\n return collection.length;\n}\n\n/**\n * Evaluate sum: [\"sum\", collection] or [\"sum\", collection, [\"fn\", varName, mapper]]\n */\nexport function evalSum(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n const collection = toArray(evaluate(args[0], ctx));\n\n if (args.length === 1) {\n // Direct sum\n return collection.reduce((sum: number, item) => sum + toNumber(item), 0);\n }\n\n // Sum with mapper function\n const fnExpr = args[1] as SExpr[];\n const params = fnExpr[1];\n const body = fnExpr[2];\n const varName = typeof params === 'string' ? params : (params as SExpr[])[0] as string;\n\n return collection.reduce((sum: number, item) => {\n const locals = new Map<string, unknown>();\n locals.set(varName, item);\n const childCtx = createChildContext(ctx, locals);\n return sum + toNumber(evaluate(body, childCtx));\n }, 0);\n}\n\n/**\n * Evaluate first: [\"first\", collection]\n */\nexport function evalFirst(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown {\n const collection = toArray(evaluate(args[0], ctx));\n return collection.length > 0 ? collection[0] : undefined;\n}\n\n/**\n * Evaluate last: [\"last\", collection]\n */\nexport function evalLast(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown {\n const collection = toArray(evaluate(args[0], ctx));\n return collection.length > 0 ? collection[collection.length - 1] : undefined;\n}\n\n/**\n * Evaluate nth: [\"nth\", collection, index]\n */\nexport function evalNth(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown {\n const collection = toArray(evaluate(args[0], ctx));\n const index = toNumber(evaluate(args[1], ctx));\n return collection[index];\n}\n\n/**\n * Evaluate concat: [\"concat\", collection1, collection2, ...]\n */\nexport function evalConcat(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown[] {\n const result: unknown[] = [];\n for (const arg of args) {\n const collection = toArray(evaluate(arg, ctx));\n result.push(...collection);\n }\n return result;\n}\n\n/**\n * Evaluate includes: [\"includes\", collection, element]\n */\nexport function evalIncludes(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const collection = toArray(evaluate(args[0], ctx));\n const element = evaluate(args[1], ctx);\n return collection.includes(element);\n}\n\n/**\n * Evaluate empty: [\"empty\", collection]\n */\nexport function evalEmpty(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const collection = toArray(evaluate(args[0], ctx));\n return collection.length === 0;\n}\n\n/**\n * Convert a value to an array.\n */\nfunction toArray(value: unknown): unknown[] {\n if (Array.isArray(value)) return value;\n if (value === null || value === undefined) return [];\n return [value];\n}\n\n/**\n * Convert a value to a number.\n */\nfunction toNumber(value: unknown): number {\n if (typeof value === 'number') return value;\n if (typeof value === 'string') {\n const parsed = parseFloat(value);\n return isNaN(parsed) ? 0 : parsed;\n }\n return 0;\n}\n","/**\n * Effect Operator Implementations\n *\n * Implements: set, emit, persist, navigate, notify, spawn, despawn, call-service, render-ui\n *\n * Effect operators have side effects and require effect handlers in the context.\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\nimport { resolveBinding } from '../context.js';\n\ntype Evaluator = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * Evaluate set: [\"set\", \"@entity.field\", value] or [\"set\", \"@entity.field\", value, operation]\n */\nexport function evalSet(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const binding = args[0] as string;\n const value = evaluate(args[1], ctx);\n const operation = args[2] as string | undefined;\n\n if (!ctx.mutateEntity) {\n console.warn('No mutateEntity handler in context for set effect');\n return;\n }\n\n // Parse the binding to get the field name\n if (!binding.startsWith('@entity.')) {\n console.warn(`set only supports @entity bindings, got: ${binding}`);\n return;\n }\n\n const fieldPath = binding.slice(8); // Remove \"@entity.\"\n\n // Handle different operations\n let finalValue = value;\n if (operation) {\n const currentValue = resolveBinding(binding, ctx);\n switch (operation) {\n case 'increment':\n finalValue = toNumber(currentValue) + toNumber(value);\n break;\n case 'decrement':\n finalValue = toNumber(currentValue) - toNumber(value);\n break;\n case 'multiply':\n finalValue = toNumber(currentValue) * toNumber(value);\n break;\n case 'append':\n finalValue = Array.isArray(currentValue) ? [...currentValue, value] : [value];\n break;\n case 'remove':\n finalValue = Array.isArray(currentValue) ? currentValue.filter((v) => v !== value) : [];\n break;\n default:\n // No operation, use value directly\n break;\n }\n }\n\n ctx.mutateEntity({ [fieldPath]: finalValue });\n}\n\n/**\n * Evaluate emit: [\"emit\", eventKey] or [\"emit\", eventKey, payload]\n */\nexport function evalEmit(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const eventKey = args[0] as string;\n const payload = args.length > 1 ? evaluate(args[1], ctx) : undefined;\n\n if (!ctx.emit) {\n console.warn('No emit handler in context for emit effect');\n return;\n }\n\n ctx.emit(eventKey, payload);\n}\n\n/**\n * Evaluate persist: [\"persist\", action] or [\"persist\", action, data]\n * Actions: \"create\", \"update\", \"delete\"\n */\nexport function evalPersist(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const action = args[0] as 'create' | 'update' | 'delete';\n const data = args.length > 1 ? (evaluate(args[1], ctx) as Record<string, unknown>) : ctx.payload;\n\n if (!ctx.persist) {\n console.warn('No persist handler in context for persist effect');\n return;\n }\n\n // Fire and forget (async)\n ctx.persist(action, data as Record<string, unknown>).catch((err) => {\n console.error(`Persist ${action} failed:`, err);\n });\n}\n\n/**\n * Evaluate navigate: [\"navigate\", route] or [\"navigate\", route, params]\n */\nexport function evalNavigate(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const route = args[0] as string;\n const params = args.length > 1 ? (evaluate(args[1], ctx) as Record<string, unknown>) : undefined;\n\n if (!ctx.navigate) {\n console.warn('No navigate handler in context for navigate effect');\n return;\n }\n\n ctx.navigate(route, params);\n}\n\n/**\n * Evaluate notify: [\"notify\", message] or [\"notify\", message, type]\n */\nexport function evalNotify(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const message = String(evaluate(args[0], ctx));\n const type = (args[1] as 'success' | 'error' | 'warning' | 'info') || 'info';\n\n if (!ctx.notify) {\n console.warn('No notify handler in context for notify effect');\n return;\n }\n\n ctx.notify(message, type);\n}\n\n/**\n * Evaluate spawn: [\"spawn\", entityType] or [\"spawn\", entityType, props]\n */\nexport function evalSpawn(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const entityType = args[0] as string;\n const props = args.length > 1 ? (evaluate(args[1], ctx) as Record<string, unknown>) : undefined;\n\n if (!ctx.spawn) {\n console.warn('No spawn handler in context for spawn effect');\n return;\n }\n\n ctx.spawn(entityType, props);\n}\n\n/**\n * Evaluate despawn: [\"despawn\"] or [\"despawn\", entityId]\n */\nexport function evalDespawn(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const entityId = args.length > 0 ? String(evaluate(args[0], ctx)) : undefined;\n\n if (!ctx.despawn) {\n console.warn('No despawn handler in context for despawn effect');\n return;\n }\n\n ctx.despawn(entityId);\n}\n\n/**\n * Evaluate call-service: [\"call-service\", service, method] or [\"call-service\", service, method, params]\n */\nexport function evalCallService(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const service = args[0] as string;\n const method = args[1] as string;\n const params = args.length > 2 ? (evaluate(args[2], ctx) as Record<string, unknown>) : undefined;\n\n if (!ctx.callService) {\n console.warn('No callService handler in context for call-service effect');\n return;\n }\n\n // Fire and forget (async)\n ctx.callService(service, method, params).catch((err) => {\n console.error(`Service call ${service}.${method} failed:`, err);\n });\n}\n\n/**\n * Evaluate render-ui:\n * - [\"render-ui\", slot, pattern]\n * - [\"render-ui\", slot, pattern, props]\n * - [\"render-ui\", slot, pattern, props, priority]\n * - [\"render-ui\", slot, null] - clears the slot\n */\nexport function evalRenderUI(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const slot = args[0] as string;\n const pattern = evaluate(args[1], ctx);\n const props = args.length > 2 ? (evaluate(args[2], ctx) as Record<string, unknown>) : undefined;\n const priority = args.length > 3 ? (evaluate(args[3], ctx) as number) : undefined;\n\n if (!ctx.renderUI) {\n console.warn('No renderUI handler in context for render-ui effect');\n return;\n }\n\n // Handle null pattern as \"clear slot\"\n if (pattern === null || pattern === undefined) {\n ctx.renderUI(slot, { type: 'clear' }, undefined, priority);\n return;\n }\n\n ctx.renderUI(slot, pattern, props, priority);\n}\n\n/**\n * Evaluate set-dynamic: [\"set-dynamic\", pathExpr, value]\n * Used for dynamic field paths computed at runtime.\n * The pathExpr should evaluate to a dot-separated path string.\n */\nexport function evalSetDynamic(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const pathExpr = evaluate(args[0], ctx) as string;\n const value = evaluate(args[1], ctx);\n\n if (!ctx.mutateEntity) {\n console.warn('No mutateEntity handler in context for set-dynamic effect');\n return;\n }\n\n if (!pathExpr || typeof pathExpr !== 'string') {\n console.warn(`set-dynamic requires a valid path string, got: ${pathExpr}`);\n return;\n }\n\n // pathExpr is already a dot-separated path (e.g., \"formValues.A9\")\n ctx.mutateEntity({ [pathExpr]: value });\n}\n\n/**\n * Evaluate increment: [\"increment\", \"@entity.field\"] or [\"increment\", \"@entity.field\", amount]\n */\nexport function evalIncrement(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const binding = args[0] as string;\n const amount = args.length > 1 ? toNumber(evaluate(args[1], ctx)) : 1;\n\n if (!ctx.mutateEntity) {\n console.warn('No mutateEntity handler in context for increment effect');\n return;\n }\n\n if (!binding.startsWith('@entity.')) {\n console.warn(`increment only supports @entity bindings, got: ${binding}`);\n return;\n }\n\n const fieldPath = binding.slice(8); // Remove \"@entity.\"\n const currentValue = resolveBinding(binding, ctx);\n const newValue = toNumber(currentValue) + amount;\n\n ctx.mutateEntity({ [fieldPath]: newValue });\n}\n\n/**\n * Evaluate decrement: [\"decrement\", \"@entity.field\"] or [\"decrement\", \"@entity.field\", amount]\n */\nexport function evalDecrement(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const binding = args[0] as string;\n const amount = args.length > 1 ? toNumber(evaluate(args[1], ctx)) : 1;\n\n if (!ctx.mutateEntity) {\n console.warn('No mutateEntity handler in context for decrement effect');\n return;\n }\n\n if (!binding.startsWith('@entity.')) {\n console.warn(`decrement only supports @entity bindings, got: ${binding}`);\n return;\n }\n\n const fieldPath = binding.slice(8); // Remove \"@entity.\"\n const currentValue = resolveBinding(binding, ctx);\n const newValue = toNumber(currentValue) - amount;\n\n ctx.mutateEntity({ [fieldPath]: newValue });\n}\n\n/**\n * Convert a value to a number.\n */\nfunction toNumber(value: unknown): number {\n if (typeof value === 'number') return value;\n if (typeof value === 'string') {\n const parsed = parseFloat(value);\n return isNaN(parsed) ? 0 : parsed;\n }\n return 0;\n}\n","/**\n * Math Module Runtime Evaluators\n *\n * Runtime implementations for math/* operators.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype EvalFn = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * math/abs - Absolute value\n */\nexport function evalMathAbs(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx) as number;\n return Math.abs(n);\n}\n\n/**\n * math/min - Minimum of values\n */\nexport function evalMathMin(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const values = args.map((a) => evaluate(a, ctx) as number);\n return Math.min(...values);\n}\n\n/**\n * math/max - Maximum of values\n */\nexport function evalMathMax(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const values = args.map((a) => evaluate(a, ctx) as number);\n return Math.max(...values);\n}\n\n/**\n * math/clamp - Constrain value to range [min, max]\n */\nexport function evalMathClamp(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx) as number;\n const min = evaluate(args[1], ctx) as number;\n const max = evaluate(args[2], ctx) as number;\n return Math.min(Math.max(n, min), max);\n}\n\n/**\n * math/floor - Round down to integer\n */\nexport function evalMathFloor(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx) as number;\n return Math.floor(n);\n}\n\n/**\n * math/ceil - Round up to integer\n */\nexport function evalMathCeil(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx) as number;\n return Math.ceil(n);\n}\n\n/**\n * math/round - Round to nearest integer or specified decimals\n */\nexport function evalMathRound(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx) as number;\n const decimals = args.length > 1 ? (evaluate(args[1], ctx) as number) : 0;\n if (decimals === 0) {\n return Math.round(n);\n }\n const factor = Math.pow(10, decimals);\n return Math.round(n * factor) / factor;\n}\n\n/**\n * math/pow - Exponentiation (base^exp)\n */\nexport function evalMathPow(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const base = evaluate(args[0], ctx) as number;\n const exp = evaluate(args[1], ctx) as number;\n return Math.pow(base, exp);\n}\n\n/**\n * math/sqrt - Square root\n */\nexport function evalMathSqrt(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx) as number;\n return Math.sqrt(n);\n}\n\n/**\n * math/mod - Modulo (remainder)\n */\nexport function evalMathMod(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const a = evaluate(args[0], ctx) as number;\n const b = evaluate(args[1], ctx) as number;\n return a % b;\n}\n\n/**\n * math/sign - Returns -1, 0, or 1 indicating sign\n */\nexport function evalMathSign(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx) as number;\n return Math.sign(n);\n}\n\n/**\n * math/lerp - Linear interpolation between a and b by factor t\n */\nexport function evalMathLerp(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const a = evaluate(args[0], ctx) as number;\n const b = evaluate(args[1], ctx) as number;\n const t = evaluate(args[2], ctx) as number;\n return a + (b - a) * t;\n}\n\n/**\n * math/map - Map value from one range to another\n */\nexport function evalMathMap(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx) as number;\n const inMin = evaluate(args[1], ctx) as number;\n const inMax = evaluate(args[2], ctx) as number;\n const outMin = evaluate(args[3], ctx) as number;\n const outMax = evaluate(args[4], ctx) as number;\n return ((n - inMin) / (inMax - inMin)) * (outMax - outMin) + outMin;\n}\n\n/**\n * math/random - Random number between 0 (inclusive) and 1 (exclusive)\n */\nexport function evalMathRandom(): number {\n return Math.random();\n}\n\n/**\n * math/randomInt - Random integer in range [min, max] (inclusive)\n */\nexport function evalMathRandomInt(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const min = evaluate(args[0], ctx) as number;\n const max = evaluate(args[1], ctx) as number;\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\n/**\n * math/default - Return default if value is null, undefined, or NaN\n */\nexport function evalMathDefault(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx);\n const defaultValue = evaluate(args[1], ctx) as number;\n if (n === null || n === undefined || (typeof n === 'number' && isNaN(n))) {\n return defaultValue;\n }\n return n as number;\n}\n","/**\n * String Module Runtime Evaluators\n *\n * Runtime implementations for str/* operators.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype EvalFn = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * str/len - String length\n */\nexport function evalStrLen(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const s = evaluate(args[0], ctx) as string;\n return s?.length ?? 0;\n}\n\n/**\n * str/concat - Concatenate strings together\n */\nexport function evalStrConcat(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n return args.map(arg => {\n const val = evaluate(arg, ctx);\n return val !== null && val !== undefined ? String(val) : '';\n }).join('');\n}\n\n/**\n * str/upper - Convert to uppercase\n */\nexport function evalStrUpper(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n return s?.toUpperCase() ?? '';\n}\n\n/**\n * str/lower - Convert to lowercase\n */\nexport function evalStrLower(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n return s?.toLowerCase() ?? '';\n}\n\n/**\n * str/trim - Remove leading and trailing whitespace\n */\nexport function evalStrTrim(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n return s?.trim() ?? '';\n}\n\n/**\n * str/trimStart - Remove leading whitespace\n */\nexport function evalStrTrimStart(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n return s?.trimStart() ?? '';\n}\n\n/**\n * str/trimEnd - Remove trailing whitespace\n */\nexport function evalStrTrimEnd(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n return s?.trimEnd() ?? '';\n}\n\n/**\n * str/split - Split string into array by delimiter\n */\nexport function evalStrSplit(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string[] {\n const s = evaluate(args[0], ctx) as string;\n const delim = evaluate(args[1], ctx) as string;\n return s?.split(delim) ?? [];\n}\n\n/**\n * str/join - Join array elements into string\n */\nexport function evalStrJoin(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const arr = evaluate(args[0], ctx) as unknown[];\n const delim = evaluate(args[1], ctx) as string;\n return arr?.join(delim) ?? '';\n}\n\n/**\n * str/slice - Extract substring\n */\nexport function evalStrSlice(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n const start = evaluate(args[1], ctx) as number;\n const end = args.length > 2 ? (evaluate(args[2], ctx) as number) : undefined;\n return s?.slice(start, end) ?? '';\n}\n\n/**\n * str/replace - Replace first occurrence\n */\nexport function evalStrReplace(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n const find = evaluate(args[1], ctx) as string;\n const replacement = evaluate(args[2], ctx) as string;\n return s?.replace(find, replacement) ?? '';\n}\n\n/**\n * str/replaceAll - Replace all occurrences\n * Uses replace with global regex for ES2020 compatibility\n */\nexport function evalStrReplaceAll(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n const find = evaluate(args[1], ctx) as string;\n const replacement = evaluate(args[2], ctx) as string;\n if (!s || !find) return s ?? '';\n // Escape special regex characters in the search string\n const escaped = find.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return s.replace(new RegExp(escaped, 'g'), replacement);\n}\n\n/**\n * str/includes - Check if string contains substring\n */\nexport function evalStrIncludes(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const s = evaluate(args[0], ctx) as string;\n const search = evaluate(args[1], ctx) as string;\n return s?.includes(search) ?? false;\n}\n\n/**\n * str/startsWith - Check if string starts with prefix\n */\nexport function evalStrStartsWith(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const s = evaluate(args[0], ctx) as string;\n const prefix = evaluate(args[1], ctx) as string;\n return s?.startsWith(prefix) ?? false;\n}\n\n/**\n * str/endsWith - Check if string ends with suffix\n */\nexport function evalStrEndsWith(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const s = evaluate(args[0], ctx) as string;\n const suffix = evaluate(args[1], ctx) as string;\n return s?.endsWith(suffix) ?? false;\n}\n\n/**\n * str/padStart - Pad string from start to target length\n */\nexport function evalStrPadStart(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n const len = evaluate(args[1], ctx) as number;\n const char = args.length > 2 ? (evaluate(args[2], ctx) as string) : ' ';\n return s?.padStart(len, char) ?? '';\n}\n\n/**\n * str/padEnd - Pad string from end to target length\n */\nexport function evalStrPadEnd(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n const len = evaluate(args[1], ctx) as number;\n const char = args.length > 2 ? (evaluate(args[2], ctx) as string) : ' ';\n return s?.padEnd(len, char) ?? '';\n}\n\n/**\n * str/repeat - Repeat string n times\n */\nexport function evalStrRepeat(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n const count = evaluate(args[1], ctx) as number;\n return s?.repeat(count) ?? '';\n}\n\n/**\n * str/reverse - Reverse string\n */\nexport function evalStrReverse(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n return s?.split('').reverse().join('') ?? '';\n}\n\n/**\n * str/capitalize - Capitalize first character\n */\nexport function evalStrCapitalize(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n if (!s || s.length === 0) return '';\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\n/**\n * str/titleCase - Convert to Title Case\n */\nexport function evalStrTitleCase(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n if (!s) return '';\n return s.replace(/\\w\\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase());\n}\n\n/**\n * str/camelCase - Convert to camelCase\n */\nexport function evalStrCamelCase(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n if (!s) return '';\n return s\n .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) =>\n index === 0 ? word.toLowerCase() : word.toUpperCase()\n )\n .replace(/\\s+/g, '')\n .replace(/[-_]/g, '');\n}\n\n/**\n * str/kebabCase - Convert to kebab-case\n */\nexport function evalStrKebabCase(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n if (!s) return '';\n return s\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n\n/**\n * str/snakeCase - Convert to snake_case\n */\nexport function evalStrSnakeCase(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n if (!s) return '';\n return s\n .replace(/([a-z])([A-Z])/g, '$1_$2')\n .replace(/[\\s-]+/g, '_')\n .toLowerCase();\n}\n\n/**\n * str/default - Return default if value is null/undefined/empty\n */\nexport function evalStrDefault(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx);\n const defaultValue = evaluate(args[1], ctx) as string;\n if (s === null || s === undefined || s === '') {\n return defaultValue;\n }\n return s as string;\n}\n\n/**\n * str/template - Variable substitution in template string\n */\nexport function evalStrTemplate(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const template = evaluate(args[0], ctx) as string;\n const vars = evaluate(args[1], ctx) as Record<string, unknown>;\n if (!template) return '';\n return template.replace(/\\{(\\w+)\\}/g, (_, key) => {\n const value = vars?.[key];\n return value !== undefined ? String(value) : '';\n });\n}\n\n/**\n * str/truncate - Truncate string with optional suffix\n */\nexport function evalStrTruncate(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n const len = evaluate(args[1], ctx) as number;\n const suffix = args.length > 2 ? (evaluate(args[2], ctx) as string) : '...';\n if (!s || s.length <= len) return s ?? '';\n return s.slice(0, len - suffix.length) + suffix;\n}\n","/**\n * Array Module Runtime Evaluators\n *\n * Runtime implementations for array/* operators.\n * Supports lambda expressions for predicates and transformations.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\nimport { createChildContext } from '../context.js';\nimport { isSExpr, getOperator, getArgs } from '../types/expression.js';\n\ntype EvalFn = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * Helper to evaluate a lambda expression with bound variable(s).\n */\nfunction evalLambda(\n lambdaExpr: SExpr,\n evaluate: EvalFn,\n ctx: EvaluationContext,\n ...values: unknown[]\n): unknown {\n if (!isSExpr(lambdaExpr) || getOperator(lambdaExpr) !== 'fn') {\n // Not a lambda, treat as expression to evaluate\n return evaluate(lambdaExpr, ctx);\n }\n\n const args = getArgs(lambdaExpr);\n const params = args[0]; // Variable name(s)\n const body = args[1]; // Body expression\n\n // Create new locals map for the child context\n const newLocals = new Map<string, unknown>();\n\n if (Array.isArray(params)) {\n // Multiple params: [\"fn\", [\"a\", \"b\"], body]\n // This is an array of strings, NOT an S-expression\n const paramNames = params as string[];\n values.forEach((v, i) => {\n if (paramNames[i]) {\n const paramName = paramNames[i];\n // Store without @ prefix - resolveBinding strips @ before lookup\n const key = paramName.startsWith('@') ? paramName.slice(1) : paramName;\n newLocals.set(key, v);\n }\n });\n } else if (typeof params === 'string') {\n // Single param: [\"fn\", \"x\", body]\n // Store without @ prefix - resolveBinding strips @ before lookup\n const paramName = params.startsWith('@') ? params.slice(1) : params;\n newLocals.set(paramName, values[0]);\n }\n\n // Create child context with bound variable(s)\n const childCtx = createChildContext(ctx, newLocals);\n\n return evaluate(body, childCtx);\n}\n\n/**\n * array/len - Array length\n */\nexport function evalArrayLen(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const arr = evaluate(args[0], ctx) as unknown[];\n return arr?.length ?? 0;\n}\n\n/**\n * array/empty? - Check if array is empty\n */\nexport function evalArrayEmpty(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const arr = evaluate(args[0], ctx) as unknown[];\n return !arr || arr.length === 0;\n}\n\n/**\n * array/first - Get first element\n */\nexport function evalArrayFirst(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown {\n const arr = evaluate(args[0], ctx) as unknown[];\n return arr?.[0];\n}\n\n/**\n * array/last - Get last element\n */\nexport function evalArrayLast(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown {\n const arr = evaluate(args[0], ctx) as unknown[];\n return arr?.[arr.length - 1];\n}\n\n/**\n * array/nth - Get element at index\n */\nexport function evalArrayNth(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown {\n const arr = evaluate(args[0], ctx) as unknown[];\n const index = evaluate(args[1], ctx) as number;\n return arr?.[index];\n}\n\n/**\n * array/slice - Extract subarray\n */\nexport function evalArraySlice(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const start = evaluate(args[1], ctx) as number;\n const end = args.length > 2 ? (evaluate(args[2], ctx) as number) : undefined;\n return arr?.slice(start, end) ?? [];\n}\n\n/**\n * array/concat - Concatenate arrays\n */\nexport function evalArrayConcat(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arrays = args.map((a) => evaluate(a, ctx) as unknown[]);\n return arrays.reduce((acc, arr) => acc.concat(arr ?? []), [] as unknown[]);\n}\n\n/**\n * array/append - Add item to end (returns new array)\n */\nexport function evalArrayAppend(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const item = evaluate(args[1], ctx);\n return [...(arr ?? []), item];\n}\n\n/**\n * array/prepend - Add item to start (returns new array)\n */\nexport function evalArrayPrepend(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const item = evaluate(args[1], ctx);\n return [item, ...(arr ?? [])];\n}\n\n/**\n * array/insert - Insert item at index (returns new array)\n */\nexport function evalArrayInsert(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const index = evaluate(args[1], ctx) as number;\n const item = evaluate(args[2], ctx);\n const result = [...(arr ?? [])];\n result.splice(index, 0, item);\n return result;\n}\n\n/**\n * array/remove - Remove item at index (returns new array)\n */\nexport function evalArrayRemove(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const index = evaluate(args[1], ctx) as number;\n const result = [...(arr ?? [])];\n result.splice(index, 1);\n return result;\n}\n\n/**\n * array/removeItem - Remove first matching item (returns new array)\n */\nexport function evalArrayRemoveItem(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const item = evaluate(args[1], ctx);\n const index = arr?.indexOf(item) ?? -1;\n if (index === -1) return arr ?? [];\n const result = [...arr];\n result.splice(index, 1);\n return result;\n}\n\n/**\n * array/reverse - Reverse array order (returns new array)\n */\nexport function evalArrayReverse(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n return [...(arr ?? [])].reverse();\n}\n\n/**\n * array/sort - Sort array (returns new array)\n */\nexport function evalArraySort(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const key = args.length > 1 ? (evaluate(args[1], ctx) as string) : undefined;\n const dir = args.length > 2 ? (evaluate(args[2], ctx) as string) : 'asc';\n\n const result = [...(arr ?? [])];\n\n if (key) {\n result.sort((a, b) => {\n const aVal = (a as Record<string, unknown>)[key] as string | number;\n const bVal = (b as Record<string, unknown>)[key] as string | number;\n if (aVal < bVal) return dir === 'asc' ? -1 : 1;\n if (aVal > bVal) return dir === 'asc' ? 1 : -1;\n return 0;\n });\n } else {\n result.sort((a, b) => {\n const aVal = a as string | number;\n const bVal = b as string | number;\n if (aVal < bVal) return dir === 'asc' ? -1 : 1;\n if (aVal > bVal) return dir === 'asc' ? 1 : -1;\n return 0;\n });\n }\n\n return result;\n}\n\n/**\n * array/shuffle - Randomly shuffle array (returns new array)\n */\nexport function evalArrayShuffle(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const result = [...(arr ?? [])];\n for (let i = result.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [result[i], result[j]] = [result[j], result[i]];\n }\n return result;\n}\n\n/**\n * array/unique - Remove duplicates (returns new array)\n */\nexport function evalArrayUnique(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n return [...new Set(arr ?? [])];\n}\n\n/**\n * array/flatten - Flatten nested arrays one level\n */\nexport function evalArrayFlatten(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n return (arr ?? []).flat();\n}\n\n/**\n * array/zip - Pair elements from two arrays\n */\nexport function evalArrayZip(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[][] {\n const arr1 = evaluate(args[0], ctx) as unknown[];\n const arr2 = evaluate(args[1], ctx) as unknown[];\n const len = Math.min(arr1?.length ?? 0, arr2?.length ?? 0);\n const result: unknown[][] = [];\n for (let i = 0; i < len; i++) {\n result.push([arr1[i], arr2[i]]);\n }\n return result;\n}\n\n/**\n * array/includes - Check if array contains item\n */\nexport function evalArrayIncludes(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const arr = evaluate(args[0], ctx) as unknown[];\n const item = evaluate(args[1], ctx);\n return arr?.includes(item) ?? false;\n}\n\n/**\n * array/indexOf - Find index of item (-1 if not found)\n */\nexport function evalArrayIndexOf(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const arr = evaluate(args[0], ctx) as unknown[];\n const item = evaluate(args[1], ctx);\n return arr?.indexOf(item) ?? -1;\n}\n\n/**\n * array/find - Find first element matching predicate\n */\nexport function evalArrayFind(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n return (arr ?? []).find((item) => evalLambda(lambda, evaluate, ctx, item));\n}\n\n/**\n * array/findIndex - Find index of first element matching predicate (-1 if none)\n */\nexport function evalArrayFindIndex(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n return (arr ?? []).findIndex((item) => evalLambda(lambda, evaluate, ctx, item));\n}\n\n/**\n * array/filter - Keep elements matching predicate\n */\nexport function evalArrayFilter(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n return (arr ?? []).filter((item) => evalLambda(lambda, evaluate, ctx, item));\n}\n\n/**\n * array/reject - Remove elements matching predicate\n */\nexport function evalArrayReject(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n return (arr ?? []).filter((item) => !evalLambda(lambda, evaluate, ctx, item));\n}\n\n/**\n * array/map - Transform each element\n */\nexport function evalArrayMap(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n return (arr ?? []).map((item) => evalLambda(lambda, evaluate, ctx, item));\n}\n\n/**\n * array/reduce - Reduce array to single value\n */\nexport function evalArrayReduce(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n const init = evaluate(args[2], ctx);\n return (arr ?? []).reduce(\n (acc, item) => evalLambda(lambda, evaluate, ctx, acc, item),\n init\n );\n}\n\n/**\n * array/every - Check if all elements match predicate\n */\nexport function evalArrayEvery(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n return (arr ?? []).every((item) => Boolean(evalLambda(lambda, evaluate, ctx, item)));\n}\n\n/**\n * array/some - Check if any element matches predicate\n */\nexport function evalArraySome(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n return (arr ?? []).some((item) => Boolean(evalLambda(lambda, evaluate, ctx, item)));\n}\n\n/**\n * array/count - Count elements (optionally matching predicate)\n */\nexport function evalArrayCount(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const arr = evaluate(args[0], ctx) as unknown[];\n if (args.length > 1) {\n const lambda = args[1];\n return (arr ?? []).filter((item) => evalLambda(lambda, evaluate, ctx, item)).length;\n }\n return arr?.length ?? 0;\n}\n\n/**\n * array/sum - Sum values (optionally by field)\n */\nexport function evalArraySum(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const arr = evaluate(args[0], ctx) as unknown[];\n const key = args.length > 1 ? (evaluate(args[1], ctx) as string) : undefined;\n\n return (arr ?? []).reduce((sum: number, item) => {\n const value = key ? (item as Record<string, unknown>)[key] : item;\n return sum + (typeof value === 'number' ? value : 0);\n }, 0);\n}\n\n/**\n * array/avg - Average of values (optionally by field)\n */\nexport function evalArrayAvg(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const arr = evaluate(args[0], ctx) as unknown[];\n if (!arr || arr.length === 0) return 0;\n\n const key = args.length > 1 ? (evaluate(args[1], ctx) as string) : undefined;\n\n const sum = arr.reduce((s: number, item) => {\n const value = key ? (item as Record<string, unknown>)[key] : item;\n return s + (typeof value === 'number' ? value : 0);\n }, 0);\n\n return sum / arr.length;\n}\n\n/**\n * array/min - Minimum value (optionally by field)\n */\nexport function evalArrayMin(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const arr = evaluate(args[0], ctx) as unknown[];\n if (!arr || arr.length === 0) return 0;\n\n const key = args.length > 1 ? (evaluate(args[1], ctx) as string) : undefined;\n\n const values = arr.map((item) => {\n const value = key ? (item as Record<string, unknown>)[key] : item;\n return typeof value === 'number' ? value : Infinity;\n });\n\n return Math.min(...values);\n}\n\n/**\n * array/max - Maximum value (optionally by field)\n */\nexport function evalArrayMax(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const arr = evaluate(args[0], ctx) as unknown[];\n if (!arr || arr.length === 0) return 0;\n\n const key = args.length > 1 ? (evaluate(args[1], ctx) as string) : undefined;\n\n const values = arr.map((item) => {\n const value = key ? (item as Record<string, unknown>)[key] : item;\n return typeof value === 'number' ? value : -Infinity;\n });\n\n return Math.max(...values);\n}\n\n/**\n * array/groupBy - Group elements by field value\n */\nexport function evalArrayGroupBy(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown[]> {\n const arr = evaluate(args[0], ctx) as unknown[];\n const key = evaluate(args[1], ctx) as string;\n\n const result: Record<string, unknown[]> = {};\n for (const item of arr ?? []) {\n const groupKey = String((item as Record<string, unknown>)[key] ?? 'undefined');\n if (!result[groupKey]) {\n result[groupKey] = [];\n }\n result[groupKey].push(item);\n }\n return result;\n}\n\n/**\n * array/partition - Split array by predicate into [matches, nonMatches]\n */\nexport function evalArrayPartition(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): [unknown[], unknown[]] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n\n const matches: unknown[] = [];\n const nonMatches: unknown[] = [];\n\n for (const item of arr ?? []) {\n if (evalLambda(lambda, evaluate, ctx, item)) {\n matches.push(item);\n } else {\n nonMatches.push(item);\n }\n }\n\n return [matches, nonMatches];\n}\n\n/**\n * array/take - Take first n elements\n */\nexport function evalArrayTake(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const n = evaluate(args[1], ctx) as number;\n return (arr ?? []).slice(0, n);\n}\n\n/**\n * array/drop - Skip first n elements\n */\nexport function evalArrayDrop(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const n = evaluate(args[1], ctx) as number;\n return (arr ?? []).slice(n);\n}\n\n/**\n * array/takeLast - Take last n elements\n */\nexport function evalArrayTakeLast(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const n = evaluate(args[1], ctx) as number;\n return (arr ?? []).slice(-n);\n}\n\n/**\n * array/dropLast - Skip last n elements\n */\nexport function evalArrayDropLast(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const n = evaluate(args[1], ctx) as number;\n return (arr ?? []).slice(0, -n);\n}\n","/**\n * Object Module Runtime Evaluators\n *\n * Runtime implementations for object/* operators.\n * All operations are immutable (return new objects).\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\nimport { createChildContext } from '../context.js';\nimport { isSExpr, getOperator, getArgs } from '../types/expression.js';\n\ntype EvalFn = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * Helper to evaluate a lambda expression with bound variable(s).\n */\nfunction evalLambda(\n lambdaExpr: SExpr,\n evaluate: EvalFn,\n ctx: EvaluationContext,\n ...values: unknown[]\n): unknown {\n if (!isSExpr(lambdaExpr) || getOperator(lambdaExpr) !== 'fn') {\n return evaluate(lambdaExpr, ctx);\n }\n\n const args = getArgs(lambdaExpr);\n const params = args[0];\n const body = args[1];\n\n // Create new locals map for the child context\n const newLocals = new Map<string, unknown>();\n\n if (Array.isArray(params)) {\n // Multiple params: [\"fn\", [\"a\", \"b\"], body]\n const paramNames = params as string[];\n values.forEach((v, i) => {\n if (paramNames[i]) {\n const paramName = paramNames[i];\n // Store without @ prefix - resolveBinding strips @ before lookup\n const key = paramName.startsWith('@') ? paramName.slice(1) : paramName;\n newLocals.set(key, v);\n }\n });\n } else if (typeof params === 'string') {\n // Single param: [\"fn\", \"x\", body]\n // Store without @ prefix - resolveBinding strips @ before lookup\n const paramName = params.startsWith('@') ? params.slice(1) : params;\n newLocals.set(paramName, values[0]);\n }\n\n const childCtx = createChildContext(ctx, newLocals);\n\n return evaluate(body, childCtx);\n}\n\n/**\n * object/keys - Get object keys as array\n */\nexport function evalObjectKeys(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string[] {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n return Object.keys(obj ?? {});\n}\n\n/**\n * object/values - Get object values as array\n */\nexport function evalObjectValues(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n return Object.values(obj ?? {});\n}\n\n/**\n * object/entries - Get [key, value] pairs as array\n */\nexport function evalObjectEntries(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): [string, unknown][] {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n return Object.entries(obj ?? {});\n}\n\n/**\n * object/fromEntries - Create object from [key, value] pairs\n */\nexport function evalObjectFromEntries(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const entries = evaluate(args[0], ctx) as [string, unknown][];\n return Object.fromEntries(entries ?? []);\n}\n\n/**\n * object/get - Get nested value by path\n */\nexport function evalObjectGet(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n const path = evaluate(args[1], ctx) as string;\n const defaultValue = args.length > 2 ? evaluate(args[2], ctx) : undefined;\n\n if (!obj || !path) return defaultValue;\n\n const parts = path.split('.');\n let current: unknown = obj;\n\n for (const part of parts) {\n if (current === null || current === undefined) {\n return defaultValue;\n }\n current = (current as Record<string, unknown>)[part];\n }\n\n return current !== undefined ? current : defaultValue;\n}\n\n/**\n * object/set - Set nested value by path (returns new object)\n */\nexport function evalObjectSet(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n const path = evaluate(args[1], ctx) as string;\n const value = evaluate(args[2], ctx);\n\n if (!path) return obj ?? {};\n\n const result = structuredClone(obj ?? {});\n const parts = path.split('.');\n let current = result;\n\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n if (!current[part] || typeof current[part] !== 'object') {\n current[part] = {};\n }\n current = current[part] as Record<string, unknown>;\n }\n\n current[parts[parts.length - 1]] = value;\n return result;\n}\n\n/**\n * object/has - Check if path exists\n */\nexport function evalObjectHas(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n const path = evaluate(args[1], ctx) as string;\n\n if (!obj || !path) return false;\n\n const parts = path.split('.');\n let current: unknown = obj;\n\n for (const part of parts) {\n if (current === null || current === undefined) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(current, part)) {\n return false;\n }\n current = (current as Record<string, unknown>)[part];\n }\n\n return true;\n}\n\n/**\n * object/merge - Shallow merge objects (later wins)\n */\nexport function evalObjectMerge(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const objects = args.map((a) => evaluate(a, ctx) as Record<string, unknown>);\n return Object.assign({}, ...objects.map((o) => o ?? {}));\n}\n\n/**\n * object/deepMerge - Deep merge objects (later wins)\n */\nexport function evalObjectDeepMerge(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const objects = args.map((a) => evaluate(a, ctx) as Record<string, unknown>);\n\n function deepMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>\n ): Record<string, unknown> {\n const result = { ...target };\n for (const key of Object.keys(source)) {\n if (\n source[key] !== null &&\n typeof source[key] === 'object' &&\n !Array.isArray(source[key]) &&\n target[key] !== null &&\n typeof target[key] === 'object' &&\n !Array.isArray(target[key])\n ) {\n result[key] = deepMerge(\n target[key] as Record<string, unknown>,\n source[key] as Record<string, unknown>\n );\n } else {\n result[key] = source[key];\n }\n }\n return result;\n }\n\n return objects.reduce((acc, obj) => deepMerge(acc, obj ?? {}), {} as Record<string, unknown>);\n}\n\n/**\n * object/pick - Select only specified keys\n */\nexport function evalObjectPick(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n const keys = evaluate(args[1], ctx) as string[];\n\n const result: Record<string, unknown> = {};\n for (const key of keys ?? []) {\n if (obj && Object.prototype.hasOwnProperty.call(obj, key)) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\n/**\n * object/omit - Exclude specified keys\n */\nexport function evalObjectOmit(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n const keys = evaluate(args[1], ctx) as string[];\n\n const keysSet = new Set(keys ?? []);\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(obj ?? {})) {\n if (!keysSet.has(key)) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\n/**\n * object/mapValues - Transform all values\n */\nexport function evalObjectMapValues(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n const lambda = args[1];\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj ?? {})) {\n result[key] = evalLambda(lambda, evaluate, ctx, value);\n }\n return result;\n}\n\n/**\n * object/mapKeys - Transform all keys\n */\nexport function evalObjectMapKeys(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n const lambda = args[1];\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj ?? {})) {\n const newKey = String(evalLambda(lambda, evaluate, ctx, key));\n result[newKey] = value;\n }\n return result;\n}\n\n/**\n * object/filter - Filter entries by predicate\n */\nexport function evalObjectFilter(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n const lambda = args[1];\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj ?? {})) {\n if (evalLambda(lambda, evaluate, ctx, key, value)) {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * object/empty? - Check if object has no keys\n */\nexport function evalObjectEmpty(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n return !obj || Object.keys(obj).length === 0;\n}\n\n/**\n * object/equals - Deep equality check\n */\nexport function evalObjectEquals(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const a = evaluate(args[0], ctx);\n const b = evaluate(args[1], ctx);\n\n function deepEqual(x: unknown, y: unknown): boolean {\n if (x === y) return true;\n if (typeof x !== typeof y) return false;\n if (typeof x !== 'object' || x === null || y === null) return false;\n if (Array.isArray(x) !== Array.isArray(y)) return false;\n\n const xKeys = Object.keys(x);\n const yKeys = Object.keys(y as object);\n if (xKeys.length !== yKeys.length) return false;\n\n for (const key of xKeys) {\n if (!deepEqual((x as Record<string, unknown>)[key], (y as Record<string, unknown>)[key])) {\n return false;\n }\n }\n return true;\n }\n\n return deepEqual(a, b);\n}\n\n/**\n * object/clone - Shallow clone object\n */\nexport function evalObjectClone(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n return { ...(obj ?? {}) };\n}\n\n/**\n * object/deepClone - Deep clone object\n */\nexport function evalObjectDeepClone(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n return structuredClone(obj ?? {});\n}\n\n/**\n * path - Build a dot-separated path string from segments\n *\n * Used for dynamic field access in set effects:\n * [\"set\", [\"path\", \"formValues\", \"@payload.fieldId\"], \"@payload.value\"]\n *\n * @example\n * [\"path\", \"formValues\", \"A9\"] => \"formValues.A9\"\n * [\"path\", \"@entity.prefix\", \"field\"] => \"myPrefix.field\" (if @entity.prefix = \"myPrefix\")\n */\nexport function evalPath(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n if (args.length === 0) {\n throw new Error('path operator requires at least 1 argument');\n }\n\n const segments = args.map((arg) => {\n const evaluated = evaluate(arg, ctx);\n return String(evaluated ?? '');\n });\n\n return segments.join('.');\n}\n","/**\n * Validate Module Runtime Evaluators\n *\n * Runtime implementations for validate/* operators.\n * Provides validation functions for form inputs and data.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype EvalFn = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * validate/required - Check if value is not null, undefined, or empty string\n */\nexport function evalValidateRequired(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n return value !== null && value !== undefined && value !== '';\n}\n\n/**\n * validate/string - Check if value is a string\n */\nexport function evalValidateString(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n return typeof value === 'string';\n}\n\n/**\n * validate/number - Check if value is a number\n */\nexport function evalValidateNumber(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n return typeof value === 'number' && !isNaN(value);\n}\n\n/**\n * validate/boolean - Check if value is a boolean\n */\nexport function evalValidateBoolean(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n return typeof value === 'boolean';\n}\n\n/**\n * validate/array - Check if value is an array\n */\nexport function evalValidateArray(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n return Array.isArray(value);\n}\n\n/**\n * validate/object - Check if value is an object\n */\nexport function evalValidateObject(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * validate/email - Check if value is a valid email format\n */\nexport function evalValidateEmail(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n if (typeof value !== 'string') return false;\n // Simple email regex - covers most valid cases\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(value);\n}\n\n/**\n * validate/url - Check if value is a valid URL format\n */\nexport function evalValidateUrl(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n if (typeof value !== 'string') return false;\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * validate/uuid - Check if value is a valid UUID\n */\nexport function evalValidateUuid(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n if (typeof value !== 'string') return false;\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return uuidRegex.test(value);\n}\n\n/**\n * validate/phone - Check if value is a valid phone number\n */\nexport function evalValidatePhone(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n if (typeof value !== 'string') return false;\n // Simple phone validation - digits, spaces, dashes, parens, and optional leading +\n const phoneRegex = /^\\+?[\\d\\s\\-().]{10,}$/;\n const digits = value.replace(/\\D/g, '');\n return phoneRegex.test(value) && digits.length >= 10;\n}\n\n/**\n * validate/creditCard - Check if value is a valid credit card number (Luhn algorithm)\n */\nexport function evalValidateCreditCard(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n if (typeof value !== 'string') return false;\n\n const digits = value.replace(/\\D/g, '');\n if (digits.length < 13 || digits.length > 19) return false;\n\n // Luhn algorithm\n let sum = 0;\n let isEven = false;\n\n for (let i = digits.length - 1; i >= 0; i--) {\n let digit = parseInt(digits[i], 10);\n if (isEven) {\n digit *= 2;\n if (digit > 9) digit -= 9;\n }\n sum += digit;\n isEven = !isEven;\n }\n\n return sum % 10 === 0;\n}\n\n/**\n * validate/date - Check if value is a valid date\n */\nexport function evalValidateDate(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n if (value instanceof Date) return !isNaN(value.getTime());\n if (typeof value === 'number') return !isNaN(new Date(value).getTime());\n if (typeof value === 'string') return !isNaN(new Date(value).getTime());\n return false;\n}\n\n/**\n * validate/minLength - Check if string/array has minimum length\n */\nexport function evalValidateMinLength(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n const min = evaluate(args[1], ctx) as number;\n\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length >= min;\n }\n return false;\n}\n\n/**\n * validate/maxLength - Check if string/array has maximum length\n */\nexport function evalValidateMaxLength(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n const max = evaluate(args[1], ctx) as number;\n\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length <= max;\n }\n return false;\n}\n\n/**\n * validate/length - Check if string/array has exact length\n */\nexport function evalValidateLength(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n const exact = evaluate(args[1], ctx) as number;\n\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length === exact;\n }\n return false;\n}\n\n/**\n * validate/min - Check if number is >= minimum\n */\nexport function evalValidateMin(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx) as number;\n const min = evaluate(args[1], ctx) as number;\n return typeof value === 'number' && value >= min;\n}\n\n/**\n * validate/max - Check if number is <= maximum\n */\nexport function evalValidateMax(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx) as number;\n const max = evaluate(args[1], ctx) as number;\n return typeof value === 'number' && value <= max;\n}\n\n/**\n * validate/range - Check if number is within range [min, max]\n */\nexport function evalValidateRange(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx) as number;\n const min = evaluate(args[1], ctx) as number;\n const max = evaluate(args[2], ctx) as number;\n return typeof value === 'number' && value >= min && value <= max;\n}\n\n/**\n * validate/pattern - Check if string matches regex pattern\n */\nexport function evalValidatePattern(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n const pattern = evaluate(args[1], ctx) as string;\n\n if (typeof value !== 'string') return false;\n try {\n const regex = new RegExp(pattern);\n return regex.test(value);\n } catch {\n return false;\n }\n}\n\n/**\n * validate/oneOf - Check if value is in list of allowed values\n */\nexport function evalValidateOneOf(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n const options = evaluate(args[1], ctx) as unknown[];\n return (options ?? []).includes(value);\n}\n\n/**\n * validate/noneOf - Check if value is not in list of disallowed values\n */\nexport function evalValidateNoneOf(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n const options = evaluate(args[1], ctx) as unknown[];\n return !(options ?? []).includes(value);\n}\n\n/**\n * validate/equals - Deep equality check\n */\nexport function evalValidateEquals(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const a = evaluate(args[0], ctx);\n const b = evaluate(args[1], ctx);\n\n function deepEqual(x: unknown, y: unknown): boolean {\n if (x === y) return true;\n if (typeof x !== typeof y) return false;\n if (typeof x !== 'object' || x === null || y === null) return false;\n if (Array.isArray(x) !== Array.isArray(y)) return false;\n\n const xKeys = Object.keys(x);\n const yKeys = Object.keys(y as object);\n if (xKeys.length !== yKeys.length) return false;\n\n for (const key of xKeys) {\n if (!deepEqual((x as Record<string, unknown>)[key], (y as Record<string, unknown>)[key])) {\n return false;\n }\n }\n return true;\n }\n\n return deepEqual(a, b);\n}\n\n/**\n * validate/check - Run multiple validation rules, return { valid, errors }\n */\nexport function evalValidateCheck(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): { valid: boolean; errors: string[] } {\n const value = evaluate(args[0], ctx) as Record<string, unknown>;\n const rules = evaluate(args[1], ctx) as Record<string, [string, ...unknown[]][]>;\n\n const errors: string[] = [];\n\n for (const [field, fieldRules] of Object.entries(rules ?? {})) {\n const fieldValue = value?.[field];\n\n for (const rule of fieldRules ?? []) {\n const [ruleName, ...ruleArgs] = rule;\n let isValid = true;\n\n switch (ruleName) {\n case 'required':\n isValid = fieldValue !== null && fieldValue !== undefined && fieldValue !== '';\n break;\n case 'string':\n isValid = typeof fieldValue === 'string';\n break;\n case 'number':\n isValid = typeof fieldValue === 'number' && !isNaN(fieldValue);\n break;\n case 'boolean':\n isValid = typeof fieldValue === 'boolean';\n break;\n case 'email': {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n isValid = typeof fieldValue === 'string' && emailRegex.test(fieldValue);\n break;\n }\n case 'minLength':\n isValid =\n (typeof fieldValue === 'string' || Array.isArray(fieldValue)) &&\n fieldValue.length >= (ruleArgs[0] as number);\n break;\n case 'maxLength':\n isValid =\n (typeof fieldValue === 'string' || Array.isArray(fieldValue)) &&\n fieldValue.length <= (ruleArgs[0] as number);\n break;\n case 'min':\n isValid = typeof fieldValue === 'number' && fieldValue >= (ruleArgs[0] as number);\n break;\n case 'max':\n isValid = typeof fieldValue === 'number' && fieldValue <= (ruleArgs[0] as number);\n break;\n case 'range':\n isValid =\n typeof fieldValue === 'number' &&\n fieldValue >= (ruleArgs[0] as number) &&\n fieldValue <= (ruleArgs[1] as number);\n break;\n case 'pattern': {\n const regex = new RegExp(ruleArgs[0] as string);\n isValid = typeof fieldValue === 'string' && regex.test(fieldValue);\n break;\n }\n case 'oneOf':\n isValid = (ruleArgs[0] as unknown[])?.includes(fieldValue);\n break;\n default:\n // Unknown rule, skip\n continue;\n }\n\n if (!isValid) {\n errors.push(`${field}: ${ruleName} validation failed`);\n }\n }\n }\n\n return { valid: errors.length === 0, errors };\n}\n","/**\n * Time Module Runtime Evaluators\n *\n * Runtime implementations for time/* operators.\n * Provides date manipulation, formatting, and comparison functions.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype EvalFn = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\ntype TimeUnit = 'year' | 'month' | 'week' | 'day' | 'hour' | 'minute' | 'second' | 'ms';\n\nconst MS_PER_SECOND = 1000;\nconst MS_PER_MINUTE = 60 * MS_PER_SECOND;\nconst MS_PER_HOUR = 60 * MS_PER_MINUTE;\nconst MS_PER_DAY = 24 * MS_PER_HOUR;\nconst MS_PER_WEEK = 7 * MS_PER_DAY;\n\n/**\n * time/now - Current timestamp\n */\nexport function evalTimeNow(): number {\n return Date.now();\n}\n\n/**\n * time/today - Today at midnight (local time)\n */\nexport function evalTimeToday(): number {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n return now.getTime();\n}\n\n/**\n * time/parse - Parse string to timestamp\n */\nexport function evalTimeParse(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const str = evaluate(args[0], ctx) as string;\n // Note: format param is accepted but we use native Date parsing\n // A full implementation would need a date parsing library\n const date = new Date(str);\n return date.getTime();\n}\n\n/**\n * time/format - Format timestamp to string\n */\nexport function evalTimeFormat(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const timestamp = evaluate(args[0], ctx) as number;\n const format = evaluate(args[1], ctx) as string;\n\n const date = new Date(timestamp);\n\n // Simple format token replacement\n const tokens: Record<string, string> = {\n YYYY: String(date.getFullYear()),\n YY: String(date.getFullYear()).slice(-2),\n MM: String(date.getMonth() + 1).padStart(2, '0'),\n M: String(date.getMonth() + 1),\n DD: String(date.getDate()).padStart(2, '0'),\n D: String(date.getDate()),\n HH: String(date.getHours()).padStart(2, '0'),\n H: String(date.getHours()),\n mm: String(date.getMinutes()).padStart(2, '0'),\n m: String(date.getMinutes()),\n ss: String(date.getSeconds()).padStart(2, '0'),\n s: String(date.getSeconds()),\n ddd: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][date.getDay()],\n dddd: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][\n date.getDay()\n ],\n MMM: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][\n date.getMonth()\n ],\n MMMM: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ][date.getMonth()],\n };\n\n let result = format;\n for (const [token, value] of Object.entries(tokens)) {\n result = result.replace(new RegExp(token, 'g'), value);\n }\n\n return result;\n}\n\n/**\n * time/year - Get year from timestamp\n */\nexport function evalTimeYear(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n return new Date(timestamp).getFullYear();\n}\n\n/**\n * time/month - Get month from timestamp (1-12)\n */\nexport function evalTimeMonth(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n return new Date(timestamp).getMonth() + 1;\n}\n\n/**\n * time/day - Get day of month from timestamp (1-31)\n */\nexport function evalTimeDay(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n return new Date(timestamp).getDate();\n}\n\n/**\n * time/weekday - Get day of week (0=Sunday, 6=Saturday)\n */\nexport function evalTimeWeekday(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n return new Date(timestamp).getDay();\n}\n\n/**\n * time/hour - Get hour from timestamp (0-23)\n */\nexport function evalTimeHour(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n return new Date(timestamp).getHours();\n}\n\n/**\n * time/minute - Get minute from timestamp (0-59)\n */\nexport function evalTimeMinute(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n return new Date(timestamp).getMinutes();\n}\n\n/**\n * time/second - Get second from timestamp (0-59)\n */\nexport function evalTimeSecond(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n return new Date(timestamp).getSeconds();\n}\n\n/**\n * Helper to add time to a date\n */\nfunction addTime(date: Date, amount: number, unit: TimeUnit): Date {\n const result = new Date(date);\n\n switch (unit) {\n case 'year':\n result.setFullYear(result.getFullYear() + amount);\n break;\n case 'month':\n result.setMonth(result.getMonth() + amount);\n break;\n case 'week':\n result.setDate(result.getDate() + amount * 7);\n break;\n case 'day':\n result.setDate(result.getDate() + amount);\n break;\n case 'hour':\n result.setHours(result.getHours() + amount);\n break;\n case 'minute':\n result.setMinutes(result.getMinutes() + amount);\n break;\n case 'second':\n result.setSeconds(result.getSeconds() + amount);\n break;\n case 'ms':\n result.setMilliseconds(result.getMilliseconds() + amount);\n break;\n }\n\n return result;\n}\n\n/**\n * time/add - Add time to timestamp\n */\nexport function evalTimeAdd(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n const amount = evaluate(args[1], ctx) as number;\n const unit = evaluate(args[2], ctx) as TimeUnit;\n\n const date = new Date(timestamp);\n return addTime(date, amount, unit).getTime();\n}\n\n/**\n * time/subtract - Subtract time from timestamp\n */\nexport function evalTimeSubtract(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n const amount = evaluate(args[1], ctx) as number;\n const unit = evaluate(args[2], ctx) as TimeUnit;\n\n const date = new Date(timestamp);\n return addTime(date, -amount, unit).getTime();\n}\n\n/**\n * time/diff - Difference between timestamps\n */\nexport function evalTimeDiff(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const a = evaluate(args[0], ctx) as number;\n const b = evaluate(args[1], ctx) as number;\n const unit = args.length > 2 ? (evaluate(args[2], ctx) as TimeUnit) : 'ms';\n\n const diffMs = a - b;\n\n switch (unit) {\n case 'year':\n return Math.floor(diffMs / (MS_PER_DAY * 365.25));\n case 'month':\n return Math.floor(diffMs / (MS_PER_DAY * 30.44));\n case 'week':\n return Math.floor(diffMs / MS_PER_WEEK);\n case 'day':\n return Math.floor(diffMs / MS_PER_DAY);\n case 'hour':\n return Math.floor(diffMs / MS_PER_HOUR);\n case 'minute':\n return Math.floor(diffMs / MS_PER_MINUTE);\n case 'second':\n return Math.floor(diffMs / MS_PER_SECOND);\n case 'ms':\n default:\n return diffMs;\n }\n}\n\n/**\n * time/startOf - Get start of time period\n */\nexport function evalTimeStartOf(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n const unit = evaluate(args[1], ctx) as TimeUnit;\n\n const date = new Date(timestamp);\n\n switch (unit) {\n case 'year':\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n break;\n case 'month':\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n break;\n case 'week': {\n const day = date.getDay();\n date.setDate(date.getDate() - day);\n date.setHours(0, 0, 0, 0);\n break;\n }\n case 'day':\n date.setHours(0, 0, 0, 0);\n break;\n case 'hour':\n date.setMinutes(0, 0, 0);\n break;\n case 'minute':\n date.setSeconds(0, 0);\n break;\n }\n\n return date.getTime();\n}\n\n/**\n * time/endOf - Get end of time period\n */\nexport function evalTimeEndOf(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n const unit = evaluate(args[1], ctx) as TimeUnit;\n\n const date = new Date(timestamp);\n\n switch (unit) {\n case 'year':\n date.setMonth(11, 31);\n date.setHours(23, 59, 59, 999);\n break;\n case 'month':\n date.setMonth(date.getMonth() + 1, 0);\n date.setHours(23, 59, 59, 999);\n break;\n case 'week': {\n const day = date.getDay();\n date.setDate(date.getDate() + (6 - day));\n date.setHours(23, 59, 59, 999);\n break;\n }\n case 'day':\n date.setHours(23, 59, 59, 999);\n break;\n case 'hour':\n date.setMinutes(59, 59, 999);\n break;\n case 'minute':\n date.setSeconds(59, 999);\n break;\n }\n\n return date.getTime();\n}\n\n/**\n * time/isBefore - Check if a is before b\n */\nexport function evalTimeIsBefore(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const a = evaluate(args[0], ctx) as number;\n const b = evaluate(args[1], ctx) as number;\n return a < b;\n}\n\n/**\n * time/isAfter - Check if a is after b\n */\nexport function evalTimeIsAfter(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const a = evaluate(args[0], ctx) as number;\n const b = evaluate(args[1], ctx) as number;\n return a > b;\n}\n\n/**\n * time/isBetween - Check if date is between start and end\n */\nexport function evalTimeIsBetween(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const date = evaluate(args[0], ctx) as number;\n const start = evaluate(args[1], ctx) as number;\n const end = evaluate(args[2], ctx) as number;\n return date >= start && date <= end;\n}\n\n/**\n * time/isSame - Check if timestamps are same (optionally by unit)\n */\nexport function evalTimeIsSame(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const a = evaluate(args[0], ctx) as number;\n const b = evaluate(args[1], ctx) as number;\n const unit = args.length > 2 ? (evaluate(args[2], ctx) as TimeUnit) : undefined;\n\n if (!unit) {\n return a === b;\n }\n\n const dateA = new Date(a);\n const dateB = new Date(b);\n\n switch (unit) {\n case 'year':\n return dateA.getFullYear() === dateB.getFullYear();\n case 'month':\n return (\n dateA.getFullYear() === dateB.getFullYear() && dateA.getMonth() === dateB.getMonth()\n );\n case 'day':\n return (\n dateA.getFullYear() === dateB.getFullYear() &&\n dateA.getMonth() === dateB.getMonth() &&\n dateA.getDate() === dateB.getDate()\n );\n case 'hour':\n return (\n dateA.getFullYear() === dateB.getFullYear() &&\n dateA.getMonth() === dateB.getMonth() &&\n dateA.getDate() === dateB.getDate() &&\n dateA.getHours() === dateB.getHours()\n );\n case 'minute':\n return Math.floor(a / MS_PER_MINUTE) === Math.floor(b / MS_PER_MINUTE);\n case 'second':\n return Math.floor(a / MS_PER_SECOND) === Math.floor(b / MS_PER_SECOND);\n default:\n return a === b;\n }\n}\n\n/**\n * time/isPast - Check if timestamp is in the past\n */\nexport function evalTimeIsPast(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const timestamp = evaluate(args[0], ctx) as number;\n return timestamp < Date.now();\n}\n\n/**\n * time/isFuture - Check if timestamp is in the future\n */\nexport function evalTimeIsFuture(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const timestamp = evaluate(args[0], ctx) as number;\n return timestamp > Date.now();\n}\n\n/**\n * time/isToday - Check if timestamp is today\n */\nexport function evalTimeIsToday(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const timestamp = evaluate(args[0], ctx) as number;\n const date = new Date(timestamp);\n const today = new Date();\n\n return (\n date.getFullYear() === today.getFullYear() &&\n date.getMonth() === today.getMonth() &&\n date.getDate() === today.getDate()\n );\n}\n\n/**\n * time/relative - Format as relative time (\"2 hours ago\", \"in 3 days\")\n */\nexport function evalTimeRelative(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const timestamp = evaluate(args[0], ctx) as number;\n const now = Date.now();\n const diff = timestamp - now;\n const absDiff = Math.abs(diff);\n const isPast = diff < 0;\n\n let value: number;\n let unit: string;\n\n if (absDiff < MS_PER_MINUTE) {\n return 'just now';\n } else if (absDiff < MS_PER_HOUR) {\n value = Math.round(absDiff / MS_PER_MINUTE);\n unit = value === 1 ? 'minute' : 'minutes';\n } else if (absDiff < MS_PER_DAY) {\n value = Math.round(absDiff / MS_PER_HOUR);\n unit = value === 1 ? 'hour' : 'hours';\n } else if (absDiff < MS_PER_WEEK) {\n value = Math.round(absDiff / MS_PER_DAY);\n unit = value === 1 ? 'day' : 'days';\n } else if (absDiff < MS_PER_DAY * 30) {\n value = Math.round(absDiff / MS_PER_WEEK);\n unit = value === 1 ? 'week' : 'weeks';\n } else if (absDiff < MS_PER_DAY * 365) {\n value = Math.round(absDiff / (MS_PER_DAY * 30));\n unit = value === 1 ? 'month' : 'months';\n } else {\n value = Math.round(absDiff / (MS_PER_DAY * 365));\n unit = value === 1 ? 'year' : 'years';\n }\n\n return isPast ? `${value} ${unit} ago` : `in ${value} ${unit}`;\n}\n\n/**\n * time/duration - Format milliseconds as duration (\"2h 30m\")\n */\nexport function evalTimeDuration(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n let ms = evaluate(args[0], ctx) as number;\n\n if (ms < 0) ms = -ms;\n\n const parts: string[] = [];\n\n if (ms >= MS_PER_DAY) {\n const days = Math.floor(ms / MS_PER_DAY);\n parts.push(`${days}d`);\n ms %= MS_PER_DAY;\n }\n\n if (ms >= MS_PER_HOUR) {\n const hours = Math.floor(ms / MS_PER_HOUR);\n parts.push(`${hours}h`);\n ms %= MS_PER_HOUR;\n }\n\n if (ms >= MS_PER_MINUTE) {\n const minutes = Math.floor(ms / MS_PER_MINUTE);\n parts.push(`${minutes}m`);\n ms %= MS_PER_MINUTE;\n }\n\n if (ms >= MS_PER_SECOND && parts.length < 2) {\n const seconds = Math.floor(ms / MS_PER_SECOND);\n parts.push(`${seconds}s`);\n }\n\n return parts.length > 0 ? parts.join(' ') : '0s';\n}\n","/**\n * Format Module Runtime Evaluators\n *\n * Runtime implementations for format/* operators.\n * Provides formatting functions for numbers, currencies, and display values.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype EvalFn = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * format/number - Format number with locale-aware separators\n */\nexport function evalFormatNumber(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const n = evaluate(args[0], ctx) as number;\n const opts = args.length > 1 ? (evaluate(args[1], ctx) as { decimals?: number; locale?: string }) : {};\n\n const locale = opts?.locale ?? 'en-US';\n const options: Intl.NumberFormatOptions = {};\n\n if (opts?.decimals !== undefined) {\n options.minimumFractionDigits = opts.decimals;\n options.maximumFractionDigits = opts.decimals;\n }\n\n return new Intl.NumberFormat(locale, options).format(n);\n}\n\n/**\n * format/currency - Format as currency\n */\nexport function evalFormatCurrency(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const n = evaluate(args[0], ctx) as number;\n const currency = evaluate(args[1], ctx) as string;\n const locale = args.length > 2 ? (evaluate(args[2], ctx) as string) : 'en-US';\n\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: currency,\n }).format(n);\n}\n\n/**\n * format/percent - Format as percentage\n */\nexport function evalFormatPercent(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const n = evaluate(args[0], ctx) as number;\n const decimals = args.length > 1 ? (evaluate(args[1], ctx) as number) : 0;\n\n return new Intl.NumberFormat('en-US', {\n style: 'percent',\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(n);\n}\n\n/**\n * format/bytes - Format bytes as human-readable size\n */\nexport function evalFormatBytes(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const bytes = evaluate(args[0], ctx) as number;\n\n if (bytes === 0) return '0 B';\n\n const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const k = 1024;\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n const value = bytes / Math.pow(k, i);\n // Use different precision rules\n if (i === 0) {\n return `${bytes} B`;\n }\n // Round values >= 10, or use 1 decimal for smaller values\n // Also remove .0 for whole numbers\n let formatted: string;\n if (value >= 10) {\n formatted = String(Math.round(value));\n } else if (Number.isInteger(value)) {\n formatted = String(value);\n } else {\n formatted = value.toFixed(1);\n }\n\n return `${formatted} ${units[i]}`;\n}\n\n/**\n * format/ordinal - Format number as ordinal (1st, 2nd, 3rd)\n */\nexport function evalFormatOrdinal(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const n = evaluate(args[0], ctx) as number;\n\n const absN = Math.abs(n);\n const lastDigit = absN % 10;\n const lastTwoDigits = absN % 100;\n\n let suffix: string;\n if (lastTwoDigits >= 11 && lastTwoDigits <= 13) {\n suffix = 'th';\n } else if (lastDigit === 1) {\n suffix = 'st';\n } else if (lastDigit === 2) {\n suffix = 'nd';\n } else if (lastDigit === 3) {\n suffix = 'rd';\n } else {\n suffix = 'th';\n }\n\n return `${n}${suffix}`;\n}\n\n/**\n * format/plural - Format count with singular/plural word\n */\nexport function evalFormatPlural(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const n = evaluate(args[0], ctx) as number;\n const singular = evaluate(args[1], ctx) as string;\n const plural = evaluate(args[2], ctx) as string;\n\n return `${n} ${Math.abs(n) === 1 ? singular : plural}`;\n}\n\n/**\n * format/list - Format array as natural language list\n */\nexport function evalFormatList(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const arr = evaluate(args[0], ctx) as string[];\n const style = args.length > 1 ? (evaluate(args[1], ctx) as 'and' | 'or') : 'and';\n\n if (!arr || arr.length === 0) return '';\n if (arr.length === 1) return arr[0];\n if (arr.length === 2) return `${arr[0]} ${style} ${arr[1]}`;\n\n const last = arr[arr.length - 1];\n const rest = arr.slice(0, -1);\n return `${rest.join(', ')}, ${style} ${last}`;\n}\n\n/**\n * format/phone - Format phone number\n */\nexport function evalFormatPhone(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const str = evaluate(args[0], ctx) as string;\n const format = args.length > 1 ? (evaluate(args[1], ctx) as string) : 'US';\n\n // Extract only digits\n const digits = str?.replace(/\\D/g, '') ?? '';\n\n if (format === 'US' && digits.length === 10) {\n return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6)}`;\n }\n\n if (format === 'US' && digits.length === 11 && digits[0] === '1') {\n return `+1 (${digits.slice(1, 4)}) ${digits.slice(4, 7)}-${digits.slice(7)}`;\n }\n\n // Default: group into chunks of 3-4\n if (digits.length >= 10) {\n return `${digits.slice(0, 3)}-${digits.slice(3, 6)}-${digits.slice(6)}`;\n }\n\n return str;\n}\n\n/**\n * format/creditCard - Format credit card with masked digits\n */\nexport function evalFormatCreditCard(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const str = evaluate(args[0], ctx) as string;\n\n const digits = str?.replace(/\\D/g, '') ?? '';\n\n if (digits.length < 4) return str;\n\n // Show only last 4 digits\n const lastFour = digits.slice(-4);\n const masked = '•'.repeat(digits.length - 4);\n\n // Format in groups of 4\n const combined = masked + lastFour;\n return combined.match(/.{1,4}/g)?.join(' ') ?? combined;\n}\n","/**\n * Async Module Runtime Evaluators\n *\n * Runtime implementations for async/* operators.\n * Provides functions for handling async operations, delays, and timing.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype EvalFn = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n// Debounce timers keyed by event name\nconst debounceTimers = new Map<string, ReturnType<typeof setTimeout>>();\n\n// Throttle timestamps keyed by event name\nconst throttleTimestamps = new Map<string, number>();\n\n/**\n * async/delay - Wait for specified milliseconds\n */\nexport async function evalAsyncDelay(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Promise<void> {\n const ms = evaluate(args[0], ctx) as number;\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * async/timeout - Add timeout to an effect\n */\nexport async function evalAsyncTimeout(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Promise<unknown> {\n const effect = args[0];\n const ms = evaluate(args[1], ctx) as number;\n\n return Promise.race([\n Promise.resolve().then(() => evaluate(effect, ctx)),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error('Timeout exceeded')), ms)\n ),\n ]);\n}\n\n/**\n * async/debounce - Debounce an event (wait for pause in events)\n */\nexport function evalAsyncDebounce(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): void {\n const event = evaluate(args[0], ctx) as string;\n const ms = evaluate(args[1], ctx) as number;\n\n // Clear existing timer if any\n const existingTimer = debounceTimers.get(event);\n if (existingTimer) {\n clearTimeout(existingTimer);\n }\n\n // Set new timer\n const timer = setTimeout(() => {\n debounceTimers.delete(event);\n // Emit the event\n ctx.emit?.(event);\n }, ms);\n\n debounceTimers.set(event, timer);\n}\n\n/**\n * async/throttle - Throttle an event (emit at most once per interval)\n */\nexport function evalAsyncThrottle(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): void {\n const event = evaluate(args[0], ctx) as string;\n const ms = evaluate(args[1], ctx) as number;\n\n const now = Date.now();\n const lastTimestamp = throttleTimestamps.get(event) ?? 0;\n\n if (now - lastTimestamp >= ms) {\n throttleTimestamps.set(event, now);\n ctx.emit?.(event);\n }\n}\n\n/**\n * async/retry - Retry an effect with configurable backoff\n */\nexport async function evalAsyncRetry(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Promise<unknown> {\n const effect = args[0];\n const opts = evaluate(args[1], ctx) as {\n attempts?: number;\n backoff?: 'fixed' | 'linear' | 'exponential';\n baseDelay?: number;\n };\n\n const attempts = opts?.attempts ?? 3;\n const backoff = opts?.backoff ?? 'exponential';\n const baseDelay = opts?.baseDelay ?? 1000;\n\n let lastError: unknown;\n\n for (let i = 0; i < attempts; i++) {\n try {\n return await Promise.resolve().then(() => evaluate(effect, ctx));\n } catch (error) {\n lastError = error;\n\n if (i < attempts - 1) {\n // Calculate delay based on backoff strategy\n let delay: number;\n switch (backoff) {\n case 'fixed':\n delay = baseDelay;\n break;\n case 'linear':\n delay = baseDelay * (i + 1);\n break;\n case 'exponential':\n default:\n delay = baseDelay * Math.pow(2, i);\n break;\n }\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n }\n\n throw lastError;\n}\n\n/**\n * async/race - Execute effects in parallel, return first to complete\n */\nexport async function evalAsyncRace(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Promise<unknown> {\n const promises = args.map((effect) =>\n Promise.resolve().then(() => evaluate(effect, ctx))\n );\n return Promise.race(promises);\n}\n\n/**\n * async/all - Execute effects in parallel, wait for all to complete\n */\nexport async function evalAsyncAll(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Promise<unknown[]> {\n const promises = args.map((effect) =>\n Promise.resolve().then(() => evaluate(effect, ctx))\n );\n return Promise.all(promises);\n}\n\n/**\n * async/sequence - Execute effects in sequence (one after another)\n */\nexport async function evalAsyncSequence(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Promise<unknown[]> {\n const results: unknown[] = [];\n\n for (const effect of args) {\n const result = await Promise.resolve().then(() => evaluate(effect, ctx));\n results.push(result);\n }\n\n return results;\n}\n\n/**\n * Clear debounce timers (for testing/cleanup)\n */\nexport function clearDebounceTimers(): void {\n for (const timer of debounceTimers.values()) {\n clearTimeout(timer);\n }\n debounceTimers.clear();\n}\n\n/**\n * Clear throttle timestamps (for testing/cleanup)\n */\nexport function clearThrottleTimestamps(): void {\n throttleTimestamps.clear();\n}\n","/**\n * S-Expression Evaluator\n *\n * Runtime interpreter for S-expressions.\n * Used for evaluating guards and executing effects in the preview system.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from './types/expression.js';\nimport { isSExpr, isBinding, getOperator, getArgs } from './types/expression.js';\nimport type { EvaluationContext } from './context.js';\nimport { resolveBinding } from './context.js';\n\n// Import operators\nimport {\n evalAdd,\n evalSubtract,\n evalMultiply,\n evalDivide,\n evalModulo,\n evalAbs,\n evalMin,\n evalMax,\n evalFloor,\n evalCeil,\n evalRound,\n evalClamp,\n evalEqual,\n evalNotEqual,\n evalLessThan,\n evalGreaterThan,\n evalLessThanOrEqual,\n evalGreaterThanOrEqual,\n evalMatches,\n evalAnd,\n evalOr,\n evalNot,\n evalIf,\n evalLet,\n evalDo,\n evalWhen,\n evalMap,\n evalFilter,\n evalFind,\n evalCount,\n evalSum,\n evalFirst,\n evalLast,\n evalNth,\n evalConcat,\n evalIncludes,\n evalEmpty,\n evalSet,\n evalSetDynamic,\n evalIncrement,\n evalDecrement,\n evalEmit,\n evalPersist,\n evalNavigate,\n evalNotify,\n evalSpawn,\n evalDespawn,\n evalCallService,\n evalRenderUI,\n} from './operators/index.js';\n\n// Import std library evaluators\nimport * as stdMath from './std/math.js';\nimport * as stdStr from './std/str.js';\nimport * as stdArray from './std/array.js';\nimport * as stdObject from './std/object.js';\nimport * as stdValidate from './std/validate.js';\nimport * as stdTime from './std/time.js';\nimport * as stdFormat from './std/format.js';\nimport * as stdAsync from './std/async.js';\n\n/**\n * JIT compilation cache for hot paths.\n * Maps S-expression JSON to compiled function.\n */\nconst jitCache = new Map<string, (ctx: EvaluationContext) => unknown>();\n\n/**\n * Maximum JIT cache size to prevent memory issues.\n */\nconst MAX_JIT_CACHE_SIZE = 1000;\n\n/**\n * S-Expression Evaluator class.\n *\n * Provides runtime interpretation of S-expressions for guards, effects, and computed values.\n */\nexport class SExpressionEvaluator {\n /**\n * Evaluate an S-expression in the given context.\n *\n * @param expr - S-expression to evaluate\n * @param ctx - Evaluation context with bindings and effect handlers\n * @returns Result of evaluation\n */\n evaluate(expr: SExpr, ctx: EvaluationContext): unknown {\n // Atom: literal value\n if (!isSExpr(expr)) {\n // Check if it's a binding\n if (isBinding(expr)) {\n return resolveBinding(expr, ctx);\n }\n // Return literal value\n return expr;\n }\n\n // S-expression call\n const op = getOperator(expr)!;\n const args = getArgs(expr);\n\n // Dispatch to operator implementation\n return this.dispatchOperator(op, args, ctx);\n }\n\n /**\n * Evaluate an S-expression as a guard (returns boolean).\n *\n * @param expr - S-expression guard\n * @param ctx - Evaluation context\n * @returns true if guard passes, false otherwise\n */\n evaluateGuard(expr: SExpr, ctx: EvaluationContext): boolean {\n const result = this.evaluate(expr, ctx);\n return Boolean(result);\n }\n\n /**\n * Execute an effect S-expression.\n *\n * @param expr - Effect S-expression (e.g., [\"set\", \"@entity.x\", 10])\n * @param ctx - Evaluation context with effect handlers\n */\n executeEffect(expr: SExpr, ctx: EvaluationContext): void {\n this.evaluate(expr, ctx);\n }\n\n /**\n * Execute multiple effects in sequence.\n *\n * @param effects - Array of effect S-expressions\n * @param ctx - Evaluation context with effect handlers\n */\n executeEffects(effects: SExpr[], ctx: EvaluationContext): void {\n for (const effect of effects) {\n this.executeEffect(effect, ctx);\n }\n }\n\n /**\n * Compile an S-expression to a function for faster repeated evaluation.\n * Uses a cache to avoid recompilation.\n *\n * @param expr - S-expression to compile\n * @returns Function that evaluates the expression given a context\n */\n compile(expr: SExpr): (ctx: EvaluationContext) => unknown {\n const key = JSON.stringify(expr);\n\n // Check cache\n const cached = jitCache.get(key);\n if (cached) {\n return cached;\n }\n\n // Compile to function\n const fn = (ctx: EvaluationContext) => this.evaluate(expr, ctx);\n\n // Add to cache (with size limit)\n if (jitCache.size >= MAX_JIT_CACHE_SIZE) {\n // Remove oldest entry (first key)\n const firstKey = jitCache.keys().next().value;\n if (firstKey) {\n jitCache.delete(firstKey);\n }\n }\n jitCache.set(key, fn);\n\n return fn;\n }\n\n /**\n * Clear the JIT compilation cache.\n */\n clearCache(): void {\n jitCache.clear();\n }\n\n /**\n * Dispatch to the appropriate operator implementation.\n */\n private dispatchOperator(op: string, args: SExpr[], ctx: EvaluationContext): unknown {\n // Bind evaluate method for passing to operator implementations\n const evaluate = (expr: SExpr, c: EvaluationContext) => this.evaluate(expr, c);\n\n switch (op) {\n // Arithmetic\n case '+':\n return evalAdd(args, evaluate, ctx);\n case '-':\n return evalSubtract(args, evaluate, ctx);\n case '*':\n return evalMultiply(args, evaluate, ctx);\n case '/':\n return evalDivide(args, evaluate, ctx);\n case '%':\n return evalModulo(args, evaluate, ctx);\n case 'abs':\n return evalAbs(args, evaluate, ctx);\n case 'min':\n return evalMin(args, evaluate, ctx);\n case 'max':\n return evalMax(args, evaluate, ctx);\n case 'floor':\n return evalFloor(args, evaluate, ctx);\n case 'ceil':\n return evalCeil(args, evaluate, ctx);\n case 'round':\n return evalRound(args, evaluate, ctx);\n case 'clamp':\n return evalClamp(args, evaluate, ctx);\n\n // Comparison\n case '=':\n return evalEqual(args, evaluate, ctx);\n case '!=':\n return evalNotEqual(args, evaluate, ctx);\n case '<':\n return evalLessThan(args, evaluate, ctx);\n case '>':\n return evalGreaterThan(args, evaluate, ctx);\n case '<=':\n return evalLessThanOrEqual(args, evaluate, ctx);\n case '>=':\n return evalGreaterThanOrEqual(args, evaluate, ctx);\n case 'matches':\n return evalMatches(args, evaluate, ctx);\n\n // Logic\n case 'and':\n return evalAnd(args, evaluate, ctx);\n case 'or':\n return evalOr(args, evaluate, ctx);\n case 'not':\n return evalNot(args, evaluate, ctx);\n case 'if':\n return evalIf(args, evaluate, ctx);\n\n // Control\n case 'let':\n return evalLet(args, evaluate, ctx);\n case 'do':\n return evalDo(args, evaluate, ctx);\n case 'when':\n return evalWhen(args, evaluate, ctx);\n\n // Collections\n case 'map':\n return evalMap(args, evaluate, ctx);\n case 'filter':\n return evalFilter(args, evaluate, ctx);\n case 'find':\n return evalFind(args, evaluate, ctx);\n case 'count':\n return evalCount(args, evaluate, ctx);\n case 'sum':\n return evalSum(args, evaluate, ctx);\n case 'first':\n return evalFirst(args, evaluate, ctx);\n case 'last':\n return evalLast(args, evaluate, ctx);\n case 'nth':\n return evalNth(args, evaluate, ctx);\n case 'concat':\n return evalConcat(args, evaluate, ctx);\n case 'includes':\n return evalIncludes(args, evaluate, ctx);\n case 'empty':\n return evalEmpty(args, evaluate, ctx);\n\n // Effects\n case 'set':\n evalSet(args, evaluate, ctx);\n return undefined;\n case 'set-dynamic':\n evalSetDynamic(args, evaluate, ctx);\n return undefined;\n case 'increment':\n evalIncrement(args, evaluate, ctx);\n return undefined;\n case 'decrement':\n evalDecrement(args, evaluate, ctx);\n return undefined;\n case 'emit':\n evalEmit(args, evaluate, ctx);\n return undefined;\n case 'persist':\n evalPersist(args, evaluate, ctx);\n return undefined;\n case 'navigate':\n evalNavigate(args, evaluate, ctx);\n return undefined;\n case 'notify':\n evalNotify(args, evaluate, ctx);\n return undefined;\n case 'spawn':\n evalSpawn(args, evaluate, ctx);\n return undefined;\n case 'despawn':\n evalDespawn(args, evaluate, ctx);\n return undefined;\n case 'call-service':\n evalCallService(args, evaluate, ctx);\n return undefined;\n case 'render-ui':\n evalRenderUI(args, evaluate, ctx);\n return undefined;\n\n // ===============================\n // Standard Library: math/*\n // ===============================\n case 'math/abs':\n return stdMath.evalMathAbs(args, evaluate, ctx);\n case 'math/min':\n return stdMath.evalMathMin(args, evaluate, ctx);\n case 'math/max':\n return stdMath.evalMathMax(args, evaluate, ctx);\n case 'math/clamp':\n return stdMath.evalMathClamp(args, evaluate, ctx);\n case 'math/floor':\n return stdMath.evalMathFloor(args, evaluate, ctx);\n case 'math/ceil':\n return stdMath.evalMathCeil(args, evaluate, ctx);\n case 'math/round':\n return stdMath.evalMathRound(args, evaluate, ctx);\n case 'math/pow':\n return stdMath.evalMathPow(args, evaluate, ctx);\n case 'math/sqrt':\n return stdMath.evalMathSqrt(args, evaluate, ctx);\n case 'math/mod':\n return stdMath.evalMathMod(args, evaluate, ctx);\n case 'math/sign':\n return stdMath.evalMathSign(args, evaluate, ctx);\n case 'math/lerp':\n return stdMath.evalMathLerp(args, evaluate, ctx);\n case 'math/map':\n return stdMath.evalMathMap(args, evaluate, ctx);\n case 'math/random':\n return stdMath.evalMathRandom();\n case 'math/randomInt':\n return stdMath.evalMathRandomInt(args, evaluate, ctx);\n case 'math/default':\n return stdMath.evalMathDefault(args, evaluate, ctx);\n\n // ===============================\n // Standard Library: str/*\n // ===============================\n case 'str/len':\n return stdStr.evalStrLen(args, evaluate, ctx);\n case 'str/concat':\n return stdStr.evalStrConcat(args, evaluate, ctx);\n case 'str/upper':\n return stdStr.evalStrUpper(args, evaluate, ctx);\n case 'str/lower':\n return stdStr.evalStrLower(args, evaluate, ctx);\n case 'str/trim':\n return stdStr.evalStrTrim(args, evaluate, ctx);\n case 'str/trimStart':\n return stdStr.evalStrTrimStart(args, evaluate, ctx);\n case 'str/trimEnd':\n return stdStr.evalStrTrimEnd(args, evaluate, ctx);\n case 'str/split':\n return stdStr.evalStrSplit(args, evaluate, ctx);\n case 'str/join':\n return stdStr.evalStrJoin(args, evaluate, ctx);\n case 'str/slice':\n return stdStr.evalStrSlice(args, evaluate, ctx);\n case 'str/replace':\n return stdStr.evalStrReplace(args, evaluate, ctx);\n case 'str/replaceAll':\n return stdStr.evalStrReplaceAll(args, evaluate, ctx);\n case 'str/includes':\n return stdStr.evalStrIncludes(args, evaluate, ctx);\n case 'str/startsWith':\n return stdStr.evalStrStartsWith(args, evaluate, ctx);\n case 'str/endsWith':\n return stdStr.evalStrEndsWith(args, evaluate, ctx);\n case 'str/padStart':\n return stdStr.evalStrPadStart(args, evaluate, ctx);\n case 'str/padEnd':\n return stdStr.evalStrPadEnd(args, evaluate, ctx);\n case 'str/repeat':\n return stdStr.evalStrRepeat(args, evaluate, ctx);\n case 'str/reverse':\n return stdStr.evalStrReverse(args, evaluate, ctx);\n case 'str/capitalize':\n return stdStr.evalStrCapitalize(args, evaluate, ctx);\n case 'str/titleCase':\n return stdStr.evalStrTitleCase(args, evaluate, ctx);\n case 'str/camelCase':\n return stdStr.evalStrCamelCase(args, evaluate, ctx);\n case 'str/kebabCase':\n return stdStr.evalStrKebabCase(args, evaluate, ctx);\n case 'str/snakeCase':\n return stdStr.evalStrSnakeCase(args, evaluate, ctx);\n case 'str/default':\n return stdStr.evalStrDefault(args, evaluate, ctx);\n case 'str/template':\n return stdStr.evalStrTemplate(args, evaluate, ctx);\n case 'str/truncate':\n return stdStr.evalStrTruncate(args, evaluate, ctx);\n\n // ===============================\n // Standard Library: array/*\n // ===============================\n case 'array/len':\n return stdArray.evalArrayLen(args, evaluate, ctx);\n case 'array/empty?':\n return stdArray.evalArrayEmpty(args, evaluate, ctx);\n case 'array/first':\n return stdArray.evalArrayFirst(args, evaluate, ctx);\n case 'array/last':\n return stdArray.evalArrayLast(args, evaluate, ctx);\n case 'array/nth':\n return stdArray.evalArrayNth(args, evaluate, ctx);\n case 'array/slice':\n return stdArray.evalArraySlice(args, evaluate, ctx);\n case 'array/concat':\n return stdArray.evalArrayConcat(args, evaluate, ctx);\n case 'array/append':\n return stdArray.evalArrayAppend(args, evaluate, ctx);\n case 'array/prepend':\n return stdArray.evalArrayPrepend(args, evaluate, ctx);\n case 'array/insert':\n return stdArray.evalArrayInsert(args, evaluate, ctx);\n case 'array/remove':\n return stdArray.evalArrayRemove(args, evaluate, ctx);\n case 'array/removeItem':\n return stdArray.evalArrayRemoveItem(args, evaluate, ctx);\n case 'array/reverse':\n return stdArray.evalArrayReverse(args, evaluate, ctx);\n case 'array/sort':\n return stdArray.evalArraySort(args, evaluate, ctx);\n case 'array/shuffle':\n return stdArray.evalArrayShuffle(args, evaluate, ctx);\n case 'array/unique':\n return stdArray.evalArrayUnique(args, evaluate, ctx);\n case 'array/flatten':\n return stdArray.evalArrayFlatten(args, evaluate, ctx);\n case 'array/zip':\n return stdArray.evalArrayZip(args, evaluate, ctx);\n case 'array/includes':\n return stdArray.evalArrayIncludes(args, evaluate, ctx);\n case 'array/indexOf':\n return stdArray.evalArrayIndexOf(args, evaluate, ctx);\n case 'array/find':\n return stdArray.evalArrayFind(args, evaluate, ctx);\n case 'array/findIndex':\n return stdArray.evalArrayFindIndex(args, evaluate, ctx);\n case 'array/filter':\n return stdArray.evalArrayFilter(args, evaluate, ctx);\n case 'array/reject':\n return stdArray.evalArrayReject(args, evaluate, ctx);\n case 'array/map':\n return stdArray.evalArrayMap(args, evaluate, ctx);\n case 'array/reduce':\n return stdArray.evalArrayReduce(args, evaluate, ctx);\n case 'array/every':\n return stdArray.evalArrayEvery(args, evaluate, ctx);\n case 'array/some':\n return stdArray.evalArraySome(args, evaluate, ctx);\n case 'array/count':\n return stdArray.evalArrayCount(args, evaluate, ctx);\n case 'array/sum':\n return stdArray.evalArraySum(args, evaluate, ctx);\n case 'array/avg':\n return stdArray.evalArrayAvg(args, evaluate, ctx);\n case 'array/min':\n return stdArray.evalArrayMin(args, evaluate, ctx);\n case 'array/max':\n return stdArray.evalArrayMax(args, evaluate, ctx);\n case 'array/groupBy':\n return stdArray.evalArrayGroupBy(args, evaluate, ctx);\n case 'array/partition':\n return stdArray.evalArrayPartition(args, evaluate, ctx);\n case 'array/take':\n return stdArray.evalArrayTake(args, evaluate, ctx);\n case 'array/drop':\n return stdArray.evalArrayDrop(args, evaluate, ctx);\n case 'array/takeLast':\n return stdArray.evalArrayTakeLast(args, evaluate, ctx);\n case 'array/dropLast':\n return stdArray.evalArrayDropLast(args, evaluate, ctx);\n\n // ===============================\n // Standard Library: object/*\n // ===============================\n case 'object/keys':\n return stdObject.evalObjectKeys(args, evaluate, ctx);\n case 'object/values':\n return stdObject.evalObjectValues(args, evaluate, ctx);\n case 'object/entries':\n return stdObject.evalObjectEntries(args, evaluate, ctx);\n case 'object/fromEntries':\n return stdObject.evalObjectFromEntries(args, evaluate, ctx);\n case 'object/get':\n return stdObject.evalObjectGet(args, evaluate, ctx);\n case 'object/set':\n return stdObject.evalObjectSet(args, evaluate, ctx);\n case 'object/has':\n return stdObject.evalObjectHas(args, evaluate, ctx);\n case 'object/merge':\n return stdObject.evalObjectMerge(args, evaluate, ctx);\n case 'object/deepMerge':\n return stdObject.evalObjectDeepMerge(args, evaluate, ctx);\n case 'object/pick':\n return stdObject.evalObjectPick(args, evaluate, ctx);\n case 'object/omit':\n return stdObject.evalObjectOmit(args, evaluate, ctx);\n case 'object/mapValues':\n return stdObject.evalObjectMapValues(args, evaluate, ctx);\n case 'object/mapKeys':\n return stdObject.evalObjectMapKeys(args, evaluate, ctx);\n case 'object/filter':\n return stdObject.evalObjectFilter(args, evaluate, ctx);\n case 'object/empty?':\n return stdObject.evalObjectEmpty(args, evaluate, ctx);\n case 'object/equals':\n return stdObject.evalObjectEquals(args, evaluate, ctx);\n case 'object/clone':\n return stdObject.evalObjectClone(args, evaluate, ctx);\n case 'object/deepClone':\n return stdObject.evalObjectDeepClone(args, evaluate, ctx);\n\n // Path operator (for dynamic field access)\n case 'path':\n return stdObject.evalPath(args, evaluate, ctx);\n\n // ===============================\n // Standard Library: validate/*\n // ===============================\n case 'validate/required':\n return stdValidate.evalValidateRequired(args, evaluate, ctx);\n case 'validate/string':\n return stdValidate.evalValidateString(args, evaluate, ctx);\n case 'validate/number':\n return stdValidate.evalValidateNumber(args, evaluate, ctx);\n case 'validate/boolean':\n return stdValidate.evalValidateBoolean(args, evaluate, ctx);\n case 'validate/array':\n return stdValidate.evalValidateArray(args, evaluate, ctx);\n case 'validate/object':\n return stdValidate.evalValidateObject(args, evaluate, ctx);\n case 'validate/email':\n return stdValidate.evalValidateEmail(args, evaluate, ctx);\n case 'validate/url':\n return stdValidate.evalValidateUrl(args, evaluate, ctx);\n case 'validate/uuid':\n return stdValidate.evalValidateUuid(args, evaluate, ctx);\n case 'validate/phone':\n return stdValidate.evalValidatePhone(args, evaluate, ctx);\n case 'validate/creditCard':\n return stdValidate.evalValidateCreditCard(args, evaluate, ctx);\n case 'validate/date':\n return stdValidate.evalValidateDate(args, evaluate, ctx);\n case 'validate/minLength':\n return stdValidate.evalValidateMinLength(args, evaluate, ctx);\n case 'validate/maxLength':\n return stdValidate.evalValidateMaxLength(args, evaluate, ctx);\n case 'validate/length':\n return stdValidate.evalValidateLength(args, evaluate, ctx);\n case 'validate/min':\n return stdValidate.evalValidateMin(args, evaluate, ctx);\n case 'validate/max':\n return stdValidate.evalValidateMax(args, evaluate, ctx);\n case 'validate/range':\n return stdValidate.evalValidateRange(args, evaluate, ctx);\n case 'validate/pattern':\n return stdValidate.evalValidatePattern(args, evaluate, ctx);\n case 'validate/oneOf':\n return stdValidate.evalValidateOneOf(args, evaluate, ctx);\n case 'validate/noneOf':\n return stdValidate.evalValidateNoneOf(args, evaluate, ctx);\n case 'validate/equals':\n return stdValidate.evalValidateEquals(args, evaluate, ctx);\n case 'validate/check':\n return stdValidate.evalValidateCheck(args, evaluate, ctx);\n\n // ===============================\n // Standard Library: time/*\n // ===============================\n case 'time/now':\n return stdTime.evalTimeNow();\n case 'time/today':\n return stdTime.evalTimeToday();\n case 'time/parse':\n return stdTime.evalTimeParse(args, evaluate, ctx);\n case 'time/format':\n return stdTime.evalTimeFormat(args, evaluate, ctx);\n case 'time/year':\n return stdTime.evalTimeYear(args, evaluate, ctx);\n case 'time/month':\n return stdTime.evalTimeMonth(args, evaluate, ctx);\n case 'time/day':\n return stdTime.evalTimeDay(args, evaluate, ctx);\n case 'time/weekday':\n return stdTime.evalTimeWeekday(args, evaluate, ctx);\n case 'time/hour':\n return stdTime.evalTimeHour(args, evaluate, ctx);\n case 'time/minute':\n return stdTime.evalTimeMinute(args, evaluate, ctx);\n case 'time/second':\n return stdTime.evalTimeSecond(args, evaluate, ctx);\n case 'time/add':\n return stdTime.evalTimeAdd(args, evaluate, ctx);\n case 'time/subtract':\n return stdTime.evalTimeSubtract(args, evaluate, ctx);\n case 'time/diff':\n return stdTime.evalTimeDiff(args, evaluate, ctx);\n case 'time/startOf':\n return stdTime.evalTimeStartOf(args, evaluate, ctx);\n case 'time/endOf':\n return stdTime.evalTimeEndOf(args, evaluate, ctx);\n case 'time/isBefore':\n return stdTime.evalTimeIsBefore(args, evaluate, ctx);\n case 'time/isAfter':\n return stdTime.evalTimeIsAfter(args, evaluate, ctx);\n case 'time/isBetween':\n return stdTime.evalTimeIsBetween(args, evaluate, ctx);\n case 'time/isSame':\n return stdTime.evalTimeIsSame(args, evaluate, ctx);\n case 'time/isPast':\n return stdTime.evalTimeIsPast(args, evaluate, ctx);\n case 'time/isFuture':\n return stdTime.evalTimeIsFuture(args, evaluate, ctx);\n case 'time/isToday':\n return stdTime.evalTimeIsToday(args, evaluate, ctx);\n case 'time/relative':\n return stdTime.evalTimeRelative(args, evaluate, ctx);\n case 'time/duration':\n return stdTime.evalTimeDuration(args, evaluate, ctx);\n\n // ===============================\n // Standard Library: format/*\n // ===============================\n case 'format/number':\n return stdFormat.evalFormatNumber(args, evaluate, ctx);\n case 'format/currency':\n return stdFormat.evalFormatCurrency(args, evaluate, ctx);\n case 'format/percent':\n return stdFormat.evalFormatPercent(args, evaluate, ctx);\n case 'format/bytes':\n return stdFormat.evalFormatBytes(args, evaluate, ctx);\n case 'format/ordinal':\n return stdFormat.evalFormatOrdinal(args, evaluate, ctx);\n case 'format/plural':\n return stdFormat.evalFormatPlural(args, evaluate, ctx);\n case 'format/list':\n return stdFormat.evalFormatList(args, evaluate, ctx);\n case 'format/phone':\n return stdFormat.evalFormatPhone(args, evaluate, ctx);\n case 'format/creditCard':\n return stdFormat.evalFormatCreditCard(args, evaluate, ctx);\n\n // ===============================\n // Standard Library: async/*\n // ===============================\n case 'async/delay':\n return stdAsync.evalAsyncDelay(args, evaluate, ctx);\n case 'async/timeout':\n return stdAsync.evalAsyncTimeout(args, evaluate, ctx);\n case 'async/debounce':\n stdAsync.evalAsyncDebounce(args, evaluate, ctx);\n return undefined;\n case 'async/throttle':\n stdAsync.evalAsyncThrottle(args, evaluate, ctx);\n return undefined;\n case 'async/retry':\n return stdAsync.evalAsyncRetry(args, evaluate, ctx);\n case 'async/race':\n return stdAsync.evalAsyncRace(args, evaluate, ctx);\n case 'async/all':\n return stdAsync.evalAsyncAll(args, evaluate, ctx);\n case 'async/sequence':\n return stdAsync.evalAsyncSequence(args, evaluate, ctx);\n\n default:\n console.warn(`Unknown operator: ${op}`);\n return undefined;\n }\n }\n}\n\n// Export singleton instance for convenience\nexport const evaluator = new SExpressionEvaluator();\n\n// Export convenience functions\nexport function evaluate(expr: SExpr, ctx: EvaluationContext): unknown {\n return evaluator.evaluate(expr, ctx);\n}\n\nexport function evaluateGuard(expr: SExpr, ctx: EvaluationContext): boolean {\n return evaluator.evaluateGuard(expr, ctx);\n}\n\nexport function executeEffect(expr: SExpr, ctx: EvaluationContext): void {\n evaluator.executeEffect(expr, ctx);\n}\n\nexport function executeEffects(effects: SExpr[], ctx: EvaluationContext): void {\n evaluator.executeEffects(effects, ctx);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../context.ts","../operators/arithmetic.ts","../operators/comparison.ts","../operators/logic.ts","../operators/control.ts","../operators/collections.ts","../operators/effects.ts","../std/math.ts","../std/str.ts","../std/array.ts","../std/object.ts","../std/validate.ts","../std/time.ts","../std/format.ts","../std/async.ts","../SExpressionEvaluator.ts"],"names":["evaluate","toNumber","evalLambda","deepEqual"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Evaluation Context\n *\n * Defines the context for evaluating S-expressions at runtime.\n * This context provides access to entity data, payload, state, and effect handlers.\n *\n * @packageDocumentation\n */\n\n/**\n * User context for @user bindings (role-based UI).\n */\nexport interface UserContext {\n /** User's unique ID */\n id: string;\n /** User's email */\n email?: string;\n /** User's display name */\n name?: string;\n /** User's role (for RBAC) */\n role?: string;\n /** User's permissions */\n permissions?: string[];\n /** Additional custom profile fields */\n [key: string]: unknown;\n}\n\n/**\n * Evaluation context for S-expression evaluation.\n * Provides all bindings and effect handlers needed at runtime.\n */\nexport interface EvaluationContext {\n /** Entity data for @entity bindings */\n entity: Record<string, unknown>;\n\n /** Payload data for @payload bindings */\n payload: Record<string, unknown>;\n\n /** Current state for @state binding */\n state: string;\n\n /** Current timestamp for @now binding (defaults to Date.now()) */\n now: number;\n\n /** User data for @user bindings (role-based UI) */\n user?: UserContext;\n\n /** Singleton entities for @EntityName bindings */\n singletons: Map<string, Record<string, unknown>>;\n\n /** Local variables from 'let' bindings */\n locals?: Map<string, unknown>;\n\n /**\n * When true, log warnings when bindings resolve to undefined. (RCG-01)\n * Helps detect typos and missing entity fields early.\n */\n strictBindings?: boolean;\n\n // ============================================================================\n // Effect Handlers (for executing side effects)\n // ============================================================================\n\n /** Mutate entity fields */\n mutateEntity?: (changes: Record<string, unknown>) => void;\n\n /** Emit an event */\n emit?: (event: string, payload?: unknown) => void;\n\n /** Navigate to a route */\n navigate?: (route: string, params?: Record<string, unknown>) => void;\n\n /** Persist data (create/update/delete/batch) */\n persist?: (action: 'create' | 'update' | 'delete' | 'batch', data?: Record<string, unknown>) => Promise<void>;\n\n /** Show a notification */\n notify?: (message: string, type?: 'success' | 'error' | 'warning' | 'info') => void;\n\n /** Spawn a new entity instance */\n spawn?: (entityType: string, props?: Record<string, unknown>) => void;\n\n /** Despawn an entity instance */\n despawn?: (entityId?: string) => void;\n\n /** Call an external service */\n callService?: (service: string, method: string, params?: Record<string, unknown>) => Promise<unknown>;\n\n /** Render UI to a slot */\n renderUI?: (slot: string, pattern: unknown, props?: Record<string, unknown>, priority?: number) => void;\n}\n\n/**\n * Create a minimal evaluation context for testing/guards.\n * Only includes bindings, no effect handlers.\n */\nexport function createMinimalContext(\n entity: Record<string, unknown> = {},\n payload: Record<string, unknown> = {},\n state: string = 'initial'\n): EvaluationContext {\n return {\n entity,\n payload,\n state,\n now: Date.now(),\n singletons: new Map(),\n };\n}\n\n/**\n * Create a context with effect handlers.\n * Used for runtime evaluation where effects need to execute.\n */\nexport function createEffectContext(\n base: EvaluationContext,\n handlers: Partial<Pick<EvaluationContext,\n 'mutateEntity' | 'emit' | 'navigate' | 'persist' | 'notify' | 'spawn' | 'despawn' | 'callService' | 'renderUI'\n >>\n): EvaluationContext {\n return {\n ...base,\n ...handlers,\n };\n}\n\n/**\n * Create a child context with additional local bindings.\n * Used for 'let' expressions.\n */\nexport function createChildContext(\n parent: EvaluationContext,\n locals: Map<string, unknown>\n): EvaluationContext {\n // Merge parent locals with new locals\n const mergedLocals = new Map(parent.locals);\n locals.forEach((value, key) => mergedLocals.set(key, value));\n\n return {\n ...parent,\n locals: mergedLocals,\n };\n}\n\n/**\n * Resolve a binding in the context.\n *\n * @param binding - Binding string (e.g., \"@entity.health\", \"@payload.amount\")\n * @param ctx - Evaluation context\n * @returns Resolved value or undefined\n */\nexport function resolveBinding(binding: string, ctx: EvaluationContext): unknown {\n if (!binding.startsWith('@')) {\n return undefined;\n }\n\n const withoutPrefix = binding.slice(1);\n const parts = withoutPrefix.split('.');\n const root = parts[0];\n const path = parts.slice(1);\n\n let value: unknown;\n\n // Check locals first\n if (ctx.locals?.has(root)) {\n value = ctx.locals.get(root);\n } else {\n // Core bindings\n switch (root) {\n case 'entity':\n value = ctx.entity;\n break;\n case 'payload':\n value = ctx.payload;\n break;\n case 'state':\n return ctx.state; // @state has no path\n case 'now':\n return ctx.now; // @now has no path\n case 'user':\n value = ctx.user;\n break;\n default:\n // Singleton entity reference (@EntityName.field)\n value = ctx.singletons.get(root);\n break;\n }\n }\n\n // Navigate path\n for (let i = 0; i < path.length; i++) {\n const segment = path[i];\n if (value === null || value === undefined) {\n if (ctx.strictBindings) {\n const resolvedSoFar = [root, ...path.slice(0, i)].join('.');\n console.warn(\n `[Binding] @${root}.${path.join('.')} resolved to undefined ` +\n `(failed at \"${segment}\" — @${resolvedSoFar} is ${value === null ? 'null' : 'undefined'})`\n );\n }\n return undefined;\n }\n if (typeof value === 'object') {\n value = (value as Record<string, unknown>)[segment];\n } else {\n if (ctx.strictBindings) {\n const resolvedSoFar = [root, ...path.slice(0, i)].join('.');\n console.warn(\n `[Binding] @${root}.${path.join('.')} resolved to undefined ` +\n `(cannot navigate \"${segment}\" on non-object at @${resolvedSoFar})`\n );\n }\n return undefined;\n }\n }\n\n if (value === undefined && path.length > 0 && ctx.strictBindings) {\n console.warn(\n `[Binding] @${root}.${path.join('.')} resolved to undefined`\n );\n }\n\n return value;\n}\n","/**\n * Arithmetic Operator Implementations\n *\n * Implements: +, -, *, /, %, abs, min, max, floor, ceil, round, clamp\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype Evaluator = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * Evaluate addition: [\"+\", a, b, ...]\n */\nexport function evalAdd(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n return args.reduce((sum: number, arg) => sum + toNumber(evaluate(arg, ctx)), 0);\n}\n\n/**\n * Evaluate subtraction: [\"-\", a] (negate) or [\"-\", a, b] (subtract)\n */\nexport function evalSubtract(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n if (args.length === 1) {\n return -toNumber(evaluate(args[0], ctx));\n }\n return toNumber(evaluate(args[0], ctx)) - toNumber(evaluate(args[1], ctx));\n}\n\n/**\n * Evaluate multiplication: [\"*\", a, b, ...]\n */\nexport function evalMultiply(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n return args.reduce((product: number, arg) => product * toNumber(evaluate(arg, ctx)), 1);\n}\n\n/**\n * Evaluate division: [\"/\", a, b]\n */\nexport function evalDivide(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n const dividend = toNumber(evaluate(args[0], ctx));\n const divisor = toNumber(evaluate(args[1], ctx));\n if (divisor === 0) {\n return dividend >= 0 ? Infinity : -Infinity;\n }\n return dividend / divisor;\n}\n\n/**\n * Evaluate modulo: [\"%\", a, b]\n */\nexport function evalModulo(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n return toNumber(evaluate(args[0], ctx)) % toNumber(evaluate(args[1], ctx));\n}\n\n/**\n * Evaluate absolute value: [\"abs\", a]\n */\nexport function evalAbs(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n return Math.abs(toNumber(evaluate(args[0], ctx)));\n}\n\n/**\n * Evaluate minimum: [\"min\", a, b, ...]\n */\nexport function evalMin(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n const values = args.map((arg) => toNumber(evaluate(arg, ctx)));\n return Math.min(...values);\n}\n\n/**\n * Evaluate maximum: [\"max\", a, b, ...]\n */\nexport function evalMax(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n const values = args.map((arg) => toNumber(evaluate(arg, ctx)));\n return Math.max(...values);\n}\n\n/**\n * Evaluate floor: [\"floor\", a]\n */\nexport function evalFloor(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n return Math.floor(toNumber(evaluate(args[0], ctx)));\n}\n\n/**\n * Evaluate ceiling: [\"ceil\", a]\n */\nexport function evalCeil(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n return Math.ceil(toNumber(evaluate(args[0], ctx)));\n}\n\n/**\n * Evaluate round: [\"round\", a]\n */\nexport function evalRound(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n return Math.round(toNumber(evaluate(args[0], ctx)));\n}\n\n/**\n * Evaluate clamp: [\"clamp\", value, min, max]\n */\nexport function evalClamp(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n const value = toNumber(evaluate(args[0], ctx));\n const min = toNumber(evaluate(args[1], ctx));\n const max = toNumber(evaluate(args[2], ctx));\n return Math.max(min, Math.min(max, value));\n}\n\n/**\n * Convert a value to a number, defaulting to 0 for non-numbers.\n */\nfunction toNumber(value: unknown): number {\n if (typeof value === 'number') return value;\n if (typeof value === 'string') {\n const parsed = parseFloat(value);\n return isNaN(parsed) ? 0 : parsed;\n }\n if (typeof value === 'boolean') return value ? 1 : 0;\n return 0;\n}\n","/**\n * Comparison Operator Implementations\n *\n * Implements: =, !=, <, >, <=, >=\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype Evaluator = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * Evaluate equality: [\"=\", a, b]\n * Uses strict equality (===) for type safety.\n */\nexport function evalEqual(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const left = evaluate(args[0], ctx);\n const right = evaluate(args[1], ctx);\n return deepEqual(left, right);\n}\n\n/**\n * Evaluate not-equal: [\"!=\", a, b]\n */\nexport function evalNotEqual(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const left = evaluate(args[0], ctx);\n const right = evaluate(args[1], ctx);\n return !deepEqual(left, right);\n}\n\n/**\n * Evaluate less-than: [\"<\", a, b]\n */\nexport function evalLessThan(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const left = evaluate(args[0], ctx);\n const right = evaluate(args[1], ctx);\n return toComparable(left) < toComparable(right);\n}\n\n/**\n * Evaluate greater-than: [\">\", a, b]\n */\nexport function evalGreaterThan(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const left = evaluate(args[0], ctx);\n const right = evaluate(args[1], ctx);\n return toComparable(left) > toComparable(right);\n}\n\n/**\n * Evaluate less-than-or-equal: [\"<=\", a, b]\n */\nexport function evalLessThanOrEqual(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const left = evaluate(args[0], ctx);\n const right = evaluate(args[1], ctx);\n return toComparable(left) <= toComparable(right);\n}\n\n/**\n * Evaluate greater-than-or-equal: [\">=\", a, b]\n */\nexport function evalGreaterThanOrEqual(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const left = evaluate(args[0], ctx);\n const right = evaluate(args[1], ctx);\n return toComparable(left) >= toComparable(right);\n}\n\n/**\n * Evaluate regex match: [\"matches\", subject, pattern]\n * Returns true if subject matches the regex pattern.\n */\nexport function evalMatches(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const subject = evaluate(args[0], ctx);\n const pattern = evaluate(args[1], ctx);\n\n if (typeof subject !== 'string' || typeof pattern !== 'string') {\n return false;\n }\n\n try {\n const regex = new RegExp(pattern);\n return regex.test(subject);\n } catch {\n // Invalid regex pattern\n return false;\n }\n}\n\n/**\n * Deep equality check for objects and arrays.\n */\nfunction deepEqual(a: unknown, b: unknown): boolean {\n // Primitive equality\n if (a === b) return true;\n\n // Null/undefined checks\n if (a === null || b === null) return a === b;\n if (a === undefined || b === undefined) return a === b;\n\n // Type checks\n if (typeof a !== typeof b) return false;\n\n // Array equality\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((val, idx) => deepEqual(val, b[idx]));\n }\n\n // Object equality\n if (typeof a === 'object' && typeof b === 'object') {\n const keysA = Object.keys(a as object);\n const keysB = Object.keys(b as object);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((key) =>\n deepEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key])\n );\n }\n\n return false;\n}\n\n/**\n * Convert to a comparable value for ordering operations.\n */\nfunction toComparable(value: unknown): number | string {\n if (typeof value === 'number') return value;\n if (typeof value === 'string') return value;\n if (typeof value === 'boolean') return value ? 1 : 0;\n if (value === null || value === undefined) return 0;\n return String(value);\n}\n","/**\n * Logic Operator Implementations\n *\n * Implements: and, or, not, if\n * All logic operators support short-circuit evaluation.\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype Evaluator = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * Evaluate logical AND: [\"and\", a, b, ...]\n * Short-circuits: returns false as soon as any argument is falsy.\n */\nexport function evalAnd(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n for (const arg of args) {\n if (!toBoolean(evaluate(arg, ctx))) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Evaluate logical OR: [\"or\", a, b, ...]\n * Short-circuits: returns true as soon as any argument is truthy.\n */\nexport function evalOr(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n for (const arg of args) {\n if (toBoolean(evaluate(arg, ctx))) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Evaluate logical NOT: [\"not\", a]\n */\nexport function evalNot(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n return !toBoolean(evaluate(args[0], ctx));\n}\n\n/**\n * Evaluate conditional: [\"if\", condition, then, else]\n * Only evaluates the branch that matches the condition.\n */\nexport function evalIf(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown {\n const condition = toBoolean(evaluate(args[0], ctx));\n if (condition) {\n return evaluate(args[1], ctx);\n }\n return evaluate(args[2], ctx);\n}\n\n/**\n * Convert a value to boolean.\n * Follows JavaScript truthy/falsy semantics:\n * - false, 0, '', null, undefined, NaN are falsy\n * - Everything else is truthy\n */\nfunction toBoolean(value: unknown): boolean {\n return Boolean(value);\n}\n","/**\n * Control Operator Implementations\n *\n * Implements: let, do, when, fn\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\nimport { createChildContext } from '../context.js';\n\ntype Evaluator = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * Evaluate let binding: [\"let\", [[name, value], ...], body]\n * Creates local bindings for use in body.\n */\nexport function evalLet(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown {\n const bindings = args[0] as SExpr[][];\n const body = args[1];\n\n // Evaluate bindings and create new context\n const locals = new Map<string, unknown>();\n for (const binding of bindings) {\n const name = binding[0] as string;\n const value = evaluate(binding[1], ctx);\n locals.set(name, value);\n }\n\n // Evaluate body with new context\n const childCtx = createChildContext(ctx, locals);\n return evaluate(body, childCtx);\n}\n\n/**\n * Evaluate do block: [\"do\", expr1, expr2, ...]\n * Executes expressions in sequence, returns last result.\n */\nexport function evalDo(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown {\n let result: unknown = undefined;\n for (const expr of args) {\n result = evaluate(expr, ctx);\n }\n return result;\n}\n\n/**\n * Evaluate when: [\"when\", condition, effect]\n * Executes effect only when condition is truthy.\n */\nexport function evalWhen(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const condition = evaluate(args[0], ctx);\n if (Boolean(condition)) {\n evaluate(args[1], ctx);\n }\n}\n\n/**\n * Evaluate lambda: [\"fn\", varName, body] or [\"fn\", [vars], body]\n * Creates a function that can be passed to collection operators.\n */\nexport function evalFn(\n args: SExpr[],\n _evaluate: Evaluator,\n _ctx: EvaluationContext\n): (item: unknown, evaluate: Evaluator, ctx: EvaluationContext) => unknown {\n const params = args[0];\n const body = args[1];\n\n // Return a closure that can be called with an item\n return (item: unknown, evaluate: Evaluator, ctx: EvaluationContext) => {\n const locals = new Map<string, unknown>();\n\n // Handle single variable or array of variables\n if (typeof params === 'string') {\n locals.set(params, item);\n } else if (Array.isArray(params)) {\n const itemArray = Array.isArray(item) ? item : [item];\n for (let i = 0; i < params.length; i++) {\n locals.set(params[i] as string, itemArray[i]);\n }\n }\n\n const childCtx = createChildContext(ctx, locals);\n return evaluate(body, childCtx);\n };\n}\n","/**\n * Collection Operator Implementations\n *\n * Implements: map, filter, find, count, sum, first, last, nth, concat, includes, empty\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\nimport { createChildContext } from '../context.js';\n\ntype Evaluator = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * Evaluate map: [\"map\", collection, [\"fn\", varName, body]]\n */\nexport function evalMap(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown[] {\n const collection = toArray(evaluate(args[0], ctx));\n const fnExpr = args[1] as SExpr[];\n\n // Get function params and body\n const params = fnExpr[1];\n const body = fnExpr[2];\n const varName = typeof params === 'string' ? params : (params as SExpr[])[0] as string;\n\n return collection.map((item) => {\n const locals = new Map<string, unknown>();\n locals.set(varName, item);\n const childCtx = createChildContext(ctx, locals);\n return evaluate(body, childCtx);\n });\n}\n\n/**\n * Evaluate filter: [\"filter\", collection, [\"fn\", varName, predicate]]\n */\nexport function evalFilter(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown[] {\n const collection = toArray(evaluate(args[0], ctx));\n const fnExpr = args[1] as SExpr[];\n\n const params = fnExpr[1];\n const body = fnExpr[2];\n const varName = typeof params === 'string' ? params : (params as SExpr[])[0] as string;\n\n return collection.filter((item) => {\n const locals = new Map<string, unknown>();\n locals.set(varName, item);\n const childCtx = createChildContext(ctx, locals);\n return Boolean(evaluate(body, childCtx));\n });\n}\n\n/**\n * Evaluate find: [\"find\", collection, [\"fn\", varName, predicate]]\n */\nexport function evalFind(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown {\n const collection = toArray(evaluate(args[0], ctx));\n const fnExpr = args[1] as SExpr[];\n\n const params = fnExpr[1];\n const body = fnExpr[2];\n const varName = typeof params === 'string' ? params : (params as SExpr[])[0] as string;\n\n return collection.find((item) => {\n const locals = new Map<string, unknown>();\n locals.set(varName, item);\n const childCtx = createChildContext(ctx, locals);\n return Boolean(evaluate(body, childCtx));\n });\n}\n\n/**\n * Evaluate count: [\"count\", collection]\n */\nexport function evalCount(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n const collection = toArray(evaluate(args[0], ctx));\n return collection.length;\n}\n\n/**\n * Evaluate sum: [\"sum\", collection] or [\"sum\", collection, [\"fn\", varName, mapper]]\n */\nexport function evalSum(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): number {\n const collection = toArray(evaluate(args[0], ctx));\n\n if (args.length === 1) {\n // Direct sum\n return collection.reduce((sum: number, item) => sum + toNumber(item), 0);\n }\n\n // Sum with mapper function\n const fnExpr = args[1] as SExpr[];\n const params = fnExpr[1];\n const body = fnExpr[2];\n const varName = typeof params === 'string' ? params : (params as SExpr[])[0] as string;\n\n return collection.reduce((sum: number, item) => {\n const locals = new Map<string, unknown>();\n locals.set(varName, item);\n const childCtx = createChildContext(ctx, locals);\n return sum + toNumber(evaluate(body, childCtx));\n }, 0);\n}\n\n/**\n * Evaluate first: [\"first\", collection]\n */\nexport function evalFirst(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown {\n const collection = toArray(evaluate(args[0], ctx));\n return collection.length > 0 ? collection[0] : undefined;\n}\n\n/**\n * Evaluate last: [\"last\", collection]\n */\nexport function evalLast(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown {\n const collection = toArray(evaluate(args[0], ctx));\n return collection.length > 0 ? collection[collection.length - 1] : undefined;\n}\n\n/**\n * Evaluate nth: [\"nth\", collection, index]\n */\nexport function evalNth(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown {\n const collection = toArray(evaluate(args[0], ctx));\n const index = toNumber(evaluate(args[1], ctx));\n return collection[index];\n}\n\n/**\n * Evaluate concat: [\"concat\", collection1, collection2, ...]\n */\nexport function evalConcat(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown[] {\n const result: unknown[] = [];\n for (const arg of args) {\n const collection = toArray(evaluate(arg, ctx));\n result.push(...collection);\n }\n return result;\n}\n\n/**\n * Evaluate includes: [\"includes\", collection, element]\n */\nexport function evalIncludes(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const collection = toArray(evaluate(args[0], ctx));\n const element = evaluate(args[1], ctx);\n return collection.includes(element);\n}\n\n/**\n * Evaluate empty: [\"empty\", collection]\n */\nexport function evalEmpty(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): boolean {\n const collection = toArray(evaluate(args[0], ctx));\n return collection.length === 0;\n}\n\n/**\n * Convert a value to an array.\n */\nfunction toArray(value: unknown): unknown[] {\n if (Array.isArray(value)) return value;\n if (value === null || value === undefined) return [];\n return [value];\n}\n\n/**\n * Convert a value to a number.\n */\nfunction toNumber(value: unknown): number {\n if (typeof value === 'number') return value;\n if (typeof value === 'string') {\n const parsed = parseFloat(value);\n return isNaN(parsed) ? 0 : parsed;\n }\n return 0;\n}\n","/**\n * Effect Operator Implementations\n *\n * Implements: set, emit, persist, navigate, notify, spawn, despawn, call-service, render-ui\n *\n * Effect operators have side effects and require effect handlers in the context.\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\nimport { resolveBinding } from '../context.js';\n\ntype Evaluator = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * Evaluate set: [\"set\", \"@entity.field\", value] or [\"set\", \"@entity.field\", value, operation]\n */\nexport function evalSet(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const binding = args[0] as string;\n const value = evaluate(args[1], ctx);\n const operation = args[2] as string | undefined;\n\n if (!ctx.mutateEntity) {\n console.warn('No mutateEntity handler in context for set effect');\n return;\n }\n\n // Parse the binding to get the field name\n if (!binding.startsWith('@entity.')) {\n console.warn(`set only supports @entity bindings, got: ${binding}`);\n return;\n }\n\n const fieldPath = binding.slice(8); // Remove \"@entity.\"\n\n // Handle different operations\n let finalValue = value;\n if (operation) {\n const currentValue = resolveBinding(binding, ctx);\n switch (operation) {\n case 'increment':\n finalValue = toNumber(currentValue) + toNumber(value);\n break;\n case 'decrement':\n finalValue = toNumber(currentValue) - toNumber(value);\n break;\n case 'multiply':\n finalValue = toNumber(currentValue) * toNumber(value);\n break;\n case 'append':\n finalValue = Array.isArray(currentValue) ? [...currentValue, value] : [value];\n break;\n case 'remove':\n finalValue = Array.isArray(currentValue) ? currentValue.filter((v) => v !== value) : [];\n break;\n default:\n // No operation, use value directly\n break;\n }\n }\n\n ctx.mutateEntity({ [fieldPath]: finalValue });\n}\n\n/**\n * Evaluate emit: [\"emit\", eventKey] or [\"emit\", eventKey, payload]\n */\nexport function evalEmit(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const eventKey = args[0] as string;\n const payload = args.length > 1 ? evaluate(args[1], ctx) : undefined;\n\n if (!ctx.emit) {\n console.warn('No emit handler in context for emit effect');\n return;\n }\n\n ctx.emit(eventKey, payload);\n}\n\n/**\n * Evaluate persist:\n * - [\"persist\", action] or [\"persist\", action, data]\n * Actions: \"create\", \"update\", \"delete\"\n * - [\"persist\", \"batch\", [...operations]]\n * Batch action for atomic multi-document writes.\n * Each operation is an S-expression: [\"create\", \"collection\", {...data}],\n * [\"update\", \"collection\", \"id\", {...data}], or [\"delete\", \"collection\", \"id\"].\n */\nexport function evalPersist(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const action = args[0] as 'create' | 'update' | 'delete' | 'batch';\n\n if (!ctx.persist) {\n console.warn('No persist handler in context for persist effect');\n return;\n }\n\n if (action === 'batch') {\n // Batch mode: [\"persist\", \"batch\", [...operations]]\n const rawOps = args[1];\n if (!Array.isArray(rawOps)) {\n console.warn('persist batch requires an array of operations as second argument');\n return;\n }\n // Evaluate each operation's data arguments\n const operations = rawOps.map((op) => {\n if (!Array.isArray(op)) return op;\n return (op as SExpr[]).map((item) => evaluate(item, ctx));\n });\n ctx.persist('batch', { operations } as Record<string, unknown>).catch((err) => {\n console.error('Persist batch failed:', err);\n });\n return;\n }\n\n // Single operation mode\n const data = args.length > 1 ? (evaluate(args[1], ctx) as Record<string, unknown>) : ctx.payload;\n\n // Fire and forget (async)\n ctx.persist(action, data as Record<string, unknown>).catch((err) => {\n console.error(`Persist ${action} failed:`, err);\n });\n}\n\n/**\n * Evaluate navigate: [\"navigate\", route] or [\"navigate\", route, params]\n */\nexport function evalNavigate(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const route = args[0] as string;\n const params = args.length > 1 ? (evaluate(args[1], ctx) as Record<string, unknown>) : undefined;\n\n if (!ctx.navigate) {\n console.warn('No navigate handler in context for navigate effect');\n return;\n }\n\n ctx.navigate(route, params);\n}\n\n/**\n * Evaluate notify: [\"notify\", message] or [\"notify\", message, type]\n */\nexport function evalNotify(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const message = String(evaluate(args[0], ctx));\n const type = (args[1] as 'success' | 'error' | 'warning' | 'info') || 'info';\n\n if (!ctx.notify) {\n console.warn('No notify handler in context for notify effect');\n return;\n }\n\n ctx.notify(message, type);\n}\n\n/**\n * Evaluate spawn: [\"spawn\", entityType] or [\"spawn\", entityType, props]\n */\nexport function evalSpawn(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const entityType = args[0] as string;\n const props = args.length > 1 ? (evaluate(args[1], ctx) as Record<string, unknown>) : undefined;\n\n if (!ctx.spawn) {\n console.warn('No spawn handler in context for spawn effect');\n return;\n }\n\n ctx.spawn(entityType, props);\n}\n\n/**\n * Evaluate despawn: [\"despawn\"] or [\"despawn\", entityId]\n */\nexport function evalDespawn(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const entityId = args.length > 0 ? String(evaluate(args[0], ctx)) : undefined;\n\n if (!ctx.despawn) {\n console.warn('No despawn handler in context for despawn effect');\n return;\n }\n\n ctx.despawn(entityId);\n}\n\n/**\n * Evaluate call-service: [\"call-service\", service, method] or [\"call-service\", service, method, params]\n */\nexport function evalCallService(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const service = args[0] as string;\n const method = args[1] as string;\n const params = args.length > 2 ? (evaluate(args[2], ctx) as Record<string, unknown>) : undefined;\n\n if (!ctx.callService) {\n console.warn('No callService handler in context for call-service effect');\n return;\n }\n\n // Fire and forget (async)\n ctx.callService(service, method, params).catch((err) => {\n console.error(`Service call ${service}.${method} failed:`, err);\n });\n}\n\n/**\n * Evaluate render-ui:\n * - [\"render-ui\", slot, pattern]\n * - [\"render-ui\", slot, pattern, props]\n * - [\"render-ui\", slot, pattern, props, priority]\n * - [\"render-ui\", slot, null] - clears the slot\n */\nexport function evalRenderUI(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const slot = args[0] as string;\n const pattern = evaluate(args[1], ctx);\n const props = args.length > 2 ? (evaluate(args[2], ctx) as Record<string, unknown>) : undefined;\n const priority = args.length > 3 ? (evaluate(args[3], ctx) as number) : undefined;\n\n if (!ctx.renderUI) {\n console.warn('No renderUI handler in context for render-ui effect');\n return;\n }\n\n // Handle null pattern as \"clear slot\"\n if (pattern === null || pattern === undefined) {\n ctx.renderUI(slot, { type: 'clear' }, undefined, priority);\n return;\n }\n\n ctx.renderUI(slot, pattern, props, priority);\n}\n\n/**\n * Evaluate set-dynamic: [\"set-dynamic\", pathExpr, value]\n * Used for dynamic field paths computed at runtime.\n * The pathExpr should evaluate to a dot-separated path string.\n */\nexport function evalSetDynamic(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const pathExpr = evaluate(args[0], ctx) as string;\n const value = evaluate(args[1], ctx);\n\n if (!ctx.mutateEntity) {\n console.warn('No mutateEntity handler in context for set-dynamic effect');\n return;\n }\n\n if (!pathExpr || typeof pathExpr !== 'string') {\n console.warn(`set-dynamic requires a valid path string, got: ${pathExpr}`);\n return;\n }\n\n // pathExpr is already a dot-separated path (e.g., \"formValues.A9\")\n ctx.mutateEntity({ [pathExpr]: value });\n}\n\n/**\n * Evaluate increment: [\"increment\", \"@entity.field\"] or [\"increment\", \"@entity.field\", amount]\n */\nexport function evalIncrement(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const binding = args[0] as string;\n const amount = args.length > 1 ? toNumber(evaluate(args[1], ctx)) : 1;\n\n if (!ctx.mutateEntity) {\n console.warn('No mutateEntity handler in context for increment effect');\n return;\n }\n\n if (!binding.startsWith('@entity.')) {\n console.warn(`increment only supports @entity bindings, got: ${binding}`);\n return;\n }\n\n const fieldPath = binding.slice(8); // Remove \"@entity.\"\n const currentValue = resolveBinding(binding, ctx);\n const newValue = toNumber(currentValue) + amount;\n\n ctx.mutateEntity({ [fieldPath]: newValue });\n}\n\n/**\n * Evaluate decrement: [\"decrement\", \"@entity.field\"] or [\"decrement\", \"@entity.field\", amount]\n */\nexport function evalDecrement(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void {\n const binding = args[0] as string;\n const amount = args.length > 1 ? toNumber(evaluate(args[1], ctx)) : 1;\n\n if (!ctx.mutateEntity) {\n console.warn('No mutateEntity handler in context for decrement effect');\n return;\n }\n\n if (!binding.startsWith('@entity.')) {\n console.warn(`decrement only supports @entity bindings, got: ${binding}`);\n return;\n }\n\n const fieldPath = binding.slice(8); // Remove \"@entity.\"\n const currentValue = resolveBinding(binding, ctx);\n const newValue = toNumber(currentValue) - amount;\n\n ctx.mutateEntity({ [fieldPath]: newValue });\n}\n\n/**\n * Convert a value to a number.\n */\nfunction toNumber(value: unknown): number {\n if (typeof value === 'number') return value;\n if (typeof value === 'string') {\n const parsed = parseFloat(value);\n return isNaN(parsed) ? 0 : parsed;\n }\n return 0;\n}\n","/**\n * Math Module Runtime Evaluators\n *\n * Runtime implementations for math/* operators.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype EvalFn = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * math/abs - Absolute value\n */\nexport function evalMathAbs(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx) as number;\n return Math.abs(n);\n}\n\n/**\n * math/min - Minimum of values\n */\nexport function evalMathMin(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const values = args.map((a) => evaluate(a, ctx) as number);\n return Math.min(...values);\n}\n\n/**\n * math/max - Maximum of values\n */\nexport function evalMathMax(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const values = args.map((a) => evaluate(a, ctx) as number);\n return Math.max(...values);\n}\n\n/**\n * math/clamp - Constrain value to range [min, max]\n */\nexport function evalMathClamp(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx) as number;\n const min = evaluate(args[1], ctx) as number;\n const max = evaluate(args[2], ctx) as number;\n return Math.min(Math.max(n, min), max);\n}\n\n/**\n * math/floor - Round down to integer\n */\nexport function evalMathFloor(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx) as number;\n return Math.floor(n);\n}\n\n/**\n * math/ceil - Round up to integer\n */\nexport function evalMathCeil(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx) as number;\n return Math.ceil(n);\n}\n\n/**\n * math/round - Round to nearest integer or specified decimals\n */\nexport function evalMathRound(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx) as number;\n const decimals = args.length > 1 ? (evaluate(args[1], ctx) as number) : 0;\n if (decimals === 0) {\n return Math.round(n);\n }\n const factor = Math.pow(10, decimals);\n return Math.round(n * factor) / factor;\n}\n\n/**\n * math/pow - Exponentiation (base^exp)\n */\nexport function evalMathPow(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const base = evaluate(args[0], ctx) as number;\n const exp = evaluate(args[1], ctx) as number;\n return Math.pow(base, exp);\n}\n\n/**\n * math/sqrt - Square root\n */\nexport function evalMathSqrt(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx) as number;\n return Math.sqrt(n);\n}\n\n/**\n * math/mod - Modulo (remainder)\n */\nexport function evalMathMod(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const a = evaluate(args[0], ctx) as number;\n const b = evaluate(args[1], ctx) as number;\n return a % b;\n}\n\n/**\n * math/sign - Returns -1, 0, or 1 indicating sign\n */\nexport function evalMathSign(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx) as number;\n return Math.sign(n);\n}\n\n/**\n * math/lerp - Linear interpolation between a and b by factor t\n */\nexport function evalMathLerp(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const a = evaluate(args[0], ctx) as number;\n const b = evaluate(args[1], ctx) as number;\n const t = evaluate(args[2], ctx) as number;\n return a + (b - a) * t;\n}\n\n/**\n * math/map - Map value from one range to another\n */\nexport function evalMathMap(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx) as number;\n const inMin = evaluate(args[1], ctx) as number;\n const inMax = evaluate(args[2], ctx) as number;\n const outMin = evaluate(args[3], ctx) as number;\n const outMax = evaluate(args[4], ctx) as number;\n return ((n - inMin) / (inMax - inMin)) * (outMax - outMin) + outMin;\n}\n\n/**\n * math/random - Random number between 0 (inclusive) and 1 (exclusive)\n */\nexport function evalMathRandom(): number {\n return Math.random();\n}\n\n/**\n * math/randomInt - Random integer in range [min, max] (inclusive)\n */\nexport function evalMathRandomInt(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const min = evaluate(args[0], ctx) as number;\n const max = evaluate(args[1], ctx) as number;\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\n/**\n * math/default - Return default if value is null, undefined, or NaN\n */\nexport function evalMathDefault(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const n = evaluate(args[0], ctx);\n const defaultValue = evaluate(args[1], ctx) as number;\n if (n === null || n === undefined || (typeof n === 'number' && isNaN(n))) {\n return defaultValue;\n }\n return n as number;\n}\n","/**\n * String Module Runtime Evaluators\n *\n * Runtime implementations for str/* operators.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype EvalFn = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * str/len - String length\n */\nexport function evalStrLen(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const s = evaluate(args[0], ctx) as string;\n return s?.length ?? 0;\n}\n\n/**\n * str/concat - Concatenate strings together\n */\nexport function evalStrConcat(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n return args.map(arg => {\n const val = evaluate(arg, ctx);\n return val !== null && val !== undefined ? String(val) : '';\n }).join('');\n}\n\n/**\n * str/upper - Convert to uppercase\n */\nexport function evalStrUpper(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n return s?.toUpperCase() ?? '';\n}\n\n/**\n * str/lower - Convert to lowercase\n */\nexport function evalStrLower(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n return s?.toLowerCase() ?? '';\n}\n\n/**\n * str/trim - Remove leading and trailing whitespace\n */\nexport function evalStrTrim(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n return s?.trim() ?? '';\n}\n\n/**\n * str/trimStart - Remove leading whitespace\n */\nexport function evalStrTrimStart(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n return s?.trimStart() ?? '';\n}\n\n/**\n * str/trimEnd - Remove trailing whitespace\n */\nexport function evalStrTrimEnd(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n return s?.trimEnd() ?? '';\n}\n\n/**\n * str/split - Split string into array by delimiter\n */\nexport function evalStrSplit(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string[] {\n const s = evaluate(args[0], ctx) as string;\n const delim = evaluate(args[1], ctx) as string;\n return s?.split(delim) ?? [];\n}\n\n/**\n * str/join - Join array elements into string\n */\nexport function evalStrJoin(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const arr = evaluate(args[0], ctx) as unknown[];\n const delim = evaluate(args[1], ctx) as string;\n return arr?.join(delim) ?? '';\n}\n\n/**\n * str/slice - Extract substring\n */\nexport function evalStrSlice(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n const start = evaluate(args[1], ctx) as number;\n const end = args.length > 2 ? (evaluate(args[2], ctx) as number) : undefined;\n return s?.slice(start, end) ?? '';\n}\n\n/**\n * str/replace - Replace first occurrence\n */\nexport function evalStrReplace(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n const find = evaluate(args[1], ctx) as string;\n const replacement = evaluate(args[2], ctx) as string;\n return s?.replace(find, replacement) ?? '';\n}\n\n/**\n * str/replaceAll - Replace all occurrences\n * Uses replace with global regex for ES2020 compatibility\n */\nexport function evalStrReplaceAll(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n const find = evaluate(args[1], ctx) as string;\n const replacement = evaluate(args[2], ctx) as string;\n if (!s || !find) return s ?? '';\n // Escape special regex characters in the search string\n const escaped = find.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return s.replace(new RegExp(escaped, 'g'), replacement);\n}\n\n/**\n * str/includes - Check if string contains substring\n */\nexport function evalStrIncludes(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const s = evaluate(args[0], ctx) as string;\n const search = evaluate(args[1], ctx) as string;\n return s?.includes(search) ?? false;\n}\n\n/**\n * str/startsWith - Check if string starts with prefix\n */\nexport function evalStrStartsWith(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const s = evaluate(args[0], ctx) as string;\n const prefix = evaluate(args[1], ctx) as string;\n return s?.startsWith(prefix) ?? false;\n}\n\n/**\n * str/endsWith - Check if string ends with suffix\n */\nexport function evalStrEndsWith(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const s = evaluate(args[0], ctx) as string;\n const suffix = evaluate(args[1], ctx) as string;\n return s?.endsWith(suffix) ?? false;\n}\n\n/**\n * str/padStart - Pad string from start to target length\n */\nexport function evalStrPadStart(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n const len = evaluate(args[1], ctx) as number;\n const char = args.length > 2 ? (evaluate(args[2], ctx) as string) : ' ';\n return s?.padStart(len, char) ?? '';\n}\n\n/**\n * str/padEnd - Pad string from end to target length\n */\nexport function evalStrPadEnd(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n const len = evaluate(args[1], ctx) as number;\n const char = args.length > 2 ? (evaluate(args[2], ctx) as string) : ' ';\n return s?.padEnd(len, char) ?? '';\n}\n\n/**\n * str/repeat - Repeat string n times\n */\nexport function evalStrRepeat(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n const count = evaluate(args[1], ctx) as number;\n return s?.repeat(count) ?? '';\n}\n\n/**\n * str/reverse - Reverse string\n */\nexport function evalStrReverse(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n return s?.split('').reverse().join('') ?? '';\n}\n\n/**\n * str/capitalize - Capitalize first character\n */\nexport function evalStrCapitalize(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n if (!s || s.length === 0) return '';\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\n/**\n * str/titleCase - Convert to Title Case\n */\nexport function evalStrTitleCase(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n if (!s) return '';\n return s.replace(/\\w\\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase());\n}\n\n/**\n * str/camelCase - Convert to camelCase\n */\nexport function evalStrCamelCase(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n if (!s) return '';\n return s\n .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word, index) =>\n index === 0 ? word.toLowerCase() : word.toUpperCase()\n )\n .replace(/\\s+/g, '')\n .replace(/[-_]/g, '');\n}\n\n/**\n * str/kebabCase - Convert to kebab-case\n */\nexport function evalStrKebabCase(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n if (!s) return '';\n return s\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n\n/**\n * str/snakeCase - Convert to snake_case\n */\nexport function evalStrSnakeCase(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n if (!s) return '';\n return s\n .replace(/([a-z])([A-Z])/g, '$1_$2')\n .replace(/[\\s-]+/g, '_')\n .toLowerCase();\n}\n\n/**\n * str/default - Return default if value is null/undefined/empty\n */\nexport function evalStrDefault(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx);\n const defaultValue = evaluate(args[1], ctx) as string;\n if (s === null || s === undefined || s === '') {\n return defaultValue;\n }\n return s as string;\n}\n\n/**\n * str/template - Variable substitution in template string\n */\nexport function evalStrTemplate(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const template = evaluate(args[0], ctx) as string;\n const vars = evaluate(args[1], ctx) as Record<string, unknown>;\n if (!template) return '';\n return template.replace(/\\{(\\w+)\\}/g, (_, key) => {\n const value = vars?.[key];\n return value !== undefined ? String(value) : '';\n });\n}\n\n/**\n * str/truncate - Truncate string with optional suffix\n */\nexport function evalStrTruncate(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const s = evaluate(args[0], ctx) as string;\n const len = evaluate(args[1], ctx) as number;\n const suffix = args.length > 2 ? (evaluate(args[2], ctx) as string) : '...';\n if (!s || s.length <= len) return s ?? '';\n return s.slice(0, len - suffix.length) + suffix;\n}\n","/**\n * Array Module Runtime Evaluators\n *\n * Runtime implementations for array/* operators.\n * Supports lambda expressions for predicates and transformations.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\nimport { createChildContext } from '../context.js';\nimport { isSExpr, getOperator, getArgs } from '../types/expression.js';\n\ntype EvalFn = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * Helper to evaluate a lambda expression with bound variable(s).\n */\nfunction evalLambda(\n lambdaExpr: SExpr,\n evaluate: EvalFn,\n ctx: EvaluationContext,\n ...values: unknown[]\n): unknown {\n if (!isSExpr(lambdaExpr) || getOperator(lambdaExpr) !== 'fn') {\n // Not a lambda, treat as expression to evaluate\n return evaluate(lambdaExpr, ctx);\n }\n\n const args = getArgs(lambdaExpr);\n const params = args[0]; // Variable name(s)\n const body = args[1]; // Body expression\n\n // Create new locals map for the child context\n const newLocals = new Map<string, unknown>();\n\n if (Array.isArray(params)) {\n // Multiple params: [\"fn\", [\"a\", \"b\"], body]\n // This is an array of strings, NOT an S-expression\n const paramNames = params as string[];\n values.forEach((v, i) => {\n if (paramNames[i]) {\n const paramName = paramNames[i];\n // Store without @ prefix - resolveBinding strips @ before lookup\n const key = paramName.startsWith('@') ? paramName.slice(1) : paramName;\n newLocals.set(key, v);\n }\n });\n } else if (typeof params === 'string') {\n // Single param: [\"fn\", \"x\", body]\n // Store without @ prefix - resolveBinding strips @ before lookup\n const paramName = params.startsWith('@') ? params.slice(1) : params;\n newLocals.set(paramName, values[0]);\n }\n\n // Create child context with bound variable(s)\n const childCtx = createChildContext(ctx, newLocals);\n\n return evaluate(body, childCtx);\n}\n\n/**\n * array/len - Array length\n */\nexport function evalArrayLen(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const arr = evaluate(args[0], ctx) as unknown[];\n return arr?.length ?? 0;\n}\n\n/**\n * array/empty? - Check if array is empty\n */\nexport function evalArrayEmpty(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const arr = evaluate(args[0], ctx) as unknown[];\n return !arr || arr.length === 0;\n}\n\n/**\n * array/first - Get first element\n */\nexport function evalArrayFirst(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown {\n const arr = evaluate(args[0], ctx) as unknown[];\n return arr?.[0];\n}\n\n/**\n * array/last - Get last element\n */\nexport function evalArrayLast(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown {\n const arr = evaluate(args[0], ctx) as unknown[];\n return arr?.[arr.length - 1];\n}\n\n/**\n * array/nth - Get element at index\n */\nexport function evalArrayNth(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown {\n const arr = evaluate(args[0], ctx) as unknown[];\n const index = evaluate(args[1], ctx) as number;\n return arr?.[index];\n}\n\n/**\n * array/slice - Extract subarray\n */\nexport function evalArraySlice(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const start = evaluate(args[1], ctx) as number;\n const end = args.length > 2 ? (evaluate(args[2], ctx) as number) : undefined;\n return arr?.slice(start, end) ?? [];\n}\n\n/**\n * array/concat - Concatenate arrays\n */\nexport function evalArrayConcat(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arrays = args.map((a) => evaluate(a, ctx) as unknown[]);\n return arrays.reduce((acc, arr) => acc.concat(arr ?? []), [] as unknown[]);\n}\n\n/**\n * array/append - Add item to end (returns new array)\n */\nexport function evalArrayAppend(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const item = evaluate(args[1], ctx);\n return [...(arr ?? []), item];\n}\n\n/**\n * array/prepend - Add item to start (returns new array)\n */\nexport function evalArrayPrepend(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const item = evaluate(args[1], ctx);\n return [item, ...(arr ?? [])];\n}\n\n/**\n * array/insert - Insert item at index (returns new array)\n */\nexport function evalArrayInsert(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const index = evaluate(args[1], ctx) as number;\n const item = evaluate(args[2], ctx);\n const result = [...(arr ?? [])];\n result.splice(index, 0, item);\n return result;\n}\n\n/**\n * array/remove - Remove item at index (returns new array)\n */\nexport function evalArrayRemove(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const index = evaluate(args[1], ctx) as number;\n const result = [...(arr ?? [])];\n result.splice(index, 1);\n return result;\n}\n\n/**\n * array/removeItem - Remove first matching item (returns new array)\n */\nexport function evalArrayRemoveItem(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const item = evaluate(args[1], ctx);\n const index = arr?.indexOf(item) ?? -1;\n if (index === -1) return arr ?? [];\n const result = [...arr];\n result.splice(index, 1);\n return result;\n}\n\n/**\n * array/reverse - Reverse array order (returns new array)\n */\nexport function evalArrayReverse(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n return [...(arr ?? [])].reverse();\n}\n\n/**\n * array/sort - Sort array (returns new array)\n */\nexport function evalArraySort(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const key = args.length > 1 ? (evaluate(args[1], ctx) as string) : undefined;\n const dir = args.length > 2 ? (evaluate(args[2], ctx) as string) : 'asc';\n\n const result = [...(arr ?? [])];\n\n if (key) {\n result.sort((a, b) => {\n const aVal = (a as Record<string, unknown>)[key] as string | number;\n const bVal = (b as Record<string, unknown>)[key] as string | number;\n if (aVal < bVal) return dir === 'asc' ? -1 : 1;\n if (aVal > bVal) return dir === 'asc' ? 1 : -1;\n return 0;\n });\n } else {\n result.sort((a, b) => {\n const aVal = a as string | number;\n const bVal = b as string | number;\n if (aVal < bVal) return dir === 'asc' ? -1 : 1;\n if (aVal > bVal) return dir === 'asc' ? 1 : -1;\n return 0;\n });\n }\n\n return result;\n}\n\n/**\n * array/shuffle - Randomly shuffle array (returns new array)\n */\nexport function evalArrayShuffle(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const result = [...(arr ?? [])];\n for (let i = result.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [result[i], result[j]] = [result[j], result[i]];\n }\n return result;\n}\n\n/**\n * array/unique - Remove duplicates (returns new array)\n */\nexport function evalArrayUnique(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n return [...new Set(arr ?? [])];\n}\n\n/**\n * array/flatten - Flatten nested arrays one level\n */\nexport function evalArrayFlatten(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n return (arr ?? []).flat();\n}\n\n/**\n * array/zip - Pair elements from two arrays\n */\nexport function evalArrayZip(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[][] {\n const arr1 = evaluate(args[0], ctx) as unknown[];\n const arr2 = evaluate(args[1], ctx) as unknown[];\n const len = Math.min(arr1?.length ?? 0, arr2?.length ?? 0);\n const result: unknown[][] = [];\n for (let i = 0; i < len; i++) {\n result.push([arr1[i], arr2[i]]);\n }\n return result;\n}\n\n/**\n * array/includes - Check if array contains item\n */\nexport function evalArrayIncludes(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const arr = evaluate(args[0], ctx) as unknown[];\n const item = evaluate(args[1], ctx);\n return arr?.includes(item) ?? false;\n}\n\n/**\n * array/indexOf - Find index of item (-1 if not found)\n */\nexport function evalArrayIndexOf(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const arr = evaluate(args[0], ctx) as unknown[];\n const item = evaluate(args[1], ctx);\n return arr?.indexOf(item) ?? -1;\n}\n\n/**\n * array/find - Find first element matching predicate\n */\nexport function evalArrayFind(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n return (arr ?? []).find((item) => evalLambda(lambda, evaluate, ctx, item));\n}\n\n/**\n * array/findIndex - Find index of first element matching predicate (-1 if none)\n */\nexport function evalArrayFindIndex(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n return (arr ?? []).findIndex((item) => evalLambda(lambda, evaluate, ctx, item));\n}\n\n/**\n * array/filter - Keep elements matching predicate\n */\nexport function evalArrayFilter(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n return (arr ?? []).filter((item) => evalLambda(lambda, evaluate, ctx, item));\n}\n\n/**\n * array/reject - Remove elements matching predicate\n */\nexport function evalArrayReject(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n return (arr ?? []).filter((item) => !evalLambda(lambda, evaluate, ctx, item));\n}\n\n/**\n * array/map - Transform each element\n */\nexport function evalArrayMap(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n return (arr ?? []).map((item) => evalLambda(lambda, evaluate, ctx, item));\n}\n\n/**\n * array/reduce - Reduce array to single value\n */\nexport function evalArrayReduce(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n const init = evaluate(args[2], ctx);\n return (arr ?? []).reduce(\n (acc, item) => evalLambda(lambda, evaluate, ctx, acc, item),\n init\n );\n}\n\n/**\n * array/every - Check if all elements match predicate\n */\nexport function evalArrayEvery(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n return (arr ?? []).every((item) => Boolean(evalLambda(lambda, evaluate, ctx, item)));\n}\n\n/**\n * array/some - Check if any element matches predicate\n */\nexport function evalArraySome(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n return (arr ?? []).some((item) => Boolean(evalLambda(lambda, evaluate, ctx, item)));\n}\n\n/**\n * array/count - Count elements (optionally matching predicate)\n */\nexport function evalArrayCount(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const arr = evaluate(args[0], ctx) as unknown[];\n if (args.length > 1) {\n const lambda = args[1];\n return (arr ?? []).filter((item) => evalLambda(lambda, evaluate, ctx, item)).length;\n }\n return arr?.length ?? 0;\n}\n\n/**\n * array/sum - Sum values (optionally by field)\n */\nexport function evalArraySum(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const arr = evaluate(args[0], ctx) as unknown[];\n const key = args.length > 1 ? (evaluate(args[1], ctx) as string) : undefined;\n\n return (arr ?? []).reduce((sum: number, item) => {\n const value = key ? (item as Record<string, unknown>)[key] : item;\n return sum + (typeof value === 'number' ? value : 0);\n }, 0);\n}\n\n/**\n * array/avg - Average of values (optionally by field)\n */\nexport function evalArrayAvg(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const arr = evaluate(args[0], ctx) as unknown[];\n if (!arr || arr.length === 0) return 0;\n\n const key = args.length > 1 ? (evaluate(args[1], ctx) as string) : undefined;\n\n const sum = arr.reduce((s: number, item) => {\n const value = key ? (item as Record<string, unknown>)[key] : item;\n return s + (typeof value === 'number' ? value : 0);\n }, 0);\n\n return sum / arr.length;\n}\n\n/**\n * array/min - Minimum value (optionally by field)\n */\nexport function evalArrayMin(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const arr = evaluate(args[0], ctx) as unknown[];\n if (!arr || arr.length === 0) return 0;\n\n const key = args.length > 1 ? (evaluate(args[1], ctx) as string) : undefined;\n\n const values = arr.map((item) => {\n const value = key ? (item as Record<string, unknown>)[key] : item;\n return typeof value === 'number' ? value : Infinity;\n });\n\n return Math.min(...values);\n}\n\n/**\n * array/max - Maximum value (optionally by field)\n */\nexport function evalArrayMax(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const arr = evaluate(args[0], ctx) as unknown[];\n if (!arr || arr.length === 0) return 0;\n\n const key = args.length > 1 ? (evaluate(args[1], ctx) as string) : undefined;\n\n const values = arr.map((item) => {\n const value = key ? (item as Record<string, unknown>)[key] : item;\n return typeof value === 'number' ? value : -Infinity;\n });\n\n return Math.max(...values);\n}\n\n/**\n * array/groupBy - Group elements by field value\n */\nexport function evalArrayGroupBy(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown[]> {\n const arr = evaluate(args[0], ctx) as unknown[];\n const key = evaluate(args[1], ctx) as string;\n\n const result: Record<string, unknown[]> = {};\n for (const item of arr ?? []) {\n const groupKey = String((item as Record<string, unknown>)[key] ?? 'undefined');\n if (!result[groupKey]) {\n result[groupKey] = [];\n }\n result[groupKey].push(item);\n }\n return result;\n}\n\n/**\n * array/partition - Split array by predicate into [matches, nonMatches]\n */\nexport function evalArrayPartition(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): [unknown[], unknown[]] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const lambda = args[1];\n\n const matches: unknown[] = [];\n const nonMatches: unknown[] = [];\n\n for (const item of arr ?? []) {\n if (evalLambda(lambda, evaluate, ctx, item)) {\n matches.push(item);\n } else {\n nonMatches.push(item);\n }\n }\n\n return [matches, nonMatches];\n}\n\n/**\n * array/take - Take first n elements\n */\nexport function evalArrayTake(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const n = evaluate(args[1], ctx) as number;\n return (arr ?? []).slice(0, n);\n}\n\n/**\n * array/drop - Skip first n elements\n */\nexport function evalArrayDrop(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const n = evaluate(args[1], ctx) as number;\n return (arr ?? []).slice(n);\n}\n\n/**\n * array/takeLast - Take last n elements\n */\nexport function evalArrayTakeLast(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const n = evaluate(args[1], ctx) as number;\n return (arr ?? []).slice(-n);\n}\n\n/**\n * array/dropLast - Skip last n elements\n */\nexport function evalArrayDropLast(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const arr = evaluate(args[0], ctx) as unknown[];\n const n = evaluate(args[1], ctx) as number;\n return (arr ?? []).slice(0, -n);\n}\n","/**\n * Object Module Runtime Evaluators\n *\n * Runtime implementations for object/* operators.\n * All operations are immutable (return new objects).\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\nimport { createChildContext } from '../context.js';\nimport { isSExpr, getOperator, getArgs } from '../types/expression.js';\n\ntype EvalFn = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * Helper to evaluate a lambda expression with bound variable(s).\n */\nfunction evalLambda(\n lambdaExpr: SExpr,\n evaluate: EvalFn,\n ctx: EvaluationContext,\n ...values: unknown[]\n): unknown {\n if (!isSExpr(lambdaExpr) || getOperator(lambdaExpr) !== 'fn') {\n return evaluate(lambdaExpr, ctx);\n }\n\n const args = getArgs(lambdaExpr);\n const params = args[0];\n const body = args[1];\n\n // Create new locals map for the child context\n const newLocals = new Map<string, unknown>();\n\n if (Array.isArray(params)) {\n // Multiple params: [\"fn\", [\"a\", \"b\"], body]\n const paramNames = params as string[];\n values.forEach((v, i) => {\n if (paramNames[i]) {\n const paramName = paramNames[i];\n // Store without @ prefix - resolveBinding strips @ before lookup\n const key = paramName.startsWith('@') ? paramName.slice(1) : paramName;\n newLocals.set(key, v);\n }\n });\n } else if (typeof params === 'string') {\n // Single param: [\"fn\", \"x\", body]\n // Store without @ prefix - resolveBinding strips @ before lookup\n const paramName = params.startsWith('@') ? params.slice(1) : params;\n newLocals.set(paramName, values[0]);\n }\n\n const childCtx = createChildContext(ctx, newLocals);\n\n return evaluate(body, childCtx);\n}\n\n/**\n * object/keys - Get object keys as array\n */\nexport function evalObjectKeys(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string[] {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n return Object.keys(obj ?? {});\n}\n\n/**\n * object/values - Get object values as array\n */\nexport function evalObjectValues(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown[] {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n return Object.values(obj ?? {});\n}\n\n/**\n * object/entries - Get [key, value] pairs as array\n */\nexport function evalObjectEntries(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): [string, unknown][] {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n return Object.entries(obj ?? {});\n}\n\n/**\n * object/fromEntries - Create object from [key, value] pairs\n */\nexport function evalObjectFromEntries(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const entries = evaluate(args[0], ctx) as [string, unknown][];\n return Object.fromEntries(entries ?? []);\n}\n\n/**\n * object/get - Get nested value by path\n */\nexport function evalObjectGet(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): unknown {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n const path = evaluate(args[1], ctx) as string;\n const defaultValue = args.length > 2 ? evaluate(args[2], ctx) : undefined;\n\n if (!obj || !path) return defaultValue;\n\n const parts = path.split('.');\n let current: unknown = obj;\n\n for (const part of parts) {\n if (current === null || current === undefined) {\n return defaultValue;\n }\n current = (current as Record<string, unknown>)[part];\n }\n\n return current !== undefined ? current : defaultValue;\n}\n\n/**\n * object/set - Set nested value by path (returns new object)\n */\nexport function evalObjectSet(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n const path = evaluate(args[1], ctx) as string;\n const value = evaluate(args[2], ctx);\n\n if (!path) return obj ?? {};\n\n const result = structuredClone(obj ?? {});\n const parts = path.split('.');\n let current = result;\n\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n if (!current[part] || typeof current[part] !== 'object') {\n current[part] = {};\n }\n current = current[part] as Record<string, unknown>;\n }\n\n current[parts[parts.length - 1]] = value;\n return result;\n}\n\n/**\n * object/has - Check if path exists\n */\nexport function evalObjectHas(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n const path = evaluate(args[1], ctx) as string;\n\n if (!obj || !path) return false;\n\n const parts = path.split('.');\n let current: unknown = obj;\n\n for (const part of parts) {\n if (current === null || current === undefined) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(current, part)) {\n return false;\n }\n current = (current as Record<string, unknown>)[part];\n }\n\n return true;\n}\n\n/**\n * object/merge - Shallow merge objects (later wins)\n */\nexport function evalObjectMerge(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const objects = args.map((a) => evaluate(a, ctx) as Record<string, unknown>);\n return Object.assign({}, ...objects.map((o) => o ?? {}));\n}\n\n/**\n * object/deepMerge - Deep merge objects (later wins)\n */\nexport function evalObjectDeepMerge(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const objects = args.map((a) => evaluate(a, ctx) as Record<string, unknown>);\n\n function deepMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>\n ): Record<string, unknown> {\n const result = { ...target };\n for (const key of Object.keys(source)) {\n if (\n source[key] !== null &&\n typeof source[key] === 'object' &&\n !Array.isArray(source[key]) &&\n target[key] !== null &&\n typeof target[key] === 'object' &&\n !Array.isArray(target[key])\n ) {\n result[key] = deepMerge(\n target[key] as Record<string, unknown>,\n source[key] as Record<string, unknown>\n );\n } else {\n result[key] = source[key];\n }\n }\n return result;\n }\n\n return objects.reduce((acc, obj) => deepMerge(acc, obj ?? {}), {} as Record<string, unknown>);\n}\n\n/**\n * object/pick - Select only specified keys\n */\nexport function evalObjectPick(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n const keys = evaluate(args[1], ctx) as string[];\n\n const result: Record<string, unknown> = {};\n for (const key of keys ?? []) {\n if (obj && Object.prototype.hasOwnProperty.call(obj, key)) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\n/**\n * object/omit - Exclude specified keys\n */\nexport function evalObjectOmit(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n const keys = evaluate(args[1], ctx) as string[];\n\n const keysSet = new Set(keys ?? []);\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(obj ?? {})) {\n if (!keysSet.has(key)) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\n/**\n * object/mapValues - Transform all values\n */\nexport function evalObjectMapValues(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n const lambda = args[1];\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj ?? {})) {\n result[key] = evalLambda(lambda, evaluate, ctx, value);\n }\n return result;\n}\n\n/**\n * object/mapKeys - Transform all keys\n */\nexport function evalObjectMapKeys(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n const lambda = args[1];\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj ?? {})) {\n const newKey = String(evalLambda(lambda, evaluate, ctx, key));\n result[newKey] = value;\n }\n return result;\n}\n\n/**\n * object/filter - Filter entries by predicate\n */\nexport function evalObjectFilter(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n const lambda = args[1];\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj ?? {})) {\n if (evalLambda(lambda, evaluate, ctx, key, value)) {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * object/empty? - Check if object has no keys\n */\nexport function evalObjectEmpty(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n return !obj || Object.keys(obj).length === 0;\n}\n\n/**\n * object/equals - Deep equality check\n */\nexport function evalObjectEquals(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const a = evaluate(args[0], ctx);\n const b = evaluate(args[1], ctx);\n\n function deepEqual(x: unknown, y: unknown): boolean {\n if (x === y) return true;\n if (typeof x !== typeof y) return false;\n if (typeof x !== 'object' || x === null || y === null) return false;\n if (Array.isArray(x) !== Array.isArray(y)) return false;\n\n const xKeys = Object.keys(x);\n const yKeys = Object.keys(y as object);\n if (xKeys.length !== yKeys.length) return false;\n\n for (const key of xKeys) {\n if (!deepEqual((x as Record<string, unknown>)[key], (y as Record<string, unknown>)[key])) {\n return false;\n }\n }\n return true;\n }\n\n return deepEqual(a, b);\n}\n\n/**\n * object/clone - Shallow clone object\n */\nexport function evalObjectClone(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n return { ...(obj ?? {}) };\n}\n\n/**\n * object/deepClone - Deep clone object\n */\nexport function evalObjectDeepClone(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const obj = evaluate(args[0], ctx) as Record<string, unknown>;\n return structuredClone(obj ?? {});\n}\n\n/**\n * path - Build a dot-separated path string from segments\n *\n * Used for dynamic field access in set effects:\n * [\"set\", [\"path\", \"formValues\", \"@payload.fieldId\"], \"@payload.value\"]\n *\n * @example\n * [\"path\", \"formValues\", \"A9\"] => \"formValues.A9\"\n * [\"path\", \"@entity.prefix\", \"field\"] => \"myPrefix.field\" (if @entity.prefix = \"myPrefix\")\n */\nexport function evalPath(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n if (args.length === 0) {\n throw new Error('path operator requires at least 1 argument');\n }\n\n const segments = args.map((arg) => {\n const evaluated = evaluate(arg, ctx);\n return String(evaluated ?? '');\n });\n\n return segments.join('.');\n}\n","/**\n * Validate Module Runtime Evaluators\n *\n * Runtime implementations for validate/* operators.\n * Provides validation functions for form inputs and data.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype EvalFn = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * validate/required - Check if value is not null, undefined, or empty string\n */\nexport function evalValidateRequired(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n return value !== null && value !== undefined && value !== '';\n}\n\n/**\n * validate/string - Check if value is a string\n */\nexport function evalValidateString(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n return typeof value === 'string';\n}\n\n/**\n * validate/number - Check if value is a number\n */\nexport function evalValidateNumber(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n return typeof value === 'number' && !isNaN(value);\n}\n\n/**\n * validate/boolean - Check if value is a boolean\n */\nexport function evalValidateBoolean(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n return typeof value === 'boolean';\n}\n\n/**\n * validate/array - Check if value is an array\n */\nexport function evalValidateArray(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n return Array.isArray(value);\n}\n\n/**\n * validate/object - Check if value is an object\n */\nexport function evalValidateObject(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * validate/email - Check if value is a valid email format\n */\nexport function evalValidateEmail(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n if (typeof value !== 'string') return false;\n // Simple email regex - covers most valid cases\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(value);\n}\n\n/**\n * validate/url - Check if value is a valid URL format\n */\nexport function evalValidateUrl(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n if (typeof value !== 'string') return false;\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * validate/uuid - Check if value is a valid UUID\n */\nexport function evalValidateUuid(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n if (typeof value !== 'string') return false;\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return uuidRegex.test(value);\n}\n\n/**\n * validate/phone - Check if value is a valid phone number\n */\nexport function evalValidatePhone(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n if (typeof value !== 'string') return false;\n // Simple phone validation - digits, spaces, dashes, parens, and optional leading +\n const phoneRegex = /^\\+?[\\d\\s\\-().]{10,}$/;\n const digits = value.replace(/\\D/g, '');\n return phoneRegex.test(value) && digits.length >= 10;\n}\n\n/**\n * validate/creditCard - Check if value is a valid credit card number (Luhn algorithm)\n */\nexport function evalValidateCreditCard(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n if (typeof value !== 'string') return false;\n\n const digits = value.replace(/\\D/g, '');\n if (digits.length < 13 || digits.length > 19) return false;\n\n // Luhn algorithm\n let sum = 0;\n let isEven = false;\n\n for (let i = digits.length - 1; i >= 0; i--) {\n let digit = parseInt(digits[i], 10);\n if (isEven) {\n digit *= 2;\n if (digit > 9) digit -= 9;\n }\n sum += digit;\n isEven = !isEven;\n }\n\n return sum % 10 === 0;\n}\n\n/**\n * validate/date - Check if value is a valid date\n */\nexport function evalValidateDate(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n if (value instanceof Date) return !isNaN(value.getTime());\n if (typeof value === 'number') return !isNaN(new Date(value).getTime());\n if (typeof value === 'string') return !isNaN(new Date(value).getTime());\n return false;\n}\n\n/**\n * validate/minLength - Check if string/array has minimum length\n */\nexport function evalValidateMinLength(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n const min = evaluate(args[1], ctx) as number;\n\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length >= min;\n }\n return false;\n}\n\n/**\n * validate/maxLength - Check if string/array has maximum length\n */\nexport function evalValidateMaxLength(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n const max = evaluate(args[1], ctx) as number;\n\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length <= max;\n }\n return false;\n}\n\n/**\n * validate/length - Check if string/array has exact length\n */\nexport function evalValidateLength(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n const exact = evaluate(args[1], ctx) as number;\n\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length === exact;\n }\n return false;\n}\n\n/**\n * validate/min - Check if number is >= minimum\n */\nexport function evalValidateMin(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx) as number;\n const min = evaluate(args[1], ctx) as number;\n return typeof value === 'number' && value >= min;\n}\n\n/**\n * validate/max - Check if number is <= maximum\n */\nexport function evalValidateMax(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx) as number;\n const max = evaluate(args[1], ctx) as number;\n return typeof value === 'number' && value <= max;\n}\n\n/**\n * validate/range - Check if number is within range [min, max]\n */\nexport function evalValidateRange(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx) as number;\n const min = evaluate(args[1], ctx) as number;\n const max = evaluate(args[2], ctx) as number;\n return typeof value === 'number' && value >= min && value <= max;\n}\n\n/**\n * validate/pattern - Check if string matches regex pattern\n */\nexport function evalValidatePattern(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n const pattern = evaluate(args[1], ctx) as string;\n\n if (typeof value !== 'string') return false;\n try {\n const regex = new RegExp(pattern);\n return regex.test(value);\n } catch {\n return false;\n }\n}\n\n/**\n * validate/oneOf - Check if value is in list of allowed values\n */\nexport function evalValidateOneOf(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n const options = evaluate(args[1], ctx) as unknown[];\n return (options ?? []).includes(value);\n}\n\n/**\n * validate/noneOf - Check if value is not in list of disallowed values\n */\nexport function evalValidateNoneOf(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const value = evaluate(args[0], ctx);\n const options = evaluate(args[1], ctx) as unknown[];\n return !(options ?? []).includes(value);\n}\n\n/**\n * validate/equals - Deep equality check\n */\nexport function evalValidateEquals(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const a = evaluate(args[0], ctx);\n const b = evaluate(args[1], ctx);\n\n function deepEqual(x: unknown, y: unknown): boolean {\n if (x === y) return true;\n if (typeof x !== typeof y) return false;\n if (typeof x !== 'object' || x === null || y === null) return false;\n if (Array.isArray(x) !== Array.isArray(y)) return false;\n\n const xKeys = Object.keys(x);\n const yKeys = Object.keys(y as object);\n if (xKeys.length !== yKeys.length) return false;\n\n for (const key of xKeys) {\n if (!deepEqual((x as Record<string, unknown>)[key], (y as Record<string, unknown>)[key])) {\n return false;\n }\n }\n return true;\n }\n\n return deepEqual(a, b);\n}\n\n/**\n * validate/check - Run multiple validation rules, return { valid, errors }\n */\nexport function evalValidateCheck(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): { valid: boolean; errors: string[] } {\n const value = evaluate(args[0], ctx) as Record<string, unknown>;\n const rules = evaluate(args[1], ctx) as Record<string, [string, ...unknown[]][]>;\n\n const errors: string[] = [];\n\n for (const [field, fieldRules] of Object.entries(rules ?? {})) {\n const fieldValue = value?.[field];\n\n for (const rule of fieldRules ?? []) {\n const [ruleName, ...ruleArgs] = rule;\n let isValid = true;\n\n switch (ruleName) {\n case 'required':\n isValid = fieldValue !== null && fieldValue !== undefined && fieldValue !== '';\n break;\n case 'string':\n isValid = typeof fieldValue === 'string';\n break;\n case 'number':\n isValid = typeof fieldValue === 'number' && !isNaN(fieldValue);\n break;\n case 'boolean':\n isValid = typeof fieldValue === 'boolean';\n break;\n case 'email': {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n isValid = typeof fieldValue === 'string' && emailRegex.test(fieldValue);\n break;\n }\n case 'minLength':\n isValid =\n (typeof fieldValue === 'string' || Array.isArray(fieldValue)) &&\n fieldValue.length >= (ruleArgs[0] as number);\n break;\n case 'maxLength':\n isValid =\n (typeof fieldValue === 'string' || Array.isArray(fieldValue)) &&\n fieldValue.length <= (ruleArgs[0] as number);\n break;\n case 'min':\n isValid = typeof fieldValue === 'number' && fieldValue >= (ruleArgs[0] as number);\n break;\n case 'max':\n isValid = typeof fieldValue === 'number' && fieldValue <= (ruleArgs[0] as number);\n break;\n case 'range':\n isValid =\n typeof fieldValue === 'number' &&\n fieldValue >= (ruleArgs[0] as number) &&\n fieldValue <= (ruleArgs[1] as number);\n break;\n case 'pattern': {\n const regex = new RegExp(ruleArgs[0] as string);\n isValid = typeof fieldValue === 'string' && regex.test(fieldValue);\n break;\n }\n case 'oneOf':\n isValid = (ruleArgs[0] as unknown[])?.includes(fieldValue);\n break;\n default:\n // Unknown rule, skip\n continue;\n }\n\n if (!isValid) {\n errors.push(`${field}: ${ruleName} validation failed`);\n }\n }\n }\n\n return { valid: errors.length === 0, errors };\n}\n","/**\n * Time Module Runtime Evaluators\n *\n * Runtime implementations for time/* operators.\n * Provides date manipulation, formatting, and comparison functions.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype EvalFn = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\ntype TimeUnit = 'year' | 'month' | 'week' | 'day' | 'hour' | 'minute' | 'second' | 'ms';\n\nconst MS_PER_SECOND = 1000;\nconst MS_PER_MINUTE = 60 * MS_PER_SECOND;\nconst MS_PER_HOUR = 60 * MS_PER_MINUTE;\nconst MS_PER_DAY = 24 * MS_PER_HOUR;\nconst MS_PER_WEEK = 7 * MS_PER_DAY;\n\n/**\n * time/now - Current timestamp\n */\nexport function evalTimeNow(): number {\n return Date.now();\n}\n\n/**\n * time/today - Today at midnight (local time)\n */\nexport function evalTimeToday(): number {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n return now.getTime();\n}\n\n/**\n * time/parse - Parse string to timestamp\n */\nexport function evalTimeParse(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const str = evaluate(args[0], ctx) as string;\n // Note: format param is accepted but we use native Date parsing\n // A full implementation would need a date parsing library\n const date = new Date(str);\n return date.getTime();\n}\n\n/**\n * time/format - Format timestamp to string\n */\nexport function evalTimeFormat(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const timestamp = evaluate(args[0], ctx) as number;\n const format = evaluate(args[1], ctx) as string;\n\n const date = new Date(timestamp);\n\n // Simple format token replacement\n const tokens: Record<string, string> = {\n YYYY: String(date.getFullYear()),\n YY: String(date.getFullYear()).slice(-2),\n MM: String(date.getMonth() + 1).padStart(2, '0'),\n M: String(date.getMonth() + 1),\n DD: String(date.getDate()).padStart(2, '0'),\n D: String(date.getDate()),\n HH: String(date.getHours()).padStart(2, '0'),\n H: String(date.getHours()),\n mm: String(date.getMinutes()).padStart(2, '0'),\n m: String(date.getMinutes()),\n ss: String(date.getSeconds()).padStart(2, '0'),\n s: String(date.getSeconds()),\n ddd: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][date.getDay()],\n dddd: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][\n date.getDay()\n ],\n MMM: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][\n date.getMonth()\n ],\n MMMM: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ][date.getMonth()],\n };\n\n let result = format;\n for (const [token, value] of Object.entries(tokens)) {\n result = result.replace(new RegExp(token, 'g'), value);\n }\n\n return result;\n}\n\n/**\n * time/year - Get year from timestamp\n */\nexport function evalTimeYear(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n return new Date(timestamp).getFullYear();\n}\n\n/**\n * time/month - Get month from timestamp (1-12)\n */\nexport function evalTimeMonth(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n return new Date(timestamp).getMonth() + 1;\n}\n\n/**\n * time/day - Get day of month from timestamp (1-31)\n */\nexport function evalTimeDay(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n return new Date(timestamp).getDate();\n}\n\n/**\n * time/weekday - Get day of week (0=Sunday, 6=Saturday)\n */\nexport function evalTimeWeekday(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n return new Date(timestamp).getDay();\n}\n\n/**\n * time/hour - Get hour from timestamp (0-23)\n */\nexport function evalTimeHour(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n return new Date(timestamp).getHours();\n}\n\n/**\n * time/minute - Get minute from timestamp (0-59)\n */\nexport function evalTimeMinute(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n return new Date(timestamp).getMinutes();\n}\n\n/**\n * time/second - Get second from timestamp (0-59)\n */\nexport function evalTimeSecond(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n return new Date(timestamp).getSeconds();\n}\n\n/**\n * Helper to add time to a date\n */\nfunction addTime(date: Date, amount: number, unit: TimeUnit): Date {\n const result = new Date(date);\n\n switch (unit) {\n case 'year':\n result.setFullYear(result.getFullYear() + amount);\n break;\n case 'month':\n result.setMonth(result.getMonth() + amount);\n break;\n case 'week':\n result.setDate(result.getDate() + amount * 7);\n break;\n case 'day':\n result.setDate(result.getDate() + amount);\n break;\n case 'hour':\n result.setHours(result.getHours() + amount);\n break;\n case 'minute':\n result.setMinutes(result.getMinutes() + amount);\n break;\n case 'second':\n result.setSeconds(result.getSeconds() + amount);\n break;\n case 'ms':\n result.setMilliseconds(result.getMilliseconds() + amount);\n break;\n }\n\n return result;\n}\n\n/**\n * time/add - Add time to timestamp\n */\nexport function evalTimeAdd(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n const amount = evaluate(args[1], ctx) as number;\n const unit = evaluate(args[2], ctx) as TimeUnit;\n\n const date = new Date(timestamp);\n return addTime(date, amount, unit).getTime();\n}\n\n/**\n * time/subtract - Subtract time from timestamp\n */\nexport function evalTimeSubtract(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n const amount = evaluate(args[1], ctx) as number;\n const unit = evaluate(args[2], ctx) as TimeUnit;\n\n const date = new Date(timestamp);\n return addTime(date, -amount, unit).getTime();\n}\n\n/**\n * time/diff - Difference between timestamps\n */\nexport function evalTimeDiff(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const a = evaluate(args[0], ctx) as number;\n const b = evaluate(args[1], ctx) as number;\n const unit = args.length > 2 ? (evaluate(args[2], ctx) as TimeUnit) : 'ms';\n\n const diffMs = a - b;\n\n switch (unit) {\n case 'year':\n return Math.floor(diffMs / (MS_PER_DAY * 365.25));\n case 'month':\n return Math.floor(diffMs / (MS_PER_DAY * 30.44));\n case 'week':\n return Math.floor(diffMs / MS_PER_WEEK);\n case 'day':\n return Math.floor(diffMs / MS_PER_DAY);\n case 'hour':\n return Math.floor(diffMs / MS_PER_HOUR);\n case 'minute':\n return Math.floor(diffMs / MS_PER_MINUTE);\n case 'second':\n return Math.floor(diffMs / MS_PER_SECOND);\n case 'ms':\n default:\n return diffMs;\n }\n}\n\n/**\n * time/startOf - Get start of time period\n */\nexport function evalTimeStartOf(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n const unit = evaluate(args[1], ctx) as TimeUnit;\n\n const date = new Date(timestamp);\n\n switch (unit) {\n case 'year':\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n break;\n case 'month':\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n break;\n case 'week': {\n const day = date.getDay();\n date.setDate(date.getDate() - day);\n date.setHours(0, 0, 0, 0);\n break;\n }\n case 'day':\n date.setHours(0, 0, 0, 0);\n break;\n case 'hour':\n date.setMinutes(0, 0, 0);\n break;\n case 'minute':\n date.setSeconds(0, 0);\n break;\n }\n\n return date.getTime();\n}\n\n/**\n * time/endOf - Get end of time period\n */\nexport function evalTimeEndOf(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): number {\n const timestamp = evaluate(args[0], ctx) as number;\n const unit = evaluate(args[1], ctx) as TimeUnit;\n\n const date = new Date(timestamp);\n\n switch (unit) {\n case 'year':\n date.setMonth(11, 31);\n date.setHours(23, 59, 59, 999);\n break;\n case 'month':\n date.setMonth(date.getMonth() + 1, 0);\n date.setHours(23, 59, 59, 999);\n break;\n case 'week': {\n const day = date.getDay();\n date.setDate(date.getDate() + (6 - day));\n date.setHours(23, 59, 59, 999);\n break;\n }\n case 'day':\n date.setHours(23, 59, 59, 999);\n break;\n case 'hour':\n date.setMinutes(59, 59, 999);\n break;\n case 'minute':\n date.setSeconds(59, 999);\n break;\n }\n\n return date.getTime();\n}\n\n/**\n * time/isBefore - Check if a is before b\n */\nexport function evalTimeIsBefore(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const a = evaluate(args[0], ctx) as number;\n const b = evaluate(args[1], ctx) as number;\n return a < b;\n}\n\n/**\n * time/isAfter - Check if a is after b\n */\nexport function evalTimeIsAfter(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const a = evaluate(args[0], ctx) as number;\n const b = evaluate(args[1], ctx) as number;\n return a > b;\n}\n\n/**\n * time/isBetween - Check if date is between start and end\n */\nexport function evalTimeIsBetween(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const date = evaluate(args[0], ctx) as number;\n const start = evaluate(args[1], ctx) as number;\n const end = evaluate(args[2], ctx) as number;\n return date >= start && date <= end;\n}\n\n/**\n * time/isSame - Check if timestamps are same (optionally by unit)\n */\nexport function evalTimeIsSame(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const a = evaluate(args[0], ctx) as number;\n const b = evaluate(args[1], ctx) as number;\n const unit = args.length > 2 ? (evaluate(args[2], ctx) as TimeUnit) : undefined;\n\n if (!unit) {\n return a === b;\n }\n\n const dateA = new Date(a);\n const dateB = new Date(b);\n\n switch (unit) {\n case 'year':\n return dateA.getFullYear() === dateB.getFullYear();\n case 'month':\n return (\n dateA.getFullYear() === dateB.getFullYear() && dateA.getMonth() === dateB.getMonth()\n );\n case 'day':\n return (\n dateA.getFullYear() === dateB.getFullYear() &&\n dateA.getMonth() === dateB.getMonth() &&\n dateA.getDate() === dateB.getDate()\n );\n case 'hour':\n return (\n dateA.getFullYear() === dateB.getFullYear() &&\n dateA.getMonth() === dateB.getMonth() &&\n dateA.getDate() === dateB.getDate() &&\n dateA.getHours() === dateB.getHours()\n );\n case 'minute':\n return Math.floor(a / MS_PER_MINUTE) === Math.floor(b / MS_PER_MINUTE);\n case 'second':\n return Math.floor(a / MS_PER_SECOND) === Math.floor(b / MS_PER_SECOND);\n default:\n return a === b;\n }\n}\n\n/**\n * time/isPast - Check if timestamp is in the past\n */\nexport function evalTimeIsPast(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const timestamp = evaluate(args[0], ctx) as number;\n return timestamp < Date.now();\n}\n\n/**\n * time/isFuture - Check if timestamp is in the future\n */\nexport function evalTimeIsFuture(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const timestamp = evaluate(args[0], ctx) as number;\n return timestamp > Date.now();\n}\n\n/**\n * time/isToday - Check if timestamp is today\n */\nexport function evalTimeIsToday(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): boolean {\n const timestamp = evaluate(args[0], ctx) as number;\n const date = new Date(timestamp);\n const today = new Date();\n\n return (\n date.getFullYear() === today.getFullYear() &&\n date.getMonth() === today.getMonth() &&\n date.getDate() === today.getDate()\n );\n}\n\n/**\n * time/relative - Format as relative time (\"2 hours ago\", \"in 3 days\")\n */\nexport function evalTimeRelative(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const timestamp = evaluate(args[0], ctx) as number;\n const now = Date.now();\n const diff = timestamp - now;\n const absDiff = Math.abs(diff);\n const isPast = diff < 0;\n\n let value: number;\n let unit: string;\n\n if (absDiff < MS_PER_MINUTE) {\n return 'just now';\n } else if (absDiff < MS_PER_HOUR) {\n value = Math.round(absDiff / MS_PER_MINUTE);\n unit = value === 1 ? 'minute' : 'minutes';\n } else if (absDiff < MS_PER_DAY) {\n value = Math.round(absDiff / MS_PER_HOUR);\n unit = value === 1 ? 'hour' : 'hours';\n } else if (absDiff < MS_PER_WEEK) {\n value = Math.round(absDiff / MS_PER_DAY);\n unit = value === 1 ? 'day' : 'days';\n } else if (absDiff < MS_PER_DAY * 30) {\n value = Math.round(absDiff / MS_PER_WEEK);\n unit = value === 1 ? 'week' : 'weeks';\n } else if (absDiff < MS_PER_DAY * 365) {\n value = Math.round(absDiff / (MS_PER_DAY * 30));\n unit = value === 1 ? 'month' : 'months';\n } else {\n value = Math.round(absDiff / (MS_PER_DAY * 365));\n unit = value === 1 ? 'year' : 'years';\n }\n\n return isPast ? `${value} ${unit} ago` : `in ${value} ${unit}`;\n}\n\n/**\n * time/duration - Format milliseconds as duration (\"2h 30m\")\n */\nexport function evalTimeDuration(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n let ms = evaluate(args[0], ctx) as number;\n\n if (ms < 0) ms = -ms;\n\n const parts: string[] = [];\n\n if (ms >= MS_PER_DAY) {\n const days = Math.floor(ms / MS_PER_DAY);\n parts.push(`${days}d`);\n ms %= MS_PER_DAY;\n }\n\n if (ms >= MS_PER_HOUR) {\n const hours = Math.floor(ms / MS_PER_HOUR);\n parts.push(`${hours}h`);\n ms %= MS_PER_HOUR;\n }\n\n if (ms >= MS_PER_MINUTE) {\n const minutes = Math.floor(ms / MS_PER_MINUTE);\n parts.push(`${minutes}m`);\n ms %= MS_PER_MINUTE;\n }\n\n if (ms >= MS_PER_SECOND && parts.length < 2) {\n const seconds = Math.floor(ms / MS_PER_SECOND);\n parts.push(`${seconds}s`);\n }\n\n return parts.length > 0 ? parts.join(' ') : '0s';\n}\n","/**\n * Format Module Runtime Evaluators\n *\n * Runtime implementations for format/* operators.\n * Provides formatting functions for numbers, currencies, and display values.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype EvalFn = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n/**\n * format/number - Format number with locale-aware separators\n */\nexport function evalFormatNumber(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const n = evaluate(args[0], ctx) as number;\n const opts = args.length > 1 ? (evaluate(args[1], ctx) as { decimals?: number; locale?: string }) : {};\n\n const locale = opts?.locale ?? 'en-US';\n const options: Intl.NumberFormatOptions = {};\n\n if (opts?.decimals !== undefined) {\n options.minimumFractionDigits = opts.decimals;\n options.maximumFractionDigits = opts.decimals;\n }\n\n return new Intl.NumberFormat(locale, options).format(n);\n}\n\n/**\n * format/currency - Format as currency\n */\nexport function evalFormatCurrency(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const n = evaluate(args[0], ctx) as number;\n const currency = evaluate(args[1], ctx) as string;\n const locale = args.length > 2 ? (evaluate(args[2], ctx) as string) : 'en-US';\n\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: currency,\n }).format(n);\n}\n\n/**\n * format/percent - Format as percentage\n */\nexport function evalFormatPercent(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const n = evaluate(args[0], ctx) as number;\n const decimals = args.length > 1 ? (evaluate(args[1], ctx) as number) : 0;\n\n return new Intl.NumberFormat('en-US', {\n style: 'percent',\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(n);\n}\n\n/**\n * format/bytes - Format bytes as human-readable size\n */\nexport function evalFormatBytes(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const bytes = evaluate(args[0], ctx) as number;\n\n if (bytes === 0) return '0 B';\n\n const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const k = 1024;\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n const value = bytes / Math.pow(k, i);\n // Use different precision rules\n if (i === 0) {\n return `${bytes} B`;\n }\n // Round values >= 10, or use 1 decimal for smaller values\n // Also remove .0 for whole numbers\n let formatted: string;\n if (value >= 10) {\n formatted = String(Math.round(value));\n } else if (Number.isInteger(value)) {\n formatted = String(value);\n } else {\n formatted = value.toFixed(1);\n }\n\n return `${formatted} ${units[i]}`;\n}\n\n/**\n * format/ordinal - Format number as ordinal (1st, 2nd, 3rd)\n */\nexport function evalFormatOrdinal(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const n = evaluate(args[0], ctx) as number;\n\n const absN = Math.abs(n);\n const lastDigit = absN % 10;\n const lastTwoDigits = absN % 100;\n\n let suffix: string;\n if (lastTwoDigits >= 11 && lastTwoDigits <= 13) {\n suffix = 'th';\n } else if (lastDigit === 1) {\n suffix = 'st';\n } else if (lastDigit === 2) {\n suffix = 'nd';\n } else if (lastDigit === 3) {\n suffix = 'rd';\n } else {\n suffix = 'th';\n }\n\n return `${n}${suffix}`;\n}\n\n/**\n * format/plural - Format count with singular/plural word\n */\nexport function evalFormatPlural(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const n = evaluate(args[0], ctx) as number;\n const singular = evaluate(args[1], ctx) as string;\n const plural = evaluate(args[2], ctx) as string;\n\n return `${n} ${Math.abs(n) === 1 ? singular : plural}`;\n}\n\n/**\n * format/list - Format array as natural language list\n */\nexport function evalFormatList(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const arr = evaluate(args[0], ctx) as string[];\n const style = args.length > 1 ? (evaluate(args[1], ctx) as 'and' | 'or') : 'and';\n\n if (!arr || arr.length === 0) return '';\n if (arr.length === 1) return arr[0];\n if (arr.length === 2) return `${arr[0]} ${style} ${arr[1]}`;\n\n const last = arr[arr.length - 1];\n const rest = arr.slice(0, -1);\n return `${rest.join(', ')}, ${style} ${last}`;\n}\n\n/**\n * format/phone - Format phone number\n */\nexport function evalFormatPhone(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const str = evaluate(args[0], ctx) as string;\n const format = args.length > 1 ? (evaluate(args[1], ctx) as string) : 'US';\n\n // Extract only digits\n const digits = str?.replace(/\\D/g, '') ?? '';\n\n if (format === 'US' && digits.length === 10) {\n return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6)}`;\n }\n\n if (format === 'US' && digits.length === 11 && digits[0] === '1') {\n return `+1 (${digits.slice(1, 4)}) ${digits.slice(4, 7)}-${digits.slice(7)}`;\n }\n\n // Default: group into chunks of 3-4\n if (digits.length >= 10) {\n return `${digits.slice(0, 3)}-${digits.slice(3, 6)}-${digits.slice(6)}`;\n }\n\n return str;\n}\n\n/**\n * format/creditCard - Format credit card with masked digits\n */\nexport function evalFormatCreditCard(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const str = evaluate(args[0], ctx) as string;\n\n const digits = str?.replace(/\\D/g, '') ?? '';\n\n if (digits.length < 4) return str;\n\n // Show only last 4 digits\n const lastFour = digits.slice(-4);\n const masked = '•'.repeat(digits.length - 4);\n\n // Format in groups of 4\n const combined = masked + lastFour;\n return combined.match(/.{1,4}/g)?.join(' ') ?? combined;\n}\n","/**\n * Async Module Runtime Evaluators\n *\n * Runtime implementations for async/* operators.\n * Provides functions for handling async operations, delays, and timing.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from '../types/expression.js';\nimport type { EvaluationContext } from '../context.js';\n\ntype EvalFn = (expr: SExpr, ctx: EvaluationContext) => unknown;\n\n// Debounce timers keyed by event name\nconst debounceTimers = new Map<string, ReturnType<typeof setTimeout>>();\n\n// Throttle timestamps keyed by event name\nconst throttleTimestamps = new Map<string, number>();\n\n// Interval timers keyed by a generated ID\nconst intervalTimers = new Map<string, ReturnType<typeof setInterval>>();\nlet intervalIdCounter = 0;\n\n/**\n * async/delay - Wait for specified milliseconds, optionally execute an effect after\n *\n * 1-arg form: [\"async/delay\", ms] — just wait\n * 2-arg form: [\"async/delay\", ms, effect] — wait, then execute effect\n */\nexport async function evalAsyncDelay(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Promise<unknown> {\n const ms = evaluate(args[0], ctx) as number;\n await new Promise<void>((resolve) => setTimeout(resolve, ms));\n\n // 2-arg form: execute effect after delay\n if (args.length >= 2 && args[1] !== undefined) {\n return evaluate(args[1], ctx);\n }\n\n return undefined;\n}\n\n/**\n * async/interval - Execute an effect periodically\n *\n * [\"async/interval\", ms, effect] — execute effect every ms milliseconds\n *\n * Returns an interval ID string that can be used with clearIntervalTimers().\n */\nexport function evalAsyncInterval(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): string {\n const ms = evaluate(args[0], ctx) as number;\n const effect = args[1];\n const id = `interval_${++intervalIdCounter}`;\n\n const timer = setInterval(() => {\n try {\n evaluate(effect, ctx);\n } catch {\n // Effect errors in interval should not crash the timer\n }\n }, ms);\n\n intervalTimers.set(id, timer);\n return id;\n}\n\n/**\n * async/timeout - Add timeout to an effect\n */\nexport async function evalAsyncTimeout(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Promise<unknown> {\n const effect = args[0];\n const ms = evaluate(args[1], ctx) as number;\n\n return Promise.race([\n Promise.resolve().then(() => evaluate(effect, ctx)),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error('Timeout exceeded')), ms)\n ),\n ]);\n}\n\n/**\n * async/debounce - Debounce an event (wait for pause in events)\n */\nexport function evalAsyncDebounce(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): void {\n const event = evaluate(args[0], ctx) as string;\n const ms = evaluate(args[1], ctx) as number;\n\n // Clear existing timer if any\n const existingTimer = debounceTimers.get(event);\n if (existingTimer) {\n clearTimeout(existingTimer);\n }\n\n // Set new timer\n const timer = setTimeout(() => {\n debounceTimers.delete(event);\n // Emit the event\n ctx.emit?.(event);\n }, ms);\n\n debounceTimers.set(event, timer);\n}\n\n/**\n * async/throttle - Throttle an event (emit at most once per interval)\n */\nexport function evalAsyncThrottle(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): void {\n const event = evaluate(args[0], ctx) as string;\n const ms = evaluate(args[1], ctx) as number;\n\n const now = Date.now();\n const lastTimestamp = throttleTimestamps.get(event) ?? 0;\n\n if (now - lastTimestamp >= ms) {\n throttleTimestamps.set(event, now);\n ctx.emit?.(event);\n }\n}\n\n/**\n * async/retry - Retry an effect with configurable backoff\n */\nexport async function evalAsyncRetry(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Promise<unknown> {\n const effect = args[0];\n const opts = evaluate(args[1], ctx) as {\n attempts?: number;\n backoff?: 'fixed' | 'linear' | 'exponential';\n baseDelay?: number;\n };\n\n const attempts = opts?.attempts ?? 3;\n const backoff = opts?.backoff ?? 'exponential';\n const baseDelay = opts?.baseDelay ?? 1000;\n\n let lastError: unknown;\n\n for (let i = 0; i < attempts; i++) {\n try {\n return await Promise.resolve().then(() => evaluate(effect, ctx));\n } catch (error) {\n lastError = error;\n\n if (i < attempts - 1) {\n // Calculate delay based on backoff strategy\n let delay: number;\n switch (backoff) {\n case 'fixed':\n delay = baseDelay;\n break;\n case 'linear':\n delay = baseDelay * (i + 1);\n break;\n case 'exponential':\n default:\n delay = baseDelay * Math.pow(2, i);\n break;\n }\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n }\n\n throw lastError;\n}\n\n/**\n * async/race - Execute effects in parallel, return first to complete\n */\nexport async function evalAsyncRace(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Promise<unknown> {\n const promises = args.map((effect) =>\n Promise.resolve().then(() => evaluate(effect, ctx))\n );\n return Promise.race(promises);\n}\n\n/**\n * async/all - Execute effects in parallel, wait for all to complete\n */\nexport async function evalAsyncAll(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Promise<unknown[]> {\n const promises = args.map((effect) =>\n Promise.resolve().then(() => evaluate(effect, ctx))\n );\n return Promise.all(promises);\n}\n\n/**\n * async/sequence - Execute effects in sequence (one after another)\n */\nexport async function evalAsyncSequence(\n args: SExpr[],\n evaluate: EvalFn,\n ctx: EvaluationContext\n): Promise<unknown[]> {\n const results: unknown[] = [];\n\n for (const effect of args) {\n const result = await Promise.resolve().then(() => evaluate(effect, ctx));\n results.push(result);\n }\n\n return results;\n}\n\n/**\n * Clear debounce timers (for testing/cleanup)\n */\nexport function clearDebounceTimers(): void {\n for (const timer of debounceTimers.values()) {\n clearTimeout(timer);\n }\n debounceTimers.clear();\n}\n\n/**\n * Clear throttle timestamps (for testing/cleanup)\n */\nexport function clearThrottleTimestamps(): void {\n throttleTimestamps.clear();\n}\n\n/**\n * Clear interval timers (for testing/cleanup)\n */\nexport function clearIntervalTimers(): void {\n for (const timer of intervalTimers.values()) {\n clearInterval(timer);\n }\n intervalTimers.clear();\n}\n","/**\n * S-Expression Evaluator\n *\n * Runtime interpreter for S-expressions.\n * Used for evaluating guards and executing effects in the preview system.\n *\n * @packageDocumentation\n */\n\nimport type { SExpr } from './types/expression.js';\nimport { isSExpr, isBinding, getOperator, getArgs } from './types/expression.js';\nimport type { EvaluationContext } from './context.js';\nimport { resolveBinding } from './context.js';\n\n// Import operators\nimport {\n evalAdd,\n evalSubtract,\n evalMultiply,\n evalDivide,\n evalModulo,\n evalAbs,\n evalMin,\n evalMax,\n evalFloor,\n evalCeil,\n evalRound,\n evalClamp,\n evalEqual,\n evalNotEqual,\n evalLessThan,\n evalGreaterThan,\n evalLessThanOrEqual,\n evalGreaterThanOrEqual,\n evalMatches,\n evalAnd,\n evalOr,\n evalNot,\n evalIf,\n evalLet,\n evalDo,\n evalWhen,\n evalMap,\n evalFilter,\n evalFind,\n evalCount,\n evalSum,\n evalFirst,\n evalLast,\n evalNth,\n evalConcat,\n evalIncludes,\n evalEmpty,\n evalSet,\n evalSetDynamic,\n evalIncrement,\n evalDecrement,\n evalEmit,\n evalPersist,\n evalNavigate,\n evalNotify,\n evalSpawn,\n evalDespawn,\n evalCallService,\n evalRenderUI,\n} from './operators/index.js';\n\n// Import std library evaluators\nimport * as stdMath from './std/math.js';\nimport * as stdStr from './std/str.js';\nimport * as stdArray from './std/array.js';\nimport * as stdObject from './std/object.js';\nimport * as stdValidate from './std/validate.js';\nimport * as stdTime from './std/time.js';\nimport * as stdFormat from './std/format.js';\nimport * as stdAsync from './std/async.js';\n\n/**\n * JIT compilation cache for hot paths.\n * Maps S-expression JSON to compiled function.\n */\nconst jitCache = new Map<string, (ctx: EvaluationContext) => unknown>();\n\n/**\n * Maximum JIT cache size to prevent memory issues.\n */\nconst MAX_JIT_CACHE_SIZE = 1000;\n\n/**\n * S-Expression Evaluator class.\n *\n * Provides runtime interpretation of S-expressions for guards, effects, and computed values.\n */\nexport class SExpressionEvaluator {\n /**\n * Evaluate an S-expression in the given context.\n *\n * @param expr - S-expression to evaluate\n * @param ctx - Evaluation context with bindings and effect handlers\n * @returns Result of evaluation\n */\n evaluate(expr: SExpr, ctx: EvaluationContext): unknown {\n // Atom: literal value\n if (!isSExpr(expr)) {\n // Check if it's a binding\n if (isBinding(expr)) {\n return resolveBinding(expr, ctx);\n }\n // Return literal value\n return expr;\n }\n\n // S-expression call\n const op = getOperator(expr)!;\n const args = getArgs(expr);\n\n // Dispatch to operator implementation\n return this.dispatchOperator(op, args, ctx);\n }\n\n /**\n * Evaluate an S-expression as a guard (returns boolean).\n *\n * @param expr - S-expression guard\n * @param ctx - Evaluation context\n * @returns true if guard passes, false otherwise\n */\n evaluateGuard(expr: SExpr, ctx: EvaluationContext): boolean {\n const result = this.evaluate(expr, ctx);\n return Boolean(result);\n }\n\n /**\n * Execute an effect S-expression.\n *\n * @param expr - Effect S-expression (e.g., [\"set\", \"@entity.x\", 10])\n * @param ctx - Evaluation context with effect handlers\n */\n executeEffect(expr: SExpr, ctx: EvaluationContext): void {\n this.evaluate(expr, ctx);\n }\n\n /**\n * Execute multiple effects in sequence.\n *\n * @param effects - Array of effect S-expressions\n * @param ctx - Evaluation context with effect handlers\n */\n executeEffects(effects: SExpr[], ctx: EvaluationContext): void {\n for (const effect of effects) {\n this.executeEffect(effect, ctx);\n }\n }\n\n /**\n * Compile an S-expression to a function for faster repeated evaluation.\n * Uses a cache to avoid recompilation.\n *\n * @param expr - S-expression to compile\n * @returns Function that evaluates the expression given a context\n */\n compile(expr: SExpr): (ctx: EvaluationContext) => unknown {\n const key = JSON.stringify(expr);\n\n // Check cache\n const cached = jitCache.get(key);\n if (cached) {\n return cached;\n }\n\n // Compile to function\n const fn = (ctx: EvaluationContext) => this.evaluate(expr, ctx);\n\n // Add to cache (with size limit)\n if (jitCache.size >= MAX_JIT_CACHE_SIZE) {\n // Remove oldest entry (first key)\n const firstKey = jitCache.keys().next().value;\n if (firstKey) {\n jitCache.delete(firstKey);\n }\n }\n jitCache.set(key, fn);\n\n return fn;\n }\n\n /**\n * Clear the JIT compilation cache.\n */\n clearCache(): void {\n jitCache.clear();\n }\n\n /**\n * Dispatch to the appropriate operator implementation.\n */\n private dispatchOperator(op: string, args: SExpr[], ctx: EvaluationContext): unknown {\n // Bind evaluate method for passing to operator implementations\n const evaluate = (expr: SExpr, c: EvaluationContext) => this.evaluate(expr, c);\n\n switch (op) {\n // Arithmetic\n case '+':\n return evalAdd(args, evaluate, ctx);\n case '-':\n return evalSubtract(args, evaluate, ctx);\n case '*':\n return evalMultiply(args, evaluate, ctx);\n case '/':\n return evalDivide(args, evaluate, ctx);\n case '%':\n return evalModulo(args, evaluate, ctx);\n case 'abs':\n return evalAbs(args, evaluate, ctx);\n case 'min':\n return evalMin(args, evaluate, ctx);\n case 'max':\n return evalMax(args, evaluate, ctx);\n case 'floor':\n return evalFloor(args, evaluate, ctx);\n case 'ceil':\n return evalCeil(args, evaluate, ctx);\n case 'round':\n return evalRound(args, evaluate, ctx);\n case 'clamp':\n return evalClamp(args, evaluate, ctx);\n\n // Comparison\n case '=':\n return evalEqual(args, evaluate, ctx);\n case '!=':\n return evalNotEqual(args, evaluate, ctx);\n case '<':\n return evalLessThan(args, evaluate, ctx);\n case '>':\n return evalGreaterThan(args, evaluate, ctx);\n case '<=':\n return evalLessThanOrEqual(args, evaluate, ctx);\n case '>=':\n return evalGreaterThanOrEqual(args, evaluate, ctx);\n case 'matches':\n return evalMatches(args, evaluate, ctx);\n\n // Logic\n case 'and':\n return evalAnd(args, evaluate, ctx);\n case 'or':\n return evalOr(args, evaluate, ctx);\n case 'not':\n return evalNot(args, evaluate, ctx);\n case 'if':\n return evalIf(args, evaluate, ctx);\n\n // Control\n case 'let':\n return evalLet(args, evaluate, ctx);\n case 'do':\n return evalDo(args, evaluate, ctx);\n case 'when':\n return evalWhen(args, evaluate, ctx);\n\n // Collections\n case 'map':\n return evalMap(args, evaluate, ctx);\n case 'filter':\n return evalFilter(args, evaluate, ctx);\n case 'find':\n return evalFind(args, evaluate, ctx);\n case 'count':\n return evalCount(args, evaluate, ctx);\n case 'sum':\n return evalSum(args, evaluate, ctx);\n case 'first':\n return evalFirst(args, evaluate, ctx);\n case 'last':\n return evalLast(args, evaluate, ctx);\n case 'nth':\n return evalNth(args, evaluate, ctx);\n case 'concat':\n return evalConcat(args, evaluate, ctx);\n case 'includes':\n return evalIncludes(args, evaluate, ctx);\n case 'empty':\n return evalEmpty(args, evaluate, ctx);\n\n // Effects\n case 'set':\n evalSet(args, evaluate, ctx);\n return undefined;\n case 'set-dynamic':\n evalSetDynamic(args, evaluate, ctx);\n return undefined;\n case 'increment':\n evalIncrement(args, evaluate, ctx);\n return undefined;\n case 'decrement':\n evalDecrement(args, evaluate, ctx);\n return undefined;\n case 'emit':\n evalEmit(args, evaluate, ctx);\n return undefined;\n case 'persist':\n evalPersist(args, evaluate, ctx);\n return undefined;\n case 'navigate':\n evalNavigate(args, evaluate, ctx);\n return undefined;\n case 'notify':\n evalNotify(args, evaluate, ctx);\n return undefined;\n case 'spawn':\n evalSpawn(args, evaluate, ctx);\n return undefined;\n case 'despawn':\n evalDespawn(args, evaluate, ctx);\n return undefined;\n case 'call-service':\n evalCallService(args, evaluate, ctx);\n return undefined;\n case 'render-ui':\n evalRenderUI(args, evaluate, ctx);\n return undefined;\n\n // ===============================\n // Standard Library: math/*\n // ===============================\n case 'math/abs':\n return stdMath.evalMathAbs(args, evaluate, ctx);\n case 'math/min':\n return stdMath.evalMathMin(args, evaluate, ctx);\n case 'math/max':\n return stdMath.evalMathMax(args, evaluate, ctx);\n case 'math/clamp':\n return stdMath.evalMathClamp(args, evaluate, ctx);\n case 'math/floor':\n return stdMath.evalMathFloor(args, evaluate, ctx);\n case 'math/ceil':\n return stdMath.evalMathCeil(args, evaluate, ctx);\n case 'math/round':\n return stdMath.evalMathRound(args, evaluate, ctx);\n case 'math/pow':\n return stdMath.evalMathPow(args, evaluate, ctx);\n case 'math/sqrt':\n return stdMath.evalMathSqrt(args, evaluate, ctx);\n case 'math/mod':\n return stdMath.evalMathMod(args, evaluate, ctx);\n case 'math/sign':\n return stdMath.evalMathSign(args, evaluate, ctx);\n case 'math/lerp':\n return stdMath.evalMathLerp(args, evaluate, ctx);\n case 'math/map':\n return stdMath.evalMathMap(args, evaluate, ctx);\n case 'math/random':\n return stdMath.evalMathRandom();\n case 'math/randomInt':\n return stdMath.evalMathRandomInt(args, evaluate, ctx);\n case 'math/default':\n return stdMath.evalMathDefault(args, evaluate, ctx);\n\n // ===============================\n // Standard Library: str/*\n // ===============================\n case 'str/len':\n return stdStr.evalStrLen(args, evaluate, ctx);\n case 'str/concat':\n return stdStr.evalStrConcat(args, evaluate, ctx);\n case 'str/upper':\n return stdStr.evalStrUpper(args, evaluate, ctx);\n case 'str/lower':\n return stdStr.evalStrLower(args, evaluate, ctx);\n case 'str/trim':\n return stdStr.evalStrTrim(args, evaluate, ctx);\n case 'str/trimStart':\n return stdStr.evalStrTrimStart(args, evaluate, ctx);\n case 'str/trimEnd':\n return stdStr.evalStrTrimEnd(args, evaluate, ctx);\n case 'str/split':\n return stdStr.evalStrSplit(args, evaluate, ctx);\n case 'str/join':\n return stdStr.evalStrJoin(args, evaluate, ctx);\n case 'str/slice':\n return stdStr.evalStrSlice(args, evaluate, ctx);\n case 'str/replace':\n return stdStr.evalStrReplace(args, evaluate, ctx);\n case 'str/replaceAll':\n return stdStr.evalStrReplaceAll(args, evaluate, ctx);\n case 'str/includes':\n return stdStr.evalStrIncludes(args, evaluate, ctx);\n case 'str/startsWith':\n return stdStr.evalStrStartsWith(args, evaluate, ctx);\n case 'str/endsWith':\n return stdStr.evalStrEndsWith(args, evaluate, ctx);\n case 'str/padStart':\n return stdStr.evalStrPadStart(args, evaluate, ctx);\n case 'str/padEnd':\n return stdStr.evalStrPadEnd(args, evaluate, ctx);\n case 'str/repeat':\n return stdStr.evalStrRepeat(args, evaluate, ctx);\n case 'str/reverse':\n return stdStr.evalStrReverse(args, evaluate, ctx);\n case 'str/capitalize':\n return stdStr.evalStrCapitalize(args, evaluate, ctx);\n case 'str/titleCase':\n return stdStr.evalStrTitleCase(args, evaluate, ctx);\n case 'str/camelCase':\n return stdStr.evalStrCamelCase(args, evaluate, ctx);\n case 'str/kebabCase':\n return stdStr.evalStrKebabCase(args, evaluate, ctx);\n case 'str/snakeCase':\n return stdStr.evalStrSnakeCase(args, evaluate, ctx);\n case 'str/default':\n return stdStr.evalStrDefault(args, evaluate, ctx);\n case 'str/template':\n return stdStr.evalStrTemplate(args, evaluate, ctx);\n case 'str/truncate':\n return stdStr.evalStrTruncate(args, evaluate, ctx);\n\n // ===============================\n // Standard Library: array/*\n // ===============================\n case 'array/len':\n return stdArray.evalArrayLen(args, evaluate, ctx);\n case 'array/empty?':\n return stdArray.evalArrayEmpty(args, evaluate, ctx);\n case 'array/first':\n return stdArray.evalArrayFirst(args, evaluate, ctx);\n case 'array/last':\n return stdArray.evalArrayLast(args, evaluate, ctx);\n case 'array/nth':\n return stdArray.evalArrayNth(args, evaluate, ctx);\n case 'array/slice':\n return stdArray.evalArraySlice(args, evaluate, ctx);\n case 'array/concat':\n return stdArray.evalArrayConcat(args, evaluate, ctx);\n case 'array/append':\n return stdArray.evalArrayAppend(args, evaluate, ctx);\n case 'array/prepend':\n return stdArray.evalArrayPrepend(args, evaluate, ctx);\n case 'array/insert':\n return stdArray.evalArrayInsert(args, evaluate, ctx);\n case 'array/remove':\n return stdArray.evalArrayRemove(args, evaluate, ctx);\n case 'array/removeItem':\n return stdArray.evalArrayRemoveItem(args, evaluate, ctx);\n case 'array/reverse':\n return stdArray.evalArrayReverse(args, evaluate, ctx);\n case 'array/sort':\n return stdArray.evalArraySort(args, evaluate, ctx);\n case 'array/shuffle':\n return stdArray.evalArrayShuffle(args, evaluate, ctx);\n case 'array/unique':\n return stdArray.evalArrayUnique(args, evaluate, ctx);\n case 'array/flatten':\n return stdArray.evalArrayFlatten(args, evaluate, ctx);\n case 'array/zip':\n return stdArray.evalArrayZip(args, evaluate, ctx);\n case 'array/includes':\n return stdArray.evalArrayIncludes(args, evaluate, ctx);\n case 'array/indexOf':\n return stdArray.evalArrayIndexOf(args, evaluate, ctx);\n case 'array/find':\n return stdArray.evalArrayFind(args, evaluate, ctx);\n case 'array/findIndex':\n return stdArray.evalArrayFindIndex(args, evaluate, ctx);\n case 'array/filter':\n return stdArray.evalArrayFilter(args, evaluate, ctx);\n case 'array/reject':\n return stdArray.evalArrayReject(args, evaluate, ctx);\n case 'array/map':\n return stdArray.evalArrayMap(args, evaluate, ctx);\n case 'array/reduce':\n return stdArray.evalArrayReduce(args, evaluate, ctx);\n case 'array/every':\n return stdArray.evalArrayEvery(args, evaluate, ctx);\n case 'array/some':\n return stdArray.evalArraySome(args, evaluate, ctx);\n case 'array/count':\n return stdArray.evalArrayCount(args, evaluate, ctx);\n case 'array/sum':\n return stdArray.evalArraySum(args, evaluate, ctx);\n case 'array/avg':\n return stdArray.evalArrayAvg(args, evaluate, ctx);\n case 'array/min':\n return stdArray.evalArrayMin(args, evaluate, ctx);\n case 'array/max':\n return stdArray.evalArrayMax(args, evaluate, ctx);\n case 'array/groupBy':\n return stdArray.evalArrayGroupBy(args, evaluate, ctx);\n case 'array/partition':\n return stdArray.evalArrayPartition(args, evaluate, ctx);\n case 'array/take':\n return stdArray.evalArrayTake(args, evaluate, ctx);\n case 'array/drop':\n return stdArray.evalArrayDrop(args, evaluate, ctx);\n case 'array/takeLast':\n return stdArray.evalArrayTakeLast(args, evaluate, ctx);\n case 'array/dropLast':\n return stdArray.evalArrayDropLast(args, evaluate, ctx);\n\n // ===============================\n // Standard Library: object/*\n // ===============================\n case 'object/keys':\n return stdObject.evalObjectKeys(args, evaluate, ctx);\n case 'object/values':\n return stdObject.evalObjectValues(args, evaluate, ctx);\n case 'object/entries':\n return stdObject.evalObjectEntries(args, evaluate, ctx);\n case 'object/fromEntries':\n return stdObject.evalObjectFromEntries(args, evaluate, ctx);\n case 'object/get':\n return stdObject.evalObjectGet(args, evaluate, ctx);\n case 'object/set':\n return stdObject.evalObjectSet(args, evaluate, ctx);\n case 'object/has':\n return stdObject.evalObjectHas(args, evaluate, ctx);\n case 'object/merge':\n return stdObject.evalObjectMerge(args, evaluate, ctx);\n case 'object/deepMerge':\n return stdObject.evalObjectDeepMerge(args, evaluate, ctx);\n case 'object/pick':\n return stdObject.evalObjectPick(args, evaluate, ctx);\n case 'object/omit':\n return stdObject.evalObjectOmit(args, evaluate, ctx);\n case 'object/mapValues':\n return stdObject.evalObjectMapValues(args, evaluate, ctx);\n case 'object/mapKeys':\n return stdObject.evalObjectMapKeys(args, evaluate, ctx);\n case 'object/filter':\n return stdObject.evalObjectFilter(args, evaluate, ctx);\n case 'object/empty?':\n return stdObject.evalObjectEmpty(args, evaluate, ctx);\n case 'object/equals':\n return stdObject.evalObjectEquals(args, evaluate, ctx);\n case 'object/clone':\n return stdObject.evalObjectClone(args, evaluate, ctx);\n case 'object/deepClone':\n return stdObject.evalObjectDeepClone(args, evaluate, ctx);\n\n // Path operator (for dynamic field access)\n case 'path':\n return stdObject.evalPath(args, evaluate, ctx);\n\n // ===============================\n // Standard Library: validate/*\n // ===============================\n case 'validate/required':\n return stdValidate.evalValidateRequired(args, evaluate, ctx);\n case 'validate/string':\n return stdValidate.evalValidateString(args, evaluate, ctx);\n case 'validate/number':\n return stdValidate.evalValidateNumber(args, evaluate, ctx);\n case 'validate/boolean':\n return stdValidate.evalValidateBoolean(args, evaluate, ctx);\n case 'validate/array':\n return stdValidate.evalValidateArray(args, evaluate, ctx);\n case 'validate/object':\n return stdValidate.evalValidateObject(args, evaluate, ctx);\n case 'validate/email':\n return stdValidate.evalValidateEmail(args, evaluate, ctx);\n case 'validate/url':\n return stdValidate.evalValidateUrl(args, evaluate, ctx);\n case 'validate/uuid':\n return stdValidate.evalValidateUuid(args, evaluate, ctx);\n case 'validate/phone':\n return stdValidate.evalValidatePhone(args, evaluate, ctx);\n case 'validate/creditCard':\n return stdValidate.evalValidateCreditCard(args, evaluate, ctx);\n case 'validate/date':\n return stdValidate.evalValidateDate(args, evaluate, ctx);\n case 'validate/minLength':\n return stdValidate.evalValidateMinLength(args, evaluate, ctx);\n case 'validate/maxLength':\n return stdValidate.evalValidateMaxLength(args, evaluate, ctx);\n case 'validate/length':\n return stdValidate.evalValidateLength(args, evaluate, ctx);\n case 'validate/min':\n return stdValidate.evalValidateMin(args, evaluate, ctx);\n case 'validate/max':\n return stdValidate.evalValidateMax(args, evaluate, ctx);\n case 'validate/range':\n return stdValidate.evalValidateRange(args, evaluate, ctx);\n case 'validate/pattern':\n return stdValidate.evalValidatePattern(args, evaluate, ctx);\n case 'validate/oneOf':\n return stdValidate.evalValidateOneOf(args, evaluate, ctx);\n case 'validate/noneOf':\n return stdValidate.evalValidateNoneOf(args, evaluate, ctx);\n case 'validate/equals':\n return stdValidate.evalValidateEquals(args, evaluate, ctx);\n case 'validate/check':\n return stdValidate.evalValidateCheck(args, evaluate, ctx);\n\n // ===============================\n // Standard Library: time/*\n // ===============================\n case 'time/now':\n return stdTime.evalTimeNow();\n case 'time/today':\n return stdTime.evalTimeToday();\n case 'time/parse':\n return stdTime.evalTimeParse(args, evaluate, ctx);\n case 'time/format':\n return stdTime.evalTimeFormat(args, evaluate, ctx);\n case 'time/year':\n return stdTime.evalTimeYear(args, evaluate, ctx);\n case 'time/month':\n return stdTime.evalTimeMonth(args, evaluate, ctx);\n case 'time/day':\n return stdTime.evalTimeDay(args, evaluate, ctx);\n case 'time/weekday':\n return stdTime.evalTimeWeekday(args, evaluate, ctx);\n case 'time/hour':\n return stdTime.evalTimeHour(args, evaluate, ctx);\n case 'time/minute':\n return stdTime.evalTimeMinute(args, evaluate, ctx);\n case 'time/second':\n return stdTime.evalTimeSecond(args, evaluate, ctx);\n case 'time/add':\n return stdTime.evalTimeAdd(args, evaluate, ctx);\n case 'time/subtract':\n return stdTime.evalTimeSubtract(args, evaluate, ctx);\n case 'time/diff':\n return stdTime.evalTimeDiff(args, evaluate, ctx);\n case 'time/startOf':\n return stdTime.evalTimeStartOf(args, evaluate, ctx);\n case 'time/endOf':\n return stdTime.evalTimeEndOf(args, evaluate, ctx);\n case 'time/isBefore':\n return stdTime.evalTimeIsBefore(args, evaluate, ctx);\n case 'time/isAfter':\n return stdTime.evalTimeIsAfter(args, evaluate, ctx);\n case 'time/isBetween':\n return stdTime.evalTimeIsBetween(args, evaluate, ctx);\n case 'time/isSame':\n return stdTime.evalTimeIsSame(args, evaluate, ctx);\n case 'time/isPast':\n return stdTime.evalTimeIsPast(args, evaluate, ctx);\n case 'time/isFuture':\n return stdTime.evalTimeIsFuture(args, evaluate, ctx);\n case 'time/isToday':\n return stdTime.evalTimeIsToday(args, evaluate, ctx);\n case 'time/relative':\n return stdTime.evalTimeRelative(args, evaluate, ctx);\n case 'time/duration':\n return stdTime.evalTimeDuration(args, evaluate, ctx);\n\n // ===============================\n // Standard Library: format/*\n // ===============================\n case 'format/number':\n return stdFormat.evalFormatNumber(args, evaluate, ctx);\n case 'format/currency':\n return stdFormat.evalFormatCurrency(args, evaluate, ctx);\n case 'format/percent':\n return stdFormat.evalFormatPercent(args, evaluate, ctx);\n case 'format/bytes':\n return stdFormat.evalFormatBytes(args, evaluate, ctx);\n case 'format/ordinal':\n return stdFormat.evalFormatOrdinal(args, evaluate, ctx);\n case 'format/plural':\n return stdFormat.evalFormatPlural(args, evaluate, ctx);\n case 'format/list':\n return stdFormat.evalFormatList(args, evaluate, ctx);\n case 'format/phone':\n return stdFormat.evalFormatPhone(args, evaluate, ctx);\n case 'format/creditCard':\n return stdFormat.evalFormatCreditCard(args, evaluate, ctx);\n\n // ===============================\n // Standard Library: async/*\n // ===============================\n case 'async/delay':\n return stdAsync.evalAsyncDelay(args, evaluate, ctx);\n case 'async/interval':\n return stdAsync.evalAsyncInterval(args, evaluate, ctx);\n case 'async/timeout':\n return stdAsync.evalAsyncTimeout(args, evaluate, ctx);\n case 'async/debounce':\n stdAsync.evalAsyncDebounce(args, evaluate, ctx);\n return undefined;\n case 'async/throttle':\n stdAsync.evalAsyncThrottle(args, evaluate, ctx);\n return undefined;\n case 'async/retry':\n return stdAsync.evalAsyncRetry(args, evaluate, ctx);\n case 'async/race':\n return stdAsync.evalAsyncRace(args, evaluate, ctx);\n case 'async/all':\n return stdAsync.evalAsyncAll(args, evaluate, ctx);\n case 'async/sequence':\n return stdAsync.evalAsyncSequence(args, evaluate, ctx);\n\n default:\n console.warn(`Unknown operator: ${op}`);\n return undefined;\n }\n }\n}\n\n// Export singleton instance for convenience\nexport const evaluator = new SExpressionEvaluator();\n\n// Export convenience functions\nexport function evaluate(expr: SExpr, ctx: EvaluationContext): unknown {\n return evaluator.evaluate(expr, ctx);\n}\n\nexport function evaluateGuard(expr: SExpr, ctx: EvaluationContext): boolean {\n return evaluator.evaluateGuard(expr, ctx);\n}\n\nexport function executeEffect(expr: SExpr, ctx: EvaluationContext): void {\n evaluator.executeEffect(expr, ctx);\n}\n\nexport function executeEffects(effects: SExpr[], ctx: EvaluationContext): void {\n evaluator.executeEffects(effects, ctx);\n}\n"]}
|