@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,259 @@
1
+ /**
2
+ * Value-level temporal parsing: named engines (ISO / period / ordered), epoch,
3
+ * and the parseTemporal dispatcher. Exact format: temporal-parse-format.ts.
4
+ * Calendar foundation + public types: temporal-parse-core.ts.
5
+ *
6
+ * Column inference and authoring helpers live in temporal-column.ts and
7
+ * temporal.ts (facade). Public package exports re-export from temporal.ts.
8
+ */
9
+
10
+ import {
11
+ DEFAULT_PARTS,
12
+ MONTH_DAY_REFERENCE_YEAR,
13
+ partsToEpoch,
14
+ temporalParseFailure,
15
+ timezoneValidationFailure,
16
+ withMetadata,
17
+ type DateParts,
18
+ type TemporalParseOptions,
19
+ type TemporalParseResult,
20
+ type TemporalParserName,
21
+ type TemporalParserSpec,
22
+ type TemporalPrecision,
23
+ } from "./temporal-parse-core.js";
24
+ import { exactFormatConfigurationError, parseExactFormat } from "./temporal-parse-format.js";
25
+
26
+ // Stable public import path: re-export foundation surface from this module.
27
+ export {
28
+ MONTH_DAY_REFERENCE_YEAR,
29
+ TEMPORAL_PARSER_NAMES,
30
+ TemporalParseError,
31
+ temporalParseFailure,
32
+ temporalImplementation,
33
+ type TemporalDisambiguation,
34
+ type TemporalKind,
35
+ type TemporalScaleKind,
36
+ type TemporalParseOptions,
37
+ type TemporalParseResult,
38
+ type TemporalParserName,
39
+ type TemporalParserSpec,
40
+ type TemporalPrecision,
41
+ } from "./temporal-parse-core.js";
42
+ export { TemporalParserSpecSchema } from "./temporal-parse-schema.js";
43
+
44
+ const ISO_RE =
45
+ /^(\d{4})-(\d{2})-(\d{2})(?:[T ](\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{1,9}))?)?(Z|[+-]\d{2}:?\d{2})?)?$/;
46
+ const YEAR_RE = /^\d{4}$/;
47
+ const YM_RE = /^(\d{4})[-/.](\d{1,2})$/;
48
+ const MY_RE = /^(\d{1,2})[-/.](\d{4})$/;
49
+ const YQ_RE = /^(\d{4})[-/.]?Q([1-4])$/i;
50
+ // Bare month-day, ISO recurring `--MM-DD`, or a full date whose year is dropped.
51
+ const MD_RE = /^(?:--)?(?:(\d{4})[-/.])?(\d{1,2})[-/.](\d{1,2})$/;
52
+ const ORDERED_DATE_RE =
53
+ /^(\d{1,4})([-/.])(\d{1,4})\2(\d{1,4})(?:[T ](\d{2}):(\d{2})(?::(\d{2}))?)?$/;
54
+
55
+ function parseISO(value: string, options: TemporalParseOptions): TemporalParseResult {
56
+ const match = ISO_RE.exec(value);
57
+ if (match === null)
58
+ return temporalParseFailure("expected strict ISO YYYY-MM-DD with an optional time and offset");
59
+ const hasTime = match[4] !== undefined;
60
+ const fraction = match[7];
61
+ const parts: DateParts = {
62
+ year: Number(match[1]),
63
+ month: Number(match[2]),
64
+ day: Number(match[3]),
65
+ hour: Number(match[4] ?? 0),
66
+ minute: Number(match[5] ?? 0),
67
+ second: Number(match[6] ?? 0),
68
+ millisecond: fraction === undefined ? 0 : Number(fraction.padEnd(3, "0").slice(0, 3)),
69
+ };
70
+ let precision: TemporalPrecision = "date";
71
+ if (hasTime) {
72
+ precision = "minute";
73
+ if (match[6] !== undefined) precision = "second";
74
+ if (fraction !== undefined) precision = "millisecond";
75
+ }
76
+ return withMetadata(
77
+ partsToEpoch(parts, options, match[8], hasTime ? "datetime" : "date"),
78
+ hasTime ? "datetime" : "date",
79
+ precision,
80
+ );
81
+ }
82
+
83
+ function parsePeriod(
84
+ value: string,
85
+ parser: "year" | "ym" | "my" | "yq",
86
+ options: TemporalParseOptions,
87
+ ): TemporalParseResult {
88
+ if (parser === "year") {
89
+ if (!YEAR_RE.test(value)) return temporalParseFailure("expected exactly four year digits");
90
+ return withMetadata(
91
+ partsToEpoch({ year: Number(value), ...DEFAULT_PARTS }, options, undefined, "date"),
92
+ "date",
93
+ "year",
94
+ );
95
+ }
96
+ const match =
97
+ parser === "ym" ? YM_RE.exec(value) : parser === "my" ? MY_RE.exec(value) : YQ_RE.exec(value);
98
+ if (match === null) return temporalParseFailure(`value does not match ${parser}`);
99
+ const year = Number(parser === "my" ? match[2] : match[1]);
100
+ const month =
101
+ parser === "yq"
102
+ ? (Number(match[2]) - 1) * 3 + 1
103
+ : Number(parser === "my" ? match[1] : match[2]);
104
+ return withMetadata(
105
+ partsToEpoch(
106
+ { year, month, day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 },
107
+ options,
108
+ undefined,
109
+ "date",
110
+ ),
111
+ "date",
112
+ parser === "yq" ? "quarter" : "month",
113
+ );
114
+ }
115
+
116
+ /**
117
+ * Month-day without a year: `MM-DD`, ISO recurring `--MM-DD`, or a full date
118
+ * whose year is discarded. Everything resolves into MONTH_DAY_REFERENCE_YEAR,
119
+ * so the same calendar day from any two years is the same instant.
120
+ *
121
+ * Month and day survive; day-of-year does not. That is deliberate — projecting
122
+ * day-of-year moves every leap-year observation by a day.
123
+ */
124
+ function parseMonthDay(value: string, options: TemporalParseOptions): TemporalParseResult {
125
+ const match = MD_RE.exec(value);
126
+ if (match === null)
127
+ return temporalParseFailure(
128
+ "expected MM-DD, --MM-DD, or a full date to take the month-day from",
129
+ );
130
+ return withMetadata(
131
+ partsToEpoch(
132
+ {
133
+ year: MONTH_DAY_REFERENCE_YEAR,
134
+ month: Number(match[2]),
135
+ day: Number(match[3]),
136
+ hour: 0,
137
+ minute: 0,
138
+ second: 0,
139
+ millisecond: 0,
140
+ },
141
+ options,
142
+ undefined,
143
+ "date",
144
+ ),
145
+ "date",
146
+ "date",
147
+ );
148
+ }
149
+
150
+ /** Ordered date-family base names (ymd/ydm/…); used by parseOrdered and column auto candidates. */
151
+ export const DATE_ORDERS = new Set(["ymd", "ydm", "mdy", "myd", "dmy", "dym"]);
152
+
153
+ function parseOrdered(
154
+ value: string,
155
+ parser: TemporalParserName,
156
+ options: TemporalParseOptions,
157
+ ): TemporalParseResult {
158
+ const [order, timePrecision] = parser.split("_") as [string, string | undefined];
159
+ if (!DATE_ORDERS.has(order)) return temporalParseFailure(`unsupported ordered parser ${parser}`);
160
+ const match = ORDERED_DATE_RE.exec(value);
161
+ if (match === null) return temporalParseFailure(`value does not match ${parser}`);
162
+ const values = [Number(match[1]), Number(match[3]), Number(match[4])];
163
+ const mapped: Record<string, number> = {};
164
+ for (let index = 0; index < order.length; index++) mapped[order[index]!] = values[index]!;
165
+ const hasMinute = match[5] !== undefined;
166
+ const hasSecond = match[7] !== undefined;
167
+ if (timePrecision === undefined && hasMinute)
168
+ return temporalParseFailure(`${parser} does not accept a time`);
169
+ if (timePrecision === "hm" && (!hasMinute || hasSecond))
170
+ return temporalParseFailure(`${parser} requires hour and minute only`);
171
+ if (timePrecision === "hms" && !hasSecond)
172
+ return temporalParseFailure(`${parser} requires hour, minute, and second`);
173
+ const parts: DateParts = {
174
+ year: mapped["y"]!,
175
+ month: mapped["m"]!,
176
+ day: mapped["d"]!,
177
+ hour: Number(match[5] ?? 0),
178
+ minute: Number(match[6] ?? 0),
179
+ second: Number(match[7] ?? 0),
180
+ millisecond: 0,
181
+ };
182
+ const precision: TemporalPrecision =
183
+ timePrecision === "hm" ? "minute" : timePrecision === "hms" ? "second" : "date";
184
+ return withMetadata(
185
+ partsToEpoch(parts, options, undefined, timePrecision === undefined ? "date" : "datetime"),
186
+ timePrecision === undefined ? "date" : "datetime",
187
+ precision,
188
+ );
189
+ }
190
+
191
+ /** Returns a stable reason when parser options are invalid independent of data. */
192
+ export function temporalParserConfigurationError(
193
+ parser: TemporalParserSpec | "auto",
194
+ options: TemporalParseOptions = {},
195
+ ): string | null {
196
+ const timezoneFailure = timezoneValidationFailure(options.timezone);
197
+ if (timezoneFailure !== null && !timezoneFailure.ok) return timezoneFailure.reason;
198
+ if (parser === "auto" || typeof parser === "string" || "epoch" in parser) return null;
199
+ return exactFormatConfigurationError(parser.format, options);
200
+ }
201
+
202
+ export function parseTemporal(
203
+ value: unknown,
204
+ parser: TemporalParserSpec,
205
+ options: TemporalParseOptions = {},
206
+ ): TemporalParseResult {
207
+ const timezoneFailure = timezoneValidationFailure(options.timezone);
208
+ if (timezoneFailure !== null) return timezoneFailure;
209
+ if (value instanceof Date) {
210
+ const epochMs = value.getTime();
211
+ return Number.isFinite(epochMs)
212
+ ? { ok: true, epochMs, kind: "datetime", precision: "millisecond" }
213
+ : temporalParseFailure("invalid Date value");
214
+ }
215
+ if (typeof parser === "object" && "epoch" in parser) {
216
+ return parseEpoch(value, parser.epoch);
217
+ }
218
+ if (typeof value !== "string" || value.trim() !== value)
219
+ return temporalParseFailure("expected an exact temporal string");
220
+ if (typeof parser === "object") return parseExactFormat(value, parser.format, options);
221
+ if (parser === "iso") return parseISO(value, options);
222
+ if (parser === "md") return parseMonthDay(value, options);
223
+ if (parser === "year" || parser === "ym" || parser === "my" || parser === "yq") {
224
+ return parsePeriod(value, parser, options);
225
+ }
226
+ return parseOrdered(value, parser, options);
227
+ }
228
+
229
+ function parseEpoch(value: unknown, unit: "seconds" | "milliseconds"): TemporalParseResult {
230
+ if (
231
+ (typeof value !== "number" && typeof value !== "string") ||
232
+ (typeof value === "string" && value.trim() === "")
233
+ ) {
234
+ return temporalParseFailure(`expected epoch ${unit}`);
235
+ }
236
+ const numeric = typeof value === "number" ? value : Number(value);
237
+ if (!Number.isFinite(numeric)) return temporalParseFailure(`expected finite epoch ${unit}`);
238
+ const epochMs = unit === "seconds" ? numeric * 1000 : numeric;
239
+ return Number.isFinite(new Date(epochMs).getTime())
240
+ ? { ok: true, epochMs, kind: "datetime", precision: "millisecond" }
241
+ : temporalParseFailure("instant is outside the supported range");
242
+ }
243
+
244
+ function fnv1a(value: string): string {
245
+ let hash = 0x811c9dc5;
246
+ for (let index = 0; index < value.length; index++) {
247
+ const codePoint = value.codePointAt(index)!;
248
+ hash ^= codePoint;
249
+ hash = Math.imul(hash, 0x01000193);
250
+ if (codePoint > 0xffff) index++;
251
+ }
252
+ return (hash >>> 0).toString(16).padStart(8, "0");
253
+ }
254
+
255
+ export function canonicalTemporalParserKey(parser: TemporalParserSpec): string {
256
+ if (typeof parser === "string") return `name:${parser}`;
257
+ if ("epoch" in parser) return `epoch:${parser.epoch}`;
258
+ return `format:${fnv1a(parser.format)}:${JSON.stringify(parser.format)}`;
259
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Sole module that statically imports `@js-temporal/polyfill`.
3
+ *
4
+ * Lean chart graphs (`@ggts-sh/core/render` + `@ggts-sh/spec/portable`) must
5
+ * never import this file — identity / numeric charts then keep Temporal out of
6
+ * the client bundle. Full temporal paths call {@link ensureTemporalPolyfill}
7
+ * (via `installTemporal` / agent `validate()`) before parsing non-UTC zones.
8
+ *
9
+ * Lifecycle (Hadley lesson 13; meanings in CONTRIBUTING.md): tags collected
10
+ * into lifecycle.json by scripts/gen-lifecycle.ts.
11
+ */
12
+ // @lifecycle-default experimental
13
+ import { Temporal as PolyfillTemporal } from "@js-temporal/polyfill";
14
+
15
+ import { registerTemporalPolyfill } from "./temporal-parse-core.js";
16
+
17
+ let ensured = false;
18
+
19
+ /** Register the package polyfill when native `globalThis.Temporal` is absent. Idempotent. */
20
+ export function ensureTemporalPolyfill(): void {
21
+ if (ensured) return;
22
+ ensured = true;
23
+ registerTemporalPolyfill(PolyfillTemporal);
24
+ }
25
+
26
+ // Side-effect for direct importers of this module (tests / explicit installs).
27
+ ensureTemporalPolyfill();
@@ -0,0 +1,312 @@
1
+ /**
2
+ * Calendar-aligned temporal tick generation for portable interval strings.
3
+ * Interval parse/schemas: temporal-interval.ts. Facade: temporal-guides.ts.
4
+ */
5
+
6
+ import {
7
+ temporalImplementation,
8
+ type TemporalDisambiguation,
9
+ type TemporalScaleKind,
10
+ } from "./temporal-parse.js";
11
+ import {
12
+ MAX_TEMPORAL_MAJOR_TICKS,
13
+ parseTemporalInterval,
14
+ TemporalIntervalError,
15
+ type TemporalInterval,
16
+ type TemporalIntervalUnit,
17
+ type TemporalWeekStart,
18
+ } from "./temporal-interval.js";
19
+
20
+ interface TemporalTickOptions {
21
+ kind: TemporalScaleKind;
22
+ timezone?: string;
23
+ weekStart?: TemporalWeekStart;
24
+ disambiguation?: TemporalDisambiguation;
25
+ maxTicks?: number;
26
+ }
27
+
28
+ const FIXED_UNIT_MS: Readonly<Partial<Record<TemporalIntervalUnit, number>>> = {
29
+ millisecond: 1,
30
+ second: 1_000,
31
+ minute: 60_000,
32
+ };
33
+ const HOUR_MS = 3_600_000;
34
+ const DAY_MS = 86_400_000;
35
+
36
+ const WEEKDAY_NUMBER: Readonly<Record<TemporalWeekStart, number>> = {
37
+ monday: 1,
38
+ tuesday: 2,
39
+ wednesday: 3,
40
+ thursday: 4,
41
+ friday: 5,
42
+ saturday: 6,
43
+ sunday: 7,
44
+ };
45
+
46
+ function fixedIntervalTicks(
47
+ min: number,
48
+ max: number,
49
+ intervalMs: number,
50
+ limit: number,
51
+ key: string,
52
+ offsetMs = 0,
53
+ ): number[] {
54
+ const first = Math.ceil((min - offsetMs) / intervalMs) * intervalMs + offsetMs;
55
+ const result: number[] = [];
56
+ for (let value = first; value <= max; value += intervalMs) {
57
+ if (result.length >= limit) {
58
+ throw new TemporalIntervalError(key, `tick count exceeds the ${limit}-tick limit`);
59
+ }
60
+ result.push(value);
61
+ if (!Number.isSafeInteger(value + intervalMs) && value + intervalMs <= max) {
62
+ throw new TemporalIntervalError(key, "tick progression exceeds safe epoch arithmetic");
63
+ }
64
+ }
65
+ return result;
66
+ }
67
+
68
+ function utcEpoch(year: number, monthIndex: number, day = 1): number {
69
+ const date = new Date(0);
70
+ date.setUTCHours(0, 0, 0, 0);
71
+ date.setUTCFullYear(year, monthIndex, day);
72
+ return date.getTime();
73
+ }
74
+
75
+ function utcCalendarTicks(
76
+ min: number,
77
+ max: number,
78
+ interval: TemporalInterval,
79
+ weekStart: number,
80
+ limit: number,
81
+ ): number[] {
82
+ if (interval.unit === "hour") {
83
+ return fixedIntervalTicks(min, max, HOUR_MS * interval.step, limit, interval.key);
84
+ }
85
+ if (interval.unit === "day") {
86
+ return fixedIntervalTicks(min, max, DAY_MS * interval.step, limit, interval.key);
87
+ }
88
+ if (interval.unit === "week") {
89
+ // Epoch day zero was Thursday (Temporal day 4). Align to the requested weekday.
90
+ const offsetDays = (weekStart - 4 + 7) % 7;
91
+ return fixedIntervalTicks(
92
+ min,
93
+ max,
94
+ DAY_MS * 7 * interval.step,
95
+ limit,
96
+ interval.key,
97
+ offsetDays * DAY_MS,
98
+ );
99
+ }
100
+
101
+ const start = new Date(min);
102
+ let cursor: number;
103
+ let add: (value: number) => number;
104
+ if (interval.unit === "month" || interval.unit === "quarter") {
105
+ const stepMonths = interval.step * (interval.unit === "quarter" ? 3 : 1);
106
+ const absoluteMonth = start.getUTCFullYear() * 12 + start.getUTCMonth();
107
+ let aligned = Math.floor(absoluteMonth / stepMonths) * stepMonths;
108
+ cursor = utcEpoch(Math.floor(aligned / 12), aligned % 12);
109
+ if (cursor < min) aligned += stepMonths;
110
+ cursor = utcEpoch(Math.floor(aligned / 12), aligned % 12);
111
+ add = (value) => {
112
+ const date = new Date(value);
113
+ const next = date.getUTCFullYear() * 12 + date.getUTCMonth() + stepMonths;
114
+ return utcEpoch(Math.floor(next / 12), next % 12);
115
+ };
116
+ } else {
117
+ let year = Math.floor(start.getUTCFullYear() / interval.step) * interval.step;
118
+ cursor = utcEpoch(year, 0);
119
+ if (cursor < min) year += interval.step;
120
+ cursor = utcEpoch(year, 0);
121
+ add = (value) => utcEpoch(new Date(value).getUTCFullYear() + interval.step, 0);
122
+ }
123
+
124
+ const result: number[] = [];
125
+ while (cursor <= max) {
126
+ if (result.length >= limit) {
127
+ throw new TemporalIntervalError(interval.key, `tick count exceeds the ${limit}-tick limit`);
128
+ }
129
+ result.push(cursor);
130
+ cursor = add(cursor);
131
+ }
132
+ return result;
133
+ }
134
+
135
+ /**
136
+ * Generate bounded, calendar-aligned epoch-millisecond ticks for one explicit
137
+ * temporal interval. Date-kind ticks always use UTC civil boundaries.
138
+ */
139
+ export function temporalIntervalTicks(
140
+ min: number,
141
+ max: number,
142
+ intervalInput: string | TemporalInterval,
143
+ options: TemporalTickOptions,
144
+ ): number[] {
145
+ const interval =
146
+ typeof intervalInput === "string" ? parseTemporalInterval(intervalInput) : intervalInput;
147
+ const limit = options.maxTicks ?? MAX_TEMPORAL_MAJOR_TICKS;
148
+ if (!Number.isFinite(min) || !Number.isFinite(max) || max < min || limit < 1) return [];
149
+
150
+ const fixedMs = FIXED_UNIT_MS[interval.unit];
151
+ if (fixedMs !== undefined) {
152
+ return fixedIntervalTicks(min, max, fixedMs * interval.step, limit, interval.key);
153
+ }
154
+
155
+ const timezone =
156
+ options.kind === "date" || options.kind === "time" ? "UTC" : (options.timezone ?? "UTC");
157
+ const weekStart = WEEKDAY_NUMBER[options.weekStart ?? "monday"];
158
+ if (timezone === "UTC" || timezone === "Etc/UTC" || timezone === "Z") {
159
+ return utcCalendarTicks(min, max, interval, weekStart, limit);
160
+ }
161
+ return zonedCalendarTicks(min, max, interval, timezone, weekStart, limit);
162
+ }
163
+
164
+ function zonedCalendarTicks(
165
+ min: number,
166
+ max: number,
167
+ interval: TemporalInterval,
168
+ timezone: string,
169
+ weekStart: number,
170
+ limit: number,
171
+ ): number[] {
172
+ const Temporal = temporalImplementation();
173
+ const current = Temporal.Instant.fromEpochMilliseconds(min).toZonedDateTimeISO(timezone);
174
+ const parts = {
175
+ year: current.year,
176
+ month: current.month,
177
+ day: current.day,
178
+ hour: current.hour,
179
+ minute: current.minute,
180
+ second: current.second,
181
+ millisecond: current.millisecond,
182
+ };
183
+
184
+ const absoluteCivilDay = Math.floor(utcEpoch(parts.year, parts.month - 1, parts.day) / DAY_MS);
185
+ const plainAtCivilDay = (day: number) => {
186
+ const date = new Date(day * DAY_MS);
187
+ return Temporal.PlainDateTime.from({
188
+ year: date.getUTCFullYear(),
189
+ month: date.getUTCMonth() + 1,
190
+ day: date.getUTCDate(),
191
+ hour: 0,
192
+ minute: 0,
193
+ second: 0,
194
+ millisecond: 0,
195
+ });
196
+ };
197
+
198
+ let plain;
199
+ switch (interval.unit) {
200
+ case "hour": {
201
+ const hour = Math.floor(parts.hour / interval.step) * interval.step;
202
+ plain = Temporal.PlainDateTime.from({ ...parts, hour, minute: 0, second: 0, millisecond: 0 });
203
+ break;
204
+ }
205
+ case "day": {
206
+ const alignedDay = Math.floor(absoluteCivilDay / interval.step) * interval.step;
207
+ plain = plainAtCivilDay(alignedDay);
208
+ break;
209
+ }
210
+ case "week": {
211
+ // Epoch day zero was Thursday (Temporal day 4). Match the UTC path's
212
+ // weekday offset and multi-week phase in local civil-date space.
213
+ const offsetDays = (weekStart - 4 + 7) % 7;
214
+ const stepDays = interval.step * 7;
215
+ const alignedDay =
216
+ Math.floor((absoluteCivilDay - offsetDays) / stepDays) * stepDays + offsetDays;
217
+ plain = plainAtCivilDay(alignedDay);
218
+ break;
219
+ }
220
+ case "month":
221
+ case "quarter": {
222
+ const stepMonths = interval.step * (interval.unit === "quarter" ? 3 : 1);
223
+ const absoluteMonth = parts.year * 12 + parts.month - 1;
224
+ const alignedMonth = Math.floor(absoluteMonth / stepMonths) * stepMonths;
225
+ const monthIndex = ((alignedMonth % 12) + 12) % 12;
226
+ plain = Temporal.PlainDateTime.from({
227
+ ...parts,
228
+ year: Math.floor(alignedMonth / 12),
229
+ month: monthIndex + 1,
230
+ day: 1,
231
+ hour: 0,
232
+ minute: 0,
233
+ second: 0,
234
+ millisecond: 0,
235
+ });
236
+ break;
237
+ }
238
+ case "year": {
239
+ const year = Math.floor(parts.year / interval.step) * interval.step;
240
+ plain = Temporal.PlainDateTime.from({
241
+ ...parts,
242
+ year,
243
+ month: 1,
244
+ day: 1,
245
+ hour: 0,
246
+ minute: 0,
247
+ second: 0,
248
+ millisecond: 0,
249
+ });
250
+ break;
251
+ }
252
+ default:
253
+ return [];
254
+ }
255
+
256
+ const advancePlain = (value: typeof plain): typeof plain => {
257
+ switch (interval.unit) {
258
+ case "hour":
259
+ return value.add({ hours: interval.step });
260
+ case "day":
261
+ return value.add({ days: interval.step });
262
+ case "week":
263
+ return value.add({ weeks: interval.step });
264
+ case "month":
265
+ return value.add({ months: interval.step });
266
+ case "quarter":
267
+ return value.add({ months: interval.step * 3 });
268
+ case "year":
269
+ return value.add({ years: interval.step });
270
+ default:
271
+ return value;
272
+ }
273
+ };
274
+ const project = (value: typeof plain) =>
275
+ value.toZonedDateTime(timezone, { disambiguation: "compatible" });
276
+
277
+ // Generated civil boundaries are synthetic, not parsed source values. Advance
278
+ // the aligned civil cursor before each projection so a gap adjustment (for
279
+ // example 02:00 -> 03:00) cannot shift every later multi-hour boundary.
280
+ // Source parsing has already applied the author's disambiguation contract.
281
+ let cursor = plain;
282
+ let tick = project(cursor);
283
+ if (tick.epochMilliseconds < min) {
284
+ cursor = advancePlain(cursor);
285
+ tick = project(cursor);
286
+ }
287
+
288
+ const result: number[] = [];
289
+ let stalled = 0;
290
+ while (tick.epochMilliseconds <= max) {
291
+ const epoch = tick.epochMilliseconds;
292
+ if (epoch >= min && result.at(-1) !== epoch) {
293
+ if (result.length >= limit) {
294
+ throw new TemporalIntervalError(interval.key, `tick count exceeds the ${limit}-tick limit`);
295
+ }
296
+ result.push(epoch);
297
+ }
298
+ const nextCursor = advancePlain(cursor);
299
+ const next = project(nextCursor);
300
+ if (next.epochMilliseconds <= epoch) {
301
+ stalled += 1;
302
+ if (stalled >= 2) {
303
+ throw new TemporalIntervalError(interval.key, "calendar progression did not advance");
304
+ }
305
+ } else {
306
+ stalled = 0;
307
+ }
308
+ cursor = nextCursor;
309
+ tick = next;
310
+ }
311
+ return result;
312
+ }