@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.
- package/dist/client-B08VDLSA.js +14463 -0
- package/dist/client-B08VDLSA.js.map +1 -0
- package/dist/client.js +1128 -14876
- package/dist/client.js.map +1 -0
- package/dist/src/access/client.d.ts +10 -1
- package/dist/src/access/client.d.ts.map +1 -1
- package/dist/src/access/enforce.d.ts.map +1 -1
- package/dist/src/access/external.d.ts +1 -0
- package/dist/src/access/external.d.ts.map +1 -1
- package/dist/src/access/granted.d.ts +39 -0
- package/dist/src/access/granted.d.ts.map +1 -0
- package/dist/src/access/policy/client.d.ts +136 -147
- package/dist/src/access/policy/client.d.ts.map +1 -1
- package/dist/src/access/policy/types.gen.d.ts +15 -68
- package/dist/src/access/policy/types.gen.d.ts.map +1 -1
- package/dist/src/access/role/client.d.ts +77 -58
- package/dist/src/access/role/client.d.ts.map +1 -1
- package/dist/src/access/role/types.gen.d.ts +8 -14
- package/dist/src/access/role/types.gen.d.ts.map +1 -1
- package/dist/src/actions/actions.d.ts +5 -6
- package/dist/src/actions/actions.d.ts.map +1 -1
- package/dist/src/actions/controller.d.ts +194 -0
- package/dist/src/actions/controller.d.ts.map +1 -0
- package/dist/src/actions/external.d.ts +1 -0
- package/dist/src/actions/external.d.ts.map +1 -1
- package/dist/src/arc/actions.d.ts +575 -0
- package/dist/src/arc/actions.d.ts.map +1 -0
- package/dist/src/arc/actions.gen.d.ts +1439 -0
- package/dist/src/arc/actions.gen.d.ts.map +1 -0
- package/dist/src/arc/client.d.ts +97 -13
- package/dist/src/arc/client.d.ts.map +1 -1
- package/dist/src/arc/compiler/types.gen.d.ts +3 -3
- package/dist/src/arc/compiler/types.gen.d.ts.map +1 -1
- package/dist/src/arc/external.d.ts +2 -0
- package/dist/src/arc/external.d.ts.map +1 -1
- package/dist/src/arc/graph/types.gen.d.ts +45 -597
- package/dist/src/arc/graph/types.gen.d.ts.map +1 -1
- package/dist/src/arc/ir/index.d.ts +1 -1
- package/dist/src/arc/ir/index.d.ts.map +1 -1
- package/dist/src/arc/ir/ir.d.ts +2 -0
- package/dist/src/arc/ir/ir.d.ts.map +1 -0
- package/dist/src/arc/ir/types.gen.d.ts +58 -2807
- package/dist/src/arc/ir/types.gen.d.ts.map +1 -1
- package/dist/src/arc/module/types.gen.d.ts +18 -1090
- package/dist/src/arc/module/types.gen.d.ts.map +1 -1
- package/dist/src/arc/program/types.gen.d.ts +18 -1090
- package/dist/src/arc/program/types.gen.d.ts.map +1 -1
- package/dist/src/arc/text/types.gen.d.ts +54 -1
- package/dist/src/arc/text/types.gen.d.ts.map +1 -1
- package/dist/src/arc/types/types.gen.d.ts +35 -153
- package/dist/src/arc/types/types.gen.d.ts.map +1 -1
- package/dist/src/arc/types.gen.d.ts +98 -2278
- package/dist/src/arc/types.gen.d.ts.map +1 -1
- package/dist/src/auth/auth.d.ts +14 -2
- package/dist/src/auth/auth.d.ts.map +1 -1
- package/dist/src/channel/client.d.ts +113 -75
- package/dist/src/channel/client.d.ts.map +1 -1
- package/dist/src/channel/external.d.ts +0 -1
- package/dist/src/channel/external.d.ts.map +1 -1
- package/dist/src/channel/payload.d.ts +65 -56
- package/dist/src/channel/payload.d.ts.map +1 -1
- package/dist/src/channel/types.gen.d.ts +26 -73
- package/dist/src/channel/types.gen.d.ts.map +1 -1
- package/dist/src/channel/writer.d.ts +1 -3
- package/dist/src/channel/writer.d.ts.map +1 -1
- package/dist/src/client.d.ts +55 -27
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/connection/client.d.ts +146 -0
- package/dist/src/connection/client.d.ts.map +1 -0
- package/dist/src/connection/external.d.ts +3 -0
- package/dist/src/connection/external.d.ts.map +1 -0
- package/dist/src/connection/index.d.ts +1 -1
- package/dist/src/connection/index.d.ts.map +1 -1
- package/dist/src/connection/status.d.ts +252 -0
- package/dist/src/connection/status.d.ts.map +1 -0
- package/dist/src/control/client.d.ts +31 -7
- package/dist/src/control/client.d.ts.map +1 -1
- package/dist/src/control/state.d.ts +47 -16
- package/dist/src/control/state.d.ts.map +1 -1
- package/dist/src/device/client.d.ts +59 -17
- package/dist/src/device/client.d.ts.map +1 -1
- package/dist/src/device/types.gen.d.ts +17 -67
- package/dist/src/device/types.gen.d.ts.map +1 -1
- package/dist/src/errors.d.ts +17 -20
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/ethercat/external.d.ts +2 -0
- package/dist/src/ethercat/external.d.ts.map +1 -0
- package/dist/src/ethercat/index.d.ts +2 -0
- package/dist/src/ethercat/index.d.ts.map +1 -0
- package/dist/src/ethercat/types.gen.d.ts +243 -0
- package/dist/src/ethercat/types.gen.d.ts.map +1 -0
- package/dist/src/framer/adapter.d.ts +8 -5
- package/dist/src/framer/adapter.d.ts.map +1 -1
- package/dist/src/framer/benchutil.d.ts +19 -0
- package/dist/src/framer/benchutil.d.ts.map +1 -0
- package/dist/src/framer/cache/cache.d.ts +38 -0
- package/dist/src/framer/cache/cache.d.ts.map +1 -0
- package/dist/src/framer/cache/dynamic.d.ts +71 -0
- package/dist/src/framer/cache/dynamic.d.ts.map +1 -0
- package/dist/src/framer/cache/reader.d.ts +43 -0
- package/dist/src/framer/cache/reader.d.ts.map +1 -0
- package/dist/src/framer/cache/static.d.ts +66 -0
- package/dist/src/framer/cache/static.d.ts.map +1 -0
- package/dist/src/framer/cache/streamer.d.ts +86 -0
- package/dist/src/framer/cache/streamer.d.ts.map +1 -0
- package/dist/src/framer/cache/transform.d.ts +18 -0
- package/dist/src/framer/cache/transform.d.ts.map +1 -0
- package/dist/src/framer/cache/unary.d.ts +37 -0
- package/dist/src/framer/cache/unary.d.ts.map +1 -0
- package/dist/src/framer/client.d.ts +35 -14
- package/dist/src/framer/client.d.ts.map +1 -1
- package/dist/src/framer/codec.d.ts.map +1 -1
- package/dist/src/framer/deleter.d.ts +3 -2
- package/dist/src/framer/deleter.d.ts.map +1 -1
- package/dist/src/framer/external.d.ts +6 -0
- package/dist/src/framer/external.d.ts.map +1 -1
- package/dist/src/framer/feed.d.ts +40 -0
- package/dist/src/framer/feed.d.ts.map +1 -0
- package/dist/src/framer/frame.d.ts +16 -20
- package/dist/src/framer/frame.d.ts.map +1 -1
- package/dist/src/framer/hardened.d.ts +70 -0
- package/dist/src/framer/hardened.d.ts.map +1 -0
- package/dist/src/framer/iterator.d.ts +36 -43
- package/dist/src/framer/iterator.d.ts.map +1 -1
- package/dist/src/framer/reader.d.ts +3 -2
- package/dist/src/framer/reader.d.ts.map +1 -1
- package/dist/src/framer/streamer.d.ts +132 -205
- package/dist/src/framer/streamer.d.ts.map +1 -1
- package/dist/src/framer/writer.d.ts +130 -161
- package/dist/src/framer/writer.d.ts.map +1 -1
- package/dist/src/group/client.d.ts +66 -9
- package/dist/src/group/client.d.ts.map +1 -1
- package/dist/src/group/types.gen.d.ts +2 -2
- package/dist/src/http/external.d.ts +2 -0
- package/dist/src/http/external.d.ts.map +1 -0
- package/dist/src/http/index.d.ts +2 -0
- package/dist/src/http/index.d.ts.map +1 -0
- package/dist/src/http/types.gen.d.ts +451 -0
- package/dist/src/http/types.gen.d.ts.map +1 -0
- package/dist/src/imex/client.d.ts +88 -0
- package/dist/src/imex/client.d.ts.map +1 -0
- package/dist/src/imex/index.d.ts +2 -0
- package/dist/src/imex/index.d.ts.map +1 -0
- package/dist/src/index.d.ts +18 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/label/client.d.ts +55 -36
- package/dist/src/label/client.d.ts.map +1 -1
- package/dist/src/label/external.d.ts +2 -0
- package/dist/src/label/external.d.ts.map +1 -1
- package/dist/src/label/payload.d.ts +4 -46
- package/dist/src/label/payload.d.ts.map +1 -1
- package/dist/src/label/store.d.ts +8 -0
- package/dist/src/label/store.d.ts.map +1 -0
- package/dist/src/label/types.gen.d.ts +45 -0
- package/dist/src/label/types.gen.d.ts.map +1 -0
- package/dist/src/labjack/external.d.ts +2 -0
- package/dist/src/labjack/external.d.ts.map +1 -0
- package/dist/src/labjack/index.d.ts +2 -0
- package/dist/src/labjack/index.d.ts.map +1 -0
- package/dist/src/labjack/types.gen.d.ts +442 -0
- package/dist/src/labjack/types.gen.d.ts.map +1 -0
- package/dist/src/lineplot/actions.d.ts +914 -0
- package/dist/src/lineplot/actions.d.ts.map +1 -0
- package/dist/src/lineplot/actions.gen.d.ts +4208 -0
- package/dist/src/lineplot/actions.gen.d.ts.map +1 -0
- package/dist/src/lineplot/client.d.ts +66 -16
- package/dist/src/lineplot/client.d.ts.map +1 -1
- package/dist/src/lineplot/external.d.ts +3 -0
- package/dist/src/lineplot/external.d.ts.map +1 -1
- package/dist/src/lineplot/line.d.ts +16 -0
- package/dist/src/lineplot/line.d.ts.map +1 -0
- package/dist/src/lineplot/types.gen.d.ts +837 -14
- package/dist/src/lineplot/types.gen.d.ts.map +1 -1
- package/dist/src/log/actions.d.ts +271 -0
- package/dist/src/log/actions.d.ts.map +1 -0
- package/dist/src/log/actions.gen.d.ts +1529 -0
- package/dist/src/log/actions.gen.d.ts.map +1 -0
- package/dist/src/log/client.d.ts +66 -16
- package/dist/src/log/client.d.ts.map +1 -1
- package/dist/src/log/external.d.ts +2 -0
- package/dist/src/log/external.d.ts.map +1 -1
- package/dist/src/log/types.gen.d.ts +139 -14
- package/dist/src/log/types.gen.d.ts.map +1 -1
- package/dist/src/modbus/external.d.ts +2 -0
- package/dist/src/modbus/external.d.ts.map +1 -0
- package/dist/src/modbus/index.d.ts +2 -0
- package/dist/src/modbus/index.d.ts.map +1 -0
- package/dist/src/modbus/types.gen.d.ts +280 -0
- package/dist/src/modbus/types.gen.d.ts.map +1 -0
- package/dist/src/ni/external.d.ts +2 -0
- package/dist/src/ni/external.d.ts.map +1 -0
- package/dist/src/ni/index.d.ts +2 -0
- package/dist/src/ni/index.d.ts.map +1 -0
- package/dist/src/ni/types.gen.d.ts +21029 -0
- package/dist/src/ni/types.gen.d.ts.map +1 -0
- package/dist/src/node/index.d.ts +2 -0
- package/dist/src/node/index.d.ts.map +1 -0
- package/dist/src/node/types.gen.d.ts +4 -0
- package/dist/src/node/types.gen.d.ts.map +1 -0
- package/dist/src/ontology/client.d.ts +314 -67
- package/dist/src/ontology/client.d.ts.map +1 -1
- package/dist/src/ontology/external.d.ts +1 -0
- package/dist/src/ontology/external.d.ts.map +1 -1
- package/dist/src/ontology/payload.d.ts +60 -18
- package/dist/src/ontology/payload.d.ts.map +1 -1
- package/dist/src/ontology/store.d.ts +32 -0
- package/dist/src/ontology/store.d.ts.map +1 -0
- package/dist/src/ontology/types.gen.d.ts +3 -2
- package/dist/src/ontology/types.gen.d.ts.map +1 -1
- package/dist/src/ontology/writer.d.ts +16 -10
- package/dist/src/ontology/writer.d.ts.map +1 -1
- package/dist/src/opcua/external.d.ts +2 -0
- package/dist/src/opcua/external.d.ts.map +1 -0
- package/dist/src/opcua/index.d.ts +2 -0
- package/dist/src/opcua/index.d.ts.map +1 -0
- package/dist/src/opcua/types.gen.d.ts +82 -0
- package/dist/src/opcua/types.gen.d.ts.map +1 -0
- package/dist/src/pagerduty/external.d.ts +2 -0
- package/dist/src/pagerduty/external.d.ts.map +1 -0
- package/dist/src/pagerduty/index.d.ts +2 -0
- package/dist/src/pagerduty/index.d.ts.map +1 -0
- package/dist/src/pagerduty/types.gen.d.ts +30 -0
- package/dist/src/pagerduty/types.gen.d.ts.map +1 -0
- package/dist/src/panel/actions.d.ts +273 -0
- package/dist/src/panel/actions.d.ts.map +1 -0
- package/dist/src/panel/actions.gen.d.ts +1255 -0
- package/dist/src/panel/actions.gen.d.ts.map +1 -0
- package/dist/src/panel/client.d.ts +148 -0
- package/dist/src/panel/client.d.ts.map +1 -0
- package/dist/src/panel/external.d.ts +6 -0
- package/dist/src/panel/external.d.ts.map +1 -0
- package/dist/src/panel/index.d.ts +2 -0
- package/dist/src/panel/index.d.ts.map +1 -0
- package/dist/src/panel/tree.d.ts +50 -0
- package/dist/src/panel/tree.d.ts.map +1 -0
- package/dist/src/panel/types.gen.d.ts +370 -0
- package/dist/src/panel/types.gen.d.ts.map +1 -0
- package/dist/src/project/client.d.ts +89 -0
- package/dist/src/project/client.d.ts.map +1 -0
- package/dist/src/project/external.d.ts.map +1 -0
- package/dist/src/project/index.d.ts +2 -0
- package/dist/src/project/index.d.ts.map +1 -0
- package/dist/src/project/types.gen.d.ts +27 -0
- package/dist/src/project/types.gen.d.ts.map +1 -0
- package/dist/src/query/cache.d.ts +132 -0
- package/dist/src/query/cache.d.ts.map +1 -0
- package/dist/src/query/deleted.d.ts +20 -0
- package/dist/src/query/deleted.d.ts.map +1 -0
- package/dist/src/query/derived.d.ts +33 -0
- package/dist/src/query/derived.d.ts.map +1 -0
- package/dist/src/query/external.d.ts +10 -0
- package/dist/src/query/external.d.ts.map +1 -0
- package/dist/src/query/index.d.ts +2 -0
- package/dist/src/query/index.d.ts.map +1 -0
- package/dist/src/query/query.d.ts +235 -0
- package/dist/src/query/query.d.ts.map +1 -0
- package/dist/src/query/retriever.d.ts +135 -0
- package/dist/src/query/retriever.d.ts.map +1 -0
- package/dist/src/query/streamer.d.ts +67 -0
- package/dist/src/query/streamer.d.ts.map +1 -0
- package/dist/src/query/table.d.ts +219 -0
- package/dist/src/query/table.d.ts.map +1 -0
- package/dist/src/query/types.d.ts +35 -0
- package/dist/src/query/types.d.ts.map +1 -0
- package/dist/src/query/write.d.ts +21 -0
- package/dist/src/query/write.d.ts.map +1 -0
- package/dist/src/rack/client.d.ts +58 -20
- package/dist/src/rack/client.d.ts.map +1 -1
- package/dist/src/rack/types.gen.d.ts +11 -12
- package/dist/src/rack/types.gen.d.ts.map +1 -1
- package/dist/src/range/alias/types.gen.d.ts +2 -3
- package/dist/src/range/alias/types.gen.d.ts.map +1 -1
- package/dist/src/ranger/client.d.ts +138 -27
- package/dist/src/ranger/client.d.ts.map +1 -1
- package/dist/src/ranger/kv/client.d.ts +7 -4
- package/dist/src/ranger/kv/client.d.ts.map +1 -1
- package/dist/src/ranger/payload.d.ts +3 -0
- package/dist/src/ranger/payload.d.ts.map +1 -1
- package/dist/src/ranger/types.gen.d.ts +45 -101
- package/dist/src/ranger/types.gen.d.ts.map +1 -1
- package/dist/src/ranger/writer.d.ts +2 -74
- package/dist/src/ranger/writer.d.ts.map +1 -1
- package/dist/src/schematic/actions.d.ts +90 -33
- package/dist/src/schematic/actions.d.ts.map +1 -1
- package/dist/src/schematic/actions.gen.d.ts +207 -114
- package/dist/src/schematic/actions.gen.d.ts.map +1 -1
- package/dist/src/schematic/client.d.ts +70 -68
- package/dist/src/schematic/client.d.ts.map +1 -1
- package/dist/src/schematic/symbol/client.d.ts +133 -27
- package/dist/src/schematic/symbol/client.d.ts.map +1 -1
- package/dist/src/schematic/symbol/types.gen.d.ts +258 -153
- package/dist/src/schematic/symbol/types.gen.d.ts.map +1 -1
- package/dist/src/schematic/types.gen.d.ts +17 -96
- package/dist/src/schematic/types.gen.d.ts.map +1 -1
- package/dist/src/status/client.d.ts +69 -14
- package/dist/src/status/client.d.ts.map +1 -1
- package/dist/src/status/external.d.ts +2 -0
- package/dist/src/status/external.d.ts.map +1 -1
- package/dist/src/status/payload.d.ts +2 -36
- package/dist/src/status/payload.d.ts.map +1 -1
- package/dist/src/status/status.d.ts +65 -0
- package/dist/src/status/status.d.ts.map +1 -0
- package/dist/src/status/types.gen.d.ts +58 -0
- package/dist/src/status/types.gen.d.ts.map +1 -0
- package/dist/src/table/actions.d.ts +72 -13
- package/dist/src/table/actions.d.ts.map +1 -1
- package/dist/src/table/actions.gen.d.ts +221 -137
- package/dist/src/table/actions.gen.d.ts.map +1 -1
- package/dist/src/table/client.d.ts +64 -40
- package/dist/src/table/client.d.ts.map +1 -1
- package/dist/src/table/types.gen.d.ts +20 -55
- package/dist/src/table/types.gen.d.ts.map +1 -1
- package/dist/src/task/client.d.ts +149 -28
- package/dist/src/task/client.d.ts.map +1 -1
- package/dist/src/task/types.gen.d.ts +71 -89
- package/dist/src/task/types.gen.d.ts.map +1 -1
- package/dist/src/testutil/access.d.ts +27 -1
- package/dist/src/testutil/access.d.ts.map +1 -1
- package/dist/src/testutil/channels.d.ts +2 -0
- package/dist/src/testutil/channels.d.ts.map +1 -1
- package/dist/src/testutil/client.d.ts +5 -0
- package/dist/src/testutil/client.d.ts.map +1 -1
- package/dist/src/testutil/connection.d.ts +10 -0
- package/dist/src/testutil/connection.d.ts.map +1 -0
- package/dist/src/testutil/index.d.ts +9 -0
- package/dist/src/testutil/index.d.ts.map +1 -0
- package/dist/src/testutil/panels.d.ts +8 -0
- package/dist/src/testutil/panels.d.ts.map +1 -0
- package/dist/src/testutil/proxy.d.ts +29 -0
- package/dist/src/testutil/proxy.d.ts.map +1 -0
- package/dist/src/testutil/query.d.ts +7 -0
- package/dist/src/testutil/query.d.ts.map +1 -0
- package/dist/src/testutil/telem.d.ts +4 -0
- package/dist/src/testutil/telem.d.ts.map +1 -1
- package/dist/src/transport.d.ts +10 -4
- package/dist/src/transport.d.ts.map +1 -1
- package/dist/src/user/client.d.ts +29 -28
- package/dist/src/user/client.d.ts.map +1 -1
- package/dist/src/user/external.d.ts +1 -1
- package/dist/src/user/external.d.ts.map +1 -1
- package/dist/src/user/types.gen.d.ts +4 -4
- package/dist/src/util/retrieve.d.ts +2 -2
- package/dist/src/util/retrieve.d.ts.map +1 -1
- package/dist/src/util/telem.d.ts.map +1 -1
- package/dist/src/view/client.d.ts +30 -14
- package/dist/src/view/client.d.ts.map +1 -1
- package/dist/src/view/types.gen.d.ts +7 -15
- package/dist/src/view/types.gen.d.ts.map +1 -1
- package/dist/testutil.js +189 -0
- package/dist/testutil.js.map +1 -0
- package/package.json +40 -17
- package/src/access/client.ts +14 -3
- package/src/access/enforce.ts +0 -3
- package/src/access/external.ts +1 -0
- package/src/access/granted.ts +114 -0
- package/src/access/policy/client.ts +135 -43
- package/src/access/policy/types.gen.ts +9 -11
- package/src/access/role/client.ts +160 -38
- package/src/access/role/types.gen.ts +8 -12
- package/src/actions/actions.ts +5 -6
- package/src/actions/controller.ts +626 -0
- package/src/actions/external.ts +11 -0
- package/src/arc/actions.gen.ts +313 -0
- package/src/arc/actions.ts +192 -0
- package/src/arc/client.ts +424 -41
- package/src/arc/compiler/types.gen.ts +5 -6
- package/src/arc/external.ts +2 -0
- package/src/arc/graph/types.gen.ts +24 -22
- package/src/arc/ir/index.ts +1 -1
- package/{eslint.config.ts → src/arc/ir/ir.ts} +1 -4
- package/src/arc/ir/types.gen.ts +42 -41
- package/src/arc/text/types.gen.ts +21 -2
- package/src/arc/types/types.gen.ts +40 -32
- package/src/arc/types.gen.ts +31 -29
- package/src/auth/auth.ts +40 -8
- package/src/channel/client.ts +529 -132
- package/src/channel/external.ts +0 -1
- package/src/channel/payload.ts +30 -3
- package/src/channel/types.gen.ts +37 -48
- package/src/channel/writer.ts +2 -11
- package/src/client.ts +215 -91
- package/src/connection/client.ts +495 -0
- package/src/connection/external.ts +34 -0
- package/src/connection/index.ts +1 -1
- package/src/connection/status.ts +442 -0
- package/src/control/client.ts +84 -12
- package/src/control/state.ts +17 -36
- package/src/device/client.ts +293 -41
- package/src/device/types.gen.ts +15 -26
- package/src/errors.ts +45 -22
- package/src/{workspace → ethercat}/external.ts +1 -2
- package/src/{workspace → ethercat}/index.ts +1 -1
- package/src/ethercat/types.gen.ts +151 -0
- package/src/framer/adapter.ts +60 -37
- package/src/framer/benchutil.ts +67 -0
- package/src/framer/cache/cache.ts +115 -0
- package/src/framer/cache/dynamic.ts +279 -0
- package/src/framer/cache/reader.ts +160 -0
- package/src/framer/cache/static.ts +215 -0
- package/src/framer/cache/streamer.ts +391 -0
- package/src/framer/cache/transform.ts +31 -0
- package/src/framer/cache/unary.ts +104 -0
- package/src/framer/client.ts +71 -43
- package/src/framer/codec.ts +55 -18
- package/src/framer/deleter.ts +4 -6
- package/src/framer/external.ts +10 -0
- package/src/framer/feed.ts +108 -0
- package/src/framer/frame.ts +13 -23
- package/src/framer/hardened.ts +283 -0
- package/src/framer/iterator.ts +31 -42
- package/src/framer/reader.ts +11 -11
- package/src/framer/streamer.ts +18 -178
- package/src/framer/writer.ts +39 -59
- package/src/group/client.ts +158 -23
- package/src/http/external.ts +10 -0
- package/src/{cluster → http}/index.ts +1 -1
- package/src/http/types.gen.ts +245 -0
- package/src/imex/client.ts +125 -0
- package/src/imex/index.ts +10 -0
- package/src/index.ts +18 -6
- package/src/label/client.ts +193 -54
- package/src/label/external.ts +2 -0
- package/src/label/payload.ts +4 -9
- package/src/label/store.ts +28 -0
- package/src/label/types.gen.ts +31 -0
- package/src/labjack/external.ts +10 -0
- package/src/labjack/index.ts +10 -0
- package/src/labjack/types.gen.ts +251 -0
- package/src/lineplot/actions.gen.ts +880 -0
- package/src/lineplot/actions.ts +535 -0
- package/src/lineplot/client.ts +224 -52
- package/src/lineplot/external.ts +3 -0
- package/src/lineplot/line.ts +80 -0
- package/src/lineplot/types.gen.ts +225 -12
- package/src/log/actions.gen.ts +474 -0
- package/src/log/actions.ts +242 -0
- package/src/log/client.ts +223 -52
- package/src/log/external.ts +2 -0
- package/src/log/types.gen.ts +45 -14
- package/src/modbus/external.ts +10 -0
- package/src/modbus/index.ts +10 -0
- package/src/modbus/types.gen.ts +185 -0
- package/src/ni/external.ts +10 -0
- package/src/ni/index.ts +10 -0
- package/src/ni/types.gen.ts +1632 -0
- package/src/node/index.ts +10 -0
- package/src/{cluster → node}/types.gen.ts +2 -2
- package/src/ontology/client.ts +408 -99
- package/src/ontology/external.ts +7 -0
- package/src/ontology/payload.ts +48 -7
- package/src/ontology/store.ts +83 -0
- package/src/ontology/types.gen.ts +2 -1
- package/src/ontology/writer.ts +1 -0
- package/src/opcua/external.ts +10 -0
- package/src/opcua/index.ts +10 -0
- package/src/opcua/types.gen.ts +65 -0
- package/src/pagerduty/external.ts +10 -0
- package/src/pagerduty/index.ts +10 -0
- package/src/pagerduty/types.gen.ts +41 -0
- package/src/panel/actions.gen.ts +267 -0
- package/src/panel/actions.ts +357 -0
- package/src/panel/client.ts +327 -0
- package/src/panel/external.ts +14 -0
- package/src/panel/index.ts +10 -0
- package/src/panel/tree.ts +163 -0
- package/src/panel/types.gen.ts +164 -0
- package/src/project/client.ts +273 -0
- package/src/project/external.ts +11 -0
- package/src/project/index.ts +10 -0
- package/src/project/types.gen.ts +40 -0
- package/src/query/cache.ts +326 -0
- package/src/query/deleted.ts +38 -0
- package/src/query/derived.ts +101 -0
- package/src/query/external.ts +51 -0
- package/src/query/index.ts +10 -0
- package/src/query/query.ts +865 -0
- package/src/query/retriever.ts +308 -0
- package/src/query/streamer.ts +207 -0
- package/src/query/table.ts +625 -0
- package/src/query/types.ts +54 -0
- package/src/query/write.ts +42 -0
- package/src/rack/client.ts +233 -45
- package/src/rack/types.gen.ts +15 -16
- package/src/range/alias/types.gen.ts +2 -3
- package/src/ranger/client.ts +581 -70
- package/src/ranger/kv/client.ts +52 -21
- package/src/ranger/payload.ts +3 -0
- package/src/ranger/types.gen.ts +21 -23
- package/src/ranger/writer.ts +4 -8
- package/src/schematic/actions.gen.ts +62 -53
- package/src/schematic/actions.ts +44 -42
- package/src/schematic/client.ts +226 -70
- package/src/schematic/symbol/client.ts +277 -48
- package/src/schematic/symbol/types.gen.ts +22 -34
- package/src/schematic/types.gen.ts +22 -29
- package/src/status/client.ts +321 -44
- package/src/status/external.ts +2 -0
- package/src/status/payload.ts +1 -23
- package/src/status/status.ts +241 -0
- package/src/status/types.gen.ts +108 -0
- package/src/table/actions.gen.ts +96 -63
- package/src/table/actions.ts +44 -19
- package/src/table/client.ts +220 -56
- package/src/table/types.gen.ts +24 -31
- package/src/task/client.ts +580 -101
- package/src/task/types.gen.ts +68 -75
- package/src/testutil/access.ts +102 -6
- package/src/testutil/channels.ts +29 -0
- package/src/testutil/client.ts +27 -2
- package/src/testutil/connection.ts +47 -0
- package/src/testutil/index.ts +17 -0
- package/src/testutil/panels.ts +26 -0
- package/src/testutil/proxy.ts +106 -0
- package/src/testutil/query.ts +28 -0
- package/src/testutil/telem.ts +17 -1
- package/src/transport.ts +18 -7
- package/src/user/client.ts +165 -64
- package/src/user/external.ts +1 -1
- package/src/user/types.gen.ts +5 -5
- package/src/util/retrieve.ts +4 -4
- package/src/util/telem.ts +0 -1
- package/src/view/client.ts +120 -37
- package/src/view/types.gen.ts +8 -11
- package/.turbo/turbo-build.log +0 -20
- package/.vscode/settings.json +0 -3
- package/CONTRIBUTING.md +0 -47
- package/dist/client.cjs +0 -118
- package/dist/eslint.config.d.ts +0 -4
- package/dist/eslint.config.d.ts.map +0 -1
- package/dist/src/access/enforce.spec.d.ts +0 -2
- package/dist/src/access/enforce.spec.d.ts.map +0 -1
- package/dist/src/access/policy/access.spec.d.ts +0 -2
- package/dist/src/access/policy/access.spec.d.ts.map +0 -1
- package/dist/src/access/role/role.spec.d.ts +0 -2
- package/dist/src/access/role/role.spec.d.ts.map +0 -1
- package/dist/src/actions/actions.spec.d.ts +0 -2
- package/dist/src/actions/actions.spec.d.ts.map +0 -1
- package/dist/src/arc/access.spec.d.ts +0 -2
- package/dist/src/arc/access.spec.d.ts.map +0 -1
- package/dist/src/arc/arc.spec.d.ts +0 -2
- package/dist/src/arc/arc.spec.d.ts.map +0 -1
- package/dist/src/arc/lsp.spec.d.ts +0 -2
- package/dist/src/arc/lsp.spec.d.ts.map +0 -1
- package/dist/src/auth/auth.spec.d.ts +0 -2
- package/dist/src/auth/auth.spec.d.ts.map +0 -1
- package/dist/src/channel/access.spec.d.ts +0 -2
- package/dist/src/channel/access.spec.d.ts.map +0 -1
- package/dist/src/channel/batchRetriever.spec.d.ts +0 -2
- package/dist/src/channel/batchRetriever.spec.d.ts.map +0 -1
- package/dist/src/channel/channel.spec.d.ts +0 -2
- package/dist/src/channel/channel.spec.d.ts.map +0 -1
- package/dist/src/channel/payload.spec.d.ts +0 -2
- package/dist/src/channel/payload.spec.d.ts.map +0 -1
- package/dist/src/channel/retriever.d.ts +0 -64
- package/dist/src/channel/retriever.d.ts.map +0 -1
- package/dist/src/cluster/index.d.ts +0 -2
- package/dist/src/cluster/index.d.ts.map +0 -1
- package/dist/src/cluster/types.gen.d.ts +0 -4
- package/dist/src/cluster/types.gen.d.ts.map +0 -1
- package/dist/src/connection/checker.d.ts +0 -86
- package/dist/src/connection/checker.d.ts.map +0 -1
- package/dist/src/connection/connection.spec.d.ts +0 -2
- package/dist/src/connection/connection.spec.d.ts.map +0 -1
- package/dist/src/connection.spec.d.ts +0 -2
- package/dist/src/connection.spec.d.ts.map +0 -1
- package/dist/src/control/state.spec.d.ts +0 -2
- package/dist/src/control/state.spec.d.ts.map +0 -1
- package/dist/src/device/access.spec.d.ts +0 -2
- package/dist/src/device/access.spec.d.ts.map +0 -1
- package/dist/src/device/device.spec.d.ts +0 -2
- package/dist/src/device/device.spec.d.ts.map +0 -1
- package/dist/src/device/payload.spec.d.ts +0 -2
- package/dist/src/device/payload.spec.d.ts.map +0 -1
- package/dist/src/errors.spec.d.ts +0 -2
- package/dist/src/errors.spec.d.ts.map +0 -1
- package/dist/src/framer/adapter.spec.d.ts +0 -2
- package/dist/src/framer/adapter.spec.d.ts.map +0 -1
- package/dist/src/framer/client.spec.d.ts +0 -2
- package/dist/src/framer/client.spec.d.ts.map +0 -1
- package/dist/src/framer/codec.spec.d.ts +0 -2
- package/dist/src/framer/codec.spec.d.ts.map +0 -1
- package/dist/src/framer/deleter.spec.d.ts +0 -2
- package/dist/src/framer/deleter.spec.d.ts.map +0 -1
- package/dist/src/framer/frame.spec.d.ts +0 -2
- package/dist/src/framer/frame.spec.d.ts.map +0 -1
- package/dist/src/framer/iterator.spec.d.ts +0 -2
- package/dist/src/framer/iterator.spec.d.ts.map +0 -1
- package/dist/src/framer/reader.spec.d.ts +0 -2
- package/dist/src/framer/reader.spec.d.ts.map +0 -1
- package/dist/src/framer/streamer.spec.d.ts +0 -2
- package/dist/src/framer/streamer.spec.d.ts.map +0 -1
- package/dist/src/framer/writer.spec.d.ts +0 -2
- package/dist/src/framer/writer.spec.d.ts.map +0 -1
- package/dist/src/group/access.spec.d.ts +0 -2
- package/dist/src/group/access.spec.d.ts.map +0 -1
- package/dist/src/group/group.spec.d.ts +0 -2
- package/dist/src/group/group.spec.d.ts.map +0 -1
- package/dist/src/label/access.spec.d.ts +0 -2
- package/dist/src/label/access.spec.d.ts.map +0 -1
- package/dist/src/label/label.spec.d.ts +0 -2
- package/dist/src/label/label.spec.d.ts.map +0 -1
- package/dist/src/lineplot/access.spec.d.ts +0 -2
- package/dist/src/lineplot/access.spec.d.ts.map +0 -1
- package/dist/src/lineplot/lineplot.spec.d.ts +0 -2
- package/dist/src/lineplot/lineplot.spec.d.ts.map +0 -1
- package/dist/src/log/access.spec.d.ts +0 -2
- package/dist/src/log/access.spec.d.ts.map +0 -1
- package/dist/src/log/log.spec.d.ts +0 -2
- package/dist/src/log/log.spec.d.ts.map +0 -1
- package/dist/src/ontology/ontology.spec.d.ts +0 -2
- package/dist/src/ontology/ontology.spec.d.ts.map +0 -1
- package/dist/src/rack/access.spec.d.ts +0 -2
- package/dist/src/rack/access.spec.d.ts.map +0 -1
- package/dist/src/rack/rack.spec.d.ts +0 -2
- package/dist/src/rack/rack.spec.d.ts.map +0 -1
- package/dist/src/ranger/access.spec.d.ts +0 -2
- package/dist/src/ranger/access.spec.d.ts.map +0 -1
- package/dist/src/ranger/alias/payload.spec.d.ts +0 -2
- package/dist/src/ranger/alias/payload.spec.d.ts.map +0 -1
- package/dist/src/ranger/ranger.spec.d.ts +0 -2
- package/dist/src/ranger/ranger.spec.d.ts.map +0 -1
- package/dist/src/schematic/access.spec.d.ts +0 -2
- package/dist/src/schematic/access.spec.d.ts.map +0 -1
- package/dist/src/schematic/actions.spec.d.ts +0 -2
- package/dist/src/schematic/actions.spec.d.ts.map +0 -1
- package/dist/src/schematic/schematic.spec.d.ts +0 -2
- package/dist/src/schematic/schematic.spec.d.ts.map +0 -1
- package/dist/src/schematic/symbol/access.spec.d.ts +0 -2
- package/dist/src/schematic/symbol/access.spec.d.ts.map +0 -1
- package/dist/src/schematic/symbol/client.spec.d.ts +0 -2
- package/dist/src/schematic/symbol/client.spec.d.ts.map +0 -1
- package/dist/src/status/access.spec.d.ts +0 -2
- package/dist/src/status/access.spec.d.ts.map +0 -1
- package/dist/src/status/status.spec.d.ts +0 -2
- package/dist/src/status/status.spec.d.ts.map +0 -1
- package/dist/src/table/access.spec.d.ts +0 -2
- package/dist/src/table/access.spec.d.ts.map +0 -1
- package/dist/src/table/table.spec.d.ts +0 -2
- package/dist/src/table/table.spec.d.ts.map +0 -1
- package/dist/src/task/access.spec.d.ts +0 -2
- package/dist/src/task/access.spec.d.ts.map +0 -1
- package/dist/src/task/payload.spec.d.ts +0 -2
- package/dist/src/task/payload.spec.d.ts.map +0 -1
- package/dist/src/task/task.spec.d.ts +0 -2
- package/dist/src/task/task.spec.d.ts.map +0 -1
- package/dist/src/user/access.spec.d.ts +0 -2
- package/dist/src/user/access.spec.d.ts.map +0 -1
- package/dist/src/user/user.spec.d.ts +0 -2
- package/dist/src/user/user.spec.d.ts.map +0 -1
- package/dist/src/util/retrieve.spec.d.ts +0 -2
- package/dist/src/util/retrieve.spec.d.ts.map +0 -1
- package/dist/src/view/view.spec.d.ts +0 -2
- package/dist/src/view/view.spec.d.ts.map +0 -1
- package/dist/src/workspace/access.spec.d.ts +0 -2
- package/dist/src/workspace/access.spec.d.ts.map +0 -1
- package/dist/src/workspace/client.d.ts +0 -36
- package/dist/src/workspace/client.d.ts.map +0 -1
- package/dist/src/workspace/external.d.ts.map +0 -1
- package/dist/src/workspace/index.d.ts +0 -2
- package/dist/src/workspace/index.d.ts.map +0 -1
- package/dist/src/workspace/types.gen.d.ts +0 -34
- package/dist/src/workspace/types.gen.d.ts.map +0 -1
- package/dist/src/workspace/workspace.spec.d.ts +0 -2
- package/dist/src/workspace/workspace.spec.d.ts.map +0 -1
- package/examples/node/basicReadWrite.js +0 -86
- package/examples/node/createChannels.js +0 -50
- package/examples/node/createRange.js +0 -67
- package/examples/node/package-lock.json +0 -133
- package/examples/node/package.json +0 -17
- package/examples/node/readLatest.js +0 -76
- package/examples/node/seriesAndFrames.js +0 -173
- package/examples/node/streamRead.js +0 -50
- package/examples/node/streamWrite.js +0 -87
- package/src/access/enforce.spec.ts +0 -188
- package/src/access/policy/access.spec.ts +0 -147
- package/src/access/role/role.spec.ts +0 -95
- package/src/actions/actions.spec.ts +0 -229
- package/src/arc/access.spec.ts +0 -149
- package/src/arc/arc.spec.ts +0 -44
- package/src/arc/lsp.spec.ts +0 -717
- package/src/auth/auth.spec.ts +0 -101
- package/src/channel/access.spec.ts +0 -116
- package/src/channel/batchRetriever.spec.ts +0 -115
- package/src/channel/channel.spec.ts +0 -352
- package/src/channel/payload.spec.ts +0 -117
- package/src/channel/retriever.ts +0 -252
- package/src/connection/checker.ts +0 -203
- package/src/connection/connection.spec.ts +0 -152
- package/src/connection.spec.ts +0 -145
- package/src/control/state.spec.ts +0 -22
- package/src/device/access.spec.ts +0 -159
- package/src/device/device.spec.ts +0 -461
- package/src/device/payload.spec.ts +0 -142
- package/src/errors.spec.ts +0 -71
- package/src/framer/adapter.spec.ts +0 -620
- package/src/framer/client.spec.ts +0 -180
- package/src/framer/codec.spec.ts +0 -383
- package/src/framer/deleter.spec.ts +0 -103
- package/src/framer/frame.spec.ts +0 -973
- package/src/framer/iterator.spec.ts +0 -169
- package/src/framer/reader.spec.ts +0 -865
- package/src/framer/streamer.spec.ts +0 -871
- package/src/framer/writer.spec.ts +0 -486
- package/src/group/access.spec.ts +0 -77
- package/src/group/group.spec.ts +0 -65
- package/src/label/access.spec.ts +0 -109
- package/src/label/label.spec.ts +0 -83
- package/src/lineplot/access.spec.ts +0 -134
- package/src/lineplot/lineplot.spec.ts +0 -120
- package/src/log/access.spec.ts +0 -132
- package/src/log/log.spec.ts +0 -106
- package/src/ontology/ontology.spec.ts +0 -521
- package/src/rack/access.spec.ts +0 -102
- package/src/rack/rack.spec.ts +0 -171
- package/src/ranger/access.spec.ts +0 -115
- package/src/ranger/alias/payload.spec.ts +0 -52
- package/src/ranger/ranger.spec.ts +0 -343
- package/src/schematic/access.spec.ts +0 -134
- package/src/schematic/actions.spec.ts +0 -699
- package/src/schematic/schematic.spec.ts +0 -340
- package/src/schematic/symbol/access.spec.ts +0 -172
- package/src/schematic/symbol/client.spec.ts +0 -160
- package/src/status/access.spec.ts +0 -129
- package/src/status/status.spec.ts +0 -448
- package/src/table/access.spec.ts +0 -128
- package/src/table/table.spec.ts +0 -651
- package/src/task/access.spec.ts +0 -131
- package/src/task/payload.spec.ts +0 -113
- package/src/task/task.spec.ts +0 -657
- package/src/user/access.spec.ts +0 -107
- package/src/user/user.spec.ts +0 -290
- package/src/util/retrieve.spec.ts +0 -49
- package/src/view/view.spec.ts +0 -165
- package/src/workspace/access.spec.ts +0 -108
- package/src/workspace/client.ts +0 -112
- package/src/workspace/types.gen.ts +0 -46
- package/src/workspace/workspace.spec.ts +0 -111
- package/tsconfig.json +0 -5
- package/tsconfig.vite.json +0 -4
- package/vite.config.ts +0 -29
- /package/dist/src/{workspace → project}/external.d.ts +0 -0
package/src/framer/client.ts
CHANGED
|
@@ -17,8 +17,11 @@ import {
|
|
|
17
17
|
TimeSpan,
|
|
18
18
|
} from "@synnaxlabs/x";
|
|
19
19
|
|
|
20
|
-
import { channel } from "@/channel";
|
|
20
|
+
import { type channel } from "@/channel";
|
|
21
|
+
import { analyzeParams } from "@/channel/payload";
|
|
22
|
+
import { type ChannelRetriever } from "@/framer/adapter";
|
|
21
23
|
import { Deleter } from "@/framer/deleter";
|
|
24
|
+
import { Feed, type FeedOptions } from "@/framer/feed";
|
|
22
25
|
import { Frame } from "@/framer/frame";
|
|
23
26
|
import { AUTO_SPAN, Iterator, type IteratorConfig } from "@/framer/iterator";
|
|
24
27
|
import { Reader, type ReadRequest } from "@/framer/reader";
|
|
@@ -29,27 +32,32 @@ import { ontology } from "@/ontology";
|
|
|
29
32
|
export const ontologyID = ontology.createIDFactory<string>("framer");
|
|
30
33
|
export const TYPE_ONTOLOGY_ID = ontologyID("");
|
|
31
34
|
|
|
35
|
+
/** Config for {@link Client}. */
|
|
36
|
+
export interface ClientConfig {
|
|
37
|
+
stream: WebSocketClient;
|
|
38
|
+
unary: UnaryClient;
|
|
39
|
+
retrieveChannels: ChannelRetriever;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Reads and writes telemetry on a Core. Reach it through `client.telem` rather than
|
|
44
|
+
* building one: `read` and `write` cover one-shot access, and the `open*` methods hand
|
|
45
|
+
* back a long-lived stream the caller must close.
|
|
46
|
+
*/
|
|
32
47
|
export class Client {
|
|
33
|
-
private readonly
|
|
34
|
-
private readonly retriever: channel.Retriever;
|
|
48
|
+
private readonly cfg: ClientConfig;
|
|
35
49
|
private readonly deleter: Deleter;
|
|
36
50
|
private readonly reader: Reader;
|
|
37
51
|
|
|
38
|
-
constructor(
|
|
39
|
-
stream
|
|
40
|
-
|
|
41
|
-
retriever: channel.Retriever,
|
|
42
|
-
) {
|
|
43
|
-
this.streamClient = stream;
|
|
44
|
-
this.retriever = retriever;
|
|
52
|
+
constructor(cfg: ClientConfig) {
|
|
53
|
+
const { stream, unary, retrieveChannels } = cfg;
|
|
54
|
+
this.cfg = cfg;
|
|
45
55
|
this.deleter = new Deleter(unary);
|
|
46
|
-
this.reader = new Reader(
|
|
56
|
+
this.reader = new Reader(retrieveChannels, stream);
|
|
47
57
|
}
|
|
48
58
|
|
|
49
59
|
/**
|
|
50
60
|
* Opens a new iterator over the given channels within the provided time range.
|
|
51
|
-
*
|
|
52
|
-
* @param tr - A time range to iterate over.
|
|
53
61
|
* @param channels - A list of channels (by name or key) to iterate over.
|
|
54
62
|
* @param opts - see {@link IteratorConfig}
|
|
55
63
|
* @returns a new {@link Iterator}.
|
|
@@ -59,33 +67,47 @@ export class Client {
|
|
|
59
67
|
channels: channel.Params,
|
|
60
68
|
opts?: IteratorConfig,
|
|
61
69
|
): Promise<Iterator> {
|
|
62
|
-
return await Iterator._open(
|
|
70
|
+
return await Iterator._open(
|
|
71
|
+
tr,
|
|
72
|
+
channels,
|
|
73
|
+
this.cfg.retrieveChannels,
|
|
74
|
+
this.cfg.stream,
|
|
75
|
+
opts,
|
|
76
|
+
);
|
|
63
77
|
}
|
|
64
78
|
|
|
65
79
|
/**
|
|
66
80
|
* Opens a new writer on the given channels.
|
|
67
|
-
*
|
|
68
81
|
* @param config - The configuration for the created writer, see documentation for
|
|
69
82
|
* writerConfig for more detail.
|
|
70
83
|
* @returns a new {@link Writer}.
|
|
71
84
|
*/
|
|
72
85
|
async openWriter(config: WriterConfig): Promise<Writer> {
|
|
73
|
-
return await Writer._open(this.
|
|
86
|
+
return await Writer._open(this.cfg.retrieveChannels, this.cfg.stream, config);
|
|
74
87
|
}
|
|
75
88
|
|
|
76
89
|
/**
|
|
77
90
|
* Opens a new streamer with the provided configuration.
|
|
78
|
-
*
|
|
79
|
-
* @param config - Configuration parameters for the streamer.
|
|
80
91
|
* @param config.channels - The channels to stream values from. Can be a key, name,
|
|
81
92
|
* list of keys, or list of names.
|
|
82
|
-
* @param config.from - If this parameter is set and is before the current time,
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
93
|
+
* @param config.from - If this parameter is set and is before the current time, the
|
|
94
|
+
* streamer will first read and receive historical data from before this point and
|
|
95
|
+
* then will start reading new values.
|
|
86
96
|
*/
|
|
87
97
|
async openStreamer(config: StreamerConfig): Promise<Streamer> {
|
|
88
|
-
return await openStreamer(this.
|
|
98
|
+
return await openStreamer(this.cfg.retrieveChannels, this.cfg.stream, config);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Opens a feed over this client. The underlying stream opens on first demand;
|
|
103
|
+
* the caller must close the feed.
|
|
104
|
+
*/
|
|
105
|
+
openFeed(options: FeedOptions = {}): Feed {
|
|
106
|
+
return new Feed({
|
|
107
|
+
...options,
|
|
108
|
+
readRemote: async (tr, keys) => await this.read(tr, keys),
|
|
109
|
+
openStreamer: async (config) => await this.openStreamer(config),
|
|
110
|
+
});
|
|
89
111
|
}
|
|
90
112
|
|
|
91
113
|
async write(
|
|
@@ -106,13 +128,13 @@ export class Client {
|
|
|
106
128
|
): Promise<void>;
|
|
107
129
|
|
|
108
130
|
/**
|
|
109
|
-
* Writes telemetry to the given
|
|
131
|
+
* Writes telemetry to the given channels, starting at the given timestamp. It commits
|
|
132
|
+
* and closes before it returns, so the samples land on disk.
|
|
110
133
|
*
|
|
111
|
-
* @param
|
|
112
|
-
* @
|
|
113
|
-
* @
|
|
114
|
-
* data type
|
|
115
|
-
* @throws if the channel does not exist.
|
|
134
|
+
* @param start - The timestamp of the first sample.
|
|
135
|
+
* @throws {NotFoundError} if a channel does not exist.
|
|
136
|
+
* @throws {UnauthorizedError} if another writer holds control of a channel.
|
|
137
|
+
* @throws {ValidationError} if the data type does not match the channel's.
|
|
116
138
|
*/
|
|
117
139
|
async write(
|
|
118
140
|
start: CrudeTimeStamp,
|
|
@@ -142,6 +164,12 @@ export class Client {
|
|
|
142
164
|
await w.close();
|
|
143
165
|
}
|
|
144
166
|
|
|
167
|
+
/**
|
|
168
|
+
* Reads every sample in the time range from the given channels.
|
|
169
|
+
*
|
|
170
|
+
* @returns a {@link MultiSeries} for one channel, or a {@link Frame} for several.
|
|
171
|
+
* @throws {NotFoundError} if a channel does not exist.
|
|
172
|
+
*/
|
|
145
173
|
async read(
|
|
146
174
|
tr: CrudeTimeRange,
|
|
147
175
|
channel: channel.Key | channel.Name,
|
|
@@ -153,7 +181,7 @@ export class Client {
|
|
|
153
181
|
channels?: channel.Params,
|
|
154
182
|
): Promise<MultiSeries | Frame | ReadableStream<Uint8Array>> {
|
|
155
183
|
if (!("start" in tr)) return await this.reader.read(tr);
|
|
156
|
-
const { single } =
|
|
184
|
+
const { single } = analyzeParams(channels!);
|
|
157
185
|
const fr = await this.readFrame(tr, channels!);
|
|
158
186
|
if (single) return fr.get(channels as channel.Key | channel.Name);
|
|
159
187
|
return fr;
|
|
@@ -181,22 +209,18 @@ export class Client {
|
|
|
181
209
|
async readLatest(channels: channel.Params, n: number): Promise<Frame>;
|
|
182
210
|
|
|
183
211
|
/**
|
|
184
|
-
* Reads the latest n samples from the given channel(s).
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
* exist.
|
|
188
|
-
*
|
|
189
|
-
* @param channels - A single channel key/name or an array of channel
|
|
190
|
-
* keys/names.
|
|
212
|
+
* Reads the latest n samples from the given channel(s). If fewer than n samples are
|
|
213
|
+
* available, returns only the samples that exist.
|
|
214
|
+
* @param channels - A single channel key/name or an array of channel keys/names.
|
|
191
215
|
* @param n - The maximum number of samples to read. Defaults to 1.
|
|
192
|
-
* @returns A MultiSeries when a single channel is provided, or a Frame when
|
|
193
|
-
*
|
|
216
|
+
* @returns A MultiSeries when a single channel is provided, or a Frame when multiple
|
|
217
|
+
* channels are provided.
|
|
194
218
|
*/
|
|
195
219
|
async readLatest(
|
|
196
220
|
channels: channel.Params,
|
|
197
221
|
n: number = 1,
|
|
198
222
|
): Promise<MultiSeries | Frame> {
|
|
199
|
-
const { single } =
|
|
223
|
+
const { single } = analyzeParams(channels);
|
|
200
224
|
const fr = await this.readLatestNFrame(channels, n);
|
|
201
225
|
if (single) return fr.get(channels as channel.Key | channel.Name);
|
|
202
226
|
return fr;
|
|
@@ -216,11 +240,15 @@ export class Client {
|
|
|
216
240
|
return frame;
|
|
217
241
|
}
|
|
218
242
|
|
|
243
|
+
/**
|
|
244
|
+
* Deletes every sample in the time range from the given channels. Deletion is
|
|
245
|
+
* permanent.
|
|
246
|
+
*/
|
|
219
247
|
async delete(channels: channel.Params, timeRange: CrudeTimeRange): Promise<void> {
|
|
220
|
-
const { normalized, variant } =
|
|
248
|
+
const { normalized, variant } = analyzeParams(channels);
|
|
221
249
|
const bounds = new TimeRange(timeRange);
|
|
222
250
|
if (variant === "keys")
|
|
223
|
-
return await this.deleter.delete({ keys: normalized
|
|
224
|
-
return await this.deleter.delete({ names: normalized
|
|
251
|
+
return await this.deleter.delete({ keys: normalized, bounds });
|
|
252
|
+
return await this.deleter.delete({ names: normalized, bounds });
|
|
225
253
|
}
|
|
226
254
|
}
|
package/src/framer/codec.ts
CHANGED
|
@@ -24,22 +24,51 @@ import { type StreamerResponse } from "@/framer/streamer";
|
|
|
24
24
|
import { IteratorResponseVariant, WriterCommand } from "@/framer/types.gen";
|
|
25
25
|
import { type WriteRequest } from "@/framer/writer";
|
|
26
26
|
|
|
27
|
+
const BITS_PER_BYTE = 8;
|
|
28
|
+
|
|
29
|
+
const bitPackedByteCount = (nSamples: number): number =>
|
|
30
|
+
Math.ceil(nSamples / BITS_PER_BYTE);
|
|
31
|
+
|
|
27
32
|
const seriesPldLength = (series: SeriesPayload): number =>
|
|
28
33
|
series.data.byteLength / series.dataType.density.valueOf();
|
|
29
34
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
const seriesWireByteLength = (series: SeriesPayload): number => {
|
|
36
|
+
if (series.dataType.equals(DataType.BOOLEAN))
|
|
37
|
+
return bitPackedByteCount(seriesPldLength(series));
|
|
38
|
+
return series.data.byteLength;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const packBoolBits = (src: ArrayBuffer | Uint8Array): Uint8Array => {
|
|
42
|
+
const srcBytes = src instanceof Uint8Array ? src : new Uint8Array(src);
|
|
43
|
+
const dst = new Uint8Array(bitPackedByteCount(srcBytes.length));
|
|
44
|
+
for (let i = 0; i < srcBytes.length; i++)
|
|
45
|
+
if (srcBytes[i] !== 0)
|
|
46
|
+
dst[Math.floor(i / BITS_PER_BYTE)] |= 1 << (i % BITS_PER_BYTE);
|
|
47
|
+
return dst;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const unpackBoolBits = (src: Uint8Array, sampleCount: number): ArrayBuffer => {
|
|
51
|
+
const buf = new ArrayBuffer(sampleCount);
|
|
52
|
+
const dst = new Uint8Array(buf);
|
|
53
|
+
for (let i = 0; i < sampleCount; i++)
|
|
54
|
+
dst[i] = (src[Math.floor(i / BITS_PER_BYTE)] >> (i % BITS_PER_BYTE)) & 1;
|
|
55
|
+
return buf;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/** Orders channel keys the way the Core does. The default comparator sorts numbers as
|
|
59
|
+
* strings and diverges as soon as two keys differ in decimal width. */
|
|
60
|
+
const compareKeys = (a: channel.Key, b: channel.Key): number => a - b;
|
|
33
61
|
|
|
34
62
|
const sortFramePayloadByKey = (framePayload: Payload): void => {
|
|
35
63
|
const { keys, series } = framePayload;
|
|
36
|
-
keys.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
64
|
+
if (keys.every((k, i) => i === 0 || keys[i - 1] <= k)) return;
|
|
65
|
+
const order = keys.map((_, i) => i).sort((a, b) => compareKeys(keys[a], keys[b]));
|
|
66
|
+
const orderedKeys = order.map((i) => keys[i]);
|
|
67
|
+
const orderedSeries = order.map((i) => series[i]);
|
|
68
|
+
for (let i = 0; i < keys.length; i++) {
|
|
69
|
+
keys[i] = orderedKeys[i];
|
|
70
|
+
series[i] = orderedSeries[i];
|
|
71
|
+
}
|
|
43
72
|
};
|
|
44
73
|
|
|
45
74
|
const ZERO_ALIGNMENTS_FLAG_POS = 5;
|
|
@@ -75,7 +104,7 @@ export class Codec {
|
|
|
75
104
|
update(keys: channel.Key[], dataTypes: DataType[]): void {
|
|
76
105
|
this.seqNum++;
|
|
77
106
|
const state = {
|
|
78
|
-
keys,
|
|
107
|
+
keys: [...keys],
|
|
79
108
|
keyDataTypes: new Map(),
|
|
80
109
|
hasVariableDataTypes: false,
|
|
81
110
|
};
|
|
@@ -84,7 +113,9 @@ export class Codec {
|
|
|
84
113
|
state.keyDataTypes.set(k, dt);
|
|
85
114
|
if (dt.isVariable) state.hasVariableDataTypes = true;
|
|
86
115
|
});
|
|
87
|
-
|
|
116
|
+
// Encoder and decoder walk this order positionally when a frame carries every
|
|
117
|
+
// channel, so it has to match the Core's.
|
|
118
|
+
state.keys.sort(compareKeys);
|
|
88
119
|
this.states.set(this.seqNum, state);
|
|
89
120
|
this.currState = state;
|
|
90
121
|
}
|
|
@@ -133,7 +164,7 @@ export class Codec {
|
|
|
133
164
|
`Series data type of ${series.dataType.toString()} does not match the data type of ${dt.toString()} for channel ${key}`,
|
|
134
165
|
);
|
|
135
166
|
|
|
136
|
-
byteArraySize += series
|
|
167
|
+
byteArraySize += seriesWireByteLength(series);
|
|
137
168
|
if (currDataSize === -1) {
|
|
138
169
|
currDataSize = pldLength;
|
|
139
170
|
startTime = series.timeRange?.start;
|
|
@@ -208,8 +239,11 @@ export class Codec {
|
|
|
208
239
|
view.setUint32(offset, seriesLengthOrSize, true);
|
|
209
240
|
offset += DATA_LENGTH_SIZE;
|
|
210
241
|
}
|
|
211
|
-
|
|
212
|
-
|
|
242
|
+
const bytes = series.dataType.equals(DataType.BOOLEAN)
|
|
243
|
+
? packBoolBits(series.data)
|
|
244
|
+
: new Uint8Array(series.data);
|
|
245
|
+
buffer.set(bytes, offset);
|
|
246
|
+
offset += bytes.byteLength;
|
|
213
247
|
if (!equalTimeRangesFlag && !timeRangesZeroFlag) {
|
|
214
248
|
view.setBigUint64(offset, series.timeRange?.start.valueOf() ?? 0n, true);
|
|
215
249
|
offset += TIMESTAMP_SIZE;
|
|
@@ -281,12 +315,15 @@ export class Codec {
|
|
|
281
315
|
|
|
282
316
|
let dataByteLength = currSize;
|
|
283
317
|
if (!dataType.isVariable) dataByteLength *= dataType.density.valueOf();
|
|
284
|
-
|
|
318
|
+
const isBool = dataType.equals(DataType.BOOLEAN);
|
|
319
|
+
const wireByteLength = isBool ? bitPackedByteCount(currSize) : dataByteLength;
|
|
320
|
+
if (index + wireByteLength > view.byteLength) return false;
|
|
321
|
+
const wireBytes = src.slice(index, index + wireByteLength);
|
|
285
322
|
const currSeries: SeriesPayload = {
|
|
286
323
|
dataType,
|
|
287
|
-
data:
|
|
324
|
+
data: isBool ? unpackBoolBits(wireBytes, currSize) : wireBytes.buffer,
|
|
288
325
|
};
|
|
289
|
-
index +=
|
|
326
|
+
index += wireByteLength;
|
|
290
327
|
if (!equalTimeRangesFlag && !timeRangesZeroFlag) {
|
|
291
328
|
if (index + TIMESTAMP_SIZE * 2 > view.byteLength) return false;
|
|
292
329
|
const start = view.getBigUint64(index, true);
|
package/src/framer/deleter.ts
CHANGED
|
@@ -11,21 +11,19 @@ import { type UnaryClient } from "@synnaxlabs/freighter";
|
|
|
11
11
|
import { TimeRange } from "@synnaxlabs/x";
|
|
12
12
|
import { z } from "zod";
|
|
13
13
|
|
|
14
|
-
import {
|
|
14
|
+
import { keyZ, nameZ } from "@/channel/types.gen";
|
|
15
15
|
|
|
16
16
|
const reqZ = z.object({
|
|
17
|
-
keys:
|
|
17
|
+
keys: keyZ.array().optional(),
|
|
18
18
|
bounds: TimeRange.z,
|
|
19
|
-
names:
|
|
19
|
+
names: nameZ.array().optional(),
|
|
20
20
|
});
|
|
21
21
|
interface Request extends z.infer<typeof reqZ> {}
|
|
22
22
|
|
|
23
23
|
const resZ = z.object({});
|
|
24
24
|
|
|
25
|
+
/** Deletes a time range of telemetry from a Core. Reach it through `client.telem`. */
|
|
25
26
|
export class Deleter {
|
|
26
|
-
/*
|
|
27
|
-
Deleter is used to delete a time range of telemetry from the data engine.
|
|
28
|
-
*/
|
|
29
27
|
private readonly client: UnaryClient;
|
|
30
28
|
|
|
31
29
|
constructor(client: UnaryClient) {
|
package/src/framer/external.ts
CHANGED
|
@@ -7,8 +7,18 @@
|
|
|
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 { type ChannelRetriever } from "@/framer/adapter";
|
|
11
|
+
export { type RemoteReader } from "@/framer/cache/reader";
|
|
12
|
+
export {
|
|
13
|
+
type StatusHandler,
|
|
14
|
+
type StreamHandler,
|
|
15
|
+
type Subscription,
|
|
16
|
+
} from "@/framer/cache/streamer";
|
|
17
|
+
export { IDENTITY_TRANSFORM, type Transform } from "@/framer/cache/transform";
|
|
10
18
|
export * from "@/framer/client";
|
|
19
|
+
export * from "@/framer/feed";
|
|
11
20
|
export * from "@/framer/frame";
|
|
21
|
+
export * from "@/framer/hardened";
|
|
12
22
|
export * from "@/framer/iterator";
|
|
13
23
|
export * from "@/framer/reader";
|
|
14
24
|
export * from "@/framer/streamer";
|
|
@@ -0,0 +1,108 @@
|
|
|
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 MultiSeries, type TimeRange } from "@synnaxlabs/x";
|
|
11
|
+
|
|
12
|
+
import { type channel } from "@/channel";
|
|
13
|
+
import { Cache, type CacheProps } from "@/framer/cache/cache";
|
|
14
|
+
import { Reader, type ReaderProps } from "@/framer/cache/reader";
|
|
15
|
+
import {
|
|
16
|
+
MultiplexedStreamer,
|
|
17
|
+
type MultiplexedStreamerProps,
|
|
18
|
+
type StreamHandler,
|
|
19
|
+
type Subscription,
|
|
20
|
+
} from "@/framer/cache/streamer";
|
|
21
|
+
import { HardenedStreamer } from "@/framer/hardened";
|
|
22
|
+
import { type StreamOpener } from "@/framer/streamer";
|
|
23
|
+
|
|
24
|
+
/** Props for {@link Feed}, including the transport it reads and streams through. */
|
|
25
|
+
export interface FeedProps
|
|
26
|
+
extends
|
|
27
|
+
CacheProps,
|
|
28
|
+
Omit<ReaderProps, "cache">,
|
|
29
|
+
Omit<MultiplexedStreamerProps, "cache" | "openStreamer"> {
|
|
30
|
+
openStreamer: StreamOpener;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** The part of {@link FeedProps} a caller sets. The client supplies the rest. */
|
|
34
|
+
export interface FeedOptions extends Omit<FeedProps, "readRemote" | "openStreamer"> {}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Cached, demand-managed access to channel telemetry: durable streaming
|
|
38
|
+
* subscriptions multiplexed onto one frame stream, and batched historical reads
|
|
39
|
+
* served through per-channel rolling buffers.
|
|
40
|
+
*/
|
|
41
|
+
export class Feed {
|
|
42
|
+
private readonly cache: Cache;
|
|
43
|
+
private readonly reader: Reader;
|
|
44
|
+
private readonly streamer: MultiplexedStreamer;
|
|
45
|
+
|
|
46
|
+
constructor(props: FeedProps) {
|
|
47
|
+
const {
|
|
48
|
+
readRemote,
|
|
49
|
+
openStreamer,
|
|
50
|
+
transform,
|
|
51
|
+
instrumentation,
|
|
52
|
+
dynamicBufferSize,
|
|
53
|
+
gcInterval,
|
|
54
|
+
staleEntryThreshold,
|
|
55
|
+
removalDelay,
|
|
56
|
+
breaker,
|
|
57
|
+
batchDebounce,
|
|
58
|
+
overlapThreshold,
|
|
59
|
+
} = props;
|
|
60
|
+
this.cache = new Cache({
|
|
61
|
+
transform,
|
|
62
|
+
dynamicBufferSize,
|
|
63
|
+
gcInterval,
|
|
64
|
+
staleEntryThreshold,
|
|
65
|
+
instrumentation: instrumentation?.child("cache"),
|
|
66
|
+
});
|
|
67
|
+
this.reader = new Reader({
|
|
68
|
+
readRemote,
|
|
69
|
+
cache: this.cache,
|
|
70
|
+
batchDebounce,
|
|
71
|
+
overlapThreshold,
|
|
72
|
+
});
|
|
73
|
+
this.streamer = new MultiplexedStreamer({
|
|
74
|
+
cache: this.cache,
|
|
75
|
+
openStreamer: async (config, { onReopen, onDrop }) =>
|
|
76
|
+
await HardenedStreamer.open(openStreamer, config, breaker, onReopen, onDrop),
|
|
77
|
+
removalDelay,
|
|
78
|
+
breaker,
|
|
79
|
+
instrumentation: instrumentation?.child("streamer"),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Registers durable streaming demand for the given keys. Returns synchronously;
|
|
85
|
+
* convergence failures surface as per-key statuses, never as rejections. The
|
|
86
|
+
* handler's first call precedes registration, so a throw from it leaves no
|
|
87
|
+
* subscription behind.
|
|
88
|
+
* @throws {UnexpectedError} if the feed has been closed.
|
|
89
|
+
*/
|
|
90
|
+
stream(handler: StreamHandler, keys: channel.Key[]): Subscription {
|
|
91
|
+
return this.streamer.stream(handler, keys);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Reads the given time range for the given channel, serving from the cache and
|
|
96
|
+
* gap-filling from the cluster.
|
|
97
|
+
*/
|
|
98
|
+
async read(tr: TimeRange, key: channel.Key): Promise<MultiSeries> {
|
|
99
|
+
return await this.reader.read(tr, key);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Closes the feed, releasing the stream and all cached buffers. */
|
|
103
|
+
async close(): Promise<void> {
|
|
104
|
+
await this.streamer.close();
|
|
105
|
+
await this.reader.close();
|
|
106
|
+
this.cache.close();
|
|
107
|
+
}
|
|
108
|
+
}
|
package/src/framer/frame.ts
CHANGED
|
@@ -26,6 +26,7 @@ import { UnexpectedError, ValidationError } from "@/errors";
|
|
|
26
26
|
|
|
27
27
|
type ColumnType = "key" | "name" | null;
|
|
28
28
|
|
|
29
|
+
/** A frame's shape without its samples, for logging and debugging. */
|
|
29
30
|
export interface Digest extends Record<channel.Key | channel.Name, SeriesDigest[]> {}
|
|
30
31
|
|
|
31
32
|
const columnType = (columns: channel.PrimitiveParams): ColumnType => {
|
|
@@ -53,6 +54,7 @@ const validateMatchedColsAndSeries = (
|
|
|
53
54
|
);
|
|
54
55
|
};
|
|
55
56
|
|
|
57
|
+
/** Anything {@link Frame}'s constructor accepts. */
|
|
56
58
|
export type CrudeFrame =
|
|
57
59
|
| Frame
|
|
58
60
|
| CrudePayload
|
|
@@ -108,7 +110,6 @@ export class Frame {
|
|
|
108
110
|
return;
|
|
109
111
|
}
|
|
110
112
|
|
|
111
|
-
// Construction from a map.
|
|
112
113
|
if (columnsOrData instanceof Map) {
|
|
113
114
|
columnsOrData.forEach((v, k) => this.push(k, ...array.toArray(v)));
|
|
114
115
|
return;
|
|
@@ -116,7 +117,6 @@ export class Frame {
|
|
|
116
117
|
|
|
117
118
|
const isObject = typeof columnsOrData === "object" && !Array.isArray(columnsOrData);
|
|
118
119
|
|
|
119
|
-
// Construction from a payload.
|
|
120
120
|
if (isObject) {
|
|
121
121
|
if ("keys" in columnsOrData && "series" in columnsOrData) {
|
|
122
122
|
const data_ = columnsOrData as Payload;
|
|
@@ -124,7 +124,8 @@ export class Frame {
|
|
|
124
124
|
data_.keys ??= [];
|
|
125
125
|
const series = data_.series.map((a) => seriesFromPayload(a));
|
|
126
126
|
validateMatchedColsAndSeries(data_.keys, series);
|
|
127
|
-
data_.keys.
|
|
127
|
+
this.columns = data_.keys.slice();
|
|
128
|
+
this.series = series;
|
|
128
129
|
} else
|
|
129
130
|
Object.entries(columnsOrData).forEach(([k, v]) => {
|
|
130
131
|
const key = parseInt(k, 10);
|
|
@@ -134,7 +135,6 @@ export class Frame {
|
|
|
134
135
|
return;
|
|
135
136
|
}
|
|
136
137
|
|
|
137
|
-
// Construction from a set of series and columns.
|
|
138
138
|
if (
|
|
139
139
|
Array.isArray(columnsOrData) ||
|
|
140
140
|
["string", "number"].includes(typeof columnsOrData)
|
|
@@ -197,9 +197,7 @@ export class Frame {
|
|
|
197
197
|
return unique.unique(this.names);
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
-
/**
|
|
201
|
-
* @returns the unique columns in the frame.
|
|
202
|
-
*/
|
|
200
|
+
/** @returns the unique columns in the frame. */
|
|
203
201
|
get uniqueColumns(): channel.Key[] | channel.Name[] {
|
|
204
202
|
return this.colType === "key" ? this.uniqueKeys : this.uniqueNames;
|
|
205
203
|
}
|
|
@@ -246,8 +244,8 @@ export class Frame {
|
|
|
246
244
|
*/
|
|
247
245
|
get isWeaklyAligned(): boolean {
|
|
248
246
|
if (this.columns.length <= 1) return true;
|
|
249
|
-
const
|
|
250
|
-
return
|
|
247
|
+
const { timeRanges } = this;
|
|
248
|
+
return timeRanges.every((tr) => tr.equals(timeRanges[0]));
|
|
251
249
|
}
|
|
252
250
|
|
|
253
251
|
timeRange(col?: channel.Key | channel.Name): TimeRange {
|
|
@@ -288,19 +286,10 @@ export class Frame {
|
|
|
288
286
|
return new MultiSeries(this.series.filter((_, i) => this.columns[i] === key));
|
|
289
287
|
}
|
|
290
288
|
|
|
291
|
-
/**
|
|
292
|
-
* Pushes a set of series for the given channel onto the frame.
|
|
293
|
-
*
|
|
294
|
-
* @param key the channel key or name;
|
|
295
|
-
* @param v the series to push.
|
|
296
|
-
*/
|
|
289
|
+
/** Pushes a set of series for the given channel onto the frame. */
|
|
297
290
|
push(key: channel.Key | channel.Name, ...v: Series[]): void;
|
|
298
291
|
|
|
299
|
-
/**
|
|
300
|
-
* Pushes the frame onto the current frame.
|
|
301
|
-
*
|
|
302
|
-
* @param frame - the frame to push.
|
|
303
|
-
*/
|
|
292
|
+
/** Pushes the frame onto the current frame. */
|
|
304
293
|
push(frame: Frame): void;
|
|
305
294
|
|
|
306
295
|
push(keyOrFrame: channel.Key | channel.Name | Frame, ...v: Series[]): void {
|
|
@@ -348,8 +337,7 @@ export class Frame {
|
|
|
348
337
|
|
|
349
338
|
/**
|
|
350
339
|
* @returns a new frame containing the mapped output of the provided function.
|
|
351
|
-
* @param fn a function that takes a channel key and series and returns a
|
|
352
|
-
* boolean.
|
|
340
|
+
* @param fn a function that takes a channel key and series and returns a boolean.
|
|
353
341
|
*/
|
|
354
342
|
map(
|
|
355
343
|
fn: (
|
|
@@ -380,7 +368,6 @@ export class Frame {
|
|
|
380
368
|
|
|
381
369
|
/**
|
|
382
370
|
* Iterates over all series in the current frame.
|
|
383
|
-
*
|
|
384
371
|
* @param fn a function that takes a channel key and series.
|
|
385
372
|
*/
|
|
386
373
|
forEach(fn: (k: channel.Key | channel.Name, arr: Series, i: number) => void): void {
|
|
@@ -470,6 +457,7 @@ export class Frame {
|
|
|
470
457
|
}
|
|
471
458
|
}
|
|
472
459
|
|
|
460
|
+
/** Zod schema for a frame on the wire. */
|
|
473
461
|
export const frameZ = z.object({
|
|
474
462
|
keys: z.union([
|
|
475
463
|
z.null().transform<number[]>(() => []),
|
|
@@ -485,11 +473,13 @@ export interface Payload extends z.infer<typeof frameZ> {}
|
|
|
485
473
|
|
|
486
474
|
export interface CrudePayload extends z.input<typeof frameZ> {}
|
|
487
475
|
|
|
476
|
+
/** Rebuilds a {@link Series} from its wire form. */
|
|
488
477
|
export const seriesFromPayload = (series: SeriesPayload): Series => {
|
|
489
478
|
const { dataType, data, timeRange, alignment } = series;
|
|
490
479
|
return new Series({ data, dataType, timeRange, glBufferUsage: "static", alignment });
|
|
491
480
|
};
|
|
492
481
|
|
|
482
|
+
/** Reduces a {@link Series} to its wire form. */
|
|
493
483
|
export const seriesToPayload = (series: Series): SeriesPayload => ({
|
|
494
484
|
timeRange: series.timeRange,
|
|
495
485
|
dataType: series.dataType,
|