@neurodevs/node-lsl 19.0.0 → 20.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/build/__tests__/AbstractPackageTest.d.ts +11 -11
  2. package/build/__tests__/AbstractPackageTest.js +26 -30
  3. package/build/__tests__/AbstractPackageTest.js.map +1 -1
  4. package/build/__tests__/impl/BleDeviceController.test.d.ts +1 -1
  5. package/build/__tests__/impl/BleDeviceController.test.js +8 -10
  6. package/build/__tests__/impl/BleDeviceController.test.js.map +1 -1
  7. package/build/__tests__/impl/LslEventMarkerEmitter.test.js +13 -13
  8. package/build/__tests__/impl/LslEventMarkerEmitter.test.js.map +1 -1
  9. package/build/__tests__/impl/LslStreamInfo.test.js +2 -2
  10. package/build/__tests__/impl/LslStreamInfo.test.js.map +1 -1
  11. package/build/__tests__/impl/LslStreamInlet.test.d.ts +3 -5
  12. package/build/__tests__/impl/LslStreamInlet.test.js +13 -46
  13. package/build/__tests__/impl/LslStreamInlet.test.js.map +1 -1
  14. package/build/__tests__/impl/LslStreamOutlet.test.js +7 -12
  15. package/build/__tests__/impl/LslStreamOutlet.test.js.map +1 -1
  16. package/build/__tests__/impl/LslWebSocketBridge.test.js +9 -10
  17. package/build/__tests__/impl/LslWebSocketBridge.test.js.map +1 -1
  18. package/build/__tests__/impl/WindowedClockRegressor.test.js +1 -1
  19. package/build/__tests__/impl/WindowedClockRegressor.test.js.map +1 -1
  20. package/build/assertions.js +1 -1
  21. package/build/assertions.js.map +1 -1
  22. package/build/impl/LslEventMarkerEmitter.d.ts +12 -12
  23. package/build/impl/LslEventMarkerEmitter.js.map +1 -1
  24. package/build/impl/LslStreamInfo.d.ts +7 -7
  25. package/build/impl/LslStreamInfo.js.map +1 -1
  26. package/build/impl/LslStreamInlet.d.ts +63 -21
  27. package/build/impl/LslStreamInlet.js +221 -65
  28. package/build/impl/LslStreamInlet.js.map +1 -1
  29. package/build/impl/LslStreamOutlet.d.ts +15 -14
  30. package/build/impl/LslStreamOutlet.js +32 -36
  31. package/build/impl/LslStreamOutlet.js.map +1 -1
  32. package/build/impl/LslWebSocketBridge.d.ts +10 -10
  33. package/build/impl/LslWebSocketBridge.js.map +1 -1
  34. package/build/impl/clocks/WindowedClockRegressor.js.map +1 -0
  35. package/build/impl/controllers/BleDeviceController.d.ts +1 -1
  36. package/build/impl/controllers/BleDeviceController.js +1 -1
  37. package/build/impl/controllers/BleDeviceController.js.map +1 -1
  38. package/build/index.d.ts +27 -23
  39. package/build/index.js +32 -29
  40. package/build/index.js.map +1 -1
  41. package/build/scripts/{runLslEventMarkerEmitter.js → runLslEmitter.js} +5 -4
  42. package/build/scripts/runLslEmitter.js.map +1 -0
  43. package/build/scripts/{runLslStreamOutlet.js → runLslOutlet.js} +1 -1
  44. package/build/scripts/runLslOutlet.js.map +1 -0
  45. package/build/scripts/runMuse.js +1 -1
  46. package/build/scripts/runMuse.js.map +1 -1
  47. package/build/testDoubles/ClockRegressor/FakeClockRegressor.d.ts +1 -1
  48. package/build/testDoubles/{EventMarkerEmitter/FakeEventMarkerEmitter.d.ts → LslEmitter/FakeLslEmitter.d.ts} +4 -4
  49. package/build/testDoubles/{EventMarkerEmitter/FakeEventMarkerEmitter.js → LslEmitter/FakeLslEmitter.js} +7 -7
  50. package/build/testDoubles/LslEmitter/FakeLslEmitter.js.map +1 -0
  51. package/build/testDoubles/{EventMarkerEmitter/SpyEventMarkerEmitter.d.ts → LslEmitter/SpyLslEmitter.d.ts} +4 -4
  52. package/build/testDoubles/{EventMarkerEmitter/SpyEventMarkerEmitter.js → LslEmitter/SpyLslEmitter.js} +3 -3
  53. package/build/testDoubles/LslEmitter/SpyLslEmitter.js.map +1 -0
  54. package/build/testDoubles/LslEmitter/ThrowingLslEmitter.d.ts +9 -0
  55. package/build/testDoubles/{EventMarkerEmitter/ThrowingEventMarkerEmitter.js → LslEmitter/ThrowingLslEmitter.js} +2 -2
  56. package/build/testDoubles/LslEmitter/ThrowingLslEmitter.js.map +1 -0
  57. package/build/testDoubles/{StreamInfo/FakeStreamInfo.d.ts → LslInfo/FakeLslInfo.d.ts} +4 -4
  58. package/build/testDoubles/{StreamInfo/FakeStreamInfo.js → LslInfo/FakeLslInfo.js} +7 -7
  59. package/build/testDoubles/LslInfo/FakeLslInfo.js.map +1 -0
  60. package/build/testDoubles/LslInfo/SpyLslInfo.d.ts +10 -0
  61. package/build/testDoubles/{StreamInfo/SpyStreamInfo.js → LslInfo/SpyLslInfo.js} +4 -4
  62. package/build/testDoubles/LslInfo/SpyLslInfo.js.map +1 -0
  63. package/build/testDoubles/{StreamInlet/FakeStreamInlet.d.ts → LslInlet/FakeLslInlet.d.ts} +4 -4
  64. package/build/testDoubles/{StreamInlet/FakeStreamInlet.js → LslInlet/FakeLslInlet.js} +12 -11
  65. package/build/testDoubles/LslInlet/FakeLslInlet.js.map +1 -0
  66. package/build/testDoubles/LslInlet/SpyLslInlet.d.ts +4 -0
  67. package/build/testDoubles/{StreamInlet/SpyStreamInlet.js → LslInlet/SpyLslInlet.js} +2 -2
  68. package/build/testDoubles/LslInlet/SpyLslInlet.js.map +1 -0
  69. package/build/testDoubles/{StreamOutlet/FakeStreamOutlet.d.ts → LslOutlet/FakeLslOutlet.d.ts} +5 -5
  70. package/build/testDoubles/{StreamOutlet/FakeStreamOutlet.js → LslOutlet/FakeLslOutlet.js} +8 -8
  71. package/build/testDoubles/LslOutlet/FakeLslOutlet.js.map +1 -0
  72. package/build/testDoubles/LslWsBridge/FakeLslWsBridge.d.ts +14 -0
  73. package/build/testDoubles/{WebSocketBridge/FakeWebSocketBridge.js → LslWsBridge/FakeLslWsBridge.js} +14 -14
  74. package/build/testDoubles/LslWsBridge/FakeLslWsBridge.js.map +1 -0
  75. package/build/testDoubles/LslWsBridge/SpyLslWsBridge.d.ts +4 -0
  76. package/build/testDoubles/{WebSocketBridge/SpyLslWebSocketBridge.js → LslWsBridge/SpyLslWsBridge.js} +2 -2
  77. package/build/testDoubles/LslWsBridge/SpyLslWsBridge.js.map +1 -0
  78. package/build/testDoubles/consts.d.ts +2 -12
  79. package/build/testDoubles/consts.js +0 -20
  80. package/build/testDoubles/consts.js.map +1 -1
  81. package/build/testDoubles/generateRandomOutletOptions.d.ts +2 -2
  82. package/build/testDoubles/generateRandomOutletOptions.js.map +1 -1
  83. package/package.json +4 -3
  84. package/src/__tests__/AbstractPackageTest.ts +29 -38
  85. package/src/__tests__/impl/BleDeviceController.test.ts +8 -10
  86. package/src/__tests__/impl/LslEventMarkerEmitter.test.ts +19 -24
  87. package/src/__tests__/impl/LslStreamInfo.test.ts +8 -8
  88. package/src/__tests__/impl/LslStreamInlet.test.ts +21 -78
  89. package/src/__tests__/impl/LslStreamOutlet.test.ts +17 -24
  90. package/src/__tests__/impl/LslWebSocketBridge.test.ts +15 -18
  91. package/src/__tests__/impl/WindowedClockRegressor.test.ts +1 -1
  92. package/src/assertions.ts +1 -2
  93. package/src/impl/LslEventMarkerEmitter.ts +15 -17
  94. package/src/impl/LslStreamInfo.ts +7 -9
  95. package/src/impl/LslStreamInlet.ts +305 -81
  96. package/src/impl/LslStreamOutlet.ts +57 -56
  97. package/src/impl/LslWebSocketBridge.ts +15 -18
  98. package/src/impl/controllers/BleDeviceController.ts +1 -1
  99. package/src/index.ts +38 -34
  100. package/src/scripts/{runLslEventMarkerEmitter.ts → runLslEmitter.ts} +4 -3
  101. package/src/scripts/runMuse.ts +1 -1
  102. package/src/testDoubles/ClockRegressor/FakeClockRegressor.ts +1 -1
  103. package/src/testDoubles/{EventMarkerEmitter/FakeEventMarkerEmitter.ts → LslEmitter/FakeLslEmitter.ts} +10 -10
  104. package/src/testDoubles/{EventMarkerEmitter/SpyEventMarkerEmitter.ts → LslEmitter/SpyLslEmitter.ts} +4 -4
  105. package/src/testDoubles/{EventMarkerEmitter/ThrowingEventMarkerEmitter.ts → LslEmitter/ThrowingLslEmitter.ts} +4 -4
  106. package/src/testDoubles/{StreamInfo/FakeStreamInfo.ts → LslInfo/FakeLslInfo.ts} +9 -9
  107. package/src/testDoubles/{StreamInfo/SpyStreamInfo.ts → LslInfo/SpyLslInfo.ts} +5 -5
  108. package/src/testDoubles/{StreamInlet/FakeStreamInlet.ts → LslInlet/FakeLslInlet.ts} +15 -14
  109. package/src/testDoubles/LslInlet/SpyLslInlet.ts +10 -0
  110. package/src/testDoubles/{StreamOutlet/FakeStreamOutlet.ts → LslOutlet/FakeLslOutlet.ts} +11 -14
  111. package/src/testDoubles/{WebSocketBridge/FakeWebSocketBridge.ts → LslWsBridge/FakeLslWsBridge.ts} +19 -19
  112. package/src/testDoubles/LslWsBridge/SpyLslWsBridge.ts +9 -0
  113. package/src/testDoubles/consts.ts +3 -23
  114. package/src/testDoubles/generateRandomOutletOptions.ts +2 -2
  115. package/build/consts.d.ts +0 -11
  116. package/build/consts.js +0 -21
  117. package/build/consts.js.map +0 -1
  118. package/build/impl/WindowedClockRegressor.js.map +0 -1
  119. package/build/impl/workers/inlet/LslStreamInlet.worker.d.ts +0 -22
  120. package/build/impl/workers/inlet/LslStreamInlet.worker.js +0 -42
  121. package/build/impl/workers/inlet/LslStreamInlet.worker.js.map +0 -1
  122. package/build/impl/workers/inlet/StreamInletWorker.d.ts +0 -73
  123. package/build/impl/workers/inlet/StreamInletWorker.js +0 -253
  124. package/build/impl/workers/inlet/StreamInletWorker.js.map +0 -1
  125. package/build/impl/workers/outlet/LslStreamOutlet.worker.d.ts +0 -32
  126. package/build/impl/workers/outlet/LslStreamOutlet.worker.js +0 -82
  127. package/build/impl/workers/outlet/LslStreamOutlet.worker.js.map +0 -1
  128. package/build/scripts/discoverMuse.js +0 -40
  129. package/build/scripts/discoverMuse.js.map +0 -1
  130. package/build/scripts/runLslEventMarkerEmitter.js.map +0 -1
  131. package/build/scripts/runLslStreamOutlet.d.ts +0 -1
  132. package/build/scripts/runLslStreamOutlet.js.map +0 -1
  133. package/build/scripts/testDestroyOutlet.d.ts +0 -1
  134. package/build/scripts/testDestroyOutlet.js +0 -4
  135. package/build/scripts/testDestroyOutlet.js.map +0 -1
  136. package/build/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.js.map +0 -1
  137. package/build/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.js.map +0 -1
  138. package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.d.ts +0 -9
  139. package/build/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.js.map +0 -1
  140. package/build/testDoubles/StreamInfo/FakeStreamInfo.js.map +0 -1
  141. package/build/testDoubles/StreamInfo/SpyStreamInfo.d.ts +0 -10
  142. package/build/testDoubles/StreamInfo/SpyStreamInfo.js.map +0 -1
  143. package/build/testDoubles/StreamInlet/FakeStreamInlet.js.map +0 -1
  144. package/build/testDoubles/StreamInlet/SpyStreamInlet.d.ts +0 -4
  145. package/build/testDoubles/StreamInlet/SpyStreamInlet.js.map +0 -1
  146. package/build/testDoubles/StreamOutlet/FakeStreamOutlet.js.map +0 -1
  147. package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.d.ts +0 -14
  148. package/build/testDoubles/WebSocketBridge/FakeWebSocketBridge.js.map +0 -1
  149. package/build/testDoubles/WebSocketBridge/SpyLslWebSocketBridge.d.ts +0 -4
  150. package/build/testDoubles/WebSocketBridge/SpyLslWebSocketBridge.js.map +0 -1
  151. package/build/testDoubles/WorkerThreads/FakeWorker.d.ts +0 -27
  152. package/build/testDoubles/WorkerThreads/FakeWorker.js +0 -67
  153. package/build/testDoubles/WorkerThreads/FakeWorker.js.map +0 -1
  154. package/src/consts.ts +0 -21
  155. package/src/impl/workers/inlet/LslStreamInlet.worker.ts +0 -74
  156. package/src/impl/workers/inlet/StreamInletWorker.ts +0 -348
  157. package/src/impl/workers/outlet/LslStreamOutlet.worker.ts +0 -144
  158. package/src/scripts/discoverMuse.ts +0 -50
  159. package/src/scripts/testDestroyOutlet.ts +0 -5
  160. package/src/testDoubles/StreamInlet/SpyStreamInlet.ts +0 -10
  161. package/src/testDoubles/WebSocketBridge/SpyLslWebSocketBridge.ts +0 -9
  162. package/src/testDoubles/WorkerThreads/FakeWorker.ts +0 -99
  163. /package/build/impl/{WindowedClockRegressor.d.ts → clocks/WindowedClockRegressor.d.ts} +0 -0
  164. /package/build/impl/{WindowedClockRegressor.js → clocks/WindowedClockRegressor.js} +0 -0
  165. /package/build/scripts/{discoverMuse.d.ts → runLslEmitter.d.ts} +0 -0
  166. /package/build/scripts/{runLslEventMarkerEmitter.d.ts → runLslOutlet.d.ts} +0 -0
  167. /package/src/impl/{WindowedClockRegressor.ts → clocks/WindowedClockRegressor.ts} +0 -0
  168. /package/src/scripts/{runLslStreamOutlet.ts → runLslOutlet.ts} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"testDestroyOutlet.js","sourceRoot":"","sources":["../../src/scripts/testDestroyOutlet.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,kCAAkC,CAAA;AAEpE,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,CAAA;AAEpD,OAAO,CAAC,OAAO,EAAE,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FakeEventMarkerEmitter.js","sourceRoot":"","sources":["../../../src/testDoubles/EventMarkerEmitter/FakeEventMarkerEmitter.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,OAAO,OAAO,sBAAsB;IAChC,MAAM,CAAC,qBAAqB,GAAG,CAAC,CAAA;IAEhC,MAAM,CAAC,WAAW,GAGnB,EAAE,CAAA;IAED,MAAM,CAAC,eAAe,GAAyB,EAAE,CAAA;IACjD,MAAM,CAAC,mBAAmB,GAAG,CAAC,CAAA;IAC9B,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAA;IAEnC;QACI,sBAAsB,CAAC,qBAAqB,EAAE,CAAA;IAClD,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,UAAkB,EAAE,OAA4B;QAC9D,sBAAsB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAA;IACpE,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,OAA2B;QAC7C,sBAAsB,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACxD,CAAC;IAEM,SAAS;QACZ,sBAAsB,CAAC,mBAAmB,EAAE,CAAA;IAChD,CAAC;IAEM,OAAO;QACV,sBAAsB,CAAC,iBAAiB,EAAE,CAAA;IAC9C,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAA;QAC9B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QACrB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAA;QACzB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAA;QAC5B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAA;IAC9B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SpyEventMarkerEmitter.js","sourceRoot":"","sources":["../../../src/testDoubles/EventMarkerEmitter/SpyEventMarkerEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,qCAAqC,CAAA;AAGvE,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,qBAAqB;IAC7D,MAAM,CAAC,qBAAqB,GAAG,KAAK,CAAA;IAEpC,gBAAgB,CAAQ;IAE/B,YAAmB,MAAoB;QACnC,KAAK,CAAC,MAAM,CAAC,CAAA;QAEb,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAA;IAC7B,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAmB;QACjC,IAAI,CAAC,gBAAgB,IAAI,WAAW,CAAA;QAEpC,IAAI,qBAAqB,CAAC,qBAAqB,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAClC,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC5B,CAAC;IAEM,eAAe;QAClB,OAAO,IAAI,CAAC,MAAM,CAAA;IACtB,CAAC;IAEM,eAAe;QAClB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAA;IAC7B,CAAC"}
@@ -1,9 +0,0 @@
1
- import { EventMarkerEmitter, EventMarkerOptions, TimedEventMarker } from '../../impl/LslEventMarkerEmitter.js';
2
- export default class ThrowingEventMarkerEmitter implements EventMarkerEmitter {
3
- private errorMsg;
4
- constructor();
5
- emit(_markerName: string, _options?: EventMarkerOptions): Promise<void>;
6
- emitMany(_markers: TimedEventMarker[]): Promise<void>;
7
- interrupt(): void;
8
- destroy(): void;
9
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThrowingEventMarkerEmitter.js","sourceRoot":"","sources":["../../../src/testDoubles/EventMarkerEmitter/ThrowingEventMarkerEmitter.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,OAAO,OAAO,0BAA0B;IACnC,QAAQ,GAAG,wBAAwB,CAAA;IAE3C;QACI,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,CAAA;IAClD,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAmB,EAAE,QAA6B;QAChE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAA;IAC3C,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,QAA4B;QAC9C,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAA;IAC/C,CAAC;IAEM,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAA;IAChD,CAAC;IAEM,OAAO;QACV,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAA;IAC9C,CAAC;CACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FakeStreamInfo.js","sourceRoot":"","sources":["../../../src/testDoubles/StreamInfo/FakeStreamInfo.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAK/C,MAAM,CAAC,OAAO,OAAO,cAAc;IACxB,MAAM,CAAC,kBAAkB,GAAsC,EAAE,CAAA;IACjE,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAA;IAE5B,MAAM,CAAC,UAAU,GAAG,EAAgB,CAAA;IAEpC,IAAI,GAAG,UAAU,EAAE,CAAA;IACnB,IAAI,GAAG,UAAU,EAAE,CAAA;IACnB,QAAQ,GAAG,UAAU,EAAE,CAAA;IACvB,YAAY,GAAa,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;IACnE,aAAa,GAAG,SAAkB,CAAA;IAClC,YAAY,GAAG,CAAC,CAAA;IAChB,KAAK,GAAG,KAAK,CAAA;IAEpB,YAAmB,OAA2B;QAC1C,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACnD,CAAC;IAEM,OAAO;QACV,cAAc,CAAC,iBAAiB,EAAE,CAAA;IACtC,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAA;IACnC,CAAC;IAED,IAAW,UAAU;QACjB,OAAO,cAAc,CAAC,UAAU,CAAA;IACpC,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,cAAc,CAAC,kBAAkB,GAAG,EAAE,CAAA;QACtC,cAAc,CAAC,iBAAiB,GAAG,CAAC,CAAA;IACxC,CAAC"}
@@ -1,10 +0,0 @@
1
- import LslStreamInfo, { StreamInfoOptions } from '../../impl/LslStreamInfo.js';
2
- export default class SpyStreamInfo extends LslStreamInfo {
3
- static numCallsToConstructor: number;
4
- constructor(options: StreamInfoOptions);
5
- getName(): string;
6
- getType(): string;
7
- getSourceId(): string;
8
- getUnits(): string;
9
- static resetTestDouble(): void;
10
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"SpyStreamInfo.js","sourceRoot":"","sources":["../../../src/testDoubles/StreamInfo/SpyStreamInfo.ts"],"names":[],"mappings":"AAAA,OAAO,aAAoC,MAAM,6BAA6B,CAAA;AAE9E,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,aAAa;IAC7C,MAAM,CAAC,qBAAqB,GAAG,CAAC,CAAA;IAEvC,YAAmB,OAA0B;QACzC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,aAAa,CAAC,qBAAqB,EAAE,CAAA;IACzC,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,IAAI,CAAA;IACpB,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,IAAI,CAAA;IACpB,CAAC;IAEM,WAAW;QACd,OAAO,IAAI,CAAC,QAAQ,CAAA;IACxB,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,KAAK,CAAA;IACrB,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,aAAa,CAAC,qBAAqB,GAAG,CAAC,CAAA;IAC3C,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FakeStreamInlet.js","sourceRoot":"","sources":["../../../src/testDoubles/StreamInlet/FakeStreamInlet.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,OAAO,OAAO,eAAe;IACzB,MAAM,CAAC,kBAAkB,GAG1B,EAAE,CAAA;IAED,MAAM,CAAC,sBAAsB,GAAG,CAAC,CAAA;IACjC,MAAM,CAAC,qBAAqB,GAAG,CAAC,CAAA;IAChC,MAAM,CAAC,oBAAoB,GAAG,CAAC,CAAA;IAC/B,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAA;IAE5B,SAAS,GAAG,KAAK,CAAA;IAEd,MAAM,CAAiB;IAEjC,YAAmB,OAA4B,EAAE,MAAuB;QACpE,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAElC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC;YACpC,OAAO;YACP,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAC,CAAA;IACN,CAAC;IAEM,KAAK,CAAC,YAAY;QACrB,eAAe,CAAC,sBAAsB,EAAE,CAAA;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACzB,CAAC;IAEM,WAAW;QACd,eAAe,CAAC,qBAAqB,EAAE,CAAA;QACvC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;IAC1B,CAAC;IAEM,UAAU;QACb,eAAe,CAAC,oBAAoB,EAAE,CAAA;IAC1C,CAAC;IAEM,OAAO;QACV,eAAe,CAAC,iBAAiB,EAAE,CAAA;IACvC,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,eAAe,CAAC,kBAAkB,GAAG,EAAE,CAAA;QACvC,eAAe,CAAC,sBAAsB,GAAG,CAAC,CAAA;QAC1C,eAAe,CAAC,oBAAoB,GAAG,CAAC,CAAA;QACxC,eAAe,CAAC,iBAAiB,GAAG,CAAC,CAAA;IACzC,CAAC"}
@@ -1,4 +0,0 @@
1
- import LslStreamInlet, { OnDataCallback, StreamInletOptions } from '../../impl/LslStreamInlet.js';
2
- export declare class SpyStreamInlet extends LslStreamInlet {
3
- constructor(options: StreamInletOptions, onData: OnDataCallback);
4
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"SpyStreamInlet.js","sourceRoot":"","sources":["../../../src/testDoubles/StreamInlet/SpyStreamInlet.ts"],"names":[],"mappings":"AAAA,OAAO,cAGN,MAAM,8BAA8B,CAAA;AAErC,MAAM,OAAO,cAAe,SAAQ,cAAc;IAC9C,YAAmB,OAA2B,EAAE,MAAsB;QAClE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC1B,CAAC;CACJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FakeStreamOutlet.js","sourceRoot":"","sources":["../../../src/testDoubles/StreamOutlet/FakeStreamOutlet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAQ/C,MAAM,CAAC,OAAO,OAAO,gBAAgB;IAC1B,MAAM,CAAC,kBAAkB,GAAwC,EAAE,CAAA;IAEnE,MAAM,CAAC,iBAAiB,GAGzB,EAAE,CAAA;IAED,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAA;IAE5B,OAAO,CAAsB;IAEpC,YAAmB,OAA6B;QAC5C,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACjD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IAC1B,CAAC;IAEM,OAAO;QACV,gBAAgB,CAAC,iBAAiB,EAAE,CAAA;IACxC,CAAC;IAEM,UAAU,CAAC,MAAiB,EAAE,YAAqB;QACtD,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC;YACpC,MAAM;YACN,YAAY;SACf,CAAC,CAAA;IACN,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,CAAA;IAC7C,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,CAAA;IAC7C,CAAC;IAED,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,CAAA;IACjD,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAA;IACnC,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,OAAO,EAAE,aAAa,IAAI,SAAS,CAAA;IACnD,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAC3D,CAAC;IAED,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IACxD,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,OAAO,EAAE,aAAa,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAC5D,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,UAAU,EAAE,CAAA;IACrD,CAAC;IAED,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,CAAA;IAC9C,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,gBAAgB,CAAC,kBAAkB,GAAG,EAAE,CAAA;QACxC,gBAAgB,CAAC,iBAAiB,GAAG,EAAE,CAAA;QACvC,gBAAgB,CAAC,iBAAiB,GAAG,CAAC,CAAA;IAC1C,CAAC"}
@@ -1,14 +0,0 @@
1
- import { WebSocketBridge, WebSocketBridgeConstructorOptions } from '../../impl/LslWebSocketBridge.js';
2
- export default class FakeWebSocketBridge implements WebSocketBridge {
3
- static callsToConstructor: (WebSocketBridgeConstructorOptions | undefined)[];
4
- static numCallsToActivate: number;
5
- static numCallsToDeactivate: number;
6
- static numCallsToDestroy: number;
7
- constructor(options?: WebSocketBridgeConstructorOptions);
8
- activate(): Promise<void>;
9
- deactivate(): void;
10
- destroy(): void;
11
- static resetTestDouble(): void;
12
- private static setFakeWebSocket;
13
- private static setFakeWebSocketServer;
14
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"FakeWebSocketBridge.js","sourceRoot":"","sources":["../../../src/testDoubles/WebSocketBridge/FakeWebSocketBridge.ts"],"names":[],"mappings":"AACA,OAAO,kBAGN,MAAM,kCAAkC,CAAA;AACzC,OAAO,aAAa,MAAM,gCAAgC,CAAA;AAC1D,OAAO,mBAAmB,MAAM,sCAAsC,CAAA;AAEtE,MAAM,CAAC,OAAO,OAAO,mBAAmB;IAC7B,MAAM,CAAC,kBAAkB,GAE1B,EAAE,CAAA;IAED,MAAM,CAAC,kBAAkB,GAAG,CAAC,CAAA;IAC7B,MAAM,CAAC,oBAAoB,GAAG,CAAC,CAAA;IAC/B,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAA;IAEnC,YAAmB,OAA2C;QAC1D,mBAAmB,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACxD,CAAC;IAEM,KAAK,CAAC,QAAQ;QACjB,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,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAA;QAC5B,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAA;QAC7B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAA;QAE1B,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACvB,IAAI,CAAC,sBAAsB,EAAE,CAAA;IACjC,CAAC;IAEO,MAAM,CAAC,gBAAgB;QAC3B,kBAAkB,CAAC,EAAE,GAAG,aAA4C,CAAA;QACpE,aAAa,CAAC,eAAe,EAAE,CAAA;IACnC,CAAC;IAEO,MAAM,CAAC,sBAAsB;QACjC,kBAAkB,CAAC,GAAG;YAClB,mBAAwD,CAAA;QAC5D,mBAAmB,CAAC,eAAe,EAAE,CAAA;IACzC,CAAC"}
@@ -1,4 +0,0 @@
1
- import LslWebSocketBridge, { WebSocketBridgeConstructorOptions } from '../../impl/LslWebSocketBridge.js';
2
- export default class SpyLslWebSocketBridge extends LslWebSocketBridge {
3
- constructor(options: WebSocketBridgeConstructorOptions);
4
- }
@@ -1 +0,0 @@
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"}
@@ -1,27 +0,0 @@
1
- import { WorkerOptions } from 'node:worker_threads';
2
- import { OnDataCallback } from '../../impl/LslStreamInlet.js';
3
- import StreamInletWorker from '../../impl/workers/inlet/StreamInletWorker.js';
4
- export default class FakeWorker {
5
- static callsToConstructor: {
6
- filename: string | URL;
7
- options?: WorkerOptions;
8
- }[];
9
- static callsToPostMessage: WorkerMessage[];
10
- static callsToOn: {
11
- type: string;
12
- listener: (...args: unknown[]) => void;
13
- }[];
14
- static inletWorker: StreamInletWorker;
15
- static fakeOnData: OnDataCallback;
16
- createInletPromise?: Promise<void>;
17
- constructor(filename: string | URL, options?: WorkerOptions);
18
- postMessage(msg: WorkerMessage): void;
19
- on(type: string, listener: (...args: unknown[]) => void): void;
20
- private get inletWorker();
21
- private get fakeOnData();
22
- static resetTestDoubles(): void;
23
- }
24
- export interface WorkerMessage {
25
- type: string;
26
- payload?: Record<string, unknown>[];
27
- }
@@ -1,67 +0,0 @@
1
- import StreamInletWorker from '../../impl/workers/inlet/StreamInletWorker.js';
2
- import { createOutlet, destroyOutlet, pushSample, } from '../../impl/workers/outlet/LslStreamOutlet.worker.js';
3
- export default class FakeWorker {
4
- static callsToConstructor = [];
5
- static callsToPostMessage = [];
6
- static callsToOn = [];
7
- static inletWorker = new StreamInletWorker();
8
- static fakeOnData;
9
- createInletPromise;
10
- constructor(filename, options) {
11
- FakeWorker.callsToConstructor.push({ filename, options });
12
- }
13
- postMessage(msg) {
14
- FakeWorker.callsToPostMessage.push(msg);
15
- const { type } = msg;
16
- switch (type) {
17
- case 'createOutlet': {
18
- createOutlet(msg);
19
- break;
20
- }
21
- case 'pushSample': {
22
- pushSample(msg);
23
- break;
24
- }
25
- case 'destroyOutlet': {
26
- destroyOutlet();
27
- break;
28
- }
29
- case 'createInlet': {
30
- const { payload } = msg;
31
- this.createInletPromise = this.inletWorker.createInlet(payload);
32
- break;
33
- }
34
- case 'startPulling': {
35
- this.inletWorker.startPulling(this.fakeOnData);
36
- break;
37
- }
38
- case 'flushInlet': {
39
- this.inletWorker.flushInlet();
40
- break;
41
- }
42
- case 'stopPulling': {
43
- this.inletWorker.stopPulling();
44
- break;
45
- }
46
- case 'destroyInlet': {
47
- this.inletWorker.destroyInlet();
48
- break;
49
- }
50
- }
51
- }
52
- on(type, listener) {
53
- FakeWorker.callsToOn.push({ type, listener });
54
- }
55
- get inletWorker() {
56
- return FakeWorker.inletWorker;
57
- }
58
- get fakeOnData() {
59
- return FakeWorker.fakeOnData;
60
- }
61
- static resetTestDoubles() {
62
- this.callsToConstructor = [];
63
- this.callsToPostMessage = [];
64
- this.callsToOn = [];
65
- }
66
- }
67
- //# sourceMappingURL=FakeWorker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FakeWorker.js","sourceRoot":"","sources":["../../../src/testDoubles/WorkerThreads/FakeWorker.ts"],"names":[],"mappings":"AAGA,OAAO,iBAAiB,MAAM,+CAA+C,CAAA;AAC7E,OAAO,EACH,YAAY,EACZ,aAAa,EACb,UAAU,GACb,MAAM,qDAAqD,CAAA;AAE5D,MAAM,CAAC,OAAO,OAAO,UAAU;IACpB,MAAM,CAAC,kBAAkB,GAG1B,EAAE,CAAA;IAED,MAAM,CAAC,kBAAkB,GAAoB,EAAE,CAAA;IAE/C,MAAM,CAAC,SAAS,GAGjB,EAAE,CAAA;IAED,MAAM,CAAC,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAA;IAC5C,MAAM,CAAC,UAAU,CAAgB;IAEjC,kBAAkB,CAAgB;IAEzC,YAAmB,QAAsB,EAAE,OAAuB;QAC9D,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;IAC7D,CAAC;IAEM,WAAW,CAAC,GAAkB;QACjC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAEvC,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAA;QAEpB,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,cAAc,CAAC,CAAC,CAAC;gBAClB,YAAY,CAAC,GAAU,CAAC,CAAA;gBACxB,MAAK;YACT,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAChB,UAAU,CAAC,GAAU,CAAC,CAAA;gBACtB,MAAK;YACT,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACnB,aAAa,EAAE,CAAA;gBACf,MAAK;YACT,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACjB,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAA;gBACvB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAClD,OAAc,CACjB,CAAA;gBACD,MAAK;YACT,CAAC;YACD,KAAK,cAAc,CAAC,CAAC,CAAC;gBAClB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBAC9C,MAAK;YACT,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAChB,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAA;gBAC7B,MAAK;YACT,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACjB,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAA;gBAC9B,MAAK;YACT,CAAC;YACD,KAAK,cAAc,CAAC,CAAC,CAAC;gBAClB,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAA;gBAC/B,MAAK;YACT,CAAC;QACL,CAAC;IACL,CAAC;IAEM,EAAE,CAAC,IAAY,EAAE,QAAsC;QAC1D,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IACjD,CAAC;IAED,IAAY,WAAW;QACnB,OAAO,UAAU,CAAC,WAAW,CAAA;IACjC,CAAC;IAED,IAAY,UAAU;QAClB,OAAO,UAAU,CAAC,UAAU,CAAA;IAChC,CAAC;IAEM,MAAM,CAAC,gBAAgB;QAC1B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAA;QAC5B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAA;QAC5B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;IACvB,CAAC"}
package/src/consts.ts DELETED
@@ -1,21 +0,0 @@
1
- export const CHANNEL_FORMATS = [
2
- 'undefined',
3
- 'float32',
4
- 'double64',
5
- 'string',
6
- 'int32',
7
- 'int16',
8
- 'int8',
9
- 'int64',
10
- ] as const
11
-
12
- export const CHANNEL_FORMATS_MAP = {
13
- undefined: 0,
14
- float32: 1,
15
- double64: 2,
16
- string: 3,
17
- int32: 4,
18
- int16: 5,
19
- int8: 6,
20
- int64: 7,
21
- }
@@ -1,74 +0,0 @@
1
- import { parentPort } from 'node:worker_threads'
2
- import StreamInletWorker from './StreamInletWorker.js'
3
-
4
- const worker = new StreamInletWorker()
5
-
6
- parentPort?.on('message', async (msg: InletMessage) => {
7
- try {
8
- switch (msg.type) {
9
- case 'createInlet':
10
- const { payload } = msg
11
- await worker.createInlet(payload)
12
- parentPort?.postMessage({ type: 'ready' })
13
- break
14
-
15
- case 'startPulling':
16
- worker.startPulling((samples, timestamps) => {
17
- parentPort?.postMessage({
18
- type: 'data',
19
- payload: {
20
- samples,
21
- timestamps,
22
- },
23
- })
24
- })
25
- break
26
-
27
- case 'stopPulling':
28
- worker.stopPulling()
29
- break
30
- case 'flushInlet':
31
- worker.flushInlet()
32
- break
33
-
34
- case 'destroyInlet':
35
- worker.destroyInlet()
36
- parentPort?.close()
37
- break
38
- }
39
- } catch (err) {
40
- parentPort?.postMessage({
41
- type: 'error',
42
- error: err instanceof Error ? err.message : String(err),
43
- })
44
- }
45
- })
46
-
47
- export type InletMessage =
48
- | {
49
- type: 'createInlet'
50
- payload: CreateInletPayload
51
- }
52
- | {
53
- type: 'startPulling'
54
- }
55
- | {
56
- type: 'flushInlet'
57
- }
58
- | {
59
- type: 'stopPulling'
60
- }
61
- | {
62
- type: 'destroyInlet'
63
- }
64
-
65
- export interface CreateInletPayload {
66
- sourceId: string
67
- chunkSize: number
68
- maxBufferedMs: number
69
- openStreamTimeoutMs: number
70
- waitAfterOpenStreamMs: number
71
- pullTimeoutMs: number
72
- waitBetweenPullsMs: number
73
- flushInletOnStop: boolean
74
- }
@@ -1,348 +0,0 @@
1
- import {
2
- handleLslError,
3
- InfoHandle,
4
- InletHandle,
5
- LiblslAdapter,
6
- } from '@neurodevs/ndx-native'
7
- import {
8
- JsExternal,
9
- unwrapPointer,
10
- createPointer,
11
- DataType,
12
- freePointer,
13
- PointerType,
14
- } from 'ffi-rs'
15
-
16
- import { OnDataCallback } from '../../LslStreamInlet.js'
17
- import { CreateInletPayload } from './LslStreamInlet.worker.js'
18
-
19
- export default class StreamInletWorker {
20
- public static lsl = LiblslAdapter.getInstance()
21
- public static handleLslError = handleLslError
22
- public static freePointer = freePointer
23
-
24
- private sourceId!: string
25
- private chunkSize!: number
26
- private maxBufferedMs!: number
27
- private openStreamTimeoutMs!: number
28
- private waitAfterOpenStreamMs!: number
29
- private waitBetweenPullsMs!: number
30
- private pullTimeoutMs!: number
31
- private flushInletOnStop!: boolean
32
-
33
- private pullMethod!: () => {
34
- samples: number[] | undefined
35
- timestamps: number[] | undefined
36
- }
37
-
38
- protected infoHandle!: InfoHandle
39
- protected inletHandle!: InletHandle
40
- private channelCount!: number
41
-
42
- private sampleBuffer!: Buffer<ArrayBuffer>
43
- private sampleBufferRef!: JsExternal[]
44
- private sampleBufferPtr!: JsExternal
45
-
46
- private timestampBuffer!: Buffer<ArrayBuffer>
47
- private timestampBufferRef!: JsExternal[]
48
- private timestampBufferPtr!: JsExternal
49
-
50
- private pullErrorBuffer!: Buffer<ArrayBuffer>
51
- private pullErrorBufferRef!: JsExternal[]
52
- private pullErrorBufferPtr!: JsExternal
53
-
54
- private openStreamErrorBuffer!: Buffer<ArrayBuffer>
55
- private openStreamErrorBufferRef!: JsExternal[]
56
- private openStreamErrorBufferPtr!: JsExternal
57
-
58
- private onData!: OnDataCallback
59
-
60
- private readonly bytesPerFloat = 4
61
- private readonly bytesPerDouble = 8
62
- private readonly bytesPerI32 = 4
63
-
64
- private isRunning = false
65
-
66
- public async createInlet(payload: CreateInletPayload) {
67
- Object.assign(this, payload)
68
-
69
- this.infoHandle = this.resolveInfoHandle()
70
- this.inletHandle = this.doCreateInlet()
71
- this.channelCount = this.getChannelCount()
72
-
73
- this.allocateWritableBuffers()
74
- this.setPullMethod()
75
-
76
- this.openStream()
77
- await this.waitForSetup()
78
- }
79
-
80
- private resolveInfoHandle() {
81
- const handles = this.resolveByProp()
82
-
83
- if (handles.length === 0) {
84
- this.throwNoStreamFound()
85
- } else if (handles.length > 1) {
86
- this.warnMultipleStreamsFound()
87
- }
88
- return handles[0]
89
- }
90
-
91
- private resolveByProp() {
92
- return this.lsl.resolveByProp({
93
- prop: 'source_id',
94
- value: this.sourceId,
95
- })
96
- }
97
-
98
- private throwNoStreamFound() {
99
- throw new Error(`No stream info for sourceId "${this.sourceId}"`)
100
- }
101
-
102
- private warnMultipleStreamsFound() {
103
- console.warn(
104
- `Multiple stream infos for sourceId "${this.sourceId}", using the first one.`
105
- )
106
- }
107
-
108
- private doCreateInlet() {
109
- return this.lsl.createInlet({
110
- infoHandle: this.infoHandle,
111
- maxBufferedMs: this.maxBufferedMs,
112
- })
113
- }
114
-
115
- private getChannelCount() {
116
- return this.lsl.getChannelCount({ infoHandle: this.infoHandle })
117
- }
118
-
119
- private allocateWritableBuffers() {
120
- this.allocateDataBuffer()
121
- this.allocateTimestampBuffer()
122
- this.allocatePullErrorBuffer()
123
- this.allocateOpenStreamErrorBuffer()
124
- }
125
-
126
- private allocateDataBuffer() {
127
- this.sampleBuffer = Buffer.alloc(
128
- this.channelCount * this.chunkSize * this.bytesPerFloat
129
- )
130
-
131
- this.sampleBufferRef = createPointer({
132
- paramsType: [DataType.U8Array],
133
- paramsValue: [this.sampleBuffer],
134
- })
135
-
136
- this.sampleBufferPtr = unwrapPointer(this.sampleBufferRef)[0]
137
- }
138
-
139
- private allocateTimestampBuffer() {
140
- this.timestampBuffer = Buffer.alloc(
141
- this.chunkSize * this.bytesPerDouble
142
- )
143
-
144
- this.timestampBufferRef = createPointer({
145
- paramsType: [DataType.U8Array],
146
- paramsValue: [this.timestampBuffer],
147
- })
148
-
149
- this.timestampBufferPtr = unwrapPointer(this.timestampBufferRef)[0]
150
- }
151
-
152
- private allocatePullErrorBuffer() {
153
- this.pullErrorBuffer = Buffer.alloc(this.bytesPerI32)
154
-
155
- this.pullErrorBufferRef = createPointer({
156
- paramsType: [DataType.U8Array],
157
- paramsValue: [this.pullErrorBuffer],
158
- })
159
-
160
- this.pullErrorBufferPtr = unwrapPointer(this.pullErrorBufferRef)[0]
161
- }
162
-
163
- private allocateOpenStreamErrorBuffer() {
164
- this.openStreamErrorBuffer = Buffer.alloc(this.bytesPerI32)
165
-
166
- this.openStreamErrorBufferRef = createPointer({
167
- paramsType: [DataType.U8Array],
168
- paramsValue: [this.openStreamErrorBuffer],
169
- })
170
-
171
- this.openStreamErrorBufferPtr = unwrapPointer(
172
- this.openStreamErrorBufferRef
173
- )[0]
174
- }
175
-
176
- private setPullMethod() {
177
- this.pullMethod =
178
- this.chunkSize === 1 ? this.pullSample : this.pullChunk
179
- }
180
-
181
- private pullSample = () => {
182
- const timestampSec = this.doPullsample()
183
-
184
- if (timestampSec > 0) {
185
- return {
186
- samples: this.readSamplesFromBuffer(),
187
- timestamps: [timestampSec],
188
- }
189
- }
190
- return { samples: undefined, timestamps: undefined }
191
- }
192
-
193
- private doPullsample() {
194
- return this.lsl.pullSample({
195
- inletHandle: this.inletHandle,
196
- sampleBufferPtr: this.sampleBufferPtr,
197
- sampleBufferElements: this.channelCount,
198
- timeoutMs: this.pullTimeoutMs,
199
- errorCodePtr: this.pullErrorBufferPtr,
200
- })
201
- }
202
-
203
- private readSamplesFromBuffer() {
204
- const floats = new Float32Array(
205
- this.sampleBuffer.buffer,
206
- this.sampleBuffer.byteOffset,
207
- this.chunkSize * this.channelCount
208
- )
209
- return Array.from(floats)
210
- }
211
-
212
- private pullChunk = () => {
213
- const firstTimestampSec = this.doPullChunk()
214
-
215
- if (firstTimestampSec > 0) {
216
- return {
217
- samples: this.readSamplesFromBuffer(),
218
- timestamps: this.readTimestampsFromBuffer(),
219
- }
220
- }
221
- return { samples: undefined, timestamps: undefined }
222
- }
223
-
224
- private doPullChunk() {
225
- return this.lsl.pullChunk({
226
- inletHandle: this.inletHandle,
227
- sampleBufferPtr: this.sampleBufferPtr,
228
- sampleBufferElements: this.chunkSize * this.channelCount,
229
- timestampBufferPtr: this.timestampBufferPtr,
230
- timestampBufferElements: this.chunkSize,
231
- timeoutMs: this.pullTimeoutMs,
232
- errorCodePtr: this.pullErrorBufferPtr,
233
- })
234
- }
235
-
236
- private readTimestampsFromBuffer() {
237
- const doubles = new Float64Array(
238
- this.timestampBuffer.buffer,
239
- this.timestampBuffer.byteOffset,
240
- this.chunkSize
241
- )
242
- return Array.from(doubles)
243
- }
244
-
245
- private openStream() {
246
- this.lsl.openStream({
247
- inletHandle: this.inletHandle,
248
- timeoutMs: this.openStreamTimeoutMs,
249
- errorCodePtr: this.openStreamErrorBufferPtr,
250
- })
251
- }
252
-
253
- private async waitForSetup() {
254
- return new Promise((r) => setTimeout(r, this.waitAfterOpenStreamMs))
255
- }
256
-
257
- public startPulling(onData: OnDataCallback) {
258
- if (this.isRunning) {
259
- console.warn('StreamInletWorker is already running.')
260
- return
261
- }
262
- this.isRunning = true
263
- this.onData = onData
264
-
265
- void this.pullLoop()
266
- }
267
-
268
- private async pullLoop() {
269
- while (this.isRunning) {
270
- await this.pullDataOnce()
271
- await this.waitBetweenPulls()
272
- }
273
- }
274
-
275
- private async pullDataOnce() {
276
- const { samples, timestamps } = this.pullMethod()
277
- this.handleLslErrorIfPresent()
278
-
279
- if (samples && timestamps) {
280
- this.onData(samples, timestamps)
281
- }
282
- }
283
-
284
- private handleLslErrorIfPresent() {
285
- const errorCode = this.pullErrorBuffer.readInt32LE()
286
- this.handleLslError(errorCode)
287
- }
288
-
289
- private async waitBetweenPulls() {
290
- await new Promise((r) => setTimeout(r, this.waitBetweenPullsMs))
291
- }
292
-
293
- public flushInlet() {
294
- this.lsl.flushInlet({ inletHandle: this.inletHandle })
295
- }
296
-
297
- public stopPulling() {
298
- this.isRunning = false
299
- this.closeStream()
300
-
301
- if (this.flushInletOnStop) {
302
- this.flushInlet()
303
- }
304
- }
305
-
306
- private closeStream() {
307
- this.lsl.closeStream({ inletHandle: this.inletHandle })
308
- }
309
-
310
- public destroyInlet() {
311
- this.doDestroyInlet()
312
- this.freeNativePointers()
313
- }
314
-
315
- private doDestroyInlet() {
316
- this.lsl.destroyInlet({ inletHandle: this.inletHandle })
317
- }
318
-
319
- private freeNativePointers() {
320
- this.freePointer({
321
- paramsType: [
322
- DataType.U8Array,
323
- DataType.U8Array,
324
- DataType.U8Array,
325
- DataType.U8Array,
326
- ],
327
- paramsValue: [
328
- this.openStreamErrorBufferPtr,
329
- this.sampleBufferPtr,
330
- this.timestampBufferPtr,
331
- this.pullErrorBufferPtr,
332
- ],
333
- pointerType: PointerType.CPointer,
334
- })
335
- }
336
-
337
- private get lsl() {
338
- return StreamInletWorker.lsl
339
- }
340
-
341
- private get handleLslError() {
342
- return StreamInletWorker.handleLslError
343
- }
344
-
345
- private get freePointer() {
346
- return StreamInletWorker.freePointer
347
- }
348
- }