@synnaxlabs/client 0.56.1 → 0.57.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 (741) hide show
  1. package/dist/client-B08VDLSA.js +14463 -0
  2. package/dist/client-B08VDLSA.js.map +1 -0
  3. package/dist/client.js +1128 -14876
  4. package/dist/client.js.map +1 -0
  5. package/dist/src/access/client.d.ts +10 -1
  6. package/dist/src/access/client.d.ts.map +1 -1
  7. package/dist/src/access/enforce.d.ts.map +1 -1
  8. package/dist/src/access/external.d.ts +1 -0
  9. package/dist/src/access/external.d.ts.map +1 -1
  10. package/dist/src/access/granted.d.ts +39 -0
  11. package/dist/src/access/granted.d.ts.map +1 -0
  12. package/dist/src/access/policy/client.d.ts +136 -147
  13. package/dist/src/access/policy/client.d.ts.map +1 -1
  14. package/dist/src/access/policy/types.gen.d.ts +15 -68
  15. package/dist/src/access/policy/types.gen.d.ts.map +1 -1
  16. package/dist/src/access/role/client.d.ts +77 -58
  17. package/dist/src/access/role/client.d.ts.map +1 -1
  18. package/dist/src/access/role/types.gen.d.ts +8 -14
  19. package/dist/src/access/role/types.gen.d.ts.map +1 -1
  20. package/dist/src/actions/actions.d.ts +5 -6
  21. package/dist/src/actions/actions.d.ts.map +1 -1
  22. package/dist/src/actions/controller.d.ts +194 -0
  23. package/dist/src/actions/controller.d.ts.map +1 -0
  24. package/dist/src/actions/external.d.ts +1 -0
  25. package/dist/src/actions/external.d.ts.map +1 -1
  26. package/dist/src/arc/actions.d.ts +575 -0
  27. package/dist/src/arc/actions.d.ts.map +1 -0
  28. package/dist/src/arc/actions.gen.d.ts +1439 -0
  29. package/dist/src/arc/actions.gen.d.ts.map +1 -0
  30. package/dist/src/arc/client.d.ts +97 -13
  31. package/dist/src/arc/client.d.ts.map +1 -1
  32. package/dist/src/arc/compiler/types.gen.d.ts +3 -3
  33. package/dist/src/arc/compiler/types.gen.d.ts.map +1 -1
  34. package/dist/src/arc/external.d.ts +2 -0
  35. package/dist/src/arc/external.d.ts.map +1 -1
  36. package/dist/src/arc/graph/types.gen.d.ts +45 -597
  37. package/dist/src/arc/graph/types.gen.d.ts.map +1 -1
  38. package/dist/src/arc/ir/index.d.ts +1 -1
  39. package/dist/src/arc/ir/index.d.ts.map +1 -1
  40. package/dist/src/arc/ir/ir.d.ts +2 -0
  41. package/dist/src/arc/ir/ir.d.ts.map +1 -0
  42. package/dist/src/arc/ir/types.gen.d.ts +58 -2807
  43. package/dist/src/arc/ir/types.gen.d.ts.map +1 -1
  44. package/dist/src/arc/module/types.gen.d.ts +18 -1090
  45. package/dist/src/arc/module/types.gen.d.ts.map +1 -1
  46. package/dist/src/arc/program/types.gen.d.ts +18 -1090
  47. package/dist/src/arc/program/types.gen.d.ts.map +1 -1
  48. package/dist/src/arc/text/types.gen.d.ts +54 -1
  49. package/dist/src/arc/text/types.gen.d.ts.map +1 -1
  50. package/dist/src/arc/types/types.gen.d.ts +35 -153
  51. package/dist/src/arc/types/types.gen.d.ts.map +1 -1
  52. package/dist/src/arc/types.gen.d.ts +98 -2278
  53. package/dist/src/arc/types.gen.d.ts.map +1 -1
  54. package/dist/src/auth/auth.d.ts +14 -2
  55. package/dist/src/auth/auth.d.ts.map +1 -1
  56. package/dist/src/channel/client.d.ts +113 -75
  57. package/dist/src/channel/client.d.ts.map +1 -1
  58. package/dist/src/channel/external.d.ts +0 -1
  59. package/dist/src/channel/external.d.ts.map +1 -1
  60. package/dist/src/channel/payload.d.ts +65 -56
  61. package/dist/src/channel/payload.d.ts.map +1 -1
  62. package/dist/src/channel/types.gen.d.ts +26 -73
  63. package/dist/src/channel/types.gen.d.ts.map +1 -1
  64. package/dist/src/channel/writer.d.ts +1 -3
  65. package/dist/src/channel/writer.d.ts.map +1 -1
  66. package/dist/src/client.d.ts +55 -27
  67. package/dist/src/client.d.ts.map +1 -1
  68. package/dist/src/connection/client.d.ts +146 -0
  69. package/dist/src/connection/client.d.ts.map +1 -0
  70. package/dist/src/connection/external.d.ts +3 -0
  71. package/dist/src/connection/external.d.ts.map +1 -0
  72. package/dist/src/connection/index.d.ts +1 -1
  73. package/dist/src/connection/index.d.ts.map +1 -1
  74. package/dist/src/connection/status.d.ts +252 -0
  75. package/dist/src/connection/status.d.ts.map +1 -0
  76. package/dist/src/control/client.d.ts +31 -7
  77. package/dist/src/control/client.d.ts.map +1 -1
  78. package/dist/src/control/state.d.ts +47 -16
  79. package/dist/src/control/state.d.ts.map +1 -1
  80. package/dist/src/device/client.d.ts +59 -17
  81. package/dist/src/device/client.d.ts.map +1 -1
  82. package/dist/src/device/types.gen.d.ts +17 -67
  83. package/dist/src/device/types.gen.d.ts.map +1 -1
  84. package/dist/src/errors.d.ts +17 -20
  85. package/dist/src/errors.d.ts.map +1 -1
  86. package/dist/src/ethercat/external.d.ts +2 -0
  87. package/dist/src/ethercat/external.d.ts.map +1 -0
  88. package/dist/src/ethercat/index.d.ts +2 -0
  89. package/dist/src/ethercat/index.d.ts.map +1 -0
  90. package/dist/src/ethercat/types.gen.d.ts +243 -0
  91. package/dist/src/ethercat/types.gen.d.ts.map +1 -0
  92. package/dist/src/framer/adapter.d.ts +8 -5
  93. package/dist/src/framer/adapter.d.ts.map +1 -1
  94. package/dist/src/framer/benchutil.d.ts +19 -0
  95. package/dist/src/framer/benchutil.d.ts.map +1 -0
  96. package/dist/src/framer/cache/cache.d.ts +38 -0
  97. package/dist/src/framer/cache/cache.d.ts.map +1 -0
  98. package/dist/src/framer/cache/dynamic.d.ts +71 -0
  99. package/dist/src/framer/cache/dynamic.d.ts.map +1 -0
  100. package/dist/src/framer/cache/reader.d.ts +43 -0
  101. package/dist/src/framer/cache/reader.d.ts.map +1 -0
  102. package/dist/src/framer/cache/static.d.ts +66 -0
  103. package/dist/src/framer/cache/static.d.ts.map +1 -0
  104. package/dist/src/framer/cache/streamer.d.ts +86 -0
  105. package/dist/src/framer/cache/streamer.d.ts.map +1 -0
  106. package/dist/src/framer/cache/transform.d.ts +18 -0
  107. package/dist/src/framer/cache/transform.d.ts.map +1 -0
  108. package/dist/src/framer/cache/unary.d.ts +37 -0
  109. package/dist/src/framer/cache/unary.d.ts.map +1 -0
  110. package/dist/src/framer/client.d.ts +35 -14
  111. package/dist/src/framer/client.d.ts.map +1 -1
  112. package/dist/src/framer/codec.d.ts.map +1 -1
  113. package/dist/src/framer/deleter.d.ts +3 -2
  114. package/dist/src/framer/deleter.d.ts.map +1 -1
  115. package/dist/src/framer/external.d.ts +6 -0
  116. package/dist/src/framer/external.d.ts.map +1 -1
  117. package/dist/src/framer/feed.d.ts +40 -0
  118. package/dist/src/framer/feed.d.ts.map +1 -0
  119. package/dist/src/framer/frame.d.ts +16 -20
  120. package/dist/src/framer/frame.d.ts.map +1 -1
  121. package/dist/src/framer/hardened.d.ts +70 -0
  122. package/dist/src/framer/hardened.d.ts.map +1 -0
  123. package/dist/src/framer/iterator.d.ts +36 -43
  124. package/dist/src/framer/iterator.d.ts.map +1 -1
  125. package/dist/src/framer/reader.d.ts +3 -2
  126. package/dist/src/framer/reader.d.ts.map +1 -1
  127. package/dist/src/framer/streamer.d.ts +132 -205
  128. package/dist/src/framer/streamer.d.ts.map +1 -1
  129. package/dist/src/framer/writer.d.ts +130 -161
  130. package/dist/src/framer/writer.d.ts.map +1 -1
  131. package/dist/src/group/client.d.ts +66 -9
  132. package/dist/src/group/client.d.ts.map +1 -1
  133. package/dist/src/group/types.gen.d.ts +2 -2
  134. package/dist/src/http/external.d.ts +2 -0
  135. package/dist/src/http/external.d.ts.map +1 -0
  136. package/dist/src/http/index.d.ts +2 -0
  137. package/dist/src/http/index.d.ts.map +1 -0
  138. package/dist/src/http/types.gen.d.ts +451 -0
  139. package/dist/src/http/types.gen.d.ts.map +1 -0
  140. package/dist/src/imex/client.d.ts +88 -0
  141. package/dist/src/imex/client.d.ts.map +1 -0
  142. package/dist/src/imex/index.d.ts +2 -0
  143. package/dist/src/imex/index.d.ts.map +1 -0
  144. package/dist/src/index.d.ts +18 -5
  145. package/dist/src/index.d.ts.map +1 -1
  146. package/dist/src/label/client.d.ts +55 -36
  147. package/dist/src/label/client.d.ts.map +1 -1
  148. package/dist/src/label/external.d.ts +2 -0
  149. package/dist/src/label/external.d.ts.map +1 -1
  150. package/dist/src/label/payload.d.ts +4 -46
  151. package/dist/src/label/payload.d.ts.map +1 -1
  152. package/dist/src/label/store.d.ts +8 -0
  153. package/dist/src/label/store.d.ts.map +1 -0
  154. package/dist/src/label/types.gen.d.ts +45 -0
  155. package/dist/src/label/types.gen.d.ts.map +1 -0
  156. package/dist/src/labjack/external.d.ts +2 -0
  157. package/dist/src/labjack/external.d.ts.map +1 -0
  158. package/dist/src/labjack/index.d.ts +2 -0
  159. package/dist/src/labjack/index.d.ts.map +1 -0
  160. package/dist/src/labjack/types.gen.d.ts +442 -0
  161. package/dist/src/labjack/types.gen.d.ts.map +1 -0
  162. package/dist/src/lineplot/actions.d.ts +914 -0
  163. package/dist/src/lineplot/actions.d.ts.map +1 -0
  164. package/dist/src/lineplot/actions.gen.d.ts +4208 -0
  165. package/dist/src/lineplot/actions.gen.d.ts.map +1 -0
  166. package/dist/src/lineplot/client.d.ts +66 -16
  167. package/dist/src/lineplot/client.d.ts.map +1 -1
  168. package/dist/src/lineplot/external.d.ts +3 -0
  169. package/dist/src/lineplot/external.d.ts.map +1 -1
  170. package/dist/src/lineplot/line.d.ts +16 -0
  171. package/dist/src/lineplot/line.d.ts.map +1 -0
  172. package/dist/src/lineplot/types.gen.d.ts +837 -14
  173. package/dist/src/lineplot/types.gen.d.ts.map +1 -1
  174. package/dist/src/log/actions.d.ts +271 -0
  175. package/dist/src/log/actions.d.ts.map +1 -0
  176. package/dist/src/log/actions.gen.d.ts +1529 -0
  177. package/dist/src/log/actions.gen.d.ts.map +1 -0
  178. package/dist/src/log/client.d.ts +66 -16
  179. package/dist/src/log/client.d.ts.map +1 -1
  180. package/dist/src/log/external.d.ts +2 -0
  181. package/dist/src/log/external.d.ts.map +1 -1
  182. package/dist/src/log/types.gen.d.ts +139 -14
  183. package/dist/src/log/types.gen.d.ts.map +1 -1
  184. package/dist/src/modbus/external.d.ts +2 -0
  185. package/dist/src/modbus/external.d.ts.map +1 -0
  186. package/dist/src/modbus/index.d.ts +2 -0
  187. package/dist/src/modbus/index.d.ts.map +1 -0
  188. package/dist/src/modbus/types.gen.d.ts +280 -0
  189. package/dist/src/modbus/types.gen.d.ts.map +1 -0
  190. package/dist/src/ni/external.d.ts +2 -0
  191. package/dist/src/ni/external.d.ts.map +1 -0
  192. package/dist/src/ni/index.d.ts +2 -0
  193. package/dist/src/ni/index.d.ts.map +1 -0
  194. package/dist/src/ni/types.gen.d.ts +21029 -0
  195. package/dist/src/ni/types.gen.d.ts.map +1 -0
  196. package/dist/src/node/index.d.ts +2 -0
  197. package/dist/src/node/index.d.ts.map +1 -0
  198. package/dist/src/node/types.gen.d.ts +4 -0
  199. package/dist/src/node/types.gen.d.ts.map +1 -0
  200. package/dist/src/ontology/client.d.ts +314 -67
  201. package/dist/src/ontology/client.d.ts.map +1 -1
  202. package/dist/src/ontology/external.d.ts +1 -0
  203. package/dist/src/ontology/external.d.ts.map +1 -1
  204. package/dist/src/ontology/payload.d.ts +60 -18
  205. package/dist/src/ontology/payload.d.ts.map +1 -1
  206. package/dist/src/ontology/store.d.ts +32 -0
  207. package/dist/src/ontology/store.d.ts.map +1 -0
  208. package/dist/src/ontology/types.gen.d.ts +3 -2
  209. package/dist/src/ontology/types.gen.d.ts.map +1 -1
  210. package/dist/src/ontology/writer.d.ts +16 -10
  211. package/dist/src/ontology/writer.d.ts.map +1 -1
  212. package/dist/src/opcua/external.d.ts +2 -0
  213. package/dist/src/opcua/external.d.ts.map +1 -0
  214. package/dist/src/opcua/index.d.ts +2 -0
  215. package/dist/src/opcua/index.d.ts.map +1 -0
  216. package/dist/src/opcua/types.gen.d.ts +82 -0
  217. package/dist/src/opcua/types.gen.d.ts.map +1 -0
  218. package/dist/src/pagerduty/external.d.ts +2 -0
  219. package/dist/src/pagerduty/external.d.ts.map +1 -0
  220. package/dist/src/pagerduty/index.d.ts +2 -0
  221. package/dist/src/pagerduty/index.d.ts.map +1 -0
  222. package/dist/src/pagerduty/types.gen.d.ts +30 -0
  223. package/dist/src/pagerduty/types.gen.d.ts.map +1 -0
  224. package/dist/src/panel/actions.d.ts +273 -0
  225. package/dist/src/panel/actions.d.ts.map +1 -0
  226. package/dist/src/panel/actions.gen.d.ts +1255 -0
  227. package/dist/src/panel/actions.gen.d.ts.map +1 -0
  228. package/dist/src/panel/client.d.ts +148 -0
  229. package/dist/src/panel/client.d.ts.map +1 -0
  230. package/dist/src/panel/external.d.ts +6 -0
  231. package/dist/src/panel/external.d.ts.map +1 -0
  232. package/dist/src/panel/index.d.ts +2 -0
  233. package/dist/src/panel/index.d.ts.map +1 -0
  234. package/dist/src/panel/tree.d.ts +50 -0
  235. package/dist/src/panel/tree.d.ts.map +1 -0
  236. package/dist/src/panel/types.gen.d.ts +370 -0
  237. package/dist/src/panel/types.gen.d.ts.map +1 -0
  238. package/dist/src/project/client.d.ts +89 -0
  239. package/dist/src/project/client.d.ts.map +1 -0
  240. package/dist/src/project/external.d.ts.map +1 -0
  241. package/dist/src/project/index.d.ts +2 -0
  242. package/dist/src/project/index.d.ts.map +1 -0
  243. package/dist/src/project/types.gen.d.ts +27 -0
  244. package/dist/src/project/types.gen.d.ts.map +1 -0
  245. package/dist/src/query/cache.d.ts +132 -0
  246. package/dist/src/query/cache.d.ts.map +1 -0
  247. package/dist/src/query/deleted.d.ts +20 -0
  248. package/dist/src/query/deleted.d.ts.map +1 -0
  249. package/dist/src/query/derived.d.ts +33 -0
  250. package/dist/src/query/derived.d.ts.map +1 -0
  251. package/dist/src/query/external.d.ts +10 -0
  252. package/dist/src/query/external.d.ts.map +1 -0
  253. package/dist/src/query/index.d.ts +2 -0
  254. package/dist/src/query/index.d.ts.map +1 -0
  255. package/dist/src/query/query.d.ts +235 -0
  256. package/dist/src/query/query.d.ts.map +1 -0
  257. package/dist/src/query/retriever.d.ts +135 -0
  258. package/dist/src/query/retriever.d.ts.map +1 -0
  259. package/dist/src/query/streamer.d.ts +67 -0
  260. package/dist/src/query/streamer.d.ts.map +1 -0
  261. package/dist/src/query/table.d.ts +219 -0
  262. package/dist/src/query/table.d.ts.map +1 -0
  263. package/dist/src/query/types.d.ts +35 -0
  264. package/dist/src/query/types.d.ts.map +1 -0
  265. package/dist/src/query/write.d.ts +21 -0
  266. package/dist/src/query/write.d.ts.map +1 -0
  267. package/dist/src/rack/client.d.ts +58 -20
  268. package/dist/src/rack/client.d.ts.map +1 -1
  269. package/dist/src/rack/types.gen.d.ts +11 -12
  270. package/dist/src/rack/types.gen.d.ts.map +1 -1
  271. package/dist/src/range/alias/types.gen.d.ts +2 -3
  272. package/dist/src/range/alias/types.gen.d.ts.map +1 -1
  273. package/dist/src/ranger/client.d.ts +138 -27
  274. package/dist/src/ranger/client.d.ts.map +1 -1
  275. package/dist/src/ranger/kv/client.d.ts +7 -4
  276. package/dist/src/ranger/kv/client.d.ts.map +1 -1
  277. package/dist/src/ranger/payload.d.ts +3 -0
  278. package/dist/src/ranger/payload.d.ts.map +1 -1
  279. package/dist/src/ranger/types.gen.d.ts +45 -101
  280. package/dist/src/ranger/types.gen.d.ts.map +1 -1
  281. package/dist/src/ranger/writer.d.ts +2 -74
  282. package/dist/src/ranger/writer.d.ts.map +1 -1
  283. package/dist/src/schematic/actions.d.ts +90 -33
  284. package/dist/src/schematic/actions.d.ts.map +1 -1
  285. package/dist/src/schematic/actions.gen.d.ts +207 -114
  286. package/dist/src/schematic/actions.gen.d.ts.map +1 -1
  287. package/dist/src/schematic/client.d.ts +70 -68
  288. package/dist/src/schematic/client.d.ts.map +1 -1
  289. package/dist/src/schematic/symbol/client.d.ts +133 -27
  290. package/dist/src/schematic/symbol/client.d.ts.map +1 -1
  291. package/dist/src/schematic/symbol/types.gen.d.ts +258 -153
  292. package/dist/src/schematic/symbol/types.gen.d.ts.map +1 -1
  293. package/dist/src/schematic/types.gen.d.ts +17 -96
  294. package/dist/src/schematic/types.gen.d.ts.map +1 -1
  295. package/dist/src/status/client.d.ts +69 -14
  296. package/dist/src/status/client.d.ts.map +1 -1
  297. package/dist/src/status/external.d.ts +2 -0
  298. package/dist/src/status/external.d.ts.map +1 -1
  299. package/dist/src/status/payload.d.ts +2 -36
  300. package/dist/src/status/payload.d.ts.map +1 -1
  301. package/dist/src/status/status.d.ts +65 -0
  302. package/dist/src/status/status.d.ts.map +1 -0
  303. package/dist/src/status/types.gen.d.ts +58 -0
  304. package/dist/src/status/types.gen.d.ts.map +1 -0
  305. package/dist/src/table/actions.d.ts +72 -13
  306. package/dist/src/table/actions.d.ts.map +1 -1
  307. package/dist/src/table/actions.gen.d.ts +221 -137
  308. package/dist/src/table/actions.gen.d.ts.map +1 -1
  309. package/dist/src/table/client.d.ts +64 -40
  310. package/dist/src/table/client.d.ts.map +1 -1
  311. package/dist/src/table/types.gen.d.ts +20 -55
  312. package/dist/src/table/types.gen.d.ts.map +1 -1
  313. package/dist/src/task/client.d.ts +149 -28
  314. package/dist/src/task/client.d.ts.map +1 -1
  315. package/dist/src/task/types.gen.d.ts +71 -89
  316. package/dist/src/task/types.gen.d.ts.map +1 -1
  317. package/dist/src/testutil/access.d.ts +27 -1
  318. package/dist/src/testutil/access.d.ts.map +1 -1
  319. package/dist/src/testutil/channels.d.ts +2 -0
  320. package/dist/src/testutil/channels.d.ts.map +1 -1
  321. package/dist/src/testutil/client.d.ts +5 -0
  322. package/dist/src/testutil/client.d.ts.map +1 -1
  323. package/dist/src/testutil/connection.d.ts +10 -0
  324. package/dist/src/testutil/connection.d.ts.map +1 -0
  325. package/dist/src/testutil/index.d.ts +9 -0
  326. package/dist/src/testutil/index.d.ts.map +1 -0
  327. package/dist/src/testutil/panels.d.ts +8 -0
  328. package/dist/src/testutil/panels.d.ts.map +1 -0
  329. package/dist/src/testutil/proxy.d.ts +29 -0
  330. package/dist/src/testutil/proxy.d.ts.map +1 -0
  331. package/dist/src/testutil/query.d.ts +7 -0
  332. package/dist/src/testutil/query.d.ts.map +1 -0
  333. package/dist/src/testutil/telem.d.ts +4 -0
  334. package/dist/src/testutil/telem.d.ts.map +1 -1
  335. package/dist/src/transport.d.ts +10 -4
  336. package/dist/src/transport.d.ts.map +1 -1
  337. package/dist/src/user/client.d.ts +29 -28
  338. package/dist/src/user/client.d.ts.map +1 -1
  339. package/dist/src/user/external.d.ts +1 -1
  340. package/dist/src/user/external.d.ts.map +1 -1
  341. package/dist/src/user/types.gen.d.ts +4 -4
  342. package/dist/src/util/retrieve.d.ts +2 -2
  343. package/dist/src/util/retrieve.d.ts.map +1 -1
  344. package/dist/src/util/telem.d.ts.map +1 -1
  345. package/dist/src/view/client.d.ts +30 -14
  346. package/dist/src/view/client.d.ts.map +1 -1
  347. package/dist/src/view/types.gen.d.ts +7 -15
  348. package/dist/src/view/types.gen.d.ts.map +1 -1
  349. package/dist/testutil.js +189 -0
  350. package/dist/testutil.js.map +1 -0
  351. package/package.json +40 -17
  352. package/src/access/client.ts +14 -3
  353. package/src/access/enforce.ts +0 -3
  354. package/src/access/external.ts +1 -0
  355. package/src/access/granted.ts +114 -0
  356. package/src/access/policy/client.ts +135 -43
  357. package/src/access/policy/types.gen.ts +9 -11
  358. package/src/access/role/client.ts +160 -38
  359. package/src/access/role/types.gen.ts +8 -12
  360. package/src/actions/actions.ts +5 -6
  361. package/src/actions/controller.ts +626 -0
  362. package/src/actions/external.ts +11 -0
  363. package/src/arc/actions.gen.ts +313 -0
  364. package/src/arc/actions.ts +192 -0
  365. package/src/arc/client.ts +424 -41
  366. package/src/arc/compiler/types.gen.ts +5 -6
  367. package/src/arc/external.ts +2 -0
  368. package/src/arc/graph/types.gen.ts +24 -22
  369. package/src/arc/ir/index.ts +1 -1
  370. package/{eslint.config.ts → src/arc/ir/ir.ts} +1 -4
  371. package/src/arc/ir/types.gen.ts +42 -41
  372. package/src/arc/text/types.gen.ts +21 -2
  373. package/src/arc/types/types.gen.ts +40 -32
  374. package/src/arc/types.gen.ts +31 -29
  375. package/src/auth/auth.ts +40 -8
  376. package/src/channel/client.ts +529 -132
  377. package/src/channel/external.ts +0 -1
  378. package/src/channel/payload.ts +30 -3
  379. package/src/channel/types.gen.ts +37 -48
  380. package/src/channel/writer.ts +2 -11
  381. package/src/client.ts +215 -91
  382. package/src/connection/client.ts +495 -0
  383. package/src/connection/external.ts +34 -0
  384. package/src/connection/index.ts +1 -1
  385. package/src/connection/status.ts +442 -0
  386. package/src/control/client.ts +84 -12
  387. package/src/control/state.ts +17 -36
  388. package/src/device/client.ts +293 -41
  389. package/src/device/types.gen.ts +15 -26
  390. package/src/errors.ts +45 -22
  391. package/src/{workspace → ethercat}/external.ts +1 -2
  392. package/src/{workspace → ethercat}/index.ts +1 -1
  393. package/src/ethercat/types.gen.ts +151 -0
  394. package/src/framer/adapter.ts +60 -37
  395. package/src/framer/benchutil.ts +67 -0
  396. package/src/framer/cache/cache.ts +115 -0
  397. package/src/framer/cache/dynamic.ts +279 -0
  398. package/src/framer/cache/reader.ts +160 -0
  399. package/src/framer/cache/static.ts +215 -0
  400. package/src/framer/cache/streamer.ts +391 -0
  401. package/src/framer/cache/transform.ts +31 -0
  402. package/src/framer/cache/unary.ts +104 -0
  403. package/src/framer/client.ts +71 -43
  404. package/src/framer/codec.ts +55 -18
  405. package/src/framer/deleter.ts +4 -6
  406. package/src/framer/external.ts +10 -0
  407. package/src/framer/feed.ts +108 -0
  408. package/src/framer/frame.ts +13 -23
  409. package/src/framer/hardened.ts +283 -0
  410. package/src/framer/iterator.ts +31 -42
  411. package/src/framer/reader.ts +11 -11
  412. package/src/framer/streamer.ts +18 -178
  413. package/src/framer/writer.ts +39 -59
  414. package/src/group/client.ts +158 -23
  415. package/src/http/external.ts +10 -0
  416. package/src/{cluster → http}/index.ts +1 -1
  417. package/src/http/types.gen.ts +245 -0
  418. package/src/imex/client.ts +125 -0
  419. package/src/imex/index.ts +10 -0
  420. package/src/index.ts +18 -6
  421. package/src/label/client.ts +193 -54
  422. package/src/label/external.ts +2 -0
  423. package/src/label/payload.ts +4 -9
  424. package/src/label/store.ts +28 -0
  425. package/src/label/types.gen.ts +31 -0
  426. package/src/labjack/external.ts +10 -0
  427. package/src/labjack/index.ts +10 -0
  428. package/src/labjack/types.gen.ts +251 -0
  429. package/src/lineplot/actions.gen.ts +880 -0
  430. package/src/lineplot/actions.ts +535 -0
  431. package/src/lineplot/client.ts +224 -52
  432. package/src/lineplot/external.ts +3 -0
  433. package/src/lineplot/line.ts +80 -0
  434. package/src/lineplot/types.gen.ts +225 -12
  435. package/src/log/actions.gen.ts +474 -0
  436. package/src/log/actions.ts +242 -0
  437. package/src/log/client.ts +223 -52
  438. package/src/log/external.ts +2 -0
  439. package/src/log/types.gen.ts +45 -14
  440. package/src/modbus/external.ts +10 -0
  441. package/src/modbus/index.ts +10 -0
  442. package/src/modbus/types.gen.ts +185 -0
  443. package/src/ni/external.ts +10 -0
  444. package/src/ni/index.ts +10 -0
  445. package/src/ni/types.gen.ts +1632 -0
  446. package/src/node/index.ts +10 -0
  447. package/src/{cluster → node}/types.gen.ts +2 -2
  448. package/src/ontology/client.ts +408 -99
  449. package/src/ontology/external.ts +7 -0
  450. package/src/ontology/payload.ts +48 -7
  451. package/src/ontology/store.ts +83 -0
  452. package/src/ontology/types.gen.ts +2 -1
  453. package/src/ontology/writer.ts +1 -0
  454. package/src/opcua/external.ts +10 -0
  455. package/src/opcua/index.ts +10 -0
  456. package/src/opcua/types.gen.ts +65 -0
  457. package/src/pagerduty/external.ts +10 -0
  458. package/src/pagerduty/index.ts +10 -0
  459. package/src/pagerduty/types.gen.ts +41 -0
  460. package/src/panel/actions.gen.ts +267 -0
  461. package/src/panel/actions.ts +357 -0
  462. package/src/panel/client.ts +327 -0
  463. package/src/panel/external.ts +14 -0
  464. package/src/panel/index.ts +10 -0
  465. package/src/panel/tree.ts +163 -0
  466. package/src/panel/types.gen.ts +164 -0
  467. package/src/project/client.ts +273 -0
  468. package/src/project/external.ts +11 -0
  469. package/src/project/index.ts +10 -0
  470. package/src/project/types.gen.ts +40 -0
  471. package/src/query/cache.ts +326 -0
  472. package/src/query/deleted.ts +38 -0
  473. package/src/query/derived.ts +101 -0
  474. package/src/query/external.ts +51 -0
  475. package/src/query/index.ts +10 -0
  476. package/src/query/query.ts +865 -0
  477. package/src/query/retriever.ts +308 -0
  478. package/src/query/streamer.ts +207 -0
  479. package/src/query/table.ts +625 -0
  480. package/src/query/types.ts +54 -0
  481. package/src/query/write.ts +42 -0
  482. package/src/rack/client.ts +233 -45
  483. package/src/rack/types.gen.ts +15 -16
  484. package/src/range/alias/types.gen.ts +2 -3
  485. package/src/ranger/client.ts +581 -70
  486. package/src/ranger/kv/client.ts +52 -21
  487. package/src/ranger/payload.ts +3 -0
  488. package/src/ranger/types.gen.ts +21 -23
  489. package/src/ranger/writer.ts +4 -8
  490. package/src/schematic/actions.gen.ts +62 -53
  491. package/src/schematic/actions.ts +44 -42
  492. package/src/schematic/client.ts +226 -70
  493. package/src/schematic/symbol/client.ts +277 -48
  494. package/src/schematic/symbol/types.gen.ts +22 -34
  495. package/src/schematic/types.gen.ts +22 -29
  496. package/src/status/client.ts +321 -44
  497. package/src/status/external.ts +2 -0
  498. package/src/status/payload.ts +1 -23
  499. package/src/status/status.ts +241 -0
  500. package/src/status/types.gen.ts +108 -0
  501. package/src/table/actions.gen.ts +96 -63
  502. package/src/table/actions.ts +44 -19
  503. package/src/table/client.ts +220 -56
  504. package/src/table/types.gen.ts +24 -31
  505. package/src/task/client.ts +580 -101
  506. package/src/task/types.gen.ts +68 -75
  507. package/src/testutil/access.ts +102 -6
  508. package/src/testutil/channels.ts +29 -0
  509. package/src/testutil/client.ts +27 -2
  510. package/src/testutil/connection.ts +47 -0
  511. package/src/testutil/index.ts +17 -0
  512. package/src/testutil/panels.ts +26 -0
  513. package/src/testutil/proxy.ts +106 -0
  514. package/src/testutil/query.ts +28 -0
  515. package/src/testutil/telem.ts +17 -1
  516. package/src/transport.ts +18 -7
  517. package/src/user/client.ts +165 -64
  518. package/src/user/external.ts +1 -1
  519. package/src/user/types.gen.ts +5 -5
  520. package/src/util/retrieve.ts +4 -4
  521. package/src/util/telem.ts +0 -1
  522. package/src/view/client.ts +120 -37
  523. package/src/view/types.gen.ts +8 -11
  524. package/.turbo/turbo-build.log +0 -20
  525. package/.vscode/settings.json +0 -3
  526. package/CONTRIBUTING.md +0 -47
  527. package/dist/client.cjs +0 -118
  528. package/dist/eslint.config.d.ts +0 -4
  529. package/dist/eslint.config.d.ts.map +0 -1
  530. package/dist/src/access/enforce.spec.d.ts +0 -2
  531. package/dist/src/access/enforce.spec.d.ts.map +0 -1
  532. package/dist/src/access/policy/access.spec.d.ts +0 -2
  533. package/dist/src/access/policy/access.spec.d.ts.map +0 -1
  534. package/dist/src/access/role/role.spec.d.ts +0 -2
  535. package/dist/src/access/role/role.spec.d.ts.map +0 -1
  536. package/dist/src/actions/actions.spec.d.ts +0 -2
  537. package/dist/src/actions/actions.spec.d.ts.map +0 -1
  538. package/dist/src/arc/access.spec.d.ts +0 -2
  539. package/dist/src/arc/access.spec.d.ts.map +0 -1
  540. package/dist/src/arc/arc.spec.d.ts +0 -2
  541. package/dist/src/arc/arc.spec.d.ts.map +0 -1
  542. package/dist/src/arc/lsp.spec.d.ts +0 -2
  543. package/dist/src/arc/lsp.spec.d.ts.map +0 -1
  544. package/dist/src/auth/auth.spec.d.ts +0 -2
  545. package/dist/src/auth/auth.spec.d.ts.map +0 -1
  546. package/dist/src/channel/access.spec.d.ts +0 -2
  547. package/dist/src/channel/access.spec.d.ts.map +0 -1
  548. package/dist/src/channel/batchRetriever.spec.d.ts +0 -2
  549. package/dist/src/channel/batchRetriever.spec.d.ts.map +0 -1
  550. package/dist/src/channel/channel.spec.d.ts +0 -2
  551. package/dist/src/channel/channel.spec.d.ts.map +0 -1
  552. package/dist/src/channel/payload.spec.d.ts +0 -2
  553. package/dist/src/channel/payload.spec.d.ts.map +0 -1
  554. package/dist/src/channel/retriever.d.ts +0 -64
  555. package/dist/src/channel/retriever.d.ts.map +0 -1
  556. package/dist/src/cluster/index.d.ts +0 -2
  557. package/dist/src/cluster/index.d.ts.map +0 -1
  558. package/dist/src/cluster/types.gen.d.ts +0 -4
  559. package/dist/src/cluster/types.gen.d.ts.map +0 -1
  560. package/dist/src/connection/checker.d.ts +0 -86
  561. package/dist/src/connection/checker.d.ts.map +0 -1
  562. package/dist/src/connection/connection.spec.d.ts +0 -2
  563. package/dist/src/connection/connection.spec.d.ts.map +0 -1
  564. package/dist/src/connection.spec.d.ts +0 -2
  565. package/dist/src/connection.spec.d.ts.map +0 -1
  566. package/dist/src/control/state.spec.d.ts +0 -2
  567. package/dist/src/control/state.spec.d.ts.map +0 -1
  568. package/dist/src/device/access.spec.d.ts +0 -2
  569. package/dist/src/device/access.spec.d.ts.map +0 -1
  570. package/dist/src/device/device.spec.d.ts +0 -2
  571. package/dist/src/device/device.spec.d.ts.map +0 -1
  572. package/dist/src/device/payload.spec.d.ts +0 -2
  573. package/dist/src/device/payload.spec.d.ts.map +0 -1
  574. package/dist/src/errors.spec.d.ts +0 -2
  575. package/dist/src/errors.spec.d.ts.map +0 -1
  576. package/dist/src/framer/adapter.spec.d.ts +0 -2
  577. package/dist/src/framer/adapter.spec.d.ts.map +0 -1
  578. package/dist/src/framer/client.spec.d.ts +0 -2
  579. package/dist/src/framer/client.spec.d.ts.map +0 -1
  580. package/dist/src/framer/codec.spec.d.ts +0 -2
  581. package/dist/src/framer/codec.spec.d.ts.map +0 -1
  582. package/dist/src/framer/deleter.spec.d.ts +0 -2
  583. package/dist/src/framer/deleter.spec.d.ts.map +0 -1
  584. package/dist/src/framer/frame.spec.d.ts +0 -2
  585. package/dist/src/framer/frame.spec.d.ts.map +0 -1
  586. package/dist/src/framer/iterator.spec.d.ts +0 -2
  587. package/dist/src/framer/iterator.spec.d.ts.map +0 -1
  588. package/dist/src/framer/reader.spec.d.ts +0 -2
  589. package/dist/src/framer/reader.spec.d.ts.map +0 -1
  590. package/dist/src/framer/streamer.spec.d.ts +0 -2
  591. package/dist/src/framer/streamer.spec.d.ts.map +0 -1
  592. package/dist/src/framer/writer.spec.d.ts +0 -2
  593. package/dist/src/framer/writer.spec.d.ts.map +0 -1
  594. package/dist/src/group/access.spec.d.ts +0 -2
  595. package/dist/src/group/access.spec.d.ts.map +0 -1
  596. package/dist/src/group/group.spec.d.ts +0 -2
  597. package/dist/src/group/group.spec.d.ts.map +0 -1
  598. package/dist/src/label/access.spec.d.ts +0 -2
  599. package/dist/src/label/access.spec.d.ts.map +0 -1
  600. package/dist/src/label/label.spec.d.ts +0 -2
  601. package/dist/src/label/label.spec.d.ts.map +0 -1
  602. package/dist/src/lineplot/access.spec.d.ts +0 -2
  603. package/dist/src/lineplot/access.spec.d.ts.map +0 -1
  604. package/dist/src/lineplot/lineplot.spec.d.ts +0 -2
  605. package/dist/src/lineplot/lineplot.spec.d.ts.map +0 -1
  606. package/dist/src/log/access.spec.d.ts +0 -2
  607. package/dist/src/log/access.spec.d.ts.map +0 -1
  608. package/dist/src/log/log.spec.d.ts +0 -2
  609. package/dist/src/log/log.spec.d.ts.map +0 -1
  610. package/dist/src/ontology/ontology.spec.d.ts +0 -2
  611. package/dist/src/ontology/ontology.spec.d.ts.map +0 -1
  612. package/dist/src/rack/access.spec.d.ts +0 -2
  613. package/dist/src/rack/access.spec.d.ts.map +0 -1
  614. package/dist/src/rack/rack.spec.d.ts +0 -2
  615. package/dist/src/rack/rack.spec.d.ts.map +0 -1
  616. package/dist/src/ranger/access.spec.d.ts +0 -2
  617. package/dist/src/ranger/access.spec.d.ts.map +0 -1
  618. package/dist/src/ranger/alias/payload.spec.d.ts +0 -2
  619. package/dist/src/ranger/alias/payload.spec.d.ts.map +0 -1
  620. package/dist/src/ranger/ranger.spec.d.ts +0 -2
  621. package/dist/src/ranger/ranger.spec.d.ts.map +0 -1
  622. package/dist/src/schematic/access.spec.d.ts +0 -2
  623. package/dist/src/schematic/access.spec.d.ts.map +0 -1
  624. package/dist/src/schematic/actions.spec.d.ts +0 -2
  625. package/dist/src/schematic/actions.spec.d.ts.map +0 -1
  626. package/dist/src/schematic/schematic.spec.d.ts +0 -2
  627. package/dist/src/schematic/schematic.spec.d.ts.map +0 -1
  628. package/dist/src/schematic/symbol/access.spec.d.ts +0 -2
  629. package/dist/src/schematic/symbol/access.spec.d.ts.map +0 -1
  630. package/dist/src/schematic/symbol/client.spec.d.ts +0 -2
  631. package/dist/src/schematic/symbol/client.spec.d.ts.map +0 -1
  632. package/dist/src/status/access.spec.d.ts +0 -2
  633. package/dist/src/status/access.spec.d.ts.map +0 -1
  634. package/dist/src/status/status.spec.d.ts +0 -2
  635. package/dist/src/status/status.spec.d.ts.map +0 -1
  636. package/dist/src/table/access.spec.d.ts +0 -2
  637. package/dist/src/table/access.spec.d.ts.map +0 -1
  638. package/dist/src/table/table.spec.d.ts +0 -2
  639. package/dist/src/table/table.spec.d.ts.map +0 -1
  640. package/dist/src/task/access.spec.d.ts +0 -2
  641. package/dist/src/task/access.spec.d.ts.map +0 -1
  642. package/dist/src/task/payload.spec.d.ts +0 -2
  643. package/dist/src/task/payload.spec.d.ts.map +0 -1
  644. package/dist/src/task/task.spec.d.ts +0 -2
  645. package/dist/src/task/task.spec.d.ts.map +0 -1
  646. package/dist/src/user/access.spec.d.ts +0 -2
  647. package/dist/src/user/access.spec.d.ts.map +0 -1
  648. package/dist/src/user/user.spec.d.ts +0 -2
  649. package/dist/src/user/user.spec.d.ts.map +0 -1
  650. package/dist/src/util/retrieve.spec.d.ts +0 -2
  651. package/dist/src/util/retrieve.spec.d.ts.map +0 -1
  652. package/dist/src/view/view.spec.d.ts +0 -2
  653. package/dist/src/view/view.spec.d.ts.map +0 -1
  654. package/dist/src/workspace/access.spec.d.ts +0 -2
  655. package/dist/src/workspace/access.spec.d.ts.map +0 -1
  656. package/dist/src/workspace/client.d.ts +0 -36
  657. package/dist/src/workspace/client.d.ts.map +0 -1
  658. package/dist/src/workspace/external.d.ts.map +0 -1
  659. package/dist/src/workspace/index.d.ts +0 -2
  660. package/dist/src/workspace/index.d.ts.map +0 -1
  661. package/dist/src/workspace/types.gen.d.ts +0 -34
  662. package/dist/src/workspace/types.gen.d.ts.map +0 -1
  663. package/dist/src/workspace/workspace.spec.d.ts +0 -2
  664. package/dist/src/workspace/workspace.spec.d.ts.map +0 -1
  665. package/examples/node/basicReadWrite.js +0 -86
  666. package/examples/node/createChannels.js +0 -50
  667. package/examples/node/createRange.js +0 -67
  668. package/examples/node/package-lock.json +0 -133
  669. package/examples/node/package.json +0 -17
  670. package/examples/node/readLatest.js +0 -76
  671. package/examples/node/seriesAndFrames.js +0 -173
  672. package/examples/node/streamRead.js +0 -50
  673. package/examples/node/streamWrite.js +0 -87
  674. package/src/access/enforce.spec.ts +0 -188
  675. package/src/access/policy/access.spec.ts +0 -147
  676. package/src/access/role/role.spec.ts +0 -95
  677. package/src/actions/actions.spec.ts +0 -229
  678. package/src/arc/access.spec.ts +0 -149
  679. package/src/arc/arc.spec.ts +0 -44
  680. package/src/arc/lsp.spec.ts +0 -717
  681. package/src/auth/auth.spec.ts +0 -101
  682. package/src/channel/access.spec.ts +0 -116
  683. package/src/channel/batchRetriever.spec.ts +0 -115
  684. package/src/channel/channel.spec.ts +0 -352
  685. package/src/channel/payload.spec.ts +0 -117
  686. package/src/channel/retriever.ts +0 -252
  687. package/src/connection/checker.ts +0 -203
  688. package/src/connection/connection.spec.ts +0 -152
  689. package/src/connection.spec.ts +0 -145
  690. package/src/control/state.spec.ts +0 -22
  691. package/src/device/access.spec.ts +0 -159
  692. package/src/device/device.spec.ts +0 -461
  693. package/src/device/payload.spec.ts +0 -142
  694. package/src/errors.spec.ts +0 -71
  695. package/src/framer/adapter.spec.ts +0 -620
  696. package/src/framer/client.spec.ts +0 -180
  697. package/src/framer/codec.spec.ts +0 -383
  698. package/src/framer/deleter.spec.ts +0 -103
  699. package/src/framer/frame.spec.ts +0 -973
  700. package/src/framer/iterator.spec.ts +0 -169
  701. package/src/framer/reader.spec.ts +0 -865
  702. package/src/framer/streamer.spec.ts +0 -871
  703. package/src/framer/writer.spec.ts +0 -486
  704. package/src/group/access.spec.ts +0 -77
  705. package/src/group/group.spec.ts +0 -65
  706. package/src/label/access.spec.ts +0 -109
  707. package/src/label/label.spec.ts +0 -83
  708. package/src/lineplot/access.spec.ts +0 -134
  709. package/src/lineplot/lineplot.spec.ts +0 -120
  710. package/src/log/access.spec.ts +0 -132
  711. package/src/log/log.spec.ts +0 -106
  712. package/src/ontology/ontology.spec.ts +0 -521
  713. package/src/rack/access.spec.ts +0 -102
  714. package/src/rack/rack.spec.ts +0 -171
  715. package/src/ranger/access.spec.ts +0 -115
  716. package/src/ranger/alias/payload.spec.ts +0 -52
  717. package/src/ranger/ranger.spec.ts +0 -343
  718. package/src/schematic/access.spec.ts +0 -134
  719. package/src/schematic/actions.spec.ts +0 -699
  720. package/src/schematic/schematic.spec.ts +0 -340
  721. package/src/schematic/symbol/access.spec.ts +0 -172
  722. package/src/schematic/symbol/client.spec.ts +0 -160
  723. package/src/status/access.spec.ts +0 -129
  724. package/src/status/status.spec.ts +0 -448
  725. package/src/table/access.spec.ts +0 -128
  726. package/src/table/table.spec.ts +0 -651
  727. package/src/task/access.spec.ts +0 -131
  728. package/src/task/payload.spec.ts +0 -113
  729. package/src/task/task.spec.ts +0 -657
  730. package/src/user/access.spec.ts +0 -107
  731. package/src/user/user.spec.ts +0 -290
  732. package/src/util/retrieve.spec.ts +0 -49
  733. package/src/view/view.spec.ts +0 -165
  734. package/src/workspace/access.spec.ts +0 -108
  735. package/src/workspace/client.ts +0 -112
  736. package/src/workspace/types.gen.ts +0 -46
  737. package/src/workspace/workspace.spec.ts +0 -111
  738. package/tsconfig.json +0 -5
  739. package/tsconfig.vite.json +0 -4
  740. package/vite.config.ts +0 -29
  741. /package/dist/src/{workspace → project}/external.d.ts +0 -0
