@neurodevs/node-lsl 17.1.1 → 18.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/.claude/settings.local.json +10 -0
- package/.regressionproof.json +7 -0
- package/.vscode/launch.json +3 -2
- package/README.md +9 -35
- package/build/.spruce/settings.json +5 -1
- package/build/__tests__/AbstractPackageTest.d.ts +4 -4
- package/build/__tests__/AbstractPackageTest.js +9 -11
- package/build/__tests__/AbstractPackageTest.js.map +1 -1
- package/build/__tests__/impl/LslBackpressureMonitor.test.d.ts +7 -0
- package/build/__tests__/impl/LslBackpressureMonitor.test.js +26 -0
- package/build/__tests__/impl/LslBackpressureMonitor.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 +36 -46
- package/build/__tests__/impl/LslStreamOutlet.test.js.map +1 -1
- package/build/__tests__/impl/LslWebSocketBridge.test.js +16 -17
- 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/LslBackpressureMonitor.d.ts +8 -0
- package/build/impl/LslBackpressureMonitor.js +8 -0
- package/build/impl/LslBackpressureMonitor.js.map +1 -0
- 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 +8 -8
- package/build/impl/LslWebSocketBridge.js.map +1 -1
- 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 +12 -14
- package/build/index.js +14 -16
- package/build/index.js.map +1 -1
- 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.js +11 -0
- package/build/scripts/runLslEventMarkerEmitter.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/BackpressureMonitor/FakeBackpressureMonitor.d.ts +6 -0
- package/build/testDoubles/BackpressureMonitor/FakeBackpressureMonitor.js +10 -0
- package/build/testDoubles/BackpressureMonitor/FakeBackpressureMonitor.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 +5 -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/validations.js +0 -2
- package/build/validations.js.map +1 -1
- package/package.json +23 -7
- package/src/.spruce/settings.json +5 -1
- package/src/__tests__/AbstractPackageTest.ts +12 -14
- package/src/__tests__/impl/LslBackpressureMonitor.test.ts +25 -0
- package/src/__tests__/impl/LslEventMarkerEmitter.test.ts +322 -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 +61 -69
- package/src/__tests__/impl/LslWebSocketBridge.test.ts +18 -18
- package/src/assertions.ts +2 -1
- package/src/impl/LslBackpressureMonitor.ts +13 -0
- 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 +12 -12
- 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 +14 -17
- package/src/scripts/finalizeHandles.ts +63 -0
- package/src/scripts/runLslEventMarkerEmitter.ts +15 -0
- package/src/scripts/runOutletToInlet.ts +10 -8
- package/src/scripts/testDestroyOutlet.ts +5 -0
- package/src/testDoubles/BackpressureMonitor/FakeBackpressureMonitor.ts +13 -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 +12 -15
- package/src/testDoubles/WebSocketBridge/FakeWebSocketBridge.ts +1 -1
- package/src/testDoubles/WorkerThreads/FakeWorker.ts +99 -0
- package/src/validations.ts +0 -2
- 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/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 → runLslEventMarkerEmitter.d.ts} +0 -0
|
@@ -4,13 +4,15 @@ 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 { FakeLiblsl } from '@neurodevs/ndx-native';
|
|
7
8
|
import { test, assert } from '@neurodevs/node-tdd';
|
|
8
9
|
import { CHANNEL_FORMATS } from '../../consts.js';
|
|
9
10
|
import LslStreamOutlet from '../../impl/LslStreamOutlet.js';
|
|
11
|
+
import { setOutletHandleError, setOutletLiblslAdapter, } from '../../impl/workers/outlet/LslStreamOutlet.worker.js';
|
|
10
12
|
import { TEST_SUPPORTED_CHANNEL_FORMATS, TEST_UNSUPPORTED_CHANNEL_FORMATS, } from '../../testDoubles/consts.js';
|
|
11
13
|
import generateRandomOutletOptions from '../../testDoubles/generateRandomOutletOptions.js';
|
|
12
|
-
import FakeLiblsl from '../../testDoubles/Liblsl/FakeLiblsl.js';
|
|
13
14
|
import FakeStreamInfo from '../../testDoubles/StreamInfo/FakeStreamInfo.js';
|
|
15
|
+
import FakeWorker from '../../testDoubles/WorkerThreads/FakeWorker.js';
|
|
14
16
|
import AbstractPackageTest from '../AbstractPackageTest.js';
|
|
15
17
|
export default class LslStreamOutletTest extends AbstractPackageTest {
|
|
16
18
|
static randomOutletOptions;
|
|
@@ -20,6 +22,9 @@ export default class LslStreamOutletTest extends AbstractPackageTest {
|
|
|
20
22
|
this.randomOutletOptions = generateRandomOutletOptions();
|
|
21
23
|
this.setFakeLiblsl();
|
|
22
24
|
this.setFakeStreamInfo();
|
|
25
|
+
LslStreamOutlet.Worker = FakeWorker;
|
|
26
|
+
FakeWorker.resetTestDoubles();
|
|
27
|
+
setOutletLiblslAdapter(this.fakeLiblsl);
|
|
23
28
|
}
|
|
24
29
|
static async throwsWithEmptyChannelNames() {
|
|
25
30
|
await this.assertThrowsWithEmptyChannelNames();
|
|
@@ -67,10 +72,10 @@ export default class LslStreamOutletTest extends AbstractPackageTest {
|
|
|
67
72
|
static async canPushFloatSampleToLsl(sample) {
|
|
68
73
|
const outlet = await this.FloatOutlet();
|
|
69
74
|
outlet.pushSample(sample);
|
|
70
|
-
assert.isEqual(this.fakeLiblsl.lastPushSampleFloatTimestampOptions?.
|
|
75
|
+
assert.isEqual(this.fakeLiblsl.lastPushSampleFloatTimestampOptions?.outletHandle, this.fakeLiblsl.outletHandle);
|
|
71
76
|
assert.isEqualDeep(this.fakeLiblsl.lastPushSampleFloatTimestampOptions?.sample, sample);
|
|
72
77
|
assert.isEqualDeep(this.fakeLiblsl.lastCreateOutletOptions, {
|
|
73
|
-
|
|
78
|
+
infoHandle: this.fakeLiblsl.infoHandle,
|
|
74
79
|
chunkSize: this.randomOutletOptions.chunkSize,
|
|
75
80
|
maxBufferedMs: this.randomOutletOptions.maxBufferedMs,
|
|
76
81
|
});
|
|
@@ -80,7 +85,7 @@ export default class LslStreamOutletTest extends AbstractPackageTest {
|
|
|
80
85
|
const sample = [this.generateId()];
|
|
81
86
|
const outlet = await this.StringOutlet();
|
|
82
87
|
outlet.pushSample(sample);
|
|
83
|
-
assert.isEqual(this.fakeLiblsl.lastPushSampleStringTimestampOptions?.
|
|
88
|
+
assert.isEqual(this.fakeLiblsl.lastPushSampleStringTimestampOptions?.outletHandle, this.fakeLiblsl.outletHandle);
|
|
84
89
|
assert.isEqualDeep(this.fakeLiblsl.lastPushSampleStringTimestampOptions?.sample, sample);
|
|
85
90
|
assert.isNumber(this.fakeLiblsl.lastPushSampleStringTimestampOptions?.timestamp);
|
|
86
91
|
}
|
|
@@ -120,7 +125,7 @@ export default class LslStreamOutletTest extends AbstractPackageTest {
|
|
|
120
125
|
static async destroyAlsoCallsDestroyStreamInfo() {
|
|
121
126
|
const outlet = await this.LslStreamOutlet();
|
|
122
127
|
outlet.destroy();
|
|
123
|
-
assert.isEqualDeep(this.fakeLiblsl.
|
|
128
|
+
assert.isEqualDeep(this.fakeLiblsl.lastDestroyOutletOptions, { outletHandle: this.fakeLiblsl.outletHandle }, 'Did not call destroy on outlet!');
|
|
124
129
|
}
|
|
125
130
|
static async pushSampleShouldNotCreateMultipleOutlets() {
|
|
126
131
|
const outlet = await this.FloatOutlet();
|
|
@@ -129,6 +134,24 @@ export default class LslStreamOutletTest extends AbstractPackageTest {
|
|
|
129
134
|
outlet.pushSample([3.0]);
|
|
130
135
|
assert.isEqual(this.fakeLiblsl.createOutletHitCount, 1);
|
|
131
136
|
}
|
|
137
|
+
static async pushSampleAcceptsOptionalPreciseTimestamp() {
|
|
138
|
+
const outlet = await this.FloatOutlet();
|
|
139
|
+
const fakeTimestamp = Math.random() * 1000;
|
|
140
|
+
outlet.pushSample([1.0], fakeTimestamp);
|
|
141
|
+
assert.isEqual(this.fakeLiblsl.lastPushSampleFloatTimestampOptions?.timestamp, fakeTimestamp);
|
|
142
|
+
}
|
|
143
|
+
static async pushSampleHandlesErrorCode() {
|
|
144
|
+
let passedErrorCode;
|
|
145
|
+
setOutletHandleError((errorCode) => {
|
|
146
|
+
passedErrorCode = errorCode;
|
|
147
|
+
});
|
|
148
|
+
FakeLiblsl.fakeErrorCode = [-4, -3, -2, -1, 0][Math.floor(Math.random() * 5)];
|
|
149
|
+
const outlet = Math.random() > 0.5
|
|
150
|
+
? await this.FloatOutlet()
|
|
151
|
+
: await this.StringOutlet();
|
|
152
|
+
outlet.pushSample([1.0]);
|
|
153
|
+
assert.isEqualDeep(passedErrorCode, FakeLiblsl.fakeErrorCode, 'Did not pass the expected error code to handleError!');
|
|
154
|
+
}
|
|
132
155
|
static async waitsForTenMsAfterConstructionBeforeReturning() {
|
|
133
156
|
const startMs = Date.now();
|
|
134
157
|
await this.LslStreamOutlet({ waitAfterConstructionMs: 10 });
|
|
@@ -147,30 +170,6 @@ export default class LslStreamOutletTest extends AbstractPackageTest {
|
|
|
147
170
|
const outlet = await this.LslStreamOutlet({ units: undefined });
|
|
148
171
|
assert.isEqualDeep(outlet['units'], 'N/A', 'Did not set units as N/A!');
|
|
149
172
|
}
|
|
150
|
-
static async throwsWithUnknownErrorCode() {
|
|
151
|
-
await this.assertThrowsWithErrorCode(-999, `An unknown liblsl error has occurred!`);
|
|
152
|
-
}
|
|
153
|
-
static async throwsWithErrorCodeNegativeOne() {
|
|
154
|
-
await this.assertThrowsWithErrorCode(-1, `The liblsl operation failed due to a timeout!`);
|
|
155
|
-
}
|
|
156
|
-
static async throwsWithErrorCodeNegativeTwo() {
|
|
157
|
-
await this.assertThrowsWithErrorCode(-2, `The liblsl stream has been lost!`);
|
|
158
|
-
}
|
|
159
|
-
static async throwsWithErrorCodeNegativeThree() {
|
|
160
|
-
await this.assertThrowsWithErrorCode(-3, 'A liblsl argument was incorrectly specified!');
|
|
161
|
-
}
|
|
162
|
-
static async throwsWithErrorCodeNegativeFour() {
|
|
163
|
-
await this.assertThrowsWithErrorCode(-4, 'An internal liblsl error has occurred!');
|
|
164
|
-
}
|
|
165
|
-
static async assertThrowsWithErrorCode(errorCode, message) {
|
|
166
|
-
FakeLiblsl.fakeErrorCode = errorCode;
|
|
167
|
-
const outlet = Math.random() > 0.5
|
|
168
|
-
? await this.FloatOutlet()
|
|
169
|
-
: await this.StringOutlet();
|
|
170
|
-
assert.doesThrow(() => {
|
|
171
|
-
outlet.pushSample([1.0]);
|
|
172
|
-
}, message);
|
|
173
|
-
}
|
|
174
173
|
static async assertThrowsWithEmptyChannelNames() {
|
|
175
174
|
await this.createAndAssertThrows('channelNames', [], `Invalid channel count! Must be a positive integer, not: 0.`);
|
|
176
175
|
}
|
|
@@ -260,34 +259,25 @@ __decorate([
|
|
|
260
259
|
], LslStreamOutletTest, "pushSampleShouldNotCreateMultipleOutlets", null);
|
|
261
260
|
__decorate([
|
|
262
261
|
test()
|
|
263
|
-
], LslStreamOutletTest, "
|
|
264
|
-
__decorate([
|
|
265
|
-
test()
|
|
266
|
-
], LslStreamOutletTest, "defaultsMaxBufferedMsToSixMinutesInSeconds", null);
|
|
262
|
+
], LslStreamOutletTest, "pushSampleAcceptsOptionalPreciseTimestamp", null);
|
|
267
263
|
__decorate([
|
|
268
264
|
test()
|
|
269
|
-
], LslStreamOutletTest, "
|
|
265
|
+
], LslStreamOutletTest, "pushSampleHandlesErrorCode", null);
|
|
270
266
|
__decorate([
|
|
271
267
|
test()
|
|
272
|
-
], LslStreamOutletTest, "
|
|
273
|
-
__decorate([
|
|
274
|
-
test()
|
|
275
|
-
], LslStreamOutletTest, "throwsWithUnknownErrorCode", null);
|
|
276
|
-
__decorate([
|
|
277
|
-
test()
|
|
278
|
-
], LslStreamOutletTest, "throwsWithErrorCodeNegativeOne", null);
|
|
268
|
+
], LslStreamOutletTest, "waitsForTenMsAfterConstructionBeforeReturning", null);
|
|
279
269
|
__decorate([
|
|
280
270
|
test()
|
|
281
|
-
], LslStreamOutletTest, "
|
|
271
|
+
], LslStreamOutletTest, "defaultsMaxBufferedMsToSixMinutesInSeconds", null);
|
|
282
272
|
__decorate([
|
|
283
273
|
test()
|
|
284
|
-
], LslStreamOutletTest, "
|
|
274
|
+
], LslStreamOutletTest, "defaultsManufacturerToNA", null);
|
|
285
275
|
__decorate([
|
|
286
276
|
test()
|
|
287
|
-
], LslStreamOutletTest, "
|
|
277
|
+
], LslStreamOutletTest, "defaultsUnitsToNA", null);
|
|
288
278
|
class CheckingOutlet extends LslStreamOutlet {
|
|
289
|
-
constructor(
|
|
290
|
-
super(
|
|
279
|
+
constructor(options) {
|
|
280
|
+
super(options);
|
|
291
281
|
}
|
|
292
282
|
}
|
|
293
283
|
//# sourceMappingURL=LslStreamOutlet.test.js.map
|
|
@@ -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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"}
|
|
@@ -7,7 +7,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
import { randomInt } from '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,8 +77,8 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
78
77
|
}
|
|
79
78
|
static async throwsIfActivateIsCalledAfterDestroy() {
|
|
80
79
|
this.destroy();
|
|
81
|
-
assert.
|
|
82
|
-
this.activate();
|
|
80
|
+
await assert.doesThrowAsync(async () => {
|
|
81
|
+
await this.activate();
|
|
83
82
|
}, `\n\n Cannot activate bridge after destroying it! \n\n Please create and activate a new instance. \n`);
|
|
84
83
|
}
|
|
85
84
|
static async throwsIfDeactivateIsCalledAfterDestroy() {
|
|
@@ -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,QAAQ,CAAA;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"LslWebSocketBridge.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/LslWebSocketBridge.test.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,kBAEN,MAAM,kCAAkC,CAAA;AACzC,OAAO,eAAe,MAAM,kDAAkD,CAAA;AAE9E,OAAO,aAAa,MAAM,+CAA+C,CAAA;AACzE,OAAO,mBAAmB,MAAM,qDAAqD,CAAA;AACrF,OAAO,mBAAmB,MAAM,2BAA2B,CAAA;AAE3D,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,mBAAmB;IAC3D,MAAM,CAAC,QAAQ,CAAuB;IAEpC,MAAM,CAAC,KAAK,CAAC,UAAU;QAC7B,MAAM,KAAK,CAAC,UAAU,EAAE,CAAA;QAExB,IAAI,CAAC,aAAa,EAAE,CAAA;QACpB,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACzB,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACvB,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAC7B,IAAI,CAAC,wBAAwB,EAAE,CAAA;QAE/B,IAAI,CAAC,QAAQ;YACT,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAA0B,CAAA;IAClE,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,eAAe;QAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAA;IAChE,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,qBAAqB;QACxC,MAAM,IAAI,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAA;QAElD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAQ,CAAC,QAAQ,CAAA;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAQ,CAAC,SAAS,CAAA;QAEzC,MAAM,CAAC,WAAW,CACd;YACI,QAAQ;YACR,SAAS;SACZ,EACD,IAAI,CAAC,YAAY,CACpB,CAAA;IACL,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,gCAAgC;QACnD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QAErB,MAAM,CAAC,OAAO,CACV,eAAe,CAAC,sBAAsB,EACtC,CAAC,EACD,qCAAqC,CACxC,CAAA;IACL,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,iCAAiC;QACpD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QACrB,IAAI,CAAC,UAAU,EAAE,CAAA;QAEjB,MAAM,CAAC,OAAO,CACV,eAAe,CAAC,qBAAqB,EACrC,CAAC,EACD,oCAAoC,CACvC,CAAA;IACL,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,0BAA0B;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAA;QAEd,MAAM,CAAC,OAAO,CACV,eAAe,CAAC,iBAAiB,EACjC,CAAC,EACD,gCAAgC,CACnC,CAAA;IACL,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,sBAAsB;QACzC,MAAM,CAAC,WAAW,CACd,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,CAAC,EACzC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,EACzB,iCAAiC,CACpC,CAAA;IACL,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,mCAAmC;QACtD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QAErB,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAE7D,KAAK,MAAM,MAAM,IAAI,mBAAmB,CAAC,OAAO,EAAE,CAAC;YAC/C,MAAM,YAAY,GAAG,aAAa,CAAC,WAAW,CAAC,MAAM,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAC5B,CAAC,CAAC,CAAC,CAAA;YAEJ,MAAM,CAAC,WAAW,CACd,YAAY,EAAE,IAAI,EAClB,IAAI,CAAC,SAAS,CAAC;gBACX,OAAO;gBACP,UAAU;aACb,CAAC,EACF,8BAA8B,CACjC,CAAA;QACL,CAAC;IACL,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,mCAAmC;QACtD,KAAK,MAAM,MAAM,IAAI,mBAAmB,CAAC,OAAO,EAAE,CAAC;YAC/C,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAA;QAC5C,CAAC;QAED,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QACrB,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAE7B,MAAM,KAAK,GAAG,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACpD,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAI,CACxC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CACpC,CACJ,CAAA;QAED,MAAM,CAAC,OAAO,CACV,KAAK,CAAC,MAAM,EACZ,CAAC,EACD,0CAA0C,CAC7C,CAAA;IACL,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,4BAA4B;QAC/C,IAAI,CAAC,OAAO,EAAE,CAAA;QAEd,MAAM,CAAC,OAAO,CACV,mBAAmB,CAAC,eAAe,EACnC,CAAC,EACD,wCAAwC,CAC3C,CAAA;IACL,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,oCAAoC;QACvD,IAAI,CAAC,OAAO,EAAE,CAAA;QAEd,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE;YACnC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QACzB,CAAC,EAAE,qGAAqG,CAAC,CAAA;IAC7G,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,sCAAsC;QACzD,IAAI,CAAC,OAAO,EAAE,CAAA;QAEd,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;YAClB,IAAI,CAAC,UAAU,EAAE,CAAA;QACrB,CAAC,EAAE,uGAAuG,CAAC,CAAA;IAC/G,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,8BAA8B;QACjD,MAAM,CAAC,OAAO,CACV,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,IAAI,EAC/C,IAAI,CAAC,UAAU,EACf,2CAA2C,CAC9C,CAAA;IACL,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,4BAA4B;QAC/C,MAAM,CAAC,WAAW,CACd,aAAa,CAAC,kBAAkB,EAChC,IAAI,CAAC,WAAW,EAChB,4CAA4C,CAC/C,CAAA;IACL,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,gCAAgC;QACnD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QAErB,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAE7D,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;YACnC,OAAO;YACP,UAAU;SACb,CAAC,CAAA;QAEF,MAAM,CAAC,OAAO,CACV,aAAa,CAAC,WAAW,CAAC,MAAM,EAChC,CAAC,EACD,sCAAsC,CACzC,CAAA;QAED,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,WAAW,EAAE,CAAC;YAC3C,MAAM,CAAC,WAAW,CACd,IAAI,CAAC,IAAI,EACT,eAAe,EACf,sCAAsC,CACzC,CAAA;QACL,CAAC;IACL,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,yCAAyC;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CACzB,eAAe,CACa,CAAA;QAEhC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAA;QAC5C,CAAC;QAED,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QACrB,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAE7B,MAAM,KAAK,GAAG,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACpD,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAClD,CAAA;QAED,MAAM,CAAC,OAAO,CACV,KAAK,CAAC,MAAM,EACZ,CAAC,EACD,0CAA0C,CAC7C,CAAA;IACL,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,6BAA6B;QAChD,IAAI,CAAC,OAAO,EAAE,CAAA;QAEd,MAAM,CAAC,OAAO,CACV,aAAa,CAAC,eAAe,EAC7B,IAAI,CAAC,WAAW,CAAC,MAAM,EACvB,kCAAkC,CACrC,CAAA;IACL,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,sCAAsC;QACzD,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE;YACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC;gBAC1B,UAAU,EAAE,SAAS;gBACrB,WAAW,EAAE,SAAS;aACzB,CAAC,CAAA;QACN,CAAC,EAAE,6DAA6D,CAAC,CAAA;IACrE,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,QAAQ;QACzB,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAA;IAClC,CAAC;IAEO,MAAM,CAAC,UAAU;QACrB,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAA;IAC9B,CAAC;IAEO,MAAM,CAAC,OAAO;QAClB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;IAC3B,CAAC;IAEO,MAAM,CAAC,sBAAsB;QACjC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACzD,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAEhD,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,MAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QACnE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAA;IAClC,CAAC;IAEO,MAAM,CAAU,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAElD,MAAM,CAAU,WAAW,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;IAEpE,MAAM,CAAU,YAAY,GAAuB;QACvD,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;KAC/B,CAAA;IAEO,MAAM,CAAU,WAAW,GAAG;QAClC,GAAG,IAAI,CAAC,YAAY;QACpB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;KAChC,CAAA;IAEO,MAAM,CAAC,kBAAkB,CAC7B,OAAyC;QAEzC,OAAO,kBAAkB,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;IACzE,CAAC;;AAxQsB;IADtB,IAAI,EAAE;mDAGN;AAGsB;IADtB,IAAI,EAAE;yDAcN;AAGsB;IADtB,IAAI,EAAE;oEASN;AAGsB;IADtB,IAAI,EAAE;qEAUN;AAGsB;IADtB,IAAI,EAAE;8DASN;AAGsB;IADtB,IAAI,EAAE;0DAON;AAGsB;IADtB,IAAI,EAAE;uEAoBN;AAGsB;IADtB,IAAI,EAAE;uEAoBN;AAGsB;IADtB,IAAI,EAAE;gEASN;AAGsB;IADtB,IAAI,EAAE;wEAON;AAGsB;IADtB,IAAI,EAAE;0EAON;AAGsB;IADtB,IAAI,EAAE;kEAON;AAGsB;IADtB,IAAI,EAAE;gEAON;AAGsB;IADtB,IAAI,EAAE;oEAwBN;AAGsB;IADtB,IAAI,EAAE;6EAsBN;AAGsB;IADtB,IAAI,EAAE;iEASN;AAGsB;IADtB,IAAI,EAAE;0EAQN"}
|
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,8 @@
|
|
|
1
|
+
export default class LslBackpressureMonitor implements BackpressureMonitor {
|
|
2
|
+
static Class?: BackpressureMonitorConstructor;
|
|
3
|
+
protected constructor();
|
|
4
|
+
static Create(): LslBackpressureMonitor;
|
|
5
|
+
}
|
|
6
|
+
export interface BackpressureMonitor {
|
|
7
|
+
}
|
|
8
|
+
export type BackpressureMonitorConstructor = new () => BackpressureMonitor;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LslBackpressureMonitor.js","sourceRoot":"","sources":["../../src/impl/LslBackpressureMonitor.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,sBAAsB;IAChC,MAAM,CAAC,KAAK,CAAiC;IAEpD,gBAAyB,CAAC;IAEnB,MAAM,CAAC,MAAM;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAA;IACrC,CAAC;CACJ"}
|
|
@@ -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"}
|