@manifesto-ai/compiler 1.6.1 → 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 (185) 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 +42 -24
  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.d.ts +0 -126
  44. package/dist/api/compile-mel.d.ts.map +0 -1
  45. package/dist/api/compile-mel.js +0 -129
  46. package/dist/api/compile-mel.js.map +0 -1
  47. package/dist/api/index.d.ts +0 -10
  48. package/dist/api/index.d.ts.map +0 -1
  49. package/dist/api/index.js +0 -9
  50. package/dist/api/index.js.map +0 -1
  51. package/dist/diagnostics/codes.d.ts +0 -25
  52. package/dist/diagnostics/codes.d.ts.map +0 -1
  53. package/dist/diagnostics/codes.js +0 -154
  54. package/dist/diagnostics/codes.js.map +0 -1
  55. package/dist/diagnostics/index.d.ts +0 -6
  56. package/dist/diagnostics/index.d.ts.map +0 -1
  57. package/dist/diagnostics/index.js +0 -6
  58. package/dist/diagnostics/index.js.map +0 -1
  59. package/dist/diagnostics/types.d.ts +0 -67
  60. package/dist/diagnostics/types.d.ts.map +0 -1
  61. package/dist/diagnostics/types.js +0 -58
  62. package/dist/diagnostics/types.js.map +0 -1
  63. package/dist/evaluation/context.d.ts +0 -91
  64. package/dist/evaluation/context.d.ts.map +0 -1
  65. package/dist/evaluation/context.js +0 -59
  66. package/dist/evaluation/context.js.map +0 -1
  67. package/dist/evaluation/evaluate-expr.d.ts +0 -24
  68. package/dist/evaluation/evaluate-expr.d.ts.map +0 -1
  69. package/dist/evaluation/evaluate-expr.js +0 -576
  70. package/dist/evaluation/evaluate-expr.js.map +0 -1
  71. package/dist/evaluation/evaluate-patch.d.ts +0 -123
  72. package/dist/evaluation/evaluate-patch.d.ts.map +0 -1
  73. package/dist/evaluation/evaluate-patch.js +0 -202
  74. package/dist/evaluation/evaluate-patch.js.map +0 -1
  75. package/dist/evaluation/evaluate-runtime-patch.d.ts +0 -86
  76. package/dist/evaluation/evaluate-runtime-patch.d.ts.map +0 -1
  77. package/dist/evaluation/evaluate-runtime-patch.js +0 -153
  78. package/dist/evaluation/evaluate-runtime-patch.js.map +0 -1
  79. package/dist/evaluation/index.d.ts +0 -15
  80. package/dist/evaluation/index.d.ts.map +0 -1
  81. package/dist/evaluation/index.js +0 -13
  82. package/dist/evaluation/index.js.map +0 -1
  83. package/dist/generator/index.d.ts +0 -7
  84. package/dist/generator/index.d.ts.map +0 -1
  85. package/dist/generator/index.js +0 -7
  86. package/dist/generator/index.js.map +0 -1
  87. package/dist/generator/ir.d.ts +0 -348
  88. package/dist/generator/ir.d.ts.map +0 -1
  89. package/dist/generator/ir.js +0 -709
  90. package/dist/generator/ir.js.map +0 -1
  91. package/dist/generator/lowering.d.ts +0 -11
  92. package/dist/generator/lowering.d.ts.map +0 -1
  93. package/dist/generator/lowering.js +0 -368
  94. package/dist/generator/lowering.js.map +0 -1
  95. package/dist/generator/normalizer.d.ts +0 -16
  96. package/dist/generator/normalizer.d.ts.map +0 -1
  97. package/dist/generator/normalizer.js +0 -181
  98. package/dist/generator/normalizer.js.map +0 -1
  99. package/dist/index.d.ts.map +0 -1
  100. package/dist/lexer/index.d.ts +0 -7
  101. package/dist/lexer/index.d.ts.map +0 -1
  102. package/dist/lexer/index.js +0 -7
  103. package/dist/lexer/index.js.map +0 -1
  104. package/dist/lexer/lexer.d.ts +0 -59
  105. package/dist/lexer/lexer.d.ts.map +0 -1
  106. package/dist/lexer/lexer.js +0 -433
  107. package/dist/lexer/lexer.js.map +0 -1
  108. package/dist/lexer/source-location.d.ts +0 -41
  109. package/dist/lexer/source-location.d.ts.map +0 -1
  110. package/dist/lexer/source-location.js +0 -33
  111. package/dist/lexer/source-location.js.map +0 -1
  112. package/dist/lexer/tokens.d.ts +0 -47
  113. package/dist/lexer/tokens.d.ts.map +0 -1
  114. package/dist/lexer/tokens.js +0 -73
  115. package/dist/lexer/tokens.js.map +0 -1
  116. package/dist/loader.d.ts +0 -23
  117. package/dist/loader.d.ts.map +0 -1
  118. package/dist/loader.js +0 -62
  119. package/dist/loader.js.map +0 -1
  120. package/dist/lowering/context.d.ts +0 -96
  121. package/dist/lowering/context.d.ts.map +0 -1
  122. package/dist/lowering/context.js +0 -42
  123. package/dist/lowering/context.js.map +0 -1
  124. package/dist/lowering/errors.d.ts +0 -84
  125. package/dist/lowering/errors.d.ts.map +0 -1
  126. package/dist/lowering/errors.js +0 -81
  127. package/dist/lowering/errors.js.map +0 -1
  128. package/dist/lowering/index.d.ts +0 -20
  129. package/dist/lowering/index.d.ts.map +0 -1
  130. package/dist/lowering/index.js +0 -13
  131. package/dist/lowering/index.js.map +0 -1
  132. package/dist/lowering/lower-expr.d.ts +0 -76
  133. package/dist/lowering/lower-expr.d.ts.map +0 -1
  134. package/dist/lowering/lower-expr.js +0 -351
  135. package/dist/lowering/lower-expr.js.map +0 -1
  136. package/dist/lowering/lower-patch.d.ts +0 -231
  137. package/dist/lowering/lower-patch.d.ts.map +0 -1
  138. package/dist/lowering/lower-patch.js +0 -146
  139. package/dist/lowering/lower-patch.js.map +0 -1
  140. package/dist/lowering/lower-runtime-patch.d.ts +0 -100
  141. package/dist/lowering/lower-runtime-patch.d.ts.map +0 -1
  142. package/dist/lowering/lower-runtime-patch.js +0 -49
  143. package/dist/lowering/lower-runtime-patch.js.map +0 -1
  144. package/dist/mel-module.d.ts +0 -13
  145. package/dist/mel-module.d.ts.map +0 -1
  146. package/dist/mel-module.js +0 -33
  147. package/dist/mel-module.js.map +0 -1
  148. package/dist/parser/ast.d.ts +0 -344
  149. package/dist/parser/ast.d.ts.map +0 -1
  150. package/dist/parser/ast.js +0 -24
  151. package/dist/parser/ast.js.map +0 -1
  152. package/dist/parser/index.d.ts +0 -7
  153. package/dist/parser/index.d.ts.map +0 -1
  154. package/dist/parser/index.js +0 -7
  155. package/dist/parser/index.js.map +0 -1
  156. package/dist/parser/parser.d.ts +0 -92
  157. package/dist/parser/parser.d.ts.map +0 -1
  158. package/dist/parser/parser.js +0 -892
  159. package/dist/parser/parser.js.map +0 -1
  160. package/dist/parser/precedence.d.ts +0 -44
  161. package/dist/parser/precedence.d.ts.map +0 -1
  162. package/dist/parser/precedence.js +0 -69
  163. package/dist/parser/precedence.js.map +0 -1
  164. package/dist/renderer/expr-node.d.ts +0 -172
  165. package/dist/renderer/expr-node.d.ts.map +0 -1
  166. package/dist/renderer/expr-node.js +0 -218
  167. package/dist/renderer/expr-node.js.map +0 -1
  168. package/dist/renderer/fragment.d.ts +0 -84
  169. package/dist/renderer/fragment.d.ts.map +0 -1
  170. package/dist/renderer/fragment.js +0 -172
  171. package/dist/renderer/fragment.js.map +0 -1
  172. package/dist/renderer/index.d.ts +0 -23
  173. package/dist/renderer/index.d.ts.map +0 -1
  174. package/dist/renderer/index.js +0 -27
  175. package/dist/renderer/index.js.map +0 -1
  176. package/dist/renderer/patch-op.d.ts +0 -82
  177. package/dist/renderer/patch-op.d.ts.map +0 -1
  178. package/dist/renderer/patch-op.js +0 -203
  179. package/dist/renderer/patch-op.js.map +0 -1
  180. package/dist/renderer/type-expr.d.ts +0 -61
  181. package/dist/renderer/type-expr.d.ts.map +0 -1
  182. package/dist/renderer/type-expr.js +0 -131
  183. package/dist/renderer/type-expr.js.map +0 -1
  184. package/dist/vite.d.ts.map +0 -1
  185. 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,126 +0,0 @@
