@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.
- package/README.md +62 -3
- package/dist/kalada-v1/canonical-input.cjs +133 -0
- package/dist/kalada-v1/canonical-input.cjs.map +1 -0
- package/dist/kalada-v1/canonical-input.d.cts +26 -0
- package/dist/kalada-v1/canonical-input.d.ts +26 -0
- package/dist/kalada-v1/canonical-input.js +122 -0
- package/dist/kalada-v1/canonical-input.js.map +1 -0
- package/dist/kalada-v1/canonicalize.cjs +93 -130
- package/dist/kalada-v1/canonicalize.cjs.map +1 -1
- package/dist/kalada-v1/canonicalize.d.cts +1 -0
- package/dist/kalada-v1/canonicalize.d.ts +1 -0
- package/dist/kalada-v1/canonicalize.js +71 -108
- package/dist/kalada-v1/canonicalize.js.map +1 -1
- package/dist/kalada-v1/codec.cjs +24 -0
- package/dist/kalada-v1/codec.cjs.map +1 -1
- package/dist/kalada-v1/codec.d.cts +5 -0
- package/dist/kalada-v1/codec.d.ts +5 -0
- package/dist/kalada-v1/codec.js +24 -0
- package/dist/kalada-v1/codec.js.map +1 -1
- package/dist/kalada-v1/compile.cjs +24 -1
- package/dist/kalada-v1/compile.cjs.map +1 -1
- package/dist/kalada-v1/compile.d.cts +1 -0
- package/dist/kalada-v1/compile.d.ts +1 -0
- package/dist/kalada-v1/compile.js +25 -2
- package/dist/kalada-v1/compile.js.map +1 -1
- package/dist/kalada-v1/dependencies.cjs +55 -2
- package/dist/kalada-v1/dependencies.cjs.map +1 -1
- package/dist/kalada-v1/dependencies.d.cts +1 -0
- package/dist/kalada-v1/dependencies.d.ts +1 -0
- package/dist/kalada-v1/dependencies.js +55 -2
- package/dist/kalada-v1/dependencies.js.map +1 -1
- package/dist/kalada-v1/diagnostics.cjs +29 -4
- package/dist/kalada-v1/diagnostics.cjs.map +1 -1
- package/dist/kalada-v1/diagnostics.d.cts +5 -3
- package/dist/kalada-v1/diagnostics.d.ts +5 -3
- package/dist/kalada-v1/diagnostics.js +29 -4
- package/dist/kalada-v1/diagnostics.js.map +1 -1
- package/dist/kalada-v1/evaluate.cjs +23 -117
- package/dist/kalada-v1/evaluate.cjs.map +1 -1
- package/dist/kalada-v1/evaluate.d.cts +4 -2
- package/dist/kalada-v1/evaluate.d.ts +4 -2
- package/dist/kalada-v1/evaluate.js +24 -118
- package/dist/kalada-v1/evaluate.js.map +1 -1
- package/dist/kalada-v1/evaluation-delivery.cjs +286 -0
- package/dist/kalada-v1/evaluation-delivery.cjs.map +1 -0
- package/dist/kalada-v1/evaluation-delivery.d.cts +13 -0
- package/dist/kalada-v1/evaluation-delivery.d.ts +13 -0
- package/dist/kalada-v1/evaluation-delivery.js +284 -0
- package/dist/kalada-v1/evaluation-delivery.js.map +1 -0
- package/dist/kalada-v1/evaluation-frames.cjs +16 -0
- package/dist/kalada-v1/evaluation-frames.cjs.map +1 -0
- package/dist/kalada-v1/evaluation-frames.d.cts +83 -0
- package/dist/kalada-v1/evaluation-frames.d.ts +83 -0
- package/dist/kalada-v1/evaluation-frames.js +14 -0
- package/dist/kalada-v1/evaluation-frames.js.map +1 -0
- package/dist/kalada-v1/evaluation-machine.cjs +226 -0
- package/dist/kalada-v1/evaluation-machine.cjs.map +1 -0
- package/dist/kalada-v1/evaluation-machine.d.cts +9 -0
- package/dist/kalada-v1/evaluation-machine.d.ts +9 -0
- package/dist/kalada-v1/evaluation-machine.js +224 -0
- package/dist/kalada-v1/evaluation-machine.js.map +1 -0
- package/dist/kalada-v1/evaluation-resolution.cjs +80 -0
- package/dist/kalada-v1/evaluation-resolution.cjs.map +1 -0
- package/dist/kalada-v1/evaluation-resolution.d.cts +11 -0
- package/dist/kalada-v1/evaluation-resolution.d.ts +11 -0
- package/dist/kalada-v1/evaluation-resolution.js +78 -0
- package/dist/kalada-v1/evaluation-resolution.js.map +1 -0
- package/dist/kalada-v1/evaluation-state.cjs +94 -0
- package/dist/kalada-v1/evaluation-state.cjs.map +1 -0
- package/dist/kalada-v1/evaluation-state.d.cts +38 -0
- package/dist/kalada-v1/evaluation-state.d.ts +38 -0
- package/dist/kalada-v1/evaluation-state.js +81 -0
- package/dist/kalada-v1/evaluation-state.js.map +1 -0
- package/dist/kalada-v1/factories.cjs +46 -0
- package/dist/kalada-v1/factories.cjs.map +1 -1
- package/dist/kalada-v1/factories.d.cts +24 -1
- package/dist/kalada-v1/factories.d.ts +24 -1
- package/dist/kalada-v1/factories.js +46 -0
- package/dist/kalada-v1/factories.js.map +1 -1
- package/dist/kalada-v1/function-contracts.cjs +150 -0
- package/dist/kalada-v1/function-contracts.cjs.map +1 -0
- package/dist/kalada-v1/function-contracts.d.cts +15 -0
- package/dist/kalada-v1/function-contracts.d.ts +15 -0
- package/dist/kalada-v1/function-contracts.js +144 -0
- package/dist/kalada-v1/function-contracts.js.map +1 -0
- package/dist/kalada-v1/index.cjs +30 -0
- package/dist/kalada-v1/index.d.cts +5 -3
- package/dist/kalada-v1/index.d.ts +5 -3
- package/dist/kalada-v1/index.js +4 -2
- package/dist/kalada-v1/limits.cjs +23 -2
- package/dist/kalada-v1/limits.cjs.map +1 -1
- package/dist/kalada-v1/limits.d.cts +6 -3
- package/dist/kalada-v1/limits.d.ts +6 -3
- package/dist/kalada-v1/limits.js +23 -3
- package/dist/kalada-v1/limits.js.map +1 -1
- package/dist/kalada-v1/runtime-values.cjs +112 -0
- package/dist/kalada-v1/runtime-values.cjs.map +1 -0
- package/dist/kalada-v1/runtime-values.d.cts +35 -0
- package/dist/kalada-v1/runtime-values.d.ts +35 -0
- package/dist/kalada-v1/runtime-values.js +105 -0
- package/dist/kalada-v1/runtime-values.js.map +1 -0
- package/dist/kalada-v1/schemas.cjs +136 -3
- package/dist/kalada-v1/schemas.cjs.map +1 -1
- package/dist/kalada-v1/schemas.d.cts +2 -1
- package/dist/kalada-v1/schemas.d.ts +2 -1
- package/dist/kalada-v1/schemas.js +137 -5
- package/dist/kalada-v1/schemas.js.map +1 -1
- package/dist/kalada-v1/static-analysis.cjs +177 -0
- package/dist/kalada-v1/static-analysis.cjs.map +1 -0
- package/dist/kalada-v1/static-analysis.d.cts +9 -0
- package/dist/kalada-v1/static-analysis.d.ts +9 -0
- package/dist/kalada-v1/static-analysis.js +175 -0
- package/dist/kalada-v1/static-analysis.js.map +1 -0
- package/dist/kalada-v1/static-types.cjs +229 -0
- package/dist/kalada-v1/static-types.cjs.map +1 -0
- package/dist/kalada-v1/static-types.d.cts +8 -0
- package/dist/kalada-v1/static-types.d.ts +8 -0
- package/dist/kalada-v1/static-types.js +227 -0
- package/dist/kalada-v1/static-types.js.map +1 -0
- package/dist/kalada-v1/temporal-evaluation.cjs +95 -0
- package/dist/kalada-v1/temporal-evaluation.cjs.map +1 -0
- package/dist/kalada-v1/temporal-evaluation.d.cts +18 -0
- package/dist/kalada-v1/temporal-evaluation.d.ts +18 -0
- package/dist/kalada-v1/temporal-evaluation.js +90 -0
- package/dist/kalada-v1/temporal-evaluation.js.map +1 -0
- package/dist/kalada-v1/temporal.cjs +42 -0
- package/dist/kalada-v1/temporal.cjs.map +1 -0
- package/dist/kalada-v1/temporal.d.cts +22 -0
- package/dist/kalada-v1/temporal.d.ts +22 -0
- package/dist/kalada-v1/temporal.js +37 -0
- package/dist/kalada-v1/temporal.js.map +1 -0
- package/dist/kalada-v1/types.d.cts +108 -5
- package/dist/kalada-v1/types.d.ts +108 -5
- package/dist/kalada-v1/values.cjs +13 -1
- package/dist/kalada-v1/values.cjs.map +1 -1
- package/dist/kalada-v1/values.d.cts +2 -1
- package/dist/kalada-v1/values.d.ts +2 -1
- package/dist/kalada-v1/values.js +13 -1
- package/dist/kalada-v1/values.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var callbackPromise_js = require('../kuery-v1/callback-promise.js');
|
|
3
4
|
var canonicalize_js = require('./canonicalize.js');
|
|
4
5
|
var dependencies_js = require('./dependencies.js');
|
|
5
6
|
var diagnostics_js = require('./diagnostics.js');
|
|
6
7
|
var evaluate_js = require('./evaluate.js');
|
|
7
8
|
var limits_js = require('./limits.js');
|
|
9
|
+
var staticAnalysis_js = require('./static-analysis.js');
|
|
10
|
+
var temporal_js = require('./temporal.js');
|
|
8
11
|
|
|
9
12
|
function compileKaladaV1Program(input, options = {}) {
|
|
10
13
|
const canonical = canonicalize_js.canonicalizeKaladaV1Program(input, options);
|
|
@@ -16,15 +19,35 @@ function compileKaladaV1Program(input, options = {}) {
|
|
|
16
19
|
return diagnostics_js.failure("KALADA_LIMIT_EXCEEDED", []);
|
|
17
20
|
}
|
|
18
21
|
const program = canonical.value;
|
|
22
|
+
let functions;
|
|
23
|
+
try {
|
|
24
|
+
functions = staticAnalysis_js.analyzeKaladaV1Functions(program.expression, limits);
|
|
25
|
+
} catch (error) {
|
|
26
|
+
const problem = error instanceof diagnostics_js.KaladaFailure ? error : new diagnostics_js.KaladaFailure("KALADA_INVALID_INPUT", []);
|
|
27
|
+
return diagnostics_js.failure(problem.code, problem.path);
|
|
28
|
+
}
|
|
19
29
|
const dependencies = dependencies_js.collectKaladaV1Dependencies(program.expression);
|
|
20
30
|
return diagnostics_js.success(
|
|
21
31
|
Object.freeze({
|
|
22
32
|
program,
|
|
23
33
|
dependencies,
|
|
24
|
-
|
|
34
|
+
functions,
|
|
35
|
+
evaluate: (resolve, inputs) => evaluate_js.evaluateKaladaV1(program.expression, resolve, limits, functions, inputs),
|
|
36
|
+
evaluateWithClock: (resolve, clock) => evaluateWithClock(program.expression, resolve, limits, functions, clock)
|
|
25
37
|
})
|
|
26
38
|
);
|
|
27
39
|
}
|
|
40
|
+
function evaluateWithClock(expression, resolve, limits, functions, clock) {
|
|
41
|
+
let sample;
|
|
42
|
+
try {
|
|
43
|
+
sample = clock();
|
|
44
|
+
} catch {
|
|
45
|
+
return diagnostics_js.failure("KALADA_CLOCK_ERROR", ["clock"]);
|
|
46
|
+
}
|
|
47
|
+
if (callbackPromise_js.rejectCallbackPromise(sample)) return diagnostics_js.failure("KALADA_ASYNC_UNSUPPORTED", ["clock"]);
|
|
48
|
+
if (!temporal_js.isInstant(sample)) return diagnostics_js.failure("KALADA_INVALID_CLOCK", ["clock"]);
|
|
49
|
+
return evaluate_js.evaluateKaladaV1(expression, resolve, limits, functions, { instant: sample });
|
|
50
|
+
}
|
|
28
51
|
|
|
29
52
|
exports.compileKaladaV1Program = compileKaladaV1Program;
|
|
30
53
|
//# sourceMappingURL=compile.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/kalada-v1/compile.ts"],"names":["canonicalizeKaladaV1Program","resolveLimits","failure","collectKaladaV1Dependencies","success","evaluateKaladaV1"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/kalada-v1/compile.ts"],"names":["canonicalizeKaladaV1Program","resolveLimits","failure","analyzeKaladaV1Functions","KaladaFailure","collectKaladaV1Dependencies","success","evaluateKaladaV1","rejectCallbackPromise","isInstant"],"mappings":";;;;;;;;;;;AAmBO,SAAS,sBAAA,CACd,KAAA,EACA,OAAA,GAA8B,EAAC,EACc;AAC7C,EAAA,MAAM,SAAA,GAAYA,2CAAA,CAA+B,KAAA,EAAO,OAAO,CAAA;AAC/D,EAAA,IAAI,CAAC,SAAA,CAAU,EAAA,EAAI,OAAO,SAAA;AAC1B,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAASC,uBAAA,CAAc,QAAQ,MAAM,CAAA;AAAA,EACvC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAOC,sBAAA,CAAQ,uBAAA,EAAyB,EAAE,CAAA;AAAA,EAC5C;AACA,EAAA,MAAM,UAAU,SAAA,CAAU,KAAA;AAC1B,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI;AACF,IAAA,SAAA,GAAYC,0CAAA,CAAyB,OAAA,CAAQ,UAAA,EAAY,MAAM,CAAA;AAAA,EACjE,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,OAAA,GACJ,iBAAiBC,4BAAA,GAAgB,KAAA,GAAQ,IAAIA,4BAAA,CAAc,sBAAA,EAAwB,EAAE,CAAA;AACvF,IAAA,OAAOF,sBAAA,CAAQ,OAAA,CAAQ,IAAA,EAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,EAC3C;AACA,EAAA,MAAM,YAAA,GAAeG,2CAAA,CAA4B,OAAA,CAAQ,UAAU,CAAA;AACnE,EAAA,OAAOC,sBAAA;AAAA,IACL,OAAO,MAAA,CAAO;AAAA,MACZ,OAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA,EAAU,CAAC,OAAA,EAA8B,MAAA,KACvCC,4BAAA,CAAiB,QAAQ,UAAA,EAAY,OAAA,EAAS,MAAA,EAAQ,SAAA,EAAW,MAAM,CAAA;AAAA,MACzE,iBAAA,EAAmB,CAAC,OAAA,EAA8B,KAAA,KAChD,iBAAA,CAAkB,QAAQ,UAAA,EAAY,OAAA,EAAS,MAAA,EAAQ,SAAA,EAAW,KAAK;AAAA,KAC1E;AAAA,GACH;AACF;AAEA,SAAS,iBAAA,CACP,UAAA,EACA,OAAA,EACA,MAAA,EACA,WACA,KAAA,EACwC;AACxC,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,KAAA,EAAM;AAAA,EACjB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAOL,sBAAA,CAAQ,oBAAA,EAAsB,CAAC,OAAO,CAAC,CAAA;AAAA,EAChD;AACA,EAAA,IAAIM,wCAAA,CAAsB,MAAM,CAAA,EAAG,OAAON,uBAAQ,0BAAA,EAA4B,CAAC,OAAO,CAAC,CAAA;AACvF,EAAA,IAAI,CAACO,sBAAU,MAAM,CAAA,SAAUP,sBAAA,CAAQ,sBAAA,EAAwB,CAAC,OAAO,CAAC,CAAA;AACxE,EAAA,OAAOK,4BAAA,CAAiB,YAAY,OAAA,EAAS,MAAA,EAAQ,WAAW,EAAE,OAAA,EAAS,QAAQ,CAAA;AACrF","file":"compile.cjs","sourcesContent":["import { rejectCallbackPromise } from \"../kuery-v1/callback-promise.js\";\nimport { canonicalizeKaladaV1Program } from \"./canonicalize.js\";\nimport { collectKaladaV1Dependencies } from \"./dependencies.js\";\nimport { failure, KaladaFailure, success } from \"./diagnostics.js\";\nimport { evaluateKaladaV1 } from \"./evaluate.js\";\nimport type { JsonValue } from \"./json.js\";\nimport { type ResolvedKaladaV1Limits, resolveLimits } from \"./limits.js\";\nimport { analyzeKaladaV1Functions } from \"./static-analysis.js\";\nimport { isInstant } from \"./temporal.js\";\nimport type {\n CompiledKaladaV1Program,\n KaladaV1Clock,\n KaladaV1EvaluationInputs,\n KaladaV1FunctionCapture,\n KaladaV1Options,\n KaladaV1Outcome,\n KaladaV1Resolver,\n} from \"./types.js\";\n\nexport function compileKaladaV1Program<R extends JsonValue = string>(\n input: unknown,\n options: KaladaV1Options<R> = {},\n): KaladaV1Outcome<CompiledKaladaV1Program<R>> {\n const canonical = canonicalizeKaladaV1Program<R>(input, options);\n if (!canonical.ok) return canonical;\n let limits: ResolvedKaladaV1Limits;\n try {\n limits = resolveLimits(options.limits);\n } catch {\n return failure(\"KALADA_LIMIT_EXCEEDED\", []);\n }\n const program = canonical.value;\n let functions: readonly KaladaV1FunctionCapture[];\n try {\n functions = analyzeKaladaV1Functions(program.expression, limits);\n } catch (error) {\n const problem =\n error instanceof KaladaFailure ? error : new KaladaFailure(\"KALADA_INVALID_INPUT\", []);\n return failure(problem.code, problem.path);\n }\n const dependencies = collectKaladaV1Dependencies(program.expression);\n return success(\n Object.freeze({\n program,\n dependencies,\n functions,\n evaluate: (resolve: KaladaV1Resolver<R>, inputs?: KaladaV1EvaluationInputs) =>\n evaluateKaladaV1(program.expression, resolve, limits, functions, inputs),\n evaluateWithClock: (resolve: KaladaV1Resolver<R>, clock: KaladaV1Clock) =>\n evaluateWithClock(program.expression, resolve, limits, functions, clock),\n }),\n );\n}\n\nfunction evaluateWithClock<R extends JsonValue>(\n expression: Parameters<typeof evaluateKaladaV1<R>>[0],\n resolve: KaladaV1Resolver<R>,\n limits: ResolvedKaladaV1Limits,\n functions: readonly KaladaV1FunctionCapture[],\n clock: KaladaV1Clock,\n): ReturnType<typeof evaluateKaladaV1<R>> {\n let sample: unknown;\n try {\n sample = clock();\n } catch {\n return failure(\"KALADA_CLOCK_ERROR\", [\"clock\"]);\n }\n if (rejectCallbackPromise(sample)) return failure(\"KALADA_ASYNC_UNSUPPORTED\", [\"clock\"]);\n if (!isInstant(sample)) return failure(\"KALADA_INVALID_CLOCK\", [\"clock\"]);\n return evaluateKaladaV1(expression, resolve, limits, functions, { instant: sample });\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { JsonValue } from './json.cjs';
|
|
2
2
|
import { KaladaV1Options, KaladaV1Outcome, CompiledKaladaV1Program } from './types.cjs';
|
|
3
|
+
import './temporal.cjs';
|
|
3
4
|
import './values.cjs';
|
|
4
5
|
|
|
5
6
|
declare function compileKaladaV1Program<R extends JsonValue = string>(input: unknown, options?: KaladaV1Options<R>): KaladaV1Outcome<CompiledKaladaV1Program<R>>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { JsonValue } from './json.js';
|
|
2
2
|
import { KaladaV1Options, KaladaV1Outcome, CompiledKaladaV1Program } from './types.js';
|
|
3
|
+
import './temporal.js';
|
|
3
4
|
import './values.js';
|
|
4
5
|
|
|
5
6
|
declare function compileKaladaV1Program<R extends JsonValue = string>(input: unknown, options?: KaladaV1Options<R>): KaladaV1Outcome<CompiledKaladaV1Program<R>>;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { rejectCallbackPromise } from '../kuery-v1/callback-promise.js';
|
|
1
2
|
import { canonicalizeKaladaV1Program } from './canonicalize.js';
|
|
2
3
|
import { collectKaladaV1Dependencies } from './dependencies.js';
|
|
3
|
-
import { failure, success } from './diagnostics.js';
|
|
4
|
+
import { failure, KaladaFailure, success } from './diagnostics.js';
|
|
4
5
|
import { evaluateKaladaV1 } from './evaluate.js';
|
|
5
6
|
import { resolveLimits } from './limits.js';
|
|
7
|
+
import { analyzeKaladaV1Functions } from './static-analysis.js';
|
|
8
|
+
import { isInstant } from './temporal.js';
|
|
6
9
|
|
|
7
10
|
function compileKaladaV1Program(input, options = {}) {
|
|
8
11
|
const canonical = canonicalizeKaladaV1Program(input, options);
|
|
@@ -14,15 +17,35 @@ function compileKaladaV1Program(input, options = {}) {
|
|
|
14
17
|
return failure("KALADA_LIMIT_EXCEEDED", []);
|
|
15
18
|
}
|
|
16
19
|
const program = canonical.value;
|
|
20
|
+
let functions;
|
|
21
|
+
try {
|
|
22
|
+
functions = analyzeKaladaV1Functions(program.expression, limits);
|
|
23
|
+
} catch (error) {
|
|
24
|
+
const problem = error instanceof KaladaFailure ? error : new KaladaFailure("KALADA_INVALID_INPUT", []);
|
|
25
|
+
return failure(problem.code, problem.path);
|
|
26
|
+
}
|
|
17
27
|
const dependencies = collectKaladaV1Dependencies(program.expression);
|
|
18
28
|
return success(
|
|
19
29
|
Object.freeze({
|
|
20
30
|
program,
|
|
21
31
|
dependencies,
|
|
22
|
-
|
|
32
|
+
functions,
|
|
33
|
+
evaluate: (resolve, inputs) => evaluateKaladaV1(program.expression, resolve, limits, functions, inputs),
|
|
34
|
+
evaluateWithClock: (resolve, clock) => evaluateWithClock(program.expression, resolve, limits, functions, clock)
|
|
23
35
|
})
|
|
24
36
|
);
|
|
25
37
|
}
|
|
38
|
+
function evaluateWithClock(expression, resolve, limits, functions, clock) {
|
|
39
|
+
let sample;
|
|
40
|
+
try {
|
|
41
|
+
sample = clock();
|
|
42
|
+
} catch {
|
|
43
|
+
return failure("KALADA_CLOCK_ERROR", ["clock"]);
|
|
44
|
+
}
|
|
45
|
+
if (rejectCallbackPromise(sample)) return failure("KALADA_ASYNC_UNSUPPORTED", ["clock"]);
|
|
46
|
+
if (!isInstant(sample)) return failure("KALADA_INVALID_CLOCK", ["clock"]);
|
|
47
|
+
return evaluateKaladaV1(expression, resolve, limits, functions, { instant: sample });
|
|
48
|
+
}
|
|
26
49
|
|
|
27
50
|
export { compileKaladaV1Program };
|
|
28
51
|
//# sourceMappingURL=compile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/kalada-v1/compile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/kalada-v1/compile.ts"],"names":[],"mappings":";;;;;;;;;AAmBO,SAAS,sBAAA,CACd,KAAA,EACA,OAAA,GAA8B,EAAC,EACc;AAC7C,EAAA,MAAM,SAAA,GAAY,2BAAA,CAA+B,KAAA,EAAO,OAAO,CAAA;AAC/D,EAAA,IAAI,CAAC,SAAA,CAAU,EAAA,EAAI,OAAO,SAAA;AAC1B,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,aAAA,CAAc,QAAQ,MAAM,CAAA;AAAA,EACvC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAA,CAAQ,uBAAA,EAAyB,EAAE,CAAA;AAAA,EAC5C;AACA,EAAA,MAAM,UAAU,SAAA,CAAU,KAAA;AAC1B,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI;AACF,IAAA,SAAA,GAAY,wBAAA,CAAyB,OAAA,CAAQ,UAAA,EAAY,MAAM,CAAA;AAAA,EACjE,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,OAAA,GACJ,iBAAiB,aAAA,GAAgB,KAAA,GAAQ,IAAI,aAAA,CAAc,sBAAA,EAAwB,EAAE,CAAA;AACvF,IAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,EAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,EAC3C;AACA,EAAA,MAAM,YAAA,GAAe,2BAAA,CAA4B,OAAA,CAAQ,UAAU,CAAA;AACnE,EAAA,OAAO,OAAA;AAAA,IACL,OAAO,MAAA,CAAO;AAAA,MACZ,OAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA,EAAU,CAAC,OAAA,EAA8B,MAAA,KACvC,gBAAA,CAAiB,QAAQ,UAAA,EAAY,OAAA,EAAS,MAAA,EAAQ,SAAA,EAAW,MAAM,CAAA;AAAA,MACzE,iBAAA,EAAmB,CAAC,OAAA,EAA8B,KAAA,KAChD,iBAAA,CAAkB,QAAQ,UAAA,EAAY,OAAA,EAAS,MAAA,EAAQ,SAAA,EAAW,KAAK;AAAA,KAC1E;AAAA,GACH;AACF;AAEA,SAAS,iBAAA,CACP,UAAA,EACA,OAAA,EACA,MAAA,EACA,WACA,KAAA,EACwC;AACxC,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,KAAA,EAAM;AAAA,EACjB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAA,CAAQ,oBAAA,EAAsB,CAAC,OAAO,CAAC,CAAA;AAAA,EAChD;AACA,EAAA,IAAI,qBAAA,CAAsB,MAAM,CAAA,EAAG,OAAO,QAAQ,0BAAA,EAA4B,CAAC,OAAO,CAAC,CAAA;AACvF,EAAA,IAAI,CAAC,UAAU,MAAM,CAAA,SAAU,OAAA,CAAQ,sBAAA,EAAwB,CAAC,OAAO,CAAC,CAAA;AACxE,EAAA,OAAO,gBAAA,CAAiB,YAAY,OAAA,EAAS,MAAA,EAAQ,WAAW,EAAE,OAAA,EAAS,QAAQ,CAAA;AACrF","file":"compile.js","sourcesContent":["import { rejectCallbackPromise } from \"../kuery-v1/callback-promise.js\";\nimport { canonicalizeKaladaV1Program } from \"./canonicalize.js\";\nimport { collectKaladaV1Dependencies } from \"./dependencies.js\";\nimport { failure, KaladaFailure, success } from \"./diagnostics.js\";\nimport { evaluateKaladaV1 } from \"./evaluate.js\";\nimport type { JsonValue } from \"./json.js\";\nimport { type ResolvedKaladaV1Limits, resolveLimits } from \"./limits.js\";\nimport { analyzeKaladaV1Functions } from \"./static-analysis.js\";\nimport { isInstant } from \"./temporal.js\";\nimport type {\n CompiledKaladaV1Program,\n KaladaV1Clock,\n KaladaV1EvaluationInputs,\n KaladaV1FunctionCapture,\n KaladaV1Options,\n KaladaV1Outcome,\n KaladaV1Resolver,\n} from \"./types.js\";\n\nexport function compileKaladaV1Program<R extends JsonValue = string>(\n input: unknown,\n options: KaladaV1Options<R> = {},\n): KaladaV1Outcome<CompiledKaladaV1Program<R>> {\n const canonical = canonicalizeKaladaV1Program<R>(input, options);\n if (!canonical.ok) return canonical;\n let limits: ResolvedKaladaV1Limits;\n try {\n limits = resolveLimits(options.limits);\n } catch {\n return failure(\"KALADA_LIMIT_EXCEEDED\", []);\n }\n const program = canonical.value;\n let functions: readonly KaladaV1FunctionCapture[];\n try {\n functions = analyzeKaladaV1Functions(program.expression, limits);\n } catch (error) {\n const problem =\n error instanceof KaladaFailure ? error : new KaladaFailure(\"KALADA_INVALID_INPUT\", []);\n return failure(problem.code, problem.path);\n }\n const dependencies = collectKaladaV1Dependencies(program.expression);\n return success(\n Object.freeze({\n program,\n dependencies,\n functions,\n evaluate: (resolve: KaladaV1Resolver<R>, inputs?: KaladaV1EvaluationInputs) =>\n evaluateKaladaV1(program.expression, resolve, limits, functions, inputs),\n evaluateWithClock: (resolve: KaladaV1Resolver<R>, clock: KaladaV1Clock) =>\n evaluateWithClock(program.expression, resolve, limits, functions, clock),\n }),\n );\n}\n\nfunction evaluateWithClock<R extends JsonValue>(\n expression: Parameters<typeof evaluateKaladaV1<R>>[0],\n resolve: KaladaV1Resolver<R>,\n limits: ResolvedKaladaV1Limits,\n functions: readonly KaladaV1FunctionCapture[],\n clock: KaladaV1Clock,\n): ReturnType<typeof evaluateKaladaV1<R>> {\n let sample: unknown;\n try {\n sample = clock();\n } catch {\n return failure(\"KALADA_CLOCK_ERROR\", [\"clock\"]);\n }\n if (rejectCallbackPromise(sample)) return failure(\"KALADA_ASYNC_UNSUPPORTED\", [\"clock\"]);\n if (!isInstant(sample)) return failure(\"KALADA_INVALID_CLOCK\", [\"clock\"]);\n return evaluateKaladaV1(expression, resolve, limits, functions, { instant: sample });\n}\n"]}
|
|
@@ -13,16 +13,64 @@ function visit(node, scope, output, identities) {
|
|
|
13
13
|
addReference(node.ref, scope, output, identities);
|
|
14
14
|
return;
|
|
15
15
|
}
|
|
16
|
-
if (node.kind === "literal" || node.kind === "option" && node.variant === "none")
|
|
16
|
+
if (node.kind === "literal" || node.kind === "instant" || node.kind === "duration" || node.kind === "current-instant" || node.kind === "core-function" || node.kind === "option" && node.variant === "none")
|
|
17
|
+
return;
|
|
17
18
|
if (node.kind === "binding") {
|
|
18
19
|
visitBinding(node, scope, output, identities);
|
|
19
20
|
return;
|
|
20
21
|
}
|
|
22
|
+
if (visitFunctionNode(node, scope, output, identities)) return;
|
|
21
23
|
if (node.kind === "match") {
|
|
22
24
|
visitMatch(node.value, node.arms, scope, output, identities);
|
|
23
25
|
return;
|
|
24
26
|
}
|
|
25
|
-
|
|
27
|
+
if (node.kind === "temporal-arithmetic" || node.kind === "temporal-comparison") {
|
|
28
|
+
visit(node.left, scope, output, identities);
|
|
29
|
+
visit(node.right, scope, output, identities);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (node.kind === "option" || node.kind === "result") {
|
|
33
|
+
visit(node.value, scope, output, identities);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function visitFunctionNode(node, scope, output, identities) {
|
|
37
|
+
if (node.kind === "function") {
|
|
38
|
+
visit(
|
|
39
|
+
node.body,
|
|
40
|
+
extendedMany(
|
|
41
|
+
scope,
|
|
42
|
+
node.parameters.map((parameter) => parameter.name)
|
|
43
|
+
),
|
|
44
|
+
output,
|
|
45
|
+
identities
|
|
46
|
+
);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
if (node.kind === "function-group") {
|
|
50
|
+
const groupScope = extendedMany(
|
|
51
|
+
scope,
|
|
52
|
+
node.functions.map((member) => member.name)
|
|
53
|
+
);
|
|
54
|
+
for (const member of node.functions) {
|
|
55
|
+
visit(
|
|
56
|
+
member.body,
|
|
57
|
+
extendedMany(
|
|
58
|
+
groupScope,
|
|
59
|
+
member.parameters.map((parameter) => parameter.name)
|
|
60
|
+
),
|
|
61
|
+
output,
|
|
62
|
+
identities
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
visit(node.body, groupScope, output, identities);
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
if (node.kind === "call") {
|
|
69
|
+
visit(node.callee, scope, output, identities);
|
|
70
|
+
for (const argument of node.arguments) visit(argument, scope, output, identities);
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
return false;
|
|
26
74
|
}
|
|
27
75
|
function visitBinding(node, scope, output, identities) {
|
|
28
76
|
visit(node.value, scope, output, identities);
|
|
@@ -46,6 +94,11 @@ function extended(scope, name) {
|
|
|
46
94
|
output.add(name);
|
|
47
95
|
return output;
|
|
48
96
|
}
|
|
97
|
+
function extendedMany(scope, names) {
|
|
98
|
+
const output = new Set(scope);
|
|
99
|
+
for (const name of names) output.add(name);
|
|
100
|
+
return output;
|
|
101
|
+
}
|
|
49
102
|
|
|
50
103
|
exports.collectKaladaV1Dependencies = collectKaladaV1Dependencies;
|
|
51
104
|
//# sourceMappingURL=dependencies.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/kalada-v1/dependencies.ts"],"names":["canonicalJsonIdentity"],"mappings":";;;;AAGO,SAAS,4BACd,UAAA,EACc;AACd,EAAA,MAAM,SAAc,EAAC;AACrB,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AACnC,EAAA,KAAA,CAAM,UAAA,kBAAY,IAAI,GAAA,EAAI,EAAG,QAAQ,UAAU,CAAA;AAC/C,EAAA,OAAO,MAAA,CAAO,OAAO,MAAM,CAAA;AAC7B;AAEA,SAAS,KAAA,CACP,IAAA,EACA,KAAA,EACA,MAAA,EACA,UAAA,EACM;AACN,EAAA,IAAI,IAAA,CAAK,SAAS,KAAA,EAAO;AACvB,IAAA,YAAA,CAAa,IAAA,CAAK,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA;AAChD,IAAA;AAAA,EACF;AACA,EAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/kalada-v1/dependencies.ts"],"names":["canonicalJsonIdentity"],"mappings":"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","file":"dependencies.cjs","sourcesContent":["import { canonicalJsonIdentity, type JsonValue } from \"./json.js\";\nimport type { KaladaV1Expression, MatchArm } from \"./types.js\";\n\nexport function collectKaladaV1Dependencies<R extends JsonValue>(\n expression: KaladaV1Expression<R>,\n): readonly R[] {\n const output: R[] = [];\n const identities = new Set<string>();\n visit(expression, new Set(), output, identities);\n return Object.freeze(output);\n}\n\nfunction visit<R extends JsonValue>(\n node: KaladaV1Expression<R>,\n scope: ReadonlySet<string>,\n output: R[],\n identities: Set<string>,\n): void {\n if (node.kind === \"ref\") {\n addReference(node.ref, scope, output, identities);\n return;\n }\n if (\n node.kind === \"literal\" ||\n node.kind === \"instant\" ||\n node.kind === \"duration\" ||\n node.kind === \"current-instant\" ||\n node.kind === \"core-function\" ||\n (node.kind === \"option\" && node.variant === \"none\")\n )\n return;\n if (node.kind === \"binding\") {\n visitBinding(node, scope, output, identities);\n return;\n }\n if (visitFunctionNode(node, scope, output, identities)) return;\n\n if (node.kind === \"match\") {\n visitMatch(node.value, node.arms, scope, output, identities);\n return;\n }\n if (node.kind === \"temporal-arithmetic\" || node.kind === \"temporal-comparison\") {\n visit(node.left, scope, output, identities);\n visit(node.right, scope, output, identities);\n return;\n }\n if (node.kind === \"option\" || node.kind === \"result\") {\n visit(node.value, scope, output, identities);\n }\n}\n\nfunction visitFunctionNode<R extends JsonValue>(\n node: KaladaV1Expression<R>,\n scope: ReadonlySet<string>,\n output: R[],\n identities: Set<string>,\n): boolean {\n if (node.kind === \"function\") {\n visit(\n node.body,\n extendedMany(\n scope,\n node.parameters.map((parameter) => parameter.name),\n ),\n output,\n identities,\n );\n return true;\n }\n if (node.kind === \"function-group\") {\n const groupScope = extendedMany(\n scope,\n node.functions.map((member) => member.name),\n );\n for (const member of node.functions) {\n visit(\n member.body,\n extendedMany(\n groupScope,\n member.parameters.map((parameter) => parameter.name),\n ),\n output,\n identities,\n );\n }\n visit(node.body, groupScope, output, identities);\n return true;\n }\n if (node.kind === \"call\") {\n visit(node.callee, scope, output, identities);\n for (const argument of node.arguments) visit(argument, scope, output, identities);\n return true;\n }\n return false;\n}\n\nfunction visitBinding<R extends JsonValue>(\n node: Extract<KaladaV1Expression<R>, { kind: \"binding\" }>,\n scope: ReadonlySet<string>,\n output: R[],\n identities: Set<string>,\n): void {\n visit(node.value, scope, output, identities);\n visit(node.body, extended(scope, node.name), output, identities);\n}\n\nfunction visitMatch<R extends JsonValue>(\n value: KaladaV1Expression<R>,\n arms: readonly MatchArm<R>[],\n scope: ReadonlySet<string>,\n output: R[],\n identities: Set<string>,\n): void {\n visit(value, scope, output, identities);\n for (const arm of arms) {\n visit(arm.body, arm.binding ? extended(scope, arm.binding) : scope, output, identities);\n }\n}\n\nfunction addReference<R extends JsonValue>(\n reference: R,\n scope: ReadonlySet<string>,\n output: R[],\n identities: Set<string>,\n): void {\n if (typeof reference === \"string\" && scope.has(reference)) return;\n const identity = canonicalJsonIdentity(reference);\n if (identities.has(identity)) return;\n identities.add(identity);\n output.push(reference);\n}\n\nfunction extended(scope: ReadonlySet<string>, name: string): ReadonlySet<string> {\n const output = new Set(scope);\n output.add(name);\n return output;\n}\n\nfunction extendedMany(scope: ReadonlySet<string>, names: readonly string[]): ReadonlySet<string> {\n const output = new Set(scope);\n for (const name of names) output.add(name);\n return output;\n}\n"]}
|
|
@@ -11,16 +11,64 @@ function visit(node, scope, output, identities) {
|
|
|
11
11
|
addReference(node.ref, scope, output, identities);
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
|
-
if (node.kind === "literal" || node.kind === "option" && node.variant === "none")
|
|
14
|
+
if (node.kind === "literal" || node.kind === "instant" || node.kind === "duration" || node.kind === "current-instant" || node.kind === "core-function" || node.kind === "option" && node.variant === "none")
|
|
15
|
+
return;
|
|
15
16
|
if (node.kind === "binding") {
|
|
16
17
|
visitBinding(node, scope, output, identities);
|
|
17
18
|
return;
|
|
18
19
|
}
|
|
20
|
+
if (visitFunctionNode(node, scope, output, identities)) return;
|
|
19
21
|
if (node.kind === "match") {
|
|
20
22
|
visitMatch(node.value, node.arms, scope, output, identities);
|
|
21
23
|
return;
|
|
22
24
|
}
|
|
23
|
-
|
|
25
|
+
if (node.kind === "temporal-arithmetic" || node.kind === "temporal-comparison") {
|
|
26
|
+
visit(node.left, scope, output, identities);
|
|
27
|
+
visit(node.right, scope, output, identities);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (node.kind === "option" || node.kind === "result") {
|
|
31
|
+
visit(node.value, scope, output, identities);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function visitFunctionNode(node, scope, output, identities) {
|
|
35
|
+
if (node.kind === "function") {
|
|
36
|
+
visit(
|
|
37
|
+
node.body,
|
|
38
|
+
extendedMany(
|
|
39
|
+
scope,
|
|
40
|
+
node.parameters.map((parameter) => parameter.name)
|
|
41
|
+
),
|
|
42
|
+
output,
|
|
43
|
+
identities
|
|
44
|
+
);
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
if (node.kind === "function-group") {
|
|
48
|
+
const groupScope = extendedMany(
|
|
49
|
+
scope,
|
|
50
|
+
node.functions.map((member) => member.name)
|
|
51
|
+
);
|
|
52
|
+
for (const member of node.functions) {
|
|
53
|
+
visit(
|
|
54
|
+
member.body,
|
|
55
|
+
extendedMany(
|
|
56
|
+
groupScope,
|
|
57
|
+
member.parameters.map((parameter) => parameter.name)
|
|
58
|
+
),
|
|
59
|
+
output,
|
|
60
|
+
identities
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
visit(node.body, groupScope, output, identities);
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
if (node.kind === "call") {
|
|
67
|
+
visit(node.callee, scope, output, identities);
|
|
68
|
+
for (const argument of node.arguments) visit(argument, scope, output, identities);
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
24
72
|
}
|
|
25
73
|
function visitBinding(node, scope, output, identities) {
|
|
26
74
|
visit(node.value, scope, output, identities);
|
|
@@ -44,6 +92,11 @@ function extended(scope, name) {
|
|
|
44
92
|
output.add(name);
|
|
45
93
|
return output;
|
|
46
94
|
}
|
|
95
|
+
function extendedMany(scope, names) {
|
|
96
|
+
const output = new Set(scope);
|
|
97
|
+
for (const name of names) output.add(name);
|
|
98
|
+
return output;
|
|
99
|
+
}
|
|
47
100
|
|
|
48
101
|
export { collectKaladaV1Dependencies };
|
|
49
102
|
//# sourceMappingURL=dependencies.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/kalada-v1/dependencies.ts"],"names":[],"mappings":";;AAGO,SAAS,4BACd,UAAA,EACc;AACd,EAAA,MAAM,SAAc,EAAC;AACrB,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AACnC,EAAA,KAAA,CAAM,UAAA,kBAAY,IAAI,GAAA,EAAI,EAAG,QAAQ,UAAU,CAAA;AAC/C,EAAA,OAAO,MAAA,CAAO,OAAO,MAAM,CAAA;AAC7B;AAEA,SAAS,KAAA,CACP,IAAA,EACA,KAAA,EACA,MAAA,EACA,UAAA,EACM;AACN,EAAA,IAAI,IAAA,CAAK,SAAS,KAAA,EAAO;AACvB,IAAA,YAAA,CAAa,IAAA,CAAK,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA;AAChD,IAAA;AAAA,EACF;AACA,EAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/kalada-v1/dependencies.ts"],"names":[],"mappings":";;AAGO,SAAS,4BACd,UAAA,EACc;AACd,EAAA,MAAM,SAAc,EAAC;AACrB,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AACnC,EAAA,KAAA,CAAM,UAAA,kBAAY,IAAI,GAAA,EAAI,EAAG,QAAQ,UAAU,CAAA;AAC/C,EAAA,OAAO,MAAA,CAAO,OAAO,MAAM,CAAA;AAC7B;AAEA,SAAS,KAAA,CACP,IAAA,EACA,KAAA,EACA,MAAA,EACA,UAAA,EACM;AACN,EAAA,IAAI,IAAA,CAAK,SAAS,KAAA,EAAO;AACvB,IAAA,YAAA,CAAa,IAAA,CAAK,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA;AAChD,IAAA;AAAA,EACF;AACA,EAAA,IACE,KAAK,IAAA,KAAS,SAAA,IACd,KAAK,IAAA,KAAS,SAAA,IACd,KAAK,IAAA,KAAS,UAAA,IACd,KAAK,IAAA,KAAS,iBAAA,IACd,KAAK,IAAA,KAAS,eAAA,IACb,KAAK,IAAA,KAAS,QAAA,IAAY,KAAK,OAAA,KAAY,MAAA;AAE5C,IAAA;AACF,EAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC3B,IAAA,YAAA,CAAa,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA;AAC5C,IAAA;AAAA,EACF;AACA,EAAA,IAAI,iBAAA,CAAkB,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA,EAAG;AAExD,EAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,IAAA,UAAA,CAAW,KAAK,KAAA,EAAO,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,QAAQ,UAAU,CAAA;AAC3D,IAAA;AAAA,EACF;AACA,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,qBAAA,IAAyB,IAAA,CAAK,SAAS,qBAAA,EAAuB;AAC9E,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA;AAC1C,IAAA,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA;AAC3C,IAAA;AAAA,EACF;AACA,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,SAAS,QAAA,EAAU;AACpD,IAAA,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA;AAAA,EAC7C;AACF;AAEA,SAAS,iBAAA,CACP,IAAA,EACA,KAAA,EACA,MAAA,EACA,UAAA,EACS;AACT,EAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,IAAA,KAAA;AAAA,MACE,IAAA,CAAK,IAAA;AAAA,MACL,YAAA;AAAA,QACE,KAAA;AAAA,QACA,KAAK,UAAA,CAAW,GAAA,CAAI,CAAC,SAAA,KAAc,UAAU,IAAI;AAAA,OACnD;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,gBAAA,EAAkB;AAClC,IAAA,MAAM,UAAA,GAAa,YAAA;AAAA,MACjB,KAAA;AAAA,MACA,KAAK,SAAA,CAAU,GAAA,CAAI,CAAC,MAAA,KAAW,OAAO,IAAI;AAAA,KAC5C;AACA,IAAA,KAAA,MAAW,MAAA,IAAU,KAAK,SAAA,EAAW;AACnC,MAAA,KAAA;AAAA,QACE,MAAA,CAAO,IAAA;AAAA,QACP,YAAA;AAAA,UACE,UAAA;AAAA,UACA,OAAO,UAAA,CAAW,GAAA,CAAI,CAAC,SAAA,KAAc,UAAU,IAAI;AAAA,SACrD;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,EAAM,UAAA,EAAY,MAAA,EAAQ,UAAU,CAAA;AAC/C,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,IAAA,KAAA,CAAM,IAAA,CAAK,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA;AAC5C,IAAA,KAAA,MAAW,YAAY,IAAA,CAAK,SAAA,QAAiB,QAAA,EAAU,KAAA,EAAO,QAAQ,UAAU,CAAA;AAChF,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,YAAA,CACP,IAAA,EACA,KAAA,EACA,MAAA,EACA,UAAA,EACM;AACN,EAAA,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA;AAC3C,EAAA,KAAA,CAAM,IAAA,CAAK,MAAM,QAAA,CAAS,KAAA,EAAO,KAAK,IAAI,CAAA,EAAG,QAAQ,UAAU,CAAA;AACjE;AAEA,SAAS,UAAA,CACP,KAAA,EACA,IAAA,EACA,KAAA,EACA,QACA,UAAA,EACM;AACN,EAAA,KAAA,CAAM,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA;AACtC,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,KAAA,CAAM,GAAA,CAAI,IAAA,EAAM,GAAA,CAAI,OAAA,GAAU,QAAA,CAAS,KAAA,EAAO,GAAA,CAAI,OAAO,CAAA,GAAI,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA;AAAA,EACxF;AACF;AAEA,SAAS,YAAA,CACP,SAAA,EACA,KAAA,EACA,MAAA,EACA,UAAA,EACM;AACN,EAAA,IAAI,OAAO,SAAA,KAAc,QAAA,IAAY,KAAA,CAAM,GAAA,CAAI,SAAS,CAAA,EAAG;AAC3D,EAAA,MAAM,QAAA,GAAW,sBAAsB,SAAS,CAAA;AAChD,EAAA,IAAI,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC9B,EAAA,UAAA,CAAW,IAAI,QAAQ,CAAA;AACvB,EAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AACvB;AAEA,SAAS,QAAA,CAAS,OAA4B,IAAA,EAAmC;AAC/E,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,KAAK,CAAA;AAC5B,EAAA,MAAA,CAAO,IAAI,IAAI,CAAA;AACf,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,YAAA,CAAa,OAA4B,KAAA,EAA+C;AAC/F,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,KAAK,CAAA;AAC5B,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AACzC,EAAA,OAAO,MAAA;AACT","file":"dependencies.js","sourcesContent":["import { canonicalJsonIdentity, type JsonValue } from \"./json.js\";\nimport type { KaladaV1Expression, MatchArm } from \"./types.js\";\n\nexport function collectKaladaV1Dependencies<R extends JsonValue>(\n expression: KaladaV1Expression<R>,\n): readonly R[] {\n const output: R[] = [];\n const identities = new Set<string>();\n visit(expression, new Set(), output, identities);\n return Object.freeze(output);\n}\n\nfunction visit<R extends JsonValue>(\n node: KaladaV1Expression<R>,\n scope: ReadonlySet<string>,\n output: R[],\n identities: Set<string>,\n): void {\n if (node.kind === \"ref\") {\n addReference(node.ref, scope, output, identities);\n return;\n }\n if (\n node.kind === \"literal\" ||\n node.kind === \"instant\" ||\n node.kind === \"duration\" ||\n node.kind === \"current-instant\" ||\n node.kind === \"core-function\" ||\n (node.kind === \"option\" && node.variant === \"none\")\n )\n return;\n if (node.kind === \"binding\") {\n visitBinding(node, scope, output, identities);\n return;\n }\n if (visitFunctionNode(node, scope, output, identities)) return;\n\n if (node.kind === \"match\") {\n visitMatch(node.value, node.arms, scope, output, identities);\n return;\n }\n if (node.kind === \"temporal-arithmetic\" || node.kind === \"temporal-comparison\") {\n visit(node.left, scope, output, identities);\n visit(node.right, scope, output, identities);\n return;\n }\n if (node.kind === \"option\" || node.kind === \"result\") {\n visit(node.value, scope, output, identities);\n }\n}\n\nfunction visitFunctionNode<R extends JsonValue>(\n node: KaladaV1Expression<R>,\n scope: ReadonlySet<string>,\n output: R[],\n identities: Set<string>,\n): boolean {\n if (node.kind === \"function\") {\n visit(\n node.body,\n extendedMany(\n scope,\n node.parameters.map((parameter) => parameter.name),\n ),\n output,\n identities,\n );\n return true;\n }\n if (node.kind === \"function-group\") {\n const groupScope = extendedMany(\n scope,\n node.functions.map((member) => member.name),\n );\n for (const member of node.functions) {\n visit(\n member.body,\n extendedMany(\n groupScope,\n member.parameters.map((parameter) => parameter.name),\n ),\n output,\n identities,\n );\n }\n visit(node.body, groupScope, output, identities);\n return true;\n }\n if (node.kind === \"call\") {\n visit(node.callee, scope, output, identities);\n for (const argument of node.arguments) visit(argument, scope, output, identities);\n return true;\n }\n return false;\n}\n\nfunction visitBinding<R extends JsonValue>(\n node: Extract<KaladaV1Expression<R>, { kind: \"binding\" }>,\n scope: ReadonlySet<string>,\n output: R[],\n identities: Set<string>,\n): void {\n visit(node.value, scope, output, identities);\n visit(node.body, extended(scope, node.name), output, identities);\n}\n\nfunction visitMatch<R extends JsonValue>(\n value: KaladaV1Expression<R>,\n arms: readonly MatchArm<R>[],\n scope: ReadonlySet<string>,\n output: R[],\n identities: Set<string>,\n): void {\n visit(value, scope, output, identities);\n for (const arm of arms) {\n visit(arm.body, arm.binding ? extended(scope, arm.binding) : scope, output, identities);\n }\n}\n\nfunction addReference<R extends JsonValue>(\n reference: R,\n scope: ReadonlySet<string>,\n output: R[],\n identities: Set<string>,\n): void {\n if (typeof reference === \"string\" && scope.has(reference)) return;\n const identity = canonicalJsonIdentity(reference);\n if (identities.has(identity)) return;\n identities.add(identity);\n output.push(reference);\n}\n\nfunction extended(scope: ReadonlySet<string>, name: string): ReadonlySet<string> {\n const output = new Set(scope);\n output.add(name);\n return output;\n}\n\nfunction extendedMany(scope: ReadonlySet<string>, names: readonly string[]): ReadonlySet<string> {\n const output = new Set(scope);\n for (const name of names) output.add(name);\n return output;\n}\n"]}
|
|
@@ -14,25 +14,50 @@ const MESSAGES = Object.freeze({
|
|
|
14
14
|
KALADA_REFERENCE_DENIED: "Kalada reference access was denied.",
|
|
15
15
|
KALADA_ASYNC_UNSUPPORTED: "Kalada callbacks must return synchronously.",
|
|
16
16
|
KALADA_INVALID_RESULT: "Kalada reference callback returned an invalid value.",
|
|
17
|
-
KALADA_EVALUATION_LIMIT: "Kalada evaluation exceeded its configured step limit."
|
|
17
|
+
KALADA_EVALUATION_LIMIT: "Kalada evaluation exceeded its configured step limit.",
|
|
18
|
+
KALADA_INSTANT_REQUIRED: "Kalada evaluation requires an explicit current Instant.",
|
|
19
|
+
KALADA_TEMPORAL_TYPE_MISMATCH: "Kalada temporal operation received incompatible values.",
|
|
20
|
+
KALADA_TEMPORAL_OVERFLOW: "Kalada temporal arithmetic exceeded safe integer milliseconds.",
|
|
21
|
+
KALADA_CLOCK_ERROR: "Kalada clock sampling failed.",
|
|
22
|
+
KALADA_INVALID_CLOCK: "Kalada clock returned an invalid Instant.",
|
|
23
|
+
KALADA_DUPLICATE_BINDING: "Kalada function contains a duplicate binding.",
|
|
24
|
+
KALADA_INVALID_FUNCTION_TYPE: "Kalada function type is invalid.",
|
|
25
|
+
KALADA_CAPTURE_LIMIT: "Kalada function captures exceed a configured limit.",
|
|
26
|
+
KALADA_NOT_CALLABLE: "Kalada call target is not callable.",
|
|
27
|
+
KALADA_FUNCTION_ARITY: "Kalada call has the wrong number of arguments.",
|
|
28
|
+
KALADA_FUNCTION_TYPE_MISMATCH: "Kalada function type does not match.",
|
|
29
|
+
KALADA_CLOSURE_LIMIT: "Kalada closure count exceeds a configured limit.",
|
|
30
|
+
KALADA_CALL_DEPTH_LIMIT: "Kalada call depth exceeds a configured limit.",
|
|
31
|
+
KALADA_CONTINUATION_LIMIT: "Kalada continuation count exceeds a configured limit.",
|
|
32
|
+
KALADA_COLLECTION_TYPE_MISMATCH: "Kalada collection function received an incompatible value.",
|
|
33
|
+
KALADA_COLLECTION_LIMIT: "Kalada collection exceeds a configured limit.",
|
|
34
|
+
KALADA_FUNCTION_ESCAPE: "Kalada callable cannot escape evaluation."
|
|
18
35
|
});
|
|
19
36
|
class KaladaFailure extends Error {
|
|
20
37
|
code;
|
|
21
38
|
path;
|
|
22
|
-
|
|
39
|
+
context;
|
|
40
|
+
constructor(code, path, context) {
|
|
23
41
|
super(code);
|
|
24
42
|
this.code = code;
|
|
25
43
|
this.path = path;
|
|
44
|
+
this.context = context;
|
|
26
45
|
}
|
|
27
46
|
}
|
|
28
|
-
function failure(code, path) {
|
|
47
|
+
function failure(code, path, context) {
|
|
29
48
|
const diagnostic = Object.freeze({
|
|
30
49
|
code,
|
|
31
50
|
path: Object.freeze([...path]),
|
|
32
|
-
message: MESSAGES[code]
|
|
51
|
+
message: MESSAGES[code],
|
|
52
|
+
...context === void 0 ? {} : { context: freezeContext(context) }
|
|
33
53
|
});
|
|
34
54
|
return Object.freeze({ ok: false, diagnostic });
|
|
35
55
|
}
|
|
56
|
+
function freezeContext(context) {
|
|
57
|
+
return Object.freeze(
|
|
58
|
+
context.map((frame) => Object.freeze({ ...frame, path: Object.freeze([...frame.path]) }))
|
|
59
|
+
);
|
|
60
|
+
}
|
|
36
61
|
function success(value) {
|
|
37
62
|
return Object.freeze({ ok: true, value });
|
|
38
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/kalada-v1/diagnostics.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"sources":["../../src/kalada-v1/diagnostics.ts"],"names":[],"mappings":";;AAOA,MAAM,QAAA,GAA6D,OAAO,MAAA,CAAO;AAAA,EAC/E,oBAAA,EAAsB,kCAAA;AAAA,EACtB,qBAAA,EAAuB,kDAAA;AAAA,EACvB,wBAAA,EAA0B,8BAAA;AAAA,EAC1B,wBAAA,EAA0B,yCAAA;AAAA,EAC1B,0BAAA,EAA4B,wCAAA;AAAA,EAC5B,wBAAA,EAA0B,uCAAA;AAAA,EAC1B,4BAAA,EAA8B,2CAAA;AAAA,EAC9B,0BAAA,EAA4B,6CAAA;AAAA,EAC5B,sBAAA,EAAwB,qCAAA;AAAA,EACxB,wBAAA,EAA0B,8BAAA;AAAA,EAC1B,uBAAA,EAAyB,qCAAA;AAAA,EACzB,wBAAA,EAA0B,6CAAA;AAAA,EAC1B,qBAAA,EAAuB,sDAAA;AAAA,EACvB,uBAAA,EAAyB,uDAAA;AAAA,EACzB,uBAAA,EAAyB,yDAAA;AAAA,EACzB,6BAAA,EAA+B,yDAAA;AAAA,EAC/B,wBAAA,EAA0B,gEAAA;AAAA,EAC1B,kBAAA,EAAoB,+BAAA;AAAA,EACpB,oBAAA,EAAsB,2CAAA;AAAA,EACtB,wBAAA,EAA0B,+CAAA;AAAA,EAC1B,4BAAA,EAA8B,kCAAA;AAAA,EAC9B,oBAAA,EAAsB,qDAAA;AAAA,EACtB,mBAAA,EAAqB,qCAAA;AAAA,EACrB,qBAAA,EAAuB,gDAAA;AAAA,EACvB,6BAAA,EAA+B,sCAAA;AAAA,EAC/B,oBAAA,EAAsB,kDAAA;AAAA,EACtB,uBAAA,EAAyB,+CAAA;AAAA,EACzB,yBAAA,EAA2B,uDAAA;AAAA,EAC3B,+BAAA,EAAiC,4DAAA;AAAA,EACjC,uBAAA,EAAyB,+CAAA;AAAA,EACzB,sBAAA,EAAwB;AAC1B,CAAC,CAAA;AAEM,MAAM,sBAAsB,KAAA,CAAM;AAAA,EAC9B,IAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EAET,WAAA,CACE,IAAA,EACA,IAAA,EACA,OAAA,EACA;AACA,IAAA,KAAA,CAAM,IAAI,CAAA;AACV,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AACF;AAEO,SAAS,OAAA,CACd,IAAA,EACA,IAAA,EACA,OAAA,EACoB;AACpB,EAAA,MAAM,UAAA,GAAiC,OAAO,MAAA,CAAO;AAAA,IACnD,IAAA;AAAA,IACA,MAAM,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,IAAI,CAAC,CAAA;AAAA,IAC7B,OAAA,EAAS,SAAS,IAAI,CAAA;AAAA,IACtB,GAAI,YAAY,MAAA,GAAY,KAAK,EAAE,OAAA,EAAS,aAAA,CAAc,OAAO,CAAA;AAAE,GACpE,CAAA;AACD,EAAA,OAAO,OAAO,MAAA,CAAO,EAAE,EAAA,EAAI,KAAA,EAAO,YAAY,CAAA;AAChD;AAEA,SAAS,cACP,OAAA,EAC2C;AAC3C,EAAA,OAAO,MAAA,CAAO,MAAA;AAAA,IACZ,QAAQ,GAAA,CAAI,CAAC,UAAU,MAAA,CAAO,MAAA,CAAO,EAAE,GAAG,KAAA,EAAO,MAAM,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,KAAA,CAAM,IAAI,CAAC,CAAA,EAAG,CAAC;AAAA,GAC1F;AACF;AAEO,SAAS,QAAW,KAAA,EAA8B;AACvD,EAAA,OAAO,OAAO,MAAA,CAAO,EAAE,EAAA,EAAI,IAAA,EAAM,OAAO,CAAA;AAC1C","file":"diagnostics.cjs","sourcesContent":["import type {\n KaladaV1Diagnostic,\n KaladaV1DiagnosticCode,\n KaladaV1DiagnosticContextFrame,\n KaladaV1Outcome,\n} from \"./types.js\";\n\nconst MESSAGES: Readonly<Record<KaladaV1DiagnosticCode, string>> = Object.freeze({\n KALADA_INVALID_INPUT: \"Kalada program input is invalid.\",\n KALADA_LIMIT_EXCEEDED: \"Kalada program input exceeds a configured limit.\",\n KALADA_INVALID_REFERENCE: \"Kalada reference is invalid.\",\n KALADA_MATCH_MISSING_ARM: \"Kalada match is missing a required arm.\",\n KALADA_MATCH_DUPLICATE_ARM: \"Kalada match contains a duplicate arm.\",\n KALADA_MATCH_UNKNOWN_ARM: \"Kalada match contains an unknown arm.\",\n KALADA_MATCH_UNREACHABLE_ARM: \"Kalada match contains an unreachable arm.\",\n KALADA_MATCH_TYPE_MISMATCH: \"Kalada match received the wrong value type.\",\n KALADA_REFERENCE_ERROR: \"Kalada reference resolution failed.\",\n KALADA_REFERENCE_MISSING: \"Kalada reference is missing.\",\n KALADA_REFERENCE_DENIED: \"Kalada reference access was denied.\",\n KALADA_ASYNC_UNSUPPORTED: \"Kalada callbacks must return synchronously.\",\n KALADA_INVALID_RESULT: \"Kalada reference callback returned an invalid value.\",\n KALADA_EVALUATION_LIMIT: \"Kalada evaluation exceeded its configured step limit.\",\n KALADA_INSTANT_REQUIRED: \"Kalada evaluation requires an explicit current Instant.\",\n KALADA_TEMPORAL_TYPE_MISMATCH: \"Kalada temporal operation received incompatible values.\",\n KALADA_TEMPORAL_OVERFLOW: \"Kalada temporal arithmetic exceeded safe integer milliseconds.\",\n KALADA_CLOCK_ERROR: \"Kalada clock sampling failed.\",\n KALADA_INVALID_CLOCK: \"Kalada clock returned an invalid Instant.\",\n KALADA_DUPLICATE_BINDING: \"Kalada function contains a duplicate binding.\",\n KALADA_INVALID_FUNCTION_TYPE: \"Kalada function type is invalid.\",\n KALADA_CAPTURE_LIMIT: \"Kalada function captures exceed a configured limit.\",\n KALADA_NOT_CALLABLE: \"Kalada call target is not callable.\",\n KALADA_FUNCTION_ARITY: \"Kalada call has the wrong number of arguments.\",\n KALADA_FUNCTION_TYPE_MISMATCH: \"Kalada function type does not match.\",\n KALADA_CLOSURE_LIMIT: \"Kalada closure count exceeds a configured limit.\",\n KALADA_CALL_DEPTH_LIMIT: \"Kalada call depth exceeds a configured limit.\",\n KALADA_CONTINUATION_LIMIT: \"Kalada continuation count exceeds a configured limit.\",\n KALADA_COLLECTION_TYPE_MISMATCH: \"Kalada collection function received an incompatible value.\",\n KALADA_COLLECTION_LIMIT: \"Kalada collection exceeds a configured limit.\",\n KALADA_FUNCTION_ESCAPE: \"Kalada callable cannot escape evaluation.\",\n});\n\nexport class KaladaFailure extends Error {\n readonly code: KaladaV1DiagnosticCode;\n readonly path: readonly (string | number)[];\n readonly context?: readonly KaladaV1DiagnosticContextFrame[];\n\n constructor(\n code: KaladaV1DiagnosticCode,\n path: readonly (string | number)[],\n context?: readonly KaladaV1DiagnosticContextFrame[],\n ) {\n super(code);\n this.code = code;\n this.path = path;\n this.context = context;\n }\n}\n\nexport function failure<T>(\n code: KaladaV1DiagnosticCode,\n path: readonly (string | number)[],\n context?: readonly KaladaV1DiagnosticContextFrame[],\n): KaladaV1Outcome<T> {\n const diagnostic: KaladaV1Diagnostic = Object.freeze({\n code,\n path: Object.freeze([...path]),\n message: MESSAGES[code],\n ...(context === undefined ? {} : { context: freezeContext(context) }),\n });\n return Object.freeze({ ok: false, diagnostic });\n}\n\nfunction freezeContext(\n context: readonly KaladaV1DiagnosticContextFrame[],\n): readonly KaladaV1DiagnosticContextFrame[] {\n return Object.freeze(\n context.map((frame) => Object.freeze({ ...frame, path: Object.freeze([...frame.path]) })),\n );\n}\n\nexport function success<T>(value: T): KaladaV1Outcome<T> {\n return Object.freeze({ ok: true, value });\n}\n"]}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import { KaladaV1DiagnosticCode, KaladaV1Outcome } from './types.cjs';
|
|
1
|
+
import { KaladaV1DiagnosticCode, KaladaV1DiagnosticContextFrame, KaladaV1Outcome } from './types.cjs';
|
|
2
2
|
import './json.cjs';
|
|
3
|
+
import './temporal.cjs';
|
|
3
4
|
import './values.cjs';
|
|
4
5
|
|
|
5
6
|
declare class KaladaFailure extends Error {
|
|
6
7
|
readonly code: KaladaV1DiagnosticCode;
|
|
7
8
|
readonly path: readonly (string | number)[];
|
|
8
|
-
|
|
9
|
+
readonly context?: readonly KaladaV1DiagnosticContextFrame[];
|
|
10
|
+
constructor(code: KaladaV1DiagnosticCode, path: readonly (string | number)[], context?: readonly KaladaV1DiagnosticContextFrame[]);
|
|
9
11
|
}
|
|
10
|
-
declare function failure<T>(code: KaladaV1DiagnosticCode, path: readonly (string | number)[]): KaladaV1Outcome<T>;
|
|
12
|
+
declare function failure<T>(code: KaladaV1DiagnosticCode, path: readonly (string | number)[], context?: readonly KaladaV1DiagnosticContextFrame[]): KaladaV1Outcome<T>;
|
|
11
13
|
declare function success<T>(value: T): KaladaV1Outcome<T>;
|
|
12
14
|
|
|
13
15
|
export { KaladaFailure, failure, success };
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import { KaladaV1DiagnosticCode, KaladaV1Outcome } from './types.js';
|
|
1
|
+
import { KaladaV1DiagnosticCode, KaladaV1DiagnosticContextFrame, KaladaV1Outcome } from './types.js';
|
|
2
2
|
import './json.js';
|
|
3
|
+
import './temporal.js';
|
|
3
4
|
import './values.js';
|
|
4
5
|
|
|
5
6
|
declare class KaladaFailure extends Error {
|
|
6
7
|
readonly code: KaladaV1DiagnosticCode;
|
|
7
8
|
readonly path: readonly (string | number)[];
|
|
8
|
-
|
|
9
|
+
readonly context?: readonly KaladaV1DiagnosticContextFrame[];
|
|
10
|
+
constructor(code: KaladaV1DiagnosticCode, path: readonly (string | number)[], context?: readonly KaladaV1DiagnosticContextFrame[]);
|
|
9
11
|
}
|
|
10
|
-
declare function failure<T>(code: KaladaV1DiagnosticCode, path: readonly (string | number)[]): KaladaV1Outcome<T>;
|
|
12
|
+
declare function failure<T>(code: KaladaV1DiagnosticCode, path: readonly (string | number)[], context?: readonly KaladaV1DiagnosticContextFrame[]): KaladaV1Outcome<T>;
|
|
11
13
|
declare function success<T>(value: T): KaladaV1Outcome<T>;
|
|
12
14
|
|
|
13
15
|
export { KaladaFailure, failure, success };
|
|
@@ -12,25 +12,50 @@ const MESSAGES = Object.freeze({
|
|
|
12
12
|
KALADA_REFERENCE_DENIED: "Kalada reference access was denied.",
|
|
13
13
|
KALADA_ASYNC_UNSUPPORTED: "Kalada callbacks must return synchronously.",
|
|
14
14
|
KALADA_INVALID_RESULT: "Kalada reference callback returned an invalid value.",
|
|
15
|
-
KALADA_EVALUATION_LIMIT: "Kalada evaluation exceeded its configured step limit."
|
|
15
|
+
KALADA_EVALUATION_LIMIT: "Kalada evaluation exceeded its configured step limit.",
|
|
16
|
+
KALADA_INSTANT_REQUIRED: "Kalada evaluation requires an explicit current Instant.",
|
|
17
|
+
KALADA_TEMPORAL_TYPE_MISMATCH: "Kalada temporal operation received incompatible values.",
|
|
18
|
+
KALADA_TEMPORAL_OVERFLOW: "Kalada temporal arithmetic exceeded safe integer milliseconds.",
|
|
19
|
+
KALADA_CLOCK_ERROR: "Kalada clock sampling failed.",
|
|
20
|
+
KALADA_INVALID_CLOCK: "Kalada clock returned an invalid Instant.",
|
|
21
|
+
KALADA_DUPLICATE_BINDING: "Kalada function contains a duplicate binding.",
|
|
22
|
+
KALADA_INVALID_FUNCTION_TYPE: "Kalada function type is invalid.",
|
|
23
|
+
KALADA_CAPTURE_LIMIT: "Kalada function captures exceed a configured limit.",
|
|
24
|
+
KALADA_NOT_CALLABLE: "Kalada call target is not callable.",
|
|
25
|
+
KALADA_FUNCTION_ARITY: "Kalada call has the wrong number of arguments.",
|
|
26
|
+
KALADA_FUNCTION_TYPE_MISMATCH: "Kalada function type does not match.",
|
|
27
|
+
KALADA_CLOSURE_LIMIT: "Kalada closure count exceeds a configured limit.",
|
|
28
|
+
KALADA_CALL_DEPTH_LIMIT: "Kalada call depth exceeds a configured limit.",
|
|
29
|
+
KALADA_CONTINUATION_LIMIT: "Kalada continuation count exceeds a configured limit.",
|
|
30
|
+
KALADA_COLLECTION_TYPE_MISMATCH: "Kalada collection function received an incompatible value.",
|
|
31
|
+
KALADA_COLLECTION_LIMIT: "Kalada collection exceeds a configured limit.",
|
|
32
|
+
KALADA_FUNCTION_ESCAPE: "Kalada callable cannot escape evaluation."
|
|
16
33
|
});
|
|
17
34
|
class KaladaFailure extends Error {
|
|
18
35
|
code;
|
|
19
36
|
path;
|
|
20
|
-
|
|
37
|
+
context;
|
|
38
|
+
constructor(code, path, context) {
|
|
21
39
|
super(code);
|
|
22
40
|
this.code = code;
|
|
23
41
|
this.path = path;
|
|
42
|
+
this.context = context;
|
|
24
43
|
}
|
|
25
44
|
}
|
|
26
|
-
function failure(code, path) {
|
|
45
|
+
function failure(code, path, context) {
|
|
27
46
|
const diagnostic = Object.freeze({
|
|
28
47
|
code,
|
|
29
48
|
path: Object.freeze([...path]),
|
|
30
|
-
message: MESSAGES[code]
|
|
49
|
+
message: MESSAGES[code],
|
|
50
|
+
...context === void 0 ? {} : { context: freezeContext(context) }
|
|
31
51
|
});
|
|
32
52
|
return Object.freeze({ ok: false, diagnostic });
|
|
33
53
|
}
|
|
54
|
+
function freezeContext(context) {
|
|
55
|
+
return Object.freeze(
|
|
56
|
+
context.map((frame) => Object.freeze({ ...frame, path: Object.freeze([...frame.path]) }))
|
|
57
|
+
);
|
|
58
|
+
}
|
|
34
59
|
function success(value) {
|
|
35
60
|
return Object.freeze({ ok: true, value });
|
|
36
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/kalada-v1/diagnostics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/kalada-v1/diagnostics.ts"],"names":[],"mappings":"AAOA,MAAM,QAAA,GAA6D,OAAO,MAAA,CAAO;AAAA,EAC/E,oBAAA,EAAsB,kCAAA;AAAA,EACtB,qBAAA,EAAuB,kDAAA;AAAA,EACvB,wBAAA,EAA0B,8BAAA;AAAA,EAC1B,wBAAA,EAA0B,yCAAA;AAAA,EAC1B,0BAAA,EAA4B,wCAAA;AAAA,EAC5B,wBAAA,EAA0B,uCAAA;AAAA,EAC1B,4BAAA,EAA8B,2CAAA;AAAA,EAC9B,0BAAA,EAA4B,6CAAA;AAAA,EAC5B,sBAAA,EAAwB,qCAAA;AAAA,EACxB,wBAAA,EAA0B,8BAAA;AAAA,EAC1B,uBAAA,EAAyB,qCAAA;AAAA,EACzB,wBAAA,EAA0B,6CAAA;AAAA,EAC1B,qBAAA,EAAuB,sDAAA;AAAA,EACvB,uBAAA,EAAyB,uDAAA;AAAA,EACzB,uBAAA,EAAyB,yDAAA;AAAA,EACzB,6BAAA,EAA+B,yDAAA;AAAA,EAC/B,wBAAA,EAA0B,gEAAA;AAAA,EAC1B,kBAAA,EAAoB,+BAAA;AAAA,EACpB,oBAAA,EAAsB,2CAAA;AAAA,EACtB,wBAAA,EAA0B,+CAAA;AAAA,EAC1B,4BAAA,EAA8B,kCAAA;AAAA,EAC9B,oBAAA,EAAsB,qDAAA;AAAA,EACtB,mBAAA,EAAqB,qCAAA;AAAA,EACrB,qBAAA,EAAuB,gDAAA;AAAA,EACvB,6BAAA,EAA+B,sCAAA;AAAA,EAC/B,oBAAA,EAAsB,kDAAA;AAAA,EACtB,uBAAA,EAAyB,+CAAA;AAAA,EACzB,yBAAA,EAA2B,uDAAA;AAAA,EAC3B,+BAAA,EAAiC,4DAAA;AAAA,EACjC,uBAAA,EAAyB,+CAAA;AAAA,EACzB,sBAAA,EAAwB;AAC1B,CAAC,CAAA;AAEM,MAAM,sBAAsB,KAAA,CAAM;AAAA,EAC9B,IAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EAET,WAAA,CACE,IAAA,EACA,IAAA,EACA,OAAA,EACA;AACA,IAAA,KAAA,CAAM,IAAI,CAAA;AACV,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AACF;AAEO,SAAS,OAAA,CACd,IAAA,EACA,IAAA,EACA,OAAA,EACoB;AACpB,EAAA,MAAM,UAAA,GAAiC,OAAO,MAAA,CAAO;AAAA,IACnD,IAAA;AAAA,IACA,MAAM,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,IAAI,CAAC,CAAA;AAAA,IAC7B,OAAA,EAAS,SAAS,IAAI,CAAA;AAAA,IACtB,GAAI,YAAY,MAAA,GAAY,KAAK,EAAE,OAAA,EAAS,aAAA,CAAc,OAAO,CAAA;AAAE,GACpE,CAAA;AACD,EAAA,OAAO,OAAO,MAAA,CAAO,EAAE,EAAA,EAAI,KAAA,EAAO,YAAY,CAAA;AAChD;AAEA,SAAS,cACP,OAAA,EAC2C;AAC3C,EAAA,OAAO,MAAA,CAAO,MAAA;AAAA,IACZ,QAAQ,GAAA,CAAI,CAAC,UAAU,MAAA,CAAO,MAAA,CAAO,EAAE,GAAG,KAAA,EAAO,MAAM,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,KAAA,CAAM,IAAI,CAAC,CAAA,EAAG,CAAC;AAAA,GAC1F;AACF;AAEO,SAAS,QAAW,KAAA,EAA8B;AACvD,EAAA,OAAO,OAAO,MAAA,CAAO,EAAE,EAAA,EAAI,IAAA,EAAM,OAAO,CAAA;AAC1C","file":"diagnostics.js","sourcesContent":["import type {\n KaladaV1Diagnostic,\n KaladaV1DiagnosticCode,\n KaladaV1DiagnosticContextFrame,\n KaladaV1Outcome,\n} from \"./types.js\";\n\nconst MESSAGES: Readonly<Record<KaladaV1DiagnosticCode, string>> = Object.freeze({\n KALADA_INVALID_INPUT: \"Kalada program input is invalid.\",\n KALADA_LIMIT_EXCEEDED: \"Kalada program input exceeds a configured limit.\",\n KALADA_INVALID_REFERENCE: \"Kalada reference is invalid.\",\n KALADA_MATCH_MISSING_ARM: \"Kalada match is missing a required arm.\",\n KALADA_MATCH_DUPLICATE_ARM: \"Kalada match contains a duplicate arm.\",\n KALADA_MATCH_UNKNOWN_ARM: \"Kalada match contains an unknown arm.\",\n KALADA_MATCH_UNREACHABLE_ARM: \"Kalada match contains an unreachable arm.\",\n KALADA_MATCH_TYPE_MISMATCH: \"Kalada match received the wrong value type.\",\n KALADA_REFERENCE_ERROR: \"Kalada reference resolution failed.\",\n KALADA_REFERENCE_MISSING: \"Kalada reference is missing.\",\n KALADA_REFERENCE_DENIED: \"Kalada reference access was denied.\",\n KALADA_ASYNC_UNSUPPORTED: \"Kalada callbacks must return synchronously.\",\n KALADA_INVALID_RESULT: \"Kalada reference callback returned an invalid value.\",\n KALADA_EVALUATION_LIMIT: \"Kalada evaluation exceeded its configured step limit.\",\n KALADA_INSTANT_REQUIRED: \"Kalada evaluation requires an explicit current Instant.\",\n KALADA_TEMPORAL_TYPE_MISMATCH: \"Kalada temporal operation received incompatible values.\",\n KALADA_TEMPORAL_OVERFLOW: \"Kalada temporal arithmetic exceeded safe integer milliseconds.\",\n KALADA_CLOCK_ERROR: \"Kalada clock sampling failed.\",\n KALADA_INVALID_CLOCK: \"Kalada clock returned an invalid Instant.\",\n KALADA_DUPLICATE_BINDING: \"Kalada function contains a duplicate binding.\",\n KALADA_INVALID_FUNCTION_TYPE: \"Kalada function type is invalid.\",\n KALADA_CAPTURE_LIMIT: \"Kalada function captures exceed a configured limit.\",\n KALADA_NOT_CALLABLE: \"Kalada call target is not callable.\",\n KALADA_FUNCTION_ARITY: \"Kalada call has the wrong number of arguments.\",\n KALADA_FUNCTION_TYPE_MISMATCH: \"Kalada function type does not match.\",\n KALADA_CLOSURE_LIMIT: \"Kalada closure count exceeds a configured limit.\",\n KALADA_CALL_DEPTH_LIMIT: \"Kalada call depth exceeds a configured limit.\",\n KALADA_CONTINUATION_LIMIT: \"Kalada continuation count exceeds a configured limit.\",\n KALADA_COLLECTION_TYPE_MISMATCH: \"Kalada collection function received an incompatible value.\",\n KALADA_COLLECTION_LIMIT: \"Kalada collection exceeds a configured limit.\",\n KALADA_FUNCTION_ESCAPE: \"Kalada callable cannot escape evaluation.\",\n});\n\nexport class KaladaFailure extends Error {\n readonly code: KaladaV1DiagnosticCode;\n readonly path: readonly (string | number)[];\n readonly context?: readonly KaladaV1DiagnosticContextFrame[];\n\n constructor(\n code: KaladaV1DiagnosticCode,\n path: readonly (string | number)[],\n context?: readonly KaladaV1DiagnosticContextFrame[],\n ) {\n super(code);\n this.code = code;\n this.path = path;\n this.context = context;\n }\n}\n\nexport function failure<T>(\n code: KaladaV1DiagnosticCode,\n path: readonly (string | number)[],\n context?: readonly KaladaV1DiagnosticContextFrame[],\n): KaladaV1Outcome<T> {\n const diagnostic: KaladaV1Diagnostic = Object.freeze({\n code,\n path: Object.freeze([...path]),\n message: MESSAGES[code],\n ...(context === undefined ? {} : { context: freezeContext(context) }),\n });\n return Object.freeze({ ok: false, diagnostic });\n}\n\nfunction freezeContext(\n context: readonly KaladaV1DiagnosticContextFrame[],\n): readonly KaladaV1DiagnosticContextFrame[] {\n return Object.freeze(\n context.map((frame) => Object.freeze({ ...frame, path: Object.freeze([...frame.path]) })),\n );\n}\n\nexport function success<T>(value: T): KaladaV1Outcome<T> {\n return Object.freeze({ ok: true, value });\n}\n"]}
|