@neurodevs/node-lsl 7.1.3 → 7.1.5
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/__tests__/behavioral/LslOutlet.test.js +8 -8
- package/build/__tests__/behavioral/LslOutlet.test.js.map +1 -1
- package/build/__tests__/behavioral/TimeMarkerOutlet.test.js +2 -2
- package/build/__tests__/behavioral/TimeMarkerOutlet.test.js.map +1 -1
- package/build/__tests__/implementation/Liblsl.test.d.ts +8 -5
- package/build/__tests__/implementation/Liblsl.test.js +92 -48
- package/build/__tests__/implementation/Liblsl.test.js.map +1 -1
- package/build/implementations/Liblsl.d.ts +8 -7
- package/build/implementations/Liblsl.js +65 -22
- package/build/implementations/Liblsl.js.map +1 -1
- package/build/implementations/LslOutlet.js +2 -2
- package/build/implementations/LslOutlet.js.map +1 -1
- package/build/nodeLsl.types.d.ts +9 -14
- package/build/nodeLsl.types.js +0 -11
- package/build/nodeLsl.types.js.map +1 -1
- package/build/testDoubles/FakeLiblsl.d.ts +6 -6
- package/build/testDoubles/FakeLiblsl.js +6 -6
- package/build/testDoubles/FakeLiblsl.js.map +1 -1
- package/build/testDoubles/MockTimeMarkerOutlet.js.map +1 -1
- package/build/validations.js +2 -0
- package/build/validations.js.map +1 -1
- package/package.json +8 -5
- package/src/__tests__/behavioral/LslOutlet.test.ts +15 -8
- package/src/__tests__/behavioral/TimeMarkerOutlet.test.ts +2 -2
- package/src/__tests__/implementation/Liblsl.test.ts +100 -59
- package/src/assertions.ts +5 -5
- package/src/implementations/Liblsl.ts +78 -39
- package/src/implementations/LslOutlet.ts +8 -8
- package/src/nodeLsl.types.ts +13 -14
- package/src/testDoubles/FakeLiblsl.ts +12 -12
- package/src/testDoubles/MockTimeMarkerOutlet.ts +4 -4
- package/src/validations.ts +5 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Liblsl.js","sourceRoot":"","sources":["../../src/implementations/Liblsl.ts"],"names":[],"mappings":";;;;;AAAA,+CAAkD;AAClD,
|
|
1
|
+
{"version":3,"file":"Liblsl.js","sourceRoot":"","sources":["../../src/implementations/Liblsl.ts"],"names":[],"mappings":"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"}
|
|
@@ -78,8 +78,8 @@ class LslOutletImpl {
|
|
|
78
78
|
getPushMethod() {
|
|
79
79
|
const channelFormat = this.options.channelFormat;
|
|
80
80
|
const methodMap = {
|
|
81
|
-
float32: '
|
|
82
|
-
string: '
|
|
81
|
+
float32: 'pushSampleFloatTimestamp',
|
|
82
|
+
string: 'pushSampleStringTimestamp',
|
|
83
83
|
};
|
|
84
84
|
if (!(channelFormat in methodMap)) {
|
|
85
85
|
throw new Error(`This method currently does not support the ${channelFormat} type! Please implement it.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LslOutlet.js","sourceRoot":"","sources":["../../src/implementations/LslOutlet.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAAkD;AAClD,8CAMsB;AACtB,sCAA+C;AAU/C,sDAAiC;AAEjC,MAAqB,aAAa;IAO1B,MAAM,CAAC,MAAM,CAAC,OAAyB;;QAC7C,OAAO,IAAI,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAA;IACzC,CAAC;IAED,YAAsB,OAAyB;QAC9C,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,IAAA,sBAAa,EAAC,OAAO,EAAE;YAC5D,MAAM;YACN,MAAM;YACN,cAAc;YACd,YAAY;YACZ,eAAe;YACf,UAAU;YACV,cAAc;YACd,MAAM;YACN,WAAW;YACX,aAAa;SACb,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QAEtB,MAAM,KAAiE,IAAI;aACzE,OAAc,EADV,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,OAC5B,EADiC,iBAAiB,cAA5D,4CAA8D,CACpD,CAAA;QAEhB,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAA;QAExC,IAAA,oCAAuB,EAAC,YAAY,CAAC,CAAA;QACrC,IAAA,kCAAqB,EAAC,UAAU,CAAC,CAAA;QACjC,IAAA,qCAAwB,EAAC,aAAa,CAAC,CAAA;QACvC,IAAA,iCAAoB,EAAC,SAAS,CAAC,CAAA;QAC/B,IAAA,mCAAsB,EAAC,WAAW,CAAC,CAAA;QAEnC,OAAO,iBAAiB,CAAC,YAAY,CAAA;QACrC,OAAO,iBAAiB,CAAC,IAAI,CAAA;QAE7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,iCACvC,iBAAiB,KACpB,YAAY,EACZ,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,IACrD,CAAA;QAEF,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;YACnC,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC;gBAC9C,KAAK;gBACL,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;aACvB,CAAC,CAAC;SACH,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACnC,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;YACjC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;SACrC,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5D,CAAC;IAEM,OAAO;QACb,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;IAChD,CAAC;IAEM,UAAU,CAAC,MAAiB;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAA;QAEvC,IAAI,CAAC,gBAAgB,CAAC;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM;YACN,SAAS;SACT,CAAC,CAAA;IACH,CAAC;IAEO,aAAa;QACpB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAA;QAEhD,MAAM,SAAS,GAAiC;YAC/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"LslOutlet.js","sourceRoot":"","sources":["../../src/implementations/LslOutlet.ts"],"names":[],"mappings":"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"}
|
package/build/nodeLsl.types.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import ref from 'ref-napi';
|
|
1
|
+
import { FFIParams } from 'ffi-rs';
|
|
3
2
|
import { CHANNEL_FORMATS } from './consts';
|
|
4
3
|
export interface LslOutlet {
|
|
5
4
|
destroy(): void;
|
|
@@ -32,8 +31,8 @@ export interface Liblsl {
|
|
|
32
31
|
appendChannelsToStreamInfo(options: AppendChannelsToStreamInfoOptions): void;
|
|
33
32
|
createOutlet(options: CreateOutletOptions): BoundOutlet;
|
|
34
33
|
destroyOutlet(options: DestroyOutletOptions): void;
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
pushSampleFloatTimestamp(options: PushSampleFloatTimestampOptions): void;
|
|
35
|
+
pushSampleStringTimestamp(options: PushSampleStringTimestampOptions): void;
|
|
37
36
|
localClock(): number;
|
|
38
37
|
}
|
|
39
38
|
export interface CreateStreamInfoOptions {
|
|
@@ -58,12 +57,12 @@ export interface CreateOutletOptions {
|
|
|
58
57
|
export interface DestroyOutletOptions {
|
|
59
58
|
outlet: BoundOutlet;
|
|
60
59
|
}
|
|
61
|
-
export interface
|
|
60
|
+
export interface PushSampleFloatTimestampOptions {
|
|
62
61
|
outlet: BoundOutlet;
|
|
63
62
|
sample: number[];
|
|
64
63
|
timestamp: number;
|
|
65
64
|
}
|
|
66
|
-
export interface
|
|
65
|
+
export interface PushSampleStringTimestampOptions {
|
|
67
66
|
outlet: BoundOutlet;
|
|
68
67
|
sample: string[];
|
|
69
68
|
timestamp: number;
|
|
@@ -81,20 +80,16 @@ export interface LiblslBindings {
|
|
|
81
80
|
lsl_push_sample_ft(outlet: BoundOutlet, sample: LslSample, timestamp: number): void;
|
|
82
81
|
lsl_push_sample_strt(outlet: BoundOutlet, sample: LslSample, timestamp: number): void;
|
|
83
82
|
lsl_local_clock(): number;
|
|
84
|
-
lsl_get_desc(info: BoundStreamInfo):
|
|
85
|
-
lsl_append_child(desc:
|
|
83
|
+
lsl_get_desc(info: BoundStreamInfo): BoundDescription;
|
|
84
|
+
lsl_append_child(desc: BoundDescription, name: string): BoundChild;
|
|
86
85
|
lsl_append_child_value(child: BoundChild, name: string, value: string): void;
|
|
87
86
|
}
|
|
88
87
|
export interface BoundStreamInfo {
|
|
89
88
|
}
|
|
90
89
|
export interface BoundOutlet {
|
|
91
90
|
}
|
|
92
|
-
export interface
|
|
91
|
+
export interface BoundDescription {
|
|
93
92
|
}
|
|
94
93
|
export interface BoundChild {
|
|
95
94
|
}
|
|
96
|
-
export
|
|
97
|
-
export declare const outletType: ref.Type<ref.Pointer<void>>;
|
|
98
|
-
export declare const FloatArray: ArrayType<unknown>;
|
|
99
|
-
export declare const StringArray: ArrayType<unknown>;
|
|
100
|
-
export declare const xmlPtr: ref.Type<ref.Pointer<void>>;
|
|
95
|
+
export type FfiRsDefineOptions = Record<string, Omit<FFIParams<any>, 'funcName' | 'paramsValue'>>;
|
package/build/nodeLsl.types.js
CHANGED
|
@@ -1,14 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.xmlPtr = exports.StringArray = exports.FloatArray = exports.outletType = exports.streamInfo = void 0;
|
|
7
|
-
const ref_array_napi_1 = __importDefault(require("ref-array-napi"));
|
|
8
|
-
const ref_napi_1 = __importDefault(require("ref-napi"));
|
|
9
|
-
exports.streamInfo = ref_napi_1.default.refType(ref_napi_1.default.types.void);
|
|
10
|
-
exports.outletType = ref_napi_1.default.refType(ref_napi_1.default.types.void);
|
|
11
|
-
exports.FloatArray = (0, ref_array_napi_1.default)(ref_napi_1.default.types.float);
|
|
12
|
-
exports.StringArray = (0, ref_array_napi_1.default)(ref_napi_1.default.types.CString);
|
|
13
|
-
exports.xmlPtr = ref_napi_1.default.refType(ref_napi_1.default.types.void);
|
|
14
3
|
//# sourceMappingURL=nodeLsl.types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeLsl.types.js","sourceRoot":"","sources":["../src/nodeLsl.types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"nodeLsl.types.js","sourceRoot":"","sources":["../src/nodeLsl.types.ts"],"names":[],"mappings":""}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { BoundOutlet, BoundStreamInfo, CreateStreamInfoOptions, AppendChannelsToStreamInfoOptions, CreateOutletOptions,
|
|
1
|
+
import { BoundOutlet, BoundStreamInfo, CreateStreamInfoOptions, AppendChannelsToStreamInfoOptions, CreateOutletOptions, PushSampleFloatTimestampOptions, PushSampleStringTimestampOptions, Liblsl } from '../nodeLsl.types';
|
|
2
2
|
export default class FakeLiblsl implements Liblsl {
|
|
3
3
|
outlet: BoundOutlet;
|
|
4
4
|
streamInfo: BoundStreamInfo;
|
|
5
5
|
lastCreateStreamInfoOptions?: CreateStreamInfoOptions;
|
|
6
6
|
lastAppendChannelsToStreamInfoOptions?: AppendChannelsToStreamInfoOptions;
|
|
7
7
|
lastCreateOutletOptions?: CreateOutletOptions;
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
lastPushSampleFloatTimestampOptions?: PushSampleFloatTimestampOptions;
|
|
9
|
+
lastPushSampleStringTimestampOptions?: PushSampleStringTimestampOptions;
|
|
10
10
|
createStreamInfoHitCount: number;
|
|
11
11
|
destroyOutletHitCount: number;
|
|
12
12
|
localClockHitCount: number;
|
|
13
|
-
|
|
13
|
+
pushSampleStringTimestampHitCount: number;
|
|
14
14
|
createStreamInfo(options: CreateStreamInfoOptions): BoundStreamInfo;
|
|
15
15
|
appendChannelsToStreamInfo(options: AppendChannelsToStreamInfoOptions): void;
|
|
16
16
|
createOutlet(options: CreateOutletOptions): BoundOutlet;
|
|
17
17
|
destroyOutlet(): void;
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
pushSampleFloatTimestamp(options: PushSampleFloatTimestampOptions): void;
|
|
19
|
+
pushSampleStringTimestamp(options: PushSampleStringTimestampOptions): void;
|
|
20
20
|
localClock(): number;
|
|
21
21
|
}
|
|
@@ -7,7 +7,7 @@ class FakeLiblsl {
|
|
|
7
7
|
this.createStreamInfoHitCount = 0;
|
|
8
8
|
this.destroyOutletHitCount = 0;
|
|
9
9
|
this.localClockHitCount = 0;
|
|
10
|
-
this.
|
|
10
|
+
this.pushSampleStringTimestampHitCount = 0;
|
|
11
11
|
}
|
|
12
12
|
createStreamInfo(options) {
|
|
13
13
|
this.createStreamInfoHitCount++;
|
|
@@ -24,12 +24,12 @@ class FakeLiblsl {
|
|
|
24
24
|
destroyOutlet() {
|
|
25
25
|
this.destroyOutletHitCount++;
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
this.
|
|
27
|
+
pushSampleFloatTimestamp(options) {
|
|
28
|
+
this.lastPushSampleFloatTimestampOptions = options;
|
|
29
29
|
}
|
|
30
|
-
|
|
31
|
-
this.
|
|
32
|
-
this.
|
|
30
|
+
pushSampleStringTimestamp(options) {
|
|
31
|
+
this.lastPushSampleStringTimestampOptions = options;
|
|
32
|
+
this.pushSampleStringTimestampHitCount++;
|
|
33
33
|
}
|
|
34
34
|
localClock() {
|
|
35
35
|
this.localClockHitCount++;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FakeLiblsl.js","sourceRoot":"","sources":["../../src/testDoubles/FakeLiblsl.ts"],"names":[],"mappings":";;AAWA,MAAqB,UAAU;IAA/B;QACQ,WAAM,GAAgB,EAAiB,CAAA;QACvC,eAAU,GAAoB,EAAqB,CAAA;QAQnD,6BAAwB,GAAG,CAAC,CAAA;QAC5B,0BAAqB,GAAG,CAAC,CAAA;QACzB,uBAAkB,GAAG,CAAC,CAAA;QACtB,
|
|
1
|
+
{"version":3,"file":"FakeLiblsl.js","sourceRoot":"","sources":["../../src/testDoubles/FakeLiblsl.ts"],"names":[],"mappings":";;AAWA,MAAqB,UAAU;IAA/B;QACQ,WAAM,GAAgB,EAAiB,CAAA;QACvC,eAAU,GAAoB,EAAqB,CAAA;QAQnD,6BAAwB,GAAG,CAAC,CAAA;QAC5B,0BAAqB,GAAG,CAAC,CAAA;QACzB,uBAAkB,GAAG,CAAC,CAAA;QACtB,sCAAiC,GAAG,CAAC,CAAA;IAoC7C,CAAC;IAlCO,gBAAgB,CAAC,OAAgC;QACvD,IAAI,CAAC,wBAAwB,EAAE,CAAA;QAC/B,IAAI,CAAC,2BAA2B,GAAG,OAAO,CAAA;QAC1C,OAAO,IAAI,CAAC,UAAU,CAAA;IACvB,CAAC;IAEM,0BAA0B,CAChC,OAA0C;QAE1C,IAAI,CAAC,qCAAqC,GAAG,OAAO,CAAA;IACrD,CAAC;IAEM,YAAY,CAAC,OAA4B;QAC/C,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAA;QACtC,OAAO,IAAI,CAAC,MAAM,CAAA;IACnB,CAAC;IAEM,aAAa;QACnB,IAAI,CAAC,qBAAqB,EAAE,CAAA;IAC7B,CAAC;IAEM,wBAAwB,CAAC,OAAwC;QACvE,IAAI,CAAC,mCAAmC,GAAG,OAAO,CAAA;IACnD,CAAC;IAEM,yBAAyB,CAAC,OAAyC;QACzE,IAAI,CAAC,oCAAoC,GAAG,OAAO,CAAA;QACnD,IAAI,CAAC,iCAAiC,EAAE,CAAA;IACzC,CAAC;IAEM,UAAU;QAChB,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACzB,OAAO,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;IAC5B,CAAC;CACD;AAjDD,6BAiDC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MockTimeMarkerOutlet.js","sourceRoot":"","sources":["../../src/testDoubles/MockTimeMarkerOutlet.ts"],"names":[],"mappings":";;AAAA,uDAA+C;AAG/C,MAAqB,oBAAoB;IAAzC;QACS,mBAAc,GAAG,KAAK,CAAA;QAEtB,mBAAc,GAAG,KAAK,CAAA;IAsD/B,CAAC;IAnDO,IAAI,
|
|
1
|
+
{"version":3,"file":"MockTimeMarkerOutlet.js","sourceRoot":"","sources":["../../src/testDoubles/MockTimeMarkerOutlet.ts"],"names":[],"mappings":";;AAAA,uDAA+C;AAG/C,MAAqB,oBAAoB;IAAzC;QACS,mBAAc,GAAG,KAAK,CAAA;QAEtB,mBAAc,GAAG,KAAK,CAAA;IAsD/B,CAAC;IAnDO,IAAI,KAAI,CAAC;IACT,OAAO,KAAI,CAAC;IAEZ,UAAU,CAAC,MAAiB;;QAClC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;YAC1B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACxB,CAAC;QACD,MAAA,IAAI,CAAC,aAAa,0CAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,OAAyB;QACjD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC1B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAA;IAC7B,CAAC;IAEM,oBAAoB,CAAC,OAAqB;QAChD,mBAAM,CAAC,MAAM,CACZ,IAAI,CAAC,cAAc,EACnB,0EAA0E,CAC1E,CAAA;QAED,IAAI,OAAO,EAAE,CAAC;YACb,mBAAM,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QAChD,CAAC;IACF,CAAC;IAEM,uBAAuB;QAC7B,mBAAM,CAAC,OAAO,CACb,IAAI,CAAC,cAAc,EACnB,2EAA2E,CAC3E,CAAA;IACF,CAAC;IAEM,oBAAoB,CAAC,OAA0B;QACrD,mBAAM,CAAC,MAAM,CACZ,IAAI,CAAC,cAAc,EACnB,2EAA2E,CAC3E,CAAA;QAED,IAAI,OAAO,EAAE,CAAC;YACb,mBAAM,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QAChD,CAAC;IACF,CAAC;IAEM,uBAAuB;QAC7B,mBAAM,CAAC,OAAO,CACb,IAAI,CAAC,cAAc,EACnB,4EAA4E,CAC5E,CAAA;IACF,CAAC;CACD;AAzDD,uCAyDC"}
|
package/build/validations.js
CHANGED
|
@@ -10,10 +10,12 @@ function isGreaterThanOrEqualToZero(value) {
|
|
|
10
10
|
}
|
|
11
11
|
exports.isGreaterThanOrEqualToZero = isGreaterThanOrEqualToZero;
|
|
12
12
|
function isPositiveInteger(value) {
|
|
13
|
+
//@ts-ignore
|
|
13
14
|
return Number.isInteger(value) && value > 0;
|
|
14
15
|
}
|
|
15
16
|
exports.isPositiveInteger = isPositiveInteger;
|
|
16
17
|
function isPositiveIntegerOrZero(value) {
|
|
18
|
+
//@ts-ignore
|
|
17
19
|
return Number.isInteger(value) && value >= 0;
|
|
18
20
|
}
|
|
19
21
|
exports.isPositiveIntegerOrZero = isPositiveIntegerOrZero;
|
package/build/validations.js.map
CHANGED
|
@@ -1 +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;
|
|
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,YAAY;IACZ,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAA;AAC5C,CAAC;AAHD,8CAGC;AAED,SAAgB,uBAAuB,CAAC,KAAa;IACpD,YAAY;IACZ,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;AAC7C,CAAC;AAHD,0DAGC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neurodevs/node-lsl",
|
|
3
|
-
"version": "7.1.
|
|
3
|
+
"version": "7.1.5",
|
|
4
4
|
"main": "build/index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -27,12 +27,12 @@
|
|
|
27
27
|
"watch.build.dev": "tsc-watch --sourceMap --onCompilationComplete 'yarn post.watch.build'",
|
|
28
28
|
"watch.lint": "concurrently 'yarn lint' \"chokidar 'src/**/*' -c 'yarn lint.tsc'\"",
|
|
29
29
|
"watch.rebuild": "yarn clean.all && yarn && yarn watch.build.dev",
|
|
30
|
-
"watch.tsc": "tsc -w"
|
|
30
|
+
"watch.tsc": "tsc -w",
|
|
31
|
+
"test.rs": "node build/test.js"
|
|
31
32
|
},
|
|
32
33
|
"devDependencies": {
|
|
33
34
|
"@sprucelabs/jest-json-reporter": "^7.0.197",
|
|
34
35
|
"@sprucelabs/resolve-path-aliases": "^1.1.298",
|
|
35
|
-
"@sprucelabs/spruce-test-fixtures": "^61.1.13",
|
|
36
36
|
"@sprucelabs/test": "^8.0.49",
|
|
37
37
|
"@sprucelabs/test-utils": "^4.0.141",
|
|
38
38
|
"@types/ffi-napi": "^4.0.10",
|
|
@@ -50,7 +50,10 @@
|
|
|
50
50
|
},
|
|
51
51
|
"description": "Lab Streaming Layer (LSL) bindings for Node",
|
|
52
52
|
"skill": {
|
|
53
|
-
"namespace": "node-lsl"
|
|
53
|
+
"namespace": "node-lsl",
|
|
54
|
+
"upgradeIgnoreList": [
|
|
55
|
+
"@sprucelabs/spruce-test-fixtures"
|
|
56
|
+
]
|
|
54
57
|
},
|
|
55
58
|
"jest": {
|
|
56
59
|
"testRunner": "jest-circus/runner",
|
|
@@ -75,7 +78,7 @@
|
|
|
75
78
|
"@sprucelabs/schema": "^29.4.43",
|
|
76
79
|
"@sprucelabs/spruce-core-schemas": "^39.0.277",
|
|
77
80
|
"@sprucelabs/spruce-skill-utils": "^30.4.10",
|
|
78
|
-
"ffi-
|
|
81
|
+
"ffi-rs": "^1.0.62",
|
|
79
82
|
"node-gyp": "^10.1.0",
|
|
80
83
|
"ref-array-napi": "^1.2.2",
|
|
81
84
|
"ref-napi": "^3.0.3"
|
|
@@ -112,16 +112,21 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
112
112
|
outlet.pushSample(sample)
|
|
113
113
|
|
|
114
114
|
assert.isEqual(
|
|
115
|
-
this.fakeLiblsl.
|
|
115
|
+
this.fakeLiblsl.lastPushSampleFloatTimestampOptions?.outlet,
|
|
116
116
|
this.fakeLiblsl.outlet
|
|
117
117
|
)
|
|
118
|
-
assert.isEqualDeep(
|
|
118
|
+
assert.isEqualDeep(
|
|
119
|
+
this.fakeLiblsl.lastPushSampleFloatTimestampOptions?.sample,
|
|
120
|
+
sample
|
|
121
|
+
)
|
|
119
122
|
assert.isEqualDeep(this.fakeLiblsl.lastCreateOutletOptions, {
|
|
120
123
|
info: this.fakeLiblsl.streamInfo,
|
|
121
124
|
chunkSize: this.randomOutletOptions.chunkSize,
|
|
122
125
|
maxBuffered: this.randomOutletOptions.maxBuffered,
|
|
123
126
|
})
|
|
124
|
-
assert.isNumber(
|
|
127
|
+
assert.isNumber(
|
|
128
|
+
this.fakeLiblsl.lastPushSampleFloatTimestampOptions?.timestamp
|
|
129
|
+
)
|
|
125
130
|
}
|
|
126
131
|
|
|
127
132
|
@test()
|
|
@@ -132,14 +137,16 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
132
137
|
outlet.pushSample(sample)
|
|
133
138
|
|
|
134
139
|
assert.isEqual(
|
|
135
|
-
this.fakeLiblsl.
|
|
140
|
+
this.fakeLiblsl.lastPushSampleStringTimestampOptions?.outlet,
|
|
136
141
|
this.fakeLiblsl.outlet
|
|
137
142
|
)
|
|
138
143
|
assert.isEqualDeep(
|
|
139
|
-
this.fakeLiblsl.
|
|
144
|
+
this.fakeLiblsl.lastPushSampleStringTimestampOptions?.sample,
|
|
140
145
|
sample
|
|
141
146
|
)
|
|
142
|
-
assert.isNumber(
|
|
147
|
+
assert.isNumber(
|
|
148
|
+
this.fakeLiblsl.lastPushSampleStringTimestampOptions?.timestamp
|
|
149
|
+
)
|
|
143
150
|
}
|
|
144
151
|
|
|
145
152
|
@test()
|
|
@@ -148,12 +155,12 @@ export default class LslOutletTest extends AbstractSpruceTest {
|
|
|
148
155
|
const sample = [generateId()]
|
|
149
156
|
|
|
150
157
|
outlet.pushSample(sample)
|
|
151
|
-
const t1 = this.fakeLiblsl.
|
|
158
|
+
const t1 = this.fakeLiblsl.lastPushSampleStringTimestampOptions?.timestamp
|
|
152
159
|
|
|
153
160
|
await this.wait(10)
|
|
154
161
|
|
|
155
162
|
outlet.pushSample(sample)
|
|
156
|
-
const t2 = this.fakeLiblsl.
|
|
163
|
+
const t2 = this.fakeLiblsl.lastPushSampleStringTimestampOptions?.timestamp
|
|
157
164
|
|
|
158
165
|
assert.isNotEqual(t1, t2)
|
|
159
166
|
assert.isEqual(this.fakeLiblsl.localClockHitCount, 2)
|
|
@@ -51,7 +51,7 @@ export default class TimeMarkerOutletTest extends AbstractSpruceTest {
|
|
|
51
51
|
const markers = [this.generateDurationMarkerValues()]
|
|
52
52
|
await this.outlet.pushMarkers(markers)
|
|
53
53
|
|
|
54
|
-
assert.isEqual(this.fakeLiblsl.
|
|
54
|
+
assert.isEqual(this.fakeLiblsl.pushSampleStringTimestampHitCount, 1)
|
|
55
55
|
assert.isEqual(this.outlet.totalWaitTimeMs, markers[0].durationMs)
|
|
56
56
|
}
|
|
57
57
|
|
|
@@ -59,7 +59,7 @@ export default class TimeMarkerOutletTest extends AbstractSpruceTest {
|
|
|
59
59
|
protected static async pushingTwoMarkersIncrementsHitCountAndWaitTimeTwice() {
|
|
60
60
|
const markers = await this.pushTotalMarkers(2)
|
|
61
61
|
|
|
62
|
-
assert.isEqual(this.fakeLiblsl.
|
|
62
|
+
assert.isEqual(this.fakeLiblsl.pushSampleStringTimestampHitCount, 2)
|
|
63
63
|
assert.isEqual(
|
|
64
64
|
this.outlet.totalWaitTimeMs,
|
|
65
65
|
markers[0].durationMs + markers[1].durationMs
|
|
@@ -5,20 +5,17 @@ import AbstractSpruceTest, {
|
|
|
5
5
|
errorAssert,
|
|
6
6
|
generateId,
|
|
7
7
|
} from '@sprucelabs/test-utils'
|
|
8
|
+
import { DataType, OpenParams } from 'ffi-rs'
|
|
8
9
|
import LiblslImpl from '../../implementations/Liblsl'
|
|
9
10
|
import {
|
|
10
11
|
BoundChild,
|
|
11
|
-
|
|
12
|
+
BoundDescription,
|
|
12
13
|
BoundOutlet,
|
|
13
14
|
BoundStreamInfo,
|
|
14
|
-
|
|
15
|
+
FfiRsDefineOptions,
|
|
15
16
|
Liblsl,
|
|
16
17
|
LiblslBindings,
|
|
17
18
|
LslChannel,
|
|
18
|
-
StringArray,
|
|
19
|
-
outletType,
|
|
20
|
-
streamInfo,
|
|
21
|
-
xmlPtr,
|
|
22
19
|
} from '../../nodeLsl.types'
|
|
23
20
|
import FakeLiblsl from '../../testDoubles/FakeLiblsl'
|
|
24
21
|
|
|
@@ -29,21 +26,23 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
29
26
|
private static fakeBindings: LiblslBindings
|
|
30
27
|
private static fakeStreamInfo: BoundStreamInfo
|
|
31
28
|
private static fakeOutlet: BoundOutlet
|
|
32
|
-
private static fakeDesc:
|
|
29
|
+
private static fakeDesc: BoundDescription
|
|
33
30
|
private static fakeChildNamedChannels: BoundChild
|
|
34
31
|
private static createStreamInfoParams?: any[]
|
|
35
32
|
private static appendChildParams: any[] = []
|
|
36
33
|
private static createOutletParams?: any[]
|
|
37
34
|
private static destroyOutletParams?: any[]
|
|
38
|
-
private static
|
|
39
|
-
private static
|
|
35
|
+
private static pushSampleFloatTimestampParams?: any[]
|
|
36
|
+
private static pushSampleStringTimestampParams?: any[]
|
|
40
37
|
private static appendChildValueParams: any[]
|
|
41
38
|
private static shouldThrowWhenCreatingBindings: boolean
|
|
42
39
|
private static getDescriptionParams?: [BoundStreamInfo]
|
|
43
40
|
private static fakeChildNamedChannel: BoundChild
|
|
44
41
|
private static appendChildHitCount: number
|
|
42
|
+
private static ffiRsOpenOptions?: OpenParams
|
|
43
|
+
private static ffiRsDefineOptions: FfiRsDefineOptions
|
|
45
44
|
|
|
46
|
-
protected static async beforeEach()
|
|
45
|
+
protected static async beforeEach() {
|
|
47
46
|
await super.beforeEach()
|
|
48
47
|
|
|
49
48
|
delete this.libraryPath
|
|
@@ -51,7 +50,7 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
51
50
|
delete this.createStreamInfoParams
|
|
52
51
|
delete this.createOutletParams
|
|
53
52
|
delete this.destroyOutletParams
|
|
54
|
-
delete this.
|
|
53
|
+
delete this.pushSampleFloatTimestampParams
|
|
55
54
|
delete this.getDescriptionParams
|
|
56
55
|
this.appendChildParams = []
|
|
57
56
|
this.appendChildValueParams = []
|
|
@@ -69,16 +68,17 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
69
68
|
|
|
70
69
|
this.appendChildHitCount = 0
|
|
71
70
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
71
|
+
delete this.ffiRsOpenOptions
|
|
72
|
+
LiblslImpl.ffiRsOpen = (options) => {
|
|
73
|
+
this.ffiRsOpenOptions = options
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
LiblslImpl.ffiRsDefine = (options) => {
|
|
77
|
+
this.ffiRsDefineOptions = options
|
|
78
|
+
if (this.shouldThrowWhenCreatingBindings) {
|
|
79
|
+
throw new Error('Failed to create bindings!')
|
|
80
|
+
}
|
|
81
|
+
return this.fakeBindings as any
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
LiblslImpl.resetInstance()
|
|
@@ -103,6 +103,14 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
103
103
|
})
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
+
@test()
|
|
107
|
+
protected static async callsOpenOnFfRs() {
|
|
108
|
+
assert.isEqualDeep(this.ffiRsOpenOptions, {
|
|
109
|
+
library: 'lsl',
|
|
110
|
+
path: process.env.LIBLSL_PATH,
|
|
111
|
+
})
|
|
112
|
+
}
|
|
113
|
+
|
|
106
114
|
@test()
|
|
107
115
|
protected static throwsWhenCreateStreamInfoIsMissingRequiredParams() {
|
|
108
116
|
//@ts-ignore
|
|
@@ -138,18 +146,18 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
138
146
|
}
|
|
139
147
|
|
|
140
148
|
@test()
|
|
141
|
-
protected static async
|
|
149
|
+
protected static async throwsWhenPushSampleFloatTimestampIsMissingRequiredParams() {
|
|
142
150
|
//@ts-ignore
|
|
143
|
-
const err = assert.doesThrow(() => this.lsl.
|
|
151
|
+
const err = assert.doesThrow(() => this.lsl.pushSampleFloatTimestamp())
|
|
144
152
|
errorAssert.assertError(err, 'MISSING_PARAMETERS', {
|
|
145
153
|
parameters: ['outlet', 'sample', 'timestamp'],
|
|
146
154
|
})
|
|
147
155
|
}
|
|
148
156
|
|
|
149
157
|
@test()
|
|
150
|
-
protected static async
|
|
158
|
+
protected static async throwsWhenPushSampleStringTimestampIsMissingRequiredParams() {
|
|
151
159
|
//@ts-ignore
|
|
152
|
-
const err = assert.doesThrow(() => this.lsl.
|
|
160
|
+
const err = assert.doesThrow(() => this.lsl.pushSampleFloatTimestamp())
|
|
153
161
|
errorAssert.assertError(err, 'MISSING_PARAMETERS', {
|
|
154
162
|
parameters: ['outlet', 'sample', 'timestamp'],
|
|
155
163
|
})
|
|
@@ -174,28 +182,61 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
174
182
|
}
|
|
175
183
|
|
|
176
184
|
@test()
|
|
177
|
-
protected static async
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
185
|
+
protected static async createsExpectedBindingsWithFfiRs() {
|
|
186
|
+
assert.isEqualDeep(this.ffiRsDefineOptions, {
|
|
187
|
+
lsl_create_streaminfo: {
|
|
188
|
+
library: 'lsl',
|
|
189
|
+
retType: DataType.External,
|
|
190
|
+
paramsType: [
|
|
191
|
+
DataType.String,
|
|
192
|
+
DataType.String,
|
|
193
|
+
DataType.I32,
|
|
194
|
+
DataType.Double,
|
|
195
|
+
DataType.I32,
|
|
196
|
+
DataType.String,
|
|
197
|
+
],
|
|
198
|
+
},
|
|
199
|
+
lsl_create_outlet: {
|
|
200
|
+
library: 'lsl',
|
|
201
|
+
retType: DataType.External,
|
|
202
|
+
paramsType: [DataType.External, DataType.I32, DataType.I32],
|
|
203
|
+
},
|
|
204
|
+
lsl_destroy_outlet: {
|
|
205
|
+
library: 'lsl',
|
|
206
|
+
retType: DataType.Void,
|
|
207
|
+
paramsType: [DataType.External],
|
|
208
|
+
},
|
|
209
|
+
lsl_local_clock: {
|
|
210
|
+
library: 'lsl',
|
|
211
|
+
retType: DataType.Double,
|
|
212
|
+
paramsType: [],
|
|
213
|
+
},
|
|
214
|
+
lsl_push_sample_ft: {
|
|
215
|
+
library: 'lsl',
|
|
216
|
+
retType: DataType.Void,
|
|
217
|
+
paramsType: [DataType.External, DataType.DoubleArray, DataType.Double],
|
|
218
|
+
},
|
|
219
|
+
lsl_push_sample_strt: {
|
|
220
|
+
library: 'lsl',
|
|
221
|
+
retType: DataType.Void,
|
|
222
|
+
paramsType: [DataType.External, DataType.StringArray, DataType.Double],
|
|
223
|
+
},
|
|
224
|
+
lsl_get_desc: {
|
|
225
|
+
library: 'lsl',
|
|
226
|
+
retType: DataType.External,
|
|
227
|
+
paramsType: [DataType.External],
|
|
228
|
+
},
|
|
229
|
+
lsl_append_child: {
|
|
230
|
+
library: 'lsl',
|
|
231
|
+
retType: DataType.External,
|
|
232
|
+
paramsType: [DataType.External, DataType.String],
|
|
233
|
+
},
|
|
234
|
+
lsl_append_child_value: {
|
|
235
|
+
library: 'lsl',
|
|
236
|
+
retType: DataType.External,
|
|
237
|
+
paramsType: [DataType.External, DataType.String, DataType.String],
|
|
238
|
+
},
|
|
239
|
+
})
|
|
199
240
|
}
|
|
200
241
|
|
|
201
242
|
@test()
|
|
@@ -223,10 +264,10 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
223
264
|
sample: expected,
|
|
224
265
|
timestamp,
|
|
225
266
|
}
|
|
226
|
-
this.lsl.
|
|
227
|
-
assert.isEqual(this.
|
|
228
|
-
assert.isEqual(this.
|
|
229
|
-
assert.isEqual(this.
|
|
267
|
+
this.lsl.pushSampleFloatTimestamp(options)
|
|
268
|
+
assert.isEqual(this.pushSampleFloatTimestampParams?.[0], this.fakeOutlet)
|
|
269
|
+
assert.isEqual(this.pushSampleFloatTimestampParams?.[1], expected)
|
|
270
|
+
assert.isEqual(this.pushSampleFloatTimestampParams?.[2], timestamp)
|
|
230
271
|
}
|
|
231
272
|
|
|
232
273
|
@test()
|
|
@@ -238,10 +279,10 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
238
279
|
sample: expected,
|
|
239
280
|
timestamp,
|
|
240
281
|
}
|
|
241
|
-
this.lsl.
|
|
242
|
-
assert.isEqual(this.
|
|
243
|
-
assert.isEqualDeep(this.
|
|
244
|
-
assert.isEqual(this.
|
|
282
|
+
this.lsl.pushSampleStringTimestamp(options)
|
|
283
|
+
assert.isEqual(this.pushSampleStringTimestampParams?.[0], this.fakeOutlet)
|
|
284
|
+
assert.isEqualDeep(this.pushSampleStringTimestampParams?.[1], expected)
|
|
285
|
+
assert.isEqual(this.pushSampleStringTimestampParams?.[2], timestamp)
|
|
245
286
|
}
|
|
246
287
|
|
|
247
288
|
@test()
|
|
@@ -330,7 +371,7 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
330
371
|
return { options, outlet }
|
|
331
372
|
}
|
|
332
373
|
|
|
333
|
-
private static generateRandomChannelValues()
|
|
374
|
+
private static generateRandomChannelValues() {
|
|
334
375
|
return {
|
|
335
376
|
label: generateId(),
|
|
336
377
|
type: generateId(),
|
|
@@ -349,7 +390,7 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
349
390
|
}
|
|
350
391
|
}
|
|
351
392
|
|
|
352
|
-
private static FakeBindings()
|
|
393
|
+
private static FakeBindings() {
|
|
353
394
|
return {
|
|
354
395
|
lsl_create_streaminfo: (...params: any[]) => {
|
|
355
396
|
this.createStreamInfoParams = params
|
|
@@ -363,10 +404,10 @@ export default class LiblslTest extends AbstractSpruceTest {
|
|
|
363
404
|
this.destroyOutletParams = params
|
|
364
405
|
},
|
|
365
406
|
lsl_push_sample_ft: (...params: any[]) => {
|
|
366
|
-
this.
|
|
407
|
+
this.pushSampleFloatTimestampParams = params
|
|
367
408
|
},
|
|
368
409
|
lsl_push_sample_strt: (...params: any[]) => {
|
|
369
|
-
this.
|
|
410
|
+
this.pushSampleStringTimestampParams = params
|
|
370
411
|
},
|
|
371
412
|
lsl_local_clock: () => new Date().getTime(),
|
|
372
413
|
lsl_get_desc: (info: BoundStreamInfo) => {
|