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

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 (366) hide show
  1. package/client.d.mts +14 -0
  2. package/client.d.mts.map +1 -1
  3. package/client.d.ts +14 -0
  4. package/client.d.ts.map +1 -1
  5. package/client.js +18 -0
  6. package/client.js.map +1 -1
  7. package/client.mjs +18 -0
  8. package/client.mjs.map +1 -1
  9. package/index.d.mts +5 -0
  10. package/index.d.mts.map +1 -1
  11. package/index.d.ts +5 -0
  12. package/index.d.ts.map +1 -1
  13. package/index.js +11 -1
  14. package/index.js.map +1 -1
  15. package/index.mjs +5 -0
  16. package/index.mjs.map +1 -1
  17. package/lib/charts/builders.d.mts +18 -19
  18. package/lib/charts/builders.d.mts.map +1 -1
  19. package/lib/charts/builders.d.ts +18 -19
  20. package/lib/charts/builders.d.ts.map +1 -1
  21. package/lib/charts/builders.js +35 -28
  22. package/lib/charts/builders.js.map +1 -1
  23. package/lib/charts/builders.mjs +35 -28
  24. package/lib/charts/builders.mjs.map +1 -1
  25. package/lib/charts/describe.d.mts +6 -7
  26. package/lib/charts/describe.d.mts.map +1 -1
  27. package/lib/charts/describe.d.ts +6 -7
  28. package/lib/charts/describe.d.ts.map +1 -1
  29. package/lib/charts/describe.js +26 -27
  30. package/lib/charts/describe.js.map +1 -1
  31. package/lib/charts/describe.mjs +27 -28
  32. package/lib/charts/describe.mjs.map +1 -1
  33. package/lib/charts/errors.d.mts +2 -6
  34. package/lib/charts/errors.d.mts.map +1 -1
  35. package/lib/charts/errors.d.ts +2 -6
  36. package/lib/charts/errors.d.ts.map +1 -1
  37. package/lib/charts/errors.js +2 -6
  38. package/lib/charts/errors.js.map +1 -1
  39. package/lib/charts/errors.mjs +2 -6
  40. package/lib/charts/errors.mjs.map +1 -1
  41. package/lib/charts/evaluate.d.mts +5 -7
  42. package/lib/charts/evaluate.d.mts.map +1 -1
  43. package/lib/charts/evaluate.d.ts +5 -7
  44. package/lib/charts/evaluate.d.ts.map +1 -1
  45. package/lib/charts/evaluate.js +21 -35
  46. package/lib/charts/evaluate.js.map +1 -1
  47. package/lib/charts/evaluate.mjs +22 -36
  48. package/lib/charts/evaluate.mjs.map +1 -1
  49. package/lib/charts/schema.d.mts +8 -97
  50. package/lib/charts/schema.d.mts.map +1 -1
  51. package/lib/charts/schema.d.ts +8 -97
  52. package/lib/charts/schema.d.ts.map +1 -1
  53. package/lib/charts/schema.js +186 -65
  54. package/lib/charts/schema.js.map +1 -1
  55. package/lib/charts/schema.mjs +185 -65
  56. package/lib/charts/schema.mjs.map +1 -1
  57. package/lib/charts/types.d.mts +40 -25
  58. package/lib/charts/types.d.mts.map +1 -1
  59. package/lib/charts/types.d.ts +40 -25
  60. package/lib/charts/types.d.ts.map +1 -1
  61. package/lib/charts/types.js +8 -10
  62. package/lib/charts/types.js.map +1 -1
  63. package/lib/charts/types.mjs +8 -10
  64. package/lib/charts/types.mjs.map +1 -1
  65. package/lib/charts/visualization-grammar.d.mts +66 -0
  66. package/lib/charts/visualization-grammar.d.mts.map +1 -0
  67. package/lib/charts/visualization-grammar.d.ts +66 -0
  68. package/lib/charts/visualization-grammar.d.ts.map +1 -0
  69. package/lib/charts/visualization-grammar.js +70 -0
  70. package/lib/charts/visualization-grammar.js.map +1 -0
  71. package/lib/charts/visualization-grammar.mjs +67 -0
  72. package/lib/charts/visualization-grammar.mjs.map +1 -0
  73. package/lib/charts/vocabulary.d.mts +7 -0
  74. package/lib/charts/vocabulary.d.mts.map +1 -0
  75. package/lib/charts/vocabulary.d.ts +7 -0
  76. package/lib/charts/vocabulary.d.ts.map +1 -0
  77. package/lib/charts/vocabulary.js +10 -0
  78. package/lib/charts/vocabulary.js.map +1 -0
  79. package/lib/charts/vocabulary.mjs +7 -0
  80. package/lib/charts/vocabulary.mjs.map +1 -0
  81. package/lib/charts.d.mts +3 -3
  82. package/lib/charts.d.mts.map +1 -1
  83. package/lib/charts.d.ts +3 -3
  84. package/lib/charts.d.ts.map +1 -1
  85. package/lib/charts.js +2 -1
  86. package/lib/charts.js.map +1 -1
  87. package/lib/charts.mjs +1 -1
  88. package/lib/charts.mjs.map +1 -1
  89. package/lib/manifest/composition.d.mts +21 -0
  90. package/lib/manifest/composition.d.mts.map +1 -0
  91. package/lib/manifest/composition.d.ts +21 -0
  92. package/lib/manifest/composition.d.ts.map +1 -0
  93. package/lib/manifest/composition.js +103 -0
  94. package/lib/manifest/composition.js.map +1 -0
  95. package/lib/manifest/composition.mjs +99 -0
  96. package/lib/manifest/composition.mjs.map +1 -0
  97. package/lib/manifest/definitions/_object-records.d.mts +23 -0
  98. package/lib/manifest/definitions/_object-records.d.mts.map +1 -0
  99. package/lib/manifest/definitions/_object-records.d.ts +23 -0
  100. package/lib/manifest/definitions/_object-records.d.ts.map +1 -0
  101. package/lib/manifest/definitions/_object-records.js +151 -0
  102. package/lib/manifest/definitions/_object-records.js.map +1 -0
  103. package/lib/manifest/definitions/_object-records.mjs +147 -0
  104. package/lib/manifest/definitions/_object-records.mjs.map +1 -0
  105. package/lib/manifest/definitions/action.d.mts +7 -0
  106. package/lib/manifest/definitions/action.d.mts.map +1 -0
  107. package/lib/manifest/definitions/action.d.ts +7 -0
  108. package/lib/manifest/definitions/action.d.ts.map +1 -0
  109. package/lib/manifest/definitions/action.js +25 -0
  110. package/lib/manifest/definitions/action.js.map +1 -0
  111. package/lib/manifest/definitions/action.mjs +22 -0
  112. package/lib/manifest/definitions/action.mjs.map +1 -0
  113. package/lib/manifest/definitions/agent.d.mts +51 -0
  114. package/lib/manifest/definitions/agent.d.mts.map +1 -0
  115. package/lib/manifest/definitions/agent.d.ts +51 -0
  116. package/lib/manifest/definitions/agent.d.ts.map +1 -0
  117. package/lib/manifest/definitions/agent.js +65 -0
  118. package/lib/manifest/definitions/agent.js.map +1 -0
  119. package/lib/manifest/definitions/agent.mjs +59 -0
  120. package/lib/manifest/definitions/agent.mjs.map +1 -0
  121. package/lib/manifest/definitions/app.d.mts +3 -0
  122. package/lib/manifest/definitions/app.d.mts.map +1 -0
  123. package/lib/manifest/definitions/app.d.ts +3 -0
  124. package/lib/manifest/definitions/app.d.ts.map +1 -0
  125. package/lib/manifest/definitions/app.js +14 -0
  126. package/lib/manifest/definitions/app.js.map +1 -0
  127. package/lib/manifest/definitions/app.mjs +11 -0
  128. package/lib/manifest/definitions/app.mjs.map +1 -0
  129. package/lib/manifest/definitions/category.d.mts +9 -0
  130. package/lib/manifest/definitions/category.d.mts.map +1 -0
  131. package/lib/manifest/definitions/category.d.ts +9 -0
  132. package/lib/manifest/definitions/category.d.ts.map +1 -0
  133. package/lib/manifest/definitions/category.js +27 -0
  134. package/lib/manifest/definitions/category.js.map +1 -0
  135. package/lib/manifest/definitions/category.mjs +23 -0
  136. package/lib/manifest/definitions/category.mjs.map +1 -0
  137. package/lib/manifest/definitions/component.d.mts +101 -0
  138. package/lib/manifest/definitions/component.d.mts.map +1 -0
  139. package/lib/manifest/definitions/component.d.ts +101 -0
  140. package/lib/manifest/definitions/component.d.ts.map +1 -0
  141. package/lib/manifest/definitions/component.js +106 -0
  142. package/lib/manifest/definitions/component.js.map +1 -0
  143. package/lib/manifest/definitions/component.mjs +97 -0
  144. package/lib/manifest/definitions/component.mjs.map +1 -0
  145. package/lib/manifest/definitions/custom-field-section.d.mts +13 -0
  146. package/lib/manifest/definitions/custom-field-section.d.mts.map +1 -0
  147. package/lib/manifest/definitions/custom-field-section.d.ts +13 -0
  148. package/lib/manifest/definitions/custom-field-section.d.ts.map +1 -0
  149. package/lib/manifest/definitions/custom-field-section.js +15 -0
  150. package/lib/manifest/definitions/custom-field-section.js.map +1 -0
  151. package/lib/manifest/definitions/custom-field-section.mjs +12 -0
  152. package/lib/manifest/definitions/custom-field-section.mjs.map +1 -0
  153. package/lib/manifest/definitions/custom-field.d.mts +10 -0
  154. package/lib/manifest/definitions/custom-field.d.mts.map +1 -0
  155. package/lib/manifest/definitions/custom-field.d.ts +10 -0
  156. package/lib/manifest/definitions/custom-field.d.ts.map +1 -0
  157. package/lib/manifest/definitions/custom-field.js +18 -0
  158. package/lib/manifest/definitions/custom-field.js.map +1 -0
  159. package/lib/manifest/definitions/custom-field.mjs +15 -0
  160. package/lib/manifest/definitions/custom-field.mjs.map +1 -0
  161. package/lib/manifest/definitions/custom-object.d.mts +162 -0
  162. package/lib/manifest/definitions/custom-object.d.mts.map +1 -0
  163. package/lib/manifest/definitions/custom-object.d.ts +162 -0
  164. package/lib/manifest/definitions/custom-object.d.ts.map +1 -0
  165. package/lib/manifest/definitions/custom-object.js +412 -0
  166. package/lib/manifest/definitions/custom-object.js.map +1 -0
  167. package/lib/manifest/definitions/custom-object.mjs +386 -0
  168. package/lib/manifest/definitions/custom-object.mjs.map +1 -0
  169. package/lib/manifest/definitions/custom-skill.d.mts +8 -0
  170. package/lib/manifest/definitions/custom-skill.d.mts.map +1 -0
  171. package/lib/manifest/definitions/custom-skill.d.ts +8 -0
  172. package/lib/manifest/definitions/custom-skill.d.ts.map +1 -0
  173. package/lib/manifest/definitions/custom-skill.js +15 -0
  174. package/lib/manifest/definitions/custom-skill.js.map +1 -0
  175. package/lib/manifest/definitions/custom-skill.mjs +12 -0
  176. package/lib/manifest/definitions/custom-skill.mjs.map +1 -0
  177. package/lib/manifest/definitions/field-section.d.mts +7 -0
  178. package/lib/manifest/definitions/field-section.d.mts.map +1 -0
  179. package/lib/manifest/definitions/field-section.d.ts +7 -0
  180. package/lib/manifest/definitions/field-section.d.ts.map +1 -0
  181. package/lib/manifest/definitions/field-section.js +16 -0
  182. package/lib/manifest/definitions/field-section.js.map +1 -0
  183. package/lib/manifest/definitions/field-section.mjs +13 -0
  184. package/lib/manifest/definitions/field-section.mjs.map +1 -0
  185. package/lib/manifest/definitions/field.d.mts +38 -0
  186. package/lib/manifest/definitions/field.d.mts.map +1 -0
  187. package/lib/manifest/definitions/field.d.ts +38 -0
  188. package/lib/manifest/definitions/field.d.ts.map +1 -0
  189. package/lib/manifest/definitions/field.js +50 -0
  190. package/lib/manifest/definitions/field.js.map +1 -0
  191. package/lib/manifest/definitions/field.mjs +45 -0
  192. package/lib/manifest/definitions/field.mjs.map +1 -0
  193. package/lib/manifest/definitions/function.d.mts +61 -0
  194. package/lib/manifest/definitions/function.d.mts.map +1 -0
  195. package/lib/manifest/definitions/function.d.ts +61 -0
  196. package/lib/manifest/definitions/function.d.ts.map +1 -0
  197. package/lib/manifest/definitions/function.js +79 -0
  198. package/lib/manifest/definitions/function.js.map +1 -0
  199. package/lib/manifest/definitions/function.mjs +73 -0
  200. package/lib/manifest/definitions/function.mjs.map +1 -0
  201. package/lib/manifest/definitions/index.d.mts +22 -0
  202. package/lib/manifest/definitions/index.d.mts.map +1 -0
  203. package/lib/manifest/definitions/index.d.ts +22 -0
  204. package/lib/manifest/definitions/index.d.ts.map +1 -0
  205. package/lib/manifest/definitions/index.js +64 -0
  206. package/lib/manifest/definitions/index.js.map +1 -0
  207. package/lib/manifest/definitions/index.mjs +22 -0
  208. package/lib/manifest/definitions/index.mjs.map +1 -0
  209. package/lib/manifest/definitions/list-view.d.mts +9 -0
  210. package/lib/manifest/definitions/list-view.d.mts.map +1 -0
  211. package/lib/manifest/definitions/list-view.d.ts +9 -0
  212. package/lib/manifest/definitions/list-view.d.ts.map +1 -0
  213. package/lib/manifest/definitions/list-view.js +25 -0
  214. package/lib/manifest/definitions/list-view.js.map +1 -0
  215. package/lib/manifest/definitions/list-view.mjs +22 -0
  216. package/lib/manifest/definitions/list-view.mjs.map +1 -0
  217. package/lib/manifest/definitions/object-search-config.d.mts +13 -0
  218. package/lib/manifest/definitions/object-search-config.d.mts.map +1 -0
  219. package/lib/manifest/definitions/object-search-config.d.ts +13 -0
  220. package/lib/manifest/definitions/object-search-config.d.ts.map +1 -0
  221. package/lib/manifest/definitions/object-search-config.js +25 -0
  222. package/lib/manifest/definitions/object-search-config.js.map +1 -0
  223. package/lib/manifest/definitions/object-search-config.mjs +22 -0
  224. package/lib/manifest/definitions/object-search-config.mjs.map +1 -0
  225. package/lib/manifest/definitions/object-settings.d.mts +24 -0
  226. package/lib/manifest/definitions/object-settings.d.mts.map +1 -0
  227. package/lib/manifest/definitions/object-settings.d.ts +24 -0
  228. package/lib/manifest/definitions/object-settings.d.ts.map +1 -0
  229. package/lib/manifest/definitions/object-settings.js +32 -0
  230. package/lib/manifest/definitions/object-settings.js.map +1 -0
  231. package/lib/manifest/definitions/object-settings.mjs +29 -0
  232. package/lib/manifest/definitions/object-settings.mjs.map +1 -0
  233. package/lib/manifest/definitions/page-layout.d.mts +21 -0
  234. package/lib/manifest/definitions/page-layout.d.mts.map +1 -0
  235. package/lib/manifest/definitions/page-layout.d.ts +21 -0
  236. package/lib/manifest/definitions/page-layout.d.ts.map +1 -0
  237. package/lib/manifest/definitions/page-layout.js +155 -0
  238. package/lib/manifest/definitions/page-layout.js.map +1 -0
  239. package/lib/manifest/definitions/page-layout.mjs +152 -0
  240. package/lib/manifest/definitions/page-layout.mjs.map +1 -0
  241. package/lib/manifest/definitions/page.d.mts +8 -0
  242. package/lib/manifest/definitions/page.d.mts.map +1 -0
  243. package/lib/manifest/definitions/page.d.ts +8 -0
  244. package/lib/manifest/definitions/page.d.ts.map +1 -0
  245. package/lib/manifest/definitions/page.js +15 -0
  246. package/lib/manifest/definitions/page.js.map +1 -0
  247. package/lib/manifest/definitions/page.mjs +12 -0
  248. package/lib/manifest/definitions/page.mjs.map +1 -0
  249. package/lib/manifest/definitions/record-triggered-flow.d.mts +24 -0
  250. package/lib/manifest/definitions/record-triggered-flow.d.mts.map +1 -0
  251. package/lib/manifest/definitions/record-triggered-flow.d.ts +24 -0
  252. package/lib/manifest/definitions/record-triggered-flow.d.ts.map +1 -0
  253. package/lib/manifest/definitions/record-triggered-flow.js +28 -0
  254. package/lib/manifest/definitions/record-triggered-flow.js.map +1 -0
  255. package/lib/manifest/definitions/record-triggered-flow.mjs +25 -0
  256. package/lib/manifest/definitions/record-triggered-flow.mjs.map +1 -0
  257. package/lib/manifest/definitions/validation.d.mts +8 -0
  258. package/lib/manifest/definitions/validation.d.mts.map +1 -0
  259. package/lib/manifest/definitions/validation.d.ts +8 -0
  260. package/lib/manifest/definitions/validation.d.ts.map +1 -0
  261. package/lib/manifest/definitions/validation.js +24 -0
  262. package/lib/manifest/definitions/validation.js.map +1 -0
  263. package/lib/manifest/definitions/validation.mjs +21 -0
  264. package/lib/manifest/definitions/validation.mjs.map +1 -0
  265. package/lib/manifest/definitions/workflow.d.mts +10 -0
  266. package/lib/manifest/definitions/workflow.d.mts.map +1 -0
  267. package/lib/manifest/definitions/workflow.d.ts +10 -0
  268. package/lib/manifest/definitions/workflow.d.ts.map +1 -0
  269. package/lib/manifest/definitions/workflow.js +33 -0
  270. package/lib/manifest/definitions/workflow.js.map +1 -0
  271. package/lib/manifest/definitions/workflow.mjs +29 -0
  272. package/lib/manifest/definitions/workflow.mjs.map +1 -0
  273. package/lib/manifest/index.d.mts +3 -0
  274. package/lib/manifest/index.d.mts.map +1 -1
  275. package/lib/manifest/index.d.ts +3 -0
  276. package/lib/manifest/index.d.ts.map +1 -1
  277. package/lib/manifest/index.js +4 -0
  278. package/lib/manifest/index.js.map +1 -1
  279. package/lib/manifest/index.mjs +3 -0
  280. package/lib/manifest/index.mjs.map +1 -1
  281. package/lib/manifest/package-manifest.d.mts +17 -0
  282. package/lib/manifest/package-manifest.d.mts.map +1 -0
  283. package/lib/manifest/package-manifest.d.ts +17 -0
  284. package/lib/manifest/package-manifest.d.ts.map +1 -0
  285. package/lib/manifest/package-manifest.js +26 -0
  286. package/lib/manifest/package-manifest.js.map +1 -0
  287. package/lib/manifest/package-manifest.mjs +23 -0
  288. package/lib/manifest/package-manifest.mjs.map +1 -0
  289. package/package.json +4 -2
  290. package/resources/index.d.mts +1 -0
  291. package/resources/index.d.mts.map +1 -1
  292. package/resources/index.d.ts +1 -0
  293. package/resources/index.d.ts.map +1 -1
  294. package/resources/index.js +4 -2
  295. package/resources/index.js.map +1 -1
  296. package/resources/index.mjs +1 -0
  297. package/resources/index.mjs.map +1 -1
  298. package/resources/reimbursements.d.mts +1 -1
  299. package/resources/reimbursements.d.ts +1 -1
  300. package/resources/reimbursements.js +1 -1
  301. package/resources/reimbursements.mjs +1 -1
  302. package/resources/spend-categories.d.mts +140 -0
  303. package/resources/spend-categories.d.mts.map +1 -0
  304. package/resources/spend-categories.d.ts +140 -0
  305. package/resources/spend-categories.d.ts.map +1 -0
  306. package/resources/spend-categories.js +83 -0
  307. package/resources/spend-categories.js.map +1 -0
  308. package/resources/spend-categories.mjs +79 -0
  309. package/resources/spend-categories.mjs.map +1 -0
  310. package/src/client.ts +41 -0
  311. package/src/index.ts +17 -0
  312. package/src/lib/charts/README.md +35 -28
  313. package/src/lib/charts/agent-reference.md +73 -0
  314. package/src/lib/charts/builders.ts +51 -35
  315. package/src/lib/charts/capabilities.json +96 -0
  316. package/src/lib/charts/describe.ts +31 -29
  317. package/src/lib/charts/errors.ts +2 -6
  318. package/src/lib/charts/evaluate.ts +25 -38
  319. package/src/lib/charts/schema.ts +232 -66
  320. package/src/lib/charts/types.ts +42 -31
  321. package/src/lib/charts/visualization-grammar.ts +67 -0
  322. package/src/lib/charts/vocabulary.ts +7 -0
  323. package/src/lib/charts.ts +8 -1
  324. package/src/lib/manifest/composition.ts +133 -0
  325. package/src/lib/manifest/definitions/README.md +89 -0
  326. package/src/lib/manifest/definitions/_object-records.ts +218 -0
  327. package/src/lib/manifest/definitions/action.ts +31 -0
  328. package/src/lib/manifest/definitions/agent.ts +149 -0
  329. package/src/lib/manifest/definitions/app.ts +12 -0
  330. package/src/lib/manifest/definitions/category.ts +35 -0
  331. package/src/lib/manifest/definitions/component.ts +241 -0
  332. package/src/lib/manifest/definitions/custom-field-section.ts +39 -0
  333. package/src/lib/manifest/definitions/custom-field.ts +32 -0
  334. package/src/lib/manifest/definitions/custom-object.ts +786 -0
  335. package/src/lib/manifest/definitions/custom-skill.ts +28 -0
  336. package/src/lib/manifest/definitions/field-section.ts +31 -0
  337. package/src/lib/manifest/definitions/field.ts +119 -0
  338. package/src/lib/manifest/definitions/function.ts +198 -0
  339. package/src/lib/manifest/definitions/index.ts +91 -0
  340. package/src/lib/manifest/definitions/list-view.ts +48 -0
  341. package/src/lib/manifest/definitions/object-search-config.ts +44 -0
  342. package/src/lib/manifest/definitions/object-settings.ts +61 -0
  343. package/src/lib/manifest/definitions/page-layout.ts +218 -0
  344. package/src/lib/manifest/definitions/page.ts +28 -0
  345. package/src/lib/manifest/definitions/record-triggered-flow.ts +71 -0
  346. package/src/lib/manifest/definitions/validation.ts +46 -0
  347. package/src/lib/manifest/definitions/workflow.ts +62 -0
  348. package/src/lib/manifest/index.ts +4 -0
  349. package/src/lib/manifest/package-manifest.ts +40 -0
  350. package/src/resources/index.ts +7 -0
  351. package/src/resources/reimbursements.ts +1 -1
  352. package/src/resources/spend-categories.ts +175 -0
  353. package/src/version.ts +1 -1
  354. package/version.d.mts +1 -1
  355. package/version.d.ts +1 -1
  356. package/version.js +1 -1
  357. package/version.mjs +1 -1
  358. package/lib/charts/guards.d.mts +0 -15
  359. package/lib/charts/guards.d.mts.map +0 -1
  360. package/lib/charts/guards.d.ts +0 -15
  361. package/lib/charts/guards.d.ts.map +0 -1
  362. package/lib/charts/guards.js +0 -38
  363. package/lib/charts/guards.js.map +0 -1
  364. package/lib/charts/guards.mjs +0 -34
  365. package/lib/charts/guards.mjs.map +0 -1
  366. package/src/lib/charts/guards.ts +0 -42
