@synnaxlabs/client 0.53.0 → 0.54.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/.turbo/turbo-build.log +14 -8
- package/dist/client.cjs +48 -54
- package/dist/client.js +12360 -15511
- package/dist/src/access/action/index.d.ts +2 -0
- package/dist/src/access/action/index.d.ts.map +1 -0
- package/dist/src/access/{payload.d.ts → action/types.gen.d.ts} +2 -1
- package/dist/src/access/action/types.gen.d.ts.map +1 -0
- package/dist/src/access/enforce.d.ts +2 -2
- package/dist/src/access/enforce.d.ts.map +1 -1
- package/dist/src/access/external.d.ts +1 -1
- package/dist/src/access/external.d.ts.map +1 -1
- package/dist/src/access/policy/client.d.ts +233 -389
- package/dist/src/access/policy/client.d.ts.map +1 -1
- package/dist/src/access/policy/external.d.ts +1 -1
- package/dist/src/access/policy/external.d.ts.map +1 -1
- package/dist/src/access/policy/types.gen.d.ts +120 -0
- package/dist/src/access/policy/types.gen.d.ts.map +1 -0
- package/dist/src/access/role/client.d.ts +1 -1
- package/dist/src/access/role/client.d.ts.map +1 -1
- package/dist/src/access/role/external.d.ts +1 -1
- package/dist/src/access/role/external.d.ts.map +1 -1
- package/dist/src/access/role/types.gen.d.ts +34 -0
- package/dist/src/access/role/types.gen.d.ts.map +1 -0
- package/dist/src/arc/client.d.ts +2 -2
- package/dist/src/arc/client.d.ts.map +1 -1
- package/dist/src/arc/compiler/index.d.ts +2 -0
- package/dist/src/arc/compiler/index.d.ts.map +1 -0
- package/dist/src/arc/compiler/types.gen.d.ts +12 -0
- package/dist/src/arc/compiler/types.gen.d.ts.map +1 -0
- package/dist/src/arc/external.d.ts +6 -1
- package/dist/src/arc/external.d.ts.map +1 -1
- package/dist/src/arc/graph/index.d.ts +2 -0
- package/dist/src/arc/graph/index.d.ts.map +1 -0
- package/dist/src/arc/graph/types.gen.d.ts +644 -0
- package/dist/src/arc/graph/types.gen.d.ts.map +1 -0
- package/dist/src/arc/ir/index.d.ts +2 -0
- package/dist/src/arc/ir/index.d.ts.map +1 -0
- package/dist/src/arc/ir/types.gen.d.ts +2988 -0
- package/dist/src/arc/ir/types.gen.d.ts.map +1 -0
- package/dist/src/arc/module/index.d.ts +2 -0
- package/dist/src/arc/module/index.d.ts.map +1 -0
- package/dist/src/arc/module/types.gen.d.ts +1138 -0
- package/dist/src/arc/module/types.gen.d.ts.map +1 -0
- package/dist/src/arc/program/index.d.ts +2 -0
- package/dist/src/arc/program/index.d.ts.map +1 -0
- package/dist/src/arc/program/types.gen.d.ts +1138 -0
- package/dist/src/arc/program/types.gen.d.ts.map +1 -0
- package/dist/src/arc/text/index.d.ts +2 -0
- package/dist/src/arc/text/index.d.ts.map +1 -0
- package/dist/src/arc/text/types.gen.d.ts +8 -0
- package/dist/src/arc/text/types.gen.d.ts.map +1 -0
- package/dist/src/arc/types/index.d.ts +2 -0
- package/dist/src/arc/types/index.d.ts.map +1 -0
- package/dist/src/arc/types/types.gen.d.ts +237 -0
- package/dist/src/arc/types/types.gen.d.ts.map +1 -0
- package/dist/src/arc/types.gen.d.ts +2394 -0
- package/dist/src/arc/types.gen.d.ts.map +1 -0
- package/dist/src/channel/client.d.ts +5 -4
- package/dist/src/channel/client.d.ts.map +1 -1
- package/dist/src/channel/external.d.ts +1 -0
- package/dist/src/channel/external.d.ts.map +1 -1
- package/dist/src/channel/payload.d.ts +93 -178
- package/dist/src/channel/payload.d.ts.map +1 -1
- package/dist/src/channel/retriever.d.ts +3 -2
- package/dist/src/channel/retriever.d.ts.map +1 -1
- package/dist/src/channel/types.gen.d.ts +151 -0
- package/dist/src/channel/types.gen.d.ts.map +1 -0
- package/dist/src/channel/writer.d.ts +1 -1
- package/dist/src/channel/writer.d.ts.map +1 -1
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/cluster/index.d.ts +2 -0
- package/dist/src/cluster/index.d.ts.map +1 -0
- package/dist/src/cluster/types.gen.d.ts +4 -0
- package/dist/src/cluster/types.gen.d.ts.map +1 -0
- package/dist/src/control/state.d.ts +14 -9
- package/dist/src/control/state.d.ts.map +1 -1
- package/dist/src/device/client.d.ts +7 -12
- package/dist/src/device/client.d.ts.map +1 -1
- package/dist/src/device/external.d.ts +1 -1
- package/dist/src/device/external.d.ts.map +1 -1
- package/dist/src/device/types.gen.d.ts +163 -0
- package/dist/src/device/types.gen.d.ts.map +1 -0
- package/dist/src/framer/adapter.d.ts +2 -2
- package/dist/src/framer/adapter.d.ts.map +1 -1
- package/dist/src/framer/client.d.ts +7 -7
- package/dist/src/framer/client.d.ts.map +1 -1
- package/dist/src/framer/codec.d.ts +5 -5
- package/dist/src/framer/codec.d.ts.map +1 -1
- package/dist/src/framer/external.d.ts +1 -1
- package/dist/src/framer/external.d.ts.map +1 -1
- package/dist/src/framer/frame.d.ts +18 -18
- package/dist/src/framer/frame.d.ts.map +1 -1
- package/dist/src/framer/reader.d.ts +1 -1
- package/dist/src/framer/reader.d.ts.map +1 -1
- package/dist/src/framer/streamer.d.ts +177 -114
- package/dist/src/framer/streamer.d.ts.map +1 -1
- package/dist/src/framer/types.gen.d.ts +9 -0
- package/dist/src/framer/types.gen.d.ts.map +1 -0
- package/dist/src/framer/writer.d.ts +192 -128
- package/dist/src/framer/writer.d.ts.map +1 -1
- package/dist/src/group/client.d.ts +17 -17
- package/dist/src/group/client.d.ts.map +1 -1
- package/dist/src/group/external.d.ts +1 -1
- package/dist/src/group/external.d.ts.map +1 -1
- package/dist/src/group/types.gen.d.ts +23 -0
- package/dist/src/group/types.gen.d.ts.map +1 -0
- package/dist/src/label/client.d.ts +51 -72
- package/dist/src/label/client.d.ts.map +1 -1
- package/dist/src/label/payload.d.ts +30 -8
- package/dist/src/label/payload.d.ts.map +1 -1
- package/dist/src/lineplot/client.d.ts +2 -11
- package/dist/src/lineplot/client.d.ts.map +1 -1
- package/dist/src/lineplot/external.d.ts +1 -1
- package/dist/src/lineplot/external.d.ts.map +1 -1
- package/dist/src/lineplot/types.gen.d.ts +33 -0
- package/dist/src/lineplot/types.gen.d.ts.map +1 -0
- package/dist/src/log/client.d.ts +2 -11
- package/dist/src/log/client.d.ts.map +1 -1
- package/dist/src/log/external.d.ts +1 -1
- package/dist/src/log/external.d.ts.map +1 -1
- package/dist/src/log/types.gen.d.ts +33 -0
- package/dist/src/log/types.gen.d.ts.map +1 -0
- package/dist/src/ontology/client.d.ts +31 -31
- package/dist/src/ontology/payload.d.ts +74 -99
- package/dist/src/ontology/payload.d.ts.map +1 -1
- package/dist/src/ontology/types.gen.d.ts +30 -0
- package/dist/src/ontology/types.gen.d.ts.map +1 -0
- package/dist/src/ontology/writer.d.ts +80 -80
- package/dist/src/rack/client.d.ts +22 -11
- package/dist/src/rack/client.d.ts.map +1 -1
- package/dist/src/rack/external.d.ts +1 -1
- package/dist/src/rack/external.d.ts.map +1 -1
- package/dist/src/rack/types.gen.d.ts +72 -0
- package/dist/src/rack/types.gen.d.ts.map +1 -0
- package/dist/src/range/alias/types.gen.d.ts +14 -0
- package/dist/src/range/alias/types.gen.d.ts.map +1 -0
- package/dist/src/range/kv/types.gen.d.ts +13 -0
- package/dist/src/range/kv/types.gen.d.ts.map +1 -0
- package/dist/src/ranger/alias/client.d.ts +1 -1
- package/dist/src/ranger/alias/client.d.ts.map +1 -1
- package/dist/src/ranger/alias/external.d.ts +3 -1
- package/dist/src/ranger/alias/external.d.ts.map +1 -1
- package/dist/src/ranger/alias/payload.d.ts +5 -9
- package/dist/src/ranger/alias/payload.d.ts.map +1 -1
- package/dist/src/ranger/alias/payload.spec.d.ts +2 -0
- package/dist/src/ranger/alias/payload.spec.d.ts.map +1 -0
- package/dist/src/ranger/alias/types.gen.d.ts +14 -0
- package/dist/src/ranger/alias/types.gen.d.ts.map +1 -0
- package/dist/src/ranger/client.d.ts +10 -15
- package/dist/src/ranger/client.d.ts.map +1 -1
- package/dist/src/ranger/external.d.ts +4 -4
- package/dist/src/ranger/external.d.ts.map +1 -1
- package/dist/src/ranger/kv/client.d.ts +1 -1
- package/dist/src/ranger/kv/client.d.ts.map +1 -1
- package/dist/src/ranger/kv/external.d.ts +3 -1
- package/dist/src/ranger/kv/external.d.ts.map +1 -1
- package/dist/src/ranger/kv/payload.d.ts +6 -13
- package/dist/src/ranger/kv/payload.d.ts.map +1 -1
- package/dist/src/ranger/kv/types.gen.d.ts +13 -0
- package/dist/src/ranger/kv/types.gen.d.ts.map +1 -0
- package/dist/src/ranger/payload.d.ts +2 -97
- package/dist/src/ranger/payload.d.ts.map +1 -1
- package/dist/src/ranger/types.gen.d.ts +219 -0
- package/dist/src/ranger/types.gen.d.ts.map +1 -0
- package/dist/src/ranger/writer.d.ts +25 -25
- package/dist/src/ranger/writer.d.ts.map +1 -1
- package/dist/src/schematic/client.d.ts +2 -11
- package/dist/src/schematic/client.d.ts.map +1 -1
- package/dist/src/schematic/external.d.ts +1 -1
- package/dist/src/schematic/external.d.ts.map +1 -1
- package/dist/src/schematic/symbol/client.d.ts +1 -2
- package/dist/src/schematic/symbol/client.d.ts.map +1 -1
- package/dist/src/schematic/symbol/external.d.ts +1 -1
- package/dist/src/schematic/symbol/external.d.ts.map +1 -1
- package/dist/src/schematic/symbol/types.gen.d.ts +277 -0
- package/dist/src/schematic/symbol/types.gen.d.ts.map +1 -0
- package/dist/src/schematic/types.gen.d.ts +35 -0
- package/dist/src/schematic/types.gen.d.ts.map +1 -0
- package/dist/src/status/client.d.ts +2 -0
- package/dist/src/status/client.d.ts.map +1 -1
- package/dist/src/status/payload.d.ts +25 -54
- package/dist/src/status/payload.d.ts.map +1 -1
- package/dist/src/table/client.d.ts +2 -11
- package/dist/src/table/client.d.ts.map +1 -1
- package/dist/src/table/external.d.ts +1 -1
- package/dist/src/table/external.d.ts.map +1 -1
- package/dist/src/table/types.gen.d.ts +33 -0
- package/dist/src/table/types.gen.d.ts.map +1 -0
- package/dist/src/task/client.d.ts +15 -20
- package/dist/src/task/client.d.ts.map +1 -1
- package/dist/src/task/external.d.ts +1 -1
- package/dist/src/task/external.d.ts.map +1 -1
- package/dist/src/task/types.gen.d.ts +155 -0
- package/dist/src/task/types.gen.d.ts.map +1 -0
- package/dist/src/user/client.d.ts +3 -3
- 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 +35 -0
- package/dist/src/user/types.gen.d.ts.map +1 -0
- package/dist/src/util/decodeJSONString.d.ts.map +1 -1
- package/dist/src/view/client.d.ts +1 -10
- package/dist/src/view/client.d.ts.map +1 -1
- package/dist/src/view/external.d.ts +1 -1
- package/dist/src/view/external.d.ts.map +1 -1
- package/dist/src/view/types.gen.d.ts +35 -0
- package/dist/src/view/types.gen.d.ts.map +1 -0
- package/dist/src/workspace/client.d.ts +2 -11
- package/dist/src/workspace/client.d.ts.map +1 -1
- package/dist/src/workspace/external.d.ts +1 -1
- package/dist/src/workspace/external.d.ts.map +1 -1
- package/dist/src/workspace/types.gen.d.ts +34 -0
- package/dist/src/workspace/types.gen.d.ts.map +1 -0
- package/package.json +11 -11
- package/src/access/action/index.ts +11 -0
- package/src/access/{payload.ts → action/types.gen.ts} +4 -1
- package/src/access/enforce.spec.ts +1 -2
- package/src/access/enforce.ts +2 -2
- package/src/access/external.ts +1 -1
- package/src/access/policy/client.ts +2 -2
- package/src/access/policy/external.ts +1 -1
- package/src/access/policy/types.gen.ts +44 -0
- package/src/access/role/client.ts +2 -2
- package/src/access/role/external.ts +1 -1
- package/src/access/role/types.gen.ts +46 -0
- package/src/arc/access.spec.ts +18 -6
- package/src/arc/client.ts +3 -3
- package/src/{framer/payload.ts → arc/compiler/index.ts} +1 -6
- package/src/arc/compiler/types.gen.ts +27 -0
- package/src/arc/external.ts +6 -1
- package/src/arc/graph/index.ts +10 -0
- package/src/arc/graph/types.gen.ts +59 -0
- package/src/arc/ir/index.ts +10 -0
- package/src/arc/ir/types.gen.ts +166 -0
- package/src/arc/module/index.ts +10 -0
- package/src/arc/module/types.gen.ts +18 -0
- package/src/arc/program/index.ts +10 -0
- package/src/arc/program/types.gen.ts +18 -0
- package/src/arc/text/index.ts +10 -0
- package/src/arc/text/types.gen.ts +19 -0
- package/src/arc/types/index.ts +10 -0
- package/src/arc/types/types.gen.ts +132 -0
- package/src/arc/types.gen.ts +85 -0
- package/src/channel/client.ts +14 -15
- package/src/channel/external.ts +1 -0
- package/src/channel/payload.spec.ts +19 -16
- package/src/channel/payload.ts +14 -82
- package/src/channel/retriever.ts +9 -18
- package/src/channel/types.gen.ts +137 -0
- package/src/channel/writer.ts +2 -2
- package/src/client.ts +4 -0
- package/src/cluster/index.ts +10 -0
- package/src/cluster/types.gen.ts +16 -0
- package/src/control/state.ts +8 -6
- package/src/device/client.ts +14 -11
- package/src/device/device.spec.ts +95 -1
- package/src/device/external.ts +1 -1
- package/src/device/payload.spec.ts +26 -2
- package/src/device/types.gen.ts +100 -0
- package/src/framer/adapter.ts +7 -4
- package/src/framer/client.ts +15 -9
- package/src/framer/codec.spec.ts +25 -5
- package/src/framer/codec.ts +11 -9
- package/src/framer/deleter.spec.ts +0 -15
- package/src/framer/external.ts +1 -1
- package/src/framer/frame.ts +44 -36
- package/src/framer/reader.spec.ts +2 -2
- package/src/framer/reader.ts +6 -6
- package/src/framer/streamer.spec.ts +98 -0
- package/src/framer/streamer.ts +10 -0
- package/src/framer/types.gen.ts +20 -0
- package/src/framer/writer.ts +14 -8
- package/src/group/client.ts +1 -1
- package/src/group/external.ts +1 -1
- package/src/group/group.spec.ts +1 -1
- package/src/{access/role/payload.ts → group/types.gen.ts} +11 -11
- package/src/label/client.ts +2 -5
- package/src/label/label.spec.ts +12 -3
- package/src/label/payload.ts +3 -1
- package/src/lineplot/client.ts +9 -11
- package/src/lineplot/external.ts +1 -1
- package/src/lineplot/lineplot.spec.ts +40 -0
- package/src/lineplot/types.gen.ts +42 -0
- package/src/log/client.ts +9 -18
- package/src/log/external.ts +1 -1
- package/src/log/log.spec.ts +38 -0
- package/src/log/types.gen.ts +42 -0
- package/src/ontology/payload.ts +5 -29
- package/src/ontology/types.gen.ts +41 -0
- package/src/rack/client.ts +26 -10
- package/src/rack/external.ts +1 -1
- package/src/rack/rack.spec.ts +37 -0
- package/src/rack/types.gen.ts +62 -0
- package/src/range/alias/types.gen.ts +30 -0
- package/src/range/kv/types.gen.ts +28 -0
- package/src/ranger/alias/client.ts +1 -1
- package/src/ranger/alias/external.ts +3 -10
- package/src/ranger/alias/payload.spec.ts +52 -0
- package/src/ranger/alias/payload.ts +11 -10
- package/src/ranger/alias/types.gen.ts +30 -0
- package/src/ranger/client.ts +34 -45
- package/src/ranger/external.ts +3 -3
- package/src/ranger/kv/client.ts +3 -3
- package/src/ranger/kv/external.ts +3 -7
- package/src/ranger/kv/payload.ts +1 -6
- package/src/ranger/kv/types.gen.ts +28 -0
- package/src/ranger/payload.ts +2 -46
- package/src/ranger/ranger.spec.ts +2 -4
- package/src/ranger/types.gen.ts +66 -0
- package/src/ranger/writer.ts +2 -1
- package/src/schematic/client.ts +11 -14
- package/src/schematic/external.ts +1 -1
- package/src/schematic/schematic.spec.ts +54 -2
- package/src/schematic/symbol/client.ts +2 -4
- package/src/schematic/symbol/external.ts +1 -1
- package/src/schematic/symbol/types.gen.ts +124 -0
- package/src/schematic/types.gen.ts +44 -0
- package/src/status/client.ts +4 -3
- package/src/status/payload.ts +5 -4
- package/src/status/status.spec.ts +106 -11
- package/src/table/client.ts +10 -19
- package/src/table/external.ts +1 -1
- package/src/table/table.spec.ts +38 -0
- package/src/table/types.gen.ts +42 -0
- package/src/task/client.ts +30 -28
- package/src/task/external.ts +1 -1
- package/src/task/payload.spec.ts +19 -19
- package/src/task/task.spec.ts +127 -9
- package/src/task/types.gen.ts +169 -0
- package/src/user/client.ts +2 -2
- package/src/user/external.ts +1 -1
- package/src/user/types.gen.ts +49 -0
- package/src/util/decodeJSONString.ts +1 -1
- package/src/util/retrieve.ts +2 -2
- package/src/view/client.ts +2 -7
- package/src/view/external.ts +1 -1
- package/src/view/types.gen.ts +44 -0
- package/src/workspace/client.ts +10 -14
- package/src/workspace/external.ts +1 -1
- package/src/workspace/types.gen.ts +45 -0
- package/src/workspace/workspace.spec.ts +37 -0
- package/tsconfig.json +1 -3
- package/vite.config.ts +9 -2
- package/dist/src/access/payload.d.ts.map +0 -1
- package/dist/src/access/policy/payload.d.ts +0 -156
- package/dist/src/access/policy/payload.d.ts.map +0 -1
- package/dist/src/access/role/payload.d.ts +0 -27
- package/dist/src/access/role/payload.d.ts.map +0 -1
- package/dist/src/arc/payload.d.ts +0 -167
- package/dist/src/arc/payload.d.ts.map +0 -1
- package/dist/src/device/payload.d.ts +0 -281
- package/dist/src/device/payload.d.ts.map +0 -1
- package/dist/src/framer/payload.d.ts +0 -7
- package/dist/src/framer/payload.d.ts.map +0 -1
- package/dist/src/group/payload.d.ts +0 -16
- package/dist/src/group/payload.d.ts.map +0 -1
- package/dist/src/lineplot/payload.d.ts +0 -28
- package/dist/src/lineplot/payload.d.ts.map +0 -1
- package/dist/src/log/payload.d.ts +0 -28
- package/dist/src/log/payload.d.ts.map +0 -1
- package/dist/src/rack/payload.d.ts +0 -243
- package/dist/src/rack/payload.d.ts.map +0 -1
- package/dist/src/schematic/payload.d.ts +0 -38
- package/dist/src/schematic/payload.d.ts.map +0 -1
- package/dist/src/schematic/symbol/payload.d.ts +0 -169
- package/dist/src/schematic/symbol/payload.d.ts.map +0 -1
- package/dist/src/table/payload.d.ts +0 -33
- package/dist/src/table/payload.d.ts.map +0 -1
- package/dist/src/task/payload.d.ts +0 -123
- package/dist/src/task/payload.d.ts.map +0 -1
- package/dist/src/user/payload.d.ts +0 -22
- package/dist/src/user/payload.d.ts.map +0 -1
- package/dist/src/view/payload.d.ts +0 -20
- package/dist/src/view/payload.d.ts.map +0 -1
- package/dist/src/workspace/payload.d.ts +0 -33
- package/dist/src/workspace/payload.d.ts.map +0 -1
- package/src/access/policy/payload.ts +0 -37
- package/src/arc/payload.ts +0 -73
- package/src/device/payload.ts +0 -83
- package/src/group/payload.ts +0 -24
- package/src/lineplot/payload.ts +0 -29
- package/src/log/payload.ts +0 -29
- package/src/rack/payload.ts +0 -30
- package/src/schematic/payload.ts +0 -34
- package/src/schematic/symbol/payload.ts +0 -70
- package/src/table/payload.ts +0 -33
- package/src/task/payload.ts +0 -127
- package/src/user/payload.ts +0 -29
- package/src/view/payload.ts +0 -25
- package/src/workspace/payload.ts +0 -33
package/src/framer/adapter.ts
CHANGED
|
@@ -108,7 +108,7 @@ export class WriteAdapter {
|
|
|
108
108
|
return adapter;
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
async adaptParams(data: channel.Params): Promise<channel.
|
|
111
|
+
async adaptParams(data: channel.Params): Promise<channel.Key[]> {
|
|
112
112
|
const arrParams = channel.paramsZ.parse(data);
|
|
113
113
|
const keys = await Promise.all(
|
|
114
114
|
arrParams.map(async (p) => await this.adaptToKey(p)),
|
|
@@ -135,14 +135,14 @@ export class WriteAdapter {
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
private async fetchChannel(
|
|
138
|
-
ch: channel.
|
|
138
|
+
ch: channel.Key | channel.Name | channel.Payload,
|
|
139
139
|
): Promise<channel.Payload> {
|
|
140
140
|
const res = await this.retriever.retrieve(ch);
|
|
141
141
|
if (res.length === 0) throw new Error(`Channel ${JSON.stringify(ch)} not found`);
|
|
142
142
|
return res[0];
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
private async adaptToKey(k: channel.
|
|
145
|
+
private async adaptToKey(k: channel.Key | channel.Name): Promise<channel.Key> {
|
|
146
146
|
if (typeof k === "number") return k;
|
|
147
147
|
const res = await this.fetchChannel(k);
|
|
148
148
|
return res.key;
|
|
@@ -153,7 +153,10 @@ export class WriteAdapter {
|
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
async adapt(
|
|
156
|
-
columnsOrData:
|
|
156
|
+
columnsOrData:
|
|
157
|
+
| channel.Params
|
|
158
|
+
| Record<channel.Key | channel.Name, CrudeSeries>
|
|
159
|
+
| CrudeFrame,
|
|
157
160
|
series?: CrudeSeries | CrudeSeries[],
|
|
158
161
|
): Promise<Frame> {
|
|
159
162
|
if (typeof columnsOrData === "string" || typeof columnsOrData === "number") {
|
package/src/framer/client.ts
CHANGED
|
@@ -90,19 +90,19 @@ export class Client {
|
|
|
90
90
|
|
|
91
91
|
async write(
|
|
92
92
|
start: CrudeTimeStamp,
|
|
93
|
-
channel: channel.
|
|
93
|
+
channel: channel.Key | channel.Name,
|
|
94
94
|
data: CrudeSeries,
|
|
95
95
|
): Promise<void>;
|
|
96
96
|
|
|
97
97
|
async write(
|
|
98
98
|
start: CrudeTimeStamp,
|
|
99
|
-
channels: channel.
|
|
99
|
+
channels: channel.Key[] | channel.Name[],
|
|
100
100
|
data: CrudeSeries[],
|
|
101
101
|
): Promise<void>;
|
|
102
102
|
|
|
103
103
|
async write(
|
|
104
104
|
start: CrudeTimeStamp,
|
|
105
|
-
data: Record<channel.
|
|
105
|
+
data: Record<channel.Key | channel.Name, CrudeSeries>,
|
|
106
106
|
): Promise<void>;
|
|
107
107
|
|
|
108
108
|
/**
|
|
@@ -116,11 +116,11 @@ export class Client {
|
|
|
116
116
|
*/
|
|
117
117
|
async write(
|
|
118
118
|
start: CrudeTimeStamp,
|
|
119
|
-
channels: channel.Params | Record<channel.
|
|
119
|
+
channels: channel.Params | Record<channel.Key | channel.Name, CrudeSeries>,
|
|
120
120
|
data?: CrudeSeries | CrudeSeries[],
|
|
121
121
|
): Promise<void> {
|
|
122
122
|
if (data == null) {
|
|
123
|
-
const data_ = channels as Record<channel.
|
|
123
|
+
const data_ = channels as Record<channel.Key | channel.Name, CrudeSeries>;
|
|
124
124
|
const w = await this.openWriter({
|
|
125
125
|
start,
|
|
126
126
|
channels: Object.keys(data_),
|
|
@@ -142,7 +142,10 @@ export class Client {
|
|
|
142
142
|
await w.close();
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
async read(
|
|
145
|
+
async read(
|
|
146
|
+
tr: CrudeTimeRange,
|
|
147
|
+
channel: channel.Key | channel.Name,
|
|
148
|
+
): Promise<MultiSeries>;
|
|
146
149
|
async read(tr: CrudeTimeRange, channels: channel.Params): Promise<Frame>;
|
|
147
150
|
async read(request: ReadRequest): Promise<ReadableStream<Uint8Array>>;
|
|
148
151
|
async read(
|
|
@@ -152,7 +155,7 @@ export class Client {
|
|
|
152
155
|
if (!("start" in tr)) return this.reader.read(tr);
|
|
153
156
|
const { single } = channel.analyzeParams(channels!);
|
|
154
157
|
const fr = await this.readFrame(tr, channels!);
|
|
155
|
-
if (single) return fr.get(channels as channel.
|
|
158
|
+
if (single) return fr.get(channels as channel.Key | channel.Name);
|
|
156
159
|
return fr;
|
|
157
160
|
}
|
|
158
161
|
|
|
@@ -170,7 +173,10 @@ export class Client {
|
|
|
170
173
|
return frame;
|
|
171
174
|
}
|
|
172
175
|
|
|
173
|
-
async readLatest(
|
|
176
|
+
async readLatest(
|
|
177
|
+
channel: channel.Key | channel.Name,
|
|
178
|
+
n: number,
|
|
179
|
+
): Promise<MultiSeries>;
|
|
174
180
|
|
|
175
181
|
async readLatest(channels: channel.Params, n: number): Promise<Frame>;
|
|
176
182
|
|
|
@@ -180,7 +186,7 @@ export class Client {
|
|
|
180
186
|
): Promise<MultiSeries | Frame> {
|
|
181
187
|
const { single } = channel.analyzeParams(channels);
|
|
182
188
|
const fr = await this.readLatestNFrame(channels, n);
|
|
183
|
-
if (single) return fr.get(channels as channel.
|
|
189
|
+
if (single) return fr.get(channels as channel.Key | channel.Name);
|
|
184
190
|
return fr;
|
|
185
191
|
}
|
|
186
192
|
|
package/src/framer/codec.spec.ts
CHANGED
|
@@ -21,14 +21,14 @@ import {
|
|
|
21
21
|
WSWriterCodec,
|
|
22
22
|
} from "@/framer/codec";
|
|
23
23
|
import { Frame } from "@/framer/frame";
|
|
24
|
-
import { WriterCommand } from "@/framer/
|
|
24
|
+
import { WriterCommand } from "@/framer/types.gen";
|
|
25
25
|
import { type WriteRequest } from "@/framer/writer";
|
|
26
26
|
|
|
27
27
|
describe("encoder", () => {
|
|
28
28
|
describe("base codec", () => {
|
|
29
29
|
interface Spec {
|
|
30
30
|
name: string;
|
|
31
|
-
channels: channel.
|
|
31
|
+
channels: channel.Key[];
|
|
32
32
|
dataTypes: DataType[];
|
|
33
33
|
frame: framer.Frame;
|
|
34
34
|
}
|
|
@@ -117,7 +117,7 @@ describe("encoder", () => {
|
|
|
117
117
|
),
|
|
118
118
|
},
|
|
119
119
|
{
|
|
120
|
-
name: "
|
|
120
|
+
name: "All Same Non-Zero Time Range",
|
|
121
121
|
channels: [1, 2],
|
|
122
122
|
dataTypes: [DataType.UINT8, DataType.FLOAT32],
|
|
123
123
|
frame: new framer.Frame(
|
|
@@ -126,12 +126,32 @@ describe("encoder", () => {
|
|
|
126
126
|
new Series({
|
|
127
127
|
dataType: DataType.UINT8,
|
|
128
128
|
data: new Uint8Array([1]),
|
|
129
|
-
timeRange: new TimeStamp(
|
|
129
|
+
timeRange: new TimeStamp(1000000000).spanRange(5000000000),
|
|
130
130
|
}),
|
|
131
131
|
new Series({
|
|
132
132
|
dataType: DataType.FLOAT32,
|
|
133
133
|
data: new Float32Array([1, 2, 3, 4]),
|
|
134
|
-
timeRange: new TimeStamp(
|
|
134
|
+
timeRange: new TimeStamp(1000000000).spanRange(5000000000),
|
|
135
|
+
}),
|
|
136
|
+
],
|
|
137
|
+
),
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: "Different Non-Zero Time Ranges",
|
|
141
|
+
channels: [1, 2],
|
|
142
|
+
dataTypes: [DataType.UINT8, DataType.FLOAT32],
|
|
143
|
+
frame: new framer.Frame(
|
|
144
|
+
[1, 2],
|
|
145
|
+
[
|
|
146
|
+
new Series({
|
|
147
|
+
dataType: DataType.UINT8,
|
|
148
|
+
data: new Uint8Array([1]),
|
|
149
|
+
timeRange: new TimeStamp(1000000000).spanRange(5000000000),
|
|
150
|
+
}),
|
|
151
|
+
new Series({
|
|
152
|
+
dataType: DataType.FLOAT32,
|
|
153
|
+
data: new Float32Array([1, 2, 3, 4]),
|
|
154
|
+
timeRange: new TimeStamp(2000000000).spanRange(3000000000),
|
|
135
155
|
}),
|
|
136
156
|
],
|
|
137
157
|
),
|
package/src/framer/codec.ts
CHANGED
|
@@ -20,8 +20,8 @@ import { type z } from "zod";
|
|
|
20
20
|
import { type channel } from "@/channel";
|
|
21
21
|
import { ValidationError } from "@/errors";
|
|
22
22
|
import { type Frame, type Payload } from "@/framer/frame";
|
|
23
|
-
import { WriterCommand } from "@/framer/payload";
|
|
24
23
|
import { type StreamerResponse } from "@/framer/streamer";
|
|
24
|
+
import { WriterCommand } from "@/framer/types.gen";
|
|
25
25
|
import { type WriteRequest } from "@/framer/writer";
|
|
26
26
|
|
|
27
27
|
const seriesPldLength = (series: SeriesPayload): number =>
|
|
@@ -57,7 +57,7 @@ const SEQ_NUM_SIZE = 4;
|
|
|
57
57
|
const FLAGS_SIZE = 1;
|
|
58
58
|
|
|
59
59
|
interface CodecState {
|
|
60
|
-
keys: channel.
|
|
60
|
+
keys: channel.Key[];
|
|
61
61
|
keyDataTypes: Map<channel.Key, DataType>;
|
|
62
62
|
hasVariableDataTypes: boolean;
|
|
63
63
|
}
|
|
@@ -68,11 +68,11 @@ export class Codec {
|
|
|
68
68
|
private currState: CodecState | undefined;
|
|
69
69
|
private seqNum: number = 0;
|
|
70
70
|
|
|
71
|
-
constructor(keys: channel.
|
|
71
|
+
constructor(keys: channel.Key[] = [], dataTypes: DataType[] = []) {
|
|
72
72
|
if (keys.length > 0 || dataTypes.length > 0) this.update(keys, dataTypes);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
update(keys: channel.
|
|
75
|
+
update(keys: channel.Key[], dataTypes: DataType[]): void {
|
|
76
76
|
this.seqNum++;
|
|
77
77
|
const state = {
|
|
78
78
|
keys,
|
|
@@ -97,7 +97,7 @@ export class Codec {
|
|
|
97
97
|
`);
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
encode(payload: unknown, startOffset: number = 0): Uint8Array {
|
|
100
|
+
encode(payload: unknown, startOffset: number = 0): Uint8Array<ArrayBuffer> {
|
|
101
101
|
this.throwIfNotUpdated("encode");
|
|
102
102
|
let src = payload as Payload;
|
|
103
103
|
if (payload != null && typeof payload === "object" && "toPayload" in payload)
|
|
@@ -187,8 +187,9 @@ export class Codec {
|
|
|
187
187
|
|
|
188
188
|
if (equalTimeRangesFlag && !timeRangesZeroFlag) {
|
|
189
189
|
view.setBigUint64(offset, startTime?.valueOf() ?? 0n, true);
|
|
190
|
+
offset += TIMESTAMP_SIZE;
|
|
190
191
|
view.setBigUint64(offset, endTime?.valueOf() ?? 0n, true);
|
|
191
|
-
offset += TIMESTAMP_SIZE
|
|
192
|
+
offset += TIMESTAMP_SIZE;
|
|
192
193
|
}
|
|
193
194
|
|
|
194
195
|
if (equalAlignmentsFlag && !zeroAlignmentsFlag) {
|
|
@@ -211,8 +212,9 @@ export class Codec {
|
|
|
211
212
|
offset += series.data.byteLength;
|
|
212
213
|
if (!equalTimeRangesFlag && !timeRangesZeroFlag) {
|
|
213
214
|
view.setBigUint64(offset, series.timeRange?.start.valueOf() ?? 0n, true);
|
|
215
|
+
offset += TIMESTAMP_SIZE;
|
|
214
216
|
view.setBigUint64(offset, series.timeRange?.end.valueOf() ?? 0n, true);
|
|
215
|
-
offset += TIMESTAMP_SIZE
|
|
217
|
+
offset += TIMESTAMP_SIZE;
|
|
216
218
|
}
|
|
217
219
|
if (!equalAlignmentsFlag && !zeroAlignmentsFlag) {
|
|
218
220
|
view.setBigUint64(offset, series.alignment ?? 0n, true);
|
|
@@ -339,7 +341,7 @@ export class WSWriterCodec implements binary.Codec {
|
|
|
339
341
|
this.lowPerfCodec = binary.JSON_CODEC;
|
|
340
342
|
}
|
|
341
343
|
|
|
342
|
-
encode(payload: unknown): Uint8Array {
|
|
344
|
+
encode(payload: unknown): Uint8Array<ArrayBuffer> {
|
|
343
345
|
const pld = payload as WebsocketMessage<WriteRequest>;
|
|
344
346
|
if (pld.type == "close" || pld.payload?.command != WriterCommand.Write) {
|
|
345
347
|
const data = this.lowPerfCodec.encode(pld);
|
|
@@ -375,7 +377,7 @@ export class WSStreamerCodec implements binary.Codec {
|
|
|
375
377
|
this.lowPerfCodec = binary.JSON_CODEC;
|
|
376
378
|
}
|
|
377
379
|
|
|
378
|
-
encode(payload: unknown): Uint8Array {
|
|
380
|
+
encode(payload: unknown): Uint8Array<ArrayBuffer> {
|
|
379
381
|
return this.lowPerfCodec.encode(payload);
|
|
380
382
|
}
|
|
381
383
|
|
|
@@ -49,21 +49,6 @@ describe("Deleter", () => {
|
|
|
49
49
|
expect(deletedRes.data.length).toEqual(8);
|
|
50
50
|
expect(Array.from(deletedRes)).toEqual([3, 4, 5, 6, 7, 8, 9, 10]);
|
|
51
51
|
});
|
|
52
|
-
test("Client - delete name not found", async () => {
|
|
53
|
-
const [indexCh, dataCh] = await newIndexedPair(client);
|
|
54
|
-
const data = randomSeries(10, dataCh.dataType);
|
|
55
|
-
await client.write(TimeStamp.seconds(5), {
|
|
56
|
-
[indexCh.key]: secondsLinspace(5, 10),
|
|
57
|
-
[dataCh.key]: data,
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
await expect(
|
|
61
|
-
client.delete(["nonexistent_channel_name", dataCh.name], TimeRange.MAX),
|
|
62
|
-
).rejects.toThrow(NotFoundError);
|
|
63
|
-
|
|
64
|
-
const res = await client.read(TimeRange.MAX, dataCh.key);
|
|
65
|
-
expect(res.data).toEqual(data);
|
|
66
|
-
});
|
|
67
52
|
test("Client - delete key not found", async () => {
|
|
68
53
|
const [indexCh, dataCh] = await newIndexedPair(client);
|
|
69
54
|
const data = randomSeries(10, dataCh.dataType);
|
package/src/framer/external.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
export * from "@/framer/client";
|
|
11
11
|
export * from "@/framer/frame";
|
|
12
12
|
export * from "@/framer/iterator";
|
|
13
|
-
export * from "@/framer/payload";
|
|
14
13
|
export * from "@/framer/reader";
|
|
15
14
|
export * from "@/framer/streamer";
|
|
15
|
+
export * from "@/framer/types.gen";
|
|
16
16
|
export * from "@/framer/writer";
|
package/src/framer/frame.ts
CHANGED
|
@@ -26,13 +26,13 @@ import { UnexpectedError, ValidationError } from "@/errors";
|
|
|
26
26
|
|
|
27
27
|
type ColumnType = "key" | "name" | null;
|
|
28
28
|
|
|
29
|
-
export interface Digest extends Record<channel.
|
|
29
|
+
export interface Digest extends Record<channel.Key | channel.Name, SeriesDigest[]> {}
|
|
30
30
|
|
|
31
31
|
const columnType = (columns: channel.PrimitiveParams): ColumnType => {
|
|
32
32
|
const arrKeys = array.toArray(columns);
|
|
33
33
|
if (arrKeys.length === 0) return null;
|
|
34
34
|
if (typeof arrKeys[0] === "number") return "key";
|
|
35
|
-
if (!isNaN(parseInt(arrKeys[0]))) return "key";
|
|
35
|
+
if (!isNaN(parseInt(arrKeys[0], 10))) return "key";
|
|
36
36
|
return "name";
|
|
37
37
|
};
|
|
38
38
|
|
|
@@ -43,21 +43,21 @@ const validateMatchedColsAndSeries = (
|
|
|
43
43
|
const colsArr = array.toArray(columns);
|
|
44
44
|
if (colsArr.length === series.length) return;
|
|
45
45
|
const colType = columnType(columns);
|
|
46
|
-
if (
|
|
46
|
+
if (colType === null)
|
|
47
47
|
throw new ValidationError(
|
|
48
48
|
"[Frame] - channel keys or names must be provided when constructing a frame.",
|
|
49
49
|
);
|
|
50
50
|
throw new ValidationError(
|
|
51
|
-
`[Frame] - ${colType
|
|
52
|
-
Got ${colsArr.length} ${colType
|
|
51
|
+
`[Frame] - ${colType}s and series must be the same length.
|
|
52
|
+
Got ${colsArr.length} ${colType}s and ${series.length} series.`,
|
|
53
53
|
);
|
|
54
54
|
};
|
|
55
55
|
|
|
56
56
|
export type CrudeFrame =
|
|
57
57
|
| Frame
|
|
58
58
|
| CrudePayload
|
|
59
|
-
| Map<channel.
|
|
60
|
-
| Record<channel.
|
|
59
|
+
| Map<channel.Key | channel.Name, Series[] | Series>
|
|
60
|
+
| Record<channel.Key | channel.Name, Series[] | Series>;
|
|
61
61
|
|
|
62
62
|
/**
|
|
63
63
|
* A frame is a collection of series mapped to a particular channel. Frames
|
|
@@ -95,7 +95,7 @@ export type CrudeFrame =
|
|
|
95
95
|
* and array can be square.
|
|
96
96
|
*/
|
|
97
97
|
export class Frame {
|
|
98
|
-
readonly columns: channel.
|
|
98
|
+
readonly columns: channel.Key[] | channel.Name[] = [];
|
|
99
99
|
readonly series: Series[] = [];
|
|
100
100
|
|
|
101
101
|
constructor(
|
|
@@ -127,7 +127,7 @@ export class Frame {
|
|
|
127
127
|
data_.keys.forEach((key, i) => this.push(key, series[i]));
|
|
128
128
|
} else
|
|
129
129
|
Object.entries(columnsOrData).forEach(([k, v]) => {
|
|
130
|
-
const key = parseInt(k);
|
|
130
|
+
const key = parseInt(k, 10);
|
|
131
131
|
if (!isNaN(key)) return this.push(key, ...array.toArray(v));
|
|
132
132
|
this.push(k, ...array.toArray(v));
|
|
133
133
|
});
|
|
@@ -140,7 +140,7 @@ export class Frame {
|
|
|
140
140
|
["string", "number"].includes(typeof columnsOrData)
|
|
141
141
|
) {
|
|
142
142
|
const data_ = array.toArray(series);
|
|
143
|
-
const cols = array.toArray(columnsOrData) as channel.
|
|
143
|
+
const cols = array.toArray(columnsOrData) as channel.Key[] | channel.Name[];
|
|
144
144
|
validateMatchedColsAndSeries(cols, data_);
|
|
145
145
|
data_.forEach((d, i) => this.push(cols[i], d));
|
|
146
146
|
return;
|
|
@@ -167,16 +167,16 @@ export class Frame {
|
|
|
167
167
|
* @returns the channel keys if the frame is keyed by channel key, and throws an error
|
|
168
168
|
* otherwise.
|
|
169
169
|
*/
|
|
170
|
-
get keys(): channel.
|
|
170
|
+
get keys(): channel.Key[] {
|
|
171
171
|
if (this.colType === "name") throw new UnexpectedError("colType is not key");
|
|
172
|
-
return (this.columns as channel.
|
|
172
|
+
return (this.columns as channel.Key[]) ?? [];
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
/**
|
|
176
176
|
* @returns the unique channel keys if the frame is keyed by channel key, and throws an
|
|
177
177
|
* error otherwise.
|
|
178
178
|
*/
|
|
179
|
-
get uniqueKeys(): channel.
|
|
179
|
+
get uniqueKeys(): channel.Key[] {
|
|
180
180
|
return unique.unique(this.keys);
|
|
181
181
|
}
|
|
182
182
|
|
|
@@ -200,7 +200,7 @@ export class Frame {
|
|
|
200
200
|
/**
|
|
201
201
|
* @returns the unique columns in the frame.
|
|
202
202
|
*/
|
|
203
|
-
get uniqueColumns(): channel.
|
|
203
|
+
get uniqueColumns(): channel.Key[] | channel.Name[] {
|
|
204
204
|
return this.colType === "key" ? this.uniqueKeys : this.uniqueNames;
|
|
205
205
|
}
|
|
206
206
|
|
|
@@ -250,7 +250,7 @@ export class Frame {
|
|
|
250
250
|
return ranges.every((tr) => tr.equals(ranges[0]));
|
|
251
251
|
}
|
|
252
252
|
|
|
253
|
-
timeRange(col?: channel.
|
|
253
|
+
timeRange(col?: channel.Key | channel.Name): TimeRange {
|
|
254
254
|
if (col == null) {
|
|
255
255
|
if (this.columns.length === 0) return TimeRange.ZERO;
|
|
256
256
|
const start = TimeStamp.min(...this.series.map((a) => a.timeRange.start));
|
|
@@ -274,17 +274,17 @@ export class Frame {
|
|
|
274
274
|
* @returns lazy series matching the given channel key or name.
|
|
275
275
|
* @param key the channel key or name.
|
|
276
276
|
*/
|
|
277
|
-
get(key: channel.
|
|
277
|
+
get(key: channel.Key | channel.Name): MultiSeries;
|
|
278
278
|
|
|
279
279
|
/**
|
|
280
280
|
* @returns a frame with the given channel keys or names.
|
|
281
281
|
* @param keys the channel keys or names.
|
|
282
282
|
*/
|
|
283
|
-
get(keys: channel.
|
|
283
|
+
get(keys: channel.Key[] | channel.Name[]): Frame;
|
|
284
284
|
|
|
285
285
|
get(key: channel.PrimitiveParams): MultiSeries | Frame {
|
|
286
286
|
if (Array.isArray(key))
|
|
287
|
-
return this.filter((k) => (key as channel.
|
|
287
|
+
return this.filter((k) => (key as channel.Key[]).includes(k as channel.Key));
|
|
288
288
|
return new MultiSeries(this.series.filter((_, i) => this.columns[i] === key));
|
|
289
289
|
}
|
|
290
290
|
|
|
@@ -294,7 +294,7 @@ export class Frame {
|
|
|
294
294
|
* @param key the channel key or name;
|
|
295
295
|
* @param v the series to push.
|
|
296
296
|
*/
|
|
297
|
-
push(key: channel.
|
|
297
|
+
push(key: channel.Key | channel.Name, ...v: Series[]): void;
|
|
298
298
|
|
|
299
299
|
/**
|
|
300
300
|
* Pushes the frame onto the current frame.
|
|
@@ -303,7 +303,7 @@ export class Frame {
|
|
|
303
303
|
*/
|
|
304
304
|
push(frame: Frame): void;
|
|
305
305
|
|
|
306
|
-
push(keyOrFrame: channel.
|
|
306
|
+
push(keyOrFrame: channel.Key | channel.Name | Frame, ...v: Series[]): void {
|
|
307
307
|
if (keyOrFrame instanceof Frame) {
|
|
308
308
|
if (
|
|
309
309
|
keyOrFrame.colType != null &&
|
|
@@ -312,15 +312,15 @@ export class Frame {
|
|
|
312
312
|
)
|
|
313
313
|
throw new ValidationError("keyVariant must match");
|
|
314
314
|
this.series.push(...keyOrFrame.series);
|
|
315
|
-
(this.columns as channel.
|
|
315
|
+
(this.columns as channel.Key[]).push(...(keyOrFrame.columns as channel.Key[]));
|
|
316
316
|
} else {
|
|
317
317
|
this.series.push(...v);
|
|
318
318
|
if (typeof keyOrFrame === "string" && this.colType === "key")
|
|
319
319
|
throw new ValidationError("keyVariant must match");
|
|
320
320
|
else if (typeof keyOrFrame !== "string" && this.colType === "name")
|
|
321
321
|
throw new ValidationError("keyVariant must match");
|
|
322
|
-
(this.columns as channel.
|
|
323
|
-
...(Array.from({ length: v.length }, () => keyOrFrame) as channel.
|
|
322
|
+
(this.columns as channel.Key[]).push(
|
|
323
|
+
...(Array.from({ length: v.length }, () => keyOrFrame) as channel.Key[]),
|
|
324
324
|
);
|
|
325
325
|
}
|
|
326
326
|
}
|
|
@@ -330,7 +330,7 @@ export class Frame {
|
|
|
330
330
|
* provided frame.
|
|
331
331
|
*/
|
|
332
332
|
concat(frame: Frame): Frame {
|
|
333
|
-
return new Frame([...this.columns, ...frame.columns] as channel.
|
|
333
|
+
return new Frame([...this.columns, ...frame.columns] as channel.Key[], [
|
|
334
334
|
...this.series,
|
|
335
335
|
...frame.series,
|
|
336
336
|
]);
|
|
@@ -340,10 +340,10 @@ export class Frame {
|
|
|
340
340
|
* @returns true if the frame contains the provided channel key or name.
|
|
341
341
|
* @param channel the channel key or name to check.
|
|
342
342
|
*/
|
|
343
|
-
has(channel: channel.
|
|
343
|
+
has(channel: channel.Key | channel.Name): boolean {
|
|
344
344
|
if (typeof channel === "string" && this.colType === "key") return false;
|
|
345
345
|
if (typeof channel === "number" && this.colType === "name") return false;
|
|
346
|
-
return (this.columns as channel.
|
|
346
|
+
return (this.columns as channel.Key[]).includes(channel as channel.Key);
|
|
347
347
|
}
|
|
348
348
|
|
|
349
349
|
/**
|
|
@@ -352,7 +352,11 @@ export class Frame {
|
|
|
352
352
|
* boolean.
|
|
353
353
|
*/
|
|
354
354
|
map(
|
|
355
|
-
fn: (
|
|
355
|
+
fn: (
|
|
356
|
+
k: channel.Key | channel.Name,
|
|
357
|
+
arr: Series,
|
|
358
|
+
i: number,
|
|
359
|
+
) => [channel.Key | channel.Name, Series],
|
|
356
360
|
): Frame {
|
|
357
361
|
const frame = new Frame();
|
|
358
362
|
this.forEach((k, arr, i) => frame.push(...fn(k, arr, i)));
|
|
@@ -361,10 +365,10 @@ export class Frame {
|
|
|
361
365
|
|
|
362
366
|
mapFilter(
|
|
363
367
|
fn: (
|
|
364
|
-
k: channel.
|
|
368
|
+
k: channel.Key | channel.Name,
|
|
365
369
|
arr: Series,
|
|
366
370
|
i: number,
|
|
367
|
-
) => [channel.
|
|
371
|
+
) => [channel.Key | channel.Name, Series, boolean],
|
|
368
372
|
): Frame {
|
|
369
373
|
const frame = new Frame();
|
|
370
374
|
this.forEach((k, arr, i) => {
|
|
@@ -379,7 +383,7 @@ export class Frame {
|
|
|
379
383
|
*
|
|
380
384
|
* @param fn a function that takes a channel key and series.
|
|
381
385
|
*/
|
|
382
|
-
forEach(fn: (k: channel.
|
|
386
|
+
forEach(fn: (k: channel.Key | channel.Name, arr: Series, i: number) => void): void {
|
|
383
387
|
this.columns.forEach((k, i) => {
|
|
384
388
|
const a = this.series[i];
|
|
385
389
|
fn(k, a, i);
|
|
@@ -390,22 +394,24 @@ export class Frame {
|
|
|
390
394
|
* Iterates over all unique columns in the frame.
|
|
391
395
|
* @param fn a function that takes a channel key, multi-series, and index.
|
|
392
396
|
*/
|
|
393
|
-
forEachUnique(
|
|
397
|
+
forEachUnique(
|
|
398
|
+
fn: (k: channel.Key | channel.Name, ms: MultiSeries, i: number) => void,
|
|
399
|
+
): void {
|
|
394
400
|
this.uniqueColumns.forEach((k, i) => fn(k, this.get(k), i));
|
|
395
401
|
}
|
|
396
402
|
|
|
397
|
-
at(index: number, required: true): Record<channel.
|
|
403
|
+
at(index: number, required: true): Record<channel.Key | channel.Name, TelemValue>;
|
|
398
404
|
|
|
399
405
|
at(
|
|
400
406
|
index: number,
|
|
401
407
|
required?: false,
|
|
402
|
-
): Record<channel.
|
|
408
|
+
): Record<channel.Key | channel.Name, TelemValue | undefined>;
|
|
403
409
|
|
|
404
410
|
at(
|
|
405
411
|
index: number,
|
|
406
412
|
required = false,
|
|
407
|
-
): Record<channel.
|
|
408
|
-
const res: Record<channel.
|
|
413
|
+
): Record<channel.Key | channel.Name, TelemValue | undefined> {
|
|
414
|
+
const res: Record<channel.Key | channel.Name, TelemValue> = {};
|
|
409
415
|
this.uniqueColumns.forEach((k) => {
|
|
410
416
|
res[k] = this.get(k).at(index, required as true);
|
|
411
417
|
});
|
|
@@ -417,7 +423,9 @@ export class Frame {
|
|
|
417
423
|
* the provided filter function.
|
|
418
424
|
* @param fn a function that takes a channel key and series and returns a boolean.
|
|
419
425
|
*/
|
|
420
|
-
filter(
|
|
426
|
+
filter(
|
|
427
|
+
fn: (k: channel.Key | channel.Name, arr: Series, i: number) => boolean,
|
|
428
|
+
): Frame {
|
|
421
429
|
const frame = new Frame();
|
|
422
430
|
this.columns.forEach((k, i) => {
|
|
423
431
|
const a = this.series[i];
|
|
@@ -281,7 +281,7 @@ describe("Reader", () => {
|
|
|
281
281
|
it("should handle large amounts of channels", async () => {
|
|
282
282
|
const numGroups = 5;
|
|
283
283
|
const channelsPerGroup = 3;
|
|
284
|
-
const dataKeys: channel.
|
|
284
|
+
const dataKeys: channel.Key[] = [];
|
|
285
285
|
const expectedColumns = numGroups * (1 + channelsPerGroup);
|
|
286
286
|
|
|
287
287
|
// Store timestamps written per group for building expected rows later
|
|
@@ -298,7 +298,7 @@ describe("Reader", () => {
|
|
|
298
298
|
dataType: DataType.TIMESTAMP,
|
|
299
299
|
isIndex: true,
|
|
300
300
|
});
|
|
301
|
-
const groupChannels: channel.
|
|
301
|
+
const groupChannels: channel.Key[] = [index.key];
|
|
302
302
|
for (let c = 0; c < channelsPerGroup; c++) {
|
|
303
303
|
const data = await client.channels.create({
|
|
304
304
|
name: id.create(),
|
package/src/framer/reader.ts
CHANGED
|
@@ -18,7 +18,7 @@ import { Iterator, type IteratorConfig } from "@/framer/iterator";
|
|
|
18
18
|
export interface ReadRequest {
|
|
19
19
|
channels: channel.Params;
|
|
20
20
|
timeRange: CrudeTimeRange;
|
|
21
|
-
channelNames?: Record<channel.
|
|
21
|
+
channelNames?: Record<channel.Key | channel.Name, string>;
|
|
22
22
|
responseType: "csv";
|
|
23
23
|
iteratorConfig?: IteratorConfig;
|
|
24
24
|
}
|
|
@@ -70,7 +70,7 @@ export class Reader {
|
|
|
70
70
|
interface CreateCSVExportStreamParams {
|
|
71
71
|
iterator: Iterator;
|
|
72
72
|
channelPayloads: channel.Payload[];
|
|
73
|
-
headers?: Record<channel.
|
|
73
|
+
headers?: Record<channel.Key | channel.Name, string>;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
const createCSVReadableStream = ({
|
|
@@ -198,8 +198,8 @@ const createCSVReadableStream = ({
|
|
|
198
198
|
|
|
199
199
|
const groupChannelsByIndex = (
|
|
200
200
|
channels: channel.Payload[],
|
|
201
|
-
): Map<channel.Key, channel.
|
|
202
|
-
const groupMap = new Map<channel.Key, channel.
|
|
201
|
+
): Map<channel.Key, channel.Key[]> => {
|
|
202
|
+
const groupMap = new Map<channel.Key, channel.Key[]>();
|
|
203
203
|
for (const ch of channels) {
|
|
204
204
|
if (ch.index === 0) continue;
|
|
205
205
|
let group = groupMap.get(ch.index);
|
|
@@ -225,8 +225,8 @@ interface ColumnMetaResult {
|
|
|
225
225
|
|
|
226
226
|
const buildColumnMeta = (
|
|
227
227
|
channels: channel.Payload[],
|
|
228
|
-
groups: Map<channel.Key, channel.
|
|
229
|
-
headers?: Record<channel.
|
|
228
|
+
groups: Map<channel.Key, channel.Key[]>,
|
|
229
|
+
headers?: Record<channel.Key | channel.Name, string>,
|
|
230
230
|
): ColumnMetaResult => {
|
|
231
231
|
const channelMap = new Map(channels.map((ch) => [ch.key, ch]));
|
|
232
232
|
const columns: ColumnMeta[] = [];
|