@@ -8,98 +8,270 @@
8
8
  // included in the file licenses/APL.txt.
9
9
 
10
10
  import { type UnaryClient } from "@synnaxlabs/freighter";
11
- import { array, caseconv, record } from "@synnaxlabs/x";
11
+ import { array, type destructor, zod } from "@synnaxlabs/x";
12
12
  import { z } from "zod";
13
13
 
14
+ import { actions } from "@/actions";
15
+ import { createOf, kindOf, reduceAll } from "@/lineplot/actions";
16
+ import {
17
+ type Action,
18
+ dispatchReqZ,
19
+ rename as renameAction,
20
+ scopedActionZ,
21
+ } from "@/lineplot/actions.gen";
14
22
  import {
15
23
  type Key,
16
24
  keyZ,
17
25
  type LinePlot,
18
26
  linePlotZ,
19
27
  type New,
20
- newZ,
28
+ ontologyID,
21
29
  } from "@/lineplot/types.gen";
22
- import { checkForMultipleOrNoResults } from "@/util/retrieve";
23
- import { workspace } from "@/workspace";
30
+ import { type ontology } from "@/ontology";
31
+ import { project } from "@/project";
32
+ import { query } from "@/query";
24
33
 
25
- const renameReqZ = z.object({ key: keyZ, name: z.string() });
34
+ export const SET_CHANNEL_NAME = "sy_lineplot_set";
35
+ export const DELETE_CHANNEL_NAME = "sy_lineplot_delete";
26
36
 