@@ -1,74 +1,195 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.chartRuleSchema = exports.CHART_RULE_SCHEMA_ID = void 0;
4
+ exports.parseChartRule = parseChartRule;
5
+ const valibot_1 = require("valibot");
6
+ const errors_1 = require("./errors.js");
4
7
  const types_1 = require("./types.js");
5
- /** Stable identifier for the published contract, versioned by the tag. */
8
+ const vocabulary_1 = require("./vocabulary.js");
9
+ const ruleNodeKinds = new Set(vocabulary_1.RULE_NODE_KINDS);
10
+ const placeholderKeys = new Set(['$rule', 'channel']);
11
+ const ruleFieldKeys = ['$rule', 'channel', 'kind', 'value', 'left', 'right', 'cond', 'then', 'else'];
12
+ const scalarSchema = (0, valibot_1.union)([
13
+ (0, valibot_1.pipe)((0, valibot_1.number)(), (0, valibot_1.finite)()),
14
+ (0, valibot_1.string)(),
15
+ (0, valibot_1.boolean)(),
16
+ (0, valibot_1.null_)(),
17
+ ]);
18
+ const parsedRules = new WeakSet();
19
+ /** @deprecated Use `CHART_RULE_CONTRACT_VERSION` to identify the executable contract. */
6
20
  exports.CHART_RULE_SCHEMA_ID = `https://rippling.com/schemas/${types_1.CHART_RULE_CONTRACT_VERSION}.json`;
