@kalada/core 0.2.0 → 0.3.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/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 +25 -0
- package/dist/kalada-v1/canonical-input.d.ts +25 -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 +78 -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 +56 -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 +15 -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 +15 -1
- package/dist/kalada-v1/compile.js.map +1 -1
- package/dist/kalada-v1/dependencies.cjs +7 -1
- 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 +7 -1
- package/dist/kalada-v1/dependencies.js.map +1 -1
- package/dist/kalada-v1/diagnostics.cjs +6 -1
- package/dist/kalada-v1/diagnostics.cjs.map +1 -1
- package/dist/kalada-v1/diagnostics.d.cts +1 -0
- package/dist/kalada-v1/diagnostics.d.ts +1 -0
- package/dist/kalada-v1/diagnostics.js +6 -1
- package/dist/kalada-v1/diagnostics.js.map +1 -1
- package/dist/kalada-v1/evaluate.cjs +38 -3
- package/dist/kalada-v1/evaluate.cjs.map +1 -1
- package/dist/kalada-v1/evaluate.d.cts +3 -2
- package/dist/kalada-v1/evaluate.d.ts +3 -2
- package/dist/kalada-v1/evaluate.js +39 -4
- package/dist/kalada-v1/evaluate.js.map +1 -1
- package/dist/kalada-v1/factories.cjs +18 -0
- package/dist/kalada-v1/factories.cjs.map +1 -1
- package/dist/kalada-v1/factories.d.cts +8 -0
- package/dist/kalada-v1/factories.d.ts +8 -0
- package/dist/kalada-v1/factories.js +18 -0
- package/dist/kalada-v1/factories.js.map +1 -1
- package/dist/kalada-v1/index.cjs +17 -0
- package/dist/kalada-v1/index.d.cts +2 -1
- package/dist/kalada-v1/index.d.ts +2 -1
- package/dist/kalada-v1/index.js +1 -0
- package/dist/kalada-v1/limits.d.cts +1 -0
- package/dist/kalada-v1/limits.d.ts +1 -0
- package/dist/kalada-v1/schemas.cjs +29 -1
- package/dist/kalada-v1/schemas.cjs.map +1 -1
- package/dist/kalada-v1/schemas.js +29 -1
- package/dist/kalada-v1/schemas.js.map +1 -1
- package/dist/kalada-v1/temporal-evaluation.cjs +74 -0
- package/dist/kalada-v1/temporal-evaluation.cjs.map +1 -0
- package/dist/kalada-v1/temporal-evaluation.d.cts +13 -0
- package/dist/kalada-v1/temporal-evaluation.d.ts +13 -0
- package/dist/kalada-v1/temporal-evaluation.js +71 -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 +33 -4
- package/dist/kalada-v1/types.d.ts +33 -4
- 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
package/dist/kalada-v1/values.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { deepEqualJson, cloneJsonWithStats, cloneJson } from './json.js';
|
|
2
|
+
import { isInstant, isDuration } from './temporal.js';
|
|
2
3
|
|
|
3
4
|
const optionBrands = /* @__PURE__ */ new WeakSet();
|
|
4
5
|
const resultBrands = /* @__PURE__ */ new WeakSet();
|
|
@@ -13,7 +14,7 @@ function branded(brand, value) {
|
|
|
13
14
|
return value;
|
|
14
15
|
}
|
|
15
16
|
function snapshot(value) {
|
|
16
|
-
if (isOption(value) || isResult(value)) return value;
|
|
17
|
+
if (isOption(value) || isResult(value) || isInstant(value) || isDuration(value)) return value;
|
|
17
18
|
return cloneJson(value, DEFAULT_VALUE_LIMITS);
|
|
18
19
|
}
|
|
19
20
|
const NONE = branded(optionBrands, { type: "Option", variant: "none" });
|
|
@@ -52,6 +53,10 @@ function isResult(value) {
|
|
|
52
53
|
return typeof value === "object" && value !== null && resultBrands.has(value);
|
|
53
54
|
}
|
|
54
55
|
function equalKaladaValues(left, right) {
|
|
56
|
+
if (isInstant(left) || isInstant(right))
|
|
57
|
+
return isInstant(left) && isInstant(right) && left.milliseconds === right.milliseconds;
|
|
58
|
+
if (isDuration(left) || isDuration(right))
|
|
59
|
+
return isDuration(left) && isDuration(right) && left.milliseconds === right.milliseconds;
|
|
55
60
|
if (isOption(left) || isOption(right)) return equalOptions(left, right);
|
|
56
61
|
if (isResult(left) || isResult(right)) return equalResults(left, right);
|
|
57
62
|
return deepEqualJson(left, right);
|
|
@@ -70,6 +75,10 @@ function validateKaladaValueLimits(value, limits) {
|
|
|
70
75
|
current = current.value;
|
|
71
76
|
depth += 1;
|
|
72
77
|
}
|
|
78
|
+
if (isInstant(current) || isDuration(current)) {
|
|
79
|
+
validateTemporalLeaf(depth, nodes, limits);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
73
82
|
const remainingDepth = limits.maxDepth - depth;
|
|
74
83
|
if (remainingDepth < 0) throw new RangeError("limit");
|
|
75
84
|
cloneJsonWithStats(current, {
|
|
@@ -78,6 +87,9 @@ function validateKaladaValueLimits(value, limits) {
|
|
|
78
87
|
maxStringLength: limits.maxStringLength
|
|
79
88
|
});
|
|
80
89
|
}
|
|
90
|
+
function validateTemporalLeaf(depth, nodes, limits) {
|
|
91
|
+
if (depth > limits.maxDepth || nodes + 1 > limits.maxNodes) throw new RangeError("limit");
|
|
92
|
+
}
|
|
81
93
|
function equalOptions(left, right) {
|
|
82
94
|
if (!isOption(left) || !isOption(right) || left.variant !== right.variant) return false;
|
|
83
95
|
if (left.variant === "none" || right.variant === "none") return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/kalada-v1/values.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/kalada-v1/values.ts"],"names":[],"mappings":"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","file":"values.js","sourcesContent":["import { cloneJson, cloneJsonWithStats, deepEqualJson, type JsonValue } from \"./json.js\";\nimport { type DurationValue, type InstantValue, isDuration, isInstant } from \"./temporal.js\";\n\nexport type KaladaValue = JsonValue | OptionValue | ResultValue | InstantValue | DurationValue;\nexport type OptionValue = SomeValue | NoneValue;\nexport type ResultValue = OkValue | ErrValue;\n\ndeclare const optionBrand: unique symbol;\ndeclare const resultBrand: unique symbol;\n\nexport interface SomeValue {\n readonly [optionBrand]: true;\n readonly type: \"Option\";\n readonly variant: \"some\";\n readonly value: KaladaValue;\n}\n\nexport interface NoneValue {\n readonly [optionBrand]: true;\n readonly type: \"Option\";\n readonly variant: \"none\";\n}\n\nexport interface OkValue {\n readonly [resultBrand]: true;\n readonly type: \"Result\";\n readonly variant: \"ok\";\n readonly value: KaladaValue;\n}\n\nexport interface ErrValue {\n readonly [resultBrand]: true;\n readonly type: \"Result\";\n readonly variant: \"err\";\n readonly value: KaladaValue;\n}\n\nconst optionBrands = new WeakSet<object>();\nconst resultBrands = new WeakSet<object>();\nconst DEFAULT_VALUE_LIMITS = Object.freeze({\n maxDepth: 64,\n maxNodes: 10_000,\n maxStringLength: 10_000,\n});\n\nfunction branded<T extends object>(brand: WeakSet<object>, value: T): T {\n Object.freeze(value);\n brand.add(value);\n return value;\n}\n\nfunction snapshot(value: KaladaValue): KaladaValue {\n if (isOption(value) || isResult(value) || isInstant(value) || isDuration(value)) return value;\n return cloneJson(value, DEFAULT_VALUE_LIMITS);\n}\n\nconst NONE = branded(optionBrands, { type: \"Option\", variant: \"none\" } as unknown as NoneValue);\n\nexport const Option = Object.freeze({\n some(value: KaladaValue): SomeValue {\n return branded(optionBrands, {\n type: \"Option\",\n variant: \"some\",\n value: snapshot(value),\n } as unknown as SomeValue);\n },\n none(): NoneValue {\n return NONE;\n },\n});\n\nexport const Result = Object.freeze({\n ok(value: KaladaValue): OkValue {\n return branded(resultBrands, {\n type: \"Result\",\n variant: \"ok\",\n value: snapshot(value),\n } as unknown as OkValue);\n },\n err(value: KaladaValue): ErrValue {\n return branded(resultBrands, {\n type: \"Result\",\n variant: \"err\",\n value: snapshot(value),\n } as unknown as ErrValue);\n },\n});\n\nexport function isOption(value: unknown): value is OptionValue {\n return typeof value === \"object\" && value !== null && optionBrands.has(value);\n}\n\nexport function isResult(value: unknown): value is ResultValue {\n return typeof value === \"object\" && value !== null && resultBrands.has(value);\n}\n\nexport function equalKaladaValues(left: KaladaValue, right: KaladaValue): boolean {\n if (isInstant(left) || isInstant(right))\n return isInstant(left) && isInstant(right) && left.milliseconds === right.milliseconds;\n if (isDuration(left) || isDuration(right))\n return isDuration(left) && isDuration(right) && left.milliseconds === right.milliseconds;\n if (isOption(left) || isOption(right)) return equalOptions(left, right);\n if (isResult(left) || isResult(right)) return equalResults(left, right);\n return deepEqualJson(left, right);\n}\n\nexport function validateKaladaValueLimits(\n value: KaladaValue,\n limits: {\n readonly maxDepth: number;\n readonly maxNodes: number;\n readonly maxStringLength: number;\n },\n): void {\n const seen = new WeakSet<object>();\n let current = value;\n let depth = 0;\n let nodes = 0;\n while (isOption(current) || isResult(current)) {\n nodes += 1;\n if (depth > limits.maxDepth || nodes > limits.maxNodes) throw new RangeError(\"limit\");\n if (seen.has(current)) throw new TypeError(\"cycle\");\n seen.add(current);\n if (isOption(current) && current.variant === \"none\") return;\n current = current.value;\n depth += 1;\n }\n if (isInstant(current) || isDuration(current)) {\n validateTemporalLeaf(depth, nodes, limits);\n return;\n }\n const remainingDepth = limits.maxDepth - depth;\n if (remainingDepth < 0) throw new RangeError(\"limit\");\n cloneJsonWithStats(current, {\n maxDepth: remainingDepth,\n maxNodes: limits.maxNodes - nodes,\n maxStringLength: limits.maxStringLength,\n });\n}\n\nfunction validateTemporalLeaf(\n depth: number,\n nodes: number,\n limits: { readonly maxDepth: number; readonly maxNodes: number },\n): void {\n if (depth > limits.maxDepth || nodes + 1 > limits.maxNodes) throw new RangeError(\"limit\");\n}\n\nfunction equalOptions(left: KaladaValue, right: KaladaValue): boolean {\n if (!isOption(left) || !isOption(right) || left.variant !== right.variant) return false;\n if (left.variant === \"none\" || right.variant === \"none\") return true;\n return equalKaladaValues(left.value, right.value);\n}\n\nfunction equalResults(left: KaladaValue, right: KaladaValue): boolean {\n if (!isResult(left) || !isResult(right) || left.variant !== right.variant) return false;\n return equalKaladaValues(left.value, right.value);\n}\n"]}
|