@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.
Files changed (178) hide show
  1. package/.claude/settings.local.json +10 -0
  2. package/.regressionproof.json +7 -0
  3. package/.vscode/launch.json +3 -2
  4. package/README.md +9 -35
  5. package/build/.spruce/settings.json +5 -1
  6. package/build/__tests__/AbstractPackageTest.d.ts +4 -4
  7. package/build/__tests__/AbstractPackageTest.js +9 -11
  8. package/build/__tests__/AbstractPackageTest.js.map +1 -1
  9. package/build/__tests__/impl/LslBackpressureMonitor.test.d.ts +7 -0
  10. package/build/__tests__/impl/LslBackpressureMonitor.test.js +26 -0
  11. package/build/__tests__/impl/LslBackpressureMonitor.test.js.map +1 -0
  12. package/build/__tests__/impl/LslEventMarkerEmitter.test.d.ts +34 -0
  13. package/build/__tests__/impl/LslEventMarkerEmitter.test.js +243 -0
  14. package/build/__tests__/impl/LslEventMarkerEmitter.test.js.map +1 -0
  15. package/build/__tests__/impl/LslStreamInfo.test.d.ts +0 -3
  16. package/build/__tests__/impl/LslStreamInfo.test.js +2 -27
  17. package/build/__tests__/impl/LslStreamInfo.test.js.map +1 -1
  18. package/build/__tests__/impl/LslStreamInlet.test.d.ts +20 -8
  19. package/build/__tests__/impl/LslStreamInlet.test.js +224 -69
  20. package/build/__tests__/impl/LslStreamInlet.test.js.map +1 -1
  21. package/build/__tests__/impl/LslStreamOutlet.test.d.ts +3 -7
  22. package/build/__tests__/impl/LslStreamOutlet.test.js +36 -46
  23. package/build/__tests__/impl/LslStreamOutlet.test.js.map +1 -1
  24. package/build/__tests__/impl/LslWebSocketBridge.test.js +16 -17
  25. package/build/__tests__/impl/LslWebSocketBridge.test.js.map +1 -1
  26. package/build/assertions.d.ts +1 -1
  27. package/build/assertions.js.map +1 -1
  28. package/build/impl/LslBackpressureMonitor.d.ts +8 -0
  29. package/build/impl/LslBackpressureMonitor.js +8 -0
  30. package/build/impl/LslBackpressureMonitor.js.map +1 -0
  31. package/build/impl/LslEventMarkerEmitter.d.ts +35 -0
  32. package/build/impl/LslEventMarkerEmitter.js +86 -0
  33. package/build/impl/LslEventMarkerEmitter.js.map +1 -0
  34. package/build/impl/LslStreamInfo.d.ts +4 -8
  35. package/build/impl/LslStreamInfo.js +8 -21
  36. package/build/impl/LslStreamInfo.js.map +1 -1
  37. package/build/impl/LslStreamInlet.d.ts +31 -50
  38. package/build/impl/LslStreamInlet.js +79 -149
  39. package/build/impl/LslStreamInlet.js.map +1 -1
  40. package/build/impl/LslStreamOutlet.d.ts +15 -18
  41. package/build/impl/LslStreamOutlet.js +39 -47
  42. package/build/impl/LslStreamOutlet.js.map +1 -1
  43. package/build/impl/LslWebSocketBridge.d.ts +4 -5
  44. package/build/impl/LslWebSocketBridge.js +8 -8
  45. package/build/impl/LslWebSocketBridge.js.map +1 -1
  46. package/build/impl/workers/inlet/LslStreamInlet.worker.d.ts +22 -0
  47. package/build/impl/workers/inlet/LslStreamInlet.worker.js +42 -0
  48. package/build/impl/workers/inlet/LslStreamInlet.worker.js.map +1 -0
  49. package/build/impl/workers/inlet/StreamInletWorker.d.ts +73 -0
  50. package/build/impl/workers/inlet/StreamInletWorker.js +253 -0
  51. package/build/impl/workers/inlet/StreamInletWorker.js.map +1 -0
  52. package/build/impl/workers/outlet/LslStreamOutlet.worker.d.ts +32 -0
  53. package/build/impl/workers/outlet/LslStreamOutlet.worker.js +82 -0
  54. package/build/impl/workers/outlet/LslStreamOutlet.worker.js.map +1 -0
  55. package/build/index.d.ts +12 -14
  56. package/build/index.js +14 -16
  57. package/build/index.js.map +1 -1
  58. package/build/scripts/finalizeHandles.d.ts +2 -0
  59. package/build/scripts/finalizeHandles.js +48 -0
  60. package/build/scripts/finalizeHandles.js.map +1 -0
  61. package/build/scripts/runLslEventMarkerEmitter.js +11 -0
  62. package/build/scripts/runLslEventMarkerEmitter.js.map +1 -0
  63. package/build/scripts/runOutletToInlet.js +7 -6
  64. package/build/scripts/runOutletToInlet.js.map +1 -1
  65. package/build/scripts/testDestroyOutlet.d.ts +1 -0
  66. package/build/scripts/testDestroyOutlet.js +4 -0
  67. package/build/scripts/testDestroyOutlet.js.map +1 -0
  68. package/build/testDoubles/BackpressureMonitor/FakeBackpressureMonitor.d.ts +6 -0
  69. package/build/testDoubles/BackpressureMonitor/FakeBackpressureMonitor.js +10 -0
  70. package/build/testDoubles/BackpressureMonitor/FakeBackpressureMonitor.js.map +1 -0
  71. package/build/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.d.ts +17 -0
  72. package/build/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.js +30 -0
  73. package/build/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.js.map +1 -0
  74. package/build/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.d.ts +10 -0
  75. package/build/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js +23 -0
  76. package/build/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js.map +1 -0
  77. package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.d.ts +9 -0
  78. package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.js +19 -0
  79. package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.js.map +1 -0
  80. package/build/testDoubles/StreamInfo/FakeStreamInfo.d.ts +3 -3
  81. package/build/testDoubles/StreamInfo/FakeStreamInfo.js +3 -3
  82. package/build/testDoubles/StreamInfo/FakeStreamInfo.js.map +1 -1
  83. package/build/testDoubles/StreamInlet/FakeStreamInlet.d.ts +8 -10
  84. package/build/testDoubles/StreamInlet/FakeStreamInlet.js +6 -7
  85. package/build/testDoubles/StreamInlet/FakeStreamInlet.js.map +1 -1
  86. package/build/testDoubles/StreamInlet/SpyStreamInlet.d.ts +2 -5
  87. package/build/testDoubles/StreamInlet/SpyStreamInlet.js +2 -8
  88. package/build/testDoubles/StreamInlet/SpyStreamInlet.js.map +1 -1
  89. package/build/testDoubles/StreamOutlet/FakeStreamOutlet.d.ts +7 -9
  90. package/build/testDoubles/StreamOutlet/FakeStreamOutlet.js +5 -8
  91. package/build/testDoubles/StreamOutlet/FakeStreamOutlet.js.map +1 -1
  92. package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.d.ts +1 -1
  93. package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.js +1 -1
  94. package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.js.map +1 -1
  95. package/build/testDoubles/WorkerThreads/FakeWorker.d.ts +27 -0
  96. package/build/testDoubles/WorkerThreads/FakeWorker.js +67 -0
  97. package/build/testDoubles/WorkerThreads/FakeWorker.js.map +1 -0
  98. package/build/validations.js +0 -2
  99. package/build/validations.js.map +1 -1
  100. package/package.json +23 -7
  101. package/src/.spruce/settings.json +5 -1
  102. package/src/__tests__/AbstractPackageTest.ts +12 -14
  103. package/src/__tests__/impl/LslBackpressureMonitor.test.ts +25 -0
  104. package/src/__tests__/impl/LslEventMarkerEmitter.test.ts +322 -0
  105. package/src/__tests__/impl/LslStreamInfo.test.ts +3 -40
  106. package/src/__tests__/impl/LslStreamInlet.test.ts +344 -97
  107. package/src/__tests__/impl/LslStreamOutlet.test.ts +61 -69
  108. package/src/__tests__/impl/LslWebSocketBridge.test.ts +18 -18
  109. package/src/assertions.ts +2 -1
  110. package/src/impl/LslBackpressureMonitor.ts +13 -0
  111. package/src/impl/LslEventMarkerEmitter.ts +133 -0
  112. package/src/impl/LslStreamInfo.ts +17 -29
  113. package/src/impl/LslStreamInlet.ts +102 -215
  114. package/src/impl/LslStreamOutlet.ts +54 -78
  115. package/src/impl/LslWebSocketBridge.ts +12 -12
  116. package/src/impl/workers/inlet/LslStreamInlet.worker.ts +74 -0
  117. package/src/impl/workers/inlet/StreamInletWorker.ts +348 -0
  118. package/src/impl/workers/outlet/LslStreamOutlet.worker.ts +144 -0
  119. package/src/index.ts +14 -17
  120. package/src/scripts/finalizeHandles.ts +63 -0
  121. package/src/scripts/runLslEventMarkerEmitter.ts +15 -0
  122. package/src/scripts/runOutletToInlet.ts +10 -8
  123. package/src/scripts/testDestroyOutlet.ts +5 -0
  124. package/src/testDoubles/BackpressureMonitor/FakeBackpressureMonitor.ts +13 -0
  125. package/src/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.ts +46 -0
  126. package/src/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.ts +31 -0
  127. package/src/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.ts +29 -0
  128. package/src/testDoubles/StreamInfo/FakeStreamInfo.ts +4 -4
  129. package/src/testDoubles/StreamInlet/FakeStreamInlet.ts +11 -17
  130. package/src/testDoubles/StreamInlet/SpyStreamInlet.ts +3 -16
  131. package/src/testDoubles/StreamOutlet/FakeStreamOutlet.ts +12 -15
  132. package/src/testDoubles/WebSocketBridge/FakeWebSocketBridge.ts +1 -1
  133. package/src/testDoubles/WorkerThreads/FakeWorker.ts +99 -0
  134. package/src/validations.ts +0 -2
  135. package/build/__tests__/impl/LiblslAdapter.test.d.ts +0 -79
  136. package/build/__tests__/impl/LiblslAdapter.test.js +0 -688
  137. package/build/__tests__/impl/LiblslAdapter.test.js.map +0 -1
  138. package/build/__tests__/impl/LslEventMarkerOutlet.test.d.ts +0 -21
  139. package/build/__tests__/impl/LslEventMarkerOutlet.test.js +0 -160
  140. package/build/__tests__/impl/LslEventMarkerOutlet.test.js.map +0 -1
  141. package/build/handleError.d.ts +0 -8
  142. package/build/handleError.js +0 -25
  143. package/build/handleError.js.map +0 -1
  144. package/build/impl/LiblslAdapter.d.ts +0 -154
  145. package/build/impl/LiblslAdapter.js +0 -317
  146. package/build/impl/LiblslAdapter.js.map +0 -1
  147. package/build/impl/LslEventMarkerOutlet.d.ts +0 -28
  148. package/build/impl/LslEventMarkerOutlet.js +0 -63
  149. package/build/impl/LslEventMarkerOutlet.js.map +0 -1
  150. package/build/scripts/runLslEventMarkerOutlet.js +0 -18
  151. package/build/scripts/runLslEventMarkerOutlet.js.map +0 -1
  152. package/build/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.d.ts +0 -13
  153. package/build/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.js +0 -26
  154. package/build/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.js.map +0 -1
  155. package/build/testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.d.ts +0 -17
  156. package/build/testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.js +0 -46
  157. package/build/testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.js.map +0 -1
  158. package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.d.ts +0 -9
  159. package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.js +0 -19
  160. package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.js.map +0 -1
  161. package/build/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.d.ts +0 -9
  162. package/build/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.js +0 -19
  163. package/build/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.js.map +0 -1
  164. package/build/testDoubles/Liblsl/FakeLiblsl.d.ts +0 -50
  165. package/build/testDoubles/Liblsl/FakeLiblsl.js +0 -126
  166. package/build/testDoubles/Liblsl/FakeLiblsl.js.map +0 -1
  167. package/src/__tests__/impl/LiblslAdapter.test.ts +0 -817
  168. package/src/__tests__/impl/LslEventMarkerOutlet.test.ts +0 -195
  169. package/src/handleError.ts +0 -24
  170. package/src/impl/LiblslAdapter.ts +0 -543
  171. package/src/impl/LslEventMarkerOutlet.ts +0 -97
  172. package/src/scripts/runLslEventMarkerOutlet.ts +0 -23
  173. package/src/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.ts +0 -36
  174. package/src/testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.ts +0 -75
  175. package/src/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.ts +0 -24
  176. package/src/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.ts +0 -28
  177. package/src/testDoubles/Liblsl/FakeLiblsl.ts +0 -182
  178. /package/build/scripts/{runLslEventMarkerOutlet.d.ts → runLslEventMarkerEmitter.d.ts} +0 -0
