@neurodevs/node-lsl 2.0.2 → 3.1.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/README.md +1 -1
- package/build/Liblsl.d.ts +33 -25
- package/build/Liblsl.js +29 -30
- package/build/Liblsl.js.map +1 -1
- package/build/LslOutlet.d.ts +6 -5
- package/build/LslOutlet.js +21 -14
- package/build/LslOutlet.js.map +1 -1
- package/build/__tests__/behavioral/LslOutlet.test.d.ts +9 -10
- package/build/__tests__/behavioral/LslOutlet.test.js +49 -58
- package/build/__tests__/behavioral/LslOutlet.test.js.map +1 -1
- package/build/__tests__/implementation/Liblsl.test.d.ts +9 -9
- package/build/__tests__/implementation/Liblsl.test.js +76 -66
- package/build/__tests__/implementation/Liblsl.test.js.map +1 -1
- package/package.json +1 -1
- package/src/Liblsl.ts +76 -73
- package/src/LslOutlet.ts +31 -28
- package/src/__tests__/behavioral/LslOutlet.test.ts +62 -71
- package/src/__tests__/implementation/Liblsl.test.ts +96 -84
package/README.md
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# node-lsl
|
|
2
|
-
Lab Streaming Layer (LSL) on Node
|
|
2
|
+
Lab Streaming Layer (LSL) on Node + TypeScript
|
package/build/Liblsl.d.ts
CHANGED
|
@@ -4,22 +4,21 @@ export default class LiblslImpl implements Liblsl {
|
|
|
4
4
|
static ffi: typeof ffi;
|
|
5
5
|
private bindings;
|
|
6
6
|
static getInstance(): Liblsl;
|
|
7
|
-
static reset(): void;
|
|
8
7
|
static setInstance(instance: Liblsl): void;
|
|
8
|
+
static resetInstance(): void;
|
|
9
9
|
constructor();
|
|
10
|
-
appendChannelsToStreamInfo(info: LslBindingsStreamInfo, channels: LslChannel[]): void;
|
|
11
10
|
private loadBindings;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
createStreamInfo(options: CreateStreamInfoOptions): BoundStreamInfo;
|
|
12
|
+
appendChannelsToStreamInfo(options: AppendChannelsToStreamInfoOptions): void;
|
|
13
|
+
createOutlet(options: CreateOutletOptions): BoundOutlet;
|
|
14
|
+
pushSample(options: PushSampleOptions): void;
|
|
15
15
|
}
|
|
16
16
|
export interface Liblsl {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
createOutlet(options: CreateOutletOptions):
|
|
20
|
-
pushSample(
|
|
17
|
+
createStreamInfo(options: CreateStreamInfoOptions): BoundStreamInfo;
|
|
18
|
+
appendChannelsToStreamInfo(options: AppendChannelsToStreamInfoOptions): void;
|
|
19
|
+
createOutlet(options: CreateOutletOptions): BoundOutlet;
|
|
20
|
+
pushSample(options: PushSampleOptions): void;
|
|
21
21
|
}
|
|
22
|
-
export type LslSample = (number | string | undefined)[];
|
|
23
22
|
export interface CreateStreamInfoOptions {
|
|
24
23
|
name: string;
|
|
25
24
|
type: string;
|
|
@@ -30,30 +29,39 @@ export interface CreateStreamInfoOptions {
|
|
|
30
29
|
manufacturer?: string;
|
|
31
30
|
unit?: string;
|
|
32
31
|
}
|
|
32
|
+
export interface AppendChannelsToStreamInfoOptions {
|
|
33
|
+
info: BoundStreamInfo;
|
|
34
|
+
channels: LslChannel[];
|
|
35
|
+
}
|
|
36
|
+
export interface CreateOutletOptions {
|
|
37
|
+
info: BoundStreamInfo;
|
|
38
|
+
chunkSize: number;
|
|
39
|
+
maxBuffered: number;
|
|
40
|
+
}
|
|
41
|
+
export interface PushSampleOptions {
|
|
42
|
+
outlet: BoundOutlet;
|
|
43
|
+
sample: LslSample;
|
|
44
|
+
}
|
|
33
45
|
export interface LslChannel {
|
|
34
46
|
label: string;
|
|
35
47
|
unit: string;
|
|
36
48
|
type: string;
|
|
37
49
|
}
|
|
50
|
+
export type LslSample = (number | string | undefined)[];
|
|
38
51
|
export interface LiblslBindings {
|
|
39
|
-
lsl_create_streaminfo(name: string, type: string, channelCount: number, sampleRate: number, channelFormat: number, sourceId: string):
|
|
40
|
-
lsl_create_outlet(info:
|
|
41
|
-
lsl_push_sample_ft(outlet:
|
|
52
|
+
lsl_create_streaminfo(name: string, type: string, channelCount: number, sampleRate: number, channelFormat: number, sourceId: string): BoundStreamInfo;
|
|
53
|
+
lsl_create_outlet(info: BoundStreamInfo, chunkSize: number, maxBuffered: number): BoundOutlet;
|
|
54
|
+
lsl_push_sample_ft(outlet: BoundOutlet, sample: LslSample, timestamp: number): void;
|
|
42
55
|
lsl_local_clock(): number;
|
|
43
|
-
lsl_get_desc(info:
|
|
44
|
-
lsl_append_child(desc:
|
|
45
|
-
lsl_append_child_value(child:
|
|
46
|
-
}
|
|
47
|
-
export interface CreateOutletOptions {
|
|
48
|
-
info: LslBindingsStreamInfo;
|
|
49
|
-
chunkSize: number;
|
|
50
|
-
maxBuffered: number;
|
|
56
|
+
lsl_get_desc(info: BoundStreamInfo): BoundDesc;
|
|
57
|
+
lsl_append_child(desc: BoundDesc, name: string): BoundChild;
|
|
58
|
+
lsl_append_child_value(child: BoundChild, name: string, value: string): void;
|
|
51
59
|
}
|
|
52
|
-
export interface
|
|
60
|
+
export interface BoundStreamInfo {
|
|
53
61
|
}
|
|
54
|
-
export interface
|
|
62
|
+
export interface BoundOutlet {
|
|
55
63
|
}
|
|
56
|
-
export interface
|
|
64
|
+
export interface BoundDesc {
|
|
57
65
|
}
|
|
58
|
-
export interface
|
|
66
|
+
export interface BoundChild {
|
|
59
67
|
}
|
package/build/Liblsl.js
CHANGED
|
@@ -11,16 +11,16 @@ const SpruceError_1 = __importDefault(require("./errors/SpruceError"));
|
|
|
11
11
|
class LiblslImpl {
|
|
12
12
|
static getInstance() {
|
|
13
13
|
if (!this.instance) {
|
|
14
|
-
this.
|
|
14
|
+
this.setInstance(new this());
|
|
15
15
|
}
|
|
16
16
|
return this.instance;
|
|
17
17
|
}
|
|
18
|
-
static reset() {
|
|
19
|
-
delete this.instance;
|
|
20
|
-
}
|
|
21
18
|
static setInstance(instance) {
|
|
22
19
|
this.instance = instance;
|
|
23
20
|
}
|
|
21
|
+
static resetInstance() {
|
|
22
|
+
delete this.instance;
|
|
23
|
+
}
|
|
24
24
|
constructor() {
|
|
25
25
|
const path = process.env.LIBLSL_PATH;
|
|
26
26
|
if (!path) {
|
|
@@ -29,25 +29,13 @@ class LiblslImpl {
|
|
|
29
29
|
try {
|
|
30
30
|
this.bindings = this.loadBindings(path);
|
|
31
31
|
}
|
|
32
|
-
catch (
|
|
33
|
-
console.error(err);
|
|
32
|
+
catch (_a) {
|
|
34
33
|
throw new SpruceError_1.default({
|
|
35
34
|
code: 'FAILED_TO_LOAD_LIBLSL',
|
|
36
35
|
liblslPath: path,
|
|
37
36
|
});
|
|
38
37
|
}
|
|
39
38
|
}
|
|
40
|
-
appendChannelsToStreamInfo(info, channels) {
|
|
41
|
-
(0, schema_1.assertOptions)({ info, channels }, ['info', 'channels']);
|
|
42
|
-
const desc = this.bindings.lsl_get_desc(info);
|
|
43
|
-
const parent = this.bindings.lsl_append_child(desc, 'channels');
|
|
44
|
-
for (const channel of channels) {
|
|
45
|
-
const c = this.bindings.lsl_append_child(parent, 'channel');
|
|
46
|
-
this.bindings.lsl_append_child_value(c, 'label', channel.label);
|
|
47
|
-
this.bindings.lsl_append_child_value(c, 'unit', channel.unit);
|
|
48
|
-
this.bindings.lsl_append_child_value(c, 'type', channel.type);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
39
|
loadBindings(path) {
|
|
52
40
|
return LiblslImpl.ffi.Library(path, {
|
|
53
41
|
lsl_create_streaminfo: [
|
|
@@ -62,19 +50,6 @@ class LiblslImpl {
|
|
|
62
50
|
lsl_append_child_value: [xmlPtr, [xmlPtr, 'string', 'string']],
|
|
63
51
|
});
|
|
64
52
|
}
|
|
65
|
-
pushSample(outlet, sample) {
|
|
66
|
-
(0, schema_1.assertOptions)({ outlet, sample }, ['outlet', 'sample']);
|
|
67
|
-
const clock = this.bindings.lsl_local_clock();
|
|
68
|
-
this.bindings.lsl_push_sample_ft(outlet, sample, clock);
|
|
69
|
-
}
|
|
70
|
-
createOutlet(options) {
|
|
71
|
-
const { info, chunkSize, maxBuffered } = (0, schema_1.assertOptions)(options, [
|
|
72
|
-
'info',
|
|
73
|
-
'chunkSize',
|
|
74
|
-
'maxBuffered',
|
|
75
|
-
]);
|
|
76
|
-
return this.bindings.lsl_create_outlet(info, chunkSize, maxBuffered);
|
|
77
|
-
}
|
|
78
53
|
createStreamInfo(options) {
|
|
79
54
|
const { name, type, channelCount, sampleRate, channelFormat, sourceId } = (0, schema_1.assertOptions)(options, [
|
|
80
55
|
'name',
|
|
@@ -86,6 +61,30 @@ class LiblslImpl {
|
|
|
86
61
|
]);
|
|
87
62
|
return this.bindings.lsl_create_streaminfo(name, type, channelCount, sampleRate, channelFormat, sourceId);
|
|
88
63
|
}
|
|
64
|
+
appendChannelsToStreamInfo(options) {
|
|
65
|
+
const { info, channels } = (0, schema_1.assertOptions)(options, ['info', 'channels']);
|
|
66
|
+
const desc = this.bindings.lsl_get_desc(info);
|
|
67
|
+
const parent = this.bindings.lsl_append_child(desc, 'channels');
|
|
68
|
+
for (const channel of channels) {
|
|
69
|
+
const child = this.bindings.lsl_append_child(parent, 'channel');
|
|
70
|
+
this.bindings.lsl_append_child_value(child, 'label', channel.label);
|
|
71
|
+
this.bindings.lsl_append_child_value(child, 'unit', channel.unit);
|
|
72
|
+
this.bindings.lsl_append_child_value(child, 'type', channel.type);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
createOutlet(options) {
|
|
76
|
+
const { info, chunkSize, maxBuffered } = (0, schema_1.assertOptions)(options, [
|
|
77
|
+
'info',
|
|
78
|
+
'chunkSize',
|
|
79
|
+
'maxBuffered',
|
|
80
|
+
]);
|
|
81
|
+
return this.bindings.lsl_create_outlet(info, chunkSize, maxBuffered);
|
|
82
|
+
}
|
|
83
|
+
pushSample(options) {
|
|
84
|
+
const { outlet, sample } = (0, schema_1.assertOptions)(options, ['outlet', 'sample']);
|
|
85
|
+
const clock = this.bindings.lsl_local_clock();
|
|
86
|
+
this.bindings.lsl_push_sample_ft(outlet, sample, clock);
|
|
87
|
+
}
|
|
89
88
|
}
|
|
90
89
|
LiblslImpl.ffi = ffi_napi_1.default;
|
|
91
90
|
exports.default = LiblslImpl;
|
package/build/Liblsl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Liblsl.js","sourceRoot":"","sources":["../src/Liblsl.ts"],"names":[],"mappings":";;;;;AAAA,+CAAkD;AAClD,wDAA0B;AAC1B,oEAAsC;AACtC,wDAA0B;AAC1B,uEAA8C;AAE9C,MAAqB,UAAU;IAKvB,MAAM,CAAC,WAAW;QACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACnB,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"Liblsl.js","sourceRoot":"","sources":["../src/Liblsl.ts"],"names":[],"mappings":"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"}
|
package/build/LslOutlet.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export default class LslOutletImpl implements LslOutlet {
|
|
|
6
6
|
private outlet;
|
|
7
7
|
protected constructor(options: LslOutletOptions);
|
|
8
8
|
static Outlet(options: LslOutletOptions): LslOutlet;
|
|
9
|
+
pushSample(sample: LslSample): void;
|
|
10
|
+
private lookupChannelFormat;
|
|
9
11
|
private assertValidMaxBufferred;
|
|
10
12
|
private assertValidChunkSize;
|
|
11
13
|
private assertValidChannelFormat;
|
|
@@ -15,14 +17,16 @@ export default class LslOutletImpl implements LslOutlet {
|
|
|
15
17
|
private isPositiveIntegerOrZero;
|
|
16
18
|
private isPositiveInteger;
|
|
17
19
|
private get lsl();
|
|
18
|
-
pushSample(sample: LslSample): void;
|
|
19
20
|
}
|
|
20
21
|
declare const CHANNEL_FORMATS: readonly ["undefined", "float32", "double64", "string", "int32", "int16", "int8", "int64"];
|
|
21
22
|
export type ChannelFormat = (typeof CHANNEL_FORMATS)[number];
|
|
23
|
+
export interface LslOutlet {
|
|
24
|
+
pushSample(sample: LslSample): void;
|
|
25
|
+
}
|
|
22
26
|
export interface LslOutletOptions {
|
|
23
27
|
name: string;
|
|
24
28
|
type: string;
|
|
25
|
-
|
|
29
|
+
channelNames: string[];
|
|
26
30
|
sampleRate: number;
|
|
27
31
|
channelFormat: ChannelFormat;
|
|
28
32
|
sourceId: string;
|
|
@@ -31,7 +35,4 @@ export interface LslOutletOptions {
|
|
|
31
35
|
chunkSize: number;
|
|
32
36
|
maxBuffered: number;
|
|
33
37
|
}
|
|
34
|
-
export interface LslOutlet {
|
|
35
|
-
pushSample(sample: LslSample): void;
|
|
36
|
-
}
|
|
37
38
|
export {};
|
package/build/LslOutlet.js
CHANGED
|
@@ -21,7 +21,7 @@ class LslOutletImpl {
|
|
|
21
21
|
const { sampleRate, channelFormat } = (0, schema_1.assertOptions)(options, [
|
|
22
22
|
'name',
|
|
23
23
|
'type',
|
|
24
|
-
'
|
|
24
|
+
'channelNames',
|
|
25
25
|
'sampleRate',
|
|
26
26
|
'channelFormat',
|
|
27
27
|
'sourceId',
|
|
@@ -32,20 +32,24 @@ class LslOutletImpl {
|
|
|
32
32
|
]);
|
|
33
33
|
this.outletOptions = options;
|
|
34
34
|
const _a = this
|
|
35
|
-
.outletOptions, { chunkSize, maxBuffered,
|
|
36
|
-
|
|
35
|
+
.outletOptions, { chunkSize, maxBuffered, channelNames } = _a, streamInfoOptions = __rest(_a, ["chunkSize", "maxBuffered", "channelNames"]);
|
|
36
|
+
const channelCount = channelNames.length;
|
|
37
|
+
this.assertValidChannelCount(channelCount);
|
|
37
38
|
this.assertValidSampleRate(sampleRate);
|
|
38
39
|
this.assertValidChannelFormat(channelFormat);
|
|
39
40
|
this.assertValidChunkSize(chunkSize);
|
|
40
41
|
this.assertValidMaxBufferred(maxBuffered);
|
|
41
42
|
delete streamInfoOptions.manufacturer;
|
|
42
43
|
delete streamInfoOptions.unit;
|
|
43
|
-
this.streamInfo = this.lsl.createStreamInfo(Object.assign(Object.assign({}, streamInfoOptions), { channelCount
|
|
44
|
-
this.lsl.appendChannelsToStreamInfo(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
this.streamInfo = this.lsl.createStreamInfo(Object.assign(Object.assign({}, streamInfoOptions), { channelCount, channelFormat: this.lookupChannelFormat(channelFormat) }));
|
|
45
|
+
this.lsl.appendChannelsToStreamInfo({
|
|
46
|
+
info: this.streamInfo,
|
|
47
|
+
channels: channelNames.map((label) => ({
|
|
48
|
+
label,
|
|
49
|
+
unit: this.outletOptions.unit,
|
|
50
|
+
type: this.outletOptions.type,
|
|
51
|
+
})),
|
|
52
|
+
});
|
|
49
53
|
this.outlet = this.lsl.createOutlet({
|
|
50
54
|
info: this.streamInfo,
|
|
51
55
|
chunkSize: this.outletOptions.chunkSize,
|
|
@@ -56,6 +60,12 @@ class LslOutletImpl {
|
|
|
56
60
|
var _a;
|
|
57
61
|
return new ((_a = this.Class) !== null && _a !== void 0 ? _a : this)(options);
|
|
58
62
|
}
|
|
63
|
+
pushSample(sample) {
|
|
64
|
+
this.lsl.pushSample({ outlet: this.outlet, sample });
|
|
65
|
+
}
|
|
66
|
+
lookupChannelFormat(channelFormat) {
|
|
67
|
+
return CHANNEL_FORMATS.indexOf(channelFormat);
|
|
68
|
+
}
|
|
59
69
|
assertValidMaxBufferred(maxBuffered) {
|
|
60
70
|
if (!this.isPositiveIntegerOrZero(maxBuffered)) {
|
|
61
71
|
throw new schema_1.SchemaError({
|
|
@@ -97,8 +107,8 @@ class LslOutletImpl {
|
|
|
97
107
|
if (!this.isPositiveInteger(channelCount)) {
|
|
98
108
|
throw new schema_1.SchemaError({
|
|
99
109
|
code: 'INVALID_PARAMETERS',
|
|
100
|
-
parameters: ['
|
|
101
|
-
friendlyMessage: '
|
|
110
|
+
parameters: ['channelNames'],
|
|
111
|
+
friendlyMessage: 'channelNames must have 1 or more labels.',
|
|
102
112
|
});
|
|
103
113
|
}
|
|
104
114
|
}
|
|
@@ -114,9 +124,6 @@ class LslOutletImpl {
|
|
|
114
124
|
get lsl() {
|
|
115
125
|
return Liblsl_1.default.getInstance();
|
|
116
126
|
}
|
|
117
|
-
pushSample(sample) {
|
|
118
|
-
this.lsl.pushSample(this.outlet, sample);
|
|
119
|
-
}
|
|
120
127
|
}
|
|
121
128
|
exports.default = LslOutletImpl;
|
|
122
129
|
const CHANNEL_FORMATS = [
|
package/build/LslOutlet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LslOutlet.js","sourceRoot":"","sources":["../src/LslOutlet.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA+D;AAC/D,
|
|
1
|
+
{"version":3,"file":"LslOutlet.js","sourceRoot":"","sources":["../src/LslOutlet.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,28 +2,27 @@ import AbstractSpruceTest from '@sprucelabs/test-utils';
|
|
|
2
2
|
import { LslSample } from '../../Liblsl';
|
|
3
3
|
export declare const CHANNEL_FORMATS: readonly ["undefined", "float32", "double64", "string", "int32", "int16", "int8", "int64"];
|
|
4
4
|
export default class LslOutletTest extends AbstractSpruceTest {
|
|
5
|
-
private static
|
|
5
|
+
private static spyLiblsl;
|
|
6
6
|
private static randomOutletOptions;
|
|
7
7
|
private static channelIdx;
|
|
8
8
|
protected static beforeEach(): Promise<void>;
|
|
9
|
-
protected static
|
|
10
|
-
protected static
|
|
11
|
-
protected static throwsWithInvalidChannelCount(): Promise<void>;
|
|
9
|
+
protected static throwsWhenMissingRequiredParams(): Promise<void>;
|
|
10
|
+
protected static throwsWithInvalidChannelNames(): Promise<void>;
|
|
12
11
|
protected static throwsWithInvalidSampleRate(): Promise<void>;
|
|
13
12
|
protected static throwsWithInvalidChannelFormat(): Promise<void>;
|
|
14
|
-
protected static
|
|
15
|
-
protected static throwWithInvalidChunkSize(): Promise<void>;
|
|
13
|
+
protected static throwsWithInvalidChunkSize(): Promise<void>;
|
|
16
14
|
protected static throwsWithInvalidMaxBuffered(): Promise<void>;
|
|
17
|
-
protected static
|
|
18
|
-
protected static
|
|
19
|
-
protected static
|
|
15
|
+
protected static supportsAllKnownChannelFormats(): Promise<void>;
|
|
16
|
+
protected static canPushSampleToLsl(sample: LslSample): Promise<void>;
|
|
17
|
+
protected static constructionCreatesStreamInfo(): Promise<void>;
|
|
18
|
+
protected static canOverrideClassInstantiatedInFactory(): Promise<void>;
|
|
20
19
|
protected static appendsChannelsBasedOnCount(labels: string[]): Promise<void>;
|
|
21
20
|
protected static pushSampleShouldNotCreateMultipleOutlets(): Promise<void>;
|
|
22
21
|
private static pushSample;
|
|
23
22
|
private static assertThrowsInvalidMaxBuffered;
|
|
24
23
|
private static assertThrowsInvalidChunkSize;
|
|
25
24
|
private static assertThrowsInvalidSampleRate;
|
|
26
|
-
private static
|
|
25
|
+
private static assertThrowsInvalidChannelNames;
|
|
27
26
|
private static assertDoesThrowInvalidParameters;
|
|
28
27
|
private static Outlet;
|
|
29
28
|
}
|
|
@@ -66,7 +66,7 @@ class LslOutletTest extends test_utils_1.default {
|
|
|
66
66
|
this.randomOutletOptions = {
|
|
67
67
|
name: (0, test_utils_1.generateId)(),
|
|
68
68
|
type: (0, test_utils_1.generateId)(),
|
|
69
|
-
|
|
69
|
+
channelNames: new Array((0, crypto_1.randomInt)(1, 10)).fill((0, test_utils_1.generateId)()),
|
|
70
70
|
sampleRate: Math.random() * 10,
|
|
71
71
|
channelFormat: exports.CHANNEL_FORMATS[this.channelIdx],
|
|
72
72
|
sourceId: (0, test_utils_1.generateId)(),
|
|
@@ -75,17 +75,17 @@ class LslOutletTest extends test_utils_1.default {
|
|
|
75
75
|
chunkSize: (0, crypto_1.randomInt)(0, 10),
|
|
76
76
|
maxBuffered: (0, crypto_1.randomInt)(0, 10),
|
|
77
77
|
};
|
|
78
|
-
this.
|
|
79
|
-
Liblsl_1.default.setInstance(this.
|
|
78
|
+
this.spyLiblsl = new SpyLiblsl();
|
|
79
|
+
Liblsl_1.default.setInstance(this.spyLiblsl);
|
|
80
80
|
}
|
|
81
|
-
static async
|
|
81
|
+
static async throwsWhenMissingRequiredParams() {
|
|
82
82
|
//@ts-ignore
|
|
83
83
|
const err = test_utils_1.assert.doesThrow(() => new LslOutlet_1.default());
|
|
84
84
|
test_utils_1.errorAssert.assertError(err, 'MISSING_PARAMETERS', {
|
|
85
85
|
parameters: [
|
|
86
86
|
'name',
|
|
87
87
|
'type',
|
|
88
|
-
'
|
|
88
|
+
'channelNames',
|
|
89
89
|
'sampleRate',
|
|
90
90
|
'channelFormat',
|
|
91
91
|
'sourceId',
|
|
@@ -96,11 +96,8 @@ class LslOutletTest extends test_utils_1.default {
|
|
|
96
96
|
],
|
|
97
97
|
});
|
|
98
98
|
}
|
|
99
|
-
static async
|
|
100
|
-
this.
|
|
101
|
-
}
|
|
102
|
-
static async throwsWithInvalidChannelCount() {
|
|
103
|
-
this.assertThrowsInvalidChannelLabels(0);
|
|
99
|
+
static async throwsWithInvalidChannelNames() {
|
|
100
|
+
this.assertThrowsInvalidChannelNames(0);
|
|
104
101
|
}
|
|
105
102
|
static async throwsWithInvalidSampleRate() {
|
|
106
103
|
this.assertThrowsInvalidSampleRate(0);
|
|
@@ -113,13 +110,7 @@ class LslOutletTest extends test_utils_1.default {
|
|
|
113
110
|
'channelFormat',
|
|
114
111
|
]);
|
|
115
112
|
}
|
|
116
|
-
static async
|
|
117
|
-
const valid = exports.CHANNEL_FORMATS;
|
|
118
|
-
for (const format of valid) {
|
|
119
|
-
this.Outlet({ channelFormat: format });
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
static async throwWithInvalidChunkSize() {
|
|
113
|
+
static async throwsWithInvalidChunkSize() {
|
|
123
114
|
this.Outlet({ chunkSize: 0 });
|
|
124
115
|
this.assertThrowsInvalidChunkSize(-1);
|
|
125
116
|
this.assertThrowsInvalidChunkSize(-1.5);
|
|
@@ -131,28 +122,35 @@ class LslOutletTest extends test_utils_1.default {
|
|
|
131
122
|
this.assertThrowsInvalidMaxBuffered(-1.5);
|
|
132
123
|
this.assertThrowsInvalidMaxBuffered(1.5);
|
|
133
124
|
}
|
|
134
|
-
static async
|
|
125
|
+
static async supportsAllKnownChannelFormats() {
|
|
126
|
+
const valid = exports.CHANNEL_FORMATS;
|
|
127
|
+
for (const format of valid) {
|
|
128
|
+
this.Outlet({ channelFormat: format });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
static async canPushSampleToLsl(sample) {
|
|
132
|
+
var _a, _b;
|
|
135
133
|
this.pushSample(sample);
|
|
136
|
-
test_utils_1.assert.isEqual(this.
|
|
137
|
-
test_utils_1.assert.isEqualDeep(this.
|
|
138
|
-
test_utils_1.assert.isEqualDeep(this.
|
|
139
|
-
info: this.
|
|
134
|
+
test_utils_1.assert.isEqual((_a = this.spyLiblsl.lastPushSampleOptions) === null || _a === void 0 ? void 0 : _a.outlet, this.spyLiblsl.outlet);
|
|
135
|
+
test_utils_1.assert.isEqualDeep((_b = this.spyLiblsl.lastPushSampleOptions) === null || _b === void 0 ? void 0 : _b.sample, sample);
|
|
136
|
+
test_utils_1.assert.isEqualDeep(this.spyLiblsl.lastCreateOutletOptions, {
|
|
137
|
+
info: this.spyLiblsl.streamInfo,
|
|
140
138
|
chunkSize: this.randomOutletOptions.chunkSize,
|
|
141
139
|
maxBuffered: this.randomOutletOptions.maxBuffered,
|
|
142
140
|
});
|
|
143
141
|
}
|
|
144
|
-
static async
|
|
142
|
+
static async constructionCreatesStreamInfo() {
|
|
145
143
|
this.Outlet();
|
|
146
144
|
const options = __rest(this.randomOutletOptions, []);
|
|
147
|
-
options.channelCount = options.
|
|
145
|
+
options.channelCount = options.channelNames.length;
|
|
148
146
|
delete options.manufacturer;
|
|
149
147
|
delete options.unit;
|
|
150
148
|
delete options.chunkSize;
|
|
151
149
|
delete options.maxBuffered;
|
|
152
|
-
delete options.
|
|
153
|
-
test_utils_1.assert.isEqualDeep(this.
|
|
150
|
+
delete options.channelNames;
|
|
151
|
+
test_utils_1.assert.isEqualDeep(this.spyLiblsl.lastCreateStreamInfoOptions, Object.assign(Object.assign({}, options), { channelFormat: this.channelIdx }));
|
|
154
152
|
}
|
|
155
|
-
static async
|
|
153
|
+
static async canOverrideClassInstantiatedInFactory() {
|
|
156
154
|
LslOutlet_1.default.Class = CheckingOutlet;
|
|
157
155
|
const instance = this.Outlet();
|
|
158
156
|
test_utils_1.assert.isInstanceOf(instance, CheckingOutlet);
|
|
@@ -160,9 +158,9 @@ class LslOutletTest extends test_utils_1.default {
|
|
|
160
158
|
static async appendsChannelsBasedOnCount(labels) {
|
|
161
159
|
const type = (0, test_utils_1.generateId)();
|
|
162
160
|
const unit = (0, test_utils_1.generateId)();
|
|
163
|
-
this.Outlet({
|
|
164
|
-
test_utils_1.assert.isEqualDeep(this.
|
|
165
|
-
info: this.
|
|
161
|
+
this.Outlet({ channelNames: labels, type, unit });
|
|
162
|
+
test_utils_1.assert.isEqualDeep(this.spyLiblsl.lastAppendChannelsToStreamInfoOptions, {
|
|
163
|
+
info: this.spyLiblsl.streamInfo,
|
|
166
164
|
channels: labels.map((label) => ({
|
|
167
165
|
label,
|
|
168
166
|
type,
|
|
@@ -175,7 +173,7 @@ class LslOutletTest extends test_utils_1.default {
|
|
|
175
173
|
outlet.pushSample([1]);
|
|
176
174
|
outlet.pushSample([2]);
|
|
177
175
|
outlet.pushSample([3]);
|
|
178
|
-
test_utils_1.assert.isEqual(this.
|
|
176
|
+
test_utils_1.assert.isEqual(this.spyLiblsl.createStreamInfoHitCount, 1);
|
|
179
177
|
}
|
|
180
178
|
static pushSample(sample) {
|
|
181
179
|
const outlet = this.Outlet();
|
|
@@ -190,8 +188,8 @@ class LslOutletTest extends test_utils_1.default {
|
|
|
190
188
|
static assertThrowsInvalidSampleRate(sampleRate) {
|
|
191
189
|
this.assertDoesThrowInvalidParameters({ sampleRate }, ['sampleRate']);
|
|
192
190
|
}
|
|
193
|
-
static
|
|
194
|
-
this.assertDoesThrowInvalidParameters({
|
|
191
|
+
static assertThrowsInvalidChannelNames(count) {
|
|
192
|
+
this.assertDoesThrowInvalidParameters({ channelNames: new Array(count).fill((0, test_utils_1.generateId)()) }, ['channelNames']);
|
|
195
193
|
}
|
|
196
194
|
static assertDoesThrowInvalidParameters(options, parameters) {
|
|
197
195
|
const err = test_utils_1.assert.doesThrow(() => this.Outlet(options));
|
|
@@ -206,13 +204,10 @@ class LslOutletTest extends test_utils_1.default {
|
|
|
206
204
|
exports.default = LslOutletTest;
|
|
207
205
|
__decorate([
|
|
208
206
|
(0, test_utils_1.test)()
|
|
209
|
-
], LslOutletTest, "
|
|
210
|
-
__decorate([
|
|
211
|
-
(0, test_utils_1.test)()
|
|
212
|
-
], LslOutletTest, "canCreateWithRequiredParams", null);
|
|
207
|
+
], LslOutletTest, "throwsWhenMissingRequiredParams", null);
|
|
213
208
|
__decorate([
|
|
214
209
|
(0, test_utils_1.test)()
|
|
215
|
-
], LslOutletTest, "
|
|
210
|
+
], LslOutletTest, "throwsWithInvalidChannelNames", null);
|
|
216
211
|
__decorate([
|
|
217
212
|
(0, test_utils_1.test)()
|
|
218
213
|
], LslOutletTest, "throwsWithInvalidSampleRate", null);
|
|
@@ -221,26 +216,26 @@ __decorate([
|
|
|
221
216
|
], LslOutletTest, "throwsWithInvalidChannelFormat", null);
|
|
222
217
|
__decorate([
|
|
223
218
|
(0, test_utils_1.test)()
|
|
224
|
-
], LslOutletTest, "
|
|
219
|
+
], LslOutletTest, "throwsWithInvalidChunkSize", null);
|
|
225
220
|
__decorate([
|
|
226
221
|
(0, test_utils_1.test)()
|
|
227
|
-
], LslOutletTest, "
|
|
222
|
+
], LslOutletTest, "throwsWithInvalidMaxBuffered", null);
|
|
228
223
|
__decorate([
|
|
229
224
|
(0, test_utils_1.test)()
|
|
230
|
-
], LslOutletTest, "
|
|
225
|
+
], LslOutletTest, "supportsAllKnownChannelFormats", null);
|
|
231
226
|
__decorate([
|
|
232
|
-
(0, test_utils_1.test)('pushing sample sends to
|
|
233
|
-
(0, test_utils_1.test)('pushing sample sends to
|
|
234
|
-
], LslOutletTest, "
|
|
227
|
+
(0, test_utils_1.test)('pushing [1, 2] sample sends to LSL', [1, 2]),
|
|
228
|
+
(0, test_utils_1.test)('pushing [1] sample sends to LSL', [1])
|
|
229
|
+
], LslOutletTest, "canPushSampleToLsl", null);
|
|
235
230
|
__decorate([
|
|
236
231
|
(0, test_utils_1.test)()
|
|
237
|
-
], LslOutletTest, "
|
|
232
|
+
], LslOutletTest, "constructionCreatesStreamInfo", null);
|
|
238
233
|
__decorate([
|
|
239
234
|
(0, test_utils_1.test)()
|
|
240
|
-
], LslOutletTest, "
|
|
235
|
+
], LslOutletTest, "canOverrideClassInstantiatedInFactory", null);
|
|
241
236
|
__decorate([
|
|
242
|
-
(0, test_utils_1.test)('can add one label', [(0, test_utils_1.generateId)()]),
|
|
243
|
-
(0, test_utils_1.test)('can add two labels', [(0, test_utils_1.generateId)(), (0, test_utils_1.generateId)()])
|
|
237
|
+
(0, test_utils_1.test)('can add one label to channels', [(0, test_utils_1.generateId)()]),
|
|
238
|
+
(0, test_utils_1.test)('can add two labels to channels', [(0, test_utils_1.generateId)(), (0, test_utils_1.generateId)()])
|
|
244
239
|
], LslOutletTest, "appendsChannelsBasedOnCount", null);
|
|
245
240
|
__decorate([
|
|
246
241
|
(0, test_utils_1.test)()
|
|
@@ -253,22 +248,18 @@ class SpyLiblsl {
|
|
|
253
248
|
}
|
|
254
249
|
createStreamInfo(options) {
|
|
255
250
|
this.createStreamInfoHitCount++;
|
|
256
|
-
this.
|
|
251
|
+
this.lastCreateStreamInfoOptions = options;
|
|
257
252
|
return this.streamInfo;
|
|
258
253
|
}
|
|
259
|
-
appendChannelsToStreamInfo(
|
|
260
|
-
this.
|
|
261
|
-
info,
|
|
262
|
-
channels,
|
|
263
|
-
};
|
|
254
|
+
appendChannelsToStreamInfo(options) {
|
|
255
|
+
this.lastAppendChannelsToStreamInfoOptions = options;
|
|
264
256
|
}
|
|
265
257
|
createOutlet(options) {
|
|
266
|
-
this.
|
|
258
|
+
this.lastCreateOutletOptions = options;
|
|
267
259
|
return this.outlet;
|
|
268
260
|
}
|
|
269
|
-
pushSample(
|
|
270
|
-
this.
|
|
271
|
-
this.lastPushedSample = sample;
|
|
261
|
+
pushSample(options) {
|
|
262
|
+
this.lastPushSampleOptions = options;
|
|
272
263
|
}
|
|
273
264
|
}
|
|
274
265
|
class CheckingOutlet extends LslOutlet_1.default {
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"LslOutlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/behavioral/LslOutlet.test.ts"],"names":[],"mappings":"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"}
|