@grimoirelabs/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/dist/builders/expressions.d.ts +33 -0
  2. package/dist/builders/expressions.d.ts.map +1 -0
  3. package/dist/builders/expressions.js +57 -0
  4. package/dist/builders/expressions.js.map +1 -0
  5. package/dist/builders/index.d.ts +44 -0
  6. package/dist/builders/index.d.ts.map +1 -0
  7. package/dist/builders/index.js +32 -0
  8. package/dist/builders/index.js.map +1 -0
  9. package/dist/builders/spell-builder.d.ts +124 -0
  10. package/dist/builders/spell-builder.d.ts.map +1 -0
  11. package/dist/builders/spell-builder.js +299 -0
  12. package/dist/builders/spell-builder.js.map +1 -0
  13. package/dist/builders/step-builder.d.ts +212 -0
  14. package/dist/builders/step-builder.d.ts.map +1 -0
  15. package/dist/builders/step-builder.js +499 -0
  16. package/dist/builders/step-builder.js.map +1 -0
  17. package/dist/compiler/expression-parser.d.ts +14 -0
  18. package/dist/compiler/expression-parser.d.ts.map +1 -0
  19. package/dist/compiler/expression-parser.js +460 -0
  20. package/dist/compiler/expression-parser.js.map +1 -0
  21. package/dist/compiler/grimoire/ast.d.ts +450 -0
  22. package/dist/compiler/grimoire/ast.d.ts.map +1 -0
  23. package/dist/compiler/grimoire/ast.js +19 -0
  24. package/dist/compiler/grimoire/ast.js.map +1 -0
  25. package/dist/compiler/grimoire/errors.d.ts +65 -0
  26. package/dist/compiler/grimoire/errors.d.ts.map +1 -0
  27. package/dist/compiler/grimoire/errors.js +86 -0
  28. package/dist/compiler/grimoire/errors.js.map +1 -0
  29. package/dist/compiler/grimoire/index.d.ts +24 -0
  30. package/dist/compiler/grimoire/index.d.ts.map +1 -0
  31. package/dist/compiler/grimoire/index.js +63 -0
  32. package/dist/compiler/grimoire/index.js.map +1 -0
  33. package/dist/compiler/grimoire/parser.d.ts +135 -0
  34. package/dist/compiler/grimoire/parser.d.ts.map +1 -0
  35. package/dist/compiler/grimoire/parser.js +2148 -0
  36. package/dist/compiler/grimoire/parser.js.map +1 -0
  37. package/dist/compiler/grimoire/tokenizer.d.ts +59 -0
  38. package/dist/compiler/grimoire/tokenizer.d.ts.map +1 -0
  39. package/dist/compiler/grimoire/tokenizer.js +509 -0
  40. package/dist/compiler/grimoire/tokenizer.js.map +1 -0
  41. package/dist/compiler/grimoire/transformer.d.ts +71 -0
  42. package/dist/compiler/grimoire/transformer.d.ts.map +1 -0
  43. package/dist/compiler/grimoire/transformer.js +1011 -0
  44. package/dist/compiler/grimoire/transformer.js.map +1 -0
  45. package/dist/compiler/index.d.ts +45 -0
  46. package/dist/compiler/index.d.ts.map +1 -0
  47. package/dist/compiler/index.js +97 -0
  48. package/dist/compiler/index.js.map +1 -0
  49. package/dist/compiler/ir-generator.d.ts +16 -0
  50. package/dist/compiler/ir-generator.d.ts.map +1 -0
  51. package/dist/compiler/ir-generator.js +997 -0
  52. package/dist/compiler/ir-generator.js.map +1 -0
  53. package/dist/compiler/validator.d.ts +15 -0
  54. package/dist/compiler/validator.d.ts.map +1 -0
  55. package/dist/compiler/validator.js +401 -0
  56. package/dist/compiler/validator.js.map +1 -0
  57. package/dist/index.d.ts +16 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +17 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/runtime/circuit-breaker.d.ts +59 -0
  62. package/dist/runtime/circuit-breaker.d.ts.map +1 -0
  63. package/dist/runtime/circuit-breaker.js +155 -0
  64. package/dist/runtime/circuit-breaker.js.map +1 -0
  65. package/dist/runtime/context.d.ts +92 -0
  66. package/dist/runtime/context.d.ts.map +1 -0
  67. package/dist/runtime/context.js +219 -0
  68. package/dist/runtime/context.js.map +1 -0
  69. package/dist/runtime/error-classifier.d.ts +16 -0
  70. package/dist/runtime/error-classifier.d.ts.map +1 -0
  71. package/dist/runtime/error-classifier.js +38 -0
  72. package/dist/runtime/error-classifier.js.map +1 -0
  73. package/dist/runtime/expression-evaluator.d.ts +36 -0
  74. package/dist/runtime/expression-evaluator.d.ts.map +1 -0
  75. package/dist/runtime/expression-evaluator.js +391 -0
  76. package/dist/runtime/expression-evaluator.js.map +1 -0
  77. package/dist/runtime/index.d.ts +12 -0
  78. package/dist/runtime/index.d.ts.map +1 -0
  79. package/dist/runtime/index.js +11 -0
  80. package/dist/runtime/index.js.map +1 -0
  81. package/dist/runtime/interpreter.d.ts +59 -0
  82. package/dist/runtime/interpreter.d.ts.map +1 -0
  83. package/dist/runtime/interpreter.js +414 -0
  84. package/dist/runtime/interpreter.js.map +1 -0
  85. package/dist/runtime/skills/registry.d.ts +11 -0
  86. package/dist/runtime/skills/registry.d.ts.map +1 -0
  87. package/dist/runtime/skills/registry.js +73 -0
  88. package/dist/runtime/skills/registry.js.map +1 -0
  89. package/dist/runtime/sqlite-state-store.d.ts +28 -0
  90. package/dist/runtime/sqlite-state-store.d.ts.map +1 -0
  91. package/dist/runtime/sqlite-state-store.js +180 -0
  92. package/dist/runtime/sqlite-state-store.js.map +1 -0
  93. package/dist/runtime/state-store.d.ts +52 -0
  94. package/dist/runtime/state-store.d.ts.map +1 -0
  95. package/dist/runtime/state-store.js +32 -0
  96. package/dist/runtime/state-store.js.map +1 -0
  97. package/dist/runtime/steps/action.d.ts +17 -0
  98. package/dist/runtime/steps/action.d.ts.map +1 -0
  99. package/dist/runtime/steps/action.js +430 -0
  100. package/dist/runtime/steps/action.js.map +1 -0
  101. package/dist/runtime/steps/advisory.d.ts +28 -0
  102. package/dist/runtime/steps/advisory.d.ts.map +1 -0
  103. package/dist/runtime/steps/advisory.js +209 -0
  104. package/dist/runtime/steps/advisory.js.map +1 -0
  105. package/dist/runtime/steps/compute.d.ts +9 -0
  106. package/dist/runtime/steps/compute.d.ts.map +1 -0
  107. package/dist/runtime/steps/compute.js +74 -0
  108. package/dist/runtime/steps/compute.js.map +1 -0
  109. package/dist/runtime/steps/conditional.d.ts +14 -0
  110. package/dist/runtime/steps/conditional.d.ts.map +1 -0
  111. package/dist/runtime/steps/conditional.js +58 -0
  112. package/dist/runtime/steps/conditional.js.map +1 -0
  113. package/dist/runtime/steps/emit.d.ts +9 -0
  114. package/dist/runtime/steps/emit.d.ts.map +1 -0
  115. package/dist/runtime/steps/emit.js +70 -0
  116. package/dist/runtime/steps/emit.js.map +1 -0
  117. package/dist/runtime/steps/halt.d.ts +9 -0
  118. package/dist/runtime/steps/halt.d.ts.map +1 -0
  119. package/dist/runtime/steps/halt.js +19 -0
  120. package/dist/runtime/steps/halt.js.map +1 -0
  121. package/dist/runtime/steps/loop.d.ts +14 -0
  122. package/dist/runtime/steps/loop.d.ts.map +1 -0
  123. package/dist/runtime/steps/loop.js +109 -0
  124. package/dist/runtime/steps/loop.js.map +1 -0
  125. package/dist/runtime/steps/parallel.d.ts +9 -0
  126. package/dist/runtime/steps/parallel.d.ts.map +1 -0
  127. package/dist/runtime/steps/parallel.js +87 -0
  128. package/dist/runtime/steps/parallel.js.map +1 -0
  129. package/dist/runtime/steps/pipeline.d.ts +9 -0
  130. package/dist/runtime/steps/pipeline.d.ts.map +1 -0
  131. package/dist/runtime/steps/pipeline.js +125 -0
  132. package/dist/runtime/steps/pipeline.js.map +1 -0
  133. package/dist/runtime/steps/try.d.ts +13 -0
  134. package/dist/runtime/steps/try.d.ts.map +1 -0
  135. package/dist/runtime/steps/try.js +222 -0
  136. package/dist/runtime/steps/try.js.map +1 -0
  137. package/dist/runtime/steps/wait.d.ts +9 -0
  138. package/dist/runtime/steps/wait.d.ts.map +1 -0
  139. package/dist/runtime/steps/wait.js +38 -0
  140. package/dist/runtime/steps/wait.js.map +1 -0
  141. package/dist/types/actions.d.ts +162 -0
  142. package/dist/types/actions.d.ts.map +1 -0
  143. package/dist/types/actions.js +5 -0
  144. package/dist/types/actions.js.map +1 -0
  145. package/dist/types/execution.d.ts +276 -0
  146. package/dist/types/execution.d.ts.map +1 -0
  147. package/dist/types/execution.js +5 -0
  148. package/dist/types/execution.js.map +1 -0
  149. package/dist/types/expressions.d.ts +100 -0
  150. package/dist/types/expressions.d.ts.map +1 -0
  151. package/dist/types/expressions.js +48 -0
  152. package/dist/types/expressions.js.map +1 -0
  153. package/dist/types/index.d.ts +14 -0
  154. package/dist/types/index.d.ts.map +1 -0
  155. package/dist/types/index.js +5 -0
  156. package/dist/types/index.js.map +1 -0
  157. package/dist/types/ir.d.ts +187 -0
  158. package/dist/types/ir.d.ts.map +1 -0
  159. package/dist/types/ir.js +5 -0
  160. package/dist/types/ir.js.map +1 -0
  161. package/dist/types/policy.d.ts +123 -0
  162. package/dist/types/policy.d.ts.map +1 -0
  163. package/dist/types/policy.js +5 -0
  164. package/dist/types/policy.js.map +1 -0
  165. package/dist/types/primitives.d.ts +76 -0
  166. package/dist/types/primitives.d.ts.map +1 -0
  167. package/dist/types/primitives.js +10 -0
  168. package/dist/types/primitives.js.map +1 -0
  169. package/dist/types/steps.d.ts +226 -0
  170. package/dist/types/steps.d.ts.map +1 -0
  171. package/dist/types/steps.js +5 -0
  172. package/dist/types/steps.js.map +1 -0
  173. package/dist/venues/index.d.ts +6 -0
  174. package/dist/venues/index.d.ts.map +1 -0
  175. package/dist/venues/index.js +26 -0
  176. package/dist/venues/index.js.map +1 -0
  177. package/dist/venues/types.d.ts +40 -0
  178. package/dist/venues/types.d.ts.map +1 -0
  179. package/dist/venues/types.js +5 -0
  180. package/dist/venues/types.js.map +1 -0
  181. package/dist/wallet/executor.d.ts +109 -0
  182. package/dist/wallet/executor.d.ts.map +1 -0
  183. package/dist/wallet/executor.js +354 -0
  184. package/dist/wallet/executor.js.map +1 -0
  185. package/dist/wallet/index.d.ts +14 -0
  186. package/dist/wallet/index.d.ts.map +1 -0
  187. package/dist/wallet/index.js +13 -0
  188. package/dist/wallet/index.js.map +1 -0
  189. package/dist/wallet/keystore.d.ts +44 -0
  190. package/dist/wallet/keystore.d.ts.map +1 -0
  191. package/dist/wallet/keystore.js +296 -0
  192. package/dist/wallet/keystore.js.map +1 -0
  193. package/dist/wallet/provider.d.ts +111 -0
  194. package/dist/wallet/provider.d.ts.map +1 -0
  195. package/dist/wallet/provider.js +309 -0
  196. package/dist/wallet/provider.js.map +1 -0
  197. package/dist/wallet/tx-builder.d.ts +85 -0
  198. package/dist/wallet/tx-builder.d.ts.map +1 -0
  199. package/dist/wallet/tx-builder.js +290 -0
  200. package/dist/wallet/tx-builder.js.map +1 -0
  201. package/dist/wallet/types.d.ts +116 -0
  202. package/dist/wallet/types.d.ts.map +1 -0
  203. package/dist/wallet/types.js +86 -0
  204. package/dist/wallet/types.js.map +1 -0
  205. package/package.json +39 -0