21
+ function hasOwn(value, key) {
22
+ return Object.prototype.hasOwnProperty.call(value, key);
23
+ }
24
+ const refNodeSchema = (0, valibot_1.strictObject)({ kind: (0, valibot_1.literal)('value') });
25
+ const literalNodeSchema = (0, valibot_1.strictObject)({ kind: (0, valibot_1.literal)('literal'), value: scalarSchema });
26
+ const numericLiteralNodeSchema = (0, valibot_1.strictObject)({
27
+ kind: (0, valibot_1.literal)('literal'),
28
+ value: (0, valibot_1.pipe)((0, valibot_1.number)(), (0, valibot_1.finite)()),
29
+ });
30
+ const requiredColorLiteralNodeSchema = (0, valibot_1.strictObject)({
31
+ kind: (0, valibot_1.literal)('literal'),
32
+ value: (0, valibot_1.string)(),
33
+ });
34
+ const optionalColorLiteralNodeSchema = (0, valibot_1.strictObject)({
35
+ kind: (0, valibot_1.literal)('literal'),
36
+ value: (0, valibot_1.union)([(0, valibot_1.string)(), (0, valibot_1.null_)()]),
37
+ });
38
+ const comparisonOperandSchema = (0, valibot_1.variant)('kind', [refNodeSchema, literalNodeSchema]);
39
+ const numericOperandSchema = (0, valibot_1.variant)('kind', [refNodeSchema, numericLiteralNodeSchema]);
40
+ const equalityComparisonNodeSchema = (0, valibot_1.strictObject)({
41
+ kind: (0, valibot_1.picklist)(vocabulary_1.EQUALITY_COMPARISON_KINDS),
42
+ left: comparisonOperandSchema,
43
+ right: comparisonOperandSchema,
44
+ });
45
+ const numericComparisonNodeSchema = (0, valibot_1.strictObject)({
46
+ kind: (0, valibot_1.picklist)(vocabulary_1.NUMERIC_COMPARISON_KINDS),
47
+ left: numericOperandSchema,
48
+ right: numericOperandSchema,
49
+ });
50
+ const comparisonNodeSchema = (0, valibot_1.variant)('kind', [equalityComparisonNodeSchema, numericComparisonNodeSchema]);
51
+ const ifElseNodeSchema = (0, valibot_1.strictObject)({
52
+ kind: (0, valibot_1.literal)('ifElse'),
53
+ cond: comparisonNodeSchema,
54
+ then: requiredColorLiteralNodeSchema,
55
+ else: optionalColorLiteralNodeSchema,
56
+ });
7
57
  /**
8
- * JSON Schema (2020-12) for the `{$rule}` placeholder and its closed node set.
58
+ * Executable runtime schema for a chart-rule node.
9
59
  *
10
- * This is the contract. A consumer that keeps its own rule evaluator (rather
11
- * than importing `evaluate`) can validate against this so the two never drift —
12
- * every kind and operand shape the builders can emit is described here.
60
+ * v1 is intentionally non-recursive. A comparison contains only `value` or
61
+ * literal operands, and a conditional contains one comparison plus two colour
62
+ * literals. Contract tests prove that every public builder output parses.
13
63
  */
