@kalada/core 0.0.0 → 0.2.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 (80) hide show
  1. package/README.md +25 -0
  2. package/dist/kalada-v1/canonicalize.cjs +266 -0
  3. package/dist/kalada-v1/canonicalize.cjs.map +1 -0
  4. package/dist/kalada-v1/canonicalize.d.cts +7 -0
  5. package/dist/kalada-v1/canonicalize.d.ts +7 -0
  6. package/dist/kalada-v1/canonicalize.js +264 -0
  7. package/dist/kalada-v1/canonicalize.js.map +1 -0
  8. package/dist/kalada-v1/codec.cjs +149 -0
  9. package/dist/kalada-v1/codec.cjs.map +1 -0
  10. package/dist/kalada-v1/codec.d.cts +27 -0
  11. package/dist/kalada-v1/codec.d.ts +27 -0
  12. package/dist/kalada-v1/codec.js +146 -0
  13. package/dist/kalada-v1/codec.js.map +1 -0
  14. package/dist/kalada-v1/compile.cjs +31 -0
  15. package/dist/kalada-v1/compile.cjs.map +1 -0
  16. package/dist/kalada-v1/compile.d.cts +7 -0
  17. package/dist/kalada-v1/compile.d.ts +7 -0
  18. package/dist/kalada-v1/compile.js +29 -0
  19. package/dist/kalada-v1/compile.js.map +1 -0
  20. package/dist/kalada-v1/dependencies.cjs +52 -0
  21. package/dist/kalada-v1/dependencies.cjs.map +1 -0
  22. package/dist/kalada-v1/dependencies.d.cts +7 -0
  23. package/dist/kalada-v1/dependencies.d.ts +7 -0
  24. package/dist/kalada-v1/dependencies.js +50 -0
  25. package/dist/kalada-v1/dependencies.js.map +1 -0
  26. package/dist/kalada-v1/diagnostics.cjs +44 -0
  27. package/dist/kalada-v1/diagnostics.cjs.map +1 -0
  28. package/dist/kalada-v1/diagnostics.d.cts +13 -0
  29. package/dist/kalada-v1/diagnostics.d.ts +13 -0
  30. package/dist/kalada-v1/diagnostics.js +40 -0
  31. package/dist/kalada-v1/diagnostics.js.map +1 -0
  32. package/dist/kalada-v1/evaluate.cjs +141 -0
  33. package/dist/kalada-v1/evaluate.cjs.map +1 -0
  34. package/dist/kalada-v1/evaluate.d.cts +7 -0
  35. package/dist/kalada-v1/evaluate.d.ts +7 -0
  36. package/dist/kalada-v1/evaluate.js +139 -0
  37. package/dist/kalada-v1/evaluate.js.map +1 -0
  38. package/dist/kalada-v1/factories.cjs +48 -0
  39. package/dist/kalada-v1/factories.cjs.map +1 -0
  40. package/dist/kalada-v1/factories.d.cts +22 -0
  41. package/dist/kalada-v1/factories.d.ts +22 -0
  42. package/dist/kalada-v1/factories.js +46 -0
  43. package/dist/kalada-v1/factories.js.map +1 -0
  44. package/dist/kalada-v1/index.cjs +71 -0
  45. package/dist/kalada-v1/index.cjs.map +1 -0
  46. package/dist/kalada-v1/index.d.cts +10 -0
  47. package/dist/kalada-v1/index.d.ts +10 -0
  48. package/dist/kalada-v1/index.js +10 -0
  49. package/dist/kalada-v1/index.js.map +1 -0
  50. package/dist/kalada-v1/json.cjs +129 -0
  51. package/dist/kalada-v1/json.cjs.map +1 -0
  52. package/dist/kalada-v1/json.d.cts +20 -0
  53. package/dist/kalada-v1/json.d.ts +20 -0
  54. package/dist/kalada-v1/json.js +123 -0
  55. package/dist/kalada-v1/json.js.map +1 -0
  56. package/dist/kalada-v1/limits.cjs +34 -0
  57. package/dist/kalada-v1/limits.cjs.map +1 -0
  58. package/dist/kalada-v1/limits.d.cts +8 -0
  59. package/dist/kalada-v1/limits.d.ts +8 -0
  60. package/dist/kalada-v1/limits.js +31 -0
  61. package/dist/kalada-v1/limits.js.map +1 -0
  62. package/dist/kalada-v1/schemas.cjs +154 -0
  63. package/dist/kalada-v1/schemas.cjs.map +1 -0
  64. package/dist/kalada-v1/schemas.d.cts +5 -0
  65. package/dist/kalada-v1/schemas.d.ts +5 -0
  66. package/dist/kalada-v1/schemas.js +151 -0
  67. package/dist/kalada-v1/schemas.js.map +1 -0
  68. package/dist/kalada-v1/types.cjs +4 -0
  69. package/dist/kalada-v1/types.cjs.map +1 -0
  70. package/dist/kalada-v1/types.d.cts +91 -0
  71. package/dist/kalada-v1/types.d.ts +91 -0
  72. package/dist/kalada-v1/types.js +3 -0
  73. package/dist/kalada-v1/types.js.map +1 -0
  74. package/dist/kalada-v1/values.cjs +100 -0
  75. package/dist/kalada-v1/values.cjs.map +1 -0
  76. package/dist/kalada-v1/values.d.cts +48 -0
  77. package/dist/kalada-v1/values.d.ts +48 -0
  78. package/dist/kalada-v1/values.js +93 -0
  79. package/dist/kalada-v1/values.js.map +1 -0
  80. package/package.json +16 -1
