@almadar/evaluator 2.1.1 → 2.3.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.
@@ -1,2 +1,2 @@
1
- export { e as evalAbs, d as evalAdd, f as evalAnd, g as evalCallService, h as evalCeil, i as evalClamp, j as evalConcat, k as evalCount, l as evalDecrement, m as evalDespawn, n as evalDivide, o as evalDo, p as evalEmit, q as evalEmpty, r as evalEqual, s as evalFilter, t as evalFind, u as evalFirst, v as evalFloor, w as evalFn, x as evalGreaterThan, y as evalGreaterThanOrEqual, z as evalIf, A as evalIncludes, B as evalIncrement, C as evalLast, D as evalLessThan, F as evalLessThanOrEqual, G as evalLet, H as evalMap, I as evalMatches, J as evalMax, K as evalMin, L as evalModulo, M as evalMultiply, N as evalNavigate, O as evalNot, P as evalNotEqual, Q as evalNotify, R as evalNth, S as evalOr, T as evalPersist, U as evalRenderUI, V as evalRound, W as evalSet, X as evalSetDynamic, Y as evalSpawn, Z as evalSubtract, _ as evalSum, $ as evalWhen } from '../index-DBM7Xkm3.js';
1
+ export { e as evalAbs, d as evalAdd, f as evalAnd, g as evalCallService, h as evalCeil, i as evalClamp, j as evalConcat, k as evalCount, l as evalDecrement, m as evalDespawn, n as evalDivide, o as evalDo, p as evalEmit, q as evalEmpty, r as evalEqual, s as evalFilter, t as evalFind, u as evalFirst, v as evalFloor, w as evalFn, x as evalGreaterThan, y as evalGreaterThanOrEqual, z as evalIf, A as evalIncludes, B as evalIncrement, C as evalLast, D as evalLessThan, F as evalLessThanOrEqual, G as evalLet, H as evalMap, I as evalMatches, J as evalMax, K as evalMin, L as evalModulo, M as evalMultiply, N as evalNavigate, O as evalNot, P as evalNotEqual, Q as evalNotify, R as evalNth, S as evalOr, T as evalPersist, U as evalRenderUI, V as evalRound, W as evalSet, X as evalSetDynamic, Y as evalSpawn, Z as evalSubtract, _ as evalSum, $ as evalWhen } from '../index-C-vYm4zW.js';
2
2
  import '@almadar/core';