14
- exports.chartRuleSchema = {
15
- $schema: 'https://json-schema.org/draft/2020-12/schema',
16
- $id: exports.CHART_RULE_SCHEMA_ID,
17
- title: 'Chart rule placeholder',
18
- description: 'A rule tree the chart agent emits into a chart option, marked with $rule.',
19
- type: 'object',
20
- required: ['$rule', 'channel'],
21
- additionalProperties: false,
22
- properties: {
23
- // A colour rule's top-level tree is the conditional-value form (`when(...)`),
24
- // matching what `color()` builds and accepts. A bare ref/comparison/literal
25
- // resolves to a number/boolean/constant, not a colour decision.
26
- $rule: { $ref: '#/$defs/ifElse' },
27
- channel: { const: 'color' },
28
- },
29
- $defs: {
30
- scalar: { type: ['number', 'string', 'boolean', 'null'] },
31
- node: {
32
- oneOf: [
33
- { $ref: '#/$defs/ref' },
34
- { $ref: '#/$defs/literal' },
35
- { $ref: '#/$defs/comparison' },
36
- { $ref: '#/$defs/ifElse' },
37
- ],
38
- },
39
- ref: {
40
- type: 'object',
41
- required: ['kind'],
42
- additionalProperties: false,
43
- properties: { kind: { const: 'value' } },
44
- },
45
- literal: {
46
- type: 'object',
47
- required: ['kind', 'value'],
48
- additionalProperties: false,
49
- properties: { kind: { const: 'literal' }, value: { $ref: '#/$defs/scalar' } },
50
- },
51
- comparison: {
52
- type: 'object',
53
- required: ['kind', 'left', 'right'],
54
- additionalProperties: false,
55
- properties: {
56
- kind: { enum: ['equals', 'isNot', 'lessThan', 'greaterThan', 'lessOrEqual', 'greaterOrEqual'] },
57
- left: { $ref: '#/$defs/node' },
58
- right: { $ref: '#/$defs/node' },
59
- },
60
- },
61
- ifElse: {
62
- type: 'object',
63
- required: ['kind', 'cond', 'then', 'else'],
64
- additionalProperties: false,
65
- properties: {
66
- kind: { const: 'ifElse' },
67
- cond: { $ref: '#/$defs/node' },
68
- then: { $ref: '#/$defs/node' },
69
- else: { $ref: '#/$defs/node' },
70
- },
71
- },
72
- },
73
- };
64
+ const ruleNodeSchema = (0, valibot_1.variant)('kind', [
65
+ refNodeSchema,
66
+ literalNodeSchema,
67
+ equalityComparisonNodeSchema,
68
+ numericComparisonNodeSchema,
69
+ ifElseNodeSchema,
70
+ ]);
71
+ /** Runtime schema for the `{$rule, channel}` value embedded in a chart option. */
72
+ const rulePlaceholderSchema = (0, valibot_1.strictObject)({
73
+ $rule: ifElseNodeSchema,
74
+ channel: (0, valibot_1.picklist)(vocabulary_1.RULE_CHANNELS),
75
+ });
76
+ /**
77
+ * Runtime schema for either a bare rule node or a chart-option placeholder.
78
+ * Persisted and agent-authored JSON crosses this boundary as `unknown`.
79
+ */
80
+ exports.chartRuleSchema = (0, valibot_1.union)([
81
+ rulePlaceholderSchema,
82
+ ruleNodeSchema,
83
+ ]);
84
+ /** Parse untrusted chart-rule JSON and return an immutable validated clone. */
85
+ function parseChartRule(input) {
86
+ if (isParsedRule(input)) {
87
+ return input;
88
+ }
89
+ preflight(input);
90
+ const result = (0, valibot_1.safeParse)(exports.chartRuleSchema, input);
91
+ if (result.success) {
92
+ return markParsedRule(result.output);
93
+ }
94
+ throw new errors_1.MalformedRuleError((0, valibot_1.summarize)(result.issues));
95
+ }
96
+ /**
97
+ * Valibot's object schemas use `key in input`, which also reads inherited
98
+ * properties. Reject inherited rule fields before parsing so prototype data
99
+ * cannot supply required operands or bypass the flat v1 contract.
100
+ */
101
+ function preflight(input) {
102
+ assertNoInheritedRuleFields(input);
103
+ const root = unwrapPlaceholder(input);
104
+ assertNoInheritedRuleFields(root);
105
+ assertKnownNode(root);
106
+ if (!isRecord(root) || !hasOwn(root, 'kind')) {
107
+ return;
108
+ }
109
+ if (root['kind'] === 'ifElse') {
110
+ inspectChildren(root, ['cond', 'then', 'else']);
111
+ const condition = root['cond'];
112
+ inspectComparison(condition);
113
+ }
114
+ else if (typeof root['kind'] === 'string' && isComparisonKind(root['kind'])) {
115
+ inspectComparison(root);
116
+ }
117
+ }
118
+ function inspectComparison(value) {
119
+ assertNoInheritedRuleFields(value);
120
+ assertKnownNode(value);
121
+ if (isRecord(value)) {
122
+ inspectChildren(value, ['left', 'right']);
123
+ }
124
+ }
125
+ function inspectChildren(parent, keys) {
126
+ for (const key of keys) {
127
+ if (hasOwn(parent, key)) {
128
+ const child = parent[key];
129
+ assertNoInheritedRuleFields(child);
130
+ assertKnownNode(child);
131
+ }
132
+ }
133
+ }
134
+ function assertNoInheritedRuleFields(value) {
135
+ if (!isRecord(value)) {
136
+ return;
137
+ }
138
+ for (const key of ruleFieldKeys) {
139
+ if (key in value && !hasOwn(value, key)) {
140
+ throw new errors_1.MalformedRuleError(`a chart rule must not inherit the ${key} property`);
141
+ }
142
+ }
143
+ }
144
+ function assertKnownNode(value) {
145
+ if (isRecord(value) &&
146
+ hasOwn(value, 'kind') &&
147
+ typeof value['kind'] === 'string' &&
148
+ !ruleNodeKinds.has(value['kind'])) {
149
+ throw new errors_1.UnknownNodeError(value['kind']);
150
+ }
151
+ }
152
+ function isComparisonKind(kind) {
153
+ return kind !== 'literal' && kind !== 'value' && kind !== 'ifElse' && ruleNodeKinds.has(kind);
154
+ }
155
+ function isRecord(value) {
156
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
157
+ }
158
+ function unwrapPlaceholder(input) {
159
+ if (input === null || typeof input !== 'object' || Array.isArray(input) || !hasOwn(input, '$rule')) {
160
+ return input;
161
+ }
162
+ const unexpectedKey = Object.keys(input).find((key) => !placeholderKeys.has(key));
163
+ if (unexpectedKey !== undefined) {
164
+ throw new errors_1.MalformedRuleError(`a rule placeholder has an unexpected property: ${unexpectedKey}`);
165
+ }
166
+ return input.$rule;
167
+ }
168
+ function isParsedRule(input) {
169
+ return input !== null && typeof input === 'object' && !Array.isArray(input) && parsedRules.has(input);
170
+ }
171
+ /**
172
+ * Mark the validated clone so `evaluate(parseChartRule(input), ctx)` does not
173
+ * reparse the full value for every datum. Freezing prevents a caller from
174
+ * mutating a trusted value after validation.
175
+ */
176
+ function markParsedRule(rule) {
177
+ const stack = [rule];
178
+ const seen = new WeakSet();
179
+ while (stack.length > 0) {
180
+ const current = stack.pop();
181
+ if (!current || seen.has(current)) {
182
+ continue;
183
+ }
184
+ seen.add(current);
185
+ for (const value of Object.values(current)) {
186
+ if (value !== null && typeof value === 'object') {
187
+ stack.push(value);
188
+ }
189
+ }
190
+ Object.freeze(current);
191
+ }
192
+ parsedRules.add(rule);
193
+ return rule;
194
+ }
74
195
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/lib/charts/schema.ts"],"names":[],"mappings":";;;AAAA,sCAAsD;AAEtD,0EAA0E;AAC7D,QAAA,oBAAoB,GAAG,gCAAgC,mCAA2B,OAAO,CAAC;AAEvG;;;;;;GAMG;AACU,QAAA,eAAe,GAAG;IAC7B,OAAO,EAAE,8CAA8C;IACvD,GAAG,EAAE,4BAAoB;IACzB,KAAK,EAAE,wBAAwB;IAC/B,WAAW,EAAE,2EAA2E;IACxF,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;IAC9B,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,8EAA8E;QAC9E,4EAA4E;QAC5E,gEAAgE;QAChE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;QACjC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KAC5B;IACD,KAAK,EAAE;QACL,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE;QACzD,IAAI,EAAE;YACJ,KAAK,EAAE;gBACL,EAAE,IAAI,EAAE,aAAa,EAAE;gBACvB,EAAE,IAAI,EAAE,iBAAiB,EAAE;gBAC3B,EAAE,IAAI,EAAE,oBAAoB,EAAE;gBAC9B,EAAE,IAAI,EAAE,gBAAgB,EAAE;aAC3B;SACF;QACD,GAAG,EAAE;YACH,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,MAAM,CAAC;YAClB,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;SACzC;QACD,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;YAC3B,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE;SAC9E;QACD,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;YACnC,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAE;gBAC/F,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;gBAC9B,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;aAChC;SACF;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC1C,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;gBACzB,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;gBAC9B,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;gBAC9B,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;aAC/B;SACF;KACF;CACO,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/lib/charts/schema.ts"],"names":[],"mappings":"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"}
@@ -1,71 +1,191 @@
1
+ import { boolean, finite, literal, null_, number, picklist, pipe, safeParse, strictObject, string, summarize, union, variant, } from 'valibot';
2
+ import { MalformedRuleError, UnknownNodeError } from "./errors.mjs";
1
3
  import { CHART_RULE_CONTRACT_VERSION } from "./types.mjs";
