@neurodevs/node-lsl 2.0.1 → 3.1.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/README.md CHANGED
@@ -1,2 +1,2 @@
1
1
  # node-lsl
2
- Lab Streaming Layer (LSL) on Node
2
+ Lab Streaming Layer (LSL) on Node + TypeScript
package/build/Liblsl.d.ts CHANGED
@@ -4,22 +4,21 @@ export default class LiblslImpl implements Liblsl {
4
4
  static ffi: typeof ffi;
5
5
  private bindings;
6
6
  static getInstance(): Liblsl;
7
- static reset(): void;
8
7
  static setInstance(instance: Liblsl): void;
8
+ static resetInstance(): void;
9
9
  constructor();
10
- appendChannelsToStreamInfo(info: LslBindingsStreamInfo, channels: LslChannel[]): void;
11
10
  private loadBindings;
12
- pushSample(outlet: LslBindingsOutlet, sample: LslSample): void;
13
- createOutlet(options: CreateOutletOptions): LslBindingsOutlet;
14
- createStreamInfo(options: CreateStreamInfoOptions): LslBindingsStreamInfo;
11
+ createStreamInfo(options: CreateStreamInfoOptions): BoundStreamInfo;
12
+ appendChannelsToStreamInfo(options: AppendChannelsToStreamInfoOptions): void;
13
+ createOutlet(options: CreateOutletOptions): BoundOutlet;
14
+ pushSample(options: PushSampleOptions): void;
15
15
  }
16
16
  export interface Liblsl {
17
- appendChannelsToStreamInfo(info: LslBindingsStreamInfo, channels: LslChannel[]): void;
18
- createStreamInfo(options: CreateStreamInfoOptions): LslBindingsStreamInfo;
19
- createOutlet(options: CreateOutletOptions): LslBindingsOutlet;
20
- pushSample(outlet: LslBindingsOutlet, sample: LslSample): void;
17
+ createStreamInfo(options: CreateStreamInfoOptions): BoundStreamInfo;
18
+ appendChannelsToStreamInfo(options: AppendChannelsToStreamInfoOptions): void;
19
+ createOutlet(options: CreateOutletOptions): BoundOutlet;
20
+ pushSample(options: PushSampleOptions): void;
21
21
  }
