@neurodevs/node-lsl 11.4.2 → 12.0.1

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 (167) hide show
  1. package/.vscode/tasks.json +19 -1
  2. package/README.md +8 -9
  3. package/build/__tests__/{AbstractLslTest.d.ts → AbstractPackageTest.d.ts} +7 -6
  4. package/build/__tests__/AbstractPackageTest.js +53 -0
  5. package/build/__tests__/AbstractPackageTest.js.map +1 -0
  6. package/build/__tests__/{modules → impl}/LiblslAdapter.test.d.ts +6 -3
  7. package/build/__tests__/{modules → impl}/LiblslAdapter.test.js +193 -151
  8. package/build/__tests__/impl/LiblslAdapter.test.js.map +1 -0
  9. package/build/__tests__/{modules/EventMarkerOutlet.test.d.ts → impl/LslEventMarkerOutlet.test.d.ts} +5 -4
  10. package/build/__tests__/{modules/EventMarkerOutlet.test.js → impl/LslEventMarkerOutlet.test.js} +54 -52
  11. package/build/__tests__/impl/LslEventMarkerOutlet.test.js.map +1 -0
  12. package/build/__tests__/{modules → impl}/LslStreamInfo.test.d.ts +3 -3
  13. package/build/__tests__/{modules → impl}/LslStreamInfo.test.js +53 -59
  14. package/build/__tests__/impl/LslStreamInfo.test.js.map +1 -0
  15. package/build/__tests__/impl/LslStreamInlet.test.d.ts +11 -0
  16. package/build/__tests__/{modules → impl}/LslStreamInlet.test.js +28 -26
  17. package/build/__tests__/impl/LslStreamInlet.test.js.map +1 -0
  18. package/build/__tests__/{modules → impl}/LslStreamOutlet.test.d.ts +3 -3
  19. package/build/__tests__/{modules → impl}/LslStreamOutlet.test.js +56 -60
  20. package/build/__tests__/impl/LslStreamOutlet.test.js.map +1 -0
  21. package/build/__tests__/impl/LslWebSocketBridge.test.d.ts +7 -0
  22. package/build/__tests__/impl/LslWebSocketBridge.test.js +26 -0
  23. package/build/__tests__/impl/LslWebSocketBridge.test.js.map +1 -0
  24. package/build/assertions.d.ts +1 -1
  25. package/build/assertions.js +13 -20
  26. package/build/assertions.js.map +1 -1
  27. package/build/consts.js +2 -5
  28. package/build/consts.js.map +1 -1
  29. package/build/{modules → impl}/LiblslAdapter.d.ts +5 -4
  30. package/build/{modules → impl}/LiblslAdapter.js +60 -51
  31. package/build/impl/LiblslAdapter.js.map +1 -0
  32. package/build/impl/LslEventMarkerOutlet.d.ts +23 -0
  33. package/build/{modules/EventMarkerOutlet.js → impl/LslEventMarkerOutlet.js} +12 -14
  34. package/build/impl/LslEventMarkerOutlet.js.map +1 -0
  35. package/build/{modules → impl}/LslStreamInfo.d.ts +1 -1
  36. package/build/{modules → impl}/LslStreamInfo.js +19 -16
  37. package/build/impl/LslStreamInfo.js.map +1 -0
  38. package/build/impl/LslStreamInlet.d.ts +34 -0
  39. package/build/{modules → impl}/LslStreamInlet.js +19 -16
  40. package/build/impl/LslStreamInlet.js.map +1 -0
  41. package/build/{modules → impl}/LslStreamOutlet.d.ts +10 -10
  42. package/build/{modules → impl}/LslStreamOutlet.js +22 -23
  43. package/build/impl/LslStreamOutlet.js.map +1 -0
  44. package/build/impl/LslWebSocketBridge.d.ts +8 -0
  45. package/build/impl/LslWebSocketBridge.js +8 -0
  46. package/build/impl/LslWebSocketBridge.js.map +1 -0
  47. package/build/index.d.ts +34 -30
  48. package/build/index.js +39 -69
  49. package/build/index.js.map +1 -1
  50. package/build/scripts/{demoMarkerOutlet.js → runLslEventMarkerOutlet.js} +3 -8
  51. package/build/scripts/runLslEventMarkerOutlet.js.map +1 -0
  52. package/build/scripts/{demoStreamOutlet.js → runLslStreamOutlet.js} +3 -8
  53. package/build/scripts/runLslStreamOutlet.js.map +1 -0
  54. package/build/testDoubles/{MarkerOutlet/FakeMarkerOutlet.d.ts → EventMarkerOutlet/FakeEventMarkerOutlet.d.ts} +3 -3
  55. package/build/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.js +26 -0
  56. package/build/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.js.map +1 -0
  57. package/build/testDoubles/{MarkerOutlet/MockMarkerOutlet.d.ts → EventMarkerOutlet/MockEventMarkerOutlet.d.ts} +3 -3
  58. package/build/testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.js +46 -0
  59. package/build/testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.js.map +1 -0
  60. package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.d.ts +9 -0
  61. package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.js +19 -0
  62. package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.js.map +1 -0
  63. package/build/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.d.ts +10 -0
  64. package/build/testDoubles/{MarkerOutlet/ThrowingMarkerOutlet.js → EventMarkerOutlet/ThrowingEventMarkerOutlet.js} +3 -6
  65. package/build/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.js.map +1 -0
  66. package/build/testDoubles/Liblsl/FakeLiblsl.d.ts +4 -1
  67. package/build/testDoubles/Liblsl/FakeLiblsl.js +23 -15
  68. package/build/testDoubles/Liblsl/FakeLiblsl.js.map +1 -1
  69. package/build/testDoubles/StreamInfo/FakeStreamInfo.d.ts +2 -2
  70. package/build/testDoubles/StreamInfo/FakeStreamInfo.js +3 -6
  71. package/build/testDoubles/StreamInfo/FakeStreamInfo.js.map +1 -1
  72. package/build/testDoubles/StreamInfo/SpyStreamInfo.d.ts +2 -2
  73. package/build/testDoubles/StreamInfo/SpyStreamInfo.js +2 -8
  74. package/build/testDoubles/StreamInfo/SpyStreamInfo.js.map +1 -1
  75. package/build/testDoubles/StreamInlet/FakeStreamInlet.d.ts +12 -0
  76. package/build/testDoubles/StreamInlet/FakeStreamInlet.js +18 -0
  77. package/build/testDoubles/StreamInlet/FakeStreamInlet.js.map +1 -0
  78. package/build/testDoubles/StreamInlet/SpyStreamInlet.d.ts +8 -0
  79. package/build/testDoubles/StreamInlet/SpyStreamInlet.js +16 -0
  80. package/build/testDoubles/StreamInlet/SpyStreamInlet.js.map +1 -0
  81. package/build/testDoubles/{LslOutlet/FakeLslOutlet.d.ts → StreamOutlet/FakeStreamOutlet.d.ts} +10 -11
  82. package/build/testDoubles/StreamOutlet/FakeStreamOutlet.js +57 -0
  83. package/build/testDoubles/StreamOutlet/FakeStreamOutlet.js.map +1 -0
  84. package/build/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.d.ts +6 -0
  85. package/build/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.js +10 -0
  86. package/build/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.js.map +1 -0
  87. package/build/testDoubles/consts.js +4 -7
  88. package/build/testDoubles/consts.js.map +1 -1
  89. package/build/testDoubles/generateRandomOutletOptions.d.ts +2 -2
  90. package/build/testDoubles/generateRandomOutletOptions.js +14 -17
  91. package/build/testDoubles/generateRandomOutletOptions.js.map +1 -1
  92. package/build/types.d.ts +9 -4
  93. package/build/types.js +1 -2
  94. package/build/validations.js +4 -10
  95. package/build/validations.js.map +1 -1
  96. package/package.json +22 -12
  97. package/src/__tests__/AbstractPackageTest.ts +65 -0
  98. package/src/__tests__/{modules → impl}/LiblslAdapter.test.ts +71 -44
  99. package/src/__tests__/{modules/EventMarkerOutlet.test.ts → impl/LslEventMarkerOutlet.test.ts} +40 -28
  100. package/src/__tests__/{modules → impl}/LslStreamInfo.test.ts +10 -8
  101. package/src/__tests__/{modules → impl}/LslStreamInlet.test.ts +27 -14
  102. package/src/__tests__/{modules → impl}/LslStreamOutlet.test.ts +24 -17
  103. package/src/__tests__/impl/LslWebSocketBridge.test.ts +25 -0
  104. package/src/assertions.ts +3 -3
  105. package/src/{modules → impl}/LiblslAdapter.ts +33 -21
  106. package/src/{modules/EventMarkerOutlet.ts → impl/LslEventMarkerOutlet.ts} +17 -12
  107. package/src/{modules → impl}/LslStreamInfo.ts +5 -4
  108. package/src/{modules → impl}/LslStreamInlet.ts +27 -16
  109. package/src/{modules → impl}/LslStreamOutlet.ts +19 -16
  110. package/src/impl/LslWebSocketBridge.ts +13 -0
  111. package/src/index.ts +43 -35
  112. package/src/scripts/{demoMarkerOutlet.ts → runLslEventMarkerOutlet.ts} +2 -2
  113. package/src/scripts/{demoStreamOutlet.ts → runLslStreamOutlet.ts} +1 -1
  114. package/src/testDoubles/{MarkerOutlet/FakeMarkerOutlet.ts → EventMarkerOutlet/FakeEventMarkerOutlet.ts} +7 -7
  115. package/src/testDoubles/{MarkerOutlet/MockMarkerOutlet.ts → EventMarkerOutlet/MockEventMarkerOutlet.ts} +5 -4
  116. package/src/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.ts +24 -0
  117. package/src/testDoubles/{MarkerOutlet/ThrowingMarkerOutlet.ts → EventMarkerOutlet/ThrowingEventMarkerOutlet.ts} +3 -3
  118. package/src/testDoubles/Liblsl/FakeLiblsl.ts +9 -1
  119. package/src/testDoubles/StreamInfo/FakeStreamInfo.ts +2 -2
  120. package/src/testDoubles/StreamInfo/SpyStreamInfo.ts +1 -1
  121. package/src/testDoubles/StreamInlet/FakeStreamInlet.ts +27 -0
  122. package/src/testDoubles/StreamInlet/SpyStreamInlet.ts +22 -0
  123. package/src/testDoubles/{LslOutlet/FakeLslOutlet.ts → StreamOutlet/FakeStreamOutlet.ts} +22 -19
  124. package/src/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.ts +15 -0
  125. package/src/testDoubles/generateRandomOutletOptions.ts +5 -4
  126. package/src/types.ts +11 -4
  127. package/tsconfig.json +17 -28
  128. package/build/__tests__/AbstractLslTest.js +0 -87
  129. package/build/__tests__/AbstractLslTest.js.map +0 -1
  130. package/build/__tests__/modules/EventMarkerOutlet.test.js.map +0 -1
  131. package/build/__tests__/modules/LiblslAdapter.test.js.map +0 -1
  132. package/build/__tests__/modules/LslStreamInfo.test.js.map +0 -1
  133. package/build/__tests__/modules/LslStreamInlet.test.d.ts +0 -10
  134. package/build/__tests__/modules/LslStreamInlet.test.js.map +0 -1
  135. package/build/__tests__/modules/LslStreamOutlet.test.js.map +0 -1
  136. package/build/modules/EventMarkerOutlet.d.ts +0 -23
  137. package/build/modules/EventMarkerOutlet.js.map +0 -1
  138. package/build/modules/LiblslAdapter.js.map +0 -1
  139. package/build/modules/LslStreamInfo.js.map +0 -1
  140. package/build/modules/LslStreamInlet.d.ts +0 -31
  141. package/build/modules/LslStreamInlet.js.map +0 -1
  142. package/build/modules/LslStreamOutlet.js.map +0 -1
  143. package/build/scripts/demoMarkerOutlet.js.map +0 -1
  144. package/build/scripts/demoStreamOutlet.js.map +0 -1
  145. package/build/testDoubles/LslInlet/FakeLslInlet.d.ts +0 -11
  146. package/build/testDoubles/LslInlet/FakeLslInlet.js +0 -16
  147. package/build/testDoubles/LslInlet/FakeLslInlet.js.map +0 -1
  148. package/build/testDoubles/LslInlet/SpyLslInlet.d.ts +0 -7
  149. package/build/testDoubles/LslInlet/SpyLslInlet.js +0 -20
  150. package/build/testDoubles/LslInlet/SpyLslInlet.js.map +0 -1
  151. package/build/testDoubles/LslOutlet/FakeLslOutlet.js +0 -59
  152. package/build/testDoubles/LslOutlet/FakeLslOutlet.js.map +0 -1
  153. package/build/testDoubles/MarkerOutlet/FakeMarkerOutlet.js +0 -29
  154. package/build/testDoubles/MarkerOutlet/FakeMarkerOutlet.js.map +0 -1
  155. package/build/testDoubles/MarkerOutlet/MockMarkerOutlet.js +0 -49
  156. package/build/testDoubles/MarkerOutlet/MockMarkerOutlet.js.map +0 -1
  157. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.d.ts +0 -9
  158. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.js +0 -24
  159. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.js.map +0 -1
  160. package/build/testDoubles/MarkerOutlet/ThrowingMarkerOutlet.d.ts +0 -10
  161. package/build/testDoubles/MarkerOutlet/ThrowingMarkerOutlet.js.map +0 -1
  162. package/src/__tests__/AbstractLslTest.ts +0 -59
  163. package/src/testDoubles/LslInlet/FakeLslInlet.ts +0 -22
  164. package/src/testDoubles/LslInlet/SpyLslInlet.ts +0 -16
  165. package/src/testDoubles/MarkerOutlet/SpyMarkerOutlet.ts +0 -24
  166. /package/build/scripts/{demoMarkerOutlet.d.ts → runLslEventMarkerOutlet.d.ts} +0 -0
  167. /package/build/scripts/{demoStreamOutlet.d.ts → runLslStreamOutlet.d.ts} +0 -0
