@rippling/rippling-sdk 0.2.0-alpha.108 → 0.2.0-alpha.109

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 (131) hide show
  1. package/client.d.mts +3 -0
  2. package/client.d.mts.map +1 -1
  3. package/client.d.ts +3 -0
  4. package/client.d.ts.map +1 -1
  5. package/client.js +3 -0
  6. package/client.js.map +1 -1
  7. package/client.mjs +3 -0
  8. package/client.mjs.map +1 -1
  9. package/lib/charts/builders.d.mts +18 -19
  10. package/lib/charts/builders.d.mts.map +1 -1
  11. package/lib/charts/builders.d.ts +18 -19
  12. package/lib/charts/builders.d.ts.map +1 -1
  13. package/lib/charts/builders.js +35 -28
  14. package/lib/charts/builders.js.map +1 -1
  15. package/lib/charts/builders.mjs +35 -28
  16. package/lib/charts/builders.mjs.map +1 -1
  17. package/lib/charts/describe.d.mts +6 -7
  18. package/lib/charts/describe.d.mts.map +1 -1
  19. package/lib/charts/describe.d.ts +6 -7
  20. package/lib/charts/describe.d.ts.map +1 -1
  21. package/lib/charts/describe.js +26 -27
  22. package/lib/charts/describe.js.map +1 -1
  23. package/lib/charts/describe.mjs +27 -28
  24. package/lib/charts/describe.mjs.map +1 -1
  25. package/lib/charts/errors.d.mts +2 -6
  26. package/lib/charts/errors.d.mts.map +1 -1
  27. package/lib/charts/errors.d.ts +2 -6
  28. package/lib/charts/errors.d.ts.map +1 -1
  29. package/lib/charts/errors.js +2 -6
  30. package/lib/charts/errors.js.map +1 -1
  31. package/lib/charts/errors.mjs +2 -6
  32. package/lib/charts/errors.mjs.map +1 -1
  33. package/lib/charts/evaluate.d.mts +5 -7
  34. package/lib/charts/evaluate.d.mts.map +1 -1
  35. package/lib/charts/evaluate.d.ts +5 -7
  36. package/lib/charts/evaluate.d.ts.map +1 -1
  37. package/lib/charts/evaluate.js +21 -35
  38. package/lib/charts/evaluate.js.map +1 -1
  39. package/lib/charts/evaluate.mjs +22 -36
  40. package/lib/charts/evaluate.mjs.map +1 -1
  41. package/lib/charts/schema.d.mts +8 -97
  42. package/lib/charts/schema.d.mts.map +1 -1
  43. package/lib/charts/schema.d.ts +8 -97
  44. package/lib/charts/schema.d.ts.map +1 -1
  45. package/lib/charts/schema.js +186 -65
  46. package/lib/charts/schema.js.map +1 -1
  47. package/lib/charts/schema.mjs +185 -65
  48. package/lib/charts/schema.mjs.map +1 -1
  49. package/lib/charts/types.d.mts +40 -25
  50. package/lib/charts/types.d.mts.map +1 -1
  51. package/lib/charts/types.d.ts +40 -25
  52. package/lib/charts/types.d.ts.map +1 -1
  53. package/lib/charts/types.js +8 -10
  54. package/lib/charts/types.js.map +1 -1
  55. package/lib/charts/types.mjs +8 -10
  56. package/lib/charts/types.mjs.map +1 -1
  57. package/lib/charts/visualization-grammar.d.mts +66 -0
  58. package/lib/charts/visualization-grammar.d.mts.map +1 -0
  59. package/lib/charts/visualization-grammar.d.ts +66 -0
  60. package/lib/charts/visualization-grammar.d.ts.map +1 -0
  61. package/lib/charts/visualization-grammar.js +70 -0
  62. package/lib/charts/visualization-grammar.js.map +1 -0
  63. package/lib/charts/visualization-grammar.mjs +67 -0
  64. package/lib/charts/visualization-grammar.mjs.map +1 -0
  65. package/lib/charts/vocabulary.d.mts +7 -0
  66. package/lib/charts/vocabulary.d.mts.map +1 -0
  67. package/lib/charts/vocabulary.d.ts +7 -0
  68. package/lib/charts/vocabulary.d.ts.map +1 -0
  69. package/lib/charts/vocabulary.js +10 -0
  70. package/lib/charts/vocabulary.js.map +1 -0
  71. package/lib/charts/vocabulary.mjs +7 -0
  72. package/lib/charts/vocabulary.mjs.map +1 -0
  73. package/lib/charts.d.mts +3 -3
  74. package/lib/charts.d.mts.map +1 -1
  75. package/lib/charts.d.ts +3 -3
  76. package/lib/charts.d.ts.map +1 -1
  77. package/lib/charts.js +2 -1
  78. package/lib/charts.js.map +1 -1
  79. package/lib/charts.mjs +1 -1
  80. package/lib/charts.mjs.map +1 -1
  81. package/package.json +4 -2
  82. package/resources/index.d.mts +1 -0
  83. package/resources/index.d.mts.map +1 -1
  84. package/resources/index.d.ts +1 -0
  85. package/resources/index.d.ts.map +1 -1
  86. package/resources/index.js +4 -2
  87. package/resources/index.js.map +1 -1
  88. package/resources/index.mjs +1 -0
  89. package/resources/index.mjs.map +1 -1
  90. package/resources/reimbursements.d.mts +1 -1
  91. package/resources/reimbursements.d.ts +1 -1
  92. package/resources/reimbursements.js +1 -1
  93. package/resources/reimbursements.mjs +1 -1
  94. package/resources/spend-categories.d.mts +140 -0
  95. package/resources/spend-categories.d.mts.map +1 -0
  96. package/resources/spend-categories.d.ts +140 -0
  97. package/resources/spend-categories.d.ts.map +1 -0
  98. package/resources/spend-categories.js +83 -0
  99. package/resources/spend-categories.js.map +1 -0
  100. package/resources/spend-categories.mjs +79 -0
  101. package/resources/spend-categories.mjs.map +1 -0
  102. package/src/client.ts +17 -0
  103. package/src/lib/charts/README.md +35 -28
  104. package/src/lib/charts/agent-reference.md +73 -0
  105. package/src/lib/charts/builders.ts +51 -35
  106. package/src/lib/charts/capabilities.json +96 -0
  107. package/src/lib/charts/describe.ts +31 -29
  108. package/src/lib/charts/errors.ts +2 -6
  109. package/src/lib/charts/evaluate.ts +25 -38
  110. package/src/lib/charts/schema.ts +232 -66
  111. package/src/lib/charts/types.ts +42 -31
  112. package/src/lib/charts/visualization-grammar.ts +67 -0
  113. package/src/lib/charts/vocabulary.ts +7 -0
  114. package/src/lib/charts.ts +8 -1
  115. package/src/resources/index.ts +7 -0
  116. package/src/resources/reimbursements.ts +1 -1
  117. package/src/resources/spend-categories.ts +175 -0
  118. package/src/version.ts +1 -1
  119. package/version.d.mts +1 -1
  120. package/version.d.ts +1 -1
  121. package/version.js +1 -1
  122. package/version.mjs +1 -1
  123. package/lib/charts/guards.d.mts +0 -15
  124. package/lib/charts/guards.d.mts.map +0 -1
  125. package/lib/charts/guards.d.ts +0 -15
  126. package/lib/charts/guards.d.ts.map +0 -1
  127. package/lib/charts/guards.js +0 -38
  128. package/lib/charts/guards.js.map +0 -1
  129. package/lib/charts/guards.mjs +0 -34
  130. package/lib/charts/guards.mjs.map +0 -1
  131. package/src/lib/charts/guards.ts +0 -42
