@neurodevs/node-lsl 19.0.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 +11 -11
- package/build/__tests__/AbstractPackageTest.js +26 -30
- package/build/__tests__/AbstractPackageTest.js.map +1 -1
- package/build/__tests__/impl/BleDeviceController.test.d.ts +1 -1
- package/build/__tests__/impl/BleDeviceController.test.js +8 -10
- 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 +7 -12
- 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/WindowedClockRegressor.test.js +1 -1
- package/build/__tests__/impl/WindowedClockRegressor.test.js.map +1 -1
- 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 -21
- package/build/impl/LslStreamInlet.js +221 -65
- package/build/impl/LslStreamInlet.js.map +1 -1
- package/build/impl/LslStreamOutlet.d.ts +15 -14
- package/build/impl/LslStreamOutlet.js +32 -36
- 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.js.map +1 -0
- package/build/impl/controllers/BleDeviceController.d.ts +1 -1
- package/build/impl/controllers/BleDeviceController.js +1 -1
- package/build/impl/controllers/BleDeviceController.js.map +1 -1
- package/build/index.d.ts +27 -23
- package/build/index.js +32 -29
- 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/testDoubles/ClockRegressor/FakeClockRegressor.d.ts +1 -1
- 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/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 +4 -3
- package/src/__tests__/AbstractPackageTest.ts +29 -38
- package/src/__tests__/impl/BleDeviceController.test.ts +8 -10
- 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 +17 -24
- package/src/__tests__/impl/LslWebSocketBridge.test.ts +15 -18
- package/src/__tests__/impl/WindowedClockRegressor.test.ts +1 -1
- 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 +305 -81
- package/src/impl/LslStreamOutlet.ts +57 -56
- package/src/impl/LslWebSocketBridge.ts +15 -18
- package/src/impl/controllers/BleDeviceController.ts +1 -1
- package/src/index.ts +38 -34
- package/src/scripts/{runLslEventMarkerEmitter.ts → runLslEmitter.ts} +4 -3
- package/src/scripts/runMuse.ts +1 -1
- package/src/testDoubles/ClockRegressor/FakeClockRegressor.ts +1 -1
- 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 -19
- package/src/testDoubles/LslWsBridge/SpyLslWsBridge.ts +9 -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/WindowedClockRegressor.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.d.ts +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/impl/{WindowedClockRegressor.d.ts → clocks/WindowedClockRegressor.d.ts} +0 -0
- /package/build/impl/{WindowedClockRegressor.js → clocks/WindowedClockRegressor.js} +0 -0
- /package/build/scripts/{discoverMuse.d.ts → runLslEmitter.d.ts} +0 -0
- /package/build/scripts/{runLslEventMarkerEmitter.d.ts → runLslOutlet.d.ts} +0 -0
- /package/src/impl/{WindowedClockRegressor.ts → clocks/WindowedClockRegressor.ts} +0 -0
- /package/src/scripts/{runLslStreamOutlet.ts → runLslOutlet.ts} +0 -0
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import { parentPort } from 'node:worker_threads'
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
LiblslAdapter,
|
|
5
|
-
Liblsl,
|
|
6
|
-
OutletHandle,
|
|
7
|
-
handleLslError,
|
|
8
|
-
LslErrorCode,
|
|
9
|
-
} from '@neurodevs/ndx-native'
|
|
10
|
-
|
|
11
|
-
import LslStreamInfo, {
|
|
12
|
-
StreamInfo,
|
|
13
|
-
StreamInfoOptions,
|
|
14
|
-
} from '../../LslStreamInfo.js'
|
|
15
|
-
|
|
16
|
-
let lsl = LiblslAdapter.getInstance()
|
|
17
|
-
|
|
18
|
-
export function setOutletLiblslAdapter(adapter: Liblsl) {
|
|
19
|
-
LiblslAdapter.setInstance(adapter)
|
|
20
|
-
lsl = LiblslAdapter.getInstance()
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
let handleLslErrorFn = handleLslError
|
|
24
|
-
|
|
25
|
-
export function setOutletHandleLslError(fn: typeof handleLslError) {
|
|
26
|
-
handleLslErrorFn = fn
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
let info: StreamInfo
|
|
30
|
-
let handle: OutletHandle
|
|
31
|
-
let pushMethod: (opts: unknown) => LslErrorCode
|
|
32
|
-
|
|
33
|
-
parentPort?.on('message', (msg: OutletMessage) => {
|
|
34
|
-
const { type } = msg
|
|
35
|
-
|
|
36
|
-
try {
|
|
37
|
-
switch (type) {
|
|
38
|
-
case 'createOutlet': {
|
|
39
|
-
createOutlet(msg)
|
|
40
|
-
break
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
case 'pushSample': {
|
|
44
|
-
pushSample(msg)
|
|
45
|
-
break
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
case 'destroyOutlet': {
|
|
49
|
-
destroyOutlet()
|
|
50
|
-
break
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
} catch (err) {
|
|
54
|
-
parentPort?.postMessage({
|
|
55
|
-
type: 'error',
|
|
56
|
-
error: err instanceof Error ? err.message : String(err),
|
|
57
|
-
})
|
|
58
|
-
}
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
export function createOutlet(msg: {
|
|
62
|
-
type: 'createOutlet'
|
|
63
|
-
payload: CreateOutletPayload
|
|
64
|
-
}) {
|
|
65
|
-
const { payload } = msg
|
|
66
|
-
|
|
67
|
-
info = LslStreamInfo.Create(payload.infoOptions)
|
|
68
|
-
|
|
69
|
-
handle = lsl.createOutlet({
|
|
70
|
-
infoHandle: info.infoHandle,
|
|
71
|
-
chunkSize: payload.chunkSize,
|
|
72
|
-
maxBufferedMs: payload.maxBufferedMs,
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
pushMethod = (
|
|
76
|
-
lsl[payload.pushMethod] as (opts: unknown) => LslErrorCode
|
|
77
|
-
).bind(lsl)
|
|
78
|
-
|
|
79
|
-
parentPort?.postMessage({ type: 'ready' })
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export function pushSample(msg: {
|
|
83
|
-
type: 'pushSample'
|
|
84
|
-
payload: PushSamplePayload
|
|
85
|
-
}) {
|
|
86
|
-
const { payload } = msg
|
|
87
|
-
const { sample, timestampSec = lsl.localClock() } = payload
|
|
88
|
-
|
|
89
|
-
if (!handle || !pushMethod) {
|
|
90
|
-
throw new Error('Outlet not initialized')
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
const errorCode = pushMethod({
|
|
94
|
-
outletHandle: handle,
|
|
95
|
-
sample,
|
|
96
|
-
timestampSec,
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
try {
|
|
100
|
-
handleLslErrorFn(errorCode)
|
|
101
|
-
} catch {
|
|
102
|
-
parentPort?.postMessage({
|
|
103
|
-
type: 'error',
|
|
104
|
-
error: `Error pushing sample: ${LslErrorCode[errorCode]}`,
|
|
105
|
-
})
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
export function destroyOutlet() {
|
|
110
|
-
if (handle) {
|
|
111
|
-
lsl.destroyOutlet({ outletHandle: handle })
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
if (info) {
|
|
115
|
-
lsl.destroyStreamInfo({ infoHandle: info.infoHandle })
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
parentPort?.close()
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
export type OutletMessage =
|
|
122
|
-
| {
|
|
123
|
-
type: 'createOutlet'
|
|
124
|
-
payload: CreateOutletPayload
|
|
125
|
-
}
|
|
126
|
-
| {
|
|
127
|
-
type: 'pushSample'
|
|
128
|
-
payload: PushSamplePayload
|
|
129
|
-
}
|
|
130
|
-
| {
|
|
131
|
-
type: 'destroyOutlet'
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
export interface CreateOutletPayload {
|
|
135
|
-
infoOptions: StreamInfoOptions
|
|
136
|
-
chunkSize: number
|
|
137
|
-
maxBufferedMs: number
|
|
138
|
-
pushMethod: 'pushSampleFloatTimestamp' | 'pushSampleStringTimestamp'
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
export interface PushSamplePayload {
|
|
142
|
-
sample: unknown
|
|
143
|
-
timestampSec?: number
|
|
144
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import koffi from 'koffi'
|
|
2
|
-
|
|
3
|
-
import BleDeviceController from '../impl/controllers/BleDeviceController.js'
|
|
4
|
-
|
|
5
|
-
const MUSE_CHARACTERISTIC_UUIDS: Record<string, string> = {
|
|
6
|
-
CONTROL: '273E0001-4C4D-454D-96BE-F03BAC821358',
|
|
7
|
-
TELEMETRY: '273E000B-4C4D-454D-96BE-F03BAC821358',
|
|
8
|
-
GYROSCOPE: '273E0009-4C4D-454D-96BE-F03BAC821358',
|
|
9
|
-
ACCELEROMETER: '273E000A-4C4D-454D-96BE-F03BAC821358',
|
|
10
|
-
PPG_AMBIENT: '273E000F-4C4D-454D-96BE-F03BAC821358',
|
|
11
|
-
PPG_INFRARED: '273E0010-4C4D-454D-96BE-F03BAC821358',
|
|
12
|
-
PPG_RED: '273E0011-4C4D-454D-96BE-F03BAC821358',
|
|
13
|
-
EEG_TP9: '273E0003-4C4D-454D-96BE-F03BAC821358',
|
|
14
|
-
EEG_AF7: '273E0004-4C4D-454D-96BE-F03BAC821358',
|
|
15
|
-
EEG_AF8: '273E0005-4C4D-454D-96BE-F03BAC821358',
|
|
16
|
-
EEG_TP10: '273E0006-4C4D-454D-96BE-F03BAC821358',
|
|
17
|
-
EEG_AUX: '273E0007-4C4D-454D-96BE-F03BAC821358',
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const CONTROL_UUID = MUSE_CHARACTERISTIC_UUIDS['CONTROL']
|
|
21
|
-
|
|
22
|
-
const charCallbacks = Object.entries(MUSE_CHARACTERISTIC_UUIDS).map(
|
|
23
|
-
([name, uuid]) => {
|
|
24
|
-
return {
|
|
25
|
-
charUuid: uuid,
|
|
26
|
-
charName: name,
|
|
27
|
-
onData: (data: Buffer, length: number, timestampSec: number) => {
|
|
28
|
-
const bytes = koffi.decode(data, 'uint8', length) as number[]
|
|
29
|
-
console.info(`[${timestampSec}] length=${length}`, bytes)
|
|
30
|
-
},
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
const muse = await BleDeviceController.Create({
|
|
36
|
-
deviceNamePrefix: 'Muse',
|
|
37
|
-
charCallbacks,
|
|
38
|
-
rssiIntervalMs: 1000,
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
await muse.connect()
|
|
42
|
-
|
|
43
|
-
for (const cmd of ['h', 'p50', 's', 'd']) {
|
|
44
|
-
await muse.writeCharacteristic(CONTROL_UUID, cmd)
|
|
45
|
-
await new Promise((resolve) => setTimeout(resolve, 100))
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
await new Promise((resolve) => setTimeout(resolve, 5 * 1000))
|
|
49
|
-
|
|
50
|
-
await muse.disconnect()
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import LslStreamInlet, {
|
|
2
|
-
OnDataCallback,
|
|
3
|
-
StreamInletOptions,
|
|
4
|
-
} from '../../impl/LslStreamInlet.js'
|
|
5
|
-
|
|
6
|
-
export class SpyStreamInlet extends LslStreamInlet {
|
|
7
|
-
public constructor(options: StreamInletOptions, onData: OnDataCallback) {
|
|
8
|
-
super(options, onData)
|
|
9
|
-
}
|
|
10
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import LslWebSocketBridge, {
|
|
2
|
-
WebSocketBridgeConstructorOptions,
|
|
3
|
-
} from '../../impl/LslWebSocketBridge.js'
|
|
4
|
-
|
|
5
|
-
export default class SpyLslWebSocketBridge extends LslWebSocketBridge {
|
|
6
|
-
public constructor(options: WebSocketBridgeConstructorOptions) {
|
|
7
|
-
super(options)
|
|
8
|
-
}
|
|
9
|
-
}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { WorkerOptions } from 'node:worker_threads'
|
|
2
|
-
|
|
3
|
-
import { OnDataCallback } from '../../impl/LslStreamInlet.js'
|
|
4
|
-
import StreamInletWorker from '../../impl/workers/inlet/StreamInletWorker.js'
|
|
5
|
-
import {
|
|
6
|
-
createOutlet,
|
|
7
|
-
destroyOutlet,
|
|
8
|
-
pushSample,
|
|
9
|
-
} from '../../impl/workers/outlet/LslStreamOutlet.worker.js'
|
|
10
|
-
|
|
11
|
-
export default class FakeWorker {
|
|
12
|
-
public static callsToConstructor: {
|
|
13
|
-
filename: string | URL
|
|
14
|
-
options?: WorkerOptions
|
|
15
|
-
}[] = []
|
|
16
|
-
|
|
17
|
-
public static callsToPostMessage: WorkerMessage[] = []
|
|
18
|
-
|
|
19
|
-
public static callsToOn: {
|
|
20
|
-
type: string
|
|
21
|
-
listener: (...args: unknown[]) => void
|
|
22
|
-
}[] = []
|
|
23
|
-
|
|
24
|
-
public static inletWorker = new StreamInletWorker()
|
|
25
|
-
public static fakeOnData: OnDataCallback
|
|
26
|
-
|
|
27
|
-
public createInletPromise?: Promise<void>
|
|
28
|
-
|
|
29
|
-
public constructor(filename: string | URL, options?: WorkerOptions) {
|
|
30
|
-
FakeWorker.callsToConstructor.push({ filename, options })
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
public postMessage(msg: WorkerMessage) {
|
|
34
|
-
FakeWorker.callsToPostMessage.push(msg)
|
|
35
|
-
|
|
36
|
-
const { type } = msg
|
|
37
|
-
|
|
38
|
-
switch (type) {
|
|
39
|
-
case 'createOutlet': {
|
|
40
|
-
createOutlet(msg as any)
|
|
41
|
-
break
|
|
42
|
-
}
|
|
43
|
-
case 'pushSample': {
|
|
44
|
-
pushSample(msg as any)
|
|
45
|
-
break
|
|
46
|
-
}
|
|
47
|
-
case 'destroyOutlet': {
|
|
48
|
-
destroyOutlet()
|
|
49
|
-
break
|
|
50
|
-
}
|
|
51
|
-
case 'createInlet': {
|
|
52
|
-
const { payload } = msg
|
|
53
|
-
this.createInletPromise = this.inletWorker.createInlet(
|
|
54
|
-
payload as any
|
|
55
|
-
)
|
|
56
|
-
break
|
|
57
|
-
}
|
|
58
|
-
case 'startPulling': {
|
|
59
|
-
this.inletWorker.startPulling(this.fakeOnData)
|
|
60
|
-
break
|
|
61
|
-
}
|
|
62
|
-
case 'flushInlet': {
|
|
63
|
-
this.inletWorker.flushInlet()
|
|
64
|
-
break
|
|
65
|
-
}
|
|
66
|
-
case 'stopPulling': {
|
|
67
|
-
this.inletWorker.stopPulling()
|
|
68
|
-
break
|
|
69
|
-
}
|
|
70
|
-
case 'destroyInlet': {
|
|
71
|
-
this.inletWorker.destroyInlet()
|
|
72
|
-
break
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
public on(type: string, listener: (...args: unknown[]) => void) {
|
|
78
|
-
FakeWorker.callsToOn.push({ type, listener })
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
private get inletWorker() {
|
|
82
|
-
return FakeWorker.inletWorker
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
private get fakeOnData() {
|
|
86
|
-
return FakeWorker.fakeOnData
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
public static resetTestDoubles() {
|
|
90
|
-
this.callsToConstructor = []
|
|
91
|
-
this.callsToPostMessage = []
|
|
92
|
-
this.callsToOn = []
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
export interface WorkerMessage {
|
|
97
|
-
type: string
|
|
98
|
-
payload?: Record<string, unknown>[]
|
|
99
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|