@hangtime/grip-connect 0.2.3 → 0.2.6
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/package.json +6 -6
- package/src/data.js +2 -2
- package/src/data.ts +2 -2
- package/src/struct/index.d.ts +9 -0
- package/src/struct/index.js +176 -0
- package/src/struct/index.ts +215 -0
- package/src/declarations.d.ts +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hangtime/grip-connect",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"description": "A client that can establish connections with various Force-Sensing Hangboards/Plates used by climbers for strength measurement. Examples of such hangboards include the Griptonite Motherboard, Climbro, SmartBoard, Entralpi or Tindeq Progressor",
|
|
5
5
|
"main": "src/index.ts",
|
|
6
6
|
"scripts": {
|
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
"hangboard",
|
|
20
20
|
"hangboarding",
|
|
21
21
|
"beastmaker",
|
|
22
|
-
"motherboard"
|
|
22
|
+
"motherboard",
|
|
23
|
+
"tindeq",
|
|
24
|
+
"progressor",
|
|
25
|
+
"entralpi"
|
|
23
26
|
],
|
|
24
27
|
"bugs": {
|
|
25
28
|
"url": "https://github.com/Stevie-Ray/hangtime-grip-connect/issues"
|
|
26
29
|
},
|
|
27
|
-
"homepage": "https://stevie-ray.github.io/hangtime-grip-connect/"
|
|
28
|
-
"dependencies": {
|
|
29
|
-
"@aksel/structjs": "^1.0.0"
|
|
30
|
-
}
|
|
30
|
+
"homepage": "https://stevie-ray.github.io/hangtime-grip-connect/"
|
|
31
31
|
}
|
package/src/data.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { notifyCallback } from "./notify";
|
|
2
2
|
import { ProgressorCommands, ProgressorResponses } from "./commands/progressor";
|
|
3
3
|
import { lastWrite } from "./write";
|
|
4
|
-
import struct from "
|
|
4
|
+
import struct from "./struct";
|
|
5
5
|
const PACKET_LENGTH = 32;
|
|
6
6
|
const NUM_SAMPLES = 3;
|
|
7
7
|
export const CALIBRATION = [[], [], [], []];
|
|
@@ -120,7 +120,7 @@ export const handleProgressorData = (uuid, data) => {
|
|
|
120
120
|
notifyCallback({
|
|
121
121
|
uuid: uuid,
|
|
122
122
|
value: {
|
|
123
|
-
massTotal: Math.max(-1000, weight - tare).toFixed(1),
|
|
123
|
+
massTotal: Math.max(-1000, Number(weight) - tare).toFixed(1),
|
|
124
124
|
},
|
|
125
125
|
});
|
|
126
126
|
}
|
package/src/data.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { notifyCallback } from "./notify"
|
|
2
2
|
import { ProgressorCommands, ProgressorResponses } from "./commands/progressor"
|
|
3
3
|
import { lastWrite } from "./write"
|
|
4
|
-
import struct from "
|
|
4
|
+
import struct from "./struct"
|
|
5
5
|
|
|
6
6
|
const PACKET_LENGTH: number = 32
|
|
7
7
|
const NUM_SAMPLES: number = 3
|
|
@@ -145,7 +145,7 @@ export const handleProgressorData = (uuid: string, data: DataView): void => {
|
|
|
145
145
|
notifyCallback({
|
|
146
146
|
uuid: uuid,
|
|
147
147
|
value: {
|
|
148
|
-
massTotal: Math.max(-1000, weight - tare).toFixed(1),
|
|
148
|
+
massTotal: Math.max(-1000, Number(weight) - tare).toFixed(1),
|
|
149
149
|
},
|
|
150
150
|
})
|
|
151
151
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export default function struct(format: string): Readonly<{
|
|
2
|
+
unpack: (arrb: ArrayBuffer) => unknown[];
|
|
3
|
+
pack: (...values: unknown[]) => ArrayBuffer;
|
|
4
|
+
unpack_from: (arrb: ArrayBuffer, offs: number) => unknown[];
|
|
5
|
+
pack_into: (arrb: ArrayBuffer, offs: number, ...values: unknown[]) => void;
|
|
6
|
+
iter_unpack: (arrb: ArrayBuffer) => IterableIterator<unknown[]>;
|
|
7
|
+
format: string;
|
|
8
|
+
size: number;
|
|
9
|
+
}>;
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
const rechk = /^([<>])?(([1-9]\d*)?([xcbB?hHiIfdsp]))*$/;
|
|
2
|
+
const refmt = /([1-9]\d*)?([xcbB?hHiIfdsp])/g;
|
|
3
|
+
const str = (v, o, c) => String.fromCharCode(...Array.from(new Uint8Array(v.buffer, v.byteOffset + o, c)));
|
|
4
|
+
const rts = (v, o, c, s) => new Uint8Array(v.buffer, v.byteOffset + o, c).set(s.split("").map((str) => str.charCodeAt(0)));
|
|
5
|
+
const pst = (v, o, c) => str(v, o + 1, Math.min(v.getUint8(o), c - 1));
|
|
6
|
+
const tsp = (v, o, c, s) => {
|
|
7
|
+
v.setUint8(o, s.length);
|
|
8
|
+
rts(v, o + 1, c - 1, s);
|
|
9
|
+
};
|
|
10
|
+
const lut = (le) => ({
|
|
11
|
+
x: (c) => [
|
|
12
|
+
1,
|
|
13
|
+
c,
|
|
14
|
+
() => ({
|
|
15
|
+
u: () => undefined,
|
|
16
|
+
p: () => undefined,
|
|
17
|
+
}),
|
|
18
|
+
],
|
|
19
|
+
c: (c) => [
|
|
20
|
+
c,
|
|
21
|
+
1,
|
|
22
|
+
(o) => ({
|
|
23
|
+
u: (v) => str(v, o, 1),
|
|
24
|
+
p: (v, s) => rts(v, o, 1, s),
|
|
25
|
+
}),
|
|
26
|
+
],
|
|
27
|
+
"?": (c) => [
|
|
28
|
+
c,
|
|
29
|
+
1,
|
|
30
|
+
(o) => ({
|
|
31
|
+
u: (v) => Boolean(v.getUint8(o)),
|
|
32
|
+
p: (v, B) => v.setUint8(o, B ? 1 : 0),
|
|
33
|
+
}),
|
|
34
|
+
],
|
|
35
|
+
b: (c) => [
|
|
36
|
+
c,
|
|
37
|
+
1,
|
|
38
|
+
(o) => ({
|
|
39
|
+
u: (v) => v.getInt8(o),
|
|
40
|
+
p: (v, b) => v.setInt8(o, b),
|
|
41
|
+
}),
|
|
42
|
+
],
|
|
43
|
+
B: (c) => [
|
|
44
|
+
c,
|
|
45
|
+
1,
|
|
46
|
+
(o) => ({
|
|
47
|
+
u: (v) => v.getUint8(o),
|
|
48
|
+
p: (v, B) => v.setUint8(o, B),
|
|
49
|
+
}),
|
|
50
|
+
],
|
|
51
|
+
h: (c) => [
|
|
52
|
+
c,
|
|
53
|
+
2,
|
|
54
|
+
(o) => ({
|
|
55
|
+
u: (v) => v.getInt16(o, le),
|
|
56
|
+
p: (v, h) => v.setInt16(o, h, le),
|
|
57
|
+
}),
|
|
58
|
+
],
|
|
59
|
+
H: (c) => [
|
|
60
|
+
c,
|
|
61
|
+
2,
|
|
62
|
+
(o) => ({
|
|
63
|
+
u: (v) => v.getUint16(o, le),
|
|
64
|
+
p: (v, H) => v.setUint16(o, H, le),
|
|
65
|
+
}),
|
|
66
|
+
],
|
|
67
|
+
i: (c) => [
|
|
68
|
+
c,
|
|
69
|
+
4,
|
|
70
|
+
(o) => ({
|
|
71
|
+
u: (v) => v.getInt32(o, le),
|
|
72
|
+
p: (v, i) => v.setInt32(o, i, le),
|
|
73
|
+
}),
|
|
74
|
+
],
|
|
75
|
+
I: (c) => [
|
|
76
|
+
c,
|
|
77
|
+
4,
|
|
78
|
+
(o) => ({
|
|
79
|
+
u: (v) => v.getUint32(o, le),
|
|
80
|
+
p: (v, I) => v.setUint32(o, I, le),
|
|
81
|
+
}),
|
|
82
|
+
],
|
|
83
|
+
f: (c) => [
|
|
84
|
+
c,
|
|
85
|
+
4,
|
|
86
|
+
(o) => ({
|
|
87
|
+
u: (v) => v.getFloat32(o, le),
|
|
88
|
+
p: (v, f) => v.setFloat32(o, f, le),
|
|
89
|
+
}),
|
|
90
|
+
],
|
|
91
|
+
d: (c) => [
|
|
92
|
+
c,
|
|
93
|
+
8,
|
|
94
|
+
(o) => ({
|
|
95
|
+
u: (v) => v.getFloat64(o, le),
|
|
96
|
+
p: (v, d) => v.setFloat64(o, d, le),
|
|
97
|
+
}),
|
|
98
|
+
],
|
|
99
|
+
s: (c) => [
|
|
100
|
+
1,
|
|
101
|
+
c,
|
|
102
|
+
(o) => ({
|
|
103
|
+
u: (v) => str(v, o, c),
|
|
104
|
+
p: (v, s) => rts(v, o, c, s.slice(0, c)),
|
|
105
|
+
}),
|
|
106
|
+
],
|
|
107
|
+
p: (c) => [
|
|
108
|
+
1,
|
|
109
|
+
c,
|
|
110
|
+
(o) => ({
|
|
111
|
+
u: (v) => pst(v, o, c),
|
|
112
|
+
p: (v, s) => tsp(v, o, c, s.slice(0, c - 1)),
|
|
113
|
+
}),
|
|
114
|
+
],
|
|
115
|
+
});
|
|
116
|
+
const errbuf = new RangeError("Structure larger than remaining buffer");
|
|
117
|
+
const errval = new RangeError("Not enough values for structure");
|
|
118
|
+
export default function struct(format) {
|
|
119
|
+
const fns = [];
|
|
120
|
+
let size = 0;
|
|
121
|
+
let m = rechk.exec(format);
|
|
122
|
+
if (!m) {
|
|
123
|
+
throw new RangeError("Invalid format string");
|
|
124
|
+
}
|
|
125
|
+
const t = lut("<" === m[1]);
|
|
126
|
+
const lu = (n, c) => t[c](n ? parseInt(n, 10) : 1);
|
|
127
|
+
while ((m = refmt.exec(format))) {
|
|
128
|
+
// eslint-disable-next-line no-extra-semi
|
|
129
|
+
;
|
|
130
|
+
((r, s, f) => {
|
|
131
|
+
for (let i = 0; i < r; ++i, size += s) {
|
|
132
|
+
if (f) {
|
|
133
|
+
fns.push(f(size));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
})(...lu(...m.slice(1)));
|
|
137
|
+
}
|
|
138
|
+
const unpack_from = (arrb, offs) => {
|
|
139
|
+
if (arrb.byteLength < (offs | 0) + size) {
|
|
140
|
+
throw errbuf;
|
|
141
|
+
}
|
|
142
|
+
const v = new DataView(arrb, offs | 0);
|
|
143
|
+
return fns.map((f) => f.u(v));
|
|
144
|
+
};
|
|
145
|
+
const pack_into = (arrb, offs, ...values) => {
|
|
146
|
+
if (values.length < fns.length) {
|
|
147
|
+
throw errval;
|
|
148
|
+
}
|
|
149
|
+
if (arrb.byteLength < offs + size) {
|
|
150
|
+
throw errbuf;
|
|
151
|
+
}
|
|
152
|
+
const v = new DataView(arrb, offs);
|
|
153
|
+
new Uint8Array(arrb, offs, size).fill(0);
|
|
154
|
+
fns.forEach((f, i) => f.p(v, values[i]));
|
|
155
|
+
};
|
|
156
|
+
const pack = (...values) => {
|
|
157
|
+
const b = new ArrayBuffer(size);
|
|
158
|
+
pack_into(b, 0, ...values);
|
|
159
|
+
return b;
|
|
160
|
+
};
|
|
161
|
+
const unpack = (arrb) => unpack_from(arrb, 0);
|
|
162
|
+
function* iter_unpack(arrb) {
|
|
163
|
+
for (let offs = 0; offs + size <= arrb.byteLength; offs += size) {
|
|
164
|
+
yield unpack_from(arrb, offs);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return Object.freeze({
|
|
168
|
+
unpack,
|
|
169
|
+
pack,
|
|
170
|
+
unpack_from,
|
|
171
|
+
pack_into,
|
|
172
|
+
iter_unpack,
|
|
173
|
+
format,
|
|
174
|
+
size,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
const rechk: RegExp = /^([<>])?(([1-9]\d*)?([xcbB?hHiIfdsp]))*$/
|
|
2
|
+
const refmt: RegExp = /([1-9]\d*)?([xcbB?hHiIfdsp])/g
|
|
3
|
+
|
|
4
|
+
const str = (v: DataView, o: number, c: number): string =>
|
|
5
|
+
String.fromCharCode(...Array.from(new Uint8Array(v.buffer, v.byteOffset + o, c)))
|
|
6
|
+
|
|
7
|
+
const rts = (v: DataView, o: number, c: number, s: string): void =>
|
|
8
|
+
new Uint8Array(v.buffer, v.byteOffset + o, c).set(s.split("").map((str) => str.charCodeAt(0)))
|
|
9
|
+
|
|
10
|
+
const pst = (v: DataView, o: number, c: number): string => str(v, o + 1, Math.min(v.getUint8(o), c - 1))
|
|
11
|
+
|
|
12
|
+
const tsp = (v: DataView, o: number, c: number, s: string): void => {
|
|
13
|
+
v.setUint8(o, s.length)
|
|
14
|
+
rts(v, o + 1, c - 1, s)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface FormatFn {
|
|
18
|
+
u: (v: DataView) => unknown
|
|
19
|
+
p: (v: DataView, value: unknown) => void
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
interface LUT {
|
|
23
|
+
[key: string]: (c: number) => [number, number, (o: number) => FormatFn]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const lut = (le: boolean): LUT => ({
|
|
27
|
+
x: (c: number) =>
|
|
28
|
+
[
|
|
29
|
+
1,
|
|
30
|
+
c,
|
|
31
|
+
() => ({
|
|
32
|
+
u: () => undefined,
|
|
33
|
+
p: () => undefined,
|
|
34
|
+
}),
|
|
35
|
+
] as [number, number, (o: number) => FormatFn],
|
|
36
|
+
c: (c: number) =>
|
|
37
|
+
[
|
|
38
|
+
c,
|
|
39
|
+
1,
|
|
40
|
+
(o: number) => ({
|
|
41
|
+
u: (v: DataView) => str(v, o, 1),
|
|
42
|
+
p: (v: DataView, s: string) => rts(v, o, 1, s),
|
|
43
|
+
}),
|
|
44
|
+
] as [number, number, (o: number) => FormatFn],
|
|
45
|
+
"?": (c: number) =>
|
|
46
|
+
[
|
|
47
|
+
c,
|
|
48
|
+
1,
|
|
49
|
+
(o: number) => ({
|
|
50
|
+
u: (v: DataView) => Boolean(v.getUint8(o)),
|
|
51
|
+
p: (v: DataView, B: boolean) => v.setUint8(o, B ? 1 : 0),
|
|
52
|
+
}),
|
|
53
|
+
] as [number, number, (o: number) => FormatFn],
|
|
54
|
+
b: (c: number) =>
|
|
55
|
+
[
|
|
56
|
+
c,
|
|
57
|
+
1,
|
|
58
|
+
(o: number) => ({
|
|
59
|
+
u: (v: DataView) => v.getInt8(o),
|
|
60
|
+
p: (v: DataView, b: number) => v.setInt8(o, b),
|
|
61
|
+
}),
|
|
62
|
+
] as [number, number, (o: number) => FormatFn],
|
|
63
|
+
B: (c: number) =>
|
|
64
|
+
[
|
|
65
|
+
c,
|
|
66
|
+
1,
|
|
67
|
+
(o: number) => ({
|
|
68
|
+
u: (v: DataView) => v.getUint8(o),
|
|
69
|
+
p: (v: DataView, B: number) => v.setUint8(o, B),
|
|
70
|
+
}),
|
|
71
|
+
] as [number, number, (o: number) => FormatFn],
|
|
72
|
+
h: (c: number) =>
|
|
73
|
+
[
|
|
74
|
+
c,
|
|
75
|
+
2,
|
|
76
|
+
(o: number) => ({
|
|
77
|
+
u: (v: DataView) => v.getInt16(o, le),
|
|
78
|
+
p: (v: DataView, h: number) => v.setInt16(o, h, le),
|
|
79
|
+
}),
|
|
80
|
+
] as [number, number, (o: number) => FormatFn],
|
|
81
|
+
H: (c: number) =>
|
|
82
|
+
[
|
|
83
|
+
c,
|
|
84
|
+
2,
|
|
85
|
+
(o: number) => ({
|
|
86
|
+
u: (v: DataView) => v.getUint16(o, le),
|
|
87
|
+
p: (v: DataView, H: number) => v.setUint16(o, H, le),
|
|
88
|
+
}),
|
|
89
|
+
] as [number, number, (o: number) => FormatFn],
|
|
90
|
+
i: (c: number) =>
|
|
91
|
+
[
|
|
92
|
+
c,
|
|
93
|
+
4,
|
|
94
|
+
(o: number) => ({
|
|
95
|
+
u: (v: DataView) => v.getInt32(o, le),
|
|
96
|
+
p: (v: DataView, i: number) => v.setInt32(o, i, le),
|
|
97
|
+
}),
|
|
98
|
+
] as [number, number, (o: number) => FormatFn],
|
|
99
|
+
I: (c: number) =>
|
|
100
|
+
[
|
|
101
|
+
c,
|
|
102
|
+
4,
|
|
103
|
+
(o: number) => ({
|
|
104
|
+
u: (v: DataView) => v.getUint32(o, le),
|
|
105
|
+
p: (v: DataView, I: number) => v.setUint32(o, I, le),
|
|
106
|
+
}),
|
|
107
|
+
] as [number, number, (o: number) => FormatFn],
|
|
108
|
+
f: (c: number) =>
|
|
109
|
+
[
|
|
110
|
+
c,
|
|
111
|
+
4,
|
|
112
|
+
(o: number) => ({
|
|
113
|
+
u: (v: DataView) => v.getFloat32(o, le),
|
|
114
|
+
p: (v: DataView, f: number) => v.setFloat32(o, f, le),
|
|
115
|
+
}),
|
|
116
|
+
] as [number, number, (o: number) => FormatFn],
|
|
117
|
+
d: (c: number) =>
|
|
118
|
+
[
|
|
119
|
+
c,
|
|
120
|
+
8,
|
|
121
|
+
(o: number) => ({
|
|
122
|
+
u: (v: DataView) => v.getFloat64(o, le),
|
|
123
|
+
p: (v: DataView, d: number) => v.setFloat64(o, d, le),
|
|
124
|
+
}),
|
|
125
|
+
] as [number, number, (o: number) => FormatFn],
|
|
126
|
+
s: (c: number) =>
|
|
127
|
+
[
|
|
128
|
+
1,
|
|
129
|
+
c,
|
|
130
|
+
(o: number) => ({
|
|
131
|
+
u: (v: DataView) => str(v, o, c),
|
|
132
|
+
p: (v: DataView, s: string) => rts(v, o, c, s.slice(0, c)),
|
|
133
|
+
}),
|
|
134
|
+
] as [number, number, (o: number) => FormatFn],
|
|
135
|
+
p: (c: number) =>
|
|
136
|
+
[
|
|
137
|
+
1,
|
|
138
|
+
c,
|
|
139
|
+
(o: number) => ({
|
|
140
|
+
u: (v: DataView) => pst(v, o, c),
|
|
141
|
+
p: (v: DataView, s: string) => tsp(v, o, c, s.slice(0, c - 1)),
|
|
142
|
+
}),
|
|
143
|
+
] as [number, number, (o: number) => FormatFn],
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
const errbuf: RangeError = new RangeError("Structure larger than remaining buffer")
|
|
147
|
+
const errval: RangeError = new RangeError("Not enough values for structure")
|
|
148
|
+
|
|
149
|
+
export default function struct(format: string) {
|
|
150
|
+
const fns: FormatFn[] = []
|
|
151
|
+
let size: number = 0
|
|
152
|
+
let m: RegExpExecArray | null = rechk.exec(format)
|
|
153
|
+
|
|
154
|
+
if (!m) {
|
|
155
|
+
throw new RangeError("Invalid format string")
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const t: LUT = lut("<" === m[1])
|
|
159
|
+
const lu = (n: string, c: string): [number, number, (o: number) => FormatFn] => t[c](n ? parseInt(n, 10) : 1)
|
|
160
|
+
|
|
161
|
+
while ((m = refmt.exec(format))) {
|
|
162
|
+
// eslint-disable-next-line no-extra-semi
|
|
163
|
+
;((r: number, s: number, f: (o: number) => FormatFn) => {
|
|
164
|
+
for (let i = 0; i < r; ++i, size += s) {
|
|
165
|
+
if (f) {
|
|
166
|
+
fns.push(f(size))
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
})(...lu(...(m.slice(1) as [string, string])))
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const unpack_from = (arrb: ArrayBuffer, offs: number): unknown[] => {
|
|
173
|
+
if (arrb.byteLength < (offs | 0) + size) {
|
|
174
|
+
throw errbuf
|
|
175
|
+
}
|
|
176
|
+
const v = new DataView(arrb, offs | 0)
|
|
177
|
+
return fns.map((f) => f.u(v))
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const pack_into = (arrb: ArrayBuffer, offs: number, ...values: unknown[]): void => {
|
|
181
|
+
if (values.length < fns.length) {
|
|
182
|
+
throw errval
|
|
183
|
+
}
|
|
184
|
+
if (arrb.byteLength < offs + size) {
|
|
185
|
+
throw errbuf
|
|
186
|
+
}
|
|
187
|
+
const v = new DataView(arrb, offs)
|
|
188
|
+
new Uint8Array(arrb, offs, size).fill(0)
|
|
189
|
+
fns.forEach((f, i) => f.p(v, values[i]))
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
const pack = (...values: unknown[]): ArrayBuffer => {
|
|
193
|
+
const b = new ArrayBuffer(size)
|
|
194
|
+
pack_into(b, 0, ...values)
|
|
195
|
+
return b
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const unpack = (arrb: ArrayBuffer): unknown[] => unpack_from(arrb, 0)
|
|
199
|
+
|
|
200
|
+
function* iter_unpack(arrb: ArrayBuffer): IterableIterator<unknown[]> {
|
|
201
|
+
for (let offs = 0; offs + size <= arrb.byteLength; offs += size) {
|
|
202
|
+
yield unpack_from(arrb, offs)
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return Object.freeze({
|
|
207
|
+
unpack,
|
|
208
|
+
pack,
|
|
209
|
+
unpack_from,
|
|
210
|
+
pack_into,
|
|
211
|
+
iter_unpack,
|
|
212
|
+
format,
|
|
213
|
+
size,
|
|
214
|
+
})
|
|
215
|
+
}
|
package/src/declarations.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
declare module "@aksel/structjs"
|