@ggts-sh/spec 0.43.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 (679) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +75 -0
  3. package/dist/artifact.d.ts +11 -0
  4. package/dist/artifact.d.ts.map +1 -0
  5. package/dist/artifact.js +71 -0
  6. package/dist/artifact.js.map +1 -0
  7. package/dist/builder-core.d.ts +100 -0
  8. package/dist/builder-core.d.ts.map +1 -0
  9. package/dist/builder-core.js +176 -0
  10. package/dist/builder-core.js.map +1 -0
  11. package/dist/builder-data.d.ts +36 -0
  12. package/dist/builder-data.d.ts.map +1 -0
  13. package/dist/builder-data.js +123 -0
  14. package/dist/builder-data.js.map +1 -0
  15. package/dist/builder-geoms.d.ts +128 -0
  16. package/dist/builder-geoms.d.ts.map +1 -0
  17. package/dist/builder-geoms.js +221 -0
  18. package/dist/builder-geoms.js.map +1 -0
  19. package/dist/builder-options.d.ts +323 -0
  20. package/dist/builder-options.d.ts.map +1 -0
  21. package/dist/builder-options.js +2 -0
  22. package/dist/builder-options.js.map +1 -0
  23. package/dist/builder-scales.d.ts +160 -0
  24. package/dist/builder-scales.d.ts.map +1 -0
  25. package/dist/builder-scales.js +322 -0
  26. package/dist/builder-scales.js.map +1 -0
  27. package/dist/builder.d.ts +242 -0
  28. package/dist/builder.d.ts.map +1 -0
  29. package/dist/builder.js +42 -0
  30. package/dist/builder.js.map +1 -0
  31. package/dist/capabilities-data.d.ts +72 -0
  32. package/dist/capabilities-data.d.ts.map +1 -0
  33. package/dist/capabilities-data.js +337 -0
  34. package/dist/capabilities-data.js.map +1 -0
  35. package/dist/capabilities-helpers.d.ts +31 -0
  36. package/dist/capabilities-helpers.d.ts.map +1 -0
  37. package/dist/capabilities-helpers.js +41 -0
  38. package/dist/capabilities-helpers.js.map +1 -0
  39. package/dist/capabilities.d.ts +22 -0
  40. package/dist/capabilities.d.ts.map +1 -0
  41. package/dist/capabilities.js +154 -0
  42. package/dist/capabilities.js.map +1 -0
  43. package/dist/coord-helpers.d.ts +102 -0
  44. package/dist/coord-helpers.d.ts.map +1 -0
  45. package/dist/coord-helpers.js +90 -0
  46. package/dist/coord-helpers.js.map +1 -0
  47. package/dist/coord-reference-build.d.ts +50 -0
  48. package/dist/coord-reference-build.d.ts.map +1 -0
  49. package/dist/coord-reference-build.js +211 -0
  50. package/dist/coord-reference-build.js.map +1 -0
  51. package/dist/coord-reference.d.ts +52 -0
  52. package/dist/coord-reference.d.ts.map +1 -0
  53. package/dist/coord-reference.js +27 -0
  54. package/dist/coord-reference.js.map +1 -0
  55. package/dist/error-catalog.d.ts +258 -0
  56. package/dist/error-catalog.d.ts.map +1 -0
  57. package/dist/error-catalog.js +235 -0
  58. package/dist/error-catalog.js.map +1 -0
  59. package/dist/error-prose-shared.d.ts +100 -0
  60. package/dist/error-prose-shared.d.ts.map +1 -0
  61. package/dist/error-prose-shared.js +95 -0
  62. package/dist/error-prose-shared.js.map +1 -0
  63. package/dist/errors.d.ts +39 -0
  64. package/dist/errors.d.ts.map +1 -0
  65. package/dist/errors.js +52 -0
  66. package/dist/errors.js.map +1 -0
  67. package/dist/generated/coord-reference-data.d.ts +189 -0
  68. package/dist/generated/coord-reference-data.d.ts.map +1 -0
  69. package/dist/generated/coord-reference-data.js +212 -0
  70. package/dist/generated/coord-reference-data.js.map +1 -0
  71. package/dist/generated/geom-param-keys.d.ts +58 -0
  72. package/dist/generated/geom-param-keys.d.ts.map +1 -0
  73. package/dist/generated/geom-param-keys.js +223 -0
  74. package/dist/generated/geom-param-keys.js.map +1 -0
  75. package/dist/generated/geom-reference-data.d.ts +2377 -0
  76. package/dist/generated/geom-reference-data.d.ts.map +1 -0
  77. package/dist/generated/geom-reference-data.js +2790 -0
  78. package/dist/generated/geom-reference-data.js.map +1 -0
  79. package/dist/generated/guide-reference-data.d.ts +219 -0
  80. package/dist/generated/guide-reference-data.d.ts.map +1 -0
  81. package/dist/generated/guide-reference-data.js +253 -0
  82. package/dist/generated/guide-reference-data.js.map +1 -0
  83. package/dist/generated/plot-spec-validator.d.ts +2 -0
  84. package/dist/generated/plot-spec-validator.d.ts.map +1 -0
  85. package/dist/generated/plot-spec-validator.js +6274 -0
  86. package/dist/generated/plot-spec-validator.js.map +1 -0
  87. package/dist/generated/position-reference-data.d.ts +82 -0
  88. package/dist/generated/position-reference-data.d.ts.map +1 -0
  89. package/dist/generated/position-reference-data.js +181 -0
  90. package/dist/generated/position-reference-data.js.map +1 -0
  91. package/dist/generated/scale-reference-data.d.ts +8366 -0
  92. package/dist/generated/scale-reference-data.d.ts.map +1 -0
  93. package/dist/generated/scale-reference-data.js +9821 -0
  94. package/dist/generated/scale-reference-data.js.map +1 -0
  95. package/dist/generated/stat-reference-data.d.ts +241 -0
  96. package/dist/generated/stat-reference-data.d.ts.map +1 -0
  97. package/dist/generated/stat-reference-data.js +311 -0
  98. package/dist/generated/stat-reference-data.js.map +1 -0
  99. package/dist/geom-params-build.d.ts +3 -0
  100. package/dist/geom-params-build.d.ts.map +1 -0
  101. package/dist/geom-params-build.js +80 -0
  102. package/dist/geom-params-build.js.map +1 -0
  103. package/dist/geom-params.d.ts +13 -0
  104. package/dist/geom-params.d.ts.map +1 -0
  105. package/dist/geom-params.js +7 -0
  106. package/dist/geom-params.js.map +1 -0
  107. package/dist/geom-reference-build.d.ts +29 -0
  108. package/dist/geom-reference-build.d.ts.map +1 -0
  109. package/dist/geom-reference-build.js +221 -0
  110. package/dist/geom-reference-build.js.map +1 -0
  111. package/dist/geom-reference.d.ts +52 -0
  112. package/dist/geom-reference.d.ts.map +1 -0
  113. package/dist/geom-reference.js +72 -0
  114. package/dist/geom-reference.js.map +1 -0
  115. package/dist/guide-helpers.d.ts +20 -0
  116. package/dist/guide-helpers.d.ts.map +1 -0
  117. package/dist/guide-helpers.js +25 -0
  118. package/dist/guide-helpers.js.map +1 -0
  119. package/dist/guide-reference-build.d.ts +42 -0
  120. package/dist/guide-reference-build.d.ts.map +1 -0
  121. package/dist/guide-reference-build.js +180 -0
  122. package/dist/guide-reference-build.js.map +1 -0
  123. package/dist/guide-reference.d.ts +48 -0
  124. package/dist/guide-reference.d.ts.map +1 -0
  125. package/dist/guide-reference.js +32 -0
  126. package/dist/guide-reference.js.map +1 -0
  127. package/dist/hue-grey-palettes.d.ts +15 -0
  128. package/dist/hue-grey-palettes.d.ts.map +1 -0
  129. package/dist/hue-grey-palettes.js +77 -0
  130. package/dist/hue-grey-palettes.js.map +1 -0
  131. package/dist/index.d.ts +364 -0
  132. package/dist/index.d.ts.map +1 -0
  133. package/dist/index.js +225 -0
  134. package/dist/index.js.map +1 -0
  135. package/dist/lint-catalog.d.ts +47 -0
  136. package/dist/lint-catalog.d.ts.map +1 -0
  137. package/dist/lint-catalog.js +39 -0
  138. package/dist/lint-catalog.js.map +1 -0
  139. package/dist/lint-layer-rules.d.ts +18 -0
  140. package/dist/lint-layer-rules.d.ts.map +1 -0
  141. package/dist/lint-layer-rules.js +145 -0
  142. package/dist/lint-layer-rules.js.map +1 -0
  143. package/dist/lint-scale-rules.d.ts +8 -0
  144. package/dist/lint-scale-rules.d.ts.map +1 -0
  145. package/dist/lint-scale-rules.js +254 -0
  146. package/dist/lint-scale-rules.js.map +1 -0
  147. package/dist/lint.d.ts +62 -0
  148. package/dist/lint.d.ts.map +1 -0
  149. package/dist/lint.js +57 -0
  150. package/dist/lint.js.map +1 -0
  151. package/dist/normalize-coord.d.ts +8 -0
  152. package/dist/normalize-coord.d.ts.map +1 -0
  153. package/dist/normalize-coord.js +123 -0
  154. package/dist/normalize-coord.js.map +1 -0
  155. package/dist/normalize-input-layers-marks.d.ts +208 -0
  156. package/dist/normalize-input-layers-marks.d.ts.map +1 -0
  157. package/dist/normalize-input-layers-marks.js +2 -0
  158. package/dist/normalize-input-layers-marks.js.map +1 -0
  159. package/dist/normalize-input-layers-special.d.ts +131 -0
  160. package/dist/normalize-input-layers-special.d.ts.map +1 -0
  161. package/dist/normalize-input-layers-special.js +2 -0
  162. package/dist/normalize-input-layers-special.js.map +1 -0
  163. package/dist/normalize-input.d.ts +81 -0
  164. package/dist/normalize-input.d.ts.map +1 -0
  165. package/dist/normalize-input.js +2 -0
  166. package/dist/normalize-input.js.map +1 -0
  167. package/dist/normalize-paint.d.ts +8 -0
  168. package/dist/normalize-paint.d.ts.map +1 -0
  169. package/dist/normalize-paint.js +83 -0
  170. package/dist/normalize-paint.js.map +1 -0
  171. package/dist/normalize-scales.d.ts +7 -0
  172. package/dist/normalize-scales.d.ts.map +1 -0
  173. package/dist/normalize-scales.js +90 -0
  174. package/dist/normalize-scales.js.map +1 -0
  175. package/dist/normalize.d.ts +46 -0
  176. package/dist/normalize.d.ts.map +1 -0
  177. package/dist/normalize.js +279 -0
  178. package/dist/normalize.js.map +1 -0
  179. package/dist/paint-helpers.d.ts +45 -0
  180. package/dist/paint-helpers.d.ts.map +1 -0
  181. package/dist/paint-helpers.js +48 -0
  182. package/dist/paint-helpers.js.map +1 -0
  183. package/dist/pipeline-error-catalog.d.ts +319 -0
  184. package/dist/pipeline-error-catalog.d.ts.map +1 -0
  185. package/dist/pipeline-error-catalog.js +260 -0
  186. package/dist/pipeline-error-catalog.js.map +1 -0
  187. package/dist/portability-check.d.ts +35 -0
  188. package/dist/portability-check.d.ts.map +1 -0
  189. package/dist/portability-check.js +121 -0
  190. package/dist/portability-check.js.map +1 -0
  191. package/dist/portability-lossy.d.ts +19 -0
  192. package/dist/portability-lossy.d.ts.map +1 -0
  193. package/dist/portability-lossy.js +65 -0
  194. package/dist/portability-lossy.js.map +1 -0
  195. package/dist/portability.d.ts +23 -0
  196. package/dist/portability.d.ts.map +1 -0
  197. package/dist/portability.js +23 -0
  198. package/dist/portability.js.map +1 -0
  199. package/dist/portable-builder.d.ts +215 -0
  200. package/dist/portable-builder.d.ts.map +1 -0
  201. package/dist/portable-builder.js +27 -0
  202. package/dist/portable-builder.js.map +1 -0
  203. package/dist/portable-entry.d.ts +16 -0
  204. package/dist/portable-entry.d.ts.map +1 -0
  205. package/dist/portable-entry.js +14 -0
  206. package/dist/portable-entry.js.map +1 -0
  207. package/dist/position-reference-build.d.ts +29 -0
  208. package/dist/position-reference-build.d.ts.map +1 -0
  209. package/dist/position-reference-build.js +115 -0
  210. package/dist/position-reference-build.js.map +1 -0
  211. package/dist/position-reference.d.ts +34 -0
  212. package/dist/position-reference.d.ts.map +1 -0
  213. package/dist/position-reference.js +19 -0
  214. package/dist/position-reference.js.map +1 -0
  215. package/dist/runtime.d.ts +139 -0
  216. package/dist/runtime.d.ts.map +1 -0
  217. package/dist/runtime.js +2 -0
  218. package/dist/runtime.js.map +1 -0
  219. package/dist/scale-color-helpers.d.ts +121 -0
  220. package/dist/scale-color-helpers.d.ts.map +1 -0
  221. package/dist/scale-color-helpers.js +188 -0
  222. package/dist/scale-color-helpers.js.map +1 -0
  223. package/dist/scale-color-hue-grey.d.ts +52 -0
  224. package/dist/scale-color-hue-grey.d.ts.map +1 -0
  225. package/dist/scale-color-hue-grey.js +60 -0
  226. package/dist/scale-color-hue-grey.js.map +1 -0
  227. package/dist/scale-color-stops.d.ts +85 -0
  228. package/dist/scale-color-stops.d.ts.map +1 -0
  229. package/dist/scale-color-stops.js +87 -0
  230. package/dist/scale-color-stops.js.map +1 -0
  231. package/dist/scale-color-viridis.d.ts +52 -0
  232. package/dist/scale-color-viridis.d.ts.map +1 -0
  233. package/dist/scale-color-viridis.js +68 -0
  234. package/dist/scale-color-viridis.js.map +1 -0
  235. package/dist/scale-helpers.d.ts +20 -0
  236. package/dist/scale-helpers.d.ts.map +1 -0
  237. package/dist/scale-helpers.js +20 -0
  238. package/dist/scale-helpers.js.map +1 -0
  239. package/dist/scale-multi-helpers.d.ts +61 -0
  240. package/dist/scale-multi-helpers.d.ts.map +1 -0
  241. package/dist/scale-multi-helpers.js +147 -0
  242. package/dist/scale-multi-helpers.js.map +1 -0
  243. package/dist/scale-position-helpers.d.ts +81 -0
  244. package/dist/scale-position-helpers.d.ts.map +1 -0
  245. package/dist/scale-position-helpers.js +133 -0
  246. package/dist/scale-position-helpers.js.map +1 -0
  247. package/dist/scale-reference-build.d.ts +50 -0
  248. package/dist/scale-reference-build.d.ts.map +1 -0
  249. package/dist/scale-reference-build.js +147 -0
  250. package/dist/scale-reference-build.js.map +1 -0
  251. package/dist/scale-reference-classify-color.d.ts +11 -0
  252. package/dist/scale-reference-classify-color.d.ts.map +1 -0
  253. package/dist/scale-reference-classify-color.js +292 -0
  254. package/dist/scale-reference-classify-color.js.map +1 -0
  255. package/dist/scale-reference-classify-position.d.ts +10 -0
  256. package/dist/scale-reference-classify-position.d.ts.map +1 -0
  257. package/dist/scale-reference-classify-position.js +137 -0
  258. package/dist/scale-reference-classify-position.js.map +1 -0
  259. package/dist/scale-reference-classify-style.d.ts +10 -0
  260. package/dist/scale-reference-classify-style.d.ts.map +1 -0
  261. package/dist/scale-reference-classify-style.js +194 -0
  262. package/dist/scale-reference-classify-style.js.map +1 -0
  263. package/dist/scale-reference-classify-support.d.ts +37 -0
  264. package/dist/scale-reference-classify-support.d.ts.map +1 -0
  265. package/dist/scale-reference-classify-support.js +206 -0
  266. package/dist/scale-reference-classify-support.js.map +1 -0
  267. package/dist/scale-reference.d.ts +80 -0
  268. package/dist/scale-reference.d.ts.map +1 -0
  269. package/dist/scale-reference.js +85 -0
  270. package/dist/scale-reference.js.map +1 -0
  271. package/dist/scale-style-helpers.d.ts +158 -0
  272. package/dist/scale-style-helpers.d.ts.map +1 -0
  273. package/dist/scale-style-helpers.js +197 -0
  274. package/dist/scale-style-helpers.js.map +1 -0
  275. package/dist/schema-catalog.d.ts +62 -0
  276. package/dist/schema-catalog.d.ts.map +1 -0
  277. package/dist/schema-catalog.js +208 -0
  278. package/dist/schema-catalog.js.map +1 -0
  279. package/dist/schema-declarations.d.ts +1585 -0
  280. package/dist/schema-declarations.d.ts.map +1 -0
  281. package/dist/schema-declarations.js +51 -0
  282. package/dist/schema-declarations.js.map +1 -0
  283. package/dist/schema-decls-data.d.ts +58 -0
  284. package/dist/schema-decls-data.d.ts.map +1 -0
  285. package/dist/schema-decls-data.js +151 -0
  286. package/dist/schema-decls-data.js.map +1 -0
  287. package/dist/schema-decls-guides-theme.d.ts +166 -0
  288. package/dist/schema-decls-guides-theme.d.ts.map +1 -0
  289. package/dist/schema-decls-guides-theme.js +251 -0
  290. package/dist/schema-decls-guides-theme.js.map +1 -0
  291. package/dist/schema-decls-layers-col-boxplot.d.ts +118 -0
  292. package/dist/schema-decls-layers-col-boxplot.d.ts.map +1 -0
  293. package/dist/schema-decls-layers-col-boxplot.js +239 -0
  294. package/dist/schema-decls-layers-col-boxplot.js.map +1 -0
  295. package/dist/schema-decls-layers-count-pointrange.d.ts +89 -0
  296. package/dist/schema-decls-layers-count-pointrange.d.ts.map +1 -0
  297. package/dist/schema-decls-layers-count-pointrange.js +190 -0
  298. package/dist/schema-decls-layers-count-pointrange.js.map +1 -0
  299. package/dist/schema-decls-layers-crossbar-jitter.d.ts +129 -0
  300. package/dist/schema-decls-layers-crossbar-jitter.d.ts.map +1 -0
  301. package/dist/schema-decls-layers-crossbar-jitter.js +255 -0
  302. package/dist/schema-decls-layers-crossbar-jitter.js.map +1 -0
  303. package/dist/schema-decls-layers-point-path.d.ts +49 -0
  304. package/dist/schema-decls-layers-point-path.d.ts.map +1 -0
  305. package/dist/schema-decls-layers-point-path.js +156 -0
  306. package/dist/schema-decls-layers-point-path.js.map +1 -0
  307. package/dist/schema-decls-layers-sf-blank.d.ts +89 -0
  308. package/dist/schema-decls-layers-sf-blank.d.ts.map +1 -0
  309. package/dist/schema-decls-layers-sf-blank.js +254 -0
  310. package/dist/schema-decls-layers-sf-blank.js.map +1 -0
  311. package/dist/schema-decls-layers-text-map.d.ts +80 -0
  312. package/dist/schema-decls-layers-text-map.d.ts.map +1 -0
  313. package/dist/schema-decls-layers-text-map.js +151 -0
  314. package/dist/schema-decls-layers-text-map.js.map +1 -0
  315. package/dist/schema-decls-paint.d.ts +39 -0
  316. package/dist/schema-decls-paint.d.ts.map +1 -0
  317. package/dist/schema-decls-paint.js +95 -0
  318. package/dist/schema-decls-paint.js.map +1 -0
  319. package/dist/schema-decls-params-area-abline.d.ts +85 -0
  320. package/dist/schema-decls-params-area-abline.d.ts.map +1 -0
  321. package/dist/schema-decls-params-area-abline.js +259 -0
  322. package/dist/schema-decls-params-area-abline.js.map +1 -0
  323. package/dist/schema-decls-params-col-contour.d.ts +61 -0
  324. package/dist/schema-decls-params-col-contour.d.ts.map +1 -0
  325. package/dist/schema-decls-params-col-contour.js +202 -0
  326. package/dist/schema-decls-params-col-contour.js.map +1 -0
  327. package/dist/schema-decls-params-curve-label.d.ts +64 -0
  328. package/dist/schema-decls-params-curve-label.d.ts.map +1 -0
  329. package/dist/schema-decls-params-curve-label.js +204 -0
  330. package/dist/schema-decls-params-curve-label.js.map +1 -0
  331. package/dist/schema-decls-params-errorbar-position.d.ts +83 -0
  332. package/dist/schema-decls-params-errorbar-position.d.ts.map +1 -0
  333. package/dist/schema-decls-params-errorbar-position.js +264 -0
  334. package/dist/schema-decls-params-errorbar-position.js.map +1 -0
  335. package/dist/schema-decls-params-point-path.d.ts +61 -0
  336. package/dist/schema-decls-params-point-path.d.ts.map +1 -0
  337. package/dist/schema-decls-params-point-path.js +240 -0
  338. package/dist/schema-decls-params-point-path.js.map +1 -0
  339. package/dist/schema-decls-params-violin-summary.d.ts +78 -0
  340. package/dist/schema-decls-params-violin-summary.d.ts.map +1 -0
  341. package/dist/schema-decls-params-violin-summary.js +272 -0
  342. package/dist/schema-decls-params-violin-summary.js.map +1 -0
  343. package/dist/schema-decls-plot.d.ts +80 -0
  344. package/dist/schema-decls-plot.d.ts.map +1 -0
  345. package/dist/schema-decls-plot.js +222 -0
  346. package/dist/schema-decls-plot.js.map +1 -0
  347. package/dist/schema-decls-scales-guides.d.ts +291 -0
  348. package/dist/schema-decls-scales-guides.d.ts.map +1 -0
  349. package/dist/schema-decls-scales-guides.js +189 -0
  350. package/dist/schema-decls-scales-guides.js.map +1 -0
  351. package/dist/schema-decls-scales.d.ts +124 -0
  352. package/dist/schema-decls-scales.d.ts.map +1 -0
  353. package/dist/schema-decls-scales.js +279 -0
  354. package/dist/schema-decls-scales.js.map +1 -0
  355. package/dist/schema-imports.d.ts +1679 -0
  356. package/dist/schema-imports.d.ts.map +1 -0
  357. package/dist/schema-imports.js +104 -0
  358. package/dist/schema-imports.js.map +1 -0
  359. package/dist/schema-name-schemas.d.ts +18 -0
  360. package/dist/schema-name-schemas.d.ts.map +1 -0
  361. package/dist/schema-name-schemas.js +13 -0
  362. package/dist/schema-name-schemas.js.map +1 -0
  363. package/dist/schema-names.d.ts +53 -0
  364. package/dist/schema-names.d.ts.map +1 -0
  365. package/dist/schema-names.js +229 -0
  366. package/dist/schema-names.js.map +1 -0
  367. package/dist/schema-types.d.ts +336 -0
  368. package/dist/schema-types.d.ts.map +1 -0
  369. package/dist/schema-types.js +10 -0
  370. package/dist/schema-types.js.map +1 -0
  371. package/dist/schema.d.ts +38 -0
  372. package/dist/schema.d.ts.map +1 -0
  373. package/dist/schema.js +34 -0
  374. package/dist/schema.js.map +1 -0
  375. package/dist/stat-reference-build.d.ts +24 -0
  376. package/dist/stat-reference-build.d.ts.map +1 -0
  377. package/dist/stat-reference-build.js +86 -0
  378. package/dist/stat-reference-build.js.map +1 -0
  379. package/dist/stat-reference.d.ts +33 -0
  380. package/dist/stat-reference.d.ts.map +1 -0
  381. package/dist/stat-reference.js +19 -0
  382. package/dist/stat-reference.js.map +1 -0
  383. package/dist/structural-gate.d.ts +15 -0
  384. package/dist/structural-gate.d.ts.map +1 -0
  385. package/dist/structural-gate.js +34 -0
  386. package/dist/structural-gate.js.map +1 -0
  387. package/dist/temporal-column.d.ts +33 -0
  388. package/dist/temporal-column.d.ts.map +1 -0
  389. package/dist/temporal-column.js +247 -0
  390. package/dist/temporal-column.js.map +1 -0
  391. package/dist/temporal-guides.d.ts +11 -0
  392. package/dist/temporal-guides.d.ts.map +1 -0
  393. package/dist/temporal-guides.js +11 -0
  394. package/dist/temporal-guides.js.map +1 -0
  395. package/dist/temporal-interval-schema.d.ts +9 -0
  396. package/dist/temporal-interval-schema.d.ts.map +1 -0
  397. package/dist/temporal-interval-schema.js +25 -0
  398. package/dist/temporal-interval-schema.js.map +1 -0
  399. package/dist/temporal-interval.d.ts +29 -0
  400. package/dist/temporal-interval.d.ts.map +1 -0
  401. package/dist/temporal-interval.js +122 -0
  402. package/dist/temporal-interval.js.map +1 -0
  403. package/dist/temporal-parse-core.d.ts +96 -0
  404. package/dist/temporal-parse-core.d.ts.map +1 -0
  405. package/dist/temporal-parse-core.js +235 -0
  406. package/dist/temporal-parse-core.js.map +1 -0
  407. package/dist/temporal-parse-format.d.ts +13 -0
  408. package/dist/temporal-parse-format.d.ts.map +1 -0
  409. package/dist/temporal-parse-format.js +180 -0
  410. package/dist/temporal-parse-format.js.map +1 -0
  411. package/dist/temporal-parse-schema.d.ts +11 -0
  412. package/dist/temporal-parse-schema.d.ts.map +1 -0
  413. package/dist/temporal-parse-schema.js +23 -0
  414. package/dist/temporal-parse-schema.js.map +1 -0
  415. package/dist/temporal-parse.d.ts +18 -0
  416. package/dist/temporal-parse.d.ts.map +1 -0
  417. package/dist/temporal-parse.js +183 -0
  418. package/dist/temporal-parse.js.map +1 -0
  419. package/dist/temporal-polyfill.d.ts +3 -0
  420. package/dist/temporal-polyfill.d.ts.map +1 -0
  421. package/dist/temporal-polyfill.js +25 -0
  422. package/dist/temporal-polyfill.js.map +1 -0
  423. package/dist/temporal-ticks.d.ts +20 -0
  424. package/dist/temporal-ticks.d.ts.map +1 -0
  425. package/dist/temporal-ticks.js +246 -0
  426. package/dist/temporal-ticks.js.map +1 -0
  427. package/dist/temporal.d.ts +109 -0
  428. package/dist/temporal.d.ts.map +1 -0
  429. package/dist/temporal.js +73 -0
  430. package/dist/temporal.js.map +1 -0
  431. package/dist/validate-data-checks-color-temporal.d.ts +58 -0
  432. package/dist/validate-data-checks-color-temporal.d.ts.map +1 -0
  433. package/dist/validate-data-checks-color-temporal.js +168 -0
  434. package/dist/validate-data-checks-color-temporal.js.map +1 -0
  435. package/dist/validate-data-checks-color.d.ts +28 -0
  436. package/dist/validate-data-checks-color.d.ts.map +1 -0
  437. package/dist/validate-data-checks-color.js +296 -0
  438. package/dist/validate-data-checks-color.js.map +1 -0
  439. package/dist/validate-data-checks-layer.d.ts +37 -0
  440. package/dist/validate-data-checks-layer.d.ts.map +1 -0
  441. package/dist/validate-data-checks-layer.js +343 -0
  442. package/dist/validate-data-checks-layer.js.map +1 -0
  443. package/dist/validate-data-checks-position.d.ts +45 -0
  444. package/dist/validate-data-checks-position.d.ts.map +1 -0
  445. package/dist/validate-data-checks-position.js +204 -0
  446. package/dist/validate-data-checks-position.js.map +1 -0
  447. package/dist/validate-data-checks-style-finite.d.ts +24 -0
  448. package/dist/validate-data-checks-style-finite.d.ts.map +1 -0
  449. package/dist/validate-data-checks-style-finite.js +40 -0
  450. package/dist/validate-data-checks-style-finite.js.map +1 -0
  451. package/dist/validate-data-checks-style-numeric.d.ts +26 -0
  452. package/dist/validate-data-checks-style-numeric.d.ts.map +1 -0
  453. package/dist/validate-data-checks-style-numeric.js +327 -0
  454. package/dist/validate-data-checks-style-numeric.js.map +1 -0
  455. package/dist/validate-data-checks-style.d.ts +14 -0
  456. package/dist/validate-data-checks-style.d.ts.map +1 -0
  457. package/dist/validate-data-checks-style.js +14 -0
  458. package/dist/validate-data-checks-style.js.map +1 -0
  459. package/dist/validate-data-checks-temporal.d.ts +57 -0
  460. package/dist/validate-data-checks-temporal.d.ts.map +1 -0
  461. package/dist/validate-data-checks-temporal.js +83 -0
  462. package/dist/validate-data-checks-temporal.js.map +1 -0
  463. package/dist/validate-data-checks.d.ts +31 -0
  464. package/dist/validate-data-checks.d.ts.map +1 -0
  465. package/dist/validate-data-checks.js +110 -0
  466. package/dist/validate-data-checks.js.map +1 -0
  467. package/dist/validate-data-evidence.d.ts +69 -0
  468. package/dist/validate-data-evidence.d.ts.map +1 -0
  469. package/dist/validate-data-evidence.js +329 -0
  470. package/dist/validate-data-evidence.js.map +1 -0
  471. package/dist/validate-data.d.ts +73 -0
  472. package/dist/validate-data.d.ts.map +1 -0
  473. package/dist/validate-data.js +30 -0
  474. package/dist/validate-data.js.map +1 -0
  475. package/dist/validate-map-errors.d.ts +32 -0
  476. package/dist/validate-map-errors.d.ts.map +1 -0
  477. package/dist/validate-map-errors.js +76 -0
  478. package/dist/validate-map-errors.js.map +1 -0
  479. package/dist/validate-map-forms.d.ts +43 -0
  480. package/dist/validate-map-forms.d.ts.map +1 -0
  481. package/dist/validate-map-forms.js +125 -0
  482. package/dist/validate-map-forms.js.map +1 -0
  483. package/dist/validate-map-path-keywords.d.ts +11 -0
  484. package/dist/validate-map-path-keywords.d.ts.map +1 -0
  485. package/dist/validate-map-path-keywords.js +95 -0
  486. package/dist/validate-map-path-keywords.js.map +1 -0
  487. package/dist/validate-map-path-unions.d.ts +27 -0
  488. package/dist/validate-map-path-unions.d.ts.map +1 -0
  489. package/dist/validate-map-path-unions.js +200 -0
  490. package/dist/validate-map-path-unions.js.map +1 -0
  491. package/dist/validate-schema-shape.d.ts +69 -0
  492. package/dist/validate-schema-shape.d.ts.map +1 -0
  493. package/dist/validate-schema-shape.js +156 -0
  494. package/dist/validate-schema-shape.js.map +1 -0
  495. package/dist/validate-schema-walk.d.ts +34 -0
  496. package/dist/validate-schema-walk.d.ts.map +1 -0
  497. package/dist/validate-schema-walk.js +216 -0
  498. package/dist/validate-schema-walk.js.map +1 -0
  499. package/dist/validate-structure-facet.d.ts +8 -0
  500. package/dist/validate-structure-facet.d.ts.map +1 -0
  501. package/dist/validate-structure-facet.js +67 -0
  502. package/dist/validate-structure-facet.js.map +1 -0
  503. package/dist/validate-structure-layer-computed-y.d.ts +14 -0
  504. package/dist/validate-structure-layer-computed-y.d.ts.map +1 -0
  505. package/dist/validate-structure-layer-computed-y.js +70 -0
  506. package/dist/validate-structure-layer-computed-y.js.map +1 -0
  507. package/dist/validate-structure-layer-ribbon.d.ts +8 -0
  508. package/dist/validate-structure-layer-ribbon.d.ts.map +1 -0
  509. package/dist/validate-structure-layer-ribbon.js +36 -0
  510. package/dist/validate-structure-layer-ribbon.js.map +1 -0
  511. package/dist/validate-structure-layer-rule.d.ts +14 -0
  512. package/dist/validate-structure-layer-rule.d.ts.map +1 -0
  513. package/dist/validate-structure-layer-rule.js +90 -0
  514. package/dist/validate-structure-layer-rule.js.map +1 -0
  515. package/dist/validate-structure-layer-shared.d.ts +12 -0
  516. package/dist/validate-structure-layer-shared.d.ts.map +1 -0
  517. package/dist/validate-structure-layer-shared.js +17 -0
  518. package/dist/validate-structure-layer-shared.js.map +1 -0
  519. package/dist/validate-structure-layers.d.ts +12 -0
  520. package/dist/validate-structure-layers.d.ts.map +1 -0
  521. package/dist/validate-structure-layers.js +292 -0
  522. package/dist/validate-structure-layers.js.map +1 -0
  523. package/dist/validate-structure-paint.d.ts +12 -0
  524. package/dist/validate-structure-paint.d.ts.map +1 -0
  525. package/dist/validate-structure-paint.js +87 -0
  526. package/dist/validate-structure-paint.js.map +1 -0
  527. package/dist/validate-structure-scales.d.ts +10 -0
  528. package/dist/validate-structure-scales.d.ts.map +1 -0
  529. package/dist/validate-structure-scales.js +242 -0
  530. package/dist/validate-structure-scales.js.map +1 -0
  531. package/dist/validate-structure-style-bins.d.ts +17 -0
  532. package/dist/validate-structure-style-bins.d.ts.map +1 -0
  533. package/dist/validate-structure-style-bins.js +150 -0
  534. package/dist/validate-structure-style-bins.js.map +1 -0
  535. package/dist/validate-structure.d.ts +16 -0
  536. package/dist/validate-structure.d.ts.map +1 -0
  537. package/dist/validate-structure.js +16 -0
  538. package/dist/validate-structure.js.map +1 -0
  539. package/dist/validate.d.ts +24 -0
  540. package/dist/validate.d.ts.map +1 -0
  541. package/dist/validate.js +178 -0
  542. package/dist/validate.js.map +1 -0
  543. package/package.json +59 -0
  544. package/schema/v0.json +9618 -0
  545. package/src/artifact.ts +81 -0
  546. package/src/builder-core.ts +276 -0
  547. package/src/builder-data.ts +156 -0
  548. package/src/builder-geoms.ts +290 -0
  549. package/src/builder-options.ts +428 -0
  550. package/src/builder-scales.ts +443 -0
  551. package/src/builder.ts +125 -0
  552. package/src/capabilities-data.ts +336 -0
  553. package/src/capabilities-helpers.ts +54 -0
  554. package/src/capabilities.ts +159 -0
  555. package/src/coord-helpers.ts +177 -0
  556. package/src/coord-reference-build.ts +283 -0
  557. package/src/coord-reference.ts +75 -0
  558. package/src/error-catalog.ts +253 -0
  559. package/src/error-prose-shared.ts +106 -0
  560. package/src/errors.ts +87 -0
  561. package/src/generated/coord-reference-data.ts +235 -0
  562. package/src/generated/geom-param-keys.ts +222 -0
  563. package/src/generated/geom-reference-data.ts +3024 -0
  564. package/src/generated/guide-reference-data.ts +284 -0
  565. package/src/generated/plot-spec-validator.ts +7335 -0
  566. package/src/generated/position-reference-data.ts +191 -0
  567. package/src/generated/scale-reference-data.ts +10665 -0
  568. package/src/generated/stat-reference-data.ts +339 -0
  569. package/src/geom-params-build.ts +92 -0
  570. package/src/geom-params.ts +14 -0
  571. package/src/geom-reference-build.ts +292 -0
  572. package/src/geom-reference.ts +127 -0
  573. package/src/guide-helpers.ts +44 -0
  574. package/src/guide-reference-build.ts +249 -0
  575. package/src/guide-reference.ts +76 -0
  576. package/src/hue-grey-palettes.ts +82 -0
  577. package/src/index.ts +400 -0
  578. package/src/lint-catalog.ts +57 -0
  579. package/src/lint-layer-rules.ts +175 -0
  580. package/src/lint-scale-rules.ts +285 -0
  581. package/src/lint.ts +126 -0
  582. package/src/normalize-coord.ts +126 -0
  583. package/src/normalize-input-layers-marks.ts +276 -0
  584. package/src/normalize-input-layers-special.ts +252 -0
  585. package/src/normalize-input.ts +154 -0
  586. package/src/normalize-paint.ts +98 -0
  587. package/src/normalize-scales.ts +108 -0
  588. package/src/normalize.ts +403 -0
  589. package/src/paint-helpers.ts +98 -0
  590. package/src/pipeline-error-catalog.ts +278 -0
  591. package/src/portability-check.ts +155 -0
  592. package/src/portability-lossy.ts +81 -0
  593. package/src/portability.ts +31 -0
  594. package/src/portable-builder.ts +35 -0
  595. package/src/portable-entry.ts +37 -0
  596. package/src/position-reference-build.ts +164 -0
  597. package/src/position-reference.ts +41 -0
  598. package/src/runtime.ts +198 -0
  599. package/src/scale-color-helpers.ts +263 -0
  600. package/src/scale-color-hue-grey.ts +95 -0
  601. package/src/scale-color-stops.ts +177 -0
  602. package/src/scale-color-viridis.ts +99 -0
  603. package/src/scale-helpers.ts +264 -0
  604. package/src/scale-multi-helpers.ts +220 -0
  605. package/src/scale-position-helpers.ts +231 -0
  606. package/src/scale-reference-build.ts +222 -0
  607. package/src/scale-reference-classify-color.ts +334 -0
  608. package/src/scale-reference-classify-position.ts +164 -0
  609. package/src/scale-reference-classify-style.ts +229 -0
  610. package/src/scale-reference-classify-support.ts +298 -0
  611. package/src/scale-reference.ts +165 -0
  612. package/src/scale-style-helpers.ts +316 -0
  613. package/src/schema-catalog.ts +222 -0
  614. package/src/schema-declarations.ts +51 -0
  615. package/src/schema-decls-data.ts +272 -0
  616. package/src/schema-decls-guides-theme.ts +395 -0
  617. package/src/schema-decls-layers-col-boxplot.ts +410 -0
  618. package/src/schema-decls-layers-count-pointrange.ts +321 -0
  619. package/src/schema-decls-layers-crossbar-jitter.ts +443 -0
  620. package/src/schema-decls-layers-point-path.ts +246 -0
  621. package/src/schema-decls-layers-sf-blank.ts +408 -0
  622. package/src/schema-decls-layers-text-map.ts +259 -0
  623. package/src/schema-decls-paint.ts +124 -0
  624. package/src/schema-decls-params-area-abline.ts +440 -0
  625. package/src/schema-decls-params-col-contour.ts +333 -0
  626. package/src/schema-decls-params-curve-label.ts +343 -0
  627. package/src/schema-decls-params-errorbar-position.ts +446 -0
  628. package/src/schema-decls-params-point-path.ts +394 -0
  629. package/src/schema-decls-params-violin-summary.ts +447 -0
  630. package/src/schema-decls-plot.ts +385 -0
  631. package/src/schema-decls-scales-guides.ts +233 -0
  632. package/src/schema-decls-scales.ts +432 -0
  633. package/src/schema-imports.ts +116 -0
  634. package/src/schema-name-schemas.ts +37 -0
  635. package/src/schema-names.ts +243 -0
  636. package/src/schema-types.ts +400 -0
  637. package/src/schema.ts +287 -0
  638. package/src/stat-reference-build.ts +145 -0
  639. package/src/stat-reference.ts +38 -0
  640. package/src/structural-gate.ts +42 -0
  641. package/src/temporal-column.ts +323 -0
  642. package/src/temporal-guides.ts +32 -0
  643. package/src/temporal-interval-schema.ts +40 -0
  644. package/src/temporal-interval.ts +151 -0
  645. package/src/temporal-parse-core.ts +331 -0
  646. package/src/temporal-parse-format.ts +222 -0
  647. package/src/temporal-parse-schema.ts +38 -0
  648. package/src/temporal-parse.ts +259 -0
  649. package/src/temporal-polyfill.ts +27 -0
  650. package/src/temporal-ticks.ts +312 -0
  651. package/src/temporal.ts +112 -0
  652. package/src/validate-data-checks-color-temporal.ts +261 -0
  653. package/src/validate-data-checks-color.ts +395 -0
  654. package/src/validate-data-checks-layer.ts +492 -0
  655. package/src/validate-data-checks-position.ts +275 -0
  656. package/src/validate-data-checks-style-finite.ts +55 -0
  657. package/src/validate-data-checks-style-numeric.ts +455 -0
  658. package/src/validate-data-checks-style.ts +13 -0
  659. package/src/validate-data-checks-temporal.ts +129 -0
  660. package/src/validate-data-checks.ts +157 -0
  661. package/src/validate-data-evidence.ts +419 -0
  662. package/src/validate-data.ts +114 -0
  663. package/src/validate-map-errors.ts +126 -0
  664. package/src/validate-map-forms.ts +148 -0
  665. package/src/validate-map-path-keywords.ts +129 -0
  666. package/src/validate-map-path-unions.ts +281 -0
  667. package/src/validate-schema-shape.ts +232 -0
  668. package/src/validate-schema-walk.ts +219 -0
  669. package/src/validate-structure-facet.ts +76 -0
  670. package/src/validate-structure-layer-computed-y.ts +94 -0
  671. package/src/validate-structure-layer-ribbon.ts +61 -0
  672. package/src/validate-structure-layer-rule.ts +98 -0
  673. package/src/validate-structure-layer-shared.ts +29 -0
  674. package/src/validate-structure-layers.ts +395 -0
  675. package/src/validate-structure-paint.ts +101 -0
  676. package/src/validate-structure-scales.ts +278 -0
  677. package/src/validate-structure-style-bins.ts +167 -0
  678. package/src/validate-structure.ts +16 -0
  679. package/src/validate.ts +212 -0
