edict-lang 1.2.0 → 1.5.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 (141) hide show
  1. package/dist/ast/nodes.d.ts +3 -3
  2. package/dist/ast/nodes.d.ts.map +1 -1
  3. package/dist/ast/nodes.js +1 -0
  4. package/dist/ast/nodes.js.map +1 -1
  5. package/dist/ast/type-constants.d.ts +12 -0
  6. package/dist/ast/type-constants.d.ts.map +1 -0
  7. package/dist/ast/type-constants.js +16 -0
  8. package/dist/ast/type-constants.js.map +1 -0
  9. package/dist/ast/types.d.ts +1 -1
  10. package/dist/ast/types.d.ts.map +1 -1
  11. package/dist/builtins/builtin-enums.d.ts +12 -0
  12. package/dist/builtins/builtin-enums.d.ts.map +1 -0
  13. package/dist/builtins/builtin-enums.js +45 -0
  14. package/dist/builtins/builtin-enums.js.map +1 -0
  15. package/dist/builtins/builtins.d.ts +24 -0
  16. package/dist/builtins/builtins.d.ts.map +1 -0
  17. package/dist/builtins/builtins.js +691 -0
  18. package/dist/builtins/builtins.js.map +1 -0
  19. package/dist/checker/check.d.ts.map +1 -1
  20. package/dist/checker/check.js +81 -38
  21. package/dist/checker/check.js.map +1 -1
  22. package/dist/checker/type-env.d.ts +2 -0
  23. package/dist/checker/type-env.d.ts.map +1 -1
  24. package/dist/checker/type-env.js +9 -0
  25. package/dist/checker/type-env.js.map +1 -1
  26. package/dist/codegen/browser-host-adapter.d.ts +29 -0
  27. package/dist/codegen/browser-host-adapter.d.ts.map +1 -0
  28. package/dist/codegen/browser-host-adapter.js +51 -0
  29. package/dist/codegen/browser-host-adapter.js.map +1 -0
  30. package/dist/codegen/builtins.d.ts +2 -26
  31. package/dist/codegen/builtins.d.ts.map +1 -1
  32. package/dist/codegen/builtins.js +2 -341
  33. package/dist/codegen/builtins.js.map +1 -1
  34. package/dist/codegen/closures.d.ts +17 -0
  35. package/dist/codegen/closures.d.ts.map +1 -0
  36. package/dist/codegen/closures.js +140 -0
  37. package/dist/codegen/closures.js.map +1 -0
  38. package/dist/codegen/codegen.d.ts +11 -30
  39. package/dist/codegen/codegen.d.ts.map +1 -1
  40. package/dist/codegen/codegen.js +154 -982
  41. package/dist/codegen/codegen.js.map +1 -1
  42. package/dist/codegen/collect-strings.d.ts +4 -0
  43. package/dist/codegen/collect-strings.d.ts.map +1 -0
  44. package/dist/codegen/collect-strings.js +76 -0
  45. package/dist/codegen/collect-strings.js.map +1 -0
  46. package/dist/codegen/compile-calls.d.ts +10 -0
  47. package/dist/codegen/compile-calls.d.ts.map +1 -0
  48. package/dist/codegen/compile-calls.js +344 -0
  49. package/dist/codegen/compile-calls.js.map +1 -0
  50. package/dist/codegen/compile-data.d.ts +22 -0
  51. package/dist/codegen/compile-data.d.ts.map +1 -0
  52. package/dist/codegen/compile-data.js +243 -0
  53. package/dist/codegen/compile-data.js.map +1 -0
  54. package/dist/codegen/compile-match.d.ts +7 -0
  55. package/dist/codegen/compile-match.d.ts.map +1 -0
  56. package/dist/codegen/compile-match.js +195 -0
  57. package/dist/codegen/compile-match.js.map +1 -0
  58. package/dist/codegen/compile-scalars.d.ts +25 -0
  59. package/dist/codegen/compile-scalars.d.ts.map +1 -0
  60. package/dist/codegen/compile-scalars.js +210 -0
  61. package/dist/codegen/compile-scalars.js.map +1 -0
  62. package/dist/codegen/hof-generators.d.ts +39 -0
  63. package/dist/codegen/hof-generators.d.ts.map +1 -0
  64. package/dist/codegen/hof-generators.js +336 -0
  65. package/dist/codegen/hof-generators.js.map +1 -0
  66. package/dist/codegen/host-adapter.d.ts +44 -0
  67. package/dist/codegen/host-adapter.d.ts.map +1 -0
  68. package/dist/codegen/host-adapter.js +9 -0
  69. package/dist/codegen/host-adapter.js.map +1 -0
  70. package/dist/codegen/host-functions.d.ts +35 -0
  71. package/dist/codegen/host-functions.d.ts.map +1 -0
  72. package/dist/codegen/host-functions.js +680 -0
  73. package/dist/codegen/host-functions.js.map +1 -0
  74. package/dist/codegen/imports.d.ts +12 -0
  75. package/dist/codegen/imports.d.ts.map +1 -0
  76. package/dist/codegen/imports.js +162 -0
  77. package/dist/codegen/imports.js.map +1 -0
  78. package/dist/codegen/node-host-adapter.d.ts +35 -0
  79. package/dist/codegen/node-host-adapter.d.ts.map +1 -0
  80. package/dist/codegen/node-host-adapter.js +155 -0
  81. package/dist/codegen/node-host-adapter.js.map +1 -0
  82. package/dist/codegen/runner.d.ts +36 -2
  83. package/dist/codegen/runner.d.ts.map +1 -1
  84. package/dist/codegen/runner.js +146 -271
  85. package/dist/codegen/runner.js.map +1 -1
  86. package/dist/codegen/types.d.ts +91 -0
  87. package/dist/codegen/types.d.ts.map +1 -0
  88. package/dist/codegen/types.js +63 -0
  89. package/dist/codegen/types.js.map +1 -0
  90. package/dist/compact/expand.d.ts +25 -0
  91. package/dist/compact/expand.d.ts.map +1 -0
  92. package/dist/compact/expand.js +198 -0
  93. package/dist/compact/expand.js.map +1 -0
  94. package/dist/compile.d.ts +2 -1
  95. package/dist/compile.d.ts.map +1 -1
  96. package/dist/compile.js +1 -1
  97. package/dist/compile.js.map +1 -1
  98. package/dist/contracts/translate.js.map +1 -1
  99. package/dist/effects/call-graph.d.ts.map +1 -1
  100. package/dist/effects/call-graph.js +6 -2
  101. package/dist/effects/call-graph.js.map +1 -1
  102. package/dist/errors/error-catalog.d.ts +1 -1
  103. package/dist/errors/error-catalog.d.ts.map +1 -1
  104. package/dist/errors/error-catalog.js +119 -0
  105. package/dist/errors/error-catalog.js.map +1 -1
  106. package/dist/errors/structured-errors.d.ts +6 -1
  107. package/dist/errors/structured-errors.d.ts.map +1 -1
  108. package/dist/errors/structured-errors.js +3 -0
  109. package/dist/errors/structured-errors.js.map +1 -1
  110. package/dist/index.d.ts +17 -9
  111. package/dist/index.d.ts.map +1 -1
  112. package/dist/index.js +24 -10
  113. package/dist/index.js.map +1 -1
  114. package/dist/lint/lint.d.ts +9 -0
  115. package/dist/lint/lint.d.ts.map +1 -0
  116. package/dist/lint/lint.js +354 -0
  117. package/dist/lint/lint.js.map +1 -0
  118. package/dist/lint/warnings.d.ts +54 -0
  119. package/dist/lint/warnings.d.ts.map +1 -0
  120. package/dist/lint/warnings.js +39 -0
  121. package/dist/lint/warnings.js.map +1 -0
  122. package/dist/mcp/create-server.d.ts.map +1 -1
  123. package/dist/mcp/create-server.js +66 -5
  124. package/dist/mcp/create-server.js.map +1 -1
  125. package/dist/mcp/handlers.d.ts +18 -4
  126. package/dist/mcp/handlers.d.ts.map +1 -1
  127. package/dist/mcp/handlers.js +54 -12
  128. package/dist/mcp/handlers.js.map +1 -1
  129. package/dist/mcp/prompts.d.ts +17 -0
  130. package/dist/mcp/prompts.d.ts.map +1 -0
  131. package/dist/mcp/prompts.js +181 -0
  132. package/dist/mcp/prompts.js.map +1 -0
  133. package/dist/mcp/server.js +1 -4
  134. package/dist/mcp/server.js.map +1 -1
  135. package/dist/resolver/resolve.d.ts.map +1 -1
  136. package/dist/resolver/resolve.js +22 -8
  137. package/dist/resolver/resolve.js.map +1 -1
  138. package/dist/validator/node-validators.d.ts.map +1 -1
  139. package/dist/validator/node-validators.js +34 -5
  140. package/dist/validator/node-validators.js.map +1 -1
  141. package/package.json +4 -2
