@neurodevs/node-lsl 18.1.0 → 20.0.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/build/__tests__/AbstractPackageTest.d.ts +19 -17
- package/build/__tests__/AbstractPackageTest.js +54 -39
- package/build/__tests__/AbstractPackageTest.js.map +1 -1
- package/build/__tests__/impl/BleDeviceController.test.d.ts +6 -1
- package/build/__tests__/impl/BleDeviceController.test.js +44 -15
- package/build/__tests__/impl/BleDeviceController.test.js.map +1 -1
- package/build/__tests__/impl/LslEventMarkerEmitter.test.js +13 -13
- package/build/__tests__/impl/LslEventMarkerEmitter.test.js.map +1 -1
- package/build/__tests__/impl/LslStreamInfo.test.js +2 -2
- package/build/__tests__/impl/LslStreamInfo.test.js.map +1 -1
- package/build/__tests__/impl/LslStreamInlet.test.d.ts +3 -5
- package/build/__tests__/impl/LslStreamInlet.test.js +13 -46
- package/build/__tests__/impl/LslStreamInlet.test.js.map +1 -1
- package/build/__tests__/impl/LslStreamOutlet.test.js +9 -16
- package/build/__tests__/impl/LslStreamOutlet.test.js.map +1 -1
- package/build/__tests__/impl/LslWebSocketBridge.test.js +9 -10
- package/build/__tests__/impl/LslWebSocketBridge.test.js.map +1 -1
- package/build/__tests__/impl/UsbDeviceController.test.d.ts +17 -0
- package/build/__tests__/impl/UsbDeviceController.test.js +81 -0
- package/build/__tests__/impl/UsbDeviceController.test.js.map +1 -0
- package/build/__tests__/impl/WindowedClockRegressor.test.d.ts +19 -0
- package/build/__tests__/impl/WindowedClockRegressor.test.js +172 -0
- package/build/__tests__/impl/WindowedClockRegressor.test.js.map +1 -0
- package/build/assertions.js +1 -1
- package/build/assertions.js.map +1 -1
- package/build/impl/LslEventMarkerEmitter.d.ts +12 -12
- package/build/impl/LslEventMarkerEmitter.js.map +1 -1
- package/build/impl/LslStreamInfo.d.ts +7 -7
- package/build/impl/LslStreamInfo.js.map +1 -1
- package/build/impl/LslStreamInlet.d.ts +63 -20
- package/build/impl/LslStreamInlet.js +221 -64
- package/build/impl/LslStreamInlet.js.map +1 -1
- package/build/impl/LslStreamOutlet.d.ts +16 -14
- package/build/impl/LslStreamOutlet.js +34 -37
- package/build/impl/LslStreamOutlet.js.map +1 -1
- package/build/impl/LslWebSocketBridge.d.ts +10 -10
- package/build/impl/LslWebSocketBridge.js.map +1 -1
- package/build/impl/clocks/WindowedClockRegressor.d.ts +24 -0
- package/build/impl/clocks/WindowedClockRegressor.js +73 -0
- package/build/impl/clocks/WindowedClockRegressor.js.map +1 -0
- package/build/impl/controllers/BleDeviceController.d.ts +3 -1
- package/build/impl/controllers/BleDeviceController.js +9 -1
- package/build/impl/controllers/BleDeviceController.js.map +1 -1
- package/build/impl/controllers/UsbDeviceController.d.ts +23 -0
- package/build/impl/controllers/UsbDeviceController.js +40 -0
- package/build/impl/controllers/UsbDeviceController.js.map +1 -0
- package/build/index.d.ts +32 -20
- package/build/index.js +39 -26
- package/build/index.js.map +1 -1
- package/build/scripts/{runLslEventMarkerEmitter.js → runLslEmitter.js} +5 -4
- package/build/scripts/runLslEmitter.js.map +1 -0
- package/build/scripts/{runLslStreamOutlet.js → runLslOutlet.js} +1 -1
- package/build/scripts/runLslOutlet.js.map +1 -0
- package/build/scripts/runMuse.js +1 -1
- package/build/scripts/runMuse.js.map +1 -1
- package/build/scripts/runUsb.js +14 -0
- package/build/scripts/runUsb.js.map +1 -0
- package/build/testDoubles/BleController/FakeBleController.d.ts +3 -1
- package/build/testDoubles/BleController/FakeBleController.js +5 -0
- package/build/testDoubles/BleController/FakeBleController.js.map +1 -1
- package/build/testDoubles/ClockRegressor/FakeClockRegressor.d.ts +17 -0
- package/build/testDoubles/ClockRegressor/FakeClockRegressor.js +23 -0
- package/build/testDoubles/ClockRegressor/FakeClockRegressor.js.map +1 -0
- package/build/testDoubles/{EventMarkerEmitter/FakeEventMarkerEmitter.d.ts → LslEmitter/FakeLslEmitter.d.ts} +4 -4
- package/build/testDoubles/{EventMarkerEmitter/FakeEventMarkerEmitter.js → LslEmitter/FakeLslEmitter.js} +7 -7
- package/build/testDoubles/LslEmitter/FakeLslEmitter.js.map +1 -0
- package/build/testDoubles/{EventMarkerEmitter/SpyEventMarkerEmitter.d.ts → LslEmitter/SpyLslEmitter.d.ts} +4 -4
- package/build/testDoubles/{EventMarkerEmitter/SpyEventMarkerEmitter.js → LslEmitter/SpyLslEmitter.js} +3 -3
- package/build/testDoubles/LslEmitter/SpyLslEmitter.js.map +1 -0
- package/build/testDoubles/LslEmitter/ThrowingLslEmitter.d.ts +9 -0
- package/build/testDoubles/{EventMarkerEmitter/ThrowingEventMarkerEmitter.js → LslEmitter/ThrowingLslEmitter.js} +2 -2
- package/build/testDoubles/LslEmitter/ThrowingLslEmitter.js.map +1 -0
- package/build/testDoubles/{StreamInfo/FakeStreamInfo.d.ts → LslInfo/FakeLslInfo.d.ts} +4 -4
- package/build/testDoubles/{StreamInfo/FakeStreamInfo.js → LslInfo/FakeLslInfo.js} +7 -7
- package/build/testDoubles/LslInfo/FakeLslInfo.js.map +1 -0
- package/build/testDoubles/LslInfo/SpyLslInfo.d.ts +10 -0
- package/build/testDoubles/{StreamInfo/SpyStreamInfo.js → LslInfo/SpyLslInfo.js} +4 -4
- package/build/testDoubles/LslInfo/SpyLslInfo.js.map +1 -0
- package/build/testDoubles/{StreamInlet/FakeStreamInlet.d.ts → LslInlet/FakeLslInlet.d.ts} +4 -4
- package/build/testDoubles/{StreamInlet/FakeStreamInlet.js → LslInlet/FakeLslInlet.js} +12 -11
- package/build/testDoubles/LslInlet/FakeLslInlet.js.map +1 -0
- package/build/testDoubles/LslInlet/SpyLslInlet.d.ts +4 -0
- package/build/testDoubles/{StreamInlet/SpyStreamInlet.js → LslInlet/SpyLslInlet.js} +2 -2
- package/build/testDoubles/LslInlet/SpyLslInlet.js.map +1 -0
- package/build/testDoubles/{StreamOutlet/FakeStreamOutlet.d.ts → LslOutlet/FakeLslOutlet.d.ts} +5 -5
- package/build/testDoubles/{StreamOutlet/FakeStreamOutlet.js → LslOutlet/FakeLslOutlet.js} +8 -8
- package/build/testDoubles/LslOutlet/FakeLslOutlet.js.map +1 -0
- package/build/testDoubles/LslWsBridge/FakeLslWsBridge.d.ts +14 -0
- package/build/testDoubles/{WebSocketBridge/FakeWebSocketBridge.js → LslWsBridge/FakeLslWsBridge.js} +14 -14
- package/build/testDoubles/LslWsBridge/FakeLslWsBridge.js.map +1 -0
- package/build/testDoubles/LslWsBridge/SpyLslWsBridge.d.ts +4 -0
- package/build/testDoubles/{WebSocketBridge/SpyLslWebSocketBridge.js → LslWsBridge/SpyLslWsBridge.js} +2 -2
- package/build/testDoubles/LslWsBridge/SpyLslWsBridge.js.map +1 -0
- package/build/testDoubles/UsbController/FakeUsbController.d.ts +12 -0
- package/build/testDoubles/UsbController/FakeUsbController.js +25 -0
- package/build/testDoubles/UsbController/FakeUsbController.js.map +1 -0
- package/build/testDoubles/consts.d.ts +2 -12
- package/build/testDoubles/consts.js +0 -20
- package/build/testDoubles/consts.js.map +1 -1
- package/build/testDoubles/generateRandomOutletOptions.d.ts +2 -2
- package/build/testDoubles/generateRandomOutletOptions.js.map +1 -1
- package/package.json +6 -5
- package/src/__tests__/AbstractPackageTest.ts +78 -49
- package/src/__tests__/impl/BleDeviceController.test.ts +59 -18
- package/src/__tests__/impl/LslEventMarkerEmitter.test.ts +19 -24
- package/src/__tests__/impl/LslStreamInfo.test.ts +8 -8
- package/src/__tests__/impl/LslStreamInlet.test.ts +21 -78
- package/src/__tests__/impl/LslStreamOutlet.test.ts +22 -28
- package/src/__tests__/impl/LslWebSocketBridge.test.ts +15 -18
- package/src/__tests__/impl/UsbDeviceController.test.ts +109 -0
- package/src/__tests__/impl/WindowedClockRegressor.test.ts +262 -0
- package/src/assertions.ts +1 -2
- package/src/impl/LslEventMarkerEmitter.ts +15 -17
- package/src/impl/LslStreamInfo.ts +7 -9
- package/src/impl/LslStreamInlet.ts +304 -77
- package/src/impl/LslStreamOutlet.ts +59 -57
- package/src/impl/LslWebSocketBridge.ts +15 -18
- package/src/impl/clocks/WindowedClockRegressor.ts +136 -0
- package/src/impl/controllers/BleDeviceController.ts +18 -1
- package/src/impl/controllers/UsbDeviceController.ts +65 -0
- package/src/index.ts +48 -28
- package/src/scripts/{runLslEventMarkerEmitter.ts → runLslEmitter.ts} +4 -3
- package/src/scripts/runMuse.ts +1 -1
- package/src/scripts/runUsb.ts +20 -0
- package/src/testDoubles/BleController/FakeBleController.ts +11 -0
- package/src/testDoubles/ClockRegressor/FakeClockRegressor.ts +46 -0
- package/src/testDoubles/{EventMarkerEmitter/FakeEventMarkerEmitter.ts → LslEmitter/FakeLslEmitter.ts} +10 -10
- package/src/testDoubles/{EventMarkerEmitter/SpyEventMarkerEmitter.ts → LslEmitter/SpyLslEmitter.ts} +4 -4
- package/src/testDoubles/{EventMarkerEmitter/ThrowingEventMarkerEmitter.ts → LslEmitter/ThrowingLslEmitter.ts} +4 -4
- package/src/testDoubles/{StreamInfo/FakeStreamInfo.ts → LslInfo/FakeLslInfo.ts} +9 -9
- package/src/testDoubles/{StreamInfo/SpyStreamInfo.ts → LslInfo/SpyLslInfo.ts} +5 -5
- package/src/testDoubles/{StreamInlet/FakeStreamInlet.ts → LslInlet/FakeLslInlet.ts} +15 -14
- package/src/testDoubles/LslInlet/SpyLslInlet.ts +10 -0
- package/src/testDoubles/{StreamOutlet/FakeStreamOutlet.ts → LslOutlet/FakeLslOutlet.ts} +11 -14
- package/src/testDoubles/{WebSocketBridge/FakeWebSocketBridge.ts → LslWsBridge/FakeLslWsBridge.ts} +19 -20
- package/src/testDoubles/LslWsBridge/SpyLslWsBridge.ts +9 -0
- package/src/testDoubles/UsbController/FakeUsbController.ts +34 -0
- package/src/testDoubles/consts.ts +3 -23
- package/src/testDoubles/generateRandomOutletOptions.ts +2 -2
- package/build/consts.d.ts +0 -11
- package/build/consts.js +0 -21
- package/build/consts.js.map +0 -1
- package/build/impl/workers/inlet/LslStreamInlet.worker.d.ts +0 -22
- package/build/impl/workers/inlet/LslStreamInlet.worker.js +0 -42
- package/build/impl/workers/inlet/LslStreamInlet.worker.js.map +0 -1
- package/build/impl/workers/inlet/StreamInletWorker.d.ts +0 -73
- package/build/impl/workers/inlet/StreamInletWorker.js +0 -253
- package/build/impl/workers/inlet/StreamInletWorker.js.map +0 -1
- package/build/impl/workers/outlet/LslStreamOutlet.worker.d.ts +0 -32
- package/build/impl/workers/outlet/LslStreamOutlet.worker.js +0 -82
- package/build/impl/workers/outlet/LslStreamOutlet.worker.js.map +0 -1
- package/build/scripts/discoverMuse.js +0 -40
- package/build/scripts/discoverMuse.js.map +0 -1
- package/build/scripts/runLslEventMarkerEmitter.js.map +0 -1
- package/build/scripts/runLslStreamOutlet.js.map +0 -1
- package/build/scripts/testDestroyOutlet.d.ts +0 -1
- package/build/scripts/testDestroyOutlet.js +0 -4
- package/build/scripts/testDestroyOutlet.js.map +0 -1
- package/build/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.js.map +0 -1
- package/build/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js.map +0 -1
- package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.d.ts +0 -9
- package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.js.map +0 -1
- package/build/testDoubles/StreamInfo/FakeStreamInfo.js.map +0 -1
- package/build/testDoubles/StreamInfo/SpyStreamInfo.d.ts +0 -10
- package/build/testDoubles/StreamInfo/SpyStreamInfo.js.map +0 -1
- package/build/testDoubles/StreamInlet/FakeStreamInlet.js.map +0 -1
- package/build/testDoubles/StreamInlet/SpyStreamInlet.d.ts +0 -4
- package/build/testDoubles/StreamInlet/SpyStreamInlet.js.map +0 -1
- package/build/testDoubles/StreamOutlet/FakeStreamOutlet.js.map +0 -1
- package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.d.ts +0 -14
- package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.js.map +0 -1
- package/build/testDoubles/WebSocketBridge/SpyLslWebSocketBridge.d.ts +0 -4
- package/build/testDoubles/WebSocketBridge/SpyLslWebSocketBridge.js.map +0 -1
- package/build/testDoubles/WorkerThreads/FakeWorker.d.ts +0 -27
- package/build/testDoubles/WorkerThreads/FakeWorker.js +0 -67
- package/build/testDoubles/WorkerThreads/FakeWorker.js.map +0 -1
- package/src/consts.ts +0 -21
- package/src/impl/workers/inlet/LslStreamInlet.worker.ts +0 -74
- package/src/impl/workers/inlet/StreamInletWorker.ts +0 -348
- package/src/impl/workers/outlet/LslStreamOutlet.worker.ts +0 -144
- package/src/scripts/discoverMuse.ts +0 -50
- package/src/scripts/testDestroyOutlet.ts +0 -5
- package/src/testDoubles/StreamInlet/SpyStreamInlet.ts +0 -10
- package/src/testDoubles/WebSocketBridge/SpyLslWebSocketBridge.ts +0 -9
- package/src/testDoubles/WorkerThreads/FakeWorker.ts +0 -99
- /package/build/scripts/{discoverMuse.d.ts → runLslEmitter.d.ts} +0 -0
- /package/build/scripts/{runLslEventMarkerEmitter.d.ts → runLslOutlet.d.ts} +0 -0
- /package/build/scripts/{runLslStreamOutlet.d.ts → runUsb.d.ts} +0 -0
- /package/src/scripts/{runLslStreamOutlet.ts → runLslOutlet.ts} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import generateId from '@neurodevs/generate-id'
|
|
2
2
|
import { InfoHandle } from '@neurodevs/ndx-native'
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import { LslInfo, LslInfoOptions } from '../../impl/LslStreamInfo.js'
|
|
5
5
|
|
|
6
|
-
export default class
|
|
7
|
-
public static callsToConstructor: (
|
|
6
|
+
export default class FakeLslInfo implements LslInfo {
|
|
7
|
+
public static callsToConstructor: (LslInfoOptions | undefined)[] = []
|
|
8
8
|
public static numCallsToDestroy = 0
|
|
9
9
|
|
|
10
10
|
public static infoHandle = {} as InfoHandle
|
|
@@ -17,12 +17,12 @@ export default class FakeStreamInfo implements StreamInfo {
|
|
|
17
17
|
public sampleRateHz = 0
|
|
18
18
|
public units = 'N/A'
|
|
19
19
|
|
|
20
|
-
public constructor(options?:
|
|
21
|
-
|
|
20
|
+
public constructor(options?: LslInfoOptions) {
|
|
21
|
+
FakeLslInfo.callsToConstructor.push(options)
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
public destroy() {
|
|
25
|
-
|
|
25
|
+
FakeLslInfo.numCallsToDestroy++
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
public get channelCount() {
|
|
@@ -30,11 +30,11 @@ export default class FakeStreamInfo implements StreamInfo {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
public get infoHandle() {
|
|
33
|
-
return
|
|
33
|
+
return FakeLslInfo.infoHandle
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
public static resetTestDouble() {
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
FakeLslInfo.callsToConstructor = []
|
|
38
|
+
FakeLslInfo.numCallsToDestroy = 0
|
|
39
39
|
}
|
|
40
40
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import LslStreamInfo, {
|
|
1
|
+
import LslStreamInfo, { LslInfoOptions } from '../../impl/LslStreamInfo.js'
|
|
2
2
|
|
|
3
|
-
export default class
|
|
3
|
+
export default class SpyLslInfo extends LslStreamInfo {
|
|
4
4
|
public static numCallsToConstructor = 0
|
|
5
5
|
|
|
6
|
-
public constructor(options:
|
|
6
|
+
public constructor(options: LslInfoOptions) {
|
|
7
7
|
super(options)
|
|
8
|
-
|
|
8
|
+
SpyLslInfo.numCallsToConstructor++
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
public getName() {
|
|
@@ -25,6 +25,6 @@ export default class SpyStreamInfo extends LslStreamInfo {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
public static resetTestDouble() {
|
|
28
|
-
|
|
28
|
+
SpyLslInfo.numCallsToConstructor = 0
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
OnDataCallback,
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
LslInlet,
|
|
4
|
+
LslInletOptions,
|
|
5
5
|
} from '../../impl/LslStreamInlet.js'
|
|
6
6
|
|
|
7
|
-
export default class
|
|
7
|
+
export default class FakeLslInlet implements LslInlet {
|
|
8
8
|
public static callsToConstructor: {
|
|
9
|
-
options?:
|
|
9
|
+
options?: LslInletOptions
|
|
10
10
|
onData?: OnDataCallback
|
|
11
11
|
}[] = []
|
|
12
12
|
|
|
@@ -19,37 +19,38 @@ export default class FakeStreamInlet implements StreamInlet {
|
|
|
19
19
|
|
|
20
20
|
protected onData!: OnDataCallback
|
|
21
21
|
|
|
22
|
-
public constructor(options?:
|
|
22
|
+
public constructor(options?: LslInletOptions, onData?: OnDataCallback) {
|
|
23
23
|
this.onData = onData ?? (() => {})
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
FakeLslInlet.callsToConstructor.push({
|
|
26
26
|
options,
|
|
27
27
|
onData: this.onData,
|
|
28
28
|
})
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
public async startPulling() {
|
|
32
|
-
|
|
32
|
+
FakeLslInlet.numCallsToStartPulling++
|
|
33
33
|
this.isRunning = true
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
public stopPulling() {
|
|
37
|
-
|
|
37
|
+
FakeLslInlet.numCallsToStopPulling++
|
|
38
38
|
this.isRunning = false
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
public flushInlet() {
|
|
42
|
-
|
|
42
|
+
FakeLslInlet.numCallsToFlushInlet++
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
public destroy() {
|
|
46
|
-
|
|
46
|
+
FakeLslInlet.numCallsToDestroy++
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
public static resetTestDouble() {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
this.callsToConstructor = []
|
|
51
|
+
this.numCallsToStartPulling = 0
|
|
52
|
+
this.numCallsToStopPulling = 0
|
|
53
|
+
this.numCallsToFlushInlet = 0
|
|
54
|
+
this.numCallsToDestroy = 0
|
|
54
55
|
}
|
|
55
56
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import LslStreamInlet, {
|
|
2
|
+
OnDataCallback,
|
|
3
|
+
LslInletOptions,
|
|
4
|
+
} from '../../impl/LslStreamInlet.js'
|
|
5
|
+
|
|
6
|
+
export default class SpyLslInlet extends LslStreamInlet {
|
|
7
|
+
public constructor(options: LslInletOptions, onData: OnDataCallback) {
|
|
8
|
+
super(options, onData)
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -3,13 +3,10 @@ import { randomInt } from 'node:crypto'
|
|
|
3
3
|
import generateId from '@neurodevs/generate-id'
|
|
4
4
|
import { LslSample } from '@neurodevs/ndx-native'
|
|
5
5
|
|
|
6
|
-
import {
|
|
7
|
-
StreamOutlet,
|
|
8
|
-
StreamOutletOptions,
|
|
9
|
-
} from '../../impl/LslStreamOutlet.js'
|
|
6
|
+
import { LslOutlet, LslOutletOptions } from '../../impl/LslStreamOutlet.js'
|
|
10
7
|
|
|
11
|
-
export default class
|
|
12
|
-
public static callsToConstructor: (
|
|
8
|
+
export default class FakeLslOutlet implements LslOutlet {
|
|
9
|
+
public static callsToConstructor: (LslOutletOptions | undefined)[] = []
|
|
13
10
|
|
|
14
11
|
public static callsToPushSample: {
|
|
15
12
|
sample: LslSample
|
|
@@ -18,19 +15,19 @@ export default class FakeStreamOutlet implements StreamOutlet {
|
|
|
18
15
|
|
|
19
16
|
public static numCallsToDestroy = 0
|
|
20
17
|
|
|
21
|
-
public options?:
|
|
18
|
+
public options?: LslOutletOptions
|
|
22
19
|
|
|
23
|
-
public constructor(options?:
|
|
24
|
-
|
|
20
|
+
public constructor(options?: LslOutletOptions) {
|
|
21
|
+
FakeLslOutlet.callsToConstructor.push(options)
|
|
25
22
|
this.options = options
|
|
26
23
|
}
|
|
27
24
|
|
|
28
25
|
public destroy() {
|
|
29
|
-
|
|
26
|
+
FakeLslOutlet.numCallsToDestroy++
|
|
30
27
|
}
|
|
31
28
|
|
|
32
29
|
public pushSample(sample: LslSample, timestampSec?: number) {
|
|
33
|
-
|
|
30
|
+
FakeLslOutlet.callsToPushSample.push({
|
|
34
31
|
sample,
|
|
35
32
|
timestampSec,
|
|
36
33
|
})
|
|
@@ -81,8 +78,8 @@ export default class FakeStreamOutlet implements StreamOutlet {
|
|
|
81
78
|
}
|
|
82
79
|
|
|
83
80
|
public static resetTestDouble() {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
81
|
+
FakeLslOutlet.callsToConstructor = []
|
|
82
|
+
FakeLslOutlet.callsToPushSample = []
|
|
83
|
+
FakeLslOutlet.numCallsToDestroy = 0
|
|
87
84
|
}
|
|
88
85
|
}
|
package/src/testDoubles/{WebSocketBridge/FakeWebSocketBridge.ts → LslWsBridge/FakeLslWsBridge.ts}
RENAMED
|
@@ -1,45 +1,34 @@
|
|
|
1
1
|
import WebSocket, { WebSocketServer } from 'ws'
|
|
2
2
|
import LslWebSocketBridge, {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
LslWsBridge,
|
|
4
|
+
LslWsBridgeConstructorOptions,
|
|
5
5
|
} from '../../impl/LslWebSocketBridge.js'
|
|
6
6
|
import FakeWebSocket from '../WebSockets/FakeWebSocket.js'
|
|
7
7
|
import FakeWebSocketServer from '../WebSockets/FakeWebSocketServer.js'
|
|
8
8
|
|
|
9
|
-
export default class
|
|
9
|
+
export default class FakeLslWsBridge implements LslWsBridge {
|
|
10
10
|
public static callsToConstructor: (
|
|
11
|
-
|
|
|
12
|
-
| undefined
|
|
11
|
+
LslWsBridgeConstructorOptions | undefined
|
|
13
12
|
)[] = []
|
|
14
13
|
|
|
15
14
|
public static numCallsToActivate = 0
|
|
16
15
|
public static numCallsToDeactivate = 0
|
|
17
16
|
public static numCallsToDestroy = 0
|
|
18
17
|
|
|
19
|
-
public constructor(options?:
|
|
20
|
-
|
|
18
|
+
public constructor(options?: LslWsBridgeConstructorOptions) {
|
|
19
|
+
FakeLslWsBridge.callsToConstructor.push(options)
|
|
21
20
|
}
|
|
22
21
|
|
|
23
22
|
public async activate() {
|
|
24
|
-
|
|
23
|
+
FakeLslWsBridge.numCallsToActivate++
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
public deactivate() {
|
|
28
|
-
|
|
27
|
+
FakeLslWsBridge.numCallsToDeactivate++
|
|
29
28
|
}
|
|
30
29
|
|
|
31
30
|
public destroy() {
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
public static resetTestDouble() {
|
|
36
|
-
this.callsToConstructor = []
|
|
37
|
-
this.numCallsToActivate = 0
|
|
38
|
-
this.numCallsToDeactivate = 0
|
|
39
|
-
this.numCallsToDestroy = 0
|
|
40
|
-
|
|
41
|
-
this.setFakeWebSocket()
|
|
42
|
-
this.setFakeWebSocketServer()
|
|
31
|
+
FakeLslWsBridge.numCallsToDestroy++
|
|
43
32
|
}
|
|
44
33
|
|
|
45
34
|
private static setFakeWebSocket() {
|
|
@@ -52,4 +41,14 @@ export default class FakeWebSocketBridge implements WebSocketBridge {
|
|
|
52
41
|
FakeWebSocketServer as unknown as typeof WebSocketServer
|
|
53
42
|
FakeWebSocketServer.resetTestDouble()
|
|
54
43
|
}
|
|
44
|
+
|
|
45
|
+
public static resetTestDouble() {
|
|
46
|
+
this.callsToConstructor = []
|
|
47
|
+
this.numCallsToActivate = 0
|
|
48
|
+
this.numCallsToDeactivate = 0
|
|
49
|
+
this.numCallsToDestroy = 0
|
|
50
|
+
|
|
51
|
+
this.setFakeWebSocket()
|
|
52
|
+
this.setFakeWebSocketServer()
|
|
53
|
+
}
|
|
55
54
|
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import {
|
|
2
|
+
UsbController,
|
|
3
|
+
UsbControllerOptions,
|
|
4
|
+
} from '../../impl/controllers/UsbDeviceController.js'
|
|
5
|
+
|
|
6
|
+
export default class FakeUsbController implements UsbController {
|
|
7
|
+
public static callsToConstructor: (UsbControllerOptions | undefined)[] = []
|
|
8
|
+
public static numCallsToConnect = 0
|
|
9
|
+
public static callsToWriteUsb: string[] = []
|
|
10
|
+
public static numCallsToDisconnect = 0
|
|
11
|
+
|
|
12
|
+
public constructor(options?: UsbControllerOptions) {
|
|
13
|
+
FakeUsbController.callsToConstructor.push(options)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public async connect() {
|
|
17
|
+
FakeUsbController.numCallsToConnect++
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public async writeUsb(value: string) {
|
|
21
|
+
FakeUsbController.callsToWriteUsb.push(value)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public async disconnect() {
|
|
25
|
+
FakeUsbController.numCallsToDisconnect++
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public static resetTestDouble() {
|
|
29
|
+
FakeUsbController.callsToConstructor.length = 0
|
|
30
|
+
FakeUsbController.numCallsToConnect = 0
|
|
31
|
+
FakeUsbController.callsToWriteUsb.length = 0
|
|
32
|
+
FakeUsbController.numCallsToDisconnect = 0
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ChannelFormat } from '@neurodevs/ndx-native'
|
|
2
|
+
|
|
1
3
|
export const TEST_SUPPORTED_CHANNEL_FORMATS = ['float32', 'string'] as const
|
|
2
4
|
|
|
3
5
|
export const TEST_UNSUPPORTED_CHANNEL_FORMATS = [
|
|
@@ -9,26 +11,4 @@ export const TEST_UNSUPPORTED_CHANNEL_FORMATS = [
|
|
|
9
11
|
'int64',
|
|
10
12
|
] as const
|
|
11
13
|
|
|
12
|
-
export
|
|
13
|
-
'undefined',
|
|
14
|
-
'float32',
|
|
15
|
-
'double64',
|
|
16
|
-
'string',
|
|
17
|
-
'int32',
|
|
18
|
-
'int16',
|
|
19
|
-
'int8',
|
|
20
|
-
'int64',
|
|
21
|
-
] as const
|
|
22
|
-
|
|
23
|
-
export const TEST_CHANNEL_FORMATS_MAP = {
|
|
24
|
-
undefined: 0,
|
|
25
|
-
float32: 1,
|
|
26
|
-
double64: 2,
|
|
27
|
-
string: 3,
|
|
28
|
-
int32: 4,
|
|
29
|
-
int16: 5,
|
|
30
|
-
int8: 6,
|
|
31
|
-
int64: 7,
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export type TestChannelFormat = (typeof TEST_CHANNEL_FORMATS)[number]
|
|
14
|
+
export type TestChannelFormat = ChannelFormat
|
|
@@ -2,7 +2,7 @@ import { randomInt } from 'node:crypto'
|
|
|
2
2
|
|
|
3
3
|
import generateId from '@neurodevs/generate-id'
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { LslOutletOptions } from '../impl/LslStreamOutlet.js'
|
|
6
6
|
import { TEST_SUPPORTED_CHANNEL_FORMATS } from './consts.js'
|
|
7
7
|
|
|
8
8
|
export default function generateRandomOutletOptions() {
|
|
@@ -19,5 +19,5 @@ export default function generateRandomOutletOptions() {
|
|
|
19
19
|
units: generateId(),
|
|
20
20
|
chunkSize: randomInt(0, 10),
|
|
21
21
|
maxBufferedMs: randomInt(0, 10),
|
|
22
|
-
} as
|
|
22
|
+
} as LslOutletOptions
|
|
23
23
|
}
|
package/build/consts.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export declare const CHANNEL_FORMATS: readonly ["undefined", "float32", "double64", "string", "int32", "int16", "int8", "int64"];
|
|
2
|
-
export declare const CHANNEL_FORMATS_MAP: {
|
|
3
|
-
undefined: number;
|
|
4
|
-
float32: number;
|
|
5
|
-
double64: number;
|
|
6
|
-
string: number;
|
|
7
|
-
int32: number;
|
|
8
|
-
int16: number;
|
|
9
|
-
int8: number;
|
|
10
|
-
int64: number;
|
|
11
|
-
};
|
package/build/consts.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export const CHANNEL_FORMATS = [
|
|
2
|
-
'undefined',
|
|
3
|
-
'float32',
|
|
4
|
-
'double64',
|
|
5
|
-
'string',
|
|
6
|
-
'int32',
|
|
7
|
-
'int16',
|
|
8
|
-
'int8',
|
|
9
|
-
'int64',
|
|
10
|
-
];
|
|
11
|
-
export const CHANNEL_FORMATS_MAP = {
|
|
12
|
-
undefined: 0,
|
|
13
|
-
float32: 1,
|
|
14
|
-
double64: 2,
|
|
15
|
-
string: 3,
|
|
16
|
-
int32: 4,
|
|
17
|
-
int16: 5,
|
|
18
|
-
int8: 6,
|
|
19
|
-
int64: 7,
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=consts.js.map
|
package/build/consts.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC3B,WAAW;IACX,SAAS;IACT,UAAU;IACV,QAAQ;IACR,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;CACD,CAAA;AAEV,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAC/B,SAAS,EAAE,CAAC;IACZ,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACX,CAAA"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export type InletMessage = {
|
|
2
|
-
type: 'createInlet';
|
|
3
|
-
payload: CreateInletPayload;
|
|
4
|
-
} | {
|
|
5
|
-
type: 'startPulling';
|
|
6
|
-
} | {
|
|
7
|
-
type: 'flushInlet';
|
|
8
|
-
} | {
|
|
9
|
-
type: 'stopPulling';
|
|
10
|
-
} | {
|
|
11
|
-
type: 'destroyInlet';
|
|
12
|
-
};
|
|
13
|
-
export interface CreateInletPayload {
|
|
14
|
-
sourceId: string;
|
|
15
|
-
chunkSize: number;
|
|
16
|
-
maxBufferedMs: number;
|
|
17
|
-
openStreamTimeoutMs: number;
|
|
18
|
-
waitAfterOpenStreamMs: number;
|
|
19
|
-
pullTimeoutMs: number;
|
|
20
|
-
waitBetweenPullsMs: number;
|
|
21
|
-
flushInletOnStop: boolean;
|
|
22
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { parentPort } from 'node:worker_threads';
|
|
2
|
-
import StreamInletWorker from './StreamInletWorker.js';
|
|
3
|
-
const worker = new StreamInletWorker();
|
|
4
|
-
parentPort?.on('message', async (msg) => {
|
|
5
|
-
try {
|
|
6
|
-
switch (msg.type) {
|
|
7
|
-
case 'createInlet':
|
|
8
|
-
const { payload } = msg;
|
|
9
|
-
await worker.createInlet(payload);
|
|
10
|
-
parentPort?.postMessage({ type: 'ready' });
|
|
11
|
-
break;
|
|
12
|
-
case 'startPulling':
|
|
13
|
-
worker.startPulling((samples, timestamps) => {
|
|
14
|
-
parentPort?.postMessage({
|
|
15
|
-
type: 'data',
|
|
16
|
-
payload: {
|
|
17
|
-
samples,
|
|
18
|
-
timestamps,
|
|
19
|
-
},
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
break;
|
|
23
|
-
case 'stopPulling':
|
|
24
|
-
worker.stopPulling();
|
|
25
|
-
break;
|
|
26
|
-
case 'flushInlet':
|
|
27
|
-
worker.flushInlet();
|
|
28
|
-
break;
|
|
29
|
-
case 'destroyInlet':
|
|
30
|
-
worker.destroyInlet();
|
|
31
|
-
parentPort?.close();
|
|
32
|
-
break;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
catch (err) {
|
|
36
|
-
parentPort?.postMessage({
|
|
37
|
-
type: 'error',
|
|
38
|
-
error: err instanceof Error ? err.message : String(err),
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
//# sourceMappingURL=LslStreamInlet.worker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LslStreamInlet.worker.js","sourceRoot":"","sources":["../../../../src/impl/workers/inlet/LslStreamInlet.worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,iBAAiB,MAAM,wBAAwB,CAAA;AAEtD,MAAM,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAA;AAEtC,UAAU,EAAE,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAiB,EAAE,EAAE;IAClD,IAAI,CAAC;QACD,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,aAAa;gBACd,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAA;gBACvB,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;gBACjC,UAAU,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;gBAC1C,MAAK;YAET,KAAK,cAAc;gBACf,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE;oBACxC,UAAU,EAAE,WAAW,CAAC;wBACpB,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACL,OAAO;4BACP,UAAU;yBACb;qBACJ,CAAC,CAAA;gBACN,CAAC,CAAC,CAAA;gBACF,MAAK;YAET,KAAK,aAAa;gBACd,MAAM,CAAC,WAAW,EAAE,CAAA;gBACpB,MAAK;YACT,KAAK,YAAY;gBACb,MAAM,CAAC,UAAU,EAAE,CAAA;gBACnB,MAAK;YAET,KAAK,cAAc;gBACf,MAAM,CAAC,YAAY,EAAE,CAAA;gBACrB,UAAU,EAAE,KAAK,EAAE,CAAA;gBACnB,MAAK;QACb,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,UAAU,EAAE,WAAW,CAAC;YACpB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SAC1D,CAAC,CAAA;IACN,CAAC;AACL,CAAC,CAAC,CAAA"}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { handleLslError, InfoHandle, InletHandle } from '@neurodevs/ndx-native';
|
|
2
|
-
import { freePointer } from 'ffi-rs';
|
|
3
|
-
import { OnDataCallback } from '../../LslStreamInlet.js';
|
|
4
|
-
import { CreateInletPayload } from './LslStreamInlet.worker.js';
|
|
5
|
-
export default class StreamInletWorker {
|
|
6
|
-
static lsl: import("@neurodevs/ndx-native").Liblsl;
|
|
7
|
-
static handleLslError: typeof handleLslError;
|
|
8
|
-
static freePointer: typeof freePointer;
|
|
9
|
-
private sourceId;
|
|
10
|
-
private chunkSize;
|
|
11
|
-
private maxBufferedMs;
|
|
12
|
-
private openStreamTimeoutMs;
|
|
13
|
-
private waitAfterOpenStreamMs;
|
|
14
|
-
private waitBetweenPullsMs;
|
|
15
|
-
private pullTimeoutMs;
|
|
16
|
-
private flushInletOnStop;
|
|
17
|
-
private pullMethod;
|
|
18
|
-
protected infoHandle: InfoHandle;
|
|
19
|
-
protected inletHandle: InletHandle;
|
|
20
|
-
private channelCount;
|
|
21
|
-
private sampleBuffer;
|
|
22
|
-
private sampleBufferRef;
|
|
23
|
-
private sampleBufferPtr;
|
|
24
|
-
private timestampBuffer;
|
|
25
|
-
private timestampBufferRef;
|
|
26
|
-
private timestampBufferPtr;
|
|
27
|
-
private pullErrorBuffer;
|
|
28
|
-
private pullErrorBufferRef;
|
|
29
|
-
private pullErrorBufferPtr;
|
|
30
|
-
private openStreamErrorBuffer;
|
|
31
|
-
private openStreamErrorBufferRef;
|
|
32
|
-
private openStreamErrorBufferPtr;
|
|
33
|
-
private onData;
|
|
34
|
-
private readonly bytesPerFloat;
|
|
35
|
-
private readonly bytesPerDouble;
|
|
36
|
-
private readonly bytesPerI32;
|
|
37
|
-
private isRunning;
|
|
38
|
-
createInlet(payload: CreateInletPayload): Promise<void>;
|
|
39
|
-
private resolveInfoHandle;
|
|
40
|
-
private resolveByProp;
|
|
41
|
-
private throwNoStreamFound;
|
|
42
|
-
private warnMultipleStreamsFound;
|
|
43
|
-
private doCreateInlet;
|
|
44
|
-
private getChannelCount;
|
|
45
|
-
private allocateWritableBuffers;
|
|
46
|
-
private allocateDataBuffer;
|
|
47
|
-
private allocateTimestampBuffer;
|
|
48
|
-
private allocatePullErrorBuffer;
|
|
49
|
-
private allocateOpenStreamErrorBuffer;
|
|
50
|
-
private setPullMethod;
|
|
51
|
-
private pullSample;
|
|
52
|
-
private doPullsample;
|
|
53
|
-
private readSamplesFromBuffer;
|
|
54
|
-
private pullChunk;
|
|
55
|
-
private doPullChunk;
|
|
56
|
-
private readTimestampsFromBuffer;
|
|
57
|
-
private openStream;
|
|
58
|
-
private waitForSetup;
|
|
59
|
-
startPulling(onData: OnDataCallback): void;
|
|
60
|
-
private pullLoop;
|
|
61
|
-
private pullDataOnce;
|
|
62
|
-
private handleLslErrorIfPresent;
|
|
63
|
-
private waitBetweenPulls;
|
|
64
|
-
flushInlet(): void;
|
|
65
|
-
stopPulling(): void;
|
|
66
|
-
private closeStream;
|
|
67
|
-
destroyInlet(): void;
|
|
68
|
-
private doDestroyInlet;
|
|
69
|
-
private freeNativePointers;
|
|
70
|
-
private get lsl();
|
|
71
|
-
private get handleLslError();
|
|
72
|
-
private get freePointer();
|
|
73
|
-
}
|