@neurodevs/node-lsl 17.1.1 → 18.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/.claude/settings.local.json +10 -0
- package/.vscode/launch.json +54 -57
- package/.vscode/settings.json +61 -66
- package/.vscode/tasks.json +98 -129
- package/README.md +20 -44
- package/build/__tests__/AbstractPackageTest.d.ts +7 -5
- package/build/__tests__/AbstractPackageTest.js +22 -15
- package/build/__tests__/AbstractPackageTest.js.map +1 -1
- package/build/__tests__/impl/BleDeviceController.test.d.ts +54 -0
- package/build/__tests__/impl/BleDeviceController.test.js +333 -0
- package/build/__tests__/impl/BleDeviceController.test.js.map +1 -0
- package/build/__tests__/impl/LslEventMarkerEmitter.test.d.ts +34 -0
- package/build/__tests__/impl/LslEventMarkerEmitter.test.js +243 -0
- package/build/__tests__/impl/LslEventMarkerEmitter.test.js.map +1 -0
- package/build/__tests__/impl/LslStreamInfo.test.d.ts +0 -3
- package/build/__tests__/impl/LslStreamInfo.test.js +2 -27
- package/build/__tests__/impl/LslStreamInfo.test.js.map +1 -1
- package/build/__tests__/impl/LslStreamInlet.test.d.ts +20 -8
- package/build/__tests__/impl/LslStreamInlet.test.js +224 -69
- package/build/__tests__/impl/LslStreamInlet.test.js.map +1 -1
- package/build/__tests__/impl/LslStreamOutlet.test.d.ts +3 -7
- package/build/__tests__/impl/LslStreamOutlet.test.js +40 -50
- package/build/__tests__/impl/LslStreamOutlet.test.js.map +1 -1
- package/build/__tests__/impl/LslWebSocketBridge.test.js +19 -20
- package/build/__tests__/impl/LslWebSocketBridge.test.js.map +1 -1
- package/build/assertions.d.ts +1 -1
- package/build/assertions.js.map +1 -1
- package/build/impl/LslEventMarkerEmitter.d.ts +35 -0
- package/build/impl/LslEventMarkerEmitter.js +86 -0
- package/build/impl/LslEventMarkerEmitter.js.map +1 -0
- package/build/impl/LslStreamInfo.d.ts +4 -8
- package/build/impl/LslStreamInfo.js +8 -21
- package/build/impl/LslStreamInfo.js.map +1 -1
- package/build/impl/LslStreamInlet.d.ts +31 -50
- package/build/impl/LslStreamInlet.js +79 -149
- package/build/impl/LslStreamInlet.js.map +1 -1
- package/build/impl/LslStreamOutlet.d.ts +15 -18
- package/build/impl/LslStreamOutlet.js +39 -47
- package/build/impl/LslStreamOutlet.js.map +1 -1
- package/build/impl/LslWebSocketBridge.d.ts +4 -5
- package/build/impl/LslWebSocketBridge.js +10 -10
- package/build/impl/LslWebSocketBridge.js.map +1 -1
- package/build/impl/controllers/BleDeviceController.d.ts +58 -0
- package/build/impl/controllers/BleDeviceController.js +145 -0
- package/build/impl/controllers/BleDeviceController.js.map +1 -0
- package/build/impl/workers/inlet/LslStreamInlet.worker.d.ts +22 -0
- package/build/impl/workers/inlet/LslStreamInlet.worker.js +42 -0
- package/build/impl/workers/inlet/LslStreamInlet.worker.js.map +1 -0
- package/build/impl/workers/inlet/StreamInletWorker.d.ts +73 -0
- package/build/impl/workers/inlet/StreamInletWorker.js +253 -0
- package/build/impl/workers/inlet/StreamInletWorker.js.map +1 -0
- package/build/impl/workers/outlet/LslStreamOutlet.worker.d.ts +32 -0
- package/build/impl/workers/outlet/LslStreamOutlet.worker.js +82 -0
- package/build/impl/workers/outlet/LslStreamOutlet.worker.js.map +1 -0
- package/build/index.d.ts +14 -14
- package/build/index.js +16 -16
- package/build/index.js.map +1 -1
- package/build/scripts/discoverMuse.js +40 -0
- package/build/scripts/discoverMuse.js.map +1 -0
- package/build/scripts/finalizeHandles.d.ts +2 -0
- package/build/scripts/finalizeHandles.js +48 -0
- package/build/scripts/finalizeHandles.js.map +1 -0
- package/build/scripts/runLslEventMarkerEmitter.d.ts +1 -0
- package/build/scripts/runLslEventMarkerEmitter.js +11 -0
- package/build/scripts/runLslEventMarkerEmitter.js.map +1 -0
- package/build/scripts/runMuse.d.ts +1 -0
- package/build/scripts/runMuse.js +40 -0
- package/build/scripts/runMuse.js.map +1 -0
- package/build/scripts/runOutletToInlet.js +7 -6
- package/build/scripts/runOutletToInlet.js.map +1 -1
- package/build/scripts/testDestroyOutlet.d.ts +1 -0
- package/build/scripts/testDestroyOutlet.js +4 -0
- package/build/scripts/testDestroyOutlet.js.map +1 -0
- package/build/testDoubles/BleController/FakeBleController.d.ts +24 -0
- package/build/testDoubles/BleController/FakeBleController.js +42 -0
- package/build/testDoubles/BleController/FakeBleController.js.map +1 -0
- package/build/testDoubles/BleController/SpyBleController.d.ts +14 -0
- package/build/testDoubles/BleController/SpyBleController.js +48 -0
- package/build/testDoubles/BleController/SpyBleController.js.map +1 -0
- package/build/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.d.ts +17 -0
- package/build/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.js +30 -0
- package/build/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.js.map +1 -0
- package/build/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.d.ts +10 -0
- package/build/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js +23 -0
- package/build/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js.map +1 -0
- package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.d.ts +9 -0
- package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.js +19 -0
- package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.js.map +1 -0
- package/build/testDoubles/StreamInfo/FakeStreamInfo.d.ts +3 -3
- package/build/testDoubles/StreamInfo/FakeStreamInfo.js +3 -3
- package/build/testDoubles/StreamInfo/FakeStreamInfo.js.map +1 -1
- package/build/testDoubles/StreamInlet/FakeStreamInlet.d.ts +8 -10
- package/build/testDoubles/StreamInlet/FakeStreamInlet.js +6 -7
- package/build/testDoubles/StreamInlet/FakeStreamInlet.js.map +1 -1
- package/build/testDoubles/StreamInlet/SpyStreamInlet.d.ts +2 -5
- package/build/testDoubles/StreamInlet/SpyStreamInlet.js +2 -8
- package/build/testDoubles/StreamInlet/SpyStreamInlet.js.map +1 -1
- package/build/testDoubles/StreamOutlet/FakeStreamOutlet.d.ts +7 -9
- package/build/testDoubles/StreamOutlet/FakeStreamOutlet.js +8 -8
- package/build/testDoubles/StreamOutlet/FakeStreamOutlet.js.map +1 -1
- package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.d.ts +1 -1
- package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.js +1 -1
- package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.js.map +1 -1
- package/build/testDoubles/WorkerThreads/FakeWorker.d.ts +27 -0
- package/build/testDoubles/WorkerThreads/FakeWorker.js +67 -0
- package/build/testDoubles/WorkerThreads/FakeWorker.js.map +1 -0
- package/build/testDoubles/generateRandomOutletOptions.js +1 -1
- package/build/testDoubles/generateRandomOutletOptions.js.map +1 -1
- package/build/validations.js +0 -2
- package/build/validations.js.map +1 -1
- package/eslint.config.js +3 -0
- package/package.json +27 -49
- package/prettier.config.js +3 -0
- package/src/__tests__/AbstractPackageTest.ts +38 -21
- package/src/__tests__/impl/BleDeviceController.test.ts +492 -0
- package/src/__tests__/impl/LslEventMarkerEmitter.test.ts +323 -0
- package/src/__tests__/impl/LslStreamInfo.test.ts +3 -40
- package/src/__tests__/impl/LslStreamInlet.test.ts +344 -97
- package/src/__tests__/impl/LslStreamOutlet.test.ts +65 -73
- package/src/__tests__/impl/LslWebSocketBridge.test.ts +22 -21
- package/src/assertions.ts +2 -1
- package/src/impl/LslEventMarkerEmitter.ts +133 -0
- package/src/impl/LslStreamInfo.ts +17 -29
- package/src/impl/LslStreamInlet.ts +102 -215
- package/src/impl/LslStreamOutlet.ts +54 -78
- package/src/impl/LslWebSocketBridge.ts +14 -14
- package/src/impl/controllers/BleDeviceController.ts +223 -0
- package/src/impl/workers/inlet/LslStreamInlet.worker.ts +74 -0
- package/src/impl/workers/inlet/StreamInletWorker.ts +348 -0
- package/src/impl/workers/outlet/LslStreamOutlet.worker.ts +144 -0
- package/src/index.ts +16 -16
- package/src/scripts/discoverMuse.ts +50 -0
- package/src/scripts/finalizeHandles.ts +63 -0
- package/src/scripts/runLslEventMarkerEmitter.ts +15 -0
- package/src/scripts/runMuse.ts +50 -0
- package/src/scripts/runOutletToInlet.ts +10 -8
- package/src/scripts/testDestroyOutlet.ts +5 -0
- package/src/testDoubles/BleController/FakeBleController.ts +70 -0
- package/src/testDoubles/BleController/SpyBleController.ts +61 -0
- package/src/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.ts +46 -0
- package/src/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.ts +31 -0
- package/src/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.ts +29 -0
- package/src/testDoubles/StreamInfo/FakeStreamInfo.ts +4 -4
- package/src/testDoubles/StreamInlet/FakeStreamInlet.ts +11 -17
- package/src/testDoubles/StreamInlet/SpyStreamInlet.ts +3 -16
- package/src/testDoubles/StreamOutlet/FakeStreamOutlet.ts +15 -15
- package/src/testDoubles/WebSocketBridge/FakeWebSocketBridge.ts +1 -1
- package/src/testDoubles/WorkerThreads/FakeWorker.ts +99 -0
- package/src/testDoubles/generateRandomOutletOptions.ts +2 -1
- package/src/validations.ts +0 -2
- package/tsconfig.json +23 -27
- package/build/.spruce/settings.json +0 -11
- package/build/__tests__/impl/LiblslAdapter.test.d.ts +0 -79
- package/build/__tests__/impl/LiblslAdapter.test.js +0 -688
- package/build/__tests__/impl/LiblslAdapter.test.js.map +0 -1
- package/build/__tests__/impl/LslEventMarkerOutlet.test.d.ts +0 -21
- package/build/__tests__/impl/LslEventMarkerOutlet.test.js +0 -160
- package/build/__tests__/impl/LslEventMarkerOutlet.test.js.map +0 -1
- package/build/handleError.d.ts +0 -8
- package/build/handleError.js +0 -25
- package/build/handleError.js.map +0 -1
- package/build/impl/LiblslAdapter.d.ts +0 -154
- package/build/impl/LiblslAdapter.js +0 -317
- package/build/impl/LiblslAdapter.js.map +0 -1
- package/build/impl/LslEventMarkerOutlet.d.ts +0 -28
- package/build/impl/LslEventMarkerOutlet.js +0 -63
- package/build/impl/LslEventMarkerOutlet.js.map +0 -1
- package/build/scripts/runLslEventMarkerOutlet.js +0 -18
- package/build/scripts/runLslEventMarkerOutlet.js.map +0 -1
- package/build/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.d.ts +0 -13
- package/build/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.js +0 -26
- package/build/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.js.map +0 -1
- package/build/testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.d.ts +0 -17
- package/build/testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.js +0 -46
- package/build/testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.js.map +0 -1
- package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.d.ts +0 -9
- package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.js +0 -19
- package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.js.map +0 -1
- package/build/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.d.ts +0 -9
- package/build/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.js +0 -19
- package/build/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.js.map +0 -1
- package/build/testDoubles/Liblsl/FakeLiblsl.d.ts +0 -50
- package/build/testDoubles/Liblsl/FakeLiblsl.js +0 -126
- package/build/testDoubles/Liblsl/FakeLiblsl.js.map +0 -1
- package/eslint.config.mjs +0 -3
- package/src/.spruce/settings.json +0 -11
- package/src/__tests__/impl/LiblslAdapter.test.ts +0 -817
- package/src/__tests__/impl/LslEventMarkerOutlet.test.ts +0 -195
- package/src/handleError.ts +0 -24
- package/src/impl/LiblslAdapter.ts +0 -543
- package/src/impl/LslEventMarkerOutlet.ts +0 -97
- package/src/scripts/runLslEventMarkerOutlet.ts +0 -23
- package/src/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.ts +0 -36
- package/src/testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.ts +0 -75
- package/src/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.ts +0 -24
- package/src/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.ts +0 -28
- package/src/testDoubles/Liblsl/FakeLiblsl.ts +0 -182
- /package/build/scripts/{runLslEventMarkerOutlet.d.ts → discoverMuse.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LslStreamOutlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/LslStreamOutlet.test.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"LslStreamOutlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/LslStreamOutlet.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { randomInt } from 'crypto';
|
|
7
|
+
import { randomInt } from 'node:crypto';
|
|
8
8
|
import { test, assert } from '@neurodevs/node-tdd';
|
|
9
9
|
import LslWebSocketBridge from '../../impl/LslWebSocketBridge.js';
|
|
10
|
-
import FakeStreamInfo from '../../testDoubles/StreamInfo/FakeStreamInfo.js';
|
|
11
10
|
import FakeStreamInlet from '../../testDoubles/StreamInlet/FakeStreamInlet.js';
|
|
12
11
|
import FakeWebSocket from '../../testDoubles/WebSockets/FakeWebSocket.js';
|
|
13
12
|
import FakeWebSocketServer from '../../testDoubles/WebSockets/FakeWebSocketServer.js';
|
|
@@ -29,19 +28,19 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
29
28
|
}
|
|
30
29
|
static async createsLslStreamInlet() {
|
|
31
30
|
const call = FakeStreamInlet.callsToConstructor[0];
|
|
32
|
-
const
|
|
33
|
-
const chunkSize = call
|
|
31
|
+
const sourceId = call.options.sourceId;
|
|
32
|
+
const chunkSize = call.options.chunkSize;
|
|
34
33
|
assert.isEqualDeep({
|
|
35
|
-
|
|
34
|
+
sourceId,
|
|
36
35
|
chunkSize,
|
|
37
36
|
}, this.inletOptions);
|
|
38
37
|
}
|
|
39
38
|
static async activateCallsStartPullingOnInlet() {
|
|
40
|
-
this.activate();
|
|
39
|
+
await this.activate();
|
|
41
40
|
assert.isEqual(FakeStreamInlet.numCallsToStartPulling, 1, 'Did not call startPulling on inlet!');
|
|
42
41
|
}
|
|
43
42
|
static async deactivateCallsStopPullingOnInlet() {
|
|
44
|
-
this.activate();
|
|
43
|
+
await this.activate();
|
|
45
44
|
this.deactivate();
|
|
46
45
|
assert.isEqual(FakeStreamInlet.numCallsToStopPulling, 1, 'Did not call stopPulling on inlet!');
|
|
47
46
|
}
|
|
@@ -53,7 +52,7 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
53
52
|
assert.isEqualDeep(FakeWebSocketServer.callsToConstructor[0], { port: this.listenPort }, 'Did not create WebSocketServer!');
|
|
54
53
|
}
|
|
55
54
|
static async activateSendsDataToWebSocketClients() {
|
|
56
|
-
this.activate();
|
|
55
|
+
await this.activate();
|
|
57
56
|
const { samples, timestamps } = this.simulateOnDataCallback();
|
|
58
57
|
for (const client of FakeWebSocketServer.clients) {
|
|
59
58
|
const callToClient = FakeWebSocket.callsToSend.filter((c) => c.id === client.id)[0];
|
|
@@ -67,7 +66,7 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
67
66
|
for (const client of FakeWebSocketServer.clients) {
|
|
68
67
|
client.readyState = WebSocket.CONNECTING;
|
|
69
68
|
}
|
|
70
|
-
this.activate();
|
|
69
|
+
await this.activate();
|
|
71
70
|
this.simulateOnDataCallback();
|
|
72
71
|
const calls = FakeWebSocket.callsToSend.filter((call) => Array.from(FakeWebSocketServer.clients).some((client) => client.id === call.id));
|
|
73
72
|
assert.isEqual(calls.length, 0, 'Sent data to clients that are not ready!');
|
|
@@ -78,15 +77,15 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
78
77
|
}
|
|
79
78
|
static async throwsIfActivateIsCalledAfterDestroy() {
|
|
80
79
|
this.destroy();
|
|
81
|
-
assert.
|
|
82
|
-
this.activate();
|
|
83
|
-
}, `\n\
|
|
80
|
+
await assert.doesThrowAsync(async () => {
|
|
81
|
+
await this.activate();
|
|
82
|
+
}, `\n\nCannot activate bridge after destroying it! \n\nPlease create and activate a new instance. \n`);
|
|
84
83
|
}
|
|
85
84
|
static async throwsIfDeactivateIsCalledAfterDestroy() {
|
|
86
85
|
this.destroy();
|
|
87
86
|
assert.doesThrow(() => {
|
|
88
87
|
this.deactivate();
|
|
89
|
-
}, `\n\
|
|
88
|
+
}, `\n\nCannot deactivate bridge after destroying it! \n\nPlease create and activate a new instance. \n`);
|
|
90
89
|
}
|
|
91
90
|
static async createsWebSocketServerFromPort() {
|
|
92
91
|
assert.isEqual(FakeWebSocketServer.callsToConstructor[0]?.port, this.listenPort, 'Did not create WebSocketServer with port!');
|
|
@@ -95,7 +94,7 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
95
94
|
assert.isEqualDeep(FakeWebSocket.callsToConstructor, this.connectUrls, 'Did not create WebSockets for remote URLs!');
|
|
96
95
|
}
|
|
97
96
|
static async activateSendsDataToRemoteSockets() {
|
|
98
|
-
this.activate();
|
|
97
|
+
await this.activate();
|
|
99
98
|
const { samples, timestamps } = this.simulateOnDataCallback();
|
|
100
99
|
const expectedPayload = JSON.stringify({
|
|
101
100
|
samples,
|
|
@@ -111,7 +110,7 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
111
110
|
for (const socket of sockets) {
|
|
112
111
|
socket.readyState = WebSocket.CONNECTING;
|
|
113
112
|
}
|
|
114
|
-
this.activate();
|
|
113
|
+
await this.activate();
|
|
115
114
|
this.simulateOnDataCallback();
|
|
116
115
|
const calls = FakeWebSocket.callsToSend.filter((call) => sockets.some((socket) => socket.id === call.id));
|
|
117
116
|
assert.isEqual(calls.length, 0, 'Sent data to sockets that are not ready!');
|
|
@@ -128,8 +127,8 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
128
127
|
});
|
|
129
128
|
}, `At least one of listenPort or connectUrls must be provided!`);
|
|
130
129
|
}
|
|
131
|
-
static activate() {
|
|
132
|
-
this.instance.activate();
|
|
130
|
+
static async activate() {
|
|
131
|
+
await this.instance.activate();
|
|
133
132
|
}
|
|
134
133
|
static deactivate() {
|
|
135
134
|
this.instance.deactivate();
|
|
@@ -138,15 +137,15 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
138
137
|
this.instance.destroy();
|
|
139
138
|
}
|
|
140
139
|
static simulateOnDataCallback() {
|
|
141
|
-
const samples = new Float32Array([1, 2, 3, 4, 5, 6]);
|
|
142
|
-
const timestamps = new Float64Array([7, 8]);
|
|
140
|
+
const samples = [...new Float32Array([1, 2, 3, 4, 5, 6])];
|
|
141
|
+
const timestamps = [...new Float64Array([7, 8])];
|
|
143
142
|
FakeStreamInlet.callsToConstructor[0]?.onData(samples, timestamps);
|
|
144
143
|
return { samples, timestamps };
|
|
145
144
|
}
|
|
146
145
|
static listenPort = randomInt(1000, 5000);
|
|
147
146
|
static connectUrls = [this.generateId(), this.generateId()];
|
|
148
147
|
static inletOptions = {
|
|
149
|
-
|
|
148
|
+
sourceId: this.sourceId,
|
|
150
149
|
chunkSize: randomInt(1, 100),
|
|
151
150
|
};
|
|
152
151
|
static baseOptions = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LslWebSocketBridge.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/LslWebSocketBridge.test.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"LslWebSocketBridge.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/LslWebSocketBridge.test.ts"],"names":[],"mappings":"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"}
|
package/build/assertions.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChannelFormat } from '
|
|
1
|
+
import { ChannelFormat } from '@neurodevs/ndx-native';
|
|
2
2
|
export declare function assertValidChunkSize(chunkSize: number): void;
|
|
3
3
|
export declare function assertValidMaxBufferedMs(maxBufferedMs: number): void;
|
|
4
4
|
export declare function assertValidChannelFormat(channelFormat: ChannelFormat): void;
|
package/build/assertions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertions.js","sourceRoot":"","sources":["../src/assertions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assertions.js","sourceRoot":"","sources":["../src/assertions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EACH,0BAA0B,EAC1B,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,GAClB,MAAM,kBAAkB,CAAA;AAEzB,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IAClD,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACX,gEAAgE,SAAS,GAAG,CAC/E,CAAA;IACL,CAAC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,aAAqB;IAC1D,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACX,kEAAkE,aAAa,GAAG,CACrF,CAAA;IACL,CAAC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,aAA4B;IACjE,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,eAAe,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CACX,2CAA2C,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,aAAa,GAAG,CACjG,CAAA;IACL,CAAC;AACL,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,YAAoB;IACxD,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACX,gEAAgE,YAAY,GAAG,CAClF,CAAA;IACL,CAAC;AACL,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,YAAoB;IACxD,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACX,2DAA2D,YAAY,GAAG,CAC7E,CAAA;IACL,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { StreamOutletOptions, StreamOutlet } from './LslStreamOutlet.js';
|
|
2
|
+
export default class LslEventMarkerEmitter implements EventMarkerEmitter {
|
|
3
|
+
static Class?: EventMarkerEmitterConstructor;
|
|
4
|
+
protected outlet: StreamOutlet;
|
|
5
|
+
private isRunning;
|
|
6
|
+
private waitResolve?;
|
|
7
|
+
private timeout?;
|
|
8
|
+
protected constructor(outlet: StreamOutlet);
|
|
9
|
+
static Create(options?: EventMarkerEmitterOptions): Promise<EventMarkerEmitter>;
|
|
10
|
+
emit(markerName: string, options?: EventMarkerOptions): Promise<void>;
|
|
11
|
+
private throwIfAlreadyRunning;
|
|
12
|
+
emitMany(markers: TimedEventMarker[]): Promise<void>;
|
|
13
|
+
private pushMarkerToOutlet;
|
|
14
|
+
protected wait(forMs: number): Promise<unknown>;
|
|
15
|
+
private setTimeout;
|
|
16
|
+
interrupt(): void;
|
|
17
|
+
destroy(): void;
|
|
18
|
+
private static generateDefaultOutletOptions;
|
|
19
|
+
private static LslStreamOutlet;
|
|
20
|
+
}
|
|
21
|
+
export interface EventMarkerEmitter {
|
|
22
|
+
emit(markerName: string, options?: EventMarkerOptions): Promise<void>;
|
|
23
|
+
emitMany(markers: TimedEventMarker[]): Promise<void>;
|
|
24
|
+
interrupt(): void;
|
|
25
|
+
destroy(): void;
|
|
26
|
+
}
|
|
27
|
+
export type EventMarkerEmitterOptions = Partial<StreamOutletOptions>;
|
|
28
|
+
export type EventMarkerEmitterConstructor = new (outlet: StreamOutlet) => EventMarkerEmitter;
|
|
29
|
+
export interface EventMarkerOptions {
|
|
30
|
+
waitAfterMs?: number;
|
|
31
|
+
}
|
|
32
|
+
export interface TimedEventMarker {
|
|
33
|
+
name: string;
|
|
34
|
+
waitAfterMs: number;
|
|
35
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { generateShortId } from '@neurodevs/generate-id';
|
|
2
|
+
import LslStreamOutlet from './LslStreamOutlet.js';
|
|
3
|
+
export default class LslEventMarkerEmitter {
|
|
4
|
+
static Class;
|
|
5
|
+
outlet;
|
|
6
|
+
isRunning = false;
|
|
7
|
+
waitResolve;
|
|
8
|
+
timeout;
|
|
9
|
+
constructor(outlet) {
|
|
10
|
+
this.outlet = outlet;
|
|
11
|
+
}
|
|
12
|
+
static async Create(options) {
|
|
13
|
+
const outlet = await this.LslStreamOutlet(options);
|
|
14
|
+
return new (this.Class ?? this)(outlet);
|
|
15
|
+
}
|
|
16
|
+
async emit(markerName, options) {
|
|
17
|
+
this.throwIfAlreadyRunning('emit');
|
|
18
|
+
this.isRunning = true;
|
|
19
|
+
const { waitAfterMs } = options || {};
|
|
20
|
+
this.pushMarkerToOutlet(markerName);
|
|
21
|
+
if (waitAfterMs) {
|
|
22
|
+
await this.wait(waitAfterMs);
|
|
23
|
+
}
|
|
24
|
+
this.isRunning = false;
|
|
25
|
+
}
|
|
26
|
+
throwIfAlreadyRunning(methodName) {
|
|
27
|
+
if (this.isRunning) {
|
|
28
|
+
throw new Error(`Cannot call ${methodName} while already running!`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async emitMany(markers) {
|
|
32
|
+
this.throwIfAlreadyRunning('emitMany');
|
|
33
|
+
this.isRunning = true;
|
|
34
|
+
for (const marker of markers) {
|
|
35
|
+
const { name, waitAfterMs } = marker;
|
|
36
|
+
this.pushMarkerToOutlet(name);
|
|
37
|
+
await this.wait(waitAfterMs);
|
|
38
|
+
if (!this.isRunning) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
this.isRunning = false;
|
|
43
|
+
}
|
|
44
|
+
pushMarkerToOutlet(markerName) {
|
|
45
|
+
this.outlet.pushSample([markerName]);
|
|
46
|
+
}
|
|
47
|
+
async wait(forMs) {
|
|
48
|
+
return new Promise((resolve) => this.setTimeout(resolve, forMs));
|
|
49
|
+
}
|
|
50
|
+
setTimeout(resolve, waitAfterMs) {
|
|
51
|
+
this.waitResolve = resolve;
|
|
52
|
+
this.timeout = setTimeout(resolve, waitAfterMs);
|
|
53
|
+
}
|
|
54
|
+
interrupt() {
|
|
55
|
+
this.waitResolve?.();
|
|
56
|
+
clearTimeout(this.timeout);
|
|
57
|
+
this.isRunning = false;
|
|
58
|
+
}
|
|
59
|
+
destroy() {
|
|
60
|
+
if (this.isRunning) {
|
|
61
|
+
this.interrupt();
|
|
62
|
+
}
|
|
63
|
+
this.outlet.destroy();
|
|
64
|
+
}
|
|
65
|
+
static generateDefaultOutletOptions() {
|
|
66
|
+
const uniqueId = generateShortId();
|
|
67
|
+
const name = `Event markers (${uniqueId})`;
|
|
68
|
+
const sourceId = `event-markers-${uniqueId}`;
|
|
69
|
+
return {
|
|
70
|
+
name,
|
|
71
|
+
type: 'Markers',
|
|
72
|
+
sourceId,
|
|
73
|
+
channelNames: ['Markers'],
|
|
74
|
+
channelFormat: 'string',
|
|
75
|
+
sampleRateHz: 0,
|
|
76
|
+
chunkSize: 1,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
static LslStreamOutlet(options) {
|
|
80
|
+
return LslStreamOutlet.Create({
|
|
81
|
+
...this.generateDefaultOutletOptions(),
|
|
82
|
+
...options,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=LslEventMarkerEmitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LslEventMarkerEmitter.js","sourceRoot":"","sources":["../../src/impl/LslEventMarkerEmitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ChannelFormat, InfoHandle } from '@neurodevs/ndx-native';
|
|
2
2
|
export default class LslStreamInfo implements StreamInfo {
|
|
3
3
|
static Class?: StreamInfoConstructor;
|
|
4
|
-
private static instanceCache;
|
|
5
4
|
readonly name: string;
|
|
6
5
|
readonly type: string;
|
|
7
6
|
readonly sourceId: string;
|
|
@@ -10,11 +9,10 @@ export default class LslStreamInfo implements StreamInfo {
|
|
|
10
9
|
readonly channelFormat: ChannelFormat;
|
|
11
10
|
readonly sampleRateHz: number;
|
|
12
11
|
readonly units: string;
|
|
13
|
-
readonly
|
|
12
|
+
readonly infoHandle: InfoHandle;
|
|
14
13
|
private lsl;
|
|
15
14
|
protected constructor(options: StreamInfoOptions);
|
|
16
15
|
static Create(options: StreamInfoOptions): StreamInfo;
|
|
17
|
-
static From(handle: BoundStreamInfo): StreamInfo;
|
|
18
16
|
private createStreamInfo;
|
|
19
17
|
private get lslChannelFormat();
|
|
20
18
|
private appendChannelsToStreamInfo;
|
|
@@ -30,9 +28,9 @@ export interface StreamInfo {
|
|
|
30
28
|
readonly channelCount: number;
|
|
31
29
|
readonly channelFormat: ChannelFormat;
|
|
32
30
|
readonly sampleRateHz: number;
|
|
33
|
-
readonly
|
|
31
|
+
readonly infoHandle: InfoHandle;
|
|
34
32
|
}
|
|
35
|
-
type StreamInfoConstructor = new (options: StreamInfoOptions) => StreamInfo;
|
|
33
|
+
export type StreamInfoConstructor = new (options: StreamInfoOptions) => StreamInfo;
|
|
36
34
|
export interface StreamInfoOptions {
|
|
37
35
|
channelNames: string[];
|
|
38
36
|
channelFormat: ChannelFormat;
|
|
@@ -41,6 +39,4 @@ export interface StreamInfoOptions {
|
|
|
41
39
|
type?: string;
|
|
42
40
|
sourceId?: string;
|
|
43
41
|
units?: string;
|
|
44
|
-
boundInfo?: BoundStreamInfo;
|
|
45
42
|
}
|
|
46
|
-
export {};
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import generateId from '@neurodevs/generate-id';
|
|
2
|
-
import { CHANNEL_FORMATS_MAP } from '
|
|
3
|
-
import LiblslAdapter from './LiblslAdapter.js';
|
|
2
|
+
import { LiblslAdapter, CHANNEL_FORMATS_MAP, } from '@neurodevs/ndx-native';
|
|
4
3
|
export default class LslStreamInfo {
|
|
5
4
|
static Class;
|
|
6
|
-
static instanceCache = new Map();
|
|
7
5
|
name;
|
|
8
6
|
type;
|
|
9
7
|
sourceId;
|
|
@@ -12,10 +10,10 @@ export default class LslStreamInfo {
|
|
|
12
10
|
channelFormat;
|
|
13
11
|
sampleRateHz;
|
|
14
12
|
units;
|
|
15
|
-
|
|
13
|
+
infoHandle;
|
|
16
14
|
lsl = LiblslAdapter.getInstance();
|
|
17
15
|
constructor(options) {
|
|
18
|
-
const { name = `lsl-stream-info-${generateId()}`, type = generateId(), sourceId = generateId(), channelNames, channelFormat, sampleRateHz, units = 'N/A',
|
|
16
|
+
const { name = `lsl-stream-info-${generateId()}`, type = generateId(), sourceId = generateId(), channelNames, channelFormat, sampleRateHz, units = 'N/A', } = options;
|
|
19
17
|
this.name = name;
|
|
20
18
|
this.type = type;
|
|
21
19
|
this.sourceId = sourceId;
|
|
@@ -24,22 +22,11 @@ export default class LslStreamInfo {
|
|
|
24
22
|
this.channelFormat = channelFormat;
|
|
25
23
|
this.sampleRateHz = sampleRateHz;
|
|
26
24
|
this.units = units;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
this.appendChannelsToStreamInfo();
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
this.boundInfo = boundInfo;
|
|
33
|
-
}
|
|
25
|
+
this.infoHandle = this.createStreamInfo();
|
|
26
|
+
this.appendChannelsToStreamInfo();
|
|
34
27
|
}
|
|
35
28
|
static Create(options) {
|
|
36
|
-
|
|
37
|
-
const { boundInfo: handle } = instance;
|
|
38
|
-
this.instanceCache.set(handle, instance);
|
|
39
|
-
return instance;
|
|
40
|
-
}
|
|
41
|
-
static From(handle) {
|
|
42
|
-
return this.instanceCache.get(handle);
|
|
29
|
+
return new (this.Class ?? this)(options);
|
|
43
30
|
}
|
|
44
31
|
createStreamInfo() {
|
|
45
32
|
return this.lsl.createStreamInfo({
|
|
@@ -56,7 +43,7 @@ export default class LslStreamInfo {
|
|
|
56
43
|
}
|
|
57
44
|
appendChannelsToStreamInfo() {
|
|
58
45
|
this.lsl.appendChannelsToStreamInfo({
|
|
59
|
-
|
|
46
|
+
infoHandle: this.infoHandle,
|
|
60
47
|
channels: this.channelNames.map((label) => ({
|
|
61
48
|
label,
|
|
62
49
|
units: this.units,
|
|
@@ -65,7 +52,7 @@ export default class LslStreamInfo {
|
|
|
65
52
|
});
|
|
66
53
|
}
|
|
67
54
|
destroy() {
|
|
68
|
-
this.lsl.destroyStreamInfo({
|
|
55
|
+
this.lsl.destroyStreamInfo({ infoHandle: this.infoHandle });
|
|
69
56
|
}
|
|
70
57
|
}
|
|
71
58
|
//# sourceMappingURL=LslStreamInfo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LslStreamInfo.js","sourceRoot":"","sources":["../../src/impl/LslStreamInfo.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"LslStreamInfo.js","sourceRoot":"","sources":["../../src/impl/LslStreamInfo.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAGH,aAAa,EACb,mBAAmB,GACtB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,CAAC,OAAO,OAAO,aAAa;IACvB,MAAM,CAAC,KAAK,CAAwB;IAE3B,IAAI,CAAQ;IACZ,IAAI,CAAQ;IACZ,QAAQ,CAAQ;IAChB,YAAY,CAAU;IACtB,YAAY,CAAQ;IACpB,aAAa,CAAe;IAC5B,YAAY,CAAQ;IACpB,KAAK,CAAQ;IAEb,UAAU,CAAY;IAE9B,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAA;IAEzC,YAAsB,OAA0B;QAC5C,MAAM,EACF,IAAI,GAAG,mBAAmB,UAAU,EAAE,EAAE,EACxC,IAAI,GAAG,UAAU,EAAE,EACnB,QAAQ,GAAG,UAAU,EAAE,EACvB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,KAAK,GAAG,KAAK,GAChB,GAAG,OAAO,CAAA;QAEX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,MAAM,CAAA;QACvC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAElB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACzC,IAAI,CAAC,0BAA0B,EAAE,CAAA;IACrC,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,OAA0B;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC;IAEO,gBAAgB;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,IAAI,CAAC,gBAAgB;YACpC,YAAY,EAAE,IAAI,CAAC,YAAY;SAClC,CAAC,CAAA;IACN,CAAC;IAED,IAAY,gBAAgB;QACxB,OAAO,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAClD,CAAC;IAEO,0BAA0B;QAC9B,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;YAChC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC;gBAChD,KAAK;gBACL,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;aAClB,CAAC,CAAC;SACN,CAAC,CAAA;IACN,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;IAC/D,CAAC;CACJ"}
|
|
@@ -1,69 +1,50 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { StreamInfo } from './LslStreamInfo.js';
|
|
1
|
+
import { Worker } from 'node:worker_threads';
|
|
3
2
|
export default class LslStreamInlet implements StreamInlet {
|
|
4
3
|
static Class?: StreamInletConstructor;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
private
|
|
4
|
+
static Worker: typeof Worker;
|
|
5
|
+
static waitAfterOpenStreamMs: number;
|
|
6
|
+
private sourceId;
|
|
8
7
|
private chunkSize;
|
|
9
8
|
private maxBufferedMs;
|
|
10
|
-
private
|
|
9
|
+
private pullTimeoutMs;
|
|
10
|
+
private openStreamTimeoutMs;
|
|
11
|
+
private waitAfterOpenStreamMs;
|
|
12
|
+
private waitBetweenPullsMs;
|
|
13
|
+
private flushInletOnStop;
|
|
11
14
|
private onData;
|
|
12
|
-
|
|
13
|
-
private
|
|
14
|
-
private dataBuffer;
|
|
15
|
-
private wrappedDataBufferPtr;
|
|
16
|
-
private dataBufferPtr;
|
|
17
|
-
private timestampBuffer;
|
|
18
|
-
private wrappedTimestampBufferPtr;
|
|
19
|
-
private timestampBufferPtr;
|
|
20
|
-
private errorCodeBuffer;
|
|
21
|
-
private wrappedErrorCodeBufferPtr;
|
|
22
|
-
private errorCodeBufferPtr;
|
|
15
|
+
private worker;
|
|
16
|
+
private workerReady;
|
|
23
17
|
private readonly sixMinutesInMs;
|
|
24
|
-
private
|
|
25
|
-
|
|
18
|
+
private readonly aboutOneYearInMs;
|
|
19
|
+
isRunning: boolean;
|
|
20
|
+
protected constructor(options: StreamInletOptions, onData: OnDataCallback);
|
|
26
21
|
static Create(options: StreamInletOptions, onData: OnDataCallback): Promise<StreamInlet>;
|
|
27
|
-
private
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
private
|
|
31
|
-
private createDataBuffer;
|
|
32
|
-
private readonly bytesPerFloat;
|
|
33
|
-
private createTimestampBuffer;
|
|
34
|
-
private readonly bytesPerDouble;
|
|
35
|
-
private createErrorCodeBuffer;
|
|
36
|
-
private readonly bytesPerInt;
|
|
37
|
-
private createPointersToBuffers;
|
|
38
|
-
private createDataBufferPtr;
|
|
39
|
-
private createTimestampBufferPtr;
|
|
40
|
-
private createErrorCodeBufferPtr;
|
|
41
|
-
private pullOnLoop;
|
|
42
|
-
private pullSample;
|
|
43
|
-
private callPullSampleBinding;
|
|
44
|
-
private createFloatArrayFromDataBuffer;
|
|
45
|
-
private pullChunk;
|
|
46
|
-
private callPullChunkBinding;
|
|
47
|
-
private createDoubleArrayFromTimestampBuffer;
|
|
48
|
-
private handleErrorCodeIfPresent;
|
|
22
|
+
private createWorkerThread;
|
|
23
|
+
startPulling(): Promise<void>;
|
|
24
|
+
private postCreate;
|
|
25
|
+
private postStartPulling;
|
|
49
26
|
stopPulling(): void;
|
|
50
|
-
|
|
27
|
+
flushInlet(): void;
|
|
51
28
|
destroy(): void;
|
|
52
|
-
private
|
|
29
|
+
private get defaultWaitMs();
|
|
30
|
+
private get Worker();
|
|
53
31
|
}
|
|
54
32
|
export interface StreamInlet {
|
|
55
|
-
startPulling(): void
|
|
33
|
+
startPulling(): Promise<void>;
|
|
56
34
|
stopPulling(): void;
|
|
57
|
-
|
|
35
|
+
flushInlet(): void;
|
|
58
36
|
destroy(): void;
|
|
59
37
|
readonly isRunning: boolean;
|
|
60
38
|
}
|
|
61
|
-
export type StreamInletConstructor = new (
|
|
39
|
+
export type StreamInletConstructor = new (options: StreamInletOptions, onData: OnDataCallback) => StreamInlet;
|
|
62
40
|
export interface StreamInletOptions {
|
|
63
|
-
|
|
41
|
+
sourceId: string;
|
|
64
42
|
chunkSize: number;
|
|
65
43
|
maxBufferedMs?: number;
|
|
66
|
-
|
|
44
|
+
openStreamTimeoutMs?: number;
|
|
45
|
+
waitAfterOpenStreamMs?: number;
|
|
46
|
+
pullTimeoutMs?: number;
|
|
47
|
+
waitBetweenPullsMs?: number;
|
|
48
|
+
flushInletOnStop?: boolean;
|
|
67
49
|
}
|
|
68
|
-
export type
|
|
69
|
-
export type OnDataCallback = (samples: Float32Array, timestamps: Float64Array) => void;
|
|
50
|
+
export type OnDataCallback = (samples: number[], timestamps: number[]) => void;
|