edict-lang 1.2.0 → 1.6.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 (227) hide show
  1. package/README.md +39 -13
  2. package/dist/ast/nodes.d.ts +4 -3
  3. package/dist/ast/nodes.d.ts.map +1 -1
  4. package/dist/ast/nodes.js +1 -0
  5. package/dist/ast/nodes.js.map +1 -1
  6. package/dist/ast/type-constants.d.ts +12 -0
  7. package/dist/ast/type-constants.d.ts.map +1 -0
  8. package/dist/ast/type-constants.js +16 -0
  9. package/dist/ast/type-constants.js.map +1 -0
  10. package/dist/ast/types.d.ts +1 -1
  11. package/dist/ast/types.d.ts.map +1 -1
  12. package/dist/builtins/builtin-enums.d.ts +12 -0
  13. package/dist/builtins/builtin-enums.d.ts.map +1 -0
  14. package/dist/builtins/builtin-enums.js +45 -0
  15. package/dist/builtins/builtin-enums.js.map +1 -0
  16. package/dist/builtins/builtin-types.d.ts +20 -0
  17. package/dist/builtins/builtin-types.d.ts.map +1 -0
  18. package/dist/builtins/builtin-types.js +6 -0
  19. package/dist/builtins/builtin-types.js.map +1 -0
  20. package/dist/builtins/builtins.d.ts +3 -0
  21. package/dist/builtins/builtins.d.ts.map +1 -0
  22. package/dist/builtins/builtins.js +3 -0
  23. package/dist/builtins/builtins.js.map +1 -0
  24. package/dist/builtins/domains/array.d.ts +3 -0
  25. package/dist/builtins/domains/array.d.ts.map +1 -0
  26. package/dist/builtins/domains/array.js +236 -0
  27. package/dist/builtins/domains/array.js.map +1 -0
  28. package/dist/builtins/domains/core.d.ts +3 -0
  29. package/dist/builtins/domains/core.d.ts.map +1 -0
  30. package/dist/builtins/domains/core.js +45 -0
  31. package/dist/builtins/domains/core.js.map +1 -0
  32. package/dist/builtins/domains/crypto.d.ts +3 -0
  33. package/dist/builtins/domains/crypto.d.ts.map +1 -0
  34. package/dist/builtins/domains/crypto.js +49 -0
  35. package/dist/builtins/domains/crypto.js.map +1 -0
  36. package/dist/builtins/domains/datetime.d.ts +3 -0
  37. package/dist/builtins/domains/datetime.d.ts.map +1 -0
  38. package/dist/builtins/domains/datetime.js +45 -0
  39. package/dist/builtins/domains/datetime.js.map +1 -0
  40. package/dist/builtins/domains/http.d.ts +3 -0
  41. package/dist/builtins/domains/http.d.ts.map +1 -0
  42. package/dist/builtins/domains/http.js +55 -0
  43. package/dist/builtins/domains/http.js.map +1 -0
  44. package/dist/builtins/domains/int64.d.ts +3 -0
  45. package/dist/builtins/domains/int64.d.ts.map +1 -0
  46. package/dist/builtins/domains/int64.js +31 -0
  47. package/dist/builtins/domains/int64.js.map +1 -0
  48. package/dist/builtins/domains/io.d.ts +3 -0
  49. package/dist/builtins/domains/io.d.ts.map +1 -0
  50. package/dist/builtins/domains/io.js +79 -0
  51. package/dist/builtins/domains/io.js.map +1 -0
  52. package/dist/builtins/domains/json.d.ts +3 -0
  53. package/dist/builtins/domains/json.d.ts.map +1 -0
  54. package/dist/builtins/domains/json.js +47 -0
  55. package/dist/builtins/domains/json.js.map +1 -0
  56. package/dist/builtins/domains/math.d.ts +3 -0
  57. package/dist/builtins/domains/math.d.ts.map +1 -0
  58. package/dist/builtins/domains/math.js +47 -0
  59. package/dist/builtins/domains/math.js.map +1 -0
  60. package/dist/builtins/domains/option.d.ts +3 -0
  61. package/dist/builtins/domains/option.d.ts.map +1 -0
  62. package/dist/builtins/domains/option.js +56 -0
  63. package/dist/builtins/domains/option.js.map +1 -0
  64. package/dist/builtins/domains/random.d.ts +3 -0
  65. package/dist/builtins/domains/random.d.ts.map +1 -0
  66. package/dist/builtins/domains/random.js +50 -0
  67. package/dist/builtins/domains/random.js.map +1 -0
  68. package/dist/builtins/domains/regex.d.ts +3 -0
  69. package/dist/builtins/domains/regex.d.ts.map +1 -0
  70. package/dist/builtins/domains/regex.js +69 -0
  71. package/dist/builtins/domains/regex.js.map +1 -0
  72. package/dist/builtins/domains/result.d.ts +3 -0
  73. package/dist/builtins/domains/result.d.ts.map +1 -0
  74. package/dist/builtins/domains/result.js +84 -0
  75. package/dist/builtins/domains/result.js.map +1 -0
  76. package/dist/builtins/domains/string.d.ts +3 -0
  77. package/dist/builtins/domains/string.d.ts.map +1 -0
  78. package/dist/builtins/domains/string.js +139 -0
  79. package/dist/builtins/domains/string.js.map +1 -0
  80. package/dist/builtins/domains/type-conversion.d.ts +3 -0
  81. package/dist/builtins/domains/type-conversion.d.ts.map +1 -0
  82. package/dist/builtins/domains/type-conversion.js +42 -0
  83. package/dist/builtins/domains/type-conversion.js.map +1 -0
  84. package/dist/builtins/host-helpers.d.ts +66 -0
  85. package/dist/builtins/host-helpers.d.ts.map +1 -0
  86. package/dist/builtins/host-helpers.js +127 -0
  87. package/dist/builtins/host-helpers.js.map +1 -0
  88. package/dist/builtins/registry.d.ts +48 -0
  89. package/dist/builtins/registry.d.ts.map +1 -0
  90. package/dist/builtins/registry.js +118 -0
  91. package/dist/builtins/registry.js.map +1 -0
  92. package/dist/check.d.ts +9 -2
  93. package/dist/check.d.ts.map +1 -1
  94. package/dist/check.js +30 -9
  95. package/dist/check.js.map +1 -1
  96. package/dist/checker/check.d.ts +18 -1
  97. package/dist/checker/check.d.ts.map +1 -1
  98. package/dist/checker/check.js +157 -108
  99. package/dist/checker/check.js.map +1 -1
  100. package/dist/checker/type-env.d.ts +2 -0
  101. package/dist/checker/type-env.d.ts.map +1 -1
  102. package/dist/checker/type-env.js +9 -0
  103. package/dist/checker/type-env.js.map +1 -1
  104. package/dist/codegen/browser-host-adapter.d.ts +29 -0
  105. package/dist/codegen/browser-host-adapter.d.ts.map +1 -0
  106. package/dist/codegen/browser-host-adapter.js +51 -0
  107. package/dist/codegen/browser-host-adapter.js.map +1 -0
  108. package/dist/codegen/builtins.d.ts +2 -26
  109. package/dist/codegen/builtins.d.ts.map +1 -1
  110. package/dist/codegen/builtins.js +2 -341
  111. package/dist/codegen/builtins.js.map +1 -1
  112. package/dist/codegen/closures.d.ts +17 -0
  113. package/dist/codegen/closures.d.ts.map +1 -0
  114. package/dist/codegen/closures.js +140 -0
  115. package/dist/codegen/closures.js.map +1 -0
  116. package/dist/codegen/codegen.d.ts +6 -30
  117. package/dist/codegen/codegen.d.ts.map +1 -1
  118. package/dist/codegen/codegen.js +154 -1103
  119. package/dist/codegen/codegen.js.map +1 -1
  120. package/dist/codegen/collect-strings.d.ts +4 -0
  121. package/dist/codegen/collect-strings.d.ts.map +1 -0
  122. package/dist/codegen/collect-strings.js +76 -0
  123. package/dist/codegen/collect-strings.js.map +1 -0
  124. package/dist/codegen/compile-calls.d.ts +10 -0
  125. package/dist/codegen/compile-calls.d.ts.map +1 -0
  126. package/dist/codegen/compile-calls.js +374 -0
  127. package/dist/codegen/compile-calls.js.map +1 -0
  128. package/dist/codegen/compile-data.d.ts +22 -0
  129. package/dist/codegen/compile-data.d.ts.map +1 -0
  130. package/dist/codegen/compile-data.js +243 -0
  131. package/dist/codegen/compile-data.js.map +1 -0
  132. package/dist/codegen/compile-expr.d.ts +10 -0
  133. package/dist/codegen/compile-expr.d.ts.map +1 -0
  134. package/dist/codegen/compile-expr.js +156 -0
  135. package/dist/codegen/compile-expr.js.map +1 -0
  136. package/dist/codegen/compile-match.d.ts +7 -0
  137. package/dist/codegen/compile-match.d.ts.map +1 -0
  138. package/dist/codegen/compile-match.js +195 -0
  139. package/dist/codegen/compile-match.js.map +1 -0
  140. package/dist/codegen/compile-scalars.d.ts +25 -0
  141. package/dist/codegen/compile-scalars.d.ts.map +1 -0
  142. package/dist/codegen/compile-scalars.js +211 -0
  143. package/dist/codegen/compile-scalars.js.map +1 -0
  144. package/dist/codegen/hof-generators.d.ts +39 -0
  145. package/dist/codegen/hof-generators.d.ts.map +1 -0
  146. package/dist/codegen/hof-generators.js +336 -0
  147. package/dist/codegen/hof-generators.js.map +1 -0
  148. package/dist/codegen/host-adapter.d.ts +44 -0
  149. package/dist/codegen/host-adapter.d.ts.map +1 -0
  150. package/dist/codegen/host-adapter.js +9 -0
  151. package/dist/codegen/host-adapter.js.map +1 -0
  152. package/dist/codegen/imports.d.ts +15 -0
  153. package/dist/codegen/imports.d.ts.map +1 -0
  154. package/dist/codegen/imports.js +165 -0
  155. package/dist/codegen/imports.js.map +1 -0
  156. package/dist/codegen/node-host-adapter.d.ts +35 -0
  157. package/dist/codegen/node-host-adapter.d.ts.map +1 -0
  158. package/dist/codegen/node-host-adapter.js +155 -0
  159. package/dist/codegen/node-host-adapter.js.map +1 -0
  160. package/dist/codegen/runner.d.ts +36 -2
  161. package/dist/codegen/runner.d.ts.map +1 -1
  162. package/dist/codegen/runner.js +147 -271
  163. package/dist/codegen/runner.js.map +1 -1
  164. package/dist/codegen/types.d.ts +96 -0
  165. package/dist/codegen/types.d.ts.map +1 -0
  166. package/dist/codegen/types.js +63 -0
  167. package/dist/codegen/types.js.map +1 -0
  168. package/dist/compact/expand.d.ts +25 -0
  169. package/dist/compact/expand.d.ts.map +1 -0
  170. package/dist/compact/expand.js +199 -0
  171. package/dist/compact/expand.js.map +1 -0
  172. package/dist/compile.d.ts +2 -1
  173. package/dist/compile.d.ts.map +1 -1
  174. package/dist/compile.js +2 -2
  175. package/dist/compile.js.map +1 -1
  176. package/dist/contracts/translate.js.map +1 -1
  177. package/dist/contracts/verify.d.ts +10 -2
  178. package/dist/contracts/verify.d.ts.map +1 -1
  179. package/dist/contracts/verify.js +26 -21
  180. package/dist/contracts/verify.js.map +1 -1
  181. package/dist/effects/call-graph.d.ts.map +1 -1
  182. package/dist/effects/call-graph.js +27 -4
  183. package/dist/effects/call-graph.js.map +1 -1
  184. package/dist/effects/effect-check.d.ts +10 -2
  185. package/dist/effects/effect-check.d.ts.map +1 -1
  186. package/dist/effects/effect-check.js +12 -7
  187. package/dist/effects/effect-check.js.map +1 -1
  188. package/dist/errors/error-catalog.d.ts +1 -1
  189. package/dist/errors/error-catalog.d.ts.map +1 -1
  190. package/dist/errors/error-catalog.js +119 -0
  191. package/dist/errors/error-catalog.js.map +1 -1
  192. package/dist/errors/structured-errors.d.ts +28 -1
  193. package/dist/errors/structured-errors.d.ts.map +1 -1
  194. package/dist/errors/structured-errors.js +9 -0
  195. package/dist/errors/structured-errors.js.map +1 -1
  196. package/dist/index.d.ts +20 -9
  197. package/dist/index.d.ts.map +1 -1
  198. package/dist/index.js +26 -10
  199. package/dist/index.js.map +1 -1
  200. package/dist/lint/lint.d.ts +9 -0
  201. package/dist/lint/lint.d.ts.map +1 -0
  202. package/dist/lint/lint.js +354 -0
  203. package/dist/lint/lint.js.map +1 -0
  204. package/dist/lint/warnings.d.ts +54 -0
  205. package/dist/lint/warnings.d.ts.map +1 -0
  206. package/dist/lint/warnings.js +39 -0
  207. package/dist/lint/warnings.js.map +1 -0
  208. package/dist/mcp/create-server.d.ts.map +1 -1
  209. package/dist/mcp/create-server.js +66 -5
  210. package/dist/mcp/create-server.js.map +1 -1
  211. package/dist/mcp/handlers.d.ts +21 -5
  212. package/dist/mcp/handlers.d.ts.map +1 -1
  213. package/dist/mcp/handlers.js +65 -15
  214. package/dist/mcp/handlers.js.map +1 -1
  215. package/dist/mcp/prompts.d.ts +17 -0
  216. package/dist/mcp/prompts.d.ts.map +1 -0
  217. package/dist/mcp/prompts.js +181 -0
  218. package/dist/mcp/prompts.js.map +1 -0
  219. package/dist/mcp/server.js +1 -4
  220. package/dist/mcp/server.js.map +1 -1
  221. package/dist/resolver/resolve.d.ts.map +1 -1
  222. package/dist/resolver/resolve.js +62 -16
  223. package/dist/resolver/resolve.js.map +1 -1
  224. package/dist/validator/node-validators.d.ts.map +1 -1
  225. package/dist/validator/node-validators.js +60 -5
  226. package/dist/validator/node-validators.js.map +1 -1
  227. package/package.json +4 -2
