edict-lang 1.7.0 → 1.8.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 (157) hide show
  1. package/README.md +18 -4
  2. package/dist/ast/nodes.d.ts +56 -3
  3. package/dist/ast/nodes.d.ts.map +1 -1
  4. package/dist/ast/nodes.js +4 -0
  5. package/dist/ast/nodes.js.map +1 -1
  6. package/dist/ast/walk.d.ts +18 -0
  7. package/dist/ast/walk.d.ts.map +1 -0
  8. package/dist/ast/walk.js +89 -0
  9. package/dist/ast/walk.js.map +1 -0
  10. package/dist/builtins/domains/core.d.ts.map +1 -1
  11. package/dist/builtins/domains/core.js +7 -9
  12. package/dist/builtins/domains/core.js.map +1 -1
  13. package/dist/builtins/domains/crypto.d.ts.map +1 -1
  14. package/dist/builtins/domains/crypto.js +9 -10
  15. package/dist/builtins/domains/crypto.js.map +1 -1
  16. package/dist/builtins/domains/datetime.js +5 -5
  17. package/dist/builtins/domains/datetime.js.map +1 -1
  18. package/dist/builtins/domains/http.d.ts.map +1 -1
  19. package/dist/builtins/domains/http.js +28 -15
  20. package/dist/builtins/domains/http.js.map +1 -1
  21. package/dist/builtins/domains/io.d.ts.map +1 -1
  22. package/dist/builtins/domains/io.js +7 -10
  23. package/dist/builtins/domains/io.js.map +1 -1
  24. package/dist/builtins/domains/json.js +5 -5
  25. package/dist/builtins/domains/json.js.map +1 -1
  26. package/dist/builtins/domains/regex.d.ts.map +1 -1
  27. package/dist/builtins/domains/regex.js +11 -14
  28. package/dist/builtins/domains/regex.js.map +1 -1
  29. package/dist/builtins/domains/string.d.ts.map +1 -1
  30. package/dist/builtins/domains/string.js +28 -33
  31. package/dist/builtins/domains/string.js.map +1 -1
  32. package/dist/builtins/host-helpers.d.ts +31 -2
  33. package/dist/builtins/host-helpers.d.ts.map +1 -1
  34. package/dist/builtins/host-helpers.js +60 -6
  35. package/dist/builtins/host-helpers.js.map +1 -1
  36. package/dist/check.d.ts +5 -0
  37. package/dist/check.d.ts.map +1 -1
  38. package/dist/check.js +7 -1
  39. package/dist/check.js.map +1 -1
  40. package/dist/checker/check.d.ts.map +1 -1
  41. package/dist/checker/check.js +47 -4
  42. package/dist/checker/check.js.map +1 -1
  43. package/dist/checker/complexity.d.ts +8 -0
  44. package/dist/checker/complexity.d.ts.map +1 -0
  45. package/dist/checker/complexity.js +87 -0
  46. package/dist/checker/complexity.js.map +1 -0
  47. package/dist/codegen/closures.d.ts.map +1 -1
  48. package/dist/codegen/closures.js +21 -84
  49. package/dist/codegen/closures.js.map +1 -1
  50. package/dist/codegen/codegen.d.ts +2 -2
  51. package/dist/codegen/codegen.d.ts.map +1 -1
  52. package/dist/codegen/codegen.js +69 -58
  53. package/dist/codegen/codegen.js.map +1 -1
  54. package/dist/codegen/collect-strings.js +6 -0
  55. package/dist/codegen/collect-strings.js.map +1 -1
  56. package/dist/codegen/compile-calls.d.ts.map +1 -1
  57. package/dist/codegen/compile-calls.js +11 -195
  58. package/dist/codegen/compile-calls.js.map +1 -1
  59. package/dist/codegen/compile-data.d.ts.map +1 -1
  60. package/dist/codegen/compile-data.js +50 -71
  61. package/dist/codegen/compile-data.js.map +1 -1
  62. package/dist/codegen/compile-expr.d.ts.map +1 -1
  63. package/dist/codegen/compile-expr.js +10 -0
  64. package/dist/codegen/compile-expr.js.map +1 -1
  65. package/dist/codegen/compile-scalars.d.ts.map +1 -1
  66. package/dist/codegen/compile-scalars.js +69 -26
  67. package/dist/codegen/compile-scalars.js.map +1 -1
  68. package/dist/codegen/node-host-adapter.d.ts.map +1 -1
  69. package/dist/codegen/node-host-adapter.js +6 -5
  70. package/dist/codegen/node-host-adapter.js.map +1 -1
  71. package/dist/codegen/runner.d.ts +47 -0
  72. package/dist/codegen/runner.d.ts.map +1 -1
  73. package/dist/codegen/runner.js +131 -3
  74. package/dist/codegen/runner.js.map +1 -1
  75. package/dist/codegen/string-table.d.ts +5 -4
  76. package/dist/codegen/string-table.d.ts.map +1 -1
  77. package/dist/codegen/string-table.js +15 -5
  78. package/dist/codegen/string-table.js.map +1 -1
  79. package/dist/codegen/types.d.ts +12 -5
  80. package/dist/codegen/types.d.ts.map +1 -1
  81. package/dist/codegen/types.js +5 -4
  82. package/dist/codegen/types.js.map +1 -1
  83. package/dist/compact/expand.d.ts.map +1 -1
  84. package/dist/compact/expand.js +5 -0
  85. package/dist/compact/expand.js.map +1 -1
  86. package/dist/compose/compose.d.ts +20 -0
  87. package/dist/compose/compose.d.ts.map +1 -0
  88. package/dist/compose/compose.js +111 -0
  89. package/dist/compose/compose.js.map +1 -0
  90. package/dist/contracts/hash.d.ts +15 -0
  91. package/dist/contracts/hash.d.ts.map +1 -0
  92. package/dist/contracts/hash.js +66 -0
  93. package/dist/contracts/hash.js.map +1 -0
  94. package/dist/contracts/translate.d.ts.map +1 -1
  95. package/dist/contracts/translate.js +37 -0
  96. package/dist/contracts/translate.js.map +1 -1
  97. package/dist/contracts/verify.d.ts +43 -2
  98. package/dist/contracts/verify.d.ts.map +1 -1
  99. package/dist/contracts/verify.js +263 -12
  100. package/dist/contracts/verify.js.map +1 -1
  101. package/dist/effects/call-graph.d.ts.map +1 -1
  102. package/dist/effects/call-graph.js +13 -71
  103. package/dist/effects/call-graph.js.map +1 -1
  104. package/dist/errors/error-catalog.d.ts +1 -1
  105. package/dist/errors/error-catalog.d.ts.map +1 -1
  106. package/dist/errors/error-catalog.js +91 -38
  107. package/dist/errors/error-catalog.js.map +1 -1
  108. package/dist/errors/structured-errors.d.ts +44 -1
  109. package/dist/errors/structured-errors.d.ts.map +1 -1
  110. package/dist/errors/structured-errors.js +24 -0
  111. package/dist/errors/structured-errors.js.map +1 -1
  112. package/dist/index.d.ts +8 -5
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +9 -4
  115. package/dist/index.js.map +1 -1
  116. package/dist/mcp/handlers.d.ts +41 -0
  117. package/dist/mcp/handlers.d.ts.map +1 -1
  118. package/dist/mcp/handlers.js +149 -2
  119. package/dist/mcp/handlers.js.map +1 -1
  120. package/dist/mcp/tools/compose.d.ts +3 -0
  121. package/dist/mcp/tools/compose.d.ts.map +1 -0
  122. package/dist/mcp/tools/compose.js +42 -0
  123. package/dist/mcp/tools/compose.js.map +1 -0
  124. package/dist/mcp/tools/debug.d.ts +3 -0
  125. package/dist/mcp/tools/debug.d.ts.map +1 -0
  126. package/dist/mcp/tools/debug.js +32 -0
  127. package/dist/mcp/tools/debug.js.map +1 -0
  128. package/dist/mcp/tools/export.d.ts +3 -0
  129. package/dist/mcp/tools/export.d.ts.map +1 -0
  130. package/dist/mcp/tools/export.js +37 -0
  131. package/dist/mcp/tools/export.js.map +1 -0
  132. package/dist/mcp/tools/import_skill.d.ts +3 -0
  133. package/dist/mcp/tools/import_skill.d.ts.map +1 -0
  134. package/dist/mcp/tools/import_skill.js +52 -0
  135. package/dist/mcp/tools/import_skill.js.map +1 -0
  136. package/dist/mcp/tools/index.d.ts.map +1 -1
  137. package/dist/mcp/tools/index.js +8 -0
  138. package/dist/mcp/tools/index.js.map +1 -1
  139. package/dist/mcp/uasf.d.ts +52 -0
  140. package/dist/mcp/uasf.d.ts.map +1 -0
  141. package/dist/mcp/uasf.js +6 -0
  142. package/dist/mcp/uasf.js.map +1 -0
  143. package/dist/resolver/resolve.js +16 -0
  144. package/dist/resolver/resolve.js.map +1 -1
  145. package/dist/validator/node-validators.d.ts +1 -5
  146. package/dist/validator/node-validators.d.ts.map +1 -1
  147. package/dist/validator/node-validators.js +6 -872
  148. package/dist/validator/node-validators.js.map +1 -1
  149. package/dist/validator/schema-walker.d.ts +19 -0
  150. package/dist/validator/schema-walker.d.ts.map +1 -0
  151. package/dist/validator/schema-walker.js +495 -0
  152. package/dist/validator/schema-walker.js.map +1 -0
  153. package/dist/validator/validate.d.ts +8 -2
  154. package/dist/validator/validate.d.ts.map +1 -1
  155. package/dist/validator/validate.js +29 -4
  156. package/dist/validator/validate.js.map +1 -1
  157. package/package.json +3 -2