@@ -0,0 +1,691 @@
1
+ // =============================================================================
2
+ // Builtins — Built-in functions available to all Edict programs
3
+ // =============================================================================
4
+ // These are not defined in user code. The resolver and type checker
5
+ // register them automatically. The codegen imports them from the host.
6
+ import { INT_TYPE, INT64_TYPE, FLOAT_TYPE, STRING_TYPE, BOOL_TYPE, ARRAY_INT_TYPE, OPTION_INT_TYPE, RESULT_INT_TYPE, RESULT_STRING_TYPE } from "../ast/type-constants.js";
7
+ /**
8
+ * All built-in functions.
9
+ *
10
+ * `print` takes a String and returns a String (the value printed).
11
+ * At the WASM level, it's imported as host.print(ptr, len) → ptr
12
+ * (returns the same pointer for passthrough).
13
+ */
14
+ export const BUILTIN_FUNCTIONS = new Map([
15
+ [
16
+ "print",
17
+ {
18
+ type: {
19
+ kind: "fn_type",
20
+ params: [STRING_TYPE],
21
+ effects: ["io"],
22
+ returnType: STRING_TYPE,
23
+ },
24
+ wasmImport: ["host", "print"],
25
+ },
26
+ ],
27
+ [
28
+ "string_replace",
29
+ {
30
+ type: {
31
+ kind: "fn_type",
32
+ params: [STRING_TYPE, STRING_TYPE, STRING_TYPE],
33
+ effects: ["pure"],
34
+ returnType: STRING_TYPE,
35
+ },
36
+ wasmImport: ["host", "string_replace"],
37
+ },
38
+ ],
39
+ // =========================================================================
40
+ // String builtins — pure, string handling needed
41
+ // =========================================================================
42
+ [
43
+ "string_length",
44
+ {
45
+ type: { kind: "fn_type", params: [STRING_TYPE], effects: ["pure"], returnType: INT_TYPE },
46
+ wasmImport: ["host", "string_length"],
47
+ },
48
+ ],
49
+ [
50
+ "substring",
51
+ {
52
+ type: { kind: "fn_type", params: [STRING_TYPE, INT_TYPE, INT_TYPE], effects: ["pure"], returnType: STRING_TYPE },
53
+ wasmImport: ["host", "substring"],
54
+ },
55
+ ],
56
+ [
57
+ "string_concat",
58
+ {
59
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
60
+ wasmImport: ["host", "string_concat"],
61
+ },
62
+ ],
63
+ [
64
+ "string_indexOf",
65
+ {
66
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["pure"], returnType: INT_TYPE },
67
+ wasmImport: ["host", "string_indexOf"],
68
+ },
69
+ ],
70
+ [
71
+ "toUpperCase",
72
+ {
73
+ type: { kind: "fn_type", params: [STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
74
+ wasmImport: ["host", "toUpperCase"],
75
+ },
76
+ ],
77
+ [
78
+ "toLowerCase",
79
+ {
80
+ type: { kind: "fn_type", params: [STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
81
+ wasmImport: ["host", "toLowerCase"],
82
+ },
83
+ ],
84
+ [
85
+ "string_trim",
86
+ {
87
+ type: { kind: "fn_type", params: [STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
88
+ wasmImport: ["host", "string_trim"],
89
+ },
90
+ ],
91
+ [
92
+ "string_startsWith",
93
+ {
94
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["pure"], returnType: BOOL_TYPE },
95
+ wasmImport: ["host", "string_startsWith"],
96
+ },
97
+ ],
98
+ [
99
+ "string_endsWith",
100
+ {
101
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["pure"], returnType: BOOL_TYPE },
102
+ wasmImport: ["host", "string_endsWith"],
103
+ },
104
+ ],
105
+ [
106
+ "string_contains",
107
+ {
108
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["pure"], returnType: BOOL_TYPE },
109
+ wasmImport: ["host", "string_contains"],
110
+ },
111
+ ],
112
+ [
113
+ "string_repeat",
114
+ {
115
+ type: { kind: "fn_type", params: [STRING_TYPE, INT_TYPE], effects: ["pure"], returnType: STRING_TYPE },
116
+ wasmImport: ["host", "string_repeat"],
117
+ },
118
+ ],
119
+ // =========================================================================
120
+ // Math builtins — pure, no string handling needed
121
+ // =========================================================================
122
+ [
123
+ "abs",
124
+ {
125
+ type: { kind: "fn_type", params: [INT_TYPE], effects: ["pure"], returnType: INT_TYPE },
126
+ wasmImport: ["host", "abs"],
127
+ },
128
+ ],
129
+ [
130
+ "min",
131
+ {
132
+ type: { kind: "fn_type", params: [INT_TYPE, INT_TYPE], effects: ["pure"], returnType: INT_TYPE },
133
+ wasmImport: ["host", "min"],
134
+ },
135
+ ],
136
+ [
137
+ "max",
138
+ {
139
+ type: { kind: "fn_type", params: [INT_TYPE, INT_TYPE], effects: ["pure"], returnType: INT_TYPE },
140
+ wasmImport: ["host", "max"],
141
+ },
142
+ ],
143
+ [
144
+ "pow",
145
+ {
146
+ type: { kind: "fn_type", params: [INT_TYPE, INT_TYPE], effects: ["pure"], returnType: INT_TYPE },
147
+ wasmImport: ["host", "pow"],
148
+ },
149
+ ],
150
+ [
151
+ "sqrt",
152
+ {
153
+ type: { kind: "fn_type", params: [FLOAT_TYPE], effects: ["pure"], returnType: FLOAT_TYPE },
154
+ wasmImport: ["host", "sqrt"],
155
+ },
156
+ ],
157
+ [
158
+ "floor",
159
+ {
160
+ type: { kind: "fn_type", params: [FLOAT_TYPE], effects: ["pure"], returnType: INT_TYPE },
161
+ wasmImport: ["host", "floor"],
162
+ },
163
+ ],
164
+ [
165
+ "ceil",
166
+ {
167
+ type: { kind: "fn_type", params: [FLOAT_TYPE], effects: ["pure"], returnType: INT_TYPE },
168
+ wasmImport: ["host", "ceil"],
169
+ },
170
+ ],
171
+ [
172
+ "round",
173
+ {
174
+ type: { kind: "fn_type", params: [FLOAT_TYPE], effects: ["pure"], returnType: INT_TYPE },
175
+ wasmImport: ["host", "round"],
176
+ },
177
+ ],
178
+ // =========================================================================
179
+ // Type conversion builtins — pure, cross-type conversion
180
+ // =========================================================================
181
+ [
182
+ "intToString",
183
+ {
184
+ type: { kind: "fn_type", params: [INT_TYPE], effects: ["pure"], returnType: STRING_TYPE },
185
+ wasmImport: ["host", "intToString"],
186
+ },
187
+ ],
188
+ [
189
+ "floatToString",
190
+ {
191
+ type: { kind: "fn_type", params: [FLOAT_TYPE], effects: ["pure"], returnType: STRING_TYPE },
192
+ wasmImport: ["host", "floatToString"],
193
+ },
194
+ ],
195
+ [
196
+ "boolToString",
197
+ {
198
+ type: { kind: "fn_type", params: [BOOL_TYPE], effects: ["pure"], returnType: STRING_TYPE },
199
+ wasmImport: ["host", "boolToString"],
200
+ },
201
+ ],
202
+ [
203
+ "floatToInt",
204
+ {
205
+ type: { kind: "fn_type", params: [FLOAT_TYPE], effects: ["pure"], returnType: INT_TYPE },
206
+ wasmImport: ["host", "floatToInt"],
207
+ },
208
+ ],
209
+ [
210
+ "intToFloat",
211
+ {
212
+ type: { kind: "fn_type", params: [INT_TYPE], effects: ["pure"], returnType: FLOAT_TYPE },
213
+ wasmImport: ["host", "intToFloat"],
214
+ },
215
+ ],
216
+ // =========================================================================
217
+ // Int64 conversion builtins — widen/narrow between Int and Int64
218
+ // =========================================================================
219
+ [
220
+ "intToInt64",
221
+ {
222
+ type: { kind: "fn_type", params: [INT_TYPE], effects: ["pure"], returnType: INT64_TYPE },
223
+ wasmImport: ["host", "intToInt64"],
224
+ },
225
+ ],
226
+ [
227
+ "int64ToInt",
228
+ {
229
+ type: { kind: "fn_type", params: [INT64_TYPE], effects: ["pure"], returnType: INT_TYPE },
230
+ wasmImport: ["host", "int64ToInt"],
231
+ },
232
+ ],
233
+ [
234
+ "int64ToFloat",
235
+ {
236
+ type: { kind: "fn_type", params: [INT64_TYPE], effects: ["pure"], returnType: FLOAT_TYPE },
237
+ wasmImport: ["host", "int64ToFloat"],
238
+ },
239
+ ],
240
+ [
241
+ "int64ToString",
242
+ {
243
+ type: { kind: "fn_type", params: [INT64_TYPE], effects: ["pure"], returnType: STRING_TYPE },
244
+ wasmImport: ["host", "int64ToString"],
245
+ },
246
+ ],
247
+ // =========================================================================
248
+ // Array builtins — pure, operate on heap-allocated [length][elem0][elem1]...
249
+ // =========================================================================
250
+ [
251
+ "array_length",
252
+ {
253
+ type: { kind: "fn_type", params: [ARRAY_INT_TYPE], effects: ["pure"], returnType: INT_TYPE },
254
+ wasmImport: ["host", "array_length"],
255
+ },
256
+ ],
257
+ [
258
+ "array_get",
259
+ {
260
+ type: { kind: "fn_type", params: [ARRAY_INT_TYPE, INT_TYPE], effects: ["pure"], returnType: INT_TYPE },
261
+ wasmImport: ["host", "array_get"],
262
+ },
263
+ ],
264
+ [
265
+ "array_set",
266
+ {
267
+ type: { kind: "fn_type", params: [ARRAY_INT_TYPE, INT_TYPE, INT_TYPE], effects: ["pure"], returnType: ARRAY_INT_TYPE },
268
+ wasmImport: ["host", "array_set"],
269
+ },
270
+ ],
271
+ [
272
+ "array_push",
273
+ {
274
+ type: { kind: "fn_type", params: [ARRAY_INT_TYPE, INT_TYPE], effects: ["pure"], returnType: ARRAY_INT_TYPE },
275
+ wasmImport: ["host", "array_push"],
276
+ },
277
+ ],
278
+ [
279
+ "array_pop",
280
+ {
281
+ type: { kind: "fn_type", params: [ARRAY_INT_TYPE], effects: ["pure"], returnType: ARRAY_INT_TYPE },
282
+ wasmImport: ["host", "array_pop"],
283
+ },
284
+ ],
285
+ [
286
+ "array_concat",
287
+ {
288
+ type: { kind: "fn_type", params: [ARRAY_INT_TYPE, ARRAY_INT_TYPE], effects: ["pure"], returnType: ARRAY_INT_TYPE },
289
+ wasmImport: ["host", "array_concat"],
290
+ },
291
+ ],
292
+ [
293
+ "array_slice",
294
+ {
295
+ type: { kind: "fn_type", params: [ARRAY_INT_TYPE, INT_TYPE, INT_TYPE], effects: ["pure"], returnType: ARRAY_INT_TYPE },
296
+ wasmImport: ["host", "array_slice"],
297
+ },
298
+ ],
299
+ [
300
+ "array_isEmpty",
301
+ {
302
+ type: { kind: "fn_type", params: [ARRAY_INT_TYPE], effects: ["pure"], returnType: BOOL_TYPE },
303
+ wasmImport: ["host", "array_isEmpty"],
304
+ },
305
+ ],
306
+ [
307
+ "array_contains",
308
+ {
309
+ type: { kind: "fn_type", params: [ARRAY_INT_TYPE, INT_TYPE], effects: ["pure"], returnType: BOOL_TYPE },
310
+ wasmImport: ["host", "array_contains"],
311
+ },
312
+ ],
313
+ [
314
+ "array_reverse",
315
+ {
316
+ type: { kind: "fn_type", params: [ARRAY_INT_TYPE], effects: ["pure"], returnType: ARRAY_INT_TYPE },
317
+ wasmImport: ["host", "array_reverse"],
318
+ },
319
+ ],
320
+ // =========================================================================
321
+ // HOF array builtins — WASM-native (not host-imported)
322
+ // These use call_indirect to invoke closure arguments, so they must be
323
+ // generated as WASM functions in codegen, not imported from the host.
324
+ // wasmImport sentinel ["__wasm", "..."] signals codegen to skip import.
325
+ // =========================================================================
326
+ [
327
+ "array_map",
328
+ {
329
+ type: {
330
+ kind: "fn_type",
331
+ params: [
332
+ ARRAY_INT_TYPE,
333
+ { kind: "fn_type", params: [INT_TYPE], effects: [], returnType: INT_TYPE },
334
+ ],
335
+ effects: ["pure"],
336
+ returnType: ARRAY_INT_TYPE,
337
+ },
338
+ wasmImport: ["__wasm", "array_map"],
339
+ },
340
+ ],
341
+ [
342
+ "array_filter",
343
+ {
344
+ type: {
345
+ kind: "fn_type",
346
+ params: [
347
+ ARRAY_INT_TYPE,
348
+ { kind: "fn_type", params: [INT_TYPE], effects: [], returnType: BOOL_TYPE },
349
+ ],
350
+ effects: ["pure"],
351
+ returnType: ARRAY_INT_TYPE,
352
+ },
353
+ wasmImport: ["__wasm", "array_filter"],
354
+ },
355
+ ],
356
+ [
357
+ "array_reduce",
358
+ {
359
+ type: {
360
+ kind: "fn_type",
361
+ params: [
362
+ ARRAY_INT_TYPE,
363
+ INT_TYPE,
364
+ { kind: "fn_type", params: [INT_TYPE, INT_TYPE], effects: [], returnType: INT_TYPE },
365
+ ],
366
+ effects: ["pure"],
367
+ returnType: INT_TYPE,
368
+ },
369
+ wasmImport: ["__wasm", "array_reduce"],
370
+ },
371
+ ],
372
+ [
373
+ "array_find",
374
+ {
375
+ type: {
376
+ kind: "fn_type",
377
+ params: [
378
+ ARRAY_INT_TYPE,
379
+ { kind: "fn_type", params: [INT_TYPE], effects: [], returnType: BOOL_TYPE },
380
+ ],
381
+ effects: ["pure"],
382
+ returnType: OPTION_INT_TYPE,
383
+ },
384
+ wasmImport: ["__wasm", "array_find"],
385
+ },
386
+ ],
387
+ [
388
+ "array_sort",
389
+ {
390
+ type: {
391
+ kind: "fn_type",
392
+ params: [
393
+ ARRAY_INT_TYPE,
394
+ { kind: "fn_type", params: [INT_TYPE, INT_TYPE], effects: [], returnType: INT_TYPE },
395
+ ],
396
+ effects: ["pure"],
397
+ returnType: ARRAY_INT_TYPE,
398
+ },
399
+ wasmImport: ["__wasm", "array_sort"],
400
+ },
401
+ ],
402
+ // =========================================================================
403
+ // Option builtins — operate on heap-allocated [tag: i32][value: i32]
404
+ // =========================================================================
405
+ [
406
+ "isSome",
407
+ {
408
+ type: { kind: "fn_type", params: [OPTION_INT_TYPE], effects: ["pure"], returnType: BOOL_TYPE },
409
+ wasmImport: ["host", "isSome"],
410
+ },
411
+ ],
412
+ [
413
+ "isNone",
414
+ {
415
+ type: { kind: "fn_type", params: [OPTION_INT_TYPE], effects: ["pure"], returnType: BOOL_TYPE },
416
+ wasmImport: ["host", "isNone"],
417
+ },
418
+ ],
419
+ [
420
+ "unwrap",
421
+ {
422
+ type: { kind: "fn_type", params: [OPTION_INT_TYPE], effects: ["fails"], returnType: INT_TYPE },
423
+ wasmImport: ["host", "unwrap"],
424
+ },
425
+ ],
426
+ [
427
+ "unwrapOr",
428
+ {
429
+ type: { kind: "fn_type", params: [OPTION_INT_TYPE, INT_TYPE], effects: ["pure"], returnType: INT_TYPE },
430
+ wasmImport: ["host", "unwrapOr"],
431
+ },
432
+ ],
433
+ // =========================================================================
434
+ // Result builtins — operate on heap-allocated [tag: i32][value_or_error: i32]
435
+ // Ok = tag 0, Err = tag 1
436
+ // =========================================================================
437
+ [
438
+ "isOk",
439
+ {
440
+ type: { kind: "fn_type", params: [RESULT_INT_TYPE], effects: ["pure"], returnType: BOOL_TYPE },
441
+ wasmImport: ["host", "isOk"],
442
+ },
443
+ ],
444
+ [
445
+ "isErr",
446
+ {
447
+ type: { kind: "fn_type", params: [RESULT_INT_TYPE], effects: ["pure"], returnType: BOOL_TYPE },
448
+ wasmImport: ["host", "isErr"],
449
+ },
450
+ ],
451
+ [
452
+ "unwrapOk",
453
+ {
454
+ type: { kind: "fn_type", params: [RESULT_INT_TYPE], effects: ["fails"], returnType: INT_TYPE },
455
+ wasmImport: ["host", "unwrapOk"],
456
+ },
457
+ ],
458
+ [
459
+ "unwrapErr",
460
+ {
461
+ type: { kind: "fn_type", params: [RESULT_INT_TYPE], effects: ["fails"], returnType: INT_TYPE },
462
+ wasmImport: ["host", "unwrapErr"],
463
+ },
464
+ ],
465
+ [
466
+ "unwrapOkOr",
467
+ {
468
+ type: { kind: "fn_type", params: [RESULT_INT_TYPE, INT_TYPE], effects: ["pure"], returnType: INT_TYPE },
469
+ wasmImport: ["host", "unwrapOkOr"],
470
+ },
471
+ ],
472
+ [
473
+ "unwrapErrOr",
474
+ {
475
+ type: { kind: "fn_type", params: [RESULT_INT_TYPE, INT_TYPE], effects: ["pure"], returnType: INT_TYPE },
476
+ wasmImport: ["host", "unwrapErrOr"],
477
+ },
478
+ ],
479
+ // =========================================================================
480
+ // JSON builtins — parse/stringify for string-based JSON manipulation
481
+ // =========================================================================
482
+ [
483
+ "jsonParse",
484
+ {
485
+ type: { kind: "fn_type", params: [STRING_TYPE], effects: ["pure"], returnType: RESULT_STRING_TYPE },
486
+ wasmImport: ["host", "jsonParse"],
487
+ },
488
+ ],
489
+ [
490
+ "jsonStringify",
491
+ {
492
+ type: { kind: "fn_type", params: [STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
493
+ wasmImport: ["host", "jsonStringify"],
494
+ },
495
+ ],
496
+ // =========================================================================
497
+ // Random builtins — non-deterministic, use `reads` effect
498
+ // =========================================================================
499
+ [
500
+ "randomInt",
501
+ {
502
+ type: { kind: "fn_type", params: [INT_TYPE, INT_TYPE], effects: ["reads"], returnType: INT_TYPE },
503
+ wasmImport: ["host", "randomInt"],
504
+ },
505
+ ],
506
+ [
507
+ "randomFloat",
508
+ {
509
+ type: { kind: "fn_type", params: [], effects: ["reads"], returnType: FLOAT_TYPE },
510
+ wasmImport: ["host", "randomFloat"],
511
+ },
512
+ ],
513
+ [
514
+ "randomUuid",
515
+ {
516
+ type: { kind: "fn_type", params: [], effects: ["reads"], returnType: STRING_TYPE },
517
+ wasmImport: ["host", "randomUuid"],
518
+ },
519
+ ],
520
+ // =========================================================================
521
+ // Date/time builtins — timestamps, formatting, parsing, and differences
522
+ // =========================================================================
523
+ [
524
+ "now",
525
+ {
526
+ type: { kind: "fn_type", params: [], effects: ["reads"], returnType: INT64_TYPE },
527
+ wasmImport: ["host", "now"],
528
+ },
529
+ ],
530
+ [
531
+ "formatDate",
532
+ {
533
+ type: { kind: "fn_type", params: [INT64_TYPE, STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
534
+ wasmImport: ["host", "formatDate"],
535
+ },
536
+ ],
537
+ [
538
+ "parseDate",
539
+ {
540
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["fails"], returnType: INT64_TYPE },
541
+ wasmImport: ["host", "parseDate"],
542
+ },
543
+ ],
544
+ [
545
+ "diffMs",
546
+ {
547
+ type: { kind: "fn_type", params: [INT64_TYPE, INT64_TYPE], effects: ["pure"], returnType: INT64_TYPE },
548
+ wasmImport: ["host", "diffMs"],
549
+ },
550
+ ],
551
+ // =========================================================================
552
+ // Regex builtins — pattern matching, extraction, and replacement
553
+ // =========================================================================
554
+ [
555
+ "regexTest",
556
+ {
557
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["pure"], returnType: BOOL_TYPE },
558
+ wasmImport: ["host", "regexTest"],
559
+ },
560
+ ],
561
+ [
562
+ "regexMatch",
563
+ {
564
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
565
+ wasmImport: ["host", "regexMatch"],
566
+ },
567
+ ],
568
+ [
569
+ "regexReplace",
570
+ {
571
+ type: {
572
+ kind: "fn_type",
573
+ params: [STRING_TYPE, STRING_TYPE, STRING_TYPE],
574
+ effects: ["pure"],
575
+ returnType: STRING_TYPE,
576
+ },
577
+ wasmImport: ["host", "regexReplace"],
578
+ },
579
+ ],
580
+ // =========================================================================
581
+ // Crypto hashing builtins — pure, deterministic hash computation
582
+ // =========================================================================
583
+ [
584
+ "sha256",
585
+ {
586
+ type: { kind: "fn_type", params: [STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
587
+ wasmImport: ["host", "sha256"],
588
+ },
589
+ ],
590
+ [
591
+ "md5",
592
+ {
593
+ type: { kind: "fn_type", params: [STRING_TYPE], effects: ["pure"], returnType: STRING_TYPE },
594
+ wasmImport: ["host", "md5"],
595
+ },
596
+ ],
597
+ [
598
+ "hmac",
599
+ {
600
+ type: {
601
+ kind: "fn_type",
602
+ params: [STRING_TYPE, STRING_TYPE, STRING_TYPE],
603
+ effects: ["pure"],
604
+ returnType: STRING_TYPE,
605
+ },
606
+ wasmImport: ["host", "hmac"],
607
+ },
608
+ ],
609
+ // =========================================================================
610
+ // HTTP client builtins — network IO, returns Result<String, String>
611
+ // =========================================================================
612
+ [
613
+ "httpGet",
614
+ {
615
+ type: { kind: "fn_type", params: [STRING_TYPE], effects: ["io"], returnType: RESULT_STRING_TYPE },
616
+ wasmImport: ["host", "httpGet"],
617
+ },
618
+ ],
619
+ [
620
+ "httpPost",
621
+ {
622
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["io"], returnType: RESULT_STRING_TYPE },
623
+ wasmImport: ["host", "httpPost"],
624
+ },
625
+ ],
626
+ [
627
+ "httpPut",
628
+ {
629
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["io"], returnType: RESULT_STRING_TYPE },
630
+ wasmImport: ["host", "httpPut"],
631
+ },
632
+ ],
633
+ [
634
+ "httpDelete",
635
+ {
636
+ type: { kind: "fn_type", params: [STRING_TYPE], effects: ["io"], returnType: RESULT_STRING_TYPE },
637
+ wasmImport: ["host", "httpDelete"],
638
+ },
639
+ ],
640
+ // =========================================================================
641
+ // IO builtins — filesystem, environment, process control
642
+ // =========================================================================
643
+ [
644
+ "readFile",
645
+ {
646
+ type: { kind: "fn_type", params: [STRING_TYPE], effects: ["io"], returnType: RESULT_STRING_TYPE },
647
+ wasmImport: ["host", "readFile"],
648
+ },
649
+ ],
650
+ [
651
+ "writeFile",
652
+ {
653
+ type: { kind: "fn_type", params: [STRING_TYPE, STRING_TYPE], effects: ["io"], returnType: RESULT_STRING_TYPE },
654
+ wasmImport: ["host", "writeFile"],
655
+ },
656
+ ],
657
+ [
658
+ "env",
659
+ {
660
+ type: { kind: "fn_type", params: [STRING_TYPE], effects: ["reads"], returnType: STRING_TYPE },
661
+ wasmImport: ["host", "env"],
662
+ },
663
+ ],
664
+ [
665
+ "args",
666
+ {
667
+ type: { kind: "fn_type", params: [], effects: ["reads"], returnType: STRING_TYPE },
668
+ wasmImport: ["host", "args"],
669
+ },
670
+ ],
671
+ [
672
+ "exit",
673
+ {
674
+ type: { kind: "fn_type", params: [INT_TYPE], effects: ["io"], returnType: INT_TYPE },
675
+ wasmImport: ["host", "exit"],
676
+ },
677
+ ],
678
+ ]);
679
+ /**
680
+ * Check if a name refers to a built-in function.
681
+ */
682
+ export function isBuiltin(name) {
683
+ return BUILTIN_FUNCTIONS.has(name);
684
+ }
685
+ /**
686
+ * Get the built-in function definition, or undefined.
687
+ */
688
+ export function getBuiltin(name) {
689
+ return BUILTIN_FUNCTIONS.get(name);
690
+ }
691
+ //# sourceMappingURL=builtins.js.map