@kalada/core 0.0.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 (94) hide show
  1. package/README.md +10 -0
  2. package/THIRD_PARTY_NOTICES.md +42 -0
  3. package/dist/index.cjs +20 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +2 -0
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.js +3 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/kuery-v1/callback-promise.cjs +79 -0
  10. package/dist/kuery-v1/callback-promise.cjs.map +1 -0
  11. package/dist/kuery-v1/callback-promise.d.cts +4 -0
  12. package/dist/kuery-v1/callback-promise.d.ts +4 -0
  13. package/dist/kuery-v1/callback-promise.js +77 -0
  14. package/dist/kuery-v1/callback-promise.js.map +1 -0
  15. package/dist/kuery-v1/canonicalize.cjs +181 -0
  16. package/dist/kuery-v1/canonicalize.cjs.map +1 -0
  17. package/dist/kuery-v1/canonicalize.d.cts +7 -0
  18. package/dist/kuery-v1/canonicalize.d.ts +7 -0
  19. package/dist/kuery-v1/canonicalize.js +178 -0
  20. package/dist/kuery-v1/canonicalize.js.map +1 -0
  21. package/dist/kuery-v1/compile.cjs +53 -0
  22. package/dist/kuery-v1/compile.cjs.map +1 -0
  23. package/dist/kuery-v1/compile.d.cts +10 -0
  24. package/dist/kuery-v1/compile.d.ts +10 -0
  25. package/dist/kuery-v1/compile.js +51 -0
  26. package/dist/kuery-v1/compile.js.map +1 -0
  27. package/dist/kuery-v1/dependencies.cjs +32 -0
  28. package/dist/kuery-v1/dependencies.cjs.map +1 -0
  29. package/dist/kuery-v1/dependencies.d.cts +7 -0
  30. package/dist/kuery-v1/dependencies.d.ts +7 -0
  31. package/dist/kuery-v1/dependencies.js +29 -0
  32. package/dist/kuery-v1/dependencies.js.map +1 -0
  33. package/dist/kuery-v1/evaluate.cjs +174 -0
  34. package/dist/kuery-v1/evaluate.cjs.map +1 -0
  35. package/dist/kuery-v1/evaluate.d.cts +6 -0
  36. package/dist/kuery-v1/evaluate.d.ts +6 -0
  37. package/dist/kuery-v1/evaluate.js +172 -0
  38. package/dist/kuery-v1/evaluate.js.map +1 -0
  39. package/dist/kuery-v1/index.cjs +54 -0
  40. package/dist/kuery-v1/index.cjs.map +1 -0
  41. package/dist/kuery-v1/index.d.cts +8 -0
  42. package/dist/kuery-v1/index.d.ts +8 -0
  43. package/dist/kuery-v1/index.js +9 -0
  44. package/dist/kuery-v1/index.js.map +1 -0
  45. package/dist/kuery-v1/inspect.cjs +167 -0
  46. package/dist/kuery-v1/inspect.cjs.map +1 -0
  47. package/dist/kuery-v1/inspect.d.cts +17 -0
  48. package/dist/kuery-v1/inspect.d.ts +17 -0
  49. package/dist/kuery-v1/inspect.js +160 -0
  50. package/dist/kuery-v1/inspect.js.map +1 -0
  51. package/dist/kuery-v1/json-schema.cjs +108 -0
  52. package/dist/kuery-v1/json-schema.cjs.map +1 -0
  53. package/dist/kuery-v1/json-schema.d.cts +10 -0
  54. package/dist/kuery-v1/json-schema.d.ts +10 -0
  55. package/dist/kuery-v1/json-schema.js +105 -0
  56. package/dist/kuery-v1/json-schema.js.map +1 -0
  57. package/dist/kuery-v1/limits.cjs +35 -0
  58. package/dist/kuery-v1/limits.cjs.map +1 -0
  59. package/dist/kuery-v1/limits.d.cts +6 -0
  60. package/dist/kuery-v1/limits.d.ts +6 -0
  61. package/dist/kuery-v1/limits.js +32 -0
  62. package/dist/kuery-v1/limits.js.map +1 -0
  63. package/dist/kuery-v1/profile.cjs +224 -0
  64. package/dist/kuery-v1/profile.cjs.map +1 -0
  65. package/dist/kuery-v1/profile.d.cts +48 -0
  66. package/dist/kuery-v1/profile.d.ts +48 -0
  67. package/dist/kuery-v1/profile.js +219 -0
  68. package/dist/kuery-v1/profile.js.map +1 -0
  69. package/dist/kuery-v1/result.cjs +44 -0
  70. package/dist/kuery-v1/result.cjs.map +1 -0
  71. package/dist/kuery-v1/result.d.cts +12 -0
  72. package/dist/kuery-v1/result.d.ts +12 -0
  73. package/dist/kuery-v1/result.js +39 -0
  74. package/dist/kuery-v1/result.js.map +1 -0
  75. package/dist/kuery-v1/standard-profile.cjs +173 -0
  76. package/dist/kuery-v1/standard-profile.cjs.map +1 -0
  77. package/dist/kuery-v1/standard-profile.d.cts +7 -0
  78. package/dist/kuery-v1/standard-profile.d.ts +7 -0
  79. package/dist/kuery-v1/standard-profile.js +171 -0
  80. package/dist/kuery-v1/standard-profile.js.map +1 -0
  81. package/dist/kuery-v1/types.cjs +4 -0
  82. package/dist/kuery-v1/types.cjs.map +1 -0
  83. package/dist/kuery-v1/types.d.cts +65 -0
  84. package/dist/kuery-v1/types.d.ts +65 -0
  85. package/dist/kuery-v1/types.js +3 -0
  86. package/dist/kuery-v1/types.js.map +1 -0
  87. package/dist/program-v1.cjs +72 -0
  88. package/dist/program-v1.cjs.map +1 -0
  89. package/dist/program-v1.d.cts +17 -0
  90. package/dist/program-v1.d.ts +17 -0
  91. package/dist/program-v1.js +68 -0
  92. package/dist/program-v1.js.map +1 -0
  93. package/package.json +51 -0
  94. package/provenance/kuery-2.1.0.json +93 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/kuery-v1/evaluate.ts"],"names":["failure","success","ExpressionFailure","rejectCallbackPromise","internalProfile","cloneJson"],"mappings":"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","file":"evaluate.cjs","sourcesContent":["import { rejectCallbackPromise } from \"./callback-promise.js\";\nimport { cloneJson } from \"./inspect.js\";\nimport { type ExpressionOperator, type ExpressionValueType, internalProfile } from \"./profile.js\";\nimport { ExpressionFailure, failure, success } from \"./result.js\";\nimport type {\n ExpressionLimits,\n ExpressionPath,\n JsonValue,\n ReferenceResolver,\n Result,\n ValueExpression,\n} from \"./types.js\";\n\ninterface EvaluationState<R extends JsonValue> {\n readonly resolve: ReferenceResolver<R>;\n readonly operators: ReadonlyMap<ValueExpression<R>, ExpressionOperator>;\n readonly limits: ExpressionLimits;\n steps: number;\n}\n\ninterface Outcome {\n readonly found: boolean;\n readonly value?: JsonValue;\n readonly denied?: boolean;\n readonly path?: ExpressionPath;\n}\n\ntype ParsedResolution = { readonly valid: false } | Outcome;\n\nexport function evaluateCompiled<R extends JsonValue>(\n expression: ValueExpression<R>,\n resolve: ReferenceResolver<R>,\n operators: ReadonlyMap<ValueExpression<R>, ExpressionOperator>,\n limits: ExpressionLimits,\n): Result<JsonValue> {\n const state: EvaluationState<R> = { resolve, operators, limits, steps: 0 };\n try {\n const outcome = evaluateNode(expression, [], state);\n if (!outcome.found) {\n return failure(\n outcome.denied ? \"EXPRESSION_REFERENCE_DENIED\" : \"EXPRESSION_REFERENCE_MISSING\",\n outcome.path ?? [],\n );\n }\n return success(outcome.value!);\n } catch (error) {\n const problem =\n error instanceof ExpressionFailure\n ? error\n : new ExpressionFailure(\"EXPRESSION_OPERATOR_ERROR\", []);\n return failure(problem.code, problem.expressionPath);\n }\n}\n\nfunction evaluateNode<R extends JsonValue>(\n node: ValueExpression<R>,\n path: ExpressionPath,\n state: EvaluationState<R>,\n): Outcome {\n state.steps += 1;\n if (state.steps > state.limits.maxEvaluationSteps) {\n throw new ExpressionFailure(\"EXPRESSION_EVALUATION_LIMIT\", path);\n }\n if (node.kind === \"literal\") return { found: true, value: node.value };\n if (node.kind === \"ref\") return resolveReference(node.ref, path, state.resolve, state.limits);\n const operator = state.operators.get(node);\n if (!operator) throw new ExpressionFailure(\"EXPRESSION_UNKNOWN_OPERATOR\", [...path, \"op\"]);\n return evaluateOperator(node, operator, path, state);\n}\n\nfunction resolveReference<R extends JsonValue>(\n reference: R,\n path: ExpressionPath,\n resolve: ReferenceResolver<R>,\n limits: ExpressionLimits,\n): Outcome {\n try {\n const result: unknown = resolve(reference);\n if (rejectCallbackPromise(result))\n throw new ExpressionFailure(\"EXPRESSION_ASYNC_UNSUPPORTED\", path);\n const parsed = parseResolution(result);\n if (!parsed.valid) throw new ExpressionFailure(\"EXPRESSION_REFERENCE_ERROR\", path);\n if (!parsed.found) return { ...parsed, path };\n return { found: true, value: safeCallbackValue(parsed.value, path, limits) };\n } catch (error) {\n if (error instanceof ExpressionFailure) throw error;\n throw new ExpressionFailure(\"EXPRESSION_REFERENCE_ERROR\", path);\n }\n}\n\nfunction parseResolution(input: unknown): ParsedResolution & { readonly valid: boolean } {\n if (typeof input !== \"object\" || input === null) return { valid: false };\n try {\n const prototype = Object.getPrototypeOf(input);\n if (prototype !== Object.prototype && prototype !== null) return { valid: false };\n const found = Object.getOwnPropertyDescriptor(input, \"found\");\n if (!found || !(\"value\" in found) || !found.enumerable || typeof found.value !== \"boolean\")\n return { valid: false };\n const keys = Reflect.ownKeys(input);\n if (!found.value) return parseMissingResolution(input, keys);\n const value = Object.getOwnPropertyDescriptor(input, \"value\");\n if (\n keys.length !== 2 ||\n !keys.every((key) => key === \"found\" || key === \"value\") ||\n !value ||\n !(\"value\" in value) ||\n !value.enumerable\n ) {\n return { valid: false };\n }\n return { valid: true, found: true, value: value.value };\n } catch {\n return { valid: false };\n }\n}\n\nfunction parseMissingResolution(\n input: object,\n keys: readonly PropertyKey[],\n): ParsedResolution & { readonly valid: boolean } {\n if (keys.length === 1 && keys[0] === \"found\") return { valid: true, found: false };\n if (keys.length !== 2 || !keys.includes(\"found\") || !keys.includes(\"reason\"))\n return { valid: false };\n const reason = Object.getOwnPropertyDescriptor(input, \"reason\");\n if (!reason || !(\"value\" in reason) || !reason.enumerable) return { valid: false };\n if (reason.value === undefined || reason.value === \"missing\")\n return { valid: true, found: false };\n if (reason.value === \"denied\") return { valid: true, found: false, denied: true };\n return { valid: false };\n}\n\nfunction evaluateOperator<R extends JsonValue>(\n node: Extract<ValueExpression<R>, { kind: \"op\" }>,\n operator: ExpressionOperator,\n path: ExpressionPath,\n state: EvaluationState<R>,\n): Outcome {\n const strategy = internalProfile.getEvaluationStrategy(operator);\n if (strategy === \"exists\") return evaluateExists(node.args[0]!, [...path, \"args\", 0], state);\n if (strategy === \"and\" || strategy === \"or\") return evaluateBoolean(node, strategy, path, state);\n if (strategy === \"coalesce\") return evaluateCoalesce(node, path, state);\n if (strategy === \"if\") return evaluateIf(node, path, state);\n const args: JsonValue[] = [];\n for (let index = 0; index < node.args.length; index += 1) {\n const argPath = [...path, \"args\", index];\n const outcome = evaluateNode(node.args[index]!, argPath, state);\n if (!outcome.found) return outcome;\n args.push(outcome.value!);\n }\n return { found: true, value: execute(operator, args, path, state.limits) };\n}\n\nfunction evaluateExists<R extends JsonValue>(\n argument: ValueExpression<R>,\n path: ExpressionPath,\n state: EvaluationState<R>,\n): Outcome {\n const outcome = evaluateNode(argument, path, state);\n if (outcome.denied)\n throw new ExpressionFailure(\"EXPRESSION_REFERENCE_DENIED\", outcome.path ?? path);\n return { found: true, value: outcome.found };\n}\n\nfunction evaluateBoolean<R extends JsonValue>(\n node: Extract<ValueExpression<R>, { kind: \"op\" }>,\n strategy: \"and\" | \"or\",\n path: ExpressionPath,\n state: EvaluationState<R>,\n): Outcome {\n const expected = strategy === \"and\";\n for (let index = 0; index < node.args.length; index += 1) {\n const argPath = [...path, \"args\", index];\n const outcome = evaluateNode(node.args[index]!, argPath, state);\n if (!outcome.found) return outcome;\n const value = outcome.value!;\n assertType(value, \"boolean\", argPath);\n if (value !== expected) return { found: true, value: !expected };\n }\n return { found: true, value: expected };\n}\n\nfunction evaluateIf<R extends JsonValue>(\n node: Extract<ValueExpression<R>, { kind: \"op\" }>,\n path: ExpressionPath,\n state: EvaluationState<R>,\n): Outcome {\n const conditionPath = [...path, \"args\", 0];\n const condition = evaluateNode(node.args[0]!, conditionPath, state);\n if (!condition.found) return condition;\n assertType(condition.value!, \"boolean\", conditionPath);\n const selected = condition.value ? 1 : 2;\n return evaluateNode(node.args[selected]!, [...path, \"args\", selected], state);\n}\n\nfunction evaluateCoalesce<R extends JsonValue>(\n node: Extract<ValueExpression<R>, { kind: \"op\" }>,\n path: ExpressionPath,\n state: EvaluationState<R>,\n): Outcome {\n for (let index = 0; index < node.args.length; index += 1) {\n const argPath = [...path, \"args\", index];\n const outcome = evaluateNode(node.args[index]!, argPath, state);\n if (outcome.denied)\n throw new ExpressionFailure(\"EXPRESSION_REFERENCE_DENIED\", outcome.path ?? argPath);\n if (outcome.found && outcome.value !== null) return outcome;\n }\n return { found: true, value: null };\n}\n\nfunction execute(\n operator: ExpressionOperator,\n args: readonly JsonValue[],\n path: ExpressionPath,\n limits: ExpressionLimits,\n): JsonValue {\n validateInputTypes(operator, args, path);\n try {\n const result: unknown = operator.execute(Object.freeze([...args]));\n if (rejectCallbackPromise(result))\n throw new ExpressionFailure(\"EXPRESSION_ASYNC_UNSUPPORTED\", path);\n const value = safeCallbackValue(result, path, limits);\n if (operator.resultType) assertType(value, operator.resultType, path);\n return value;\n } catch (error) {\n if (error instanceof ExpressionFailure) throw new ExpressionFailure(error.code, path);\n throw new ExpressionFailure(\"EXPRESSION_OPERATOR_ERROR\", path);\n }\n}\n\nfunction validateInputTypes(\n operator: ExpressionOperator,\n args: readonly JsonValue[],\n path: ExpressionPath,\n): void {\n if (!operator.inputTypes) return;\n args.forEach((value, index) => {\n const expected = operator.inputTypes![index] ?? operator.inputTypes![0];\n if (expected) assertType(value, expected, [...path, \"args\", index]);\n });\n}\n\nfunction assertType(value: JsonValue, expected: ExpressionValueType, path: ExpressionPath): void {\n if (expected === \"any\") return;\n const actual = value === null ? \"null\" : Array.isArray(value) ? \"array\" : typeof value;\n if (actual !== expected) throw new ExpressionFailure(\"EXPRESSION_TYPE_MISMATCH\", path);\n}\n\nfunction safeCallbackValue(\n input: unknown,\n path: ExpressionPath,\n limits: ExpressionLimits,\n): JsonValue {\n try {\n return cloneJson(input, path, 0, {\n maxDepth: limits.maxDepth,\n maxNodes: limits.maxNodes,\n maxStringLength: limits.maxStringLength,\n nodes: 0,\n active: new WeakSet(),\n });\n } catch (error) {\n if (error instanceof ExpressionFailure && error.code === \"EXPRESSION_LIMIT_EXCEEDED\")\n throw error;\n throw new ExpressionFailure(\"EXPRESSION_INVALID_RESULT\", path);\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import { ExpressionOperator } from './profile.cjs';
