@rcrsr/rill 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 (295) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +187 -0
  3. package/dist/cli.d.ts +11 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +69 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/demo.d.ts +6 -0
  8. package/dist/demo.d.ts.map +1 -0
  9. package/dist/demo.js +121 -0
  10. package/dist/demo.js.map +1 -0
  11. package/dist/index.d.ts +10 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +9 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/lexer/errors.d.ts +9 -0
  16. package/dist/lexer/errors.d.ts.map +1 -0
  17. package/dist/lexer/errors.js +12 -0
  18. package/dist/lexer/errors.js.map +1 -0
  19. package/dist/lexer/helpers.d.ts +14 -0
  20. package/dist/lexer/helpers.d.ts.map +1 -0
  21. package/dist/lexer/helpers.js +30 -0
  22. package/dist/lexer/helpers.js.map +1 -0
  23. package/dist/lexer/index.d.ts +8 -0
  24. package/dist/lexer/index.d.ts.map +1 -0
  25. package/dist/lexer/index.js +8 -0
  26. package/dist/lexer/index.js.map +1 -0
  27. package/dist/lexer/operators.d.ts +11 -0
  28. package/dist/lexer/operators.d.ts.map +1 -0
  29. package/dist/lexer/operators.js +58 -0
  30. package/dist/lexer/operators.js.map +1 -0
  31. package/dist/lexer/readers.d.ts +12 -0
  32. package/dist/lexer/readers.d.ts.map +1 -0
  33. package/dist/lexer/readers.js +144 -0
  34. package/dist/lexer/readers.js.map +1 -0
  35. package/dist/lexer/state.d.ts +18 -0
  36. package/dist/lexer/state.d.ts.map +1 -0
  37. package/dist/lexer/state.js +37 -0
  38. package/dist/lexer/state.js.map +1 -0
  39. package/dist/lexer/tokenizer.d.ts +9 -0
  40. package/dist/lexer/tokenizer.d.ts.map +1 -0
  41. package/dist/lexer/tokenizer.js +100 -0
  42. package/dist/lexer/tokenizer.js.map +1 -0
  43. package/dist/lexer.d.ts +19 -0
  44. package/dist/lexer.d.ts.map +1 -0
  45. package/dist/lexer.js +344 -0
  46. package/dist/lexer.js.map +1 -0
  47. package/dist/parser/arithmetic.d.ts +16 -0
  48. package/dist/parser/arithmetic.d.ts.map +1 -0
  49. package/dist/parser/arithmetic.js +128 -0
  50. package/dist/parser/arithmetic.js.map +1 -0
  51. package/dist/parser/boolean.d.ts +15 -0
  52. package/dist/parser/boolean.d.ts.map +1 -0
  53. package/dist/parser/boolean.js +20 -0
  54. package/dist/parser/boolean.js.map +1 -0
  55. package/dist/parser/control-flow.d.ts +56 -0
  56. package/dist/parser/control-flow.d.ts.map +1 -0
  57. package/dist/parser/control-flow.js +167 -0
  58. package/dist/parser/control-flow.js.map +1 -0
  59. package/dist/parser/expressions.d.ts +23 -0
  60. package/dist/parser/expressions.d.ts.map +1 -0
  61. package/dist/parser/expressions.js +950 -0
  62. package/dist/parser/expressions.js.map +1 -0
  63. package/dist/parser/extraction.d.ts +48 -0
  64. package/dist/parser/extraction.d.ts.map +1 -0
  65. package/dist/parser/extraction.js +279 -0
  66. package/dist/parser/extraction.js.map +1 -0
  67. package/dist/parser/functions.d.ts +20 -0
  68. package/dist/parser/functions.d.ts.map +1 -0
  69. package/dist/parser/functions.js +96 -0
  70. package/dist/parser/functions.js.map +1 -0
  71. package/dist/parser/helpers.d.ts +94 -0
  72. package/dist/parser/helpers.d.ts.map +1 -0
  73. package/dist/parser/helpers.js +225 -0
  74. package/dist/parser/helpers.js.map +1 -0
  75. package/dist/parser/index.d.ts +49 -0
  76. package/dist/parser/index.d.ts.map +1 -0
  77. package/dist/parser/index.js +73 -0
  78. package/dist/parser/index.js.map +1 -0
  79. package/dist/parser/literals.d.ts +37 -0
  80. package/dist/parser/literals.d.ts.map +1 -0
  81. package/dist/parser/literals.js +373 -0
  82. package/dist/parser/literals.js.map +1 -0
  83. package/dist/parser/parser-collect.d.ts +16 -0
  84. package/dist/parser/parser-collect.d.ts.map +1 -0
  85. package/dist/parser/parser-collect.js +125 -0
  86. package/dist/parser/parser-collect.js.map +1 -0
  87. package/dist/parser/parser-control.d.ts +20 -0
  88. package/dist/parser/parser-control.d.ts.map +1 -0
  89. package/dist/parser/parser-control.js +120 -0
  90. package/dist/parser/parser-control.js.map +1 -0
  91. package/dist/parser/parser-expr.d.ts +37 -0
  92. package/dist/parser/parser-expr.d.ts.map +1 -0
  93. package/dist/parser/parser-expr.js +639 -0
  94. package/dist/parser/parser-expr.js.map +1 -0
  95. package/dist/parser/parser-extract.d.ts +17 -0
  96. package/dist/parser/parser-extract.d.ts.map +1 -0
  97. package/dist/parser/parser-extract.js +222 -0
  98. package/dist/parser/parser-extract.js.map +1 -0
  99. package/dist/parser/parser-functions.d.ts +21 -0
  100. package/dist/parser/parser-functions.d.ts.map +1 -0
  101. package/dist/parser/parser-functions.js +155 -0
  102. package/dist/parser/parser-functions.js.map +1 -0
  103. package/dist/parser/parser-literals.d.ts +22 -0
  104. package/dist/parser/parser-literals.d.ts.map +1 -0
  105. package/dist/parser/parser-literals.js +288 -0
  106. package/dist/parser/parser-literals.js.map +1 -0
  107. package/dist/parser/parser-script.d.ts +21 -0
  108. package/dist/parser/parser-script.d.ts.map +1 -0
  109. package/dist/parser/parser-script.js +174 -0
  110. package/dist/parser/parser-script.js.map +1 -0
  111. package/dist/parser/parser-variables.d.ts +20 -0
  112. package/dist/parser/parser-variables.d.ts.map +1 -0
  113. package/dist/parser/parser-variables.js +146 -0
  114. package/dist/parser/parser-variables.js.map +1 -0
  115. package/dist/parser/parser.d.ts +49 -0
  116. package/dist/parser/parser.d.ts.map +1 -0
  117. package/dist/parser/parser.js +54 -0
  118. package/dist/parser/parser.js.map +1 -0
  119. package/dist/parser/script.d.ts +14 -0
  120. package/dist/parser/script.d.ts.map +1 -0
  121. package/dist/parser/script.js +196 -0
  122. package/dist/parser/script.js.map +1 -0
  123. package/dist/parser/state.d.ts +40 -0
  124. package/dist/parser/state.d.ts.map +1 -0
  125. package/dist/parser/state.js +129 -0
  126. package/dist/parser/state.js.map +1 -0
  127. package/dist/parser/variables.d.ts +10 -0
  128. package/dist/parser/variables.d.ts.map +1 -0
  129. package/dist/parser/variables.js +215 -0
  130. package/dist/parser/variables.js.map +1 -0
  131. package/dist/runtime/ast-equals.d.ts +13 -0
  132. package/dist/runtime/ast-equals.d.ts.map +1 -0
  133. package/dist/runtime/ast-equals.js +447 -0
  134. package/dist/runtime/ast-equals.js.map +1 -0
  135. package/dist/runtime/builtins.d.ts +13 -0
  136. package/dist/runtime/builtins.d.ts.map +1 -0
  137. package/dist/runtime/builtins.js +180 -0
  138. package/dist/runtime/builtins.js.map +1 -0
  139. package/dist/runtime/callable.d.ts +88 -0
  140. package/dist/runtime/callable.d.ts.map +1 -0
  141. package/dist/runtime/callable.js +98 -0
  142. package/dist/runtime/callable.js.map +1 -0
  143. package/dist/runtime/context.d.ts +13 -0
  144. package/dist/runtime/context.d.ts.map +1 -0
  145. package/dist/runtime/context.js +73 -0
  146. package/dist/runtime/context.js.map +1 -0
  147. package/dist/runtime/core/callable.d.ts +171 -0
  148. package/dist/runtime/core/callable.d.ts.map +1 -0
  149. package/dist/runtime/core/callable.js +246 -0
  150. package/dist/runtime/core/callable.js.map +1 -0
  151. package/dist/runtime/core/context.d.ts +29 -0
  152. package/dist/runtime/core/context.d.ts.map +1 -0
  153. package/dist/runtime/core/context.js +154 -0
  154. package/dist/runtime/core/context.js.map +1 -0
  155. package/dist/runtime/core/equals.d.ts +9 -0
  156. package/dist/runtime/core/equals.d.ts.map +1 -0
  157. package/dist/runtime/core/equals.js +381 -0
  158. package/dist/runtime/core/equals.js.map +1 -0
  159. package/dist/runtime/core/eval/base.d.ts +65 -0
  160. package/dist/runtime/core/eval/base.d.ts.map +1 -0
  161. package/dist/runtime/core/eval/base.js +112 -0
  162. package/dist/runtime/core/eval/base.js.map +1 -0
  163. package/dist/runtime/core/eval/evaluator.d.ts +47 -0
  164. package/dist/runtime/core/eval/evaluator.d.ts.map +1 -0
  165. package/dist/runtime/core/eval/evaluator.js +73 -0
  166. package/dist/runtime/core/eval/evaluator.js.map +1 -0
  167. package/dist/runtime/core/eval/index.d.ts +57 -0
  168. package/dist/runtime/core/eval/index.d.ts.map +1 -0
  169. package/dist/runtime/core/eval/index.js +95 -0
  170. package/dist/runtime/core/eval/index.js.map +1 -0
  171. package/dist/runtime/core/eval/mixins/annotations.d.ts +19 -0
  172. package/dist/runtime/core/eval/mixins/annotations.d.ts.map +1 -0
  173. package/dist/runtime/core/eval/mixins/annotations.js +146 -0
  174. package/dist/runtime/core/eval/mixins/annotations.js.map +1 -0
  175. package/dist/runtime/core/eval/mixins/closures.d.ts +49 -0
  176. package/dist/runtime/core/eval/mixins/closures.d.ts.map +1 -0
  177. package/dist/runtime/core/eval/mixins/closures.js +479 -0
  178. package/dist/runtime/core/eval/mixins/closures.js.map +1 -0
  179. package/dist/runtime/core/eval/mixins/collections.d.ts +24 -0
  180. package/dist/runtime/core/eval/mixins/collections.d.ts.map +1 -0
  181. package/dist/runtime/core/eval/mixins/collections.js +466 -0
  182. package/dist/runtime/core/eval/mixins/collections.js.map +1 -0
  183. package/dist/runtime/core/eval/mixins/control-flow.d.ts +27 -0
  184. package/dist/runtime/core/eval/mixins/control-flow.d.ts.map +1 -0
  185. package/dist/runtime/core/eval/mixins/control-flow.js +369 -0
  186. package/dist/runtime/core/eval/mixins/control-flow.js.map +1 -0
  187. package/dist/runtime/core/eval/mixins/core.d.ts +24 -0
  188. package/dist/runtime/core/eval/mixins/core.d.ts.map +1 -0
  189. package/dist/runtime/core/eval/mixins/core.js +335 -0
  190. package/dist/runtime/core/eval/mixins/core.js.map +1 -0
  191. package/dist/runtime/core/eval/mixins/expressions.d.ts +19 -0
  192. package/dist/runtime/core/eval/mixins/expressions.d.ts.map +1 -0
  193. package/dist/runtime/core/eval/mixins/expressions.js +202 -0
  194. package/dist/runtime/core/eval/mixins/expressions.js.map +1 -0
  195. package/dist/runtime/core/eval/mixins/extraction.d.ts +10 -0
  196. package/dist/runtime/core/eval/mixins/extraction.d.ts.map +1 -0
  197. package/dist/runtime/core/eval/mixins/extraction.js +250 -0
  198. package/dist/runtime/core/eval/mixins/extraction.js.map +1 -0
  199. package/dist/runtime/core/eval/mixins/literals.d.ts +23 -0
  200. package/dist/runtime/core/eval/mixins/literals.d.ts.map +1 -0
  201. package/dist/runtime/core/eval/mixins/literals.js +180 -0
  202. package/dist/runtime/core/eval/mixins/literals.js.map +1 -0
  203. package/dist/runtime/core/eval/mixins/types.d.ts +20 -0
  204. package/dist/runtime/core/eval/mixins/types.d.ts.map +1 -0
  205. package/dist/runtime/core/eval/mixins/types.js +109 -0
  206. package/dist/runtime/core/eval/mixins/types.js.map +1 -0
  207. package/dist/runtime/core/eval/mixins/variables.d.ts +34 -0
  208. package/dist/runtime/core/eval/mixins/variables.d.ts.map +1 -0
  209. package/dist/runtime/core/eval/mixins/variables.js +247 -0
  210. package/dist/runtime/core/eval/mixins/variables.js.map +1 -0
  211. package/dist/runtime/core/eval/types.d.ts +41 -0
  212. package/dist/runtime/core/eval/types.d.ts.map +1 -0
  213. package/dist/runtime/core/eval/types.js +10 -0
  214. package/dist/runtime/core/eval/types.js.map +1 -0
  215. package/dist/runtime/core/evaluate.d.ts +42 -0
  216. package/dist/runtime/core/evaluate.d.ts.map +1 -0
  217. package/dist/runtime/core/evaluate.debug.js +1251 -0
  218. package/dist/runtime/core/evaluate.js +1913 -0
  219. package/dist/runtime/core/evaluate.js.map +1 -0
  220. package/dist/runtime/core/execute.d.ts +26 -0
  221. package/dist/runtime/core/execute.d.ts.map +1 -0
  222. package/dist/runtime/core/execute.js +177 -0
  223. package/dist/runtime/core/execute.js.map +1 -0
  224. package/dist/runtime/core/signals.d.ts +19 -0
  225. package/dist/runtime/core/signals.d.ts.map +1 -0
  226. package/dist/runtime/core/signals.js +26 -0
  227. package/dist/runtime/core/signals.js.map +1 -0
  228. package/dist/runtime/core/types.d.ts +177 -0
  229. package/dist/runtime/core/types.d.ts.map +1 -0
  230. package/dist/runtime/core/types.js +50 -0
  231. package/dist/runtime/core/types.js.map +1 -0
  232. package/dist/runtime/core/values.d.ts +66 -0
  233. package/dist/runtime/core/values.d.ts.map +1 -0
  234. package/dist/runtime/core/values.js +240 -0
  235. package/dist/runtime/core/values.js.map +1 -0
  236. package/dist/runtime/evaluate.d.ts +32 -0
  237. package/dist/runtime/evaluate.d.ts.map +1 -0
  238. package/dist/runtime/evaluate.js +1111 -0
  239. package/dist/runtime/evaluate.js.map +1 -0
  240. package/dist/runtime/execute.d.ts +26 -0
  241. package/dist/runtime/execute.d.ts.map +1 -0
  242. package/dist/runtime/execute.js +121 -0
  243. package/dist/runtime/execute.js.map +1 -0
  244. package/dist/runtime/ext/builtins.d.ts +16 -0
  245. package/dist/runtime/ext/builtins.d.ts.map +1 -0
  246. package/dist/runtime/ext/builtins.js +528 -0
  247. package/dist/runtime/ext/builtins.js.map +1 -0
  248. package/dist/runtime/ext/content-parser.d.ts +83 -0
  249. package/dist/runtime/ext/content-parser.d.ts.map +1 -0
  250. package/dist/runtime/ext/content-parser.js +536 -0
  251. package/dist/runtime/ext/content-parser.js.map +1 -0
  252. package/dist/runtime/index.d.ts +28 -0
  253. package/dist/runtime/index.d.ts.map +1 -0
  254. package/dist/runtime/index.js +34 -0
  255. package/dist/runtime/index.js.map +1 -0
  256. package/dist/runtime/signals.d.ts +19 -0
  257. package/dist/runtime/signals.d.ts.map +1 -0
  258. package/dist/runtime/signals.js +26 -0
  259. package/dist/runtime/signals.js.map +1 -0
  260. package/dist/runtime/types.d.ts +169 -0
  261. package/dist/runtime/types.d.ts.map +1 -0
  262. package/dist/runtime/types.js +50 -0
  263. package/dist/runtime/types.js.map +1 -0
  264. package/dist/runtime/values.d.ts +50 -0
  265. package/dist/runtime/values.d.ts.map +1 -0
  266. package/dist/runtime/values.js +209 -0
  267. package/dist/runtime/values.js.map +1 -0
  268. package/dist/runtime.d.ts +254 -0
  269. package/dist/runtime.d.ts.map +1 -0
  270. package/dist/runtime.js +2014 -0
  271. package/dist/runtime.js.map +1 -0
  272. package/dist/types.d.ts +752 -0
  273. package/dist/types.d.ts.map +1 -0
  274. package/dist/types.js +189 -0
  275. package/dist/types.js.map +1 -0
  276. package/docs/00_INDEX.md +65 -0
  277. package/docs/01_guide.md +390 -0
  278. package/docs/02_types.md +399 -0
  279. package/docs/03_variables.md +314 -0
  280. package/docs/04_operators.md +551 -0
  281. package/docs/05_control-flow.md +350 -0
  282. package/docs/06_closures.md +353 -0
  283. package/docs/07_collections.md +686 -0
  284. package/docs/08_iterators.md +330 -0
  285. package/docs/09_strings.md +205 -0
  286. package/docs/10_parsing.md +366 -0
  287. package/docs/11_reference.md +350 -0
  288. package/docs/12_examples.md +771 -0
  289. package/docs/13_modules.md +519 -0
  290. package/docs/14_host-integration.md +826 -0
  291. package/docs/15_grammar.ebnf +693 -0
  292. package/docs/16_conventions.md +696 -0
  293. package/docs/99_llm-reference.txt +300 -0
  294. package/docs/assets/logo.png +0 -0
  295. package/package.json +70 -0