@@ -1,24 +1,26 @@
1
- import { test, assert } from '@sprucelabs/test-utils'
2
- import LslStreamInlet, { LslInletOptions } from '../../modules/LslStreamInlet'
3
- import { SpyLslInlet } from '../../testDoubles/LslInlet/SpyLslInlet'
4
- import FakeStreamInfo from '../../testDoubles/StreamInfo/FakeStreamInfo'
5
- import AbstractLslTest from '../AbstractLslTest'
1
+ import { test, assert } from '@neurodevs/node-tdd'
2
+ import LslStreamInlet, {
3
+ StreamInletOptions,
4
+ } from '../../impl/LslStreamInlet.js'
5
+ import FakeStreamInfo from '../../testDoubles/StreamInfo/FakeStreamInfo.js'
6
+ import { SpyStreamInlet } from '../../testDoubles/StreamInlet/SpyStreamInlet.js'
7
+ import AbstractPackageTest from '../AbstractPackageTest.js'
6
8
 
7
- export default class LslStreamInletTest extends AbstractLslTest {
8
- private static instance: SpyLslInlet
9
+ export default class LslStreamInletTest extends AbstractPackageTest {
10
+ private static instance: SpyStreamInlet
9
11
 
10
12
  protected static async beforeEach() {
11
13
  await super.beforeEach()
12
14
 
13
- this.setSpyLslInlet()
15
+ this.setSpyStreamInlet()
14
16
  this.setFakeStreamInfo()
15
17
 
16
18
  this.instance = this.LslStreamInlet()
17
19
  }
18
20
 
19
21
  @test()
20
- protected static async canCreateLslStreamInlet() {
21
- assert.isTruthy(this.instance, 'Instance should be created!')
22
+ protected static async createsInstance() {
23
+ assert.isTruthy(this.instance, 'Failed to create instance!')
22
24
  }
23
25
 
24
26
  @test()
@@ -49,7 +51,7 @@ export default class LslStreamInletTest extends AbstractLslTest {
49
51
  }
50
52
 
51
53
  @test()
52
- protected static async callsBindingsToCreateLslInlet() {
54
+ protected static async callsBindingsToCreateStreamInlet() {
53
55
  const fakeInfo = this.instance.getStreamInfo()
54
56
 
55
57
  assert.isTruthy(fakeInfo, 'Should have created stream info!')
@@ -65,7 +67,18 @@ export default class LslStreamInletTest extends AbstractLslTest {
65
67
  )
66
68
  }
67
69
 
68
- private static LslStreamInlet(options?: Partial<LslInletOptions>) {
70
+ @test()
71
+ protected static async flushSamplesCallsLslBinding() {
72
+ this.instance.flushSamples()
73
+
74
+ assert.isEqualDeep(
75
+ this.fakeLiblsl.lastFlushInletOptions,
76
+ { inlet: this.instance.getBoundInlet() },
77
+ 'Should have called flushInlet!'
78
+ )
79
+ }
80
+
81
+ private static LslStreamInlet(options?: Partial<StreamInletOptions>) {
69
82
  const defaultOptions = {
70
83
  channelNames: this.channelNames,
71
84
  channelFormat: 'float32',
@@ -76,7 +89,7 @@ export default class LslStreamInletTest extends AbstractLslTest {
76
89
  chunkSize: this.chunkSize,
77
90
  maxBuffered: this.maxBuffered,
78
91
  ...options,
79
- } as LslInletOptions
80
- return LslStreamInlet.Create(defaultOptions) as SpyLslInlet
92
+ } as StreamInletOptions
93
+ return LslStreamInlet.Create(defaultOptions) as SpyStreamInlet
81
94
  }
82
95
  }
@@ -1,22 +1,23 @@
1
- import { test, assert, generateId } from '@sprucelabs/test-utils'
2
- import { CHANNEL_FORMATS } from '../../consts'
3
- import { StreamInfo } from '../../modules/LslStreamInfo'
1
+ import generateId from '@neurodevs/generate-id'
2
+ import { test, assert } from '@neurodevs/node-tdd'
3
+
4
+ import { CHANNEL_FORMATS } from '../../consts.js'
5
+ import { StreamInfo } from '../../impl/LslStreamInfo.js'
4
6
  import LslStreamOutlet, {
5
- LslOutletOptions,
6
- } from '../../modules/LslStreamOutlet'
7
+ StreamOutletOptions,
8
+ } from '../../impl/LslStreamOutlet.js'
7
9
  import {
8
10
  TEST_SUPPORTED_CHANNEL_FORMATS,
9
11
  TEST_UNSUPPORTED_CHANNEL_FORMATS,
10
12
  TestChannelFormat,
11
- } from '../../testDoubles/consts'
12
-
13
- import generateRandomOutletOptions from '../../testDoubles/generateRandomOutletOptions'
14
- import FakeStreamInfo from '../../testDoubles/StreamInfo/FakeStreamInfo'
15
- import { ChannelFormat, LslSample } from '../../types'
16
- import AbstractLslTest from '../AbstractLslTest'
13
+ } from '../../testDoubles/consts.js'
14
+ import generateRandomOutletOptions from '../../testDoubles/generateRandomOutletOptions.js'
15
+ import FakeStreamInfo from '../../testDoubles/StreamInfo/FakeStreamInfo.js'
16
+ import { ChannelFormat, LslSample } from '../../types.js'
17
+ import AbstractPackageTest from '../AbstractPackageTest.js'
17
18
 
18
- export default class LslStreamOutletTest extends AbstractLslTest {
19
- private static randomOutletOptions: LslOutletOptions
19
+ export default class LslStreamOutletTest extends AbstractPackageTest {
20
+ private static randomOutletOptions: StreamOutletOptions
20
21
 
21
22
  protected static async beforeEach() {
22
23
  await super.beforeEach()
@@ -254,14 +255,18 @@ export default class LslStreamOutletTest extends AbstractLslTest {
254
255
  }
255
256
 
256
257
  private static async createAndAssertThrows(
257
- option: keyof LslOutletOptions,
258
+ option: keyof StreamOutletOptions,
258
259
  value: number | string[] | ChannelFormat,
259
260
  expectedMessage: string
260
261
  ) {
261
262
  const err = await assert.doesThrowAsync(
262
263
  async () => await this.LslStreamOutlet({ [option]: value })
263
264
  )
264
- assert.isTrue(err.message.includes(expectedMessage))
265
+
266
+ assert.isTrue(
267
+ err.message.includes(expectedMessage),
268
+ 'Did not receive the expected error!'
269
+ )
265
270
  }
266
271
 
267
272
  private static async StringOutlet() {
@@ -272,7 +277,9 @@ export default class LslStreamOutletTest extends AbstractLslTest {
272
277
  return await this.LslStreamOutlet({ channelFormat: 'float32' })
273
278
  }
274
279
 
275
- private static async LslStreamOutlet(options?: Partial<LslOutletOptions>) {
280
+ private static async LslStreamOutlet(
281
+ options?: Partial<StreamOutletOptions>
282
+ ) {
276
283
  return await LslStreamOutlet.Create({
277
284
  ...this.randomOutletOptions,
278
285
  ...options,
@@ -281,7 +288,7 @@ export default class LslStreamOutletTest extends AbstractLslTest {
281
288
  }
282
289
 
283
290
  class CheckingOutlet extends LslStreamOutlet {
284
- public constructor(info: StreamInfo, options: LslOutletOptions) {
291
+ public constructor(info: StreamInfo, options: StreamOutletOptions) {
285
292
  super(info, options)
286
293
  }
287
294
  }
@@ -0,0 +1,25 @@
1
+ import { test, assert } from '@neurodevs/node-tdd'
2
+
3
+ import LslWebSocketBridge, {
4
+ StreamTransportBridge,
5
+ } from '../../impl/LslWebSocketBridge.js'
6
+ import AbstractPackageTest from '../AbstractPackageTest.js'
7
+
8
+ export default class LslWebSocketBridgeTest extends AbstractPackageTest {
9
+ private static instance: StreamTransportBridge
10
+
11
+ protected static async beforeEach() {
12
+ await super.beforeEach()
13
+
14
+ this.instance = this.LslWebSocketBridge()
15
+ }
16
+
17
+ @test()
18
+ protected static async createsInstance() {
19
+ assert.isTruthy(this.instance, 'Failed to create instance!')
20
+ }
21
+
22
+ private static LslWebSocketBridge() {
23
+ return LslWebSocketBridge.Create()
24
+ }
25
+ }
package/src/assertions.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { CHANNEL_FORMATS } from './consts'
2
- import { ChannelFormat } from './types'
1
+ import { CHANNEL_FORMATS } from './consts.js'
2
+ import { ChannelFormat } from './types.js'
3
3
  import {
4
4
  isGreaterThanOrEqualToZero,
5
5
  isPositiveInteger,
6
6
  isPositiveIntegerOrZero,
7
7
  isStringInArray,
8
- } from './validations'
8
+ } from './validations.js'
9
9
 
10
10
  export function assertValidChunkSize(chunkSize: number) {
11
11
  if (!isPositiveIntegerOrZero(chunkSize)) {
@@ -1,4 +1,5 @@
1
1
  import { DataType, define, open } from 'ffi-rs'
2
+
2
3
  import {
3
4
  Liblsl,
4
5
  LiblslBindings,
@@ -10,7 +11,8 @@ import {
10
11
  PushSampleStringTimestampOptions,
11
12
  CreateInletOptions,
12
13
  DestroyInletOptions,
13
- } from '../types'
14
+ FlushInletOptions,
15
+ } from '../types.js'
14
16
 
15
17
  export default class LiblslAdapter implements Liblsl {
16
18
  public static ffiRsOpen = open
@@ -76,26 +78,6 @@ export default class LiblslAdapter implements Liblsl {
76
78
  retType: DataType.External,
77
79
  paramsType: [DataType.External, DataType.I32, DataType.I32],
78
80
  },
79
- lsl_destroy_outlet: {
80
- library: 'lsl',
81
- retType: DataType.Void,
82
- paramsType: [DataType.External],
83
- },
84
- lsl_create_inlet: {
85
- library: 'lsl',
86
- retType: DataType.External,
87
- paramsType: [DataType.External, DataType.I32, DataType.I32],
88
- },
89
- lsl_destroy_inlet: {
90
- library: 'lsl',
91
- retType: DataType.Void,
92
- paramsType: [DataType.External],
93
- },
94
- lsl_local_clock: {
95
- library: 'lsl',
96
- retType: DataType.Double,
97
- paramsType: [],
98
- },
99
81
  lsl_push_sample_ft: {
100
82
  library: 'lsl',
101
83
  retType: DataType.Void,
@@ -114,6 +96,26 @@ export default class LiblslAdapter implements Liblsl {
114
96
  DataType.Double,
115
97
  ],
116
98
  },
99
+ lsl_destroy_outlet: {
100
+ library: 'lsl',
101
+ retType: DataType.Void,
102
+ paramsType: [DataType.External],
103
+ },
104
+ lsl_create_inlet: {
105
+ library: 'lsl',
106
+ retType: DataType.External,
107
+ paramsType: [DataType.External, DataType.I32, DataType.I32],
108
+ },
109
+ lsl_flush_inlet: {
110
+ library: 'lsl',
111
+ retType: DataType.I32,
112
+ paramsType: [DataType.External],
113
+ },
114
+ lsl_destroy_inlet: {
115
+ library: 'lsl',
116
+ retType: DataType.Void,
117
+ paramsType: [DataType.External],
118
+ },
117
119
  lsl_get_desc: {
118
120
  library: 'lsl',
119
121
  retType: DataType.External,
@@ -133,6 +135,11 @@ export default class LiblslAdapter implements Liblsl {
133
135
  DataType.String,
134
136
  ],
135
137
  },
138
+ lsl_local_clock: {
139
+ library: 'lsl',
140
+ retType: DataType.Double,
141
+ paramsType: [],
142
+ },
136
143
  }) as unknown as LiblslBindings
137
144
  }
138
145
 
@@ -203,6 +210,11 @@ export default class LiblslAdapter implements Liblsl {
203
210
  return this.bindings.lsl_create_inlet([info, chunkSize, maxBuffered])
204
211
  }
205
212
 
213
+ public flushInlet(options: FlushInletOptions) {
214
+ const { inlet } = options
215
+ this.bindings.lsl_flush_inlet([inlet])
216
+ }
217
+
206
218
  public destroyInlet(_options: DestroyInletOptions) {}
207
219
 
208
220
  public localClock() {
@@ -1,19 +1,22 @@
1
- import { DurationMarker } from '../types'
2
- import LslStreamOutlet, { LslOutletOptions, LslOutlet } from './LslStreamOutlet'
1
+ import { DurationMarker } from '../types.js'
2
+ import LslStreamOutlet, {
3
+ StreamOutletOptions,
4
+ StreamOutlet,
5
+ } from './LslStreamOutlet.js'
3
6
 
4
- export default class EventMarkerOutlet implements MarkerOutlet {
5
- public static Class?: MarkerOutletConstructor
7
+ export default class LslEventMarkerOutlet implements EventMarkerOutlet {
8
+ public static Class?: EventMarkerOutletConstructor
6
9
 
7
- protected lslOutlet: LslOutlet
10
+ protected outlet: StreamOutlet
8
11
  private isPlaying = false
9
12
  private waitResolve?: () => void
10
13
  private timeout?: any
11
14
 
12
- protected constructor(lslOutlet: LslOutlet) {
13
- this.lslOutlet = lslOutlet
15
+ protected constructor(outlet: StreamOutlet) {
16
+ this.outlet = outlet
14
17
  }
15
18
 
16
- public static async Create(options?: Partial<LslOutletOptions>) {
19
+ public static async Create(options?: Partial<StreamOutletOptions>) {
17
20
  const defaultOptions = {
18
21
  name: 'Event markers',
19
22
  type: 'Markers',
@@ -25,7 +28,7 @@ export default class EventMarkerOutlet implements MarkerOutlet {
25
28
  unit: 'N/A',
26
29
  chunkSize: 0,
27
30
  maxBuffered: 0,
28
- } as LslOutletOptions
31
+ } as StreamOutletOptions
29
32
 
30
33
  const outlet = await LslStreamOutlet.Create({
31
34
  ...defaultOptions,
@@ -55,7 +58,7 @@ export default class EventMarkerOutlet implements MarkerOutlet {
55
58
  }
56
59
 
57
60
  private pushMarkerToOutlet(markerName: string) {
58
- this.lslOutlet.pushSample([markerName])
61
+ this.outlet.pushSample([markerName])
59
62
  }
60
63
 
61
64
  protected async wait(durationMs: number) {
@@ -74,10 +77,12 @@ export default class EventMarkerOutlet implements MarkerOutlet {
74
77
  }
75
78
  }
76
79
 
77
- export interface MarkerOutlet {
80
+ export interface EventMarkerOutlet {
78
81
  pushMarker(markerName: string): void
79
82
  pushMarkers(markers: DurationMarker[]): Promise<void>
80
83
  stop(): void
81
84
  }
82
85
 
83
- export type MarkerOutletConstructor = new (lslOutlet: LslOutlet) => MarkerOutlet
86
+ export type EventMarkerOutletConstructor = new (
87
+ outlet: StreamOutlet
88
+ ) => EventMarkerOutlet
@@ -1,7 +1,8 @@
1
- import { generateId } from '@sprucelabs/test-utils'
2
- import { CHANNEL_FORMATS_MAP } from '../consts'
3
- import { BoundStreamInfo, ChannelFormat } from '../types'
4
- import LiblslAdapter from './LiblslAdapter'
1
+ import generateId from '@neurodevs/generate-id'
2
+
3
+ import { CHANNEL_FORMATS_MAP } from '../consts.js'
4
+ import { BoundStreamInfo, ChannelFormat } from '../types.js'
5
+ import LiblslAdapter from './LiblslAdapter.js'
5
6
 
6
7
  export default class LslStreamInfo implements StreamInfo {
7
8
  public static Class?: StreamInfoConstructor
@@ -1,17 +1,22 @@
1
- import { generateId } from '@sprucelabs/test-utils'
2
- import { ChannelFormat } from '../types'
3
- import LiblslAdapter from './LiblslAdapter'
4
- import LslStreamInfo, { StreamInfo, StreamInfoOptions } from './LslStreamInfo'
1
+ import generateId from '@neurodevs/generate-id'
5
2
 
6
- export default class LslStreamInlet implements LslInlet {
7
- public static Class?: LslInletConstructor
3
+ import { BoundInlet, ChannelFormat } from '../types.js'
4
+ import LiblslAdapter from './LiblslAdapter.js'
5
+ import LslStreamInfo, {
6
+ StreamInfo,
7
+ StreamInfoOptions,
8
+ } from './LslStreamInfo.js'
9
+
10
+ export default class LslStreamInlet implements StreamInlet {
11
+ public static Class?: StreamInletConstructor
8
12
 
9
13
  protected name: string
10
14
  protected info: StreamInfo
15
+ protected inlet!: BoundInlet
11
16
  private chunkSize: number
12
17
  private maxBuffered: number
13
18
 
14
- protected constructor(info: StreamInfo, options: LslInletOptions) {
19
+ protected constructor(info: StreamInfo, options: StreamInletOptions) {
15
20
  const {
16
21
  name = this.defaultName,
17
22
  chunkSize,
@@ -23,18 +28,18 @@ export default class LslStreamInlet implements LslInlet {
23
28
  this.maxBuffered = maxBuffered
24
29
  this.name = name
25
30
 
26
- this.createLslInlet()
31
+ this.createStreamInlet()
27
32
  }
28
33
 
29
- public static Create(options: LslInletOptions) {
34
+ public static Create(options: StreamInletOptions) {
30
35
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
31
36
  const { maxBuffered, chunkSize, ...infoOptions } = options
32
37
  const info = this.LslStreamInfo(infoOptions)
33
38
  return new (this.Class ?? this)(info, options)
34
39
  }
35
40
 
36
- private createLslInlet() {
37
- this.lsl.createInlet({
41
+ private createStreamInlet() {
42
+ this.inlet = this.lsl.createInlet({
38
43
  info: this.boundStreamInfo,
39
44
  chunkSize: this.chunkSize,
40
45
  maxBuffered: this.maxBuffered,
@@ -51,19 +56,25 @@ export default class LslStreamInlet implements LslInlet {
51
56
 
52
57
  private readonly defaultName = `lsl-inlet-${generateId()}`
53
58
 
59
+ public flushSamples() {
60
+ this.lsl.flushInlet({ inlet: this.inlet })
61
+ }
62
+
54
63
  private static LslStreamInfo(options: StreamInfoOptions) {
55
64
  return LslStreamInfo.Create(options)
56
65
  }
57
66
  }
58
67
 
59
- export interface LslInlet {}
68
+ export interface StreamInlet {
69
+ flushSamples(): void
70
+ }
60
71
 
61
- export type LslInletConstructor = new (
72
+ export type StreamInletConstructor = new (
62
73
  info: StreamInfo,
63
- options: LslInletOptions
64
- ) => LslInlet
74
+ options: StreamInletOptions
75
+ ) => StreamInlet
65
76
 
66
- export interface LslInletOptions {
77
+ export interface StreamInletOptions {
67
78
  sampleRate: number
68
79
  channelNames: string[]
69
80
  channelFormat: ChannelFormat
@@ -4,29 +4,32 @@ import {
4
4
  assertValidChunkSize,
5
5
  assertValidMaxBuffered,
6
6
  assertValidSampleRate,
7
- } from '../assertions'
8
- import { ChannelFormat, BoundOutlet, Liblsl, LslSample } from '../types'
9
- import LiblslAdapter from './LiblslAdapter'
10
- import LslStreamInfo, { StreamInfo, StreamInfoOptions } from './LslStreamInfo'
7
+ } from '../assertions.js'
8
+ import { ChannelFormat, BoundOutlet, Liblsl, LslSample } from '../types.js'
9
+ import LiblslAdapter from './LiblslAdapter.js'
10
+ import LslStreamInfo, {
11
+ StreamInfo,
12
+ StreamInfoOptions,
13
+ } from './LslStreamInfo.js'
11
14
 
12
- export default class LslStreamOutlet implements LslOutlet {
13
- public static Class?: LslOutletConstructor
15
+ export default class LslStreamOutlet implements StreamOutlet {
16
+ public static Class?: StreamOutletConstructor
14
17
 
15
18
  private info: StreamInfo
16
- private options: LslOutletOptions
19
+ private options: StreamOutletOptions
17
20
  private outlet!: BoundOutlet
18
21
  private pushSampleByType!: (options: any) => void
19
22
 
20
- protected constructor(info: StreamInfo, options: LslOutletOptions) {
23
+ protected constructor(info: StreamInfo, options: StreamOutletOptions) {
21
24
  this.info = info
22
25
  this.options = options
23
26
 
24
27
  this.validateOptions()
25
- this.createLslOutlet()
28
+ this.createStreamOutlet()
26
29
  this.setPushSampleType()
27
30
  }
28
31
 
29
- public static async Create(options: LslOutletOptions) {
32
+ public static async Create(options: StreamOutletOptions) {
30
33
  const { waitAfterConstructionMs = 10 } = options ?? {}
31
34
 
32
35
  const streamInfoOptions = {
@@ -55,7 +58,7 @@ export default class LslStreamOutlet implements LslOutlet {
55
58
  assertValidMaxBuffered(this.maxBuffered)
56
59
  }
57
60
 
58
- private createLslOutlet() {
61
+ private createStreamOutlet() {
59
62
  this.outlet = this.lsl.createOutlet({
60
63
  info: this.boundStreamInfo,
61
64
  chunkSize: this.chunkSize,
@@ -167,7 +170,7 @@ export default class LslStreamOutlet implements LslOutlet {
167
170
  }
168
171
  }
169
172
 
170
- export interface LslOutlet {
173
+ export interface StreamOutlet {
171
174
  pushSample(sample: LslSample): void
172
175
  destroy(): void
173
176
  readonly name: string
@@ -182,12 +185,12 @@ export interface LslOutlet {
182
185
  readonly unit: string
183
186
  }
184
187
 
185
- export type LslOutletConstructor = new (
188
+ export type StreamOutletConstructor = new (
186
189
  info: StreamInfo,
187
- options: LslOutletOptions
188
- ) => LslOutlet
190
+ options: StreamOutletOptions
191
+ ) => StreamOutlet
189
192
 
190
- export interface LslOutletOptions {
193
+ export interface StreamOutletOptions {
191
194
  name: string
192
195
  type: string
193
196
  sourceId: string
@@ -0,0 +1,13 @@
1
+ export default class LslWebSocketBridge implements StreamTransportBridge {
2
+ public static Class?: StreamTransportBridgeConstructor
3
+
4
+ protected constructor() {}
5
+
6
+ public static Create() {
7
+ return new (this.Class ?? this)()
8
+ }
9
+ }
10
+
11
+ export interface StreamTransportBridge {}
12
+
13
+ export type StreamTransportBridgeConstructor = new () => StreamTransportBridge
package/src/index.ts CHANGED
@@ -1,57 +1,65 @@
1
- export * from './types'
1
+ export * from './types.js'
2
2
 
3
- // Liblsl
3
+ // EventMarkerOutlet
4
4
 
5
- export { default as LiblslAdapter } from './modules/LiblslAdapter'
6
- export * from './modules/LiblslAdapter'
5
+ export { default as EventMarkerOutlet } from './impl/LslEventMarkerOutlet.js'
6
+ export * from './impl/LslEventMarkerOutlet.js'
7
7
 
8
- export { default as FakeLiblsl } from './testDoubles/Liblsl/FakeLiblsl'
9
- export * from './testDoubles/Liblsl/FakeLiblsl'
8
+ export { default as FakeMarkerOutlet } from './testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.js'
9
+ export * from './testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.js'
10
10
 
11
- // LslStreamInfo
11
+ export { default as MockMarkerOutlet } from './testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.js'
12
+ export * from './testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.js'
12
13
 
13
- export { default as LslStreamInfo } from './modules/LslStreamInfo'
14
- export * from './modules/LslStreamInfo'
14
+ export { default as SpyMarkerOutlet } from './testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.js'
15
+ export * from './testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.js'
15
16
 
16
- export { default as SpyStreamInfo } from './testDoubles/StreamInfo/SpyStreamInfo'
17
- export * from './testDoubles/StreamInfo/SpyStreamInfo'
17
+ export { default as ThrowingMarkerOutlet } from './testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.js'
18
+ export * from './testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.js'
18
19
 
19
- export { default as FakeStreamInfo } from './testDoubles/StreamInfo/FakeStreamInfo'
20
- export * from './testDoubles/StreamInfo/FakeStreamInfo'
20
+ // Liblsl
21
21
 
22
- // LslStreamInlet
22
+ export { default as LiblslAdapter } from './impl/LiblslAdapter.js'
23
+ export * from './impl/LiblslAdapter.js'
23
24
 
24
- export { default as LslStreamInlet } from './modules/LslStreamInlet'
25
- export * from './modules/LslStreamInlet'
25
+ export { default as FakeLiblsl } from './testDoubles/Liblsl/FakeLiblsl.js'
26
+ export * from './testDoubles/Liblsl/FakeLiblsl.js'
26
27
 
27
- export { default as FakeLslInlet } from './testDoubles/LslInlet/FakeLslInlet'
28
- export * from './testDoubles/LslInlet/FakeLslInlet'
28
+ // StreamInfo
29
29
 
30
- // LslStreamOutlet
30
+ export { default as LslStreamInfo } from './impl/LslStreamInfo.js'
31
+ export * from './impl/LslStreamInfo.js'
31
32
 
32
- export { default as LslStreamOutlet } from './modules/LslStreamOutlet'
33
- export * from './modules/LslStreamOutlet'
33
+ export { default as SpyStreamInfo } from './testDoubles/StreamInfo/SpyStreamInfo.js'
34
+ export * from './testDoubles/StreamInfo/SpyStreamInfo.js'
34
35
 
35
- export { default as FakeLslOutlet } from './testDoubles/LslOutlet/FakeLslOutlet'
36
- export * from './testDoubles/LslOutlet/FakeLslOutlet'
36
+ export { default as FakeStreamInfo } from './testDoubles/StreamInfo/FakeStreamInfo.js'
37
+ export * from './testDoubles/StreamInfo/FakeStreamInfo.js'
37
38
 
38
- // EventMarkerOutlet
39
+ // StreamInlet
40
+
41
+ export { default as LslStreamInlet } from './impl/LslStreamInlet.js'
42
+ export * from './impl/LslStreamInlet.js'
43
+
44
+ export { default as FakeStreamInlet } from './testDoubles/StreamInlet/FakeStreamInlet.js'
45
+ export * from './testDoubles/StreamInlet/FakeStreamInlet.js'
46
+
47
+ // StreamOutlet
39
48
 
40
- export { default as EventMarkerOutlet } from './modules/EventMarkerOutlet'
41
- export * from './modules/EventMarkerOutlet'
49
+ export { default as LslStreamOutlet } from './impl/LslStreamOutlet.js'
50
+ export * from './impl/LslStreamOutlet.js'
42
51
 
43
- export { default as FakeMarkerOutlet } from './testDoubles/MarkerOutlet/FakeMarkerOutlet'
44
- export * from './testDoubles/MarkerOutlet/FakeMarkerOutlet'
52
+ export { default as FakeStreamOutlet } from './testDoubles/StreamOutlet/FakeStreamOutlet.js'
53
+ export * from './testDoubles/StreamOutlet/FakeStreamOutlet.js'
45
54
 
46
- export { default as MockMarkerOutlet } from './testDoubles/MarkerOutlet/MockMarkerOutlet'
47
- export * from './testDoubles/MarkerOutlet/MockMarkerOutlet'
55
+ // StreamTransportBridge
48
56
 
49
- export { default as SpyMarkerOutlet } from './testDoubles/MarkerOutlet/SpyMarkerOutlet'
50
- export * from './testDoubles/MarkerOutlet/SpyMarkerOutlet'
57
+ export { default as LslWebSocketBridge } from './impl/LslWebSocketBridge.js'
58
+ export * from './impl/LslWebSocketBridge.js'
51
59
 
52
- export { default as ThrowingMarkerOutlet } from './testDoubles/MarkerOutlet/ThrowingMarkerOutlet'
53
- export * from './testDoubles/MarkerOutlet/ThrowingMarkerOutlet'
60
+ export { default as FakeStreamTransportBridge } from './testDoubles/StreamTransportBridge/FakeStreamTransportBridge.js'
61
+ export * from './testDoubles/StreamTransportBridge/FakeStreamTransportBridge.js'
54
62
 
55
63
  // Utils
56
64
 
57
- export { default as generateRandomOutletOptions } from './testDoubles/generateRandomOutletOptions'
65
+ export { default as generateRandomOutletOptions } from './testDoubles/generateRandomOutletOptions.js'
@@ -1,7 +1,7 @@
1
- import EventMarkerOutlet from '../modules/EventMarkerOutlet'
1
+ import LslEventMarkerOutlet from '../impl/LslEventMarkerOutlet.js'
2
2
 
3
3
  async function main() {
4
- const outlet = await EventMarkerOutlet.Create()
4
+ const outlet = await LslEventMarkerOutlet.Create()
5
5
 
6
6
  const markers = [
7
7
  { name: 'phase-1-begin', durationMs: 100 },
@@ -1,4 +1,4 @@
1
- import LslStreamOutlet from '../modules/LslStreamOutlet'
1
+ import LslStreamOutlet from '../impl/LslStreamOutlet.js'
2
2
 
3
3
  async function main() {
4
4
  const instance = await LslStreamOutlet.Create({