@kalada/core 0.3.0 → 0.4.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 (114) hide show
  1. package/README.md +62 -3
  2. package/dist/kalada-v1/canonical-input.cjs.map +1 -1
  3. package/dist/kalada-v1/canonical-input.d.cts +3 -2
  4. package/dist/kalada-v1/canonical-input.d.ts +3 -2
  5. package/dist/kalada-v1/canonical-input.js.map +1 -1
  6. package/dist/kalada-v1/canonicalize.cjs +16 -1
  7. package/dist/kalada-v1/canonicalize.cjs.map +1 -1
  8. package/dist/kalada-v1/canonicalize.js +16 -1
  9. package/dist/kalada-v1/canonicalize.js.map +1 -1
  10. package/dist/kalada-v1/compile.cjs +13 -4
  11. package/dist/kalada-v1/compile.cjs.map +1 -1
  12. package/dist/kalada-v1/compile.js +14 -5
  13. package/dist/kalada-v1/compile.js.map +1 -1
  14. package/dist/kalada-v1/dependencies.cjs +49 -2
  15. package/dist/kalada-v1/dependencies.cjs.map +1 -1
  16. package/dist/kalada-v1/dependencies.js +49 -2
  17. package/dist/kalada-v1/dependencies.js.map +1 -1
  18. package/dist/kalada-v1/diagnostics.cjs +24 -4
  19. package/dist/kalada-v1/diagnostics.cjs.map +1 -1
  20. package/dist/kalada-v1/diagnostics.d.cts +4 -3
  21. package/dist/kalada-v1/diagnostics.d.ts +4 -3
  22. package/dist/kalada-v1/diagnostics.js +24 -4
  23. package/dist/kalada-v1/diagnostics.js.map +1 -1
  24. package/dist/kalada-v1/evaluate.cjs +10 -139
  25. package/dist/kalada-v1/evaluate.cjs.map +1 -1
  26. package/dist/kalada-v1/evaluate.d.cts +3 -2
  27. package/dist/kalada-v1/evaluate.d.ts +3 -2
  28. package/dist/kalada-v1/evaluate.js +12 -141
  29. package/dist/kalada-v1/evaluate.js.map +1 -1
  30. package/dist/kalada-v1/evaluation-delivery.cjs +286 -0
  31. package/dist/kalada-v1/evaluation-delivery.cjs.map +1 -0
  32. package/dist/kalada-v1/evaluation-delivery.d.cts +13 -0
  33. package/dist/kalada-v1/evaluation-delivery.d.ts +13 -0
  34. package/dist/kalada-v1/evaluation-delivery.js +284 -0
  35. package/dist/kalada-v1/evaluation-delivery.js.map +1 -0
  36. package/dist/kalada-v1/evaluation-frames.cjs +16 -0
  37. package/dist/kalada-v1/evaluation-frames.cjs.map +1 -0
  38. package/dist/kalada-v1/evaluation-frames.d.cts +83 -0
  39. package/dist/kalada-v1/evaluation-frames.d.ts +83 -0
  40. package/dist/kalada-v1/evaluation-frames.js +14 -0
  41. package/dist/kalada-v1/evaluation-frames.js.map +1 -0
  42. package/dist/kalada-v1/evaluation-machine.cjs +226 -0
  43. package/dist/kalada-v1/evaluation-machine.cjs.map +1 -0
  44. package/dist/kalada-v1/evaluation-machine.d.cts +9 -0
  45. package/dist/kalada-v1/evaluation-machine.d.ts +9 -0
  46. package/dist/kalada-v1/evaluation-machine.js +224 -0
  47. package/dist/kalada-v1/evaluation-machine.js.map +1 -0
  48. package/dist/kalada-v1/evaluation-resolution.cjs +80 -0
  49. package/dist/kalada-v1/evaluation-resolution.cjs.map +1 -0
  50. package/dist/kalada-v1/evaluation-resolution.d.cts +11 -0
  51. package/dist/kalada-v1/evaluation-resolution.d.ts +11 -0
  52. package/dist/kalada-v1/evaluation-resolution.js +78 -0
  53. package/dist/kalada-v1/evaluation-resolution.js.map +1 -0
  54. package/dist/kalada-v1/evaluation-state.cjs +94 -0
  55. package/dist/kalada-v1/evaluation-state.cjs.map +1 -0
  56. package/dist/kalada-v1/evaluation-state.d.cts +38 -0
  57. package/dist/kalada-v1/evaluation-state.d.ts +38 -0
  58. package/dist/kalada-v1/evaluation-state.js +81 -0
  59. package/dist/kalada-v1/evaluation-state.js.map +1 -0
  60. package/dist/kalada-v1/factories.cjs +28 -0
  61. package/dist/kalada-v1/factories.cjs.map +1 -1
  62. package/dist/kalada-v1/factories.d.cts +16 -1
  63. package/dist/kalada-v1/factories.d.ts +16 -1
  64. package/dist/kalada-v1/factories.js +28 -0
  65. package/dist/kalada-v1/factories.js.map +1 -1
  66. package/dist/kalada-v1/function-contracts.cjs +150 -0
  67. package/dist/kalada-v1/function-contracts.cjs.map +1 -0
  68. package/dist/kalada-v1/function-contracts.d.cts +15 -0
  69. package/dist/kalada-v1/function-contracts.d.ts +15 -0
  70. package/dist/kalada-v1/function-contracts.js +144 -0
  71. package/dist/kalada-v1/function-contracts.js.map +1 -0
  72. package/dist/kalada-v1/index.cjs +13 -0
  73. package/dist/kalada-v1/index.d.cts +4 -3
  74. package/dist/kalada-v1/index.d.ts +4 -3
  75. package/dist/kalada-v1/index.js +3 -2
  76. package/dist/kalada-v1/limits.cjs +23 -2
  77. package/dist/kalada-v1/limits.cjs.map +1 -1
  78. package/dist/kalada-v1/limits.d.cts +5 -3
  79. package/dist/kalada-v1/limits.d.ts +5 -3
  80. package/dist/kalada-v1/limits.js +23 -3
  81. package/dist/kalada-v1/limits.js.map +1 -1
  82. package/dist/kalada-v1/runtime-values.cjs +112 -0
  83. package/dist/kalada-v1/runtime-values.cjs.map +1 -0
  84. package/dist/kalada-v1/runtime-values.d.cts +35 -0
  85. package/dist/kalada-v1/runtime-values.d.ts +35 -0
  86. package/dist/kalada-v1/runtime-values.js +105 -0
  87. package/dist/kalada-v1/runtime-values.js.map +1 -0
  88. package/dist/kalada-v1/schemas.cjs +107 -2
  89. package/dist/kalada-v1/schemas.cjs.map +1 -1
  90. package/dist/kalada-v1/schemas.d.cts +2 -1
  91. package/dist/kalada-v1/schemas.d.ts +2 -1
  92. package/dist/kalada-v1/schemas.js +108 -4
  93. package/dist/kalada-v1/schemas.js.map +1 -1
  94. package/dist/kalada-v1/static-analysis.cjs +177 -0
  95. package/dist/kalada-v1/static-analysis.cjs.map +1 -0
  96. package/dist/kalada-v1/static-analysis.d.cts +9 -0
  97. package/dist/kalada-v1/static-analysis.d.ts +9 -0
  98. package/dist/kalada-v1/static-analysis.js +175 -0
  99. package/dist/kalada-v1/static-analysis.js.map +1 -0
  100. package/dist/kalada-v1/static-types.cjs +229 -0
  101. package/dist/kalada-v1/static-types.cjs.map +1 -0
  102. package/dist/kalada-v1/static-types.d.cts +8 -0
  103. package/dist/kalada-v1/static-types.d.ts +8 -0
  104. package/dist/kalada-v1/static-types.js +227 -0
  105. package/dist/kalada-v1/static-types.js.map +1 -0
  106. package/dist/kalada-v1/temporal-evaluation.cjs +21 -0
  107. package/dist/kalada-v1/temporal-evaluation.cjs.map +1 -1
  108. package/dist/kalada-v1/temporal-evaluation.d.cts +7 -2
  109. package/dist/kalada-v1/temporal-evaluation.d.ts +7 -2
  110. package/dist/kalada-v1/temporal-evaluation.js +20 -1
  111. package/dist/kalada-v1/temporal-evaluation.js.map +1 -1
  112. package/dist/kalada-v1/types.d.cts +78 -4
  113. package/dist/kalada-v1/types.d.ts +78 -4
  114. package/package.json +1 -1
