@manifesto-ai/compiler 1.6.2 → 1.7.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 +64 -16
- package/dist/chunk-DJY6BFGK.js +74 -0
- package/dist/chunk-DJY6BFGK.js.map +1 -0
- package/dist/chunk-QP2LGMBA.js +4522 -0
- package/dist/chunk-QP2LGMBA.js.map +1 -0
- package/dist/chunk-QXLPDCLA.js +33 -0
- package/dist/chunk-QXLPDCLA.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 +2710 -11
- package/dist/index.js +2189 -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 +39 -21
- 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,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Semantic Validator for MEL
|
|
3
|
-
* Validates semantic rules beyond syntax
|
|
4
|
-
* Based on MEL SPEC v0.3.3 and FDR-MEL-*
|
|
5
|
-
*/
|
|
6
|
-
import type { ProgramNode } from "../parser/ast.js";
|
|
7
|
-
import type { Diagnostic } from "../diagnostics/types.js";
|
|
8
|
-
/**
|
|
9
|
-
* Result of semantic validation
|
|
10
|
-
*/
|
|
11
|
-
export interface ValidationResult {
|
|
12
|
-
valid: boolean;
|
|
13
|
-
diagnostics: Diagnostic[];
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Semantic Validator
|
|
17
|
-
*/
|
|
18
|
-
export declare class SemanticValidator {
|
|
19
|
-
private ctx;
|
|
20
|
-
/**
|
|
21
|
-
* Validate a MEL program
|
|
22
|
-
*/
|
|
23
|
-
validate(program: ProgramNode): ValidationResult;
|
|
24
|
-
private validateDomain;
|
|
25
|
-
/**
|
|
26
|
-
* v0.3.3: Validate state fields for W012 (anonymous object types)
|
|
27
|
-
*/
|
|
28
|
-
private validateState;
|
|
29
|
-
/**
|
|
30
|
-
* v0.3.3: Validate state field - check for anonymous object types (W012)
|
|
31
|
-
*/
|
|
32
|
-
private validateStateField;
|
|
33
|
-
/**
|
|
34
|
-
* v0.3.3: Check if a type expression contains anonymous object types
|
|
35
|
-
* Issues W012 warning for inline object types in state fields
|
|
36
|
-
*/
|
|
37
|
-
private checkAnonymousObjectType;
|
|
38
|
-
private validateAction;
|
|
39
|
-
/**
|
|
40
|
-
* v0.3.3: Validate available expression is pure (E005)
|
|
41
|
-
* No $system.*, no effects, no $input.*
|
|
42
|
-
*/
|
|
43
|
-
private validateAvailableExpr;
|
|
44
|
-
private validateGuardedStmt;
|
|
45
|
-
private validateWhen;
|
|
46
|
-
private validateOnce;
|
|
47
|
-
private validateOnceIntent;
|
|
48
|
-
private validatePatch;
|
|
49
|
-
private validateEffect;
|
|
50
|
-
private validateCondition;
|
|
51
|
-
private validateExpr;
|
|
52
|
-
private validateFunctionCall;
|
|
53
|
-
private error;
|
|
54
|
-
private warn;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Validate a MEL program semantically
|
|
58
|
-
*/
|
|
59
|
-
export declare function validateSemantics(program: ProgramNode): ValidationResult;
|
|
60
|
-
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/analyzer/validator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,WAAW,EAcZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AA0B1D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,GAAG,CAAsC;IAEjD;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,gBAAgB;IAUhD,OAAO,CAAC,cAAc;IA0BtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAuChC,OAAO,CAAC,cAAc;IAiBtB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAsE7B,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,YAAY;IAuDpB,OAAO,CAAC,oBAAoB;IAkK5B,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,IAAI;CAQb;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,gBAAgB,CAGxE"}
|
|
@@ -1,439 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Semantic Validator for MEL
|
|
3
|
-
* Validates semantic rules beyond syntax
|
|
4
|
-
* Based on MEL SPEC v0.3.3 and FDR-MEL-*
|
|
5
|
-
*/
|
|
6
|
-
import { createWarning } from "../diagnostics/types.js";
|
|
7
|
-
function createContext() {
|
|
8
|
-
return {
|
|
9
|
-
inAction: false,
|
|
10
|
-
inGuard: false,
|
|
11
|
-
guardDepth: 0,
|
|
12
|
-
hasMarkerPatch: false,
|
|
13
|
-
diagnostics: [],
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Semantic Validator
|
|
18
|
-
*/
|
|
19
|
-
export class SemanticValidator {
|
|
20
|
-
ctx = createContext();
|
|
21
|
-
/**
|
|
22
|
-
* Validate a MEL program
|
|
23
|
-
*/
|
|
24
|
-
validate(program) {
|
|
25
|
-
this.ctx = createContext();
|
|
26
|
-
this.validateDomain(program.domain);
|
|
27
|
-
return {
|
|
28
|
-
valid: !this.ctx.diagnostics.some(d => d.severity === "error"),
|
|
29
|
-
diagnostics: this.ctx.diagnostics,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
validateDomain(domain) {
|
|
33
|
-
// Validate domain name
|
|
34
|
-
if (domain.name.startsWith("__")) {
|
|
35
|
-
this.error("Domain name cannot start with '__' (reserved prefix)", domain.location, "E_RESERVED_NAME");
|
|
36
|
-
}
|
|
37
|
-
// Validate members
|
|
38
|
-
for (const member of domain.members) {
|
|
39
|
-
switch (member.kind) {
|
|
40
|
-
case "state":
|
|
41
|
-
this.validateState(member);
|
|
42
|
-
break;
|
|
43
|
-
case "computed":
|
|
44
|
-
this.validateExpr(member.expression, "computed");
|
|
45
|
-
break;
|
|
46
|
-
case "action":
|
|
47
|
-
this.validateAction(member);
|
|
48
|
-
break;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* v0.3.3: Validate state fields for W012 (anonymous object types)
|
|
54
|
-
*/
|
|
55
|
-
validateState(state) {
|
|
56
|
-
for (const field of state.fields) {
|
|
57
|
-
this.validateStateField(field);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* v0.3.3: Validate state field - check for anonymous object types (W012)
|
|
62
|
-
*/
|
|
63
|
-
validateStateField(field) {
|
|
64
|
-
this.checkAnonymousObjectType(field.typeExpr, field.location);
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* v0.3.3: Check if a type expression contains anonymous object types
|
|
68
|
-
* Issues W012 warning for inline object types in state fields
|
|
69
|
-
*/
|
|
70
|
-
checkAnonymousObjectType(typeExpr, fieldLocation) {
|
|
71
|
-
switch (typeExpr.kind) {
|
|
72
|
-
case "objectType":
|
|
73
|
-
// W012: Anonymous object type in state field
|
|
74
|
-
this.ctx.diagnostics.push(createWarning("W012", "Anonymous object type in state field. Use a named type declaration instead: type MyType = { ... }", typeExpr.location, {
|
|
75
|
-
suggestion: "Define this type using 'type TypeName = { ... }' and reference it by name",
|
|
76
|
-
}));
|
|
77
|
-
// Also check nested types
|
|
78
|
-
for (const f of typeExpr.fields) {
|
|
79
|
-
this.checkAnonymousObjectType(f.typeExpr, fieldLocation);
|
|
80
|
-
}
|
|
81
|
-
break;
|
|
82
|
-
case "arrayType":
|
|
83
|
-
this.checkAnonymousObjectType(typeExpr.elementType, fieldLocation);
|
|
84
|
-
break;
|
|
85
|
-
case "recordType":
|
|
86
|
-
this.checkAnonymousObjectType(typeExpr.keyType, fieldLocation);
|
|
87
|
-
this.checkAnonymousObjectType(typeExpr.valueType, fieldLocation);
|
|
88
|
-
break;
|
|
89
|
-
case "unionType":
|
|
90
|
-
for (const t of typeExpr.types) {
|
|
91
|
-
this.checkAnonymousObjectType(t, fieldLocation);
|
|
92
|
-
}
|
|
93
|
-
break;
|
|
94
|
-
// simpleType and literalType are OK
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
validateAction(action) {
|
|
98
|
-
this.ctx.inAction = true;
|
|
99
|
-
// v0.3.3: E005 - available expression must be pure
|
|
100
|
-
if (action.available) {
|
|
101
|
-
this.validateAvailableExpr(action.available);
|
|
102
|
-
}
|
|
103
|
-
// FDR-MEL-020: All patch/effect must be inside guards
|
|
104
|
-
// Action body should only contain when/once statements
|
|
105
|
-
for (const stmt of action.body) {
|
|
106
|
-
this.validateGuardedStmt(stmt);
|
|
107
|
-
}
|
|
108
|
-
this.ctx.inAction = false;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* v0.3.3: Validate available expression is pure (E005)
|
|
112
|
-
* No $system.*, no effects, no $input.*
|
|
113
|
-
*/
|
|
114
|
-
validateAvailableExpr(expr) {
|
|
115
|
-
switch (expr.kind) {
|
|
116
|
-
case "systemIdent":
|
|
117
|
-
// E005: $system.* not allowed in available
|
|
118
|
-
if (expr.path[0] === "system") {
|
|
119
|
-
this.error("$system.* cannot be used in available condition (must be pure expression)", expr.location, "E005");
|
|
120
|
-
}
|
|
121
|
-
// E005: $input.* not allowed in available (no input at availability check)
|
|
122
|
-
if (expr.path[0] === "input") {
|
|
123
|
-
this.error("$input.* cannot be used in available condition (parameters not available at availability check)", expr.location, "E005");
|
|
124
|
-
}
|
|
125
|
-
break;
|
|
126
|
-
case "functionCall":
|
|
127
|
-
// Check for effect-like function calls (this is a basic check)
|
|
128
|
-
// In practice, effects are in statements, not expressions
|
|
129
|
-
// Recursively validate arguments
|
|
130
|
-
for (const arg of expr.args) {
|
|
131
|
-
this.validateAvailableExpr(arg);
|
|
132
|
-
}
|
|
133
|
-
break;
|
|
134
|
-
case "binary":
|
|
135
|
-
this.validateAvailableExpr(expr.left);
|
|
136
|
-
this.validateAvailableExpr(expr.right);
|
|
137
|
-
break;
|
|
138
|
-
case "unary":
|
|
139
|
-
this.validateAvailableExpr(expr.operand);
|
|
140
|
-
break;
|
|
141
|
-
case "ternary":
|
|
142
|
-
this.validateAvailableExpr(expr.condition);
|
|
143
|
-
this.validateAvailableExpr(expr.consequent);
|
|
144
|
-
this.validateAvailableExpr(expr.alternate);
|
|
145
|
-
break;
|
|
146
|
-
case "propertyAccess":
|
|
147
|
-
this.validateAvailableExpr(expr.object);
|
|
148
|
-
break;
|
|
149
|
-
case "indexAccess":
|
|
150
|
-
this.validateAvailableExpr(expr.object);
|
|
151
|
-
this.validateAvailableExpr(expr.index);
|
|
152
|
-
break;
|
|
153
|
-
case "objectLiteral":
|
|
154
|
-
for (const prop of expr.properties) {
|
|
155
|
-
this.validateAvailableExpr(prop.value);
|
|
156
|
-
}
|
|
157
|
-
break;
|
|
158
|
-
case "arrayLiteral":
|
|
159
|
-
for (const elem of expr.elements) {
|
|
160
|
-
this.validateAvailableExpr(elem);
|
|
161
|
-
}
|
|
162
|
-
break;
|
|
163
|
-
// literal, identifier, iterationVar are OK
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
validateGuardedStmt(stmt) {
|
|
167
|
-
switch (stmt.kind) {
|
|
168
|
-
case "when":
|
|
169
|
-
this.validateWhen(stmt);
|
|
170
|
-
break;
|
|
171
|
-
case "once":
|
|
172
|
-
this.validateOnce(stmt);
|
|
173
|
-
break;
|
|
174
|
-
case "onceIntent":
|
|
175
|
-
this.validateOnceIntent(stmt);
|
|
176
|
-
break;
|
|
177
|
-
case "patch":
|
|
178
|
-
this.validatePatch(stmt);
|
|
179
|
-
break;
|
|
180
|
-
case "effect":
|
|
181
|
-
this.validateEffect(stmt);
|
|
182
|
-
break;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
validateWhen(stmt) {
|
|
186
|
-
this.ctx.inGuard = true;
|
|
187
|
-
this.ctx.guardDepth++;
|
|
188
|
-
// FDR-MEL-025: Condition must be boolean
|
|
189
|
-
this.validateCondition(stmt.condition, "when");
|
|
190
|
-
for (const inner of stmt.body) {
|
|
191
|
-
this.validateGuardedStmt(inner);
|
|
192
|
-
}
|
|
193
|
-
this.ctx.guardDepth--;
|
|
194
|
-
if (this.ctx.guardDepth === 0) {
|
|
195
|
-
this.ctx.inGuard = false;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
validateOnce(stmt) {
|
|
199
|
-
this.ctx.inGuard = true;
|
|
200
|
-
this.ctx.guardDepth++;
|
|
201
|
-
this.ctx.hasMarkerPatch = false;
|
|
202
|
-
// Validate extra condition if present
|
|
203
|
-
if (stmt.condition) {
|
|
204
|
-
this.validateCondition(stmt.condition, "once");
|
|
205
|
-
}
|
|
206
|
-
// FDR-MEL-044: First statement should be marker patch
|
|
207
|
-
// The compiler auto-inserts this, but we can warn if user adds it manually
|
|
208
|
-
for (const inner of stmt.body) {
|
|
209
|
-
this.validateGuardedStmt(inner);
|
|
210
|
-
}
|
|
211
|
-
this.ctx.guardDepth--;
|
|
212
|
-
if (this.ctx.guardDepth === 0) {
|
|
213
|
-
this.ctx.inGuard = false;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
validateOnceIntent(stmt) {
|
|
217
|
-
this.ctx.inGuard = true;
|
|
218
|
-
this.ctx.guardDepth++;
|
|
219
|
-
if (stmt.condition) {
|
|
220
|
-
this.validateCondition(stmt.condition, "onceIntent");
|
|
221
|
-
}
|
|
222
|
-
for (const inner of stmt.body) {
|
|
223
|
-
this.validateGuardedStmt(inner);
|
|
224
|
-
}
|
|
225
|
-
this.ctx.guardDepth--;
|
|
226
|
-
if (this.ctx.guardDepth === 0) {
|
|
227
|
-
this.ctx.inGuard = false;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
validatePatch(stmt) {
|
|
231
|
-
// Patch must be inside a guard
|
|
232
|
-
if (!this.ctx.inGuard) {
|
|
233
|
-
this.error("Patch must be inside a guard (when, once, or onceIntent)", stmt.location, "E_UNGUARDED_PATCH");
|
|
234
|
-
}
|
|
235
|
-
// Validate value expression
|
|
236
|
-
if (stmt.value) {
|
|
237
|
-
this.validateExpr(stmt.value, "action");
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
validateEffect(stmt) {
|
|
241
|
-
// Effect must be inside a guard
|
|
242
|
-
if (!this.ctx.inGuard) {
|
|
243
|
-
this.error("Effect must be inside a guard (when, once, or onceIntent)", stmt.location, "E_UNGUARDED_EFFECT");
|
|
244
|
-
}
|
|
245
|
-
// FDR-MEL-018: No nested effects (effects can't contain effects)
|
|
246
|
-
// This is naturally enforced by the parser
|
|
247
|
-
// Validate effect arguments
|
|
248
|
-
for (const arg of stmt.args) {
|
|
249
|
-
if (!arg.isPath) {
|
|
250
|
-
this.validateExpr(arg.value, "action");
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
validateCondition(expr, guardType) {
|
|
255
|
-
// FDR-MEL-025: Condition must return boolean
|
|
256
|
-
// We can do basic static analysis for obvious non-boolean expressions
|
|
257
|
-
this.validateExpr(expr, "action");
|
|
258
|
-
// Warn about literals that aren't boolean
|
|
259
|
-
if (expr.kind === "literal" && typeof expr.value !== "boolean") {
|
|
260
|
-
this.warn(`Condition in ${guardType} is a non-boolean literal. Consider using a boolean expression`, expr.location, "W_NON_BOOL_COND");
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
validateExpr(expr, context) {
|
|
264
|
-
switch (expr.kind) {
|
|
265
|
-
case "functionCall":
|
|
266
|
-
this.validateFunctionCall(expr, context);
|
|
267
|
-
break;
|
|
268
|
-
case "binary":
|
|
269
|
-
this.validateExpr(expr.left, context);
|
|
270
|
-
this.validateExpr(expr.right, context);
|
|
271
|
-
break;
|
|
272
|
-
case "unary":
|
|
273
|
-
this.validateExpr(expr.operand, context);
|
|
274
|
-
break;
|
|
275
|
-
case "ternary":
|
|
276
|
-
this.validateExpr(expr.condition, context);
|
|
277
|
-
this.validateExpr(expr.consequent, context);
|
|
278
|
-
this.validateExpr(expr.alternate, context);
|
|
279
|
-
break;
|
|
280
|
-
case "propertyAccess":
|
|
281
|
-
this.validateExpr(expr.object, context);
|
|
282
|
-
break;
|
|
283
|
-
case "indexAccess":
|
|
284
|
-
this.validateExpr(expr.object, context);
|
|
285
|
-
this.validateExpr(expr.index, context);
|
|
286
|
-
break;
|
|
287
|
-
case "objectLiteral":
|
|
288
|
-
for (const prop of expr.properties) {
|
|
289
|
-
this.validateExpr(prop.value, context);
|
|
290
|
-
}
|
|
291
|
-
break;
|
|
292
|
-
case "arrayLiteral":
|
|
293
|
-
for (const elem of expr.elements) {
|
|
294
|
-
this.validateExpr(elem, context);
|
|
295
|
-
}
|
|
296
|
-
break;
|
|
297
|
-
case "systemIdent":
|
|
298
|
-
// E001: $system.* in computed
|
|
299
|
-
if (context === "computed" && expr.path[0] === "system") {
|
|
300
|
-
this.error("Cannot use $system.* in computed expressions (non-deterministic)", expr.location, "E001");
|
|
301
|
-
}
|
|
302
|
-
break;
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
validateFunctionCall(expr, context) {
|
|
306
|
-
const { name, args, location } = expr;
|
|
307
|
-
// v0.3.3: E011 - reduce/fold/scan is forbidden
|
|
308
|
-
if (["reduce", "fold", "foldl", "foldr", "scan"].includes(name)) {
|
|
309
|
-
this.error(`Function '${name}' is forbidden. Use sum(), min(), max() for aggregation instead`, location, "E011");
|
|
310
|
-
}
|
|
311
|
-
// v0.3.3: E009/E010 - Primitive aggregation constraints
|
|
312
|
-
// sum(array), min(array), max(array) with single arg = array aggregation
|
|
313
|
-
if (["sum", "min", "max"].includes(name) && args.length === 1) {
|
|
314
|
-
// E009: Array aggregation only in computed
|
|
315
|
-
if (context === "action") {
|
|
316
|
-
this.error(`Primitive aggregation '${name}()' can only be used in computed expressions, not in actions`, location, "E009");
|
|
317
|
-
}
|
|
318
|
-
// E010: No composition - argument must be simple reference
|
|
319
|
-
const arg = args[0];
|
|
320
|
-
if (arg.kind === "functionCall") {
|
|
321
|
-
this.error(`Primitive aggregation '${name}()' does not allow composition. Use a direct reference, not '${arg.name}()'`, location, "E010");
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
// Validate known function signatures
|
|
325
|
-
switch (name) {
|
|
326
|
-
// FDR-MEL-042: eq/neq on primitives only
|
|
327
|
-
case "eq":
|
|
328
|
-
case "neq":
|
|
329
|
-
// We can't fully type-check at compile time, but we can note the requirement
|
|
330
|
-
break;
|
|
331
|
-
// FDR-MEL-026: len() on Array only
|
|
332
|
-
case "len":
|
|
333
|
-
// v0.3.3: sum() for array aggregation
|
|
334
|
-
case "sum":
|
|
335
|
-
if (args.length !== 1) {
|
|
336
|
-
this.error(`Function '${name}' expects 1 argument, got ${args.length}`, location, "E_ARG_COUNT");
|
|
337
|
-
}
|
|
338
|
-
break;
|
|
339
|
-
// Binary functions need exactly 2 args
|
|
340
|
-
case "add":
|
|
341
|
-
case "sub":
|
|
342
|
-
case "mul":
|
|
343
|
-
case "div":
|
|
344
|
-
case "mod":
|
|
345
|
-
case "gt":
|
|
346
|
-
case "gte":
|
|
347
|
-
case "lt":
|
|
348
|
-
case "lte":
|
|
349
|
-
if (args.length !== 2) {
|
|
350
|
-
this.error(`Function '${name}' expects 2 arguments, got ${args.length}`, location, "E_ARG_COUNT");
|
|
351
|
-
}
|
|
352
|
-
break;
|
|
353
|
-
// Unary functions need exactly 1 arg
|
|
354
|
-
case "not":
|
|
355
|
-
case "neg":
|
|
356
|
-
case "abs":
|
|
357
|
-
case "floor":
|
|
358
|
-
case "ceil":
|
|
359
|
-
case "round":
|
|
360
|
-
case "isNull":
|
|
361
|
-
case "isNotNull":
|
|
362
|
-
case "trim":
|
|
363
|
-
case "lower":
|
|
364
|
-
case "upper":
|
|
365
|
-
case "keys":
|
|
366
|
-
case "values":
|
|
367
|
-
case "entries":
|
|
368
|
-
case "first":
|
|
369
|
-
case "last":
|
|
370
|
-
if (args.length !== 1) {
|
|
371
|
-
this.error(`Function '${name}' expects 1 argument, got ${args.length}`, location, "E_ARG_COUNT");
|
|
372
|
-
}
|
|
373
|
-
break;
|
|
374
|
-
// Collection predicates need exactly 2 args
|
|
375
|
-
case "filter":
|
|
376
|
-
case "map":
|
|
377
|
-
case "find":
|
|
378
|
-
case "every":
|
|
379
|
-
case "some":
|
|
380
|
-
case "at":
|
|
381
|
-
case "includes":
|
|
382
|
-
if (args.length !== 2) {
|
|
383
|
-
this.error(`Function '${name}' expects 2 arguments, got ${args.length}`, location, "E_ARG_COUNT");
|
|
384
|
-
}
|
|
385
|
-
break;
|
|
386
|
-
// Variadic functions (at least 1 arg)
|
|
387
|
-
case "and":
|
|
388
|
-
case "or":
|
|
389
|
-
case "concat":
|
|
390
|
-
case "min":
|
|
391
|
-
case "max":
|
|
392
|
-
case "merge":
|
|
393
|
-
case "coalesce":
|
|
394
|
-
if (args.length < 1) {
|
|
395
|
-
this.error(`Function '${name}' expects at least 1 argument`, location, "E_ARG_COUNT");
|
|
396
|
-
}
|
|
397
|
-
break;
|
|
398
|
-
// Conditional needs exactly 3 args
|
|
399
|
-
case "if":
|
|
400
|
-
case "cond":
|
|
401
|
-
if (args.length !== 3) {
|
|
402
|
-
this.error(`Function '${name}' expects 3 arguments, got ${args.length}`, location, "E_ARG_COUNT");
|
|
403
|
-
}
|
|
404
|
-
break;
|
|
405
|
-
default:
|
|
406
|
-
// Unknown function - this might be caught by scope analysis
|
|
407
|
-
// or could be a user-defined function we don't know about
|
|
408
|
-
break;
|
|
409
|
-
}
|
|
410
|
-
// Recursively validate arguments
|
|
411
|
-
for (const arg of args) {
|
|
412
|
-
this.validateExpr(arg, context);
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
error(message, location, code) {
|
|
416
|
-
this.ctx.diagnostics.push({
|
|
417
|
-
severity: "error",
|
|
418
|
-
code,
|
|
419
|
-
message,
|
|
420
|
-
location,
|
|
421
|
-
});
|
|
422
|
-
}
|
|
423
|
-
warn(message, location, code) {
|
|
424
|
-
this.ctx.diagnostics.push({
|
|
425
|
-
severity: "warning",
|
|
426
|
-
code,
|
|
427
|
-
message,
|
|
428
|
-
location,
|
|
429
|
-
});
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
/**
|
|
433
|
-
* Validate a MEL program semantically
|
|
434
|
-
*/
|
|
435
|
-
export function validateSemantics(program) {
|
|
436
|
-
const validator = new SemanticValidator();
|
|
437
|
-
return validator.validate(program);
|
|
438
|
-
}
|
|
439
|
-
//# sourceMappingURL=validator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/analyzer/validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { Diagnostic } from "../diagnostics/types.js";
|
|
2
|
-
import type { MelExprNode } from "../lowering/lower-expr.js";
|
|
3
|
-
import type { GuardedStmtNode, InnerStmtNode, PatchStmtNode } from "../parser/ast.js";
|
|
4
|
-
import { toMelExpr } from "./compile-mel-patch-expr.js";
|
|
5
|
-
export interface PatchCollectContext {
|
|
6
|
-
actionName: string;
|
|
7
|
-
onceCounter: number;
|
|
8
|
-
onceIntentCounter: number;
|
|
9
|
-
whenCounter: number;
|
|
10
|
-
}
|
|
11
|
-
export type ConditionedPatchStatement = {
|
|
12
|
-
patch: PatchStmtNode;
|
|
13
|
-
condition?: MelExprNode;
|
|
14
|
-
};
|
|
15
|
-
export interface PatchCollectorDeps {
|
|
16
|
-
toMelExpr: (expr: Parameters<typeof toMelExpr>[0]) => MelExprNode;
|
|
17
|
-
mapLocation: (location: Diagnostic["location"]) => Diagnostic["location"];
|
|
18
|
-
}
|
|
19
|
-
export declare class PatchStatementCollector {
|
|
20
|
-
private readonly deps;
|
|
21
|
-
private readonly conditionComposer;
|
|
22
|
-
constructor(deps: PatchCollectorDeps);
|
|
23
|
-
collect(stmts: GuardedStmtNode[] | InnerStmtNode[], errors: Diagnostic[], context: PatchCollectContext, parentCondition: MelExprNode | undefined): ConditionedPatchStatement[];
|
|
24
|
-
private collectPatchStatements;
|
|
25
|
-
}
|
|
26
|
-
export declare function compilePatchStmtToMelRuntime(patchStatement: ConditionedPatchStatement): {
|
|
27
|
-
op: "set" | "unset" | "merge";
|
|
28
|
-
path: string;
|
|
29
|
-
value?: MelExprNode;
|
|
30
|
-
condition?: MelExprNode;
|
|
31
|
-
};
|
|
32
|
-
//# sourceMappingURL=compile-mel-patch-collector.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compile-mel-patch-collector.d.ts","sourceRoot":"","sources":["../../src/api/compile-mel-patch-collector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EAEb,aAAa,EACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC;IAClE,WAAW,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,UAAU,CAAC,UAAU,CAAC,CAAC;CAC3E;AAED,qBAAa,uBAAuB;IAGtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;gBAEhC,IAAI,EAAE,kBAAkB;IAErD,OAAO,CACL,KAAK,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,EAC1C,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,EAAE,mBAAmB,EAC5B,eAAe,EAAE,WAAW,GAAG,SAAS,GACvC,yBAAyB,EAAE;IAI9B,OAAO,CAAC,sBAAsB;CA+Y/B;AAED,wBAAgB,4BAA4B,CAC1C,cAAc,EAAE,yBAAyB,GACxC;IAAE,EAAE,EAAE,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,CAAC;IAAC,SAAS,CAAC,EAAE,WAAW,CAAA;CAAE,CAS/F"}
|