@neurodevs/node-lsl 1.0.4 → 2.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.
package/build/Liblsl.d.ts CHANGED
@@ -7,19 +7,19 @@ export default class LiblslImpl implements Liblsl {
7
7
  static reset(): void;
8
8
  static setInstance(instance: Liblsl): void;
9
9
  constructor();
10
+ appendChannelsToStreamInfo(info: LslBindingsStreamInfo, channels: LslChannel[]): void;
10
11
  private loadBindings;
11
12
  pushSample(outlet: LslBindingsOutlet, sample: LslSample): void;
12
13
  createOutlet(options: CreateOutletOptions): LslBindingsOutlet;
13
- createStreamInfo(options: CreateStreamInfoOptions): StreamInfo;
14
+ createStreamInfo(options: CreateStreamInfoOptions): LslBindingsStreamInfo;
14
15
  }
15
16
  export interface Liblsl {
17
+ appendChannelsToStreamInfo(info: LslBindingsStreamInfo, channels: LslChannel[]): void;
16
18
  createStreamInfo(options: CreateStreamInfoOptions): LslBindingsStreamInfo;
17
19
  createOutlet(options: CreateOutletOptions): LslBindingsOutlet;
18
20
  pushSample(outlet: LslBindingsOutlet, sample: LslSample): void;
19
21
  }
20
22
  export type LslSample = (number | string | undefined)[];
21
- export interface StreamInfo {
22
- }
23
23
  export interface CreateStreamInfoOptions {
24
24
  name: string;
25
25
  type: string;
@@ -30,14 +30,22 @@ export interface CreateStreamInfoOptions {
30
30
  manufacturer?: string;
31
31
  unit?: string;
32
32
  }
33
+ export interface LslChannel {
34
+ label: string;
35
+ unit: string;
36
+ type: string;
37
+ }
33
38
  export interface LiblslBindings {
34
39
  lsl_create_streaminfo(name: string, type: string, channelCount: number, sampleRate: number, channelFormat: number, sourceId: string): LslBindingsStreamInfo;
35
40
  lsl_create_outlet(info: LslBindingsStreamInfo, chunkSize: number, maxBuffered: number): LslBindingsOutlet;
36
41
  lsl_push_sample_ft(outlet: LslBindingsOutlet, sample: LslSample, timestamp: number): void;
37
42
  lsl_local_clock(): number;
43
+ lsl_get_desc(info: LslBindingsStreamInfo): LslBindingsDesc;
44
+ lsl_append_child(desc: LslBindingsDesc, name: string): LslBindingsChild;
45
+ lsl_append_child_value(child: LslBindingsChild, name: string, value: string): void;
38
46
  }
39
47
  export interface CreateOutletOptions {
40
- info: StreamInfo;
48
+ info: LslBindingsStreamInfo;
41
49
  chunkSize: number;
42
50
  maxBuffered: number;
43
51
  }
@@ -45,3 +53,7 @@ export interface LslBindingsStreamInfo {
45
53
  }
46
54
  export interface LslBindingsOutlet {
47
55
  }
56
+ export interface LslBindingsDesc {
57
+ }
58
+ export interface LslBindingsChild {
59
+ }
package/build/Liblsl.js CHANGED
@@ -37,6 +37,16 @@ class LiblslImpl {
37
37
  });
38
38
  }
39
39
  }