@@ -0,0 +1,466 @@
1
+ /**
2
+ * CollectionsMixin: each/map/fold/filter
3
+ *
4
+ * Handles collection operators:
5
+ * - Each: sequential iteration with all results (partial results on break)
6
+ * - Map: parallel iteration with all results
7
+ * - Fold: sequential reduction to final value
8
+ * - Filter: parallel filtering by predicate
9
+ *
10
+ * Interface requirements (from spec):
11
+ * - evaluateEach(node, input) -> Promise<RillValue[]>
12
+ * - evaluateMap(node, input) -> Promise<RillValue[]>
13
+ * - evaluateFold(node, input) -> Promise<RillValue>
14
+ * - evaluateFilter(node, input) -> Promise<RillValue[]>
15
+ *
16
+ * Error Handling:
17
+ * - Non-iterable inputs throw RuntimeError(RUNTIME_TYPE_ERROR) [EC-10]
18
+ * - Iterator body evaluation errors propagate correctly [EC-11]
19
+ * - Iteration limit exceeded throws RuntimeError [EC-12]
20
+ *
21
+ * @internal
22
+ */
23
+ import { RuntimeError, RILL_ERROR_CODES } from '../../../../types.js';
24
+ import { inferType, isRillIterator } from '../../values.js';
25
+ import { createChildContext, getVariable } from '../../context.js';
26
+ import { BreakSignal } from '../../signals.js';
27
+ import { isCallable, isDict } from '../../callable.js';
28
+ import { getEvaluator } from '../evaluator.js';
29
+ /**
30
+ * Default maximum iteration count for iterators.
31
+ * Can be overridden with ^(limit: N) annotation.
32
+ */
33
+ const DEFAULT_MAX_ITERATIONS = 10000;
34
+ /**
35
+ * CollectionsMixin implementation.
36
+ *
37
+ * Evaluates collection operators: each, map, fold, filter.
38
+ * Handles iteration over lists, strings, dicts, and iterators.
39
+ *
40
+ * Depends on:
41
+ * - EvaluatorBase: ctx, checkAborted(), getNodeLocation()
42
+ * - evaluateExpression() (from future CoreMixin composition)
43
+ * - evaluateBlockExpression() (from ControlFlowMixin)
44
+ * - evaluateGroupedExpr() (from ExpressionsMixin)
45
+ * - evaluateVariableAsync() (from VariablesMixin)
46
+ * - evaluatePrimary() (from future CoreMixin composition)
47
+ * - invokeCallable() (from future CoreMixin composition)
48
+ * - createClosure() (from future CoreMixin composition)
49
+ *
50
+ * Methods added:
51
+ * - evaluateEach(node, input) -> Promise<RillValue[]>
52
+ * - evaluateMap(node, input) -> Promise<RillValue[]>
53
+ * - evaluateFold(node, input) -> Promise<RillValue>
54
+ * - evaluateFilter(node, input) -> Promise<RillValue[]>
55
+ * - getIterableElements(input) -> Promise<RillValue[]> (helper)
56
+ * - evaluateIteratorBody(body, element, accumulator) -> Promise<RillValue> (helper)
57
+ * - expandIterator(iterator, limit?) -> Promise<RillValue[]> (helper)
58
+ */
59
+ function createCollectionsMixin(Base) {
60
+ return class CollectionsEvaluator extends Base {
61
+ /**
62
+ * Get elements from an iterable value (list, string, dict, or iterator).
63
+ * Throws RuntimeError if value is not iterable.
64
+ */
65
+ async getIterableElements(input, node) {
66
+ if (Array.isArray(input)) {
67
+ return input;
68
+ }
69
+ if (typeof input === 'string') {
70
+ return [...input];
71
+ }
72
+ // Check for iterator protocol BEFORE generic dict handling
73
+ if (isRillIterator(input)) {
74
+ return this.expandIterator(input, node);
75
+ }
76
+ if (isDict(input)) {
77
+ // Dict iteration: sorted keys, each element is { key, value }
78
+ const keys = Object.keys(input).sort();
79
+ return keys.map((key) => ({
80
+ key,
81
+ value: input[key],
82
+ }));
83
+ }
84
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Collection operators require list, string, dict, or iterator, got ${inferType(input)}`, node.span.start);
85
+ }
86
+ /**
87
+ * Expand an iterator to a list of values.
88
+ * Respects iteration limits to prevent infinite loops.
89
+ */
90
+ async expandIterator(iterator, node, limit = DEFAULT_MAX_ITERATIONS) {
91
+ const elements = [];
92
+ let current = iterator;
93
+ let count = 0;
94
+ while (!current['done'] && count < limit) {
95
+ this.checkAborted();
96
+ const val = current['value'];
97
+ if (val !== undefined) {
98
+ elements.push(val);
99
+ }
100
+ count++;
101
+ // Invoke next() to get the next iterator
102
+ const nextClosure = current['next'];
103
+ if (nextClosure === undefined || !isCallable(nextClosure)) {
104
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Iterator .next must be a closure', node.span.start);
105
+ }
106
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
107
+ const nextIterator = await this.invokeCallable(nextClosure, [], this.ctx, node.span.start);
108
+ if (typeof nextIterator !== 'object' || nextIterator === null) {
109
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Iterator .next must return iterator', node.span.start);
110
+ }
111
+ current = nextIterator;
112
+ }
113
+ if (count >= limit) {
114
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_LIMIT_EXCEEDED, `Iterator expansion exceeded ${limit} iterations`, node.span.start, { limit, iterations: count });
115
+ }
116
+ return elements;
117
+ }
118
+ /**
119
+ * Evaluate collection body for a single element.
120
+ * Handles all body forms: closure, block, grouped, variable, postfix, spread.
121
+ *
122
+ * NOTE: For sequential operations (each/fold), caller creates child context,
123
+ * sets pipeValue, and swaps this.ctx. For parallel operations (map/filter),
124
+ * caller passes a separate evaluator instance with isolated context.
125
+ */
126
+ async evaluateIteratorBody(body, element, accumulator) {
127
+ switch (body.type) {
128
+ case 'Closure': {
129
+ // Inline closure: invoke with element (and accumulator if present in params)
130
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
131
+ const closure = await this.createClosure(body, this.ctx);
132
+ const args = [element];
133
+ // Accumulator is passed as second arg if closure has 2+ params
134
+ if (accumulator !== null && closure.params.length >= 2) {
135
+ args.push(accumulator);
136
+ }
137
+ // Create context with $@ for closures that use it (e.g., |x| { $x + $@ })
138
+ let invokeCtx = this.ctx;
139
+ let closureToInvoke = closure;
140
+ if (accumulator !== null) {
141
+ invokeCtx = createChildContext(this.ctx);
142
+ invokeCtx.variables.set('@', accumulator);
143
+ // Create new closure with updated definingScope to include $@
144
+ closureToInvoke = { ...closure, definingScope: invokeCtx };
145
+ }
146
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
147
+ return this.invokeCallable(closureToInvoke, args, invokeCtx, body.span.start);
148
+ }
149
+ case 'Block': {
150
+ // Block: evaluate with $ = element, $@ = accumulator
151
+ // this.ctx already has pipeValue set to element by caller
152
+ if (accumulator !== null) {
153
+ this.ctx.variables.set('@', accumulator);
154
+ }
155
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
156
+ return await this.evaluateBlockExpression(body);
157
+ }
158
+ case 'GroupedExpr': {
159
+ // Grouped: evaluate with $ = element, $@ = accumulator (for fold)
160
+ // this.ctx already has pipeValue set to element by caller
161
+ if (accumulator !== null) {
162
+ this.ctx.variables.set('@', accumulator);
163
+ }
164
+ // Evaluate the inner expression directly (don't call evaluateGroupedExpr,
165
+ // which would create another child context)
166
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
167
+ return await this.evaluatePipeChain(body.expression);
168
+ }
169
+ case 'Variable': {
170
+ // Bare $ = identity, return element unchanged
171
+ if (body.isPipeVar && !body.name && body.accessChain.length === 0) {
172
+ return element;
173
+ }
174
+ // $[idx] or $.field - evaluate access chain on current element
175
+ // this.ctx already has pipeValue set to element by caller
176
+ if (body.isPipeVar && body.accessChain.length > 0) {
177
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
178
+ return await this.evaluateVariableAsync(body);
179
+ }
180
+ // Variable closure: get closure and invoke with element
181
+ const varValue = getVariable(this.ctx, body.name ?? '');
182
+ if (!varValue) {
183
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_UNDEFINED_VARIABLE, `Undefined variable: $${body.name}`, body.span.start);
184
+ }
185
+ if (!isCallable(varValue)) {
186
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Collection body variable must be callable, got ${inferType(varValue)}`, body.span.start);
187
+ }
188
+ const args = [element];
189
+ if (accumulator !== null &&
190
+ varValue.kind === 'script' &&
191
+ varValue.params.length >= 2) {
192
+ args.push(accumulator);
193
+ }
194
+ // Create context with $@ for accumulator access
195
+ let invokeCtx = this.ctx;
196
+ if (accumulator !== null) {
197
+ invokeCtx = createChildContext(this.ctx);
198
+ invokeCtx.variables.set('@', accumulator);
199
+ }
200
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
201
+ return this.invokeCallable(varValue, args, invokeCtx, body.span.start);
202
+ }
203
+ case 'PostfixExpr': {
204
+ // PostfixExpr: evaluate with $ = element
205
+ // this.ctx already has pipeValue set to element by caller
206
+ if (accumulator !== null) {
207
+ this.ctx.variables.set('@', accumulator);
208
+ }
209
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
210
+ return await this.evaluatePostfixExpr(body);
211
+ }
212
+ case 'Spread': {
213
+ // Spread: return element as tuple
214
+ if (Array.isArray(element)) {
215
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
216
+ return this.createTupleFromList(element);
217
+ }
218
+ if (isDict(element)) {
219
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
220
+ return this.createTupleFromDict(element);
221
+ }
222
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Spread requires list or dict, got ${inferType(element)}`, body.span.start);
223
+ }
224
+ case 'HostCall': {
225
+ // Host function call: invoke with element as first arg
226
+ const fn = this.ctx.functions.get(body.name);
227
+ if (!fn) {
228
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_UNDEFINED_FUNCTION, `Unknown function: ${body.name}`, body.span.start, { functionName: body.name });
229
+ }
230
+ const args = [element];
231
+ if (accumulator !== null) {
232
+ args.push(accumulator);
233
+ }
234
+ // Handle both CallableFn and ApplicationCallable (task 1.5 will refactor validation)
235
+ const fnToCall = typeof fn === 'function' ? fn : fn.fn;
236
+ return fnToCall(args, this.ctx, body.span.start);
237
+ }
238
+ default: {
239
+ // TypeScript exhaustiveness check - should never reach here
240
+ const unknownBody = body;
241
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Unsupported iterator body type: ${unknownBody.type}`, unknownBody.span.start);
242
+ }
243
+ }
244
+ }
245
+ /**
246
+ * Evaluate each expression: sequential iteration returning list of all results.
247
+ *
248
+ * Syntax forms:
249
+ * collection -> each { body } -- $ is element
250
+ * collection -> each(init) { $@ + $ } -- $@ is accumulator (scan)
251
+ * collection -> each |x| body -- inline closure
252
+ * collection -> each |x, acc = init| body -- closure with accumulator
253
+ *
254
+ * Supports break for early termination (returns partial results).
255
+ */
256
+ async evaluateEach(node, input) {
257
+ const elements = await this.getIterableElements(input, node);
258
+ // Empty collection: return []
259
+ if (elements.length === 0) {
260
+ return [];
261
+ }
262
+ // Get initial accumulator value if present
263
+ let accumulator = null;
264
+ if (node.accumulator) {
265
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
266
+ accumulator = await this.evaluateExpression(node.accumulator);
267
+ }
268
+ else if (node.body.type === 'Closure' && node.body.params.length >= 2) {
269
+ // Inline closure with accumulator: |x, acc = init| body
270
+ const lastParam = node.body.params[node.body.params.length - 1];
271
+ if (lastParam?.defaultValue) {
272
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
273
+ accumulator = await this.evaluatePrimary(lastParam.defaultValue, this.ctx);
274
+ }
275
+ }
276
+ const results = [];
277
+ try {
278
+ for (const element of elements) {
279
+ this.checkAborted(node);
280
+ // Create child context for this iteration
281
+ const iterCtx = createChildContext(this.ctx);
282
+ iterCtx.pipeValue = element;
283
+ if (accumulator !== null) {
284
+ iterCtx.variables.set('@', accumulator);
285
+ }
286
+ // Temporarily swap context
287
+ const savedCtx = this.ctx;
288
+ this.ctx = iterCtx;
289
+ try {
290
+ const result = await this.evaluateIteratorBody(node.body, element, accumulator);
291
+ results.push(result);
292
+ // Update accumulator for next iteration (scan pattern)
293
+ if (accumulator !== null) {
294
+ accumulator = result;
295
+ }
296
+ }
297
+ finally {
298
+ this.ctx = savedCtx;
299
+ }
300
+ }
301
+ }
302
+ catch (e) {
303
+ if (e instanceof BreakSignal) {
304
+ // Break: return partial results collected before break
305
+ return results;
306
+ }
307
+ throw e;
308
+ }
309
+ return results;
310
+ }
311
+ /**
312
+ * Evaluate map expression: parallel iteration returning list of all results.
313
+ *
314
+ * Uses Promise.all for concurrent execution.
315
+ * Concurrency limit via ^(limit: N) annotation.
316
+ *
317
+ * NOTE: Each iteration uses a separate evaluator instance with its own context
318
+ * to avoid late binding issues in parallel execution. This ensures that each
319
+ * iteration sees its own $ value without interference from other parallel iterations.
320
+ */
321
+ async evaluateMap(node, input) {
322
+ const elements = await this.getIterableElements(input, node);
323
+ // Empty collection: return []
324
+ if (elements.length === 0) {
325
+ return [];
326
+ }
327
+ // Check for concurrency limit annotation
328
+ const limitAnnotation = this.ctx.annotationStack.at(-1)?.['limit'];
329
+ const concurrencyLimit = typeof limitAnnotation === 'number' && limitAnnotation > 0
330
+ ? Math.floor(limitAnnotation)
331
+ : Infinity;
332
+ if (concurrencyLimit === Infinity) {
333
+ // No limit: all in parallel
334
+ // Create separate evaluator instance for each element to avoid late binding
335
+ const promises = elements.map((element) => {
336
+ const elementCtx = createChildContext(this.ctx);
337
+ elementCtx.pipeValue = element;
338
+ const evaluator = getEvaluator(elementCtx);
339
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
340
+ return evaluator.evaluateIteratorBody(node.body, element, null);
341
+ });
342
+ return Promise.all(promises);
343
+ }
344
+ // With limit: process in batches
345
+ const results = [];
346
+ for (let i = 0; i < elements.length; i += concurrencyLimit) {
347
+ this.checkAborted(node);
348
+ const batch = elements.slice(i, i + concurrencyLimit);
349
+ const batchPromises = batch.map((element) => {
350
+ const elementCtx = createChildContext(this.ctx);
351
+ elementCtx.pipeValue = element;
352
+ const evaluator = getEvaluator(elementCtx);
353
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
354
+ return evaluator.evaluateIteratorBody(node.body, element, null);
355
+ });
356
+ const batchResults = await Promise.all(batchPromises);
357
+ results.push(...batchResults);
358
+ }
359
+ return results;
360
+ }
361
+ /**
362
+ * Evaluate fold expression: sequential reduction returning final result only.
363
+ *
364
+ * Accumulator is required.
365
+ * Empty collection: returns initial accumulator value.
366
+ */
367
+ async evaluateFold(node, input) {
368
+ const elements = await this.getIterableElements(input, node);
369
+ // Get initial accumulator value
370
+ let accumulator;
371
+ if (node.accumulator) {
372
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
373
+ accumulator = await this.evaluateExpression(node.accumulator);
374
+ }
375
+ else if (node.body.type === 'Closure' && node.body.params.length >= 2) {
376
+ // Inline closure with accumulator: |x, acc = init| body
377
+ const lastParam = node.body.params[node.body.params.length - 1];
378
+ if (lastParam?.defaultValue) {
379
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
380
+ accumulator = await this.evaluatePrimary(lastParam.defaultValue, this.ctx);
381
+ }
382
+ else {
383
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Fold requires accumulator: use |x, acc = init| or fold(init) { }', node.span.start);
384
+ }
385
+ }
386
+ else if (node.body.type === 'Variable' && !node.body.isPipeVar) {
387
+ // Variable closure: the closure itself must have an accumulator default
388
+ const varValue = getVariable(this.ctx, node.body.name ?? '');
389
+ if (!varValue || !isCallable(varValue) || varValue.kind !== 'script') {
390
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Fold variable must be a script closure with accumulator parameter', node.span.start);
391
+ }
392
+ const lastParam = varValue.params[varValue.params.length - 1];
393
+ if (lastParam && lastParam.defaultValue !== null) {
394
+ accumulator = lastParam.defaultValue;
395
+ }
396
+ else {
397
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Fold closure must have accumulator parameter with default value', node.span.start);
398
+ }
399
+ }
400
+ else {
401
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Fold requires accumulator: use |x, acc = init| or fold(init) { }', node.span.start);
402
+ }
403
+ // Empty collection: return initial accumulator
404
+ if (elements.length === 0) {
405
+ return accumulator;
406
+ }
407
+ for (const element of elements) {
408
+ this.checkAborted(node);
409
+ // Create child context for this iteration
410
+ const iterCtx = createChildContext(this.ctx);
411
+ iterCtx.pipeValue = element;
412
+ iterCtx.variables.set('@', accumulator);
413
+ // Temporarily swap context
414
+ const savedCtx = this.ctx;
415
+ this.ctx = iterCtx;
416
+ try {
417
+ accumulator = await this.evaluateIteratorBody(node.body, element, accumulator);
418
+ }
419
+ finally {
420
+ this.ctx = savedCtx;
421
+ }
422
+ }
423
+ return accumulator;
424
+ }
425
+ /**
426
+ * Evaluate filter expression: parallel filtering, returns elements where predicate is truthy.
427
+ *
428
+ * Executes predicate for all elements concurrently.
429
+ * Preserves original element order.
430
+ * Empty collection: returns [].
431
+ *
432
+ * NOTE: Each iteration uses a separate evaluator instance with its own context
433
+ * to avoid late binding issues in parallel execution.
434
+ */
435
+ async evaluateFilter(node, input) {
436
+ const elements = await this.getIterableElements(input, node);
437
+ // Empty collection: return []
438
+ if (elements.length === 0) {
439
+ return [];
440
+ }
441
+ // Evaluate predicate for all elements in parallel
442
+ // Create separate evaluator instance for each element to avoid late binding
443
+ const predicatePromises = elements.map(async (element) => {
444
+ this.checkAborted(node);
445
+ const elementCtx = createChildContext(this.ctx);
446
+ elementCtx.pipeValue = element;
447
+ const evaluator = getEvaluator(elementCtx);
448
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
449
+ const result = await evaluator.evaluateIteratorBody(node.body, element, null);
450
+ // Predicate must return boolean
451
+ if (typeof result !== 'boolean') {
452
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Filter predicate must return boolean, got ${inferType(result)}`, node.span.start);
453
+ }
454
+ return { element, keep: result };
455
+ });
456
+ const results = await Promise.all(predicatePromises);
457
+ // Filter elements where predicate was true
458
+ return results.filter((r) => r.keep).map((r) => r.element);
459
+ }
460
+ };
461
+ }
462
+ // Export with type assertion to work around TS4094 limitation
463
+ // TypeScript can't generate declarations for functions returning classes with protected members
464
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
465
+ export const CollectionsMixin = createCollectionsMixin;
466
+ //# sourceMappingURL=collections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.js","sourceRoot":"","sources":["../../../../../src/runtime/core/eval/mixins/collections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * ControlFlowMixin: Conditionals, Loops, and Blocks
3
+ *
4
+ * Handles control flow constructs:
5
+ * - Conditionals (if-else)
6
+ * - While loops
7
+ * - Do-while loops
8
+ * - Block expressions
9
+ * - Body evaluation
10
+ *
11
+ * Interface requirements (from spec):
12
+ * - evaluateConditional(node) -> Promise<RillValue>
13
+ * - evaluateWhileLoop(node) -> Promise<RillValue>
14
+ * - evaluateDoWhileLoop(node) -> Promise<RillValue>
15
+ * - evaluateBlockExpression(node) -> Promise<RillValue>
16
+ * - evaluateBody(node) -> Promise<RillValue>
17
+ * - evaluateBodyExpression(node) -> Promise<RillValue>
18
+ *
19
+ * Error Handling:
20
+ * - Non-boolean conditions throw RuntimeError(RUNTIME_TYPE_ERROR) [EC-15]
21
+ * - BreakSignal/ReturnSignal are caught and handled appropriately [EC-16]
22
+ * - Body evaluation errors propagate correctly [EC-17]
23
+ *
24
+ * @internal
25
+ */
26
+ export declare const ControlFlowMixin: any;
27
+ //# sourceMappingURL=control-flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-flow.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/core/eval/mixins/control-flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AA6ZH,eAAO,MAAM,gBAAgB,EAA6B,GAAG,CAAC"}