@neurodevs/node-lsl 10.2.1 → 11.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 (120) hide show
  1. package/README.md +17 -38
  2. package/build/__tests__/{AbstractNodeLslTest.d.ts → AbstractLslTest.d.ts} +7 -6
  3. package/build/__tests__/{AbstractNodeLslTest.js → AbstractLslTest.js} +30 -24
  4. package/build/__tests__/AbstractLslTest.js.map +1 -0
  5. package/build/__tests__/{TimeMarkerOutlet.test.d.ts → EventMarkerOutlet.test.d.ts} +9 -8
  6. package/build/__tests__/{TimeMarkerOutlet.test.js → EventMarkerOutlet.test.js} +53 -48
  7. package/build/__tests__/EventMarkerOutlet.test.js.map +1 -0
  8. package/build/__tests__/{Liblsl.test.d.ts → LiblslAdapter.test.d.ts} +2 -2
  9. package/build/__tests__/{Liblsl.test.js → LiblslAdapter.test.js} +43 -75
  10. package/build/__tests__/LiblslAdapter.test.js.map +1 -0
  11. package/build/__tests__/LslStreamInfo.test.d.ts +3 -3
  12. package/build/__tests__/LslStreamInfo.test.js +3 -3
  13. package/build/__tests__/LslStreamInfo.test.js.map +1 -1
  14. package/build/__tests__/{LslInlet.test.d.ts → LslStreamInlet.test.d.ts} +4 -4
  15. package/build/__tests__/{LslInlet.test.js → LslStreamInlet.test.js} +19 -19
  16. package/build/__tests__/LslStreamInlet.test.js.map +1 -0
  17. package/build/__tests__/{LslOutlet.test.d.ts → LslStreamOutlet.test.d.ts} +3 -3
  18. package/build/__tests__/{LslOutlet.test.js → LslStreamOutlet.test.js} +45 -41
  19. package/build/__tests__/LslStreamOutlet.test.js.map +1 -0
  20. package/build/components/EventMarkerOutlet.d.ts +20 -0
  21. package/build/components/{TimeMarkerOutlet.js → EventMarkerOutlet.js} +11 -10
  22. package/build/components/EventMarkerOutlet.js.map +1 -0
  23. package/build/components/{Liblsl.d.ts → LiblslAdapter.d.ts} +1 -1
  24. package/build/components/{Liblsl.js → LiblslAdapter.js} +7 -7
  25. package/build/components/LiblslAdapter.js.map +1 -0
  26. package/build/components/LslStreamInfo.js +2 -2
  27. package/build/components/LslStreamInfo.js.map +1 -1
  28. package/build/components/{LslInlet.d.ts → LslStreamInlet.d.ts} +4 -4
  29. package/build/components/{LslInlet.js → LslStreamInlet.js} +5 -5
  30. package/build/components/LslStreamInlet.js.map +1 -0
  31. package/build/components/{LslOutlet.d.ts → LslStreamOutlet.d.ts} +1 -1
  32. package/build/components/{LslOutlet.js → LslStreamOutlet.js} +5 -5
  33. package/build/components/LslStreamOutlet.js.map +1 -0
  34. package/build/index.d.ts +20 -19
  35. package/build/index.js +33 -28
  36. package/build/index.js.map +1 -1
  37. package/build/nodeLsl.types.d.ts +3 -3
  38. package/build/testDoubles/{FakeLiblsl.d.ts → Liblsl/FakeLiblsl.d.ts} +1 -1
  39. package/build/testDoubles/Liblsl/FakeLiblsl.js.map +1 -0
  40. package/build/testDoubles/LslInlet/SpyLslInlet.d.ts +7 -0
  41. package/build/testDoubles/{SpyLslInlet.js → LslInlet/SpyLslInlet.js} +2 -2
  42. package/build/testDoubles/LslInlet/SpyLslInlet.js.map +1 -0
  43. package/build/testDoubles/{FakeLslOutlet.d.ts → LslOutlet/FakeLslOutlet.d.ts} +3 -5
  44. package/build/testDoubles/{FakeLslOutlet.js → LslOutlet/FakeLslOutlet.js} +0 -4
  45. package/build/testDoubles/LslOutlet/FakeLslOutlet.js.map +1 -0
  46. package/build/testDoubles/{FakeTimeMarkerOutlet.d.ts → MarkerOutlet/FakeMarkerOutlet.d.ts} +4 -4
  47. package/build/testDoubles/{FakeTimeMarkerOutlet.js → MarkerOutlet/FakeMarkerOutlet.js} +4 -4
  48. package/build/testDoubles/MarkerOutlet/FakeMarkerOutlet.js.map +1 -0
  49. package/build/testDoubles/{MockTimeMarkerOutlet.d.ts → MarkerOutlet/MockMarkerOutlet.d.ts} +3 -2
  50. package/build/testDoubles/{MockTimeMarkerOutlet.js → MarkerOutlet/MockMarkerOutlet.js} +3 -3
  51. package/build/testDoubles/MarkerOutlet/MockMarkerOutlet.js.map +1 -0
  52. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.d.ts +9 -0
  53. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.js +24 -0
  54. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.js.map +1 -0
  55. package/build/testDoubles/{FakeStreamInfo.d.ts → StreamInfo/FakeStreamInfo.d.ts} +2 -2
  56. package/build/testDoubles/StreamInfo/FakeStreamInfo.js.map +1 -0
  57. package/build/testDoubles/StreamInfo/SpyStreamInfo.d.ts +9 -0
  58. package/build/testDoubles/{SpyLslStreamInfo.js → StreamInfo/SpyStreamInfo.js} +4 -4
  59. package/build/testDoubles/StreamInfo/SpyStreamInfo.js.map +1 -0
  60. package/build/testDoubles/generateRandomOutletOptions.d.ts +1 -1
  61. package/package.json +1 -1
  62. package/src/__tests__/AbstractLslTest.ts +58 -0
  63. package/src/__tests__/EventMarkerOutlet.test.ts +165 -0
  64. package/src/__tests__/{Liblsl.test.ts → LiblslAdapter.test.ts} +18 -22
  65. package/src/__tests__/LslStreamInfo.test.ts +12 -12
  66. package/src/__tests__/{LslInlet.test.ts → LslStreamInlet.test.ts} +13 -13
  67. package/src/__tests__/{LslOutlet.test.ts → LslStreamOutlet.test.ts} +28 -22
  68. package/src/components/{TimeMarkerOutlet.ts → EventMarkerOutlet.ts} +17 -17
  69. package/src/components/{Liblsl.ts → LiblslAdapter.ts} +3 -3
  70. package/src/components/LslStreamInfo.ts +2 -2
  71. package/src/components/{LslInlet.ts → LslStreamInlet.ts} +5 -5
  72. package/src/components/{LslOutlet.ts → LslStreamOutlet.ts} +3 -3
  73. package/src/index.ts +28 -19
  74. package/src/nodeLsl.types.ts +3 -3
  75. package/src/testDoubles/{FakeLiblsl.ts → Liblsl/FakeLiblsl.ts} +1 -1
  76. package/src/testDoubles/{SpyLslInlet.ts → LslInlet/SpyLslInlet.ts} +5 -3
  77. package/src/testDoubles/{FakeLslOutlet.ts → LslOutlet/FakeLslOutlet.ts} +3 -9
  78. package/src/testDoubles/{FakeTimeMarkerOutlet.ts → MarkerOutlet/FakeMarkerOutlet.ts} +4 -4
  79. package/src/testDoubles/{MockTimeMarkerOutlet.ts → MarkerOutlet/MockMarkerOutlet.ts} +3 -2
  80. package/src/testDoubles/MarkerOutlet/SpyMarkerOutlet.ts +24 -0
  81. package/src/testDoubles/{FakeStreamInfo.ts → StreamInfo/FakeStreamInfo.ts} +2 -2
  82. package/src/testDoubles/{SpyLslStreamInfo.ts → StreamInfo/SpyStreamInfo.ts} +4 -2
  83. package/src/testDoubles/generateRandomOutletOptions.ts +1 -1
  84. package/build/__tests__/AbstractNodeLslTest.js.map +0 -1
  85. package/build/__tests__/Liblsl.test.js.map +0 -1
  86. package/build/__tests__/LslInlet.test.js.map +0 -1
  87. package/build/__tests__/LslOutlet.test.js.map +0 -1
  88. package/build/__tests__/SpyLslStreamInfo.d.ts +0 -5
  89. package/build/__tests__/SpyLslStreamInfo.js +0 -17
  90. package/build/__tests__/SpyLslStreamInfo.js.map +0 -1
  91. package/build/__tests__/TimeMarkerOutlet.test.js.map +0 -1
  92. package/build/components/Liblsl.js.map +0 -1
  93. package/build/components/LslInlet.js.map +0 -1
  94. package/build/components/LslOutlet.js.map +0 -1
  95. package/build/components/TimeMarkerOutlet.d.ts +0 -19
  96. package/build/components/TimeMarkerOutlet.js.map +0 -1
  97. package/build/demo.d.ts +0 -1
  98. package/build/demo.js +0 -42
  99. package/build/demo.js.map +0 -1
  100. package/build/testDoubles/FakeLiblsl.js.map +0 -1
  101. package/build/testDoubles/FakeLslOutlet.js.map +0 -1
  102. package/build/testDoubles/FakeLslStreamInfo.d.ts +0 -5
  103. package/build/testDoubles/FakeLslStreamInfo.js +0 -10
  104. package/build/testDoubles/FakeLslStreamInfo.js.map +0 -1
  105. package/build/testDoubles/FakeStreamInfo.js.map +0 -1
  106. package/build/testDoubles/FakeTimeMarkerOutlet.js.map +0 -1
  107. package/build/testDoubles/MockTimeMarkerOutlet.js.map +0 -1
  108. package/build/testDoubles/SpyLslInlet.d.ts +0 -7
  109. package/build/testDoubles/SpyLslInlet.js.map +0 -1
  110. package/build/testDoubles/SpyLslStreamInfo.d.ts +0 -9
  111. package/build/testDoubles/SpyLslStreamInfo.js.map +0 -1
  112. package/build/testDoubles/SpyTimeMarkerOutlet.d.ts +0 -9
  113. package/build/testDoubles/SpyTimeMarkerOutlet.js +0 -19
  114. package/build/testDoubles/SpyTimeMarkerOutlet.js.map +0 -1
  115. package/src/__tests__/AbstractNodeLslTest.ts +0 -50
  116. package/src/__tests__/TimeMarkerOutlet.test.ts +0 -151
  117. package/src/demo.ts +0 -43
  118. package/src/testDoubles/SpyTimeMarkerOutlet.ts +0 -19
  119. /package/build/testDoubles/{FakeLiblsl.js → Liblsl/FakeLiblsl.js} +0 -0
  120. /package/build/testDoubles/{FakeStreamInfo.js → StreamInfo/FakeStreamInfo.js} +0 -0