@@ -0,0 +1,460 @@
1
+ /**
2
+ * Expression parser
3
+ * Converts string expressions to Expression IR nodes
4
+ */
5
+ const _BINARY_OPS = [
6
+ "+",
7
+ "-",
8
+ "*",
9
+ "/",
10
+ "%",
11
+ "==",
12
+ "!=",
13
+ "<",
14
+ ">",
15
+ "<=",
16
+ ">=",
17
+ "AND",
18
+ "OR",
19
+ ];
20
+ const _UNARY_OPS = ["NOT", "-", "ABS"];
21
+ const BUILTIN_FNS = [
22
+ "balance",
23
+ "price",
24
+ "get_apy",
25
+ "get_health_factor",
26
+ "get_position",
27
+ "get_debt",
28
+ "min",
29
+ "max",
30
+ "abs",
31
+ "sum",
32
+ "avg",
33
+ ];
34
+ /**
35
+ * Tokenize an expression string
36
+ */
37
+ function tokenize(input) {
38
+ const tokens = [];
39
+ let pos = 0;
40
+ while (pos < input.length) {
41
+ // Skip whitespace
42
+ if (/\s/.test(input[pos] ?? "")) {
43
+ pos++;
44
+ continue;
45
+ }
46
+ const start = pos;
47
+ // String literal
48
+ if (input[pos] === '"') {
49
+ pos++;
50
+ let value = "";
51
+ while (pos < input.length && input[pos] !== '"') {
52
+ if (input[pos] === "\\" && pos + 1 < input.length) {
53
+ pos++;
54
+ value += input[pos];
55
+ }
56
+ else {
57
+ value += input[pos];
58
+ }
59
+ pos++;
60
+ }
61
+ pos++; // Skip closing quote
62
+ tokens.push({ type: "STRING", value, position: start });
63
+ continue;
64
+ }
65
+ // Address (0x...)
66
+ if (input.slice(pos, pos + 2) === "0x") {
67
+ let value = "0x";
68
+ pos += 2;
69
+ while (pos < input.length && /[0-9a-fA-F]/.test(input[pos] ?? "")) {
70
+ value += input[pos];
71
+ pos++;
72
+ }
73
+ tokens.push({ type: "ADDRESS", value, position: start });
74
+ continue;
75
+ }
76
+ // Number
77
+ if (/[0-9]/.test(input[pos] ?? "")) {
78
+ let value = "";
79
+ while (pos < input.length && /[0-9.]/.test(input[pos] ?? "")) {
80
+ value += input[pos];
81
+ pos++;
82
+ }
83
+ tokens.push({ type: "NUMBER", value, position: start });
84
+ continue;
85
+ }
86
+ // Multi-character operators
87
+ if (input.slice(pos, pos + 2) === "==") {
88
+ tokens.push({ type: "OPERATOR", value: "==", position: start });
89
+ pos += 2;
90
+ continue;
91
+ }
92
+ if (input.slice(pos, pos + 2) === "!=") {
93
+ tokens.push({ type: "OPERATOR", value: "!=", position: start });
94
+ pos += 2;
95
+ continue;
96
+ }
97
+ if (input.slice(pos, pos + 2) === "<=") {
98
+ tokens.push({ type: "OPERATOR", value: "<=", position: start });
99
+ pos += 2;
100
+ continue;
101
+ }
102
+ if (input.slice(pos, pos + 2) === ">=") {
103
+ tokens.push({ type: "OPERATOR", value: ">=", position: start });
104
+ pos += 2;
105
+ continue;
106
+ }
107
+ // Single character operators and punctuation
108
+ const char = input[pos] ?? "";
109
+ if ("+-*/%<>".includes(char)) {
110
+ tokens.push({ type: "OPERATOR", value: char, position: start });
111
+ pos++;
112
+ continue;
113
+ }
114
+ if (char === "(") {
115
+ tokens.push({ type: "LPAREN", value: "(", position: start });
116
+ pos++;
117
+ continue;
118
+ }
119
+ if (char === ")") {
120
+ tokens.push({ type: "RPAREN", value: ")", position: start });
121
+ pos++;
122
+ continue;
123
+ }
124
+ if (char === "[") {
125
+ tokens.push({ type: "LBRACKET", value: "[", position: start });
126
+ pos++;
127
+ continue;
128
+ }
129
+ if (char === "]") {
130
+ tokens.push({ type: "RBRACKET", value: "]", position: start });
131
+ pos++;
132
+ continue;
133
+ }
134
+ if (char === ".") {
135
+ tokens.push({ type: "DOT", value: ".", position: start });
136
+ pos++;
137
+ continue;
138
+ }
139
+ if (char === ",") {
140
+ tokens.push({ type: "COMMA", value: ",", position: start });
141
+ pos++;
142
+ continue;
143
+ }
144
+ if (char === "?") {
145
+ tokens.push({ type: "QUESTION", value: "?", position: start });
146
+ pos++;
147
+ continue;
148
+ }
149
+ if (char === ":") {
150
+ tokens.push({ type: "COLON", value: ":", position: start });
151
+ pos++;
152
+ continue;
153
+ }
154
+ // Identifier or keyword
155
+ if (/[a-zA-Z_]/.test(char)) {
156
+ let value = "";
157
+ while (pos < input.length && /[a-zA-Z0-9_]/.test(input[pos] ?? "")) {
158
+ value += input[pos];
159
+ pos++;
160
+ }
161
+ // Check for boolean
162
+ if (value === "true" || value === "false") {
163
+ tokens.push({ type: "BOOLEAN", value, position: start });
164
+ continue;
165
+ }
166
+ // Check for operators
167
+ if (value === "AND" || value === "OR" || value === "NOT") {
168
+ tokens.push({ type: "OPERATOR", value, position: start });
169
+ continue;
170
+ }
171
+ tokens.push({ type: "IDENTIFIER", value, position: start });
172
+ continue;
173
+ }
174
+ throw new Error(`Unexpected character '${char}' at position ${pos}`);
175
+ }
176
+ tokens.push({ type: "EOF", value: "", position: pos });
177
+ return tokens;
178
+ }
179
+ /**
180
+ * Parser class for expressions
181
+ */
182
+ class ExpressionParser {
183
+ tokens;
184
+ pos;
185
+ constructor(tokens) {
186
+ this.tokens = tokens;
187
+ this.pos = 0;
188
+ }
189
+ current() {
190
+ const token = this.tokens[this.pos];
191
+ if (!token) {
192
+ throw new Error("Unexpected end of expression tokens");
193
+ }
194
+ return token;
195
+ }
196
+ advance() {
197
+ const token = this.current();
198
+ this.pos++;
199
+ return token;
200
+ }
201
+ expect(type) {
202
+ const token = this.current();
203
+ if (token.type !== type) {
204
+ throw new Error(`Expected ${type} but got ${token.type} at position ${token.position}`);
205
+ }
206
+ return this.advance();
207
+ }
208
+ /**
209
+ * Parse full expression
210
+ */
211
+ parse() {
212
+ const expr = this.parseTernary();
213
+ if (this.current().type !== "EOF") {
214
+ throw new Error(`Unexpected token ${this.current().value} at position ${this.current().position}`);
215
+ }
216
+ return expr;
217
+ }
218
+ /**
219
+ * Parse ternary expression: condition ? then : else
220
+ */
221
+ parseTernary() {
222
+ const condition = this.parseOr();
223
+ if (this.current().type === "QUESTION") {
224
+ this.advance(); // ?
225
+ const thenExpr = this.parseTernary();
226
+ this.expect("COLON");
227
+ const elseExpr = this.parseTernary();
228
+ return {
229
+ kind: "ternary",
230
+ condition,
231
+ then: thenExpr,
232
+ else: elseExpr,
233
+ };
234
+ }
235
+ return condition;
236
+ }
237
+ /**
238
+ * Parse OR expression
239
+ */
240
+ parseOr() {
241
+ let left = this.parseAnd();
242
+ while (this.current().type === "OPERATOR" && this.current().value === "OR") {
243
+ this.advance();
244
+ const right = this.parseAnd();
245
+ left = { kind: "binary", op: "OR", left, right };
246
+ }
247
+ return left;
248
+ }
249
+ /**
250
+ * Parse AND expression
251
+ */
252
+ parseAnd() {
253
+ let left = this.parseEquality();
254
+ while (this.current().type === "OPERATOR" && this.current().value === "AND") {
255
+ this.advance();
256
+ const right = this.parseEquality();
257
+ left = { kind: "binary", op: "AND", left, right };
258
+ }
259
+ return left;
260
+ }
261
+ /**
262
+ * Parse equality: == !=
263
+ */
264
+ parseEquality() {
265
+ let left = this.parseComparison();
266
+ while (this.current().type === "OPERATOR" &&
267
+ (this.current().value === "==" || this.current().value === "!=")) {
268
+ const op = this.advance().value;
269
+ const right = this.parseComparison();
270
+ left = { kind: "binary", op, left, right };
271
+ }
272
+ return left;
273
+ }
274
+ /**
275
+ * Parse comparison: < > <= >=
276
+ */
277
+ parseComparison() {
278
+ let left = this.parseAdditive();
279
+ while (this.current().type === "OPERATOR" &&
280
+ ["<", ">", "<=", ">="].includes(this.current().value)) {
281
+ const op = this.advance().value;
282
+ const right = this.parseAdditive();
283
+ left = { kind: "binary", op, left, right };
284
+ }
285
+ return left;
286
+ }
287
+ /**
288
+ * Parse additive: + -
289
+ */
290
+ parseAdditive() {
291
+ let left = this.parseMultiplicative();
292
+ while (this.current().type === "OPERATOR" &&
293
+ (this.current().value === "+" || this.current().value === "-")) {
294
+ const op = this.advance().value;
295
+ const right = this.parseMultiplicative();
296
+ left = { kind: "binary", op, left, right };
297
+ }
298
+ return left;
299
+ }
300
+ /**
301
+ * Parse multiplicative: * / %
302
+ */
303
+ parseMultiplicative() {
304
+ let left = this.parseUnary();
305
+ while (this.current().type === "OPERATOR" && ["*", "/", "%"].includes(this.current().value)) {
306
+ const op = this.advance().value;
307
+ const right = this.parseUnary();
308
+ left = { kind: "binary", op, left, right };
309
+ }
310
+ return left;
311
+ }
312
+ /**
313
+ * Parse unary: NOT -
314
+ */
315
+ parseUnary() {
316
+ if (this.current().type === "OPERATOR") {
317
+ if (this.current().value === "NOT") {
318
+ this.advance();
319
+ const arg = this.parseUnary();
320
+ return { kind: "unary", op: "NOT", arg };
321
+ }
322
+ if (this.current().value === "-") {
323
+ this.advance();
324
+ const arg = this.parseUnary();
325
+ return { kind: "unary", op: "-", arg };
326
+ }
327
+ }
328
+ return this.parsePostfix();
329
+ }
330
+ /**
331
+ * Parse postfix: . [] ()
332
+ */
333
+ parsePostfix() {
334
+ let expr = this.parsePrimary();
335
+ while (true) {
336
+ if (this.current().type === "DOT") {
337
+ this.advance();
338
+ const prop = this.expect("IDENTIFIER").value;
339
+ expr = { kind: "property_access", object: expr, property: prop };
340
+ }
341
+ else if (this.current().type === "LBRACKET") {
342
+ this.advance();
343
+ const index = this.parseTernary();
344
+ this.expect("RBRACKET");
345
+ expr = { kind: "array_access", array: expr, index };
346
+ }
347
+ else {
348
+ break;
349
+ }
350
+ }
351
+ return expr;
352
+ }
353
+ /**
354
+ * Parse primary: literals, identifiers, function calls, parenthesized
355
+ */
356
+ parsePrimary() {
357
+ const token = this.current();
358
+ // Number
359
+ if (token.type === "NUMBER") {
360
+ this.advance();
361
+ const value = token.value.includes(".")
362
+ ? Number.parseFloat(token.value)
363
+ : Number.parseInt(token.value, 10);
364
+ return {
365
+ kind: "literal",
366
+ value,
367
+ type: token.value.includes(".") ? "float" : "int",
368
+ };
369
+ }
370
+ // String
371
+ if (token.type === "STRING") {
372
+ this.advance();
373
+ return { kind: "literal", value: token.value, type: "string" };
374
+ }
375
+ // Boolean
376
+ if (token.type === "BOOLEAN") {
377
+ this.advance();
378
+ return { kind: "literal", value: token.value === "true", type: "bool" };
379
+ }
380
+ // Address
381
+ if (token.type === "ADDRESS") {
382
+ this.advance();
383
+ return { kind: "literal", value: token.value, type: "address" };
384
+ }
385
+ // Parenthesized expression
386
+ if (token.type === "LPAREN") {
387
+ this.advance();
388
+ const expr = this.parseTernary();
389
+ this.expect("RPAREN");
390
+ return expr;
391
+ }
392
+ // Identifier or function call
393
+ if (token.type === "IDENTIFIER") {
394
+ const name = this.advance().value;
395
+ // Function call
396
+ if (this.current().type === "LPAREN") {
397
+ this.advance();
398
+ const args = [];
399
+ if (this.current().type !== "RPAREN") {
400
+ args.push(this.parseTernary());
401
+ while (this.current().type === "COMMA") {
402
+ this.advance();
403
+ args.push(this.parseTernary());
404
+ }
405
+ }
406
+ this.expect("RPAREN");
407
+ // Check if it's a builtin
408
+ if (BUILTIN_FNS.includes(name)) {
409
+ return { kind: "call", fn: name, args };
410
+ }
411
+ throw new Error(`Unknown function '${name}'`);
412
+ }
413
+ // Special identifiers
414
+ if (name === "params") {
415
+ this.expect("DOT");
416
+ const paramName = this.expect("IDENTIFIER").value;
417
+ return { kind: "param", name: paramName };
418
+ }
419
+ if (name === "state") {
420
+ this.expect("DOT");
421
+ const scope = this.expect("IDENTIFIER").value;
422
+ if (scope !== "persistent" && scope !== "ephemeral") {
423
+ throw new Error(`Invalid state scope '${scope}'`);
424
+ }
425
+ this.expect("DOT");
426
+ const key = this.expect("IDENTIFIER").value;
427
+ return { kind: "state", scope, key };
428
+ }
429
+ if (name === "item") {
430
+ return { kind: "item" };
431
+ }
432
+ if (name === "index") {
433
+ return { kind: "index" };
434
+ }
435
+ // Regular binding reference
436
+ return { kind: "binding", name };
437
+ }
438
+ throw new Error(`Unexpected token '${token.value}' at position ${token.position}`);
439
+ }
440
+ }
441
+ /**
442
+ * Parse an expression string into an Expression AST
443
+ */
444
+ export function parseExpression(input) {
445
+ const tokens = tokenize(input);
446
+ const parser = new ExpressionParser(tokens);
447
+ return parser.parse();
448
+ }
449
+ /**
450
+ * Try to parse an expression, returning null on failure
451
+ */
452
+ export function tryParseExpression(input) {
453
+ try {
454
+ return parseExpression(input);
455
+ }
456
+ catch {
457
+ return null;
458
+ }
459
+ }
460
+ //# sourceMappingURL=expression-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression-parser.js","sourceRoot":"","sources":["../../src/compiler/expression-parser.ts"],"names":[],"mappings":"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"}