edict-lang 0.1.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 (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +202 -0
  3. package/dist/ast/nodes.d.ts +248 -0
  4. package/dist/ast/nodes.d.ts.map +1 -0
  5. package/dist/ast/nodes.js +95 -0
  6. package/dist/ast/nodes.js.map +1 -0
  7. package/dist/ast/types.d.ts +78 -0
  8. package/dist/ast/types.d.ts.map +1 -0
  9. package/dist/ast/types.js +7 -0
  10. package/dist/ast/types.js.map +1 -0
  11. package/dist/check.d.ts +19 -0
  12. package/dist/check.d.ts.map +1 -0
  13. package/dist/check.js +49 -0
  14. package/dist/check.js.map +1 -0
  15. package/dist/checker/check.d.ts +7 -0
  16. package/dist/checker/check.d.ts.map +1 -0
  17. package/dist/checker/check.js +548 -0
  18. package/dist/checker/check.js.map +1 -0
  19. package/dist/checker/type-env.d.ts +24 -0
  20. package/dist/checker/type-env.d.ts.map +1 -0
  21. package/dist/checker/type-env.js +67 -0
  22. package/dist/checker/type-env.js.map +1 -0
  23. package/dist/checker/types-equal.d.ts +18 -0
  24. package/dist/checker/types-equal.d.ts.map +1 -0
  25. package/dist/checker/types-equal.js +79 -0
  26. package/dist/checker/types-equal.js.map +1 -0
  27. package/dist/codegen/builtins.d.ts +27 -0
  28. package/dist/codegen/builtins.d.ts.map +1 -0
  29. package/dist/codegen/builtins.js +54 -0
  30. package/dist/codegen/builtins.js.map +1 -0
  31. package/dist/codegen/codegen.d.ts +32 -0
  32. package/dist/codegen/codegen.d.ts.map +1 -0
  33. package/dist/codegen/codegen.js +1192 -0
  34. package/dist/codegen/codegen.js.map +1 -0
  35. package/dist/codegen/runner.d.ts +16 -0
  36. package/dist/codegen/runner.d.ts.map +1 -0
  37. package/dist/codegen/runner.js +82 -0
  38. package/dist/codegen/runner.js.map +1 -0
  39. package/dist/codegen/string-table.d.ts +35 -0
  40. package/dist/codegen/string-table.d.ts.map +1 -0
  41. package/dist/codegen/string-table.js +62 -0
  42. package/dist/codegen/string-table.js.map +1 -0
  43. package/dist/compile.d.ts +18 -0
  44. package/dist/compile.d.ts.map +1 -0
  45. package/dist/compile.js +40 -0
  46. package/dist/compile.js.map +1 -0
  47. package/dist/contracts/translate.d.ts +39 -0
  48. package/dist/contracts/translate.d.ts.map +1 -0
  49. package/dist/contracts/translate.js +372 -0
  50. package/dist/contracts/translate.js.map +1 -0
  51. package/dist/contracts/verify.d.ts +8 -0
  52. package/dist/contracts/verify.d.ts.map +1 -0
  53. package/dist/contracts/verify.js +400 -0
  54. package/dist/contracts/verify.js.map +1 -0
  55. package/dist/contracts/z3-context.d.ts +14 -0
  56. package/dist/contracts/z3-context.d.ts.map +1 -0
  57. package/dist/contracts/z3-context.js +24 -0
  58. package/dist/contracts/z3-context.js.map +1 -0
  59. package/dist/effects/call-graph.d.ts +21 -0
  60. package/dist/effects/call-graph.d.ts.map +1 -0
  61. package/dist/effects/call-graph.js +135 -0
  62. package/dist/effects/call-graph.js.map +1 -0
  63. package/dist/effects/effect-check.d.ts +13 -0
  64. package/dist/effects/effect-check.d.ts.map +1 -0
  65. package/dist/effects/effect-check.js +48 -0
  66. package/dist/effects/effect-check.js.map +1 -0
  67. package/dist/errors/structured-errors.d.ts +193 -0
  68. package/dist/errors/structured-errors.d.ts.map +1 -0
  69. package/dist/errors/structured-errors.js +96 -0
  70. package/dist/errors/structured-errors.js.map +1 -0
  71. package/dist/index.d.ts +34 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +37 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/mcp/create-server.d.ts +3 -0
  76. package/dist/mcp/create-server.d.ts.map +1 -0
  77. package/dist/mcp/create-server.js +157 -0
  78. package/dist/mcp/create-server.js.map +1 -0
  79. package/dist/mcp/handlers.d.ts +44 -0
  80. package/dist/mcp/handlers.d.ts.map +1 -0
  81. package/dist/mcp/handlers.js +112 -0
  82. package/dist/mcp/handlers.js.map +1 -0
  83. package/dist/mcp/server.d.ts +3 -0
  84. package/dist/mcp/server.d.ts.map +1 -0
  85. package/dist/mcp/server.js +129 -0
  86. package/dist/mcp/server.js.map +1 -0
  87. package/dist/resolver/levenshtein.d.ts +12 -0
  88. package/dist/resolver/levenshtein.d.ts.map +1 -0
  89. package/dist/resolver/levenshtein.js +54 -0
  90. package/dist/resolver/levenshtein.js.map +1 -0
  91. package/dist/resolver/resolve.d.ts +7 -0
  92. package/dist/resolver/resolve.d.ts.map +1 -0
  93. package/dist/resolver/resolve.js +393 -0
  94. package/dist/resolver/resolve.js.map +1 -0
  95. package/dist/resolver/scope.d.ts +34 -0
  96. package/dist/resolver/scope.d.ts.map +1 -0
  97. package/dist/resolver/scope.js +51 -0
  98. package/dist/resolver/scope.js.map +1 -0
  99. package/dist/validator/id-tracker.d.ts +14 -0
  100. package/dist/validator/id-tracker.d.ts.map +1 -0
  101. package/dist/validator/id-tracker.js +28 -0
  102. package/dist/validator/id-tracker.js.map +1 -0
  103. package/dist/validator/node-validators.d.ts +6 -0
  104. package/dist/validator/node-validators.d.ts.map +1 -0
  105. package/dist/validator/node-validators.js +808 -0
  106. package/dist/validator/node-validators.js.map +1 -0
  107. package/dist/validator/validate.d.ts +17 -0
  108. package/dist/validator/validate.d.ts.map +1 -0
  109. package/dist/validator/validate.js +27 -0
  110. package/dist/validator/validate.js.map +1 -0
  111. package/package.json +75 -0
@@ -0,0 +1,393 @@
1
+ // =============================================================================
2
+ // Name Resolution — resolve(module) → StructuredError[]
3
+ // =============================================================================
4
+ // Walks a validated AST and checks that every name reference resolves.
5
+ // Two passes: (1) collect top-level defs, (2) resolve all expressions/patterns.
6
+ import { undefinedReference } from "../errors/structured-errors.js";
7
+ import { findCandidates } from "./levenshtein.js";
8
+ import { Scope } from "./scope.js";
9
+ import { BUILTIN_FUNCTIONS } from "../codegen/builtins.js";
10
+ /**
11
+ * Entry point: resolve all names in a validated Edict module.
12
+ */
13
+ export function resolve(module) {
14
+ const errors = [];
15
+ // Built-in functions live in a parent scope so user imports/defs shadow them
16
+ const builtinScope = new Scope();
17
+ for (const [name, builtin] of BUILTIN_FUNCTIONS) {
18
+ builtinScope.define(name, {
19
+ name,
20
+ kind: "function",
21
+ nodeId: null,
22
+ type: builtin.type,
23
+ });
24
+ }
25
+ const moduleScope = new Scope(builtinScope);
26
+ // =========================================================================
27
+ // Pass 1 — Register top-level definitions + imports
28
+ // =========================================================================
29
+ // Register imports (trusted/opaque — typed as unknown)
30
+ for (const imp of module.imports) {
31
+ for (const name of imp.names) {
32
+ const err = moduleScope.define(name, {
33
+ name,
34
+ kind: "import",
35
+ nodeId: imp.id,
36
+ });
37
+ if (err)
38
+ errors.push(err);
39
+ }
40
+ }
41
+ // Register definitions
42
+ for (const def of module.definitions) {
43
+ const info = defToSymbolInfo(def);
44
+ const err = moduleScope.define(def.name, info);
45
+ if (err)
46
+ errors.push(err);
47
+ }
48
+ // =========================================================================
49
+ // Pass 2 — Resolve expressions and patterns
50
+ // =========================================================================
51
+ for (const def of module.definitions) {
52
+ switch (def.kind) {
53
+ case "fn":
54
+ resolveFunctionDef(def, moduleScope, errors);
55
+ break;
56
+ case "const":
57
+ resolveConstDef(def, moduleScope, errors);
58
+ break;
59
+ case "record":
60
+ resolveRecordDef(def, moduleScope, errors);
61
+ break;
62
+ case "type":
63
+ resolveTypeExpr(def.definition, moduleScope, errors);
64
+ break;
65
+ case "enum":
66
+ resolveEnumDef(def, moduleScope, errors);
67
+ break;
68
+ }
69
+ }
70
+ return errors;
71
+ }
72
+ // =============================================================================
73
+ // Helpers
74
+ // =============================================================================
75
+ function defToSymbolInfo(def) {
76
+ switch (def.kind) {
77
+ case "fn":
78
+ return {
79
+ name: def.name,
80
+ kind: "function",
81
+ nodeId: def.id,
82
+ type: {
83
+ kind: "fn_type",
84
+ params: def.params.map((p) => p.type),
85
+ effects: [...def.effects],
86
+ returnType: def.returnType,
87
+ },
88
+ definition: def,
89
+ };
90
+ case "type":
91
+ return { name: def.name, kind: "type", nodeId: def.id, definition: def };
92
+ case "record":
93
+ return { name: def.name, kind: "record", nodeId: def.id, definition: def };
94
+ case "enum":
95
+ return { name: def.name, kind: "enum", nodeId: def.id, definition: def };
96
+ case "const":
97
+ return { name: def.name, kind: "const", nodeId: def.id, type: def.type, definition: def };
98
+ }
99
+ }
100
+ function resolveFunctionDef(fn, parentScope, errors) {
101
+ // Create body scope with params
102
+ const bodyScope = parentScope.child();
103
+ for (const param of fn.params) {
104
+ const err = bodyScope.define(param.name, {
105
+ name: param.name,
106
+ kind: "param",
107
+ nodeId: param.id,
108
+ type: param.type,
109
+ });
110
+ if (err)
111
+ errors.push(err);
112
+ }
113
+ // Resolve param types
114
+ for (const param of fn.params) {
115
+ resolveTypeExpr(param.type, parentScope, errors);
116
+ }
117
+ // Resolve return type
118
+ resolveTypeExpr(fn.returnType, parentScope, errors);
119
+ // Resolve contracts
120
+ for (const contract of fn.contracts) {
121
+ resolveContract(contract, fn, bodyScope, errors);
122
+ }
123
+ // Resolve body expressions sequentially (let bindings accumulate in scope)
124
+ resolveExpressionList(fn.body, bodyScope, errors);
125
+ }
126
+ function resolveContract(contract, fn, bodyScope, errors) {
127
+ if (contract.kind === "post") {
128
+ // Post-contracts have implicit `result` binding typed as returnType
129
+ const postScope = bodyScope.child();
130
+ postScope.define("result", {
131
+ name: "result",
132
+ kind: "result",
133
+ nodeId: null,
134
+ type: fn.returnType,
135
+ });
136
+ resolveExpression(contract.condition, postScope, errors);
137
+ }
138
+ else {
139
+ // Pre-contracts share the body scope (params visible)
140
+ resolveExpression(contract.condition, bodyScope, errors);
141
+ }
142
+ }
143
+ function resolveConstDef(def, scope, errors) {
144
+ resolveTypeExpr(def.type, scope, errors);
145
+ resolveExpression(def.value, scope, errors);
146
+ }
147
+ function resolveRecordDef(def, scope, errors) {
148
+ for (const field of def.fields) {
149
+ resolveRecordField(field, scope, errors);
150
+ }
151
+ }
152
+ function resolveRecordField(field, scope, errors) {
153
+ resolveTypeExpr(field.type, scope, errors);
154
+ if (field.defaultValue) {
155
+ resolveExpression(field.defaultValue, scope, errors);
156
+ }
157
+ }
158
+ function resolveEnumDef(def, scope, errors) {
159
+ for (const variant of def.variants) {
160
+ for (const field of variant.fields) {
161
+ resolveRecordField(field, scope, errors);
162
+ }
163
+ }
164
+ }
165
+ /**
166
+ * Resolve named types. Only `named` and `refined` types reference names.
167
+ */
168
+ function resolveTypeExpr(type, scope, errors) {
169
+ switch (type.kind) {
170
+ case "named": {
171
+ const sym = scope.lookup(type.name);
172
+ if (!sym) {
173
+ errors.push(undefinedReference(null, type.name, findCandidates(type.name, scope.allNames())));
174
+ }
175
+ break;
176
+ }
177
+ case "refined":
178
+ resolveRefinedType(type, scope, errors);
179
+ break;
180
+ case "array":
181
+ resolveTypeExpr(type.element, scope, errors);
182
+ break;
183
+ case "option":
184
+ resolveTypeExpr(type.inner, scope, errors);
185
+ break;
186
+ case "result":
187
+ resolveTypeExpr(type.ok, scope, errors);
188
+ resolveTypeExpr(type.err, scope, errors);
189
+ break;
190
+ case "fn_type":
191
+ for (const p of type.params)
192
+ resolveTypeExpr(p, scope, errors);
193
+ resolveTypeExpr(type.returnType, scope, errors);
194
+ break;
195
+ case "tuple":
196
+ for (const el of type.elements)
197
+ resolveTypeExpr(el, scope, errors);
198
+ break;
199
+ case "basic":
200
+ case "unit_type":
201
+ // No names to resolve
202
+ break;
203
+ }
204
+ }
205
+ function resolveRefinedType(type, scope, errors) {
206
+ resolveTypeExpr(type.base, scope, errors);
207
+ // The variable introduces a new binding for the predicate expression
208
+ const predicateScope = scope.child();
209
+ predicateScope.define(type.variable, {
210
+ name: type.variable,
211
+ kind: "param",
212
+ nodeId: type.id,
213
+ type: type.base,
214
+ });
215
+ resolveExpression(type.predicate, predicateScope, errors);
216
+ }
217
+ /**
218
+ * Resolve a list of expressions sequentially.
219
+ * Let bindings accumulate into the scope for subsequent expressions.
220
+ */
221
+ function resolveExpressionList(exprs, scope, errors) {
222
+ // We use a mutable current scope so let-bindings are visible to later siblings
223
+ let currentScope = scope;
224
+ for (const expr of exprs) {
225
+ resolveExpression(expr, currentScope, errors);
226
+ if (expr.kind === "let") {
227
+ // Let binding adds to a child scope for subsequent siblings
228
+ currentScope = currentScope.child();
229
+ const err = currentScope.define(expr.name, {
230
+ name: expr.name,
231
+ kind: "let",
232
+ nodeId: expr.id,
233
+ type: expr.type,
234
+ });
235
+ if (err)
236
+ errors.push(err);
237
+ }
238
+ }
239
+ }
240
+ function resolveExpression(expr, scope, errors) {
241
+ switch (expr.kind) {
242
+ case "literal":
243
+ // Optionally annotated — resolve type if present
244
+ if (expr.type)
245
+ resolveTypeExpr(expr.type, scope, errors);
246
+ break;
247
+ case "ident": {
248
+ const sym = scope.lookup(expr.name);
249
+ if (!sym) {
250
+ errors.push(undefinedReference(expr.id, expr.name, findCandidates(expr.name, scope.allNames())));
251
+ }
252
+ break;
253
+ }
254
+ case "binop":
255
+ resolveExpression(expr.left, scope, errors);
256
+ resolveExpression(expr.right, scope, errors);
257
+ break;
258
+ case "unop":
259
+ resolveExpression(expr.operand, scope, errors);
260
+ break;
261
+ case "call":
262
+ resolveExpression(expr.fn, scope, errors);
263
+ for (const arg of expr.args)
264
+ resolveExpression(arg, scope, errors);
265
+ break;
266
+ case "if":
267
+ resolveExpression(expr.condition, scope, errors);
268
+ resolveExpressionList(expr.then, scope, errors);
269
+ if (expr.else)
270
+ resolveExpressionList(expr.else, scope, errors);
271
+ break;
272
+ case "let":
273
+ // Type annotation
274
+ if (expr.type)
275
+ resolveTypeExpr(expr.type, scope, errors);
276
+ // Value (the name itself is NOT in scope for its own value)
277
+ resolveExpression(expr.value, scope, errors);
278
+ // Binding is registered by resolveExpressionList
279
+ break;
280
+ case "match":
281
+ resolveExpression(expr.target, scope, errors);
282
+ for (const arm of expr.arms) {
283
+ const armScope = scope.child();
284
+ resolvePattern(arm.pattern, armScope, scope, errors);
285
+ resolveExpressionList(arm.body, armScope, errors);
286
+ }
287
+ break;
288
+ case "array":
289
+ for (const el of expr.elements)
290
+ resolveExpression(el, scope, errors);
291
+ break;
292
+ case "tuple_expr":
293
+ for (const el of expr.elements)
294
+ resolveExpression(el, scope, errors);
295
+ break;
296
+ case "record_expr":
297
+ // We don't error on unknown records here — that's the type checker's job.
298
+ // We DO resolve the field value expressions.
299
+ for (const f of expr.fields)
300
+ resolveExpression(f.value, scope, errors);
301
+ break;
302
+ case "enum_constructor":
303
+ // Same as record_expr — type checker validates enum/variant existence
304
+ for (const f of expr.fields)
305
+ resolveExpression(f.value, scope, errors);
306
+ break;
307
+ case "access":
308
+ resolveExpression(expr.target, scope, errors);
309
+ break;
310
+ case "lambda": {
311
+ const lamScope = scope.child();
312
+ for (const param of expr.params) {
313
+ resolveTypeExpr(param.type, scope, errors);
314
+ const err = lamScope.define(param.name, {
315
+ name: param.name,
316
+ kind: "param",
317
+ nodeId: param.id,
318
+ type: param.type,
319
+ });
320
+ if (err)
321
+ errors.push(err);
322
+ }
323
+ resolveExpressionList(expr.body, lamScope, errors);
324
+ break;
325
+ }
326
+ case "block":
327
+ resolveExpressionList(expr.body, scope.child(), errors);
328
+ break;
329
+ }
330
+ }
331
+ function resolvePattern(pattern, armScope, moduleScope, errors) {
332
+ switch (pattern.kind) {
333
+ case "binding": {
334
+ const err = armScope.define(pattern.name, {
335
+ name: pattern.name,
336
+ kind: "let",
337
+ nodeId: null,
338
+ });
339
+ if (err)
340
+ errors.push(err);
341
+ break;
342
+ }
343
+ case "constructor": {
344
+ // Verify the constructor name exists as an enum variant in module scope
345
+ // We check ALL enum defs to find a matching variant
346
+ const found = findVariantInScope(pattern.name, moduleScope);
347
+ if (!found) {
348
+ errors.push(undefinedReference(null, pattern.name, findCandidates(pattern.name, collectAllVariantNames(moduleScope))));
349
+ }
350
+ // Recursively resolve sub-patterns
351
+ for (const sub of pattern.fields) {
352
+ resolvePattern(sub, armScope, moduleScope, errors);
353
+ }
354
+ break;
355
+ }
356
+ case "literal_pattern":
357
+ case "wildcard":
358
+ // No names to resolve
359
+ break;
360
+ }
361
+ }
362
+ /**
363
+ * Search all enum definitions in scope for a variant with the given name.
364
+ */
365
+ function findVariantInScope(variantName, scope) {
366
+ // Walk all names and check if any enum has this variant
367
+ for (const name of scope.allNames()) {
368
+ const sym = scope.lookup(name);
369
+ if (sym?.definition?.kind === "enum") {
370
+ for (const v of sym.definition.variants) {
371
+ if (v.name === variantName)
372
+ return true;
373
+ }
374
+ }
375
+ }
376
+ return false;
377
+ }
378
+ /**
379
+ * Collect all variant names from all enums in scope.
380
+ */
381
+ function collectAllVariantNames(scope) {
382
+ const names = [];
383
+ for (const name of scope.allNames()) {
384
+ const sym = scope.lookup(name);
385
+ if (sym?.definition?.kind === "enum") {
386
+ for (const v of sym.definition.variants) {
387
+ names.push(v.name);
388
+ }
389
+ }
390
+ }
391
+ return names;
392
+ }
393
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/resolver/resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { TypeExpr } from "../ast/types.js";
2
+ import type { Definition } from "../ast/nodes.js";
3
+ import { type DuplicateDefinitionError } from "../errors/structured-errors.js";
4
+ export type SymbolKind = "function" | "param" | "let" | "const" | "type" | "record" | "enum" | "import" | "result";
5
+ export interface SymbolInfo {
6
+ name: string;
7
+ kind: SymbolKind;
8
+ nodeId: string | null;
9
+ type?: TypeExpr;
10
+ definition?: Definition;
11
+ }
12
+ export declare class Scope {
13
+ private symbols;
14
+ private parent;
15
+ constructor(parent?: Scope | null);
16
+ /**
17
+ * Define a symbol in this scope.
18
+ * Returns a DuplicateDefinitionError if the name already exists in THIS scope.
19
+ */
20
+ define(name: string, info: SymbolInfo): DuplicateDefinitionError | null;
21
+ /**
22
+ * Look up a symbol by walking the scope chain (current → parent → …).
23
+ */
24
+ lookup(name: string): SymbolInfo | undefined;
25
+ /**
26
+ * Collect all names visible from this scope (for Levenshtein suggestions).
27
+ */
28
+ allNames(): string[];
29
+ /**
30
+ * Create a child scope that inherits from this one.
31
+ */
32
+ child(): Scope;
33
+ }
34
+ //# sourceMappingURL=scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/resolver/scope.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAuB,KAAK,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAEpG,MAAM,MAAM,UAAU,GAChB,UAAU,GACV,OAAO,GACP,KAAK,GACL,OAAO,GACP,MAAM,GACN,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,QAAQ,CAAC;AAEf,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;CAC3B;AAED,qBAAa,KAAK;IACd,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,GAAE,KAAK,GAAG,IAAW;IAIvC;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,wBAAwB,GAAG,IAAI;IASvE;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAM5C;;OAEG;IACH,QAAQ,IAAI,MAAM,EAAE;IAUpB;;OAEG;IACH,KAAK,IAAI,KAAK;CAGjB"}
@@ -0,0 +1,51 @@
1
+ // =============================================================================
2
+ // Scope — Nested symbol table for name resolution
3
+ // =============================================================================
4
+ import { duplicateDefinition } from "../errors/structured-errors.js";
5
+ export class Scope {
6
+ symbols = new Map();
7
+ parent;
8
+ constructor(parent = null) {
9
+ this.parent = parent;
10
+ }
11
+ /**
12
+ * Define a symbol in this scope.
13
+ * Returns a DuplicateDefinitionError if the name already exists in THIS scope.
14
+ */
15
+ define(name, info) {
16
+ const existing = this.symbols.get(name);
17
+ if (existing) {
18
+ return duplicateDefinition(info.nodeId, name, existing.nodeId);
19
+ }
20
+ this.symbols.set(name, info);
21
+ return null;
22
+ }
23
+ /**
24
+ * Look up a symbol by walking the scope chain (current → parent → …).
25
+ */
26
+ lookup(name) {
27
+ const local = this.symbols.get(name);
28
+ if (local)
29
+ return local;
30
+ return this.parent?.lookup(name);
31
+ }
32
+ /**
33
+ * Collect all names visible from this scope (for Levenshtein suggestions).
34
+ */
35
+ allNames() {
36
+ const names = new Set(this.symbols.keys());
37
+ if (this.parent) {
38
+ for (const n of this.parent.allNames()) {
39
+ names.add(n);
40
+ }
41
+ }
42
+ return [...names];
43
+ }
44
+ /**
45
+ * Create a child scope that inherits from this one.
46
+ */
47
+ child() {
48
+ return new Scope(this);
49
+ }
50
+ }
51
+ //# sourceMappingURL=scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/resolver/scope.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,kDAAkD;AAClD,gFAAgF;AAIhF,OAAO,EAAE,mBAAmB,EAAiC,MAAM,gCAAgC,CAAC;AAqBpG,MAAM,OAAO,KAAK;IACN,OAAO,GAA4B,IAAI,GAAG,EAAE,CAAC;IAC7C,MAAM,CAAe;IAE7B,YAAY,SAAuB,IAAI;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,IAAY,EAAE,IAAgB;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,QAAQ,EAAE,CAAC;YACX,OAAO,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAY;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QACxB,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,QAAQ;QACJ,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACrC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK;QACD,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;CACJ"}
@@ -0,0 +1,14 @@
1
+ import type { StructuredError } from "../errors/structured-errors.js";
2
+ export declare class IdTracker {
3
+ private seen;
4
+ private errors;
5
+ /**
6
+ * Register an ID at a given AST path. If duplicate, records an error.
7
+ */
8
+ track(id: string, path: string): void;
9
+ /**
10
+ * Return all duplicate ID errors found.
11
+ */
12
+ getErrors(): StructuredError[];
13
+ }
14
+ //# sourceMappingURL=id-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-tracker.d.ts","sourceRoot":"","sources":["../../src/validator/id-tracker.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGtE,qBAAa,SAAS;IAClB,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,MAAM,CAAyB;IAEvC;;OAEG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IASrC;;OAEG;IACH,SAAS,IAAI,eAAe,EAAE;CAGjC"}
@@ -0,0 +1,28 @@
1
+ // =============================================================================
2
+ // ID Tracker — Duplicate ID Detection
3
+ // =============================================================================
4
+ // Walks the AST and collects all `id` fields, detecting duplicates.
5
+ import { duplicateId } from "../errors/structured-errors.js";
6
+ export class IdTracker {
7
+ seen = new Map(); // id -> first path
8
+ errors = [];
9
+ /**
10
+ * Register an ID at a given AST path. If duplicate, records an error.
11
+ */
12
+ track(id, path) {
13
+ const existing = this.seen.get(id);
14
+ if (existing !== undefined) {
15
+ this.errors.push(duplicateId(id, existing, path));
16
+ }
17
+ else {
18
+ this.seen.set(id, path);
19
+ }
20
+ }
21
+ /**
22
+ * Return all duplicate ID errors found.
23
+ */
24
+ getErrors() {
25
+ return this.errors;
26
+ }
27
+ }
28
+ //# sourceMappingURL=id-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-tracker.js","sourceRoot":"","sources":["../../src/validator/id-tracker.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,sCAAsC;AACtC,gFAAgF;AAChF,oEAAoE;AAGpE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,MAAM,OAAO,SAAS;IACV,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,mBAAmB;IACrD,MAAM,GAAsB,EAAE,CAAC;IAEvC;;OAEG;IACH,KAAK,CAAC,EAAU,EAAE,IAAY;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAED;;OAEG;IACH,SAAS;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CACJ"}
@@ -0,0 +1,6 @@
1
+ import type { StructuredError } from "../errors/structured-errors.js";
2
+ import type { IdTracker } from "./id-tracker.js";
3
+ export declare function validateModule(node: unknown, path: string, errors: StructuredError[], idTracker: IdTracker): void;
4
+ export declare function validateTypeExpr(node: unknown, path: string, errors: StructuredError[], idTracker: IdTracker): void;
5
+ export declare function validateExpression(node: unknown, path: string, errors: StructuredError[], idTracker: IdTracker): void;
6
+ //# sourceMappingURL=node-validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-validators.d.ts","sourceRoot":"","sources":["../../src/validator/node-validators.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAUtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AA0JjD,wBAAgB,cAAc,CAC1B,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EAAE,EACzB,SAAS,EAAE,SAAS,GACrB,IAAI,CAuCN;AAoWD,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EAAE,EACzB,SAAS,EAAE,SAAS,GACrB,IAAI,CA2CN;AAsKD,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EAAE,EACzB,SAAS,EAAE,SAAS,GACrB,IAAI,CA6DN"}