@neurodevs/node-lsl 23.2.0 → 23.2.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.
@@ -11,6 +11,13 @@ export default class UsbDeviceControllerTest extends AbstractPackageTest {
11
11
  protected static connectCallsLibndxStartUsbBackend(): Promise<void>;
12
12
  protected static disconnectCallsLibndxStopUsbBackend(): Promise<void>;
13
13
  protected static writeUsbCallsLibndxWriteUsbBackend(): Promise<void>;
14
+ protected static connectThrowsWhenUsbBackendCannotBeCreated(): Promise<void>;
15
+ protected static doesNotStartUsbBackendThatCouldNotBeCreated(): Promise<void>;
16
+ protected static connectThrowsWhenUsbBackendCannotBeStarted(): Promise<void>;
17
+ protected static writeUsbThrowsOnError(): Promise<void>;
18
+ protected static disconnectThrowsOnError(): Promise<void>;
19
+ private static readonly fakeError;
20
+ private static setFakeErrorResult;
14
21
  private static connect;
15
22
  private static disconnect;
16
23
  private static UsbDeviceController;
@@ -50,6 +50,34 @@ export default class UsbDeviceControllerTest extends AbstractPackageTest {
50
50
  value: this.valueToWrite,
51
51
  }, 'Did not call write_usb_backend!');
52
52
  }
53
+ static async connectThrowsWhenUsbBackendCannotBeCreated() {
54
+ this.setFakeErrorResult();
55
+ await assert.doesThrowAsync(async () => await this.connect(), `400 error: ${this.fakeError}`, 'Did not throw when USB backend could not be created!');
56
+ }
57
+ static async doesNotStartUsbBackendThatCouldNotBeCreated() {
58
+ this.setFakeErrorResult();
59
+ await assert.doesThrowAsync(async () => await this.connect());
60
+ assert.isLength(FakeLibndx.callsToStartUsbBackend, 0, 'Started a USB backend that could not be created!');
61
+ }
62
+ static async connectThrowsWhenUsbBackendCannotBeStarted() {
63
+ this.setFakeErrorResult();
64
+ //@ts-ignore
65
+ this.instance.createUsbBackend = () => { };
66
+ await assert.doesThrowAsync(async () => await this.connect(), `400 error: ${this.fakeError}`, 'Did not throw when USB backend could not be started!');
67
+ }
68
+ static async writeUsbThrowsOnError() {
69
+ this.setFakeErrorResult();
70
+ await assert.doesThrowAsync(async () => await this.instance.writeUsb(this.valueToWrite), `400 error: ${this.fakeError}`, 'Did not throw when writing failed!');
71
+ }
72
+ static async disconnectThrowsOnError() {
73
+ await this.connect();
74
+ this.setFakeErrorResult();
75
+ await assert.doesThrowAsync(async () => await this.disconnect(), `400 error: ${this.fakeError}`, 'Did not throw when stopping failed!');
76
+ }
77
+ static fakeError = this.generateId();
78
+ static setFakeErrorResult() {
79
+ FakeLibndx.fakeResult = { status: 400, error: this.fakeError };
80
+ }
53
81
  static async connect() {
54
82
  await this.instance.connect();
55
83
  }
