@almadar/evaluator 2.5.6 → 2.6.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/dist/{index-Cwku8aP4.d.ts → index-Cf4WAVBs.d.ts} +35 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +63 -1
- package/dist/index.js.map +1 -1
- package/dist/operators/index.d.ts +1 -1
- package/dist/operators/index.js +51 -1
- package/dist/operators/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -82,6 +82,15 @@ interface EvaluationContext {
|
|
|
82
82
|
renderUI?: (slot: string, pattern: unknown, props?: Record<string, unknown>, priority?: number) => void;
|
|
83
83
|
/** Register an OS trigger (server-side only) */
|
|
84
84
|
registerOsTrigger?: (type: string, config: Record<string, unknown>) => void;
|
|
85
|
+
/** Effect handlers for resource operators (grouped to avoid top-level pollution) */
|
|
86
|
+
effectHandlers?: {
|
|
87
|
+
ref?: (entityType: string, options?: unknown) => unknown;
|
|
88
|
+
deref?: (entityType: string, id?: unknown) => unknown;
|
|
89
|
+
swap?: (entityType: string, id: unknown, transformExpr: unknown, evaluate: unknown, ctx: unknown) => unknown;
|
|
90
|
+
watch?: (entityType: string, effects: unknown[], evaluate: unknown, ctx: unknown) => void;
|
|
91
|
+
atomic?: (effects: unknown[], evaluate: unknown, ctx: unknown) => unknown;
|
|
92
|
+
fetch?: (entityType: string, options?: unknown) => unknown;
|
|
93
|
+
};
|
|
85
94
|
}
|
|
86
95
|
/**
|
|
87
96
|
* Create a minimal evaluation context for testing/guards.
|
|
@@ -383,5 +392,30 @@ declare function evalIncrement(args: SExpr[], evaluate: Evaluator, ctx: Evaluati
|
|
|
383
392
|
* Evaluate decrement: ["decrement", "@entity.field"] or ["decrement", "@entity.field", amount]
|
|
384
393
|
*/
|
|
385
394
|
declare function evalDecrement(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void;
|
|
395
|
+
/**
|
|
396
|
+
* Evaluate ref: ["ref", "EntityType"] or ["ref", "EntityType", { filter, include }]
|
|
397
|
+
* Server-side: queries entity data. Client-side: subscribes to EntityStore.
|
|
398
|
+
*/
|
|
399
|
+
declare function evalRef(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown;
|
|
400
|
+
/**
|
|
401
|
+
* Evaluate deref: ["deref", "EntityType"] or ["deref", "EntityType", idExpr]
|
|
402
|
+
* Pure snapshot read. Returns current entity data from store.
|
|
403
|
+
*/
|
|
404
|
+
declare function evalDeref(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown;
|
|
405
|
+
/**
|
|
406
|
+
* Evaluate swap!: ["swap!", "EntityType", idExpr, transformExpr]
|
|
407
|
+
* Atomic read-modify-write with CAS retry.
|
|
408
|
+
*/
|
|
409
|
+
declare function evalSwap(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown;
|
|
410
|
+
/**
|
|
411
|
+
* Evaluate watch: ["watch", "EntityType", [effect1, effect2, ...]]
|
|
412
|
+
* Client-only. Registers a callback on the EntityStore.
|
|
413
|
+
*/
|
|
414
|
+
declare function evalWatch(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): void;
|
|
415
|
+
/**
|
|
416
|
+
* Evaluate atomic: ["atomic", [effect1, effect2, ...]]
|
|
417
|
+
* Groups effects into a transaction. All succeed or all roll back.
|
|
418
|
+
*/
|
|
419
|
+
declare function evalAtomic(args: SExpr[], evaluate: Evaluator, ctx: EvaluationContext): unknown;
|
|
386
420
|
|
|
387
|
-
export {
|
|
421
|
+
export { evalSpawn as $, evalGreaterThanOrEqual as A, evalIf as B, evalIncludes as C, evalIncrement as D, type EvaluationContext as E, evalLast as F, evalLessThan as G, evalLessThanOrEqual as H, evalLet as I, evalMap as J, evalMatches as K, evalMax as L, evalMin as M, evalModulo as N, evalMultiply as O, evalNavigate as P, evalNot as Q, evalNotEqual as R, evalNotify as S, evalNth as T, evalOr as U, evalPersist as V, evalRef as W, evalRenderUI as X, evalRound as Y, evalSet as Z, evalSetDynamic as _, createEffectContext as a, evalSubtract as a0, evalSum as a1, evalSwap as a2, evalWatch as a3, evalWhen as a4, resolveBinding as a5, createMinimalContext as b, createChildContext as c, evalAdd as d, evalAbs as e, evalAnd as f, evalAtomic as g, evalCallService as h, evalCeil as i, evalClamp as j, evalConcat as k, evalCount as l, evalDecrement as m, evalDeref as n, evalDespawn as o, evalDivide as p, evalDo as q, evalEmit as r, evalEmpty as s, evalEqual as t, evalFilter as u, evalFind as v, evalFirst as w, evalFloor as x, evalFn as y, evalGreaterThan as z };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SExpr } from '@almadar/core';
|
|
2
2
|
export { CORE_BINDINGS, CoreBinding, Expression, ExpressionSchema, ParsedBinding, SExpr, SExprAtom, SExprSchema, collectBindings, getArgs, getOperator, isBinding, isSExpr, isSExprAtom, isSExprCall, isValidBinding, parseBinding, sexpr, walkSExpr } from '@almadar/core';
|
|
3
|
-
import { E as EvaluationContext } from './index-
|
|
4
|
-
export { c as createChildContext, a as createEffectContext, b as createMinimalContext, e as evalAbs, d as evalAdd, f as evalAnd, g as
|
|
3
|
+
import { E as EvaluationContext } from './index-Cf4WAVBs.js';
|
|
4
|
+
export { c as createChildContext, a as createEffectContext, b as createMinimalContext, e as evalAbs, d as evalAdd, f as evalAnd, g as evalAtomic, h as evalCallService, i as evalCeil, j as evalClamp, k as evalConcat, l as evalCount, m as evalDecrement, n as evalDeref, o as evalDespawn, p as evalDivide, q as evalDo, r as evalEmit, s as evalEmpty, t as evalEqual, u as evalFilter, v as evalFind, w as evalFirst, x as evalFloor, y as evalFn, z as evalGreaterThan, A as evalGreaterThanOrEqual, B as evalIf, C as evalIncludes, D as evalIncrement, F as evalLast, G as evalLessThan, H as evalLessThanOrEqual, I as evalLet, J as evalMap, K as evalMatches, L as evalMax, M as evalMin, N as evalModulo, O as evalMultiply, P as evalNavigate, Q as evalNot, R as evalNotEqual, S as evalNotify, T as evalNth, U as evalOr, V as evalPersist, W as evalRef, X as evalRenderUI, Y as evalRound, Z as evalSet, _ as evalSetDynamic, $ as evalSpawn, a0 as evalSubtract, a1 as evalSum, a2 as evalSwap, a3 as evalWatch, a4 as evalWhen, a5 as resolveBinding } from './index-Cf4WAVBs.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* S-Expression Evaluator
|
package/dist/index.js
CHANGED
|
@@ -574,6 +574,56 @@ function evalDecrement(args, evaluate2, ctx) {
|
|
|
574
574
|
const newValue = toNumber3(currentValue) - amount;
|
|
575
575
|
ctx.mutateEntity({ [fieldPath]: newValue });
|
|
576
576
|
}
|
|
577
|
+
function evalRef(args, evaluate2, ctx) {
|
|
578
|
+
const entityType = args[0];
|
|
579
|
+
if (ctx.effectHandlers?.ref) {
|
|
580
|
+
return ctx.effectHandlers.ref(entityType, args.length > 1 ? evaluate2(args[1], ctx) : void 0);
|
|
581
|
+
}
|
|
582
|
+
if (ctx.effectHandlers?.fetch) {
|
|
583
|
+
return ctx.effectHandlers.fetch(entityType, args.length > 1 ? evaluate2(args[1], ctx) : void 0);
|
|
584
|
+
}
|
|
585
|
+
return void 0;
|
|
586
|
+
}
|
|
587
|
+
function evalDeref(args, evaluate2, ctx) {
|
|
588
|
+
const entityType = args[0];
|
|
589
|
+
const id = args.length > 1 ? evaluate2(args[1], ctx) : void 0;
|
|
590
|
+
if (ctx.effectHandlers?.deref) {
|
|
591
|
+
return ctx.effectHandlers.deref(entityType, id);
|
|
592
|
+
}
|
|
593
|
+
if (id && ctx.effectHandlers?.fetch) {
|
|
594
|
+
return ctx.effectHandlers.fetch(entityType, id);
|
|
595
|
+
}
|
|
596
|
+
return ctx.entity?.[entityType] ?? [];
|
|
597
|
+
}
|
|
598
|
+
function evalSwap(args, evaluate2, ctx) {
|
|
599
|
+
const entityType = args[0];
|
|
600
|
+
const id = evaluate2(args[1], ctx);
|
|
601
|
+
const transformExpr = args[2];
|
|
602
|
+
if (ctx.effectHandlers?.swap) {
|
|
603
|
+
return ctx.effectHandlers.swap(entityType, id, transformExpr, evaluate2, ctx);
|
|
604
|
+
}
|
|
605
|
+
console.warn("No swap handler in context");
|
|
606
|
+
return void 0;
|
|
607
|
+
}
|
|
608
|
+
function evalWatch(args, evaluate2, ctx) {
|
|
609
|
+
const entityType = args[0];
|
|
610
|
+
const effects = args[1];
|
|
611
|
+
if (ctx.effectHandlers?.watch) {
|
|
612
|
+
ctx.effectHandlers.watch(entityType, effects, evaluate2, ctx);
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
function evalAtomic(args, evaluate2, ctx) {
|
|
616
|
+
const effects = args[0];
|
|
617
|
+
if (ctx.effectHandlers?.atomic) {
|
|
618
|
+
return ctx.effectHandlers.atomic(effects, evaluate2, ctx);
|
|
619
|
+
}
|
|
620
|
+
if (Array.isArray(effects)) {
|
|
621
|
+
for (const eff of effects) {
|
|
622
|
+
evaluate2(eff, ctx);
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
return void 0;
|
|
626
|
+
}
|
|
577
627
|
function toNumber3(value) {
|
|
578
628
|
if (typeof value === "number") return value;
|
|
579
629
|
if (typeof value === "string") {
|
|
@@ -2593,6 +2643,18 @@ var SExpressionEvaluator = class {
|
|
|
2593
2643
|
case "render-ui":
|
|
2594
2644
|
evalRenderUI(args, evaluate2, ctx);
|
|
2595
2645
|
return void 0;
|
|
2646
|
+
// Resource operators
|
|
2647
|
+
case "ref":
|
|
2648
|
+
return evalRef(args, evaluate2, ctx);
|
|
2649
|
+
case "deref":
|
|
2650
|
+
return evalDeref(args, evaluate2, ctx);
|
|
2651
|
+
case "swap!":
|
|
2652
|
+
return evalSwap(args, evaluate2, ctx);
|
|
2653
|
+
case "watch":
|
|
2654
|
+
evalWatch(args, evaluate2, ctx);
|
|
2655
|
+
return void 0;
|
|
2656
|
+
case "atomic":
|
|
2657
|
+
return evalAtomic(args, evaluate2, ctx);
|
|
2596
2658
|
// ===============================
|
|
2597
2659
|
// Standard Library: math/*
|
|
2598
2660
|
// ===============================
|
|
@@ -3040,6 +3102,6 @@ function executeEffects(effects, ctx) {
|
|
|
3040
3102
|
evaluator.executeEffects(effects, ctx);
|
|
3041
3103
|
}
|
|
3042
3104
|
|
|
3043
|
-
export { SExpressionEvaluator, createChildContext, createEffectContext, createMinimalContext, evalAbs, evalAdd, evalAnd, evalCallService, evalCeil, evalClamp, evalConcat, evalCount, evalDecrement, evalDespawn, evalDivide, evalDo, evalEmit, evalEmpty, evalEqual, evalFilter, evalFind, evalFirst, evalFloor, evalFn, evalGreaterThan, evalGreaterThanOrEqual, evalIf, evalIncludes, evalIncrement, evalLast, evalLessThan, evalLessThanOrEqual, evalLet, evalMap, evalMatches, evalMax, evalMin, evalModulo, evalMultiply, evalNavigate, evalNot, evalNotEqual, evalNotify, evalNth, evalOr, evalPersist, evalRenderUI, evalRound, evalSet, evalSetDynamic, evalSpawn, evalSubtract, evalSum, evalWhen, evaluate, evaluateGuard, evaluator, executeEffect, executeEffects, resolveBinding };
|
|
3105
|
+
export { SExpressionEvaluator, createChildContext, createEffectContext, createMinimalContext, evalAbs, evalAdd, evalAnd, evalAtomic, evalCallService, evalCeil, evalClamp, evalConcat, evalCount, evalDecrement, evalDeref, evalDespawn, evalDivide, evalDo, evalEmit, evalEmpty, evalEqual, evalFilter, evalFind, evalFirst, evalFloor, evalFn, evalGreaterThan, evalGreaterThanOrEqual, evalIf, evalIncludes, evalIncrement, evalLast, evalLessThan, evalLessThanOrEqual, evalLet, evalMap, evalMatches, evalMax, evalMin, evalModulo, evalMultiply, evalNavigate, evalNot, evalNotEqual, evalNotify, evalNth, evalOr, evalPersist, evalRef, evalRenderUI, evalRound, evalSet, evalSetDynamic, evalSpawn, evalSubtract, evalSum, evalSwap, evalWatch, evalWhen, evaluate, evaluateGuard, evaluator, executeEffect, executeEffects, resolveBinding };
|
|
3044
3106
|
//# sourceMappingURL=index.js.map
|
|
3045
3107
|
//# sourceMappingURL=index.js.map
|