@@ -235,12 +235,12 @@ function resolveBinding(binding, ctx) {
235
235
 
236
236
  // operators/control.ts
237
237
  function evalLet(args, evaluate, ctx) {
238
- const bindings = args[0];
238
+ const rawBindings = args[0];
239
239
  const body = args[1];
240
+ const bindingPairs = Array.isArray(rawBindings) ? rawBindings.map((b) => [b[0], b[1]]) : Object.entries(rawBindings);
240
241
  const locals = /* @__PURE__ */ new Map();
241
- for (const binding of bindings) {
242
- const name = binding[0];
243
- const value = evaluate(binding[1], ctx);
242
+ for (const [name, valueExpr] of bindingPairs) {
243
+ const value = evaluate(valueExpr, ctx);
244
244
  locals.set(name, value);
245
245
  }
246
246
  const childCtx = createChildContext(ctx, locals);
@@ -278,44 +278,26 @@ function evalFn(args, _evaluate, _ctx) {
278
278
  }
279
279
 
280
280
  // operators/collections.ts
281
+ function withItem(expr, evaluate, ctx, item, index) {
282
+ const locals = /* @__PURE__ */ new Map();
283
+ locals.set("item", item);
284
+ locals.set("index", index);
285
+ return evaluate(expr, createChildContext(ctx, locals));
286
+ }
281
287
  function evalMap(args, evaluate, ctx) {
282
288
  const collection = toArray(evaluate(args[0], ctx));
283
- const fnExpr = args[1];
284
- const params = fnExpr[1];
285
- const body = fnExpr[2];
286
- const varName = typeof params === "string" ? params : params[0];
287
- return collection.map((item) => {
288
- const locals = /* @__PURE__ */ new Map();
289
- locals.set(varName, item);
290
- const childCtx = createChildContext(ctx, locals);
291
- return evaluate(body, childCtx);
292
- });
289
+ const mapExpr = args[1];
290
+ return collection.map((item, i) => withItem(mapExpr, evaluate, ctx, item, i));
293
291
  }
294
292
  function evalFilter(args, evaluate, ctx) {
295
293
  const collection = toArray(evaluate(args[0], ctx));
296
- const fnExpr = args[1];
297
- const params = fnExpr[1];
298
- const body = fnExpr[2];
299
- const varName = typeof params === "string" ? params : params[0];
300
- return collection.filter((item) => {
301
- const locals = /* @__PURE__ */ new Map();
302
- locals.set(varName, item);
303
- const childCtx = createChildContext(ctx, locals);
304
- return Boolean(evaluate(body, childCtx));
305
- });
294
+ const predExpr = args[1];
295
+ return collection.filter((item, i) => Boolean(withItem(predExpr, evaluate, ctx, item, i)));
306
296
  }
307
297
  function evalFind(args, evaluate, ctx) {
308
298
  const collection = toArray(evaluate(args[0], ctx));
309
- const fnExpr = args[1];
310
- const params = fnExpr[1];
311
- const body = fnExpr[2];
312
- const varName = typeof params === "string" ? params : params[0];
313
- return collection.find((item) => {
314
- const locals = /* @__PURE__ */ new Map();
315
- locals.set(varName, item);
316
- const childCtx = createChildContext(ctx, locals);
317
- return Boolean(evaluate(body, childCtx));
318
- });
299
+ const predExpr = args[1];
300
+ return collection.find((item, i) => Boolean(withItem(predExpr, evaluate, ctx, item, i)));
319
301
  }
320
302
  function evalCount(args, evaluate, ctx) {
321
303
  const collection = toArray(evaluate(args[0], ctx));
@@ -326,15 +308,13 @@ function evalSum(args, evaluate, ctx) {
326
308
  if (args.length === 1) {
327
309
  return collection.reduce((sum, item) => sum + toNumber2(item), 0);
328
310
  }
329
- const fnExpr = args[1];
330
- const params = fnExpr[1];
331
- const body = fnExpr[2];
332
- const varName = typeof params === "string" ? params : params[0];
333
- return collection.reduce((sum, item) => {
311
+ const mapExpr = args[1];
312
+ return collection.reduce((sum, item, i) => {
334
313
  const locals = /* @__PURE__ */ new Map();
335
- locals.set(varName, item);
314
+ locals.set("item", item);
315
+ locals.set("index", i);
336
316
  const childCtx = createChildContext(ctx, locals);
337
- return sum + toNumber2(evaluate(body, childCtx));
317
+ return sum + toNumber2(evaluate(mapExpr, childCtx));
338
318
  }, 0);
339
319
  }
340
320
  function evalFirst(args, evaluate, ctx) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../operators/arithmetic.ts","../../operators/comparison.ts","../../operators/logic.ts","../../context.ts","../../operators/control.ts","../../operators/collections.ts","../../operators/effects.ts"],"names":["toNumber"],"mappings":"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","file":"index.js","sourcesContent":["/**\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 * 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 * Set by prob/condition when a predicate fails during inference.\n * Checked by prob/posterior and prob/infer to reject samples.\n */\n _probRejected?: boolean;\n\n /**\n * Seeded PRNG state for deterministic probabilistic sampling.\n * Stored as a mutable object so child contexts share the same state.\n * Set by prob/seed.\n */\n _probSeed?: { state: number };\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 * 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"]}
1
+ {"version":3,"sources":["../../operators/arithmetic.ts","../../operators/comparison.ts","../../operators/logic.ts","../../context.ts","../../operators/control.ts","../../operators/collections.ts","../../operators/effects.ts"],"names":["toNumber"],"mappings":"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","file":"index.js","sourcesContent":["/**\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 * 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 * Set by prob/condition when a predicate fails during inference.\n * Checked by prob/posterior and prob/infer to reject samples.\n */\n _probRejected?: boolean;\n\n /**\n * Seeded PRNG state for deterministic probabilistic sampling.\n * Stored as a mutable object so child contexts share the same state.\n * Set by prob/seed.\n */\n _probSeed?: { state: number };\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 * 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.\n * Supports two formats:\n * - Array of pairs: [\"let\", [[\"x\", 10], [\"y\", 20]], body]\n * - Object style: [\"let\", {\"x\": 10, \"y\": 20}, body]\n */\nexport function evalLet(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown {\n const rawBindings = args[0];\n const body = args[1];\n\n // Build binding pairs from either array-of-pairs or object format\n const bindingPairs: Array<[string, SExpr]> = Array.isArray(rawBindings)\n ? (rawBindings as SExpr[][]).map(b => [b[0] as string, b[1]])\n : Object.entries(rawBindings as Record<string, SExpr>);\n\n // Evaluate bindings and create new context\n const locals = new Map<string, unknown>();\n for (const [name, valueExpr] of bindingPairs) {\n const value = evaluate(valueExpr, 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 * These short-form operators (map, filter, find) use @item/@index bindings,\n * matching the Rust evaluator's approach.\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\nfunction withItem(\n expr: SExpr,\n evaluate: Evaluator,\n ctx: EvaluationContext,\n item: unknown,\n index: number\n): unknown {\n const locals = new Map<string, unknown>();\n locals.set('item', item);\n locals.set('index', index);\n return evaluate(expr, createChildContext(ctx, locals));\n}\n\n/**\n * Evaluate map: [\"map\", collection, expr_using_@item]\n */\nexport function evalMap(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown[] {\n const collection = toArray(evaluate(args[0], ctx));\n const mapExpr = args[1];\n return collection.map((item, i) => withItem(mapExpr, evaluate, ctx, item, i));\n}\n\n/**\n * Evaluate filter: [\"filter\", collection, expr_using_@item]\n */\nexport function evalFilter(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown[] {\n const collection = toArray(evaluate(args[0], ctx));\n const predExpr = args[1];\n return collection.filter((item, i) => Boolean(withItem(predExpr, evaluate, ctx, item, i)));\n}\n\n/**\n * Evaluate find: [\"find\", collection, expr_using_@item]\n */\nexport function evalFind(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown {\n const collection = toArray(evaluate(args[0], ctx));\n const predExpr = args[1];\n return collection.find((item, i) => Boolean(withItem(predExpr, evaluate, ctx, item, i)));\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, mapExpr_using_@item]\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 return collection.reduce((sum: number, item) => sum + toNumber(item), 0);\n }\n\n const mapExpr = args[1];\n return collection.reduce((sum: number, item, i) => {\n const locals = new Map<string, unknown>();\n locals.set('item', item);\n locals.set('index', i);\n const childCtx = createChildContext(ctx, locals);\n return sum + toNumber(evaluate(mapExpr, 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/evaluator",
3
- "version": "2.1.1",
3
+ "version": "2.3.0",
4
4
  "description": "S-expression evaluator for Almadar",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",