@neurodevs/node-lsl 10.2.2 → 11.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 (128) hide show
  1. package/README.md +17 -38
  2. package/build/__tests__/{AbstractNodeLslTest.d.ts → AbstractLslTest.d.ts} +5 -4
  3. package/build/__tests__/{AbstractNodeLslTest.js → AbstractLslTest.js} +30 -24
  4. package/build/__tests__/AbstractLslTest.js.map +1 -0
  5. package/build/__tests__/EventMarkerOutlet.test.d.ts +18 -0
  6. package/build/__tests__/EventMarkerOutlet.test.js +144 -0
  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} +17 -17
  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/Liblsl.d.ts → adapters/LiblslAdapter.d.ts} +1 -1
  21. package/build/{components/Liblsl.js → adapters/LiblslAdapter.js} +7 -7
  22. package/build/adapters/LiblslAdapter.js.map +1 -0
  23. package/build/components/EventMarkerOutlet.d.ts +20 -0
  24. package/build/components/{TimeMarkerOutlet.js → EventMarkerOutlet.js} +19 -25
  25. package/build/components/EventMarkerOutlet.js.map +1 -0
  26. package/build/components/LiblslAdapter.d.ts +24 -0
  27. package/build/components/LiblslAdapter.js +198 -0
  28. package/build/components/LiblslAdapter.js.map +1 -0
  29. package/build/components/LslStreamInfo.js +2 -2
  30. package/build/components/LslStreamInfo.js.map +1 -1
  31. package/build/components/{LslInlet.d.ts → LslStreamInlet.d.ts} +4 -4
  32. package/build/components/{LslInlet.js → LslStreamInlet.js} +5 -5
  33. package/build/components/LslStreamInlet.js.map +1 -0
  34. package/build/components/{LslOutlet.d.ts → LslStreamOutlet.d.ts} +1 -1
  35. package/build/components/{LslOutlet.js → LslStreamOutlet.js} +5 -5
  36. package/build/components/LslStreamOutlet.js.map +1 -0
  37. package/build/index.d.ts +20 -19
  38. package/build/index.js +33 -28
  39. package/build/index.js.map +1 -1
  40. package/build/nodeLsl.types.d.ts +3 -3
  41. package/build/testDoubles/{FakeLiblsl.d.ts → Liblsl/FakeLiblsl.d.ts} +1 -1
  42. package/build/testDoubles/Liblsl/FakeLiblsl.js.map +1 -0
  43. package/build/testDoubles/LslInlet/SpyLslInlet.d.ts +7 -0
  44. package/build/testDoubles/{SpyLslInlet.js → LslInlet/SpyLslInlet.js} +2 -2
  45. package/build/testDoubles/LslInlet/SpyLslInlet.js.map +1 -0
  46. package/build/testDoubles/{FakeLslOutlet.d.ts → LslOutlet/FakeLslOutlet.d.ts} +3 -5
  47. package/build/testDoubles/{FakeLslOutlet.js → LslOutlet/FakeLslOutlet.js} +0 -4
  48. package/build/testDoubles/LslOutlet/FakeLslOutlet.js.map +1 -0
  49. package/build/testDoubles/MarkerOutlet/FakeMarkerOutlet.d.ts +12 -0
  50. package/build/testDoubles/MarkerOutlet/FakeMarkerOutlet.js +25 -0
  51. package/build/testDoubles/MarkerOutlet/FakeMarkerOutlet.js.map +1 -0
  52. package/build/testDoubles/{MockTimeMarkerOutlet.d.ts → MarkerOutlet/MockMarkerOutlet.d.ts} +3 -2
  53. package/build/testDoubles/{MockTimeMarkerOutlet.js → MarkerOutlet/MockMarkerOutlet.js} +3 -3
  54. package/build/testDoubles/MarkerOutlet/MockMarkerOutlet.js.map +1 -0
  55. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.d.ts +9 -0
  56. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.js +24 -0
  57. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.js.map +1 -0
  58. package/build/testDoubles/{FakeStreamInfo.d.ts → StreamInfo/FakeStreamInfo.d.ts} +2 -2
  59. package/build/testDoubles/StreamInfo/FakeStreamInfo.js.map +1 -0
  60. package/build/testDoubles/StreamInfo/SpyStreamInfo.d.ts +9 -0
  61. package/build/testDoubles/{SpyLslStreamInfo.js → StreamInfo/SpyStreamInfo.js} +4 -4
  62. package/build/testDoubles/StreamInfo/SpyStreamInfo.js.map +1 -0
  63. package/build/testDoubles/generateRandomOutletOptions.d.ts +1 -1
  64. package/package.json +1 -1
  65. package/src/__tests__/AbstractLslTest.ts +58 -0
  66. package/src/__tests__/EventMarkerOutlet.test.ts +165 -0
  67. package/src/__tests__/{Liblsl.test.ts → LiblslAdapter.test.ts} +18 -22
  68. package/src/__tests__/LslStreamInfo.test.ts +12 -12
  69. package/src/__tests__/{LslInlet.test.ts → LslStreamInlet.test.ts} +11 -11
  70. package/src/__tests__/{LslOutlet.test.ts → LslStreamOutlet.test.ts} +28 -22
  71. package/src/{components/Liblsl.ts → adapters/LiblslAdapter.ts} +3 -3
  72. package/src/components/{TimeMarkerOutlet.ts → EventMarkerOutlet.ts} +23 -33
  73. package/src/components/LslStreamInfo.ts +2 -2
  74. package/src/components/{LslInlet.ts → LslStreamInlet.ts} +5 -5
  75. package/src/components/{LslOutlet.ts → LslStreamOutlet.ts} +3 -3
  76. package/src/index.ts +28 -19
  77. package/src/nodeLsl.types.ts +3 -3
  78. package/src/testDoubles/{FakeLiblsl.ts → Liblsl/FakeLiblsl.ts} +1 -1
  79. package/src/testDoubles/{SpyLslInlet.ts → LslInlet/SpyLslInlet.ts} +5 -3
  80. package/src/testDoubles/{FakeLslOutlet.ts → LslOutlet/FakeLslOutlet.ts} +3 -9
  81. package/src/testDoubles/MarkerOutlet/FakeMarkerOutlet.ts +32 -0
  82. package/src/testDoubles/{MockTimeMarkerOutlet.ts → MarkerOutlet/MockMarkerOutlet.ts} +3 -2
  83. package/src/testDoubles/MarkerOutlet/SpyMarkerOutlet.ts +24 -0
  84. package/src/testDoubles/{FakeStreamInfo.ts → StreamInfo/FakeStreamInfo.ts} +2 -2
  85. package/src/testDoubles/{SpyLslStreamInfo.ts → StreamInfo/SpyStreamInfo.ts} +4 -2
  86. package/src/testDoubles/generateRandomOutletOptions.ts +1 -1
  87. package/build/__tests__/AbstractNodeLslTest.js.map +0 -1
  88. package/build/__tests__/Liblsl.test.js.map +0 -1
  89. package/build/__tests__/LslInlet.test.js.map +0 -1
  90. package/build/__tests__/LslOutlet.test.js.map +0 -1
  91. package/build/__tests__/SpyLslStreamInfo.d.ts +0 -5
  92. package/build/__tests__/SpyLslStreamInfo.js +0 -17
  93. package/build/__tests__/SpyLslStreamInfo.js.map +0 -1
  94. package/build/__tests__/TimeMarkerOutlet.test.d.ts +0 -28
  95. package/build/__tests__/TimeMarkerOutlet.test.js +0 -165
  96. package/build/__tests__/TimeMarkerOutlet.test.js.map +0 -1
  97. package/build/components/Liblsl.js.map +0 -1
  98. package/build/components/LslInlet.js.map +0 -1
  99. package/build/components/LslOutlet.js.map +0 -1
  100. package/build/components/TimeMarkerOutlet.d.ts +0 -19
  101. package/build/components/TimeMarkerOutlet.js.map +0 -1
  102. package/build/demo.d.ts +0 -1
  103. package/build/demo.js +0 -42
  104. package/build/demo.js.map +0 -1
  105. package/build/testDoubles/FakeLiblsl.js.map +0 -1
  106. package/build/testDoubles/FakeLslOutlet.js.map +0 -1
  107. package/build/testDoubles/FakeLslStreamInfo.d.ts +0 -5
  108. package/build/testDoubles/FakeLslStreamInfo.js +0 -10
  109. package/build/testDoubles/FakeLslStreamInfo.js.map +0 -1
  110. package/build/testDoubles/FakeStreamInfo.js.map +0 -1
  111. package/build/testDoubles/FakeTimeMarkerOutlet.d.ts +0 -14
  112. package/build/testDoubles/FakeTimeMarkerOutlet.js +0 -30
  113. package/build/testDoubles/FakeTimeMarkerOutlet.js.map +0 -1
  114. package/build/testDoubles/MockTimeMarkerOutlet.js.map +0 -1
  115. package/build/testDoubles/SpyLslInlet.d.ts +0 -7
  116. package/build/testDoubles/SpyLslInlet.js.map +0 -1
  117. package/build/testDoubles/SpyLslStreamInfo.d.ts +0 -9
  118. package/build/testDoubles/SpyLslStreamInfo.js.map +0 -1
  119. package/build/testDoubles/SpyTimeMarkerOutlet.d.ts +0 -9
  120. package/build/testDoubles/SpyTimeMarkerOutlet.js +0 -19
  121. package/build/testDoubles/SpyTimeMarkerOutlet.js.map +0 -1
  122. package/src/__tests__/AbstractNodeLslTest.ts +0 -50
  123. package/src/__tests__/TimeMarkerOutlet.test.ts +0 -181
  124. package/src/demo.ts +0 -43
  125. package/src/testDoubles/FakeTimeMarkerOutlet.ts +0 -39
  126. package/src/testDoubles/SpyTimeMarkerOutlet.ts +0 -19
  127. /package/build/testDoubles/{FakeLiblsl.js → Liblsl/FakeLiblsl.js} +0 -0
  128. /package/build/testDoubles/{FakeStreamInfo.js → StreamInfo/FakeStreamInfo.js} +0 -0