40
+ appendChannelsToStreamInfo(info, channels) {
41
+ (0, schema_1.assertOptions)({ info, channels }, ['info', 'channels']);
42
+ const desc = this.bindings.lsl_get_desc(info);
43
+ const parent = this.bindings.lsl_append_child(desc, 'channels');
44
+ for (const channel of channels) {
45
+ this.bindings.lsl_append_child_value(parent, 'label', channel.label);
46
+ this.bindings.lsl_append_child_value(parent, 'unit', channel.unit);
47
+ this.bindings.lsl_append_child_value(parent, 'type', channel.type);
48
+ }
49
+ }
40
50
  loadBindings(path) {
41
51
  return LiblslImpl.ffi.Library(path, {
42
52
  lsl_create_streaminfo: [
@@ -46,6 +56,9 @@ class LiblslImpl {
46
56
  lsl_create_outlet: [outletType, [streamInfo, 'int', 'int']],
47
57
  lsl_local_clock: ['double', []],
48
58
  lsl_push_sample_ft: ['void', [outletType, FloatArray, 'double']],
59
+ lsl_get_desc: [xmlPtr, [streamInfo]],
60
+ lsl_append_child: [xmlPtr, [xmlPtr, 'string']],
61
+ lsl_append_child_value: [xmlPtr, [xmlPtr, 'string', 'string']],
49
62
  });
50
63
  }
51
64
  pushSample(outlet, sample) {
@@ -78,4 +91,5 @@ exports.default = LiblslImpl;
78
91
  const streamInfo = ref_napi_1.default.refType(ref_napi_1.default.types.void);
79
92
  const outletType = ref_napi_1.default.refType(ref_napi_1.default.types.void);
80
93
  const FloatArray = (0, ref_array_napi_1.default)(ref_napi_1.default.types.float);
94
+ const xmlPtr = ref_napi_1.default.refType(ref_napi_1.default.types.void);
81
95
  //# sourceMappingURL=Liblsl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Liblsl.js","sourceRoot":"","sources":["../src/Liblsl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Liblsl.js","sourceRoot":"","sources":["../src/Liblsl.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { LslSample } from './Liblsl';
2
2
  export default class LslOutletImpl implements LslOutlet {
3
3
  private outletOptions;
4
4
  static Class?: new (options: LslOutletOptions) => LslOutlet;
5
+ private streamInfo;
5
6
  protected constructor(options: LslOutletOptions);
6
7
  static Outlet(options: LslOutletOptions): LslOutlet;
7
8
  private assertValidMaxBufferred;
@@ -20,7 +21,7 @@ export type ChannelFormat = (typeof CHANNEL_FORMATS)[number];
20
21
  export interface LslOutletOptions {
21
22
  name: string;
22
23
  type: string;
23
- channelCount: number;
24
+ channelLabels: string[];
24
25
  sampleRate: number;
25
26
  channelFormat: ChannelFormat;
26
27
  sourceId: string;
@@ -18,10 +18,10 @@ const schema_1 = require("@sprucelabs/schema");
18
18
  const Liblsl_1 = __importDefault(require("./Liblsl"));
19
19
  class LslOutletImpl {
20
20
  constructor(options) {
21
- const { channelCount, sampleRate, channelFormat, chunkSize, maxBuffered } = (0, schema_1.assertOptions)(options, [
21
+ const { sampleRate, channelFormat } = (0, schema_1.assertOptions)(options, [
22
22
  'name',
23
23
  'type',
24
- 'channelCount',
24
+ 'channelLabels',
25
25
  'sampleRate',
26
26
  'channelFormat',
27
27
  'sourceId',
@@ -30,12 +30,22 @@ class LslOutletImpl {
30
30
  'chunkSize',
31
31
  'maxBuffered',
32
32
  ]);
33
- this.assertValidChannelCount(channelCount);
33
+ this.outletOptions = options;
34
+ const _a = this
35
+ .outletOptions, { chunkSize, maxBuffered, channelLabels } = _a, streamInfoOptions = __rest(_a, ["chunkSize", "maxBuffered", "channelLabels"]);
36
+ this.assertValidChannelCount(channelLabels.length);
34
37
  this.assertValidSampleRate(sampleRate);
35
38
  this.assertValidChannelFormat(channelFormat);
36
39
  this.assertValidChunkSize(chunkSize);
37
40
  this.assertValidMaxBufferred(maxBuffered);
38
- this.outletOptions = options;
41
+ delete streamInfoOptions.manufacturer;
42
+ delete streamInfoOptions.unit;
43
+ this.streamInfo = this.lsl.createStreamInfo(Object.assign(Object.assign({}, streamInfoOptions), { channelCount: channelLabels.length, channelFormat: CHANNEL_FORMATS.indexOf(this.outletOptions.channelFormat) }));
44
+ this.lsl.appendChannelsToStreamInfo(this.streamInfo, channelLabels.map((label) => ({
45
+ label,
46
+ unit: this.outletOptions.unit,
47
+ type: this.outletOptions.type,
48
+ })));
39
49
  }
40
50
  static Outlet(options) {
41
51
  var _a;
@@ -82,8 +92,8 @@ class LslOutletImpl {
82
92
  if (!this.isPositiveInteger(channelCount)) {
83
93
  throw new schema_1.SchemaError({
84
94
  code: 'INVALID_PARAMETERS',
85
- parameters: ['channelCount'],
86
- friendlyMessage: 'Channel count must be a positive integer.',
95
+ parameters: ['channelLabels'],
96
+ friendlyMessage: 'channelLabels must have 1 or more labels.',
87
97
  });
88
98
  }
89
99
  }
@@ -100,15 +110,10 @@ class LslOutletImpl {
100
110
  return Liblsl_1.default.getInstance();
101
111
  }
102
112
  pushSample(sample) {
103
- const _a = this
104
- .outletOptions, { chunkSize, maxBuffered } = _a, streamInfoOptions = __rest(_a, ["chunkSize", "maxBuffered"]);
105
- delete streamInfoOptions.manufacturer;
106
- delete streamInfoOptions.unit;
107
- const info = this.lsl.createStreamInfo(Object.assign(Object.assign({}, streamInfoOptions), { channelFormat: CHANNEL_FORMATS.indexOf(this.outletOptions.channelFormat) }));
108
113
  this.lsl.pushSample(this.lsl.createOutlet({
109
- info,
110
- chunkSize,
111
- maxBuffered,
114
+ info: this.streamInfo,
115
+ chunkSize: this.outletOptions.chunkSize,
116
+ maxBuffered: this.outletOptions.maxBuffered,
112
117
  }), sample);
113
118
  }
114
119
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LslOutlet.js","sourceRoot":"","sources":["../src/LslOutlet.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA+D;AAC/D,sDAAgD;AAEhD,MAAqB,aAAa;IAIjC,YAAsB,OAAyB;QAC9C,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,GACxE,IAAA,sBAAa,EAAC,OAAO,EAAE;YACtB,MAAM;YACN,MAAM;YACN,cAAc;YACd,YAAY;YACZ,eAAe;YACf,UAAU;YACV,cAAc;YACd,MAAM;YACN,WAAW;YACX,aAAa;SACb,CAAC,CAAA;QAEH,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAA;QAC1C,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAA;QACtC,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAA;QAC5C,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAA;QACpC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAA;QAEzC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAA;IAC7B,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,OAAyB;;QAC7C,OAAO,IAAI,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAA;IACzC,CAAC;IAEO,uBAAuB,CAAC,WAAmB;QAClD,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE;YAC/C,MAAM,IAAI,oBAAW,CAAC;gBACrB,IAAI,EAAE,oBAAoB;gBAC1B,UAAU,EAAE,CAAC,aAAa,CAAC;gBAC3B,eAAe,EAAE,kDAAkD;aACnE,CAAC,CAAA;SACF;IACF,CAAC;IAEO,oBAAoB,CAAC,SAAiB;QAC7C,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,EAAE;YAC7C,MAAM,IAAI,oBAAW,CAAC;gBACrB,IAAI,EAAE,oBAAoB;gBAC1B,UAAU,EAAE,CAAC,WAAW,CAAC;gBACzB,eAAe,EAAE,gDAAgD;aACjE,CAAC,CAAA;SACF;IACF,CAAC;IAEO,wBAAwB,CAAC,aAA4B;QAC5D,MAAM,YAAY,GAAG,eAAe,CAAA;QAEpC,IAAI,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE;YAC/C,MAAM,IAAI,oBAAW,CAAC;gBACrB,IAAI,EAAE,oBAAoB;gBAC1B,UAAU,EAAE,CAAC,eAAe,CAAC;gBAC7B,eAAe,EAAE,wCAAwC;aACzD,CAAC,CAAA;SACF;IACF,CAAC;IAEO,qBAAqB,CAAC,UAAkB;QAC/C,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE;YACvC,MAAM,IAAI,oBAAW,CAAC;gBACrB,IAAI,EAAE,oBAAoB;gBAC1B,UAAU,EAAE,CAAC,YAAY,CAAC;gBAC1B,eAAe,EAAE,wCAAwC;aACzD,CAAC,CAAA;SACF;IACF,CAAC;IAEO,uBAAuB,CAAC,YAAoB;QACnD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE;YAC1C,MAAM,IAAI,oBAAW,CAAC;gBACrB,IAAI,EAAE,oBAAoB;gBAC1B,UAAU,EAAE,CAAC,cAAc,CAAC;gBAC5B,eAAe,EAAE,2CAA2C;aAC5D,CAAC,CAAA;SACF;IACF,CAAC;IAEO,gBAAgB,CAAC,KAAa;QACrC,OAAO,KAAK,GAAG,CAAC,CAAA;IACjB,CAAC;IAEO,uBAAuB,CAAC,KAAa;QAC5C,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IAC7C,CAAC;IAEO,iBAAiB,CAAC,KAAa;QACtC,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAA;IAC5C,CAAC;IAED,IAAY,GAAG;QACd,OAAO,gBAAU,CAAC,WAAW,EAAE,CAAA;IAChC,CAAC;IAEM,UAAU,CAAC,MAAiB;QAClC,MAAM,KAAmD,IAAI;aAC3D,aAAoB,EADhB,EAAE,SAAS,EAAE,WAAW,OACR,EADa,iBAAiB,cAA9C,4BAAgD,CAChC,CAAA;QAEtB,OAAO,iBAAiB,CAAC,YAAY,CAAA;QACrC,OAAO,iBAAiB,CAAC,IAAI,CAAA;QAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,iCAClC,iBAAiB,KACpB,aAAa,EAAE,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IACvE,CAAA;QACF,IAAI,CAAC,GAAG,CAAC,UAAU,CAClB,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACrB,IAAI;YACJ,SAAS;YACT,WAAW;SACX,CAAC,EACF,MAAM,CACN,CAAA;IACF,CAAC;CACD;AAxHD,gCAwHC;AAED,MAAM,eAAe,GAAG;IACvB,WAAW;IACX,SAAS;IACT,UAAU;IACV,QAAQ;IACR,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;CACE,CAAA"}
1
+ {"version":3,"file":"LslOutlet.js","sourceRoot":"","sources":["../src/LslOutlet.ts"],"names":[],"mappings":"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"}
@@ -15,13 +15,14 @@ export default class LslOutletTest extends AbstractSpruceTest {
15
15
  protected static throwWithInvalidChunkSize(): Promise<void>;
16
16
  protected static throwsWithInvalidMaxBuffered(): Promise<void>;
17
17
  protected static pushingSampleSendsToLsl(sample: LslSample): Promise<void>;
18
- protected static pushingSamplePassesCorrectOptionsToCreateStreamInfo(): Promise<void>;
18
+ protected static constructionPassesCorrectOptionsToCreateStreamInfo(): Promise<void>;
19
19
  protected static canOverrideClasInstantiatedInFactory(): Promise<void>;
20
+ protected static appendsChannelsBasedOnCount(labels: string[]): Promise<void>;
20
21
  private static pushSample;
21
22
  private static assertThrowsInvalidMaxBuffered;
22
23
  private static assertThrowsInvalidChunkSize;
23
24
  private static assertThrowsInvalidSampleRate;
24
- private static assertThrowsInvalidChannelCount;
25
+ private static assertThrowsInvalidChannelLabels;
25
26
  private static assertDoesThrowInvalidParameters;
26
27
  private static Outlet;
27
28
  }
@@ -61,11 +61,12 @@ exports.CHANNEL_FORMATS = [
61
61
  class LslOutletTest extends test_utils_1.default {
62
62
  static async beforeEach() {
63
63
  await super.beforeEach();
64
+ delete LslOutlet_1.default.Class;
64
65
  this.channelIdx = (0, crypto_1.randomInt)(7);
65
66
  this.randomOutletOptions = {
66
67
  name: (0, test_utils_1.generateId)(),
67
68
  type: (0, test_utils_1.generateId)(),
68
- channelCount: (0, crypto_1.randomInt)(1, 10),
69
+ channelLabels: new Array((0, crypto_1.randomInt)(1, 10)).fill((0, test_utils_1.generateId)()),
69
70
  sampleRate: Math.random() * 10,
70
71
  channelFormat: exports.CHANNEL_FORMATS[this.channelIdx],
71
72
  sourceId: (0, test_utils_1.generateId)(),
@@ -84,7 +85,7 @@ class LslOutletTest extends test_utils_1.default {
84
85
  parameters: [
85
86
  'name',
86
87
  'type',
87
- 'channelCount',
88
+ 'channelLabels',
88
89
  'sampleRate',
89
90
  'channelFormat',
90
91
  'sourceId',
@@ -99,9 +100,7 @@ class LslOutletTest extends test_utils_1.default {
99
100
  this.Outlet();
100
101
  }
101
102
  static async throwsWithInvalidChannelCount() {
102
- this.assertThrowsInvalidChannelCount(0);
103
- this.assertThrowsInvalidChannelCount(-1);
104
- this.assertThrowsInvalidChannelCount(1.5);
103
+ this.assertThrowsInvalidChannelLabels(0);
105
104
  }
106
105
  static async throwsWithInvalidSampleRate() {
107
106
  this.assertThrowsInvalidSampleRate(0);
@@ -142,13 +141,15 @@ class LslOutletTest extends test_utils_1.default {
142
141
  maxBuffered: this.randomOutletOptions.maxBuffered,
143
142
  });
144
143
  }
145
- static async pushingSamplePassesCorrectOptionsToCreateStreamInfo() {
146
- this.pushSample([1]);
144
+ static async constructionPassesCorrectOptionsToCreateStreamInfo() {
145
+ this.Outlet();
147
146
  const options = __rest(this.randomOutletOptions, []);
147
+ options.channelCount = options.channelLabels.length;
148
148
  delete options.manufacturer;
149
149
  delete options.unit;
150
150
  delete options.chunkSize;
151
151
  delete options.maxBuffered;
152
+ delete options.channelLabels;
152
153
  test_utils_1.assert.isEqualDeep(this.spyLsl.lastStreamInfoOptions, Object.assign(Object.assign({}, options), { channelFormat: this.channelIdx }));
153
154
  }
154
155
  static async canOverrideClasInstantiatedInFactory() {
@@ -156,6 +157,19 @@ class LslOutletTest extends test_utils_1.default {
156
157
  const instance = this.Outlet();
157
158
  test_utils_1.assert.isInstanceOf(instance, CheckingOutlet);
158
159
  }
160
+ static async appendsChannelsBasedOnCount(labels) {
161
+ const type = (0, test_utils_1.generateId)();
162
+ const unit = (0, test_utils_1.generateId)();
163
+ this.Outlet({ channelLabels: labels, type, unit });
164
+ test_utils_1.assert.isEqualDeep(this.spyLsl.lastAppendChannelsToStreamInfo, {
165
+ info: this.spyLsl.streamInfo,
166
+ channels: labels.map((label) => ({
167
+ label,
168
+ type,
169
+ unit,
170
+ })),
171
+ });
172
+ }
159
173
  static pushSample(sample) {
160
174
  const outlet = this.Outlet();
161
175
  outlet.pushSample(sample);
@@ -169,10 +183,8 @@ class LslOutletTest extends test_utils_1.default {
169
183
  static assertThrowsInvalidSampleRate(sampleRate) {
170
184
  this.assertDoesThrowInvalidParameters({ sampleRate }, ['sampleRate']);
171
185
  }
172
- static assertThrowsInvalidChannelCount(count) {
173
- this.assertDoesThrowInvalidParameters({ channelCount: count }, [
174
- 'channelCount',
175
- ]);
186
+ static assertThrowsInvalidChannelLabels(count) {
187
+ this.assertDoesThrowInvalidParameters({ channelLabels: new Array(count).fill((0, test_utils_1.generateId)()) }, ['channelLabels']);
176
188
  }
177
189
  static assertDoesThrowInvalidParameters(options, parameters) {
178
190
  const err = test_utils_1.assert.doesThrow(() => this.Outlet(options));
@@ -215,10 +227,14 @@ __decorate([
215
227
  ], LslOutletTest, "pushingSampleSendsToLsl", null);
216
228
  __decorate([
217
229
  (0, test_utils_1.test)()
218
- ], LslOutletTest, "pushingSamplePassesCorrectOptionsToCreateStreamInfo", null);
230
+ ], LslOutletTest, "constructionPassesCorrectOptionsToCreateStreamInfo", null);
219
231
  __decorate([
220
232
  (0, test_utils_1.test)()
221
233
  ], LslOutletTest, "canOverrideClasInstantiatedInFactory", null);
234
+ __decorate([
235
+ (0, test_utils_1.test)('can add one label', [(0, test_utils_1.generateId)()]),
236
+ (0, test_utils_1.test)('can add two labels', [(0, test_utils_1.generateId)(), (0, test_utils_1.generateId)()])
237
+ ], LslOutletTest, "appendsChannelsBasedOnCount", null);
222
238
  class SpyLiblsl {
223
239
  constructor() {
224
240
  this.outlet = {};
@@ -228,6 +244,12 @@ class SpyLiblsl {
228
244
  this.lastStreamInfoOptions = options;
229
245
  return this.streamInfo;
230
246
  }
247
+ appendChannelsToStreamInfo(info, channels) {
248
+ this.lastAppendChannelsToStreamInfo = {
249
+ info,
250
+ channels,
251
+ };
252
+ }
231
253
  createOutlet(options) {
232
254
  this.lastOutletOptions = options;
233
255
  return this.outlet;
@@ -1 +1 @@
1
- {"version":3,"file":"LslOutlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/behavioral/LslOutlet.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LslOutlet.test.js","sourceRoot":"","sources":["../../../src/__tests__/behavioral/LslOutlet.test.ts"],"names":[],"mappings":"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"}
@@ -6,11 +6,16 @@ export default class LiblslTest extends AbstractSpruceTest {
6
6
  private static fakeBindings;
7
7
  private static fakeStreamInfo;
8
8
  private static fakeOutlet;
9
+ private static fakeDesc;
10
+ private static fakeChildNamedChannels;
9
11
  private static createStreamInfoParams?;
12
+ private static appendChildParams?;
10
13
  private static createOutletParams?;
11
14
  private static pushSampleParams?;
15
+ private static appendChildValueParams;
12
16
  private static localClock;
13
17
  private static shouldThrowWhenCreatingBindings;
18
+ private static getDescriptionParams?;
14
19
  protected static beforeEach(): Promise<void>;
15
20
  protected static throwsIfNoEnvSet(): Promise<void>;
16
21
  protected static throwsHelpfulErrorWhenBindingsFailToLoad(): Promise<void>;
@@ -24,5 +29,10 @@ export default class LiblslTest extends AbstractSpruceTest {
24
29
  protected static canCreateOutletWithRequiredParams(): Promise<void>;
25
30
  protected static pushSampleThrowsWhenMissingRequiredParams(): Promise<void>;
26
31
  protected static pushSampleCallsBindings(): Promise<void>;
32
+ protected static appendChannelsThrowsWithMissingParams(): Promise<void>;
33
+ protected static addingSingleChannelGetsDescription(): Promise<void>;
34
+ protected static addingMultpleChannelsAddsChildrenToChannelsChild(): Promise<void>;
35
+ private static generateRandomChannelValues;
36
+ private static createRandomStreamInfo;
27
37
  private static generateRandomCreateStreamInfoOptions;
28
38
  }
@@ -45,9 +45,14 @@ class LiblslTest extends test_utils_1.default {
45
45
  delete this.createStreamInfoParams;
46
46
  delete this.createOutletParams;
47
47
  delete this.pushSampleParams;
48
+ delete this.getDescriptionParams;
49
+ delete this.appendChildParams;
50
+ this.appendChildValueParams = [];
48
51
  process.env.LIBLSL_PATH = (0, test_utils_1.generateId)();
49
52
  this.fakeStreamInfo = {};
53
+ this.fakeDesc = {};
50
54
  this.fakeOutlet = {};
55
+ this.fakeChildNamedChannels = {};
51
56
  this.localClock = new Date().getTime();
52
57
  this.shouldThrowWhenCreatingBindings = false;
53
58
  this.fakeBindings = {
@@ -64,6 +69,17 @@ class LiblslTest extends test_utils_1.default {
64
69
  return 0;
65
70
  },
66
71
  lsl_local_clock: () => this.localClock,
72
+ lsl_get_desc: (info) => {
73
+ this.getDescriptionParams = [info];
74
+ return this.fakeDesc;
75
+ },
76
+ lsl_append_child: (...params) => {
77
+ this.appendChildParams = params;
78
+ return this.fakeChildNamedChannels;
79
+ },
80
+ lsl_append_child_value: (...params) => {
81
+ this.appendChildValueParams.push(params);
82
+ },
67
83
  };
68
84
  Liblsl_1.default.ffi = {
69
85
  //@ts-ignore
@@ -117,6 +133,9 @@ class LiblslTest extends test_utils_1.default {
117
133
  lsl_create_outlet: [outletType, [streamInfo, 'int', 'int']],
118
134
  lsl_local_clock: ['double', []],
119
135
  lsl_push_sample_ft: ['void', [outletType, FloatArray, 'double']],
136
+ lsl_get_desc: [xmlPtr, [streamInfo]],
137
+ lsl_append_child: [xmlPtr, [xmlPtr, 'string']],
138
+ lsl_append_child_value: [xmlPtr, [xmlPtr, 'string', 'string']],
120
139
  };
121
140
  test_utils_1.assert.isEqual(JSON.stringify(this.libraryOptions), JSON.stringify(expected));
122
141
  }
@@ -148,7 +167,7 @@ class LiblslTest extends test_utils_1.default {
148
167
  });
149
168
  }
150
169
  static async canCreateOutletWithRequiredParams() {
151
- const info = this.lsl.createStreamInfo(this.generateRandomCreateStreamInfoOptions());
170
+ const info = this.createRandomStreamInfo();
152
171
  const options = {
153
172
  info,
154
173
  chunkSize: (0, crypto_1.randomInt)(10),
@@ -173,6 +192,52 @@ class LiblslTest extends test_utils_1.default {
173
192
  test_utils_1.assert.isEqual((_b = this.pushSampleParams) === null || _b === void 0 ? void 0 : _b[1], expected);
174
193
  test_utils_1.assert.isEqual((_c = this.pushSampleParams) === null || _c === void 0 ? void 0 : _c[2], this.localClock);
175
194
  }
195
+ static async appendChannelsThrowsWithMissingParams() {
196
+ //@ts-ignore
197
+ const err = test_utils_1.assert.doesThrow(() => this.lsl.appendChannelsToStreamInfo());
198
+ test_utils_1.errorAssert.assertError(err, 'MISSING_PARAMETERS', {
199
+ parameters: ['info', 'channels'],
200
+ });
201
+ }
202
+ static async addingSingleChannelGetsDescription() {
203
+ var _a, _b, _c;
204
+ const info = this.createRandomStreamInfo();
205
+ const channel = this.generateRandomChannelValues();
206
+ this.lsl.appendChannelsToStreamInfo(info, [channel]);
207
+ test_utils_1.assert.isEqual((_a = this.getDescriptionParams) === null || _a === void 0 ? void 0 : _a[0], info);
208
+ test_utils_1.assert.isEqual((_b = this.appendChildParams) === null || _b === void 0 ? void 0 : _b[0], this.fakeDesc);
209
+ test_utils_1.assert.isEqual((_c = this.appendChildParams) === null || _c === void 0 ? void 0 : _c[1], 'channels');
210
+ test_utils_1.assert.isLength(this.appendChildValueParams, 3);
211
+ for (let i = 0; i < 3; i++) {
212
+ const param = this.appendChildValueParams[i];
213
+ test_utils_1.assert.isEqual(param[0], this.fakeChildNamedChannels);
214
+ }
215
+ test_utils_1.assert.isEqual(this.appendChildValueParams[0][1], 'label');
216
+ test_utils_1.assert.isEqual(this.appendChildValueParams[1][1], 'unit');
217
+ test_utils_1.assert.isEqual(this.appendChildValueParams[2][1], 'type');
218
+ test_utils_1.assert.isEqual(this.appendChildValueParams[0][2], channel.label);
219
+ test_utils_1.assert.isEqual(this.appendChildValueParams[1][2], channel.unit);
220
+ test_utils_1.assert.isEqual(this.appendChildValueParams[2][2], channel.type);
221
+ }
222
+ static async addingMultpleChannelsAddsChildrenToChannelsChild() {
223
+ const info = this.createRandomStreamInfo();
224
+ const channel1 = this.generateRandomChannelValues();
225
+ const channel2 = this.generateRandomChannelValues();
226
+ this.lsl.appendChannelsToStreamInfo(info, [channel1, channel2]);
227
+ test_utils_1.assert.isEqual(this.appendChildValueParams[3][2], channel2.label);
228
+ test_utils_1.assert.isEqual(this.appendChildValueParams[4][2], channel2.unit);
229
+ test_utils_1.assert.isEqual(this.appendChildValueParams[5][2], channel2.type);
230
+ }
231
+ static generateRandomChannelValues() {
232
+ return {
233
+ label: (0, test_utils_1.generateId)(),
234
+ type: (0, test_utils_1.generateId)(),
235
+ unit: (0, test_utils_1.generateId)(),
236
+ };
237
+ }
238
+ static createRandomStreamInfo() {
239
+ return this.lsl.createStreamInfo(this.generateRandomCreateStreamInfoOptions());
240
+ }
176
241
  static generateRandomCreateStreamInfoOptions() {
177
242
  return {
178
243
  name: (0, test_utils_1.generateId)(),
@@ -221,7 +286,17 @@ __decorate([
221
286
  __decorate([
222
287
  (0, test_utils_1.test)()
223
288
  ], LiblslTest, "pushSampleCallsBindings", null);
289
+ __decorate([
290
+ (0, test_utils_1.test)()
291
+ ], LiblslTest, "appendChannelsThrowsWithMissingParams", null);
292
+ __decorate([
293
+ (0, test_utils_1.test)()
294
+ ], LiblslTest, "addingSingleChannelGetsDescription", null);
295
+ __decorate([
296
+ (0, test_utils_1.test)()
297
+ ], LiblslTest, "addingMultpleChannelsAddsChildrenToChannelsChild", null);
224
298
  class FakeLiblsl {
299
+ appendChannelsToStreamInfo(_info, _channels) { }
225
300
  createOutlet(_options) {
226
301
  return {};
227
302
  }
@@ -233,4 +308,5 @@ class FakeLiblsl {
233
308
  const streamInfo = ref_napi_1.default.refType(ref_napi_1.default.types.void);
234
309
  const outletType = ref_napi_1.default.refType(ref_napi_1.default.types.void);
235
310
  const FloatArray = (0, ref_array_napi_1.default)(ref_napi_1.default.types.float);
311
+ const xmlPtr = ref_napi_1.default.refType(ref_napi_1.default.types.void);
236
312
  //# sourceMappingURL=Liblsl.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Liblsl.test.js","sourceRoot":"","sources":["../../../src/__tests__/implementation/Liblsl.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Liblsl.test.js","sourceRoot":"","sources":["../../../src/__tests__/implementation/Liblsl.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neurodevs/node-lsl",
3
- "version": "1.0.4",
3
+ "version": "2.0.0",
4
4
  "main": "build/index.js",
5
5
  "repository": "https://github.com/neurodevs/node-lsl.git",
6
6
  "scripts": {
package/src/Liblsl.ts CHANGED
@@ -40,6 +40,21 @@ export default class LiblslImpl implements Liblsl {
40
40
  })
41
41
  }
42
42
  }
43
+ public appendChannelsToStreamInfo(
44
+ info: LslBindingsStreamInfo,
45
+ channels: LslChannel[]
46
+ ): void {
47
+ assertOptions({ info, channels }, ['info', 'channels'])
48
+ const desc = this.bindings.lsl_get_desc(info)
49
+
50
+ const parent = this.bindings.lsl_append_child(desc, 'channels')
51
+
52
+ for (const channel of channels) {
53
+ this.bindings.lsl_append_child_value(parent, 'label', channel.label)
54
+ this.bindings.lsl_append_child_value(parent, 'unit', channel.unit)
55
+ this.bindings.lsl_append_child_value(parent, 'type', channel.type)
56
+ }
57
+ }
43
58
 
44
59
  private loadBindings(path: string) {
45
60
  return LiblslImpl.ffi.Library(path!, {
@@ -50,6 +65,9 @@ export default class LiblslImpl implements Liblsl {
50
65
  lsl_create_outlet: [outletType, [streamInfo, 'int', 'int']],
51
66
  lsl_local_clock: ['double', []],
52
67
  lsl_push_sample_ft: ['void', [outletType, FloatArray, 'double']],
68
+ lsl_get_desc: [xmlPtr, [streamInfo]],
69
+ lsl_append_child: [xmlPtr, [xmlPtr, 'string']],
70
+ lsl_append_child_value: [xmlPtr, [xmlPtr, 'string', 'string']],
53
71
  }) as unknown as LiblslBindings
54
72
  }
55
73
 
@@ -69,7 +87,9 @@ export default class LiblslImpl implements Liblsl {
69
87
  return this.bindings.lsl_create_outlet(info, chunkSize, maxBuffered)
70
88
  }
71
89
 
72
- public createStreamInfo(options: CreateStreamInfoOptions): StreamInfo {
90
+ public createStreamInfo(
91
+ options: CreateStreamInfoOptions
92
+ ): LslBindingsStreamInfo {
73
93
  const { name, type, channelCount, sampleRate, channelFormat, sourceId } =
74
94
  assertOptions(options, [
75
95
  'name',
@@ -92,6 +112,10 @@ export default class LiblslImpl implements Liblsl {
92
112
  }
93
113
 
94
114
  export interface Liblsl {
115
+ appendChannelsToStreamInfo(
116
+ info: LslBindingsStreamInfo,
117
+ channels: LslChannel[]
118
+ ): void
95
119
  createStreamInfo(options: CreateStreamInfoOptions): LslBindingsStreamInfo
96
120
  createOutlet(options: CreateOutletOptions): LslBindingsOutlet
97
121
  pushSample(outlet: LslBindingsOutlet, sample: LslSample): void
@@ -99,8 +123,6 @@ export interface Liblsl {
99
123
 
100
124
  export type LslSample = (number | string | undefined)[]
101
125
 
102
- export interface StreamInfo {}
103
-
104
126
  export interface CreateStreamInfoOptions {
105
127
  name: string
106
128
  type: string
@@ -112,6 +134,12 @@ export interface CreateStreamInfoOptions {
112
134
  unit?: string
113
135
  }
114
136
 
137
+ export interface LslChannel {
138
+ label: string
139
+ unit: string
140
+ type: string
141
+ }
142
+
115
143
  export interface LiblslBindings {
116
144
  lsl_create_streaminfo(
117
145
  name: string,
@@ -135,17 +163,26 @@ export interface LiblslBindings {
135
163
  ): void
136
164
 
137
165
  lsl_local_clock(): number
166
+ lsl_get_desc(info: LslBindingsStreamInfo): LslBindingsDesc
167
+ lsl_append_child(desc: LslBindingsDesc, name: string): LslBindingsChild
168
+ lsl_append_child_value(
169
+ child: LslBindingsChild,
170
+ name: string,
171
+ value: string
172
+ ): void
138
173
  }
139
174
 
140
175
  const streamInfo = ref.refType(ref.types.void)
141
176
  const outletType = ref.refType(ref.types.void)
142
177
  const FloatArray = ArrayType(ref.types.float)
143
-
178
+ const xmlPtr = ref.refType(ref.types.void)
144
179
  export interface CreateOutletOptions {
145
- info: StreamInfo
180
+ info: LslBindingsStreamInfo
146
181
  chunkSize: number
147
182
  maxBuffered: number
148
183
  }
149
184
 
150
185
  export interface LslBindingsStreamInfo {}
151
186
  export interface LslBindingsOutlet {}
187
+ export interface LslBindingsDesc {}
188
+ export interface LslBindingsChild {}
package/src/LslOutlet.ts CHANGED
@@ -1,32 +1,53 @@
1
1
  import { SchemaError, assertOptions } from '@sprucelabs/schema'
2
- import LiblslImpl, { LslSample } from './Liblsl'
2
+ import LiblslImpl, { LslBindingsStreamInfo, LslSample } from './Liblsl'
3
3
 
4
4
  export default class LslOutletImpl implements LslOutlet {
5
5
  private outletOptions: LslOutletOptions
6
6
  public static Class?: new (options: LslOutletOptions) => LslOutlet
7
+ private streamInfo: LslBindingsStreamInfo
7
8
 
8
9
  protected constructor(options: LslOutletOptions) {
9
- const { channelCount, sampleRate, channelFormat, chunkSize, maxBuffered } =
10
- assertOptions(options, [
11
- 'name',
12
- 'type',
13
- 'channelCount',
14
- 'sampleRate',
15
- 'channelFormat',
16
- 'sourceId',
17
- 'manufacturer',
18
- 'unit',
19
- 'chunkSize',
20
- 'maxBuffered',
21
- ])
22
-
23
- this.assertValidChannelCount(channelCount)
10
+ const { sampleRate, channelFormat } = assertOptions(options, [
11
+ 'name',
12
+ 'type',
13
+ 'channelLabels',
14
+ 'sampleRate',
15
+ 'channelFormat',
16
+ 'sourceId',
17
+ 'manufacturer',
18
+ 'unit',
19
+ 'chunkSize',
20
+ 'maxBuffered',
21
+ ])
22
+
23
+ this.outletOptions = options
24
+
25
+ const { chunkSize, maxBuffered, channelLabels, ...streamInfoOptions } = this
26
+ .outletOptions as any
27
+
28
+ this.assertValidChannelCount(channelLabels.length)
24
29
  this.assertValidSampleRate(sampleRate)
25
30
  this.assertValidChannelFormat(channelFormat)
26
31
  this.assertValidChunkSize(chunkSize)
27
32
  this.assertValidMaxBufferred(maxBuffered)
28
33
 
29
- this.outletOptions = options
34
+ delete streamInfoOptions.manufacturer
35
+ delete streamInfoOptions.unit
36
+
37
+ this.streamInfo = this.lsl.createStreamInfo({
38
+ ...streamInfoOptions,
39
+ channelCount: channelLabels.length,
40
+ channelFormat: CHANNEL_FORMATS.indexOf(this.outletOptions.channelFormat),
41
+ })
42
+
43
+ this.lsl.appendChannelsToStreamInfo(
44
+ this.streamInfo,
45
+ channelLabels.map((label: string) => ({
46
+ label,
47
+ unit: this.outletOptions.unit,
48
+ type: this.outletOptions.type,
49
+ }))
50
+ )
30
51
  }
31
52
 
32
53
  public static Outlet(options: LslOutletOptions) {
@@ -79,8 +100,8 @@ export default class LslOutletImpl implements LslOutlet {
79
100
  if (!this.isPositiveInteger(channelCount)) {
80
101
  throw new SchemaError({
81
102
  code: 'INVALID_PARAMETERS',
82
- parameters: ['channelCount'],
83
- friendlyMessage: 'Channel count must be a positive integer.',
103
+ parameters: ['channelLabels'],
104
+ friendlyMessage: 'channelLabels must have 1 or more labels.',
84
105
  })
85
106
  }
86
107
  }
@@ -102,21 +123,11 @@ export default class LslOutletImpl implements LslOutlet {
102
123
  }
103
124
 
104
125
  public pushSample(sample: LslSample) {
105
- const { chunkSize, maxBuffered, ...streamInfoOptions } = this
106
- .outletOptions as any
107
-
108
- delete streamInfoOptions.manufacturer
109
- delete streamInfoOptions.unit
110
-
111
- const info = this.lsl.createStreamInfo({
112
- ...streamInfoOptions,
113
- channelFormat: CHANNEL_FORMATS.indexOf(this.outletOptions.channelFormat),
114
- })
115
126
  this.lsl.pushSample(
116
127
  this.lsl.createOutlet({
117
- info,
118
- chunkSize,
119
- maxBuffered,
128
+ info: this.streamInfo,
129
+ chunkSize: this.outletOptions.chunkSize,
130
+ maxBuffered: this.outletOptions.maxBuffered,
120
131
  }),
121
132
  sample
122
133
  )
@@ -138,7 +149,7 @@ export type ChannelFormat = (typeof CHANNEL_FORMATS)[number]
138
149
  export interface LslOutletOptions {
139
150
  name: string
140
151
  type: string
141
- channelCount: number
152
+ channelLabels: string[]
142
153
  sampleRate: number
143
154
  channelFormat: ChannelFormat
144
155
  sourceId: string
@@ -11,6 +11,7 @@ import LiblslImpl, {
11
11
  Liblsl,
12
12
  LslBindingsOutlet,
13
13
  LslBindingsStreamInfo,
14
+ LslChannel,
14
15
  LslSample,
15
16
  } from '../../Liblsl'
16
17
  import LslOutlet, { ChannelFormat, LslOutletOptions } from '../../LslOutlet'
@@ -33,11 +34,12 @@ export default class LslOutletTest extends AbstractSpruceTest {
33
34
 
34
35
  protected static async beforeEach() {
35
36
  await super.beforeEach()
37
+ delete LslOutlet.Class
36
38
  this.channelIdx = randomInt(7)
37
39
  this.randomOutletOptions = {
38
40
  name: generateId(),
39
41
  type: generateId(),
40
- channelCount: randomInt(1, 10),
42
+ channelLabels: new Array(randomInt(1, 10)).fill(generateId()),
41
43
  sampleRate: Math.random() * 10,
42
44
  channelFormat: CHANNEL_FORMATS[this.channelIdx],
43
45
  sourceId: generateId(),
@@ -59,7 +61,7 @@ export default class LslOutletTest extends AbstractSpruceTest {
59
61
  parameters: [
60
62
  'name',
61
63
  'type',
62
- 'channelCount',
64
+ 'channelLabels',
63
65
  'sampleRate',
64
66
  'channelFormat',
65
67
  'sourceId',
@@ -78,9 +80,7 @@ export default class LslOutletTest extends AbstractSpruceTest {
78
80
 
79
81
  @test()
80
82
  protected static async throwsWithInvalidChannelCount() {
81
- this.assertThrowsInvalidChannelCount(0)
82
- this.assertThrowsInvalidChannelCount(-1)
83
- this.assertThrowsInvalidChannelCount(1.5)
83
+ this.assertThrowsInvalidChannelLabels(0)
84
84
  }
85
85
 
86
86
  @test()
@@ -136,14 +136,18 @@ export default class LslOutletTest extends AbstractSpruceTest {
136
136
  }
137
137
 
138
138
  @test()
139
- protected static async pushingSamplePassesCorrectOptionsToCreateStreamInfo() {
140
- this.pushSample([1])
139
+ protected static async constructionPassesCorrectOptionsToCreateStreamInfo() {
140
+ this.Outlet()
141
+
141
142
  const { ...options } = this.randomOutletOptions as any
142
143
 
144
+ options.channelCount = options.channelLabels.length
145
+
143
146
  delete options.manufacturer
144
147
  delete options.unit
145
148
  delete options.chunkSize
146
149
  delete options.maxBuffered
150
+ delete options.channelLabels
147
151
 
148
152
  assert.isEqualDeep(this.spyLsl.lastStreamInfoOptions, {
149
153
  ...options,
@@ -158,6 +162,24 @@ export default class LslOutletTest extends AbstractSpruceTest {
158
162
  assert.isInstanceOf(instance, CheckingOutlet)
159
163
  }
160
164
 
165
+ @test('can add one label', [generateId()])
166
+ @test('can add two labels', [generateId(), generateId()])
167
+ protected static async appendsChannelsBasedOnCount(labels: string[]) {
168
+ const type = generateId()
169
+ const unit = generateId()
170
+
171
+ this.Outlet({ channelLabels: labels, type, unit })
172
+
173
+ assert.isEqualDeep(this.spyLsl.lastAppendChannelsToStreamInfo, {
174
+ info: this.spyLsl.streamInfo,
175
+ channels: labels.map((label) => ({
176
+ label,
177
+ type,
178
+ unit,
179
+ })),
180
+ })
181
+ }
182
+
161
183
  private static pushSample(sample: LslSample) {
162
184
  const outlet = this.Outlet()
163
185
  outlet.pushSample(sample)
@@ -175,10 +197,11 @@ export default class LslOutletTest extends AbstractSpruceTest {
175
197
  this.assertDoesThrowInvalidParameters({ sampleRate }, ['sampleRate'])
176
198
  }
177
199
 
178
- private static assertThrowsInvalidChannelCount(count: number) {
179
- this.assertDoesThrowInvalidParameters({ channelCount: count }, [
180
- 'channelCount',
181
- ])
200
+ private static assertThrowsInvalidChannelLabels(count: number) {
201
+ this.assertDoesThrowInvalidParameters(
202
+ { channelLabels: new Array(count).fill(generateId()) },
203
+ ['channelLabels']
204
+ )
182
205
  }
183
206
 
184
207
  private static assertDoesThrowInvalidParameters(
@@ -206,6 +229,10 @@ class SpyLiblsl implements Liblsl {
206
229
  public lastStreamInfoOptions?: CreateStreamInfoOptions
207
230
  public outlet: LslBindingsOutlet = {} as LslBindingsOutlet
208
231
  public streamInfo: LslBindingsStreamInfo = {} as LslBindingsStreamInfo
232
+ public lastAppendChannelsToStreamInfo?: {
233
+ info: LslBindingsStreamInfo
234
+ channels: LslChannel[]
235
+ }
209
236
 
210
237
  public createStreamInfo(
211
238
  options: CreateStreamInfoOptions
@@ -213,6 +240,16 @@ class SpyLiblsl implements Liblsl {
213
240
  this.lastStreamInfoOptions = options
214
241
  return this.streamInfo
215
242
  }
243
+ public appendChannelsToStreamInfo(
244
+ info: LslBindingsStreamInfo,
245
+ channels: LslChannel[]
246
+ ): void {
247
+ this.lastAppendChannelsToStreamInfo = {
248
+ info,
249
+ channels,
250
+ }
251
+ }
252
+
216
253
  public createOutlet(options: CreateOutletOptions): LslBindingsOutlet {
217
254
  this.lastOutletOptions = options
218
255
  return this.outlet
@@ -12,10 +12,12 @@ import LiblslImpl, {
12
12
  LiblslBindings,
13
13
  Liblsl,
14
14
  LslSample,
15
- StreamInfo,
16
15
  CreateOutletOptions,
17
16
  LslBindingsOutlet,
18
17
  LslBindingsStreamInfo,
18
+ LslChannel,
19
+ LslBindingsDesc,
20
+ LslBindingsChild,
19
21
  } from '../../Liblsl'
20
22
 
21
23
  export default class LiblslTest extends AbstractSpruceTest {
@@ -23,13 +25,18 @@ export default class LiblslTest extends AbstractSpruceTest {
23
25
  private static libraryPath?: string
24
26
  private static libraryOptions?: Record<string, any>
25
27
  private static fakeBindings: LiblslBindings
26
- private static fakeStreamInfo: StreamInfo
28
+ private static fakeStreamInfo: LslBindingsStreamInfo
27
29
  private static fakeOutlet: LslBindingsOutlet
30
+ private static fakeDesc: LslBindingsDesc
31
+ private static fakeChildNamedChannels: LslBindingsChild
28
32
  private static createStreamInfoParams?: any[]
33
+ private static appendChildParams?: any[]
29
34
  private static createOutletParams?: any[]
30
35
  private static pushSampleParams?: any[]
36
+ private static appendChildValueParams: any[]
31
37
  private static localClock: number
32
38
  private static shouldThrowWhenCreatingBindings: boolean
39
+ private static getDescriptionParams?: [LslBindingsStreamInfo]
33
40
 
34
41
  protected static async beforeEach(): Promise<void> {
35
42
  await super.beforeEach()
@@ -39,11 +46,17 @@ export default class LiblslTest extends AbstractSpruceTest {
39
46
  delete this.createStreamInfoParams
40
47
  delete this.createOutletParams
41
48
  delete this.pushSampleParams
49
+ delete this.getDescriptionParams
50
+ delete this.appendChildParams
51
+ this.appendChildValueParams = []
42
52
 
43
53
  process.env.LIBLSL_PATH = generateId()
44
54
 
45
55
  this.fakeStreamInfo = {}
56
+ this.fakeDesc = {}
46
57
  this.fakeOutlet = {}
58
+ this.fakeChildNamedChannels = {}
59
+
47
60
  this.localClock = new Date().getTime()
48
61
  this.shouldThrowWhenCreatingBindings = false
49
62
 
@@ -61,6 +74,17 @@ export default class LiblslTest extends AbstractSpruceTest {
61
74
  return 0
62
75
  },
63
76
  lsl_local_clock: () => this.localClock,
77
+ lsl_get_desc: (info: LslBindingsStreamInfo) => {
78
+ this.getDescriptionParams = [info]
79
+ return this.fakeDesc
80
+ },
81
+ lsl_append_child: (...params: any) => {
82
+ this.appendChildParams = params
83
+ return this.fakeChildNamedChannels
84
+ },
85
+ lsl_append_child_value: (...params: any[]) => {
86
+ this.appendChildValueParams.push(params)
87
+ },
64
88
  }
65
89
 
66
90
  LiblslImpl.ffi = {
@@ -128,6 +152,9 @@ export default class LiblslTest extends AbstractSpruceTest {
128
152
  lsl_create_outlet: [outletType, [streamInfo, 'int', 'int']],
129
153
  lsl_local_clock: ['double', []],
130
154
  lsl_push_sample_ft: ['void', [outletType, FloatArray, 'double']],
155
+ lsl_get_desc: [xmlPtr, [streamInfo]],
156
+ lsl_append_child: [xmlPtr, [xmlPtr, 'string']],
157
+ lsl_append_child_value: [xmlPtr, [xmlPtr, 'string', 'string']],
131
158
  }
132
159
  assert.isEqual(
133
160
  JSON.stringify(this.libraryOptions),
@@ -171,9 +198,7 @@ export default class LiblslTest extends AbstractSpruceTest {
171
198
 
172
199
  @test()
173
200
  protected static async canCreateOutletWithRequiredParams() {
174
- const info = this.lsl.createStreamInfo(
175
- this.generateRandomCreateStreamInfoOptions()
176
- )
201
+ const info = this.createRandomStreamInfo()
177
202
  const options = {
178
203
  info,
179
204
  chunkSize: randomInt(10),
@@ -202,6 +227,67 @@ export default class LiblslTest extends AbstractSpruceTest {
202
227
  assert.isEqual(this.pushSampleParams?.[2], this.localClock)
203
228
  }
204
229
 
230
+ @test()
231
+ protected static async appendChannelsThrowsWithMissingParams() {
232
+ //@ts-ignore
233
+ const err = assert.doesThrow(() => this.lsl.appendChannelsToStreamInfo())
234
+ errorAssert.assertError(err, 'MISSING_PARAMETERS', {
235
+ parameters: ['info', 'channels'],
236
+ })
237
+ }
238
+
239
+ @test()
240
+ protected static async addingSingleChannelGetsDescription() {
241
+ const info = this.createRandomStreamInfo()
242
+ const channel: LslChannel = this.generateRandomChannelValues()
243
+ this.lsl.appendChannelsToStreamInfo(info, [channel])
244
+ assert.isEqual(this.getDescriptionParams?.[0], info)
245
+
246
+ assert.isEqual(this.appendChildParams?.[0], this.fakeDesc)
247
+ assert.isEqual(this.appendChildParams?.[1], 'channels')
248
+
249
+ assert.isLength(this.appendChildValueParams, 3)
250
+
251
+ for (let i = 0; i < 3; i++) {
252
+ const param = this.appendChildValueParams[i]
253
+ assert.isEqual(param[0], this.fakeChildNamedChannels)
254
+ }
255
+
256
+ assert.isEqual(this.appendChildValueParams[0][1], 'label')
257
+ assert.isEqual(this.appendChildValueParams[1][1], 'unit')
258
+ assert.isEqual(this.appendChildValueParams[2][1], 'type')
259
+
260
+ assert.isEqual(this.appendChildValueParams[0][2], channel.label)
261
+ assert.isEqual(this.appendChildValueParams[1][2], channel.unit)
262
+ assert.isEqual(this.appendChildValueParams[2][2], channel.type)
263
+ }
264
+
265
+ @test()
266
+ protected static async addingMultpleChannelsAddsChildrenToChannelsChild() {
267
+ const info = this.createRandomStreamInfo()
268
+ const channel1 = this.generateRandomChannelValues()
269
+ const channel2 = this.generateRandomChannelValues()
270
+ this.lsl.appendChannelsToStreamInfo(info, [channel1, channel2])
271
+
272
+ assert.isEqual(this.appendChildValueParams[3][2], channel2.label)
273
+ assert.isEqual(this.appendChildValueParams[4][2], channel2.unit)
274
+ assert.isEqual(this.appendChildValueParams[5][2], channel2.type)
275
+ }
276
+
277
+ private static generateRandomChannelValues(): LslChannel {
278
+ return {
279
+ label: generateId(),
280
+ type: generateId(),
281
+ unit: generateId(),
282
+ }
283
+ }
284
+
285
+ private static createRandomStreamInfo() {
286
+ return this.lsl.createStreamInfo(
287
+ this.generateRandomCreateStreamInfoOptions()
288
+ )
289
+ }
290
+
205
291
  private static generateRandomCreateStreamInfoOptions() {
206
292
  return {
207
293
  name: generateId(),
@@ -215,13 +301,17 @@ export default class LiblslTest extends AbstractSpruceTest {
215
301
  }
216
302
 
217
303
  class FakeLiblsl implements Liblsl {
304
+ public appendChannelsToStreamInfo(
305
+ _info: LslBindingsStreamInfo,
306
+ _channels: LslChannel[]
307
+ ): void {}
218
308
  public createOutlet(_options: CreateOutletOptions): LslBindingsOutlet {
219
309
  return {} as LslBindingsOutlet
220
310
  }
221
311
  public createStreamInfo(
222
312
  _options: CreateStreamInfoOptions
223
313
  ): LslBindingsStreamInfo {
224
- return {} as StreamInfo
314
+ return {} as LslBindingsStreamInfo
225
315
  }
226
316
  public pushSample(_sample: LslSample): void {}
227
317
  }
@@ -229,3 +319,4 @@ class FakeLiblsl implements Liblsl {
229
319
  const streamInfo = ref.refType(ref.types.void)
230
320
  const outletType = ref.refType(ref.types.void)
231
321
  const FloatArray = ArrayType(ref.types.float)
322
+ const xmlPtr = ref.refType(ref.types.void)