@manifesto-ai/compiler 1.6.2 → 1.8.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/README.md +67 -18
- package/dist/chunk-BH25NHMN.js +74 -0
- package/dist/chunk-BH25NHMN.js.map +1 -0
- package/dist/chunk-D62NIFP4.js +33 -0
- package/dist/chunk-D62NIFP4.js.map +1 -0
- package/dist/chunk-MKLDAZ2Z.js +6920 -0
- package/dist/chunk-MKLDAZ2Z.js.map +1 -0
- package/dist/esbuild.d.ts +8 -0
- package/dist/esbuild.js +14 -0
- package/dist/esbuild.js.map +1 -0
- package/dist/index.d.ts +2810 -11
- package/dist/index.js +2425 -43
- package/dist/index.js.map +1 -1
- package/dist/node-loader.d.ts +18 -0
- package/dist/node-loader.js +47 -0
- package/dist/node-loader.js.map +1 -0
- package/dist/rollup.d.ts +8 -0
- package/dist/rollup.js +14 -0
- package/dist/rollup.js.map +1 -0
- package/dist/rspack.d.ts +7 -0
- package/dist/rspack.js +14 -0
- package/dist/rspack.js.map +1 -0
- package/dist/unplugin-6wnvFiEo.d.ts +17 -0
- package/dist/vite.d.ts +8 -17
- package/dist/vite.js +13 -33
- package/dist/vite.js.map +1 -1
- package/dist/webpack.d.ts +8 -0
- package/dist/webpack.js +14 -0
- package/dist/webpack.js.map +1 -0
- package/package.json +40 -22
- package/dist/analyzer/index.d.ts +0 -6
- package/dist/analyzer/index.d.ts.map +0 -1
- package/dist/analyzer/index.js +0 -6
- package/dist/analyzer/index.js.map +0 -1
- package/dist/analyzer/scope.d.ts +0 -77
- package/dist/analyzer/scope.d.ts.map +0 -1
- package/dist/analyzer/scope.js +0 -296
- package/dist/analyzer/scope.js.map +0 -1
- package/dist/analyzer/validator.d.ts +0 -60
- package/dist/analyzer/validator.d.ts.map +0 -1
- package/dist/analyzer/validator.js +0 -439
- package/dist/analyzer/validator.js.map +0 -1
- package/dist/api/compile-mel-patch-collector.d.ts +0 -32
- package/dist/api/compile-mel-patch-collector.d.ts.map +0 -1
- package/dist/api/compile-mel-patch-collector.js +0 -425
- package/dist/api/compile-mel-patch-collector.js.map +0 -1
- package/dist/api/compile-mel-patch-expr.d.ts +0 -9
- package/dist/api/compile-mel-patch-expr.d.ts.map +0 -1
- package/dist/api/compile-mel-patch-expr.js +0 -179
- package/dist/api/compile-mel-patch-expr.js.map +0 -1
- package/dist/api/compile-mel-patch-location.d.ts +0 -10
- package/dist/api/compile-mel-patch-location.d.ts.map +0 -1
- package/dist/api/compile-mel-patch-location.js +0 -48
- package/dist/api/compile-mel-patch-location.js.map +0 -1
- package/dist/api/compile-mel-patch.d.ts +0 -6
- package/dist/api/compile-mel-patch.d.ts.map +0 -1
- package/dist/api/compile-mel-patch.js +0 -244
- package/dist/api/compile-mel-patch.js.map +0 -1
- package/dist/api/compile-mel.d.ts +0 -126
- package/dist/api/compile-mel.d.ts.map +0 -1
- package/dist/api/compile-mel.js +0 -114
- package/dist/api/compile-mel.js.map +0 -1
- package/dist/api/index.d.ts +0 -10
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js +0 -9
- package/dist/api/index.js.map +0 -1
- package/dist/diagnostics/codes.d.ts +0 -25
- package/dist/diagnostics/codes.d.ts.map +0 -1
- package/dist/diagnostics/codes.js +0 -154
- package/dist/diagnostics/codes.js.map +0 -1
- package/dist/diagnostics/index.d.ts +0 -6
- package/dist/diagnostics/index.d.ts.map +0 -1
- package/dist/diagnostics/index.js +0 -6
- package/dist/diagnostics/index.js.map +0 -1
- package/dist/diagnostics/types.d.ts +0 -67
- package/dist/diagnostics/types.d.ts.map +0 -1
- package/dist/diagnostics/types.js +0 -58
- package/dist/diagnostics/types.js.map +0 -1
- package/dist/evaluation/context.d.ts +0 -91
- package/dist/evaluation/context.d.ts.map +0 -1
- package/dist/evaluation/context.js +0 -53
- package/dist/evaluation/context.js.map +0 -1
- package/dist/evaluation/evaluate-expr.d.ts +0 -24
- package/dist/evaluation/evaluate-expr.d.ts.map +0 -1
- package/dist/evaluation/evaluate-expr.js +0 -577
- package/dist/evaluation/evaluate-expr.js.map +0 -1
- package/dist/evaluation/evaluate-patch.d.ts +0 -123
- package/dist/evaluation/evaluate-patch.d.ts.map +0 -1
- package/dist/evaluation/evaluate-patch.js +0 -202
- package/dist/evaluation/evaluate-patch.js.map +0 -1
- package/dist/evaluation/evaluate-runtime-patch.d.ts +0 -86
- package/dist/evaluation/evaluate-runtime-patch.d.ts.map +0 -1
- package/dist/evaluation/evaluate-runtime-patch.js +0 -185
- package/dist/evaluation/evaluate-runtime-patch.js.map +0 -1
- package/dist/evaluation/index.d.ts +0 -15
- package/dist/evaluation/index.d.ts.map +0 -1
- package/dist/evaluation/index.js +0 -13
- package/dist/evaluation/index.js.map +0 -1
- package/dist/generator/index.d.ts +0 -7
- package/dist/generator/index.d.ts.map +0 -1
- package/dist/generator/index.js +0 -7
- package/dist/generator/index.js.map +0 -1
- package/dist/generator/ir.d.ts +0 -348
- package/dist/generator/ir.d.ts.map +0 -1
- package/dist/generator/ir.js +0 -715
- package/dist/generator/ir.js.map +0 -1
- package/dist/generator/lowering.d.ts +0 -11
- package/dist/generator/lowering.d.ts.map +0 -1
- package/dist/generator/lowering.js +0 -369
- package/dist/generator/lowering.js.map +0 -1
- package/dist/generator/normalizer.d.ts +0 -16
- package/dist/generator/normalizer.d.ts.map +0 -1
- package/dist/generator/normalizer.js +0 -181
- package/dist/generator/normalizer.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/lexer/index.d.ts +0 -7
- package/dist/lexer/index.d.ts.map +0 -1
- package/dist/lexer/index.js +0 -7
- package/dist/lexer/index.js.map +0 -1
- package/dist/lexer/lexer.d.ts +0 -59
- package/dist/lexer/lexer.d.ts.map +0 -1
- package/dist/lexer/lexer.js +0 -433
- package/dist/lexer/lexer.js.map +0 -1
- package/dist/lexer/source-location.d.ts +0 -41
- package/dist/lexer/source-location.d.ts.map +0 -1
- package/dist/lexer/source-location.js +0 -33
- package/dist/lexer/source-location.js.map +0 -1
- package/dist/lexer/tokens.d.ts +0 -47
- package/dist/lexer/tokens.d.ts.map +0 -1
- package/dist/lexer/tokens.js +0 -73
- package/dist/lexer/tokens.js.map +0 -1
- package/dist/loader.d.ts +0 -23
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -62
- package/dist/loader.js.map +0 -1
- package/dist/lowering/context.d.ts +0 -96
- package/dist/lowering/context.d.ts.map +0 -1
- package/dist/lowering/context.js +0 -42
- package/dist/lowering/context.js.map +0 -1
- package/dist/lowering/errors.d.ts +0 -84
- package/dist/lowering/errors.d.ts.map +0 -1
- package/dist/lowering/errors.js +0 -81
- package/dist/lowering/errors.js.map +0 -1
- package/dist/lowering/index.d.ts +0 -20
- package/dist/lowering/index.d.ts.map +0 -1
- package/dist/lowering/index.js +0 -13
- package/dist/lowering/index.js.map +0 -1
- package/dist/lowering/lower-expr.d.ts +0 -76
- package/dist/lowering/lower-expr.d.ts.map +0 -1
- package/dist/lowering/lower-expr.js +0 -366
- package/dist/lowering/lower-expr.js.map +0 -1
- package/dist/lowering/lower-patch.d.ts +0 -231
- package/dist/lowering/lower-patch.d.ts.map +0 -1
- package/dist/lowering/lower-patch.js +0 -146
- package/dist/lowering/lower-patch.js.map +0 -1
- package/dist/lowering/lower-runtime-patch.d.ts +0 -100
- package/dist/lowering/lower-runtime-patch.d.ts.map +0 -1
- package/dist/lowering/lower-runtime-patch.js +0 -49
- package/dist/lowering/lower-runtime-patch.js.map +0 -1
- package/dist/mel-module.d.ts +0 -13
- package/dist/mel-module.d.ts.map +0 -1
- package/dist/mel-module.js +0 -33
- package/dist/mel-module.js.map +0 -1
- package/dist/parser/ast.d.ts +0 -344
- package/dist/parser/ast.d.ts.map +0 -1
- package/dist/parser/ast.js +0 -24
- package/dist/parser/ast.js.map +0 -1
- package/dist/parser/index.d.ts +0 -7
- package/dist/parser/index.d.ts.map +0 -1
- package/dist/parser/index.js +0 -7
- package/dist/parser/index.js.map +0 -1
- package/dist/parser/parser.d.ts +0 -92
- package/dist/parser/parser.d.ts.map +0 -1
- package/dist/parser/parser.js +0 -892
- package/dist/parser/parser.js.map +0 -1
- package/dist/parser/precedence.d.ts +0 -44
- package/dist/parser/precedence.d.ts.map +0 -1
- package/dist/parser/precedence.js +0 -69
- package/dist/parser/precedence.js.map +0 -1
- package/dist/renderer/expr-node.d.ts +0 -172
- package/dist/renderer/expr-node.d.ts.map +0 -1
- package/dist/renderer/expr-node.js +0 -218
- package/dist/renderer/expr-node.js.map +0 -1
- package/dist/renderer/fragment.d.ts +0 -84
- package/dist/renderer/fragment.d.ts.map +0 -1
- package/dist/renderer/fragment.js +0 -172
- package/dist/renderer/fragment.js.map +0 -1
- package/dist/renderer/index.d.ts +0 -23
- package/dist/renderer/index.d.ts.map +0 -1
- package/dist/renderer/index.js +0 -27
- package/dist/renderer/index.js.map +0 -1
- package/dist/renderer/patch-op.d.ts +0 -82
- package/dist/renderer/patch-op.d.ts.map +0 -1
- package/dist/renderer/patch-op.js +0 -204
- package/dist/renderer/patch-op.js.map +0 -1
- package/dist/renderer/type-expr.d.ts +0 -61
- package/dist/renderer/type-expr.d.ts.map +0 -1
- package/dist/renderer/type-expr.js +0 -131
- package/dist/renderer/type-expr.js.map +0 -1
- package/dist/vite.d.ts.map +0 -1
- package/loader.cjs +0 -22
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Patch Evaluation
|
|
3
|
-
*
|
|
4
|
-
* Evaluates ConditionalPatchOp[] to produce concrete schema operations.
|
|
5
|
-
*
|
|
6
|
-
* @see SPEC v0.4.0 §18.5, §18.6
|
|
7
|
-
*/
|
|
8
|
-
import type { ExprNode as CoreExprNode } from "@manifesto-ai/core";
|
|
9
|
-
import type { ConditionalPatchOp, LoweredPatchOp } from "../lowering/lower-patch.js";
|
|
10
|
-
import type { EvaluationContext, EvaluationSnapshot } from "./context.js";
|
|
11
|
-
/**
|
|
12
|
-
* Evaluated schema patch operation.
|
|
13
|
-
*
|
|
14
|
-
* All conditions have been evaluated and values resolved where appropriate.
|
|
15
|
-
* Expressions in addComputed, addConstraint, addActionAvailable are preserved
|
|
16
|
-
* for runtime evaluation by Core.
|
|
17
|
-
*/
|
|
18
|
-
export type EvaluatedPatchOp = LoweredPatchOp;
|
|
19
|
-
/**
|
|
20
|
-
* Result of evaluating a conditional patch.
|
|
21
|
-
*/
|
|
22
|
-
export interface EvaluatedPatch {
|
|
23
|
-
/**
|
|
24
|
-
* Fragment identifier (for tracing).
|
|
25
|
-
*/
|
|
26
|
-
fragmentId: string;
|
|
27
|
-
/**
|
|
28
|
-
* The evaluated operation.
|
|
29
|
-
*/
|
|
30
|
-
op: EvaluatedPatchOp;
|
|
31
|
-
/**
|
|
32
|
-
* Confidence (preserved from fragment).
|
|
33
|
-
*/
|
|
34
|
-
confidence: number;
|
|
35
|
-
/**
|
|
36
|
-
* Whether condition was evaluated (true) or there was no condition.
|
|
37
|
-
*/
|
|
38
|
-
conditionEvaluated: boolean;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Result of patch evaluation.
|
|
42
|
-
*/
|
|
43
|
-
export interface PatchEvaluationResult {
|
|
44
|
-
/**
|
|
45
|
-
* Patches that passed their conditions.
|
|
46
|
-
*/
|
|
47
|
-
patches: EvaluatedPatch[];
|
|
48
|
-
/**
|
|
49
|
-
* Patches that were skipped due to false/null conditions.
|
|
50
|
-
*/
|
|
51
|
-
skipped: Array<{
|
|
52
|
-
fragmentId: string;
|
|
53
|
-
reason: "false" | "null" | "non-boolean";
|
|
54
|
-
}>;
|
|
55
|
-
/**
|
|
56
|
-
* Final working snapshot after all evaluations.
|
|
57
|
-
*/
|
|
58
|
-
finalSnapshot: EvaluationSnapshot;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Evaluate conditional patch operations.
|
|
62
|
-
*
|
|
63
|
-
* Implements sequential evaluation semantics: later patches see effects
|
|
64
|
-
* of earlier patches via working snapshot.
|
|
65
|
-
*
|
|
66
|
-
* Conditions are boolean-only: true applies, false/null/non-boolean skips.
|
|
67
|
-
*
|
|
68
|
-
* @param ops - Conditional patch operations from lowering phase
|
|
69
|
-
* @param ctx - Initial evaluation context
|
|
70
|
-
* @returns Evaluation result with applied and skipped patches
|
|
71
|
-
*
|
|
72
|
-
* @see SPEC v0.4.0 §18.5, FDR-MEL-070, FDR-MEL-073
|
|
73
|
-
*/
|
|
74
|
-
export declare function evaluateConditionalPatchOps(ops: ConditionalPatchOp[], ctx: EvaluationContext): PatchEvaluationResult;
|
|
75
|
-
/**
|
|
76
|
-
* Simple evaluation: returns patches that pass conditions.
|
|
77
|
-
*
|
|
78
|
-
* Does not track skipped patches or maintain sequential semantics.
|
|
79
|
-
* Use this for stateless condition evaluation.
|
|
80
|
-
*
|
|
81
|
-
* @param ops - Conditional patch operations
|
|
82
|
-
* @param ctx - Evaluation context
|
|
83
|
-
* @returns Patches that passed their conditions
|
|
84
|
-
*/
|
|
85
|
-
export declare function evaluatePatches(ops: ConditionalPatchOp[], ctx: EvaluationContext): EvaluatedPatch[];
|
|
86
|
-
/**
|
|
87
|
-
* Evaluate expressions in a patch operation to concrete values.
|
|
88
|
-
*
|
|
89
|
-
* Use this when you need fully concrete values (no expressions).
|
|
90
|
-
*
|
|
91
|
-
* Note: addComputed.expr, addConstraint.rule, and addActionAvailable.expr
|
|
92
|
-
* are meant to remain as expressions for runtime evaluation by Core.
|
|
93
|
-
*
|
|
94
|
-
* @param op - Lowered patch operation
|
|
95
|
-
* @param ctx - Evaluation context
|
|
96
|
-
* @returns Patch operation with evaluated expressions
|
|
97
|
-
*/
|
|
98
|
-
export declare function evaluatePatchExpressions(op: LoweredPatchOp, ctx: EvaluationContext): LoweredPatchOp;
|
|
99
|
-
/**
|
|
100
|
-
* Check if a condition evaluates to true.
|
|
101
|
-
*
|
|
102
|
-
* Boolean-only: only true returns true.
|
|
103
|
-
* false, null, and non-boolean values return false.
|
|
104
|
-
*
|
|
105
|
-
* @param condition - Condition expression (or undefined for always-true)
|
|
106
|
-
* @param ctx - Evaluation context
|
|
107
|
-
* @returns True if condition passes
|
|
108
|
-
*
|
|
109
|
-
* @see FDR-MEL-073
|
|
110
|
-
*/
|
|
111
|
-
export declare function evaluateCondition(condition: CoreExprNode | undefined, ctx: EvaluationContext): boolean;
|
|
112
|
-
/**
|
|
113
|
-
* Classify a condition evaluation result.
|
|
114
|
-
*
|
|
115
|
-
* @param condition - Condition expression
|
|
116
|
-
* @param ctx - Evaluation context
|
|
117
|
-
* @returns Classification of condition result
|
|
118
|
-
*/
|
|
119
|
-
export declare function classifyCondition(condition: CoreExprNode | undefined, ctx: EvaluationContext): {
|
|
120
|
-
passes: boolean;
|
|
121
|
-
reason: "no-condition" | "true" | "false" | "null" | "non-boolean";
|
|
122
|
-
};
|
|
123
|
-
//# sourceMappingURL=evaluate-patch.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate-patch.d.ts","sourceRoot":"","sources":["../../src/evaluation/evaluate-patch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAM1E;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,EAAE,EAAE,gBAAgB,CAAC;IAErB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,OAAO,EAAE,cAAc,EAAE,CAAC;IAE1B;;OAEG;IACH,OAAO,EAAE,KAAK,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,aAAa,CAAC;KAC1C,CAAC,CAAC;IAEH;;OAEG;IACH,aAAa,EAAE,kBAAkB,CAAC;CACnC;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,kBAAkB,EAAE,EACzB,GAAG,EAAE,iBAAiB,GACrB,qBAAqB,CAiDvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,kBAAkB,EAAE,EACzB,GAAG,EAAE,iBAAiB,GACrB,cAAc,EAAE,CAclB;AAuCD;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,iBAAiB,GACrB,cAAc,CA8BhB;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,YAAY,GAAG,SAAS,EACnC,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAOT;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,YAAY,GAAG,SAAS,EACnC,GAAG,EAAE,iBAAiB,GACrB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,aAAa,CAAA;CAAE,CAoBzF"}
|
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Patch Evaluation
|
|
3
|
-
*
|
|
4
|
-
* Evaluates ConditionalPatchOp[] to produce concrete schema operations.
|
|
5
|
-
*
|
|
6
|
-
* @see SPEC v0.4.0 §18.5, §18.6
|
|
7
|
-
*/
|
|
8
|
-
import { applyPatchToWorkingSnapshot } from "./context.js";
|
|
9
|
-
import { evaluateExpr } from "./evaluate-expr.js";
|
|
10
|
-
// ============ Main Evaluation Function ============
|
|
11
|
-
/**
|
|
12
|
-
* Evaluate conditional patch operations.
|
|
13
|
-
*
|
|
14
|
-
* Implements sequential evaluation semantics: later patches see effects
|
|
15
|
-
* of earlier patches via working snapshot.
|
|
16
|
-
*
|
|
17
|
-
* Conditions are boolean-only: true applies, false/null/non-boolean skips.
|
|
18
|
-
*
|
|
19
|
-
* @param ops - Conditional patch operations from lowering phase
|
|
20
|
-
* @param ctx - Initial evaluation context
|
|
21
|
-
* @returns Evaluation result with applied and skipped patches
|
|
22
|
-
*
|
|
23
|
-
* @see SPEC v0.4.0 §18.5, FDR-MEL-070, FDR-MEL-073
|
|
24
|
-
*/
|
|
25
|
-
export function evaluateConditionalPatchOps(ops, ctx) {
|
|
26
|
-
const patches = [];
|
|
27
|
-
const skipped = [];
|
|
28
|
-
let workingSnapshot = ctx.snapshot;
|
|
29
|
-
for (const op of ops) {
|
|
30
|
-
// Create context with current working snapshot
|
|
31
|
-
const evalCtx = {
|
|
32
|
-
...ctx,
|
|
33
|
-
snapshot: workingSnapshot,
|
|
34
|
-
};
|
|
35
|
-
// Evaluate condition if present
|
|
36
|
-
if (op.condition !== undefined) {
|
|
37
|
-
const conditionResult = evaluateExpr(op.condition, evalCtx);
|
|
38
|
-
if (conditionResult !== true) {
|
|
39
|
-
// Skip this patch
|
|
40
|
-
const reason = conditionResult === false
|
|
41
|
-
? "false"
|
|
42
|
-
: conditionResult === null
|
|
43
|
-
? "null"
|
|
44
|
-
: "non-boolean";
|
|
45
|
-
skipped.push({ fragmentId: op.fragmentId, reason });
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
// Evaluate the operation and add to result
|
|
50
|
-
const evaluated = {
|
|
51
|
-
fragmentId: op.fragmentId,
|
|
52
|
-
op: op.op,
|
|
53
|
-
confidence: op.confidence,
|
|
54
|
-
conditionEvaluated: op.condition !== undefined,
|
|
55
|
-
};
|
|
56
|
-
patches.push(evaluated);
|
|
57
|
-
// Update working snapshot for sequential semantics
|
|
58
|
-
workingSnapshot = updateWorkingSnapshot(workingSnapshot, op.op, evalCtx);
|
|
59
|
-
}
|
|
60
|
-
return {
|
|
61
|
-
patches,
|
|
62
|
-
skipped,
|
|
63
|
-
finalSnapshot: workingSnapshot,
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Simple evaluation: returns patches that pass conditions.
|
|
68
|
-
*
|
|
69
|
-
* Does not track skipped patches or maintain sequential semantics.
|
|
70
|
-
* Use this for stateless condition evaluation.
|
|
71
|
-
*
|
|
72
|
-
* @param ops - Conditional patch operations
|
|
73
|
-
* @param ctx - Evaluation context
|
|
74
|
-
* @returns Patches that passed their conditions
|
|
75
|
-
*/
|
|
76
|
-
export function evaluatePatches(ops, ctx) {
|
|
77
|
-
return ops
|
|
78
|
-
.filter((op) => {
|
|
79
|
-
if (op.condition === undefined) {
|
|
80
|
-
return true;
|
|
81
|
-
}
|
|
82
|
-
return evaluateExpr(op.condition, ctx) === true;
|
|
83
|
-
})
|
|
84
|
-
.map((op) => ({
|
|
85
|
-
fragmentId: op.fragmentId,
|
|
86
|
-
op: op.op,
|
|
87
|
-
confidence: op.confidence,
|
|
88
|
-
conditionEvaluated: op.condition !== undefined,
|
|
89
|
-
}));
|
|
90
|
-
}
|
|
91
|
-
// ============ Working Snapshot Update ============
|
|
92
|
-
/**
|
|
93
|
-
* Update working snapshot based on patch operation.
|
|
94
|
-
*
|
|
95
|
-
* For schema operations, most don't affect the snapshot directly.
|
|
96
|
-
* Only setDefaultValue affects the data model.
|
|
97
|
-
*
|
|
98
|
-
* @see FDR-MEL-070
|
|
99
|
-
*/
|
|
100
|
-
function updateWorkingSnapshot(snapshot, op, _ctx) {
|
|
101
|
-
// Most schema operations don't affect the working snapshot
|
|
102
|
-
// They modify the schema, not the runtime state
|
|
103
|
-
switch (op.kind) {
|
|
104
|
-
case "setDefaultValue":
|
|
105
|
-
// Apply default value to working snapshot data
|
|
106
|
-
// This enables sequential evaluation where later ops can see the default
|
|
107
|
-
return applyPatchToWorkingSnapshot(snapshot, op.path, op.value);
|
|
108
|
-
case "addType":
|
|
109
|
-
case "addField":
|
|
110
|
-
case "setFieldType":
|
|
111
|
-
case "addConstraint":
|
|
112
|
-
case "addComputed":
|
|
113
|
-
case "addActionAvailable":
|
|
114
|
-
// These don't affect runtime data, only schema structure
|
|
115
|
-
return snapshot;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
// ============ Expression Evaluation in Patch Values ============
|
|
119
|
-
/**
|
|
120
|
-
* Evaluate expressions in a patch operation to concrete values.
|
|
121
|
-
*
|
|
122
|
-
* Use this when you need fully concrete values (no expressions).
|
|
123
|
-
*
|
|
124
|
-
* Note: addComputed.expr, addConstraint.rule, and addActionAvailable.expr
|
|
125
|
-
* are meant to remain as expressions for runtime evaluation by Core.
|
|
126
|
-
*
|
|
127
|
-
* @param op - Lowered patch operation
|
|
128
|
-
* @param ctx - Evaluation context
|
|
129
|
-
* @returns Patch operation with evaluated expressions
|
|
130
|
-
*/
|
|
131
|
-
export function evaluatePatchExpressions(op, ctx) {
|
|
132
|
-
switch (op.kind) {
|
|
133
|
-
case "addType":
|
|
134
|
-
case "addField":
|
|
135
|
-
case "setFieldType":
|
|
136
|
-
case "setDefaultValue":
|
|
137
|
-
// These don't have runtime expressions to evaluate
|
|
138
|
-
return op;
|
|
139
|
-
case "addConstraint":
|
|
140
|
-
// rule is evaluated at runtime, but we can evaluate for preview
|
|
141
|
-
return {
|
|
142
|
-
...op,
|
|
143
|
-
// Keep rule as expression - it's evaluated at runtime by Core
|
|
144
|
-
};
|
|
145
|
-
case "addComputed":
|
|
146
|
-
// expr is evaluated at runtime, but we can evaluate for preview
|
|
147
|
-
return {
|
|
148
|
-
...op,
|
|
149
|
-
// Keep expr as expression - it's evaluated at runtime by Core
|
|
150
|
-
};
|
|
151
|
-
case "addActionAvailable":
|
|
152
|
-
// expr is evaluated at runtime
|
|
153
|
-
return {
|
|
154
|
-
...op,
|
|
155
|
-
// Keep expr as expression - it's evaluated at runtime by Core
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
// ============ Condition Utilities ============
|
|
160
|
-
/**
|
|
161
|
-
* Check if a condition evaluates to true.
|
|
162
|
-
*
|
|
163
|
-
* Boolean-only: only true returns true.
|
|
164
|
-
* false, null, and non-boolean values return false.
|
|
165
|
-
*
|
|
166
|
-
* @param condition - Condition expression (or undefined for always-true)
|
|
167
|
-
* @param ctx - Evaluation context
|
|
168
|
-
* @returns True if condition passes
|
|
169
|
-
*
|
|
170
|
-
* @see FDR-MEL-073
|
|
171
|
-
*/
|
|
172
|
-
export function evaluateCondition(condition, ctx) {
|
|
173
|
-
if (condition === undefined) {
|
|
174
|
-
return true;
|
|
175
|
-
}
|
|
176
|
-
const result = evaluateExpr(condition, ctx);
|
|
177
|
-
return result === true;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Classify a condition evaluation result.
|
|
181
|
-
*
|
|
182
|
-
* @param condition - Condition expression
|
|
183
|
-
* @param ctx - Evaluation context
|
|
184
|
-
* @returns Classification of condition result
|
|
185
|
-
*/
|
|
186
|
-
export function classifyCondition(condition, ctx) {
|
|
187
|
-
if (condition === undefined) {
|
|
188
|
-
return { passes: true, reason: "no-condition" };
|
|
189
|
-
}
|
|
190
|
-
const result = evaluateExpr(condition, ctx);
|
|
191
|
-
if (result === true) {
|
|
192
|
-
return { passes: true, reason: "true" };
|
|
193
|
-
}
|
|
194
|
-
if (result === false) {
|
|
195
|
-
return { passes: false, reason: "false" };
|
|
196
|
-
}
|
|
197
|
-
if (result === null) {
|
|
198
|
-
return { passes: false, reason: "null" };
|
|
199
|
-
}
|
|
200
|
-
return { passes: false, reason: "non-boolean" };
|
|
201
|
-
}
|
|
202
|
-
//# sourceMappingURL=evaluate-patch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate-patch.js","sourceRoot":"","sources":["../../src/evaluation/evaluate-patch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Runtime Patch Evaluation
|
|
3
|
-
*
|
|
4
|
-
* Evaluates RuntimeConditionalPatchOp[] to produce concrete Patch[].
|
|
5
|
-
*
|
|
6
|
-
* Implements:
|
|
7
|
-
* - SPEC v0.4.0 §18.5: Sequential evaluation with working snapshot
|
|
8
|
-
* - SPEC v0.4.0 §18.6: Boolean-only conditions
|
|
9
|
-
* - SPEC v0.4.0 A35: Total function (returns null on error, never throws)
|
|
10
|
-
*
|
|
11
|
-
* @see SPEC v0.4.0 §20
|
|
12
|
-
*/
|
|
13
|
-
import type { Patch } from "@manifesto-ai/core";
|
|
14
|
-
import type { RuntimeConditionalPatchOp } from "../lowering/lower-runtime-patch.js";
|
|
15
|
-
import type { EvaluationContext, EvaluationSnapshot } from "./context.js";
|
|
16
|
-
/**
|
|
17
|
-
* Skip reason for runtime patches.
|
|
18
|
-
*/
|
|
19
|
-
export type RuntimePatchSkipReason = "false" | "null" | "non-boolean";
|
|
20
|
-
/**
|
|
21
|
-
* Skipped patch info.
|
|
22
|
-
*/
|
|
23
|
-
export interface SkippedRuntimePatch {
|
|
24
|
-
/**
|
|
25
|
-
* Index in the original ops array.
|
|
26
|
-
*/
|
|
27
|
-
index: number;
|
|
28
|
-
/**
|
|
29
|
-
* Target path.
|
|
30
|
-
*/
|
|
31
|
-
path: string;
|
|
32
|
-
/**
|
|
33
|
-
* Reason why patch was skipped.
|
|
34
|
-
*/
|
|
35
|
-
reason: RuntimePatchSkipReason;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Result of runtime patch evaluation with trace information.
|
|
39
|
-
*/
|
|
40
|
-
export interface RuntimePatchEvaluationResult {
|
|
41
|
-
/**
|
|
42
|
-
* Concrete patches that passed conditions.
|
|
43
|
-
* Order is preserved from input.
|
|
44
|
-
*/
|
|
45
|
-
patches: Patch[];
|
|
46
|
-
/**
|
|
47
|
-
* Patches that were skipped due to false/null/non-boolean conditions.
|
|
48
|
-
*/
|
|
49
|
-
skipped: SkippedRuntimePatch[];
|
|
50
|
-
/**
|
|
51
|
-
* Final working snapshot after all evaluations.
|
|
52
|
-
*/
|
|
53
|
-
finalSnapshot: EvaluationSnapshot;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Evaluate runtime conditional patches to concrete Patch[].
|
|
57
|
-
*
|
|
58
|
-
* This is the main API for Host integration. It transforms
|
|
59
|
-
* RuntimeConditionalPatchOp[] (with Core IR expressions) to
|
|
60
|
-
* concrete Patch[] (with evaluated values) that can be passed
|
|
61
|
-
* directly to core.apply().
|
|
62
|
-
*
|
|
63
|
-
* Implements:
|
|
64
|
-
* - §18.5: Sequential evaluation with working snapshot
|
|
65
|
-
* - §18.6: Boolean-only conditions (non-boolean → skip)
|
|
66
|
-
* - A35: Total function (expression errors → null value)
|
|
67
|
-
*
|
|
68
|
-
* @param ops - Runtime conditional patch operations
|
|
69
|
-
* @param ctx - Evaluation context
|
|
70
|
-
* @returns Concrete patches that passed conditions
|
|
71
|
-
*
|
|
72
|
-
* @see SPEC v0.4.0 §20.2
|
|
73
|
-
*/
|
|
74
|
-
export declare function evaluateRuntimePatches(ops: RuntimeConditionalPatchOp[], ctx: EvaluationContext): Patch[];
|
|
75
|
-
/**
|
|
76
|
-
* Evaluate runtime patches with trace information.
|
|
77
|
-
*
|
|
78
|
-
* Returns additional information about skipped patches and
|
|
79
|
-
* final snapshot state.
|
|
80
|
-
*
|
|
81
|
-
* @param ops - Runtime conditional patch operations
|
|
82
|
-
* @param ctx - Evaluation context
|
|
83
|
-
* @returns Evaluation result with patches, skipped, and finalSnapshot
|
|
84
|
-
*/
|
|
85
|
-
export declare function evaluateRuntimePatchesWithTrace(ops: RuntimeConditionalPatchOp[], ctx: EvaluationContext): RuntimePatchEvaluationResult;
|
|
86
|
-
//# sourceMappingURL=evaluate-runtime-patch.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate-runtime-patch.d.ts","sourceRoot":"","sources":["../../src/evaluation/evaluate-runtime-patch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAoC,MAAM,oBAAoB,CAAC;AAClF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAe1E;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,MAAM,GAAG,aAAa,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,MAAM,EAAE,sBAAsB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;OAGG;IACH,OAAO,EAAE,KAAK,EAAE,CAAC;IAEjB;;OAEG;IACH,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAE/B;;OAEG;IACH,aAAa,EAAE,kBAAkB,CAAC;CACnC;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,yBAAyB,EAAE,EAChC,GAAG,EAAE,iBAAiB,GACrB,KAAK,EAAE,CAGT;AAED;;;;;;;;;GASG;AACH,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,yBAAyB,EAAE,EAChC,GAAG,EAAE,iBAAiB,GACrB,4BAA4B,CA8F9B"}
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Runtime Patch Evaluation
|
|
3
|
-
*
|
|
4
|
-
* Evaluates RuntimeConditionalPatchOp[] to produce concrete Patch[].
|
|
5
|
-
*
|
|
6
|
-
* Implements:
|
|
7
|
-
* - SPEC v0.4.0 §18.5: Sequential evaluation with working snapshot
|
|
8
|
-
* - SPEC v0.4.0 §18.6: Boolean-only conditions
|
|
9
|
-
* - SPEC v0.4.0 A35: Total function (returns null on error, never throws)
|
|
10
|
-
*
|
|
11
|
-
* @see SPEC v0.4.0 §20
|
|
12
|
-
*/
|
|
13
|
-
import { applyPatchToWorkingSnapshot } from "./context.js";
|
|
14
|
-
import { evaluateExpr } from "./evaluate-expr.js";
|
|
15
|
-
import { parsePath } from "@manifesto-ai/core";
|
|
16
|
-
const WHEN_SCOPE_PREFIX = "$mel.__whenGuards.";
|
|
17
|
-
const ONCE_SCOPE_PREFIX = "$mel.__onceScopeGuards.";
|
|
18
|
-
// ============ Main Evaluation Functions ============
|
|
19
|
-
/**
|
|
20
|
-
* Evaluate runtime conditional patches to concrete Patch[].
|
|
21
|
-
*
|
|
22
|
-
* This is the main API for Host integration. It transforms
|
|
23
|
-
* RuntimeConditionalPatchOp[] (with Core IR expressions) to
|
|
24
|
-
* concrete Patch[] (with evaluated values) that can be passed
|
|
25
|
-
* directly to core.apply().
|
|
26
|
-
*
|
|
27
|
-
* Implements:
|
|
28
|
-
* - §18.5: Sequential evaluation with working snapshot
|
|
29
|
-
* - §18.6: Boolean-only conditions (non-boolean → skip)
|
|
30
|
-
* - A35: Total function (expression errors → null value)
|
|
31
|
-
*
|
|
32
|
-
* @param ops - Runtime conditional patch operations
|
|
33
|
-
* @param ctx - Evaluation context
|
|
34
|
-
* @returns Concrete patches that passed conditions
|
|
35
|
-
*
|
|
36
|
-
* @see SPEC v0.4.0 §20.2
|
|
37
|
-
*/
|
|
38
|
-
export function evaluateRuntimePatches(ops, ctx) {
|
|
39
|
-
const result = evaluateRuntimePatchesWithTrace(ops, ctx);
|
|
40
|
-
return result.patches;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Evaluate runtime patches with trace information.
|
|
44
|
-
*
|
|
45
|
-
* Returns additional information about skipped patches and
|
|
46
|
-
* final snapshot state.
|
|
47
|
-
*
|
|
48
|
-
* @param ops - Runtime conditional patch operations
|
|
49
|
-
* @param ctx - Evaluation context
|
|
50
|
-
* @returns Evaluation result with patches, skipped, and finalSnapshot
|
|
51
|
-
*/
|
|
52
|
-
export function evaluateRuntimePatchesWithTrace(ops, ctx) {
|
|
53
|
-
const patches = [];
|
|
54
|
-
const skipped = [];
|
|
55
|
-
let workingSnapshot = ctx.snapshot;
|
|
56
|
-
const guardScopeStack = [];
|
|
57
|
-
for (let i = 0; i < ops.length; i++) {
|
|
58
|
-
const op = ops[i];
|
|
59
|
-
const isScopedSet = op.op === "set" && isScopedMarkerPath(op.path);
|
|
60
|
-
const isInScope = guardScopeStack.length > 0;
|
|
61
|
-
const activeSnapshot = isScopedSet || !isInScope
|
|
62
|
-
? workingSnapshot
|
|
63
|
-
: guardScopeStack[guardScopeStack.length - 1].snapshot;
|
|
64
|
-
// Create context with current scoped snapshot
|
|
65
|
-
// (all ops in active guard scopes evaluate against marker-entry state).
|
|
66
|
-
const evalCtx = {
|
|
67
|
-
...ctx,
|
|
68
|
-
snapshot: activeSnapshot,
|
|
69
|
-
};
|
|
70
|
-
// Evaluate condition if present (boolean-only per §18.6)
|
|
71
|
-
if (op.condition !== undefined) {
|
|
72
|
-
const conditionResult = evaluateExpr(op.condition, evalCtx);
|
|
73
|
-
if (conditionResult !== true) {
|
|
74
|
-
// Skip this patch
|
|
75
|
-
const reason = conditionResult === false
|
|
76
|
-
? "false"
|
|
77
|
-
: conditionResult === null
|
|
78
|
-
? "null"
|
|
79
|
-
: "non-boolean";
|
|
80
|
-
skipped.push({ index: i, path: op.path, reason });
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// Evaluate value expression to concrete value (A35: null on error)
|
|
85
|
-
const concreteValue = op.value
|
|
86
|
-
? evaluateExpr(op.value, evalCtx)
|
|
87
|
-
: undefined;
|
|
88
|
-
// Build concrete patch
|
|
89
|
-
const patch = buildConcretePatch(op.op, op.path, concreteValue);
|
|
90
|
-
if (patch !== null) {
|
|
91
|
-
if (op.op === "unset" &&
|
|
92
|
-
isScopedMarkerPath(op.path) &&
|
|
93
|
-
(!isInScope ||
|
|
94
|
-
guardScopeStack[guardScopeStack.length - 1].markerPath !== op.path)) {
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
patches.push(patch);
|
|
98
|
-
// Update working snapshot for sequential semantics (§18.5)
|
|
99
|
-
if (op.op !== "unset") {
|
|
100
|
-
workingSnapshot = applyPatchToWorkingSnapshot(workingSnapshot, op.path, concreteValue);
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
// For unset, we need to remove the value
|
|
104
|
-
workingSnapshot = applyUnsetToWorkingSnapshot(workingSnapshot, op.path);
|
|
105
|
-
}
|
|
106
|
-
if (op.op === "set" &&
|
|
107
|
-
isScopedMarkerPath(op.path)) {
|
|
108
|
-
guardScopeStack.push({
|
|
109
|
-
markerPath: op.path,
|
|
110
|
-
snapshot: workingSnapshot,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
else if (op.op === "unset" &&
|
|
114
|
-
isScopedMarkerPath(op.path) &&
|
|
115
|
-
guardScopeStack.length > 0 &&
|
|
116
|
-
guardScopeStack[guardScopeStack.length - 1].markerPath === op.path) {
|
|
117
|
-
guardScopeStack.pop();
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
return {
|
|
122
|
-
patches,
|
|
123
|
-
skipped,
|
|
124
|
-
finalSnapshot: workingSnapshot,
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
// ============ Helper Functions ============
|
|
128
|
-
/**
|
|
129
|
-
* Build a concrete Patch from operation type, path, and value.
|
|
130
|
-
*
|
|
131
|
-
* @param op - Operation type
|
|
132
|
-
* @param path - Target path
|
|
133
|
-
* @param value - Evaluated value
|
|
134
|
-
* @returns Concrete patch or null if invalid
|
|
135
|
-
*/
|
|
136
|
-
function buildConcretePatch(op, path, value) {
|
|
137
|
-
switch (op) {
|
|
138
|
-
case "set":
|
|
139
|
-
return { op: "set", path, value };
|
|
140
|
-
case "unset":
|
|
141
|
-
return { op: "unset", path };
|
|
142
|
-
case "merge":
|
|
143
|
-
// Merge requires an object value
|
|
144
|
-
if (value !== null && typeof value === "object" && !Array.isArray(value)) {
|
|
145
|
-
return { op: "merge", path, value: value };
|
|
146
|
-
}
|
|
147
|
-
// Invalid merge value - fallback to set with null (A35: no throw)
|
|
148
|
-
return { op: "set", path, value: null };
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Apply unset to working snapshot.
|
|
153
|
-
*
|
|
154
|
-
* Removes the value at path in the working snapshot.
|
|
155
|
-
*/
|
|
156
|
-
function applyUnsetToWorkingSnapshot(snapshot, path) {
|
|
157
|
-
// Deep clone data
|
|
158
|
-
const newData = structuredClone(snapshot.data);
|
|
159
|
-
// Remove value at path
|
|
160
|
-
removeValueAtPath(newData, path);
|
|
161
|
-
return {
|
|
162
|
-
data: newData,
|
|
163
|
-
computed: snapshot.computed,
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Remove value at a dot-separated path.
|
|
168
|
-
*/
|
|
169
|
-
function removeValueAtPath(obj, path) {
|
|
170
|
-
const parts = parsePath(path);
|
|
171
|
-
let current = obj;
|
|
172
|
-
for (let i = 0; i < parts.length - 1; i++) {
|
|
173
|
-
const part = parts[i];
|
|
174
|
-
if (!(part in current) || typeof current[part] !== "object" || current[part] === null) {
|
|
175
|
-
return; // Path doesn't exist, nothing to remove
|
|
176
|
-
}
|
|
177
|
-
current = current[part];
|
|
178
|
-
}
|
|
179
|
-
const lastPart = parts[parts.length - 1];
|
|
180
|
-
delete current[lastPart];
|
|
181
|
-
}
|
|
182
|
-
function isScopedMarkerPath(path) {
|
|
183
|
-
return path.startsWith(WHEN_SCOPE_PREFIX) || path.startsWith(ONCE_SCOPE_PREFIX);
|
|
184
|
-
}
|
|
185
|
-
//# sourceMappingURL=evaluate-runtime-patch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate-runtime-patch.js","sourceRoot":"","sources":["../../src/evaluation/evaluate-runtime-patch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Evaluation Module
|
|
3
|
-
*
|
|
4
|
-
* Evaluates Core IR expressions and conditional patches.
|
|
5
|
-
*
|
|
6
|
-
* @see SPEC v0.4.0 §18
|
|
7
|
-
*/
|
|
8
|
-
export type { EvaluationSnapshot, EvaluationMeta, EvaluationContext, } from "./context.js";
|
|
9
|
-
export { createEvaluationContext, applyPatchToWorkingSnapshot, } from "./context.js";
|
|
10
|
-
export { evaluateExpr } from "./evaluate-expr.js";
|
|
11
|
-
export type { EvaluatedPatchOp, EvaluatedPatch, PatchEvaluationResult, } from "./evaluate-patch.js";
|
|
12
|
-
export { evaluateConditionalPatchOps, evaluatePatches, evaluatePatchExpressions, evaluateCondition, classifyCondition, } from "./evaluate-patch.js";
|
|
13
|
-
export type { RuntimePatchSkipReason, SkippedRuntimePatch, RuntimePatchEvaluationResult, } from "./evaluate-runtime-patch.js";
|
|
14
|
-
export { evaluateRuntimePatches, evaluateRuntimePatchesWithTrace, } from "./evaluate-runtime-patch.js";
|
|
15
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/evaluation/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,sBAAsB,EACtB,+BAA+B,GAChC,MAAM,6BAA6B,CAAC"}
|
package/dist/evaluation/index.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Evaluation Module
|
|
3
|
-
*
|
|
4
|
-
* Evaluates Core IR expressions and conditional patches.
|
|
5
|
-
*
|
|
6
|
-
* @see SPEC v0.4.0 §18
|
|
7
|
-
*/
|
|
8
|
-
export { createEvaluationContext, applyPatchToWorkingSnapshot, } from "./context.js";
|
|
9
|
-
// Expression evaluation
|
|
10
|
-
export { evaluateExpr } from "./evaluate-expr.js";
|
|
11
|
-
export { evaluateConditionalPatchOps, evaluatePatches, evaluatePatchExpressions, evaluateCondition, classifyCondition, } from "./evaluate-patch.js";
|
|
12
|
-
export { evaluateRuntimePatches, evaluateRuntimePatchesWithTrace, } from "./evaluate-runtime-patch.js";
|
|
13
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/evaluation/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,EACL,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AAEtB,wBAAwB;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AASlD,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EACL,sBAAsB,EACtB,+BAA+B,GAChC,MAAM,6BAA6B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC"}
|