package/README.md CHANGED
@@ -51,17 +51,31 @@ Host capabilities available through adapters: filesystem (sandboxed), HTTP, cryp
51
51
 
52
52
  ```bash
53
53
  npm install
54
- npm test # 1194 tests across 69 files
54
+ npm test # 1493 tests across 88 files
55
55
  npm run mcp # start MCP server (stdio transport)
56
56
  ```
57
57
 
58
+ ## Docker
59
+
60
+ Run the Edict MCP server in a container — no local Node.js required:
61
+
62
+ ```bash
63
+ # stdio transport (default — for local MCP clients)
64
+ docker run -i ghcr.io/sowiedu/edict
65
+
66
+ # HTTP transport (for remote/networked MCP clients)
67
+ docker run -p 3000:3000 -e EDICT_TRANSPORT=http ghcr.io/sowiedu/edict
68
+ ```
69
+
70
+ Supported platforms: `linux/amd64`, `linux/arm64`.
71
+
58
72
  ## MCP Tools
59
73
 
60
74
  | Tool | Description |
61
75
  |---|---|
62
76
  | `edict_schema` | Returns the full AST JSON Schema — the spec for how to write programs |
63
77
  | `edict_version` | Returns compiler version and capability info |
64
- | `edict_examples` | Returns 19 example programs as JSON ASTs |
78
+ | `edict_examples` | Returns 28 example programs as JSON ASTs |
65
79
  | `edict_validate` | Validates AST structure (field names, types, node kinds) |