1
- /**
2
- * MEL Text Ingest API
3
- *
4
- * Compiles MEL text to DomainSchema or RuntimeConditionalPatchOp[].
5
- *
6
- * @see SPEC v0.4.0 §19
7
- */
8
- import type { Diagnostic } from "../diagnostics/types.js";
9
- import type { DomainSchema } from "../generator/ir.js";
10
- import type { RuntimeConditionalPatchOp } from "../lowering/lower-runtime-patch.js";
11
- /**
12
- * Trace entry for compilation steps.
13
- */
14
- export interface CompileTrace {
15
- phase: "lex" | "parse" | "analyze" | "generate" | "lower";
16
- durationMs: number;
17
- details?: Record<string, unknown>;
18
- }
19
- /**
20
- * Domain compilation options.
21
- */
22
- export interface CompileMelDomainOptions {
23
- mode: "domain";
24
- fnTableVersion?: string;
25
- }
26
- /**
27
- * Domain compilation result.
28
- *
29
- * @see SPEC v0.4.0 §19.1
30
- */
31
- export interface CompileMelDomainResult {
32
- /**
33
- * Compiled schema, or null if errors occurred.
34
- */
35
- schema: DomainSchema | null;
36
- /**
37
- * Compilation trace.
38
- */
39
- trace: CompileTrace[];
40
- /**
41
- * Warning diagnostics.
42
- */
43
- warnings: Diagnostic[];
44
- /**
45
- * Error diagnostics.
46
- */
47
- errors: Diagnostic[];
48
- }
49
- /**
50
- * Patch compilation options.
51
- */
52
- export interface CompileMelPatchOptions {
53
- mode: "patch";
54
- /**
55
- * Action name for context.
56
- */
57
- actionName: string;
58
- /**
59
- * Allowed system path prefixes.
60
- * Default: ["meta", "input"] (system is forbidden per §20.3).
61
- */
62
- allowSysPaths?: {
63
- prefixes: ("meta" | "input")[];
64
- };
65
- /**
66
- * Function table version.
67
- */
68
- fnTableVersion?: string;
69
- }
70
- /**
71
- * Patch compilation result.
72
- *
73
- * @see SPEC v0.4.0 §19.2
74
- */
75
- export interface CompileMelPatchResult {
76
- /**
77
- * Compiled patch operations.
78
- * These still contain Core IR expressions that need evaluation.
79
- */
80
- ops: RuntimeConditionalPatchOp[];
81
- /**
82
- * Compilation trace.
83
- */
84
- trace: CompileTrace[];
85
- /**
86
- * Warning diagnostics.
87
- */
88
- warnings: Diagnostic[];
89
- /**
90
- * Error diagnostics.
91
- */
92
- errors: Diagnostic[];
93
- }
94
- /**
95
- * Compile MEL text to DomainSchema.
96
- *
97
- * Takes a complete MEL domain definition and produces a DomainSchema
98
- * suitable for use with core.compute().
99
- *
100
- * @param melText - MEL domain source text
101
- * @param options - Compilation options
102
- * @returns Compilation result with schema or errors
103
- *
104
- * @see SPEC v0.4.0 §19.1
105
- */
106
- export declare function compileMelDomain(melText: string, options?: CompileMelDomainOptions): CompileMelDomainResult;
107
- /**
108
- * Compile MEL patch text to RuntimeConditionalPatchOp[].
109
- *
110
- * Takes MEL patch statements (set, unset, merge) and produces
111
- * RuntimeConditionalPatchOp[] with Core IR expressions.
112
- *
113
- * The returned ops still contain expressions that need to be evaluated
114
- * by evaluateRuntimePatches() to get concrete values.
115
- *
116
- * Constraints:
117
- * - §20.3: $system.* is forbidden in Translator path
118
- *
119
- * @param melText - MEL patch source text
120
- * @param options - Compilation options
121
- * @returns Compilation result with ops or errors
122
- *
123
- * @see SPEC v0.4.0 §19.2
124
- */
125
- export declare function compileMelPatch(melText: string, options: CompileMelPatchOptions): CompileMelPatchResult;
126
- //# sourceMappingURL=compile-mel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compile-mel.d.ts","sourceRoot":"","sources":["../../src/api/compile-mel.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAQpF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,QAAQ,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAE5B;;OAEG;IACH,KAAK,EAAE,YAAY,EAAE,CAAC;IAEtB;;OAEG;IACH,QAAQ,EAAE,UAAU,EAAE,CAAC;IAEvB;;OAEG;IACH,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,CAAC;IAEd;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE;QAAE,QAAQ,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAA;KAAE,CAAC;IAEnD;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,GAAG,EAAE,yBAAyB,EAAE,CAAC;IAEjC;;OAEG;IACH,KAAK,EAAE,YAAY,EAAE,CAAC;IAEtB;;OAEG;IACH,QAAQ,EAAE,UAAU,EAAE,CAAC;IAEvB;;OAEG;IACH,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,uBAAuB,GAChC,sBAAsB,CAqExB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CAqBvB"}