@synnaxlabs/client 0.18.2 → 0.18.3
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
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @synnaxlabs/client@0.18.
|
|
2
|
+
> @synnaxlabs/client@0.18.3 build /home/runner/work/synnax/synnax/client/ts
|
|
3
3
|
> tsc --noEmit && vite build
|
|
4
4
|
|
|
5
5
|
[36mvite v5.1.2 [32mbuilding for production...[36m[39m
|
|
@@ -10,7 +10,7 @@ rendering chunks...
|
|
|
10
10
|
[36m[vite:dts][32m Start generate declaration files...[39m
|
|
11
11
|
computing gzip size...
|
|
12
12
|
[2mdist/[22m[36mclient.js [39m[1m[2m464.55 kB[22m[1m[22m[2m │ gzip: 97.51 kB[22m[2m │ map: 1,057.93 kB[22m
|
|
13
|
-
[32m[36m[vite:dts][32m Declaration files built in
|
|
13
|
+
[32m[36m[vite:dts][32m Declaration files built in 3860ms.
|
|
14
14
|
[39m
|
|
15
15
|
[2mdist/[22m[36mclient.cjs [39m[1m[2m308.33 kB[22m[1m[22m[2m │ gzip: 76.14 kB[22m[2m │ map: 1,006.49 kB[22m
|
|
16
|
-
[32m✓ built in 5.
|
|
16
|
+
[32m✓ built in 5.29s[39m
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"version": "1.0.0",
|
|
10
10
|
"license": "ISC",
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@synnaxlabs/client": "^0.18.
|
|
12
|
+
"@synnaxlabs/client": "^0.18.2"
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"node_modules/@grpc/grpc-js": {
|
|
@@ -3653,20 +3653,20 @@
|
|
|
3653
3653
|
}
|
|
3654
3654
|
},
|
|
3655
3655
|
"node_modules/@synnaxlabs/client": {
|
|
3656
|
-
"version": "0.18.
|
|
3657
|
-
"resolved": "https://registry.npmjs.org/@synnaxlabs/client/-/client-0.18.
|
|
3658
|
-
"integrity": "sha512-
|
|
3656
|
+
"version": "0.18.2",
|
|
3657
|
+
"resolved": "https://registry.npmjs.org/@synnaxlabs/client/-/client-0.18.2.tgz",
|
|
3658
|
+
"integrity": "sha512-y/uetgJq4zeB+7HTqFZyMkLYe1cV4iU0gRc90V/kYvVwTtWt0F5aB2kpZi5ta4nJTFFczPSUwzHOQNVm0zUZOQ==",
|
|
3659
3659
|
"dependencies": {
|
|
3660
3660
|
"@synnaxlabs/freighter": "0.9.3",
|
|
3661
|
-
"@synnaxlabs/x": "0.15.
|
|
3661
|
+
"@synnaxlabs/x": "0.15.2",
|
|
3662
3662
|
"async-mutex": "^0.4.0",
|
|
3663
3663
|
"zod": "3.22.4"
|
|
3664
3664
|
}
|
|
3665
3665
|
},
|
|
3666
3666
|
"node_modules/@synnaxlabs/client/node_modules/@synnaxlabs/x": {
|
|
3667
|
-
"version": "0.15.
|
|
3668
|
-
"resolved": "https://registry.npmjs.org/@synnaxlabs/x/-/x-0.15.
|
|
3669
|
-
"integrity": "sha512-
|
|
3667
|
+
"version": "0.15.2",
|
|
3668
|
+
"resolved": "https://registry.npmjs.org/@synnaxlabs/x/-/x-0.15.2.tgz",
|
|
3669
|
+
"integrity": "sha512-d0XP4tk7dx7847aeXppAFVCKLmPSGIWRnsyDvTkbU9rEZdt1XLnQh1+PoWBmlYUNtliGhcgOKkbCv3Tj9Di38Q==",
|
|
3670
3670
|
"dependencies": {
|
|
3671
3671
|
"async-mutex": "^0.4.0",
|
|
3672
3672
|
"js-convert-case": "^4.2.0",
|
|
@@ -60,5 +60,104 @@ const tr = new TimeRange(start, start.add(TimeSpan.seconds(5)));
|
|
|
60
60
|
series = new Series({
|
|
61
61
|
data: [1, 2, 3, 4, 5],
|
|
62
62
|
dataType: "float64",
|
|
63
|
-
timeRange: new TimeRange(
|
|
64
|
-
});
|
|
63
|
+
timeRange: new TimeRange(start, start.add(TimeSpan.seconds(6)))
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
series = new Series([1, 2, 3, 4, 5]);
|
|
67
|
+
console.log(series.length); // 5
|
|
68
|
+
|
|
69
|
+
const stringSeries = new Series(["apple", "banana", "cherry"]);
|
|
70
|
+
console.log(stringSeries.length); // 3
|
|
71
|
+
|
|
72
|
+
import { DataType } from "@synnaxlabs/client";
|
|
73
|
+
|
|
74
|
+
series = new Series([1, 2, 3, 4, 5]);
|
|
75
|
+
console.log(series.dataType.toString()); // "float64"
|
|
76
|
+
console.log(series.dataType.equals(DataType.STRING)); // true
|
|
77
|
+
|
|
78
|
+
series = new Series([1, 2, 3, 4, 5]);
|
|
79
|
+
console.log(series.max); // 5
|
|
80
|
+
console.log(series.min); // 1
|
|
81
|
+
console.log(series.bounds); // { lower: 1, upper: 5 }
|
|
82
|
+
|
|
83
|
+
import { Frame } from "@synnaxlabs/client";
|
|
84
|
+
|
|
85
|
+
// Construct a frame for the given channel names.
|
|
86
|
+
let frame = new Frame({
|
|
87
|
+
"channel1": new Series([1, 2, 3, 4, 5]),
|
|
88
|
+
"channel2": new Series([5, 4, 3, 2, 1]),
|
|
89
|
+
"channel3": new Series([1, 1, 1, 1, 1]),
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// Construct a frame for the given channel keys
|
|
93
|
+
frame = new Frame({
|
|
94
|
+
1: new Series([1, 2, 3, 4, 5]),
|
|
95
|
+
2: new Series([5, 4, 3, 2, 1]),
|
|
96
|
+
// Notice that series do not need to be the same length.
|
|
97
|
+
3: new Series([1, 1, 1]),
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// Construct a frame from a map
|
|
101
|
+
frame = new Frame(new Map([
|
|
102
|
+
["channel1", new Series([1, 2, 3, 4, 5])],
|
|
103
|
+
["channel2", new Series([5, 4, 3, 2, 1])],
|
|
104
|
+
["channel3", new Series([1, 1, 1, 1, 1])],
|
|
105
|
+
]));
|
|
106
|
+
|
|
107
|
+
// Or from an array of keys and series
|
|
108
|
+
frame = new Frame(["channel1", "channel2", "channel3"], [
|
|
109
|
+
new Series([1, 2, 3, 4, 5]),
|
|
110
|
+
new Series([5, 4, 3, 2, 1]),
|
|
111
|
+
new Series([1, 1, 1, 1, 1]),
|
|
112
|
+
]);
|
|
113
|
+
|
|
114
|
+
// Or construct a frame with multiple series for a single channel
|
|
115
|
+
frame = new Frame({
|
|
116
|
+
"channel1": [
|
|
117
|
+
new Series([1, 2, 3, 4, 5]),
|
|
118
|
+
new Series([5, 4, 3, 2, 1]),
|
|
119
|
+
new Series([1, 1, 1, 1, 1]),
|
|
120
|
+
],
|
|
121
|
+
"channel2": [
|
|
122
|
+
new Series([1, 2, 3, 4, 5]),
|
|
123
|
+
],
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
import { MultiSeries } from "@synnaxlabs/client";
|
|
127
|
+
|
|
128
|
+
frame = new Frame({
|
|
129
|
+
"channel1": [new Series([1, 2]), new Series([3, 4, 5])],
|
|
130
|
+
"channel2": new Series([5, 4, 3, 2, 1]),
|
|
131
|
+
"channel3": new Series([1, 1, 1, 1, 1]),
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
const multiSeries = frame.get("channel1");
|
|
135
|
+
// Access a value
|
|
136
|
+
console.log(multiSeries.at(0)); // 1
|
|
137
|
+
|
|
138
|
+
// Access a value from a specific series
|
|
139
|
+
console.log(multiSeries.series[0].at(0)); // 1
|
|
140
|
+
|
|
141
|
+
// Construct a Javascript array from the MultiSeries
|
|
142
|
+
jsArray = [...multiSeries];
|
|
143
|
+
console.log(jsArray); // [ 1, 2, 3, 4, 5 ]
|
|
144
|
+
|
|
145
|
+
frame = new Frame({
|
|
146
|
+
"channel1": new Series([1, 2, 3, 4, 5]),
|
|
147
|
+
"channel2": new Series([5, 4, 3, 2, 1]),
|
|
148
|
+
"channel3": new Series([1, 1]),
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
let obj = frame.at(3);
|
|
152
|
+
console.log(obj); // { channel1: 1, channel2: 5, channel3: undefined }
|
|
153
|
+
|
|
154
|
+
frame = new Frame({
|
|
155
|
+
"channel1": new Series([1, 2, 3, 4, 5]),
|
|
156
|
+
"channel2": new Series([5, 4, 3, 2, 1]),
|
|
157
|
+
"channel3": new Series([1, 1]),
|
|
158
|
+
});
|
|
159
|
+
try {
|
|
160
|
+
obj = frame.at(3, true); // Throws an error
|
|
161
|
+
} catch (e) {
|
|
162
|
+
console.log(e.message); // no value at index
|
|
163
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@synnaxlabs/client",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.18.
|
|
4
|
+
"version": "0.18.3",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "The Client Library for Synnax",
|
|
7
7
|
"repository": "https://github.com/synnaxlabs/synnax/tree/main/client/ts",
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"async-mutex": "^0.4.0",
|
|
20
20
|
"zod": "3.22.4",
|
|
21
|
-
"@synnaxlabs/freighter": "0.9.
|
|
22
|
-
"@synnaxlabs/x": "0.15.
|
|
21
|
+
"@synnaxlabs/freighter": "0.9.4",
|
|
22
|
+
"@synnaxlabs/x": "0.15.3"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@types/node": "^20.10.5",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"vite": "^5.1.2",
|
|
30
30
|
"vitest": "^1.2.2",
|
|
31
31
|
"@synnaxlabs/tsconfig": "0.0.2",
|
|
32
|
-
"
|
|
33
|
-
"
|
|
32
|
+
"eslint-config-synnaxlabs": "0.0.1",
|
|
33
|
+
"@synnaxlabs/vite-plugin": "0.0.1"
|
|
34
34
|
},
|
|
35
35
|
"main": "dist/client.cjs",
|
|
36
36
|
"module": "dist/client.js",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { DataType, Rate, TimeStamp } from "@synnaxlabs/x";
|
|
11
11
|
import { describe, test, expect, it } from "vitest";
|
|
12
12
|
|
|
13
|
+
import { Channel } from "@/channel/client";
|
|
13
14
|
import { QueryError } from "@/errors";
|
|
14
15
|
import { newClient } from "@/setupspecs";
|
|
15
16
|
|
|
@@ -62,72 +63,102 @@ describe("Channel", () => {
|
|
|
62
63
|
expect(channels[0].name).toEqual("test1");
|
|
63
64
|
expect(channels[1].name).toEqual("test2");
|
|
64
65
|
});
|
|
66
|
+
test("create instances of channels", async () => {
|
|
67
|
+
const timeIndexChannel = await client.channels.create({
|
|
68
|
+
name: "time",
|
|
69
|
+
dataType: DataType.TIMESTAMP,
|
|
70
|
+
isIndex: true,
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
const sensorOne = new Channel({
|
|
74
|
+
name: "sensor_one",
|
|
75
|
+
dataType: DataType.FLOAT32,
|
|
76
|
+
index: timeIndexChannel.key,
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
const sensorTwo = new Channel({
|
|
80
|
+
name: "sensor_two",
|
|
81
|
+
dataType: DataType.FLOAT32,
|
|
82
|
+
index: timeIndexChannel.key,
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
const sensorThree = new Channel({
|
|
86
|
+
name: "sensor_three",
|
|
87
|
+
dataType: DataType.FLOAT32,
|
|
88
|
+
index: timeIndexChannel.key,
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
const sensors = await client.channels.create([sensorOne, sensorTwo, sensorThree]);
|
|
92
|
+
});
|
|
65
93
|
describe("retrieveIfNameExists", () => {
|
|
66
94
|
it("should retrieve the existing channel when it exists", async () => {
|
|
67
|
-
const name = `test-${Math.random()}-${TimeStamp.now().valueOf()}
|
|
95
|
+
const name = `test-${Math.random()}-${TimeStamp.now().valueOf()}`;
|
|
68
96
|
const channel = await client.channels.create({
|
|
69
97
|
name,
|
|
70
98
|
leaseholder: 1,
|
|
71
99
|
rate: Rate.hz(1),
|
|
72
100
|
dataType: DataType.FLOAT32,
|
|
73
101
|
});
|
|
74
|
-
const channelTwo = await client.channels.create(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
102
|
+
const channelTwo = await client.channels.create(
|
|
103
|
+
{
|
|
104
|
+
name,
|
|
105
|
+
leaseholder: 1,
|
|
106
|
+
rate: Rate.hz(1),
|
|
107
|
+
dataType: DataType.FLOAT32,
|
|
108
|
+
},
|
|
109
|
+
{ retrieveIfNameExists: true },
|
|
81
110
|
);
|
|
82
111
|
expect(channelTwo.key).toEqual(channel.key);
|
|
83
112
|
});
|
|
84
113
|
it("should create a new channel when it does not exist", async () => {
|
|
85
|
-
const name = `test-${Math.random()}-${TimeStamp.now().valueOf()}
|
|
114
|
+
const name = `test-${Math.random()}-${TimeStamp.now().valueOf()}`;
|
|
86
115
|
const channel = await client.channels.create({
|
|
87
116
|
name,
|
|
88
117
|
leaseholder: 1,
|
|
89
118
|
rate: Rate.hz(1),
|
|
90
119
|
dataType: DataType.FLOAT32,
|
|
91
120
|
});
|
|
92
|
-
const channelTwo = await client.channels.create(
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
121
|
+
const channelTwo = await client.channels.create(
|
|
122
|
+
{
|
|
123
|
+
name: `${name}-2`,
|
|
124
|
+
leaseholder: 1,
|
|
125
|
+
rate: Rate.hz(1),
|
|
126
|
+
dataType: DataType.FLOAT32,
|
|
127
|
+
},
|
|
128
|
+
{ retrieveIfNameExists: true },
|
|
99
129
|
);
|
|
100
130
|
expect(channelTwo.key).not.toEqual(channel.key);
|
|
101
131
|
});
|
|
102
132
|
it("should retrieve and create the correct channels when creating many", async () => {
|
|
103
|
-
const name = `test-${Math.random()}-${TimeStamp.now().valueOf()}
|
|
133
|
+
const name = `test-${Math.random()}-${TimeStamp.now().valueOf()}`;
|
|
104
134
|
const channel = await client.channels.create({
|
|
105
135
|
name,
|
|
106
136
|
leaseholder: 1,
|
|
107
137
|
rate: Rate.hz(1),
|
|
108
138
|
dataType: DataType.FLOAT32,
|
|
109
139
|
});
|
|
110
|
-
const channelTwo = await client.channels.create(
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
140
|
+
const channelTwo = await client.channels.create(
|
|
141
|
+
[
|
|
142
|
+
{
|
|
143
|
+
name,
|
|
144
|
+
leaseholder: 1,
|
|
145
|
+
rate: Rate.hz(1),
|
|
146
|
+
dataType: DataType.FLOAT32,
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
name: `${name}-2`,
|
|
150
|
+
leaseholder: 1,
|
|
151
|
+
rate: Rate.hz(1),
|
|
152
|
+
dataType: DataType.FLOAT32,
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
{ retrieveIfNameExists: true },
|
|
125
156
|
);
|
|
126
157
|
expect(channelTwo.length).toEqual(2);
|
|
127
158
|
expect(channelTwo[0].key).toEqual(channel.key);
|
|
128
159
|
expect(channelTwo[1].key).not.toEqual(channel.key);
|
|
129
160
|
});
|
|
130
|
-
})
|
|
161
|
+
});
|
|
131
162
|
});
|
|
132
163
|
test("retrieve by key", async () => {
|
|
133
164
|
const channel = await client.channels.create({
|
|
@@ -41,7 +41,7 @@ describe("WriteFrameAdapter", () => {
|
|
|
41
41
|
expect(res.series).toHaveLength(2);
|
|
42
42
|
expect(res.get(timeCh.key)).toHaveLength(1);
|
|
43
43
|
expect(res.get(dataCh.key)).toHaveLength(1);
|
|
44
|
-
expect(res.get(timeCh.key).at(0)).toEqual(
|
|
44
|
+
expect(res.get(timeCh.key).at(0)).toEqual(ts);
|
|
45
45
|
expect(res.get(dataCh.key).at(0)).toEqual(1);
|
|
46
46
|
});
|
|
47
47
|
|
|
@@ -55,7 +55,7 @@ describe("WriteFrameAdapter", () => {
|
|
|
55
55
|
expect(res2.series).toHaveLength(2);
|
|
56
56
|
expect(res2.get(timeCh.key)).toHaveLength(1);
|
|
57
57
|
expect(res2.get(dataCh.key)).toHaveLength(1);
|
|
58
|
-
expect(res2.get(timeCh.key).at(0)).toEqual(
|
|
58
|
+
expect(res2.get(timeCh.key).at(0)).toEqual(ts);
|
|
59
59
|
expect(res2.get(dataCh.key).at(0)).toEqual(1);
|
|
60
60
|
});
|
|
61
61
|
|
|
@@ -75,7 +75,7 @@ describe("WriteFrameAdapter", () => {
|
|
|
75
75
|
);
|
|
76
76
|
expect(res4.get(timeCh.key)).toHaveLength(1);
|
|
77
77
|
expect(res4.get(dataCh.key)).toHaveLength(1);
|
|
78
|
-
expect(res4.get(timeCh.key).at(0)).toEqual(
|
|
78
|
+
expect(res4.get(timeCh.key).at(0)).toEqual(ts);
|
|
79
79
|
expect(res4.get(dataCh.key).at(0)).toEqual(1);
|
|
80
80
|
});
|
|
81
81
|
|
|
@@ -88,7 +88,7 @@ describe("WriteFrameAdapter", () => {
|
|
|
88
88
|
const res = await adapter.adapt(fr);
|
|
89
89
|
expect(res.columns).toHaveLength(2);
|
|
90
90
|
expect(res.series).toHaveLength(2);
|
|
91
|
-
expect(res.get(timeCh.key).at(0)).toEqual(
|
|
91
|
+
expect(res.get(timeCh.key).at(0)).toEqual(ts);
|
|
92
92
|
expect(res.get(dataCh.key).at(0)).toEqual(1);
|
|
93
93
|
});
|
|
94
94
|
|
|
@@ -101,7 +101,7 @@ describe("WriteFrameAdapter", () => {
|
|
|
101
101
|
const res = await adapter.adapt(fr);
|
|
102
102
|
expect(res.columns).toHaveLength(2);
|
|
103
103
|
expect(res.series).toHaveLength(2);
|
|
104
|
-
expect(res.get(timeCh.key).at(0)).toEqual(
|
|
104
|
+
expect(res.get(timeCh.key).at(0)).toEqual(ts);
|
|
105
105
|
expect(res.get(dataCh.key).at(0)).toEqual(1);
|
|
106
106
|
});
|
|
107
107
|
|
|
@@ -113,6 +113,6 @@ describe("WriteFrameAdapter", () => {
|
|
|
113
113
|
expect(res.columns).toHaveLength(1);
|
|
114
114
|
expect(res.series).toHaveLength(1);
|
|
115
115
|
expect(res.get(timeCh.key)).toHaveLength(1);
|
|
116
|
-
expect(res.get(timeCh.key).at(0)).toEqual(
|
|
116
|
+
expect(res.get(timeCh.key).at(0)).toEqual(ts);
|
|
117
117
|
});
|
|
118
118
|
});
|