66
80
  | `edict_check` | Full pipeline: validate → resolve names → type check → effect check → verify contracts |
67
81
  | `edict_compile` | Compiles a checked AST to WASM (returns base64-encoded binary) |
@@ -167,8 +181,8 @@ src/
167
181
  ├── mcp/ # MCP server (tools + resources + prompts)
168
182
  └── errors/ # Structured error types
169
183
 
170
- tests/ # 1194 tests across 69 files
171
- examples/ # 19 example programs (⭐→⭐⭐⭐ difficulty in README)
184
+ tests/ # 1493 tests across 88 files
185
+ examples/ # 28 example programs (⭐→⭐⭐⭐ difficulty in README)
172
186
  schema/ # Auto-generated JSON Schema
173
187
  ```
174
188
 
@@ -15,6 +15,19 @@ export interface EdictModule {
15
15
  name: string;
16
16
  imports: Import[];
17
17
  definitions: Definition[];
18
+ budget?: ComplexityConstraints;
19
+ }
20
+ /**
21
+ * A composable program fragment.
22
+ * Agents can validate fragments independently and compose them into a module.
23
+ */
24
+ export interface EdictFragment {
25
+ kind: "fragment";
26
+ id: string;
27
+ provides: string[];
28
+ requires: string[];
29
+ imports: Import[];
30
+ definitions: Definition[];
18
31
  }
19
32
  /**
20
33
  * Import names from another module.
@@ -38,6 +51,7 @@ export interface FunctionDef {
38
51
  effects: Effect[];
39
52
  returnType?: TypeExpr;
40
53
  contracts: Contract[];
54
+ constraints?: ComplexityConstraints;
41
55
  body: Expression[];
42
56
  }
43
57
  /**
@@ -113,7 +127,16 @@ export interface Contract {
113
127
  id: string;
114
128
  condition: Expression;
115
129
  }
116
- export type Expression = Literal | Identifier | BinaryOp | UnaryOp | Call | IfExpr | LetExpr | MatchExpr | ArrayExpr | TupleExpr | RecordExpr | EnumConstructor | FieldAccess | LambdaExpr | BlockExpr | StringInterp;
130
+ /**
131
+ * Bounds on token complexity and program size to prevent runaway agents.
132
+ */
133
+ export interface ComplexityConstraints {
134
+ kind: "constraints";
135
+ maxAstNodes?: number;
136
+ maxCallDepth?: number;
137
+ maxBranches?: number;
138
+ }
139
+ export type Expression = Literal | Identifier | BinaryOp | UnaryOp | Call | IfExpr | LetExpr | MatchExpr | ArrayExpr | TupleExpr | RecordExpr | EnumConstructor | FieldAccess | LambdaExpr | BlockExpr | StringInterp | ForallExpr | ExistsExpr;
117
140
  export interface Literal {
118
141
  kind: "literal";
119
142
  id: string;
@@ -249,10 +272,40 @@ export interface StringInterp {
249
272
  id: string;
250
273
  parts: Expression[];
251
274
  }
275
+ /**
276
+ * Universal quantifier — contract-only.
277
+ * forall variable in [range.from, range.to): body
278
+ * Translates to Z3 ForAll. Body must evaluate to Bool.
279
+ */
280
+ export interface ForallExpr {
281
+ kind: "forall";
282
+ id: string;
283
+ variable: string;
284
+ range: {
285
+ from: Expression;
286
+ to: Expression;
287
+ };
288
+ body: Expression;
289
+ }
290
+ /**
291
+ * Existential quantifier — contract-only.
292
+ * exists variable in [range.from, range.to): body
293
+ * Translates to Z3 Exists. Body must evaluate to Bool.
294
+ */
295
+ export interface ExistsExpr {
296
+ kind: "exists";
297
+ id: string;
298
+ variable: string;
299
+ range: {
300
+ from: Expression;
301
+ to: Expression;
302
+ };
303
+ body: Expression;
304
+ }
252
305
  export declare const VALID_DEFINITION_KINDS: readonly ["fn", "type", "record", "enum", "const"];
253
- export declare const VALID_EXPRESSION_KINDS: readonly ["literal", "ident", "binop", "unop", "call", "if", "let", "match", "array", "tuple_expr", "record_expr", "enum_constructor", "access", "lambda", "block", "string_interp"];
306
+ export declare const VALID_EXPRESSION_KINDS: readonly ["literal", "ident", "binop", "unop", "call", "if", "let", "match", "array", "tuple_expr", "record_expr", "enum_constructor", "access", "lambda", "block", "string_interp", "forall", "exists"];
254
307
  export declare const VALID_TYPE_KINDS: readonly ["basic", "array", "option", "result", "unit_type", "refined", "fn_type", "named", "tuple"];
255
308
  export declare const VALID_PATTERN_KINDS: readonly ["literal_pattern", "wildcard", "binding", "constructor"];
256
309
  export declare const VALID_BASIC_TYPE_NAMES: readonly ["Int", "Int64", "Float", "String", "Bool"];
257
- export declare const ALL_VALID_KINDS: readonly ["module", "import", "fn", "type", "record", "enum", "const", "param", "field", "variant", "pre", "post", "arm", "field_init", "literal", "ident", "binop", "unop", "call", "if", "let", "match", "array", "tuple_expr", "record_expr", "enum_constructor", "access", "lambda", "block", "string_interp", "basic", "array", "option", "result", "unit_type", "refined", "fn_type", "named", "tuple", "literal_pattern", "wildcard", "binding", "constructor"];
310
+ export declare const ALL_VALID_KINDS: readonly ["module", "fragment", "import", "fn", "type", "record", "enum", "const", "param", "field", "variant", "pre", "post", "arm", "field_init", "constraints", "literal", "ident", "binop", "unop", "call", "if", "let", "match", "array", "tuple_expr", "record_expr", "enum_constructor", "access", "lambda", "block", "string_interp", "forall", "exists", "basic", "array", "option", "result", "unit_type", "refined", "fn_type", "named", "tuple", "literal_pattern", "wildcard", "binding", "constructor"];
258
311
  //# sourceMappingURL=nodes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/ast/nodes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/ast/nodes.ts"],"names":[],"mappings":"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"}
package/dist/ast/nodes.js CHANGED
@@ -54,6 +54,8 @@ export const VALID_EXPRESSION_KINDS = [
54
54
  "lambda",
55
55
  "block",
56
56
  "string_interp",
57
+ "forall",
58
+ "exists",
57
59
  ];
58
60
  export const VALID_TYPE_KINDS = [
59
61
  "basic",
@@ -81,6 +83,7 @@ export const VALID_BASIC_TYPE_NAMES = [
81
83
  ];
82
84
  export const ALL_VALID_KINDS = [
83
85
  "module",
86
+ "fragment",
84
87
  "import",
85
88
  ...VALID_DEFINITION_KINDS,
86
89
  "param",
@@ -90,6 +93,7 @@ export const ALL_VALID_KINDS = [
90
93
  "post",
91
94
  "arm",
92
95
  "field_init",
96
+ "constraints",
93
97
  ...VALID_EXPRESSION_KINDS,
94
98
  ...VALID_TYPE_KINDS,
95
99
  ...VALID_PATTERN_KINDS,
@@ -1 +1 @@
1
- {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/ast/nodes.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,6BAA6B;AAC7B,gFAAgF;AAChF,0EAA0E;AAC1E,uDAAuD;AAiBvD,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC5C,MAAM;IACN,OAAO;IACP,QAAQ;IACR,IAAI;IACJ,OAAO;CACD,CAAC;AA6LX,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACvD,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,SAAS;CACH,CAAC;AAYX,MAAM,CAAC,MAAM,eAAe,GAA6B,CAAC,KAAK,EAAE,GAAG,CAAU,CAAC;AA2I/E,gFAAgF;AAChF,4CAA4C;AAC5C,gFAAgF;AAEhF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,IAAI;IACJ,MAAM;IACN,QAAQ;IACR,MAAM;IACN,OAAO;CACD,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,SAAS;IACT,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,IAAI;IACJ,KAAK;IACL,OAAO;IACP,OAAO;IACP,YAAY;IACZ,aAAa;IACb,kBAAkB;IAClB,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,eAAe;CACT,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,SAAS;IACT,SAAS;IACT,OAAO;IACP,OAAO;CACD,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAC/B,iBAAiB;IACjB,UAAU;IACV,SAAS;IACT,aAAa;CACP,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,KAAK;IACL,OAAO;IACP,OAAO;IACP,QAAQ;IACR,MAAM;CACA,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC3B,QAAQ;IACR,QAAQ;IACR,GAAG,sBAAsB;IACzB,OAAO;IACP,OAAO;IACP,SAAS;IACT,KAAK;IACL,MAAM;IACN,KAAK;IACL,YAAY;IACZ,GAAG,sBAAsB;IACzB,GAAG,gBAAgB;IACnB,GAAG,mBAAmB;CAChB,CAAC"}
1
+ {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/ast/nodes.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,6BAA6B;AAC7B,gFAAgF;AAChF,0EAA0E;AAC1E,uDAAuD;AAiBvD,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC5C,MAAM;IACN,OAAO;IACP,QAAQ;IACR,IAAI;IACJ,OAAO;CACD,CAAC;AAwNX,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACvD,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,SAAS;CACH,CAAC;AAYX,MAAM,CAAC,MAAM,eAAe,GAA6B,CAAC,KAAK,EAAE,GAAG,CAAU,CAAC;AAqK/E,gFAAgF;AAChF,4CAA4C;AAC5C,gFAAgF;AAEhF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,IAAI;IACJ,MAAM;IACN,QAAQ;IACR,MAAM;IACN,OAAO;CACD,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,SAAS;IACT,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,IAAI;IACJ,KAAK;IACL,OAAO;IACP,OAAO;IACP,YAAY;IACZ,aAAa;IACb,kBAAkB;IAClB,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,eAAe;IACf,QAAQ;IACR,QAAQ;CACF,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,SAAS;IACT,SAAS;IACT,OAAO;IACP,OAAO;CACD,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAC/B,iBAAiB;IACjB,UAAU;IACV,SAAS;IACT,aAAa;CACP,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,KAAK;IACL,OAAO;IACP,OAAO;IACP,QAAQ;IACR,MAAM;CACA,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC3B,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,GAAG,sBAAsB;IACzB,OAAO;IACP,OAAO;IACP,SAAS;IACT,KAAK;IACL,MAAM;IACN,KAAK;IACL,YAAY;IACZ,aAAa;IACb,GAAG,sBAAsB;IACzB,GAAG,gBAAgB;IACnB,GAAG,mBAAmB;CAChB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { Expression } from "./nodes.js";
2
+ export interface AstVisitor {
3
+ /**
4
+ * Called before a node's children are visited.
5
+ * Return `false` to prevent the walker from recursing into this node's children.
6
+ */
7
+ enter?: (node: Expression) => void | false;
8
+ /**
9
+ * Called after a node's children have been visited.
10
+ */
11
+ leave?: (node: Expression) => void;
12
+ }
13
+ /**
14
+ * Recursively walks an Edict expression tree.
15
+ * Guarantees traversal over all child expressions.
16
+ */
17
+ export declare function walkExpression(expr: Expression, visitor: AstVisitor | ((node: Expression) => void)): void;
18
+ //# sourceMappingURL=walk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../src/ast/walk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,UAAU;IACvB;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,GAAG,KAAK,CAAC;IAE3C;;OAEG;IACH,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,IAAI,CA8EzG"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Recursively walks an Edict expression tree.
3
+ * Guarantees traversal over all child expressions.
4
+ */
5
+ export function walkExpression(expr, visitor) {
6
+ let enter;
7
+ let leave;
8
+ if (typeof visitor === "function") {
9
+ enter = visitor;
10
+ }
11
+ else {
12
+ enter = visitor.enter;
13
+ leave = visitor.leave;
14
+ }
15
+ if (enter && enter(expr) === false) {
16
+ return;
17
+ }
18
+ switch (expr.kind) {
19
+ case "literal":
20
+ case "ident":
21
+ break;
22
+ case "call":
23
+ walkExpression(expr.fn, visitor);
24
+ for (const arg of expr.args)
25
+ walkExpression(arg, visitor);
26
+ break;
27
+ case "if":
28
+ walkExpression(expr.condition, visitor);
29
+ for (const e of expr.then)
30
+ walkExpression(e, visitor);
31
+ if (expr.else) {
32
+ for (const e of expr.else)
33
+ walkExpression(e, visitor);
34
+ }
35
+ break;
36
+ case "let":
37
+ walkExpression(expr.value, visitor);
38
+ break;
39
+ case "match":
40
+ walkExpression(expr.target, visitor);
41
+ for (const arm of expr.arms) {
42
+ for (const e of arm.body)
43
+ walkExpression(e, visitor);
44
+ }
45
+ break;
46
+ case "block":
47
+ case "lambda":
48
+ for (const e of expr.body)
49
+ walkExpression(e, visitor);
50
+ break;
51
+ case "binop":
52
+ walkExpression(expr.left, visitor);
53
+ walkExpression(expr.right, visitor);
54
+ break;
55
+ case "unop":
56
+ walkExpression(expr.operand, visitor);
57
+ break;
58
+ case "array":
59
+ case "tuple_expr":
60
+ for (const e of expr.elements)
61
+ walkExpression(e, visitor);
62
+ break;
63
+ case "record_expr":
64
+ case "enum_constructor":
65
+ for (const f of expr.fields)
66
+ walkExpression(f.value, visitor);
67
+ break;
68
+ case "access":
69
+ walkExpression(expr.target, visitor);
70
+ break;
71
+ case "string_interp":
72
+ for (const part of expr.parts)
73
+ walkExpression(part, visitor);
74
+ break;
75
+ case "forall":
76
+ case "exists":
77
+ walkExpression(expr.range.from, visitor);
78
+ walkExpression(expr.range.to, visitor);
79
+ walkExpression(expr.body, visitor);
80
+ break;
81
+ default:
82
+ // Ensure all kinds are completely covered
83
+ void expr;
84
+ }
85
+ if (leave) {
86
+ leave(expr);
87
+ }
88
+ }
89
+ //# sourceMappingURL=walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/ast/walk.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/builtins/domains/core.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItD,eAAO,MAAM,aAAa,EAAE,UAAU,EA0CrC,CAAC"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/builtins/domains/core.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItD,eAAO,MAAM,aAAa,EAAE,UAAU,EAwCrC,CAAC"}
@@ -2,7 +2,7 @@
2
2
  // Core domain — print, string_replace
3
3
  // =============================================================================
4
4
  import { STRING_TYPE } from "../../ast/type-constants.js";
5
- import { getMemoryBuffer, writeStringResult } from "../host-helpers.js";
5
+ import { readString, writeStringResult } from "../host-helpers.js";
6
6
  export const CORE_BUILTINS = [
7
7
  {
8
8
  name: "print",
@@ -14,9 +14,8 @@ export const CORE_BUILTINS = [
14
14
  },
15
15
  impl: {
16
16
  kind: "host",
17
- factory: (ctx) => (ptr, len) => {
18
- const bytes = new Uint8Array(getMemoryBuffer(ctx.state), ptr, len);
19
- const text = ctx.decoder.decode(bytes);
17
+ factory: (ctx) => (ptr) => {
18
+ const text = readString(ctx.state, ptr, ctx.decoder);
20
19
  ctx.state.outputParts.push(text);
21
20
  return ptr;
22
21
  },
@@ -32,11 +31,10 @@ export const CORE_BUILTINS = [
32
31
  },
33
32
  impl: {
34
33
  kind: "host",
35
- factory: (ctx) => (hayPtr, hayLen, needlePtr, needleLen, replPtr, replLen) => {
36
- const memoryBuffer = getMemoryBuffer(ctx.state);
37
- const haystack = ctx.decoder.decode(new Uint8Array(memoryBuffer, hayPtr, hayLen));
38
- const needle = ctx.decoder.decode(new Uint8Array(memoryBuffer, needlePtr, needleLen));
39
- const replacement = ctx.decoder.decode(new Uint8Array(memoryBuffer, replPtr, replLen));
34
+ factory: (ctx) => (hayPtr, needlePtr, replPtr) => {
35
+ const haystack = readString(ctx.state, hayPtr, ctx.decoder);
36
+ const needle = readString(ctx.state, needlePtr, ctx.decoder);
37
+ const replacement = readString(ctx.state, replPtr, ctx.decoder);
40
38
  return writeStringResult(ctx.state, haystack.replaceAll(needle, replacement), ctx.encoder);
41
39
  },
42
40
  },
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/builtins/domains/core.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,sCAAsC;AACtC,gFAAgF;AAGhF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAoB,MAAM,oBAAoB,CAAC;AAE1F,MAAM,CAAC,MAAM,aAAa,GAAiB;IACvC;QACI,IAAI,EAAE,OAAO;QACb,IAAI,EAAE;YACF,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,CAAC,WAAW,CAAC;YACrB,OAAO,EAAE,CAAC,IAAI,CAAC;YACf,UAAU,EAAE,WAAW;SAC1B;QACD,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,CAAC,GAAW,EAAE,GAAW,EAAU,EAAE;gBAChE,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACnE,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjC,OAAO,GAAG,CAAC;YACf,CAAC;SACJ;KACJ;IACD;QACI,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE;YACF,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;YAC/C,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,UAAU,EAAE,WAAW;SAC1B;QACD,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,CAC3B,MAAc,EAAE,MAAc,EAC9B,SAAiB,EAAE,SAAiB,EACpC,OAAe,EAAE,OAAe,EAC1B,EAAE;gBACR,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAChD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;gBAClF,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;gBACtF,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBACvF,OAAO,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAC/F,CAAC;SACJ;KACJ;CACJ,CAAC"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/builtins/domains/core.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,sCAAsC;AACtC,gFAAgF;AAGhF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAoB,MAAM,oBAAoB,CAAC;AAErF,MAAM,CAAC,MAAM,aAAa,GAAiB;IACvC;QACI,IAAI,EAAE,OAAO;QACb,IAAI,EAAE;YACF,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,CAAC,WAAW,CAAC;YACrB,OAAO,EAAE,CAAC,IAAI,CAAC;YACf,UAAU,EAAE,WAAW;SAC1B;QACD,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,CAAC,GAAW,EAAU,EAAE;gBACnD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBACrD,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjC,OAAO,GAAG,CAAC;YACf,CAAC;SACJ;KACJ;IACD;QACI,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE;YACF,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;YAC/C,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,UAAU,EAAE,WAAW;SAC1B;QACD,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,CAC3B,MAAc,EACd,SAAiB,EACjB,OAAe,EACT,EAAE;gBACR,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC7D,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBAChE,OAAO,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAC/F,CAAC;SACJ;KACJ;CACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/builtins/domains/crypto.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItD,eAAO,MAAM,eAAe,EAAE,UAAU,EA8CvC,CAAC"}
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/builtins/domains/crypto.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItD,eAAO,MAAM,eAAe,EAAE,UAAU,EA6CvC,CAAC"}
@@ -2,15 +2,15 @@
2
2
  // Crypto domain — sha256, md5, hmac (adapter-delegated)
3
3
  // =============================================================================
4
4
  import { STRING_TYPE } from "../../ast/type-constants.js";
5
- import { getMemoryBuffer, writeStringResult } from "../host-helpers.js";
5
+ import { readString, writeStringResult } from "../host-helpers.js";
6
6
  export const CRYPTO_BUILTINS = [
7
7
  {
8
8
  name: "sha256",
9
9
  type: { kind: "fn_type", params: [STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
10
10
  impl: {
11
11
  kind: "host",
12
- factory: (ctx) => (ptr, len) => {
13
- const str = ctx.decoder.decode(new Uint8Array(getMemoryBuffer(ctx.state), ptr, len));
12
+ factory: (ctx) => (ptr) => {
13
+ const str = readString(ctx.state, ptr, ctx.decoder);
14
14
  return writeStringResult(ctx.state, ctx.adapter.sha256(str), ctx.encoder);
15
15
  },
16
16
  },
@@ -20,8 +20,8 @@ export const CRYPTO_BUILTINS = [
20
20
  type: { kind: "fn_type", params: [STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
21
21
  impl: {
22
22
  kind: "host",
23
- factory: (ctx) => (ptr, len) => {
24
- const str = ctx.decoder.decode(new Uint8Array(getMemoryBuffer(ctx.state), ptr, len));
23
+ factory: (ctx) => (ptr) => {
24
+ const str = readString(ctx.state, ptr, ctx.decoder);
25
25
  return writeStringResult(ctx.state, ctx.adapter.md5(str), ctx.encoder);
26
26
  },
27
27
  },
@@ -36,11 +36,10 @@ export const CRYPTO_BUILTINS = [
36
36
  },
37
37
  impl: {
38
38
  kind: "host",
39
- factory: (ctx) => (algoPtr, algoLen, keyPtr, keyLen, dataPtr, dataLen) => {
40
- const buf = getMemoryBuffer(ctx.state);
41
- const algo = ctx.decoder.decode(new Uint8Array(buf, algoPtr, algoLen));
42
- const key = ctx.decoder.decode(new Uint8Array(buf, keyPtr, keyLen));
43
- const data = ctx.decoder.decode(new Uint8Array(buf, dataPtr, dataLen));
39
+ factory: (ctx) => (algoPtr, keyPtr, dataPtr) => {
40
+ const algo = readString(ctx.state, algoPtr, ctx.decoder);
41
+ const key = readString(ctx.state, keyPtr, ctx.decoder);
42
+ const data = readString(ctx.state, dataPtr, ctx.decoder);
44
43
  return writeStringResult(ctx.state, ctx.adapter.hmac(algo, key, data), ctx.encoder);
45
44
  },
46
45
  },
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../src/builtins/domains/crypto.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../src/builtins/domains/crypto.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,wDAAwD;AACxD,gFAAgF;AAGhF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAoB,MAAM,oBAAoB,CAAC;AAErF,MAAM,CAAC,MAAM,eAAe,GAAiB;IACzC;QACI,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE;QAC5F,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,CAAC,GAAW,EAAU,EAAE;gBACnD,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpD,OAAO,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9E,CAAC;SACJ;KACJ;IACD;QACI,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE;QAC5F,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,CAAC,GAAW,EAAU,EAAE;gBACnD,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpD,OAAO,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3E,CAAC;SACJ;KACJ;IACD;QACI,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE;YACF,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;YAC/C,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,UAAU,EAAE,WAAW;SAC1B;QACD,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,CAC3B,OAAe,EACf,MAAc,EACd,OAAe,EACT,EAAE;gBACR,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBACzD,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBACvD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBACzD,OAAO,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YACxF,CAAC;SACJ;KACJ;CACJ,CAAC"}
@@ -2,7 +2,7 @@
2
2
  // DateTime domain — now, formatDate, parseDate, diffMs
3
3
  // =============================================================================
4
4
  import { INT64_TYPE, STRING_TYPE } from "../../ast/type-constants.js";
5
- import { getMemoryBuffer, writeStringResult, formatDateString } from "../host-helpers.js";
5
+ import { readString, writeStringResult, formatDateString } from "../host-helpers.js";
6
6
  export const DATETIME_BUILTINS = [
7
7
  {
8
8
  name: "now",
@@ -14,8 +14,8 @@ export const DATETIME_BUILTINS = [
14
14
  type: { kind: "fn_type", params: [INT64_TYPE, STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
15
15
  impl: {
16
16
  kind: "host",
17
- factory: (ctx) => (timestamp, fmtPtr, fmtLen) => {
18
- const fmt = ctx.decoder.decode(new Uint8Array(getMemoryBuffer(ctx.state), fmtPtr, fmtLen));
17
+ factory: (ctx) => (timestamp, fmtPtr) => {
18
+ const fmt = readString(ctx.state, fmtPtr, ctx.decoder);
19
19
  const date = new Date(Number(timestamp));
20
20
  return writeStringResult(ctx.state, formatDateString(date, fmt), ctx.encoder);
21
21
  },
@@ -26,8 +26,8 @@ export const DATETIME_BUILTINS = [
26
26
  type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["fails"], returnType: INT64_TYPE },
27
27
  impl: {
28
28
  kind: "host",
29
- factory: (ctx) => (strPtr, strLen, _fmtPtr, _fmtLen) => {
30
- const str = ctx.decoder.decode(new Uint8Array(getMemoryBuffer(ctx.state), strPtr, strLen));
29
+ factory: (ctx) => (strPtr, _fmtPtr) => {
30
+ const str = readString(ctx.state, strPtr, ctx.decoder);
31
31
  const ms = Date.parse(str);
32
32
  if (isNaN(ms)) {
33
33
  throw new Error(`parseDate: invalid date string "${str}"`);
@@ -1 +1 @@
1
- {"version":3,"file":"datetime.js","sourceRoot":"","sources":["../../../src/builtins/domains/datetime.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,uDAAuD;AACvD,gFAAgF;AAGhF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AAE5G,MAAM,CAAC,MAAM,iBAAiB,GAAiB;IAC3C;QACI,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE;QACjF,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,GAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE;KAC1E;IACD;QACI,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE;QACxG,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,CAAC,SAAiB,EAAE,MAAc,EAAE,MAAc,EAAU,EAAE;gBACzF,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC3F,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBACzC,OAAO,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAClF,CAAC;SACJ;KACJ;IACD;QACI,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE;QACzG,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,CAAC,MAAc,EAAE,MAAc,EAAE,OAAe,EAAE,OAAe,EAAU,EAAE;gBACxG,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC3F,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;oBACZ,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,GAAG,CAAC,CAAC;gBAC/D,CAAC;gBACD,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC;SACJ;KACJ;IACD;QACI,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE;QACtG,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE;KACjF;CACJ,CAAC"}
1
+ {"version":3,"file":"datetime.js","sourceRoot":"","sources":["../../../src/builtins/domains/datetime.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,uDAAuD;AACvD,gFAAgF;AAGhF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AAEvG,MAAM,CAAC,MAAM,iBAAiB,GAAiB;IAC3C;QACI,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE;QACjF,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,GAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE;KAC1E;IACD;QACI,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE;QACxG,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,CAAC,SAAiB,EAAE,MAAc,EAAU,EAAE;gBACzE,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBACvD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBACzC,OAAO,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAClF,CAAC;SACJ;KACJ;IACD;QACI,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE;QACzG,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,CAAC,MAAc,EAAE,OAAe,EAAU,EAAE;gBACvE,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBACvD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;oBACZ,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,GAAG,CAAC,CAAC;gBAC/D,CAAC;gBACD,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC;SACJ;KACJ;IACD;QACI,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE;QACtG,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE;KACjF;CACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/builtins/domains/http.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAatD,eAAO,MAAM,aAAa,EAAE,UAAU,EAyCrC,CAAC"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/builtins/domains/http.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAkCtD,eAAO,MAAM,aAAa,EAAE,UAAU,EAiCrC,CAAC"}
@@ -2,23 +2,42 @@
2
2
  // HTTP domain — httpGet, httpPost, httpPut, httpDelete (adapter-delegated)
3
3
  // =============================================================================
4
4
  import { STRING_TYPE, RESULT_STRING_TYPE } from "../../ast/type-constants.js";
5
- import { getMemoryBuffer, writeStringResult, writeResultValue } from "../host-helpers.js";
6
- function readStr(ctx, ptr, len) {
7
- return ctx.decoder.decode(new Uint8Array(getMemoryBuffer(ctx.state), ptr, len));
5
+ import { readString, writeStringResult, writeResultValue } from "../host-helpers.js";
6
+ function checkAllowedHost(ctx, urlString) {
7
+ if (!ctx.state.allowedHosts) {
8
+ return { allowed: true };
9
+ }
10
+ try {
11
+ const url = new URL(urlString);
12
+ if (!ctx.state.allowedHosts.includes(url.hostname)) {
13
+ return { allowed: false, errorData: "host_not_allowed" };
14
+ }
15
+ return { allowed: true };
16
+ }
17
+ catch {
18
+ return { allowed: false, errorData: "host_not_allowed" };
19
+ }
8
20
  }
9
21
  function makeResult(ctx, fetchResult) {
10
22
  const strPtr = writeStringResult(ctx.state, fetchResult.data, ctx.encoder);
11
23
  return writeResultValue(ctx.state, fetchResult.ok ? 0 : 1, strPtr);
12
24
  }
25
+ function fetchWithChecks(ctx, urlPtr, method, bodyPtr) {
26
+ const url = readString(ctx.state, urlPtr, ctx.decoder);
27
+ const check = checkAllowedHost(ctx, url);
28
+ if (!check.allowed) {
29
+ return makeResult(ctx, { ok: false, data: check.errorData });
30
+ }
31
+ const bodyStr = bodyPtr !== undefined ? readString(ctx.state, bodyPtr, ctx.decoder) : undefined;
32
+ return makeResult(ctx, ctx.adapter.fetch(url, method, bodyStr));
33
+ }
13
34
  export const HTTP_BUILTINS = [
14
35
  {
15
36
  name: "httpGet",
16
37
  type: { kind: "fn_type", params: [STRING_TYPE], effects: ["io"], returnType: RESULT_STRING_TYPE },
17
38
  impl: {
18
39
  kind: "host",
19
- factory: (ctx) => (urlPtr, urlLen) => {
20
- return makeResult(ctx, ctx.adapter.fetch(readStr(ctx, urlPtr, urlLen), "GET"));
21
- },
40
+ factory: (ctx) => (urlPtr) => fetchWithChecks(ctx, urlPtr, "GET"),
22
41
  },
23
42
  },
24
43
  {
@@ -26,9 +45,7 @@ export const HTTP_BUILTINS = [
26
45
  type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["io"], returnType: RESULT_STRING_TYPE },
27
46
  impl: {
28
47
  kind: "host",
29
- factory: (ctx) => (urlPtr, urlLen, bodyPtr, bodyLen) => {
30
- return makeResult(ctx, ctx.adapter.fetch(readStr(ctx, urlPtr, urlLen), "POST", readStr(ctx, bodyPtr, bodyLen)));
31
- },
48
+ factory: (ctx) => (urlPtr, bodyPtr) => fetchWithChecks(ctx, urlPtr, "POST", bodyPtr),
32
49
  },
33
50
  },
34
51
  {
@@ -36,9 +53,7 @@ export const HTTP_BUILTINS = [
36
53
  type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["io"], returnType: RESULT_STRING_TYPE },
37
54
  impl: {
38
55
  kind: "host",
39
- factory: (ctx) => (urlPtr, urlLen, bodyPtr, bodyLen) => {
40
- return makeResult(ctx, ctx.adapter.fetch(readStr(ctx, urlPtr, urlLen), "PUT", readStr(ctx, bodyPtr, bodyLen)));
41
- },
56
+ factory: (ctx) => (urlPtr, bodyPtr) => fetchWithChecks(ctx, urlPtr, "PUT", bodyPtr),
42
57
  },
43
58
  },
44
59
  {
@@ -46,9 +61,7 @@ export const HTTP_BUILTINS = [
46
61
  type: { kind: "fn_type", params: [STRING_TYPE], effects: ["io"], returnType: RESULT_STRING_TYPE },
47
62
  impl: {
48
63
  kind: "host",
49
- factory: (ctx) => (urlPtr, urlLen) => {
50
- return makeResult(ctx, ctx.adapter.fetch(readStr(ctx, urlPtr, urlLen), "DELETE"));
51
- },
64
+ factory: (ctx) => (urlPtr) => fetchWithChecks(ctx, urlPtr, "DELETE"),
52
65
  },
53
66
  },
54
67
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/builtins/domains/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/builtins/domains/http.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../../../src/builtins/domains/io.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAQtD,eAAO,MAAM,WAAW,EAAE,UAAU,EAmEnC,CAAC"}
1
+ {"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../../../src/builtins/domains/io.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItD,eAAO,MAAM,WAAW,EAAE,UAAU,EAsEnC,CAAC"}