@@ -0,0 +1,10 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(yarn build.dev)",
5
+ "Bash(yarn test:*)",
6
+ "Bash(NODE_OPTIONS=--experimental-vm-modules yarn test:*)",
7
+ "Bash(tsc:*)"
8
+ ]
9
+ }
10
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": "0.8.0",
3
+ "projectName": "node-lsl",
4
+ "remote": {
5
+ "url": "https://git.regressionproof.ai/liquidg3/node-lsl.git"
6
+ }
7
+ }
@@ -17,7 +17,8 @@
17
17
  "runtimeArgs": [
18
18
  "--inspect-brk",
19
19
  "--trace-warnings",
20
- "${workspaceFolder}/node_modules/.bin/jest",
20
+ "--experimental-vm-modules",
21
+ "${workspaceFolder}/node_modules/jest/bin/jest.js",
21
22
  "${fileBasenameNoExtension}",
22
23
  "--detectOpenHandles"
23
24
  ],
@@ -33,7 +34,7 @@
33
34
  "runtimeArgs": [
34
35
  "--inspect-brk",
35
36
  "--trace-warnings",
36
- "${workspaceFolder}/node_modules/.bin/jest"
37
+ "${workspaceFolder}/node_modules/jest/bin/jest.js"
37
38
  ],
