@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,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Control Flow Signals
|
|
3
|
+
*
|
|
4
|
+
* Signals thrown to unwind the call stack for control flow.
|
|
5
|
+
* These are part of the public API for host applications that
|
|
6
|
+
* need to catch and handle control flow.
|
|
7
|
+
*/
|
|
8
|
+
/** Signal thrown by `break` to exit loops */
|
|
9
|
+
export class BreakSignal extends Error {
|
|
10
|
+
value;
|
|
11
|
+
constructor(value) {
|
|
12
|
+
super('break');
|
|
13
|
+
this.value = value;
|
|
14
|
+
this.name = 'BreakSignal';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** Signal thrown by `return` to exit blocks */
|
|
18
|
+
export class ReturnSignal extends Error {
|
|
19
|
+
value;
|
|
20
|
+
constructor(value) {
|
|
21
|
+
super('return');
|
|
22
|
+
this.value = value;
|
|
23
|
+
this.name = 'ReturnSignal';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=signals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signals.js","sourceRoot":"","sources":["../../src/runtime/signals.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,6CAA6C;AAC7C,MAAM,OAAO,WAAY,SAAQ,KAAK;IACR;IAA5B,YAA4B,KAAgB;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;QADW,UAAK,GAAL,KAAK,CAAW;QAE1C,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED,+CAA+C;AAC/C,MAAM,OAAO,YAAa,SAAQ,KAAK;IACT;IAA5B,YAA4B,KAAgB;QAC1C,KAAK,CAAC,QAAQ,CAAC,CAAC;QADU,UAAK,GAAL,KAAK,CAAW;QAE1C,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime Types
|
|
3
|
+
*
|
|
4
|
+
* Public types for runtime configuration and execution results.
|
|
5
|
+
* These types are the primary interface for host applications.
|
|
6
|
+
*/
|
|
7
|
+
import type { RillTypeName } from '../types.js';
|
|
8
|
+
import type { CallableFn } from './callable.js';
|
|
9
|
+
import type { RillValue } from './values.js';
|
|
10
|
+
/**
|
|
11
|
+
* Method signature for built-in methods.
|
|
12
|
+
* Methods are called on a receiver value: $val.method(args)
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export type RillMethod = (receiver: RillValue, args: RillValue[], ctx: RuntimeContext, location?: import('../types.js').SourceLocation) => RillValue | Promise<RillValue>;
|
|
16
|
+
/** I/O callbacks for runtime operations */
|
|
17
|
+
export interface RuntimeCallbacks {
|
|
18
|
+
/** Called when .log is invoked */
|
|
19
|
+
onLog: (value: RillValue) => void;
|
|
20
|
+
}
|
|
21
|
+
/** Observability callbacks for monitoring execution */
|
|
22
|
+
export interface ObservabilityCallbacks {
|
|
23
|
+
/** Called before each statement executes */
|
|
24
|
+
onStepStart?: (event: StepStartEvent) => void;
|
|
25
|
+
/** Called after each statement executes */
|
|
26
|
+
onStepEnd?: (event: StepEndEvent) => void;
|
|
27
|
+
/** Called before a function is invoked */
|
|
28
|
+
onFunctionCall?: (event: FunctionCallEvent) => void;
|
|
29
|
+
/** Called after a function returns */
|
|
30
|
+
onFunctionReturn?: (event: FunctionReturnEvent) => void;
|
|
31
|
+
/** Called when a variable is captured */
|
|
32
|
+
onCapture?: (event: CaptureEvent) => void;
|
|
33
|
+
/** Called when an error occurs */
|
|
34
|
+
onError?: (event: ErrorEvent) => void;
|
|
35
|
+
}
|
|
36
|
+
/** Event emitted before a statement executes */
|
|
37
|
+
export interface StepStartEvent {
|
|
38
|
+
/** Statement index (0-based) */
|
|
39
|
+
index: number;
|
|
40
|
+
/** Total statements */
|
|
41
|
+
total: number;
|
|
42
|
+
/** Current pipe value before execution */
|
|
43
|
+
pipeValue: RillValue;
|
|
44
|
+
}
|
|
45
|
+
/** Event emitted after a statement executes */
|
|
46
|
+
export interface StepEndEvent {
|
|
47
|
+
/** Statement index (0-based) */
|
|
48
|
+
index: number;
|
|
49
|
+
/** Total statements */
|
|
50
|
+
total: number;
|
|
51
|
+
/** Value produced by the statement */
|
|
52
|
+
value: RillValue;
|
|
53
|
+
/** Execution time in milliseconds */
|
|
54
|
+
durationMs: number;
|
|
55
|
+
}
|
|
56
|
+
/** Event emitted before a function call */
|
|
57
|
+
export interface FunctionCallEvent {
|
|
58
|
+
/** Function name */
|
|
59
|
+
name: string;
|
|
60
|
+
/** Arguments passed to function */
|
|
61
|
+
args: RillValue[];
|
|
62
|
+
}
|
|
63
|
+
/** Event emitted after a function returns */
|
|
64
|
+
export interface FunctionReturnEvent {
|
|
65
|
+
/** Function name */
|
|
66
|
+
name: string;
|
|
67
|
+
/** Return value */
|
|
68
|
+
value: RillValue;
|
|
69
|
+
/** Execution time in milliseconds */
|
|
70
|
+
durationMs: number;
|
|
71
|
+
}
|
|
72
|
+
/** Event emitted when a variable is captured */
|
|
73
|
+
export interface CaptureEvent {
|
|
74
|
+
/** Variable name */
|
|
75
|
+
name: string;
|
|
76
|
+
/** Captured value */
|
|
77
|
+
value: RillValue;
|
|
78
|
+
}
|
|
79
|
+
/** Event emitted on error */
|
|
80
|
+
export interface ErrorEvent {
|
|
81
|
+
/** The error that occurred */
|
|
82
|
+
error: Error;
|
|
83
|
+
/** Statement index where error occurred (if available) */
|
|
84
|
+
index?: number;
|
|
85
|
+
}
|
|
86
|
+
/** Runtime context with variables, functions, and callbacks */
|
|
87
|
+
export interface RuntimeContext {
|
|
88
|
+
/** Named variables ($varname) */
|
|
89
|
+
readonly variables: Map<string, RillValue>;
|
|
90
|
+
/** Variable types - locked after first assignment */
|
|
91
|
+
readonly variableTypes: Map<string, RillTypeName>;
|
|
92
|
+
/** Built-in and user-defined functions */
|
|
93
|
+
readonly functions: Map<string, CallableFn>;
|
|
94
|
+
/** Built-in and user-defined methods */
|
|
95
|
+
readonly methods: Map<string, RillMethod>;
|
|
96
|
+
/** I/O callbacks */
|
|
97
|
+
readonly callbacks: RuntimeCallbacks;
|
|
98
|
+
/** Observability callbacks */
|
|
99
|
+
readonly observability: ObservabilityCallbacks;
|
|
100
|
+
/** Current pipe value ($) */
|
|
101
|
+
pipeValue: RillValue;
|
|
102
|
+
/** Timeout in milliseconds for user-supplied functions (undefined = no timeout) */
|
|
103
|
+
readonly timeout: number | undefined;
|
|
104
|
+
/** Compiled regex patterns for auto-exceptions */
|
|
105
|
+
readonly autoExceptions: RegExp[];
|
|
106
|
+
/** AbortSignal for cancellation (undefined = no cancellation) */
|
|
107
|
+
readonly signal: AbortSignal | undefined;
|
|
108
|
+
}
|
|
109
|
+
/** Options for creating a runtime context */
|
|
110
|
+
export interface RuntimeOptions {
|
|
111
|
+
/** Initial variables */
|
|
112
|
+
variables?: Record<string, RillValue>;
|
|
113
|
+
/** Custom functions */
|
|
114
|
+
functions?: Record<string, CallableFn>;
|
|
115
|
+
/** I/O callbacks */
|
|
116
|
+
callbacks?: Partial<RuntimeCallbacks>;
|
|
117
|
+
/** Observability callbacks for monitoring execution */
|
|
118
|
+
observability?: ObservabilityCallbacks;
|
|
119
|
+
/** Timeout in milliseconds for user-supplied functions */
|
|
120
|
+
timeout?: number;
|
|
121
|
+
/** Regex patterns that auto-halt execution when $_ matches (string values only) */
|
|
122
|
+
autoExceptions?: string[];
|
|
123
|
+
/** AbortSignal for cancellation support */
|
|
124
|
+
signal?: AbortSignal;
|
|
125
|
+
}
|
|
126
|
+
/** Result of script execution */
|
|
127
|
+
export interface ExecutionResult {
|
|
128
|
+
/** Final value returned by the script */
|
|
129
|
+
value: RillValue;
|
|
130
|
+
/** All captured variables */
|
|
131
|
+
variables: Record<string, RillValue>;
|
|
132
|
+
}
|
|
133
|
+
/** Result of a single step execution */
|
|
134
|
+
export interface StepResult {
|
|
135
|
+
/** Value produced by this step */
|
|
136
|
+
value: RillValue;
|
|
137
|
+
/** Whether execution is complete (no more statements) */
|
|
138
|
+
done: boolean;
|
|
139
|
+
/** Current statement index (0-based) */
|
|
140
|
+
index: number;
|
|
141
|
+
/** Total number of statements */
|
|
142
|
+
total: number;
|
|
143
|
+
/** Variable captured by this step (if any) */
|
|
144
|
+
captured?: {
|
|
145
|
+
name: string;
|
|
146
|
+
value: RillValue;
|
|
147
|
+
} | undefined;
|
|
148
|
+
}
|
|
149
|
+
/** Stepper for controlled step-by-step execution */
|
|
150
|
+
export interface ExecutionStepper {
|
|
151
|
+
/** Whether execution is complete */
|
|
152
|
+
readonly done: boolean;
|
|
153
|
+
/** Current statement index (0-based) */
|
|
154
|
+
readonly index: number;
|
|
155
|
+
/** Total number of statements */
|
|
156
|
+
readonly total: number;
|
|
157
|
+
/** The runtime context (for inspecting variables, pipeValue, etc.) */
|
|
158
|
+
readonly context: RuntimeContext;
|
|
159
|
+
/** Execute the next statement */
|
|
160
|
+
step(): Promise<StepResult>;
|
|
161
|
+
/** Get final result (only valid after done=true) */
|
|
162
|
+
getResult(): ExecutionResult;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Bind callables in a dict to their containing dict.
|
|
166
|
+
* This sets boundDict on each callable so they can access their container.
|
|
167
|
+
*/
|
|
168
|
+
export declare function bindDictCallables(value: RillValue): RillValue;
|
|
169
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime Types
|
|
3
|
+
*
|
|
4
|
+
* Public types for runtime configuration and execution results.
|
|
5
|
+
* These types are the primary interface for host applications.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Bind callables in a dict to their containing dict.
|
|
9
|
+
* This sets boundDict on each callable so they can access their container.
|
|
10
|
+
*/
|
|
11
|
+
export function bindDictCallables(value) {
|
|
12
|
+
if (typeof value !== 'object' ||
|
|
13
|
+
value === null ||
|
|
14
|
+
Array.isArray(value) ||
|
|
15
|
+
'__type' in value ||
|
|
16
|
+
'__rill_args' in value) {
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
const dict = value;
|
|
20
|
+
let hasBoundCallables = false;
|
|
21
|
+
// Check if any values are callables that need binding
|
|
22
|
+
for (const v of Object.values(dict)) {
|
|
23
|
+
if (typeof v === 'object' &&
|
|
24
|
+
v !== null &&
|
|
25
|
+
'__type' in v &&
|
|
26
|
+
v.__type === 'callable' &&
|
|
27
|
+
!('boundDict' in v && v['boundDict'])) {
|
|
28
|
+
hasBoundCallables = true;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (!hasBoundCallables)
|
|
33
|
+
return value;
|
|
34
|
+
// Create a new dict with bound callables
|
|
35
|
+
const result = {};
|
|
36
|
+
for (const [key, v] of Object.entries(dict)) {
|
|
37
|
+
if (typeof v === 'object' &&
|
|
38
|
+
v !== null &&
|
|
39
|
+
'__type' in v &&
|
|
40
|
+
v.__type === 'callable' &&
|
|
41
|
+
!('boundDict' in v && v['boundDict'])) {
|
|
42
|
+
result[key] = { ...v, boundDict: result };
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
result[key] = v;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgLH;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAgB;IAChD,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,QAAQ,IAAI,KAAK;QACjB,aAAa,IAAI,KAAK,EACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,KAAkC,CAAC;IAChD,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAE9B,sDAAsD;IACtD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IACE,OAAO,CAAC,KAAK,QAAQ;YACrB,CAAC,KAAK,IAAI;YACV,QAAQ,IAAI,CAAC;YACb,CAAC,CAAC,MAAM,KAAK,UAAU;YACvB,CAAC,CAAC,WAAW,IAAI,CAAC,IAAK,CAA6B,CAAC,WAAW,CAAC,CAAC,EAClE,CAAC;YACD,iBAAiB,GAAG,IAAI,CAAC;YACzB,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,CAAC,iBAAiB;QAAE,OAAO,KAAK,CAAC;IAErC,yCAAyC;IACzC,MAAM,MAAM,GAA8B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,IACE,OAAO,CAAC,KAAK,QAAQ;YACrB,CAAC,KAAK,IAAI;YACV,QAAQ,IAAI,CAAC;YACb,CAAC,CAAC,MAAM,KAAK,UAAU;YACvB,CAAC,CAAC,WAAW,IAAI,CAAC,IAAK,CAA6B,CAAC,WAAW,CAAC,CAAC,EAClE,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAe,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rill Value Types and Utilities
|
|
3
|
+
*
|
|
4
|
+
* Core value types that flow through Rill programs.
|
|
5
|
+
* Public API for host applications.
|
|
6
|
+
*/
|
|
7
|
+
import type { RillTypeName } from '../types.js';
|
|
8
|
+
interface CallableMarker {
|
|
9
|
+
readonly __type: 'callable';
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Args type - represents unpacked arguments for closure invocation.
|
|
13
|
+
* Created by the * (spread) operator from tuples or dicts.
|
|
14
|
+
* Entries are keyed by position (number) or name (string).
|
|
15
|
+
*/
|
|
16
|
+
export interface RillArgs {
|
|
17
|
+
readonly __rill_args: true;
|
|
18
|
+
readonly entries: Map<string | number, RillValue>;
|
|
19
|
+
}
|
|
20
|
+
/** Any value that can flow through Rill */
|
|
21
|
+
export type RillValue = string | number | boolean | null | RillValue[] | {
|
|
22
|
+
[key: string]: RillValue;
|
|
23
|
+
} | CallableMarker | RillArgs;
|
|
24
|
+
/** Type guard for RillArgs */
|
|
25
|
+
export declare function isArgs(value: RillValue): value is RillArgs;
|
|
26
|
+
/** Create args from a tuple (positional) */
|
|
27
|
+
export declare function createArgsFromTuple(tuple: RillValue[]): RillArgs;
|
|
28
|
+
/** Create args from a dict (named) */
|
|
29
|
+
export declare function createArgsFromDict(dict: Record<string, RillValue>): RillArgs;
|
|
30
|
+
/** Infer the Rill type from a runtime value */
|
|
31
|
+
export declare function inferType(value: RillValue): RillTypeName;
|
|
32
|
+
/** Check if a value is truthy in Rill semantics */
|
|
33
|
+
export declare function isTruthy(value: RillValue): boolean;
|
|
34
|
+
/** Check if a value is empty (inverse of truthy) */
|
|
35
|
+
export declare function isEmpty(value: RillValue): boolean;
|
|
36
|
+
/** Format a value for display */
|
|
37
|
+
export declare function formatValue(value: RillValue): string;
|
|
38
|
+
/**
|
|
39
|
+
* Deep structural equality for all Rill values.
|
|
40
|
+
* - Primitives: value equality
|
|
41
|
+
* - Tuples: length + recursive element equality
|
|
42
|
+
* - Dicts: same keys + recursive value equality (order-independent)
|
|
43
|
+
*/
|
|
44
|
+
export declare function deepEquals(a: RillValue, b: RillValue): boolean;
|
|
45
|
+
/** Reserved dict method names that cannot be overridden */
|
|
46
|
+
export declare const RESERVED_DICT_METHODS: readonly ["keys", "values", "entries"];
|
|
47
|
+
/** Check if a key name is reserved */
|
|
48
|
+
export declare function isReservedMethod(name: string): boolean;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/runtime/values.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKhD,UAAU,cAAc;IACtB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC;CACnD;AAED,2CAA2C;AAC3C,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5B,cAAc,GACd,QAAQ,CAAC;AAEb,8BAA8B;AAC9B,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,IAAI,QAAQ,CAO1D;AAED,4CAA4C;AAC5C,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,QAAQ,CAShE;AAED,sCAAsC;AACtC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAM5E;AAED,+CAA+C;AAC/C,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,YAAY,CAYxD;AAED,mDAAmD;AACnD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAYlD;AAED,oDAAoD;AACpD,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEjD;AAED,iCAAiC;AACjC,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAsBpD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,OAAO,CA8E9D;AAED,2DAA2D;AAC3D,eAAO,MAAM,qBAAqB,wCAAyC,CAAC;AAE5E,sCAAsC;AACtC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rill Value Types and Utilities
|
|
3
|
+
*
|
|
4
|
+
* Core value types that flow through Rill programs.
|
|
5
|
+
* Public API for host applications.
|
|
6
|
+
*/
|
|
7
|
+
import { callableEquals, isScriptCallable } from './callable.js';
|
|
8
|
+
/** Type guard for RillArgs */
|
|
9
|
+
export function isArgs(value) {
|
|
10
|
+
return (typeof value === 'object' &&
|
|
11
|
+
value !== null &&
|
|
12
|
+
'__rill_args' in value &&
|
|
13
|
+
value.__rill_args === true);
|
|
14
|
+
}
|
|
15
|
+
/** Create args from a tuple (positional) */
|
|
16
|
+
export function createArgsFromTuple(tuple) {
|
|
17
|
+
const entries = new Map();
|
|
18
|
+
for (let i = 0; i < tuple.length; i++) {
|
|
19
|
+
const val = tuple[i];
|
|
20
|
+
if (val !== undefined) {
|
|
21
|
+
entries.set(i, val);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return { __rill_args: true, entries };
|
|
25
|
+
}
|
|
26
|
+
/** Create args from a dict (named) */
|
|
27
|
+
export function createArgsFromDict(dict) {
|
|
28
|
+
const entries = new Map();
|
|
29
|
+
for (const [key, value] of Object.entries(dict)) {
|
|
30
|
+
entries.set(key, value);
|
|
31
|
+
}
|
|
32
|
+
return { __rill_args: true, entries };
|
|
33
|
+
}
|
|
34
|
+
/** Infer the Rill type from a runtime value */
|
|
35
|
+
export function inferType(value) {
|
|
36
|
+
if (value === null)
|
|
37
|
+
return 'string'; // null treated as empty string
|
|
38
|
+
if (typeof value === 'string')
|
|
39
|
+
return 'string';
|
|
40
|
+
if (typeof value === 'number')
|
|
41
|
+
return 'number';
|
|
42
|
+
if (typeof value === 'boolean')
|
|
43
|
+
return 'bool';
|
|
44
|
+
if (isArgs(value))
|
|
45
|
+
return 'args';
|
|
46
|
+
if (Array.isArray(value))
|
|
47
|
+
return 'tuple';
|
|
48
|
+
if (typeof value === 'object' && '__type' in value && value.__type === 'callable') {
|
|
49
|
+
return 'closure';
|
|
50
|
+
}
|
|
51
|
+
if (typeof value === 'object')
|
|
52
|
+
return 'dict';
|
|
53
|
+
return 'string'; // fallback
|
|
54
|
+
}
|
|
55
|
+
/** Check if a value is truthy in Rill semantics */
|
|
56
|
+
export function isTruthy(value) {
|
|
57
|
+
if (value === null)
|
|
58
|
+
return false;
|
|
59
|
+
if (typeof value === 'boolean')
|
|
60
|
+
return value;
|
|
61
|
+
if (typeof value === 'number')
|
|
62
|
+
return value !== 0;
|
|
63
|
+
if (typeof value === 'string')
|
|
64
|
+
return value.length > 0;
|
|
65
|
+
if (isArgs(value))
|
|
66
|
+
return value.entries.size > 0;
|
|
67
|
+
if (Array.isArray(value))
|
|
68
|
+
return value.length > 0;
|
|
69
|
+
if (typeof value === 'object') {
|
|
70
|
+
if ('__type' in value && value.__type === 'callable')
|
|
71
|
+
return true;
|
|
72
|
+
return Object.keys(value).length > 0;
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
/** Check if a value is empty (inverse of truthy) */
|
|
77
|
+
export function isEmpty(value) {
|
|
78
|
+
return !isTruthy(value);
|
|
79
|
+
}
|
|
80
|
+
/** Format a value for display */
|
|
81
|
+
export function formatValue(value) {
|
|
82
|
+
if (value === null)
|
|
83
|
+
return '';
|
|
84
|
+
if (typeof value === 'string')
|
|
85
|
+
return value;
|
|
86
|
+
if (typeof value === 'number')
|
|
87
|
+
return String(value);
|
|
88
|
+
if (typeof value === 'boolean')
|
|
89
|
+
return value ? 'true' : 'false';
|
|
90
|
+
if (isArgs(value)) {
|
|
91
|
+
const parts = [];
|
|
92
|
+
for (const [key, val] of value.entries) {
|
|
93
|
+
if (typeof key === 'number') {
|
|
94
|
+
parts.push(formatValue(val));
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
parts.push(`${key}: ${formatValue(val)}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return `*[${parts.join(', ')}]`;
|
|
101
|
+
}
|
|
102
|
+
if (typeof value === 'object' && '__type' in value && value.__type === 'callable') {
|
|
103
|
+
// Basic callable formatting - full formatting in callable.ts
|
|
104
|
+
return '(...) { ... }';
|
|
105
|
+
}
|
|
106
|
+
if (Array.isArray(value))
|
|
107
|
+
return JSON.stringify(value);
|
|
108
|
+
return JSON.stringify(value);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Deep structural equality for all Rill values.
|
|
112
|
+
* - Primitives: value equality
|
|
113
|
+
* - Tuples: length + recursive element equality
|
|
114
|
+
* - Dicts: same keys + recursive value equality (order-independent)
|
|
115
|
+
*/
|
|
116
|
+
export function deepEquals(a, b) {
|
|
117
|
+
// Handle primitives and null
|
|
118
|
+
if (a === b)
|
|
119
|
+
return true;
|
|
120
|
+
if (a === null || b === null)
|
|
121
|
+
return false;
|
|
122
|
+
if (typeof a !== typeof b)
|
|
123
|
+
return false;
|
|
124
|
+
// Primitives (string, number, boolean) - covered by === above
|
|
125
|
+
if (typeof a !== 'object' || typeof b !== 'object')
|
|
126
|
+
return false;
|
|
127
|
+
// Both are non-null objects at this point
|
|
128
|
+
const aObj = a;
|
|
129
|
+
const bObj = b;
|
|
130
|
+
// Check for args
|
|
131
|
+
const aIsArgs = isArgs(a);
|
|
132
|
+
const bIsArgs = isArgs(b);
|
|
133
|
+
if (aIsArgs !== bIsArgs)
|
|
134
|
+
return false;
|
|
135
|
+
if (aIsArgs && bIsArgs) {
|
|
136
|
+
if (a.entries.size !== b.entries.size)
|
|
137
|
+
return false;
|
|
138
|
+
for (const [key, aVal] of a.entries) {
|
|
139
|
+
const bVal = b.entries.get(key);
|
|
140
|
+
if (bVal === undefined || !deepEquals(aVal, bVal))
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
// Check for arrays (tuples)
|
|
146
|
+
const aIsArray = Array.isArray(a);
|
|
147
|
+
const bIsArray = Array.isArray(b);
|
|
148
|
+
if (aIsArray !== bIsArray)
|
|
149
|
+
return false;
|
|
150
|
+
if (aIsArray && bIsArray) {
|
|
151
|
+
if (a.length !== b.length)
|
|
152
|
+
return false;
|
|
153
|
+
for (let i = 0; i < a.length; i++) {
|
|
154
|
+
const aElem = a[i];
|
|
155
|
+
const bElem = b[i];
|
|
156
|
+
if (aElem === undefined || bElem === undefined) {
|
|
157
|
+
if (aElem !== bElem)
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
else if (!deepEquals(aElem, bElem)) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
// Both are dicts (plain objects) or callables
|
|
167
|
+
// For script callables, use structural equality (params + body AST + captured values)
|
|
168
|
+
// For runtime/application callables, use reference equality
|
|
169
|
+
if ('__type' in aObj || '__type' in bObj) {
|
|
170
|
+
// Both must be callables to be equal
|
|
171
|
+
if (!('__type' in aObj) || !('__type' in bObj))
|
|
172
|
+
return false;
|
|
173
|
+
if (aObj.__type !== 'callable' || bObj.__type !== 'callable')
|
|
174
|
+
return false;
|
|
175
|
+
// Script callables: structural equality
|
|
176
|
+
if (isScriptCallable(a) && isScriptCallable(b)) {
|
|
177
|
+
return callableEquals(a, b, deepEquals);
|
|
178
|
+
}
|
|
179
|
+
// Runtime/application callables: reference equality
|
|
180
|
+
return a === b;
|
|
181
|
+
}
|
|
182
|
+
const aDict = a;
|
|
183
|
+
const bDict = b;
|
|
184
|
+
const aKeys = Object.keys(aDict);
|
|
185
|
+
const bKeys = Object.keys(bDict);
|
|
186
|
+
if (aKeys.length !== bKeys.length)
|
|
187
|
+
return false;
|
|
188
|
+
for (const key of aKeys) {
|
|
189
|
+
if (!(key in bDict))
|
|
190
|
+
return false;
|
|
191
|
+
const aVal = aDict[key];
|
|
192
|
+
const bVal = bDict[key];
|
|
193
|
+
if (aVal === undefined || bVal === undefined) {
|
|
194
|
+
if (aVal !== bVal)
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
else if (!deepEquals(aVal, bVal)) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
/** Reserved dict method names that cannot be overridden */
|
|
204
|
+
export const RESERVED_DICT_METHODS = ['keys', 'values', 'entries'];
|
|
205
|
+
/** Check if a key name is reserved */
|
|
206
|
+
export function isReservedMethod(name) {
|
|
207
|
+
return RESERVED_DICT_METHODS.includes(name);
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.js","sourceRoot":"","sources":["../../src/runtime/values.ts"],"names":[],"mappings":"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"}
|