@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.
Files changed (201) hide show
  1. package/README.md +64 -16
  2. package/dist/chunk-DJY6BFGK.js +74 -0
  3. package/dist/chunk-DJY6BFGK.js.map +1 -0
  4. package/dist/chunk-QP2LGMBA.js +4522 -0
  5. package/dist/chunk-QP2LGMBA.js.map +1 -0
  6. package/dist/chunk-QXLPDCLA.js +33 -0
  7. package/dist/chunk-QXLPDCLA.js.map +1 -0
  8. package/dist/esbuild.d.ts +8 -0
  9. package/dist/esbuild.js +14 -0
  10. package/dist/esbuild.js.map +1 -0
  11. package/dist/index.d.ts +2710 -11
  12. package/dist/index.js +2189 -43
  13. package/dist/index.js.map +1 -1
  14. package/dist/node-loader.d.ts +18 -0
  15. package/dist/node-loader.js +47 -0
  16. package/dist/node-loader.js.map +1 -0
  17. package/dist/rollup.d.ts +8 -0
  18. package/dist/rollup.js +14 -0
  19. package/dist/rollup.js.map +1 -0
  20. package/dist/rspack.d.ts +7 -0
  21. package/dist/rspack.js +14 -0
  22. package/dist/rspack.js.map +1 -0
  23. package/dist/unplugin-6wnvFiEo.d.ts +17 -0
  24. package/dist/vite.d.ts +8 -17
  25. package/dist/vite.js +13 -33
  26. package/dist/vite.js.map +1 -1
  27. package/dist/webpack.d.ts +8 -0
  28. package/dist/webpack.js +14 -0
  29. package/dist/webpack.js.map +1 -0
  30. package/package.json +39 -21
  31. package/dist/analyzer/index.d.ts +0 -6
  32. package/dist/analyzer/index.d.ts.map +0 -1
  33. package/dist/analyzer/index.js +0 -6
  34. package/dist/analyzer/index.js.map +0 -1
  35. package/dist/analyzer/scope.d.ts +0 -77
  36. package/dist/analyzer/scope.d.ts.map +0 -1
  37. package/dist/analyzer/scope.js +0 -296
  38. package/dist/analyzer/scope.js.map +0 -1
  39. package/dist/analyzer/validator.d.ts +0 -60
  40. package/dist/analyzer/validator.d.ts.map +0 -1
  41. package/dist/analyzer/validator.js +0 -439
  42. package/dist/analyzer/validator.js.map +0 -1
  43. package/dist/api/compile-mel-patch-collector.d.ts +0 -32
  44. package/dist/api/compile-mel-patch-collector.d.ts.map +0 -1
  45. package/dist/api/compile-mel-patch-collector.js +0 -425
  46. package/dist/api/compile-mel-patch-collector.js.map +0 -1
  47. package/dist/api/compile-mel-patch-expr.d.ts +0 -9
  48. package/dist/api/compile-mel-patch-expr.d.ts.map +0 -1
  49. package/dist/api/compile-mel-patch-expr.js +0 -179
  50. package/dist/api/compile-mel-patch-expr.js.map +0 -1
  51. package/dist/api/compile-mel-patch-location.d.ts +0 -10
  52. package/dist/api/compile-mel-patch-location.d.ts.map +0 -1
  53. package/dist/api/compile-mel-patch-location.js +0 -48
  54. package/dist/api/compile-mel-patch-location.js.map +0 -1
  55. package/dist/api/compile-mel-patch.d.ts +0 -6
  56. package/dist/api/compile-mel-patch.d.ts.map +0 -1
  57. package/dist/api/compile-mel-patch.js +0 -244
  58. package/dist/api/compile-mel-patch.js.map +0 -1
  59. package/dist/api/compile-mel.d.ts +0 -126
  60. package/dist/api/compile-mel.d.ts.map +0 -1
  61. package/dist/api/compile-mel.js +0 -114
  62. package/dist/api/compile-mel.js.map +0 -1
  63. package/dist/api/index.d.ts +0 -10
  64. package/dist/api/index.d.ts.map +0 -1
  65. package/dist/api/index.js +0 -9
  66. package/dist/api/index.js.map +0 -1
  67. package/dist/diagnostics/codes.d.ts +0 -25
  68. package/dist/diagnostics/codes.d.ts.map +0 -1
  69. package/dist/diagnostics/codes.js +0 -154
  70. package/dist/diagnostics/codes.js.map +0 -1
  71. package/dist/diagnostics/index.d.ts +0 -6
  72. package/dist/diagnostics/index.d.ts.map +0 -1
  73. package/dist/diagnostics/index.js +0 -6
  74. package/dist/diagnostics/index.js.map +0 -1
  75. package/dist/diagnostics/types.d.ts +0 -67
  76. package/dist/diagnostics/types.d.ts.map +0 -1
  77. package/dist/diagnostics/types.js +0 -58
  78. package/dist/diagnostics/types.js.map +0 -1
  79. package/dist/evaluation/context.d.ts +0 -91
  80. package/dist/evaluation/context.d.ts.map +0 -1
  81. package/dist/evaluation/context.js +0 -53
  82. package/dist/evaluation/context.js.map +0 -1
  83. package/dist/evaluation/evaluate-expr.d.ts +0 -24
  84. package/dist/evaluation/evaluate-expr.d.ts.map +0 -1
  85. package/dist/evaluation/evaluate-expr.js +0 -577
  86. package/dist/evaluation/evaluate-expr.js.map +0 -1
  87. package/dist/evaluation/evaluate-patch.d.ts +0 -123
  88. package/dist/evaluation/evaluate-patch.d.ts.map +0 -1
  89. package/dist/evaluation/evaluate-patch.js +0 -202
  90. package/dist/evaluation/evaluate-patch.js.map +0 -1
  91. package/dist/evaluation/evaluate-runtime-patch.d.ts +0 -86
  92. package/dist/evaluation/evaluate-runtime-patch.d.ts.map +0 -1
  93. package/dist/evaluation/evaluate-runtime-patch.js +0 -185
  94. package/dist/evaluation/evaluate-runtime-patch.js.map +0 -1
  95. package/dist/evaluation/index.d.ts +0 -15
  96. package/dist/evaluation/index.d.ts.map +0 -1
  97. package/dist/evaluation/index.js +0 -13
  98. package/dist/evaluation/index.js.map +0 -1
  99. package/dist/generator/index.d.ts +0 -7
  100. package/dist/generator/index.d.ts.map +0 -1
  101. package/dist/generator/index.js +0 -7
  102. package/dist/generator/index.js.map +0 -1
  103. package/dist/generator/ir.d.ts +0 -348
  104. package/dist/generator/ir.d.ts.map +0 -1
  105. package/dist/generator/ir.js +0 -715
  106. package/dist/generator/ir.js.map +0 -1
  107. package/dist/generator/lowering.d.ts +0 -11
  108. package/dist/generator/lowering.d.ts.map +0 -1
  109. package/dist/generator/lowering.js +0 -369
  110. package/dist/generator/lowering.js.map +0 -1
  111. package/dist/generator/normalizer.d.ts +0 -16
  112. package/dist/generator/normalizer.d.ts.map +0 -1
  113. package/dist/generator/normalizer.js +0 -181
  114. package/dist/generator/normalizer.js.map +0 -1
  115. package/dist/index.d.ts.map +0 -1
  116. package/dist/lexer/index.d.ts +0 -7
  117. package/dist/lexer/index.d.ts.map +0 -1
  118. package/dist/lexer/index.js +0 -7
  119. package/dist/lexer/index.js.map +0 -1
  120. package/dist/lexer/lexer.d.ts +0 -59
  121. package/dist/lexer/lexer.d.ts.map +0 -1
  122. package/dist/lexer/lexer.js +0 -433
  123. package/dist/lexer/lexer.js.map +0 -1
  124. package/dist/lexer/source-location.d.ts +0 -41
  125. package/dist/lexer/source-location.d.ts.map +0 -1
  126. package/dist/lexer/source-location.js +0 -33
  127. package/dist/lexer/source-location.js.map +0 -1
  128. package/dist/lexer/tokens.d.ts +0 -47
  129. package/dist/lexer/tokens.d.ts.map +0 -1
  130. package/dist/lexer/tokens.js +0 -73
  131. package/dist/lexer/tokens.js.map +0 -1
  132. package/dist/loader.d.ts +0 -23
  133. package/dist/loader.d.ts.map +0 -1
  134. package/dist/loader.js +0 -62
  135. package/dist/loader.js.map +0 -1
  136. package/dist/lowering/context.d.ts +0 -96
  137. package/dist/lowering/context.d.ts.map +0 -1
  138. package/dist/lowering/context.js +0 -42
  139. package/dist/lowering/context.js.map +0 -1
  140. package/dist/lowering/errors.d.ts +0 -84
  141. package/dist/lowering/errors.d.ts.map +0 -1
  142. package/dist/lowering/errors.js +0 -81
  143. package/dist/lowering/errors.js.map +0 -1
  144. package/dist/lowering/index.d.ts +0 -20
  145. package/dist/lowering/index.d.ts.map +0 -1
  146. package/dist/lowering/index.js +0 -13
  147. package/dist/lowering/index.js.map +0 -1
  148. package/dist/lowering/lower-expr.d.ts +0 -76
  149. package/dist/lowering/lower-expr.d.ts.map +0 -1
  150. package/dist/lowering/lower-expr.js +0 -366
  151. package/dist/lowering/lower-expr.js.map +0 -1
  152. package/dist/lowering/lower-patch.d.ts +0 -231
  153. package/dist/lowering/lower-patch.d.ts.map +0 -1
  154. package/dist/lowering/lower-patch.js +0 -146
  155. package/dist/lowering/lower-patch.js.map +0 -1
  156. package/dist/lowering/lower-runtime-patch.d.ts +0 -100
  157. package/dist/lowering/lower-runtime-patch.d.ts.map +0 -1
  158. package/dist/lowering/lower-runtime-patch.js +0 -49
  159. package/dist/lowering/lower-runtime-patch.js.map +0 -1
  160. package/dist/mel-module.d.ts +0 -13
  161. package/dist/mel-module.d.ts.map +0 -1
  162. package/dist/mel-module.js +0 -33
  163. package/dist/mel-module.js.map +0 -1
  164. package/dist/parser/ast.d.ts +0 -344
  165. package/dist/parser/ast.d.ts.map +0 -1
  166. package/dist/parser/ast.js +0 -24
  167. package/dist/parser/ast.js.map +0 -1
  168. package/dist/parser/index.d.ts +0 -7
  169. package/dist/parser/index.d.ts.map +0 -1
  170. package/dist/parser/index.js +0 -7
  171. package/dist/parser/index.js.map +0 -1
  172. package/dist/parser/parser.d.ts +0 -92
  173. package/dist/parser/parser.d.ts.map +0 -1
  174. package/dist/parser/parser.js +0 -892
  175. package/dist/parser/parser.js.map +0 -1
  176. package/dist/parser/precedence.d.ts +0 -44
  177. package/dist/parser/precedence.d.ts.map +0 -1
  178. package/dist/parser/precedence.js +0 -69
  179. package/dist/parser/precedence.js.map +0 -1
  180. package/dist/renderer/expr-node.d.ts +0 -172
  181. package/dist/renderer/expr-node.d.ts.map +0 -1
  182. package/dist/renderer/expr-node.js +0 -218
  183. package/dist/renderer/expr-node.js.map +0 -1
  184. package/dist/renderer/fragment.d.ts +0 -84
  185. package/dist/renderer/fragment.d.ts.map +0 -1
  186. package/dist/renderer/fragment.js +0 -172
  187. package/dist/renderer/fragment.js.map +0 -1
  188. package/dist/renderer/index.d.ts +0 -23
  189. package/dist/renderer/index.d.ts.map +0 -1
  190. package/dist/renderer/index.js +0 -27
  191. package/dist/renderer/index.js.map +0 -1
  192. package/dist/renderer/patch-op.d.ts +0 -82
  193. package/dist/renderer/patch-op.d.ts.map +0 -1
  194. package/dist/renderer/patch-op.js +0 -204
  195. package/dist/renderer/patch-op.js.map +0 -1
  196. package/dist/renderer/type-expr.d.ts +0 -61
  197. package/dist/renderer/type-expr.d.ts.map +0 -1
  198. package/dist/renderer/type-expr.js +0 -131
  199. package/dist/renderer/type-expr.js.map +0 -1
  200. package/dist/vite.d.ts.map +0 -1
  201. 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"}