@@ -0,0 +1,329 @@
1
+ import { inferTemporalColumn } from "./temporal-column.js";
2
+ // ---------------------------------------------------------------------------
3
+ // Channel helper (shared by structure checks, data checks, and lint)
4
+ // ---------------------------------------------------------------------------
5
+ /** The channel a layer effectively sees (layer wins; null unsets). */
6
+ export function effectiveChannel(plotAes, layerAes, channel) {
7
+ const own = layerAes?.[channel];
8
+ if (own === null)
9
+ return undefined;
10
+ const chosen = own ?? plotAes?.[channel];
11
+ return chosen ?? undefined;
12
+ }
13
+ // ---------------------------------------------------------------------------
14
+ // Type inference + profile / inline resolution
15
+ // ---------------------------------------------------------------------------
16
+ function isRecord(v) {
17
+ return typeof v === "object" && v !== null && !Array.isArray(v);
18
+ }
19
+ const PROFILE_TYPES = new Set([
20
+ "quantitative",
21
+ "temporal",
22
+ "ordinal",
23
+ "nominal",
24
+ ]);
25
+ function inferProfileType(column) {
26
+ const temporal = inferTemporalColumn(column);
27
+ if (temporal.status === "temporal")
28
+ return { type: "temporal", temporal };
29
+ let sawNumber = false;
30
+ let sawValue = false;
31
+ for (const value of column) {
32
+ if (value === null)
33
+ continue;
34
+ sawValue = true;
35
+ if (typeof value === "boolean" || typeof value === "string") {
36
+ return { type: "nominal", temporal };
37
+ }
38
+ if (typeof value === "number")
39
+ sawNumber = true;
40
+ }
41
+ return { type: sawNumber ? "quantitative" : sawValue ? "nominal" : null, temporal };
42
+ }
43
+ function badProfile(message) {
44
+ return [
45
+ {
46
+ code: "invalid-data-profile",
47
+ path: "",
48
+ message: `Invalid DataProfile: ${message}`,
49
+ fix: {
50
+ description: 'Provide { fields: [{ name, type: "quantitative"|"temporal"|"ordinal"|"nominal" }], rowCount? }.',
51
+ example: { fields: [{ name: "displ", type: "quantitative" }], rowCount: 234 },
52
+ },
53
+ },
54
+ ];
55
+ }
56
+ function profileErrors(profile) {
57
+ if (!isRecord(profile))
58
+ return badProfile("expected an object.");
59
+ if (!Array.isArray(profile["fields"]))
60
+ return badProfile('"fields" must be an array.');
61
+ for (const field of profile["fields"]) {
62
+ if (!isRecord(field) || typeof field["name"] !== "string") {
63
+ return badProfile('every field needs a string "name".');
64
+ }
65
+ if (typeof field["type"] !== "string" || !PROFILE_TYPES.has(field["type"])) {
66
+ return badProfile(`field "${field["name"]}" has type ${JSON.stringify(field["type"])}; allowed: quantitative, temporal, ordinal, nominal.`);
67
+ }
68
+ }
69
+ if (profile["rowCount"] !== undefined && typeof profile["rowCount"] !== "number") {
70
+ return badProfile('"rowCount" must be a number when present.');
71
+ }
72
+ return [];
73
+ }
74
+ /**
75
+ * Resolve inline columns from a data ref against optional named datasets.
76
+ * Named refs that are not present in datasets return null (runtime-only data).
77
+ */
78
+ function columnsFromDataRef(data, datasets) {
79
+ let ref = data;
80
+ if (isRecord(ref) && typeof ref["name"] === "string") {
81
+ ref = isRecord(datasets) ? datasets[ref["name"]] : undefined;
82
+ }
83
+ if (!isRecord(ref))
84
+ return null;
85
+ if (Array.isArray(ref["values"])) {
86
+ const rows = ref["values"];
87
+ const columns = {};
88
+ for (const row of rows) {
89
+ if (!isRecord(row))
90
+ continue;
91
+ for (const key of Object.keys(row))
92
+ columns[key] ??= [];
93
+ }
94
+ for (const key of Object.keys(columns)) {
95
+ const column = columns[key];
96
+ for (const row of rows)
97
+ column.push(isRecord(row) ? (row[key] ?? null) : null);
98
+ }
99
+ return columns;
100
+ }
101
+ if (isRecord(ref["columns"])) {
102
+ return ref["columns"];
103
+ }
104
+ return null;
105
+ }
106
+ /** Resolve the spec's plot-level inline columns ({values}, {columns}, or named). */
107
+ function inlineColumns(spec) {
108
+ return columnsFromDataRef(spec["data"], spec["datasets"]);
109
+ }
110
+ function evidenceFromColumns(columns) {
111
+ const fields = new Map();
112
+ for (const name of Object.keys(columns)) {
113
+ const column = columns[name];
114
+ const inferred = inferProfileType(column);
115
+ fields.set(name, {
116
+ type: inferred.type,
117
+ allNull: column.length > 0 && inferred.type === null,
118
+ values: column,
119
+ temporal: inferred.temporal,
120
+ });
121
+ }
122
+ return fields;
123
+ }
124
+ /**
125
+ * Per-layer field evidence (#589). Each layer inherits plot-level evidence
126
+ * unless it supplies its own inline/named-inline data.
127
+ * Layers with only unresolved named (runtime) data get `null` (skip type checks).
128
+ */
129
+ export function resolveLayerFieldEvidence(spec, options, limits) {
130
+ if (options.profile !== undefined) {
131
+ return evidenceFromProfile(options.profile, spec);
132
+ }
133
+ const datasets = spec["datasets"];
134
+ const plotColumns = inlineColumns(spec);
135
+ let totalRows = 0;
136
+ let totalBytes = 0;
137
+ const countedTables = new Set();
138
+ const countTable = (key, columns) => {
139
+ if (countedTables.has(key))
140
+ return;
141
+ countedTables.add(key);
142
+ const names = Object.keys(columns);
143
+ const rowCount = names.length === 0 ? 0 : (columns[names[0]]?.length ?? 0);
144
+ totalRows += rowCount;
145
+ totalBytes += estimateBytes(columns, rowCount);
146
+ };
147
+ if (plotColumns !== null) {
148
+ // Prefer name: key so plot-level { name } matching a layer named ref is not
149
+ // double-counted toward maxRows (same embedded/named dataset once).
150
+ const plotData = spec["data"];
151
+ const plotKey = isRecord(plotData) && typeof plotData["name"] === "string"
152
+ ? `name:${plotData["name"]}`
153
+ : "__plot__";
154
+ countTable(plotKey, plotColumns);
155
+ }
156
+ const layers = Array.isArray(spec["layers"]) ? spec["layers"] : [];
157
+ // Several layers commonly name one dataset. Pivoting {values} rows into
158
+ // columns is O(rows x columns), so resolve each name once rather than once
159
+ // per reference. Inline data keeps its own table: equal content is not the
160
+ // same table.
161
+ const columnsByName = new Map();
162
+ const plotData = spec["data"];
163
+ const plotName = isRecord(plotData) && typeof plotData["name"] === "string" ? plotData["name"] : null;
164
+ // The plot's own table seeds it, so a layer naming the plot's dataset reuses
165
+ // that pivot instead of building a second one.
166
+ if (plotColumns !== null && plotName !== null)
167
+ columnsByName.set(plotName, plotColumns);
168
+ const { layerColumns, layerNames } = resolveLayerColumns(layers, datasets, columnsByName, countTable);
169
+ if (plotColumns === null && layerColumns.every((c) => c === null || c === "runtime")) {
170
+ return { status: "none" };
171
+ }
172
+ if (totalRows > limits.maxRows) {
173
+ return {
174
+ status: "errors",
175
+ errors: [
176
+ {
177
+ code: "validation-limit",
178
+ path: "/data",
179
+ message: `Inline data has ${totalRows} rows across plot/layers, more than the documented maxRows limit (${limits.maxRows}); data-aware checks skipped. Validate with a DataProfile instead.`,
180
+ },
181
+ ],
182
+ };
183
+ }
184
+ if (totalBytes > limits.maxBytes) {
185
+ return {
186
+ status: "errors",
187
+ errors: [
188
+ {
189
+ code: "validation-limit",
190
+ path: "/data",
191
+ message: `Inline data exceeds the documented maxBytes limit (${limits.maxBytes} bytes, estimated across plot/layers); data-aware checks skipped. Validate with a DataProfile instead.`,
192
+ },
193
+ ],
194
+ };
195
+ }
196
+ const plot = plotColumns === null ? null : evidenceFromColumns(plotColumns);
197
+ // Type inference walks every value of every column, so it too runs once per
198
+ // named dataset. The plot's own table seeds it, matching the row accounting
199
+ // above, which already treats a name the plot and a layer share as one table.
200
+ const evidenceByName = new Map();
201
+ if (plot !== null && plotName !== null)
202
+ evidenceByName.set(plotName, plot);
203
+ const layerMaps = layerColumns.map((cols, index) => {
204
+ if (cols === "runtime")
205
+ return null;
206
+ if (cols === null)
207
+ return plot;
208
+ const name = layerNames[index] ?? null;
209
+ if (name === null)
210
+ return evidenceFromColumns(cols);
211
+ const cached = evidenceByName.get(name);
212
+ if (cached !== undefined)
213
+ return cached;
214
+ const built = evidenceFromColumns(cols);
215
+ evidenceByName.set(name, built);
216
+ return built;
217
+ });
218
+ return { status: "ok", plot, layers: layerMaps };
219
+ }
220
+ function evidenceFromProfile(profile, spec) {
221
+ const bad = profileErrors(profile);
222
+ if (bad.length > 0)
223
+ return { status: "errors", errors: bad };
224
+ const fields = new Map();
225
+ for (const field of profile.fields) {
226
+ fields.set(field.name, { type: field.type, allNull: false, values: null, temporal: null });
227
+ }
228
+ const layers = Array.isArray(spec["layers"]) ? spec["layers"] : [];
229
+ return { status: "ok", plot: fields, layers: layers.map(() => fields) };
230
+ }
231
+ function resolveLayerColumns(layers, datasets, columnsByName, countTable) {
232
+ const layerColumns = [];
233
+ const layerNames = [];
234
+ for (const layer of layers) {
235
+ if (!isRecord(layer) || layer["data"] === undefined) {
236
+ layerColumns.push(null);
237
+ layerNames.push(null);
238
+ continue;
239
+ }
240
+ const data = layer["data"];
241
+ const name = isRecord(data) && typeof data["name"] === "string" ? data["name"] : null;
242
+ let columns = name === null ? undefined : columnsByName.get(name);
243
+ if (columns === undefined) {
244
+ const resolved = columnsFromDataRef(data, datasets);
245
+ if (resolved === null) {
246
+ layerColumns.push("runtime");
247
+ layerNames.push(null);
248
+ continue;
249
+ }
250
+ columns = resolved;
251
+ if (name !== null)
252
+ columnsByName.set(name, columns);
253
+ }
254
+ const key = name === null ? `inline:${layerColumns.length}` : `name:${name}`;
255
+ countTable(key, columns);
256
+ layerColumns.push(columns);
257
+ layerNames.push(name);
258
+ }
259
+ return { layerColumns, layerNames };
260
+ }
261
+ function estimateBytes(columns, rowCount) {
262
+ // Estimate from a bounded sample so the limit check itself stays cheap.
263
+ const sample = Math.min(rowCount, 100);
264
+ if (sample === 0)
265
+ return 0;
266
+ let sampleBytes = 0;
267
+ for (const column of Object.values(columns)) {
268
+ sampleBytes += JSON.stringify(column.slice(0, sample))?.length ?? 0;
269
+ }
270
+ return Math.round((sampleBytes / sample) * rowCount);
271
+ }
272
+ /**
273
+ * Resolve profile or inline data into a field evidence map (one pivot + type
274
+ * inference pass). Shared by dataChecks and lintSpec via validate().
275
+ */
276
+ export function resolveFieldEvidence(spec, options, limits) {
277
+ if (options.profile !== undefined) {
278
+ const bad = profileErrors(options.profile);
279
+ if (bad.length > 0)
280
+ return { status: "errors", errors: bad };
281
+ const fields = new Map();
282
+ for (const f of options.profile.fields) {
283
+ fields.set(f.name, { type: f.type, allNull: false, values: null, temporal: null });
284
+ }
285
+ return { status: "ok", fields };
286
+ }
287
+ const columns = inlineColumns(spec);
288
+ if (columns === null)
289
+ return { status: "none" };
290
+ const names = Object.keys(columns);
291
+ const rowCount = names.length === 0 ? 0 : (columns[names[0]]?.length ?? 0);
292
+ if (rowCount > limits.maxRows) {
293
+ return {
294
+ status: "errors",
295
+ errors: [
296
+ {
297
+ code: "validation-limit",
298
+ path: "/data",
299
+ message: `Inline data has ${rowCount} rows, more than the documented maxRows limit (${limits.maxRows}); data-aware checks skipped. Validate with a DataProfile instead.`,
300
+ },
301
+ ],
302
+ };
303
+ }
304
+ if (estimateBytes(columns, rowCount) > limits.maxBytes) {
305
+ return {
306
+ status: "errors",
307
+ errors: [
308
+ {
309
+ code: "validation-limit",
310
+ path: "/data",
311
+ message: `Inline data exceeds the documented maxBytes limit (${limits.maxBytes} bytes, estimated); data-aware checks skipped. Validate with a DataProfile instead.`,
312
+ },
313
+ ],
314
+ };
315
+ }
316
+ const fields = new Map();
317
+ for (const name of names) {
318
+ const column = columns[name];
319
+ const inferred = inferProfileType(column);
320
+ fields.set(name, {
321
+ type: inferred.type,
322
+ allNull: column.length > 0 && inferred.type === null,
323
+ values: column,
324
+ temporal: inferred.temporal,
325
+ });
326
+ }
327
+ return { status: "ok", fields };
328
+ }
329
+ //# sourceMappingURL=validate-data-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-data-evidence.js","sourceRoot":"","sources":["../src/validate-data-evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Tier-2 validation public contract and re-exports.
3
+ *
4
+ * Plan: "Tier-2 accepts inline data OR a defined DataProfile". Runs when
5
+ * validate() receives an options argument.
6
+ *
7
+ * Implementation is split:
8
+ * - validate-data-evidence.ts — FieldEvidenceMap construction + effectiveChannel
9
+ * - validate-data-checks.ts — dataChecks orchestrator (evidence → walk → checkers)
10
+ * - validate-data-checks-layer.ts — geom/stat rules + field walk + channel collection
11
+ * - validate-data-checks-temporal.ts — shared temporalDecisionForField memoization
12
+ * - validate-data-checks-position.ts — pre-evidence temporal config + x/y scale types
13
+ * - validate-data-checks-color.ts — color/fill scale types + manual domain/range
14
+ * - validate-data-checks-color-temporal.ts — temporal censor recovery lattice
15
+ * - validate-data-checks-style.ts — shape/linetype + size/linewidth/alpha (finite + numeric modules)
16
+ *
17
+ * Style and color scale checks use per-layer evidenceForUse like position
18
+ * (#609 / #844) so multi-table same-name fields keep independent type views.
19
+ *
20
+ * Checks:
21
+ * - field existence: every { field } channel must name an available field
22
+ * (with a did-you-mean suggestion against the available names);
23
+ * - all-null columns (inline data only) are tier-2 errors;
24
+ * - { stat } channels must name a column the layer's stat generates
25
+ * (identity generates none; count generates "count");
26
+ * - scale/type compatibility: scales.*.type "time" needs temporal fields,
27
+ * "log"/"linear" refuse nominal/ordinal fields, color/fill "sequential"
28
+ * needs quantitative fields.
29
+ *
30
+ * Input limits (DEFAULT_VALIDATE_LIMITS — documented, overridable): agent-
31
+ * facing validation must not be resource-abusable. Over-limit inputs get a
32
+ * `validation-limit` diagnostic and the data-aware checks are skipped;
33
+ * diagnostics themselves are capped by maxDiagnostics (enforced in validate()).
34
+ */
35
+ import type { JSONValue } from "./portability.js";
36
+ /** Field type vocabulary shared with agents (Vega-Lite-compatible names). */
37
+ export type ProfileFieldType = "quantitative" | "temporal" | "ordinal" | "nominal";
38
+ export interface DataProfileField {
39
+ name: string;
40
+ type: ProfileFieldType;
41
+ /** Optional example values (used in error messages, never validated). */
42
+ examples?: JSONValue[];
43
+ }
44
+ /** A description of out-of-band data, for validating specs without the data. */
45
+ export interface DataProfile {
46
+ fields: DataProfileField[];
47
+ rowCount?: number;
48
+ }
49
+ /** Documented input limits for validate(). */
50
+ export interface ValidateLimits {
51
+ /** Max inline-data rows examined (default 100_000). */
52
+ maxRows: number;
53
+ /** Max estimated inline-data bytes examined (default 20 MB). */
54
+ maxBytes: number;
55
+ /** Max JSON nesting depth of the spec (default 32). */
56
+ maxDepth: number;
57
+ /** Max diagnostics returned per run (default 100). */
58
+ maxDiagnostics: number;
59
+ }
60
+ export declare const DEFAULT_VALIDATE_LIMITS: ValidateLimits;
61
+ export interface ValidateOptions {
62
+ /** Describe out-of-band data instead of inlining it. Wins over inline data. */
63
+ profile?: DataProfile;
64
+ /** Override the documented input limits. */
65
+ limits?: Partial<ValidateLimits>;
66
+ /** Also run lintSpec() and attach its advisories to the result (lint.ts). */
67
+ lint?: boolean;
68
+ }
69
+ /** Depth of a JSON-ish value, short-circuiting at `cap + 1`. */
70
+ export declare function jsonDepth(value: unknown, cap: number): number;
71
+ export { effectiveChannel, resolveFieldEvidence, resolveLayerFieldEvidence, type FieldEvidenceEntry, type FieldEvidenceMap, } from "./validate-data-evidence.js";
72
+ export { dataChecks, STAT_COLUMNS } from "./validate-data-checks.js";
73
+ //# sourceMappingURL=validate-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-data.d.ts","sourceRoot":"","sources":["../src/validate-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAMlD,6EAA6E;AAC7E,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,gBAAgB,CAAC;IACvB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;CACxB;AAED,gFAAgF;AAChF,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,8CAA8C;AAC9C,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,uBAAuB,EAAE,cAKrC,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACjC,6EAA6E;IAC7E,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAMD,gEAAgE;AAChE,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAU7D;AAMD,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,yBAAyB,EACzB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,30 @@
1
+ export const DEFAULT_VALIDATE_LIMITS = {
2
+ maxRows: 100_000,
3
+ maxBytes: 20 * 1024 * 1024,
4
+ maxDepth: 32,
5
+ maxDiagnostics: 100,
6
+ };
7
+ // ---------------------------------------------------------------------------
8
+ // Helpers owned by the public contract surface
9
+ // ---------------------------------------------------------------------------
10
+ /** Depth of a JSON-ish value, short-circuiting at `cap + 1`. */
11
+ export function jsonDepth(value, cap) {
12
+ if (typeof value !== "object" || value === null)
13
+ return 0;
14
+ let max = 0;
15
+ const entries = Array.isArray(value) ? value : Object.values(value);
16
+ for (const child of entries) {
17
+ const d = jsonDepth(child, cap - 1);
18
+ if (d >= cap)
19
+ return d + 1; // short-circuit: already too deep
20
+ if (d > max)
21
+ max = d;
22
+ }
23
+ return max + 1;
24
+ }
25
+ // ---------------------------------------------------------------------------
26
+ // Focused modules (re-exported so internal imports stay on this barrel)
27
+ // ---------------------------------------------------------------------------
28
+ export { effectiveChannel, resolveFieldEvidence, resolveLayerFieldEvidence, } from "./validate-data-evidence.js";
29
+ export { dataChecks, STAT_COLUMNS } from "./validate-data-checks.js";
30
+ //# sourceMappingURL=validate-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-data.js","sourceRoot":"","sources":["../src/validate-data.ts"],"names":[],"mappings":"AAoEA,MAAM,CAAC,MAAM,uBAAuB,GAAmB;IACrD,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;IAC1B,QAAQ,EAAE,EAAE;IACZ,cAAc,EAAE,GAAG;CACpB,CAAC;AAWF,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E,gEAAgE;AAChE,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,GAAW;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IAC1D,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,kCAAkC;QAC9D,IAAI,CAAC,GAAG,GAAG;YAAE,GAAG,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,GAAG,GAAG,CAAC,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,wEAAwE;AACxE,8EAA8E;AAE9E,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,yBAAyB,GAG1B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * TypeBox 1.x validation errors → agent SpecError mapping (tier-1).
3
+ *
4
+ * TypeBox 1.x (`typebox`) reports JSON-Schema-style errors (`keyword`,
5
+ * `instancePath`, `params`) rather than 0.x `ValueErrorType` + embedded
6
+ * schema/value. Discriminator-aware union classification (channel forms,
7
+ * data refs, const enums) is reconstructed from keywords + schema lookup
8
+ * against the Cyclic root being validated.
9
+ *
10
+ * Schema / path inspection: validate-schema-walk.ts.
11
+ * Channel/data form classification: validate-map-forms.ts.
12
+ * Union path mapping: validate-map-path-unions.ts.
13
+ * Keyword path mapping: validate-map-path-keywords.ts.
14
+ * Used only by validate() — not part of the package public surface.
15
+ */
16
+ import type { TLocalizedValidationError } from "typebox/error";
17
+ import type { SpecError } from "./errors.js";
18
+ export interface MapErrorsContext {
19
+ /** Schema root passed to Value.Errors (Cyclic `$defs`+`$ref`). */
20
+ schema: unknown;
21
+ /** Value that was validated (for reading failing values via instancePath). */
22
+ value: unknown;
23
+ /** Path prefix prepended to each instancePath (e.g. `/layers/0`). */
24
+ pathPrefix: string;
25
+ }
26
+ /**
27
+ * Map a batch of TypeBox 1.x validation errors into agent SpecErrors.
28
+ * Groups const/anyOf noise so enum and channel unions surface as one error.
29
+ */
30
+ export declare function mapValueErrors(rawErrors: readonly TLocalizedValidationError[], ctx: MapErrorsContext): SpecError[];
31
+ export declare function unknownGeomError(geom: unknown, layerPath: string): SpecError;
32
+ //# sourceMappingURL=validate-map-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-map-errors.d.ts","sourceRoot":"","sources":["../src/validate-map-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAO7C,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,MAAM,EAAE,OAAO,CAAC;IAChB,8EAA8E;IAC9E,KAAK,EAAE,OAAO,CAAC;IACf,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,yBAAyB,EAAE,EAC/C,GAAG,EAAE,gBAAgB,GACpB,SAAS,EAAE,CAgBb;AA2CD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CA0B5E"}
@@ -0,0 +1,76 @@
1
+ import { didYouMean } from "./errors.js";
2
+ import { KNOWN_GEOMS } from "./schema-catalog.js";
3
+ import { lastSegment, pointerGet } from "./validate-schema-walk.js";
4
+ import { mapKeywordPathGroup } from "./validate-map-path-keywords.js";
5
+ import { mapUnionPathGroup } from "./validate-map-path-unions.js";
6
+ /**
7
+ * Map a batch of TypeBox 1.x validation errors into agent SpecErrors.
8
+ * Groups const/anyOf noise so enum and channel unions surface as one error.
9
+ */
10
+ export function mapValueErrors(rawErrors, ctx) {
11
+ if (rawErrors.length === 0)
12
+ return [];
13
+ // Group by instancePath so multi-const anyOf enums collapse.
14
+ const byPath = new Map();
15
+ for (const err of rawErrors) {
16
+ const list = byPath.get(err.instancePath) ?? [];
17
+ list.push(err);
18
+ byPath.set(err.instancePath, list);
19
+ }
20
+ const out = [];
21
+ for (const [instancePath, group] of byPath) {
22
+ out.push(...mapPathGroup(instancePath, group, ctx));
23
+ }
24
+ return out;
25
+ }
26
+ function mapPathGroup(instancePath, group, ctx) {
27
+ const path = ctx.pathPrefix + instancePath;
28
+ const key = lastSegment(instancePath);
29
+ const valueAtPath = pointerGet(ctx.value, instancePath);
30
+ if (group.some((error) => error.keyword === "pattern") &&
31
+ /^\/scales\/(?:color|fill)\/range\/\d+$/.test(path) &&
32
+ typeof valueAtPath === "string") {
33
+ return [
34
+ {
35
+ code: "scale-range-color",
36
+ path,
37
+ message: `The color stop "${valueAtPath}" is not a supported hex color.`,
38
+ fix: {
39
+ description: "Use #rgb or #rrggbb syntax for custom color ranges.",
40
+ example: "#ff0000",
41
+ },
42
+ },
43
+ ];
44
+ }
45
+ const union = mapUnionPathGroup(instancePath, group, ctx, path, key, valueAtPath);
46
+ if (union.status === "done")
47
+ return union.errors;
48
+ return mapKeywordPathGroup(instancePath, group, ctx, path, key, valueAtPath, union.activeFormKeys);
49
+ }
50
+ export function unknownGeomError(geom, layerPath) {
51
+ const allowed = [...KNOWN_GEOMS];
52
+ if (typeof geom !== "string") {
53
+ return {
54
+ code: "missing-geom",
55
+ path: `${layerPath}/geom`,
56
+ message: `Every layer needs a "geom" discriminator. Allowed geoms: ${allowed.map((g) => `"${g}"`).join(", ")}.`,
57
+ allowed,
58
+ fix: {
59
+ description: "Add a geom to the layer.",
60
+ example: { geom: "point" },
61
+ },
62
+ };
63
+ }
64
+ const suggestion = didYouMean(geom, allowed);
65
+ return {
66
+ code: "unknown-geom",
67
+ path: `${layerPath}/geom`,
68
+ message: `Unknown geom "${geom}". Allowed geoms: ${allowed.map((g) => `"${g}"`).join(", ")}.` +
69
+ (suggestion === undefined ? "" : ` Did you mean "${suggestion}"?`),
70
+ allowed,
71
+ ...(suggestion !== undefined && {
72
+ fix: { description: `Set geom to "${suggestion}".`, example: { geom: suggestion } },
73
+ }),
74
+ };
75
+ }
76
+ //# sourceMappingURL=validate-map-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-map-errors.js","sourceRoot":"","sources":["../src/validate-map-errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Channel and DataRef form classification for TypeBox 1.x error mapping.
3
+ * Path/schema walk: validate-schema-walk.ts. SpecError mapping: validate-map-errors.ts.
4
+ */
5
+ import type { TLocalizedValidationError } from "typebox/error";
6
+ import { type UnionMemberInfo } from "./validate-schema-walk.js";
7
+ export declare const CHANNEL_FIX_EXAMPLE: {
8
+ field: string;
9
+ };
10
+ /** True only for the channel node itself (`…/aes/<channel>`), not nested paths. */
11
+ export declare function isChannelPath(path: string): boolean;
12
+ /**
13
+ * DataRef / InlineData union roots only:
14
+ * `/data`, `/datasets/<name>`, or `/layers/<n>/data`.
15
+ * Nested paths under a data container must keep their own diagnostics.
16
+ */
17
+ export declare function isDataUnionPath(path: string): boolean;
18
+ /** Canonical channel object form (or null); bare strings are handled separately. */
19
+ export declare function looksLikeChannelForm(v: unknown): boolean;
20
+ /** Already a data container shape — do not suggest re-wrapping as `{ values: [...] }`. */
21
+ export declare function looksLikeDataContainer(v: unknown): boolean;
22
+ export declare function isScalarValue(v: unknown): boolean;
23
+ /** Exclusive data form discriminators (exactly one allowed per DataRef). */
24
+ declare const DATA_DISCRIMINATORS: readonly ["values", "columns", "name"];
25
+ /**
26
+ * True when an additionalProperties failure lists a key that is *not* in
27
+ * `ignoreKeys`. Used to ignore competing-branch noise (e.g. Columns rejecting
28
+ * `values`) while still surfacing typos and form-illegal keys.
29
+ */
30
+ export declare function additionalPropertyNames(group: readonly TLocalizedValidationError[], ignoreKeys?: ReadonlySet<string>): string[];
31
+ export declare function hasActionableAddlNoise(group: readonly TLocalizedValidationError[], ignoreKeys: ReadonlySet<string>): boolean;
32
+ export declare function channelDiscriminatorKeys(v: Record<string, unknown>): string[];
33
+ export declare function dataDiscriminatorKeys(v: Record<string, unknown>, allowed?: readonly (typeof DATA_DISCRIMINATORS)[number][]): string[];
34
+ export declare function dataDiscriminatorsForUnion(members: UnionMemberInfo, path: string): readonly (typeof DATA_DISCRIMINATORS)[number][];
35
+ /**
36
+ * Keys legal on the single present channel form, or null when forms are mixed
37
+ * / absent. FieldRef = {field}; ValueRef = {value, scale?}; StatRef = {stat}.
38
+ */
39
+ export declare function allowedKeysForPresentChannelForm(v: Record<string, unknown>): Set<string> | null;
40
+ /** Keys legal on the single present data form, or null when forms are mixed. */
41
+ export declare function allowedKeysForPresentDataForm(v: Record<string, unknown>, allowedDiscriminators: readonly (typeof DATA_DISCRIMINATORS)[number][]): Set<string> | null;
42
+ export {};
43
+ //# sourceMappingURL=validate-map-forms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-map-forms.d.ts","sourceRoot":"","sources":["../src/validate-map-forms.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAG/D,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEzF,eAAO,MAAM,mBAAmB;;CAA2B,CAAC;AAQ5D,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKnD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAcrD;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAIxD;AAED,0FAA0F;AAC1F,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAG1D;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAEjD;AAID,4EAA4E;AAC5E,QAAA,MAAM,mBAAmB,wCAAyC,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,yBAAyB,EAAE,EAC3C,UAAU,GAAE,WAAW,CAAC,MAAM,CAAa,GAC1C,MAAM,EAAE,CAYV;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,yBAAyB,EAAE,EAC3C,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B,OAAO,CAET;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAE7E;AAED,wBAAgB,qBAAqB,CACnC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1B,OAAO,GAAE,SAAS,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,EAAwB,GAC7E,MAAM,EAAE,CAEV;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,MAAM,GACX,SAAS,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,EAAE,CAOjD;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAa/F;AAED,gFAAgF;AAChF,wBAAgB,6BAA6B,CAC3C,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1B,qBAAqB,EAAE,SAAS,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,EAAE,GACrE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAIpB"}