@@ -1,12 +1,7 @@
1
1
  import { randomInt } from 'crypto'
2
- import AbstractSpruceTest, {
3
- test,
4
- assert,
5
- errorAssert,
6
- generateId,
7
- } from '@sprucelabs/test-utils'
2
+ import { test, assert, errorAssert, generateId } from '@sprucelabs/test-utils'
8
3
  import { DataType, OpenParams } from 'ffi-rs'
9
- import LiblslImpl from '../components/Liblsl'
4
+ import LiblslAdapter from '../components/LiblslAdapter'
10
5
  import {
11
6
  BoundChild,
12
7
  BoundDescription,
@@ -18,9 +13,10 @@ import {
18
13
  LiblslBindings,
19
14
  LslChannel,
20
15
  } from '../nodeLsl.types'
21
- import FakeLiblsl from '../testDoubles/FakeLiblsl'
16
+ import FakeLiblsl from '../testDoubles/Liblsl/FakeLiblsl'
17
+ import AbstractLslTest from './AbstractLslTest'
22
18
 
23
- export default class LiblslTest extends AbstractSpruceTest {
19
+ export default class LiblslAdapterTest extends AbstractLslTest {
24
20
  private static lsl: Liblsl
25
21
  private static libraryPath?: string
26
22
  private static libraryOptions?: Record<string, any>
@@ -76,11 +72,11 @@ export default class LiblslTest extends AbstractSpruceTest {
76
72
  this.appendChildHitCount = 0
77
73
 
78
74
  delete this.ffiRsOpenOptions
79
- LiblslImpl.ffiRsOpen = (options) => {
75
+ LiblslAdapter.ffiRsOpen = (options) => {
80
76
  this.ffiRsOpenOptions = options
81
77
  }
82
78
 
83
- LiblslImpl.ffiRsDefine = (options) => {
79
+ LiblslAdapter.ffiRsDefine = (options) => {
84
80
  this.ffiRsDefineOptions = options
85
81
  if (this.shouldThrowWhenCreatingBindings) {
86
82
  throw new Error('Failed to create bindings!')
@@ -88,16 +84,16 @@ export default class LiblslTest extends AbstractSpruceTest {
88
84
  return this.fakeBindings as any
89
85
  }
90
86
 
91
- LiblslImpl.resetInstance()
92
- this.lsl = LiblslImpl.getInstance()
87
+ LiblslAdapter.resetInstance()
88
+ this.lsl = LiblslAdapter.getInstance()
93
89
  }
94
90
 
95
91
  @test()
96
92
  protected static async throwsWhenBindingsFailToLoad() {
97
93
  this.shouldThrowWhenCreatingBindings = true
98
- LiblslImpl.resetInstance()
94
+ LiblslAdapter.resetInstance()
99
95
 
100
- const err = assert.doesThrow(() => LiblslImpl.getInstance())
96
+ const err = assert.doesThrow(() => LiblslAdapter.getInstance())
101
97
  errorAssert.assertError(err, 'FAILED_TO_LOAD_LIBLSL', {
102
98
  liblslPath: process.env.LIBLSL_PATH,
103
99
  })
@@ -167,21 +163,21 @@ export default class LiblslTest extends AbstractSpruceTest {
167
163
 
168
164
  @test()
169
165
  protected static async worksAsASingleton() {
170
- const liblsl = LiblslImpl.getInstance()
166
+ const liblsl = LiblslAdapter.getInstance()
171
167
  //@ts-ignore
172
- assert.isInstanceOf(liblsl, LiblslImpl)
168
+ assert.isInstanceOf(liblsl, LiblslAdapter)
173
169
  }
174
170
 
175
171
  @test()
176
172
  protected static async singletonIsTheSame() {
177
- assert.isEqual(LiblslImpl.getInstance(), LiblslImpl.getInstance())
173
+ assert.isEqual(LiblslAdapter.getInstance(), LiblslAdapter.getInstance())
178
174
  }
179
175
 
180
176
  @test()
181
177
  protected static canSetInstance() {
182
178
  const fake = new FakeLiblsl()
183
- LiblslImpl.setInstance(fake)
184
- assert.isEqual(LiblslImpl.getInstance(), fake)
179
+ LiblslAdapter.setInstance(fake)
180
+ assert.isEqual(LiblslAdapter.getInstance(), fake)
185
181
  }
186
182
 
187
183
  @test()
@@ -402,8 +398,8 @@ export default class LiblslTest extends AbstractSpruceTest {
402
398
  protected static async defaultsToMacOsPath() {
403
399
  delete process.env.LIBLSL_PATH
404
400
 
405
- LiblslImpl.resetInstance()
406
- this.lsl = LiblslImpl.getInstance()
401
+ LiblslAdapter.resetInstance()
402
+ this.lsl = LiblslAdapter.getInstance()
407
403
 
408
404
  assert.isEqual(
409
405
  this.ffiRsOpenOptions?.path,
@@ -1,16 +1,16 @@
1
1
  import { test, assert, generateId, errorAssert } from '@sprucelabs/test-utils'
2
2
  import LslStreamInfo, { StreamInfoOptions } from '../components/LslStreamInfo'
3
3
  import { CHANNEL_FORMATS } from '../consts'
4
- import SpyLslStreamInfo from '../testDoubles/SpyLslStreamInfo'
5
- import AbstractNodeLslTest from './AbstractNodeLslTest'
4
+ import SpyStreamInfo from '../testDoubles/StreamInfo/SpyStreamInfo'
5
+ import AbstractLslTest from './AbstractLslTest'
6
6
 
7
- export default class LslStreamInfoTest extends AbstractNodeLslTest {
8
- private static instance: SpyLslStreamInfo
7
+ export default class LslStreamInfoTest extends AbstractLslTest {
8
+ private static instance: SpyStreamInfo
9
9
 
10
10
  protected static async beforeEach() {
11
11
  await super.beforeEach()
12
12
 
13
- this.setSpyLslStreamInfo()
13
+ this.setSpyStreamInfo()
14
14
 
15
15
  this.instance = this.LslStreamInfo()
16
16
  }
@@ -191,13 +191,6 @@ export default class LslStreamInfoTest extends AbstractNodeLslTest {
191
191
  )
192
192
  }
193
193
 
194
- private static LslStreamInfo(options?: Partial<StreamInfoOptions>) {
195
- return LslStreamInfo.Create({
196
- ...this.defaultOptions,
197
- ...options,
198
- }) as SpyLslStreamInfo
199
- }
200
-
201
194
  private static readonly defaultOptions = {
202
195
  name: generateId(),
203
196
  type: generateId(),
@@ -206,4 +199,11 @@ export default class LslStreamInfoTest extends AbstractNodeLslTest {
206
199
  channelFormat: 'float32',
207
200
  sampleRate: 100 * Math.random(),
208
201
  } as StreamInfoOptions
202
+
203
+ private static LslStreamInfo(options?: Partial<StreamInfoOptions>) {
204
+ return LslStreamInfo.Create({
205
+ ...this.defaultOptions,
206
+ ...options,
207
+ }) as SpyStreamInfo
208
+ }
209
209
  }
@@ -1,10 +1,10 @@
1
1
  import { test, assert, errorAssert } from '@sprucelabs/test-utils'
2
- import LslInlet, { LslInletOptions } from '../components/LslInlet'
3
- import FakeStreamInfo from '../testDoubles/FakeStreamInfo'
4
- import { SpyLslInlet } from '../testDoubles/SpyLslInlet'
5
- import AbstractNodeLslTest from './AbstractNodeLslTest'
2
+ import LslStreamInlet, { LslInletOptions } from '../components/LslStreamInlet'
3
+ import { SpyLslInlet } from '../testDoubles/LslInlet/SpyLslInlet'
4
+ import FakeStreamInfo from '../testDoubles/StreamInfo/FakeStreamInfo'
5
+ import AbstractLslTest from './AbstractLslTest'
6
6
 
7
- export default class LslInletTest extends AbstractNodeLslTest {
7
+ export default class LslStreamInletTest extends AbstractLslTest {
8
8
  private static instance: SpyLslInlet
9
9
 
10
10
  protected static async beforeEach() {
@@ -13,11 +13,11 @@ export default class LslInletTest extends AbstractNodeLslTest {
13
13
  this.setSpyLslInlet()
14
14
  this.setFakeStreamInfo()
15
15
 
16
- this.instance = this.LslInlet()
16
+ this.instance = this.LslStreamInlet()
17
17
  }
18
18
 
19
19
  @test()
20
- protected static async canCreateLslInlet() {
20
+ protected static async canCreateLslStreamInlet() {
21
21
  assert.isTruthy(this.instance, 'Instance should be created!')
22
22
  }
23
23
 
@@ -25,7 +25,7 @@ export default class LslInletTest extends AbstractNodeLslTest {
25
25
  protected static async throwsWithMissingRequiredOptions() {
26
26
  const err = assert.doesThrow(
27
27
  // @ts-ignore
28
- () => LslInlet.Create()
28
+ () => LslStreamInlet.Create()
29
29
  )
30
30
  errorAssert.assertError(err, 'MISSING_PARAMETERS', {
31
31
  parameters: [
@@ -46,7 +46,7 @@ export default class LslInletTest extends AbstractNodeLslTest {
46
46
  channelNames: this.channelNames,
47
47
  channelFormat: 'float32',
48
48
  sampleRate: 0,
49
- name: this.infoName,
49
+ name: this.name_,
50
50
  type: this.type,
51
51
  sourceId: this.sourceId,
52
52
  },
@@ -56,7 +56,7 @@ export default class LslInletTest extends AbstractNodeLslTest {
56
56
 
57
57
  @test()
58
58
  protected static async uniqueNameHasSetPrefix() {
59
- const instance = this.LslInlet({ name: undefined })
59
+ const instance = this.LslStreamInlet({ name: undefined })
60
60
 
61
61
  assert.doesInclude(
62
62
  instance.getName(),
@@ -82,18 +82,18 @@ export default class LslInletTest extends AbstractNodeLslTest {
82
82
  )
83
83
  }
84
84
 
85
- private static LslInlet(options?: Partial<LslInletOptions>) {
85
+ private static LslStreamInlet(options?: Partial<LslInletOptions>) {
86
86
  const defaultOptions = {
87
87
  channelNames: this.channelNames,
88
88
  channelFormat: 'float32',
89
89
  sampleRate: 0,
90
- name: this.infoName,
90
+ name: this.name_,
91
91
  type: this.type,
92
92
  sourceId: this.sourceId,
93
93
  chunkSize: this.chunkSize,
94
94
  maxBuffered: this.maxBuffered,
95
95
  ...options,
96
96
  } as LslInletOptions
97
- return LslInlet.Create(defaultOptions) as SpyLslInlet
97
+ return LslStreamInlet.Create(defaultOptions) as SpyLslInlet
98
98
  }
99
99
  }
@@ -1,6 +1,8 @@
1
1
  import { test, assert, errorAssert, generateId } from '@sprucelabs/test-utils'
2
- import LslOutletImpl, { LslOutletOptions } from '../components/LslOutlet'
3
2
  import { StreamInfo } from '../components/LslStreamInfo'
3
+ import LslStreamOutlet, {
4
+ LslOutletOptions,
5
+ } from '../components/LslStreamOutlet'
4
6
  import { LslSample } from '../nodeLsl.types'
5
7
  import {
6
8
  TEST_SUPPORTED_CHANNEL_FORMATS,
@@ -8,17 +10,17 @@ import {
8
10
  TestChannelFormat,
9
11
  } from '../testDoubles/consts'
10
12
 
11
- import FakeStreamInfo from '../testDoubles/FakeStreamInfo'
12
13
  import generateRandomOutletOptions from '../testDoubles/generateRandomOutletOptions'
13
- import AbstractNodeLslTest from './AbstractNodeLslTest'
14
+ import FakeStreamInfo from '../testDoubles/StreamInfo/FakeStreamInfo'
15
+ import AbstractLslTest from './AbstractLslTest'
14
16
 
15
- export default class LslOutletTest extends AbstractNodeLslTest {
17
+ export default class LslStreamOutletTest extends AbstractLslTest {
16
18
  private static randomOutletOptions: LslOutletOptions
17
19
 
18
20
  protected static async beforeEach() {
19
21
  await super.beforeEach()
20
22
 
21
- delete LslOutletImpl.Class
23
+ delete LslStreamOutlet.Class
22
24
 
23
25
  this.randomOutletOptions = generateRandomOutletOptions()
24
26
 
@@ -30,7 +32,7 @@ export default class LslOutletTest extends AbstractNodeLslTest {
30
32
  protected static async throwsWithMissingRequiredParams() {
31
33
  const err = await assert.doesThrowAsync(
32
34
  //@ts-ignore
33
- async () => await LslOutletImpl.Create()
35
+ async () => await LslStreamOutlet.Create()
34
36
  )
35
37
  errorAssert.assertError(err, 'MISSING_PARAMETERS', {
36
38
  parameters: [
@@ -55,7 +57,7 @@ export default class LslOutletTest extends AbstractNodeLslTest {
55
57
 
56
58
  @test()
57
59
  protected static async allowsZeroSampleRate() {
58
- await this.Outlet({ sampleRate: 0 })
60
+ await this.LslStreamOutlet({ sampleRate: 0 })
59
61
  }
60
62
 
61
63
  @test()
@@ -75,7 +77,7 @@ export default class LslOutletTest extends AbstractNodeLslTest {
75
77
 
76
78
  @test()
77
79
  protected static async throwsWithInvalidChunkSize() {
78
- await this.Outlet({ chunkSize: 0 })
80
+ await this.LslStreamOutlet({ chunkSize: 0 })
79
81
  await this.assertThrowsInvalidChunkSize(-1)
80
82
  await this.assertThrowsInvalidChunkSize(-1.5)
81
83
  await this.assertThrowsInvalidChunkSize(1.5)
@@ -83,7 +85,7 @@ export default class LslOutletTest extends AbstractNodeLslTest {
83
85
 
84
86
  @test()
85
87
  protected static async throwsWithInvalidMaxBuffered() {
86
- await this.Outlet({ maxBuffered: 0 })
88
+ await this.LslStreamOutlet({ maxBuffered: 0 })
87
89
  await this.assertThrowsInvalidMaxBuffered(-1)
88
90
  await this.assertThrowsInvalidMaxBuffered(-1.5)
89
91
  await this.assertThrowsInvalidMaxBuffered(1.5)
@@ -94,7 +96,9 @@ export default class LslOutletTest extends AbstractNodeLslTest {
94
96
  for (let unsupportedType of TEST_UNSUPPORTED_CHANNEL_FORMATS) {
95
97
  await assert.doesThrowAsync(
96
98
  async () =>
97
- await this.Outlet({ channelFormat: unsupportedType }),
99
+ await this.LslStreamOutlet({
100
+ channelFormat: unsupportedType,
101
+ }),
98
102
  `This method currently does not support the ${unsupportedType} type! Please implement it.`
99
103
  )
100
104
  }
@@ -103,7 +107,9 @@ export default class LslOutletTest extends AbstractNodeLslTest {
103
107
  @test()
104
108
  protected static async supportsAllKnownChannelFormats() {
105
109
  for (const format of TEST_SUPPORTED_CHANNEL_FORMATS) {
106
- await this.Outlet({ channelFormat: format as TestChannelFormat })
110
+ await this.LslStreamOutlet({
111
+ channelFormat: format as TestChannelFormat,
112
+ })
107
113
  }
108
114
  }
109
115
 
@@ -172,7 +178,7 @@ export default class LslOutletTest extends AbstractNodeLslTest {
172
178
 
173
179
  @test()
174
180
  protected static async constructionCreatesStreamInfo() {
175
- await this.Outlet()
181
+ await this.LslStreamOutlet()
176
182
 
177
183
  assert.isEqualDeep(FakeStreamInfo.callsToConstructor[0], {
178
184
  channelNames: this.randomOutletOptions.channelNames,
@@ -187,15 +193,15 @@ export default class LslOutletTest extends AbstractNodeLslTest {
187
193
 
188
194
  @test()
189
195
  protected static async canOverrideClassInstantiatedInFactory() {
190
- LslOutletImpl.Class = CheckingOutlet
191
- const instance = await this.Outlet()
196
+ LslStreamOutlet.Class = CheckingOutlet
197
+ const instance = await this.LslStreamOutlet()
192
198
 
193
199
  assert.isInstanceOf(instance, CheckingOutlet)
194
200
  }
195
201
 
196
202
  @test()
197
203
  protected static async canDestroyOutlet() {
198
- const outlet = await this.Outlet()
204
+ const outlet = await this.LslStreamOutlet()
199
205
  outlet.destroy()
200
206
 
201
207
  assert.isEqual(this.fakeLiblsl.destroyOutletHitCount, 1)
@@ -214,7 +220,7 @@ export default class LslOutletTest extends AbstractNodeLslTest {
214
220
  @test()
215
221
  protected static async waitsForTenMsAfterConstructionBeforeReturning() {
216
222
  const startMs = Date.now()
217
- await this.Outlet({ waitAfterConstructionMs: 10 })
223
+ await this.LslStreamOutlet({ waitAfterConstructionMs: 10 })
218
224
  const endMs = Date.now()
219
225
 
220
226
  assert.isAbove(endMs - startMs, 10)
@@ -250,7 +256,7 @@ export default class LslOutletTest extends AbstractNodeLslTest {
250
256
  parameters: string[]
251
257
  ) {
252
258
  const err = await assert.doesThrowAsync(
253
- async () => await this.Outlet(options)
259
+ async () => await this.LslStreamOutlet(options)
254
260
  )
255
261
  errorAssert.assertError(err, 'INVALID_PARAMETERS', {
256
262
  parameters,
@@ -258,22 +264,22 @@ export default class LslOutletTest extends AbstractNodeLslTest {
258
264
  }
259
265
 
260
266
  private static async StringOutlet() {
261
- return await this.Outlet({ channelFormat: 'string' })
267
+ return await this.LslStreamOutlet({ channelFormat: 'string' })
262
268
  }
263
269
 
264
270
  private static async FloatOutlet() {
265
- return await this.Outlet({ channelFormat: 'float32' })
271
+ return await this.LslStreamOutlet({ channelFormat: 'float32' })
266
272
  }
267
273
 
268
- private static async Outlet(options?: Partial<LslOutletOptions>) {
269
- return await LslOutletImpl.Create({
274
+ private static async LslStreamOutlet(options?: Partial<LslOutletOptions>) {
275
+ return await LslStreamOutlet.Create({
270
276
  ...this.randomOutletOptions,
271
277
  ...options,
272
278
  })
273
279
  }
274
280
  }
275
281
 
276
- class CheckingOutlet extends LslOutletImpl {
282
+ class CheckingOutlet extends LslStreamOutlet {
277
283
  public constructor(info: StreamInfo, options: LslOutletOptions) {
278
284
  super(info, options)
279
285
  }
@@ -1,42 +1,45 @@
1
1
  import { DurationMarker } from '../nodeLsl.types'
2
- import LslOutletImpl, { LslOutlet, LslOutletOptions } from './LslOutlet'
3
- import { StreamInfo } from './LslStreamInfo'
2
+ import LslStreamOutlet, { LslOutletOptions, LslOutlet } from './LslStreamOutlet'
4
3
 
5
- export default class TimeMarkerOutletImpl
6
- extends LslOutletImpl
7
- implements TimeMarkerOutlet
8
- {
9
- public static Class?: TimeMarkerOutletConstructor
4
+ export default class EventMarkerOutlet implements MarkerOutlet {
5
+ public static Class?: MarkerOutletConstructor
10
6
 
7
+ protected lslOutlet: LslOutlet
11
8
  private isPlaying = false
12
9
  private waitResolve?: () => void
13
10
  private timeout?: any
14
11
 
12
+ protected constructor(lslOutlet: LslOutlet) {
13
+ this.lslOutlet = lslOutlet
14
+ }
15
+
15
16
  public static async Create(options?: Partial<LslOutletOptions>) {
16
17
  const defaultOptions = {
17
- name: 'Time markers',
18
+ name: 'Event markers',
18
19
  type: 'Markers',
19
20
  channelNames: ['Markers'],
20
21
  sampleRate: 0,
21
22
  channelFormat: 'string',
22
- sourceId: 'time-markers',
23
+ sourceId: 'event-markers',
23
24
  manufacturer: 'N/A',
24
25
  unit: 'N/A',
25
26
  chunkSize: 0,
26
27
  maxBuffered: 0,
27
28
  } as LslOutletOptions
28
29
 
29
- return new (this.Class ?? this)({} as StreamInfo, {
30
+ const outlet = await LslStreamOutlet.Create({
30
31
  ...defaultOptions,
31
32
  ...options,
32
- }) as TimeMarkerOutlet
33
+ })
34
+
35
+ return new (this.Class ?? this)(outlet)
33
36
  }
34
37
 
35
38
  public async pushMarkers(markers: DurationMarker[]) {
36
39
  this.isPlaying = true
37
40
 
38
41
  for (let marker of markers) {
39
- this.pushSample([marker.name])
42
+ this.lslOutlet.pushSample([marker.name])
40
43
 
41
44
  await this.wait(marker.durationMs)
42
45
 
@@ -62,12 +65,9 @@ export default class TimeMarkerOutletImpl
62
65
  }
63
66
  }
64
67
 
65
- export interface TimeMarkerOutlet extends LslOutlet {
68
+ export interface MarkerOutlet {
66
69
  pushMarkers(markers: DurationMarker[]): Promise<void>
67
70
  stop(): void
68
71
  }
69
72
 
70
- export type TimeMarkerOutletConstructor = new (
71
- info: StreamInfo,
72
- options: LslOutletOptions
73
- ) => TimeMarkerOutlet
73
+ export type MarkerOutletConstructor = new (lslOutlet: LslOutlet) => MarkerOutlet
@@ -14,7 +14,7 @@ import {
14
14
  DestroyInletOptions,
15
15
  } from '../nodeLsl.types'
16
16
 
17
- export default class LiblslImpl implements Liblsl {
17
+ export default class LiblslAdapter implements Liblsl {
18
18
  private static instance?: Liblsl
19
19
  public static ffiRsOpen = open
20
20
  public static ffiRsDefine = define
@@ -54,12 +54,12 @@ export default class LiblslImpl implements Liblsl {
54
54
  }
55
55
 
56
56
  private loadBindings(liblslPath: string) {
57
- LiblslImpl.ffiRsOpen({
57
+ LiblslAdapter.ffiRsOpen({
58
58
  library: 'lsl',
59
59
  path: liblslPath,
60
60
  })
61
61
 
62
- return LiblslImpl.ffiRsDefine({
62
+ return LiblslAdapter.ffiRsDefine({
63
63
  lsl_create_streaminfo: {
64
64
  library: 'lsl',
65
65
  retType: DataType.External,
@@ -2,7 +2,7 @@ import { assertOptions } from '@sprucelabs/schema'
2
2
  import { generateId } from '@sprucelabs/test-utils'
3
3
  import { CHANNEL_FORMATS_MAP } from '../consts'
4
4
  import { BoundStreamInfo, ChannelFormat } from '../nodeLsl.types'
5
- import LiblslImpl from './Liblsl'
5
+ import LiblslAdapter from './LiblslAdapter'
6
6
 
7
7
  export default class LslStreamInfo implements StreamInfo {
8
8
  public static Class?: StreamInfoConstructor
@@ -79,7 +79,7 @@ export default class LslStreamInfo implements StreamInfo {
79
79
  }
80
80
 
81
81
  private get lsl() {
82
- return LiblslImpl.getInstance()
82
+ return LiblslAdapter.getInstance()
83
83
  }
84
84
 
85
85
  private readonly defaultName = `lsl-stream-info-${generateId()}`
@@ -1,10 +1,10 @@
1
1
  import { assertOptions } from '@sprucelabs/schema'
2
2
  import { generateId } from '@sprucelabs/test-utils'
3
3
  import { ChannelFormat } from '../nodeLsl.types'
4
- import LiblslImpl from './Liblsl'
4
+ import LiblslAdapter from './LiblslAdapter'
5
5
  import LslStreamInfo, { StreamInfo, StreamInfoOptions } from './LslStreamInfo'
6
6
 
7
- export default class LslInlet implements StreamInlet {
7
+ export default class LslStreamInlet implements LslInlet {
8
8
  public static Class?: LslInletConstructor
9
9
 
10
10
  protected name: string
@@ -54,7 +54,7 @@ export default class LslInlet implements StreamInlet {
54
54
  }
55
55
 
56
56
  private get lsl() {
57
- return LiblslImpl.getInstance()
57
+ return LiblslAdapter.getInstance()
58
58
  }
59
59
 
60
60
  private readonly defaultName = `lsl-inlet-${generateId()}`
@@ -64,12 +64,12 @@ export default class LslInlet implements StreamInlet {
64
64
  }
65
65
  }
66
66
 
67
- export interface StreamInlet {}
67
+ export interface LslInlet {}
68
68
 
69
69
  export type LslInletConstructor = new (
70
70
  info: StreamInfo,
71
71
  options: LslInletOptions
72
- ) => StreamInlet
72
+ ) => LslInlet
73
73
 
74
74
  export interface LslInletOptions {
75
75
  sampleRate: number
@@ -7,10 +7,10 @@ import {
7
7
  assertValidSampleRate,
8
8
  } from '../assertions'
9
9
  import { ChannelFormat, BoundOutlet, Liblsl, LslSample } from '../nodeLsl.types'
10
- import LiblslImpl from './Liblsl'
10
+ import LiblslAdapter from './LiblslAdapter'
11
11
  import LslStreamInfo, { StreamInfo, StreamInfoOptions } from './LslStreamInfo'
12
12
 
13
- export default class LslOutletImpl implements LslOutlet {
13
+ export default class LslStreamOutlet implements LslOutlet {
14
14
  public static Class?: LslOutletConstructor
15
15
 
16
16
  private info: StreamInfo
@@ -141,7 +141,7 @@ export default class LslOutletImpl implements LslOutlet {
141
141
  }
142
142
 
143
143
  private get lsl() {
144
- return LiblslImpl.getInstance()
144
+ return LiblslAdapter.getInstance()
145
145
  }
146
146
 
147
147
  private static async wait(waitMs: number) {
package/src/index.ts CHANGED
@@ -1,35 +1,44 @@
1
1
  export * from './nodeLsl.types'
2
2
 
3
- export { default as LiblslImpl } from './components/Liblsl'
4
- export * from './components/Liblsl'
3
+ // Liblsl
4
+
5
+ export { default as LiblslAdapter } from './components/LiblslAdapter'
6
+ export * from './components/LiblslAdapter'
7
+
8
+ export { default as FakeLiblsl } from './testDoubles/Liblsl/FakeLiblsl'
9
+ export * from './testDoubles/Liblsl/FakeLiblsl'
10
+
11
+ // LslStreamInfo
5
12
 
6
13
  export { default as LslStreamInfo } from './components/LslStreamInfo'
7
14
  export * from './components/LslStreamInfo'
8
15
 
9
- export { default as SpyLslStreamInfo } from './testDoubles/SpyLslStreamInfo'
10
- export * from './testDoubles/SpyLslStreamInfo'
16
+ export { default as SpyStreamInfo } from './testDoubles/StreamInfo/SpyStreamInfo'
17
+ export * from './testDoubles/StreamInfo/SpyStreamInfo'
18
+
19
+ export { default as FakeStreamInfo } from './testDoubles/StreamInfo/FakeStreamInfo'
20
+ export * from './testDoubles/StreamInfo/FakeStreamInfo'
11
21
 
12
- export { default as FakeStreamInfo } from './testDoubles/FakeStreamInfo'
22
+ // LslStreamOutlet
13
23
 
14
- export { default as LslOutletImpl } from './components/LslOutlet'
15
- export * from './components/LslOutlet'
24
+ export { default as LslStreamOutlet } from './components/LslStreamOutlet'
25
+ export * from './components/LslStreamOutlet'
16
26
 
17
- export { default as TimeMarkerOutletImpl } from './components/TimeMarkerOutlet'
18
- export * from './components/TimeMarkerOutlet'
27
+ export { default as FakeLslOutlet } from './testDoubles/LslOutlet/FakeLslOutlet'
28
+ export * from './testDoubles/LslOutlet/FakeLslOutlet'
19
29
 
20
- export { default as FakeLiblsl } from './testDoubles/FakeLiblsl'
21
- export * from './testDoubles/FakeLiblsl'
30
+ // EventMarkerOutlet
22
31
 
23
- export { default as FakeLslOutlet } from './testDoubles/FakeLslOutlet'
24
- export * from './testDoubles/FakeLslOutlet'
32
+ export { default as EventMarkerOutlet } from './components/EventMarkerOutlet'
33
+ export * from './components/EventMarkerOutlet'
25
34
 
26
- export { default as FakeTimeMarkerOutlet } from './testDoubles/FakeTimeMarkerOutlet'
27
- export * from './testDoubles/FakeTimeMarkerOutlet'
35
+ export { default as FakeMarkerOutlet } from './testDoubles/MarkerOutlet/FakeMarkerOutlet'
36
+ export * from './testDoubles/MarkerOutlet/FakeMarkerOutlet'
28
37
 
29
- export { default as MockTimeMarkerOutlet } from './testDoubles/MockTimeMarkerOutlet'
30
- export * from './testDoubles/MockTimeMarkerOutlet'
38
+ export { default as MockMarkerOutlet } from './testDoubles/MarkerOutlet/MockMarkerOutlet'
39
+ export * from './testDoubles/MarkerOutlet/MockMarkerOutlet'
31
40
 
32
- export { default as SpyTimeMarkerOutlet } from './testDoubles/SpyTimeMarkerOutlet'
33
- export * from './testDoubles/SpyTimeMarkerOutlet'
41
+ export { default as SpyMarkerOutlet } from './testDoubles/MarkerOutlet/SpyMarkerOutlet'
42
+ export * from './testDoubles/MarkerOutlet/SpyMarkerOutlet'
34
43
 
35
44
  export { default as generateRandomOutletOptions } from './testDoubles/generateRandomOutletOptions'
@@ -1,9 +1,9 @@
1
1
  import { FuncObj, FieldType } from 'ffi-rs'
2
- import { StreamInlet } from './components/LslInlet'
3
- import { LslOutlet } from './components/LslOutlet'
2
+ import { LslInlet } from './components/LslStreamInlet'
3
+ import { LslOutlet } from './components/LslStreamOutlet'
4
4
  import { CHANNEL_FORMATS } from './consts'
5
5
 
6
- export type StreamFixuture = LslOutlet | StreamInlet
6
+ export type StreamFixuture = LslOutlet | LslInlet
7
7
 
8
8
  export type ChannelFormat = (typeof CHANNEL_FORMATS)[number]
9
9
 
@@ -10,7 +10,7 @@ import {
10
10
  CreateInletOptions,
11
11
  DestroyInletOptions,
12
12
  BoundInlet,
13
- } from '../nodeLsl.types'
13
+ } from '../../nodeLsl.types'
14
14
 
15
15
  export default class FakeLiblsl implements Liblsl {
16
16
  public outlet: BoundOutlet = {} as BoundOutlet
@@ -1,7 +1,9 @@
1
- import LslInlet, { LslInletOptions } from '../components/LslInlet'
2
- import { StreamInfo } from '../components/LslStreamInfo'
1
+ import { StreamInfo } from '../../components/LslStreamInfo'
2
+ import LslStreamInlet, {
3
+ LslInletOptions,
4
+ } from '../../components/LslStreamInlet'
3
5
 
4
- export class SpyLslInlet extends LslInlet {
6
+ export class SpyLslInlet extends LslStreamInlet {
5
7
  public constructor(info: StreamInfo, options: LslInletOptions) {
6
8
  super(info, options)
7
9
  }