@@ -1,181 +0,0 @@
1
- import { randomInt } from 'crypto'
2
- import { assert, generateId, test } from '@sprucelabs/test-utils'
3
- import { LslOutletOptions } from '../components/LslOutlet'
4
- import TimeMarkerOutletImpl from '../components/TimeMarkerOutlet'
5
- import FakeStreamInfo from '../testDoubles/FakeStreamInfo'
6
- import generateRandomOutletOptions from '../testDoubles/generateRandomOutletOptions'
7
- import SpyTimeMarkerOutlet from '../testDoubles/SpyTimeMarkerOutlet'
8
- import AbstractNodeLslTest from './AbstractNodeLslTest'
9
-
10
- export default class TimeMarkerOutletTest extends AbstractNodeLslTest {
11
- private static outlet: SpyTimeMarkerOutlet
12
-
13
- protected static async beforeEach() {
14
- await super.beforeEach()
15
-
16
- this.setFakeStreamInfo()
17
- this.setSpyTimeMarkerOutlet()
18
- this.setFakeLiblsl()
19
-
20
- this.outlet = await this.Outlet()
21
- }
22
-
23
- @test()
24
- protected static async loadsWithTimeMarkerSpecificOptions() {
25
- assert.isEqualDeep(this.outlet.passedOptions, {
26
- name: this.name_,
27
- type: this.type,
28
- channelNames: this.channelNames,
29
- sampleRate: this.sampleRate,
30
- channelFormat: this.channelFormat,
31
- sourceId: this.sourceId,
32
- manufacturer: this.manufacturer,
33
- unit: this.unit,
34
- chunkSize: this.chunkSize,
35
- maxBuffered: this.maxBuffered,
36
- })
37
- }
38
-
39
- @test()
40
- protected static async canOverrideDefaultOptions() {
41
- const options = generateRandomOutletOptions()
42
- const outlet = await this.Outlet(options)
43
- assert.isEqualDeep(outlet.passedOptions, options)
44
- }
45
-
46
- @test()
47
- protected static async pushingSingleMarkerIncrementsHitCountAndWaitTime() {
48
- const markers = [this.generateDurationMarkerValues()]
49
- await this.outlet.pushMarkers(markers)
50
-
51
- assert.isEqual(this.fakeLiblsl.pushSampleStringTimestampHitCount, 1)
52
- assert.isEqual(this.outlet.totalWaitTimeMs, markers[0].durationMs)
53
- }
54
-
55
- @test()
56
- protected static async pushingTwoMarkersIncrementsHitCountAndWaitTimeTwice() {
57
- const markers = await this.pushTotalMarkers(2)
58
-
59
- assert.isEqual(this.fakeLiblsl.pushSampleStringTimestampHitCount, 2)
60
- assert.isEqual(
61
- this.outlet.totalWaitTimeMs,
62
- markers[0].durationMs + markers[1].durationMs
63
- )
64
- }
65
-
66
- @test('can stop on the first marker', 1)
67
- @test('can stop on the second marker', 2)
68
- @test('can stop on the third marker', 3)
69
- protected static async canStopTimeMarkersMidPush(bailIdx: number) {
70
- let hitCount = 0
71
-
72
- this.outlet.pushSample = () => {
73
- hitCount += 1
74
- if (hitCount === bailIdx) {
75
- this.outlet.stop()
76
- }
77
- }
78
-
79
- await this.pushTotalMarkers(10)
80
-
81
- assert.isEqual(hitCount, bailIdx)
82
- }
83
-
84
- @test()
85
- protected static async canStartAgainAfterStopping() {
86
- this.outlet.stop()
87
-
88
- let hitCount = 0
89
-
90
- this.outlet.pushSample = () => {
91
- hitCount++
92
- }
93
-
94
- await this.pushTotalMarkers(10)
95
-
96
- assert.isEqual(hitCount, 10)
97
- }
98
-
99
- @test()
100
- protected static async doesNotWaitIfStopped() {
101
- await this.setupTimeMarkerImpl()
102
-
103
- const startMs = Date.now()
104
- const promise = this.pushTotalMarkers(2, 1000)
105
- this.outlet.stop()
106
- await promise
107
- const endMs = Date.now()
108
-
109
- assert.isBelow(endMs - startMs, 10)
110
- }
111
-
112
- @test()
113
- protected static async clearsTheTimeoutOnStop() {
114
- await this.setupTimeMarkerImpl()
115
-
116
- const promise = this.pushTotalMarkers(2, 100)
117
-
118
- this.outlet.stop()
119
- this.outlet.pushSample = () =>
120
- assert.fail('Should not have been called')
121
-
122
- await promise
123
- await this.wait(100)
124
- }
125
-
126
- @test()
127
- protected static async createsStreamInfoWithCorrectOptions() {
128
- assert.isEqualDeep(
129
- FakeStreamInfo.callsToConstructor[0],
130
- {
131
- channelNames: this.channelNames,
132
- channelFormat: this.channelFormat,
133
- sampleRate: this.sampleRate,
134
- name: this.name_,
135
- type: this.type,
136
- sourceId: this.sourceId,
137
- units: this.unit,
138
- },
139
- 'Should create stream info!'
140
- )
141
- }
142
-
143
- private static async setupTimeMarkerImpl() {
144
- TimeMarkerOutletImpl.Class = TimeMarkerOutletImpl as any
145
- this.outlet = await this.Outlet()
146
- }
147
-
148
- private static async pushTotalMarkers(total: number, durationMs?: number) {
149
- const markers = new Array(total)
150
- .fill(null)
151
- .map(() => this.generateDurationMarkerValues(durationMs))
152
-
153
- await this.outlet.pushMarkers(markers)
154
-
155
- return markers
156
- }
157
-
158
- private static generateDurationMarkerValues(durationMs?: number) {
159
- return {
160
- name: generateId(),
161
- durationMs: durationMs ?? randomInt(100, 1000),
162
- }
163
- }
164
-
165
- protected static readonly name_ = 'Time markers'
166
- protected static readonly type = 'Markers'
167
- protected static readonly channelNames = ['Markers']
168
- protected static readonly channelFormat = 'string'
169
- protected static readonly sourceId = 'time-markers'
170
- protected static readonly manufacturer = 'N/A'
171
- protected static readonly unit = 'N/A'
172
- protected static readonly sampleRate = 0
173
- protected static readonly chunkSize = 0
174
- protected static readonly maxBuffered = 0
175
-
176
- private static async Outlet(options?: Partial<LslOutletOptions>) {
177
- return (await TimeMarkerOutletImpl.Create(
178
- options
179
- )) as SpyTimeMarkerOutlet
180
- }
181
- }
package/src/demo.ts DELETED
@@ -1,43 +0,0 @@
1
- import LslInlet from './components/LslInlet'
2
- import LslOutletImpl from './components/LslOutlet'
3
-
4
- async function waitForMs(ms: number) {
5
- return new Promise((resolve) => {
6
- setTimeout(resolve, ms)
7
- })
8
- }
9
-
10
- async function main() {
11
- const outlet = await LslOutletImpl.Create({
12
- name: 'Test Outlet',
13
- type: 'Test Type',
14
- sourceId: 'Test Source ID',
15
- channelNames: ['Channel 1', 'Channel 2'],
16
- channelFormat: 'float32',
17
- sampleRate: 0,
18
- chunkSize: 1,
19
- maxBuffered: 0,
20
- manufacturer: 'Test Manufacturer',
21
- unit: 'Test Unit',
22
- })
23
-
24
- const inlet = LslInlet.Create({
25
- channelNames: ['Channel 1', 'Channel 2'],
26
- channelFormat: 'float32',
27
- sampleRate: 0,
28
- chunkSize: 1,
29
- maxBuffered: 0,
30
- })
31
-
32
- // @ts-ignore
33
- const promise = inlet.start()
34
-
35
- for (let i = 0; i < 100; i++) {
36
- outlet.pushSample([i])
37
- await waitForMs(1000)
38
- }
39
-
40
- await promise
41
- }
42
-
43
- main().catch(console.error)
@@ -1,39 +0,0 @@
1
- import { TimeMarkerOutlet } from '../components/TimeMarkerOutlet'
2
- import { DurationMarker } from '../nodeLsl.types'
3
-
4
- export default class FakeTimeMarkerOutlet implements TimeMarkerOutlet {
5
- public pushMarkersCalls: DurationMarker[][]
6
- public pushSampleCalls: string[][]
7
- public numStopCalls: number
8
- public numDestroyCalls: number
9
-
10
- public constructor() {
11
- this.pushMarkersCalls = []
12
- this.pushSampleCalls = []
13
- this.numStopCalls = 0
14
- this.numDestroyCalls = 0
15
- }
16
-
17
- public async pushMarkers(markers: DurationMarker[]) {
18
- this.pushMarkersCalls.push(markers)
19
- }
20
-
21
- public pushSample(sample: string[]) {
22
- this.pushSampleCalls.push(sample)
23
- }
24
-
25
- public stop() {
26
- this.numStopCalls++
27
- }
28
-
29
- public destroy() {
30
- this.numDestroyCalls++
31
- }
32
-
33
- public resetTestDouble() {
34
- this.pushMarkersCalls = []
35
- this.pushSampleCalls = []
36
- this.numStopCalls = 0
37
- this.numDestroyCalls = 0
38
- }
39
- }
@@ -1,19 +0,0 @@
1
- import { LslOutletOptions } from '../components/LslOutlet'
2
- import { StreamInfo } from '../components/LslStreamInfo'
3
- import TimeMarkerOutletImpl from '../components/TimeMarkerOutlet'
4
-
5
- export default class SpyTimeMarkerOutlet extends TimeMarkerOutletImpl {
6
- public passedOptions: LslOutletOptions
7
- public totalWaitTimeMs: number
8
-
9
- public constructor(info: StreamInfo, options: LslOutletOptions) {
10
- super(info, options)
11
- this.passedOptions = options
12
- this.totalWaitTimeMs = 0
13
- }
14
-
15
- public async wait(durationMs: number) {
16
- this.totalWaitTimeMs += durationMs
17
- return Promise.resolve()
18
- }
19
- }