@@ -0,0 +1,31 @@
1
+ const DEFAULT_KALADA_V1_LIMITS = Object.freeze({
2
+ maxAstDepth: 64,
3
+ maxAstNodes: 1e4,
4
+ maxValueDepth: 64,
5
+ maxValueNodes: 1e4,
6
+ maxStringLength: 1e4,
7
+ maxReferenceLength: 1e3,
8
+ maxEvaluationSteps: 1e4
9
+ });
10
+ const MAXIMUM = Object.freeze({
11
+ maxAstDepth: 256,
12
+ maxAstNodes: 1e5,
13
+ maxValueDepth: 256,
14
+ maxValueNodes: 1e5,
15
+ maxStringLength: 1e6,
16
+ maxReferenceLength: 1e5,
17
+ maxEvaluationSteps: 1e5
18
+ });
19
+ function resolveLimits(input) {
20
+ const limits = { ...DEFAULT_KALADA_V1_LIMITS, ...input };
21
+ for (const key of Object.keys(limits)) {
22
+ const value = limits[key];
23
+ if (!Number.isSafeInteger(value) || value < 1 || value > MAXIMUM[key])
24
+ throw new RangeError("limit");
25
+ }
26
+ return Object.freeze(limits);
27
+ }
28
+
29
+ export { DEFAULT_KALADA_V1_LIMITS, resolveLimits };
30
+ //# sourceMappingURL=limits.js.map
31
+ //# sourceMappingURL=limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/kalada-v1/limits.ts"],"names":[],"mappings":"AAEO,MAAM,wBAAA,GAA2C,OAAO,MAAA,CAAO;AAAA,EACpE,WAAA,EAAa,EAAA;AAAA,EACb,WAAA,EAAa,GAAA;AAAA,EACb,aAAA,EAAe,EAAA;AAAA,EACf,aAAA,EAAe,GAAA;AAAA,EACf,eAAA,EAAiB,GAAA;AAAA,EACjB,kBAAA,EAAoB,GAAA;AAAA,EACpB,kBAAA,EAAoB;AACtB,CAAC;AAED,MAAM,OAAA,GAA0B,OAAO,MAAA,CAAO;AAAA,EAC5C,WAAA,EAAa,GAAA;AAAA,EACb,WAAA,EAAa,GAAA;AAAA,EACb,aAAA,EAAe,GAAA;AAAA,EACf,aAAA,EAAe,GAAA;AAAA,EACf,eAAA,EAAiB,GAAA;AAAA,EACjB,kBAAA,EAAoB,GAAA;AAAA,EACpB,kBAAA,EAAoB;AACtB,CAAC,CAAA;AAEM,SAAS,cAAc,KAAA,EAAiD;AAC7E,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,wBAAA,EAA0B,GAAG,KAAA,EAAM;AACvD,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAA+B;AACjE,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,IAAI,CAAC,OAAO,aAAA,CAAc,KAAK,KAAK,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,OAAA,CAAQ,GAAG,CAAA;AAClE,MAAA,MAAM,IAAI,WAAW,OAAO,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,MAAA,CAAO,OAAO,MAAM,CAAA;AAC7B","file":"limits.js","sourcesContent":["import type { KaladaV1Limits } from \"./types.js\";\n\nexport const DEFAULT_KALADA_V1_LIMITS: KaladaV1Limits = Object.freeze({\n maxAstDepth: 64,\n maxAstNodes: 10_000,\n maxValueDepth: 64,\n maxValueNodes: 10_000,\n maxStringLength: 10_000,\n maxReferenceLength: 1_000,\n maxEvaluationSteps: 10_000,\n});\n\nconst MAXIMUM: KaladaV1Limits = Object.freeze({\n maxAstDepth: 256,\n maxAstNodes: 100_000,\n maxValueDepth: 256,\n maxValueNodes: 100_000,\n maxStringLength: 1_000_000,\n maxReferenceLength: 100_000,\n maxEvaluationSteps: 100_000,\n});\n\nexport function resolveLimits(input?: Partial<KaladaV1Limits>): KaladaV1Limits {\n const limits = { ...DEFAULT_KALADA_V1_LIMITS, ...input };\n for (const key of Object.keys(limits) as (keyof KaladaV1Limits)[]) {\n const value = limits[key];\n if (!Number.isSafeInteger(value) || value < 1 || value > MAXIMUM[key])\n throw new RangeError(\"limit\");\n }\n return Object.freeze(limits);\n}\n"]}
@@ -0,0 +1,154 @@
1
+ 'use strict';
2
+
3
+ var limits_js = require('./limits.js');
4
+
5
+ const jsonValue = jsonValueSchema("#/$defs/jsonValue", limits_js.DEFAULT_KALADA_V1_LIMITS.maxValueNodes - 1);
6
+ const encodedJsonValue = jsonValueSchema(
7
+ "#/$defs/encodedJsonValue",
8
+ limits_js.DEFAULT_KALADA_V1_LIMITS.maxValueNodes - 2
9
+ );
10
+ function jsonValueSchema(reference, maxContainerSize) {
11
+ return {
12
+ anyOf: [
13
+ { type: "null" },
14
+ { type: "boolean" },
15
+ { type: "number", minimum: -17976931348623157e292, maximum: 17976931348623157e292 },
16
+ { type: "string", maxLength: limits_js.DEFAULT_KALADA_V1_LIMITS.maxStringLength },
17
+ {
18
+ type: "array",
19
+ maxItems: maxContainerSize,
20
+ items: { $ref: reference }
21
+ },
22
+ {
23
+ type: "object",
24
+ maxProperties: maxContainerSize,
25
+ propertyNames: {
26
+ allOf: [
27
+ { maxLength: limits_js.DEFAULT_KALADA_V1_LIMITS.maxStringLength },
28
+ { not: { enum: ["__proto__", "constructor", "prototype"] } }
29
+ ]
30
+ },
31
+ additionalProperties: { $ref: reference }
32
+ }
33
+ ]
34
+ };
35
+ }
36
+ const expression = {
37
+ oneOf: [
38
+ node("literal", { value: { $ref: "#/$defs/jsonValue" } }, ["value"]),
39
+ node(
40
+ "ref",
41
+ {
42
+ ref: {
43
+ type: "string",
44
+ minLength: 1,
45
+ maxLength: limits_js.DEFAULT_KALADA_V1_LIMITS.maxReferenceLength
46
+ }
47
+ },
48
+ ["ref"]
49
+ ),
50
+ node("binding", { name: bindingName(), value: expressionRef(), body: expressionRef() }, [
51
+ "name",
52
+ "value",
53
+ "body"
54
+ ]),
55
+ node("option", { variant: { const: "none" } }, ["variant"]),
56
+ node("option", { variant: { const: "some" }, value: expressionRef() }, ["variant", "value"]),
57
+ node("result", { variant: { enum: ["ok", "err"] }, value: expressionRef() }, [
58
+ "variant",
59
+ "value"
60
+ ]),
61
+ matchNode("Option", [arm("some", true), arm("none", false)]),
62
+ matchNode("Result", [arm("ok", true), arm("err", true)])
63
+ ]
64
+ };
65
+ const KALADA_V1_PROGRAM_SCHEMA = deepFreeze({
66
+ $schema: "https://json-schema.org/draft/2020-12/schema",
67
+ $id: "https://kalada.dev/schema/program/kalada-v1",
68
+ $comment: "The schema enforces canonical shape and local string/container bounds. Aggregate AST depth, AST nodes, value nodes, and evaluation steps remain runtime-authoritative.",
69
+ type: "object",
70
+ properties: {
71
+ format: { const: "kalada-program" },
72
+ version: { const: 1 },
73
+ profile: { const: "kalada-v1" },
74
+ expression: expressionRef()
75
+ },
76
+ required: ["format", "version", "profile", "expression"],
77
+ additionalProperties: false,
78
+ $defs: { jsonValue, expression }
79
+ });
80
+ const KALADA_VALUE_V1_SCHEMA = deepFreeze({
81
+ $schema: "https://json-schema.org/draft/2020-12/schema",
82
+ $id: "https://kalada.dev/schema/value/kalada-value-v1",
83
+ $ref: "#/$defs/encodedValue",
84
+ $defs: {
85
+ encodedJsonValue,
86
+ encodedValue: {
87
+ oneOf: [
88
+ valueEnvelope("Json", "value", { $ref: "#/$defs/encodedJsonValue" }),
89
+ valueEnvelope("Option", "none"),
90
+ valueEnvelope("Option", "some", { $ref: "#/$defs/encodedValue" }),
91
+ valueEnvelope("Result", "ok", { $ref: "#/$defs/encodedValue" }),
92
+ valueEnvelope("Result", "err", { $ref: "#/$defs/encodedValue" })
93
+ ]
94
+ }
95
+ }
96
+ });
97
+ function node(kind, properties, required) {
98
+ return {
99
+ type: "object",
100
+ properties: { kind: { const: kind }, ...properties },
101
+ required: ["kind", ...required],
102
+ additionalProperties: false
103
+ };
104
+ }
105
+ function matchNode(type, arms) {
106
+ return node(
107
+ "match",
108
+ {
109
+ type: { const: type },
110
+ value: expressionRef(),
111
+ arms: { type: "array", prefixItems: arms, minItems: 2, maxItems: 2 }
112
+ },
113
+ ["type", "value", "arms"]
114
+ );
115
+ }
116
+ function arm(variant, payload) {
117
+ const properties = {
118
+ variant: { const: variant },
119
+ body: expressionRef()
120
+ };
121
+ if (payload) properties.binding = bindingName();
122
+ return { type: "object", properties, required: ["variant", "body"], additionalProperties: false };
123
+ }
124
+ function valueEnvelope(type, variant, value) {
125
+ const properties = {
126
+ format: { const: "kalada-value" },
127
+ version: { const: 1 },
128
+ type: { const: type },
129
+ variant: { const: variant }
130
+ };
131
+ if (value) properties.value = value;
132
+ return {
133
+ type: "object",
134
+ properties,
135
+ required: Object.keys(properties),
136
+ additionalProperties: false
137
+ };
138
+ }
139
+ function expressionRef() {
140
+ return { $ref: "#/$defs/expression" };
141
+ }
142
+ function bindingName() {
143
+ return { type: "string", minLength: 1, maxLength: limits_js.DEFAULT_KALADA_V1_LIMITS.maxReferenceLength };
144
+ }
145
+ function deepFreeze(value) {
146
+ if (typeof value !== "object" || value === null || Object.isFrozen(value)) return value;
147
+ for (const child of Object.values(value)) deepFreeze(child);
148
+ return Object.freeze(value);
149
+ }
150
+
151
+ exports.KALADA_V1_PROGRAM_SCHEMA = KALADA_V1_PROGRAM_SCHEMA;
152
+ exports.KALADA_VALUE_V1_SCHEMA = KALADA_VALUE_V1_SCHEMA;
153
+ //# sourceMappingURL=schemas.cjs.map
154
+ //# sourceMappingURL=schemas.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/kalada-v1/schemas.ts"],"names":["DEFAULT_KALADA_V1_LIMITS"],"mappings":"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","file":"schemas.cjs","sourcesContent":["import { DEFAULT_KALADA_V1_LIMITS } from \"./limits.js\";\n\nexport type KaladaV1JsonSchema = Readonly<Record<string, unknown>>;\n\nconst jsonValue = jsonValueSchema(\"#/$defs/jsonValue\", DEFAULT_KALADA_V1_LIMITS.maxValueNodes - 1);\nconst encodedJsonValue = jsonValueSchema(\n \"#/$defs/encodedJsonValue\",\n DEFAULT_KALADA_V1_LIMITS.maxValueNodes - 2,\n);\n\nfunction jsonValueSchema(reference: string, maxContainerSize: number): Record<string, unknown> {\n return {\n anyOf: [\n { type: \"null\" },\n { type: \"boolean\" },\n { type: \"number\", minimum: -1.7976931348623157e308, maximum: 1.7976931348623157e308 },\n { type: \"string\", maxLength: DEFAULT_KALADA_V1_LIMITS.maxStringLength },\n {\n type: \"array\",\n maxItems: maxContainerSize,\n items: { $ref: reference },\n },\n {\n type: \"object\",\n maxProperties: maxContainerSize,\n propertyNames: {\n allOf: [\n { maxLength: DEFAULT_KALADA_V1_LIMITS.maxStringLength },\n { not: { enum: [\"__proto__\", \"constructor\", \"prototype\"] } },\n ],\n },\n additionalProperties: { $ref: reference },\n },\n ],\n };\n}\n\nconst expression = {\n oneOf: [\n node(\"literal\", { value: { $ref: \"#/$defs/jsonValue\" } }, [\"value\"]),\n node(\n \"ref\",\n {\n ref: {\n type: \"string\",\n minLength: 1,\n maxLength: DEFAULT_KALADA_V1_LIMITS.maxReferenceLength,\n },\n },\n [\"ref\"],\n ),\n node(\"binding\", { name: bindingName(), value: expressionRef(), body: expressionRef() }, [\n \"name\",\n \"value\",\n \"body\",\n ]),\n node(\"option\", { variant: { const: \"none\" } }, [\"variant\"]),\n node(\"option\", { variant: { const: \"some\" }, value: expressionRef() }, [\"variant\", \"value\"]),\n node(\"result\", { variant: { enum: [\"ok\", \"err\"] }, value: expressionRef() }, [\n \"variant\",\n \"value\",\n ]),\n matchNode(\"Option\", [arm(\"some\", true), arm(\"none\", false)]),\n matchNode(\"Result\", [arm(\"ok\", true), arm(\"err\", true)]),\n ],\n};\n\nexport const KALADA_V1_PROGRAM_SCHEMA: KaladaV1JsonSchema = deepFreeze({\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n $id: \"https://kalada.dev/schema/program/kalada-v1\",\n $comment:\n \"The schema enforces canonical shape and local string/container bounds. Aggregate AST depth, AST nodes, value nodes, and evaluation steps remain runtime-authoritative.\",\n type: \"object\",\n properties: {\n format: { const: \"kalada-program\" },\n version: { const: 1 },\n profile: { const: \"kalada-v1\" },\n expression: expressionRef(),\n },\n required: [\"format\", \"version\", \"profile\", \"expression\"],\n additionalProperties: false,\n $defs: { jsonValue, expression },\n});\n\nexport const KALADA_VALUE_V1_SCHEMA: KaladaV1JsonSchema = deepFreeze({\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n $id: \"https://kalada.dev/schema/value/kalada-value-v1\",\n $ref: \"#/$defs/encodedValue\",\n $defs: {\n encodedJsonValue,\n encodedValue: {\n oneOf: [\n valueEnvelope(\"Json\", \"value\", { $ref: \"#/$defs/encodedJsonValue\" }),\n valueEnvelope(\"Option\", \"none\"),\n valueEnvelope(\"Option\", \"some\", { $ref: \"#/$defs/encodedValue\" }),\n valueEnvelope(\"Result\", \"ok\", { $ref: \"#/$defs/encodedValue\" }),\n valueEnvelope(\"Result\", \"err\", { $ref: \"#/$defs/encodedValue\" }),\n ],\n },\n },\n});\n\nfunction node(\n kind: string,\n properties: Record<string, unknown>,\n required: string[],\n): Record<string, unknown> {\n return {\n type: \"object\",\n properties: { kind: { const: kind }, ...properties },\n required: [\"kind\", ...required],\n additionalProperties: false,\n };\n}\n\nfunction matchNode(\n type: \"Option\" | \"Result\",\n arms: readonly Record<string, unknown>[],\n): Record<string, unknown> {\n return node(\n \"match\",\n {\n type: { const: type },\n value: expressionRef(),\n arms: { type: \"array\", prefixItems: arms, minItems: 2, maxItems: 2 },\n },\n [\"type\", \"value\", \"arms\"],\n );\n}\n\nfunction arm(variant: string, payload: boolean): Record<string, unknown> {\n const properties: Record<string, unknown> = {\n variant: { const: variant },\n body: expressionRef(),\n };\n if (payload) properties.binding = bindingName();\n return { type: \"object\", properties, required: [\"variant\", \"body\"], additionalProperties: false };\n}\n\nfunction valueEnvelope(\n type: string,\n variant: string,\n value?: Record<string, unknown>,\n): Record<string, unknown> {\n const properties: Record<string, unknown> = {\n format: { const: \"kalada-value\" },\n version: { const: 1 },\n type: { const: type },\n variant: { const: variant },\n };\n if (value) properties.value = value;\n return {\n type: \"object\",\n properties,\n required: Object.keys(properties),\n additionalProperties: false,\n };\n}\n\nfunction expressionRef(): Record<string, string> {\n return { $ref: \"#/$defs/expression\" };\n}\n\nfunction bindingName(): Record<string, unknown> {\n return { type: \"string\", minLength: 1, maxLength: DEFAULT_KALADA_V1_LIMITS.maxReferenceLength };\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) return value;\n for (const child of Object.values(value)) deepFreeze(child);\n return Object.freeze(value);\n}\n"]}
@@ -0,0 +1,5 @@
1
+ type KaladaV1JsonSchema = Readonly<Record<string, unknown>>;
2
+ declare const KALADA_V1_PROGRAM_SCHEMA: KaladaV1JsonSchema;
3
+ declare const KALADA_VALUE_V1_SCHEMA: KaladaV1JsonSchema;
4
+
5
+ export { KALADA_V1_PROGRAM_SCHEMA, KALADA_VALUE_V1_SCHEMA, type KaladaV1JsonSchema };
@@ -0,0 +1,5 @@
1
+ type KaladaV1JsonSchema = Readonly<Record<string, unknown>>;
2
+ declare const KALADA_V1_PROGRAM_SCHEMA: KaladaV1JsonSchema;
3
+ declare const KALADA_VALUE_V1_SCHEMA: KaladaV1JsonSchema;
4
+
5
+ export { KALADA_V1_PROGRAM_SCHEMA, KALADA_VALUE_V1_SCHEMA, type KaladaV1JsonSchema };
@@ -0,0 +1,151 @@
1
+ import { DEFAULT_KALADA_V1_LIMITS } from './limits.js';
2
+
3
+ const jsonValue = jsonValueSchema("#/$defs/jsonValue", DEFAULT_KALADA_V1_LIMITS.maxValueNodes - 1);
4
+ const encodedJsonValue = jsonValueSchema(
5
+ "#/$defs/encodedJsonValue",
6
+ DEFAULT_KALADA_V1_LIMITS.maxValueNodes - 2
7
+ );
8
+ function jsonValueSchema(reference, maxContainerSize) {
9
+ return {
10
+ anyOf: [
11
+ { type: "null" },
12
+ { type: "boolean" },
13
+ { type: "number", minimum: -17976931348623157e292, maximum: 17976931348623157e292 },
14
+ { type: "string", maxLength: DEFAULT_KALADA_V1_LIMITS.maxStringLength },
15
+ {
16
+ type: "array",
17
+ maxItems: maxContainerSize,
18
+ items: { $ref: reference }
19
+ },
20
+ {
21
+ type: "object",
22
+ maxProperties: maxContainerSize,
23
+ propertyNames: {
24
+ allOf: [
25
+ { maxLength: DEFAULT_KALADA_V1_LIMITS.maxStringLength },
26
+ { not: { enum: ["__proto__", "constructor", "prototype"] } }
27
+ ]
28
+ },
29
+ additionalProperties: { $ref: reference }
30
+ }
31
+ ]
32
+ };
33
+ }
34
+ const expression = {
35
+ oneOf: [
36
+ node("literal", { value: { $ref: "#/$defs/jsonValue" } }, ["value"]),
37
+ node(
38
+ "ref",
39
+ {
40
+ ref: {
41
+ type: "string",
42
+ minLength: 1,
43
+ maxLength: DEFAULT_KALADA_V1_LIMITS.maxReferenceLength
44
+ }
45
+ },
46
+ ["ref"]
47
+ ),
48
+ node("binding", { name: bindingName(), value: expressionRef(), body: expressionRef() }, [
49
+ "name",
50
+ "value",
51
+ "body"
52
+ ]),
53
+ node("option", { variant: { const: "none" } }, ["variant"]),
54
+ node("option", { variant: { const: "some" }, value: expressionRef() }, ["variant", "value"]),
55
+ node("result", { variant: { enum: ["ok", "err"] }, value: expressionRef() }, [
56
+ "variant",
57
+ "value"
58
+ ]),
59
+ matchNode("Option", [arm("some", true), arm("none", false)]),
60
+ matchNode("Result", [arm("ok", true), arm("err", true)])
61
+ ]
62
+ };
63
+ const KALADA_V1_PROGRAM_SCHEMA = deepFreeze({
64
+ $schema: "https://json-schema.org/draft/2020-12/schema",
65
+ $id: "https://kalada.dev/schema/program/kalada-v1",
66
+ $comment: "The schema enforces canonical shape and local string/container bounds. Aggregate AST depth, AST nodes, value nodes, and evaluation steps remain runtime-authoritative.",
67
+ type: "object",
68
+ properties: {
69
+ format: { const: "kalada-program" },
70
+ version: { const: 1 },
71
+ profile: { const: "kalada-v1" },
72
+ expression: expressionRef()
73
+ },
74
+ required: ["format", "version", "profile", "expression"],
75
+ additionalProperties: false,
76
+ $defs: { jsonValue, expression }
77
+ });
78
+ const KALADA_VALUE_V1_SCHEMA = deepFreeze({
79
+ $schema: "https://json-schema.org/draft/2020-12/schema",
80
+ $id: "https://kalada.dev/schema/value/kalada-value-v1",
81
+ $ref: "#/$defs/encodedValue",
82
+ $defs: {
83
+ encodedJsonValue,
84
+ encodedValue: {
85
+ oneOf: [
86
+ valueEnvelope("Json", "value", { $ref: "#/$defs/encodedJsonValue" }),
87
+ valueEnvelope("Option", "none"),
88
+ valueEnvelope("Option", "some", { $ref: "#/$defs/encodedValue" }),
89
+ valueEnvelope("Result", "ok", { $ref: "#/$defs/encodedValue" }),
90
+ valueEnvelope("Result", "err", { $ref: "#/$defs/encodedValue" })
91
+ ]
92
+ }
93
+ }
94
+ });
95
+ function node(kind, properties, required) {
96
+ return {
97
+ type: "object",
98
+ properties: { kind: { const: kind }, ...properties },
99
+ required: ["kind", ...required],
100
+ additionalProperties: false
101
+ };
102
+ }
103
+ function matchNode(type, arms) {
104
+ return node(
105
+ "match",
106
+ {
107
+ type: { const: type },
108
+ value: expressionRef(),
109
+ arms: { type: "array", prefixItems: arms, minItems: 2, maxItems: 2 }
110
+ },
111
+ ["type", "value", "arms"]
112
+ );
113
+ }
114
+ function arm(variant, payload) {
115
+ const properties = {
116
+ variant: { const: variant },
117
+ body: expressionRef()
118
+ };
119
+ if (payload) properties.binding = bindingName();
120
+ return { type: "object", properties, required: ["variant", "body"], additionalProperties: false };
121
+ }
122
+ function valueEnvelope(type, variant, value) {
123
+ const properties = {
124
+ format: { const: "kalada-value" },
125
+ version: { const: 1 },
126
+ type: { const: type },
127
+ variant: { const: variant }
128
+ };
129
+ if (value) properties.value = value;
130
+ return {
131
+ type: "object",
132
+ properties,
133
+ required: Object.keys(properties),
134
+ additionalProperties: false
135
+ };
136
+ }
137
+ function expressionRef() {
138
+ return { $ref: "#/$defs/expression" };
139
+ }
140
+ function bindingName() {
141
+ return { type: "string", minLength: 1, maxLength: DEFAULT_KALADA_V1_LIMITS.maxReferenceLength };
142
+ }
143
+ function deepFreeze(value) {
144
+ if (typeof value !== "object" || value === null || Object.isFrozen(value)) return value;
145
+ for (const child of Object.values(value)) deepFreeze(child);
146
+ return Object.freeze(value);
147
+ }
148
+
149
+ export { KALADA_V1_PROGRAM_SCHEMA, KALADA_VALUE_V1_SCHEMA };
150
+ //# sourceMappingURL=schemas.js.map
151
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/kalada-v1/schemas.ts"],"names":[],"mappings":"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","file":"schemas.js","sourcesContent":["import { DEFAULT_KALADA_V1_LIMITS } from \"./limits.js\";\n\nexport type KaladaV1JsonSchema = Readonly<Record<string, unknown>>;\n\nconst jsonValue = jsonValueSchema(\"#/$defs/jsonValue\", DEFAULT_KALADA_V1_LIMITS.maxValueNodes - 1);\nconst encodedJsonValue = jsonValueSchema(\n \"#/$defs/encodedJsonValue\",\n DEFAULT_KALADA_V1_LIMITS.maxValueNodes - 2,\n);\n\nfunction jsonValueSchema(reference: string, maxContainerSize: number): Record<string, unknown> {\n return {\n anyOf: [\n { type: \"null\" },\n { type: \"boolean\" },\n { type: \"number\", minimum: -1.7976931348623157e308, maximum: 1.7976931348623157e308 },\n { type: \"string\", maxLength: DEFAULT_KALADA_V1_LIMITS.maxStringLength },\n {\n type: \"array\",\n maxItems: maxContainerSize,\n items: { $ref: reference },\n },\n {\n type: \"object\",\n maxProperties: maxContainerSize,\n propertyNames: {\n allOf: [\n { maxLength: DEFAULT_KALADA_V1_LIMITS.maxStringLength },\n { not: { enum: [\"__proto__\", \"constructor\", \"prototype\"] } },\n ],\n },\n additionalProperties: { $ref: reference },\n },\n ],\n };\n}\n\nconst expression = {\n oneOf: [\n node(\"literal\", { value: { $ref: \"#/$defs/jsonValue\" } }, [\"value\"]),\n node(\n \"ref\",\n {\n ref: {\n type: \"string\",\n minLength: 1,\n maxLength: DEFAULT_KALADA_V1_LIMITS.maxReferenceLength,\n },\n },\n [\"ref\"],\n ),\n node(\"binding\", { name: bindingName(), value: expressionRef(), body: expressionRef() }, [\n \"name\",\n \"value\",\n \"body\",\n ]),\n node(\"option\", { variant: { const: \"none\" } }, [\"variant\"]),\n node(\"option\", { variant: { const: \"some\" }, value: expressionRef() }, [\"variant\", \"value\"]),\n node(\"result\", { variant: { enum: [\"ok\", \"err\"] }, value: expressionRef() }, [\n \"variant\",\n \"value\",\n ]),\n matchNode(\"Option\", [arm(\"some\", true), arm(\"none\", false)]),\n matchNode(\"Result\", [arm(\"ok\", true), arm(\"err\", true)]),\n ],\n};\n\nexport const KALADA_V1_PROGRAM_SCHEMA: KaladaV1JsonSchema = deepFreeze({\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n $id: \"https://kalada.dev/schema/program/kalada-v1\",\n $comment:\n \"The schema enforces canonical shape and local string/container bounds. Aggregate AST depth, AST nodes, value nodes, and evaluation steps remain runtime-authoritative.\",\n type: \"object\",\n properties: {\n format: { const: \"kalada-program\" },\n version: { const: 1 },\n profile: { const: \"kalada-v1\" },\n expression: expressionRef(),\n },\n required: [\"format\", \"version\", \"profile\", \"expression\"],\n additionalProperties: false,\n $defs: { jsonValue, expression },\n});\n\nexport const KALADA_VALUE_V1_SCHEMA: KaladaV1JsonSchema = deepFreeze({\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n $id: \"https://kalada.dev/schema/value/kalada-value-v1\",\n $ref: \"#/$defs/encodedValue\",\n $defs: {\n encodedJsonValue,\n encodedValue: {\n oneOf: [\n valueEnvelope(\"Json\", \"value\", { $ref: \"#/$defs/encodedJsonValue\" }),\n valueEnvelope(\"Option\", \"none\"),\n valueEnvelope(\"Option\", \"some\", { $ref: \"#/$defs/encodedValue\" }),\n valueEnvelope(\"Result\", \"ok\", { $ref: \"#/$defs/encodedValue\" }),\n valueEnvelope(\"Result\", \"err\", { $ref: \"#/$defs/encodedValue\" }),\n ],\n },\n },\n});\n\nfunction node(\n kind: string,\n properties: Record<string, unknown>,\n required: string[],\n): Record<string, unknown> {\n return {\n type: \"object\",\n properties: { kind: { const: kind }, ...properties },\n required: [\"kind\", ...required],\n additionalProperties: false,\n };\n}\n\nfunction matchNode(\n type: \"Option\" | \"Result\",\n arms: readonly Record<string, unknown>[],\n): Record<string, unknown> {\n return node(\n \"match\",\n {\n type: { const: type },\n value: expressionRef(),\n arms: { type: \"array\", prefixItems: arms, minItems: 2, maxItems: 2 },\n },\n [\"type\", \"value\", \"arms\"],\n );\n}\n\nfunction arm(variant: string, payload: boolean): Record<string, unknown> {\n const properties: Record<string, unknown> = {\n variant: { const: variant },\n body: expressionRef(),\n };\n if (payload) properties.binding = bindingName();\n return { type: \"object\", properties, required: [\"variant\", \"body\"], additionalProperties: false };\n}\n\nfunction valueEnvelope(\n type: string,\n variant: string,\n value?: Record<string, unknown>,\n): Record<string, unknown> {\n const properties: Record<string, unknown> = {\n format: { const: \"kalada-value\" },\n version: { const: 1 },\n type: { const: type },\n variant: { const: variant },\n };\n if (value) properties.value = value;\n return {\n type: \"object\",\n properties,\n required: Object.keys(properties),\n additionalProperties: false,\n };\n}\n\nfunction expressionRef(): Record<string, string> {\n return { $ref: \"#/$defs/expression\" };\n}\n\nfunction bindingName(): Record<string, unknown> {\n return { type: \"string\", minLength: 1, maxLength: DEFAULT_KALADA_V1_LIMITS.maxReferenceLength };\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) return value;\n for (const child of Object.values(value)) deepFreeze(child);\n return Object.freeze(value);\n}\n"]}
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+
3
+ //# sourceMappingURL=types.cjs.map
4
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"types.cjs"}
@@ -0,0 +1,91 @@
1
+ import { JsonValue } from './json.cjs';
2
+ import { KaladaValue } from './values.cjs';
3
+
4
+ type KaladaV1Expression<R extends JsonValue = string> = {
5
+ readonly kind: "literal";
6
+ readonly value: JsonValue;
7
+ } | {
8
+ readonly kind: "ref";
9
+ readonly ref: R;
10
+ } | BindingExpression<R> | OptionExpression<R> | ResultExpression<R> | MatchExpression<R>;
11
+ interface BindingExpression<R extends JsonValue> {
12
+ readonly kind: "binding";
13
+ readonly name: string;
14
+ readonly value: KaladaV1Expression<R>;
15
+ readonly body: KaladaV1Expression<R>;
16
+ }
17
+ type OptionExpression<R extends JsonValue> = {
18
+ readonly kind: "option";
19
+ readonly variant: "none";
20
+ } | {
21
+ readonly kind: "option";
22
+ readonly variant: "some";
23
+ readonly value: KaladaV1Expression<R>;
24
+ };
25
+ interface ResultExpression<R extends JsonValue> {
26
+ readonly kind: "result";
27
+ readonly variant: "ok" | "err";
28
+ readonly value: KaladaV1Expression<R>;
29
+ }
30
+ interface MatchExpression<R extends JsonValue> {
31
+ readonly kind: "match";
32
+ readonly type: "Option" | "Result";
33
+ readonly value: KaladaV1Expression<R>;
34
+ readonly arms: readonly MatchArm<R>[];
35
+ }
36
+ interface MatchArm<R extends JsonValue> {
37
+ readonly variant: "some" | "none" | "ok" | "err";
38
+ readonly binding?: string;
39
+ readonly body: KaladaV1Expression<R>;
40
+ }
41
+ interface KaladaV1Program<R extends JsonValue = string> {
42
+ readonly format: "kalada-program";
43
+ readonly version: 1;
44
+ readonly profile: "kalada-v1";
45
+ readonly expression: KaladaV1Expression<R>;
46
+ }
47
+ type KaladaV1DiagnosticCode = "KALADA_INVALID_INPUT" | "KALADA_LIMIT_EXCEEDED" | "KALADA_INVALID_REFERENCE" | "KALADA_MATCH_MISSING_ARM" | "KALADA_MATCH_DUPLICATE_ARM" | "KALADA_MATCH_UNKNOWN_ARM" | "KALADA_MATCH_UNREACHABLE_ARM" | "KALADA_MATCH_TYPE_MISMATCH" | "KALADA_REFERENCE_ERROR" | "KALADA_REFERENCE_MISSING" | "KALADA_REFERENCE_DENIED" | "KALADA_ASYNC_UNSUPPORTED" | "KALADA_INVALID_RESULT" | "KALADA_EVALUATION_LIMIT";
48
+ interface KaladaV1Diagnostic {
49
+ readonly code: KaladaV1DiagnosticCode;
50
+ readonly path: readonly (string | number)[];
51
+ readonly message: string;
52
+ }
53
+ type KaladaV1Outcome<T> = {
54
+ readonly ok: true;
55
+ readonly value: T;
56
+ } | {
57
+ readonly ok: false;
58
+ readonly diagnostic: KaladaV1Diagnostic;
59
+ };
60
+ interface KaladaV1Limits {
61
+ readonly maxAstDepth: number;
62
+ readonly maxAstNodes: number;
63
+ readonly maxValueDepth: number;
64
+ readonly maxValueNodes: number;
65
+ readonly maxStringLength: number;
66
+ readonly maxReferenceLength: number;
67
+ readonly maxEvaluationSteps: number;
68
+ }
69
+ interface KaladaV1ReferenceCodec<R extends JsonValue> {
70
+ readonly validate: (input: unknown) => input is R;
71
+ readonly canonicalize?: (reference: R) => R;
72
+ }
73
+ interface KaladaV1Options<R extends JsonValue> {
74
+ readonly reference?: KaladaV1ReferenceCodec<R>;
75
+ readonly limits?: Partial<KaladaV1Limits>;
76
+ }
77
+ type KaladaV1Resolution = {
78
+ readonly found: true;
79
+ readonly value: KaladaValue;
80
+ } | {
81
+ readonly found: false;
82
+ readonly reason?: "missing" | "denied";
83
+ };
84
+ type KaladaV1Resolver<R extends JsonValue> = (reference: R) => KaladaV1Resolution;
85
+ interface CompiledKaladaV1Program<R extends JsonValue> {
86
+ readonly program: KaladaV1Program<R>;
87
+ readonly dependencies: readonly R[];
88
+ evaluate(resolve: KaladaV1Resolver<R>): KaladaV1Outcome<KaladaValue>;
89
+ }
90
+
91
+ export type { BindingExpression, CompiledKaladaV1Program, KaladaV1Diagnostic, KaladaV1DiagnosticCode, KaladaV1Expression, KaladaV1Limits, KaladaV1Options, KaladaV1Outcome, KaladaV1Program, KaladaV1ReferenceCodec, KaladaV1Resolution, KaladaV1Resolver, MatchArm, MatchExpression, OptionExpression, ResultExpression };
@@ -0,0 +1,91 @@
1
+ import { JsonValue } from './json.js';
2
+ import { KaladaValue } from './values.js';
3
+
4
+ type KaladaV1Expression<R extends JsonValue = string> = {
5
+ readonly kind: "literal";
6
+ readonly value: JsonValue;
7
+ } | {
8
+ readonly kind: "ref";
9
+ readonly ref: R;
10
+ } | BindingExpression<R> | OptionExpression<R> | ResultExpression<R> | MatchExpression<R>;
11
+ interface BindingExpression<R extends JsonValue> {
12
+ readonly kind: "binding";
13
+ readonly name: string;
14
+ readonly value: KaladaV1Expression<R>;
15
+ readonly body: KaladaV1Expression<R>;
16
+ }
17
+ type OptionExpression<R extends JsonValue> = {
18
+ readonly kind: "option";
19
+ readonly variant: "none";
20
+ } | {
21
+ readonly kind: "option";
22
+ readonly variant: "some";
23
+ readonly value: KaladaV1Expression<R>;
24
+ };
25
+ interface ResultExpression<R extends JsonValue> {
26
+ readonly kind: "result";
27
+ readonly variant: "ok" | "err";
28
+ readonly value: KaladaV1Expression<R>;
29
+ }
30
+ interface MatchExpression<R extends JsonValue> {
31
+ readonly kind: "match";
32
+ readonly type: "Option" | "Result";
33
+ readonly value: KaladaV1Expression<R>;
34
+ readonly arms: readonly MatchArm<R>[];
35
+ }
36
+ interface MatchArm<R extends JsonValue> {
37
+ readonly variant: "some" | "none" | "ok" | "err";
38
+ readonly binding?: string;
39
+ readonly body: KaladaV1Expression<R>;
40
+ }
41
+ interface KaladaV1Program<R extends JsonValue = string> {
42
+ readonly format: "kalada-program";
43
+ readonly version: 1;
44
+ readonly profile: "kalada-v1";
45
+ readonly expression: KaladaV1Expression<R>;
46
+ }
47
+ type KaladaV1DiagnosticCode = "KALADA_INVALID_INPUT" | "KALADA_LIMIT_EXCEEDED" | "KALADA_INVALID_REFERENCE" | "KALADA_MATCH_MISSING_ARM" | "KALADA_MATCH_DUPLICATE_ARM" | "KALADA_MATCH_UNKNOWN_ARM" | "KALADA_MATCH_UNREACHABLE_ARM" | "KALADA_MATCH_TYPE_MISMATCH" | "KALADA_REFERENCE_ERROR" | "KALADA_REFERENCE_MISSING" | "KALADA_REFERENCE_DENIED" | "KALADA_ASYNC_UNSUPPORTED" | "KALADA_INVALID_RESULT" | "KALADA_EVALUATION_LIMIT";
48
+ interface KaladaV1Diagnostic {
49
+ readonly code: KaladaV1DiagnosticCode;
50
+ readonly path: readonly (string | number)[];
51
+ readonly message: string;
52
+ }
53
+ type KaladaV1Outcome<T> = {
54
+ readonly ok: true;
55
+ readonly value: T;
56
+ } | {
57
+ readonly ok: false;
58
+ readonly diagnostic: KaladaV1Diagnostic;
59
+ };
60
+ interface KaladaV1Limits {
61
+ readonly maxAstDepth: number;
62
+ readonly maxAstNodes: number;
63
+ readonly maxValueDepth: number;
64
+ readonly maxValueNodes: number;
65
+ readonly maxStringLength: number;
66
+ readonly maxReferenceLength: number;
67
+ readonly maxEvaluationSteps: number;
68
+ }
69
+ interface KaladaV1ReferenceCodec<R extends JsonValue> {
70
+ readonly validate: (input: unknown) => input is R;
71
+ readonly canonicalize?: (reference: R) => R;
72
+ }
73
+ interface KaladaV1Options<R extends JsonValue> {
74
+ readonly reference?: KaladaV1ReferenceCodec<R>;
75
+ readonly limits?: Partial<KaladaV1Limits>;
76
+ }
77
+ type KaladaV1Resolution = {
78
+ readonly found: true;
79
+ readonly value: KaladaValue;
80
+ } | {
81
+ readonly found: false;
82
+ readonly reason?: "missing" | "denied";
83
+ };
84
+ type KaladaV1Resolver<R extends JsonValue> = (reference: R) => KaladaV1Resolution;
85
+ interface CompiledKaladaV1Program<R extends JsonValue> {
86
+ readonly program: KaladaV1Program<R>;
87
+ readonly dependencies: readonly R[];
88
+ evaluate(resolve: KaladaV1Resolver<R>): KaladaV1Outcome<KaladaValue>;
89
+ }
90
+
91
+ export type { BindingExpression, CompiledKaladaV1Program, KaladaV1Diagnostic, KaladaV1DiagnosticCode, KaladaV1Expression, KaladaV1Limits, KaladaV1Options, KaladaV1Outcome, KaladaV1Program, KaladaV1ReferenceCodec, KaladaV1Resolution, KaladaV1Resolver, MatchArm, MatchExpression, OptionExpression, ResultExpression };
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=types.js.map
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"types.js"}