2
- /** Stable identifier for the published contract, versioned by the tag. */
4
+ import { EQUALITY_COMPARISON_KINDS, NUMERIC_COMPARISON_KINDS, RULE_CHANNELS, RULE_NODE_KINDS, } from "./vocabulary.mjs";
5
+ const ruleNodeKinds = new Set(RULE_NODE_KINDS);
6
+ const placeholderKeys = new Set(['$rule', 'channel']);
7
+ const ruleFieldKeys = ['$rule', 'channel', 'kind', 'value', 'left', 'right', 'cond', 'then', 'else'];
8
+ const scalarSchema = union([
9
+ pipe(number(), finite()),
10
+ string(),
11
+ boolean(),
12
+ null_(),
13
+ ]);
14
+ const parsedRules = new WeakSet();
15
+ /** @deprecated Use `CHART_RULE_CONTRACT_VERSION` to identify the executable contract. */
3
16
  export const CHART_RULE_SCHEMA_ID = `https://rippling.com/schemas/${CHART_RULE_CONTRACT_VERSION}.json`;
17
+ function hasOwn(value, key) {
18
+ return Object.prototype.hasOwnProperty.call(value, key);
19
+ }
20
+ const refNodeSchema = strictObject({ kind: literal('value') });
21
+ const literalNodeSchema = strictObject({ kind: literal('literal'), value: scalarSchema });
22
+ const numericLiteralNodeSchema = strictObject({
23
+ kind: literal('literal'),
24
+ value: pipe(number(), finite()),
25
+ });
26
+ const requiredColorLiteralNodeSchema = strictObject({
27
+ kind: literal('literal'),
28
+ value: string(),
29
+ });
30
+ const optionalColorLiteralNodeSchema = strictObject({
31
+ kind: literal('literal'),
32
+ value: union([string(), null_()]),
33
+ });
34
+ const comparisonOperandSchema = variant('kind', [refNodeSchema, literalNodeSchema]);
35
+ const numericOperandSchema = variant('kind', [refNodeSchema, numericLiteralNodeSchema]);
36
+ const equalityComparisonNodeSchema = strictObject({
37
+ kind: picklist(EQUALITY_COMPARISON_KINDS),
38
+ left: comparisonOperandSchema,
39
+ right: comparisonOperandSchema,
40
+ });
41
+ const numericComparisonNodeSchema = strictObject({
42
+ kind: picklist(NUMERIC_COMPARISON_KINDS),
43
+ left: numericOperandSchema,
44
+ right: numericOperandSchema,
45
+ });
46
+ const comparisonNodeSchema = variant('kind', [equalityComparisonNodeSchema, numericComparisonNodeSchema]);
47
+ const ifElseNodeSchema = strictObject({
48
+ kind: literal('ifElse'),
49
+ cond: comparisonNodeSchema,
50
+ then: requiredColorLiteralNodeSchema,
51
+ else: optionalColorLiteralNodeSchema,
52
+ });
4
53
  /**
5
- * JSON Schema (2020-12) for the `{$rule}` placeholder and its closed node set.
54
+ * Executable runtime schema for a chart-rule node.
6
55
  *
7
- * This is the contract. A consumer that keeps its own rule evaluator (rather
8
- * than importing `evaluate`) can validate against this so the two never drift —
9
- * every kind and operand shape the builders can emit is described here.
56
+ * v1 is intentionally non-recursive. A comparison contains only `value` or
57
+ * literal operands, and a conditional contains one comparison plus two colour
58
+ * literals. Contract tests prove that every public builder output parses.
10
59
  */