@@ -1,55 +1,64 @@
1
1
  import { ChartRuleError } from "./errors.mjs";
2
- function isRuleNode(operand) {
3
- return typeof operand === 'object' && operand !== null && 'kind' in operand;
2
+ function hasOwn(value, key) {
3
+ return Object.prototype.hasOwnProperty.call(value, key);
4
+ }
5
+ function isOperandNode(operand) {
6
+ return typeof operand === 'object' && operand !== null && hasOwn(operand, 'kind');
4
7
  }
5
8
  /** True when a value is a `{$rule}` placeholder — the marker the builders emit. */
6
9
  export function isRulePlaceholder(value) {
7
- return typeof value === 'object' && value !== null && '$rule' in value;
10
+ return typeof value === 'object' && value !== null && hasOwn(value, '$rule');
8
11
  }
9
12
  /** Wrap a bare scalar as a literal node. */
10
13
  export function literal(value) {
14
+ if (typeof value === 'number' && !Number.isFinite(value)) {
15
+ throw new ChartRuleError('literal(value) requires a finite number');
16
+ }
11
17
  return { kind: 'literal', value };
12
18
  }
13
- function toNode(operand) {
14
- if (isRulePlaceholder(operand)) {
15
- return operand.$rule; // a nested rule — unwrap it, never wrap it as a literal
16
- }
17
- return isRuleNode(operand) ? operand : literal(operand);
19
+ function toOperandNode(operand) {
20
+ return isOperandNode(operand) ? operand : literal(operand);
21
+ }
22
+ function toNumericOperandNode(operand) {
23
+ return typeof operand === 'number' ? literal(operand) : operand;
18
24
  }
19
25
  /**
20
26
  * `value` — this data point's plotted numeric value: a bar's height, a point's
21
27
  * y, a slice's amount. It is what a colour rule compares against a constant.
22
28
  */
23
29
  export const value = Object.freeze({ kind: 'value' });
24
- /* Comparisons — return a condition. */
25
- function comparison(kind) {
26
- return (left, right) => ({ kind, left: toNode(left), right: toNode(right) });
30
+ /* Comparisons — return a condition with no nested expressions. */
31
+ function equalityComparison(kind) {
32
+ return (left, right) => ({ kind, left: toOperandNode(left), right: toOperandNode(right) });
33
+ }
34
+ function numericComparison(kind) {
35
+ return (left, right) => ({ kind, left: toNumericOperandNode(left), right: toNumericOperandNode(right) });
27
36
  }
28
- export const equals = comparison('equals');
29
- export const isNot = comparison('isNot');
30
- export const lessThan = comparison('lessThan');
31
- export const greaterThan = comparison('greaterThan');
32
- export const lessOrEqual = comparison('lessOrEqual');
33
- export const greaterOrEqual = comparison('greaterOrEqual');
37
+ export const equals = equalityComparison('equals');
38
+ export const isNot = equalityComparison('isNot');
39
+ export const lessThan = numericComparison('lessThan');
40
+ export const greaterThan = numericComparison('greaterThan');
41
+ export const lessOrEqual = numericComparison('lessOrEqual');
42
+ export const greaterOrEqual = numericComparison('greaterOrEqual');
34
43
  /**
35
- * A conditional value: pick `ifTrue` when the condition holds, else `ifFalse`.
36
- * Channel-agnostic — wrap it in a channel builder (`color`) to target something.
44
+ * A conditional colour: pick `ifTrue` when the condition holds, else `ifFalse`.
37
45
  *
38
46
  * when(lessThan(value, 100), '#E24B4A', '#378ADD')
39
47
  * // → '#E24B4A' when this point's value is under 100, '#378ADD' otherwise
40
48
  *
41
49
  * `ifFalse` is optional and defaults to `null` — for a colour, that means no
42
- * override (the chart's default is kept). Returns a plain node, not a placeholder.
50
+ * override (the chart's default is kept). Branches are colour literals only;
51
+ * nested rules are intentionally unsupported in v1.
43
52
  */
44
- export function when(condition, ifTrue, ifFalse) {
53
+ export function when(condition, ifTrue, ifFalse = null) {
45
54
  if (ifTrue === undefined) {
46
55
  throw new ChartRuleError('when(condition, ifTrue, ifFalse?) needs a value for the true case');
47
56
  }
48
57
  return {
49
58
  kind: 'ifElse',
50
59
  cond: condition,
51
- then: toNode(ifTrue),
52
- else: toNode(ifFalse ?? null),
60
+ then: literal(ifTrue),
61
+ else: literal(ifFalse),
53
62
  };
54
63
  }
55
64
  /**
@@ -59,12 +68,10 @@ export function when(condition, ifTrue, ifFalse) {
59
68
  * color(when(lessThan(value, 100), '#E24B4A', '#378ADD'))
60
69
  * // → red when this point's value is under 100, blue otherwise
61
70
  *
62
- * Takes a conditional value — a `when(...)` (`IfElseNode`) or an already-wrapped
63
- * rule — not a bare `value` or comparison: those resolve to a number or a
64
- * boolean, which is not a colour. `evaluate` enforces the same at runtime for a
65
- * deserialized rule. Returns a `{$rule}` placeholder tagged `channel: 'color'`.
71
+ * Takes the flat conditional value produced by `when(...)`. Returns a `{$rule}`
72
+ * placeholder tagged `channel: 'color'`.
66
73
  */
67
74
  export function color(rule) {
68
- return { $rule: isRulePlaceholder(rule) ? rule.$rule : rule, channel: 'color' };
75
+ return { $rule: rule, channel: 'color' };
69
76
  }
70
77
  //# sourceMappingURL=builders.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"builders.mjs","sourceRoot":"","sources":["../../src/lib/charts/builders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,qBAAiB;AAe1C,SAAS,UAAU,CAAC,OAAgB;IAClC,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,MAAM,IAAI,OAAO,CAAC;AAC9E,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,CAAC;AACzE,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,MAAM,CAAC,OAAgB;IAC9B,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,wDAAwD;IAChF,CAAC;IACD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAY,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAE/D,uCAAuC;AACvC,SAAS,UAAU,CAAC,IAAoB;IACtC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC/E,CAAC;AACD,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;AAE3D;;;;;;;;;GASG;AACH,MAAM,UAAU,IAAI,CAAC,SAAmB,EAAE,MAAe,EAAE,OAAiB;IAC1E,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,cAAc,CAAC,mEAAmE,CAAC,CAAC;IAChG,CAAC;IACD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,KAAK,CAAC,IAAkC;IACtD,OAAO,EAAE,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAClF,CAAC"}
1
+ {"version":3,"file":"builders.mjs","sourceRoot":"","sources":["../../src/lib/charts/builders.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,11 @@
1
- import { type Control, type Rule } from "./types.mjs";
1
+ import { type Control } from "./types.mjs";
2
2
  /**
3
3
  * Turn a rule into the shape the settings panel renders: a label plus its
4
- * editable parts. Accepts a `{$rule}` placeholder or a bare tree. Walks the same
5
- * tree `evaluate` runs — and validates each node the same way — so a malformed or
4
+ * editable parts. Accepts a `{$rule}` placeholder or a bare node. Reads the same
5
+ * value `evaluate` runs — and validates it the same way — so a malformed or
6
6
  * unknown node throws a `ChartRuleError` here too, never a native `TypeError`.
7
- * The unwrap is gated on `isRulePlaceholder` (not a raw `'$rule' in rule`) so a
8
- * `null`/primitive rule reaches `assertRuleNode` instead of throwing on `in`.
9
- * A tree nested past `MAX_RULE_DEPTH` throws `RuleDepthError`.
7
+ * The Valibot parser rejects malformed or nested values before this flat
8
+ * formatter reads them.
10
9
  */
11
- export declare function describe(rule: Rule): Control;
10
+ export declare function describe(rule: unknown): Control;
12
11
  //# sourceMappingURL=describe.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"describe.d.mts","sourceRoot":"","sources":["../../src/lib/charts/describe.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,OAAO,EAAE,KAAK,IAAI,EAAiB,oBAAgB;AAEjF;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAK5C"}
1
+ {"version":3,"file":"describe.d.mts","sourceRoot":"","sources":["../../src/lib/charts/describe.ts"],"names":[],"mappings":"AAEA,OAAO,EAA8B,KAAK,OAAO,EAAiB,oBAAgB;AAElF;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAM/C"}
@@ -1,12 +1,11 @@
1
- import { type Control, type Rule } from "./types.js";
1
+ import { type Control } from "./types.js";
2
2
  /**
3
3
  * Turn a rule into the shape the settings panel renders: a label plus its
4
- * editable parts. Accepts a `{$rule}` placeholder or a bare tree. Walks the same
5
- * tree `evaluate` runs — and validates each node the same way — so a malformed or
4
+ * editable parts. Accepts a `{$rule}` placeholder or a bare node. Reads the same
5
+ * value `evaluate` runs — and validates it the same way — so a malformed or
6
6
  * unknown node throws a `ChartRuleError` here too, never a native `TypeError`.
7
- * The unwrap is gated on `isRulePlaceholder` (not a raw `'$rule' in rule`) so a
8
- * `null`/primitive rule reaches `assertRuleNode` instead of throwing on `in`.
9
- * A tree nested past `MAX_RULE_DEPTH` throws `RuleDepthError`.
7
+ * The Valibot parser rejects malformed or nested values before this flat
8
+ * formatter reads them.
10
9
  */
11
- export declare function describe(rule: Rule): Control;
10
+ export declare function describe(rule: unknown): Control;
12
11
  //# sourceMappingURL=describe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"describe.d.ts","sourceRoot":"","sources":["../../src/lib/charts/describe.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,OAAO,EAAE,KAAK,IAAI,EAAiB,mBAAgB;AAEjF;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAK5C"}
1
+ {"version":3,"file":"describe.d.ts","sourceRoot":"","sources":["../../src/lib/charts/describe.ts"],"names":[],"mappings":"AAEA,OAAO,EAA8B,KAAK,OAAO,EAAiB,mBAAgB;AAElF;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAM/C"}
@@ -1,62 +1,61 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.describe = describe;
4
- const builders_1 = require("./builders.js");
5
4
  const errors_1 = require("./errors.js");
6
- const guards_1 = require("./guards.js");
7
- const types_1 = require("./types.js");
5
+ const schema_1 = require("./schema.js");
8
6
  /**
9
7
  * Turn a rule into the shape the settings panel renders: a label plus its
10
- * editable parts. Accepts a `{$rule}` placeholder or a bare tree. Walks the same
11
- * tree `evaluate` runs — and validates each node the same way — so a malformed or
8
+ * editable parts. Accepts a `{$rule}` placeholder or a bare node. Reads the same
9
+ * value `evaluate` runs — and validates it the same way — so a malformed or
12
10
  * unknown node throws a `ChartRuleError` here too, never a native `TypeError`.
13
- * The unwrap is gated on `isRulePlaceholder` (not a raw `'$rule' in rule`) so a
14
- * `null`/primitive rule reaches `assertRuleNode` instead of throwing on `in`.
15
- * A tree nested past `MAX_RULE_DEPTH` throws `RuleDepthError`.
11
+ * The Valibot parser rejects malformed or nested values before this flat
12
+ * formatter reads them.
16
13
  */
17
14
  function describe(rule) {
18
- if ((0, builders_1.isRulePlaceholder)(rule)) {
19
- return visit(rule.$rule, 0);
15
+ const parsedRule = (0, schema_1.parseChartRule)(rule);
16
+ if ('$rule' in parsedRule) {
17
+ return visit(parsedRule.$rule);
20
18
  }
21
- return visit(rule, 0);
19
+ return visit(parsedRule);
22
20
  }
23
- function visit(node, depth) {
24
- if (depth > types_1.MAX_RULE_DEPTH) {
25
- throw new errors_1.RuleDepthError(types_1.MAX_RULE_DEPTH);
26
- }
27
- (0, guards_1.assertRuleNode)(node);
28
- const next = depth + 1;
21
+ function visit(node) {
29
22
  switch (node.kind) {
30
23
  case 'value':
31
24
  return { role: 'ref', label: "this row's value" };
32
25
  case 'literal': {
33
- const scalar = (0, guards_1.literalValue)(node);
26
+ const scalar = node.value;
34
27
  return { role: 'literal', label: String(scalar), value: scalar };
35
28
  }
36
29
  case 'equals':
37
- return comparison('is', node.left, node.right, next);
30
+ return comparison('is', node.left, node.right);
38
31
  case 'isNot':
39
- return comparison('is not', node.left, node.right, next);
32
+ return comparison('is not', node.left, node.right);
40
33
  case 'lessThan':
41
- return comparison('is under', node.left, node.right, next);
34
+ return comparison('is under', node.left, node.right);
42
35
  case 'greaterThan':
43
- return comparison('is over', node.left, node.right, next);
36
+ return comparison('is over', node.left, node.right);
44
37
  case 'lessOrEqual':
45
- return comparison('is at most', node.left, node.right, next);
38
+ return comparison('is at most', node.left, node.right);
46
39
  case 'greaterOrEqual':
47
- return comparison('is at least', node.left, node.right, next);
40
+ return comparison('is at least', node.left, node.right);
48
41
  case 'ifElse':
49
42
  return {
50
43
  role: 'rule',
51
44
  label: 'when',
52
- parts: [visit(node.cond, next), visit(node.then, next), visit(node.else, next)],
45
+ parts: [visit(node.cond), literalControl(node.then.value), literalControl(node.else.value)],
53
46
  };
54
47
  default:
55
48
  return unreachable(node);
56
49
  }
57
50
  }
58
- function comparison(label, left, right, depth) {
59
- return { role: 'comparison', label, parts: [visit(left, depth), visit(right, depth)] };
51
+ function comparison(label, left, right) {
52
+ return { role: 'comparison', label, parts: [operandControl(left), operandControl(right)] };
53
+ }
54
+ function operandControl(node) {
55
+ return node.kind === 'value' ? { role: 'ref', label: "this row's value" } : literalControl(node.value);
56
+ }
57
+ function literalControl(value) {
58
+ return { role: 'literal', label: String(value), value };
60
59
  }
61
60
  function unreachable(node) {
62
61
  throw new errors_1.UnknownNodeError(node.kind);
@@ -1 +1 @@
1
- {"version":3,"file":"describe.js","sourceRoot":"","sources":["../../src/lib/charts/describe.ts"],"names":[],"mappings":";;AAcA,4BAKC;AAnBD,4CAA+C;AAC/C,wCAA4D;AAC5D,wCAAwD;AACxD,sCAAiF;AAEjF;;;;;;;;GAQG;AACH,SAAgB,QAAQ,CAAC,IAAU;IACjC,IAAI,IAAA,4BAAiB,EAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,KAAK,CAAC,IAAc,EAAE,KAAa;IAC1C,IAAI,KAAK,GAAG,sBAAc,EAAE,CAAC;QAC3B,MAAM,IAAI,uBAAc,CAAC,sBAAc,CAAC,CAAC;IAC3C,CAAC;IACD,IAAA,uBAAc,EAAC,IAAI,CAAC,CAAC;IACrB,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;IACvB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;QACpD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,IAAI,CAAC,CAAC;YAClC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACnE,CAAC;QAED,KAAK,QAAQ;YACX,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvD,KAAK,OAAO;YACV,OAAO,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3D,KAAK,UAAU;YACb,OAAO,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC7D,KAAK,aAAa;YAChB,OAAO,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5D,KAAK,aAAa;YAChB,OAAO,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC/D,KAAK,gBAAgB;YACnB,OAAO,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAEhE,KAAK,QAAQ;YACX,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aAChF,CAAC;QAEJ;YACE,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,IAAc,EAAE,KAAe,EAAE,KAAa;IAC/E,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;AACzF,CAAC;AAED,SAAS,WAAW,CAAC,IAAW;IAC9B,MAAM,IAAI,yBAAgB,CAAE,IAA0B,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"describe.js","sourceRoot":"","sources":["../../src/lib/charts/describe.ts"],"names":[],"mappings":"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"}
@@ -1,59 +1,58 @@
1
- import { isRulePlaceholder } from "./builders.mjs";
2
- import { RuleDepthError, UnknownNodeError } from "./errors.mjs";
3
- import { assertRuleNode, literalValue } from "./guards.mjs";
4
- import { MAX_RULE_DEPTH } from "./types.mjs";
1
+ import { UnknownNodeError } from "./errors.mjs";
2
+ import { parseChartRule } from "./schema.mjs";
5
3
  /**
6
4
  * Turn a rule into the shape the settings panel renders: a label plus its
7
- * editable parts. Accepts a `{$rule}` placeholder or a bare tree. Walks the same
8
- * tree `evaluate` runs — and validates each node the same way — so a malformed or
5
+ * editable parts. Accepts a `{$rule}` placeholder or a bare node. Reads the same
6
+ * value `evaluate` runs — and validates it the same way — so a malformed or
9
7
  * unknown node throws a `ChartRuleError` here too, never a native `TypeError`.
10
- * The unwrap is gated on `isRulePlaceholder` (not a raw `'$rule' in rule`) so a
11
- * `null`/primitive rule reaches `assertRuleNode` instead of throwing on `in`.
12
- * A tree nested past `MAX_RULE_DEPTH` throws `RuleDepthError`.
8
+ * The Valibot parser rejects malformed or nested values before this flat
9
+ * formatter reads them.
13
10
  */
14
11
  export function describe(rule) {
15
- if (isRulePlaceholder(rule)) {
16
- return visit(rule.$rule, 0);
12
+ const parsedRule = parseChartRule(rule);
13
+ if ('$rule' in parsedRule) {
14
+ return visit(parsedRule.$rule);
17
15
  }
18
- return visit(rule, 0);
16
+ return visit(parsedRule);
19
17
  }
20
- function visit(node, depth) {
21
- if (depth > MAX_RULE_DEPTH) {
22
- throw new RuleDepthError(MAX_RULE_DEPTH);
23
- }
24
- assertRuleNode(node);
25
- const next = depth + 1;
18
+ function visit(node) {
26
19
  switch (node.kind) {
27
20
  case 'value':
28
21
  return { role: 'ref', label: "this row's value" };
29
22
  case 'literal': {
30
- const scalar = literalValue(node);
23
+ const scalar = node.value;
31
24
  return { role: 'literal', label: String(scalar), value: scalar };
32
25
  }
33
26
  case 'equals':
34
- return comparison('is', node.left, node.right, next);
27
+ return comparison('is', node.left, node.right);
35
28
  case 'isNot':
36
- return comparison('is not', node.left, node.right, next);
29
+ return comparison('is not', node.left, node.right);
37
30
  case 'lessThan':
38
- return comparison('is under', node.left, node.right, next);
31
+ return comparison('is under', node.left, node.right);
39
32
  case 'greaterThan':
40
- return comparison('is over', node.left, node.right, next);
33
+ return comparison('is over', node.left, node.right);
41
34
  case 'lessOrEqual':
42
- return comparison('is at most', node.left, node.right, next);
35
+ return comparison('is at most', node.left, node.right);
43
36
  case 'greaterOrEqual':
44
- return comparison('is at least', node.left, node.right, next);
37
+ return comparison('is at least', node.left, node.right);
45
38
  case 'ifElse':
46
39
  return {
47
40
  role: 'rule',
48
41
  label: 'when',
49
- parts: [visit(node.cond, next), visit(node.then, next), visit(node.else, next)],
42
+ parts: [visit(node.cond), literalControl(node.then.value), literalControl(node.else.value)],
50
43
  };
51
44
  default:
52
45
  return unreachable(node);
53
46
  }
54
47
  }
55
- function comparison(label, left, right, depth) {
56
- return { role: 'comparison', label, parts: [visit(left, depth), visit(right, depth)] };
48
+ function comparison(label, left, right) {
49
+ return { role: 'comparison', label, parts: [operandControl(left), operandControl(right)] };
50
+ }
51
+ function operandControl(node) {
52
+ return node.kind === 'value' ? { role: 'ref', label: "this row's value" } : literalControl(node.value);
53
+ }
54
+ function literalControl(value) {
55
+ return { role: 'literal', label: String(value), value };
57
56
  }
58
57
  function unreachable(node) {
59
58
  throw new UnknownNodeError(node.kind);
@@ -1 +1 @@
1
- {"version":3,"file":"describe.mjs","sourceRoot":"","sources":["../../src/lib/charts/describe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"describe.mjs","sourceRoot":"","sources":["../../src/lib/charts/describe.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ export declare class RuleTypeError extends ChartRuleError {
14
14
  constructor(message: string);
15
15
  }
16
16
  /**
17
- * A structurally invalid node in a deserialized tree: not an object, no string
17
+ * A structurally invalid node in a deserialized value: not an object, no string
18
18
  * `kind`, or a `literal` without a scalar `value`. Distinct from
19
19
  * `UnknownNodeError` (a well-formed node whose `kind` is simply not in the
20
20
  * vocabulary — the intentional escape hatch). Like the others it is a
@@ -24,11 +24,7 @@ export declare class RuleTypeError extends ChartRuleError {
24
24
  export declare class MalformedRuleError extends ChartRuleError {
25
25
  constructor(message: string);
26
26
  }
27
- /**
28
- * A rule nested deeper than the evaluator will walk. Guards against a
29
- * stack-overflowing tree from untrusted, deserialized input; like the others it
30
- * is a `ChartRuleError`, so the caller's escape hatch catches it.
31
- */
27
+ /** @deprecated v1 is non-recursive. Retained for source compatibility. */
32
28
  export declare class RuleDepthError extends ChartRuleError {
33
29
  constructor(maxDepth: number);
34
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.mts","sourceRoot":"","sources":["../../src/lib/charts/errors.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,qBAAa,cAAe,SAAQ,KAAK;CAAG;AAE5C;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;aACtB,IAAI,CAAC,EAAE,MAAM;gBAAb,IAAI,CAAC,EAAE,MAAM,YAAA;CAI1C;AAED,gFAAgF;AAChF,qBAAa,aAAc,SAAQ,cAAc;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;GAOG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,cAAc;gBACpC,QAAQ,EAAE,MAAM;CAI7B"}
1
+ {"version":3,"file":"errors.d.mts","sourceRoot":"","sources":["../../src/lib/charts/errors.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,qBAAa,cAAe,SAAQ,KAAK;CAAG;AAE5C;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;aACtB,IAAI,CAAC,EAAE,MAAM;gBAAb,IAAI,CAAC,EAAE,MAAM,YAAA;CAI1C;AAED,gFAAgF;AAChF,qBAAa,aAAc,SAAQ,cAAc;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;GAOG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED,0EAA0E;AAC1E,qBAAa,cAAe,SAAQ,cAAc;gBACpC,QAAQ,EAAE,MAAM;CAI7B"}
@@ -14,7 +14,7 @@ export declare class RuleTypeError extends ChartRuleError {
14
14
  constructor(message: string);
15
15
  }
16
16
  /**
17
- * A structurally invalid node in a deserialized tree: not an object, no string
17
+ * A structurally invalid node in a deserialized value: not an object, no string
18
18
  * `kind`, or a `literal` without a scalar `value`. Distinct from
19
19
  * `UnknownNodeError` (a well-formed node whose `kind` is simply not in the
20
20
  * vocabulary — the intentional escape hatch). Like the others it is a
@@ -24,11 +24,7 @@ export declare class RuleTypeError extends ChartRuleError {
24
24
  export declare class MalformedRuleError extends ChartRuleError {
25
25
  constructor(message: string);
26
26
  }
27
- /**
28
- * A rule nested deeper than the evaluator will walk. Guards against a
29
- * stack-overflowing tree from untrusted, deserialized input; like the others it
30
- * is a `ChartRuleError`, so the caller's escape hatch catches it.
31
- */
27
+ /** @deprecated v1 is non-recursive. Retained for source compatibility. */
32
28
  export declare class RuleDepthError extends ChartRuleError {
33
29
  constructor(maxDepth: number);
34
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/charts/errors.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,qBAAa,cAAe,SAAQ,KAAK;CAAG;AAE5C;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;aACtB,IAAI,CAAC,EAAE,MAAM;gBAAb,IAAI,CAAC,EAAE,MAAM,YAAA;CAI1C;AAED,gFAAgF;AAChF,qBAAa,aAAc,SAAQ,cAAc;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;GAOG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,cAAc;gBACpC,QAAQ,EAAE,MAAM;CAI7B"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/charts/errors.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,qBAAa,cAAe,SAAQ,KAAK;CAAG;AAE5C;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;aACtB,IAAI,CAAC,EAAE,MAAM;gBAAb,IAAI,CAAC,EAAE,MAAM,YAAA;CAI1C;AAED,gFAAgF;AAChF,qBAAa,aAAc,SAAQ,cAAc;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;GAOG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED,0EAA0E;AAC1E,qBAAa,cAAe,SAAQ,cAAc;gBACpC,QAAQ,EAAE,MAAM;CAI7B"}
@@ -26,7 +26,7 @@ class RuleTypeError extends ChartRuleError {
26
26
  }
27
27
  exports.RuleTypeError = RuleTypeError;
28
28
  /**
29
- * A structurally invalid node in a deserialized tree: not an object, no string
29
+ * A structurally invalid node in a deserialized value: not an object, no string
30
30
  * `kind`, or a `literal` without a scalar `value`. Distinct from
31
31
  * `UnknownNodeError` (a well-formed node whose `kind` is simply not in the
32
32
  * vocabulary — the intentional escape hatch). Like the others it is a
@@ -40,11 +40,7 @@ class MalformedRuleError extends ChartRuleError {
40
40
  }
41
41
  }
42
42
  exports.MalformedRuleError = MalformedRuleError;
43
- /**
44
- * A rule nested deeper than the evaluator will walk. Guards against a
45
- * stack-overflowing tree from untrusted, deserialized input; like the others it
46
- * is a `ChartRuleError`, so the caller's escape hatch catches it.
47
- */
43
+ /** @deprecated v1 is non-recursive. Retained for source compatibility. */
48
44
  class RuleDepthError extends ChartRuleError {
49
45
  constructor(maxDepth) {
50
46
  super(`chart rule nested deeper than ${maxDepth} levels`);
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/charts/errors.ts"],"names":[],"mappings":";;;AAAA,qEAAqE;AACrE,MAAa,cAAe,SAAQ,KAAK;CAAG;AAA5C,wCAA4C;AAE5C;;;GAGG;AACH,MAAa,gBAAiB,SAAQ,cAAc;IAClD,YAA4B,IAAa;QACvC,KAAK,CAAC,4BAA4B,IAAI,IAAI,gBAAgB,EAAE,CAAC,CAAC;QADpC,SAAI,GAAJ,IAAI,CAAS;QAEvC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AALD,4CAKC;AAED,gFAAgF;AAChF,MAAa,aAAc,SAAQ,cAAc;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AALD,sCAKC;AAED;;;;;;;GAOG;AACH,MAAa,kBAAmB,SAAQ,cAAc;IACpD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AALD,gDAKC;AAED;;;;GAIG;AACH,MAAa,cAAe,SAAQ,cAAc;IAChD,YAAY,QAAgB;QAC1B,KAAK,CAAC,iCAAiC,QAAQ,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AALD,wCAKC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/charts/errors.ts"],"names":[],"mappings":";;;AAAA,qEAAqE;AACrE,MAAa,cAAe,SAAQ,KAAK;CAAG;AAA5C,wCAA4C;AAE5C;;;GAGG;AACH,MAAa,gBAAiB,SAAQ,cAAc;IAClD,YAA4B,IAAa;QACvC,KAAK,CAAC,4BAA4B,IAAI,IAAI,gBAAgB,EAAE,CAAC,CAAC;QADpC,SAAI,GAAJ,IAAI,CAAS;QAEvC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AALD,4CAKC;AAED,gFAAgF;AAChF,MAAa,aAAc,SAAQ,cAAc;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AALD,sCAKC;AAED;;;;;;;GAOG;AACH,MAAa,kBAAmB,SAAQ,cAAc;IACpD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AALD,gDAKC;AAED,0EAA0E;AAC1E,MAAa,cAAe,SAAQ,cAAc;IAChD,YAAY,QAAgB;QAC1B,KAAK,CAAC,iCAAiC,QAAQ,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AALD,wCAKC"}
@@ -20,7 +20,7 @@ export class RuleTypeError extends ChartRuleError {
20
20
  }
21
21
  }
22
22
  /**
23
- * A structurally invalid node in a deserialized tree: not an object, no string
23
+ * A structurally invalid node in a deserialized value: not an object, no string
24
24
  * `kind`, or a `literal` without a scalar `value`. Distinct from
25
25
  * `UnknownNodeError` (a well-formed node whose `kind` is simply not in the
26
26
  * vocabulary — the intentional escape hatch). Like the others it is a
@@ -33,11 +33,7 @@ export class MalformedRuleError extends ChartRuleError {
33
33
  this.name = 'MalformedRuleError';
34
34
  }
35
35
  }
36
- /**
37
- * A rule nested deeper than the evaluator will walk. Guards against a
38
- * stack-overflowing tree from untrusted, deserialized input; like the others it
39
- * is a `ChartRuleError`, so the caller's escape hatch catches it.
40
- */
36
+ /** @deprecated v1 is non-recursive. Retained for source compatibility. */
41
37
  export class RuleDepthError extends ChartRuleError {
42
38
  constructor(maxDepth) {
43
39
  super(`chart rule nested deeper than ${maxDepth} levels`);
@@ -1 +1 @@
1
- {"version":3,"file":"errors.mjs","sourceRoot":"","sources":["../../src/lib/charts/errors.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,MAAM,OAAO,cAAe,SAAQ,KAAK;CAAG;AAE5C;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAClD,YAA4B,IAAa;QACvC,KAAK,CAAC,4BAA4B,IAAI,IAAI,gBAAgB,EAAE,CAAC,CAAC;QADpC,SAAI,GAAJ,IAAI,CAAS;QAEvC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,gFAAgF;AAChF,MAAM,OAAO,aAAc,SAAQ,cAAc;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAmB,SAAQ,cAAc;IACpD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,cAAe,SAAQ,cAAc;IAChD,YAAY,QAAgB;QAC1B,KAAK,CAAC,iCAAiC,QAAQ,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
1
+ {"version":3,"file":"errors.mjs","sourceRoot":"","sources":["../../src/lib/charts/errors.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,MAAM,OAAO,cAAe,SAAQ,KAAK;CAAG;AAE5C;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAClD,YAA4B,IAAa;QACvC,KAAK,CAAC,4BAA4B,IAAI,IAAI,gBAAgB,EAAE,CAAC,CAAC;QADpC,SAAI,GAAJ,IAAI,CAAS;QAEvC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,gFAAgF;AAChF,MAAM,OAAO,aAAc,SAAQ,cAAc;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAmB,SAAQ,cAAc;IACpD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,0EAA0E;AAC1E,MAAM,OAAO,cAAe,SAAQ,cAAc;IAChD,YAAY,QAAgB;QAC1B,KAAK,CAAC,iCAAiC,QAAQ,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
@@ -1,16 +1,14 @@
1
- import { type Rule, type RuleContext, type RuleValue } from "./types.mjs";
1
+ import { type RuleContext, type RuleValue } from "./types.mjs";
2
2
  /**
3
3
  * Resolve a rule to a value against `ctx`. Accepts a `{$rule}` placeholder or a
4
- * bare tree. A malformed or unknown node throws a `ChartRuleError` (never a
4
+ * bare node. A malformed or unknown node throws a `ChartRuleError` (never a
5
5
  * native `TypeError`), so a caller reading an untrusted, deserialized rule can
6
6
  * catch every failure with one type. When the rule is a colour placeholder, the
7
7
  * result is checked to be a colour (`string | null`) — a rule that resolves to a
8
8
  * number or boolean is a `RuleTypeError`, not something the renderer paints.
9
9
  *
10
- * Pure: the only inputs are the node and the context. No clock, no randomness,
11
- * no I/O — which is what makes it safe to run on an untrusted, user-edited tree
12
- * and identical across the renderer, the panel readout, and a test. A tree
13
- * nested past `MAX_RULE_DEPTH` throws `RuleDepthError` rather than overflowing.
10
+ * Pure and non-recursive: the only inputs are the validated flat rule and the
11
+ * context. No clock, randomness, callbacks, or I/O.
14
12
  */
15
- export declare function evaluate(rule: Rule, ctx: RuleContext): RuleValue;
13
+ export declare function evaluate(rule: unknown, ctx: RuleContext): RuleValue;
16
14
  //# sourceMappingURL=evaluate.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.d.mts","sourceRoot":"","sources":["../../src/lib/charts/evaluate.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,IAAI,EAET,KAAK,WAAW,EAEhB,KAAK,SAAS,EACf,oBAAgB;AAEjB;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,GAAG,SAAS,CAKhE"}
1
+ {"version":3,"file":"evaluate.d.mts","sourceRoot":"","sources":["../../src/lib/charts/evaluate.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,WAAW,EAEhB,KAAK,SAAS,EACf,oBAAgB;AAEjB;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,SAAS,CAMnE"}
@@ -1,16 +1,14 @@
1
- import { type Rule, type RuleContext, type RuleValue } from "./types.js";
1
+ import { type RuleContext, type RuleValue } from "./types.js";
2
2
  /**
3
3
  * Resolve a rule to a value against `ctx`. Accepts a `{$rule}` placeholder or a
4
- * bare tree. A malformed or unknown node throws a `ChartRuleError` (never a
4
+ * bare node. A malformed or unknown node throws a `ChartRuleError` (never a
5
5
  * native `TypeError`), so a caller reading an untrusted, deserialized rule can
6
6
  * catch every failure with one type. When the rule is a colour placeholder, the
7
7
  * result is checked to be a colour (`string | null`) — a rule that resolves to a
8
8
  * number or boolean is a `RuleTypeError`, not something the renderer paints.
9
9
  *
10
- * Pure: the only inputs are the node and the context. No clock, no randomness,
11
- * no I/O — which is what makes it safe to run on an untrusted, user-edited tree
12
- * and identical across the renderer, the panel readout, and a test. A tree
13
- * nested past `MAX_RULE_DEPTH` throws `RuleDepthError` rather than overflowing.
10
+ * Pure and non-recursive: the only inputs are the validated flat rule and the
11
+ * context. No clock, randomness, callbacks, or I/O.
14
12
  */
15
- export declare function evaluate(rule: Rule, ctx: RuleContext): RuleValue;
13
+ export declare function evaluate(rule: unknown, ctx: RuleContext): RuleValue;
16
14
  //# sourceMappingURL=evaluate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/lib/charts/evaluate.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,IAAI,EAET,KAAK,WAAW,EAEhB,KAAK,SAAS,EACf,mBAAgB;AAEjB;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,GAAG,SAAS,CAKhE"}
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/lib/charts/evaluate.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,WAAW,EAEhB,KAAK,SAAS,EACf,mBAAgB;AAEjB;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,SAAS,CAMnE"}