@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,44 @@
1
+ 'use strict';
2
+
3
+ const MESSAGES = Object.freeze({
4
+ EXPRESSION_INVALID_INPUT: "Expression input is invalid.",
5
+ EXPRESSION_LIMIT_EXCEEDED: "Expression input exceeds a configured limit.",
6
+ EXPRESSION_INVALID_REFERENCE: "Expression reference is invalid.",
7
+ EXPRESSION_UNKNOWN_OPERATOR: "Expression operator is not in the selected profile.",
8
+ EXPRESSION_INVALID_ARITY: "Expression operator has an invalid number of arguments.",
9
+ EXPRESSION_TYPE_MISMATCH: "Expression operator received an incompatible value type.",
10
+ EXPRESSION_DIVISION_BY_ZERO: "Expression division by zero is not allowed.",
11
+ EXPRESSION_NON_FINITE_RESULT: "Expression arithmetic produced a non-finite result.",
12
+ EXPRESSION_REFERENCE_ERROR: "Expression reference resolution failed.",
13
+ EXPRESSION_REFERENCE_MISSING: "Expression reference is missing.",
14
+ EXPRESSION_REFERENCE_DENIED: "Expression reference access was denied.",
15
+ EXPRESSION_OPERATOR_ERROR: "Expression operator evaluation failed.",
16
+ EXPRESSION_ASYNC_UNSUPPORTED: "Expression callbacks must return synchronously.",
17
+ EXPRESSION_EVALUATION_LIMIT: "Expression evaluation exceeded its configured cost limit.",
18
+ EXPRESSION_INVALID_RESULT: "Expression callback returned an invalid JSON value."
19
+ });
20
+ function diagnostic(code, path) {
21
+ return Object.freeze({ code, path: Object.freeze([...path]), message: MESSAGES[code] });
22
+ }
23
+ function failure(code, path) {
24
+ return Object.freeze({ ok: false, diagnostic: diagnostic(code, path) });
25
+ }
26
+ function success(value) {
27
+ return Object.freeze({ ok: true, value });
28
+ }
29
+ class ExpressionFailure extends Error {
30
+ code;
31
+ expressionPath;
32
+ constructor(code, expressionPath) {
33
+ super(code);
34
+ this.code = code;
35
+ this.expressionPath = expressionPath;
36
+ }
37
+ }
38
+
39
+ exports.ExpressionFailure = ExpressionFailure;
40
+ exports.diagnostic = diagnostic;
41
+ exports.failure = failure;
42
+ exports.success = success;
43
+ //# sourceMappingURL=result.cjs.map
44
+ //# sourceMappingURL=result.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/kuery-v1/result.ts"],"names":[],"mappings":";;AAOA,MAAM,QAAA,GAA+D,OAAO,MAAA,CAAO;AAAA,EACjF,wBAAA,EAA0B,8BAAA;AAAA,EAC1B,yBAAA,EAA2B,8CAAA;AAAA,EAC3B,4BAAA,EAA8B,kCAAA;AAAA,EAC9B,2BAAA,EAA6B,qDAAA;AAAA,EAC7B,wBAAA,EAA0B,yDAAA;AAAA,EAC1B,wBAAA,EAA0B,0DAAA;AAAA,EAC1B,2BAAA,EAA6B,6CAAA;AAAA,EAC7B,4BAAA,EAA8B,qDAAA;AAAA,EAC9B,0BAAA,EAA4B,yCAAA;AAAA,EAC5B,4BAAA,EAA8B,kCAAA;AAAA,EAC9B,2BAAA,EAA6B,yCAAA;AAAA,EAC7B,yBAAA,EAA2B,wCAAA;AAAA,EAC3B,4BAAA,EAA8B,iDAAA;AAAA,EAC9B,2BAAA,EAA6B,2DAAA;AAAA,EAC7B,yBAAA,EAA2B;AAC7B,CAAC,CAAA;AAEM,SAAS,UAAA,CACd,MACA,IAAA,EACsB;AACtB,EAAA,OAAO,OAAO,MAAA,CAAO,EAAE,IAAA,EAAM,IAAA,EAAM,OAAO,MAAA,CAAO,CAAC,GAAG,IAAI,CAAC,CAAA,EAAG,OAAA,EAAS,QAAA,CAAS,IAAI,GAAG,CAAA;AACxF;AAEO,SAAS,OAAA,CAAW,MAAgC,IAAA,EAAiC;AAC1F,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,EAAE,EAAA,EAAI,KAAA,EAAO,YAAY,UAAA,CAAW,IAAA,EAAM,IAAI,CAAA,EAAG,CAAA;AACxE;AAEO,SAAS,QAAW,KAAA,EAAqB;AAC9C,EAAA,OAAO,OAAO,MAAA,CAAO,EAAE,EAAA,EAAI,IAAA,EAAM,OAAO,CAAA;AAC1C;AAEO,MAAM,0BAA0B,KAAA,CAAM;AAAA,EAClC,IAAA;AAAA,EACA,cAAA;AAAA,EAET,WAAA,CAAY,MAAgC,cAAA,EAAgC;AAC1E,IAAA,KAAA,CAAM,IAAI,CAAA;AACV,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,cAAA,GAAiB,cAAA;AAAA,EACxB;AACF","file":"result.cjs","sourcesContent":["import type {\n ExpressionDiagnostic,\n ExpressionDiagnosticCode,\n ExpressionPath,\n Result,\n} from \"./types.js\";\n\nconst MESSAGES: Readonly<Record<ExpressionDiagnosticCode, string>> = Object.freeze({\n EXPRESSION_INVALID_INPUT: \"Expression input is invalid.\",\n EXPRESSION_LIMIT_EXCEEDED: \"Expression input exceeds a configured limit.\",\n EXPRESSION_INVALID_REFERENCE: \"Expression reference is invalid.\",\n EXPRESSION_UNKNOWN_OPERATOR: \"Expression operator is not in the selected profile.\",\n EXPRESSION_INVALID_ARITY: \"Expression operator has an invalid number of arguments.\",\n EXPRESSION_TYPE_MISMATCH: \"Expression operator received an incompatible value type.\",\n EXPRESSION_DIVISION_BY_ZERO: \"Expression division by zero is not allowed.\",\n EXPRESSION_NON_FINITE_RESULT: \"Expression arithmetic produced a non-finite result.\",\n EXPRESSION_REFERENCE_ERROR: \"Expression reference resolution failed.\",\n EXPRESSION_REFERENCE_MISSING: \"Expression reference is missing.\",\n EXPRESSION_REFERENCE_DENIED: \"Expression reference access was denied.\",\n EXPRESSION_OPERATOR_ERROR: \"Expression operator evaluation failed.\",\n EXPRESSION_ASYNC_UNSUPPORTED: \"Expression callbacks must return synchronously.\",\n EXPRESSION_EVALUATION_LIMIT: \"Expression evaluation exceeded its configured cost limit.\",\n EXPRESSION_INVALID_RESULT: \"Expression callback returned an invalid JSON value.\",\n});\n\nexport function diagnostic(\n code: ExpressionDiagnosticCode,\n path: ExpressionPath,\n): ExpressionDiagnostic {\n return Object.freeze({ code, path: Object.freeze([...path]), message: MESSAGES[code] });\n}\n\nexport function failure<T>(code: ExpressionDiagnosticCode, path: ExpressionPath): Result<T> {\n return Object.freeze({ ok: false, diagnostic: diagnostic(code, path) });\n}\n\nexport function success<T>(value: T): Result<T> {\n return Object.freeze({ ok: true, value });\n}\n\nexport class ExpressionFailure extends Error {\n readonly code: ExpressionDiagnosticCode;\n readonly expressionPath: ExpressionPath;\n\n constructor(code: ExpressionDiagnosticCode, expressionPath: ExpressionPath) {\n super(code);\n this.code = code;\n this.expressionPath = expressionPath;\n }\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import { ExpressionDiagnosticCode, ExpressionPath, ExpressionDiagnostic, Result } from './types.cjs';
2
+
3
+ declare function diagnostic(code: ExpressionDiagnosticCode, path: ExpressionPath): ExpressionDiagnostic;
4
+ declare function failure<T>(code: ExpressionDiagnosticCode, path: ExpressionPath): Result<T>;
5
+ declare function success<T>(value: T): Result<T>;
6
+ declare class ExpressionFailure extends Error {
7
+ readonly code: ExpressionDiagnosticCode;
8
+ readonly expressionPath: ExpressionPath;
9
+ constructor(code: ExpressionDiagnosticCode, expressionPath: ExpressionPath);
10
+ }
11
+
12
+ export { ExpressionFailure, diagnostic, failure, success };
@@ -0,0 +1,12 @@
1
+ import { ExpressionDiagnosticCode, ExpressionPath, ExpressionDiagnostic, Result } from './types.js';
2
+
3
+ declare function diagnostic(code: ExpressionDiagnosticCode, path: ExpressionPath): ExpressionDiagnostic;
4
+ declare function failure<T>(code: ExpressionDiagnosticCode, path: ExpressionPath): Result<T>;
5
+ declare function success<T>(value: T): Result<T>;
6
+ declare class ExpressionFailure extends Error {
7
+ readonly code: ExpressionDiagnosticCode;
8
+ readonly expressionPath: ExpressionPath;
9
+ constructor(code: ExpressionDiagnosticCode, expressionPath: ExpressionPath);
10
+ }
11
+
12
+ export { ExpressionFailure, diagnostic, failure, success };
@@ -0,0 +1,39 @@
1
+ const MESSAGES = Object.freeze({
2
+ EXPRESSION_INVALID_INPUT: "Expression input is invalid.",
3
+ EXPRESSION_LIMIT_EXCEEDED: "Expression input exceeds a configured limit.",
4
+ EXPRESSION_INVALID_REFERENCE: "Expression reference is invalid.",
5
+ EXPRESSION_UNKNOWN_OPERATOR: "Expression operator is not in the selected profile.",
6
+ EXPRESSION_INVALID_ARITY: "Expression operator has an invalid number of arguments.",
7
+ EXPRESSION_TYPE_MISMATCH: "Expression operator received an incompatible value type.",
8
+ EXPRESSION_DIVISION_BY_ZERO: "Expression division by zero is not allowed.",
9
+ EXPRESSION_NON_FINITE_RESULT: "Expression arithmetic produced a non-finite result.",
10
+ EXPRESSION_REFERENCE_ERROR: "Expression reference resolution failed.",
11
+ EXPRESSION_REFERENCE_MISSING: "Expression reference is missing.",
12
+ EXPRESSION_REFERENCE_DENIED: "Expression reference access was denied.",
13
+ EXPRESSION_OPERATOR_ERROR: "Expression operator evaluation failed.",
14
+ EXPRESSION_ASYNC_UNSUPPORTED: "Expression callbacks must return synchronously.",
15
+ EXPRESSION_EVALUATION_LIMIT: "Expression evaluation exceeded its configured cost limit.",
16
+ EXPRESSION_INVALID_RESULT: "Expression callback returned an invalid JSON value."
17
+ });
18
+ function diagnostic(code, path) {
19
+ return Object.freeze({ code, path: Object.freeze([...path]), message: MESSAGES[code] });
20
+ }
21
+ function failure(code, path) {
22
+ return Object.freeze({ ok: false, diagnostic: diagnostic(code, path) });
23
+ }
24
+ function success(value) {
25
+ return Object.freeze({ ok: true, value });
26
+ }
27
+ class ExpressionFailure extends Error {
28
+ code;
29
+ expressionPath;
30
+ constructor(code, expressionPath) {
31
+ super(code);
32
+ this.code = code;
33
+ this.expressionPath = expressionPath;
34
+ }
35
+ }
36
+
37
+ export { ExpressionFailure, diagnostic, failure, success };
38
+ //# sourceMappingURL=result.js.map
39
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/kuery-v1/result.ts"],"names":[],"mappings":"AAOA,MAAM,QAAA,GAA+D,OAAO,MAAA,CAAO;AAAA,EACjF,wBAAA,EAA0B,8BAAA;AAAA,EAC1B,yBAAA,EAA2B,8CAAA;AAAA,EAC3B,4BAAA,EAA8B,kCAAA;AAAA,EAC9B,2BAAA,EAA6B,qDAAA;AAAA,EAC7B,wBAAA,EAA0B,yDAAA;AAAA,EAC1B,wBAAA,EAA0B,0DAAA;AAAA,EAC1B,2BAAA,EAA6B,6CAAA;AAAA,EAC7B,4BAAA,EAA8B,qDAAA;AAAA,EAC9B,0BAAA,EAA4B,yCAAA;AAAA,EAC5B,4BAAA,EAA8B,kCAAA;AAAA,EAC9B,2BAAA,EAA6B,yCAAA;AAAA,EAC7B,yBAAA,EAA2B,wCAAA;AAAA,EAC3B,4BAAA,EAA8B,iDAAA;AAAA,EAC9B,2BAAA,EAA6B,2DAAA;AAAA,EAC7B,yBAAA,EAA2B;AAC7B,CAAC,CAAA;AAEM,SAAS,UAAA,CACd,MACA,IAAA,EACsB;AACtB,EAAA,OAAO,OAAO,MAAA,CAAO,EAAE,IAAA,EAAM,IAAA,EAAM,OAAO,MAAA,CAAO,CAAC,GAAG,IAAI,CAAC,CAAA,EAAG,OAAA,EAAS,QAAA,CAAS,IAAI,GAAG,CAAA;AACxF;AAEO,SAAS,OAAA,CAAW,MAAgC,IAAA,EAAiC;AAC1F,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,EAAE,EAAA,EAAI,KAAA,EAAO,YAAY,UAAA,CAAW,IAAA,EAAM,IAAI,CAAA,EAAG,CAAA;AACxE;AAEO,SAAS,QAAW,KAAA,EAAqB;AAC9C,EAAA,OAAO,OAAO,MAAA,CAAO,EAAE,EAAA,EAAI,IAAA,EAAM,OAAO,CAAA;AAC1C;AAEO,MAAM,0BAA0B,KAAA,CAAM;AAAA,EAClC,IAAA;AAAA,EACA,cAAA;AAAA,EAET,WAAA,CAAY,MAAgC,cAAA,EAAgC;AAC1E,IAAA,KAAA,CAAM,IAAI,CAAA;AACV,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,cAAA,GAAiB,cAAA;AAAA,EACxB;AACF","file":"result.js","sourcesContent":["import type {\n ExpressionDiagnostic,\n ExpressionDiagnosticCode,\n ExpressionPath,\n Result,\n} from \"./types.js\";\n\nconst MESSAGES: Readonly<Record<ExpressionDiagnosticCode, string>> = Object.freeze({\n EXPRESSION_INVALID_INPUT: \"Expression input is invalid.\",\n EXPRESSION_LIMIT_EXCEEDED: \"Expression input exceeds a configured limit.\",\n EXPRESSION_INVALID_REFERENCE: \"Expression reference is invalid.\",\n EXPRESSION_UNKNOWN_OPERATOR: \"Expression operator is not in the selected profile.\",\n EXPRESSION_INVALID_ARITY: \"Expression operator has an invalid number of arguments.\",\n EXPRESSION_TYPE_MISMATCH: \"Expression operator received an incompatible value type.\",\n EXPRESSION_DIVISION_BY_ZERO: \"Expression division by zero is not allowed.\",\n EXPRESSION_NON_FINITE_RESULT: \"Expression arithmetic produced a non-finite result.\",\n EXPRESSION_REFERENCE_ERROR: \"Expression reference resolution failed.\",\n EXPRESSION_REFERENCE_MISSING: \"Expression reference is missing.\",\n EXPRESSION_REFERENCE_DENIED: \"Expression reference access was denied.\",\n EXPRESSION_OPERATOR_ERROR: \"Expression operator evaluation failed.\",\n EXPRESSION_ASYNC_UNSUPPORTED: \"Expression callbacks must return synchronously.\",\n EXPRESSION_EVALUATION_LIMIT: \"Expression evaluation exceeded its configured cost limit.\",\n EXPRESSION_INVALID_RESULT: \"Expression callback returned an invalid JSON value.\",\n});\n\nexport function diagnostic(\n code: ExpressionDiagnosticCode,\n path: ExpressionPath,\n): ExpressionDiagnostic {\n return Object.freeze({ code, path: Object.freeze([...path]), message: MESSAGES[code] });\n}\n\nexport function failure<T>(code: ExpressionDiagnosticCode, path: ExpressionPath): Result<T> {\n return Object.freeze({ ok: false, diagnostic: diagnostic(code, path) });\n}\n\nexport function success<T>(value: T): Result<T> {\n return Object.freeze({ ok: true, value });\n}\n\nexport class ExpressionFailure extends Error {\n readonly code: ExpressionDiagnosticCode;\n readonly expressionPath: ExpressionPath;\n\n constructor(code: ExpressionDiagnosticCode, expressionPath: ExpressionPath) {\n super(code);\n this.code = code;\n this.expressionPath = expressionPath;\n }\n}\n"]}
@@ -0,0 +1,173 @@
1
+ 'use strict';
2
+
3
+ var profile_js = require('./profile.js');
4
+ var result_js = require('./result.js');
5
+
6
+ function equal(left, right) {
7
+ if (typeof left !== typeof right || left === null || right === null) return left === right;
8
+ if (Array.isArray(left) || Array.isArray(right)) {
9
+ return Array.isArray(left) && Array.isArray(right) && arrayEqual(left, right);
10
+ }
11
+ if (typeof left === "object" && typeof right === "object") {
12
+ const leftObject = left;
13
+ const rightObject = right;
14
+ const leftKeys = Object.keys(leftObject);
15
+ const rightKeys = Object.keys(rightObject);
16
+ return leftKeys.length === rightKeys.length && leftKeys.every(
17
+ (key) => Object.hasOwn(rightObject, key) && equal(leftObject[key], rightObject[key])
18
+ );
19
+ }
20
+ return left === right;
21
+ }
22
+ function arrayEqual(left, right) {
23
+ return left.length === right.length && left.every((value, index) => equal(value, right[index]));
24
+ }
25
+ function compare(args, predicate) {
26
+ const [left, right] = args;
27
+ if (!sameComparableType(left, right)) throw new result_js.ExpressionFailure("EXPRESSION_TYPE_MISMATCH", []);
28
+ return predicate(left, right);
29
+ }
30
+ function sameComparableType(left, right) {
31
+ return typeof left === "number" && typeof right === "number" || typeof left === "string" && typeof right === "string";
32
+ }
33
+ function finiteNumbers(args) {
34
+ if (args.some((value) => typeof value !== "number")) {
35
+ throw new result_js.ExpressionFailure("EXPRESSION_TYPE_MISMATCH", []);
36
+ }
37
+ if (args.some((value) => !Number.isFinite(value)))
38
+ throw new result_js.ExpressionFailure("EXPRESSION_NON_FINITE_RESULT", []);
39
+ return args;
40
+ }
41
+ function arithmetic(args, calculate) {
42
+ const [left, right] = finiteNumbers(args);
43
+ const result = calculate(left, right);
44
+ if (!Number.isFinite(result)) throw new result_js.ExpressionFailure("EXPRESSION_NON_FINITE_RESULT", []);
45
+ return result;
46
+ }
47
+ const definitions = [
48
+ { name: "eq", arity: 2, resultType: "boolean", execute: ([left, right]) => equal(left, right) },
49
+ {
50
+ name: "neq",
51
+ arity: 2,
52
+ resultType: "boolean",
53
+ execute: ([left, right]) => !equal(left, right)
54
+ },
55
+ {
56
+ name: "gt",
57
+ arity: 2,
58
+ resultType: "boolean",
59
+ execute: (args) => compare(args, (left, right) => left > right)
60
+ },
61
+ {
62
+ name: "gte",
63
+ arity: 2,
64
+ resultType: "boolean",
65
+ execute: (args) => compare(args, (left, right) => left >= right)
66
+ },
67
+ {
68
+ name: "lt",
69
+ arity: 2,
70
+ resultType: "boolean",
71
+ execute: (args) => compare(args, (left, right) => left < right)
72
+ },
73
+ {
74
+ name: "lte",
75
+ arity: 2,
76
+ resultType: "boolean",
77
+ execute: (args) => compare(args, (left, right) => left <= right)
78
+ },
79
+ {
80
+ name: "not",
81
+ arity: 1,
82
+ inputTypes: ["boolean"],
83
+ resultType: "boolean",
84
+ execute: ([value]) => !value
85
+ },
86
+ {
87
+ name: "in",
88
+ arity: 2,
89
+ resultType: "boolean",
90
+ execute: ([value, choices]) => membership(value, choices, false)
91
+ },
92
+ {
93
+ name: "nin",
94
+ arity: 2,
95
+ resultType: "boolean",
96
+ execute: ([value, choices]) => membership(value, choices, true)
97
+ },
98
+ {
99
+ name: "add",
100
+ arity: 2,
101
+ inputTypes: ["number", "number"],
102
+ resultType: "number",
103
+ execute: (args) => arithmetic(args, (a, b) => a + b)
104
+ },
105
+ {
106
+ name: "sub",
107
+ arity: 2,
108
+ inputTypes: ["number", "number"],
109
+ resultType: "number",
110
+ execute: (args) => arithmetic(args, (a, b) => a - b)
111
+ },
112
+ {
113
+ name: "mul",
114
+ arity: 2,
115
+ inputTypes: ["number", "number"],
116
+ resultType: "number",
117
+ execute: (args) => arithmetic(args, (a, b) => a * b)
118
+ },
119
+ {
120
+ name: "div",
121
+ arity: 2,
122
+ inputTypes: ["number", "number"],
123
+ resultType: "number",
124
+ execute: divide
125
+ },
126
+ {
127
+ name: "and",
128
+ minArgs: 1,
129
+ maxArgs: 32,
130
+ inputTypes: ["boolean"],
131
+ resultType: "boolean",
132
+ strategy: "and",
133
+ execute: (args) => args.every(Boolean)
134
+ },
135
+ {
136
+ name: "or",
137
+ minArgs: 1,
138
+ maxArgs: 32,
139
+ inputTypes: ["boolean"],
140
+ resultType: "boolean",
141
+ strategy: "or",
142
+ execute: (args) => args.some(Boolean)
143
+ },
144
+ { name: "coalesce", minArgs: 1, maxArgs: 32, strategy: "coalesce", execute: (args) => args[0] },
145
+ { name: "exists", arity: 1, resultType: "boolean", strategy: "exists", execute: () => true },
146
+ {
147
+ name: "if",
148
+ arity: 3,
149
+ inputTypes: ["boolean", "any", "any"],
150
+ strategy: "if",
151
+ execute: ([condition, whenTrue, whenFalse]) => condition ? whenTrue : whenFalse
152
+ }
153
+ ];
154
+ function membership(value, choices, negate) {
155
+ if (!Array.isArray(choices)) throw new result_js.ExpressionFailure("EXPRESSION_TYPE_MISMATCH", []);
156
+ const includes = choices.some((candidate) => equal(value, candidate));
157
+ return negate ? !includes : includes;
158
+ }
159
+ function divide(args) {
160
+ const [left, right] = finiteNumbers(args);
161
+ if (Object.is(right, 0) || Object.is(right, -0)) {
162
+ throw new result_js.ExpressionFailure("EXPRESSION_DIVISION_BY_ZERO", []);
163
+ }
164
+ return arithmetic([left, right], (a, b) => a / b);
165
+ }
166
+ const standardV1 = profile_js.internalProfile.createStandardProfile(
167
+ "standard-v1",
168
+ definitions
169
+ );
170
+
171
+ exports.standardV1 = standardV1;
172
+ //# sourceMappingURL=standard-profile.cjs.map
173
+ //# sourceMappingURL=standard-profile.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/kuery-v1/standard-profile.ts"],"names":["ExpressionFailure","internalProfile"],"mappings":"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","file":"standard-profile.cjs","sourcesContent":["import {\n type ExpressionOperatorDefinition,\n type ExpressionProfile,\n internalProfile,\n} from \"./profile.js\";\nimport { ExpressionFailure } from \"./result.js\";\nimport type { JsonArray, JsonValue } from \"./types.js\";\n\nfunction equal(left: JsonValue, right: JsonValue): boolean {\n if (typeof left !== typeof right || left === null || right === null) return left === right;\n if (Array.isArray(left) || Array.isArray(right)) {\n return Array.isArray(left) && Array.isArray(right) && arrayEqual(left, right);\n }\n if (typeof left === \"object\" && typeof right === \"object\") {\n const leftObject = left as Readonly<Record<string, JsonValue>>;\n const rightObject = right as Readonly<Record<string, JsonValue>>;\n const leftKeys = Object.keys(leftObject);\n const rightKeys = Object.keys(rightObject);\n return (\n leftKeys.length === rightKeys.length &&\n leftKeys.every(\n (key) => Object.hasOwn(rightObject, key) && equal(leftObject[key]!, rightObject[key]!),\n )\n );\n }\n return left === right;\n}\n\nfunction arrayEqual(left: JsonArray, right: JsonArray): boolean {\n return left.length === right.length && left.every((value, index) => equal(value, right[index]!));\n}\n\nfunction compare(\n args: readonly JsonValue[],\n predicate: (left: number | string, right: number | string) => boolean,\n): boolean {\n const [left, right] = args;\n if (!sameComparableType(left, right)) throw new ExpressionFailure(\"EXPRESSION_TYPE_MISMATCH\", []);\n return predicate(left as number | string, right as number | string);\n}\n\nfunction sameComparableType(\n left: JsonValue | undefined,\n right: JsonValue | undefined,\n): left is number | string {\n return (\n (typeof left === \"number\" && typeof right === \"number\") ||\n (typeof left === \"string\" && typeof right === \"string\")\n );\n}\n\nfunction finiteNumbers(args: readonly JsonValue[]): readonly number[] {\n if (args.some((value) => typeof value !== \"number\")) {\n throw new ExpressionFailure(\"EXPRESSION_TYPE_MISMATCH\", []);\n }\n if (args.some((value) => !Number.isFinite(value)))\n throw new ExpressionFailure(\"EXPRESSION_NON_FINITE_RESULT\", []);\n return args as readonly number[];\n}\n\nfunction arithmetic(\n args: readonly JsonValue[],\n calculate: (left: number, right: number) => number,\n): number {\n const [left, right] = finiteNumbers(args);\n const result = calculate(left!, right!);\n if (!Number.isFinite(result)) throw new ExpressionFailure(\"EXPRESSION_NON_FINITE_RESULT\", []);\n return result;\n}\n\ntype StandardStrategy = \"and\" | \"or\" | \"coalesce\" | \"exists\" | \"if\";\ntype StandardDefinition = ExpressionOperatorDefinition & { readonly strategy?: StandardStrategy };\nconst definitions: readonly StandardDefinition[] = [\n { name: \"eq\", arity: 2, resultType: \"boolean\", execute: ([left, right]) => equal(left!, right!) },\n {\n name: \"neq\",\n arity: 2,\n resultType: \"boolean\",\n execute: ([left, right]) => !equal(left!, right!),\n },\n {\n name: \"gt\",\n arity: 2,\n resultType: \"boolean\",\n execute: (args) => compare(args, (left, right) => left > right),\n },\n {\n name: \"gte\",\n arity: 2,\n resultType: \"boolean\",\n execute: (args) => compare(args, (left, right) => left >= right),\n },\n {\n name: \"lt\",\n arity: 2,\n resultType: \"boolean\",\n execute: (args) => compare(args, (left, right) => left < right),\n },\n {\n name: \"lte\",\n arity: 2,\n resultType: \"boolean\",\n execute: (args) => compare(args, (left, right) => left <= right),\n },\n {\n name: \"not\",\n arity: 1,\n inputTypes: [\"boolean\"],\n resultType: \"boolean\",\n execute: ([value]) => !value,\n },\n {\n name: \"in\",\n arity: 2,\n resultType: \"boolean\",\n execute: ([value, choices]) => membership(value!, choices, false),\n },\n {\n name: \"nin\",\n arity: 2,\n resultType: \"boolean\",\n execute: ([value, choices]) => membership(value!, choices, true),\n },\n {\n name: \"add\",\n arity: 2,\n inputTypes: [\"number\", \"number\"],\n resultType: \"number\",\n execute: (args) => arithmetic(args, (a, b) => a + b),\n },\n {\n name: \"sub\",\n arity: 2,\n inputTypes: [\"number\", \"number\"],\n resultType: \"number\",\n execute: (args) => arithmetic(args, (a, b) => a - b),\n },\n {\n name: \"mul\",\n arity: 2,\n inputTypes: [\"number\", \"number\"],\n resultType: \"number\",\n execute: (args) => arithmetic(args, (a, b) => a * b),\n },\n {\n name: \"div\",\n arity: 2,\n inputTypes: [\"number\", \"number\"],\n resultType: \"number\",\n execute: divide,\n },\n {\n name: \"and\",\n minArgs: 1,\n maxArgs: 32,\n inputTypes: [\"boolean\"],\n resultType: \"boolean\",\n strategy: \"and\",\n execute: (args) => args.every(Boolean),\n },\n {\n name: \"or\",\n minArgs: 1,\n maxArgs: 32,\n inputTypes: [\"boolean\"],\n resultType: \"boolean\",\n strategy: \"or\",\n execute: (args) => args.some(Boolean),\n },\n { name: \"coalesce\", minArgs: 1, maxArgs: 32, strategy: \"coalesce\", execute: (args) => args[0]! },\n { name: \"exists\", arity: 1, resultType: \"boolean\", strategy: \"exists\", execute: () => true },\n {\n name: \"if\",\n arity: 3,\n inputTypes: [\"boolean\", \"any\", \"any\"],\n strategy: \"if\",\n execute: ([condition, whenTrue, whenFalse]) => (condition ? whenTrue! : whenFalse!),\n },\n];\n\nfunction membership(value: JsonValue, choices: JsonValue | undefined, negate: boolean): boolean {\n if (!Array.isArray(choices)) throw new ExpressionFailure(\"EXPRESSION_TYPE_MISMATCH\", []);\n const includes = choices.some((candidate) => equal(value, candidate));\n return negate ? !includes : includes;\n}\n\nfunction divide(args: readonly JsonValue[]): number {\n const [left, right] = finiteNumbers(args);\n if (Object.is(right, 0) || Object.is(right, -0)) {\n throw new ExpressionFailure(\"EXPRESSION_DIVISION_BY_ZERO\", []);\n }\n return arithmetic([left!, right!], (a, b) => a / b);\n}\n\n/** Strict, structurally immutable built-in profile, isolated from legacy and custom registries. */\nexport const standardV1: ExpressionProfile = internalProfile.createStandardProfile(\n \"standard-v1\",\n definitions,\n);\n"]}
@@ -0,0 +1,7 @@
1
+ import { ExpressionProfile } from './profile.cjs';
2
+ import './types.cjs';
3
+
4
+ /** Strict, structurally immutable built-in profile, isolated from legacy and custom registries. */
5
+ declare const standardV1: ExpressionProfile;
6
+
7
+ export { standardV1 };
@@ -0,0 +1,7 @@
1
+ import { ExpressionProfile } from './profile.js';
2
+ import './types.js';
3
+
4
+ /** Strict, structurally immutable built-in profile, isolated from legacy and custom registries. */
5
+ declare const standardV1: ExpressionProfile;
6
+
7
+ export { standardV1 };
@@ -0,0 +1,171 @@
1
+ import { internalProfile } from './profile.js';
2
+ import { ExpressionFailure } from './result.js';
3
+
4
+ function equal(left, right) {
5
+ if (typeof left !== typeof right || left === null || right === null) return left === right;
6
+ if (Array.isArray(left) || Array.isArray(right)) {
7
+ return Array.isArray(left) && Array.isArray(right) && arrayEqual(left, right);
8
+ }
9
+ if (typeof left === "object" && typeof right === "object") {
10
+ const leftObject = left;
11
+ const rightObject = right;
12
+ const leftKeys = Object.keys(leftObject);
13
+ const rightKeys = Object.keys(rightObject);
14
+ return leftKeys.length === rightKeys.length && leftKeys.every(
15
+ (key) => Object.hasOwn(rightObject, key) && equal(leftObject[key], rightObject[key])
16
+ );
17
+ }
18
+ return left === right;
19
+ }
20
+ function arrayEqual(left, right) {
21
+ return left.length === right.length && left.every((value, index) => equal(value, right[index]));
22
+ }
23
+ function compare(args, predicate) {
24
+ const [left, right] = args;
25
+ if (!sameComparableType(left, right)) throw new ExpressionFailure("EXPRESSION_TYPE_MISMATCH", []);
26
+ return predicate(left, right);
27
+ }
28
+ function sameComparableType(left, right) {
29
+ return typeof left === "number" && typeof right === "number" || typeof left === "string" && typeof right === "string";
30
+ }
31
+ function finiteNumbers(args) {
32
+ if (args.some((value) => typeof value !== "number")) {
33
+ throw new ExpressionFailure("EXPRESSION_TYPE_MISMATCH", []);
34
+ }
35
+ if (args.some((value) => !Number.isFinite(value)))
36
+ throw new ExpressionFailure("EXPRESSION_NON_FINITE_RESULT", []);
37
+ return args;
38
+ }
39
+ function arithmetic(args, calculate) {
40
+ const [left, right] = finiteNumbers(args);
41
+ const result = calculate(left, right);
42
+ if (!Number.isFinite(result)) throw new ExpressionFailure("EXPRESSION_NON_FINITE_RESULT", []);
43
+ return result;
44
+ }
45
+ const definitions = [
46
+ { name: "eq", arity: 2, resultType: "boolean", execute: ([left, right]) => equal(left, right) },
47
+ {
48
+ name: "neq",
49
+ arity: 2,
50
+ resultType: "boolean",
51
+ execute: ([left, right]) => !equal(left, right)
52
+ },
53
+ {
54
+ name: "gt",
55
+ arity: 2,
56
+ resultType: "boolean",
57
+ execute: (args) => compare(args, (left, right) => left > right)
58
+ },
59
+ {
60
+ name: "gte",
61
+ arity: 2,
62
+ resultType: "boolean",
63
+ execute: (args) => compare(args, (left, right) => left >= right)
64
+ },
65
+ {
66
+ name: "lt",
67
+ arity: 2,
68
+ resultType: "boolean",
69
+ execute: (args) => compare(args, (left, right) => left < right)
70
+ },
71
+ {
72
+ name: "lte",
73
+ arity: 2,
74
+ resultType: "boolean",
75
+ execute: (args) => compare(args, (left, right) => left <= right)
76
+ },
77
+ {
78
+ name: "not",
79
+ arity: 1,
80
+ inputTypes: ["boolean"],
81
+ resultType: "boolean",
82
+ execute: ([value]) => !value
83
+ },
84
+ {
85
+ name: "in",
86
+ arity: 2,
87
+ resultType: "boolean",
88
+ execute: ([value, choices]) => membership(value, choices, false)
89
+ },
90
+ {
91
+ name: "nin",
92
+ arity: 2,
93
+ resultType: "boolean",
94
+ execute: ([value, choices]) => membership(value, choices, true)
95
+ },
96
+ {
97
+ name: "add",
98
+ arity: 2,
99
+ inputTypes: ["number", "number"],
100
+ resultType: "number",
101
+ execute: (args) => arithmetic(args, (a, b) => a + b)
102
+ },
103
+ {
104
+ name: "sub",
105
+ arity: 2,
106
+ inputTypes: ["number", "number"],
107
+ resultType: "number",
108
+ execute: (args) => arithmetic(args, (a, b) => a - b)
109
+ },
110
+ {
111
+ name: "mul",
112
+ arity: 2,
113
+ inputTypes: ["number", "number"],
114
+ resultType: "number",
115
+ execute: (args) => arithmetic(args, (a, b) => a * b)
116
+ },
117
+ {
118
+ name: "div",
119
+ arity: 2,
120
+ inputTypes: ["number", "number"],
121
+ resultType: "number",
122
+ execute: divide
123
+ },
124
+ {
125
+ name: "and",
126
+ minArgs: 1,
127
+ maxArgs: 32,
128
+ inputTypes: ["boolean"],
129
+ resultType: "boolean",
130
+ strategy: "and",
131
+ execute: (args) => args.every(Boolean)
132
+ },
133
+ {
134
+ name: "or",
135
+ minArgs: 1,
136
+ maxArgs: 32,
137
+ inputTypes: ["boolean"],
138
+ resultType: "boolean",
139
+ strategy: "or",
140
+ execute: (args) => args.some(Boolean)
141
+ },
142
+ { name: "coalesce", minArgs: 1, maxArgs: 32, strategy: "coalesce", execute: (args) => args[0] },
143
+ { name: "exists", arity: 1, resultType: "boolean", strategy: "exists", execute: () => true },
144
+ {
145
+ name: "if",
146
+ arity: 3,
147
+ inputTypes: ["boolean", "any", "any"],
148
+ strategy: "if",
149
+ execute: ([condition, whenTrue, whenFalse]) => condition ? whenTrue : whenFalse
150
+ }
151
+ ];
152
+ function membership(value, choices, negate) {
153
+ if (!Array.isArray(choices)) throw new ExpressionFailure("EXPRESSION_TYPE_MISMATCH", []);
154
+ const includes = choices.some((candidate) => equal(value, candidate));
155
+ return negate ? !includes : includes;
156
+ }
157
+ function divide(args) {
158
+ const [left, right] = finiteNumbers(args);
159
+ if (Object.is(right, 0) || Object.is(right, -0)) {
160
+ throw new ExpressionFailure("EXPRESSION_DIVISION_BY_ZERO", []);
161
+ }
162
+ return arithmetic([left, right], (a, b) => a / b);
163
+ }
164
+ const standardV1 = internalProfile.createStandardProfile(
165
+ "standard-v1",
166
+ definitions
167
+ );
168
+
169
+ export { standardV1 };
170
+ //# sourceMappingURL=standard-profile.js.map
171
+ //# sourceMappingURL=standard-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/kuery-v1/standard-profile.ts"],"names":[],"mappings":";;;AAQA,SAAS,KAAA,CAAM,MAAiB,KAAA,EAA2B;AACzD,EAAA,IAAI,OAAO,SAAS,OAAO,KAAA,IAAS,SAAS,IAAA,IAAQ,KAAA,KAAU,IAAA,EAAM,OAAO,IAAA,KAAS,KAAA;AACrF,EAAA,IAAI,MAAM,OAAA,CAAQ,IAAI,KAAK,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/C,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,IAAK,KAAA,CAAM,QAAQ,KAAK,CAAA,IAAK,UAAA,CAAW,IAAA,EAAM,KAAK,CAAA;AAAA,EAC9E;AACA,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AACzD,IAAA,MAAM,UAAA,GAAa,IAAA;AACnB,IAAA,MAAM,WAAA,GAAc,KAAA;AACpB,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AACvC,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA;AACzC,IAAA,OACE,QAAA,CAAS,MAAA,KAAW,SAAA,CAAU,MAAA,IAC9B,QAAA,CAAS,KAAA;AAAA,MACP,CAAC,GAAA,KAAQ,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa,GAAG,CAAA,IAAK,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA,EAAI,WAAA,CAAY,GAAG,CAAE;AAAA,KACvF;AAAA,EAEJ;AACA,EAAA,OAAO,IAAA,KAAS,KAAA;AAClB;AAEA,SAAS,UAAA,CAAW,MAAiB,KAAA,EAA2B;AAC9D,EAAA,OAAO,IAAA,CAAK,MAAA,KAAW,KAAA,CAAM,MAAA,IAAU,KAAK,KAAA,CAAM,CAAC,KAAA,EAAO,KAAA,KAAU,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,KAAK,CAAE,CAAC,CAAA;AACjG;AAEA,SAAS,OAAA,CACP,MACA,SAAA,EACS;AACT,EAAA,MAAM,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,IAAA;AACtB,EAAA,IAAI,CAAC,kBAAA,CAAmB,IAAA,EAAM,KAAK,CAAA,QAAS,IAAI,iBAAA,CAAkB,0BAAA,EAA4B,EAAE,CAAA;AAChG,EAAA,OAAO,SAAA,CAAU,MAAyB,KAAwB,CAAA;AACpE;AAEA,SAAS,kBAAA,CACP,MACA,KAAA,EACyB;AACzB,EAAA,OACG,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,KAAA,KAAU,YAC7C,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,KAAA,KAAU,QAAA;AAElD;AAEA,SAAS,cAAc,IAAA,EAA+C;AACpE,EAAA,IAAI,KAAK,IAAA,CAAK,CAAC,UAAU,OAAO,KAAA,KAAU,QAAQ,CAAA,EAAG;AACnD,IAAA,MAAM,IAAI,iBAAA,CAAkB,0BAAA,EAA4B,EAAE,CAAA;AAAA,EAC5D;AACA,EAAA,IAAI,IAAA,CAAK,KAAK,CAAC,KAAA,KAAU,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAC,CAAA;AAC9C,IAAA,MAAM,IAAI,iBAAA,CAAkB,8BAAA,EAAgC,EAAE,CAAA;AAChE,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,UAAA,CACP,MACA,SAAA,EACQ;AACR,EAAA,MAAM,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,cAAc,IAAI,CAAA;AACxC,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,IAAA,EAAO,KAAM,CAAA;AACtC,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,QAAS,IAAI,iBAAA,CAAkB,8BAAA,EAAgC,EAAE,CAAA;AAC5F,EAAA,OAAO,MAAA;AACT;AAIA,MAAM,WAAA,GAA6C;AAAA,EACjD,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,CAAA,EAAG,YAAY,SAAA,EAAW,OAAA,EAAS,CAAC,CAAC,MAAM,KAAK,CAAA,KAAM,KAAA,CAAM,IAAA,EAAO,KAAM,CAAA,EAAE;AAAA,EAChG;AAAA,IACE,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAS,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM,CAAC,KAAA,CAAM,IAAA,EAAO,KAAM;AAAA,GAClD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAS,CAAC,IAAA,KAAS,OAAA,CAAQ,MAAM,CAAC,IAAA,EAAM,KAAA,KAAU,IAAA,GAAO,KAAK;AAAA,GAChE;AAAA,EACA;AAAA,IACE,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAS,CAAC,IAAA,KAAS,OAAA,CAAQ,MAAM,CAAC,IAAA,EAAM,KAAA,KAAU,IAAA,IAAQ,KAAK;AAAA,GACjE;AAAA,EACA;AAAA,IACE,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAS,CAAC,IAAA,KAAS,OAAA,CAAQ,MAAM,CAAC,IAAA,EAAM,KAAA,KAAU,IAAA,GAAO,KAAK;AAAA,GAChE;AAAA,EACA;AAAA,IACE,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAS,CAAC,IAAA,KAAS,OAAA,CAAQ,MAAM,CAAC,IAAA,EAAM,KAAA,KAAU,IAAA,IAAQ,KAAK;AAAA,GACjE;AAAA,EACA;AAAA,IACE,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,IACtB,UAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAS,CAAC,CAAC,KAAK,MAAM,CAAC;AAAA,GACzB;AAAA,EACA;AAAA,IACE,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAS,CAAC,CAAC,KAAA,EAAO,OAAO,CAAA,KAAM,UAAA,CAAW,KAAA,EAAQ,OAAA,EAAS,KAAK;AAAA,GAClE;AAAA,EACA;AAAA,IACE,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAS,CAAC,CAAC,KAAA,EAAO,OAAO,CAAA,KAAM,UAAA,CAAW,KAAA,EAAQ,OAAA,EAAS,IAAI;AAAA,GACjE;AAAA,EACA;AAAA,IACE,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,IAC/B,UAAA,EAAY,QAAA;AAAA,IACZ,OAAA,EAAS,CAAC,IAAA,KAAS,UAAA,CAAW,MAAM,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC;AAAA,GACrD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,IAC/B,UAAA,EAAY,QAAA;AAAA,IACZ,OAAA,EAAS,CAAC,IAAA,KAAS,UAAA,CAAW,MAAM,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC;AAAA,GACrD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,IAC/B,UAAA,EAAY,QAAA;AAAA,IACZ,OAAA,EAAS,CAAC,IAAA,KAAS,UAAA,CAAW,MAAM,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC;AAAA,GACrD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,IAC/B,UAAA,EAAY,QAAA;AAAA,IACZ,OAAA,EAAS;AAAA,GACX;AAAA,EACA;AAAA,IACE,IAAA,EAAM,KAAA;AAAA,IACN,OAAA,EAAS,CAAA;AAAA,IACT,OAAA,EAAS,EAAA;AAAA,IACT,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,IACtB,UAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV,OAAA,EAAS,CAAC,IAAA,KAAS,IAAA,CAAK,MAAM,OAAO;AAAA,GACvC;AAAA,EACA;AAAA,IACE,IAAA,EAAM,IAAA;AAAA,IACN,OAAA,EAAS,CAAA;AAAA,IACT,OAAA,EAAS,EAAA;AAAA,IACT,UAAA,EAAY,CAAC,SAAS,CAAA;AAAA,IACtB,UAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAU,IAAA;AAAA,IACV,OAAA,EAAS,CAAC,IAAA,KAAS,IAAA,CAAK,KAAK,OAAO;AAAA,GACtC;AAAA,EACA,EAAE,IAAA,EAAM,UAAA,EAAY,OAAA,EAAS,GAAG,OAAA,EAAS,EAAA,EAAI,QAAA,EAAU,UAAA,EAAY,OAAA,EAAS,CAAC,IAAA,KAAS,IAAA,CAAK,CAAC,CAAA,EAAG;AAAA,EAC/F,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,CAAA,EAAG,UAAA,EAAY,SAAA,EAAW,QAAA,EAAU,QAAA,EAAU,OAAA,EAAS,MAAM,IAAA,EAAK;AAAA,EAC3F;AAAA,IACE,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY,CAAC,SAAA,EAAW,KAAA,EAAO,KAAK,CAAA;AAAA,IACpC,QAAA,EAAU,IAAA;AAAA,IACV,OAAA,EAAS,CAAC,CAAC,SAAA,EAAW,UAAU,SAAS,CAAA,KAAO,YAAY,QAAA,GAAY;AAAA;AAE5E,CAAA;AAEA,SAAS,UAAA,CAAW,KAAA,EAAkB,OAAA,EAAgC,MAAA,EAA0B;AAC9F,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,QAAS,IAAI,iBAAA,CAAkB,0BAAA,EAA4B,EAAE,CAAA;AACvF,EAAA,MAAM,QAAA,GAAW,QAAQ,IAAA,CAAK,CAAC,cAAc,KAAA,CAAM,KAAA,EAAO,SAAS,CAAC,CAAA;AACpE,EAAA,OAAO,MAAA,GAAS,CAAC,QAAA,GAAW,QAAA;AAC9B;AAEA,SAAS,OAAO,IAAA,EAAoC;AAClD,EAAA,MAAM,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,cAAc,IAAI,CAAA;AACxC,EAAA,IAAI,MAAA,CAAO,GAAG,KAAA,EAAO,CAAC,KAAK,MAAA,CAAO,EAAA,CAAG,KAAA,EAAO,EAAE,CAAA,EAAG;AAC/C,IAAA,MAAM,IAAI,iBAAA,CAAkB,6BAAA,EAA+B,EAAE,CAAA;AAAA,EAC/D;AACA,EAAA,OAAO,UAAA,CAAW,CAAC,IAAA,EAAO,KAAM,GAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AACpD;AAGO,MAAM,aAAgC,eAAA,CAAgB,qBAAA;AAAA,EAC3D,aAAA;AAAA,EACA;AACF","file":"standard-profile.js","sourcesContent":["import {\n type ExpressionOperatorDefinition,\n type ExpressionProfile,\n internalProfile,\n} from \"./profile.js\";\nimport { ExpressionFailure } from \"./result.js\";\nimport type { JsonArray, JsonValue } from \"./types.js\";\n\nfunction equal(left: JsonValue, right: JsonValue): boolean {\n if (typeof left !== typeof right || left === null || right === null) return left === right;\n if (Array.isArray(left) || Array.isArray(right)) {\n return Array.isArray(left) && Array.isArray(right) && arrayEqual(left, right);\n }\n if (typeof left === \"object\" && typeof right === \"object\") {\n const leftObject = left as Readonly<Record<string, JsonValue>>;\n const rightObject = right as Readonly<Record<string, JsonValue>>;\n const leftKeys = Object.keys(leftObject);\n const rightKeys = Object.keys(rightObject);\n return (\n leftKeys.length === rightKeys.length &&\n leftKeys.every(\n (key) => Object.hasOwn(rightObject, key) && equal(leftObject[key]!, rightObject[key]!),\n )\n );\n }\n return left === right;\n}\n\nfunction arrayEqual(left: JsonArray, right: JsonArray): boolean {\n return left.length === right.length && left.every((value, index) => equal(value, right[index]!));\n}\n\nfunction compare(\n args: readonly JsonValue[],\n predicate: (left: number | string, right: number | string) => boolean,\n): boolean {\n const [left, right] = args;\n if (!sameComparableType(left, right)) throw new ExpressionFailure(\"EXPRESSION_TYPE_MISMATCH\", []);\n return predicate(left as number | string, right as number | string);\n}\n\nfunction sameComparableType(\n left: JsonValue | undefined,\n right: JsonValue | undefined,\n): left is number | string {\n return (\n (typeof left === \"number\" && typeof right === \"number\") ||\n (typeof left === \"string\" && typeof right === \"string\")\n );\n}\n\nfunction finiteNumbers(args: readonly JsonValue[]): readonly number[] {\n if (args.some((value) => typeof value !== \"number\")) {\n throw new ExpressionFailure(\"EXPRESSION_TYPE_MISMATCH\", []);\n }\n if (args.some((value) => !Number.isFinite(value)))\n throw new ExpressionFailure(\"EXPRESSION_NON_FINITE_RESULT\", []);\n return args as readonly number[];\n}\n\nfunction arithmetic(\n args: readonly JsonValue[],\n calculate: (left: number, right: number) => number,\n): number {\n const [left, right] = finiteNumbers(args);\n const result = calculate(left!, right!);\n if (!Number.isFinite(result)) throw new ExpressionFailure(\"EXPRESSION_NON_FINITE_RESULT\", []);\n return result;\n}\n\ntype StandardStrategy = \"and\" | \"or\" | \"coalesce\" | \"exists\" | \"if\";\ntype StandardDefinition = ExpressionOperatorDefinition & { readonly strategy?: StandardStrategy };\nconst definitions: readonly StandardDefinition[] = [\n { name: \"eq\", arity: 2, resultType: \"boolean\", execute: ([left, right]) => equal(left!, right!) },\n {\n name: \"neq\",\n arity: 2,\n resultType: \"boolean\",\n execute: ([left, right]) => !equal(left!, right!),\n },\n {\n name: \"gt\",\n arity: 2,\n resultType: \"boolean\",\n execute: (args) => compare(args, (left, right) => left > right),\n },\n {\n name: \"gte\",\n arity: 2,\n resultType: \"boolean\",\n execute: (args) => compare(args, (left, right) => left >= right),\n },\n {\n name: \"lt\",\n arity: 2,\n resultType: \"boolean\",\n execute: (args) => compare(args, (left, right) => left < right),\n },\n {\n name: \"lte\",\n arity: 2,\n resultType: \"boolean\",\n execute: (args) => compare(args, (left, right) => left <= right),\n },\n {\n name: \"not\",\n arity: 1,\n inputTypes: [\"boolean\"],\n resultType: \"boolean\",\n execute: ([value]) => !value,\n },\n {\n name: \"in\",\n arity: 2,\n resultType: \"boolean\",\n execute: ([value, choices]) => membership(value!, choices, false),\n },\n {\n name: \"nin\",\n arity: 2,\n resultType: \"boolean\",\n execute: ([value, choices]) => membership(value!, choices, true),\n },\n {\n name: \"add\",\n arity: 2,\n inputTypes: [\"number\", \"number\"],\n resultType: \"number\",\n execute: (args) => arithmetic(args, (a, b) => a + b),\n },\n {\n name: \"sub\",\n arity: 2,\n inputTypes: [\"number\", \"number\"],\n resultType: \"number\",\n execute: (args) => arithmetic(args, (a, b) => a - b),\n },\n {\n name: \"mul\",\n arity: 2,\n inputTypes: [\"number\", \"number\"],\n resultType: \"number\",\n execute: (args) => arithmetic(args, (a, b) => a * b),\n },\n {\n name: \"div\",\n arity: 2,\n inputTypes: [\"number\", \"number\"],\n resultType: \"number\",\n execute: divide,\n },\n {\n name: \"and\",\n minArgs: 1,\n maxArgs: 32,\n inputTypes: [\"boolean\"],\n resultType: \"boolean\",\n strategy: \"and\",\n execute: (args) => args.every(Boolean),\n },\n {\n name: \"or\",\n minArgs: 1,\n maxArgs: 32,\n inputTypes: [\"boolean\"],\n resultType: \"boolean\",\n strategy: \"or\",\n execute: (args) => args.some(Boolean),\n },\n { name: \"coalesce\", minArgs: 1, maxArgs: 32, strategy: \"coalesce\", execute: (args) => args[0]! },\n { name: \"exists\", arity: 1, resultType: \"boolean\", strategy: \"exists\", execute: () => true },\n {\n name: \"if\",\n arity: 3,\n inputTypes: [\"boolean\", \"any\", \"any\"],\n strategy: \"if\",\n execute: ([condition, whenTrue, whenFalse]) => (condition ? whenTrue! : whenFalse!),\n },\n];\n\nfunction membership(value: JsonValue, choices: JsonValue | undefined, negate: boolean): boolean {\n if (!Array.isArray(choices)) throw new ExpressionFailure(\"EXPRESSION_TYPE_MISMATCH\", []);\n const includes = choices.some((candidate) => equal(value, candidate));\n return negate ? !includes : includes;\n}\n\nfunction divide(args: readonly JsonValue[]): number {\n const [left, right] = finiteNumbers(args);\n if (Object.is(right, 0) || Object.is(right, -0)) {\n throw new ExpressionFailure(\"EXPRESSION_DIVISION_BY_ZERO\", []);\n }\n return arithmetic([left!, right!], (a, b) => a / b);\n}\n\n/** Strict, structurally immutable built-in profile, isolated from legacy and custom registries. */\nexport const standardV1: ExpressionProfile = internalProfile.createStandardProfile(\n \"standard-v1\",\n definitions,\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,65 @@
1
+ /** JSON data accepted and produced by the strict expression API. */
2
+ type JsonPrimitive = null | boolean | number | string;
3
+ type JsonValue = JsonPrimitive | JsonArray | JsonObject;
4
+ type JsonArray = readonly JsonValue[];
5
+ type JsonObject = {
6
+ readonly [key: string]: JsonValue;
7
+ };
8
+ /** A literal, opaque reference, or operator application. */
9
+ type ValueExpression<R extends JsonValue = string> = {
10
+ readonly kind: "literal";
11
+ readonly value: JsonValue;
12
+ } | {
13
+ readonly kind: "ref";
14
+ readonly ref: R;
15
+ } | {
16
+ readonly kind: "op";
17
+ readonly op: string;
18
+ readonly args: readonly ValueExpression<R>[];
19
+ };
20
+ type ExpressionPath = readonly (string | number)[];
21
+ type ExpressionDiagnosticCode = "EXPRESSION_INVALID_INPUT" | "EXPRESSION_LIMIT_EXCEEDED" | "EXPRESSION_INVALID_REFERENCE" | "EXPRESSION_UNKNOWN_OPERATOR" | "EXPRESSION_INVALID_ARITY" | "EXPRESSION_TYPE_MISMATCH" | "EXPRESSION_DIVISION_BY_ZERO" | "EXPRESSION_NON_FINITE_RESULT" | "EXPRESSION_REFERENCE_ERROR" | "EXPRESSION_REFERENCE_MISSING" | "EXPRESSION_REFERENCE_DENIED" | "EXPRESSION_OPERATOR_ERROR" | "EXPRESSION_ASYNC_UNSUPPORTED" | "EXPRESSION_EVALUATION_LIMIT" | "EXPRESSION_INVALID_RESULT";
22
+ interface ExpressionDiagnostic {
23
+ readonly code: ExpressionDiagnosticCode;
24
+ readonly path: ExpressionPath;
25
+ readonly message: string;
26
+ }
27
+ type Result<T> = {
28
+ readonly ok: true;
29
+ readonly value: T;
30
+ } | {
31
+ readonly ok: false;
32
+ readonly diagnostic: ExpressionDiagnostic;
33
+ };
34
+ interface ExpressionLimits {
35
+ readonly maxDepth: number;
36
+ readonly maxNodes: number;
37
+ readonly maxArgs: number;
38
+ readonly maxStringLength: number;
39
+ readonly maxReferenceLength: number;
40
+ readonly maxEvaluationSteps: number;
41
+ }
42
+ interface ReferenceCodec<R extends JsonValue> {
43
+ readonly validate: (input: unknown) => input is R;
44
+ readonly canonicalize?: (reference: R) => R;
45
+ }
46
+ interface CanonicalizeExpressionOptions<R extends JsonValue> {
47
+ readonly reference?: ReferenceCodec<R>;
48
+ readonly limits?: Partial<ExpressionLimits>;
49
+ }
50
+ type ReferenceResolution = {
51
+ readonly found: true;
52
+ readonly value: JsonValue;
53
+ } | {
54
+ readonly found: false;
55
+ readonly reason?: "missing" | "denied" | undefined;
56
+ };
57
+ /** Trusted host callback. Throwing and asynchronous outcomes are contained as diagnostics. */
58
+ type ReferenceResolver<R extends JsonValue> = (reference: R) => ReferenceResolution;
59
+ interface CompiledExpression<R extends JsonValue> {
60
+ readonly expression: ValueExpression<R>;
61
+ readonly dependencies: readonly R[];
62
+ evaluate(resolve: ReferenceResolver<R>): Result<JsonValue>;
63
+ }
64
+
65
+ export type { CanonicalizeExpressionOptions, CompiledExpression, ExpressionDiagnostic, ExpressionDiagnosticCode, ExpressionLimits, ExpressionPath, JsonArray, JsonObject, JsonPrimitive, JsonValue, ReferenceCodec, ReferenceResolution, ReferenceResolver, Result, ValueExpression };