@neurodevs/node-lsl 13.0.1 → 14.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.js +1 -1
- package/build/__tests__/AbstractPackageTest.js.map +1 -1
- package/build/__tests__/impl/LslWebSocketBridge.test.d.ts +1 -0
- package/build/__tests__/impl/LslWebSocketBridge.test.js +16 -1
- package/build/__tests__/impl/LslWebSocketBridge.test.js.map +1 -1
- package/build/impl/LslWebSocketBridge.d.ts +12 -8
- package/build/impl/LslWebSocketBridge.js +4 -3
- package/build/impl/LslWebSocketBridge.js.map +1 -1
- package/build/index.d.ts +2 -2
- package/build/index.js +3 -3
- package/build/index.js.map +1 -1
- package/build/testDoubles/{StreamTransportBridge/FakeStreamTransportBridge.d.ts → WebSocketBridge/FakeWebSocketBridge.d.ts} +2 -2
- package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.js +25 -0
- package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.js.map +1 -0
- package/build/testDoubles/WebSocketBridge/SpyLslWebSocketBridge.d.ts +4 -0
- package/build/testDoubles/WebSocketBridge/SpyLslWebSocketBridge.js.map +1 -0
- package/package.json +1 -1
- package/src/__tests__/AbstractPackageTest.ts +1 -1
- package/src/__tests__/impl/LslWebSocketBridge.test.ts +33 -5
- package/src/impl/LslWebSocketBridge.ts +20 -15
- package/src/index.ts +3 -3
- package/src/testDoubles/WebSocketBridge/FakeWebSocketBridge.ts +31 -0
- package/src/testDoubles/{StreamTransportBridge → WebSocketBridge}/SpyLslWebSocketBridge.ts +2 -2
- package/build/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.js +0 -25
- package/build/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.js.map +0 -1
- package/build/testDoubles/StreamTransportBridge/SpyLslWebSocketBridge.d.ts +0 -4
- package/build/testDoubles/StreamTransportBridge/SpyLslWebSocketBridge.js.map +0 -1
- package/src/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.ts +0 -33
- /package/build/testDoubles/{StreamTransportBridge → WebSocketBridge}/SpyLslWebSocketBridge.js +0 -0
|
@@ -12,7 +12,7 @@ import SpyStreamInfo from '../testDoubles/StreamInfo/SpyStreamInfo.js';
|
|
|
12
12
|
import FakeStreamInlet from '../testDoubles/StreamInlet/FakeStreamInlet.js';
|
|
13
13
|
import { SpyStreamInlet } from '../testDoubles/StreamInlet/SpyStreamInlet.js';
|
|
14
14
|
import FakeStreamOutlet from '../testDoubles/StreamOutlet/FakeStreamOutlet.js';
|
|
15
|
-
import SpyLslWebSocketBridge from '../testDoubles/
|
|
15
|
+
import SpyLslWebSocketBridge from '../testDoubles/WebSocketBridge/SpyLslWebSocketBridge.js';
|
|
16
16
|
import FakeWebSocketServer from '../testDoubles/WebSockets/FakeWebSocketServer.js';
|
|
17
17
|
export default class AbstractPackageTest extends AbstractModuleTest {
|
|
18
18
|
static fakeLiblsl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractPackageTest.js","sourceRoot":"","sources":["../../src/__tests__/AbstractPackageTest.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,qBAAqB,CAAA;AAGpD,OAAO,aAAa,MAAM,0BAA0B,CAAA;AACpD,OAAO,oBAAoB,MAAM,iCAAiC,CAAA;AAClE,OAAO,aAAa,MAAM,0BAA0B,CAAA;AACpD,OAAO,cAGN,MAAM,2BAA2B,CAAA;AAClC,OAAO,eAAe,MAAM,4BAA4B,CAAA;AACxD,OAAO,kBAAkB,MAAM,+BAA+B,CAAA;AAC9D,OAAO,oBAAoB,MAAM,0DAA0D,CAAA;AAC3F,OAAO,UAAU,MAAM,qCAAqC,CAAA;AAC5D,OAAO,cAAc,MAAM,6CAA6C,CAAA;AACxE,OAAO,aAAa,MAAM,4CAA4C,CAAA;AACtE,OAAO,eAAe,MAAM,+CAA+C,CAAA;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAA;AAC7E,OAAO,gBAAgB,MAAM,iDAAiD,CAAA;AAC9E,OAAO,qBAAqB,MAAM
|
|
1
|
+
{"version":3,"file":"AbstractPackageTest.js","sourceRoot":"","sources":["../../src/__tests__/AbstractPackageTest.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
12
12
|
protected static doesNotSendToClientsThatAreNotReady(): Promise<void>;
|
|
13
13
|
protected static destroyClosesWebSocketServer(): Promise<void>;
|
|
14
14
|
protected static throwsIfActivateIsCalledAfterDestroy(): Promise<void>;
|
|
15
|
+
protected static acceptsOptionalWssPort(): Promise<void>;
|
|
15
16
|
private static activate;
|
|
16
17
|
private static deactivate;
|
|
17
18
|
private static destroy;
|
|
@@ -24,12 +24,15 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
24
24
|
assert.isTruthy(this.instance, 'Failed to create instance!');
|
|
25
25
|
}
|
|
26
26
|
static async createsLslStreamInlet() {
|
|
27
|
-
const { channelNames, channelFormat, sampleRateHz, chunkSize } = FakeStreamInlet.callsToConstructor[0]?.options ?? {};
|
|
27
|
+
const { channelNames, channelFormat, sampleRateHz, chunkSize, name, type, sourceId, } = FakeStreamInlet.callsToConstructor[0]?.options ?? {};
|
|
28
28
|
assert.isEqualDeep({
|
|
29
29
|
channelNames,
|
|
30
30
|
channelFormat,
|
|
31
31
|
sampleRateHz,
|
|
32
32
|
chunkSize,
|
|
33
|
+
name,
|
|
34
|
+
type,
|
|
35
|
+
sourceId,
|
|
33
36
|
}, this.baseOptions);
|
|
34
37
|
}
|
|
35
38
|
static async activateCallsStartPullingOnInlet() {
|
|
@@ -77,6 +80,12 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
77
80
|
this.activate();
|
|
78
81
|
}, `\n\n Cannot re-activate bridge after destroying it! \n\n Please create and activate a new instance. \n`);
|
|
79
82
|
}
|
|
83
|
+
static async acceptsOptionalWssPort() {
|
|
84
|
+
FakeWebSocketServer.resetTestDouble();
|
|
85
|
+
const wssPort = randomInt(1000, 9999);
|
|
86
|
+
this.LslWebSocketBridge({ wssPort });
|
|
87
|
+
assert.isEqual(FakeWebSocketServer.callsToConstructor[0]?.port, wssPort, 'Did not set port for WebSocketServer!');
|
|
88
|
+
}
|
|
80
89
|
static activate() {
|
|
81
90
|
this.instance.activate();
|
|
82
91
|
}
|
|
@@ -98,6 +107,9 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
98
107
|
channelFormat: 'float32',
|
|
99
108
|
sampleRateHz: 100 * Math.random(),
|
|
100
109
|
chunkSize: randomInt(1, 100),
|
|
110
|
+
name: this.generateId(),
|
|
111
|
+
type: this.generateId(),
|
|
112
|
+
sourceId: this.generateId(),
|
|
101
113
|
};
|
|
102
114
|
static LslWebSocketBridge(options) {
|
|
103
115
|
return LslWebSocketBridge.Create({ ...this.baseOptions, ...options });
|
|
@@ -133,4 +145,7 @@ __decorate([
|
|
|
133
145
|
__decorate([
|
|
134
146
|
test()
|
|
135
147
|
], LslWebSocketBridgeTest, "throwsIfActivateIsCalledAfterDestroy", null);
|
|
148
|
+
__decorate([
|
|
149
|
+
test()
|
|
150
|
+
], LslWebSocketBridgeTest, "acceptsOptionalWssPort", null);
|
|
136
151
|
//# sourceMappingURL=LslWebSocketBridge.test.js.map
|
|
@@ -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;AAElC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAElD,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,kBAAkB,EAAE,CAAA;QACzB,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAC7B,IAAI,CAAC,wBAAwB,EAAE,CAAA;QAE/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAA2B,CAAA;IACtE,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,
|
|
1
|
+
{"version":3,"file":"LslWebSocketBridge.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/LslWebSocketBridge.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { WebSocketServer } from 'ws';
|
|
2
2
|
import { ChannelFormat } from './LiblslAdapter.js';
|
|
3
3
|
import { StreamInlet } from './LslStreamInlet.js';
|
|
4
|
-
export default class LslWebSocketBridge implements
|
|
5
|
-
static Class?:
|
|
4
|
+
export default class LslWebSocketBridge implements WebSocketBridge {
|
|
5
|
+
static Class?: WebSocketBridgeConstructor;
|
|
6
6
|
static WSS: typeof import("ws").Server;
|
|
7
7
|
private inlet;
|
|
8
8
|
private wss;
|
|
9
9
|
private isDestroyed;
|
|
10
|
-
protected constructor(options:
|
|
11
|
-
static Create(options:
|
|
10
|
+
protected constructor(options: WebSocketBridgeConstructorOptions);
|
|
11
|
+
static Create(options: WebSocketBridgeOptions): WebSocketBridge;
|
|
12
12
|
activate(): void;
|
|
13
13
|
private throwIfBridgeIsDestroyed;
|
|
14
14
|
private startPullingData;
|
|
@@ -22,19 +22,23 @@ export default class LslWebSocketBridge implements StreamTransportBridge {
|
|
|
22
22
|
private static LslStreamInlet;
|
|
23
23
|
private static WebSocketServer;
|
|
24
24
|
}
|
|
25
|
-
export interface
|
|
25
|
+
export interface WebSocketBridge {
|
|
26
26
|
activate(): void;
|
|
27
27
|
deactivate(): void;
|
|
28
28
|
destroy(): void;
|
|
29
29
|
}
|
|
30
|
-
export type
|
|
31
|
-
export interface
|
|
30
|
+
export type WebSocketBridgeConstructor = new (options: WebSocketBridgeConstructorOptions) => WebSocketBridge;
|
|
31
|
+
export interface WebSocketBridgeOptions {
|
|
32
32
|
channelNames: string[];
|
|
33
33
|
channelFormat: ChannelFormat;
|
|
34
34
|
sampleRateHz: number;
|
|
35
35
|
chunkSize: number;
|
|
36
|
+
name?: string;
|
|
37
|
+
type?: string;
|
|
38
|
+
sourceId?: string;
|
|
39
|
+
wssPort?: number;
|
|
36
40
|
}
|
|
37
|
-
export interface
|
|
41
|
+
export interface WebSocketBridgeConstructorOptions extends WebSocketBridgeOptions {
|
|
38
42
|
inlet: StreamInlet;
|
|
39
43
|
wss: WebSocketServer;
|
|
40
44
|
}
|
|
@@ -12,7 +12,8 @@ export default class LslWebSocketBridge {
|
|
|
12
12
|
this.wss = wss;
|
|
13
13
|
}
|
|
14
14
|
static Create(options) {
|
|
15
|
-
const
|
|
15
|
+
const { wssPort = 8080 } = options ?? {};
|
|
16
|
+
const wss = this.WebSocketServer(wssPort);
|
|
16
17
|
const inlet = this.LslStreamInlet(options, wss);
|
|
17
18
|
return new (this.Class ?? this)({ ...options, inlet, wss });
|
|
18
19
|
}
|
|
@@ -64,8 +65,8 @@ export default class LslWebSocketBridge {
|
|
|
64
65
|
const onData = this.createOnDataCallback(wss);
|
|
65
66
|
return LslStreamInlet.Create(options, onData);
|
|
66
67
|
}
|
|
67
|
-
static WebSocketServer() {
|
|
68
|
-
return new this.WSS({ port:
|
|
68
|
+
static WebSocketServer(wssPort) {
|
|
69
|
+
return new this.WSS({ port: wssPort });
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
72
|
//# sourceMappingURL=LslWebSocketBridge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LslWebSocketBridge.js","sourceRoot":"","sources":["../../src/impl/LslWebSocketBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAA;AAEpC,OAAO,cAA+B,MAAM,qBAAqB,CAAA;AAEjE,MAAM,CAAC,OAAO,OAAO,kBAAkB;IAC5B,MAAM,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"LslWebSocketBridge.js","sourceRoot":"","sources":["../../src/impl/LslWebSocketBridge.ts"],"names":[],"mappings":"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"}
|
package/build/index.d.ts
CHANGED
|
@@ -28,8 +28,8 @@ export { default as FakeStreamOutlet } from './testDoubles/StreamOutlet/FakeStre
|
|
|
28
28
|
export * from './testDoubles/StreamOutlet/FakeStreamOutlet.js';
|
|
29
29
|
export { default as LslWebSocketBridge } from './impl/LslWebSocketBridge.js';
|
|
30
30
|
export * from './impl/LslWebSocketBridge.js';
|
|
31
|
-
export { default as
|
|
32
|
-
export * from './testDoubles/
|
|
31
|
+
export { default as FakeWebSocketBridge } from './testDoubles/WebSocketBridge/FakeWebSocketBridge.js';
|
|
32
|
+
export * from './testDoubles/WebSocketBridge/FakeWebSocketBridge.js';
|
|
33
33
|
export { default as generateRandomOutletOptions } from './testDoubles/generateRandomOutletOptions.js';
|
|
34
34
|
export { default as FakeWebSocket } from './testDoubles/WebSockets/FakeWebSocket.js';
|
|
35
35
|
export * from './testDoubles/WebSockets/FakeWebSocket.js';
|
package/build/index.js
CHANGED
|
@@ -31,11 +31,11 @@ export { default as LslStreamOutlet } from './impl/LslStreamOutlet.js';
|
|
|
31
31
|
export * from './impl/LslStreamOutlet.js';
|
|
32
32
|
export { default as FakeStreamOutlet } from './testDoubles/StreamOutlet/FakeStreamOutlet.js';
|
|
33
33
|
export * from './testDoubles/StreamOutlet/FakeStreamOutlet.js';
|
|
34
|
-
//
|
|
34
|
+
// WebSocketBridge
|
|
35
35
|
export { default as LslWebSocketBridge } from './impl/LslWebSocketBridge.js';
|
|
36
36
|
export * from './impl/LslWebSocketBridge.js';
|
|
37
|
-
export { default as
|
|
38
|
-
export * from './testDoubles/
|
|
37
|
+
export { default as FakeWebSocketBridge } from './testDoubles/WebSocketBridge/FakeWebSocketBridge.js';
|
|
38
|
+
export * from './testDoubles/WebSocketBridge/FakeWebSocketBridge.js';
|
|
39
39
|
// Utils
|
|
40
40
|
export { default as generateRandomOutletOptions } from './testDoubles/generateRandomOutletOptions.js';
|
|
41
41
|
// WebSockets
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AAEpB,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAChF,cAAc,gCAAgC,CAAA;AAE9C,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,0DAA0D,CAAA;AAC3G,cAAc,0DAA0D,CAAA;AAExE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,0DAA0D,CAAA;AAC3G,cAAc,0DAA0D,CAAA;AAExE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,yDAAyD,CAAA;AACzG,cAAc,yDAAyD,CAAA;AAEvE,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,8DAA8D,CAAA;AACnH,cAAc,8DAA8D,CAAA;AAE5E,SAAS;AAET,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAClE,cAAc,yBAAyB,CAAA;AAEvC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC1E,cAAc,oCAAoC,CAAA;AAElD,aAAa;AAEb,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAClE,cAAc,yBAAyB,CAAA;AAEvC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,2CAA2C,CAAA;AACpF,cAAc,2CAA2C,CAAA;AAEzD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACtF,cAAc,4CAA4C,CAAA;AAE1D,cAAc;AAEd,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACpE,cAAc,0BAA0B,CAAA;AAExC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,8CAA8C,CAAA;AACzF,cAAc,8CAA8C,CAAA;AAE5D,eAAe;AAEf,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,2BAA2B,CAAA;AACtE,cAAc,2BAA2B,CAAA;AAEzC,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,gDAAgD,CAAA;AAC5F,cAAc,gDAAgD,CAAA;AAE9D,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AAEpB,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAChF,cAAc,gCAAgC,CAAA;AAE9C,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,0DAA0D,CAAA;AAC3G,cAAc,0DAA0D,CAAA;AAExE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,0DAA0D,CAAA;AAC3G,cAAc,0DAA0D,CAAA;AAExE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,yDAAyD,CAAA;AACzG,cAAc,yDAAyD,CAAA;AAEvE,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,8DAA8D,CAAA;AACnH,cAAc,8DAA8D,CAAA;AAE5E,SAAS;AAET,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAClE,cAAc,yBAAyB,CAAA;AAEvC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC1E,cAAc,oCAAoC,CAAA;AAElD,aAAa;AAEb,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAClE,cAAc,yBAAyB,CAAA;AAEvC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,2CAA2C,CAAA;AACpF,cAAc,2CAA2C,CAAA;AAEzD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACtF,cAAc,4CAA4C,CAAA;AAE1D,cAAc;AAEd,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACpE,cAAc,0BAA0B,CAAA;AAExC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,8CAA8C,CAAA;AACzF,cAAc,8CAA8C,CAAA;AAE5D,eAAe;AAEf,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,2BAA2B,CAAA;AACtE,cAAc,2BAA2B,CAAA;AAEzC,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,gDAAgD,CAAA;AAC5F,cAAc,gDAAgD,CAAA;AAE9D,kBAAkB;AAElB,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAC5E,cAAc,8BAA8B,CAAA;AAE5C,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,sDAAsD,CAAA;AACrG,cAAc,sDAAsD,CAAA;AAEpE,QAAQ;AAER,OAAO,EAAE,OAAO,IAAI,2BAA2B,EAAE,MAAM,8CAA8C,CAAA;AAErG,aAAa;AAEb,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,2CAA2C,CAAA;AACpF,cAAc,2CAA2C,CAAA;AAEzD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,iDAAiD,CAAA;AAChG,cAAc,iDAAiD,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export default class
|
|
1
|
+
import { WebSocketBridge } from '../../impl/LslWebSocketBridge.js';
|
|
2
|
+
export default class FakeWebSocketBridge implements WebSocketBridge {
|
|
3
3
|
static numCallsToConstructor: number;
|
|
4
4
|
static numCallsToActivate: number;
|
|
5
5
|
static numCallsToDeactivate: number;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export default class FakeWebSocketBridge {
|
|
2
|
+
static numCallsToConstructor = 0;
|
|
3
|
+
static numCallsToActivate = 0;
|
|
4
|
+
static numCallsToDeactivate = 0;
|
|
5
|
+
static numCallsToDestroy = 0;
|
|
6
|
+
constructor() {
|
|
7
|
+
FakeWebSocketBridge.numCallsToConstructor++;
|
|
8
|
+
}
|
|
9
|
+
activate() {
|
|
10
|
+
FakeWebSocketBridge.numCallsToActivate++;
|
|
11
|
+
}
|
|
12
|
+
deactivate() {
|
|
13
|
+
FakeWebSocketBridge.numCallsToDeactivate++;
|
|
14
|
+
}
|
|
15
|
+
destroy() {
|
|
16
|
+
FakeWebSocketBridge.numCallsToDestroy++;
|
|
17
|
+
}
|
|
18
|
+
static resetTestDouble() {
|
|
19
|
+
FakeWebSocketBridge.numCallsToConstructor = 0;
|
|
20
|
+
FakeWebSocketBridge.numCallsToActivate = 0;
|
|
21
|
+
FakeWebSocketBridge.numCallsToDeactivate = 0;
|
|
22
|
+
FakeWebSocketBridge.numCallsToDestroy = 0;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=FakeWebSocketBridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FakeWebSocketBridge.js","sourceRoot":"","sources":["../../../src/testDoubles/WebSocketBridge/FakeWebSocketBridge.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,mBAAmB;IAC7B,MAAM,CAAC,qBAAqB,GAAG,CAAC,CAAA;IAChC,MAAM,CAAC,kBAAkB,GAAG,CAAC,CAAA;IAC7B,MAAM,CAAC,oBAAoB,GAAG,CAAC,CAAA;IAC/B,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAA;IAEnC;QACI,mBAAmB,CAAC,qBAAqB,EAAE,CAAA;IAC/C,CAAC;IAEM,QAAQ;QACX,mBAAmB,CAAC,kBAAkB,EAAE,CAAA;IAC5C,CAAC;IAEM,UAAU;QACb,mBAAmB,CAAC,oBAAoB,EAAE,CAAA;IAC9C,CAAC;IAEM,OAAO;QACV,mBAAmB,CAAC,iBAAiB,EAAE,CAAA;IAC3C,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,mBAAmB,CAAC,qBAAqB,GAAG,CAAC,CAAA;QAC7C,mBAAmB,CAAC,kBAAkB,GAAG,CAAC,CAAA;QAC1C,mBAAmB,CAAC,oBAAoB,GAAG,CAAC,CAAA;QAC5C,mBAAmB,CAAC,iBAAiB,GAAG,CAAC,CAAA;IAC7C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpyLslWebSocketBridge.js","sourceRoot":"","sources":["../../../src/testDoubles/WebSocketBridge/SpyLslWebSocketBridge.ts"],"names":[],"mappings":"AAAA,OAAO,kBAEN,MAAM,kCAAkC,CAAA;AAEzC,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,kBAAkB;IACjE,YAAmB,OAA0C;QACzD,KAAK,CAAC,OAAO,CAAC,CAAA;IAClB,CAAC;CACJ"}
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@ import SpyStreamInfo from '../testDoubles/StreamInfo/SpyStreamInfo.js'
|
|
|
17
17
|
import FakeStreamInlet from '../testDoubles/StreamInlet/FakeStreamInlet.js'
|
|
18
18
|
import { SpyStreamInlet } from '../testDoubles/StreamInlet/SpyStreamInlet.js'
|
|
19
19
|
import FakeStreamOutlet from '../testDoubles/StreamOutlet/FakeStreamOutlet.js'
|
|
20
|
-
import SpyLslWebSocketBridge from '../testDoubles/
|
|
20
|
+
import SpyLslWebSocketBridge from '../testDoubles/WebSocketBridge/SpyLslWebSocketBridge.js'
|
|
21
21
|
import FakeWebSocketServer from '../testDoubles/WebSockets/FakeWebSocketServer.js'
|
|
22
22
|
|
|
23
23
|
export default class AbstractPackageTest extends AbstractModuleTest {
|
|
@@ -3,10 +3,10 @@ import { randomInt } from 'crypto'
|
|
|
3
3
|
import { test, assert } from '@neurodevs/node-tdd'
|
|
4
4
|
|
|
5
5
|
import LslWebSocketBridge, {
|
|
6
|
-
|
|
6
|
+
WebSocketBridgeOptions,
|
|
7
7
|
} from '../../impl/LslWebSocketBridge.js'
|
|
8
8
|
import FakeStreamInlet from '../../testDoubles/StreamInlet/FakeStreamInlet.js'
|
|
9
|
-
import SpyLslWebSocketBridge from '../../testDoubles/
|
|
9
|
+
import SpyLslWebSocketBridge from '../../testDoubles/WebSocketBridge/SpyLslWebSocketBridge.js'
|
|
10
10
|
import FakeWebSocket from '../../testDoubles/WebSockets/FakeWebSocket.js'
|
|
11
11
|
import FakeWebSocketServer from '../../testDoubles/WebSockets/FakeWebSocketServer.js'
|
|
12
12
|
import AbstractPackageTest from '../AbstractPackageTest.js'
|
|
@@ -31,8 +31,15 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
31
31
|
|
|
32
32
|
@test()
|
|
33
33
|
protected static async createsLslStreamInlet() {
|
|
34
|
-
const {
|
|
35
|
-
|
|
34
|
+
const {
|
|
35
|
+
channelNames,
|
|
36
|
+
channelFormat,
|
|
37
|
+
sampleRateHz,
|
|
38
|
+
chunkSize,
|
|
39
|
+
name,
|
|
40
|
+
type,
|
|
41
|
+
sourceId,
|
|
42
|
+
} = FakeStreamInlet.callsToConstructor[0]?.options ?? {}
|
|
36
43
|
|
|
37
44
|
assert.isEqualDeep(
|
|
38
45
|
{
|
|
@@ -40,6 +47,9 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
40
47
|
channelFormat,
|
|
41
48
|
sampleRateHz,
|
|
42
49
|
chunkSize,
|
|
50
|
+
name,
|
|
51
|
+
type,
|
|
52
|
+
sourceId,
|
|
43
53
|
},
|
|
44
54
|
this.baseOptions
|
|
45
55
|
)
|
|
@@ -146,6 +156,21 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
146
156
|
}, `\n\n Cannot re-activate bridge after destroying it! \n\n Please create and activate a new instance. \n`)
|
|
147
157
|
}
|
|
148
158
|
|
|
159
|
+
@test()
|
|
160
|
+
protected static async acceptsOptionalWssPort() {
|
|
161
|
+
FakeWebSocketServer.resetTestDouble()
|
|
162
|
+
|
|
163
|
+
const wssPort = randomInt(1000, 9999)
|
|
164
|
+
|
|
165
|
+
this.LslWebSocketBridge({ wssPort })
|
|
166
|
+
|
|
167
|
+
assert.isEqual(
|
|
168
|
+
FakeWebSocketServer.callsToConstructor[0]?.port,
|
|
169
|
+
wssPort,
|
|
170
|
+
'Did not set port for WebSocketServer!'
|
|
171
|
+
)
|
|
172
|
+
}
|
|
173
|
+
|
|
149
174
|
private static activate() {
|
|
150
175
|
this.instance.activate()
|
|
151
176
|
}
|
|
@@ -173,10 +198,13 @@ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
|
|
|
173
198
|
channelFormat: 'float32' as const,
|
|
174
199
|
sampleRateHz: 100 * Math.random(),
|
|
175
200
|
chunkSize: randomInt(1, 100),
|
|
201
|
+
name: this.generateId(),
|
|
202
|
+
type: this.generateId(),
|
|
203
|
+
sourceId: this.generateId(),
|
|
176
204
|
}
|
|
177
205
|
|
|
178
206
|
private static LslWebSocketBridge(
|
|
179
|
-
options?: Partial<
|
|
207
|
+
options?: Partial<WebSocketBridgeOptions>
|
|
180
208
|
) {
|
|
181
209
|
return LslWebSocketBridge.Create({ ...this.baseOptions, ...options })
|
|
182
210
|
}
|
|
@@ -2,23 +2,24 @@ import { WebSocketServer } from 'ws'
|
|
|
2
2
|
import { ChannelFormat } from './LiblslAdapter.js'
|
|
3
3
|
import LslStreamInlet, { StreamInlet } from './LslStreamInlet.js'
|
|
4
4
|
|
|
5
|
-
export default class LslWebSocketBridge implements
|
|
6
|
-
public static Class?:
|
|
5
|
+
export default class LslWebSocketBridge implements WebSocketBridge {
|
|
6
|
+
public static Class?: WebSocketBridgeConstructor
|
|
7
7
|
public static WSS = WebSocketServer
|
|
8
8
|
|
|
9
9
|
private inlet: StreamInlet
|
|
10
10
|
private wss: WebSocketServer
|
|
11
11
|
private isDestroyed = false
|
|
12
12
|
|
|
13
|
-
protected constructor(options:
|
|
13
|
+
protected constructor(options: WebSocketBridgeConstructorOptions) {
|
|
14
14
|
const { inlet, wss } = options
|
|
15
15
|
|
|
16
16
|
this.inlet = inlet
|
|
17
17
|
this.wss = wss
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
public static Create(options:
|
|
21
|
-
const
|
|
20
|
+
public static Create(options: WebSocketBridgeOptions) {
|
|
21
|
+
const { wssPort = 8080 } = options ?? {}
|
|
22
|
+
const wss = this.WebSocketServer(wssPort)
|
|
22
23
|
const inlet = this.LslStreamInlet(options, wss)
|
|
23
24
|
|
|
24
25
|
return new (this.Class ?? this)({ ...options, inlet, wss })
|
|
@@ -87,37 +88,41 @@ export default class LslWebSocketBridge implements StreamTransportBridge {
|
|
|
87
88
|
}
|
|
88
89
|
|
|
89
90
|
private static LslStreamInlet(
|
|
90
|
-
options:
|
|
91
|
+
options: WebSocketBridgeOptions,
|
|
91
92
|
wss: WebSocketServer
|
|
92
93
|
) {
|
|
93
94
|
const onData = this.createOnDataCallback(wss)
|
|
94
95
|
return LslStreamInlet.Create(options, onData)
|
|
95
96
|
}
|
|
96
97
|
|
|
97
|
-
private static WebSocketServer() {
|
|
98
|
-
return new this.WSS({ port:
|
|
98
|
+
private static WebSocketServer(wssPort: number) {
|
|
99
|
+
return new this.WSS({ port: wssPort })
|
|
99
100
|
}
|
|
100
101
|
}
|
|
101
102
|
|
|
102
|
-
export interface
|
|
103
|
+
export interface WebSocketBridge {
|
|
103
104
|
activate(): void
|
|
104
105
|
deactivate(): void
|
|
105
106
|
destroy(): void
|
|
106
107
|
}
|
|
107
108
|
|
|
108
|
-
export type
|
|
109
|
-
options:
|
|
110
|
-
) =>
|
|
109
|
+
export type WebSocketBridgeConstructor = new (
|
|
110
|
+
options: WebSocketBridgeConstructorOptions
|
|
111
|
+
) => WebSocketBridge
|
|
111
112
|
|
|
112
|
-
export interface
|
|
113
|
+
export interface WebSocketBridgeOptions {
|
|
113
114
|
channelNames: string[]
|
|
114
115
|
channelFormat: ChannelFormat
|
|
115
116
|
sampleRateHz: number
|
|
116
117
|
chunkSize: number
|
|
118
|
+
name?: string
|
|
119
|
+
type?: string
|
|
120
|
+
sourceId?: string
|
|
121
|
+
wssPort?: number
|
|
117
122
|
}
|
|
118
123
|
|
|
119
|
-
export interface
|
|
120
|
-
extends
|
|
124
|
+
export interface WebSocketBridgeConstructorOptions
|
|
125
|
+
extends WebSocketBridgeOptions {
|
|
121
126
|
inlet: StreamInlet
|
|
122
127
|
wss: WebSocketServer
|
|
123
128
|
}
|
package/src/index.ts
CHANGED
|
@@ -50,13 +50,13 @@ export * from './impl/LslStreamOutlet.js'
|
|
|
50
50
|
export { default as FakeStreamOutlet } from './testDoubles/StreamOutlet/FakeStreamOutlet.js'
|
|
51
51
|
export * from './testDoubles/StreamOutlet/FakeStreamOutlet.js'
|
|
52
52
|
|
|
53
|
-
//
|
|
53
|
+
// WebSocketBridge
|
|
54
54
|
|
|
55
55
|
export { default as LslWebSocketBridge } from './impl/LslWebSocketBridge.js'
|
|
56
56
|
export * from './impl/LslWebSocketBridge.js'
|
|
57
57
|
|
|
58
|
-
export { default as
|
|
59
|
-
export * from './testDoubles/
|
|
58
|
+
export { default as FakeWebSocketBridge } from './testDoubles/WebSocketBridge/FakeWebSocketBridge.js'
|
|
59
|
+
export * from './testDoubles/WebSocketBridge/FakeWebSocketBridge.js'
|
|
60
60
|
|
|
61
61
|
// Utils
|
|
62
62
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { WebSocketBridge } from '../../impl/LslWebSocketBridge.js'
|
|
2
|
+
|
|
3
|
+
export default class FakeWebSocketBridge implements WebSocketBridge {
|
|
4
|
+
public static numCallsToConstructor = 0
|
|
5
|
+
public static numCallsToActivate = 0
|
|
6
|
+
public static numCallsToDeactivate = 0
|
|
7
|
+
public static numCallsToDestroy = 0
|
|
8
|
+
|
|
9
|
+
public constructor() {
|
|
10
|
+
FakeWebSocketBridge.numCallsToConstructor++
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public activate() {
|
|
14
|
+
FakeWebSocketBridge.numCallsToActivate++
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public deactivate() {
|
|
18
|
+
FakeWebSocketBridge.numCallsToDeactivate++
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public destroy() {
|
|
22
|
+
FakeWebSocketBridge.numCallsToDestroy++
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public static resetTestDouble() {
|
|
26
|
+
FakeWebSocketBridge.numCallsToConstructor = 0
|
|
27
|
+
FakeWebSocketBridge.numCallsToActivate = 0
|
|
28
|
+
FakeWebSocketBridge.numCallsToDeactivate = 0
|
|
29
|
+
FakeWebSocketBridge.numCallsToDestroy = 0
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import LslWebSocketBridge, {
|
|
2
|
-
|
|
2
|
+
WebSocketBridgeConstructorOptions,
|
|
3
3
|
} from '../../impl/LslWebSocketBridge.js'
|
|
4
4
|
|
|
5
5
|
export default class SpyLslWebSocketBridge extends LslWebSocketBridge {
|
|
6
|
-
public constructor(options:
|
|
6
|
+
public constructor(options: WebSocketBridgeConstructorOptions) {
|
|
7
7
|
super(options)
|
|
8
8
|
}
|
|
9
9
|
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export default class FakeStreamTransportBridge {
|
|
2
|
-
static numCallsToConstructor = 0;
|
|
3
|
-
static numCallsToActivate = 0;
|
|
4
|
-
static numCallsToDeactivate = 0;
|
|
5
|
-
static numCallsToDestroy = 0;
|
|
6
|
-
constructor() {
|
|
7
|
-
FakeStreamTransportBridge.numCallsToConstructor++;
|
|
8
|
-
}
|
|
9
|
-
activate() {
|
|
10
|
-
FakeStreamTransportBridge.numCallsToActivate++;
|
|
11
|
-
}
|
|
12
|
-
deactivate() {
|
|
13
|
-
FakeStreamTransportBridge.numCallsToDeactivate++;
|
|
14
|
-
}
|
|
15
|
-
destroy() {
|
|
16
|
-
FakeStreamTransportBridge.numCallsToDestroy++;
|
|
17
|
-
}
|
|
18
|
-
static resetTestDouble() {
|
|
19
|
-
FakeStreamTransportBridge.numCallsToConstructor = 0;
|
|
20
|
-
FakeStreamTransportBridge.numCallsToActivate = 0;
|
|
21
|
-
FakeStreamTransportBridge.numCallsToDeactivate = 0;
|
|
22
|
-
FakeStreamTransportBridge.numCallsToDestroy = 0;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=FakeStreamTransportBridge.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FakeStreamTransportBridge.js","sourceRoot":"","sources":["../../../src/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,yBAAyB;IAGnC,MAAM,CAAC,qBAAqB,GAAG,CAAC,CAAA;IAChC,MAAM,CAAC,kBAAkB,GAAG,CAAC,CAAA;IAC7B,MAAM,CAAC,oBAAoB,GAAG,CAAC,CAAA;IAC/B,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAA;IAEnC;QACI,yBAAyB,CAAC,qBAAqB,EAAE,CAAA;IACrD,CAAC;IAEM,QAAQ;QACX,yBAAyB,CAAC,kBAAkB,EAAE,CAAA;IAClD,CAAC;IAEM,UAAU;QACb,yBAAyB,CAAC,oBAAoB,EAAE,CAAA;IACpD,CAAC;IAEM,OAAO;QACV,yBAAyB,CAAC,iBAAiB,EAAE,CAAA;IACjD,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,yBAAyB,CAAC,qBAAqB,GAAG,CAAC,CAAA;QACnD,yBAAyB,CAAC,kBAAkB,GAAG,CAAC,CAAA;QAChD,yBAAyB,CAAC,oBAAoB,GAAG,CAAC,CAAA;QAClD,yBAAyB,CAAC,iBAAiB,GAAG,CAAC,CAAA;IACnD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SpyLslWebSocketBridge.js","sourceRoot":"","sources":["../../../src/testDoubles/StreamTransportBridge/SpyLslWebSocketBridge.ts"],"names":[],"mappings":"AAAA,OAAO,kBAEN,MAAM,kCAAkC,CAAA;AAEzC,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,kBAAkB;IACjE,YAAmB,OAAgD;QAC/D,KAAK,CAAC,OAAO,CAAC,CAAA;IAClB,CAAC;CACJ"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { StreamTransportBridge } from '../../impl/LslWebSocketBridge.js'
|
|
2
|
-
|
|
3
|
-
export default class FakeStreamTransportBridge
|
|
4
|
-
implements StreamTransportBridge
|
|
5
|
-
{
|
|
6
|
-
public static numCallsToConstructor = 0
|
|
7
|
-
public static numCallsToActivate = 0
|
|
8
|
-
public static numCallsToDeactivate = 0
|
|
9
|
-
public static numCallsToDestroy = 0
|
|
10
|
-
|
|
11
|
-
public constructor() {
|
|
12
|
-
FakeStreamTransportBridge.numCallsToConstructor++
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
public activate() {
|
|
16
|
-
FakeStreamTransportBridge.numCallsToActivate++
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
public deactivate() {
|
|
20
|
-
FakeStreamTransportBridge.numCallsToDeactivate++
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
public destroy() {
|
|
24
|
-
FakeStreamTransportBridge.numCallsToDestroy++
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
public static resetTestDouble() {
|
|
28
|
-
FakeStreamTransportBridge.numCallsToConstructor = 0
|
|
29
|
-
FakeStreamTransportBridge.numCallsToActivate = 0
|
|
30
|
-
FakeStreamTransportBridge.numCallsToDeactivate = 0
|
|
31
|
-
FakeStreamTransportBridge.numCallsToDestroy = 0
|
|
32
|
-
}
|
|
33
|
-
}
|
/package/build/testDoubles/{StreamTransportBridge → WebSocketBridge}/SpyLslWebSocketBridge.js
RENAMED
|
File without changes
|