@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.
- package/LICENSE +21 -0
- package/README.md +187 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +69 -0
- package/dist/cli.js.map +1 -0
- package/dist/demo.d.ts +6 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/demo.js +121 -0
- package/dist/demo.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/lexer/errors.d.ts +9 -0
- package/dist/lexer/errors.d.ts.map +1 -0
- package/dist/lexer/errors.js +12 -0
- package/dist/lexer/errors.js.map +1 -0
- package/dist/lexer/helpers.d.ts +14 -0
- package/dist/lexer/helpers.d.ts.map +1 -0
- package/dist/lexer/helpers.js +30 -0
- package/dist/lexer/helpers.js.map +1 -0
- package/dist/lexer/index.d.ts +8 -0
- package/dist/lexer/index.d.ts.map +1 -0
- package/dist/lexer/index.js +8 -0
- package/dist/lexer/index.js.map +1 -0
- package/dist/lexer/operators.d.ts +11 -0
- package/dist/lexer/operators.d.ts.map +1 -0
- package/dist/lexer/operators.js +58 -0
- package/dist/lexer/operators.js.map +1 -0
- package/dist/lexer/readers.d.ts +12 -0
- package/dist/lexer/readers.d.ts.map +1 -0
- package/dist/lexer/readers.js +144 -0
- package/dist/lexer/readers.js.map +1 -0
- package/dist/lexer/state.d.ts +18 -0
- package/dist/lexer/state.d.ts.map +1 -0
- package/dist/lexer/state.js +37 -0
- package/dist/lexer/state.js.map +1 -0
- package/dist/lexer/tokenizer.d.ts +9 -0
- package/dist/lexer/tokenizer.d.ts.map +1 -0
- package/dist/lexer/tokenizer.js +100 -0
- package/dist/lexer/tokenizer.js.map +1 -0
- package/dist/lexer.d.ts +19 -0
- package/dist/lexer.d.ts.map +1 -0
- package/dist/lexer.js +344 -0
- package/dist/lexer.js.map +1 -0
- package/dist/parser/arithmetic.d.ts +16 -0
- package/dist/parser/arithmetic.d.ts.map +1 -0
- package/dist/parser/arithmetic.js +128 -0
- package/dist/parser/arithmetic.js.map +1 -0
- package/dist/parser/boolean.d.ts +15 -0
- package/dist/parser/boolean.d.ts.map +1 -0
- package/dist/parser/boolean.js +20 -0
- package/dist/parser/boolean.js.map +1 -0
- package/dist/parser/control-flow.d.ts +56 -0
- package/dist/parser/control-flow.d.ts.map +1 -0
- package/dist/parser/control-flow.js +167 -0
- package/dist/parser/control-flow.js.map +1 -0
- package/dist/parser/expressions.d.ts +23 -0
- package/dist/parser/expressions.d.ts.map +1 -0
- package/dist/parser/expressions.js +950 -0
- package/dist/parser/expressions.js.map +1 -0
- package/dist/parser/extraction.d.ts +48 -0
- package/dist/parser/extraction.d.ts.map +1 -0
- package/dist/parser/extraction.js +279 -0
- package/dist/parser/extraction.js.map +1 -0
- package/dist/parser/functions.d.ts +20 -0
- package/dist/parser/functions.d.ts.map +1 -0
- package/dist/parser/functions.js +96 -0
- package/dist/parser/functions.js.map +1 -0
- package/dist/parser/helpers.d.ts +94 -0
- package/dist/parser/helpers.d.ts.map +1 -0
- package/dist/parser/helpers.js +225 -0
- package/dist/parser/helpers.js.map +1 -0
- package/dist/parser/index.d.ts +49 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +73 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/literals.d.ts +37 -0
- package/dist/parser/literals.d.ts.map +1 -0
- package/dist/parser/literals.js +373 -0
- package/dist/parser/literals.js.map +1 -0
- package/dist/parser/parser-collect.d.ts +16 -0
- package/dist/parser/parser-collect.d.ts.map +1 -0
- package/dist/parser/parser-collect.js +125 -0
- package/dist/parser/parser-collect.js.map +1 -0
- package/dist/parser/parser-control.d.ts +20 -0
- package/dist/parser/parser-control.d.ts.map +1 -0
- package/dist/parser/parser-control.js +120 -0
- package/dist/parser/parser-control.js.map +1 -0
- package/dist/parser/parser-expr.d.ts +37 -0
- package/dist/parser/parser-expr.d.ts.map +1 -0
- package/dist/parser/parser-expr.js +639 -0
- package/dist/parser/parser-expr.js.map +1 -0
- package/dist/parser/parser-extract.d.ts +17 -0
- package/dist/parser/parser-extract.d.ts.map +1 -0
- package/dist/parser/parser-extract.js +222 -0
- package/dist/parser/parser-extract.js.map +1 -0
- package/dist/parser/parser-functions.d.ts +21 -0
- package/dist/parser/parser-functions.d.ts.map +1 -0
- package/dist/parser/parser-functions.js +155 -0
- package/dist/parser/parser-functions.js.map +1 -0
- package/dist/parser/parser-literals.d.ts +22 -0
- package/dist/parser/parser-literals.d.ts.map +1 -0
- package/dist/parser/parser-literals.js +288 -0
- package/dist/parser/parser-literals.js.map +1 -0
- package/dist/parser/parser-script.d.ts +21 -0
- package/dist/parser/parser-script.d.ts.map +1 -0
- package/dist/parser/parser-script.js +174 -0
- package/dist/parser/parser-script.js.map +1 -0
- package/dist/parser/parser-variables.d.ts +20 -0
- package/dist/parser/parser-variables.d.ts.map +1 -0
- package/dist/parser/parser-variables.js +146 -0
- package/dist/parser/parser-variables.js.map +1 -0
- package/dist/parser/parser.d.ts +49 -0
- package/dist/parser/parser.d.ts.map +1 -0
- package/dist/parser/parser.js +54 -0
- package/dist/parser/parser.js.map +1 -0
- package/dist/parser/script.d.ts +14 -0
- package/dist/parser/script.d.ts.map +1 -0
- package/dist/parser/script.js +196 -0
- package/dist/parser/script.js.map +1 -0
- package/dist/parser/state.d.ts +40 -0
- package/dist/parser/state.d.ts.map +1 -0
- package/dist/parser/state.js +129 -0
- package/dist/parser/state.js.map +1 -0
- package/dist/parser/variables.d.ts +10 -0
- package/dist/parser/variables.d.ts.map +1 -0
- package/dist/parser/variables.js +215 -0
- package/dist/parser/variables.js.map +1 -0
- package/dist/runtime/ast-equals.d.ts +13 -0
- package/dist/runtime/ast-equals.d.ts.map +1 -0
- package/dist/runtime/ast-equals.js +447 -0
- package/dist/runtime/ast-equals.js.map +1 -0
- package/dist/runtime/builtins.d.ts +13 -0
- package/dist/runtime/builtins.d.ts.map +1 -0
- package/dist/runtime/builtins.js +180 -0
- package/dist/runtime/builtins.js.map +1 -0
- package/dist/runtime/callable.d.ts +88 -0
- package/dist/runtime/callable.d.ts.map +1 -0
- package/dist/runtime/callable.js +98 -0
- package/dist/runtime/callable.js.map +1 -0
- package/dist/runtime/context.d.ts +13 -0
- package/dist/runtime/context.d.ts.map +1 -0
- package/dist/runtime/context.js +73 -0
- package/dist/runtime/context.js.map +1 -0
- package/dist/runtime/core/callable.d.ts +171 -0
- package/dist/runtime/core/callable.d.ts.map +1 -0
- package/dist/runtime/core/callable.js +246 -0
- package/dist/runtime/core/callable.js.map +1 -0
- package/dist/runtime/core/context.d.ts +29 -0
- package/dist/runtime/core/context.d.ts.map +1 -0
- package/dist/runtime/core/context.js +154 -0
- package/dist/runtime/core/context.js.map +1 -0
- package/dist/runtime/core/equals.d.ts +9 -0
- package/dist/runtime/core/equals.d.ts.map +1 -0
- package/dist/runtime/core/equals.js +381 -0
- package/dist/runtime/core/equals.js.map +1 -0
- package/dist/runtime/core/eval/base.d.ts +65 -0
- package/dist/runtime/core/eval/base.d.ts.map +1 -0
- package/dist/runtime/core/eval/base.js +112 -0
- package/dist/runtime/core/eval/base.js.map +1 -0
- package/dist/runtime/core/eval/evaluator.d.ts +47 -0
- package/dist/runtime/core/eval/evaluator.d.ts.map +1 -0
- package/dist/runtime/core/eval/evaluator.js +73 -0
- package/dist/runtime/core/eval/evaluator.js.map +1 -0
- package/dist/runtime/core/eval/index.d.ts +57 -0
- package/dist/runtime/core/eval/index.d.ts.map +1 -0
- package/dist/runtime/core/eval/index.js +95 -0
- package/dist/runtime/core/eval/index.js.map +1 -0
- package/dist/runtime/core/eval/mixins/annotations.d.ts +19 -0
- package/dist/runtime/core/eval/mixins/annotations.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/annotations.js +146 -0
- package/dist/runtime/core/eval/mixins/annotations.js.map +1 -0
- package/dist/runtime/core/eval/mixins/closures.d.ts +49 -0
- package/dist/runtime/core/eval/mixins/closures.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/closures.js +479 -0
- package/dist/runtime/core/eval/mixins/closures.js.map +1 -0
- package/dist/runtime/core/eval/mixins/collections.d.ts +24 -0
- package/dist/runtime/core/eval/mixins/collections.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/collections.js +466 -0
- package/dist/runtime/core/eval/mixins/collections.js.map +1 -0
- package/dist/runtime/core/eval/mixins/control-flow.d.ts +27 -0
- package/dist/runtime/core/eval/mixins/control-flow.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/control-flow.js +369 -0
- package/dist/runtime/core/eval/mixins/control-flow.js.map +1 -0
- package/dist/runtime/core/eval/mixins/core.d.ts +24 -0
- package/dist/runtime/core/eval/mixins/core.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/core.js +335 -0
- package/dist/runtime/core/eval/mixins/core.js.map +1 -0
- package/dist/runtime/core/eval/mixins/expressions.d.ts +19 -0
- package/dist/runtime/core/eval/mixins/expressions.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/expressions.js +202 -0
- package/dist/runtime/core/eval/mixins/expressions.js.map +1 -0
- package/dist/runtime/core/eval/mixins/extraction.d.ts +10 -0
- package/dist/runtime/core/eval/mixins/extraction.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/extraction.js +250 -0
- package/dist/runtime/core/eval/mixins/extraction.js.map +1 -0
- package/dist/runtime/core/eval/mixins/literals.d.ts +23 -0
- package/dist/runtime/core/eval/mixins/literals.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/literals.js +180 -0
- package/dist/runtime/core/eval/mixins/literals.js.map +1 -0
- package/dist/runtime/core/eval/mixins/types.d.ts +20 -0
- package/dist/runtime/core/eval/mixins/types.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/types.js +109 -0
- package/dist/runtime/core/eval/mixins/types.js.map +1 -0
- package/dist/runtime/core/eval/mixins/variables.d.ts +34 -0
- package/dist/runtime/core/eval/mixins/variables.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/variables.js +247 -0
- package/dist/runtime/core/eval/mixins/variables.js.map +1 -0
- package/dist/runtime/core/eval/types.d.ts +41 -0
- package/dist/runtime/core/eval/types.d.ts.map +1 -0
- package/dist/runtime/core/eval/types.js +10 -0
- package/dist/runtime/core/eval/types.js.map +1 -0
- package/dist/runtime/core/evaluate.d.ts +42 -0
- package/dist/runtime/core/evaluate.d.ts.map +1 -0
- package/dist/runtime/core/evaluate.debug.js +1251 -0
- package/dist/runtime/core/evaluate.js +1913 -0
- package/dist/runtime/core/evaluate.js.map +1 -0
- package/dist/runtime/core/execute.d.ts +26 -0
- package/dist/runtime/core/execute.d.ts.map +1 -0
- package/dist/runtime/core/execute.js +177 -0
- package/dist/runtime/core/execute.js.map +1 -0
- package/dist/runtime/core/signals.d.ts +19 -0
- package/dist/runtime/core/signals.d.ts.map +1 -0
- package/dist/runtime/core/signals.js +26 -0
- package/dist/runtime/core/signals.js.map +1 -0
- package/dist/runtime/core/types.d.ts +177 -0
- package/dist/runtime/core/types.d.ts.map +1 -0
- package/dist/runtime/core/types.js +50 -0
- package/dist/runtime/core/types.js.map +1 -0
- package/dist/runtime/core/values.d.ts +66 -0
- package/dist/runtime/core/values.d.ts.map +1 -0
- package/dist/runtime/core/values.js +240 -0
- package/dist/runtime/core/values.js.map +1 -0
- package/dist/runtime/evaluate.d.ts +32 -0
- package/dist/runtime/evaluate.d.ts.map +1 -0
- package/dist/runtime/evaluate.js +1111 -0
- package/dist/runtime/evaluate.js.map +1 -0
- package/dist/runtime/execute.d.ts +26 -0
- package/dist/runtime/execute.d.ts.map +1 -0
- package/dist/runtime/execute.js +121 -0
- package/dist/runtime/execute.js.map +1 -0
- package/dist/runtime/ext/builtins.d.ts +16 -0
- package/dist/runtime/ext/builtins.d.ts.map +1 -0
- package/dist/runtime/ext/builtins.js +528 -0
- package/dist/runtime/ext/builtins.js.map +1 -0
- package/dist/runtime/ext/content-parser.d.ts +83 -0
- package/dist/runtime/ext/content-parser.d.ts.map +1 -0
- package/dist/runtime/ext/content-parser.js +536 -0
- package/dist/runtime/ext/content-parser.js.map +1 -0
- package/dist/runtime/index.d.ts +28 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +34 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/signals.d.ts +19 -0
- package/dist/runtime/signals.d.ts.map +1 -0
- package/dist/runtime/signals.js +26 -0
- package/dist/runtime/signals.js.map +1 -0
- package/dist/runtime/types.d.ts +169 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +50 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/values.d.ts +50 -0
- package/dist/runtime/values.d.ts.map +1 -0
- package/dist/runtime/values.js +209 -0
- package/dist/runtime/values.js.map +1 -0
- package/dist/runtime.d.ts +254 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +2014 -0
- package/dist/runtime.js.map +1 -0
- package/dist/types.d.ts +752 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +189 -0
- package/dist/types.js.map +1 -0
- package/docs/00_INDEX.md +65 -0
- package/docs/01_guide.md +390 -0
- package/docs/02_types.md +399 -0
- package/docs/03_variables.md +314 -0
- package/docs/04_operators.md +551 -0
- package/docs/05_control-flow.md +350 -0
- package/docs/06_closures.md +353 -0
- package/docs/07_collections.md +686 -0
- package/docs/08_iterators.md +330 -0
- package/docs/09_strings.md +205 -0
- package/docs/10_parsing.md +366 -0
- package/docs/11_reference.md +350 -0
- package/docs/12_examples.md +771 -0
- package/docs/13_modules.md +519 -0
- package/docs/14_host-integration.md +826 -0
- package/docs/15_grammar.ebnf +693 -0
- package/docs/16_conventions.md +696 -0
- package/docs/99_llm-reference.txt +300 -0
- package/docs/assets/logo.png +0 -0
- package/package.json +70 -0
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClosuresMixin: Closure and Method Invocation
|
|
3
|
+
*
|
|
4
|
+
* Handles all callable operations:
|
|
5
|
+
* - Host function calls
|
|
6
|
+
* - Closure calls (script callables)
|
|
7
|
+
* - Method calls on values
|
|
8
|
+
* - Invoke operations
|
|
9
|
+
* - Pipe invocations
|
|
10
|
+
* - Property access on piped values
|
|
11
|
+
* - Closure chains
|
|
12
|
+
*
|
|
13
|
+
* Interface requirements (from spec):
|
|
14
|
+
* - invokeCallable(callable, args, location) -> Promise<RillValue>
|
|
15
|
+
* - evaluateHostCall(node) -> Promise<RillValue>
|
|
16
|
+
* - evaluateClosureCall(node) -> Promise<RillValue>
|
|
17
|
+
* - evaluateClosureCallWithPipe(node, pipeInput) -> Promise<RillValue>
|
|
18
|
+
* - evaluatePipePropertyAccess(node, pipeInput) -> Promise<RillValue>
|
|
19
|
+
* - evaluateVariableInvoke(node, pipeInput) -> Promise<RillValue>
|
|
20
|
+
* - evaluatePipeInvoke(node, input) -> Promise<RillValue>
|
|
21
|
+
* - evaluateMethod(node, receiver) -> Promise<RillValue>
|
|
22
|
+
* - evaluateInvoke(node, receiver) -> Promise<RillValue>
|
|
23
|
+
* - evaluateClosureChain(node, input) -> Promise<RillValue>
|
|
24
|
+
*
|
|
25
|
+
* Error Handling:
|
|
26
|
+
* - Undefined functions throw RuntimeError(RUNTIME_UNDEFINED_FUNCTION) [EC-18]
|
|
27
|
+
* - Undefined methods throw RuntimeError(RUNTIME_UNDEFINED_METHOD) [EC-19]
|
|
28
|
+
* - Parameter type mismatches throw RuntimeError(RUNTIME_TYPE_ERROR) [EC-20]
|
|
29
|
+
* - Async operations timeout per TimeoutError [EC-21]
|
|
30
|
+
*
|
|
31
|
+
* ## Implementation Notes
|
|
32
|
+
*
|
|
33
|
+
* [DEVIATION] Function naming: Spec references validateHostFunctionArgs but implementation
|
|
34
|
+
* uses validateCallableArgs because ApplicationCallable stores CallableParam[] (not
|
|
35
|
+
* HostFunctionParam[]). The two interfaces have different type field names ('type' vs
|
|
36
|
+
* 'typeName'). Separate validation functions maintain proper abstraction boundaries.
|
|
37
|
+
*
|
|
38
|
+
* [ASSUMPTION] Excess argument validation occurs before default application to fail fast
|
|
39
|
+
* on arity mismatches, improving error messages. This matches the algorithm order in the
|
|
40
|
+
* spec where excess check happens first.
|
|
41
|
+
*
|
|
42
|
+
* [ASSUMPTION] boundDict substitution happens before validation for property-style
|
|
43
|
+
* callables to ensure type checks apply to the effective arguments (including bound dict).
|
|
44
|
+
* This prevents validation bypass when property-style callables are accessed.
|
|
45
|
+
*
|
|
46
|
+
* @internal
|
|
47
|
+
*/
|
|
48
|
+
import { RuntimeError, RILL_ERROR_CODES } from '../../../../types.js';
|
|
49
|
+
import { isCallable, isScriptCallable, isApplicationCallable, isDict, validateCallableArgs, } from '../../callable.js';
|
|
50
|
+
import { getVariable } from '../../context.js';
|
|
51
|
+
import { inferType, isTuple } from '../../values.js';
|
|
52
|
+
/**
|
|
53
|
+
* ClosuresMixin implementation.
|
|
54
|
+
*
|
|
55
|
+
* Evaluates callable operations: host functions, closures, methods, invocations.
|
|
56
|
+
* Handles parameter binding, type checking, and callable contexts.
|
|
57
|
+
*
|
|
58
|
+
* Depends on:
|
|
59
|
+
* - EvaluatorBase: ctx, checkAborted(), getNodeLocation(), withTimeout()
|
|
60
|
+
* - evaluateExpression() (from future CoreMixin composition)
|
|
61
|
+
* - evaluateBodyExpression() (from ControlFlowMixin)
|
|
62
|
+
*
|
|
63
|
+
* Methods added:
|
|
64
|
+
* - invokeCallable(callable, args, location) -> Promise<RillValue>
|
|
65
|
+
* - evaluateHostCall(node) -> Promise<RillValue>
|
|
66
|
+
* - evaluateClosureCall(node) -> Promise<RillValue>
|
|
67
|
+
* - evaluateClosureCallWithPipe(node, pipeInput) -> Promise<RillValue>
|
|
68
|
+
* - evaluatePipePropertyAccess(node, pipeInput) -> Promise<RillValue>
|
|
69
|
+
* - evaluateVariableInvoke(node, pipeInput) -> Promise<RillValue>
|
|
70
|
+
* - evaluatePipeInvoke(node, input) -> Promise<RillValue>
|
|
71
|
+
* - evaluateMethod(node, receiver) -> Promise<RillValue>
|
|
72
|
+
* - evaluateInvoke(node, receiver) -> Promise<RillValue>
|
|
73
|
+
* - evaluateClosureChain(node, input) -> Promise<RillValue>
|
|
74
|
+
* - evaluateArgs(argExprs) -> Promise<RillValue[]> (helper)
|
|
75
|
+
* - invokeFnCallable(callable, args, location) -> Promise<RillValue> (helper)
|
|
76
|
+
* - invokeScriptCallable(callable, args, location) -> Promise<RillValue> (helper)
|
|
77
|
+
* - invokeScriptCallableWithArgs(callable, tuple, location) -> Promise<RillValue> (helper)
|
|
78
|
+
* - createCallableContext(callable) -> RuntimeContext (helper)
|
|
79
|
+
* - validateParamType(param, value, location) -> void (helper)
|
|
80
|
+
* - inferTypeFromDefault(defaultValue) -> RillTypeName | null (helper)
|
|
81
|
+
*/
|
|
82
|
+
function createClosuresMixin(Base) {
|
|
83
|
+
return class ClosuresEvaluator extends Base {
|
|
84
|
+
/**
|
|
85
|
+
* Evaluate argument expressions while preserving the current pipeValue.
|
|
86
|
+
* Used by all callable invocations to prepare arguments.
|
|
87
|
+
*/
|
|
88
|
+
async evaluateArgs(argExprs) {
|
|
89
|
+
const savedPipeValue = this.ctx.pipeValue;
|
|
90
|
+
const args = [];
|
|
91
|
+
for (const arg of argExprs) {
|
|
92
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
93
|
+
args.push(await this.evaluateExpression(arg));
|
|
94
|
+
}
|
|
95
|
+
this.ctx.pipeValue = savedPipeValue;
|
|
96
|
+
return args;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Invoke any callable (host function, script closure, runtime function).
|
|
100
|
+
* Dispatches to appropriate invocation method based on callable kind.
|
|
101
|
+
*/
|
|
102
|
+
async invokeCallable(callable, args, callLocation) {
|
|
103
|
+
this.checkAborted();
|
|
104
|
+
if (callable.kind === 'script') {
|
|
105
|
+
return this.invokeScriptCallable(callable, args, callLocation);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
return this.invokeFnCallable(callable, args, callLocation);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Invoke runtime or application callable (native functions).
|
|
113
|
+
* Handles bound dict for property-style callables.
|
|
114
|
+
* Validates typed ApplicationCallable arguments before invocation.
|
|
115
|
+
*/
|
|
116
|
+
async invokeFnCallable(callable, args, callLocation, functionName = 'callable') {
|
|
117
|
+
// Apply boundDict BEFORE validation (property-style callables need dict as first arg)
|
|
118
|
+
const effectiveArgs = callable.boundDict && args.length === 0 ? [callable.boundDict] : args;
|
|
119
|
+
// Validate arguments for typed ApplicationCallable (task 1.5)
|
|
120
|
+
// Only validate if callable has params metadata (not undefined)
|
|
121
|
+
// ApplicationCallable from HostFunctionDefinition: params is CallableParam[] (may be empty for zero-arg functions)
|
|
122
|
+
// ApplicationCallable from callable(): params is undefined (untyped, skip validation)
|
|
123
|
+
if (isApplicationCallable(callable) && callable.params !== undefined) {
|
|
124
|
+
// Validate with effective args (validates count, applies defaults, checks types)
|
|
125
|
+
validateCallableArgs(effectiveArgs, callable.params, functionName, callLocation);
|
|
126
|
+
}
|
|
127
|
+
const result = callable.fn(effectiveArgs, this.ctx, callLocation);
|
|
128
|
+
return result instanceof Promise ? await result : result;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Create callable context for script closure invocation.
|
|
132
|
+
* Sets up parent scope for late-bound variable resolution.
|
|
133
|
+
*/
|
|
134
|
+
createCallableContext(callable) {
|
|
135
|
+
// Create a child context with the defining scope as parent
|
|
136
|
+
// This enables late-bound variable resolution through the scope chain
|
|
137
|
+
const callableCtx = {
|
|
138
|
+
...this.ctx,
|
|
139
|
+
parent: callable.definingScope,
|
|
140
|
+
variables: new Map(),
|
|
141
|
+
variableTypes: new Map(),
|
|
142
|
+
};
|
|
143
|
+
if (callable.boundDict) {
|
|
144
|
+
callableCtx.pipeValue = callable.boundDict;
|
|
145
|
+
}
|
|
146
|
+
return callableCtx;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Infer type from default value for parameter type checking.
|
|
150
|
+
*/
|
|
151
|
+
inferTypeFromDefault(defaultValue) {
|
|
152
|
+
if (defaultValue === null)
|
|
153
|
+
return null;
|
|
154
|
+
const t = inferType(defaultValue);
|
|
155
|
+
return t === 'string' || t === 'number' || t === 'bool' ? t : null;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Validate parameter type against actual value.
|
|
159
|
+
* Throws RuntimeError on type mismatch.
|
|
160
|
+
*/
|
|
161
|
+
validateParamType(param, value, callLocation) {
|
|
162
|
+
const expectedType = param.typeName ?? this.inferTypeFromDefault(param.defaultValue);
|
|
163
|
+
if (expectedType !== null) {
|
|
164
|
+
const valueType = inferType(value);
|
|
165
|
+
if (valueType !== expectedType) {
|
|
166
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Parameter type mismatch: ${param.name} expects ${expectedType}, got ${valueType}`, callLocation, { paramName: param.name, expectedType, actualType: valueType });
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Invoke script callable with positional arguments.
|
|
172
|
+
* Handles parameter binding, default values, and type checking.
|
|
173
|
+
*/
|
|
174
|
+
async invokeScriptCallable(callable, args, callLocation) {
|
|
175
|
+
const firstArg = args[0];
|
|
176
|
+
if (args.length === 1 && firstArg !== undefined && isTuple(firstArg)) {
|
|
177
|
+
return this.invokeScriptCallableWithArgs(callable, firstArg, callLocation);
|
|
178
|
+
}
|
|
179
|
+
const callableCtx = this.createCallableContext(callable);
|
|
180
|
+
for (let i = 0; i < callable.params.length; i++) {
|
|
181
|
+
const param = callable.params[i];
|
|
182
|
+
let value;
|
|
183
|
+
if (i < args.length) {
|
|
184
|
+
value = args[i];
|
|
185
|
+
}
|
|
186
|
+
else if (param.defaultValue !== null) {
|
|
187
|
+
value = param.defaultValue;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Missing argument for parameter '${param.name}' at position ${i}`, callLocation, { paramName: param.name, position: i });
|
|
191
|
+
}
|
|
192
|
+
this.validateParamType(param, value, callLocation);
|
|
193
|
+
callableCtx.variables.set(param.name, value);
|
|
194
|
+
}
|
|
195
|
+
// Switch context to callable context
|
|
196
|
+
const savedCtx = this.ctx;
|
|
197
|
+
this.ctx = callableCtx;
|
|
198
|
+
try {
|
|
199
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
200
|
+
return await this.evaluateBodyExpression(callable.body);
|
|
201
|
+
}
|
|
202
|
+
finally {
|
|
203
|
+
this.ctx = savedCtx;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Invoke script callable with tuple arguments (named or positional).
|
|
208
|
+
* Handles *[...] and *[name: val] argument unpacking.
|
|
209
|
+
*/
|
|
210
|
+
async invokeScriptCallableWithArgs(closure, tupleValue, callLocation) {
|
|
211
|
+
const closureCtx = this.createCallableContext(closure);
|
|
212
|
+
const hasNumericKeys = [...tupleValue.entries.keys()].some((k) => typeof k === 'number');
|
|
213
|
+
const hasStringKeys = [...tupleValue.entries.keys()].some((k) => typeof k === 'string');
|
|
214
|
+
if (hasNumericKeys && hasStringKeys) {
|
|
215
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Tuple cannot mix positional (numeric) and named (string) keys', callLocation);
|
|
216
|
+
}
|
|
217
|
+
const boundParams = new Set();
|
|
218
|
+
if (hasNumericKeys) {
|
|
219
|
+
for (const [key, value] of tupleValue.entries) {
|
|
220
|
+
const position = key;
|
|
221
|
+
const param = closure.params[position];
|
|
222
|
+
if (param === undefined) {
|
|
223
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Extra argument at position ${position} (closure has ${closure.params.length} params)`, callLocation, { position, paramCount: closure.params.length });
|
|
224
|
+
}
|
|
225
|
+
this.validateParamType(param, value, callLocation);
|
|
226
|
+
closureCtx.variables.set(param.name, value);
|
|
227
|
+
boundParams.add(param.name);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
else if (hasStringKeys) {
|
|
231
|
+
const paramNames = new Set(closure.params.map((p) => p.name));
|
|
232
|
+
for (const [key, value] of tupleValue.entries) {
|
|
233
|
+
const name = key;
|
|
234
|
+
if (!paramNames.has(name)) {
|
|
235
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Unknown argument '${name}' (valid params: ${[...paramNames].join(', ')})`, callLocation, { argName: name, validParams: [...paramNames] });
|
|
236
|
+
}
|
|
237
|
+
const param = closure.params.find((p) => p.name === name);
|
|
238
|
+
this.validateParamType(param, value, callLocation);
|
|
239
|
+
closureCtx.variables.set(name, value);
|
|
240
|
+
boundParams.add(name);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
for (const param of closure.params) {
|
|
244
|
+
if (!boundParams.has(param.name)) {
|
|
245
|
+
if (param.defaultValue !== null) {
|
|
246
|
+
closureCtx.variables.set(param.name, param.defaultValue);
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Missing argument '${param.name}' (no default value)`, callLocation, { paramName: param.name });
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// Switch context to callable context
|
|
254
|
+
const savedCtx = this.ctx;
|
|
255
|
+
this.ctx = closureCtx;
|
|
256
|
+
try {
|
|
257
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
258
|
+
return await this.evaluateBodyExpression(closure.body);
|
|
259
|
+
}
|
|
260
|
+
finally {
|
|
261
|
+
this.ctx = savedCtx;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Evaluate host function call: functionName(args)
|
|
266
|
+
* Looks up function in context and invokes it.
|
|
267
|
+
*/
|
|
268
|
+
async evaluateHostCall(node) {
|
|
269
|
+
this.checkAborted(node);
|
|
270
|
+
const fn = this.ctx.functions.get(node.name);
|
|
271
|
+
if (!fn) {
|
|
272
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_UNDEFINED_FUNCTION, `Unknown function: ${node.name}`, this.getNodeLocation(node), { functionName: node.name });
|
|
273
|
+
}
|
|
274
|
+
const args = await this.evaluateArgs(node.args);
|
|
275
|
+
if (args.length === 0 && this.ctx.pipeValue !== null) {
|
|
276
|
+
args.push(this.ctx.pipeValue);
|
|
277
|
+
}
|
|
278
|
+
// Observability: onHostCall before execution
|
|
279
|
+
this.ctx.observability.onHostCall?.({ name: node.name, args });
|
|
280
|
+
const startTime = performance.now();
|
|
281
|
+
// Use invokeFnCallable for consistent validation and invocation
|
|
282
|
+
const wrappedPromise = this.withTimeout((async () => {
|
|
283
|
+
// Handle both CallableFn and ApplicationCallable
|
|
284
|
+
if (typeof fn === 'function') {
|
|
285
|
+
// Raw CallableFn - call directly (no validation)
|
|
286
|
+
return fn(args, this.ctx, node.span.start);
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
// ApplicationCallable - use invokeFnCallable for validation
|
|
290
|
+
return this.invokeFnCallable(fn, args, node.span.start, node.name);
|
|
291
|
+
}
|
|
292
|
+
})(), this.ctx.timeout, node.name, node);
|
|
293
|
+
const result = await wrappedPromise;
|
|
294
|
+
const durationMs = performance.now() - startTime;
|
|
295
|
+
// Observability: onFunctionReturn after execution
|
|
296
|
+
this.ctx.observability.onFunctionReturn?.({
|
|
297
|
+
name: node.name,
|
|
298
|
+
value: result,
|
|
299
|
+
durationMs,
|
|
300
|
+
});
|
|
301
|
+
return result;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Evaluate closure call: $fn(args)
|
|
305
|
+
* Delegates to evaluateClosureCallWithPipe using current pipe value.
|
|
306
|
+
*/
|
|
307
|
+
async evaluateClosureCall(node) {
|
|
308
|
+
return this.evaluateClosureCallWithPipe(node, this.ctx.pipeValue);
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Evaluate closure call with pipe input: value -> $fn(args)
|
|
312
|
+
* Supports access chains like $math.double(args).
|
|
313
|
+
*/
|
|
314
|
+
async evaluateClosureCallWithPipe(node, pipeInput) {
|
|
315
|
+
// Get the base variable
|
|
316
|
+
let value = getVariable(this.ctx, node.name);
|
|
317
|
+
if (value === undefined || value === null) {
|
|
318
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_UNDEFINED_VARIABLE, `Unknown variable: $${node.name}`, this.getNodeLocation(node), { variableName: node.name });
|
|
319
|
+
}
|
|
320
|
+
// Traverse accessChain to get the closure (e.g., $math.double)
|
|
321
|
+
const fullPath = ['$' + node.name, ...node.accessChain].join('.');
|
|
322
|
+
for (const prop of node.accessChain) {
|
|
323
|
+
if (value === null) {
|
|
324
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Cannot access property '${prop}' on null`, this.getNodeLocation(node));
|
|
325
|
+
}
|
|
326
|
+
if (isDict(value)) {
|
|
327
|
+
value = value[prop];
|
|
328
|
+
if (value === undefined || value === null) {
|
|
329
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Dict has no field '${prop}'`, this.getNodeLocation(node));
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Cannot access property on non-dict value at '${fullPath}'`, this.getNodeLocation(node));
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
if (!isCallable(value)) {
|
|
337
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `'${fullPath}' is not callable`, this.getNodeLocation(node), { path: fullPath, actualType: inferType(value) });
|
|
338
|
+
}
|
|
339
|
+
const closure = value;
|
|
340
|
+
const args = await this.evaluateArgs(node.args);
|
|
341
|
+
// If no explicit args and has pipe input, add pipe value as first arg
|
|
342
|
+
if (args.length === 0 && pipeInput !== null) {
|
|
343
|
+
args.push(pipeInput);
|
|
344
|
+
}
|
|
345
|
+
return this.invokeCallable(closure, args, node.span.start);
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Evaluate $.field as property access on the pipe value.
|
|
349
|
+
* This allows -> $.a to access property 'a' of the current pipe value.
|
|
350
|
+
*/
|
|
351
|
+
async evaluatePipePropertyAccess(node, pipeInput) {
|
|
352
|
+
let value = pipeInput;
|
|
353
|
+
for (const access of node.accessChain) {
|
|
354
|
+
if (value === null) {
|
|
355
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Cannot access property on null`, this.getNodeLocation(node));
|
|
356
|
+
}
|
|
357
|
+
// Check if this is a bracket access (has accessKind discriminator)
|
|
358
|
+
if ('accessKind' in access) {
|
|
359
|
+
// bracket access - delegate to evaluateVariableAsync
|
|
360
|
+
// (Not in scope for this mixin - will be handled by VariablesMixin)
|
|
361
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Bracket access not supported in this context', this.getNodeLocation(node));
|
|
362
|
+
}
|
|
363
|
+
// Must be a FieldAccess (literal, variable, computed, block, alternatives)
|
|
364
|
+
// TypeScript now knows access is FieldAccess due to discriminated union
|
|
365
|
+
if (access.kind === 'literal') {
|
|
366
|
+
const field = access.field;
|
|
367
|
+
value = await this.accessDictField(value, field, this.getNodeLocation(node));
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
// Other field access types (variable, computed, block, alternatives)
|
|
371
|
+
// are handled by VariablesMixin
|
|
372
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Field access kind '${access.kind}' not supported in this context`, this.getNodeLocation(node));
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
// Handle default value from VariableNode (not PropertyAccess)
|
|
376
|
+
if (value === null && node.defaultValue) {
|
|
377
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
378
|
+
value = await this.evaluateExpression(node.defaultValue);
|
|
379
|
+
}
|
|
380
|
+
return value;
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Evaluate variable invocation with pipe: value -> $var
|
|
384
|
+
* If variable is callable, invokes it with pipe value.
|
|
385
|
+
*/
|
|
386
|
+
async evaluateVariableInvoke(node, _pipeInput) {
|
|
387
|
+
// NOTE: This method signature in spec doesn't match usage pattern.
|
|
388
|
+
// PipeInvokeNode is for -> (args) syntax, not variable invocation.
|
|
389
|
+
// The actual variable invoke logic is in evaluateVariableAsync (VariablesMixin).
|
|
390
|
+
// This stub satisfies the spec interface but delegates to correct implementation.
|
|
391
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'evaluateVariableInvoke is a placeholder - use evaluateVariableAsync from VariablesMixin', this.getNodeLocation(node));
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Evaluate pipe invoke: value -> (args)
|
|
395
|
+
* Calls the input value as a closure with the given arguments.
|
|
396
|
+
*/
|
|
397
|
+
async evaluatePipeInvoke(node, input) {
|
|
398
|
+
if (!isScriptCallable(input)) {
|
|
399
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Cannot invoke non-closure value (got ${typeof input})`, this.getNodeLocation(node));
|
|
400
|
+
}
|
|
401
|
+
const args = await this.evaluateArgs(node.args);
|
|
402
|
+
return this.invokeScriptCallable(input, args, node.span.start);
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Evaluate method call on receiver: value.method(args)
|
|
406
|
+
* Handles both built-in methods and dict-bound callables.
|
|
407
|
+
*/
|
|
408
|
+
async evaluateMethod(node, receiver) {
|
|
409
|
+
this.checkAborted(node);
|
|
410
|
+
// Handle postfix invocation: expr(args) - calls receiver as a closure
|
|
411
|
+
if (node.type === 'Invoke') {
|
|
412
|
+
return this.evaluateInvoke(node, receiver);
|
|
413
|
+
}
|
|
414
|
+
if (isCallable(receiver)) {
|
|
415
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Method .${node.name} not available on callable (invoke with -> $() first)`, this.getNodeLocation(node), { methodName: node.name, receiverType: 'callable' });
|
|
416
|
+
}
|
|
417
|
+
const args = await this.evaluateArgs(node.args);
|
|
418
|
+
if (isDict(receiver)) {
|
|
419
|
+
const dictValue = receiver[node.name];
|
|
420
|
+
if (dictValue !== undefined && isCallable(dictValue)) {
|
|
421
|
+
return this.invokeCallable(dictValue, args, this.getNodeLocation(node));
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
const method = this.ctx.methods.get(node.name);
|
|
425
|
+
if (!method) {
|
|
426
|
+
// Fall back to property access on dict (no-arg only)
|
|
427
|
+
if (isDict(receiver) && args.length === 0 && node.name in receiver) {
|
|
428
|
+
return receiver[node.name];
|
|
429
|
+
}
|
|
430
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_UNDEFINED_METHOD, `Unknown method: ${node.name}`, this.getNodeLocation(node), { methodName: node.name });
|
|
431
|
+
}
|
|
432
|
+
const result = method(receiver, args, this.ctx, this.getNodeLocation(node));
|
|
433
|
+
return result instanceof Promise ? await result : result;
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Evaluate postfix invocation: expr(args)
|
|
437
|
+
* Calls the receiver value as a closure with the given arguments.
|
|
438
|
+
*/
|
|
439
|
+
async evaluateInvoke(node, receiver) {
|
|
440
|
+
if (!isCallable(receiver)) {
|
|
441
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Cannot invoke non-callable value (got ${inferType(receiver)})`, this.getNodeLocation(node), { actualType: inferType(receiver) });
|
|
442
|
+
}
|
|
443
|
+
const args = await this.evaluateArgs(node.args);
|
|
444
|
+
return this.invokeCallable(receiver, args, this.getNodeLocation(node));
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Evaluate closure chain: >>expr
|
|
448
|
+
* Chains multiple closures for composition.
|
|
449
|
+
*/
|
|
450
|
+
async evaluateClosureChain(node, input) {
|
|
451
|
+
// Evaluate the target expression to get the closure(s)
|
|
452
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
453
|
+
const target = await this.evaluateExpression(node.target);
|
|
454
|
+
if (Array.isArray(target)) {
|
|
455
|
+
// List of closures: chain them left-to-right
|
|
456
|
+
let result = input;
|
|
457
|
+
for (const closure of target) {
|
|
458
|
+
if (!isCallable(closure)) {
|
|
459
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Closure chain element must be callable, got ${inferType(closure)}`, this.getNodeLocation(node));
|
|
460
|
+
}
|
|
461
|
+
result = await this.invokeCallable(closure, [result], this.getNodeLocation(node));
|
|
462
|
+
}
|
|
463
|
+
return result;
|
|
464
|
+
}
|
|
465
|
+
else if (isCallable(target)) {
|
|
466
|
+
// Single closure: invoke with input
|
|
467
|
+
return this.invokeCallable(target, [input], this.getNodeLocation(node));
|
|
468
|
+
}
|
|
469
|
+
else {
|
|
470
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Closure chain requires callable or list of callables, got ${inferType(target)}`, this.getNodeLocation(node));
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
// Export with type assertion to work around TS4094 limitation
|
|
476
|
+
// TypeScript can't generate declarations for functions returning classes with protected members
|
|
477
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
478
|
+
export const ClosuresMixin = createClosuresMixin;
|
|
479
|
+
//# sourceMappingURL=closures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"closures.js","sourceRoot":"","sources":["../../../../../src/runtime/core/eval/mixins/closures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
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
|
+
export declare const CollectionsMixin: any;
|
|
24
|
+
//# sourceMappingURL=collections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/core/eval/mixins/collections.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AA0mBH,eAAO,MAAM,gBAAgB,EAA6B,GAAG,CAAC"}
|