@kalada/core 0.2.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 (140) hide show
  1. package/README.md +62 -3
  2. package/dist/kalada-v1/canonical-input.cjs +133 -0
  3. package/dist/kalada-v1/canonical-input.cjs.map +1 -0
  4. package/dist/kalada-v1/canonical-input.d.cts +26 -0
  5. package/dist/kalada-v1/canonical-input.d.ts +26 -0
  6. package/dist/kalada-v1/canonical-input.js +122 -0
  7. package/dist/kalada-v1/canonical-input.js.map +1 -0
  8. package/dist/kalada-v1/canonicalize.cjs +93 -130
  9. package/dist/kalada-v1/canonicalize.cjs.map +1 -1
  10. package/dist/kalada-v1/canonicalize.d.cts +1 -0
  11. package/dist/kalada-v1/canonicalize.d.ts +1 -0
  12. package/dist/kalada-v1/canonicalize.js +71 -108
  13. package/dist/kalada-v1/canonicalize.js.map +1 -1
  14. package/dist/kalada-v1/codec.cjs +24 -0
  15. package/dist/kalada-v1/codec.cjs.map +1 -1
  16. package/dist/kalada-v1/codec.d.cts +5 -0
  17. package/dist/kalada-v1/codec.d.ts +5 -0
  18. package/dist/kalada-v1/codec.js +24 -0
  19. package/dist/kalada-v1/codec.js.map +1 -1
  20. package/dist/kalada-v1/compile.cjs +24 -1
  21. package/dist/kalada-v1/compile.cjs.map +1 -1
  22. package/dist/kalada-v1/compile.d.cts +1 -0
  23. package/dist/kalada-v1/compile.d.ts +1 -0
  24. package/dist/kalada-v1/compile.js +25 -2
  25. package/dist/kalada-v1/compile.js.map +1 -1
  26. package/dist/kalada-v1/dependencies.cjs +55 -2
  27. package/dist/kalada-v1/dependencies.cjs.map +1 -1
  28. package/dist/kalada-v1/dependencies.d.cts +1 -0
  29. package/dist/kalada-v1/dependencies.d.ts +1 -0
  30. package/dist/kalada-v1/dependencies.js +55 -2
  31. package/dist/kalada-v1/dependencies.js.map +1 -1
  32. package/dist/kalada-v1/diagnostics.cjs +29 -4
  33. package/dist/kalada-v1/diagnostics.cjs.map +1 -1
  34. package/dist/kalada-v1/diagnostics.d.cts +5 -3
  35. package/dist/kalada-v1/diagnostics.d.ts +5 -3
  36. package/dist/kalada-v1/diagnostics.js +29 -4
  37. package/dist/kalada-v1/diagnostics.js.map +1 -1
  38. package/dist/kalada-v1/evaluate.cjs +23 -117
  39. package/dist/kalada-v1/evaluate.cjs.map +1 -1
  40. package/dist/kalada-v1/evaluate.d.cts +4 -2
  41. package/dist/kalada-v1/evaluate.d.ts +4 -2
  42. package/dist/kalada-v1/evaluate.js +24 -118
  43. package/dist/kalada-v1/evaluate.js.map +1 -1
  44. package/dist/kalada-v1/evaluation-delivery.cjs +286 -0
  45. package/dist/kalada-v1/evaluation-delivery.cjs.map +1 -0
  46. package/dist/kalada-v1/evaluation-delivery.d.cts +13 -0
  47. package/dist/kalada-v1/evaluation-delivery.d.ts +13 -0
  48. package/dist/kalada-v1/evaluation-delivery.js +284 -0
  49. package/dist/kalada-v1/evaluation-delivery.js.map +1 -0
  50. package/dist/kalada-v1/evaluation-frames.cjs +16 -0
  51. package/dist/kalada-v1/evaluation-frames.cjs.map +1 -0
  52. package/dist/kalada-v1/evaluation-frames.d.cts +83 -0
  53. package/dist/kalada-v1/evaluation-frames.d.ts +83 -0
  54. package/dist/kalada-v1/evaluation-frames.js +14 -0
  55. package/dist/kalada-v1/evaluation-frames.js.map +1 -0
  56. package/dist/kalada-v1/evaluation-machine.cjs +226 -0
  57. package/dist/kalada-v1/evaluation-machine.cjs.map +1 -0
  58. package/dist/kalada-v1/evaluation-machine.d.cts +9 -0
  59. package/dist/kalada-v1/evaluation-machine.d.ts +9 -0
  60. package/dist/kalada-v1/evaluation-machine.js +224 -0
  61. package/dist/kalada-v1/evaluation-machine.js.map +1 -0
  62. package/dist/kalada-v1/evaluation-resolution.cjs +80 -0
  63. package/dist/kalada-v1/evaluation-resolution.cjs.map +1 -0
  64. package/dist/kalada-v1/evaluation-resolution.d.cts +11 -0
  65. package/dist/kalada-v1/evaluation-resolution.d.ts +11 -0
  66. package/dist/kalada-v1/evaluation-resolution.js +78 -0
  67. package/dist/kalada-v1/evaluation-resolution.js.map +1 -0
  68. package/dist/kalada-v1/evaluation-state.cjs +94 -0
  69. package/dist/kalada-v1/evaluation-state.cjs.map +1 -0
  70. package/dist/kalada-v1/evaluation-state.d.cts +38 -0
  71. package/dist/kalada-v1/evaluation-state.d.ts +38 -0
  72. package/dist/kalada-v1/evaluation-state.js +81 -0
  73. package/dist/kalada-v1/evaluation-state.js.map +1 -0
  74. package/dist/kalada-v1/factories.cjs +46 -0
  75. package/dist/kalada-v1/factories.cjs.map +1 -1
  76. package/dist/kalada-v1/factories.d.cts +24 -1
  77. package/dist/kalada-v1/factories.d.ts +24 -1
  78. package/dist/kalada-v1/factories.js +46 -0
  79. package/dist/kalada-v1/factories.js.map +1 -1
  80. package/dist/kalada-v1/function-contracts.cjs +150 -0
  81. package/dist/kalada-v1/function-contracts.cjs.map +1 -0
  82. package/dist/kalada-v1/function-contracts.d.cts +15 -0
  83. package/dist/kalada-v1/function-contracts.d.ts +15 -0
  84. package/dist/kalada-v1/function-contracts.js +144 -0
  85. package/dist/kalada-v1/function-contracts.js.map +1 -0
  86. package/dist/kalada-v1/index.cjs +30 -0
  87. package/dist/kalada-v1/index.d.cts +5 -3
  88. package/dist/kalada-v1/index.d.ts +5 -3
  89. package/dist/kalada-v1/index.js +4 -2
  90. package/dist/kalada-v1/limits.cjs +23 -2
  91. package/dist/kalada-v1/limits.cjs.map +1 -1
  92. package/dist/kalada-v1/limits.d.cts +6 -3
  93. package/dist/kalada-v1/limits.d.ts +6 -3
  94. package/dist/kalada-v1/limits.js +23 -3
  95. package/dist/kalada-v1/limits.js.map +1 -1
  96. package/dist/kalada-v1/runtime-values.cjs +112 -0
  97. package/dist/kalada-v1/runtime-values.cjs.map +1 -0
  98. package/dist/kalada-v1/runtime-values.d.cts +35 -0
  99. package/dist/kalada-v1/runtime-values.d.ts +35 -0
  100. package/dist/kalada-v1/runtime-values.js +105 -0
  101. package/dist/kalada-v1/runtime-values.js.map +1 -0
  102. package/dist/kalada-v1/schemas.cjs +136 -3
  103. package/dist/kalada-v1/schemas.cjs.map +1 -1
  104. package/dist/kalada-v1/schemas.d.cts +2 -1
  105. package/dist/kalada-v1/schemas.d.ts +2 -1
  106. package/dist/kalada-v1/schemas.js +137 -5
  107. package/dist/kalada-v1/schemas.js.map +1 -1
  108. package/dist/kalada-v1/static-analysis.cjs +177 -0
  109. package/dist/kalada-v1/static-analysis.cjs.map +1 -0
  110. package/dist/kalada-v1/static-analysis.d.cts +9 -0
  111. package/dist/kalada-v1/static-analysis.d.ts +9 -0
  112. package/dist/kalada-v1/static-analysis.js +175 -0
  113. package/dist/kalada-v1/static-analysis.js.map +1 -0
  114. package/dist/kalada-v1/static-types.cjs +229 -0
  115. package/dist/kalada-v1/static-types.cjs.map +1 -0
  116. package/dist/kalada-v1/static-types.d.cts +8 -0
  117. package/dist/kalada-v1/static-types.d.ts +8 -0
  118. package/dist/kalada-v1/static-types.js +227 -0
  119. package/dist/kalada-v1/static-types.js.map +1 -0
  120. package/dist/kalada-v1/temporal-evaluation.cjs +95 -0
  121. package/dist/kalada-v1/temporal-evaluation.cjs.map +1 -0
  122. package/dist/kalada-v1/temporal-evaluation.d.cts +18 -0
  123. package/dist/kalada-v1/temporal-evaluation.d.ts +18 -0
  124. package/dist/kalada-v1/temporal-evaluation.js +90 -0
  125. package/dist/kalada-v1/temporal-evaluation.js.map +1 -0
  126. package/dist/kalada-v1/temporal.cjs +42 -0
  127. package/dist/kalada-v1/temporal.cjs.map +1 -0
  128. package/dist/kalada-v1/temporal.d.cts +22 -0
  129. package/dist/kalada-v1/temporal.d.ts +22 -0
  130. package/dist/kalada-v1/temporal.js +37 -0
  131. package/dist/kalada-v1/temporal.js.map +1 -0
  132. package/dist/kalada-v1/types.d.cts +108 -5
  133. package/dist/kalada-v1/types.d.ts +108 -5
  134. package/dist/kalada-v1/values.cjs +13 -1
  135. package/dist/kalada-v1/values.cjs.map +1 -1
  136. package/dist/kalada-v1/values.d.cts +2 -1
  137. package/dist/kalada-v1/values.d.ts +2 -1
  138. package/dist/kalada-v1/values.js +13 -1
  139. package/dist/kalada-v1/values.js.map +1 -1
  140. package/package.json +1 -1