@@ -8,7 +8,58 @@ type KaladaV1Expression<R extends JsonValue = string> = {
8
8
  } | {
9
9
  readonly kind: "ref";
10
10
  readonly ref: R;
11
- } | BindingExpression<R> | OptionExpression<R> | ResultExpression<R> | MatchExpression<R> | InstantExpression | DurationExpression | CurrentInstantExpression | TemporalArithmeticExpression<R> | TemporalComparisonExpression<R>;
11
+ } | BindingExpression<R> | OptionExpression<R> | ResultExpression<R> | MatchExpression<R> | InstantExpression | DurationExpression | CurrentInstantExpression | TemporalArithmeticExpression<R> | TemporalComparisonExpression<R> | FunctionExpression<R> | CallExpression<R> | FunctionGroupExpression<R> | CoreFunctionExpression;
12
+ type KaladaPrimitiveTypeName = "null" | "boolean" | "number" | "string" | "json" | "Instant" | "Duration";
13
+ type KaladaType = {
14
+ readonly kind: "primitive-type";
15
+ readonly name: KaladaPrimitiveTypeName;
16
+ } | {
17
+ readonly kind: "option-type";
18
+ readonly value: KaladaType;
19
+ } | {
20
+ readonly kind: "result-type";
21
+ readonly ok: KaladaType;
22
+ readonly error: KaladaType;
23
+ } | {
24
+ readonly kind: "array-type";
25
+ readonly element: KaladaType;
26
+ } | KaladaFunctionType;
27
+ interface KaladaFunctionType {
28
+ readonly kind: "function-type";
29
+ readonly parameters: readonly KaladaType[];
30
+ readonly returns: KaladaType;
31
+ }
32
+ interface KaladaFunctionParameter {
33
+ readonly name: string;
34
+ readonly type: KaladaType;
35
+ }
36
+ interface FunctionExpression<R extends JsonValue> {
37
+ readonly kind: "function";
38
+ readonly parameters: readonly KaladaFunctionParameter[];
39
+ readonly returns: KaladaType;
40
+ readonly body: KaladaV1Expression<R>;
41
+ }
42
+ interface CallExpression<R extends JsonValue> {
43
+ readonly kind: "call";
44
+ readonly callee: KaladaV1Expression<R>;
45
+ readonly arguments: readonly KaladaV1Expression<R>[];
46
+ }
47
+ interface NamedFunction<R extends JsonValue> {
48
+ readonly name: string;
49
+ readonly parameters: readonly KaladaFunctionParameter[];
50
+ readonly returns: KaladaType;
51
+ readonly body: KaladaV1Expression<R>;
52
+ }
53
+ interface FunctionGroupExpression<R extends JsonValue> {
54
+ readonly kind: "function-group";
55
+ readonly functions: readonly NamedFunction<R>[];
56
+ readonly body: KaladaV1Expression<R>;
57
+ }
58
+ type KaladaCoreFunctionName = "map" | "filter" | "some" | "every";
59
+ interface CoreFunctionExpression {
60
+ readonly kind: "core-function";
61
+ readonly name: KaladaCoreFunctionName;
62
+ }
12
63
  interface InstantExpression {
13
64
  readonly kind: "instant";
14
65
  readonly milliseconds: number;
@@ -68,11 +119,17 @@ interface KaladaV1Program<R extends JsonValue = string> {
68
119
  readonly profile: "kalada-v1";
69
120
  readonly expression: KaladaV1Expression<R>;
70
121
  }
71
- type KaladaV1DiagnosticCode = "KALADA_INVALID_INPUT" | "KALADA_LIMIT_EXCEEDED" | "KALADA_INVALID_REFERENCE" | "KALADA_MATCH_MISSING_ARM" | "KALADA_MATCH_DUPLICATE_ARM" | "KALADA_MATCH_UNKNOWN_ARM" | "KALADA_MATCH_UNREACHABLE_ARM" | "KALADA_MATCH_TYPE_MISMATCH" | "KALADA_REFERENCE_ERROR" | "KALADA_REFERENCE_MISSING" | "KALADA_REFERENCE_DENIED" | "KALADA_ASYNC_UNSUPPORTED" | "KALADA_INVALID_RESULT" | "KALADA_EVALUATION_LIMIT" | "KALADA_INSTANT_REQUIRED" | "KALADA_TEMPORAL_TYPE_MISMATCH" | "KALADA_TEMPORAL_OVERFLOW" | "KALADA_CLOCK_ERROR" | "KALADA_INVALID_CLOCK";
122
+ type KaladaV1DiagnosticCode = "KALADA_INVALID_INPUT" | "KALADA_LIMIT_EXCEEDED" | "KALADA_INVALID_REFERENCE" | "KALADA_MATCH_MISSING_ARM" | "KALADA_MATCH_DUPLICATE_ARM" | "KALADA_MATCH_UNKNOWN_ARM" | "KALADA_MATCH_UNREACHABLE_ARM" | "KALADA_MATCH_TYPE_MISMATCH" | "KALADA_REFERENCE_ERROR" | "KALADA_REFERENCE_MISSING" | "KALADA_REFERENCE_DENIED" | "KALADA_ASYNC_UNSUPPORTED" | "KALADA_INVALID_RESULT" | "KALADA_EVALUATION_LIMIT" | "KALADA_INSTANT_REQUIRED" | "KALADA_TEMPORAL_TYPE_MISMATCH" | "KALADA_TEMPORAL_OVERFLOW" | "KALADA_CLOCK_ERROR" | "KALADA_INVALID_CLOCK" | "KALADA_DUPLICATE_BINDING" | "KALADA_INVALID_FUNCTION_TYPE" | "KALADA_CAPTURE_LIMIT" | "KALADA_NOT_CALLABLE" | "KALADA_FUNCTION_ARITY" | "KALADA_FUNCTION_TYPE_MISMATCH" | "KALADA_CLOSURE_LIMIT" | "KALADA_CALL_DEPTH_LIMIT" | "KALADA_CONTINUATION_LIMIT" | "KALADA_COLLECTION_TYPE_MISMATCH" | "KALADA_COLLECTION_LIMIT" | "KALADA_FUNCTION_ESCAPE";
123
+ interface KaladaV1DiagnosticContextFrame {
124
+ readonly kind: "function-call" | "core-call";
125
+ readonly name: string | null;
126
+ readonly path: readonly (string | number)[];
127
+ }
72
128
  interface KaladaV1Diagnostic {
73
129
  readonly code: KaladaV1DiagnosticCode;
74
130
  readonly path: readonly (string | number)[];
75
131
  readonly message: string;
132
+ readonly context?: readonly KaladaV1DiagnosticContextFrame[];
76
133
  }
77
134
  type KaladaV1Outcome<T> = {
78
135
  readonly ok: true;
@@ -90,13 +147,29 @@ interface KaladaV1Limits {
90
147
  readonly maxReferenceLength: number;
91
148
  readonly maxEvaluationSteps: number;
92
149
  }
150
+ interface KaladaV1FunctionLimits {
151
+ readonly maxFunctionParameters: number;
152
+ readonly maxFunctionGroupSize: number;
153
+ readonly maxCapturesPerClosure: number;
154
+ readonly maxCapturedBindings: number;
155
+ readonly maxClosures: number;
156
+ readonly maxCallDepth: number;
157
+ readonly maxContinuationFrames: number;
158
+ readonly maxCollectionLength: number;
159
+ readonly maxCollectionIterations: number;
160
+ }
161
+ interface KaladaV1FunctionCapture {
162
+ readonly path: readonly (string | number)[];
163
+ readonly name: string | null;
164
+ readonly captures: readonly string[];
165
+ }
93
166
  interface KaladaV1ReferenceCodec<R extends JsonValue> {
94
167
  readonly validate: (input: unknown) => input is R;
95
168
  readonly canonicalize?: (reference: R) => R;
96
169
  }
97
170
  interface KaladaV1Options<R extends JsonValue> {
98
171
  readonly reference?: KaladaV1ReferenceCodec<R>;
99
- readonly limits?: Partial<KaladaV1Limits>;
172
+ readonly limits?: Partial<KaladaV1Limits & KaladaV1FunctionLimits>;
100
173
  }
101
174
  type KaladaV1Resolution = {
102
175
  readonly found: true;
@@ -113,8 +186,9 @@ type KaladaV1Clock = () => InstantValue;
113
186
  interface CompiledKaladaV1Program<R extends JsonValue> {
114
187
  readonly program: KaladaV1Program<R>;
115
188
  readonly dependencies: readonly R[];
189
+ readonly functions: readonly KaladaV1FunctionCapture[];
116
190
  evaluate(resolve: KaladaV1Resolver<R>, inputs?: KaladaV1EvaluationInputs): KaladaV1Outcome<KaladaValue>;
117
191
  evaluateWithClock(resolve: KaladaV1Resolver<R>, clock: KaladaV1Clock): KaladaV1Outcome<KaladaValue>;
118
192
  }
119
193
 
120
- export type { BindingExpression, CompiledKaladaV1Program, CurrentInstantExpression, DurationExpression, InstantExpression, KaladaV1Clock, KaladaV1Diagnostic, KaladaV1DiagnosticCode, KaladaV1EvaluationInputs, KaladaV1Expression, KaladaV1Limits, KaladaV1Options, KaladaV1Outcome, KaladaV1Program, KaladaV1ReferenceCodec, KaladaV1Resolution, KaladaV1Resolver, MatchArm, MatchExpression, OptionExpression, ResultExpression, TemporalArithmeticExpression, TemporalComparisonExpression };
194
+ export type { BindingExpression, CallExpression, CompiledKaladaV1Program, CoreFunctionExpression, CurrentInstantExpression, DurationExpression, FunctionExpression, FunctionGroupExpression, InstantExpression, KaladaCoreFunctionName, KaladaFunctionParameter, KaladaFunctionType, KaladaPrimitiveTypeName, KaladaType, KaladaV1Clock, KaladaV1Diagnostic, KaladaV1DiagnosticCode, KaladaV1DiagnosticContextFrame, KaladaV1EvaluationInputs, KaladaV1Expression, KaladaV1FunctionCapture, KaladaV1FunctionLimits, KaladaV1Limits, KaladaV1Options, KaladaV1Outcome, KaladaV1Program, KaladaV1ReferenceCodec, KaladaV1Resolution, KaladaV1Resolver, MatchArm, MatchExpression, NamedFunction, OptionExpression, ResultExpression, TemporalArithmeticExpression, TemporalComparisonExpression };
@@ -8,7 +8,58 @@ type KaladaV1Expression<R extends JsonValue = string> = {
8
8
  } | {
9
9
  readonly kind: "ref";
10
10
  readonly ref: R;
11
- } | BindingExpression<R> | OptionExpression<R> | ResultExpression<R> | MatchExpression<R> | InstantExpression | DurationExpression | CurrentInstantExpression | TemporalArithmeticExpression<R> | TemporalComparisonExpression<R>;
11
+ } | BindingExpression<R> | OptionExpression<R> | ResultExpression<R> | MatchExpression<R> | InstantExpression | DurationExpression | CurrentInstantExpression | TemporalArithmeticExpression<R> | TemporalComparisonExpression<R> | FunctionExpression<R> | CallExpression<R> | FunctionGroupExpression<R> | CoreFunctionExpression;
12
+ type KaladaPrimitiveTypeName = "null" | "boolean" | "number" | "string" | "json" | "Instant" | "Duration";
13
+ type KaladaType = {
14
+ readonly kind: "primitive-type";
15
+ readonly name: KaladaPrimitiveTypeName;
16
+ } | {
17
+ readonly kind: "option-type";
18
+ readonly value: KaladaType;
19
+ } | {
20
+ readonly kind: "result-type";
21
+ readonly ok: KaladaType;
22
+ readonly error: KaladaType;
23
+ } | {
24
+ readonly kind: "array-type";
25
+ readonly element: KaladaType;
26
+ } | KaladaFunctionType;
27
+ interface KaladaFunctionType {
28
+ readonly kind: "function-type";
29
+ readonly parameters: readonly KaladaType[];
30
+ readonly returns: KaladaType;
31
+ }
32
+ interface KaladaFunctionParameter {
33
+ readonly name: string;
34
+ readonly type: KaladaType;
35
+ }
36
+ interface FunctionExpression<R extends JsonValue> {
37
+ readonly kind: "function";
38
+ readonly parameters: readonly KaladaFunctionParameter[];
39
+ readonly returns: KaladaType;
40
+ readonly body: KaladaV1Expression<R>;
41
+ }
42
+ interface CallExpression<R extends JsonValue> {
43
+ readonly kind: "call";
44
+ readonly callee: KaladaV1Expression<R>;
45
+ readonly arguments: readonly KaladaV1Expression<R>[];
46
+ }
47
+ interface NamedFunction<R extends JsonValue> {
48
+ readonly name: string;
49
+ readonly parameters: readonly KaladaFunctionParameter[];
50
+ readonly returns: KaladaType;
51
+ readonly body: KaladaV1Expression<R>;
52
+ }
53
+ interface FunctionGroupExpression<R extends JsonValue> {
54
+ readonly kind: "function-group";
55
+ readonly functions: readonly NamedFunction<R>[];
56
+ readonly body: KaladaV1Expression<R>;
57
+ }
58
+ type KaladaCoreFunctionName = "map" | "filter" | "some" | "every";
59
+ interface CoreFunctionExpression {
60
+ readonly kind: "core-function";
61
+ readonly name: KaladaCoreFunctionName;
62
+ }
12
63
  interface InstantExpression {
13
64
  readonly kind: "instant";
14
65
  readonly milliseconds: number;
@@ -68,11 +119,17 @@ interface KaladaV1Program<R extends JsonValue = string> {
68
119
  readonly profile: "kalada-v1";
69
120
  readonly expression: KaladaV1Expression<R>;
70
121
  }
71
- type KaladaV1DiagnosticCode = "KALADA_INVALID_INPUT" | "KALADA_LIMIT_EXCEEDED" | "KALADA_INVALID_REFERENCE" | "KALADA_MATCH_MISSING_ARM" | "KALADA_MATCH_DUPLICATE_ARM" | "KALADA_MATCH_UNKNOWN_ARM" | "KALADA_MATCH_UNREACHABLE_ARM" | "KALADA_MATCH_TYPE_MISMATCH" | "KALADA_REFERENCE_ERROR" | "KALADA_REFERENCE_MISSING" | "KALADA_REFERENCE_DENIED" | "KALADA_ASYNC_UNSUPPORTED" | "KALADA_INVALID_RESULT" | "KALADA_EVALUATION_LIMIT" | "KALADA_INSTANT_REQUIRED" | "KALADA_TEMPORAL_TYPE_MISMATCH" | "KALADA_TEMPORAL_OVERFLOW" | "KALADA_CLOCK_ERROR" | "KALADA_INVALID_CLOCK";
122
+ type KaladaV1DiagnosticCode = "KALADA_INVALID_INPUT" | "KALADA_LIMIT_EXCEEDED" | "KALADA_INVALID_REFERENCE" | "KALADA_MATCH_MISSING_ARM" | "KALADA_MATCH_DUPLICATE_ARM" | "KALADA_MATCH_UNKNOWN_ARM" | "KALADA_MATCH_UNREACHABLE_ARM" | "KALADA_MATCH_TYPE_MISMATCH" | "KALADA_REFERENCE_ERROR" | "KALADA_REFERENCE_MISSING" | "KALADA_REFERENCE_DENIED" | "KALADA_ASYNC_UNSUPPORTED" | "KALADA_INVALID_RESULT" | "KALADA_EVALUATION_LIMIT" | "KALADA_INSTANT_REQUIRED" | "KALADA_TEMPORAL_TYPE_MISMATCH" | "KALADA_TEMPORAL_OVERFLOW" | "KALADA_CLOCK_ERROR" | "KALADA_INVALID_CLOCK" | "KALADA_DUPLICATE_BINDING" | "KALADA_INVALID_FUNCTION_TYPE" | "KALADA_CAPTURE_LIMIT" | "KALADA_NOT_CALLABLE" | "KALADA_FUNCTION_ARITY" | "KALADA_FUNCTION_TYPE_MISMATCH" | "KALADA_CLOSURE_LIMIT" | "KALADA_CALL_DEPTH_LIMIT" | "KALADA_CONTINUATION_LIMIT" | "KALADA_COLLECTION_TYPE_MISMATCH" | "KALADA_COLLECTION_LIMIT" | "KALADA_FUNCTION_ESCAPE";
123
+ interface KaladaV1DiagnosticContextFrame {
124
+ readonly kind: "function-call" | "core-call";
125
+ readonly name: string | null;
126
+ readonly path: readonly (string | number)[];
127
+ }
72
128
  interface KaladaV1Diagnostic {
73
129
  readonly code: KaladaV1DiagnosticCode;
74
130
  readonly path: readonly (string | number)[];
75
131
  readonly message: string;
132
+ readonly context?: readonly KaladaV1DiagnosticContextFrame[];
76
133
  }
77
134
  type KaladaV1Outcome<T> = {
78
135
  readonly ok: true;
@@ -90,13 +147,29 @@ interface KaladaV1Limits {
90
147
  readonly maxReferenceLength: number;
91
148
  readonly maxEvaluationSteps: number;
92
149
  }
150
+ interface KaladaV1FunctionLimits {
151
+ readonly maxFunctionParameters: number;
152
+ readonly maxFunctionGroupSize: number;
153
+ readonly maxCapturesPerClosure: number;
154
+ readonly maxCapturedBindings: number;
155
+ readonly maxClosures: number;
156
+ readonly maxCallDepth: number;
157
+ readonly maxContinuationFrames: number;
158
+ readonly maxCollectionLength: number;
159
+ readonly maxCollectionIterations: number;
160
+ }
161
+ interface KaladaV1FunctionCapture {
162
+ readonly path: readonly (string | number)[];
163
+ readonly name: string | null;
164
+ readonly captures: readonly string[];
165
+ }
93
166
  interface KaladaV1ReferenceCodec<R extends JsonValue> {
94
167
  readonly validate: (input: unknown) => input is R;
95
168
  readonly canonicalize?: (reference: R) => R;
96
169
  }
97
170
  interface KaladaV1Options<R extends JsonValue> {
98
171
  readonly reference?: KaladaV1ReferenceCodec<R>;
99
- readonly limits?: Partial<KaladaV1Limits>;
172
+ readonly limits?: Partial<KaladaV1Limits & KaladaV1FunctionLimits>;
100
173
  }
101
174
  type KaladaV1Resolution = {
102
175
  readonly found: true;
@@ -113,8 +186,9 @@ type KaladaV1Clock = () => InstantValue;
113
186
  interface CompiledKaladaV1Program<R extends JsonValue> {
114
187
  readonly program: KaladaV1Program<R>;
115
188
  readonly dependencies: readonly R[];
189
+ readonly functions: readonly KaladaV1FunctionCapture[];
116
190
  evaluate(resolve: KaladaV1Resolver<R>, inputs?: KaladaV1EvaluationInputs): KaladaV1Outcome<KaladaValue>;
117
191
  evaluateWithClock(resolve: KaladaV1Resolver<R>, clock: KaladaV1Clock): KaladaV1Outcome<KaladaValue>;
118
192
  }
119
193
 
120
- export type { BindingExpression, CompiledKaladaV1Program, CurrentInstantExpression, DurationExpression, InstantExpression, KaladaV1Clock, KaladaV1Diagnostic, KaladaV1DiagnosticCode, KaladaV1EvaluationInputs, KaladaV1Expression, KaladaV1Limits, KaladaV1Options, KaladaV1Outcome, KaladaV1Program, KaladaV1ReferenceCodec, KaladaV1Resolution, KaladaV1Resolver, MatchArm, MatchExpression, OptionExpression, ResultExpression, TemporalArithmeticExpression, TemporalComparisonExpression };
194
+ export type { BindingExpression, CallExpression, CompiledKaladaV1Program, CoreFunctionExpression, CurrentInstantExpression, DurationExpression, FunctionExpression, FunctionGroupExpression, InstantExpression, KaladaCoreFunctionName, KaladaFunctionParameter, KaladaFunctionType, KaladaPrimitiveTypeName, KaladaType, KaladaV1Clock, KaladaV1Diagnostic, KaladaV1DiagnosticCode, KaladaV1DiagnosticContextFrame, KaladaV1EvaluationInputs, KaladaV1Expression, KaladaV1FunctionCapture, KaladaV1FunctionLimits, KaladaV1Limits, KaladaV1Options, KaladaV1Outcome, KaladaV1Program, KaladaV1ReferenceCodec, KaladaV1Resolution, KaladaV1Resolver, MatchArm, MatchExpression, NamedFunction, OptionExpression, ResultExpression, TemporalArithmeticExpression, TemporalComparisonExpression };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kalada/core",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Canonical runtime contracts for the Kalada expression language",
5
5
  "license": "MIT",
6
6
  "repository": {