38
39
  "cwd": "${workspaceFolder}",
39
40
  "console": "integratedTerminal",
package/README.md CHANGED
@@ -6,7 +6,7 @@ Lab Streaming Layer (LSL) for synchronized streaming of multi-modal, time-series
6
6
  - [Installation](#installation)
7
7
  - [Usage](#usage)
8
8
  - [LslStreamOutlet](#lslstreamoutlet)
9
- - [LslEventMarkerOutlet](#lsleventmarkeroutlet)
9
+ - [LslEventMarkerEmitter](#LslEventMarkerEmitter)
10
10
  - [Test Doubles](#test-doubles)
11
11
 
12
12
  ## Overview
@@ -57,47 +57,21 @@ const outlet = await LslStreamOutlet.Create({
57
57
  outlet.pushSample([1, 2, 3, 4, 5])
58
58
  ```
59
59
 
60
- ### LslEventMarkerOutlet
60
+ ### LslEventMarkerEmitter
61
61
 
62
- LSL is also often used to push event markers that mark different phases of an experiment or session. The `pushMarkers` method pushes an event marker, waits for a specified duration, then pushes the next marker. I recommend that each event marker has a duration of at least 100 ms so that LSL receives the markers in the right order.
62
+ LSL is also often used to push event markers that mark different phases of an experiment or session. The `emitMany` method pushes an event marker, waits for a specified duration, then pushes the next marker. From experience, each event marker should have a `waitAfterMs` of at least 100 ms or so to ensure LSL receives the event markers in the right order.
63
63
 
64
64
  ```typescript
65
- import { LslEventMarkerOutlet } from '@neurodevs/node-lsl'
65
+ import { LslEventMarkerEmitter } from '@neurodevs/node-lsl'
66
66
 
67
- const outlet = await LslEventMarkerOutlet.Create()
67
+ const emitter = await LslEventMarkerEmitter.Create()
68
68
 
69
69
  const markers = [
70
- { name: 'phase-1-begin', durationMs: 1000 },
71
- { name: 'phase-1-end', durationMs: 100 },
70
+ { name: 'phase-1-begin', waitAfterMs: 5000 },
71
+ { name: 'phase-1-end', waitAfterMs: 100 },
72
72
  ]
73
73
 
74
- // Hangs until complete
75
- await outlet.pushMarkers(markers)
74
+ const promise = emitter.emitMany(markers)
76
75
 
77
- // Void promise, does not hang
78
- void outlet.pushMarkers(markers)
79
-
80
- // Interrupts the above pushMarkers process
81
- outlet.stop()
76
+ emitter.interrupt()
82
77
  ```
83
-
84
- ## Test Doubles
85
-
86
- This package was developed using test-driven development (TDD). If you also follow TDD, you'll likely want test doubles to fake or mock certain behaviors for these classes.
87
-
88
- For example, the `MockEventMarkerOutlet` class lets you test whether your application appropriately calls its methods without actually doing anything. Set this mock in your test code like this:
89
-
90
- ```typescript
91
- import { LslEventMarkerOutlet, MockEventMarkerOutlet } from '@neurodevs/node-lsl'
92
-
93
- // In your tests / beforeEach
94
- LslEventMarkerOutlet.Class = MockEventMarkerOutlet
95
- const mock = await LslEventMarkerOutlet.Create()
96
-
97
- // Do something in your application that should start the outlet
98
-
99
- const expectedMarkers = ['phase-1-begin', ...]
100
- mock.assertDidPushSamples(expectedMarkers)
101
- ```
102
-
103
- Now, you'll have a failing test. There will be a helpful error message to guide you towards the solution. Basically, you just need to call the `pushSample` method in your application with the expected markers. See examples above for how to do so.
@@ -7,5 +7,9 @@
7
7
  ],
8
8
  "installed": [
9
9
  "test"
10
- ]
10
+ ],
11
+ "regressionproof": {
12
+ "enabled": true,
13
+ "projectName": "node-lsl"
14
+ }
11
15
  }
@@ -1,6 +1,6 @@
1
+ import { FakeLiblsl } from '@neurodevs/ndx-native';
1
2
  import AbstractModuleTest from '@neurodevs/node-tdd';
2
3
  import { OnDataCallback, StreamInletOptions } from '../impl/LslStreamInlet.js';
3
- import FakeLiblsl from '../testDoubles/Liblsl/FakeLiblsl.js';
4
4
  import FakeStreamInfo from '../testDoubles/StreamInfo/FakeStreamInfo.js';
5
5
  export default class AbstractPackageTest extends AbstractModuleTest {
6
6
  protected static fakeLiblsl: FakeLiblsl;
@@ -11,17 +11,17 @@ export default class AbstractPackageTest extends AbstractModuleTest {
11
11
  protected static setSpyStreamInlet(): void;
12
12
  protected static setFakeStreamInlet(): void;
13
13
  protected static setFakeStreamOutlet(): void;
14
- protected static setSpyEventMarkerOutlet(): void;
14
+ protected static setSpyEventMarkerEmitter(): void;
15
15
  protected static setSpyLslWebSocketBridge(): void;
16
16
  protected static setFakeWebSocket(): void;
17
17
  protected static setFakeWebSocketServer(): void;
18
- protected static readonly info: FakeStreamInfo;
18
+ protected static readonly fakeStreamInfo: FakeStreamInfo;
19
19
  protected static readonly name_: string;
20
20
  protected static readonly type: string;
21
21
  protected static readonly sourceId: string;
22
22
  protected static readonly units: string;
23
23
  protected static readonly channelNames: string[];
24
- protected static get channelCount(): number;
24
+ protected static readonly channelCount: number;
25
25
  protected static readonly chunkSize = 2;
26
26
  protected static readonly sampleRateHz: number;
27
27
  protected static readonly maxBufferedMs: number;
@@ -1,12 +1,11 @@
1
+ import { FakeLiblsl, LiblslAdapter } from '@neurodevs/ndx-native';
1
2
  import AbstractModuleTest from '@neurodevs/node-tdd';
2
- import LiblslAdapter from '../impl/LiblslAdapter.js';
3
- import LslEventMarkerOutlet from '../impl/LslEventMarkerOutlet.js';
3
+ import LslEventMarkerEmitter from '../impl/LslEventMarkerEmitter.js';
4
4
  import LslStreamInfo from '../impl/LslStreamInfo.js';
5
5
  import LslStreamInlet from '../impl/LslStreamInlet.js';
6
6
  import LslStreamOutlet from '../impl/LslStreamOutlet.js';
7
7
  import LslWebSocketBridge from '../impl/LslWebSocketBridge.js';
8
- import SpyEventMarkerOutlet from '../testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.js';
9
- import FakeLiblsl from '../testDoubles/Liblsl/FakeLiblsl.js';
8
+ import SpyEventMarkerEmitter from '../testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js';
10
9
  import FakeStreamInfo from '../testDoubles/StreamInfo/FakeStreamInfo.js';
11
10
  import SpyStreamInfo from '../testDoubles/StreamInfo/SpyStreamInfo.js';
12
11
  import FakeStreamInlet from '../testDoubles/StreamInlet/FakeStreamInlet.js';
@@ -24,6 +23,7 @@ export default class AbstractPackageTest extends AbstractModuleTest {
24
23
  this.fakeLiblsl = new FakeLiblsl();
25
24
  LiblslAdapter.setInstance(this.fakeLiblsl);
26
25
  FakeLiblsl.fakeErrorCode = 0;
26
+ FakeLiblsl.fakeInfoHandles = [{}];
27
27
  }
28
28
  static setSpyStreamInfo() {
29
29
  LslStreamInfo.Class = SpyStreamInfo;
@@ -44,8 +44,8 @@ export default class AbstractPackageTest extends AbstractModuleTest {
44
44
  LslStreamOutlet.Class = FakeStreamOutlet;
45
45
  FakeStreamOutlet.resetTestDouble();
46
46
  }
47
- static setSpyEventMarkerOutlet() {
48
- LslEventMarkerOutlet.Class = SpyEventMarkerOutlet;
47
+ static setSpyEventMarkerEmitter() {
48
+ LslEventMarkerEmitter.Class = SpyEventMarkerEmitter;
49
49
  }
50
50
  static setSpyLslWebSocketBridge() {
51
51
  LslWebSocketBridge.Class = SpyLslWebSocketBridge;
@@ -58,7 +58,7 @@ export default class AbstractPackageTest extends AbstractModuleTest {
58
58
  LslWebSocketBridge.WSS = FakeWebSocketServer;
59
59
  FakeWebSocketServer.resetTestDouble();
60
60
  }
61
- static info = new FakeStreamInfo();
61
+ static fakeStreamInfo = new FakeStreamInfo();
62
62
  static name_ = this.generateId();
63
63
  static type = this.generateId();
64
64
  static sourceId = this.generateId();
@@ -68,15 +68,13 @@ export default class AbstractPackageTest extends AbstractModuleTest {
68
68
  this.generateId(),
69
69
  this.generateId(),
70
70
  ];
71
- static get channelCount() {
72
- return this.channelNames.length;
73
- }
71
+ static channelCount = this.channelNames.length;
74
72
  static chunkSize = 2;
75
73
  static sampleRateHz = Math.floor(Math.random() * 100);
76
74
  static maxBufferedMs = Math.floor(Math.random() * 1000);
77
75
  static async LslStreamInlet(options, onData) {
78
76
  const defaultOptions = {
79
- info: this.info,
77
+ sourceId: this.sourceId,
80
78
  chunkSize: this.chunkSize,
81
79
  maxBufferedMs: this.maxBufferedMs,
82
80
  ...options,
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractPackageTest.js","sourceRoot":"","sources":["../../src/__tests__/AbstractPackageTest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AbstractPackageTest.js","sourceRoot":"","sources":["../../src/__tests__/AbstractPackageTest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import AbstractPackageTest from '../AbstractPackageTest.js';
2
+ export default class LslBackpressureMonitorTest extends AbstractPackageTest {
3
+ private static instance;
4
+ protected static beforeEach(): Promise<void>;
5
+ protected static createsInstance(): Promise<void>;
6
+ private static LslBackpressureMonitor;
7
+ }
@@ -0,0 +1,26 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { test, assert } from '@neurodevs/node-tdd';
8
+ import LslBackpressureMonitor from '../../impl/LslBackpressureMonitor.js';
9
+ import AbstractPackageTest from '../AbstractPackageTest.js';
10
+ export default class LslBackpressureMonitorTest extends AbstractPackageTest {
11
+ static instance;
12
+ static async beforeEach() {
13
+ await super.beforeEach();
14
+ this.instance = this.LslBackpressureMonitor();
15
+ }
16
+ static async createsInstance() {
17
+ assert.isTruthy(this.instance, 'Failed to create instance!');
18
+ }
19
+ static LslBackpressureMonitor() {
20
+ return LslBackpressureMonitor.Create();
21
+ }
22
+ }
23
+ __decorate([
24
+ test()
25
+ ], LslBackpressureMonitorTest, "createsInstance", null);
26
+ //# sourceMappingURL=LslBackpressureMonitor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LslBackpressureMonitor.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/LslBackpressureMonitor.test.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,sBAEN,MAAM,sCAAsC,CAAA;AAC7C,OAAO,mBAAmB,MAAM,2BAA2B,CAAA;AAE3D,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,mBAAmB;IAC/D,MAAM,CAAC,QAAQ,CAAqB;IAElC,MAAM,CAAC,KAAK,CAAC,UAAU;QAC7B,MAAM,KAAK,CAAC,UAAU,EAAE,CAAA;QAExB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAA;IACjD,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,eAAe;QAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAA;IAChE,CAAC;IAEO,MAAM,CAAC,sBAAsB;QACjC,OAAO,sBAAsB,CAAC,MAAM,EAAE,CAAA;IAC1C,CAAC;CACJ;AAP0B;IADtB,IAAI,EAAE;uDAGN"}
@@ -0,0 +1,34 @@
1
+ import AbstractPackageTest from '../AbstractPackageTest.js';
2
+ export default class EventMarkerEmitterTest extends AbstractPackageTest {
3
+ private static instance;
4
+ protected static beforeEach(): Promise<void>;
5
+ private static readonly markerName;
6
+ protected static createsInstance(): Promise<void>;
7
+ protected static loadsWithEventMarkerSpecificOptions(): Promise<void>;
8
+ protected static canOverrideDefaultOptions(): Promise<void>;
9
+ protected static emittingSingleMarkerIncrementsHitCountAndWaitTime(): Promise<void>;
10
+ protected static emittingTwoMarkersIncrementsHitCountAndWaitTimeTwice(): Promise<void>;
11
+ protected static emitterIsInterruptable(bailIdx: number): Promise<void>;
12
+ protected static canStartAgainAfterInterrupting(): Promise<void>;
13
+ protected static doesNotWaitIfInterrupted(): Promise<void>;
14
+ protected static clearsTimeoutOnInterrupt(): Promise<void>;
15
+ protected static emitCallsPushSampleOnStreamOutlet(): Promise<void>;
16
+ protected static emitWaitsForMsIfPassed(): Promise<void>;
17
+ protected static destroyCallsDestroyOnInternalStreamOutlet(): Promise<void>;
18
+ protected static destroyInterruptsIfRunning(): Promise<void>;
19
+ protected static sourceIdIsUniqueAcrossInstances(): Promise<void>;
20
+ protected static emitThrowsIfCalledWhileAlreadyRunning(): Promise<void>;
21
+ protected static emitManyThrowsIfCalledWhileAlreadyRunning(): Promise<void>;
22
+ protected static emitSetsIsRunningFalseOnceDone(): Promise<void>;
23
+ protected static emitManySetsIsRunningFalseOnceDone(): Promise<void>;
24
+ private static emitOnce;
25
+ private static emit;
26
+ private static emitManyOnce;
27
+ private static emitManyFor;
28
+ private static generateEventMarker;
29
+ private static interrupt;
30
+ private static destroy;
31
+ private static get streamOutlet();
32
+ private static setupOutlet;
33
+ private static LslEventMarkerEmitter;
34
+ }
@@ -0,0 +1,243 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { randomInt } from 'crypto';
8
+ import { assert, test } from '@neurodevs/node-tdd';
9
+ import LslEventMarkerEmitter from '../../impl/LslEventMarkerEmitter.js';
10
+ import SpyEventMarkerEmitter from '../../testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js';
11
+ import generateRandomOutletOptions from '../../testDoubles/generateRandomOutletOptions.js';
12
+ import FakeStreamOutlet from '../../testDoubles/StreamOutlet/FakeStreamOutlet.js';
13
+ import AbstractPackageTest from '../AbstractPackageTest.js';
14
+ export default class EventMarkerEmitterTest extends AbstractPackageTest {
15
+ static instance;
16
+ static async beforeEach() {
17
+ await super.beforeEach();
18
+ this.setFakeLiblsl();
19
+ this.setFakeStreamOutlet();
20
+ this.setSpyEventMarkerEmitter();
21
+ this.instance = await this.LslEventMarkerEmitter();
22
+ }
23
+ static markerName = this.generateId();
24
+ static async createsInstance() {
25
+ assert.isTruthy(this.instance, 'Failed to create instance!');
26
+ }
27
+ static async loadsWithEventMarkerSpecificOptions() {
28
+ assert.isEqualDeep({
29
+ ...FakeStreamOutlet.callsToConstructor[0],
30
+ name: undefined,
31
+ sourceId: undefined,
32
+ }, {
33
+ name: undefined,
34
+ type: 'Markers',
35
+ sourceId: undefined,
36
+ channelNames: ['Markers'],
37
+ channelFormat: 'string',
38
+ sampleRateHz: 0,
39
+ chunkSize: 1,
40
+ });
41
+ assert.isTrue(FakeStreamOutlet.callsToConstructor[0]?.sourceId.startsWith('event-markers-'), 'Source ID was not generated uniquely!');
42
+ assert.isTrue(FakeStreamOutlet.callsToConstructor[0]?.name.startsWith('Event markers ('), 'Name was not generated uniquely!');
43
+ }
44
+ static async canOverrideDefaultOptions() {
45
+ const options = generateRandomOutletOptions();
46
+ await this.LslEventMarkerEmitter(options);
47
+ assert.isEqualDeep(FakeStreamOutlet.callsToConstructor[1], options);
48
+ }
49
+ static async emittingSingleMarkerIncrementsHitCountAndWaitTime() {
50
+ const markers = [this.generateEventMarker()];
51
+ await this.instance.emitMany(markers);
52
+ const marker = markers[0];
53
+ assert.isEqual(FakeStreamOutlet.callsToPushSample[0]?.sample[0], marker.name, 'Pushed the wrong marker!');
54
+ assert.isEqual(this.instance.totalwaitAfterMs, marker.waitAfterMs);
55
+ }
56
+ static async emittingTwoMarkersIncrementsHitCountAndWaitTimeTwice() {
57
+ const markers = await this.emitManyFor(2);
58
+ assert.isEqual(FakeStreamOutlet.callsToPushSample.length, 2);
59
+ assert.isEqual(this.instance.totalwaitAfterMs, markers[0].waitAfterMs + markers[1].waitAfterMs);
60
+ }
61
+ static async emitterIsInterruptable(bailIdx) {
62
+ let hitCount = 0;
63
+ this.streamOutlet.pushSample = () => {
64
+ hitCount += 1;
65
+ if (hitCount === bailIdx) {
66
+ this.interrupt();
67
+ }
68
+ };
69
+ await this.emitManyFor(10);
70
+ assert.isEqual(hitCount, bailIdx);
71
+ }
72
+ static async canStartAgainAfterInterrupting() {
73
+ this.interrupt();
74
+ let hitCount = 0;
75
+ this.streamOutlet.pushSample = () => {
76
+ hitCount++;
77
+ };
78
+ await this.emitManyFor(10);
79
+ assert.isEqual(hitCount, 10);
80
+ }
81
+ static async doesNotWaitIfInterrupted() {
82
+ await this.setupOutlet();
83
+ const startMs = Date.now();
84
+ const promise = this.emitManyFor(2, 1000);
85
+ this.interrupt();
86
+ await promise;
87
+ const endMs = Date.now();
88
+ assert.isBelow(endMs - startMs, 10);
89
+ }
90
+ static async clearsTimeoutOnInterrupt() {
91
+ void this.emitManyFor(2, 100);
92
+ this.interrupt();
93
+ this.streamOutlet.pushSample = () => assert.fail('Should not have been called');
94
+ }
95
+ static async emitCallsPushSampleOnStreamOutlet() {
96
+ const markerName = this.generateId();
97
+ await this.emit(markerName);
98
+ assert.isEqualDeep(FakeStreamOutlet.callsToPushSample[0]?.sample, [markerName], 'Pushed the wrong sample!');
99
+ }
100
+ static async emitWaitsForMsIfPassed() {
101
+ SpyEventMarkerEmitter.shouldCallWaitOnSuper = true;
102
+ const waitAfterMs = 10;
103
+ const startMs = Date.now();
104
+ await this.instance.emit(this.markerName, { waitAfterMs });
105
+ const endMs = Date.now();
106
+ assert.isAbove(endMs - startMs, 0.8 * waitAfterMs, 'Did not wait for the specified time!');
107
+ }
108
+ static async destroyCallsDestroyOnInternalStreamOutlet() {
109
+ this.destroy();
110
+ assert.isEqual(FakeStreamOutlet.numCallsToDestroy, 1, 'Did not call destroy on outlet!');
111
+ }
112
+ static async destroyInterruptsIfRunning() {
113
+ let wasHit = false;
114
+ const original = this.instance.interrupt.bind(this.instance);
115
+ this.instance.interrupt = () => {
116
+ wasHit = true;
117
+ original();
118
+ };
119
+ const promise = this.emitManyFor(5, 10);
120
+ this.destroy();
121
+ assert.isTrue(wasHit, 'Did not call interrupt on destroy!');
122
+ await promise;
123
+ }
124
+ static async sourceIdIsUniqueAcrossInstances() {
125
+ const instance = await this.LslEventMarkerEmitter();
126
+ assert.isNotEqual(instance['outlet'].sourceId, this.instance['outlet'].sourceId, 'Source IDs are not unique!');
127
+ }
128
+ static async emitThrowsIfCalledWhileAlreadyRunning() {
129
+ void this.instance.emit(this.markerName, { waitAfterMs: 10 });
130
+ await assert.doesThrowAsync(async () => {
131
+ await this.emit(this.generateId());
132
+ }, 'Cannot call emit while already running!');
133
+ }
134
+ static async emitManyThrowsIfCalledWhileAlreadyRunning() {
135
+ void EventMarkerEmitterTest.emitManyOnce();
136
+ await assert.doesThrowAsync(async () => {
137
+ await this.emitManyFor(5, 1);
138
+ }, 'Cannot call emitMany while already running!');
139
+ }
140
+ static async emitSetsIsRunningFalseOnceDone() {
141
+ await this.emitOnce();
142
+ assert.isFalse(this.instance['isRunning'], 'emit did not set isRunning to false once done!');
143
+ }
144
+ static async emitManySetsIsRunningFalseOnceDone() {
145
+ await this.emitManyOnce();
146
+ assert.isFalse(this.instance['isRunning'], 'emitMany did not set isRunning to false once done! ');
147
+ }
148
+ static async emitOnce() {
149
+ await this.emit(this.markerName);
150
+ }
151
+ static async emit(markerName, options) {
152
+ return this.instance.emit(markerName, options);
153
+ }
154
+ static async emitManyOnce() {
155
+ return this.emitManyFor(5, 1);
156
+ }
157
+ static async emitManyFor(total, waitAfterMs) {
158
+ const markers = new Array(total)
159
+ .fill(null)
160
+ .map(() => this.generateEventMarker(waitAfterMs));
161
+ await this.instance.emitMany(markers);
162
+ return markers;
163
+ }
164
+ static generateEventMarker(waitAfterMs) {
165
+ return {
166
+ name: this.generateId(),
167
+ waitAfterMs: waitAfterMs ?? randomInt(100, 1000),
168
+ };
169
+ }
170
+ static interrupt() {
171
+ this.instance.interrupt();
172
+ }
173
+ static destroy() {
174
+ this.instance.destroy();
175
+ }
176
+ static get streamOutlet() {
177
+ return this.instance.getStreamOutlet();
178
+ }
179
+ static async setupOutlet() {
180
+ LslEventMarkerEmitter.Class = LslEventMarkerEmitter;
181
+ this.instance = await this.LslEventMarkerEmitter();
182
+ }
183
+ static async LslEventMarkerEmitter(options) {
184
+ return (await LslEventMarkerEmitter.Create(options));
185
+ }
186
+ }
187
+ __decorate([
188
+ test()
189
+ ], EventMarkerEmitterTest, "createsInstance", null);
190
+ __decorate([
191
+ test()
192
+ ], EventMarkerEmitterTest, "loadsWithEventMarkerSpecificOptions", null);
193
+ __decorate([
194
+ test()
195
+ ], EventMarkerEmitterTest, "canOverrideDefaultOptions", null);
196
+ __decorate([
197
+ test()
198
+ ], EventMarkerEmitterTest, "emittingSingleMarkerIncrementsHitCountAndWaitTime", null);
199
+ __decorate([
200
+ test()
201
+ ], EventMarkerEmitterTest, "emittingTwoMarkersIncrementsHitCountAndWaitTimeTwice", null);
202
+ __decorate([
203
+ test('interrupts on first marker', 1),
204
+ test('interrupts on second marker', 2),
205
+ test('interrupts on third marker', 3)
206
+ ], EventMarkerEmitterTest, "emitterIsInterruptable", null);
207
+ __decorate([
208
+ test()
209
+ ], EventMarkerEmitterTest, "canStartAgainAfterInterrupting", null);
210
+ __decorate([
211
+ test()
212
+ ], EventMarkerEmitterTest, "doesNotWaitIfInterrupted", null);
213
+ __decorate([
214
+ test()
215
+ ], EventMarkerEmitterTest, "clearsTimeoutOnInterrupt", null);
216
+ __decorate([
217
+ test()
218
+ ], EventMarkerEmitterTest, "emitCallsPushSampleOnStreamOutlet", null);
219
+ __decorate([
220
+ test()
221
+ ], EventMarkerEmitterTest, "emitWaitsForMsIfPassed", null);
222
+ __decorate([
223
+ test()
224
+ ], EventMarkerEmitterTest, "destroyCallsDestroyOnInternalStreamOutlet", null);
225
+ __decorate([
226
+ test()
227
+ ], EventMarkerEmitterTest, "destroyInterruptsIfRunning", null);
228
+ __decorate([
229
+ test()
230
+ ], EventMarkerEmitterTest, "sourceIdIsUniqueAcrossInstances", null);
231
+ __decorate([
232
+ test()
233
+ ], EventMarkerEmitterTest, "emitThrowsIfCalledWhileAlreadyRunning", null);
234
+ __decorate([
235
+ test()
236
+ ], EventMarkerEmitterTest, "emitManyThrowsIfCalledWhileAlreadyRunning", null);
237
+ __decorate([
238
+ test()
239
+ ], EventMarkerEmitterTest, "emitSetsIsRunningFalseOnceDone", null);
240
+ __decorate([
241
+ test()
242
+ ], EventMarkerEmitterTest, "emitManySetsIsRunningFalseOnceDone", null);
243
+ //# sourceMappingURL=LslEventMarkerEmitter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LslEventMarkerEmitter.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/LslEventMarkerEmitter.test.ts"],"names":[],"mappings":"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"}
@@ -16,9 +16,6 @@ export default class LslStreamInfoTest extends AbstractPackageTest {
16
16
  protected static passesOptionsToStreamInfo(): Promise<void>;
17
17
  protected static appendsChannelsToStreamInfo(): Promise<void>;
18
18
  protected static callsBindingsToDestroyStreamInfo(): Promise<void>;
19
- protected static doesNotCreateNewStreamInfoIfPassedBoundInfo(): Promise<void>;
20
- protected static setsBoundInfoWhenPassed(): Promise<void>;
21
- protected static cachesInfoAttributesByBoundInfo(): Promise<void>;
22
19
  private static readonly defaultOptions;
23
20
  private static LslStreamInfo;
24
21
  }
@@ -105,7 +105,7 @@ export default class LslStreamInfoTest extends AbstractPackageTest {
105
105
  static async appendsChannelsToStreamInfo() {
106
106
  this.LslStreamInfo({ units: this.units, type: this.type });
107
107
  assert.isEqualDeep(this.fakeLiblsl.lastAppendChannelsToStreamInfoOptions, {
108
- info: this.instance.boundInfo,
108
+ infoHandle: this.instance.infoHandle,
109
109
  channels: this.channelNames.map((label) => ({
110
110
  label,
111
111
  units: this.units,
@@ -115,23 +115,7 @@ export default class LslStreamInfoTest extends AbstractPackageTest {
115
115
  }
116
116
  static async callsBindingsToDestroyStreamInfo() {
117
117
  this.instance.destroy();
118
- assert.isEqualDeep(this.fakeLiblsl.lastDestroyStreamInfoOptions?.info, this.instance.boundInfo, 'Should have called destroyStreamInfo!');
119
- }
120
- static async doesNotCreateNewStreamInfoIfPassedBoundInfo() {
121
- this.LslStreamInfo({
122
- boundInfo: this.instance.boundInfo,
123
- });
124
- assert.isEqual(this.fakeLiblsl.createStreamInfoHitCount, 1, 'Should not have created new stream info!');
125
- }
126
- static async setsBoundInfoWhenPassed() {
127
- const instance = this.LslStreamInfo({
128
- boundInfo: this.instance.boundInfo,
129
- });
130
- assert.isEqualDeep(instance.boundInfo, this.instance.boundInfo, 'Should have set bound stream info!');
131
- }
132
- static async cachesInfoAttributesByBoundInfo() {
133
- const cached = LslStreamInfo.From(this.instance.boundInfo);
134
- assert.isEqualDeep(cached, this.instance, 'Should have set bound stream info!');
118
+ assert.isEqualDeep(this.fakeLiblsl.lastDestroyStreamInfoOptions?.infoHandle, this.instance.infoHandle, 'Should have called destroyStreamInfo!');
135
119
  }
136
120
  static defaultOptions = {
137
121
  name: this.name,
@@ -190,13 +174,4 @@ __decorate([
190
174
  __decorate([
191
175
  test()
192
176
  ], LslStreamInfoTest, "callsBindingsToDestroyStreamInfo", null);
193
- __decorate([
194
- test()
195
- ], LslStreamInfoTest, "doesNotCreateNewStreamInfoIfPassedBoundInfo", null);
196
- __decorate([
197
- test()
198
- ], LslStreamInfoTest, "setsBoundInfoWhenPassed", null);
199
- __decorate([
200
- test()
201
- ], LslStreamInfoTest, "cachesInfoAttributesByBoundInfo", null);
202
177
  //# sourceMappingURL=LslStreamInfo.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LslStreamInfo.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/LslStreamInfo.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LslStreamInfo.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/LslStreamInfo.test.ts"],"names":[],"mappings":"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"}