@@ -0,0 +1,286 @@
1
+ 'use strict';
2
+
3
+ var evaluationFrames_js = require('./evaluation-frames.js');
4
+ var evaluationState_js = require('./evaluation-state.js');
5
+ var json_js = require('./json.js');
6
+ var runtimeValues_js = require('./runtime-values.js');
7
+ var temporal_js = require('./temporal.js');
8
+ var temporalEvaluation_js = require('./temporal-evaluation.js');
9
+ var values_js = require('./values.js');
10
+
11
+ function deliverFrame(state) {
12
+ const frame = state.stack[state.stack.length - 1];
13
+ switch (frame.kind) {
14
+ case "binding":
15
+ deliverBinding(frame, state);
16
+ break;
17
+ case "constructor":
18
+ deliverConstructor(frame, state);
19
+ break;
20
+ case "match":
21
+ deliverMatch(frame, state);
22
+ break;
23
+ case "temporal-binary":
24
+ deliverTemporal(frame, state);
25
+ break;
26
+ case "function-group-body":
27
+ restore(frame.outer, state);
28
+ break;
29
+ case "call-callee":
30
+ deliverCallee(frame, state);
31
+ break;
32
+ case "call-arguments":
33
+ deliverArgument(frame, state);
34
+ break;
35
+ case "user-return":
36
+ deliverReturn(frame, state);
37
+ break;
38
+ case "core-iteration":
39
+ deliverCoreCallback(frame, state);
40
+ break;
41
+ }
42
+ }
43
+ function deliverBinding(frame, state) {
44
+ if (frame.phase === "body") {
45
+ restore(frame.outer, state);
46
+ return;
47
+ }
48
+ frame.phase = "body";
49
+ const nested = new Map(state.environment);
50
+ nested.set(frame.name, state.value);
51
+ evaluationState_js.evaluate(frame.body, [...frame.path, "body"], nested, state);
52
+ }
53
+ function deliverConstructor(frame, state) {
54
+ state.stack.pop();
55
+ const value = state.value;
56
+ if (runtimeValues_js.isCallable(value)) evaluationState_js.fail("KALADA_FUNCTION_ESCAPE", [...frame.path, "value"]);
57
+ if (frame.type === "Option") evaluationState_js.deliver(values_js.Option.some(value), state);
58
+ else evaluationState_js.deliver(frame.variant === "ok" ? values_js.Result.ok(value) : values_js.Result.err(value), state);
59
+ }
60
+ function deliverMatch(frame, state) {
61
+ if (frame.phase === "arm") {
62
+ restore(frame.outer, state);
63
+ return;
64
+ }
65
+ const value = state.value;
66
+ const valid = !runtimeValues_js.isCallable(value) && (frame.type === "Option" ? values_js.isOption(value) : values_js.isResult(value));
67
+ if (!valid) evaluationState_js.fail("KALADA_MATCH_TYPE_MISMATCH", [...frame.path, "value"]);
68
+ const variant = value.variant;
69
+ const index = frame.arms.findIndex((arm2) => arm2.variant === variant);
70
+ const arm = frame.arms[index];
71
+ if (!arm) evaluationState_js.fail("KALADA_INVALID_INPUT", [...frame.path, "arms"]);
72
+ frame.phase = "arm";
73
+ frame.scrutinee = value;
74
+ frame.selected = index;
75
+ evaluationState_js.evaluate(
76
+ arm.body,
77
+ [...frame.path, "arms", index, "body"],
78
+ bindArm(frame.outer, arm.binding, value),
79
+ state
80
+ );
81
+ }
82
+ function bindArm(environment, name, value) {
83
+ if (!name || runtimeValues_js.isCallable(value) || values_js.isOption(value) && value.variant === "none")
84
+ return environment;
85
+ const nested = new Map(environment);
86
+ if (values_js.isOption(value) || values_js.isResult(value)) nested.set(name, value.value);
87
+ return nested;
88
+ }
89
+ function deliverTemporal(frame, state) {
90
+ const value = state.value;
91
+ if (runtimeValues_js.isCallable(value) || !temporal_js.isInstant(value) && !temporal_js.isDuration(value)) {
92
+ evaluationState_js.fail("KALADA_TEMPORAL_TYPE_MISMATCH", [...frame.path, frame.phase]);
93
+ }
94
+ if (frame.phase === "left") {
95
+ frame.phase = "right";
96
+ frame.left = value;
97
+ evaluationState_js.evaluate(frame.right, [...frame.path, "right"], state.environment, state);
98
+ return;
99
+ }
100
+ state.stack.pop();
101
+ const output = temporalEvaluation_js.applyTemporalBinary(
102
+ frame.expressionKind,
103
+ frame.operator,
104
+ frame.left,
105
+ value,
106
+ [...frame.path, "right"]
107
+ );
108
+ evaluationState_js.deliver(output, state);
109
+ }
110
+ function deliverCallee(frame, state) {
111
+ evaluationState_js.charge([...frame.path, "callee"], state);
112
+ state.stack.pop();
113
+ const callable = state.value;
114
+ if (!runtimeValues_js.isCallable(callable)) evaluationState_js.fail("KALADA_NOT_CALLABLE", [...frame.path, "callee"]);
115
+ const expected = callable.callable === "user" ? callable.parameters.length : 2;
116
+ if (frame.arguments.length !== expected)
117
+ evaluationState_js.fail("KALADA_FUNCTION_ARITY", [...frame.path, "arguments"]);
118
+ if (frame.arguments.length === 0) {
119
+ dispatch(callable, [], frame.path, state);
120
+ return;
121
+ }
122
+ evaluationState_js.push(
123
+ {
124
+ kind: "call-arguments",
125
+ phase: "argument",
126
+ path: frame.path,
127
+ callable,
128
+ arguments: frame.arguments,
129
+ values: [],
130
+ index: 0
131
+ },
132
+ [...frame.path, "arguments"],
133
+ state
134
+ );
135
+ evaluationState_js.evaluate(
136
+ frame.arguments[0],
137
+ [...frame.path, "arguments", 0],
138
+ state.environment,
139
+ state
140
+ );
141
+ }
142
+ function deliverArgument(frame, state) {
143
+ const path = [...frame.path, "arguments", frame.index];
144
+ evaluationState_js.charge(path, state);
145
+ const callable = frame.callable;
146
+ if (!runtimeValues_js.isCallable(callable)) evaluationState_js.fail("KALADA_NOT_CALLABLE", [...frame.path, "callee"]);
147
+ const type = runtimeValues_js.callableType(callable).parameters[frame.index];
148
+ if (type && !runtimeValues_js.matchesType(state.value, type))
149
+ evaluationState_js.fail("KALADA_FUNCTION_TYPE_MISMATCH", path);
150
+ frame.values.push(state.value);
151
+ frame.index += 1;
152
+ if (frame.index < frame.arguments.length) {
153
+ evaluationState_js.evaluate(
154
+ frame.arguments[frame.index],
155
+ [...frame.path, "arguments", frame.index],
156
+ state.environment,
157
+ state
158
+ );
159
+ return;
160
+ }
161
+ state.stack.pop();
162
+ dispatch(callable, frame.values, frame.path, state);
163
+ }
164
+ function dispatch(callable, values, path, state) {
165
+ if (!runtimeValues_js.isCallable(callable)) evaluationState_js.fail("KALADA_NOT_CALLABLE", [...path, "callee"]);
166
+ if (callable.callable === "core") {
167
+ dispatchCore(callable.name, values, path, state);
168
+ return;
169
+ }
170
+ dispatchUser(callable, values, path, state);
171
+ }
172
+ function dispatchUser(closure, values, path, state) {
173
+ if (state.callDepth >= state.limits.maxCallDepth) evaluationState_js.fail("KALADA_CALL_DEPTH_LIMIT", path);
174
+ evaluationState_js.ensureCapacity(path, state);
175
+ evaluationState_js.charge(path, state);
176
+ state.callDepth += 1;
177
+ state.stack.push({
178
+ kind: "user-return",
179
+ phase: "body",
180
+ path,
181
+ name: closure.name,
182
+ returns: closure.returns,
183
+ caller: state.environment
184
+ });
185
+ evaluationState_js.evaluate(closure.body, [...closure.path, "body"], evaluationFrames_js.functionEnvironment(closure, values), state);
186
+ }
187
+ function dispatchCore(operator, values, path, state) {
188
+ const input = values[0];
189
+ if (input.length > state.limits.maxCollectionLength) {
190
+ evaluationState_js.fail("KALADA_COLLECTION_LIMIT", [...path, "arguments", 0]);
191
+ }
192
+ if (state.callDepth >= state.limits.maxCallDepth) evaluationState_js.fail("KALADA_CALL_DEPTH_LIMIT", path);
193
+ evaluationState_js.ensureCapacity(path, state);
194
+ evaluationState_js.charge(path, state);
195
+ state.callDepth += 1;
196
+ const frame = {
197
+ kind: "core-iteration",
198
+ phase: "ready",
199
+ path,
200
+ operator,
201
+ callback: values[1],
202
+ input,
203
+ index: 0,
204
+ partial: operator === "some" ? false : operator === "every" ? true : []
205
+ };
206
+ state.stack.push(frame);
207
+ if (input.length === 0) finishCore(frame, state);
208
+ else dispatchCoreCallback(frame, state);
209
+ }
210
+ function dispatchCoreCallback(frame, state) {
211
+ frame.phase = "callback";
212
+ evaluationState_js.reserveCollectionIteration(frame.path, state);
213
+ dispatch(
214
+ frame.callback,
215
+ [frame.input[frame.index], frame.index],
216
+ [...frame.path, "arguments", 1],
217
+ state
218
+ );
219
+ }
220
+ function deliverCoreCallback(frame, state) {
221
+ evaluationState_js.charge(frame.path, state);
222
+ const value = state.value;
223
+ validateCoreResult(frame, value);
224
+ updateCoreResult(frame, value);
225
+ if (coreFinished(frame, value)) {
226
+ finishCore(frame, state);
227
+ return;
228
+ }
229
+ frame.index += 1;
230
+ if (frame.index === frame.input.length) finishCore(frame, state);
231
+ else dispatchCoreCallback(frame, state);
232
+ }
233
+ function validateCoreResult(frame, value) {
234
+ const expected = {
235
+ kind: "primitive-type",
236
+ name: frame.operator === "map" ? "json" : "boolean"
237
+ };
238
+ if (!runtimeValues_js.matchesType(value, expected)) {
239
+ evaluationState_js.fail("KALADA_COLLECTION_TYPE_MISMATCH", [...frame.path, "arguments", 1]);
240
+ }
241
+ }
242
+ function updateCoreResult(frame, value) {
243
+ if (frame.operator === "map") frame.partial.push(value);
244
+ if (frame.operator === "filter" && value) {
245
+ frame.partial.push(frame.input[frame.index]);
246
+ }
247
+ if (frame.operator === "some" && value) frame.partial = true;
248
+ if (frame.operator === "every" && !value) frame.partial = false;
249
+ }
250
+ function coreFinished(frame, value) {
251
+ return frame.operator === "some" && value === true || frame.operator === "every" && value === false;
252
+ }
253
+ function finishCore(frame, state) {
254
+ const output = Array.isArray(frame.partial) ? validateCollectionOutput(frame.partial, frame.path, state) : frame.partial;
255
+ state.stack.pop();
256
+ state.callDepth -= 1;
257
+ evaluationState_js.deliver(output, state);
258
+ }
259
+ function validateCollectionOutput(output, path, state) {
260
+ try {
261
+ json_js.cloneJson(output, {
262
+ maxDepth: state.limits.maxValueDepth,
263
+ maxNodes: state.limits.maxValueNodes,
264
+ maxStringLength: state.limits.maxStringLength
265
+ });
266
+ } catch {
267
+ evaluationState_js.fail("KALADA_LIMIT_EXCEEDED", path);
268
+ }
269
+ return Object.freeze(output);
270
+ }
271
+ function deliverReturn(frame, state) {
272
+ evaluationState_js.charge(frame.path, state);
273
+ state.stack.pop();
274
+ state.environment = frame.caller;
275
+ state.callDepth -= 1;
276
+ if (!runtimeValues_js.matchesType(state.value, frame.returns))
277
+ evaluationState_js.fail("KALADA_FUNCTION_TYPE_MISMATCH", frame.path);
278
+ }
279
+ function restore(environment, state) {
280
+ state.stack.pop();
281
+ state.environment = environment;
282
+ }
283
+
284
+ exports.deliverFrame = deliverFrame;
285
+ //# sourceMappingURL=evaluation-delivery.cjs.map
286
+ //# sourceMappingURL=evaluation-delivery.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/kalada-v1/evaluation-delivery.ts"],"names":["evaluate","isCallable","fail","deliver","Option","Result","isOption","isResult","arm","isInstant","isDuration","applyTemporalBinary","charge","push","callableType","matchesType","ensureCapacity","functionEnvironment","reserveCollectionIteration","cloneJson"],"mappings":"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","file":"evaluation-delivery.cjs","sourcesContent":["import { type EvaluationFrame, functionEnvironment, type Path } from \"./evaluation-frames.js\";\nimport {\n charge,\n deliver,\n ensureCapacity,\n evaluate,\n fail,\n type MachineState,\n push,\n reserveCollectionIteration,\n} from \"./evaluation-state.js\";\nimport { cloneJson, type JsonValue } from \"./json.js\";\nimport {\n callableType,\n isCallable,\n matchesType,\n type RuntimeEnvironment,\n type RuntimeValue,\n type UserClosure,\n} from \"./runtime-values.js\";\nimport { isDuration, isInstant } from \"./temporal.js\";\nimport { applyTemporalBinary } from \"./temporal-evaluation.js\";\nimport type { KaladaV1Expression } from \"./types.js\";\nimport { isOption, isResult, type KaladaValue, Option, Result } from \"./values.js\";\n\nexport function deliverFrame<R extends JsonValue>(state: MachineState<R>): void {\n const frame = state.stack[state.stack.length - 1] as EvaluationFrame<R>;\n switch (frame.kind) {\n case \"binding\":\n deliverBinding(frame, state);\n break;\n case \"constructor\":\n deliverConstructor(frame, state);\n break;\n case \"match\":\n deliverMatch(frame, state);\n break;\n case \"temporal-binary\":\n deliverTemporal(frame, state);\n break;\n case \"function-group-body\":\n restore(frame.outer, state);\n break;\n case \"call-callee\":\n deliverCallee(frame, state);\n break;\n case \"call-arguments\":\n deliverArgument(frame, state);\n break;\n case \"user-return\":\n deliverReturn(frame, state);\n break;\n case \"core-iteration\":\n deliverCoreCallback(frame, state);\n break;\n }\n}\n\nfunction deliverBinding<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"binding\" }>,\n state: MachineState<R>,\n): void {\n if (frame.phase === \"body\") {\n restore(frame.outer, state);\n return;\n }\n frame.phase = \"body\";\n const nested = new Map(state.environment);\n nested.set(frame.name, state.value as RuntimeValue);\n evaluate(frame.body, [...frame.path, \"body\"], nested, state);\n}\n\nfunction deliverConstructor<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"constructor\" }>,\n state: MachineState<R>,\n): void {\n state.stack.pop();\n const value = state.value as RuntimeValue;\n if (isCallable(value)) fail(\"KALADA_FUNCTION_ESCAPE\", [...frame.path, \"value\"]);\n if (frame.type === \"Option\") deliver(Option.some(value), state);\n else deliver(frame.variant === \"ok\" ? Result.ok(value) : Result.err(value), state);\n}\n\nfunction deliverMatch<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"match\" }>,\n state: MachineState<R>,\n): void {\n if (frame.phase === \"arm\") {\n restore(frame.outer, state);\n return;\n }\n const value = state.value as RuntimeValue;\n const valid = !isCallable(value) && (frame.type === \"Option\" ? isOption(value) : isResult(value));\n if (!valid) fail(\"KALADA_MATCH_TYPE_MISMATCH\", [...frame.path, \"value\"]);\n const variant = (value as ReturnType<typeof Option.none> | ReturnType<typeof Result.ok>).variant;\n const index = frame.arms.findIndex((arm) => arm.variant === variant);\n const arm = frame.arms[index];\n if (!arm) fail(\"KALADA_INVALID_INPUT\", [...frame.path, \"arms\"]);\n frame.phase = \"arm\";\n frame.scrutinee = value;\n frame.selected = index;\n evaluate(\n arm.body,\n [...frame.path, \"arms\", index, \"body\"],\n bindArm(frame.outer, arm.binding, value),\n state,\n );\n}\n\nfunction bindArm(\n environment: RuntimeEnvironment,\n name: string | undefined,\n value: RuntimeValue,\n): RuntimeEnvironment {\n if (!name || isCallable(value) || (isOption(value) && value.variant === \"none\"))\n return environment;\n const nested = new Map(environment);\n if (isOption(value) || isResult(value)) nested.set(name, value.value);\n return nested;\n}\n\nfunction deliverTemporal<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"temporal-binary\" }>,\n state: MachineState<R>,\n): void {\n const value = state.value as RuntimeValue;\n if (isCallable(value) || (!isInstant(value) && !isDuration(value))) {\n fail(\"KALADA_TEMPORAL_TYPE_MISMATCH\", [...frame.path, frame.phase]);\n }\n if (frame.phase === \"left\") {\n frame.phase = \"right\";\n frame.left = value;\n evaluate(frame.right, [...frame.path, \"right\"], state.environment, state);\n return;\n }\n state.stack.pop();\n const output = applyTemporalBinary(\n frame.expressionKind,\n frame.operator,\n frame.left as KaladaValue,\n value,\n [...frame.path, \"right\"],\n );\n deliver(output, state);\n}\n\nfunction deliverCallee<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"call-callee\" }>,\n state: MachineState<R>,\n): void {\n charge([...frame.path, \"callee\"], state);\n state.stack.pop();\n const callable = state.value as RuntimeValue;\n if (!isCallable(callable)) fail(\"KALADA_NOT_CALLABLE\", [...frame.path, \"callee\"]);\n const expected = callable.callable === \"user\" ? callable.parameters.length : 2;\n if (frame.arguments.length !== expected)\n fail(\"KALADA_FUNCTION_ARITY\", [...frame.path, \"arguments\"]);\n if (frame.arguments.length === 0) {\n dispatch(callable, [], frame.path, state);\n return;\n }\n push(\n {\n kind: \"call-arguments\",\n phase: \"argument\",\n path: frame.path,\n callable,\n arguments: frame.arguments,\n values: [],\n index: 0,\n },\n [...frame.path, \"arguments\"],\n state,\n );\n evaluate(\n frame.arguments[0] as KaladaV1Expression<R>,\n [...frame.path, \"arguments\", 0],\n state.environment,\n state,\n );\n}\n\nfunction deliverArgument<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"call-arguments\" }>,\n state: MachineState<R>,\n): void {\n const path = [...frame.path, \"arguments\", frame.index];\n charge(path, state);\n const callable = frame.callable;\n if (!isCallable(callable)) fail(\"KALADA_NOT_CALLABLE\", [...frame.path, \"callee\"]);\n const type = callableType(callable).parameters[frame.index];\n if (type && !matchesType(state.value as RuntimeValue, type))\n fail(\"KALADA_FUNCTION_TYPE_MISMATCH\", path);\n frame.values.push(state.value as RuntimeValue);\n frame.index += 1;\n if (frame.index < frame.arguments.length) {\n evaluate(\n frame.arguments[frame.index] as KaladaV1Expression<R>,\n [...frame.path, \"arguments\", frame.index],\n state.environment,\n state,\n );\n return;\n }\n state.stack.pop();\n dispatch(callable, frame.values, frame.path, state);\n}\n\nfunction dispatch<R extends JsonValue>(\n callable: RuntimeValue,\n values: readonly RuntimeValue[],\n path: Path,\n state: MachineState<R>,\n): void {\n if (!isCallable(callable)) fail(\"KALADA_NOT_CALLABLE\", [...path, \"callee\"]);\n if (callable.callable === \"core\") {\n dispatchCore(callable.name, values, path, state);\n return;\n }\n dispatchUser(callable as UserClosure<R>, values, path, state);\n}\n\nfunction dispatchUser<R extends JsonValue>(\n closure: UserClosure<R>,\n values: readonly RuntimeValue[],\n path: Path,\n state: MachineState<R>,\n): void {\n if (state.callDepth >= state.limits.maxCallDepth) fail(\"KALADA_CALL_DEPTH_LIMIT\", path);\n ensureCapacity(path, state);\n charge(path, state);\n state.callDepth += 1;\n state.stack.push({\n kind: \"user-return\",\n phase: \"body\",\n path,\n name: closure.name,\n returns: closure.returns,\n caller: state.environment,\n });\n evaluate(closure.body, [...closure.path, \"body\"], functionEnvironment(closure, values), state);\n}\n\nfunction dispatchCore<R extends JsonValue>(\n operator: Extract<EvaluationFrame<R>, { kind: \"core-iteration\" }>[\"operator\"],\n values: readonly RuntimeValue[],\n path: Path,\n state: MachineState<R>,\n): void {\n const input = values[0] as readonly JsonValue[];\n if (input.length > state.limits.maxCollectionLength) {\n fail(\"KALADA_COLLECTION_LIMIT\", [...path, \"arguments\", 0]);\n }\n if (state.callDepth >= state.limits.maxCallDepth) fail(\"KALADA_CALL_DEPTH_LIMIT\", path);\n ensureCapacity(path, state);\n charge(path, state);\n state.callDepth += 1;\n const frame: Extract<EvaluationFrame<R>, { kind: \"core-iteration\" }> = {\n kind: \"core-iteration\",\n phase: \"ready\",\n path,\n operator,\n callback: values[1] as RuntimeValue,\n input,\n index: 0,\n partial: operator === \"some\" ? false : operator === \"every\" ? true : [],\n };\n state.stack.push(frame);\n if (input.length === 0) finishCore(frame, state);\n else dispatchCoreCallback(frame, state);\n}\n\nfunction dispatchCoreCallback<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"core-iteration\" }>,\n state: MachineState<R>,\n): void {\n frame.phase = \"callback\";\n reserveCollectionIteration(frame.path, state);\n dispatch(\n frame.callback,\n [frame.input[frame.index] as JsonValue, frame.index],\n [...frame.path, \"arguments\", 1],\n state,\n );\n}\n\nfunction deliverCoreCallback<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"core-iteration\" }>,\n state: MachineState<R>,\n): void {\n charge(frame.path, state);\n const value = state.value as RuntimeValue;\n validateCoreResult(frame, value);\n updateCoreResult(frame, value as JsonValue | boolean);\n if (coreFinished(frame, value)) {\n finishCore(frame, state);\n return;\n }\n frame.index += 1;\n if (frame.index === frame.input.length) finishCore(frame, state);\n else dispatchCoreCallback(frame, state);\n}\n\nfunction validateCoreResult<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"core-iteration\" }>,\n value: RuntimeValue,\n): void {\n const expected = {\n kind: \"primitive-type\",\n name: frame.operator === \"map\" ? \"json\" : \"boolean\",\n } as const;\n if (!matchesType(value, expected)) {\n fail(\"KALADA_COLLECTION_TYPE_MISMATCH\", [...frame.path, \"arguments\", 1]);\n }\n}\n\nfunction updateCoreResult<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"core-iteration\" }>,\n value: JsonValue | boolean,\n): void {\n if (frame.operator === \"map\") (frame.partial as JsonValue[]).push(value as JsonValue);\n if (frame.operator === \"filter\" && value) {\n (frame.partial as JsonValue[]).push(frame.input[frame.index] as JsonValue);\n }\n if (frame.operator === \"some\" && value) frame.partial = true;\n if (frame.operator === \"every\" && !value) frame.partial = false;\n}\n\nfunction coreFinished<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"core-iteration\" }>,\n value: RuntimeValue,\n): boolean {\n return (\n (frame.operator === \"some\" && value === true) || (frame.operator === \"every\" && value === false)\n );\n}\n\nfunction finishCore<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"core-iteration\" }>,\n state: MachineState<R>,\n): void {\n const output = Array.isArray(frame.partial)\n ? validateCollectionOutput(frame.partial, frame.path, state)\n : frame.partial;\n state.stack.pop();\n state.callDepth -= 1;\n deliver(output, state);\n}\n\nfunction validateCollectionOutput<R extends JsonValue>(\n output: JsonValue[],\n path: Path,\n state: MachineState<R>,\n): JsonValue[] {\n try {\n cloneJson(output, {\n maxDepth: state.limits.maxValueDepth,\n maxNodes: state.limits.maxValueNodes,\n maxStringLength: state.limits.maxStringLength,\n });\n } catch {\n fail(\"KALADA_LIMIT_EXCEEDED\", path);\n }\n return Object.freeze(output) as JsonValue[];\n}\n\nfunction deliverReturn<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"user-return\" }>,\n state: MachineState<R>,\n): void {\n charge(frame.path, state);\n state.stack.pop();\n state.environment = frame.caller;\n state.callDepth -= 1;\n if (!matchesType(state.value as RuntimeValue, frame.returns))\n fail(\"KALADA_FUNCTION_TYPE_MISMATCH\", frame.path);\n}\n\nfunction restore<R extends JsonValue>(\n environment: RuntimeEnvironment,\n state: MachineState<R>,\n): void {\n state.stack.pop();\n state.environment = environment;\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import { MachineState } from './evaluation-state.cjs';
2
+ import { JsonValue } from './json.cjs';
3
+ import './diagnostics.cjs';
4
+ import './types.cjs';
5
+ import './temporal.cjs';
6
+ import './values.cjs';
7
+ import './evaluation-frames.cjs';
8
+ import './runtime-values.cjs';
9
+ import './limits.cjs';
10
+
11
+ declare function deliverFrame<R extends JsonValue>(state: MachineState<R>): void;
12
+
13
+ export { deliverFrame };
@@ -0,0 +1,13 @@
1
+ import { MachineState } from './evaluation-state.js';
2
+ import { JsonValue } from './json.js';
3
+ import './diagnostics.js';
4
+ import './types.js';
5
+ import './temporal.js';
6
+ import './values.js';
7
+ import './evaluation-frames.js';
8
+ import './runtime-values.js';
9
+ import './limits.js';
10
+
11
+ declare function deliverFrame<R extends JsonValue>(state: MachineState<R>): void;
12
+
13
+ export { deliverFrame };
@@ -0,0 +1,284 @@
1
+ import { functionEnvironment } from './evaluation-frames.js';
2
+ import { evaluate, fail, deliver, charge, push, ensureCapacity, reserveCollectionIteration } from './evaluation-state.js';
3
+ import { cloneJson } from './json.js';
4
+ import { isCallable, callableType, matchesType } from './runtime-values.js';
5
+ import { isInstant, isDuration } from './temporal.js';
6
+ import { applyTemporalBinary } from './temporal-evaluation.js';
7
+ import { Option, Result, isOption, isResult } from './values.js';
8
+
9
+ function deliverFrame(state) {
10
+ const frame = state.stack[state.stack.length - 1];
11
+ switch (frame.kind) {
12
+ case "binding":
13
+ deliverBinding(frame, state);
14
+ break;
15
+ case "constructor":
16
+ deliverConstructor(frame, state);
17
+ break;
18
+ case "match":
19
+ deliverMatch(frame, state);
20
+ break;
21
+ case "temporal-binary":
22
+ deliverTemporal(frame, state);
23
+ break;
24
+ case "function-group-body":
25
+ restore(frame.outer, state);
26
+ break;
27
+ case "call-callee":
28
+ deliverCallee(frame, state);
29
+ break;
30
+ case "call-arguments":
31
+ deliverArgument(frame, state);
32
+ break;
33
+ case "user-return":
34
+ deliverReturn(frame, state);
35
+ break;
36
+ case "core-iteration":
37
+ deliverCoreCallback(frame, state);
38
+ break;
39
+ }
40
+ }
41
+ function deliverBinding(frame, state) {
42
+ if (frame.phase === "body") {
43
+ restore(frame.outer, state);
44
+ return;
45
+ }
46
+ frame.phase = "body";
47
+ const nested = new Map(state.environment);
48
+ nested.set(frame.name, state.value);
49
+ evaluate(frame.body, [...frame.path, "body"], nested, state);
50
+ }
51
+ function deliverConstructor(frame, state) {
52
+ state.stack.pop();
53
+ const value = state.value;
54
+ if (isCallable(value)) fail("KALADA_FUNCTION_ESCAPE", [...frame.path, "value"]);
55
+ if (frame.type === "Option") deliver(Option.some(value), state);
56
+ else deliver(frame.variant === "ok" ? Result.ok(value) : Result.err(value), state);
57
+ }
58
+ function deliverMatch(frame, state) {
59
+ if (frame.phase === "arm") {
60
+ restore(frame.outer, state);
61
+ return;
62
+ }
63
+ const value = state.value;
64
+ const valid = !isCallable(value) && (frame.type === "Option" ? isOption(value) : isResult(value));
65
+ if (!valid) fail("KALADA_MATCH_TYPE_MISMATCH", [...frame.path, "value"]);
66
+ const variant = value.variant;
67
+ const index = frame.arms.findIndex((arm2) => arm2.variant === variant);
68
+ const arm = frame.arms[index];
69
+ if (!arm) fail("KALADA_INVALID_INPUT", [...frame.path, "arms"]);
70
+ frame.phase = "arm";
71
+ frame.scrutinee = value;
72
+ frame.selected = index;
73
+ evaluate(
74
+ arm.body,
75
+ [...frame.path, "arms", index, "body"],
76
+ bindArm(frame.outer, arm.binding, value),
77
+ state
78
+ );
79
+ }
80
+ function bindArm(environment, name, value) {
81
+ if (!name || isCallable(value) || isOption(value) && value.variant === "none")
82
+ return environment;
83
+ const nested = new Map(environment);
84
+ if (isOption(value) || isResult(value)) nested.set(name, value.value);
85
+ return nested;
86
+ }
87
+ function deliverTemporal(frame, state) {
88
+ const value = state.value;
89
+ if (isCallable(value) || !isInstant(value) && !isDuration(value)) {
90
+ fail("KALADA_TEMPORAL_TYPE_MISMATCH", [...frame.path, frame.phase]);
91
+ }
92
+ if (frame.phase === "left") {
93
+ frame.phase = "right";
94
+ frame.left = value;
95
+ evaluate(frame.right, [...frame.path, "right"], state.environment, state);
96
+ return;
97
+ }
98
+ state.stack.pop();
99
+ const output = applyTemporalBinary(
100
+ frame.expressionKind,
101
+ frame.operator,
102
+ frame.left,
103
+ value,
104
+ [...frame.path, "right"]
105
+ );
106
+ deliver(output, state);
107
+ }
108
+ function deliverCallee(frame, state) {
109
+ charge([...frame.path, "callee"], state);
110
+ state.stack.pop();
111
+ const callable = state.value;
112
+ if (!isCallable(callable)) fail("KALADA_NOT_CALLABLE", [...frame.path, "callee"]);
113
+ const expected = callable.callable === "user" ? callable.parameters.length : 2;
114
+ if (frame.arguments.length !== expected)
115
+ fail("KALADA_FUNCTION_ARITY", [...frame.path, "arguments"]);
116
+ if (frame.arguments.length === 0) {
117
+ dispatch(callable, [], frame.path, state);
118
+ return;
119
+ }
120
+ push(
121
+ {
122
+ kind: "call-arguments",
123
+ phase: "argument",
124
+ path: frame.path,
125
+ callable,
126
+ arguments: frame.arguments,
127
+ values: [],
128
+ index: 0
129
+ },
130
+ [...frame.path, "arguments"],
131
+ state
132
+ );
133
+ evaluate(
134
+ frame.arguments[0],
135
+ [...frame.path, "arguments", 0],
136
+ state.environment,
137
+ state
138
+ );
139
+ }
140
+ function deliverArgument(frame, state) {
141
+ const path = [...frame.path, "arguments", frame.index];
142
+ charge(path, state);
143
+ const callable = frame.callable;
144
+ if (!isCallable(callable)) fail("KALADA_NOT_CALLABLE", [...frame.path, "callee"]);
145
+ const type = callableType(callable).parameters[frame.index];
146
+ if (type && !matchesType(state.value, type))
147
+ fail("KALADA_FUNCTION_TYPE_MISMATCH", path);
148
+ frame.values.push(state.value);
149
+ frame.index += 1;
150
+ if (frame.index < frame.arguments.length) {
151
+ evaluate(
152
+ frame.arguments[frame.index],
153
+ [...frame.path, "arguments", frame.index],
154
+ state.environment,
155
+ state
156
+ );
157
+ return;
158
+ }
159
+ state.stack.pop();
160
+ dispatch(callable, frame.values, frame.path, state);
161
+ }
162
+ function dispatch(callable, values, path, state) {
163
+ if (!isCallable(callable)) fail("KALADA_NOT_CALLABLE", [...path, "callee"]);
164
+ if (callable.callable === "core") {
165
+ dispatchCore(callable.name, values, path, state);
166
+ return;
167
+ }
168
+ dispatchUser(callable, values, path, state);
169
+ }
170
+ function dispatchUser(closure, values, path, state) {
171
+ if (state.callDepth >= state.limits.maxCallDepth) fail("KALADA_CALL_DEPTH_LIMIT", path);
172
+ ensureCapacity(path, state);
173
+ charge(path, state);
174
+ state.callDepth += 1;
175
+ state.stack.push({
176
+ kind: "user-return",
177
+ phase: "body",
178
+ path,
179
+ name: closure.name,
180
+ returns: closure.returns,
181
+ caller: state.environment
182
+ });
183
+ evaluate(closure.body, [...closure.path, "body"], functionEnvironment(closure, values), state);
184
+ }
185
+ function dispatchCore(operator, values, path, state) {
186
+ const input = values[0];
187
+ if (input.length > state.limits.maxCollectionLength) {
188
+ fail("KALADA_COLLECTION_LIMIT", [...path, "arguments", 0]);
189
+ }
190
+ if (state.callDepth >= state.limits.maxCallDepth) fail("KALADA_CALL_DEPTH_LIMIT", path);
191
+ ensureCapacity(path, state);
192
+ charge(path, state);
193
+ state.callDepth += 1;
194
+ const frame = {
195
+ kind: "core-iteration",
196
+ phase: "ready",
197
+ path,
198
+ operator,
199
+ callback: values[1],
200
+ input,
201
+ index: 0,
202
+ partial: operator === "some" ? false : operator === "every" ? true : []
203
+ };
204
+ state.stack.push(frame);
205
+ if (input.length === 0) finishCore(frame, state);
206
+ else dispatchCoreCallback(frame, state);
207
+ }
208
+ function dispatchCoreCallback(frame, state) {
209
+ frame.phase = "callback";
210
+ reserveCollectionIteration(frame.path, state);
211
+ dispatch(
212
+ frame.callback,
213
+ [frame.input[frame.index], frame.index],
214
+ [...frame.path, "arguments", 1],
215
+ state
216
+ );
217
+ }
218
+ function deliverCoreCallback(frame, state) {
219
+ charge(frame.path, state);
220
+ const value = state.value;
221
+ validateCoreResult(frame, value);
222
+ updateCoreResult(frame, value);
223
+ if (coreFinished(frame, value)) {
224
+ finishCore(frame, state);
225
+ return;
226
+ }
227
+ frame.index += 1;
228
+ if (frame.index === frame.input.length) finishCore(frame, state);
229
+ else dispatchCoreCallback(frame, state);
230
+ }
231
+ function validateCoreResult(frame, value) {
232
+ const expected = {
233
+ kind: "primitive-type",
234
+ name: frame.operator === "map" ? "json" : "boolean"
235
+ };
236
+ if (!matchesType(value, expected)) {
237
+ fail("KALADA_COLLECTION_TYPE_MISMATCH", [...frame.path, "arguments", 1]);
238
+ }
239
+ }
240
+ function updateCoreResult(frame, value) {
241
+ if (frame.operator === "map") frame.partial.push(value);
242
+ if (frame.operator === "filter" && value) {
243
+ frame.partial.push(frame.input[frame.index]);
244
+ }
245
+ if (frame.operator === "some" && value) frame.partial = true;
246
+ if (frame.operator === "every" && !value) frame.partial = false;
247
+ }
248
+ function coreFinished(frame, value) {
249
+ return frame.operator === "some" && value === true || frame.operator === "every" && value === false;
250
+ }
251
+ function finishCore(frame, state) {
252
+ const output = Array.isArray(frame.partial) ? validateCollectionOutput(frame.partial, frame.path, state) : frame.partial;
253
+ state.stack.pop();
254
+ state.callDepth -= 1;
255
+ deliver(output, state);
256
+ }
257
+ function validateCollectionOutput(output, path, state) {
258
+ try {
259
+ cloneJson(output, {
260
+ maxDepth: state.limits.maxValueDepth,
261
+ maxNodes: state.limits.maxValueNodes,
262
+ maxStringLength: state.limits.maxStringLength
263
+ });
264
+ } catch {
265
+ fail("KALADA_LIMIT_EXCEEDED", path);
266
+ }
267
+ return Object.freeze(output);
268
+ }
269
+ function deliverReturn(frame, state) {
270
+ charge(frame.path, state);
271
+ state.stack.pop();
272
+ state.environment = frame.caller;
273
+ state.callDepth -= 1;
274
+ if (!matchesType(state.value, frame.returns))
275
+ fail("KALADA_FUNCTION_TYPE_MISMATCH", frame.path);
276
+ }
277
+ function restore(environment, state) {
278
+ state.stack.pop();
279
+ state.environment = environment;
280
+ }
281
+
282
+ export { deliverFrame };
283
+ //# sourceMappingURL=evaluation-delivery.js.map
284
+ //# sourceMappingURL=evaluation-delivery.js.map