@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,246 @@
1
+ /**
2
+ * Callable Types
3
+ *
4
+ * Unified representation for all callable values in Rill:
5
+ * - ScriptCallable: Closures parsed from Rill source code
6
+ * - RuntimeCallable: Rill's built-in functions (type, log, json, identity)
7
+ * - ApplicationCallable: Host application-provided functions
8
+ *
9
+ * Public API for host applications.
10
+ *
11
+ * ## Implementation Notes
12
+ *
13
+ * [DEVIATION] EC-1 Error Context Fields
14
+ * - Spec defines error context as { functionName, paramName, expectedType, actualType }
15
+ * - EC-1 (excess arguments) uses { functionName, expectedCount, actualCount }
16
+ * - Rationale: Excess arguments is an arity check, not a type check
17
+ *
18
+ * [ASSUMPTION] validateDefaultValueType _functionName Parameter
19
+ * - Parameter accepted but unused (prefixed with _ to satisfy eslint)
20
+ * - Kept for API consistency with validateHostFunctionArgs signature
21
+ *
22
+ * [ASSUMPTION] validateHostFunctionArgs Args Array Mutation
23
+ * - args array mutated in-place when substituting default values
24
+ * - Per spec algorithm: "Apply default values for missing arguments before validation"
25
+ * - Mutation occurs before host function receives args, maintaining immutability contract
26
+ */
27
+ import { RILL_ERROR_CODES, RuntimeError } from '../../types.js';
28
+ import { astEquals } from './equals.js';
29
+ import { formatValue, inferType, isTuple } from './values.js';
30
+ /** Type guard for any callable */
31
+ export function isCallable(value) {
32
+ return (typeof value === 'object' &&
33
+ value !== null &&
34
+ '__type' in value &&
35
+ value.__type === 'callable');
36
+ }
37
+ /** Type guard for script callable */
38
+ export function isScriptCallable(value) {
39
+ return isCallable(value) && value.kind === 'script';
40
+ }
41
+ /** Type guard for runtime callable */
42
+ export function isRuntimeCallable(value) {
43
+ return isCallable(value) && value.kind === 'runtime';
44
+ }
45
+ /** Type guard for application callable */
46
+ export function isApplicationCallable(value) {
47
+ return isCallable(value) && value.kind === 'application';
48
+ }
49
+ /**
50
+ * Create an application callable from a host function.
51
+ * Creates an untyped callable (params: undefined) that skips validation.
52
+ * @param fn The function to wrap
53
+ * @param isProperty If true, auto-invokes when accessed from dict (property-style)
54
+ */
55
+ export function callable(fn, isProperty = false) {
56
+ return {
57
+ __type: 'callable',
58
+ kind: 'application',
59
+ params: undefined,
60
+ fn,
61
+ isProperty,
62
+ };
63
+ }
64
+ /** Type guard for dict (plain object, not array, not callable, not tuple) */
65
+ export function isDict(value) {
66
+ return (typeof value === 'object' &&
67
+ value !== null &&
68
+ !Array.isArray(value) &&
69
+ !isCallable(value) &&
70
+ !isTuple(value));
71
+ }
72
+ /** Format a callable for display */
73
+ export function formatCallable(callable) {
74
+ if (callable.kind === 'script') {
75
+ const paramStr = callable.params.map((p) => p.name).join(', ');
76
+ return `(${paramStr}) { ... }`;
77
+ }
78
+ return '(...) { [native] }';
79
+ }
80
+ /**
81
+ * Deep equality for script callables.
82
+ * Compares params, body AST structure, and defining scope.
83
+ *
84
+ * Two closures are equal if:
85
+ * 1. Same parameter names, types, and default values
86
+ * 2. Structurally identical body AST (ignoring source locations)
87
+ * 3. Same defining scope (reference equality)
88
+ */
89
+ export function callableEquals(a, b, valueEquals = (x, y) => formatValue(x) === formatValue(y)) {
90
+ // Compare params (name, type, default)
91
+ if (a.params.length !== b.params.length)
92
+ return false;
93
+ for (let i = 0; i < a.params.length; i++) {
94
+ const ap = a.params[i];
95
+ const bp = b.params[i];
96
+ if (ap === undefined || bp === undefined)
97
+ return false;
98
+ if (ap.name !== bp.name)
99
+ return false;
100
+ if (ap.typeName !== bp.typeName)
101
+ return false;
102
+ if (!valueEquals(ap.defaultValue ?? null, bp.defaultValue ?? null)) {
103
+ return false;
104
+ }
105
+ }
106
+ // Compare body by AST structure (ignoring source locations)
107
+ if (!astEquals(a.body, b.body)) {
108
+ return false;
109
+ }
110
+ // Compare defining scope by reference (same scope = same closure context)
111
+ if (a.definingScope !== b.definingScope)
112
+ return false;
113
+ return true;
114
+ }
115
+ /**
116
+ * Validate defaultValue type matches declared parameter type.
117
+ *
118
+ * Called at registration time to catch configuration errors early.
119
+ * Throws Error (not RuntimeError) to indicate registration failure.
120
+ *
121
+ * @param param - Parameter with defaultValue to validate
122
+ * @param _functionName - Function name (unused, kept for API consistency)
123
+ * @throws Error if defaultValue type doesn't match param.type
124
+ */
125
+ export function validateDefaultValueType(param, _functionName) {
126
+ if (param.defaultValue === undefined)
127
+ return;
128
+ const actualType = inferType(param.defaultValue);
129
+ const expectedType = param.type;
130
+ if (actualType !== expectedType) {
131
+ throw new Error(`Invalid defaultValue for parameter '${param.name}': expected ${expectedType}, got ${actualType}`);
132
+ }
133
+ }
134
+ /**
135
+ * Validate host function arguments against parameter declarations.
136
+ *
137
+ * Called before function invocation to enforce type contracts.
138
+ * Throws RuntimeError on validation failure.
139
+ *
140
+ * @param args - Evaluated arguments from call site
141
+ * @param params - Parameter declarations from function definition
142
+ * @param functionName - Function name for error messages
143
+ * @param location - Source location for error reporting
144
+ * @throws RuntimeError with RUNTIME_TYPE_ERROR on validation failure
145
+ */
146
+ export function validateHostFunctionArgs(args, params, functionName, location) {
147
+ // Check for excess arguments
148
+ if (args.length > params.length) {
149
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Function '${functionName}' expects ${params.length} arguments, got ${args.length}`, location, {
150
+ functionName,
151
+ expectedCount: params.length,
152
+ actualCount: args.length,
153
+ });
154
+ }
155
+ // Validate each parameter
156
+ for (let i = 0; i < params.length; i++) {
157
+ const param = params[i];
158
+ if (param === undefined)
159
+ continue;
160
+ let arg = args[i];
161
+ // Handle missing argument
162
+ if (arg === undefined) {
163
+ if (param.defaultValue !== undefined) {
164
+ // Substitute default value (already validated at registration)
165
+ arg = param.defaultValue;
166
+ args[i] = arg;
167
+ }
168
+ else {
169
+ // Missing required argument
170
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Missing required argument '${param.name}' for function '${functionName}'`, location, {
171
+ functionName,
172
+ paramName: param.name,
173
+ });
174
+ }
175
+ }
176
+ // Validate argument type
177
+ const actualType = inferType(arg);
178
+ const expectedType = param.type;
179
+ if (actualType !== expectedType) {
180
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Type mismatch in ${functionName}: parameter '${param.name}' expects ${expectedType}, got ${actualType}`, location, {
181
+ functionName,
182
+ paramName: param.name,
183
+ expectedType,
184
+ actualType,
185
+ });
186
+ }
187
+ }
188
+ }
189
+ /**
190
+ * Validate arguments against CallableParam[] for ApplicationCallable.
191
+ *
192
+ * Similar to validateHostFunctionArgs but works with CallableParam[] (used in ApplicationCallable).
193
+ * Validates argument count, applies defaults, and checks types for primitive parameters.
194
+ *
195
+ * @param args - Arguments array (mutated in-place when defaults applied)
196
+ * @param params - Parameter definitions
197
+ * @param functionName - Function name for error messages
198
+ * @param location - Source location for error reporting
199
+ * @throws RuntimeError with RUNTIME_TYPE_ERROR on validation failure
200
+ */
201
+ export function validateCallableArgs(args, params, functionName, location) {
202
+ // Check for excess arguments
203
+ if (args.length > params.length) {
204
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Function '${functionName}' expects ${params.length} arguments, got ${args.length}`, location, {
205
+ functionName,
206
+ expectedCount: params.length,
207
+ actualCount: args.length,
208
+ });
209
+ }
210
+ // Validate each parameter
211
+ for (let i = 0; i < params.length; i++) {
212
+ const param = params[i];
213
+ if (param === undefined)
214
+ continue;
215
+ let arg = args[i];
216
+ // Handle missing argument
217
+ if (arg === undefined) {
218
+ if (param.defaultValue !== null) {
219
+ // Substitute default value
220
+ arg = param.defaultValue;
221
+ args[i] = arg;
222
+ }
223
+ else {
224
+ // Missing required argument
225
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Missing required argument '${param.name}' for function '${functionName}'`, location, {
226
+ functionName,
227
+ paramName: param.name,
228
+ });
229
+ }
230
+ }
231
+ // Validate argument type (only for typed parameters)
232
+ if (param.typeName !== null) {
233
+ const actualType = inferType(arg);
234
+ const expectedType = param.typeName;
235
+ if (actualType !== expectedType) {
236
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Type mismatch in ${functionName}: parameter '${param.name}' expects ${expectedType}, got ${actualType}`, location, {
237
+ functionName,
238
+ paramName: param.name,
239
+ expectedType,
240
+ actualType,
241
+ });
242
+ }
243
+ }
244
+ }
245
+ }
246
+ //# sourceMappingURL=callable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callable.js","sourceRoot":"","sources":["../../../src/runtime/core/callable.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Runtime Context Factory
3
+ *
4
+ * Creates and configures the runtime context for script execution.
5
+ * Public API for host applications.
6
+ */
7
+ import type { RuntimeContext, RuntimeOptions } from './types.js';
8
+ import { type RillValue } from './values.js';
9
+ /**
10
+ * Create a runtime context for script execution.
11
+ * This is the main entry point for configuring the Rill runtime.
12
+ */
13
+ export declare function createRuntimeContext(options?: RuntimeOptions): RuntimeContext;
14
+ /**
15
+ * Create a child context for block scoping.
16
+ * Child inherits parent's functions, methods, callbacks, etc.
17
+ * but has its own variables map. Variable lookups walk the parent chain.
18
+ */
19
+ export declare function createChildContext(parent: RuntimeContext): RuntimeContext;
20
+ /**
21
+ * Get a variable value, walking the parent chain.
22
+ * Returns undefined if not found in any scope.
23
+ */
24
+ export declare function getVariable(ctx: RuntimeContext, name: string): RillValue | undefined;
25
+ /**
26
+ * Check if a variable exists in any scope.
27
+ */
28
+ export declare function hasVariable(ctx: RuntimeContext, name: string): boolean;
29
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/runtime/core/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAGV,cAAc,EACd,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAarE;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,cAAmB,GAC3B,cAAc,CAyGhB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAezE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,MAAM,GACX,SAAS,GAAG,SAAS,CAQvB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQtE"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Runtime Context Factory
3
+ *
4
+ * Creates and configures the runtime context for script execution.
5
+ * Public API for host applications.
6
+ */
7
+ import { RILL_ERROR_CODES, RuntimeError } from '../../types.js';
8
+ import { BUILTIN_FUNCTIONS, BUILTIN_METHODS } from '../ext/builtins.js';
9
+ import { bindDictCallables } from './types.js';
10
+ import { formatValue, inferType } from './values.js';
11
+ import { callable, validateDefaultValueType, } from './callable.js';
12
+ const defaultCallbacks = {
13
+ onLog: (value) => {
14
+ console.log(formatValue(value));
15
+ },
16
+ };
17
+ /**
18
+ * Create a runtime context for script execution.
19
+ * This is the main entry point for configuring the Rill runtime.
20
+ */
21
+ export function createRuntimeContext(options = {}) {
22
+ const variables = new Map();
23
+ const variableTypes = new Map();
24
+ const functions = new Map();
25
+ const methods = new Map();
26
+ // Set initial variables (and infer their types)
27
+ if (options.variables) {
28
+ for (const [name, value] of Object.entries(options.variables)) {
29
+ // Bind callables in dicts to their containing dict
30
+ const boundValue = bindDictCallables(value);
31
+ variables.set(name, boundValue);
32
+ variableTypes.set(name, inferType(boundValue));
33
+ }
34
+ }
35
+ // Set built-in functions
36
+ for (const [name, fn] of Object.entries(BUILTIN_FUNCTIONS)) {
37
+ functions.set(name, fn);
38
+ }
39
+ // Set custom functions (can override built-ins)
40
+ if (options.functions) {
41
+ for (const [name, definition] of Object.entries(options.functions)) {
42
+ // Type-discriminate CallableFn vs HostFunctionDefinition
43
+ if ('fn' in definition) {
44
+ // It's HostFunctionDefinition with typed parameters
45
+ const { params, fn } = definition;
46
+ // Validate default values at registration time (EC-4)
47
+ if (params) {
48
+ for (const param of params) {
49
+ validateDefaultValueType(param, name);
50
+ }
51
+ // Convert HostFunctionParam[] to CallableParam[]
52
+ const callableParams = params.map((p) => ({
53
+ name: p.name,
54
+ typeName: p.type ?? null,
55
+ defaultValue: p.defaultValue ?? null,
56
+ }));
57
+ // Create ApplicationCallable with params field populated
58
+ const appCallable = callable(fn, false);
59
+ const typedCallable = {
60
+ ...appCallable,
61
+ params: callableParams,
62
+ };
63
+ // Store ApplicationCallable for runtime validation in task 1.5
64
+ functions.set(name, typedCallable);
65
+ }
66
+ else {
67
+ // HostFunctionDefinition without params (backward compat)
68
+ functions.set(name, fn);
69
+ }
70
+ }
71
+ else {
72
+ // It's CallableFn (backward compat)
73
+ functions.set(name, definition);
74
+ }
75
+ }
76
+ }
77
+ // Set built-in methods
78
+ for (const [name, impl] of Object.entries(BUILTIN_METHODS)) {
79
+ methods.set(name, impl);
80
+ }
81
+ // Compile autoException patterns into RegExp objects
82
+ const autoExceptions = [];
83
+ if (options.autoExceptions) {
84
+ for (const pattern of options.autoExceptions) {
85
+ try {
86
+ autoExceptions.push(new RegExp(pattern));
87
+ }
88
+ catch {
89
+ throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_INVALID_PATTERN, `Invalid autoException pattern: ${pattern}`, undefined, { pattern });
90
+ }
91
+ }
92
+ }
93
+ return {
94
+ parent: undefined,
95
+ variables,
96
+ variableTypes,
97
+ functions,
98
+ methods,
99
+ callbacks: { ...defaultCallbacks, ...options.callbacks },
100
+ observability: options.observability ?? {},
101
+ pipeValue: null,
102
+ timeout: options.timeout,
103
+ autoExceptions,
104
+ signal: options.signal,
105
+ annotationStack: [],
106
+ };
107
+ }
108
+ /**
109
+ * Create a child context for block scoping.
110
+ * Child inherits parent's functions, methods, callbacks, etc.
111
+ * but has its own variables map. Variable lookups walk the parent chain.
112
+ */
113
+ export function createChildContext(parent) {
114
+ return {
115
+ parent,
116
+ variables: new Map(),
117
+ variableTypes: new Map(),
118
+ functions: parent.functions,
119
+ methods: parent.methods,
120
+ callbacks: parent.callbacks,
121
+ observability: parent.observability,
122
+ pipeValue: parent.pipeValue,
123
+ timeout: parent.timeout,
124
+ autoExceptions: parent.autoExceptions,
125
+ signal: parent.signal,
126
+ annotationStack: parent.annotationStack,
127
+ };
128
+ }
129
+ /**
130
+ * Get a variable value, walking the parent chain.
131
+ * Returns undefined if not found in any scope.
132
+ */
133
+ export function getVariable(ctx, name) {
134
+ if (ctx.variables.has(name)) {
135
+ return ctx.variables.get(name);
136
+ }
137
+ if (ctx.parent) {
138
+ return getVariable(ctx.parent, name);
139
+ }
140
+ return undefined;
141
+ }
142
+ /**
143
+ * Check if a variable exists in any scope.
144
+ */
145
+ export function hasVariable(ctx, name) {
146
+ if (ctx.variables.has(name)) {
147
+ return true;
148
+ }
149
+ if (ctx.parent) {
150
+ return hasVariable(ctx.parent, name);
151
+ }
152
+ return false;
153
+ }
154
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/runtime/core/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAOxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,QAAQ,EACR,wBAAwB,GAEzB,MAAM,eAAe,CAAC;AAEvB,MAAM,gBAAgB,GAAqB;IACzC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;QACf,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAA0B,EAAE;IAE5B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC/C,MAAM,aAAa,GAAG,IAAI,GAAG,EAG1B,CAAC;IACJ,MAAM,SAAS,GAAG,IAAI,GAAG,EAItB,CAAC;IACJ,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IAE9C,gDAAgD;IAChD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9D,mDAAmD;YACnD,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC5C,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAChC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC3D,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,gDAAgD;IAChD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACnE,yDAAyD;YACzD,IAAI,IAAI,IAAI,UAAU,EAAE,CAAC;gBACvB,oDAAoD;gBACpD,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,UAAU,CAAC;gBAElC,sDAAsD;gBACtD,IAAI,MAAM,EAAE,CAAC;oBACX,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;wBAC3B,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBACxC,CAAC;oBAED,iDAAiD;oBACjD,MAAM,cAAc,GAAoB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACzD,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,QAAQ,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;wBACxB,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,IAAI;qBACrC,CAAC,CAAC,CAAC;oBAEJ,yDAAyD;oBACzD,MAAM,WAAW,GAAG,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oBACxC,MAAM,aAAa,GAAgD;wBACjE,GAAG,WAAW;wBACd,MAAM,EAAE,cAAc;qBACvB,CAAC;oBAEF,+DAA+D;oBAC/D,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBACrC,CAAC;qBAAM,CAAC;oBACN,0DAA0D;oBAC1D,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,oCAAoC;gBACpC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,qDAAqD;IACrD,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,cAAc,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,YAAY,CACpB,gBAAgB,CAAC,uBAAuB,EACxC,kCAAkC,OAAO,EAAE,EAC3C,SAAS,EACT,EAAE,OAAO,EAAE,CACZ,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,SAAS;QACT,aAAa;QACb,SAAS;QACT,OAAO;QACP,SAAS,EAAE,EAAE,GAAG,gBAAgB,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE;QACxD,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE;QAC1C,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,cAAc;QACd,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,eAAe,EAAE,EAAE;KACpB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAsB;IACvD,OAAO;QACL,MAAM;QACN,SAAS,EAAE,IAAI,GAAG,EAAqB;QACvC,aAAa,EAAE,IAAI,GAAG,EAAiD;QACvE,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,eAAe,EAAE,MAAM,CAAC,eAAe;KACxC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,GAAmB,EACnB,IAAY;IAEZ,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAmB,EAAE,IAAY;IAC3D,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * AST Structural Equality
3
+ *
4
+ * Compares AST nodes for structural equality, ignoring source locations.
5
+ * Used for closure equality: two closures with identical structure are equal.
6
+ */
7
+ import type { ASTNode } from '../../types.js';
8
+ export declare function astEquals(a: ASTNode, b: ASTNode): boolean;
9
+ //# sourceMappingURL=equals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equals.d.ts","sourceRoot":"","sources":["../../../src/runtime/core/equals.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAGV,OAAO,EAmCR,MAAM,gBAAgB,CAAC;AAiBxB,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAmHzD"}