@@ -78,4 +106,19 @@ __decorate([
78
106
  __decorate([
79
107
  test()
80
108
  ], UsbDeviceControllerTest, "writeUsbCallsLibndxWriteUsbBackend", null);
109
+ __decorate([
110
+ test()
111
+ ], UsbDeviceControllerTest, "connectThrowsWhenUsbBackendCannotBeCreated", null);
112
+ __decorate([
113
+ test()
114
+ ], UsbDeviceControllerTest, "doesNotStartUsbBackendThatCouldNotBeCreated", null);
115
+ __decorate([
116
+ test()
117
+ ], UsbDeviceControllerTest, "connectThrowsWhenUsbBackendCannotBeStarted", null);
118
+ __decorate([
119
+ test()
120
+ ], UsbDeviceControllerTest, "writeUsbThrowsOnError", null);
121
+ __decorate([
122
+ test()
123
+ ], UsbDeviceControllerTest, "disconnectThrowsOnError", null);
81
124
  //# sourceMappingURL=UsbDeviceController.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UsbDeviceController.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/UsbDeviceController.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UsbDeviceController.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/UsbDeviceController.test.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,9 @@ export default class UsbDeviceController implements UsbDevice {
6
6
  protected constructor(options: UsbDeviceOptions);
7
7
  static Create(options: UsbDeviceOptions): UsbDevice;
8
8
  connect(): Promise<void>;
9
+ private createUsbBackend;
10
+ private throwIfError;
11
+ private startUsbBackend;
9
12
  private get usbDeviceOptions();
10
13
  private get startUsbDeviceOptions();
11
14
  writeUsb(value: string): Promise<void>;
@@ -13,8 +13,21 @@ export default class UsbDeviceController {
13
13
  return new (this.Class ?? this)(options);
14
14
  }
15
15
  async connect() {
16
- this.ndx.createUsbBackend(this.usbDeviceOptions);
17
- this.ndx.startUsbBackend(this.startUsbDeviceOptions);
16
+ this.createUsbBackend();
17
+ this.startUsbBackend();
18
+ }
19
+ createUsbBackend() {
20
+ const { status, error } = this.ndx.createUsbBackend(this.usbDeviceOptions);
21
+ this.throwIfError(status, error);
22
+ }
23
+ throwIfError(status, error) {
24
+ if (status !== 200) {
25
+ throw new Error(`${status} error: ${error ?? 'Unknown error'}`);
26
+ }
27
+ }
28
+ startUsbBackend() {
29
+ const { status, error } = this.ndx.startUsbBackend(this.startUsbDeviceOptions);
30
+ this.throwIfError(status, error);
18
31
  }
19
32
  get usbDeviceOptions() {
20
33
  return {
@@ -28,13 +41,15 @@ export default class UsbDeviceController {
28
41
  };
29
42
  }
30
43
  async writeUsb(value) {
31
- this.ndx.writeUsbBackend({
44
+ const { status, error } = this.ndx.writeUsbBackend({
32
45
  ...this.usbDeviceOptions,
33
46
  value,
34
47
  });
48
+ this.throwIfError(status, error);
35
49
  }
36
50
  async disconnect() {
37
- this.ndx.stopUsbBackend(this.usbDeviceOptions);
51
+ const { status, error } = this.ndx.stopUsbBackend(this.usbDeviceOptions);
52
+ this.throwIfError(status, error);
38
53
  }
39
54
  }
40
55
  //# sourceMappingURL=UsbDeviceController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UsbDeviceController.js","sourceRoot":"","sources":["../../../src/impl/controllers/UsbDeviceController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,MAAM,CAAC,OAAO,OAAO,mBAAmB;IAC7B,MAAM,CAAC,KAAK,CAAuB;IAElC,MAAM,CAA8D;IACpE,YAAY,CAAQ;IAEpB,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAA;IAEzC,YAAsB,OAAyB;QAC3C,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QAE9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,EAAE,CAAA;IAC1C,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,OAAyB;QAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAChD,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;IACxD,CAAC;IAED,IAAY,gBAAgB;QACxB,OAAO;YACH,YAAY,EAAE,IAAI,CAAC,YAAY;SAClC,CAAA;IACL,CAAC;IAED,IAAY,qBAAqB;QAC7B,OAAO;YACH,GAAG,IAAI,CAAC,gBAAgB;YACxB,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAA;IACL,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,KAAa;QAC/B,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;YACrB,GAAG,IAAI,CAAC,gBAAgB;YACxB,KAAK;SACR,CAAC,CAAA;IACN,CAAC;IAEM,KAAK,CAAC,UAAU;QACnB,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAClD,CAAC;CACJ"}
1
+ {"version":3,"file":"UsbDeviceController.js","sourceRoot":"","sources":["../../../src/impl/controllers/UsbDeviceController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,MAAM,CAAC,OAAO,OAAO,mBAAmB;IAC7B,MAAM,CAAC,KAAK,CAAuB;IAElC,MAAM,CAA8D;IACpE,YAAY,CAAQ;IAEpB,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAA;IAEzC,YAAsB,OAAyB;QAC3C,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;QAE9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,EAAE,CAAA;IAC1C,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,OAAyB;QAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACvB,IAAI,CAAC,eAAe,EAAE,CAAA;IAC1B,CAAC;IAEO,gBAAgB;QACpB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAC/C,IAAI,CAAC,gBAAgB,CACxB,CAAA;QAED,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACpC,CAAC;IAEO,YAAY,CAAC,MAAc,EAAE,KAAyB;QAC1D,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,WAAW,KAAK,IAAI,eAAe,EAAE,CAAC,CAAA;QACnE,CAAC;IACL,CAAC;IAEO,eAAe;QACnB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAC9C,IAAI,CAAC,qBAAqB,CAC7B,CAAA;QAED,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACpC,CAAC;IAED,IAAY,gBAAgB;QACxB,OAAO;YACH,YAAY,EAAE,IAAI,CAAC,YAAY;SAClC,CAAA;IACL,CAAC;IAED,IAAY,qBAAqB;QAC7B,OAAO;YACH,GAAG,IAAI,CAAC,gBAAgB;YACxB,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAA;IACL,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,KAAa;QAC/B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;YAC/C,GAAG,IAAI,CAAC,gBAAgB;YACxB,KAAK;SACR,CAAC,CAAA;QAEF,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACpC,CAAC;IAEM,KAAK,CAAC,UAAU;QACnB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAExE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACpC,CAAC;CACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neurodevs/node-lsl",
3
- "version": "23.2.0",
3
+ "version": "23.2.1",
4
4
  "description": "Lab Streaming Layer (LSL) bindings for Node",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -92,6 +92,73 @@ export default class UsbDeviceControllerTest extends AbstractPackageTest {
92
92
  )
93
93
  }
94
94
 
95
+ @test()
96
+ protected static async connectThrowsWhenUsbBackendCannotBeCreated() {
97
+ this.setFakeErrorResult()
98
+
99
+ await assert.doesThrowAsync(
100
+ async () => await this.connect(),
101
+ `400 error: ${this.fakeError}`,
102
+ 'Did not throw when USB backend could not be created!'
103
+ )
104
+ }
105
+
106
+ @test()
107
+ protected static async doesNotStartUsbBackendThatCouldNotBeCreated() {
108
+ this.setFakeErrorResult()
109
+
110
+ await assert.doesThrowAsync(async () => await this.connect())
111
+
112
+ assert.isLength(
113
+ FakeLibndx.callsToStartUsbBackend,
114
+ 0,
115
+ 'Started a USB backend that could not be created!'
116
+ )
117
+ }
118
+
119
+ @test()
120
+ protected static async connectThrowsWhenUsbBackendCannotBeStarted() {
121
+ this.setFakeErrorResult()
122
+
123
+ //@ts-ignore
124
+ this.instance.createUsbBackend = () => {}
125
+
126
+ await assert.doesThrowAsync(
127
+ async () => await this.connect(),
128
+ `400 error: ${this.fakeError}`,
129
+ 'Did not throw when USB backend could not be started!'
130
+ )
131
+ }
132
+
133
+ @test()
134
+ protected static async writeUsbThrowsOnError() {
135
+ this.setFakeErrorResult()
136
+
137
+ await assert.doesThrowAsync(
138
+ async () => await this.instance.writeUsb(this.valueToWrite),
139
+ `400 error: ${this.fakeError}`,
140
+ 'Did not throw when writing failed!'
141
+ )
142
+ }
143
+
144
+ @test()
145
+ protected static async disconnectThrowsOnError() {
146
+ await this.connect()
147
+ this.setFakeErrorResult()
148
+
149
+ await assert.doesThrowAsync(
150
+ async () => await this.disconnect(),
151
+ `400 error: ${this.fakeError}`,
152
+ 'Did not throw when stopping failed!'
153
+ )
154
+ }
155
+
156
+ private static readonly fakeError = this.generateId()
157
+
158
+ private static setFakeErrorResult() {
159
+ FakeLibndx.fakeResult = { status: 400, error: this.fakeError }
160
+ }
161
+
95
162
  private static async connect() {
96
163
  await this.instance.connect()
97
164
  }
@@ -20,8 +20,30 @@ export default class UsbDeviceController implements UsbDevice {
20
20
  }
21
21
 
22
22
  public async connect() {
23
- this.ndx.createUsbBackend(this.usbDeviceOptions)
24
- this.ndx.startUsbBackend(this.startUsbDeviceOptions)
23
+ this.createUsbBackend()
24
+ this.startUsbBackend()
25
+ }
26
+
27
+ private createUsbBackend() {
28
+ const { status, error } = this.ndx.createUsbBackend(
29
+ this.usbDeviceOptions
30
+ )
31
+
32
+ this.throwIfError(status, error)
33
+ }
34
+
35
+ private throwIfError(status: number, error: string | undefined) {
36
+ if (status !== 200) {
37
+ throw new Error(`${status} error: ${error ?? 'Unknown error'}`)
38
+ }
39
+ }
40
+
41
+ private startUsbBackend() {
42
+ const { status, error } = this.ndx.startUsbBackend(
43
+ this.startUsbDeviceOptions
44
+ )
45
+
46
+ this.throwIfError(status, error)
25
47
  }
26
48
 
27
49
  private get usbDeviceOptions() {
@@ -38,14 +60,18 @@ export default class UsbDeviceController implements UsbDevice {
38
60
  }
39
61
 
40
62
  public async writeUsb(value: string) {
41
- this.ndx.writeUsbBackend({
63
+ const { status, error } = this.ndx.writeUsbBackend({
42
64
  ...this.usbDeviceOptions,
43
65
  value,
44
66
  })
67
+
68
+ this.throwIfError(status, error)
45
69
  }
46
70
 
47
71
  public async disconnect() {
48
- this.ndx.stopUsbBackend(this.usbDeviceOptions)
72
+ const { status, error } = this.ndx.stopUsbBackend(this.usbDeviceOptions)
73
+
74
+ this.throwIfError(status, error)
49
75
  }
50
76
  }
51
77