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,44 @@
1
+ import type { StructuredError } from "../errors/structured-errors.js";
2
+ export interface SchemaResult {
3
+ schema: unknown;
4
+ }
5
+ export interface ExamplesResult {
6
+ count: number;
7
+ examples: {
8
+ name: string;
9
+ ast: unknown;
10
+ }[];
11
+ }
12
+ export interface ValidateResult {
13
+ ok: boolean;
14
+ errors?: StructuredError[];
15
+ }
16
+ export interface CheckResult {
17
+ ok: boolean;
18
+ errors?: StructuredError[];
19
+ }
20
+ export interface CompileResult {
21
+ ok: boolean;
22
+ wasm?: string;
23
+ errors?: StructuredError[] | string[];
24
+ }
25
+ export interface RunResult {
26
+ output: string;
27
+ exitCode: number;
28
+ returnValue?: number;
29
+ }
30
+ export interface VersionResult {
31
+ version: string;
32
+ schemaVersion: string;
33
+ builtins: string[];
34
+ features: Record<string, boolean>;
35
+ limits: Record<string, number>;
36
+ }
37
+ export declare function handleSchema(): SchemaResult;
38
+ export declare function handleExamples(): ExamplesResult;
39
+ export declare function handleValidate(ast: unknown): ValidateResult;
40
+ export declare function handleCheck(ast: unknown): Promise<CheckResult>;
41
+ export declare function handleCompile(ast: unknown): Promise<CompileResult>;
42
+ export declare function handleRun(wasmBase64: string): Promise<RunResult>;
43
+ export declare function handleVersion(): VersionResult;
44
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/mcp/handlers.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AA0CtE,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAMD,wBAAgB,YAAY,IAAI,YAAY,CAG3C;AAED,wBAAgB,cAAc,IAAI,cAAc,CAG/C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAM3D;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAMpE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAexE;AAED,wBAAsB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAQtE;AAED,wBAAgB,aAAa,IAAI,aAAa,CAmB7C"}
@@ -0,0 +1,112 @@
1
+ // =============================================================================
2
+ // MCP Tool Handlers — Pure functions (no MCP SDK dependency)
3
+ // =============================================================================
4
+ // Each handler takes validated input and returns a structured result.
5
+ // Extracted from the server for testability.
6
+ import { readFileSync, readdirSync } from "node:fs";
7
+ import { resolve, dirname } from "node:path";
8
+ import { fileURLToPath } from "node:url";
9
+ import { validate } from "../validator/validate.js";
10
+ import { check } from "../check.js";
11
+ import { compile } from "../codegen/codegen.js";
12
+ import { run } from "../codegen/runner.js";
13
+ import { BUILTIN_FUNCTIONS } from "../codegen/builtins.js";
14
+ // =============================================================================
15
+ // Path resolution (relative to this file, works regardless of cwd)
16
+ // =============================================================================
17
+ const __dirname = dirname(fileURLToPath(import.meta.url));
18
+ const projectRoot = resolve(__dirname, "..", "..");
19
+ const schemaPath = resolve(projectRoot, "schema", "edict.schema.json");
20
+ const examplesDir = resolve(projectRoot, "examples");
21
+ // =============================================================================
22
+ // Cached assets (loaded once at startup)
23
+ // =============================================================================
24
+ let cachedSchema = null;
25
+ let cachedExamples = null;
26
+ function loadSchema() {
27
+ if (!cachedSchema) {
28
+ cachedSchema = readFileSync(schemaPath, "utf-8");
29
+ }
30
+ return cachedSchema;
31
+ }
32
+ function loadExamples() {
33
+ if (!cachedExamples) {
34
+ const files = readdirSync(examplesDir)
35
+ .filter((f) => f.endsWith(".edict.json"))
36
+ .sort();
37
+ cachedExamples = files.map((f) => ({
38
+ name: f.replace(".edict.json", ""),
39
+ ast: JSON.parse(readFileSync(resolve(examplesDir, f), "utf-8")),
40
+ }));
41
+ }
42
+ return cachedExamples;
43
+ }
44
+ // =============================================================================
45
+ // Handlers
46
+ // =============================================================================
47
+ export function handleSchema() {
48
+ const raw = loadSchema();
49
+ return { schema: JSON.parse(raw) };
50
+ }
51
+ export function handleExamples() {
52
+ const examples = loadExamples();
53
+ return { count: examples.length, examples };
54
+ }
55
+ export function handleValidate(ast) {
56
+ const result = validate(ast);
57
+ if (result.ok) {
58
+ return { ok: true };
59
+ }
60
+ return { ok: false, errors: result.errors };
61
+ }
62
+ export async function handleCheck(ast) {
63
+ const result = await check(ast);
64
+ if (result.ok) {
65
+ return { ok: true };
66
+ }
67
+ return { ok: false, errors: result.errors };
68
+ }
69
+ export async function handleCompile(ast) {
70
+ // Full pipeline: check first, then compile
71
+ const checkResult = await check(ast);
72
+ if (!checkResult.ok || !checkResult.module) {
73
+ return { ok: false, errors: checkResult.errors };
74
+ }
75
+ const compileResult = compile(checkResult.module);
76
+ if (!compileResult.ok) {
77
+ return { ok: false, errors: compileResult.errors };
78
+ }
79
+ // Encode WASM as base64
80
+ const base64 = Buffer.from(compileResult.wasm).toString("base64");
81
+ return { ok: true, wasm: base64 };
82
+ }
83
+ export async function handleRun(wasmBase64) {
84
+ const wasmBytes = new Uint8Array(Buffer.from(wasmBase64, "base64"));
85
+ const result = await run(wasmBytes);
86
+ return {
87
+ output: result.output,
88
+ exitCode: result.exitCode,
89
+ returnValue: result.returnValue,
90
+ };
91
+ }
92
+ export function handleVersion() {
93
+ // Note: We could read the version from package.json dynamically,
94
+ // but for the MCP server it's safer to hardcode the API version it thinks it serves.
95
+ return {
96
+ version: "0.1.0",
97
+ schemaVersion: "1.0",
98
+ builtins: Array.from(BUILTIN_FUNCTIONS.keys()),
99
+ features: {
100
+ contracts: true,
101
+ effects: true,
102
+ unitTypes: false,
103
+ multiModule: false,
104
+ compactAst: false,
105
+ },
106
+ limits: {
107
+ z3TimeoutMs: 5000,
108
+ maxModules: 1,
109
+ },
110
+ };
111
+ }
112
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/mcp/handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":""}
@@ -0,0 +1,129 @@
1
+ #!/usr/bin/env node
2
+ // =============================================================================
3
+ // Edict MCP Server — Agent interface to the Edict compiler pipeline
4
+ // =============================================================================
5
+ // Usage: tsx src/mcp/server.ts (or: npm run mcp)
6
+ // Transport: stdio (standard for local MCP servers)
7
+ import { createEdictServer } from "./create-server.js";
8
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
9
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
10
+ import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js";
11
+ import express from "express";
12
+ import crypto from "node:crypto";
13
+ // =============================================================================
14
+ // Start
15
+ // =============================================================================
16
+ async function main() {
17
+ const args = process.argv.slice(2);
18
+ const useHttp = args.includes("--http") || process.env.EDICT_TRANSPORT === "http";
19
+ // Default to port 3000 unless specified or provided in EDICT_PORT
20
+ let port = 3000;
21
+ if (process.env.EDICT_PORT)
22
+ port = parseInt(process.env.EDICT_PORT, 10);
23
+ const portArgIndex = args.indexOf("--port");
24
+ if (portArgIndex !== -1 && portArgIndex + 1 < args.length) {
25
+ port = parseInt(args[portArgIndex + 1], 10);
26
+ }
27
+ if (useHttp) {
28
+ const app = createMcpExpressApp();
29
+ // Active transports keyed by session ID
30
+ const transports = {};
31
+ // Need body parser for Express to handle JSON
32
+ app.use(express.json({ limit: "50mb" }));
33
+ app.post("/mcp", async (req, res) => {
34
+ console.log("POST /mcp body:", req.body, "headers:", req.headers);
35
+ try {
36
+ let transport;
37
+ const sessionId = req.headers["mcp-session-id"];
38
+ if (sessionId && transports[sessionId]) {
39
+ // Reusing existing transport
40
+ transport = transports[sessionId];
41
+ }
42
+ else if (req.body && req.body.method === "initialize") {
43
+ // New session needed
44
+ transport = new StreamableHTTPServerTransport({
45
+ sessionIdGenerator: () => crypto.randomUUID(),
46
+ onsessioninitialized: (sid) => {
47
+ transports[sid] = transport;
48
+ }
49
+ });
50
+ transport.onclose = () => {
51
+ const sid = transport.sessionId;
52
+ if (sid && transports[sid]) {
53
+ delete transports[sid];
54
+ }
55
+ };
56
+ const server = createEdictServer();
57
+ await server.connect(transport);
58
+ }
59
+ else {
60
+ res.status(400).json({
61
+ jsonrpc: "2.0",
62
+ error: { code: -32000, message: "No valid session ID provided" },
63
+ id: null
64
+ });
65
+ return;
66
+ }
67
+ await transport.handleRequest(req, res, req.body);
68
+ }
69
+ catch (err) {
70
+ console.error("Error handling POST /mcp:", err);
71
+ if (!res.headersSent)
72
+ res.status(500).end();
73
+ }
74
+ });
75
+ // GET /mcp - handles SSE streaming for responses
76
+ app.get("/mcp", async (req, res) => {
77
+ const sessionId = req.headers["mcp-session-id"];
78
+ if (!sessionId || !transports[sessionId]) {
79
+ res.status(400).send("Invalid or missing session ID");
80
+ return;
81
+ }
82
+ try {
83
+ await transports[sessionId].handleRequest(req, res);
84
+ }
85
+ catch (err) {
86
+ console.error("Error handling GET /mcp:", err);
87
+ if (!res.headersSent)
88
+ res.status(500).end();
89
+ }
90
+ });
91
+ // DELETE /mcp - handles closing a session
92
+ app.delete("/mcp", async (req, res) => {
93
+ const sessionId = req.headers["mcp-session-id"];
94
+ if (!sessionId || !transports[sessionId]) {
95
+ res.status(400).send("Invalid or missing session ID");
96
+ return;
97
+ }
98
+ try {
99
+ await transports[sessionId].handleRequest(req, res);
100
+ }
101
+ catch (err) {
102
+ console.error("Error handling DELETE /mcp:", err);
103
+ if (!res.headersSent)
104
+ res.status(500).end();
105
+ }
106
+ });
107
+ const serverInstance = app.listen(port, () => {
108
+ console.log(`Edict MCP HTTP server listening on port ${port}`);
109
+ });
110
+ // Graceful shutdown
111
+ process.on("SIGINT", () => {
112
+ serverInstance.close(() => process.exit(0));
113
+ });
114
+ process.on("SIGTERM", () => {
115
+ serverInstance.close(() => process.exit(0));
116
+ });
117
+ }
118
+ else {
119
+ // Stdio Transport
120
+ const server = createEdictServer();
121
+ const transport = new StdioServerTransport();
122
+ await server.connect(transport);
123
+ }
124
+ }
125
+ main().catch((e) => {
126
+ console.error("Edict MCP server failed to start:", e);
127
+ process.exit(1);
128
+ });
129
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Compute the Levenshtein edit distance between two strings.
3
+ * Uses the classic dynamic-programming O(m*n) algorithm.
4
+ */
5
+ export declare function levenshteinDistance(a: string, b: string): number;
6
+ /**
7
+ * Find candidate names that are close to the given name.
8
+ * Returns names within maxDistance (default 2), sorted ascending by distance.
9
+ * At most 5 results.
10
+ */
11
+ export declare function findCandidates(name: string, known: string[], maxDistance?: number): string[];
12
+ //# sourceMappingURL=levenshtein.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levenshtein.d.ts","sourceRoot":"","sources":["../../src/resolver/levenshtein.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA6BhE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC1B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,SAAI,GAChB,MAAM,EAAE,CAeV"}
@@ -0,0 +1,54 @@
1
+ // =============================================================================
2
+ // Levenshtein Distance — "Did you mean?" suggestions
3
+ // =============================================================================
4
+ /**
5
+ * Compute the Levenshtein edit distance between two strings.
6
+ * Uses the classic dynamic-programming O(m*n) algorithm.
7
+ */
8
+ export function levenshteinDistance(a, b) {
9
+ const m = a.length;
10
+ const n = b.length;
11
+ // Optimisations for trivial cases
12
+ if (m === 0)
13
+ return n;
14
+ if (n === 0)
15
+ return m;
16
+ if (a === b)
17
+ return 0;
18
+ // Use two rows instead of full matrix to save memory
19
+ let prev = new Array(n + 1);
20
+ let curr = new Array(n + 1);
21
+ for (let j = 0; j <= n; j++)
22
+ prev[j] = j;
23
+ for (let i = 1; i <= m; i++) {
24
+ curr[0] = i;
25
+ for (let j = 1; j <= n; j++) {
26
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
27
+ curr[j] = Math.min(prev[j] + 1, // deletion
28
+ curr[j - 1] + 1, // insertion
29
+ prev[j - 1] + cost);
30
+ }
31
+ [prev, curr] = [curr, prev];
32
+ }
33
+ return prev[n];
34
+ }
35
+ /**
36
+ * Find candidate names that are close to the given name.
37
+ * Returns names within maxDistance (default 2), sorted ascending by distance.
38
+ * At most 5 results.
39
+ */
40
+ export function findCandidates(name, known, maxDistance = 2) {
41
+ const scored = [];
42
+ for (const k of known) {
43
+ // Quick length-based pre-filter: if length difference > maxDistance, skip
44
+ if (Math.abs(k.length - name.length) > maxDistance)
45
+ continue;
46
+ const dist = levenshteinDistance(name, k);
47
+ if (dist <= maxDistance && dist > 0) {
48
+ scored.push({ name: k, dist });
49
+ }
50
+ }
51
+ scored.sort((a, b) => a.dist - b.dist || a.name.localeCompare(b.name));
52
+ return scored.slice(0, 5).map((s) => s.name);
53
+ }
54
+ //# sourceMappingURL=levenshtein.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levenshtein.js","sourceRoot":"","sources":["../../src/resolver/levenshtein.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,qDAAqD;AACrD,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAS,EAAE,CAAS;IACpD,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAEnB,kCAAkC;IAClC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEtB,qDAAqD;IACrD,IAAI,IAAI,GAAG,IAAI,KAAK,CAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,IAAI,IAAI,GAAG,IAAI,KAAK,CAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CACd,IAAI,CAAC,CAAC,CAAE,GAAG,CAAC,EAAQ,WAAW;YAC/B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,EAAI,YAAY;YAChC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,IAAI,CACtB,CAAC;QACN,CAAC;QACD,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,IAAI,CAAC,CAAC,CAAE,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC1B,IAAY,EACZ,KAAe,EACf,WAAW,GAAG,CAAC;IAEf,MAAM,MAAM,GAA0C,EAAE,CAAC;IAEzD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACpB,0EAA0E;QAC1E,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,WAAW;YAAE,SAAS;QAE7D,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { EdictModule } from "../ast/nodes.js";
2
+ import type { StructuredError } from "../errors/structured-errors.js";
3
+ /**
4
+ * Entry point: resolve all names in a validated Edict module.
5
+ */
6
+ export declare function resolve(module: EdictModule): StructuredError[];
7
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/resolver/resolve.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACR,WAAW,EAUd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAOtE;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,EAAE,CA+D9D"}