11
- export const chartRuleSchema = {
12
- $schema: 'https://json-schema.org/draft/2020-12/schema',
13
- $id: CHART_RULE_SCHEMA_ID,
14
- title: 'Chart rule placeholder',
15
- description: 'A rule tree the chart agent emits into a chart option, marked with $rule.',
16
- type: 'object',
17
- required: ['$rule', 'channel'],
18
- additionalProperties: false,
19
- properties: {
20
- // A colour rule's top-level tree is the conditional-value form (`when(...)`),
21
- // matching what `color()` builds and accepts. A bare ref/comparison/literal
22
- // resolves to a number/boolean/constant, not a colour decision.
23
- $rule: { $ref: '#/$defs/ifElse' },
24
- channel: { const: 'color' },
25
- },
26
- $defs: {
27
- scalar: { type: ['number', 'string', 'boolean', 'null'] },
28
- node: {
29
- oneOf: [
30
- { $ref: '#/$defs/ref' },
31
- { $ref: '#/$defs/literal' },
32
- { $ref: '#/$defs/comparison' },
33
- { $ref: '#/$defs/ifElse' },
34
- ],
35
- },
36
- ref: {
37
- type: 'object',
38
- required: ['kind'],
39
- additionalProperties: false,
40
- properties: { kind: { const: 'value' } },
41
- },
42
- literal: {
43
- type: 'object',
44
- required: ['kind', 'value'],
45
- additionalProperties: false,
46
- properties: { kind: { const: 'literal' }, value: { $ref: '#/$defs/scalar' } },
47
- },
48
- comparison: {
49
- type: 'object',
50
- required: ['kind', 'left', 'right'],
51
- additionalProperties: false,
52
- properties: {
53
- kind: { enum: ['equals', 'isNot', 'lessThan', 'greaterThan', 'lessOrEqual', 'greaterOrEqual'] },
54
- left: { $ref: '#/$defs/node' },
55
- right: { $ref: '#/$defs/node' },
56
- },
57
- },
58
- ifElse: {
59
- type: 'object',
60
- required: ['kind', 'cond', 'then', 'else'],
61
- additionalProperties: false,
62
- properties: {
63
- kind: { const: 'ifElse' },
64
- cond: { $ref: '#/$defs/node' },
65
- then: { $ref: '#/$defs/node' },
66
- else: { $ref: '#/$defs/node' },
67
- },
68
- },
69
- },
70
- };
60
+ const ruleNodeSchema = variant('kind', [
61
+ refNodeSchema,
62
+ literalNodeSchema,
63
+ equalityComparisonNodeSchema,
64
+ numericComparisonNodeSchema,
65
+ ifElseNodeSchema,
66
+ ]);
67
+ /** Runtime schema for the `{$rule, channel}` value embedded in a chart option. */
68
+ const rulePlaceholderSchema = strictObject({
69
+ $rule: ifElseNodeSchema,
70
+ channel: picklist(RULE_CHANNELS),
71
+ });
72
+ /**
73
+ * Runtime schema for either a bare rule node or a chart-option placeholder.
74
+ * Persisted and agent-authored JSON crosses this boundary as `unknown`.
75
+ */
76
+ export const chartRuleSchema = union([
77
+ rulePlaceholderSchema,
78
+ ruleNodeSchema,
79
+ ]);
80
+ /** Parse untrusted chart-rule JSON and return an immutable validated clone. */
81
+ export function parseChartRule(input) {
82
+ if (isParsedRule(input)) {
83
+ return input;
84
+ }
85
+ preflight(input);
86
+ const result = safeParse(chartRuleSchema, input);
87
+ if (result.success) {
88
+ return markParsedRule(result.output);
89
+ }
90
+ throw new MalformedRuleError(summarize(result.issues));
91
+ }
92
+ /**
93
+ * Valibot's object schemas use `key in input`, which also reads inherited
94
+ * properties. Reject inherited rule fields before parsing so prototype data
95
+ * cannot supply required operands or bypass the flat v1 contract.
96
+ */
97
+ function preflight(input) {
98
+ assertNoInheritedRuleFields(input);
99
+ const root = unwrapPlaceholder(input);
100
+ assertNoInheritedRuleFields(root);
101
+ assertKnownNode(root);
102
+ if (!isRecord(root) || !hasOwn(root, 'kind')) {
103
+ return;
104
+ }
105
+ if (root['kind'] === 'ifElse') {
106
+ inspectChildren(root, ['cond', 'then', 'else']);
107
+ const condition = root['cond'];
108
+ inspectComparison(condition);
109
+ }
110
+ else if (typeof root['kind'] === 'string' && isComparisonKind(root['kind'])) {
111
+ inspectComparison(root);
112
+ }
113
+ }
114
+ function inspectComparison(value) {
115
+ assertNoInheritedRuleFields(value);
116
+ assertKnownNode(value);
117
+ if (isRecord(value)) {
118
+ inspectChildren(value, ['left', 'right']);
119
+ }
120
+ }
121
+ function inspectChildren(parent, keys) {
122
+ for (const key of keys) {
123
+ if (hasOwn(parent, key)) {
124
+ const child = parent[key];
125
+ assertNoInheritedRuleFields(child);
126
+ assertKnownNode(child);
127
+ }
128
+ }
129
+ }
130
+ function assertNoInheritedRuleFields(value) {
131
+ if (!isRecord(value)) {
132
+ return;
133
+ }
134
+ for (const key of ruleFieldKeys) {
135
+ if (key in value && !hasOwn(value, key)) {
136
+ throw new MalformedRuleError(`a chart rule must not inherit the ${key} property`);
137
+ }
138
+ }
139
+ }
140
+ function assertKnownNode(value) {
141
+ if (isRecord(value) &&
142
+ hasOwn(value, 'kind') &&
143
+ typeof value['kind'] === 'string' &&
144
+ !ruleNodeKinds.has(value['kind'])) {
145
+ throw new UnknownNodeError(value['kind']);
146
+ }
147
+ }
148
+ function isComparisonKind(kind) {
149
+ return kind !== 'literal' && kind !== 'value' && kind !== 'ifElse' && ruleNodeKinds.has(kind);
150
+ }
151
+ function isRecord(value) {
152
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
153
+ }
154
+ function unwrapPlaceholder(input) {
155
+ if (input === null || typeof input !== 'object' || Array.isArray(input) || !hasOwn(input, '$rule')) {
156
+ return input;
157
+ }
158
+ const unexpectedKey = Object.keys(input).find((key) => !placeholderKeys.has(key));
159
+ if (unexpectedKey !== undefined) {
160
+ throw new MalformedRuleError(`a rule placeholder has an unexpected property: ${unexpectedKey}`);
161
+ }
162
+ return input.$rule;
163
+ }
164
+ function isParsedRule(input) {
165
+ return input !== null && typeof input === 'object' && !Array.isArray(input) && parsedRules.has(input);
166
+ }
167
+ /**
168
+ * Mark the validated clone so `evaluate(parseChartRule(input), ctx)` does not
169
+ * reparse the full value for every datum. Freezing prevents a caller from
170
+ * mutating a trusted value after validation.
171
+ */
172
+ function markParsedRule(rule) {
173
+ const stack = [rule];
174
+ const seen = new WeakSet();
175
+ while (stack.length > 0) {
176
+ const current = stack.pop();
177
+ if (!current || seen.has(current)) {
178
+ continue;
179
+ }
180
+ seen.add(current);
181
+ for (const value of Object.values(current)) {
182
+ if (value !== null && typeof value === 'object') {
183
+ stack.push(value);
184
+ }
185
+ }
186
+ Object.freeze(current);
187
+ }
188
+ parsedRules.add(rule);
189
+ return rule;
190
+ }
71
191
  //# sourceMappingURL=schema.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.mjs","sourceRoot":"","sources":["../../src/lib/charts/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,oBAAgB;AAEtD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,oBAAoB,GAAG,gCAAgC,2BAA2B,OAAO,CAAC;AAEvG;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,8CAA8C;IACvD,GAAG,EAAE,oBAAoB;IACzB,KAAK,EAAE,wBAAwB;IAC/B,WAAW,EAAE,2EAA2E;IACxF,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;IAC9B,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,8EAA8E;QAC9E,4EAA4E;QAC5E,gEAAgE;QAChE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;QACjC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KAC5B;IACD,KAAK,EAAE;QACL,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE;QACzD,IAAI,EAAE;YACJ,KAAK,EAAE;gBACL,EAAE,IAAI,EAAE,aAAa,EAAE;gBACvB,EAAE,IAAI,EAAE,iBAAiB,EAAE;gBAC3B,EAAE,IAAI,EAAE,oBAAoB,EAAE;gBAC9B,EAAE,IAAI,EAAE,gBAAgB,EAAE;aAC3B;SACF;QACD,GAAG,EAAE;YACH,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,MAAM,CAAC;YAClB,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;SACzC;QACD,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;YAC3B,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE;SAC9E;QACD,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;YACnC,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAE;gBAC/F,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;gBAC9B,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;aAChC;SACF;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC1C,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;gBACzB,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;gBAC9B,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;gBAC9B,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;aAC/B;SACF;KACF;CACO,CAAC"}
1
+ {"version":3,"file":"schema.mjs","sourceRoot":"","sources":["../../src/lib/charts/schema.ts"],"names":[],"mappings":"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"}