2
+ import { JsonValue, ValueExpression, ReferenceResolver, ExpressionLimits, Result } from './types.cjs';
3
+
4
+ declare function evaluateCompiled<R extends JsonValue>(expression: ValueExpression<R>, resolve: ReferenceResolver<R>, operators: ReadonlyMap<ValueExpression<R>, ExpressionOperator>, limits: ExpressionLimits): Result<JsonValue>;
5
+
6
+ export { evaluateCompiled };
@@ -0,0 +1,6 @@
1
+ import { ExpressionOperator } from './profile.js';
2
+ import { JsonValue, ValueExpression, ReferenceResolver, ExpressionLimits, Result } from './types.js';
3
+
4
+ declare function evaluateCompiled<R extends JsonValue>(expression: ValueExpression<R>, resolve: ReferenceResolver<R>, operators: ReadonlyMap<ValueExpression<R>, ExpressionOperator>, limits: ExpressionLimits): Result<JsonValue>;
5
+
6
+ export { evaluateCompiled };
@@ -0,0 +1,172 @@
1
+ import { rejectCallbackPromise } from './callback-promise.js';
2
+ import { cloneJson } from './inspect.js';
3
+ import { internalProfile } from './profile.js';
4
+ import { failure, success, ExpressionFailure } from './result.js';
5
+
6
+ function evaluateCompiled(expression, resolve, operators, limits) {
7
+ const state = { resolve, operators, limits, steps: 0 };
8
+ try {
9
+ const outcome = evaluateNode(expression, [], state);
10
+ if (!outcome.found) {
11
+ return failure(
12
+ outcome.denied ? "EXPRESSION_REFERENCE_DENIED" : "EXPRESSION_REFERENCE_MISSING",
13
+ outcome.path ?? []
14
+ );
15
+ }
16
+ return success(outcome.value);
17
+ } catch (error) {
18
+ const problem = error instanceof ExpressionFailure ? error : new ExpressionFailure("EXPRESSION_OPERATOR_ERROR", []);
19
+ return failure(problem.code, problem.expressionPath);
20
+ }
21
+ }
22
+ function evaluateNode(node, path, state) {
23
+ state.steps += 1;
24
+ if (state.steps > state.limits.maxEvaluationSteps) {
25
+ throw new ExpressionFailure("EXPRESSION_EVALUATION_LIMIT", path);
26
+ }
27
+ if (node.kind === "literal") return { found: true, value: node.value };
28
+ if (node.kind === "ref") return resolveReference(node.ref, path, state.resolve, state.limits);
29
+ const operator = state.operators.get(node);
30
+ if (!operator) throw new ExpressionFailure("EXPRESSION_UNKNOWN_OPERATOR", [...path, "op"]);
31
+ return evaluateOperator(node, operator, path, state);
32
+ }
33
+ function resolveReference(reference, path, resolve, limits) {
34
+ try {
35
+ const result = resolve(reference);
36
+ if (rejectCallbackPromise(result))
37
+ throw new ExpressionFailure("EXPRESSION_ASYNC_UNSUPPORTED", path);
38
+ const parsed = parseResolution(result);
39
+ if (!parsed.valid) throw new ExpressionFailure("EXPRESSION_REFERENCE_ERROR", path);
40
+ if (!parsed.found) return { ...parsed, path };
41
+ return { found: true, value: safeCallbackValue(parsed.value, path, limits) };
42
+ } catch (error) {
43
+ if (error instanceof ExpressionFailure) throw error;
44
+ throw new ExpressionFailure("EXPRESSION_REFERENCE_ERROR", path);
45
+ }
46
+ }
47
+ function parseResolution(input) {
48
+ if (typeof input !== "object" || input === null) return { valid: false };
49
+ try {
50
+ const prototype = Object.getPrototypeOf(input);
51
+ if (prototype !== Object.prototype && prototype !== null) return { valid: false };
52
+ const found = Object.getOwnPropertyDescriptor(input, "found");
53
+ if (!found || !("value" in found) || !found.enumerable || typeof found.value !== "boolean")
54
+ return { valid: false };
55
+ const keys = Reflect.ownKeys(input);
56
+ if (!found.value) return parseMissingResolution(input, keys);
57
+ const value = Object.getOwnPropertyDescriptor(input, "value");
58
+ if (keys.length !== 2 || !keys.every((key) => key === "found" || key === "value") || !value || !("value" in value) || !value.enumerable) {
59
+ return { valid: false };
60
+ }
61
+ return { valid: true, found: true, value: value.value };
62
+ } catch {
63
+ return { valid: false };
64
+ }
65
+ }
66
+ function parseMissingResolution(input, keys) {
67
+ if (keys.length === 1 && keys[0] === "found") return { valid: true, found: false };
68
+ if (keys.length !== 2 || !keys.includes("found") || !keys.includes("reason"))
69
+ return { valid: false };
70
+ const reason = Object.getOwnPropertyDescriptor(input, "reason");
71
+ if (!reason || !("value" in reason) || !reason.enumerable) return { valid: false };
72
+ if (reason.value === void 0 || reason.value === "missing")
73
+ return { valid: true, found: false };
74
+ if (reason.value === "denied") return { valid: true, found: false, denied: true };
75
+ return { valid: false };
76
+ }
77
+ function evaluateOperator(node, operator, path, state) {
78
+ const strategy = internalProfile.getEvaluationStrategy(operator);
79
+ if (strategy === "exists") return evaluateExists(node.args[0], [...path, "args", 0], state);
80
+ if (strategy === "and" || strategy === "or") return evaluateBoolean(node, strategy, path, state);
81
+ if (strategy === "coalesce") return evaluateCoalesce(node, path, state);
82
+ if (strategy === "if") return evaluateIf(node, path, state);
83
+ const args = [];
84
+ for (let index = 0; index < node.args.length; index += 1) {
85
+ const argPath = [...path, "args", index];
86
+ const outcome = evaluateNode(node.args[index], argPath, state);
87
+ if (!outcome.found) return outcome;
88
+ args.push(outcome.value);
89
+ }
90
+ return { found: true, value: execute(operator, args, path, state.limits) };
91
+ }
92
+ function evaluateExists(argument, path, state) {
93
+ const outcome = evaluateNode(argument, path, state);
94
+ if (outcome.denied)
95
+ throw new ExpressionFailure("EXPRESSION_REFERENCE_DENIED", outcome.path ?? path);
96
+ return { found: true, value: outcome.found };
97
+ }
98
+ function evaluateBoolean(node, strategy, path, state) {
99
+ const expected = strategy === "and";
100
+ for (let index = 0; index < node.args.length; index += 1) {
101
+ const argPath = [...path, "args", index];
102
+ const outcome = evaluateNode(node.args[index], argPath, state);
103
+ if (!outcome.found) return outcome;
104
+ const value = outcome.value;
105
+ assertType(value, "boolean", argPath);
106
+ if (value !== expected) return { found: true, value: !expected };
107
+ }
108
+ return { found: true, value: expected };
109
+ }
110
+ function evaluateIf(node, path, state) {
111
+ const conditionPath = [...path, "args", 0];
112
+ const condition = evaluateNode(node.args[0], conditionPath, state);
113
+ if (!condition.found) return condition;
114
+ assertType(condition.value, "boolean", conditionPath);
115
+ const selected = condition.value ? 1 : 2;
116
+ return evaluateNode(node.args[selected], [...path, "args", selected], state);
117
+ }
118
+ function evaluateCoalesce(node, path, state) {
119
+ for (let index = 0; index < node.args.length; index += 1) {
120
+ const argPath = [...path, "args", index];
121
+ const outcome = evaluateNode(node.args[index], argPath, state);
122
+ if (outcome.denied)
123
+ throw new ExpressionFailure("EXPRESSION_REFERENCE_DENIED", outcome.path ?? argPath);
124
+ if (outcome.found && outcome.value !== null) return outcome;
125
+ }
126
+ return { found: true, value: null };
127
+ }
128
+ function execute(operator, args, path, limits) {
129
+ validateInputTypes(operator, args, path);
130
+ try {
131
+ const result = operator.execute(Object.freeze([...args]));
132
+ if (rejectCallbackPromise(result))
133
+ throw new ExpressionFailure("EXPRESSION_ASYNC_UNSUPPORTED", path);
134
+ const value = safeCallbackValue(result, path, limits);
135
+ if (operator.resultType) assertType(value, operator.resultType, path);
136
+ return value;
137
+ } catch (error) {
138
+ if (error instanceof ExpressionFailure) throw new ExpressionFailure(error.code, path);
139
+ throw new ExpressionFailure("EXPRESSION_OPERATOR_ERROR", path);
140
+ }
141
+ }
142
+ function validateInputTypes(operator, args, path) {
143
+ if (!operator.inputTypes) return;
144
+ args.forEach((value, index) => {
145
+ const expected = operator.inputTypes[index] ?? operator.inputTypes[0];
146
+ if (expected) assertType(value, expected, [...path, "args", index]);
147
+ });
148
+ }
149
+ function assertType(value, expected, path) {
150
+ if (expected === "any") return;
151
+ const actual = value === null ? "null" : Array.isArray(value) ? "array" : typeof value;
152
+ if (actual !== expected) throw new ExpressionFailure("EXPRESSION_TYPE_MISMATCH", path);
153
+ }
154
+ function safeCallbackValue(input, path, limits) {
155
+ try {
156
+ return cloneJson(input, path, 0, {
157
+ maxDepth: limits.maxDepth,
158
+ maxNodes: limits.maxNodes,
159
+ maxStringLength: limits.maxStringLength,
160
+ nodes: 0,
161
+ active: /* @__PURE__ */ new WeakSet()
162
+ });
163
+ } catch (error) {
164
+ if (error instanceof ExpressionFailure && error.code === "EXPRESSION_LIMIT_EXCEEDED")
165
+ throw error;
166
+ throw new ExpressionFailure("EXPRESSION_INVALID_RESULT", path);
167
+ }
168
+ }
169
+
170
+ export { evaluateCompiled };
171
+ //# sourceMappingURL=evaluate.js.map
172
+ //# sourceMappingURL=evaluate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/kuery-v1/evaluate.ts"],"names":[],"mappings":"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","file":"evaluate.js","sourcesContent":["import { rejectCallbackPromise } from \"./callback-promise.js\";\nimport { cloneJson } from \"./inspect.js\";\nimport { type ExpressionOperator, type ExpressionValueType, internalProfile } from \"./profile.js\";\nimport { ExpressionFailure, failure, success } from \"./result.js\";\nimport type {\n ExpressionLimits,\n ExpressionPath,\n JsonValue,\n ReferenceResolver,\n Result,\n ValueExpression,\n} from \"./types.js\";\n\ninterface EvaluationState<R extends JsonValue> {\n readonly resolve: ReferenceResolver<R>;\n readonly operators: ReadonlyMap<ValueExpression<R>, ExpressionOperator>;\n readonly limits: ExpressionLimits;\n steps: number;\n}\n\ninterface Outcome {\n readonly found: boolean;\n readonly value?: JsonValue;\n readonly denied?: boolean;\n readonly path?: ExpressionPath;\n}\n\ntype ParsedResolution = { readonly valid: false } | Outcome;\n\nexport function evaluateCompiled<R extends JsonValue>(\n expression: ValueExpression<R>,\n resolve: ReferenceResolver<R>,\n operators: ReadonlyMap<ValueExpression<R>, ExpressionOperator>,\n limits: ExpressionLimits,\n): Result<JsonValue> {\n const state: EvaluationState<R> = { resolve, operators, limits, steps: 0 };\n try {\n const outcome = evaluateNode(expression, [], state);\n if (!outcome.found) {\n return failure(\n outcome.denied ? \"EXPRESSION_REFERENCE_DENIED\" : \"EXPRESSION_REFERENCE_MISSING\",\n outcome.path ?? [],\n );\n }\n return success(outcome.value!);\n } catch (error) {\n const problem =\n error instanceof ExpressionFailure\n ? error\n : new ExpressionFailure(\"EXPRESSION_OPERATOR_ERROR\", []);\n return failure(problem.code, problem.expressionPath);\n }\n}\n\nfunction evaluateNode<R extends JsonValue>(\n node: ValueExpression<R>,\n path: ExpressionPath,\n state: EvaluationState<R>,\n): Outcome {\n state.steps += 1;\n if (state.steps > state.limits.maxEvaluationSteps) {\n throw new ExpressionFailure(\"EXPRESSION_EVALUATION_LIMIT\", path);\n }\n if (node.kind === \"literal\") return { found: true, value: node.value };\n if (node.kind === \"ref\") return resolveReference(node.ref, path, state.resolve, state.limits);\n const operator = state.operators.get(node);\n if (!operator) throw new ExpressionFailure(\"EXPRESSION_UNKNOWN_OPERATOR\", [...path, \"op\"]);\n return evaluateOperator(node, operator, path, state);\n}\n\nfunction resolveReference<R extends JsonValue>(\n reference: R,\n path: ExpressionPath,\n resolve: ReferenceResolver<R>,\n limits: ExpressionLimits,\n): Outcome {\n try {\n const result: unknown = resolve(reference);\n if (rejectCallbackPromise(result))\n throw new ExpressionFailure(\"EXPRESSION_ASYNC_UNSUPPORTED\", path);\n const parsed = parseResolution(result);\n if (!parsed.valid) throw new ExpressionFailure(\"EXPRESSION_REFERENCE_ERROR\", path);\n if (!parsed.found) return { ...parsed, path };\n return { found: true, value: safeCallbackValue(parsed.value, path, limits) };\n } catch (error) {\n if (error instanceof ExpressionFailure) throw error;\n throw new ExpressionFailure(\"EXPRESSION_REFERENCE_ERROR\", path);\n }\n}\n\nfunction parseResolution(input: unknown): ParsedResolution & { readonly valid: boolean } {\n if (typeof input !== \"object\" || input === null) return { valid: false };\n try {\n const prototype = Object.getPrototypeOf(input);\n if (prototype !== Object.prototype && prototype !== null) return { valid: false };\n const found = Object.getOwnPropertyDescriptor(input, \"found\");\n if (!found || !(\"value\" in found) || !found.enumerable || typeof found.value !== \"boolean\")\n return { valid: false };\n const keys = Reflect.ownKeys(input);\n if (!found.value) return parseMissingResolution(input, keys);\n const value = Object.getOwnPropertyDescriptor(input, \"value\");\n if (\n keys.length !== 2 ||\n !keys.every((key) => key === \"found\" || key === \"value\") ||\n !value ||\n !(\"value\" in value) ||\n !value.enumerable\n ) {\n return { valid: false };\n }\n return { valid: true, found: true, value: value.value };\n } catch {\n return { valid: false };\n }\n}\n\nfunction parseMissingResolution(\n input: object,\n keys: readonly PropertyKey[],\n): ParsedResolution & { readonly valid: boolean } {\n if (keys.length === 1 && keys[0] === \"found\") return { valid: true, found: false };\n if (keys.length !== 2 || !keys.includes(\"found\") || !keys.includes(\"reason\"))\n return { valid: false };\n const reason = Object.getOwnPropertyDescriptor(input, \"reason\");\n if (!reason || !(\"value\" in reason) || !reason.enumerable) return { valid: false };\n if (reason.value === undefined || reason.value === \"missing\")\n return { valid: true, found: false };\n if (reason.value === \"denied\") return { valid: true, found: false, denied: true };\n return { valid: false };\n}\n\nfunction evaluateOperator<R extends JsonValue>(\n node: Extract<ValueExpression<R>, { kind: \"op\" }>,\n operator: ExpressionOperator,\n path: ExpressionPath,\n state: EvaluationState<R>,\n): Outcome {\n const strategy = internalProfile.getEvaluationStrategy(operator);\n if (strategy === \"exists\") return evaluateExists(node.args[0]!, [...path, \"args\", 0], state);\n if (strategy === \"and\" || strategy === \"or\") return evaluateBoolean(node, strategy, path, state);\n if (strategy === \"coalesce\") return evaluateCoalesce(node, path, state);\n if (strategy === \"if\") return evaluateIf(node, path, state);\n const args: JsonValue[] = [];\n for (let index = 0; index < node.args.length; index += 1) {\n const argPath = [...path, \"args\", index];\n const outcome = evaluateNode(node.args[index]!, argPath, state);\n if (!outcome.found) return outcome;\n args.push(outcome.value!);\n }\n return { found: true, value: execute(operator, args, path, state.limits) };\n}\n\nfunction evaluateExists<R extends JsonValue>(\n argument: ValueExpression<R>,\n path: ExpressionPath,\n state: EvaluationState<R>,\n): Outcome {\n const outcome = evaluateNode(argument, path, state);\n if (outcome.denied)\n throw new ExpressionFailure(\"EXPRESSION_REFERENCE_DENIED\", outcome.path ?? path);\n return { found: true, value: outcome.found };\n}\n\nfunction evaluateBoolean<R extends JsonValue>(\n node: Extract<ValueExpression<R>, { kind: \"op\" }>,\n strategy: \"and\" | \"or\",\n path: ExpressionPath,\n state: EvaluationState<R>,\n): Outcome {\n const expected = strategy === \"and\";\n for (let index = 0; index < node.args.length; index += 1) {\n const argPath = [...path, \"args\", index];\n const outcome = evaluateNode(node.args[index]!, argPath, state);\n if (!outcome.found) return outcome;\n const value = outcome.value!;\n assertType(value, \"boolean\", argPath);\n if (value !== expected) return { found: true, value: !expected };\n }\n return { found: true, value: expected };\n}\n\nfunction evaluateIf<R extends JsonValue>(\n node: Extract<ValueExpression<R>, { kind: \"op\" }>,\n path: ExpressionPath,\n state: EvaluationState<R>,\n): Outcome {\n const conditionPath = [...path, \"args\", 0];\n const condition = evaluateNode(node.args[0]!, conditionPath, state);\n if (!condition.found) return condition;\n assertType(condition.value!, \"boolean\", conditionPath);\n const selected = condition.value ? 1 : 2;\n return evaluateNode(node.args[selected]!, [...path, \"args\", selected], state);\n}\n\nfunction evaluateCoalesce<R extends JsonValue>(\n node: Extract<ValueExpression<R>, { kind: \"op\" }>,\n path: ExpressionPath,\n state: EvaluationState<R>,\n): Outcome {\n for (let index = 0; index < node.args.length; index += 1) {\n const argPath = [...path, \"args\", index];\n const outcome = evaluateNode(node.args[index]!, argPath, state);\n if (outcome.denied)\n throw new ExpressionFailure(\"EXPRESSION_REFERENCE_DENIED\", outcome.path ?? argPath);\n if (outcome.found && outcome.value !== null) return outcome;\n }\n return { found: true, value: null };\n}\n\nfunction execute(\n operator: ExpressionOperator,\n args: readonly JsonValue[],\n path: ExpressionPath,\n limits: ExpressionLimits,\n): JsonValue {\n validateInputTypes(operator, args, path);\n try {\n const result: unknown = operator.execute(Object.freeze([...args]));\n if (rejectCallbackPromise(result))\n throw new ExpressionFailure(\"EXPRESSION_ASYNC_UNSUPPORTED\", path);\n const value = safeCallbackValue(result, path, limits);\n if (operator.resultType) assertType(value, operator.resultType, path);\n return value;\n } catch (error) {\n if (error instanceof ExpressionFailure) throw new ExpressionFailure(error.code, path);\n throw new ExpressionFailure(\"EXPRESSION_OPERATOR_ERROR\", path);\n }\n}\n\nfunction validateInputTypes(\n operator: ExpressionOperator,\n args: readonly JsonValue[],\n path: ExpressionPath,\n): void {\n if (!operator.inputTypes) return;\n args.forEach((value, index) => {\n const expected = operator.inputTypes![index] ?? operator.inputTypes![0];\n if (expected) assertType(value, expected, [...path, \"args\", index]);\n });\n}\n\nfunction assertType(value: JsonValue, expected: ExpressionValueType, path: ExpressionPath): void {\n if (expected === \"any\") return;\n const actual = value === null ? \"null\" : Array.isArray(value) ? \"array\" : typeof value;\n if (actual !== expected) throw new ExpressionFailure(\"EXPRESSION_TYPE_MISMATCH\", path);\n}\n\nfunction safeCallbackValue(\n input: unknown,\n path: ExpressionPath,\n limits: ExpressionLimits,\n): JsonValue {\n try {\n return cloneJson(input, path, 0, {\n maxDepth: limits.maxDepth,\n maxNodes: limits.maxNodes,\n maxStringLength: limits.maxStringLength,\n nodes: 0,\n active: new WeakSet(),\n });\n } catch (error) {\n if (error instanceof ExpressionFailure && error.code === \"EXPRESSION_LIMIT_EXCEEDED\")\n throw error;\n throw new ExpressionFailure(\"EXPRESSION_INVALID_RESULT\", path);\n }\n}\n"]}
@@ -0,0 +1,54 @@
1
+ 'use strict';
2
+
3
+ var canonicalize_js = require('./canonicalize.js');
4
+ var compile_js = require('./compile.js');
5
+ var dependencies_js = require('./dependencies.js');
6
+ var jsonSchema_js = require('./json-schema.js');
7
+ var limits_js = require('./limits.js');
8
+ var profile_js = require('./profile.js');
9
+ var standardProfile_js = require('./standard-profile.js');
10
+
11
+
12
+
13
+ Object.defineProperty(exports, "canonicalizeExpression", {
14
+ enumerable: true,
15
+ get: function () { return canonicalize_js.canonicalizeExpression; }
16
+ });
17
+ Object.defineProperty(exports, "compileExpression", {
18
+ enumerable: true,
19
+ get: function () { return compile_js.compileExpression; }
20
+ });
21
+ Object.defineProperty(exports, "extractExpressionDependencies", {
22
+ enumerable: true,
23
+ get: function () { return dependencies_js.extractExpressionDependencies; }
24
+ });
25
+ Object.defineProperty(exports, "generateExpressionJsonSchema", {
26
+ enumerable: true,
27
+ get: function () { return jsonSchema_js.generateExpressionJsonSchema; }
28
+ });
29
+ Object.defineProperty(exports, "getStandardExpressionJsonSchema", {
30
+ enumerable: true,
31
+ get: function () { return jsonSchema_js.getStandardExpressionJsonSchema; }
32
+ });
33
+ Object.defineProperty(exports, "DEFAULT_EXPRESSION_LIMITS", {
34
+ enumerable: true,
35
+ get: function () { return limits_js.DEFAULT_EXPRESSION_LIMITS; }
36
+ });
37
+ Object.defineProperty(exports, "ExpressionProfile", {
38
+ enumerable: true,
39
+ get: function () { return profile_js.ExpressionProfile; }
40
+ });
41
+ Object.defineProperty(exports, "ExpressionProfileBuilder", {
42
+ enumerable: true,
43
+ get: function () { return profile_js.ExpressionProfileBuilder; }
44
+ });
45
+ Object.defineProperty(exports, "MAX_EXPRESSION_OPERATOR_ARGS", {
46
+ enumerable: true,
47
+ get: function () { return profile_js.MAX_EXPRESSION_OPERATOR_ARGS; }
48
+ });
49
+ Object.defineProperty(exports, "standardV1", {
50
+ enumerable: true,
51
+ get: function () { return standardProfile_js.standardV1; }
52
+ });
53
+ //# sourceMappingURL=index.cjs.map
54
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs","sourcesContent":[]}
@@ -0,0 +1,8 @@
1
+ export { canonicalizeExpression } from './canonicalize.cjs';
2
+ export { CompileExpressionOptions, compileExpression } from './compile.cjs';
3
+ export { extractExpressionDependencies } from './dependencies.cjs';
4
+ export { ExpressionJsonSchema, generateExpressionJsonSchema, getStandardExpressionJsonSchema } from './json-schema.cjs';
5
+ export { DEFAULT_EXPRESSION_LIMITS } from './limits.cjs';
6
+ export { ExpressionOperator, ExpressionOperatorDefinition, ExpressionOperatorFn, ExpressionProfile, ExpressionProfileBuilder, ExpressionValueType, MAX_EXPRESSION_OPERATOR_ARGS } from './profile.cjs';
7
+ export { standardV1 } from './standard-profile.cjs';
8
+ export { CanonicalizeExpressionOptions, CompiledExpression, ExpressionDiagnostic, ExpressionDiagnosticCode, ExpressionLimits, ExpressionPath, JsonArray, JsonObject, JsonPrimitive, JsonValue, ReferenceCodec, ReferenceResolution, ReferenceResolver, Result, ValueExpression } from './types.cjs';
@@ -0,0 +1,8 @@
1
+ export { canonicalizeExpression } from './canonicalize.js';
2
+ export { CompileExpressionOptions, compileExpression } from './compile.js';
3
+ export { extractExpressionDependencies } from './dependencies.js';
4
+ export { ExpressionJsonSchema, generateExpressionJsonSchema, getStandardExpressionJsonSchema } from './json-schema.js';
5
+ export { DEFAULT_EXPRESSION_LIMITS } from './limits.js';
6
+ export { ExpressionOperator, ExpressionOperatorDefinition, ExpressionOperatorFn, ExpressionProfile, ExpressionProfileBuilder, ExpressionValueType, MAX_EXPRESSION_OPERATOR_ARGS } from './profile.js';
7
+ export { standardV1 } from './standard-profile.js';
8
+ export { CanonicalizeExpressionOptions, CompiledExpression, ExpressionDiagnostic, ExpressionDiagnosticCode, ExpressionLimits, ExpressionPath, JsonArray, JsonObject, JsonPrimitive, JsonValue, ReferenceCodec, ReferenceResolution, ReferenceResolver, Result, ValueExpression } from './types.js';
@@ -0,0 +1,9 @@
1
+ export { canonicalizeExpression } from './canonicalize.js';
2
+ export { compileExpression } from './compile.js';
3
+ export { extractExpressionDependencies } from './dependencies.js';
4
+ export { generateExpressionJsonSchema, getStandardExpressionJsonSchema } from './json-schema.js';
5
+ export { DEFAULT_EXPRESSION_LIMITS } from './limits.js';
6
+ export { ExpressionProfile, ExpressionProfileBuilder, MAX_EXPRESSION_OPERATOR_ARGS } from './profile.js';
7
+ export { standardV1 } from './standard-profile.js';
8
+ //# sourceMappingURL=index.js.map
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
@@ -0,0 +1,167 @@
1
+ 'use strict';
2
+
3
+ var result_js = require('./result.js');
4
+
5
+ const UNSAFE_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
6
+ function dataProperties(input, path, allowed, maxProperties, maxKeyLength) {
7
+ if (!isPlainObject(input)) throw new result_js.ExpressionFailure("EXPRESSION_INVALID_INPUT", path);
8
+ try {
9
+ return readDataProperties(input, path, allowed, maxProperties, maxKeyLength);
10
+ } catch (error) {
11
+ if (error instanceof result_js.ExpressionFailure) throw error;
12
+ throw new result_js.ExpressionFailure("EXPRESSION_INVALID_INPUT", path);
13
+ }
14
+ }
15
+ function readDataProperties(input, path, allowed, maxProperties, maxKeyLength) {
16
+ const keys = Reflect.ownKeys(input);
17
+ if (maxProperties !== void 0 && keys.length > maxProperties) {
18
+ throw new result_js.ExpressionFailure("EXPRESSION_LIMIT_EXCEEDED", path);
19
+ }
20
+ const output = {};
21
+ for (const key of keys) {
22
+ if (typeof key !== "string") {
23
+ throw new result_js.ExpressionFailure("EXPRESSION_INVALID_INPUT", [...path, String(key)]);
24
+ }
25
+ const descriptor = Object.getOwnPropertyDescriptor(input, key);
26
+ if (!descriptor || !("value" in descriptor) || !descriptor.enumerable) {
27
+ throw new result_js.ExpressionFailure("EXPRESSION_INVALID_INPUT", [...path, key]);
28
+ }
29
+ if (maxKeyLength !== void 0 && exceedsStringLimit(key, maxKeyLength)) {
30
+ throw new result_js.ExpressionFailure("EXPRESSION_LIMIT_EXCEEDED", [...path, key]);
31
+ }
32
+ if (UNSAFE_KEYS.has(key) || allowed && !allowed.has(key)) {
33
+ throw new result_js.ExpressionFailure("EXPRESSION_INVALID_INPUT", [...path, key]);
34
+ }
35
+ Object.defineProperty(output, key, {
36
+ value: descriptor.value,
37
+ enumerable: true,
38
+ writable: true
39
+ });
40
+ }
41
+ return output;
42
+ }
43
+ function isPlainObject(input) {
44
+ if (typeof input !== "object" || input === null || Array.isArray(input)) return false;
45
+ try {
46
+ const prototype = Object.getPrototypeOf(input);
47
+ return prototype === Object.prototype || prototype === null;
48
+ } catch {
49
+ return false;
50
+ }
51
+ }
52
+ function cloneJson(input, path, depth, state) {
53
+ countValue(input, path, depth, state);
54
+ if (input === null || typeof input === "boolean") return input;
55
+ if (typeof input === "number") return input;
56
+ if (typeof input === "string") return cloneString(input, path, state.maxStringLength);
57
+ if (Array.isArray(input)) return cloneArray(input, path, depth, state);
58
+ return cloneObject(input, path, depth, state);
59
+ }
60
+ function countValue(input, path, depth, state) {
61
+ state.nodes += 1;
62
+ if (depth > state.maxDepth || state.nodes > state.maxNodes) {
63
+ throw new result_js.ExpressionFailure("EXPRESSION_LIMIT_EXCEEDED", path);
64
+ }
65
+ if (typeof input === "number" && !Number.isFinite(input)) {
66
+ throw new result_js.ExpressionFailure("EXPRESSION_INVALID_INPUT", path);
67
+ }
68
+ if (input === null || ["boolean", "number", "string"].includes(typeof input)) return;
69
+ if (typeof input !== "object") throw new result_js.ExpressionFailure("EXPRESSION_INVALID_INPUT", path);
70
+ }
71
+ function cloneString(input, path, maxLength) {
72
+ if (exceedsStringLimit(input, maxLength))
73
+ throw new result_js.ExpressionFailure("EXPRESSION_LIMIT_EXCEEDED", path);
74
+ return input;
75
+ }
76
+ function exceedsStringLimit(input, maxLength) {
77
+ let length = 0;
78
+ for (const _codePoint of input) {
79
+ length += 1;
80
+ if (length > maxLength) return true;
81
+ }
82
+ return false;
83
+ }
84
+ function cloneArray(input, path, depth, state) {
85
+ enter(input, path, state);
86
+ try {
87
+ const length = arrayLength(input, path);
88
+ if (length > state.maxNodes - state.nodes) {
89
+ throw new result_js.ExpressionFailure("EXPRESSION_LIMIT_EXCEEDED", path);
90
+ }
91
+ const keys = Reflect.ownKeys(input);
92
+ if (keys.some(
93
+ (key) => typeof key === "symbol" || key !== "length" && !isArrayIndex(key, length)
94
+ )) {
95
+ throw new result_js.ExpressionFailure("EXPRESSION_INVALID_INPUT", path);
96
+ }
97
+ const values = [];
98
+ for (let index = 0; index < length; index += 1) {
99
+ const descriptor = Object.getOwnPropertyDescriptor(input, String(index));
100
+ if (!descriptor || !("value" in descriptor) || !descriptor.enumerable) {
101
+ throw new result_js.ExpressionFailure("EXPRESSION_INVALID_INPUT", [...path, index]);
102
+ }
103
+ values.push(cloneJson(descriptor.value, [...path, index], depth + 1, state));
104
+ }
105
+ return Object.freeze(values);
106
+ } catch (error) {
107
+ if (error instanceof result_js.ExpressionFailure) throw error;
108
+ throw new result_js.ExpressionFailure("EXPRESSION_INVALID_INPUT", path);
109
+ } finally {
110
+ state.active.delete(input);
111
+ }
112
+ }
113
+ function cloneObject(input, path, depth, state) {
114
+ enter(input, path, state);
115
+ try {
116
+ const properties = dataProperties(
117
+ input,
118
+ path,
119
+ void 0,
120
+ state.maxNodes - state.nodes,
121
+ state.maxStringLength
122
+ );
123
+ const output = {};
124
+ for (const key of Object.keys(properties).sort()) {
125
+ Object.defineProperty(output, key, {
126
+ value: cloneJson(properties[key], [...path, key], depth + 1, state),
127
+ enumerable: true
128
+ });
129
+ }
130
+ return Object.freeze(output);
131
+ } finally {
132
+ state.active.delete(input);
133
+ }
134
+ }
135
+ function arrayLength(input, path) {
136
+ try {
137
+ const descriptor = Object.getOwnPropertyDescriptor(input, "length");
138
+ if (!descriptor || !("value" in descriptor) || !Number.isSafeInteger(descriptor.value) || descriptor.value < 0 || descriptor.value > 4294967295) {
139
+ throw new result_js.ExpressionFailure("EXPRESSION_INVALID_INPUT", path);
140
+ }
141
+ return descriptor.value;
142
+ } catch (error) {
143
+ if (error instanceof result_js.ExpressionFailure) throw error;
144
+ throw new result_js.ExpressionFailure("EXPRESSION_INVALID_INPUT", path);
145
+ }
146
+ }
147
+ function enter(input, path, state) {
148
+ if (state.active.has(input)) throw new result_js.ExpressionFailure("EXPRESSION_INVALID_INPUT", path);
149
+ state.active.add(input);
150
+ }
151
+ function isArrayIndex(key, length) {
152
+ if (!/^(0|[1-9]\d*)$/.test(key)) return false;
153
+ const index = Number(key);
154
+ return Number.isSafeInteger(index) && index < length;
155
+ }
156
+ function stableJson(value) {
157
+ return JSON.stringify(value);
158
+ }
159
+
160
+ exports.UNSAFE_KEYS = UNSAFE_KEYS;
161
+ exports.arrayLength = arrayLength;
162
+ exports.cloneJson = cloneJson;
163
+ exports.dataProperties = dataProperties;
164
+ exports.exceedsStringLimit = exceedsStringLimit;
165
+ exports.stableJson = stableJson;
166
+ //# sourceMappingURL=inspect.cjs.map
167
+ //# sourceMappingURL=inspect.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/kuery-v1/inspect.ts"],"names":["ExpressionFailure"],"mappings":"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","file":"inspect.cjs","sourcesContent":["import { ExpressionFailure } from \"./result.js\";\nimport type { ExpressionPath, JsonObject, JsonValue } from \"./types.js\";\n\nexport const UNSAFE_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\nexport interface ValidationState {\n readonly maxDepth: number;\n readonly maxNodes: number;\n readonly maxStringLength: number;\n nodes: number;\n readonly active: WeakSet<object>;\n}\n\nexport function dataProperties(\n input: unknown,\n path: ExpressionPath,\n allowed?: ReadonlySet<string>,\n maxProperties?: number,\n maxKeyLength?: number,\n): Readonly<Record<string, unknown>> {\n if (!isPlainObject(input)) throw new ExpressionFailure(\"EXPRESSION_INVALID_INPUT\", path);\n try {\n return readDataProperties(input, path, allowed, maxProperties, maxKeyLength);\n } catch (error) {\n if (error instanceof ExpressionFailure) throw error;\n throw new ExpressionFailure(\"EXPRESSION_INVALID_INPUT\", path);\n }\n}\n\nfunction readDataProperties(\n input: object,\n path: ExpressionPath,\n allowed?: ReadonlySet<string>,\n maxProperties?: number,\n maxKeyLength?: number,\n): Readonly<Record<string, unknown>> {\n const keys = Reflect.ownKeys(input);\n if (maxProperties !== undefined && keys.length > maxProperties) {\n throw new ExpressionFailure(\"EXPRESSION_LIMIT_EXCEEDED\", path);\n }\n const output: Record<string, unknown> = {};\n for (const key of keys) {\n if (typeof key !== \"string\") {\n throw new ExpressionFailure(\"EXPRESSION_INVALID_INPUT\", [...path, String(key)]);\n }\n const descriptor = Object.getOwnPropertyDescriptor(input, key);\n if (!descriptor || !(\"value\" in descriptor) || !descriptor.enumerable) {\n throw new ExpressionFailure(\"EXPRESSION_INVALID_INPUT\", [...path, key]);\n }\n if (maxKeyLength !== undefined && exceedsStringLimit(key, maxKeyLength)) {\n throw new ExpressionFailure(\"EXPRESSION_LIMIT_EXCEEDED\", [...path, key]);\n }\n if (UNSAFE_KEYS.has(key) || (allowed && !allowed.has(key))) {\n throw new ExpressionFailure(\"EXPRESSION_INVALID_INPUT\", [...path, key]);\n }\n Object.defineProperty(output, key, {\n value: descriptor.value,\n enumerable: true,\n writable: true,\n });\n }\n return output;\n}\n\nfunction isPlainObject(input: unknown): input is object {\n if (typeof input !== \"object\" || input === null || Array.isArray(input)) return false;\n try {\n const prototype = Object.getPrototypeOf(input);\n return prototype === Object.prototype || prototype === null;\n } catch {\n return false;\n }\n}\n\nexport function cloneJson(\n input: unknown,\n path: ExpressionPath,\n depth: number,\n state: ValidationState,\n): JsonValue {\n countValue(input, path, depth, state);\n if (input === null || typeof input === \"boolean\") return input;\n if (typeof input === \"number\") return input;\n if (typeof input === \"string\") return cloneString(input, path, state.maxStringLength);\n if (Array.isArray(input)) return cloneArray(input, path, depth, state);\n return cloneObject(input as object, path, depth, state);\n}\n\nfunction countValue(\n input: unknown,\n path: ExpressionPath,\n depth: number,\n state: ValidationState,\n): void {\n state.nodes += 1;\n if (depth > state.maxDepth || state.nodes > state.maxNodes) {\n throw new ExpressionFailure(\"EXPRESSION_LIMIT_EXCEEDED\", path);\n }\n if (typeof input === \"number\" && !Number.isFinite(input)) {\n throw new ExpressionFailure(\"EXPRESSION_INVALID_INPUT\", path);\n }\n if (input === null || [\"boolean\", \"number\", \"string\"].includes(typeof input)) return;\n if (typeof input !== \"object\") throw new ExpressionFailure(\"EXPRESSION_INVALID_INPUT\", path);\n}\n\nfunction cloneString(input: string, path: ExpressionPath, maxLength: number): string {\n if (exceedsStringLimit(input, maxLength))\n throw new ExpressionFailure(\"EXPRESSION_LIMIT_EXCEEDED\", path);\n return input;\n}\n\nexport function exceedsStringLimit(input: string, maxLength: number): boolean {\n let length = 0;\n for (const _codePoint of input) {\n length += 1;\n if (length > maxLength) return true;\n }\n return false;\n}\n\nfunction cloneArray(\n input: unknown[],\n path: ExpressionPath,\n depth: number,\n state: ValidationState,\n): JsonValue {\n enter(input, path, state);\n try {\n const length = arrayLength(input, path);\n if (length > state.maxNodes - state.nodes) {\n throw new ExpressionFailure(\"EXPRESSION_LIMIT_EXCEEDED\", path);\n }\n const keys = Reflect.ownKeys(input);\n if (\n keys.some(\n (key) => typeof key === \"symbol\" || (key !== \"length\" && !isArrayIndex(key, length)),\n )\n ) {\n throw new ExpressionFailure(\"EXPRESSION_INVALID_INPUT\", path);\n }\n const values: JsonValue[] = [];\n for (let index = 0; index < length; index += 1) {\n const descriptor = Object.getOwnPropertyDescriptor(input, String(index));\n if (!descriptor || !(\"value\" in descriptor) || !descriptor.enumerable) {\n throw new ExpressionFailure(\"EXPRESSION_INVALID_INPUT\", [...path, index]);\n }\n values.push(cloneJson(descriptor.value, [...path, index], depth + 1, state));\n }\n return Object.freeze(values);\n } catch (error) {\n if (error instanceof ExpressionFailure) throw error;\n throw new ExpressionFailure(\"EXPRESSION_INVALID_INPUT\", path);\n } finally {\n state.active.delete(input);\n }\n}\n\nfunction cloneObject(\n input: object,\n path: ExpressionPath,\n depth: number,\n state: ValidationState,\n): JsonObject {\n enter(input, path, state);\n try {\n const properties = dataProperties(\n input,\n path,\n undefined,\n state.maxNodes - state.nodes,\n state.maxStringLength,\n );\n const output: Record<string, JsonValue> = {};\n for (const key of Object.keys(properties).sort()) {\n Object.defineProperty(output, key, {\n value: cloneJson(properties[key], [...path, key], depth + 1, state),\n enumerable: true,\n });\n }\n return Object.freeze(output);\n } finally {\n state.active.delete(input);\n }\n}\n\nexport function arrayLength(input: unknown[], path: ExpressionPath): number {\n try {\n const descriptor = Object.getOwnPropertyDescriptor(input, \"length\");\n if (\n !descriptor ||\n !(\"value\" in descriptor) ||\n !Number.isSafeInteger(descriptor.value) ||\n descriptor.value < 0 ||\n descriptor.value > 0xffff_ffff\n ) {\n throw new ExpressionFailure(\"EXPRESSION_INVALID_INPUT\", path);\n }\n return descriptor.value as number;\n } catch (error) {\n if (error instanceof ExpressionFailure) throw error;\n throw new ExpressionFailure(\"EXPRESSION_INVALID_INPUT\", path);\n }\n}\n\nfunction enter(input: object, path: ExpressionPath, state: ValidationState): void {\n if (state.active.has(input)) throw new ExpressionFailure(\"EXPRESSION_INVALID_INPUT\", path);\n state.active.add(input);\n}\n\nfunction isArrayIndex(key: string, length: number): boolean {\n if (!/^(0|[1-9]\\d*)$/.test(key)) return false;\n const index = Number(key);\n return Number.isSafeInteger(index) && index < length;\n}\n\nexport function stableJson(value: JsonValue): string {\n return JSON.stringify(value);\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import { ExpressionPath, JsonValue } from './types.cjs';
2
+
3
+ declare const UNSAFE_KEYS: Set<string>;
4
+ interface ValidationState {
5
+ readonly maxDepth: number;
6
+ readonly maxNodes: number;
7
+ readonly maxStringLength: number;
8
+ nodes: number;
9
+ readonly active: WeakSet<object>;
10
+ }
11
+ declare function dataProperties(input: unknown, path: ExpressionPath, allowed?: ReadonlySet<string>, maxProperties?: number, maxKeyLength?: number): Readonly<Record<string, unknown>>;
12
+ declare function cloneJson(input: unknown, path: ExpressionPath, depth: number, state: ValidationState): JsonValue;
13
+ declare function exceedsStringLimit(input: string, maxLength: number): boolean;
14
+ declare function arrayLength(input: unknown[], path: ExpressionPath): number;
15
+ declare function stableJson(value: JsonValue): string;
16
+
17
+ export { UNSAFE_KEYS, type ValidationState, arrayLength, cloneJson, dataProperties, exceedsStringLimit, stableJson };
@@ -0,0 +1,17 @@
1
+ import { ExpressionPath, JsonValue } from './types.js';
2
+
3
+ declare const UNSAFE_KEYS: Set<string>;
4
+ interface ValidationState {
5
+ readonly maxDepth: number;
6
+ readonly maxNodes: number;
7
+ readonly maxStringLength: number;
8
+ nodes: number;
9
+ readonly active: WeakSet<object>;
10
+ }
11
+ declare function dataProperties(input: unknown, path: ExpressionPath, allowed?: ReadonlySet<string>, maxProperties?: number, maxKeyLength?: number): Readonly<Record<string, unknown>>;
12
+ declare function cloneJson(input: unknown, path: ExpressionPath, depth: number, state: ValidationState): JsonValue;
13
+ declare function exceedsStringLimit(input: string, maxLength: number): boolean;
14
+ declare function arrayLength(input: unknown[], path: ExpressionPath): number;
15
+ declare function stableJson(value: JsonValue): string;
16
+
17
+ export { UNSAFE_KEYS, type ValidationState, arrayLength, cloneJson, dataProperties, exceedsStringLimit, stableJson };