27
- const setDataReqZ = z.object({
28
- key: keyZ,
29
- data: caseconv.preserveCase(record.unknownZ()),
30
- });
31
37
  const deleteReqZ = z.object({ keys: keyZ.array() });
32
38
 
33
- const retrieveReqZ = z.object({ keys: keyZ.array() });
34
- const singleRetrieveArgsZ = z
39
+ const retrieveReqZ = z.object({
40
+ keys: keyZ.array(),
41
+ ignoreNotFoundError: z.boolean().optional(),
42
+ });
43
+ const retrieveMultiParamsZ = retrieveReqZ.or(query.keyListZ(keyZ));
44
+ const singleRetrieveParamsZ = z
35
45
  .object({ key: keyZ })
36
46
  .transform(({ key }) => ({ keys: [key] }));
37
47
 
38
- export const retrieveArgsZ = z.union([singleRetrieveArgsZ, retrieveReqZ]);
39
- export type RetrieveArgs = z.input<typeof retrieveArgsZ>;
40
- export type RetrieveSingleParams = z.input<typeof singleRetrieveArgsZ>;
48
+ export const retrieveParamsZ = z.union([singleRetrieveParamsZ, retrieveReqZ]);
49
+ export type RetrieveParams = z.input<typeof retrieveParamsZ>;
50
+ export type RetrieveSingleParams = z.input<typeof singleRetrieveParamsZ>;
41
51
  export type RetrieveMultipleParams = z.input<typeof retrieveReqZ>;