22
- export type LslSample = (number | string | undefined)[];
23
22
  export interface CreateStreamInfoOptions {
24
23
  name: string;
25
24
  type: string;
@@ -30,30 +29,39 @@ export interface CreateStreamInfoOptions {
30
29
  manufacturer?: string;
31
30
  unit?: string;
32
31
  }
32
+ export interface AppendChannelsToStreamInfoOptions {
33
+ info: BoundStreamInfo;
34
+ channels: LslChannel[];
35
+ }
36
+ export interface CreateOutletOptions {
37
+ info: BoundStreamInfo;
38
+ chunkSize: number;
39
+ maxBuffered: number;
40
+ }
41
+ export interface PushSampleOptions {
42
+ outlet: BoundOutlet;
43
+ sample: LslSample;
44
+ }
33
45
  export interface LslChannel {
34
46
  label: string;
35
47
  unit: string;
36
48
  type: string;
37
49
  }
50
+ export type LslSample = (number | string | undefined)[];
38
51
  export interface LiblslBindings {
39
- lsl_create_streaminfo(name: string, type: string, channelCount: number, sampleRate: number, channelFormat: number, sourceId: string): LslBindingsStreamInfo;
40
- lsl_create_outlet(info: LslBindingsStreamInfo, chunkSize: number, maxBuffered: number): LslBindingsOutlet;
41
- lsl_push_sample_ft(outlet: LslBindingsOutlet, sample: LslSample, timestamp: number): void;
52
+ lsl_create_streaminfo(name: string, type: string, channelCount: number, sampleRate: number, channelFormat: number, sourceId: string): BoundStreamInfo;
53
+ lsl_create_outlet(info: BoundStreamInfo, chunkSize: number, maxBuffered: number): BoundOutlet;
54
+ lsl_push_sample_ft(outlet: BoundOutlet, sample: LslSample, timestamp: number): void;
42
55
  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;
46
- }
47
- export interface CreateOutletOptions {
48
- info: LslBindingsStreamInfo;
49
- chunkSize: number;
50
- maxBuffered: number;
56
+ lsl_get_desc(info: BoundStreamInfo): BoundDesc;
57
+ lsl_append_child(desc: BoundDesc, name: string): BoundChild;
58
+ lsl_append_child_value(child: BoundChild, name: string, value: string): void;
51
59
  }
52
- export interface LslBindingsStreamInfo {
60
+ export interface BoundStreamInfo {
53
61
  }
54
- export interface LslBindingsOutlet {
62
+ export interface BoundOutlet {
55
63
  }
56
- export interface LslBindingsDesc {
64
+ export interface BoundDesc {
57
65
  }
58
- export interface LslBindingsChild {
66
+ export interface BoundChild {
59
67
  }
package/build/Liblsl.js CHANGED
@@ -11,16 +11,16 @@ const SpruceError_1 = __importDefault(require("./errors/SpruceError"));
11
11
  class LiblslImpl {
12
12
  static getInstance() {
13
13
  if (!this.instance) {
14
- this.instance = new this();
14
+ this.setInstance(new this());
15
15
  }
16
16
  return this.instance;
17
17
  }
18
- static reset() {
19
- delete this.instance;
20
- }
21
18
  static setInstance(instance) {
22
19
  this.instance = instance;
23
20
  }
21
+ static resetInstance() {
22
+ delete this.instance;
23
+ }
24
24
  constructor() {
25
25
  const path = process.env.LIBLSL_PATH;
26
26
  if (!path) {
@@ -29,25 +29,13 @@ class LiblslImpl {
29
29
  try {
30
30
  this.bindings = this.loadBindings(path);
31
31
  }
32
- catch (err) {
33
- console.error(err);
32
+ catch (_a) {
34
33
  throw new SpruceError_1.default({
35
34
  code: 'FAILED_TO_LOAD_LIBLSL',
36
35
  liblslPath: path,
37
36
  });
38
37
  }
39
38
  }
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
- const c = this.bindings.lsl_append_child(parent, 'channel');
46
- this.bindings.lsl_append_child_value(c, 'label', channel.label);
47
- this.bindings.lsl_append_child_value(c, 'unit', channel.unit);
48
- this.bindings.lsl_append_child_value(c, 'type', channel.type);
49
- }
50
- }
51
39
  loadBindings(path) {
52
40
  return LiblslImpl.ffi.Library(path, {
53
41
  lsl_create_streaminfo: [
@@ -62,19 +50,6 @@ class LiblslImpl {
62
50
  lsl_append_child_value: [xmlPtr, [xmlPtr, 'string', 'string']],
63
51
  });
64
52
  }
65
- pushSample(outlet, sample) {
66
- (0, schema_1.assertOptions)({ outlet, sample }, ['outlet', 'sample']);
67
- const clock = this.bindings.lsl_local_clock();
68
- this.bindings.lsl_push_sample_ft(outlet, sample, clock);
69
- }
70
- createOutlet(options) {
71
- const { info, chunkSize, maxBuffered } = (0, schema_1.assertOptions)(options, [
72
- 'info',
73
- 'chunkSize',
74
- 'maxBuffered',
75
- ]);
76
- return this.bindings.lsl_create_outlet(info, chunkSize, maxBuffered);
77
- }
78
53
  createStreamInfo(options) {
79
54
  const { name, type, channelCount, sampleRate, channelFormat, sourceId } = (0, schema_1.assertOptions)(options, [
80
55
  'name',
@@ -86,6 +61,30 @@ class LiblslImpl {
86
61
  ]);
87
62
  return this.bindings.lsl_create_streaminfo(name, type, channelCount, sampleRate, channelFormat, sourceId);
88
63
  }
64
+ appendChannelsToStreamInfo(options) {
65
+ const { info, channels } = (0, schema_1.assertOptions)(options, ['info', 'channels']);
66
+ const desc = this.bindings.lsl_get_desc(info);
67
+ const parent = this.bindings.lsl_append_child(desc, 'channels');
68
+ for (const channel of channels) {
69
+ const child = this.bindings.lsl_append_child(parent, 'channel');
70
+ this.bindings.lsl_append_child_value(child, 'label', channel.label);
71
+ this.bindings.lsl_append_child_value(child, 'unit', channel.unit);
72
+ this.bindings.lsl_append_child_value(child, 'type', channel.type);
73
+ }
74
+ }
75
+ createOutlet(options) {
76
+ const { info, chunkSize, maxBuffered } = (0, schema_1.assertOptions)(options, [
77
+ 'info',
78
+ 'chunkSize',
79
+ 'maxBuffered',
80
+ ]);
81
+ return this.bindings.lsl_create_outlet(info, chunkSize, maxBuffered);
82
+ }
83
+ pushSample(options) {
84
+ const { outlet, sample } = (0, schema_1.assertOptions)(options, ['outlet', 'sample']);
85
+ const clock = this.bindings.lsl_local_clock();
86
+ this.bindings.lsl_push_sample_ft(outlet, sample, clock);
87
+ }
89
88
  }
90
89
  LiblslImpl.ffi = ffi_napi_1.default;
91
90
  exports.default = LiblslImpl;
@@ -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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"}
@@ -3,8 +3,11 @@ export default class LslOutletImpl implements LslOutlet {
3
3
  private outletOptions;
4
4
  static Class?: new (options: LslOutletOptions) => LslOutlet;
5
5
  private streamInfo;
6
+ private outlet;
6
7
  protected constructor(options: LslOutletOptions);
7
8
  static Outlet(options: LslOutletOptions): LslOutlet;
9
+ pushSample(sample: LslSample): void;
10
+ private lookupChannelFormat;
8
11
  private assertValidMaxBufferred;
9
12
  private assertValidChunkSize;
10
13
  private assertValidChannelFormat;
@@ -14,14 +17,16 @@ export default class LslOutletImpl implements LslOutlet {
14
17
  private isPositiveIntegerOrZero;
15
18
  private isPositiveInteger;
16
19
  private get lsl();
17
- pushSample(sample: LslSample): void;
18
20
  }
19
21
  declare const CHANNEL_FORMATS: readonly ["undefined", "float32", "double64", "string", "int32", "int16", "int8", "int64"];
20
22
  export type ChannelFormat = (typeof CHANNEL_FORMATS)[number];
23
+ export interface LslOutlet {
24
+ pushSample(sample: LslSample): void;
25
+ }
21
26
  export interface LslOutletOptions {
22
27
  name: string;
23
28
  type: string;
24
- channelLabels: string[];
29
+ channelNames: string[];
25
30
  sampleRate: number;
26
31
  channelFormat: ChannelFormat;
27
32
  sourceId: string;
@@ -30,7 +35,4 @@ export interface LslOutletOptions {
30
35
  chunkSize: number;
31
36
  maxBuffered: number;
32
37
  }
33
- export interface LslOutlet {
34
- pushSample(sample: LslSample): void;
35
- }
36
38
  export {};
@@ -21,7 +21,7 @@ class LslOutletImpl {
21
21
  const { sampleRate, channelFormat } = (0, schema_1.assertOptions)(options, [
22
22
  'name',
23
23
  'type',
24
- 'channelLabels',
24
+ 'channelNames',
25
25
  'sampleRate',
26
26
  'channelFormat',
27
27
  'sourceId',
@@ -32,25 +32,40 @@ class LslOutletImpl {
32
32
  ]);
33
33
  this.outletOptions = options;
34
34
  const _a = this
35
- .outletOptions, { chunkSize, maxBuffered, channelLabels } = _a, streamInfoOptions = __rest(_a, ["chunkSize", "maxBuffered", "channelLabels"]);
36
- this.assertValidChannelCount(channelLabels.length);
35
+ .outletOptions, { chunkSize, maxBuffered, channelNames } = _a, streamInfoOptions = __rest(_a, ["chunkSize", "maxBuffered", "channelNames"]);
36
+ const channelCount = channelNames.length;
37
+ this.assertValidChannelCount(channelCount);
37
38
  this.assertValidSampleRate(sampleRate);
38
39
  this.assertValidChannelFormat(channelFormat);
39
40
  this.assertValidChunkSize(chunkSize);
40
41
  this.assertValidMaxBufferred(maxBuffered);
41
42
  delete streamInfoOptions.manufacturer;
42
43
  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
- })));
44
+ this.streamInfo = this.lsl.createStreamInfo(Object.assign(Object.assign({}, streamInfoOptions), { channelCount, channelFormat: this.lookupChannelFormat(channelFormat) }));
45
+ this.lsl.appendChannelsToStreamInfo({
46
+ info: this.streamInfo,
47
+ channels: channelNames.map((label) => ({
48
+ label,
49
+ unit: this.outletOptions.unit,
50
+ type: this.outletOptions.type,
51
+ })),
52
+ });
53
+ this.outlet = this.lsl.createOutlet({
54
+ info: this.streamInfo,
55
+ chunkSize: this.outletOptions.chunkSize,
56
+ maxBuffered: this.outletOptions.maxBuffered,
57
+ });
49
58
  }
50
59
  static Outlet(options) {
51
60
  var _a;
52
61
  return new ((_a = this.Class) !== null && _a !== void 0 ? _a : this)(options);
53
62
  }
63
+ pushSample(sample) {
64
+ this.lsl.pushSample({ outlet: this.outlet, sample });
65
+ }
66
+ lookupChannelFormat(channelFormat) {
67
+ return CHANNEL_FORMATS.indexOf(channelFormat);
68
+ }
54
69
  assertValidMaxBufferred(maxBuffered) {
55
70
  if (!this.isPositiveIntegerOrZero(maxBuffered)) {
56
71
  throw new schema_1.SchemaError({
@@ -92,8 +107,8 @@ class LslOutletImpl {
92
107
  if (!this.isPositiveInteger(channelCount)) {
93
108
  throw new schema_1.SchemaError({
94
109
  code: 'INVALID_PARAMETERS',
95
- parameters: ['channelLabels'],
96
- friendlyMessage: 'channelLabels must have 1 or more labels.',
110
+ parameters: ['channelNames'],
111
+ friendlyMessage: 'channelNames must have 1 or more labels.',
97
112
  });
98
113
  }
99
114
  }
@@ -109,13 +124,6 @@ class LslOutletImpl {
109
124
  get lsl() {
110
125
  return Liblsl_1.default.getInstance();
111
126
  }
112
- pushSample(sample) {
113
- this.lsl.pushSample(this.lsl.createOutlet({
114
- info: this.streamInfo,
115
- chunkSize: this.outletOptions.chunkSize,
116
- maxBuffered: this.outletOptions.maxBuffered,
117
- }), sample);
118
- }
119
127
  }
120
128
  exports.default = LslOutletImpl;
121
129
  const CHANNEL_FORMATS = [
@@ -1 +1 @@
1
- {"version":3,"file":"LslOutlet.js","sourceRoot":"","sources":["../src/LslOutlet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LslOutlet.js","sourceRoot":"","sources":["../src/LslOutlet.ts"],"names":[],"mappings":"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"}
@@ -2,27 +2,27 @@ import AbstractSpruceTest from '@sprucelabs/test-utils';
2
2
  import { LslSample } from '../../Liblsl';
3
3
  export declare const CHANNEL_FORMATS: readonly ["undefined", "float32", "double64", "string", "int32", "int16", "int8", "int64"];
4
4
  export default class LslOutletTest extends AbstractSpruceTest {
5
- private static spyLsl;
5
+ private static spyLiblsl;
6
6
  private static randomOutletOptions;
7
7
  private static channelIdx;
8
8
  protected static beforeEach(): Promise<void>;
9
- protected static throwsWhenMissingRequiredParameters(): Promise<void>;
10
- protected static canCreateWithRequiredParams(): Promise<void>;
11
- protected static throwsWithInvalidChannelCount(): Promise<void>;
9
+ protected static throwsWhenMissingRequiredParams(): Promise<void>;
10
+ protected static throwsWithInvalidChannelNames(): Promise<void>;
12
11
  protected static throwsWithInvalidSampleRate(): Promise<void>;
13
12
  protected static throwsWithInvalidChannelFormat(): Promise<void>;
14
- protected static supportsAllKnownChannelFormats(): Promise<void>;
15
- protected static throwWithInvalidChunkSize(): Promise<void>;
13
+ protected static throwsWithInvalidChunkSize(): Promise<void>;
16
14
  protected static throwsWithInvalidMaxBuffered(): Promise<void>;
17
- protected static pushingSampleSendsToLsl(sample: LslSample): Promise<void>;
18
- protected static constructionPassesCorrectOptionsToCreateStreamInfo(): Promise<void>;
19
- protected static canOverrideClasInstantiatedInFactory(): Promise<void>;
15
+ protected static supportsAllKnownChannelFormats(): Promise<void>;
16
+ protected static canPushSampleToLsl(sample: LslSample): Promise<void>;
17
+ protected static constructionCreatesStreamInfo(): Promise<void>;
18
+ protected static canOverrideClassInstantiatedInFactory(): Promise<void>;
20
19
  protected static appendsChannelsBasedOnCount(labels: string[]): Promise<void>;
20
+ protected static pushSampleShouldNotCreateMultipleOutlets(): Promise<void>;
21
21
  private static pushSample;
22
22
  private static assertThrowsInvalidMaxBuffered;
23
23
  private static assertThrowsInvalidChunkSize;
24
24
  private static assertThrowsInvalidSampleRate;
25
- private static assertThrowsInvalidChannelLabels;
25
+ private static assertThrowsInvalidChannelNames;
26
26
  private static assertDoesThrowInvalidParameters;
27
27
  private static Outlet;
28
28
  }
@@ -66,7 +66,7 @@ class LslOutletTest extends test_utils_1.default {
66
66
  this.randomOutletOptions = {
67
67
  name: (0, test_utils_1.generateId)(),
68
68
  type: (0, test_utils_1.generateId)(),
69
- channelLabels: new Array((0, crypto_1.randomInt)(1, 10)).fill((0, test_utils_1.generateId)()),
69
+ channelNames: new Array((0, crypto_1.randomInt)(1, 10)).fill((0, test_utils_1.generateId)()),
70
70
  sampleRate: Math.random() * 10,
71
71
  channelFormat: exports.CHANNEL_FORMATS[this.channelIdx],
72
72
  sourceId: (0, test_utils_1.generateId)(),
@@ -75,17 +75,17 @@ class LslOutletTest extends test_utils_1.default {
75
75
  chunkSize: (0, crypto_1.randomInt)(0, 10),
76
76
  maxBuffered: (0, crypto_1.randomInt)(0, 10),
77
77
  };
78
- this.spyLsl = new SpyLiblsl();
79
- Liblsl_1.default.setInstance(this.spyLsl);
78
+ this.spyLiblsl = new SpyLiblsl();
79
+ Liblsl_1.default.setInstance(this.spyLiblsl);
80
80
  }
81
- static async throwsWhenMissingRequiredParameters() {
81
+ static async throwsWhenMissingRequiredParams() {
82
82
  //@ts-ignore
83
83
  const err = test_utils_1.assert.doesThrow(() => new LslOutlet_1.default());
84
84
  test_utils_1.errorAssert.assertError(err, 'MISSING_PARAMETERS', {
85
85
  parameters: [
86
86
  'name',
87
87
  'type',
88
- 'channelLabels',
88
+ 'channelNames',
89
89
  'sampleRate',
90
90
  'channelFormat',
91
91
  'sourceId',
@@ -96,11 +96,8 @@ class LslOutletTest extends test_utils_1.default {
96
96
  ],
97
97
  });
98
98
  }
99
- static async canCreateWithRequiredParams() {
100
- this.Outlet();
101
- }
102
- static async throwsWithInvalidChannelCount() {
103
- this.assertThrowsInvalidChannelLabels(0);
99
+ static async throwsWithInvalidChannelNames() {
100
+ this.assertThrowsInvalidChannelNames(0);
104
101
  }
105
102
  static async throwsWithInvalidSampleRate() {
106
103
  this.assertThrowsInvalidSampleRate(0);
@@ -113,13 +110,7 @@ class LslOutletTest extends test_utils_1.default {
113
110
  'channelFormat',
114
111
  ]);
115
112
  }
116
- static async supportsAllKnownChannelFormats() {
117
- const valid = exports.CHANNEL_FORMATS;
118
- for (const format of valid) {
119
- this.Outlet({ channelFormat: format });
120
- }
121
- }
122
- static async throwWithInvalidChunkSize() {
113
+ static async throwsWithInvalidChunkSize() {
123
114
  this.Outlet({ chunkSize: 0 });
124
115
  this.assertThrowsInvalidChunkSize(-1);
125
116
  this.assertThrowsInvalidChunkSize(-1.5);
@@ -131,28 +122,35 @@ class LslOutletTest extends test_utils_1.default {
131
122
  this.assertThrowsInvalidMaxBuffered(-1.5);
132
123
  this.assertThrowsInvalidMaxBuffered(1.5);
133
124
  }
134
- static async pushingSampleSendsToLsl(sample) {
125
+ static async supportsAllKnownChannelFormats() {
126
+ const valid = exports.CHANNEL_FORMATS;
127
+ for (const format of valid) {
128
+ this.Outlet({ channelFormat: format });
129
+ }
130
+ }
131
+ static async canPushSampleToLsl(sample) {
132
+ var _a, _b;
135
133
  this.pushSample(sample);
136
- test_utils_1.assert.isEqual(this.spyLsl.lastPushedOutlet, this.spyLsl.outlet);
137
- test_utils_1.assert.isEqualDeep(this.spyLsl.lastPushedSample, sample);
138
- test_utils_1.assert.isEqualDeep(this.spyLsl.lastOutletOptions, {
139
- info: this.spyLsl.streamInfo,
134
+ test_utils_1.assert.isEqual((_a = this.spyLiblsl.lastPushSampleOptions) === null || _a === void 0 ? void 0 : _a.outlet, this.spyLiblsl.outlet);
135
+ test_utils_1.assert.isEqualDeep((_b = this.spyLiblsl.lastPushSampleOptions) === null || _b === void 0 ? void 0 : _b.sample, sample);
136
+ test_utils_1.assert.isEqualDeep(this.spyLiblsl.lastCreateOutletOptions, {
137
+ info: this.spyLiblsl.streamInfo,
140
138
  chunkSize: this.randomOutletOptions.chunkSize,
141
139
  maxBuffered: this.randomOutletOptions.maxBuffered,
142
140
  });
143
141
  }
144
- static async constructionPassesCorrectOptionsToCreateStreamInfo() {
142
+ static async constructionCreatesStreamInfo() {
145
143
  this.Outlet();
146
144
  const options = __rest(this.randomOutletOptions, []);
147
- options.channelCount = options.channelLabels.length;
145
+ options.channelCount = options.channelNames.length;
148
146
  delete options.manufacturer;
149
147
  delete options.unit;
150
148
  delete options.chunkSize;
151
149
  delete options.maxBuffered;
152
- delete options.channelLabels;
153
- test_utils_1.assert.isEqualDeep(this.spyLsl.lastStreamInfoOptions, Object.assign(Object.assign({}, options), { channelFormat: this.channelIdx }));
150
+ delete options.channelNames;
151
+ test_utils_1.assert.isEqualDeep(this.spyLiblsl.lastCreateStreamInfoOptions, Object.assign(Object.assign({}, options), { channelFormat: this.channelIdx }));
154
152
  }
155
- static async canOverrideClasInstantiatedInFactory() {
153
+ static async canOverrideClassInstantiatedInFactory() {
156
154
  LslOutlet_1.default.Class = CheckingOutlet;
157
155
  const instance = this.Outlet();
158
156
  test_utils_1.assert.isInstanceOf(instance, CheckingOutlet);
@@ -160,9 +158,9 @@ class LslOutletTest extends test_utils_1.default {
160
158
  static async appendsChannelsBasedOnCount(labels) {
161
159
  const type = (0, test_utils_1.generateId)();
162
160
  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,
161
+ this.Outlet({ channelNames: labels, type, unit });
162
+ test_utils_1.assert.isEqualDeep(this.spyLiblsl.lastAppendChannelsToStreamInfoOptions, {
163
+ info: this.spyLiblsl.streamInfo,
166
164
  channels: labels.map((label) => ({
167
165
  label,
168
166
  type,
@@ -170,6 +168,13 @@ class LslOutletTest extends test_utils_1.default {
170
168
  })),
171
169
  });
172
170
  }
171
+ static async pushSampleShouldNotCreateMultipleOutlets() {
172
+ const outlet = this.Outlet();
173
+ outlet.pushSample([1]);
174
+ outlet.pushSample([2]);
175
+ outlet.pushSample([3]);
176
+ test_utils_1.assert.isEqual(this.spyLiblsl.createStreamInfoHitCount, 1);
177
+ }
173
178
  static pushSample(sample) {
174
179
  const outlet = this.Outlet();
175
180
  outlet.pushSample(sample);
@@ -183,8 +188,8 @@ class LslOutletTest extends test_utils_1.default {
183
188
  static assertThrowsInvalidSampleRate(sampleRate) {
184
189
  this.assertDoesThrowInvalidParameters({ sampleRate }, ['sampleRate']);
185
190
  }
186
- static assertThrowsInvalidChannelLabels(count) {
187
- this.assertDoesThrowInvalidParameters({ channelLabels: new Array(count).fill((0, test_utils_1.generateId)()) }, ['channelLabels']);
191
+ static assertThrowsInvalidChannelNames(count) {
192
+ this.assertDoesThrowInvalidParameters({ channelNames: new Array(count).fill((0, test_utils_1.generateId)()) }, ['channelNames']);
188
193
  }
189
194
  static assertDoesThrowInvalidParameters(options, parameters) {
190
195
  const err = test_utils_1.assert.doesThrow(() => this.Outlet(options));
@@ -199,13 +204,10 @@ class LslOutletTest extends test_utils_1.default {
199
204
  exports.default = LslOutletTest;
200
205
  __decorate([
201
206
  (0, test_utils_1.test)()
202
- ], LslOutletTest, "throwsWhenMissingRequiredParameters", null);
207
+ ], LslOutletTest, "throwsWhenMissingRequiredParams", null);
203
208
  __decorate([
204
209
  (0, test_utils_1.test)()
205
- ], LslOutletTest, "canCreateWithRequiredParams", null);
206
- __decorate([
207
- (0, test_utils_1.test)()
208
- ], LslOutletTest, "throwsWithInvalidChannelCount", null);
210
+ ], LslOutletTest, "throwsWithInvalidChannelNames", null);
209
211
  __decorate([
210
212
  (0, test_utils_1.test)()
211
213
  ], LslOutletTest, "throwsWithInvalidSampleRate", null);
@@ -214,49 +216,50 @@ __decorate([
214
216
  ], LslOutletTest, "throwsWithInvalidChannelFormat", null);
215
217
  __decorate([
216
218
  (0, test_utils_1.test)()
217
- ], LslOutletTest, "supportsAllKnownChannelFormats", null);
219
+ ], LslOutletTest, "throwsWithInvalidChunkSize", null);
218
220
  __decorate([
219
221
  (0, test_utils_1.test)()
220
- ], LslOutletTest, "throwWithInvalidChunkSize", null);
222
+ ], LslOutletTest, "throwsWithInvalidMaxBuffered", null);
221
223
  __decorate([
222
224
  (0, test_utils_1.test)()
223
- ], LslOutletTest, "throwsWithInvalidMaxBuffered", null);
225
+ ], LslOutletTest, "supportsAllKnownChannelFormats", null);
224
226
  __decorate([
225
- (0, test_utils_1.test)('pushing sample sends to lsl 1', [1]),
226
- (0, test_utils_1.test)('pushing sample sends to lsl 2', [1, 2])
227
- ], LslOutletTest, "pushingSampleSendsToLsl", null);
227
+ (0, test_utils_1.test)('pushing [1, 2] sample sends to LSL', [1, 2]),
228
+ (0, test_utils_1.test)('pushing [1] sample sends to LSL', [1])
229
+ ], LslOutletTest, "canPushSampleToLsl", null);
228
230
  __decorate([
229
231
  (0, test_utils_1.test)()
230
- ], LslOutletTest, "constructionPassesCorrectOptionsToCreateStreamInfo", null);
232
+ ], LslOutletTest, "constructionCreatesStreamInfo", null);
231
233
  __decorate([
232
234
  (0, test_utils_1.test)()
233
- ], LslOutletTest, "canOverrideClasInstantiatedInFactory", null);
235
+ ], LslOutletTest, "canOverrideClassInstantiatedInFactory", null);
234
236
  __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
+ (0, test_utils_1.test)('can add one label to channels', [(0, test_utils_1.generateId)()]),
238
+ (0, test_utils_1.test)('can add two labels to channels', [(0, test_utils_1.generateId)(), (0, test_utils_1.generateId)()])
237
239
  ], LslOutletTest, "appendsChannelsBasedOnCount", null);
240
+ __decorate([
241
+ (0, test_utils_1.test)()
242
+ ], LslOutletTest, "pushSampleShouldNotCreateMultipleOutlets", null);
238
243
  class SpyLiblsl {
239
244
  constructor() {
240
245
  this.outlet = {};
241
246
  this.streamInfo = {};
247
+ this.createStreamInfoHitCount = 0;
242
248
  }
243
249
  createStreamInfo(options) {
244
- this.lastStreamInfoOptions = options;
250
+ this.createStreamInfoHitCount++;
251
+ this.lastCreateStreamInfoOptions = options;
245
252
  return this.streamInfo;
246
253
  }
247
- appendChannelsToStreamInfo(info, channels) {
248
- this.lastAppendChannelsToStreamInfo = {
249
- info,
250
- channels,
251
- };
254
+ appendChannelsToStreamInfo(options) {
255
+ this.lastAppendChannelsToStreamInfoOptions = options;
252
256
  }
253
257
  createOutlet(options) {
254
- this.lastOutletOptions = options;
258
+ this.lastCreateOutletOptions = options;
255
259
  return this.outlet;
256
260
  }
257
- pushSample(outlet, sample) {
258
- this.lastPushedOutlet = outlet;
259
- this.lastPushedSample = sample;
261
+ pushSample(options) {
262
+ this.lastPushSampleOptions = options;
260
263
  }
261
264
  }
262
265
  class CheckingOutlet extends LslOutlet_1.default {