@neurodevs/node-lsl 4.1.1 → 4.1.2
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/build/LslOutlet.d.ts +1 -11
- package/build/LslOutlet.js +8 -71
- package/build/LslOutlet.js.map +1 -1
- package/build/__tests__/behavioral/LslOutlet.test.js.map +1 -1
- package/build/__tests__/support/consts.d.ts +1 -1
- package/build/__tests__/support/consts.js.map +1 -1
- package/build/assertions.d.ts +6 -0
- package/build/assertions.js +57 -0
- package/build/assertions.js.map +1 -0
- package/build/consts.d.ts +2 -0
- package/build/consts.js +14 -0
- package/build/consts.js.map +1 -0
- package/build/validations.d.ts +4 -0
- package/build/validations.js +20 -0
- package/build/validations.js.map +1 -0
- package/package.json +1 -1
- package/src/LslOutlet.ts +14 -83
- package/src/__tests__/behavioral/LslOutlet.test.ts +3 -3
- package/src/__tests__/support/consts.ts +1 -1
- package/src/assertions.ts +58 -0
- package/src/consts.ts +12 -0
- package/src/validations.ts +15 -0
package/build/LslOutlet.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ChannelFormat } from './consts';
|
|
1
2
|
import { LslSample } from './Liblsl';
|
|
2
3
|
export default class LslOutletImpl implements LslOutlet {
|
|
3
4
|
static Class?: new (options: LslOutletOptions) => LslOutlet;
|
|
@@ -10,18 +11,8 @@ export default class LslOutletImpl implements LslOutlet {
|
|
|
10
11
|
pushSample(sample: LslSample): void;
|
|
11
12
|
private getPushMethod;
|
|
12
13
|
private lookupChannelFormat;
|
|
13
|
-
private assertValidMaxBufferred;
|
|
14
|
-
private assertValidChunkSize;
|
|
15
|
-
private assertValidChannelFormat;
|
|
16
|
-
private assertValidSampleRate;
|
|
17
|
-
private assertValidChannelCount;
|
|
18
|
-
private isGreaterThanZero;
|
|
19
|
-
private isPositiveInteger;
|
|
20
|
-
private isPositiveIntegerOrZero;
|
|
21
14
|
private get lsl();
|
|
22
15
|
}
|
|
23
|
-
declare const CHANNEL_FORMATS: readonly ["undefined", "float32", "double64", "string", "int32", "int16", "int8", "int64"];
|
|
24
|
-
export type ChannelFormat = (typeof CHANNEL_FORMATS)[number];
|
|
25
16
|
export interface LslOutlet {
|
|
26
17
|
destroy(): void;
|
|
27
18
|
pushSample(sample: LslSample): void;
|
|
@@ -38,4 +29,3 @@ export interface LslOutletOptions {
|
|
|
38
29
|
chunkSize: number;
|
|
39
30
|
maxBuffered: number;
|
|
40
31
|
}
|
|
41
|
-
export {};
|
package/build/LslOutlet.js
CHANGED
|
@@ -15,6 +15,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
const schema_1 = require("@sprucelabs/schema");
|
|
18
|
+
const assertions_1 = require("./assertions");
|
|
19
|
+
const consts_1 = require("./consts");
|
|
18
20
|
const Liblsl_1 = __importDefault(require("./Liblsl"));
|
|
19
21
|
class LslOutletImpl {
|
|
20
22
|
constructor(options) {
|
|
@@ -34,11 +36,11 @@ class LslOutletImpl {
|
|
|
34
36
|
const _a = this
|
|
35
37
|
.options, { chunkSize, maxBuffered, channelNames } = _a, streamInfoOptions = __rest(_a, ["chunkSize", "maxBuffered", "channelNames"]);
|
|
36
38
|
const channelCount = channelNames.length;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
(0, assertions_1.assertValidChannelCount)(channelCount);
|
|
40
|
+
(0, assertions_1.assertValidSampleRate)(sampleRate);
|
|
41
|
+
(0, assertions_1.assertValidChannelFormat)(channelFormat);
|
|
42
|
+
(0, assertions_1.assertValidChunkSize)(chunkSize);
|
|
43
|
+
(0, assertions_1.assertValidMaxBufferred)(maxBuffered);
|
|
42
44
|
delete streamInfoOptions.manufacturer;
|
|
43
45
|
delete streamInfoOptions.unit;
|
|
44
46
|
this.streamInfo = this.lsl.createStreamInfo(Object.assign(Object.assign({}, streamInfoOptions), { channelCount, channelFormat: this.lookupChannelFormat(channelFormat) }));
|
|
@@ -85,76 +87,11 @@ class LslOutletImpl {
|
|
|
85
87
|
return method;
|
|
86
88
|
}
|
|
87
89
|
lookupChannelFormat(channelFormat) {
|
|
88
|
-
return CHANNEL_FORMATS.indexOf(channelFormat);
|
|
89
|
-
}
|
|
90
|
-
assertValidMaxBufferred(maxBuffered) {
|
|
91
|
-
if (!this.isPositiveIntegerOrZero(maxBuffered)) {
|
|
92
|
-
throw new schema_1.SchemaError({
|
|
93
|
-
code: 'INVALID_PARAMETERS',
|
|
94
|
-
parameters: ['maxBuffered'],
|
|
95
|
-
friendlyMessage: 'Max buffered must be a positive integer or zero.',
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
assertValidChunkSize(chunkSize) {
|
|
100
|
-
if (!this.isPositiveIntegerOrZero(chunkSize)) {
|
|
101
|
-
throw new schema_1.SchemaError({
|
|
102
|
-
code: 'INVALID_PARAMETERS',
|
|
103
|
-
parameters: ['chunkSize'],
|
|
104
|
-
friendlyMessage: 'Chunk size must be a positive integer or zero.',
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
assertValidChannelFormat(channelFormat) {
|
|
109
|
-
const validFormats = CHANNEL_FORMATS;
|
|
110
|
-
if (validFormats.indexOf(channelFormat) === -1) {
|
|
111
|
-
throw new schema_1.SchemaError({
|
|
112
|
-
code: 'INVALID_PARAMETERS',
|
|
113
|
-
parameters: ['channelFormat'],
|
|
114
|
-
friendlyMessage: 'Channel format must be a valid format.',
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
assertValidSampleRate(sampleRate) {
|
|
119
|
-
if (!this.isGreaterThanZero(sampleRate)) {
|
|
120
|
-
throw new schema_1.SchemaError({
|
|
121
|
-
code: 'INVALID_PARAMETERS',
|
|
122
|
-
parameters: ['sampleRate'],
|
|
123
|
-
friendlyMessage: 'Sample rate must be a positive number or zero.',
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
assertValidChannelCount(channelCount) {
|
|
128
|
-
if (!this.isPositiveInteger(channelCount)) {
|
|
129
|
-
throw new schema_1.SchemaError({
|
|
130
|
-
code: 'INVALID_PARAMETERS',
|
|
131
|
-
parameters: ['channelNames'],
|
|
132
|
-
friendlyMessage: 'channelNames must have 1 or more labels.',
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
isGreaterThanZero(value) {
|
|
137
|
-
return value >= 0;
|
|
138
|
-
}
|
|
139
|
-
isPositiveInteger(value) {
|
|
140
|
-
return Number.isInteger(value) && value > 0;
|
|
141
|
-
}
|
|
142
|
-
isPositiveIntegerOrZero(value) {
|
|
143
|
-
return Number.isInteger(value) && value >= 0;
|
|
90
|
+
return consts_1.CHANNEL_FORMATS.indexOf(channelFormat);
|
|
144
91
|
}
|
|
145
92
|
get lsl() {
|
|
146
93
|
return Liblsl_1.default.getInstance();
|
|
147
94
|
}
|
|
148
95
|
}
|
|
149
96
|
exports.default = LslOutletImpl;
|
|
150
|
-
const CHANNEL_FORMATS = [
|
|
151
|
-
'undefined',
|
|
152
|
-
'float32',
|
|
153
|
-
'double64',
|
|
154
|
-
'string',
|
|
155
|
-
'int32',
|
|
156
|
-
'int16',
|
|
157
|
-
'int8',
|
|
158
|
-
'int64',
|
|
159
|
-
];
|
|
160
97
|
//# sourceMappingURL=LslOutlet.js.map
|
package/build/LslOutlet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LslOutlet.js","sourceRoot":"","sources":["../src/LslOutlet.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+
|
|
1
|
+
{"version":3,"file":"LslOutlet.js","sourceRoot":"","sources":["../src/LslOutlet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LslOutlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/behavioral/LslOutlet.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAkC;AAClC,qEAK+B;AAC/B,0DAAoD;AACpD,
|
|
1
|
+
{"version":3,"file":"LslOutlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/behavioral/LslOutlet.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const TEST_CHANNEL_FORMATS: string
|
|
1
|
+
export declare const TEST_CHANNEL_FORMATS: readonly ["undefined", "float32", "double64", "string", "int32", "int16", "int8", "int64"];
|
|
2
2
|
export type TestChannelFormat = (typeof TEST_CHANNEL_FORMATS)[number];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../../src/__tests__/support/consts.ts"],"names":[],"mappings":";;;AAAa,QAAA,oBAAoB,GAAG;IACnC,WAAW;IACX,SAAS;IACT,UAAU;IACV,QAAQ;IACR,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../../src/__tests__/support/consts.ts"],"names":[],"mappings":";;;AAAa,QAAA,oBAAoB,GAAG;IACnC,WAAW;IACX,SAAS;IACT,UAAU;IACV,QAAQ;IACR,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;CACE,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ChannelFormat } from './consts';
|
|
2
|
+
export declare function assertValidMaxBufferred(maxBuffered: number): void;
|
|
3
|
+
export declare function assertValidChunkSize(chunkSize: number): void;
|
|
4
|
+
export declare function assertValidChannelFormat(channelFormat: ChannelFormat): void;
|
|
5
|
+
export declare function assertValidSampleRate(sampleRate: number): void;
|
|
6
|
+
export declare function assertValidChannelCount(channelCount: number): void;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assertValidChannelCount = exports.assertValidSampleRate = exports.assertValidChannelFormat = exports.assertValidChunkSize = exports.assertValidMaxBufferred = void 0;
|
|
4
|
+
const schema_1 = require("@sprucelabs/schema");
|
|
5
|
+
const consts_1 = require("./consts");
|
|
6
|
+
const validations_1 = require("./validations");
|
|
7
|
+
function assertValidMaxBufferred(maxBuffered) {
|
|
8
|
+
if (!(0, validations_1.isPositiveIntegerOrZero)(maxBuffered)) {
|
|
9
|
+
throw new schema_1.SchemaError({
|
|
10
|
+
code: 'INVALID_PARAMETERS',
|
|
11
|
+
parameters: ['maxBuffered'],
|
|
12
|
+
friendlyMessage: 'Max buffered must be a positive integer or zero.',
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.assertValidMaxBufferred = assertValidMaxBufferred;
|
|
17
|
+
function assertValidChunkSize(chunkSize) {
|
|
18
|
+
if (!(0, validations_1.isPositiveIntegerOrZero)(chunkSize)) {
|
|
19
|
+
throw new schema_1.SchemaError({
|
|
20
|
+
code: 'INVALID_PARAMETERS',
|
|
21
|
+
parameters: ['chunkSize'],
|
|
22
|
+
friendlyMessage: 'Chunk size must be a positive integer or zero.',
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.assertValidChunkSize = assertValidChunkSize;
|
|
27
|
+
function assertValidChannelFormat(channelFormat) {
|
|
28
|
+
if (!(0, validations_1.isStringInArray)(channelFormat, consts_1.CHANNEL_FORMATS)) {
|
|
29
|
+
throw new schema_1.SchemaError({
|
|
30
|
+
code: 'INVALID_PARAMETERS',
|
|
31
|
+
parameters: ['channelFormat'],
|
|
32
|
+
friendlyMessage: `Invalid `,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.assertValidChannelFormat = assertValidChannelFormat;
|
|
37
|
+
function assertValidSampleRate(sampleRate) {
|
|
38
|
+
if (!(0, validations_1.isGreaterThanOrEqualToZero)(sampleRate)) {
|
|
39
|
+
throw new schema_1.SchemaError({
|
|
40
|
+
code: 'INVALID_PARAMETERS',
|
|
41
|
+
parameters: ['sampleRate'],
|
|
42
|
+
friendlyMessage: 'Sample rate must be a positive number or zero.',
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.assertValidSampleRate = assertValidSampleRate;
|
|
47
|
+
function assertValidChannelCount(channelCount) {
|
|
48
|
+
if (!(0, validations_1.isPositiveInteger)(channelCount)) {
|
|
49
|
+
throw new schema_1.SchemaError({
|
|
50
|
+
code: 'INVALID_PARAMETERS',
|
|
51
|
+
parameters: ['channelNames'],
|
|
52
|
+
friendlyMessage: 'channelNames must have 1 or more labels.',
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.assertValidChannelCount = assertValidChannelCount;
|
|
57
|
+
//# sourceMappingURL=assertions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertions.js","sourceRoot":"","sources":["../src/assertions.ts"],"names":[],"mappings":";;;AAAA,+CAAgD;AAChD,qCAAyD;AACzD,+CAKsB;AAEtB,SAAgB,uBAAuB,CAAC,WAAmB;IAC1D,IAAI,CAAC,IAAA,qCAAuB,EAAC,WAAW,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,oBAAW,CAAC;YACrB,IAAI,EAAE,oBAAoB;YAC1B,UAAU,EAAE,CAAC,aAAa,CAAC;YAC3B,eAAe,EAAE,kDAAkD;SACnE,CAAC,CAAA;IACH,CAAC;AACF,CAAC;AARD,0DAQC;AAED,SAAgB,oBAAoB,CAAC,SAAiB;IACrD,IAAI,CAAC,IAAA,qCAAuB,EAAC,SAAS,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,oBAAW,CAAC;YACrB,IAAI,EAAE,oBAAoB;YAC1B,UAAU,EAAE,CAAC,WAAW,CAAC;YACzB,eAAe,EAAE,gDAAgD;SACjE,CAAC,CAAA;IACH,CAAC;AACF,CAAC;AARD,oDAQC;AAED,SAAgB,wBAAwB,CAAC,aAA4B;IACpE,IAAI,CAAC,IAAA,6BAAe,EAAC,aAAa,EAAE,wBAAe,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,oBAAW,CAAC;YACrB,IAAI,EAAE,oBAAoB;YAC1B,UAAU,EAAE,CAAC,eAAe,CAAC;YAC7B,eAAe,EAAE,UAAU;SAC3B,CAAC,CAAA;IACH,CAAC;AACF,CAAC;AARD,4DAQC;AAED,SAAgB,qBAAqB,CAAC,UAAkB;IACvD,IAAI,CAAC,IAAA,wCAA0B,EAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,oBAAW,CAAC;YACrB,IAAI,EAAE,oBAAoB;YAC1B,UAAU,EAAE,CAAC,YAAY,CAAC;YAC1B,eAAe,EAAE,gDAAgD;SACjE,CAAC,CAAA;IACH,CAAC;AACF,CAAC;AARD,sDAQC;AAED,SAAgB,uBAAuB,CAAC,YAAoB;IAC3D,IAAI,CAAC,IAAA,+BAAiB,EAAC,YAAY,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,oBAAW,CAAC;YACrB,IAAI,EAAE,oBAAoB;YAC1B,UAAU,EAAE,CAAC,cAAc,CAAC;YAC5B,eAAe,EAAE,0CAA0C;SAC3D,CAAC,CAAA;IACH,CAAC;AACF,CAAC;AARD,0DAQC"}
|
package/build/consts.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CHANNEL_FORMATS = void 0;
|
|
4
|
+
exports.CHANNEL_FORMATS = [
|
|
5
|
+
'undefined',
|
|
6
|
+
'float32',
|
|
7
|
+
'double64',
|
|
8
|
+
'string',
|
|
9
|
+
'int32',
|
|
10
|
+
'int16',
|
|
11
|
+
'int8',
|
|
12
|
+
'int64',
|
|
13
|
+
];
|
|
14
|
+
//# sourceMappingURL=consts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG;IAC9B,WAAW;IACX,SAAS;IACT,UAAU;IACV,QAAQ;IACR,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;CACE,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function isStringInArray(value: string, array: readonly string[]): boolean;
|
|
2
|
+
export declare function isGreaterThanOrEqualToZero(value: number): boolean;
|
|
3
|
+
export declare function isPositiveInteger(value: number): boolean;
|
|
4
|
+
export declare function isPositiveIntegerOrZero(value: number): boolean;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isPositiveIntegerOrZero = exports.isPositiveInteger = exports.isGreaterThanOrEqualToZero = exports.isStringInArray = void 0;
|
|
4
|
+
function isStringInArray(value, array) {
|
|
5
|
+
return array.indexOf(value) !== -1;
|
|
6
|
+
}
|
|
7
|
+
exports.isStringInArray = isStringInArray;
|
|
8
|
+
function isGreaterThanOrEqualToZero(value) {
|
|
9
|
+
return value >= 0;
|
|
10
|
+
}
|
|
11
|
+
exports.isGreaterThanOrEqualToZero = isGreaterThanOrEqualToZero;
|
|
12
|
+
function isPositiveInteger(value) {
|
|
13
|
+
return Number.isInteger(value) && value > 0;
|
|
14
|
+
}
|
|
15
|
+
exports.isPositiveInteger = isPositiveInteger;
|
|
16
|
+
function isPositiveIntegerOrZero(value) {
|
|
17
|
+
return Number.isInteger(value) && value >= 0;
|
|
18
|
+
}
|
|
19
|
+
exports.isPositiveIntegerOrZero = isPositiveIntegerOrZero;
|
|
20
|
+
//# sourceMappingURL=validations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validations.js","sourceRoot":"","sources":["../src/validations.ts"],"names":[],"mappings":";;;AAAA,SAAgB,eAAe,CAAC,KAAa,EAAE,KAAwB;IACtE,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;AACnC,CAAC;AAFD,0CAEC;AAED,SAAgB,0BAA0B,CAAC,KAAa;IACvD,OAAO,KAAK,IAAI,CAAC,CAAA;AAClB,CAAC;AAFD,gEAEC;AAED,SAAgB,iBAAiB,CAAC,KAAa;IAC9C,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAA;AAC5C,CAAC;AAFD,8CAEC;AAED,SAAgB,uBAAuB,CAAC,KAAa;IACpD,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;AAC7C,CAAC;AAFD,0DAEC"}
|
package/package.json
CHANGED
package/src/LslOutlet.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { assertOptions } from '@sprucelabs/schema'
|
|
2
|
+
import {
|
|
3
|
+
assertValidChannelCount,
|
|
4
|
+
assertValidChannelFormat,
|
|
5
|
+
assertValidChunkSize,
|
|
6
|
+
assertValidMaxBufferred,
|
|
7
|
+
assertValidSampleRate,
|
|
8
|
+
} from './assertions'
|
|
9
|
+
import { CHANNEL_FORMATS, ChannelFormat } from './consts'
|
|
2
10
|
import LiblslImpl, {
|
|
3
11
|
BoundOutlet,
|
|
4
12
|
BoundStreamInfo,
|
|
@@ -33,11 +41,11 @@ export default class LslOutletImpl implements LslOutlet {
|
|
|
33
41
|
|
|
34
42
|
const channelCount = channelNames.length
|
|
35
43
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
44
|
+
assertValidChannelCount(channelCount)
|
|
45
|
+
assertValidSampleRate(sampleRate)
|
|
46
|
+
assertValidChannelFormat(channelFormat)
|
|
47
|
+
assertValidChunkSize(chunkSize)
|
|
48
|
+
assertValidMaxBufferred(maxBuffered)
|
|
41
49
|
|
|
42
50
|
delete streamInfoOptions.manufacturer
|
|
43
51
|
delete streamInfoOptions.unit
|
|
@@ -74,7 +82,6 @@ export default class LslOutletImpl implements LslOutlet {
|
|
|
74
82
|
|
|
75
83
|
public pushSample(sample: LslSample): void {
|
|
76
84
|
const timestamp = this.lsl.localClock()
|
|
77
|
-
|
|
78
85
|
const method = this.getPushMethod()
|
|
79
86
|
|
|
80
87
|
this.lsl[method]({
|
|
@@ -106,87 +113,11 @@ export default class LslOutletImpl implements LslOutlet {
|
|
|
106
113
|
return CHANNEL_FORMATS.indexOf(channelFormat)
|
|
107
114
|
}
|
|
108
115
|
|
|
109
|
-
private assertValidMaxBufferred(maxBuffered: number): void {
|
|
110
|
-
if (!this.isPositiveIntegerOrZero(maxBuffered)) {
|
|
111
|
-
throw new SchemaError({
|
|
112
|
-
code: 'INVALID_PARAMETERS',
|
|
113
|
-
parameters: ['maxBuffered'],
|
|
114
|
-
friendlyMessage: 'Max buffered must be a positive integer or zero.',
|
|
115
|
-
})
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
private assertValidChunkSize(chunkSize: number): void {
|
|
120
|
-
if (!this.isPositiveIntegerOrZero(chunkSize)) {
|
|
121
|
-
throw new SchemaError({
|
|
122
|
-
code: 'INVALID_PARAMETERS',
|
|
123
|
-
parameters: ['chunkSize'],
|
|
124
|
-
friendlyMessage: 'Chunk size must be a positive integer or zero.',
|
|
125
|
-
})
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
private assertValidChannelFormat(channelFormat: ChannelFormat): void {
|
|
130
|
-
const validFormats = CHANNEL_FORMATS
|
|
131
|
-
if (validFormats.indexOf(channelFormat) === -1) {
|
|
132
|
-
throw new SchemaError({
|
|
133
|
-
code: 'INVALID_PARAMETERS',
|
|
134
|
-
parameters: ['channelFormat'],
|
|
135
|
-
friendlyMessage: 'Channel format must be a valid format.',
|
|
136
|
-
})
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
private assertValidSampleRate(sampleRate: number): void {
|
|
141
|
-
if (!this.isGreaterThanZero(sampleRate)) {
|
|
142
|
-
throw new SchemaError({
|
|
143
|
-
code: 'INVALID_PARAMETERS',
|
|
144
|
-
parameters: ['sampleRate'],
|
|
145
|
-
friendlyMessage: 'Sample rate must be a positive number or zero.',
|
|
146
|
-
})
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
private assertValidChannelCount(channelCount: number): void {
|
|
151
|
-
if (!this.isPositiveInteger(channelCount)) {
|
|
152
|
-
throw new SchemaError({
|
|
153
|
-
code: 'INVALID_PARAMETERS',
|
|
154
|
-
parameters: ['channelNames'],
|
|
155
|
-
friendlyMessage: 'channelNames must have 1 or more labels.',
|
|
156
|
-
})
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
private isGreaterThanZero(value: number): boolean {
|
|
161
|
-
return value >= 0
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
private isPositiveInteger(value: number): boolean {
|
|
165
|
-
return Number.isInteger(value) && value > 0
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
private isPositiveIntegerOrZero(value: number): boolean {
|
|
169
|
-
return Number.isInteger(value) && value >= 0
|
|
170
|
-
}
|
|
171
|
-
|
|
172
116
|
private get lsl(): Liblsl {
|
|
173
117
|
return LiblslImpl.getInstance()
|
|
174
118
|
}
|
|
175
119
|
}
|
|
176
120
|
|
|
177
|
-
const CHANNEL_FORMATS = [
|
|
178
|
-
'undefined',
|
|
179
|
-
'float32',
|
|
180
|
-
'double64',
|
|
181
|
-
'string',
|
|
182
|
-
'int32',
|
|
183
|
-
'int16',
|
|
184
|
-
'int8',
|
|
185
|
-
'int64',
|
|
186
|
-
] as const
|
|
187
|
-
|
|
188
|
-
export type ChannelFormat = (typeof CHANNEL_FORMATS)[number]
|
|
189
|
-
|
|
190
121
|
export interface LslOutlet {
|
|
191
122
|
destroy(): void
|
|
192
123
|
pushSample(sample: LslSample): void
|
|
@@ -6,8 +6,8 @@ import AbstractSpruceTest, {
|
|
|
6
6
|
generateId,
|
|
7
7
|
} from '@sprucelabs/test-utils'
|
|
8
8
|
import LiblslImpl, { LslSample } from '../../Liblsl'
|
|
9
|
-
import LslOutlet, {
|
|
10
|
-
import { TEST_CHANNEL_FORMATS } from '../support/consts'
|
|
9
|
+
import LslOutlet, { LslOutletOptions } from '../../LslOutlet'
|
|
10
|
+
import { TEST_CHANNEL_FORMATS, TestChannelFormat } from '../support/consts'
|
|
11
11
|
import generateRandomOutletOptions from '../support/generateRandomOutletOptions'
|
|
12
12
|
import { SpyLiblsl } from '../support/SpyLiblsl'
|
|
13
13
|
|
|
@@ -86,7 +86,7 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
86
86
|
@test()
|
|
87
87
|
protected static async supportsAllKnownChannelFormats() {
|
|
88
88
|
for (const format of TEST_CHANNEL_FORMATS) {
|
|
89
|
-
this.Outlet({ channelFormat: format as
|
|
89
|
+
this.Outlet({ channelFormat: format as TestChannelFormat })
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { SchemaError } from '@sprucelabs/schema'
|
|
2
|
+
import { CHANNEL_FORMATS, ChannelFormat } from './consts'
|
|
3
|
+
import {
|
|
4
|
+
isGreaterThanOrEqualToZero,
|
|
5
|
+
isPositiveInteger,
|
|
6
|
+
isPositiveIntegerOrZero,
|
|
7
|
+
isStringInArray,
|
|
8
|
+
} from './validations'
|
|
9
|
+
|
|
10
|
+
export function assertValidMaxBufferred(maxBuffered: number): void {
|
|
11
|
+
if (!isPositiveIntegerOrZero(maxBuffered)) {
|
|
12
|
+
throw new SchemaError({
|
|
13
|
+
code: 'INVALID_PARAMETERS',
|
|
14
|
+
parameters: ['maxBuffered'],
|
|
15
|
+
friendlyMessage: 'Max buffered must be a positive integer or zero.',
|
|
16
|
+
})
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function assertValidChunkSize(chunkSize: number): void {
|
|
21
|
+
if (!isPositiveIntegerOrZero(chunkSize)) {
|
|
22
|
+
throw new SchemaError({
|
|
23
|
+
code: 'INVALID_PARAMETERS',
|
|
24
|
+
parameters: ['chunkSize'],
|
|
25
|
+
friendlyMessage: 'Chunk size must be a positive integer or zero.',
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function assertValidChannelFormat(channelFormat: ChannelFormat): void {
|
|
31
|
+
if (!isStringInArray(channelFormat, CHANNEL_FORMATS)) {
|
|
32
|
+
throw new SchemaError({
|
|
33
|
+
code: 'INVALID_PARAMETERS',
|
|
34
|
+
parameters: ['channelFormat'],
|
|
35
|
+
friendlyMessage: `Invalid `,
|
|
36
|
+
})
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function assertValidSampleRate(sampleRate: number): void {
|
|
41
|
+
if (!isGreaterThanOrEqualToZero(sampleRate)) {
|
|
42
|
+
throw new SchemaError({
|
|
43
|
+
code: 'INVALID_PARAMETERS',
|
|
44
|
+
parameters: ['sampleRate'],
|
|
45
|
+
friendlyMessage: 'Sample rate must be a positive number or zero.',
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function assertValidChannelCount(channelCount: number): void {
|
|
51
|
+
if (!isPositiveInteger(channelCount)) {
|
|
52
|
+
throw new SchemaError({
|
|
53
|
+
code: 'INVALID_PARAMETERS',
|
|
54
|
+
parameters: ['channelNames'],
|
|
55
|
+
friendlyMessage: 'channelNames must have 1 or more labels.',
|
|
56
|
+
})
|
|
57
|
+
}
|
|
58
|
+
}
|
package/src/consts.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function isStringInArray(value: string, array: readonly string[]) {
|
|
2
|
+
return array.indexOf(value) !== -1
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export function isGreaterThanOrEqualToZero(value: number): boolean {
|
|
6
|
+
return value >= 0
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function isPositiveInteger(value: number): boolean {
|
|
10
|
+
return Number.isInteger(value) && value > 0
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function isPositiveIntegerOrZero(value: number): boolean {
|
|
14
|
+
return Number.isInteger(value) && value >= 0
|
|
15
|
+
}
|