42
52
 
43
- const retrieveResZ = z.object({ linePlots: array.nullishToEmpty(linePlotZ) });
53
+ interface RetrieveRequest extends z.infer<typeof retrieveReqZ> {}
44
54
 
45
- const createReqZ = z.object({ workspace: workspace.keyZ, linePlots: newZ.array() });
55
+ const retrieveResZ = z.object({ linePlots: linePlotZ.array().default(() => []) });
56
+
57
+ const createReqZ = z.object({ project: project.keyZ, linePlots: linePlotZ.array() });
46
58
  const createResZ = z.object({ linePlots: linePlotZ.array() });
47
59
 
48
60
  const emptyResZ = z.object({});
49
61
 
50
- export class Client {
51
- private readonly client: UnaryClient;
62
+ /**
63
+ * Client-side matching for a request: exact for the requested key set, the
64
+ * only field a request carries.
65
+ */
66
+ const requestFilter = (req: RetrieveRequest): ((p: LinePlot) => boolean) => {
67
+ const keySet = new Set(req.keys);
68
+ return (p) => keySet.has(p.key);
69
+ };
52
70
 
53
- constructor(client: UnaryClient) {
54
- this.client = client;
71
+ export interface ClientConfig {
72
+ unary: UnaryClient;
73
+ cache: query.Cache;
74
+ ontology: ontology.Client;
75
+ }
76
+
77
+ export class Client extends query.Retriever<
78
+ typeof retrieveMultiParamsZ,
79
+ Key,
80
+ LinePlot
81
+ > {
82
+ private readonly cfg: ClientConfig;
83
+ private readonly store: query.Table<Key, LinePlot>;
84
+ private readonly dispatcher: actions.Controller<Key, LinePlot, Action>;
85
+
86
+ constructor(cfg: ClientConfig) {
87
+ const { cache } = cfg;
88
+ // Dispatch mutates documents server-side, so fetched copies never clobber
89
+ // a doc holding locally replayed edits: the table hydrates if-absent.
90
+ const store = cache.createTable<Key, LinePlot>({
91
+ name: "line plots",
92
+ hydrate: "if-absent",
93
+ fetch: async (keys) =>
94
+ await this.execRetrieve({ keys, ignoreNotFoundError: true }),
95
+ listen: [query.createDeleteListener(DELETE_CHANNEL_NAME, keyZ)],
96
+ });
97
+ const dispatcher = new actions.Controller<Key, LinePlot, Action>({
98
+ store,
99
+ onError: cache.onError,
100
+ reduce: reduceAll,
101
+ kindOf,
102
+ createOf,
103
+ });
104
+ cache.listen(dispatcher.listener(SET_CHANNEL_NAME, scopedActionZ));
105
+ super(cache, {
106
+ name: "line plot",
107
+ table: store,
108
+ request: {
109
+ schema: retrieveMultiParamsZ,
110
+ fetch: async (req) => await this.execRetrieve(req),
111
+ matches: (plot, req) => requestFilter(req)(plot),
112
+ },
113
+ });
114
+ this.cfg = cfg;
115
+ this.store = store;
116
+ this.dispatcher = dispatcher;
55
117
  }
56
118
 
57
- async create(workspace: workspace.Key, linePlot: New): Promise<LinePlot>;
58
- async create(workspace: workspace.Key, linePlots: New[]): Promise<LinePlot[]>;
59
119
  async create(
60
- workspace: workspace.Key,
120
+ project: project.Key,
121
+ linePlot: New,
122
+ opts?: query.WriteOptions<LinePlot[]>,
123
+ ): Promise<LinePlot>;
124
+ async create(
125
+ project: project.Key,
126
+ linePlots: New[],
127
+ opts?: query.WriteOptions<LinePlot[]>,
128
+ ): Promise<LinePlot[]>;
129
+ async create(
130
+ project: project.Key,
61
131
  linePlots: New | New[],
132
+ opts: query.WriteOptions<LinePlot[]> = {},
62
133
  ): Promise<LinePlot | LinePlot[]> {
63
134
  const isMany = Array.isArray(linePlots);
64
- const res = await this.client.send(
65
- "/lineplot/create",
66
- { workspace, linePlots: array.toArray(linePlots) },
67
- createReqZ,
68
- createResZ,
69
- );
135
+ const optimistic = array
136
+ .toArray(linePlots)
137
+ .map((p) => zod.parse(linePlotZ, p, { label: "line plot" }));
138
+ const res = await query.optimistic({
139
+ rollbacks: [this.store.set(optimistic)],
140
+ onOptimistic: () => opts.onOptimistic?.(optimistic),
141
+ commit: async () =>
142
+ await this.cfg.unary.send(
143
+ "/lineplot/create",
144
+ { project, linePlots: optimistic },
145
+ createReqZ,
146
+ createResZ,
147
+ ),
148
+ });
149
+ this.store.set(res.linePlots);
70
150
  return isMany ? res.linePlots : res.linePlots[0];
71
151
  }
72
152
 
73
- async rename(key: Key, name: string): Promise<void> {
74
- await this.client.send("/lineplot/rename", { key, name }, renameReqZ, emptyResZ);
153
+ async rename(key: Key, name: string, opts: query.WriteOptions = {}): Promise<void> {
154
+ const rename = () => [
155
+ query.partialUpdate(this.store, key, { name }),
156
+ this.cfg.ontology.cache.renameResource(ontologyID(key), name),
157
+ ];
158
+ await query.optimistic({
159
+ rollbacks: rename(),
160
+ onOptimistic: opts.onOptimistic,
161
+ commit: async () => await this.sendDispatch(key, "", [renameAction({ name })]),
162
+ });
163
+ rename();
75
164
  }
76
165
 
77
- async setData(key: Key, data: record.Unknown): Promise<void> {
78
- await this.client.send("/lineplot/set-data", { key, data }, setDataReqZ, emptyResZ);
166
+ /**
167
+ * Applies actions to the cached line plot and sends them to the server, recording an
168
+ * undoable entry. Returns false without side effects when the line plot isn't cached.
169
+ * Rolls back the local apply and rethrows on send failure.
170
+ */
171
+ async dispatch(
172
+ key: Key,
173
+ actions: Action | Action[],
174
+ opts: actions.Options<LinePlot, Action> = {},
175
+ ): Promise<boolean> {
176
+ return await this.dispatcher.dispatch(
177
+ key,
178
+ array.toArray(actions),
179
+ this.dispatchSender(key),
180
+ opts,
181
+ );
79
182
  }
80
183
 
81
- async retrieve(args: RetrieveSingleParams): Promise<LinePlot>;
82
- async retrieve(args: RetrieveMultipleParams): Promise<LinePlot[]>;
83
- async retrieve(
84
- args: RetrieveSingleParams | RetrieveMultipleParams,
85
- ): Promise<LinePlot | LinePlot[]> {
86
- const isSingle = singleRetrieveArgsZ.safeParse(args).success;
87
- const res = await this.client.send(
88
- "/lineplot/retrieve",
89
- args,
90
- retrieveArgsZ,
91
- retrieveResZ,
92
- );
93
- checkForMultipleOrNoResults("LinePlot", args, res.linePlots, isSingle);
94
- return isSingle ? res.linePlots[0] : res.linePlots;
184
+ /**
185
+ * Reverts the line plot's most recent undoable entry. Returns false when
186
+ * nothing is undoable.
187
+ */
188
+ async undo(key: Key): Promise<boolean> {
189
+ return await this.dispatcher.undo(key, this.dispatchSender(key));
190
+ }
191
+
192
+ /**
193
+ * Re-applies the line plot's most recently undone entry. Returns false when
194
+ * nothing is redoable.
195
+ */
196
+ async redo(key: Key): Promise<boolean> {
197
+ return await this.dispatcher.redo(key, this.dispatchSender(key));
198
+ }
199
+
200
+ /** Whether the line plot has a live undo entry. */
201
+ hasUndo(key: Key): boolean {
202
+ return this.dispatcher.hasUndo(key);
203
+ }
204
+
205
+ /** Whether the line plot has a live redo entry. */
206
+ hasRedo(key: Key): boolean {
207
+ return this.dispatcher.hasRedo(key);
208
+ }
209
+
210
+ /**
211
+ * Subscribes to changes in the line plot's undo/redo stacks. Returns a
212
+ * destructor that unsubscribes.
213
+ */
214
+ onUndoStateChange(callback: () => void, key?: Key): destructor.Destructor {
215
+ return this.dispatcher.onUndoStateChange(callback, key);
216
+ }
217
+
218
+ /** Stages actions committed atomically as one undoable entry. */
219
+ beginTransaction(key: Key, kind?: string): actions.Transaction<Action> {
220
+ return this.dispatcher.transaction(key, this.dispatchSender(key), kind);
221
+ }
222
+
223
+ private dispatchSender(key: Key): actions.SendDispatch<Action> {
224
+ return async (actions, dispatchKey) =>
225
+ await this.sendDispatch(key, dispatchKey, actions);
95
226
  }
96
227
 
97
- async delete(keys: Key | Key[]): Promise<void> {
98
- await this.client.send(
99
- "/lineplot/delete",
100
- { keys: array.toArray(keys) },
101
- deleteReqZ,
228
+ private async sendDispatch(
229
+ key: Key,
230
+ dispatchKey: string,
231
+ actions: Action[],
232
+ ): Promise<void> {
233
+ await this.cfg.unary.send(
234
+ "/lineplot/dispatch",
235
+ { key, dispatchKey, actions },
236
+ dispatchReqZ,
102
237
  emptyResZ,
103
238
  );
104
239
  }
240
+
241
+ async delete(keys: Key | Key[], opts: query.WriteOptions = {}): Promise<void> {
242
+ const keysArr = array.toArray(keys);
243
+ const drop = () => [
244
+ this.cfg.ontology.cache.deleteRelationships(ontologyID(keysArr)),
245
+ this.store.delete(keysArr),
246
+ ];
247
+ await query.optimistic({
248
+ rollbacks: drop(),
249
+ onOptimistic: opts.onOptimistic,
250
+ commit: async () =>
251
+ await this.cfg.unary.send(
252
+ "/lineplot/delete",
253
+ { keys: keysArr },
254
+ deleteReqZ,
255
+ emptyResZ,
256
+ ),
257
+ });
258
+ drop();
259
+ }
260
+
261
+ /** Subscribes to every line plot delete delivered to the cache. */
262
+ onDelete(handler: (key: Key) => void): destructor.Destructor {
263
+ return this.store.subscribe((event) => {
264
+ if (event.variant === "delete") handler(event.key);
265
+ });
266
+ }
267
+
268
+ private async execRetrieve(params: RetrieveMultipleParams): Promise<LinePlot[]> {
269
+ const res = await this.cfg.unary.send(
270
+ "/lineplot/retrieve",
271
+ params,
272
+ retrieveReqZ,
273
+ retrieveResZ,
274
+ );
275
+ return res.linePlots;
276
+ }
105
277
  }
@@ -7,5 +7,8 @@
7
7
  // License, use of this software will be governed by the Apache License, Version 2.0,
8
8
  // included in the file licenses/APL.txt.
9
9
 
10
+ export * from "@/lineplot/actions";
11
+ export * from "@/lineplot/actions.gen";
10
12
  export * from "@/lineplot/client";
13
+ export * from "@/lineplot/line";
11
14
  export * from "@/lineplot/types.gen";
@@ -0,0 +1,80 @@
1
+ // Copyright 2026 Synnax Labs, Inc.
2
+ //
3
+ // Use of this software is governed by the Business Source License included in the file
4
+ // licenses/BSL.txt.
5
+ //
6
+ // As of the Change Date specified in that file, in accordance with the Business Source
7
+ // License, use of this software will be governed by the Apache License, Version 2.0,
8
+ // included in the file licenses/APL.txt.
9
+
10
+ import { type channel } from "@/channel";
11
+ import {
12
+ type Channels,
13
+ type Line,
14
+ lineZ,
15
+ type Ranges,
16
+ X_AXIS_KEYS,
17
+ type XAxisKey,
18
+ Y_AXIS_KEYS,
19
+ type YAxisKey,
20
+ } from "@/lineplot/types.gen";
21
+
22
+ // LineKeyParts is the structured identity of a plotted line: a y-channel on a y-axis
23
+ // plotted against an x-channel/x-axis over a range. It is the decoded form of Line.key.
24
+ export interface LineKeyParts {
25
+ yAxis: YAxisKey;
26
+ xAxis: XAxisKey;
27
+ range: string;
28
+ xChannel: channel.Key;
29
+ yChannel: channel.Key;
30
+ }
31
+
32
+ const SEPARATOR = "---";
33
+
34
+ // lineKey encodes the identity of a line into the stable string stored as
35
+ // Line.key. This is the only place the key format is defined.
36
+ export const lineKey = (parts: LineKeyParts): string =>
37
+ [parts.yAxis, parts.xAxis, parts.range, parts.xChannel, parts.yChannel].join(
38
+ SEPARATOR,
39
+ );
40
+
41
+ export const parseLineKey = (key: string): LineKeyParts => {
42
+ const [yAxis, xAxis, range, xChannel, yChannel] = key.split(SEPARATOR);
43
+ return {
44
+ yAxis: yAxis as YAxisKey,
45
+ xAxis: xAxis as XAxisKey,
46
+ range,
47
+ xChannel: Number(xChannel),
48
+ yChannel: Number(yChannel),
49
+ };
50
+ };
51
+
52
+ // reconcileLines rebuilds the complete set of lines implied by the channel and
53
+ // range bindings: one line per (x-axis, range, y-axis, y-channel) combination.
54
+ // Existing lines are preserved by key so user styling survives, missing ones
55
+ // are created with default styling, and lines whose combination no longer
56
+ // exists are returned in `dropped` (so callers can restore them on undo).
57
+ export const reconcileLines = (
58
+ channels: Channels,
59
+ ranges: Ranges,
60
+ existing: Line[],
61
+ ): { lines: Line[]; dropped: Line[] } => {
62
+ const byKey = new Map(existing.map((l) => [l.key, l]));
63
+ const kept = new Set<string>();
64
+ const lines: Line[] = [];
65
+ for (const xAxis of X_AXIS_KEYS) {
66
+ const xChannel = channels[xAxis];
67
+ for (const range of ranges[xAxis])
68
+ for (const yAxis of Y_AXIS_KEYS)
69
+ for (const yChannel of channels[yAxis]) {
70
+ const key = lineKey({ yAxis, xAxis, range, xChannel, yChannel });
71
+ if (kept.has(key)) continue;
72
+ kept.add(key);
73
+ // A new line takes Oracle schema defaults (stroke width, downsample);
74
+ // label and color stay unset so they resolve at render time.
75
+ lines.push(byKey.get(key) ?? lineZ.parse({ key }));
76
+ }
77
+ }
78
+ const dropped = existing.filter((l) => !kept.has(l.key));
79
+ return { lines, dropped };
80
+ };
@@ -9,34 +9,247 @@
9
9
 
10
10
  // Code generated by Oracle. DO NOT EDIT.
11
11
 
12
- import { caseconv, record } from "@synnaxlabs/x";
12
+ import { color, spatial, text, uuid } from "@synnaxlabs/x";
13
13
  import { z } from "zod";
14
14
 
15
+ import { channel } from "@/channel";
15
16
  import { ontology } from "@/ontology";
16
17
 
18
+ export const AXIS_KEYS = ["x1", "x2", "y1", "y2", "y3", "y4"] as const;
19
+ export const axisKeyZ = z.enum(AXIS_KEYS);
20
+ export type AxisKey = z.infer<typeof axisKeyZ>;
21
+
22
+ export const TICK_TYPES = ["linear", "time"] as const;
23
+ export const tickTypeZ = z.enum(TICK_TYPES);
24
+ export type TickType = z.infer<typeof tickTypeZ>;
25
+
26
+ export const DOWNSAMPLE_MODES = ["average", "decimate"] as const;
27
+ export const downsampleModeZ = z.enum(DOWNSAMPLE_MODES);
28
+ export type DownsampleMode = z.infer<typeof downsampleModeZ>;
29
+
30
+ export const X_AXIS_KEYS = ["x1", "x2"] as const;
31
+ export const xAxisKeyZ = z.enum(X_AXIS_KEYS);
32
+ export type XAxisKey = z.infer<typeof xAxisKeyZ>;
33
+
34
+ export const Y_AXIS_KEYS = ["y1", "y2", "y3", "y4"] as const;
35
+ export const yAxisKeyZ = z.enum(Y_AXIS_KEYS);
36
+ export type YAxisKey = z.infer<typeof yAxisKeyZ>;
37
+
38
+ /** Title is the plot title configuration. */
39
+ export const titleZ = z.object({
40
+ /** level is the typography level of the title text. */
41
+ level: text.levelZ.default("h4"),
42
+ /** visible is whether the title is shown above the plot. */
43
+ visible: z.boolean().default(false),
44
+ });
45
+ export interface Title extends z.infer<typeof titleZ> {}
46
+
47
+ /** Legend is the plot legend configuration. */
48
+ export const legendZ = z.object({
49
+ /**
50
+ * hidden is whether the legend is hidden. When false (the default), the legend is
51
+ * shown.
52
+ */
53
+ hidden: z.boolean().default(false),
54
+ /** position is the anchor position of the legend within the plot container. */
55
+ position: spatial.stickyXYZ.prefault({
56
+ x: 50,
57
+ y: 50,
58
+ root: { x: "left", y: "top" },
59
+ units: { x: "px", y: "px" },
60
+ }),
61
+ });
62
+ export interface Legend extends z.infer<typeof legendZ> {}
63
+
64
+ /**
65
+ * Channels binds channel keys to each axis. x1 and x2 are single-channel; y1 through y4
66
+ * carry zero or more channels each.
67
+ */
68
+ export const channelsZ = z.object({
69
+ /** x1 is the channel rendered on the x1 axis. */
70
+ x1: channel.keyZ.default(0),
71
+ /** x2 is the channel rendered on the x2 axis. */
72
+ x2: channel.keyZ.default(0),
73
+ /** y1 are the channels rendered on the y1 axis. */
74
+ y1: channel.keyZ.array().default(() => []),
75
+ /** y2 are the channels rendered on the y2 axis. */
76
+ y2: channel.keyZ.array().default(() => []),
77
+ /** y3 are the channels rendered on the y3 axis. */
78
+ y3: channel.keyZ.array().default(() => []),
79
+ /** y4 are the channels rendered on the y4 axis. */
80
+ y4: channel.keyZ.array().default(() => []),
81
+ });
82
+ export interface Channels extends z.infer<typeof channelsZ> {}
83
+
84
+ /** Ranges binds range keys to each x-axis. */
85
+ export const rangesZ = z.object({
86
+ /**
87
+ * x1 are the range keys plotted against the x1 axis. Range keys are opaque strings
88
+ * rather than UUIDs because the console layers synthetic rolling-window ranges (e.g.
89
+ * "recent", "rolling1m") alongside persisted ranges; the server stores whatever the
90
+ * client sends.
91
+ */
92
+ x1: z
93
+ .string()
94
+ .array()
95
+ .default(() => []),
96
+ /** x2 are the range keys plotted against the x2 axis. */
97
+ x2: z
98
+ .string()
99
+ .array()
100
+ .default(() => []),
101
+ });
102
+ export interface Ranges extends z.infer<typeof rangesZ> {}
103
+
104
+ /**
105
+ * ManualBounds controls whether an axis uses a manually-set bound on each side
106
+ * independently. When a side is false (the default), the corresponding entry in
107
+ * Axis.bounds is recomputed locally from the rendered data window and never broadcast
108
+ * to the server; when true, Axis.bounds holds the user-set value.
109
+ */
110
+ export const manualBoundsZ = z.object({
111
+ /**
112
+ * lower is whether the lower bound is set manually rather than computed from data.
113
+ */
114
+ lower: z.boolean().default(false),
115
+ /**
116
+ * upper is whether the upper bound is set manually rather than computed from data.
117
+ */
118
+ upper: z.boolean().default(false),
119
+ });
120
+ export interface ManualBounds extends z.infer<typeof manualBoundsZ> {}
121
+
122
+ /** Line is the per-line styling and downsampling configuration. */
123
+ export const lineZ = z.object({
124
+ /**
125
+ * key is the line identifier derived from its channel and range assignment. Format is
126
+ * internal to the client and stable across re-renders so styling overrides persist.
127
+ */
128
+ key: z.string(),
129
+ /**
130
+ * label is the user-specified line label. Null means derive from the channel name at
131
+ * render time; non-null is an override.
132
+ */
133
+ label: z.string().optional(),
134
+ /**
135
+ * color is the line color. When null, the Console assigns one from the visualization
136
+ * palette at render time.
137
+ */
138
+ color: color.colorZ.optional(),
139
+ /** strokeWidth is the line stroke width in pixels. */
140
+ strokeWidth: z.number().default(2),
141
+ /**
142
+ * downsample is the downsample factor applied before rendering. 1 means render every
143
+ * sample; higher values render every Nth sample.
144
+ */
145
+ downsample: z.uint32().default(1),
146
+ /** downsampleMode selects how the downsample factor is applied. */
147
+ downsampleMode: downsampleModeZ.default("decimate"),
148
+ });
149
+ export interface Line extends z.infer<typeof lineZ> {}
150
+
151
+ /** Rule is a horizontal or vertical annotation line drawn over the plot. */
152
+ export const ruleZ = z.object({
153
+ /** key is the unique rule identifier within the line plot. */
154
+ key: z.string(),
155
+ /** label is the human-readable label rendered alongside the rule. */
156
+ label: z.string(),
157
+ /**
158
+ * color is the display color of the rule. When null, the Console assigns a default at
159
+ * render time.
160
+ */
161
+ color: color.colorZ.optional(),
162
+ /** axis is the axis the rule is anchored to. */
163
+ axis: axisKeyZ,
164
+ /** lineWidth is the rule line width in pixels. */
165
+ lineWidth: z.number().default(1),
166
+ /** lineDash is the dash length in pixels; 0 renders a solid line. */
167
+ lineDash: z.number().default(0),
168
+ /** units is the unit label displayed next to the position value. */
169
+ units: z.string().default(""),
170
+ /** position is the value-space position of the rule along its anchored axis. */
171
+ position: z.number(),
172
+ });
173
+ export interface Rule extends z.infer<typeof ruleZ> {}
174
+
17
175
  export const keyZ = z.uuid();
18
176
  export type Key = z.infer<typeof keyZ>;
19
177
 
178
+ /** Axis is the configuration for a single plot axis. */
179
+ export const axisZ = z.object({
180
+ /** key identifies which of the six axes this configuration applies to. */
181
+ key: axisKeyZ,
182
+ /** label is the human-readable label rendered along the axis. */
183
+ label: z.string().default(""),
184
+ /** labelDirection is the orientation in which the label text is laid out. */
185
+ labelDirection: spatial.directionZ.default("x"),
186
+ /** labelLevel is the typography level of the label. */
187
+ labelLevel: text.levelZ.default("small"),
188
+ /**
189
+ * bounds is the value-space window of the axis. When the matching entry in
190
+ * manual_bounds is false the field is overwritten locally on every render; otherwise
191
+ * it is the user-set fixed bound.
192
+ */
193
+ bounds: spatial.boundsZ().prefault({ lower: 0, upper: 0 }),
194
+ /** manualBounds controls per-edge manual bound override. */
195
+ manualBounds: manualBoundsZ.prefault({}),
196
+ /** tickSpacing is the target pixel distance between adjacent tick marks. */
197
+ tickSpacing: z.number().default(75),
198
+ /**
199
+ * type selects the tick label style. Null means default (linear). X-axes typically
200
+ * carry "time" when bound to a timestamp channel.
201
+ */
202
+ type: tickTypeZ.optional(),
203
+ });
204
+ export interface Axis extends z.infer<typeof axisZ> {}
205
+
206
+ /** Axes bundles configuration for all six fixed plot axes. */
207
+ export const axesZ = z.object({
208
+ /** x1 is the x1 axis configuration. */
209
+ x1: axisZ.prefault({ key: "x1" }),
210
+ /** x2 is the x2 axis configuration. */
211
+ x2: axisZ.prefault({ key: "x2" }),
212
+ /** y1 is the y1 axis configuration. */
213
+ y1: axisZ.prefault({ key: "y1", labelDirection: "y" }),
214
+ /** y2 is the y2 axis configuration. */
215
+ y2: axisZ.prefault({ key: "y2", labelDirection: "y" }),
216
+ /** y3 is the y3 axis configuration. */
217
+ y3: axisZ.prefault({ key: "y3", labelDirection: "y" }),
218
+ /** y4 is the y4 axis configuration. */
219
+ y4: axisZ.prefault({ key: "y4", labelDirection: "y" }),
220
+ });
221
+ export interface Axes extends z.infer<typeof axesZ> {}
222
+
20
223
  /**
21
- * LinePlot is a time-series visualization component for plotting telemetry data.
22
- * Line plots support multiple channels, real-time streaming, and historical
23
- * data display with zoom and pan capabilities.
224
+ * LinePlot is a time-series visualization component for plotting telemetry data. Line
225
+ * plots support multiple channels, real-time streaming, and historical data display
226
+ * with zoom and pan capabilities.
24
227
  */
25
228
  export const linePlotZ = z.object({
26
229
  /** key is the unique identifier for this line plot. */
27
- key: keyZ,
230
+ key: keyZ.default(uuid.create),
28
231
  /** name is a human-readable name for the line plot. */
29
- name: z.string(),
232
+ name: z.string().min(1, "name is required"),
233
+ /** title is the plot title configuration. */
234
+ title: titleZ.prefault({}),
235
+ /** legend is the plot legend configuration. */
236
+ legend: legendZ.prefault({}),
237
+ /** channels binds channel keys to each axis. */
238
+ channels: channelsZ.prefault({}),
239
+ /** ranges binds range keys to each x-axis. */
240
+ ranges: rangesZ.prefault({}),
241
+ /** axes bundles per-axis configuration. */
242
+ axes: axesZ.prefault({}),
30
243
  /**
31
- * data is the line plot configuration including channel references, axis
32
- * settings, and display options.
244
+ * lines holds per-line styling and downsampling configuration. Each entry corresponds
245
+ * to one channel and range combination produced by the channels and ranges bindings.
33
246
  */
34
- data: caseconv.preserveCase(record.nullishToEmpty()),
247
+ lines: lineZ.array().default(() => []),
248
+ /** rules holds annotation rules drawn over the plot. */
249
+ rules: ruleZ.array().default(() => []),
35
250
  });
36
251
  export interface LinePlot extends z.infer<typeof linePlotZ> {}
37
-
38
- export const newZ = linePlotZ.partial({ key: true });
39
- export interface New extends z.input<typeof newZ> {}
252
+ export interface New extends z.input<typeof linePlotZ> {}
40
253
 
41
254
  export const ontologyID = ontology.createIDFactory<Key>("lineplot");
42
255
  export const TYPE_ONTOLOGY_ID = ontologyID("");