@@ -0,0 +1,50 @@
1
+ // =============================================================================
2
+ // Random domain — randomInt, randomFloat, randomUuid
3
+ // =============================================================================
4
+ import { INT_TYPE, FLOAT_TYPE, STRING_TYPE } from "../../ast/type-constants.js";
5
+ import { writeStringResult } from "../host-helpers.js";
6
+ export const RANDOM_BUILTINS = [
7
+ {
8
+ name: "randomInt",
9
+ type: { kind: "fn_type", params: [INT_TYPE, INT_TYPE], effects: ["reads"], returnType: INT_TYPE },
10
+ impl: {
11
+ kind: "host",
12
+ factory: () => (min, max) => {
13
+ // Inclusive range [min, max] with rejection sampling to avoid modulo bias
14
+ const range = max - min + 1;
15
+ const limit = 0x100000000 - (0x100000000 % range); // largest multiple of range ≤ 2^32
16
+ const array = new Uint32Array(1);
17
+ let val;
18
+ do {
19
+ crypto.getRandomValues(array);
20
+ val = array[0];
21
+ } while (val >= limit);
22
+ return min + (val % range);
23
+ },
24
+ },
25
+ },
26
+ {
27
+ name: "randomFloat",
28
+ type: { kind: "fn_type", params: [], effects: ["reads"], returnType: FLOAT_TYPE },
29
+ impl: {
30
+ kind: "host",
31
+ factory: () => () => {
32
+ const array = new Uint32Array(1);
33
+ crypto.getRandomValues(array);
34
+ return array[0] / 0x100000000; // [0, 1) — divide by 2^32
35
+ },
36
+ },
37
+ },
38
+ {
39
+ name: "randomUuid",
40
+ type: { kind: "fn_type", params: [], effects: ["reads"], returnType: STRING_TYPE },
41
+ impl: {
42
+ kind: "host",
43
+ factory: (ctx) => () => {
44
+ const uuid = crypto.randomUUID();
45
+ return writeStringResult(ctx.state, uuid, ctx.encoder);
46
+ },
47
+ },
48
+ },
49
+ ];
50
+ //# sourceMappingURL=random.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random.js","sourceRoot":"","sources":["../../../src/builtins/domains/random.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,qDAAqD;AACrD,gFAAgF;AAGhF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAoB,MAAM,oBAAoB,CAAC;AAEzE,MAAM,CAAC,MAAM,eAAe,GAAiB;IACzC;QACI,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE;QACjG,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,GAAW,EAAE,GAAW,EAAU,EAAE;gBAChD,0EAA0E;gBAC1E,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;gBAC5B,MAAM,KAAK,GAAG,WAAW,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,mCAAmC;gBACtF,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,GAAW,CAAC;gBAChB,GAAG,CAAC;oBACA,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;oBAC9B,GAAG,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;gBACpB,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAE;gBACvB,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;YAC/B,CAAC;SACJ;KACJ;IACD;QACI,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE;QACjF,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,GAAG,EAAE,CAAC,GAAW,EAAE;gBACxB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBAC9B,OAAO,KAAK,CAAC,CAAC,CAAE,GAAG,WAAW,CAAC,CAAC,0BAA0B;YAC9D,CAAC;SACJ;KACJ;IACD;QACI,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE;QAClF,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,GAAW,EAAE;gBACxC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;gBACjC,OAAO,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3D,CAAC;SACJ;KACJ;CACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { BuiltinDef } from "../builtin-types.js";
2
+ export declare const REGEX_BUILTINS: BuiltinDef[];
3
+ //# sourceMappingURL=regex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex.d.ts","sourceRoot":"","sources":["../../../src/builtins/domains/regex.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItD,eAAO,MAAM,cAAc,EAAE,UAAU,EA+DtC,CAAC"}
@@ -0,0 +1,69 @@
1
+ // =============================================================================
2
+ // Regex domain — regexTest, regexMatch, regexReplace
3
+ // =============================================================================
4
+ import { STRING_TYPE, BOOL_TYPE } from "../../ast/type-constants.js";
5
+ import { getMemoryBuffer, writeStringResult } from "../host-helpers.js";
6
+ export const REGEX_BUILTINS = [
7
+ {
8
+ name: "regexTest",
9
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["pure"], returnType: BOOL_TYPE },
10
+ impl: {
11
+ kind: "host",
12
+ factory: (ctx) => (patPtr, patLen, inputPtr, inputLen) => {
13
+ const buf = getMemoryBuffer(ctx.state);
14
+ const pattern = ctx.decoder.decode(new Uint8Array(buf, patPtr, patLen));
15
+ const input = ctx.decoder.decode(new Uint8Array(buf, inputPtr, inputLen));
16
+ try {
17
+ return new RegExp(pattern).test(input) ? 1 : 0;
18
+ }
19
+ catch {
20
+ return 0; // invalid regex → false
21
+ }
22
+ },
23
+ },
24
+ },
25
+ {
26
+ name: "regexMatch",
27
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
28
+ impl: {
29
+ kind: "host",
30
+ factory: (ctx) => (patPtr, patLen, inputPtr, inputLen) => {
31
+ const buf = getMemoryBuffer(ctx.state);
32
+ const pattern = ctx.decoder.decode(new Uint8Array(buf, patPtr, patLen));
33
+ const input = ctx.decoder.decode(new Uint8Array(buf, inputPtr, inputLen));
34
+ try {
35
+ const m = input.match(new RegExp(pattern));
36
+ return writeStringResult(ctx.state, m ? m[0] : "", ctx.encoder);
37
+ }
38
+ catch {
39
+ return writeStringResult(ctx.state, "", ctx.encoder); // invalid regex → empty string
40
+ }
41
+ },
42
+ },
43
+ },
44
+ {
45
+ name: "regexReplace",
46
+ type: {
47
+ kind: "fn_type",
48
+ params: [STRING_TYPE, STRING_TYPE, STRING_TYPE],
49
+ effects: ["pure"],
50
+ returnType: STRING_TYPE,
51
+ },
52
+ impl: {
53
+ kind: "host",
54
+ factory: (ctx) => (inputPtr, inputLen, patPtr, patLen, replPtr, replLen) => {
55
+ const buf = getMemoryBuffer(ctx.state);
56
+ const input = ctx.decoder.decode(new Uint8Array(buf, inputPtr, inputLen));
57
+ const pattern = ctx.decoder.decode(new Uint8Array(buf, patPtr, patLen));
58
+ const replacement = ctx.decoder.decode(new Uint8Array(buf, replPtr, replLen));
59
+ try {
60
+ return writeStringResult(ctx.state, input.replace(new RegExp(pattern, "g"), replacement), ctx.encoder);
61
+ }
62
+ catch {
63
+ return writeStringResult(ctx.state, input, ctx.encoder); // invalid regex → unchanged
64
+ }
65
+ },
66
+ },
67
+ },
68
+ ];
69
+ //# sourceMappingURL=regex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex.js","sourceRoot":"","sources":["../../../src/builtins/domains/regex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BuiltinDef } from "../builtin-types.js";
2
+ export declare const RESULT_BUILTINS: BuiltinDef[];
3
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../../src/builtins/domains/result.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItD,eAAO,MAAM,eAAe,EAAE,UAAU,EAyEvC,CAAC"}
@@ -0,0 +1,84 @@
1
+ // =============================================================================
2
+ // Result domain — isOk, isErr, unwrapOk, unwrapErr, unwrapOkOr, unwrapErrOr
3
+ // =============================================================================
4
+ import { INT_TYPE, BOOL_TYPE, RESULT_INT_TYPE } from "../../ast/type-constants.js";
5
+ import { getMemoryBuffer } from "../host-helpers.js";
6
+ export const RESULT_BUILTINS = [
7
+ {
8
+ name: "isOk",
9
+ type: { kind: "fn_type", params: [RESULT_INT_TYPE], effects: ["pure"], returnType: BOOL_TYPE },
10
+ impl: {
11
+ kind: "host",
12
+ factory: (ctx) => (ptr) => {
13
+ return new DataView(getMemoryBuffer(ctx.state)).getInt32(ptr, true) === 0 ? 1 : 0;
14
+ },
15
+ },
16
+ },
17
+ {
18
+ name: "isErr",
19
+ type: { kind: "fn_type", params: [RESULT_INT_TYPE], effects: ["pure"], returnType: BOOL_TYPE },
20
+ impl: {
21
+ kind: "host",
22
+ factory: (ctx) => (ptr) => {
23
+ return new DataView(getMemoryBuffer(ctx.state)).getInt32(ptr, true) === 1 ? 1 : 0;
24
+ },
25
+ },
26
+ },
27
+ {
28
+ name: "unwrapOk",
29
+ type: { kind: "fn_type", params: [RESULT_INT_TYPE], effects: ["fails"], returnType: INT_TYPE },
30
+ impl: {
31
+ kind: "host",
32
+ factory: (ctx) => (ptr) => {
33
+ const view = new DataView(getMemoryBuffer(ctx.state));
34
+ const tag = view.getInt32(ptr, true);
35
+ if (tag === 0)
36
+ return view.getInt32(ptr + 8, true);
37
+ throw new Error("unwrapOk called on Err");
38
+ },
39
+ },
40
+ },
41
+ {
42
+ name: "unwrapErr",
43
+ type: { kind: "fn_type", params: [RESULT_INT_TYPE], effects: ["fails"], returnType: INT_TYPE },
44
+ impl: {
45
+ kind: "host",
46
+ factory: (ctx) => (ptr) => {
47
+ const view = new DataView(getMemoryBuffer(ctx.state));
48
+ const tag = view.getInt32(ptr, true);
49
+ if (tag === 1)
50
+ return view.getInt32(ptr + 8, true);
51
+ throw new Error("unwrapErr called on Ok");
52
+ },
53
+ },
54
+ },
55
+ {
56
+ name: "unwrapOkOr",
57
+ type: { kind: "fn_type", params: [RESULT_INT_TYPE, INT_TYPE], effects: ["pure"], returnType: INT_TYPE },
58
+ impl: {
59
+ kind: "host",
60
+ factory: (ctx) => (ptr, defaultVal) => {
61
+ const view = new DataView(getMemoryBuffer(ctx.state));
62
+ const tag = view.getInt32(ptr, true);
63
+ if (tag === 0)
64
+ return view.getInt32(ptr + 8, true);
65
+ return defaultVal;
66
+ },
67
+ },
68
+ },
69
+ {
70
+ name: "unwrapErrOr",
71
+ type: { kind: "fn_type", params: [RESULT_INT_TYPE, INT_TYPE], effects: ["pure"], returnType: INT_TYPE },
72
+ impl: {
73
+ kind: "host",
74
+ factory: (ctx) => (ptr, defaultVal) => {
75
+ const view = new DataView(getMemoryBuffer(ctx.state));
76
+ const tag = view.getInt32(ptr, true);
77
+ if (tag === 1)
78
+ return view.getInt32(ptr + 8, true);
79
+ return defaultVal;
80
+ },
81
+ },
82
+ },
83
+ ];
84
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../../src/builtins/domains/result.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BuiltinDef } from "../builtin-types.js";
2
+ export declare const STRING_BUILTINS: BuiltinDef[];
3
+ //# sourceMappingURL=string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../../src/builtins/domains/string.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItD,eAAO,MAAM,eAAe,EAAE,UAAU,EAoIvC,CAAC"}
@@ -0,0 +1,139 @@
1
+ // =============================================================================
2
+ // String domain — string_length, substring, string_concat, etc.
3
+ // =============================================================================
4
+ import { INT_TYPE, STRING_TYPE, BOOL_TYPE } from "../../ast/type-constants.js";
5
+ import { getMemoryBuffer, writeStringResult } from "../host-helpers.js";
6
+ export const STRING_BUILTINS = [
7
+ {
8
+ name: "string_length",
9
+ type: { kind: "fn_type", params: [STRING_TYPE], effects: ["pure"], returnType: INT_TYPE },
10
+ impl: {
11
+ kind: "host",
12
+ factory: (ctx) => (ptr, len) => {
13
+ const str = ctx.decoder.decode(new Uint8Array(getMemoryBuffer(ctx.state), ptr, len));
14
+ return str.length;
15
+ },
16
+ },
17
+ },
18
+ {
19
+ name: "substring",
20
+ type: { kind: "fn_type", params: [STRING_TYPE, INT_TYPE, INT_TYPE], effects: ["pure"], returnType: STRING_TYPE },
21
+ impl: {
22
+ kind: "host",
23
+ factory: (ctx) => (ptr, len, start, end) => {
24
+ const str = ctx.decoder.decode(new Uint8Array(getMemoryBuffer(ctx.state), ptr, len));
25
+ return writeStringResult(ctx.state, str.substring(start, end), ctx.encoder);
26
+ },
27
+ },
28
+ },
29
+ {
30
+ name: "string_concat",
31
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
32
+ impl: {
33
+ kind: "host",
34
+ factory: (ctx) => (aPtr, aLen, bPtr, bLen) => {
35
+ const buf = getMemoryBuffer(ctx.state);
36
+ const a = ctx.decoder.decode(new Uint8Array(buf, aPtr, aLen));
37
+ const b = ctx.decoder.decode(new Uint8Array(buf, bPtr, bLen));
38
+ return writeStringResult(ctx.state, a + b, ctx.encoder);
39
+ },
40
+ },
41
+ },
42
+ {
43
+ name: "string_indexOf",
44
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["pure"], returnType: INT_TYPE },
45
+ impl: {
46
+ kind: "host",
47
+ factory: (ctx) => (hayPtr, hayLen, needlePtr, needleLen) => {
48
+ const buf = getMemoryBuffer(ctx.state);
49
+ const haystack = ctx.decoder.decode(new Uint8Array(buf, hayPtr, hayLen));
50
+ const needle = ctx.decoder.decode(new Uint8Array(buf, needlePtr, needleLen));
51
+ return haystack.indexOf(needle);
52
+ },
53
+ },
54
+ },
55
+ {
56
+ name: "toUpperCase",
57
+ type: { kind: "fn_type", params: [STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
58
+ impl: {
59
+ kind: "host",
60
+ factory: (ctx) => (ptr, len) => {
61
+ const str = ctx.decoder.decode(new Uint8Array(getMemoryBuffer(ctx.state), ptr, len));
62
+ return writeStringResult(ctx.state, str.toUpperCase(), ctx.encoder);
63
+ },
64
+ },
65
+ },
66
+ {
67
+ name: "toLowerCase",
68
+ type: { kind: "fn_type", params: [STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
69
+ impl: {
70
+ kind: "host",
71
+ factory: (ctx) => (ptr, len) => {
72
+ const str = ctx.decoder.decode(new Uint8Array(getMemoryBuffer(ctx.state), ptr, len));
73
+ return writeStringResult(ctx.state, str.toLowerCase(), ctx.encoder);
74
+ },
75
+ },
76
+ },
77
+ {
78
+ name: "string_trim",
79
+ type: { kind: "fn_type", params: [STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
80
+ impl: {
81
+ kind: "host",
82
+ factory: (ctx) => (ptr, len) => {
83
+ const str = ctx.decoder.decode(new Uint8Array(getMemoryBuffer(ctx.state), ptr, len));
84
+ return writeStringResult(ctx.state, str.trim(), ctx.encoder);
85
+ },
86
+ },
87
+ },
88
+ {
89
+ name: "string_startsWith",
90
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["pure"], returnType: BOOL_TYPE },
91
+ impl: {
92
+ kind: "host",
93
+ factory: (ctx) => (strPtr, strLen, prefixPtr, prefixLen) => {
94
+ const buf = getMemoryBuffer(ctx.state);
95
+ const str = ctx.decoder.decode(new Uint8Array(buf, strPtr, strLen));
96
+ const prefix = ctx.decoder.decode(new Uint8Array(buf, prefixPtr, prefixLen));
97
+ return str.startsWith(prefix) ? 1 : 0;
98
+ },
99
+ },
100
+ },
101
+ {
102
+ name: "string_endsWith",
103
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["pure"], returnType: BOOL_TYPE },
104
+ impl: {
105
+ kind: "host",
106
+ factory: (ctx) => (strPtr, strLen, suffixPtr, suffixLen) => {
107
+ const buf = getMemoryBuffer(ctx.state);
108
+ const str = ctx.decoder.decode(new Uint8Array(buf, strPtr, strLen));
109
+ const suffix = ctx.decoder.decode(new Uint8Array(buf, suffixPtr, suffixLen));
110
+ return str.endsWith(suffix) ? 1 : 0;
111
+ },
112
+ },
113
+ },
114
+ {
115
+ name: "string_contains",
116
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["pure"], returnType: BOOL_TYPE },
117
+ impl: {
118
+ kind: "host",
119
+ factory: (ctx) => (hayPtr, hayLen, needlePtr, needleLen) => {
120
+ const buf = getMemoryBuffer(ctx.state);
121
+ const haystack = ctx.decoder.decode(new Uint8Array(buf, hayPtr, hayLen));
122
+ const needle = ctx.decoder.decode(new Uint8Array(buf, needlePtr, needleLen));
123
+ return haystack.includes(needle) ? 1 : 0;
124
+ },
125
+ },
126
+ },
127
+ {
128
+ name: "string_repeat",
129
+ type: { kind: "fn_type", params: [STRING_TYPE, INT_TYPE], effects: ["pure"], returnType: STRING_TYPE },
130
+ impl: {
131
+ kind: "host",
132
+ factory: (ctx) => (ptr, len, count) => {
133
+ const str = ctx.decoder.decode(new Uint8Array(getMemoryBuffer(ctx.state), ptr, len));
134
+ return writeStringResult(ctx.state, str.repeat(count), ctx.encoder);
135
+ },
136
+ },
137
+ },
138
+ ];
139
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../../src/builtins/domains/string.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BuiltinDef } from "../builtin-types.js";
2
+ export declare const TYPE_CONVERSION_BUILTINS: BuiltinDef[];
3
+ //# sourceMappingURL=type-conversion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-conversion.d.ts","sourceRoot":"","sources":["../../../src/builtins/domains/type-conversion.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItD,eAAO,MAAM,wBAAwB,EAAE,UAAU,EAsChD,CAAC"}
@@ -0,0 +1,42 @@
1
+ // =============================================================================
2
+ // Type conversion domain — intToString, floatToString, boolToString, etc.
3
+ // =============================================================================
4
+ import { INT_TYPE, FLOAT_TYPE, STRING_TYPE, BOOL_TYPE } from "../../ast/type-constants.js";
5
+ import { writeStringResult } from "../host-helpers.js";
6
+ export const TYPE_CONVERSION_BUILTINS = [
7
+ {
8
+ name: "intToString",
9
+ type: { kind: "fn_type", params: [INT_TYPE], effects: ["pure"], returnType: STRING_TYPE },
10
+ impl: {
11
+ kind: "host",
12
+ factory: (ctx) => (value) => writeStringResult(ctx.state, String(value), ctx.encoder),
13
+ },
14
+ },
15
+ {
16
+ name: "floatToString",
17
+ type: { kind: "fn_type", params: [FLOAT_TYPE], effects: ["pure"], returnType: STRING_TYPE },
18
+ impl: {
19
+ kind: "host",
20
+ factory: (ctx) => (value) => writeStringResult(ctx.state, String(value), ctx.encoder),
21
+ },
22
+ },
23
+ {
24
+ name: "boolToString",
25
+ type: { kind: "fn_type", params: [BOOL_TYPE], effects: ["pure"], returnType: STRING_TYPE },
26
+ impl: {
27
+ kind: "host",
28
+ factory: (ctx) => (value) => writeStringResult(ctx.state, value ? "true" : "false", ctx.encoder),
29
+ },
30
+ },
31
+ {
32
+ name: "floatToInt",
33
+ type: { kind: "fn_type", params: [FLOAT_TYPE], effects: ["pure"], returnType: INT_TYPE },
34
+ impl: { kind: "host", factory: () => (value) => (Math.trunc(value) | 0) },
35
+ },
36
+ {
37
+ name: "intToFloat",
38
+ type: { kind: "fn_type", params: [INT_TYPE], effects: ["pure"], returnType: FLOAT_TYPE },
39
+ impl: { kind: "host", factory: () => (value) => value },
40
+ },
41
+ ];
42
+ //# sourceMappingURL=type-conversion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-conversion.js","sourceRoot":"","sources":["../../../src/builtins/domains/type-conversion.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,gFAAgF;AAGhF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAoB,MAAM,oBAAoB,CAAC;AAEzE,MAAM,CAAC,MAAM,wBAAwB,GAAiB;IAClD;QACI,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE;QACzF,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,CAAC,KAAa,EAAU,EAAE,CACrD,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;SAC/D;KACJ;IACD;QACI,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE;QAC3F,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,CAAC,KAAa,EAAU,EAAE,CACrD,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;SAC/D;KACJ;IACD;QACI,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE;QAC1F,IAAI,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,CAAC,KAAa,EAAU,EAAE,CACrD,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;SAC1E;KACJ;IACD;QACI,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE;QACxF,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,KAAa,EAAU,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;KAC5F;IACD;QACI,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE;QACxF,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,EAAE;KAC1E;CACJ,CAAC"}
@@ -0,0 +1,66 @@
1
+ import type { EdictHostAdapter } from "../codegen/host-adapter.js";
2
+ /** Mutable runtime state shared by all host functions during one execution. */
3
+ export interface RuntimeState {
4
+ /** Captured stdout output parts. */
5
+ outputParts: string[];
6
+ /** Late-bound WASM instance — set after instantiation. */
7
+ instance: WasmInstance | null;
8
+ /** Optional sandbox directory for file IO. If unset, readFile/writeFile return Err. */
9
+ sandboxDir?: string;
10
+ }
11
+ interface WasmInstance {
12
+ readonly exports: {
13
+ [key: string]: unknown;
14
+ memory?: {
15
+ readonly buffer: ArrayBuffer;
16
+ };
17
+ };
18
+ }
19
+ /** Typed error thrown when a host-side heap allocation exceeds WASM memory bounds. */
20
+ export declare class EdictOomError extends Error {
21
+ heapUsed: number;
22
+ heapLimit: number;
23
+ constructor(heapUsed: number, heapLimit: number);
24
+ }
25
+ /**
26
+ * Context passed to every host builtin factory function.
27
+ * Bundles state, adapter, and shared encoder/decoder so each domain
28
+ * doesn't need to create its own or take a different arg signature.
29
+ */
30
+ export interface HostContext {
31
+ state: RuntimeState;
32
+ adapter: EdictHostAdapter;
33
+ encoder: TextEncoder;
34
+ decoder: TextDecoder;
35
+ }
36
+ export declare function getMemoryBuffer(state: RuntimeState): ArrayBuffer;
37
+ /**
38
+ * Centralized heap allocator with bounds checking.
39
+ * Allocates `size` bytes (8-byte aligned) from the bump allocator,
40
+ * throwing EdictOomError if the allocation would exceed WASM memory.
41
+ */
42
+ export declare function allocateHeap(state: RuntimeState, size: number): number;
43
+ /**
44
+ * Write a string result into WASM memory at __heap_ptr,
45
+ * advance __heap_ptr (8-byte aligned), set __str_ret_len, and return ptr.
46
+ */
47
+ export declare function writeStringResult(state: RuntimeState, str: string, encoder: TextEncoder): number;
48
+ /**
49
+ * Allocate a new array on the WASM heap: [length: i32][elem0: i32]...
50
+ * Advances __heap_ptr (8-byte aligned) and returns the new array pointer.
51
+ */
52
+ export declare function writeArrayResult(state: RuntimeState, elements: number[]): number;
53
+ /**
54
+ * Allocate a Result value on the WASM heap: [tag: i32][pad(4)][value: i32][pad(4)]
55
+ * tag=0 means Ok, tag=1 means Err. Total size = 16 bytes (matches enum layout).
56
+ * Returns the pointer to the Result pair.
57
+ */
58
+ export declare function writeResultValue(state: RuntimeState, tag: number, value: number): number;
59
+ /**
60
+ * Format a Date using strftime-style tokens.
61
+ * Supported: %Y (year), %m (month 01-12), %d (day 01-31),
62
+ * %H (hour 00-23), %M (min 00-59), %S (sec 00-59), %% (literal %)
63
+ */
64
+ export declare function formatDateString(date: Date, fmt: string): string;
65
+ export {};
66
+ //# sourceMappingURL=host-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-helpers.d.ts","sourceRoot":"","sources":["../../src/builtins/host-helpers.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAMnE,+EAA+E;AAC/E,MAAM,WAAW,YAAY;IACzB,oCAAoC;IACpC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,0DAA0D;IAC1D,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,uFAAuF;IACvF,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,YAAY;IAClB,QAAQ,CAAC,OAAO,EAAE;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QACvB,MAAM,CAAC,EAAE;YAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;SAAE,CAAC;KAC7C,CAAC;CACL;AAED,sFAAsF;AACtF,qBAAa,aAAc,SAAQ,KAAK;IACjB,QAAQ,EAAE,MAAM;IAAS,SAAS,EAAE,MAAM;gBAA1C,QAAQ,EAAE,MAAM,EAAS,SAAS,EAAE,MAAM;CAGhE;AAMD;;;;GAIG;AACH,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;CACxB;AAMD,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,CAEhE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAYtE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAQhG;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAShF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMxF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAwBhE"}