@neurodevs/node-lsl 11.4.1 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/.vscode/tasks.json +19 -1
  2. package/README.md +44 -34
  3. package/build/.spruce/settings.json +1 -3
  4. package/build/__tests__/{AbstractLslTest.d.ts → AbstractPackageTest.d.ts} +6 -4
  5. package/build/__tests__/AbstractPackageTest.js +58 -0
  6. package/build/__tests__/AbstractPackageTest.js.map +1 -0
  7. package/build/__tests__/{modules → impl}/LiblslAdapter.test.d.ts +5 -8
  8. package/build/__tests__/{modules → impl}/LiblslAdapter.test.js +37 -86
  9. package/build/__tests__/impl/LiblslAdapter.test.js.map +1 -0
  10. package/build/__tests__/{modules/EventMarkerOutlet.test.d.ts → impl/LslEventMarkerOutlet.test.d.ts} +5 -4
  11. package/build/__tests__/{modules/EventMarkerOutlet.test.js → impl/LslEventMarkerOutlet.test.js} +32 -25
  12. package/build/__tests__/impl/LslEventMarkerOutlet.test.js.map +1 -0
  13. package/build/__tests__/{modules → impl}/LslStreamInfo.test.d.ts +3 -4
  14. package/build/__tests__/{modules → impl}/LslStreamInfo.test.js +17 -27
  15. package/build/__tests__/impl/LslStreamInfo.test.js.map +1 -0
  16. package/build/__tests__/impl/LslStreamInlet.test.d.ts +10 -0
  17. package/build/__tests__/{modules → impl}/LslStreamInlet.test.js +9 -26
  18. package/build/__tests__/impl/LslStreamInlet.test.js.map +1 -0
  19. package/build/__tests__/{modules → impl}/LslStreamOutlet.test.d.ts +9 -7
  20. package/build/__tests__/{modules → impl}/LslStreamOutlet.test.js +40 -57
  21. package/build/__tests__/impl/LslStreamOutlet.test.js.map +1 -0
  22. package/build/__tests__/impl/LslWebSocketBridge.test.d.ts +7 -0
  23. package/build/__tests__/impl/LslWebSocketBridge.test.js +63 -0
  24. package/build/__tests__/impl/LslWebSocketBridge.test.js.map +1 -0
  25. package/build/assertions.d.ts +1 -1
  26. package/build/assertions.js +10 -31
  27. package/build/assertions.js.map +1 -1
  28. package/build/{modules → impl}/LiblslAdapter.d.ts +3 -1
  29. package/build/{modules → impl}/LiblslAdapter.js +15 -44
  30. package/build/impl/LiblslAdapter.js.map +1 -0
  31. package/build/impl/LslEventMarkerOutlet.d.ts +23 -0
  32. package/build/{modules/EventMarkerOutlet.js → impl/LslEventMarkerOutlet.js} +6 -6
  33. package/build/impl/LslEventMarkerOutlet.js.map +1 -0
  34. package/build/{modules → impl}/LslStreamInfo.js +4 -6
  35. package/build/impl/LslStreamInfo.js.map +1 -0
  36. package/build/{modules → impl}/LslStreamInlet.d.ts +8 -8
  37. package/build/{modules → impl}/LslStreamInlet.js +6 -14
  38. package/build/impl/LslStreamInlet.js.map +1 -0
  39. package/build/{modules → impl}/LslStreamOutlet.d.ts +8 -8
  40. package/build/{modules → impl}/LslStreamOutlet.js +2 -15
  41. package/build/impl/LslStreamOutlet.js.map +1 -0
  42. package/build/impl/LslWebSocketBridge.d.ts +8 -0
  43. package/build/impl/LslWebSocketBridge.js +10 -0
  44. package/build/impl/LslWebSocketBridge.js.map +1 -0
  45. package/build/index.d.ts +26 -22
  46. package/build/index.js +41 -34
  47. package/build/index.js.map +1 -1
  48. package/build/scripts/runLslEventMarkerOutlet.d.ts +1 -0
  49. package/build/scripts/runLslEventMarkerOutlet.js +23 -0
  50. package/build/scripts/runLslEventMarkerOutlet.js.map +1 -0
  51. package/build/scripts/runLslStreamOutlet.d.ts +1 -0
  52. package/build/scripts/runLslStreamOutlet.js +25 -0
  53. package/build/scripts/runLslStreamOutlet.js.map +1 -0
  54. package/build/testDoubles/{MarkerOutlet/FakeMarkerOutlet.d.ts → EventMarkerOutlet/FakeEventMarkerOutlet.d.ts} +2 -2
  55. package/build/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.js +29 -0
  56. package/build/testDoubles/EventMarkerOutlet/FakeEventMarkerOutlet.js.map +1 -0
  57. package/build/testDoubles/{MarkerOutlet/MockMarkerOutlet.d.ts → EventMarkerOutlet/MockEventMarkerOutlet.d.ts} +2 -2
  58. package/build/testDoubles/{MarkerOutlet/MockMarkerOutlet.js → EventMarkerOutlet/MockEventMarkerOutlet.js} +3 -3
  59. package/build/testDoubles/EventMarkerOutlet/MockEventMarkerOutlet.js.map +1 -0
  60. package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.d.ts +9 -0
  61. package/build/testDoubles/{MarkerOutlet/SpyMarkerOutlet.js → EventMarkerOutlet/SpyEventMarkerOutlet.js} +8 -8
  62. package/build/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.js.map +1 -0
  63. package/build/testDoubles/{MarkerOutlet/ThrowingMarkerOutlet.d.ts → EventMarkerOutlet/ThrowingEventMarkerOutlet.d.ts} +2 -2
  64. package/build/testDoubles/{MarkerOutlet/ThrowingMarkerOutlet.js → EventMarkerOutlet/ThrowingEventMarkerOutlet.js} +3 -3
  65. package/build/testDoubles/EventMarkerOutlet/ThrowingEventMarkerOutlet.js.map +1 -0
  66. package/build/testDoubles/StreamInfo/FakeStreamInfo.d.ts +1 -1
  67. package/build/testDoubles/StreamInfo/SpyStreamInfo.d.ts +1 -1
  68. package/build/testDoubles/StreamInfo/SpyStreamInfo.js +1 -1
  69. package/build/testDoubles/StreamInfo/SpyStreamInfo.js.map +1 -1
  70. package/build/testDoubles/StreamInlet/FakeStreamInlet.d.ts +10 -0
  71. package/build/testDoubles/StreamInlet/FakeStreamInlet.js +16 -0
  72. package/build/testDoubles/StreamInlet/FakeStreamInlet.js.map +1 -0
  73. package/build/testDoubles/StreamInlet/SpyStreamInlet.d.ts +7 -0
  74. package/build/testDoubles/{LslInlet/SpyLslInlet.js → StreamInlet/SpyStreamInlet.js} +5 -5
  75. package/build/testDoubles/StreamInlet/SpyStreamInlet.js.map +1 -0
  76. package/build/testDoubles/{LslOutlet/FakeLslOutlet.d.ts → StreamOutlet/FakeStreamOutlet.d.ts} +9 -10
  77. package/build/testDoubles/StreamOutlet/FakeStreamOutlet.js +62 -0
  78. package/build/testDoubles/StreamOutlet/FakeStreamOutlet.js.map +1 -0
  79. package/build/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.d.ts +6 -0
  80. package/build/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.js +13 -0
  81. package/build/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.js.map +1 -0
  82. package/build/testDoubles/generateRandomOutletOptions.d.ts +2 -2
  83. package/build/testDoubles/generateRandomOutletOptions.js +10 -7
  84. package/build/testDoubles/generateRandomOutletOptions.js.map +1 -1
  85. package/build/types.d.ts +3 -3
  86. package/package.json +26 -18
  87. package/src/.spruce/settings.json +1 -3
  88. package/src/__tests__/{AbstractLslTest.ts → AbstractPackageTest.ts} +23 -17
  89. package/src/__tests__/{modules → impl}/LiblslAdapter.test.ts +36 -76
  90. package/src/__tests__/{modules/EventMarkerOutlet.test.ts → impl/LslEventMarkerOutlet.test.ts} +38 -27
  91. package/src/__tests__/{modules → impl}/LslStreamInfo.test.ts +7 -17
  92. package/src/__tests__/{modules → impl}/LslStreamInlet.test.ts +13 -30
  93. package/src/__tests__/{modules → impl}/LslStreamOutlet.test.ts +71 -63
  94. package/src/__tests__/impl/LslWebSocketBridge.test.ts +23 -0
  95. package/src/assertions.ts +19 -30
  96. package/src/{modules → impl}/LiblslAdapter.ts +18 -44
  97. package/src/{modules/EventMarkerOutlet.ts → impl/LslEventMarkerOutlet.ts} +16 -11
  98. package/src/{modules → impl}/LslStreamInfo.ts +1 -3
  99. package/src/{modules → impl}/LslStreamInlet.ts +14 -22
  100. package/src/{modules → impl}/LslStreamOutlet.ts +12 -26
  101. package/src/impl/LslWebSocketBridge.ts +13 -0
  102. package/src/index.ts +37 -29
  103. package/src/scripts/runLslEventMarkerOutlet.ts +23 -0
  104. package/src/scripts/runLslStreamOutlet.ts +22 -0
  105. package/src/testDoubles/{MarkerOutlet/FakeMarkerOutlet.ts → EventMarkerOutlet/FakeEventMarkerOutlet.ts} +6 -6
  106. package/src/testDoubles/{MarkerOutlet/MockMarkerOutlet.ts → EventMarkerOutlet/MockEventMarkerOutlet.ts} +2 -2
  107. package/src/testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet.ts +24 -0
  108. package/src/testDoubles/{MarkerOutlet/ThrowingMarkerOutlet.ts → EventMarkerOutlet/ThrowingEventMarkerOutlet.ts} +2 -2
  109. package/src/testDoubles/StreamInfo/FakeStreamInfo.ts +1 -1
  110. package/src/testDoubles/StreamInfo/SpyStreamInfo.ts +1 -1
  111. package/src/testDoubles/StreamInlet/FakeStreamInlet.ts +20 -0
  112. package/src/testDoubles/StreamInlet/SpyStreamInlet.ts +16 -0
  113. package/src/testDoubles/{LslOutlet/FakeLslOutlet.ts → StreamOutlet/FakeStreamOutlet.ts} +17 -18
  114. package/src/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.ts +15 -0
  115. package/src/testDoubles/generateRandomOutletOptions.ts +3 -3
  116. package/src/types.ts +3 -3
  117. package/build/.spruce/errors/errors.types.d.ts +0 -21
  118. package/build/.spruce/errors/errors.types.js +0 -3
  119. package/build/.spruce/errors/errors.types.js.map +0 -1
  120. package/build/.spruce/errors/nodeLsl/failedToLoadLiblsl.schema.d.ts +0 -3
  121. package/build/.spruce/errors/nodeLsl/failedToLoadLiblsl.schema.js +0 -19
  122. package/build/.spruce/errors/nodeLsl/failedToLoadLiblsl.schema.js.map +0 -1
  123. package/build/.spruce/errors/options.types.d.ts +0 -7
  124. package/build/.spruce/errors/options.types.js +0 -3
  125. package/build/.spruce/errors/options.types.js.map +0 -1
  126. package/build/.spruce/schemas/fields/fieldClassMap.d.ts +0 -2
  127. package/build/.spruce/schemas/fields/fieldClassMap.js +0 -5
  128. package/build/.spruce/schemas/fields/fieldClassMap.js.map +0 -1
  129. package/build/.spruce/schemas/fields/fields.types.d.ts +0 -1
  130. package/build/.spruce/schemas/fields/fields.types.js +0 -3
  131. package/build/.spruce/schemas/fields/fields.types.js.map +0 -1
  132. package/build/__tests__/AbstractLslTest.js +0 -86
  133. package/build/__tests__/AbstractLslTest.js.map +0 -1
  134. package/build/__tests__/modules/EventMarkerOutlet.test.js.map +0 -1
  135. package/build/__tests__/modules/LiblslAdapter.test.js.map +0 -1
  136. package/build/__tests__/modules/LslStreamInfo.test.js.map +0 -1
  137. package/build/__tests__/modules/LslStreamInlet.test.d.ts +0 -11
  138. package/build/__tests__/modules/LslStreamInlet.test.js.map +0 -1
  139. package/build/__tests__/modules/LslStreamOutlet.test.js.map +0 -1
  140. package/build/errors/SpruceError.d.ts +0 -6
  141. package/build/errors/SpruceError.js +0 -26
  142. package/build/errors/SpruceError.js.map +0 -1
  143. package/build/errors/failedToLoadLiblsl.builder.d.ts +0 -11
  144. package/build/errors/failedToLoadLiblsl.builder.js +0 -14
  145. package/build/errors/failedToLoadLiblsl.builder.js.map +0 -1
  146. package/build/modules/EventMarkerOutlet.d.ts +0 -23
  147. package/build/modules/EventMarkerOutlet.js.map +0 -1
  148. package/build/modules/LiblslAdapter.js.map +0 -1
  149. package/build/modules/LslStreamInfo.js.map +0 -1
  150. package/build/modules/LslStreamInlet.js.map +0 -1
  151. package/build/modules/LslStreamOutlet.js.map +0 -1
  152. package/build/testDoubles/LslInlet/FakeLslInlet.d.ts +0 -11
  153. package/build/testDoubles/LslInlet/FakeLslInlet.js +0 -16
  154. package/build/testDoubles/LslInlet/FakeLslInlet.js.map +0 -1
  155. package/build/testDoubles/LslInlet/SpyLslInlet.d.ts +0 -7
  156. package/build/testDoubles/LslInlet/SpyLslInlet.js.map +0 -1
  157. package/build/testDoubles/LslOutlet/FakeLslOutlet.js +0 -59
  158. package/build/testDoubles/LslOutlet/FakeLslOutlet.js.map +0 -1
  159. package/build/testDoubles/MarkerOutlet/FakeMarkerOutlet.js +0 -29
  160. package/build/testDoubles/MarkerOutlet/FakeMarkerOutlet.js.map +0 -1
  161. package/build/testDoubles/MarkerOutlet/MockMarkerOutlet.js.map +0 -1
  162. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.d.ts +0 -9
  163. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.js.map +0 -1
  164. package/build/testDoubles/MarkerOutlet/ThrowingMarkerOutlet.js.map +0 -1
  165. package/src/.spruce/errors/errors.types.ts +0 -37
  166. package/src/.spruce/errors/nodeLsl/failedToLoadLiblsl.schema.ts +0 -22
  167. package/src/.spruce/errors/options.types.ts +0 -10
  168. package/src/.spruce/schemas/fields/fieldClassMap.ts +0 -6
  169. package/src/.spruce/schemas/fields/fields.types.ts +0 -1
  170. package/src/errors/SpruceError.ts +0 -23
  171. package/src/errors/failedToLoadLiblsl.builder.ts +0 -12
  172. package/src/testDoubles/LslInlet/FakeLslInlet.ts +0 -22
  173. package/src/testDoubles/LslInlet/SpyLslInlet.ts +0 -16
  174. package/src/testDoubles/MarkerOutlet/SpyMarkerOutlet.ts +0 -24
  175. /package/build/{modules → impl}/LslStreamInfo.d.ts +0 -0
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class FakeStreamTransportBridge {
4
+ constructor() {
5
+ FakeStreamTransportBridge.numCallsToConstructor++;
6
+ }
7
+ static resetTestDouble() {
8
+ FakeStreamTransportBridge.numCallsToConstructor = 0;
9
+ }
10
+ }
11
+ FakeStreamTransportBridge.numCallsToConstructor = 0;
12
+ exports.default = FakeStreamTransportBridge;
13
+ //# sourceMappingURL=FakeStreamTransportBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FakeStreamTransportBridge.js","sourceRoot":"","sources":["../../../src/testDoubles/StreamTransportBridge/FakeStreamTransportBridge.ts"],"names":[],"mappings":";;AAEA,MAAqB,yBAAyB;IAK1C;QACI,yBAAyB,CAAC,qBAAqB,EAAE,CAAA;IACrD,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,yBAAyB,CAAC,qBAAqB,GAAG,CAAC,CAAA;IACvD,CAAC;;AARa,+CAAqB,GAAG,CAAC,CAAA;kBAHtB,yBAAyB"}
@@ -1,2 +1,2 @@
1
- import { LslOutletOptions } from '../modules/LslStreamOutlet';
2
- export default function generateRandomOutletOptions(): LslOutletOptions;
1
+ import { StreamOutletOptions } from '../impl/LslStreamOutlet';
2
+ export default function generateRandomOutletOptions(): StreamOutletOptions;
@@ -1,20 +1,23 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.default = generateRandomOutletOptions;
4
7
  const crypto_1 = require("crypto");
5
- const test_utils_1 = require("@sprucelabs/test-utils");
8
+ const generate_id_1 = __importDefault(require("@neurodevs/generate-id"));
6
9
  const consts_1 = require("./consts");
7
10
  function generateRandomOutletOptions() {
8
11
  const randomChannelIdx = (0, crypto_1.randomInt)(consts_1.TEST_SUPPORTED_CHANNEL_FORMATS.length);
9
12
  return {
10
- name: (0, test_utils_1.generateId)(),
11
- type: (0, test_utils_1.generateId)(),
12
- channelNames: new Array((0, crypto_1.randomInt)(1, 10)).fill((0, test_utils_1.generateId)()),
13
+ name: (0, generate_id_1.default)(),
14
+ type: (0, generate_id_1.default)(),
15
+ channelNames: new Array((0, crypto_1.randomInt)(1, 10)).fill((0, generate_id_1.default)()),
13
16
  sampleRate: Math.random() * 10,
14
17
  channelFormat: consts_1.TEST_SUPPORTED_CHANNEL_FORMATS[randomChannelIdx],
15
- sourceId: (0, test_utils_1.generateId)(),
16
- manufacturer: (0, test_utils_1.generateId)(),
17
- unit: (0, test_utils_1.generateId)(),
18
+ sourceId: (0, generate_id_1.default)(),
19
+ manufacturer: (0, generate_id_1.default)(),
20
+ unit: (0, generate_id_1.default)(),
18
21
  chunkSize: (0, crypto_1.randomInt)(0, 10),
19
22
  maxBuffered: (0, crypto_1.randomInt)(0, 10),
20
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"generateRandomOutletOptions.js","sourceRoot":"","sources":["../../src/testDoubles/generateRandomOutletOptions.ts"],"names":[],"mappings":";;AAKA,8CAeC;AApBD,mCAAkC;AAClC,uDAAmD;AAEnD,qCAAyD;AAEzD,SAAwB,2BAA2B;IAC/C,MAAM,gBAAgB,GAAG,IAAA,kBAAS,EAAC,uCAA8B,CAAC,MAAM,CAAC,CAAA;IAEzE,OAAO;QACH,IAAI,EAAE,IAAA,uBAAU,GAAE;QAClB,IAAI,EAAE,IAAA,uBAAU,GAAE;QAClB,YAAY,EAAE,IAAI,KAAK,CAAC,IAAA,kBAAS,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAA,uBAAU,GAAE,CAAC;QAC5D,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;QAC9B,aAAa,EAAE,uCAA8B,CAAC,gBAAgB,CAAC;QAC/D,QAAQ,EAAE,IAAA,uBAAU,GAAE;QACtB,YAAY,EAAE,IAAA,uBAAU,GAAE;QAC1B,IAAI,EAAE,IAAA,uBAAU,GAAE;QAClB,SAAS,EAAE,IAAA,kBAAS,EAAC,CAAC,EAAE,EAAE,CAAC;QAC3B,WAAW,EAAE,IAAA,kBAAS,EAAC,CAAC,EAAE,EAAE,CAAC;KACZ,CAAA;AACzB,CAAC"}
1
+ {"version":3,"file":"generateRandomOutletOptions.js","sourceRoot":"","sources":["../../src/testDoubles/generateRandomOutletOptions.ts"],"names":[],"mappings":";;;;;AAKA,8CAeC;AApBD,mCAAkC;AAClC,yEAA+C;AAE/C,qCAAyD;AAEzD,SAAwB,2BAA2B;IAC/C,MAAM,gBAAgB,GAAG,IAAA,kBAAS,EAAC,uCAA8B,CAAC,MAAM,CAAC,CAAA;IAEzE,OAAO;QACH,IAAI,EAAE,IAAA,qBAAU,GAAE;QAClB,IAAI,EAAE,IAAA,qBAAU,GAAE;QAClB,YAAY,EAAE,IAAI,KAAK,CAAC,IAAA,kBAAS,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAA,qBAAU,GAAE,CAAC;QAC5D,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;QAC9B,aAAa,EAAE,uCAA8B,CAAC,gBAAgB,CAAC;QAC/D,QAAQ,EAAE,IAAA,qBAAU,GAAE;QACtB,YAAY,EAAE,IAAA,qBAAU,GAAE;QAC1B,IAAI,EAAE,IAAA,qBAAU,GAAE;QAClB,SAAS,EAAE,IAAA,kBAAS,EAAC,CAAC,EAAE,EAAE,CAAC;QAC3B,WAAW,EAAE,IAAA,kBAAS,EAAC,CAAC,EAAE,EAAE,CAAC;KACT,CAAA;AAC5B,CAAC"}
package/build/types.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { FuncObj, FieldType } from 'ffi-rs';
2
2
  import { CHANNEL_FORMATS } from './consts';
3
- import { LslInlet } from './modules/LslStreamInlet';
4
- import { LslOutlet } from './modules/LslStreamOutlet';
5
- export type StreamFixuture = LslOutlet | LslInlet;
3
+ import { StreamInlet } from './impl/LslStreamInlet';
4
+ import { StreamOutlet } from './impl/LslStreamOutlet';
5
+ export type StreamFixuture = StreamOutlet | StreamInlet;
6
6
  export type ChannelFormat = (typeof CHANNEL_FORMATS)[number];
7
7
  export interface DurationMarker {
8
8
  name: string;
package/package.json CHANGED
@@ -1,11 +1,23 @@
1
1
  {
2
2
  "name": "@neurodevs/node-lsl",
3
- "version": "11.4.1",
4
- "main": "build/index.js",
3
+ "version": "12.0.0",
4
+ "description": "Lab Streaming Layer (LSL) bindings for Node",
5
+ "keywords": [
6
+ "nodejs",
7
+ "typescript",
8
+ "tdd"
9
+ ],
10
+ "license": "MIT",
11
+ "author": "Eric Yates <hello@ericthecurious.com>",
12
+ "homepage": "https://github.com/neurodevs/node-lsl",
5
13
  "repository": {
6
14
  "type": "git",
7
15
  "url": "git+https://github.com/neurodevs/node-lsl.git"
8
16
  },
17
+ "bugs": {
18
+ "url": "https://github.com/neurodevs/node-lsl/issues"
19
+ },
20
+ "main": "build/index.js",
9
21
  "scripts": {
10
22
  "build.ci": "yarn run build.tsc && yarn run build.resolve-paths && yarn run lint",
11
23
  "build.dev": "yarn run build.tsc --sourceMap ; yarn run resolve-paths.lint",
@@ -30,7 +42,14 @@
30
42
  "watch.tsc": "tsc -w",
31
43
  "test.rs": "node build/test.js"
32
44
  },
45
+ "dependencies": {
46
+ "ffi-rs": "^1.0.98",
47
+ "node-gyp": "^10.2.0",
48
+ "ref-array-napi": "^1.2.2",
49
+ "ref-napi": "^3.0.3"
50
+ },
33
51
  "devDependencies": {
52
+ "@neurodevs/generate-id": "^1.0.0",
34
53
  "@sprucelabs/jest-json-reporter": "^8.0.542",
35
54
  "@sprucelabs/resolve-path-aliases": "^2.0.516",
36
55
  "@sprucelabs/test": "^9.0.59",
@@ -48,13 +67,6 @@
48
67
  "tsc-watch": "^6.2.1",
49
68
  "typescript": "^5.6.3"
50
69
  },
51
- "description": "Lab Streaming Layer (LSL) bindings for Node",
52
- "skill": {
53
- "namespace": "node-lsl",
54
- "upgradeIgnoreList": [
55
- "@sprucelabs/spruce-test-fixtures"
56
- ]
57
- },
58
70
  "jest": {
59
71
  "testRunner": "jest-circus/runner",
60
72
  "maxWorkers": 4,
@@ -73,14 +85,10 @@
73
85
  "^#spruce/(.*)$": "<rootDir>/build/.spruce/$1"
74
86
  }
75
87
  },
76
- "dependencies": {
77
- "@sprucelabs/error": "^6.0.541",
78
- "@sprucelabs/schema": "^30.0.560",
79
- "@sprucelabs/spruce-core-schemas": "^40.1.547",
80
- "@sprucelabs/spruce-skill-utils": "^31.0.624",
81
- "ffi-rs": "^1.0.98",
82
- "node-gyp": "^10.2.0",
83
- "ref-array-napi": "^1.2.2",
84
- "ref-napi": "^3.0.3"
88
+ "skill": {
89
+ "namespace": "node-lsl",
90
+ "upgradeIgnoreList": [
91
+ "@sprucelabs/spruce-test-fixtures"
92
+ ]
85
93
  }
86
94
  }
@@ -6,8 +6,6 @@
6
6
  "skill"
7
7
  ],
8
8
  "installed": [
9
- "test",
10
- "schema",
11
- "error"
9
+ "test"
12
10
  ]
13
11
  }
@@ -1,18 +1,19 @@
1
- import AbstractSpruceTest, { generateId } from '@sprucelabs/test-utils'
2
- import EventMarkerOutlet from '../modules/EventMarkerOutlet'
3
- import LiblslAdapter from '../modules/LiblslAdapter'
4
- import LslStreamInfo from '../modules/LslStreamInfo'
5
- import LslStreamInlet from '../modules/LslStreamInlet'
1
+ import AbstractSpruceTest from '@sprucelabs/test-utils'
2
+ import generateId from '@neurodevs/generate-id'
3
+ import LiblslAdapter from '../impl/LiblslAdapter'
4
+ import LslEventMarkerOutlet from '../impl/LslEventMarkerOutlet'
5
+ import LslStreamInfo from '../impl/LslStreamInfo'
6
+ import LslStreamInlet from '../impl/LslStreamInlet'
6
7
 
7
- import LslStreamOutlet from '../modules/LslStreamOutlet'
8
+ import LslStreamOutlet from '../impl/LslStreamOutlet'
9
+ import SpyEventMarkerOutlet from '../testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet'
8
10
  import FakeLiblsl from '../testDoubles/Liblsl/FakeLiblsl'
9
- import { SpyLslInlet } from '../testDoubles/LslInlet/SpyLslInlet'
10
- import FakeLslOutlet from '../testDoubles/LslOutlet/FakeLslOutlet'
11
- import SpyMarkerOutlet from '../testDoubles/MarkerOutlet/SpyMarkerOutlet'
12
11
  import FakeStreamInfo from '../testDoubles/StreamInfo/FakeStreamInfo'
13
12
  import SpyStreamInfo from '../testDoubles/StreamInfo/SpyStreamInfo'
13
+ import { SpyStreamInlet } from '../testDoubles/StreamInlet/SpyStreamInlet'
14
+ import FakeStreamOutlet from '../testDoubles/StreamOutlet/FakeStreamOutlet'
14
15
 
15
- export default class AbstractLslTest extends AbstractSpruceTest {
16
+ export default class AbstractPackageTest extends AbstractSpruceTest {
16
17
  protected static fakeLiblsl: FakeLiblsl
17
18
 
18
19
  protected static async beforeEach() {
@@ -35,17 +36,21 @@ export default class AbstractLslTest extends AbstractSpruceTest {
35
36
  FakeStreamInfo.resetTestDouble()
36
37
  }
37
38
 
38
- protected static setSpyLslInlet() {
39
- LslStreamInlet.Class = SpyLslInlet
39
+ protected static setSpyStreamInlet() {
40
+ LslStreamInlet.Class = SpyStreamInlet
40
41
  }
41
42
 
42
- protected static setFakeLslOutlet() {
43
- LslStreamOutlet.Class = FakeLslOutlet
44
- FakeLslOutlet.resetTestDouble()
43
+ protected static setFakeStreamOutlet() {
44
+ LslStreamOutlet.Class = FakeStreamOutlet
45
+ FakeStreamOutlet.resetTestDouble()
45
46
  }
46
47
 
47
- protected static setSpyMarkerOutlet() {
48
- EventMarkerOutlet.Class = SpyMarkerOutlet
48
+ protected static setSpyEventMarkerOutlet() {
49
+ LslEventMarkerOutlet.Class = SpyEventMarkerOutlet
50
+ }
51
+
52
+ protected static generateId() {
53
+ return generateId()
49
54
  }
50
55
 
51
56
  protected static readonly name_ = generateId()
@@ -55,4 +60,5 @@ export default class AbstractLslTest extends AbstractSpruceTest {
55
60
  protected static readonly channelNames = [generateId(), generateId()]
56
61
  protected static readonly chunkSize = Math.floor(Math.random() * 100)
57
62
  protected static readonly maxBuffered = Math.floor(Math.random() * 100)
63
+ protected static readonly sampleRate = Math.floor(Math.random() * 100)
58
64
  }
@@ -1,7 +1,8 @@
1
1
  import { randomInt } from 'crypto'
2
- import { test, assert, errorAssert, generateId } from '@sprucelabs/test-utils'
2
+ import { test, assert } from '@sprucelabs/test-utils'
3
+ import generateId from '@neurodevs/generate-id'
3
4
  import { DataType, OpenParams } from 'ffi-rs'
4
- import LiblslAdapter from '../../modules/LiblslAdapter'
5
+ import LiblslAdapter from '../../impl/LiblslAdapter'
5
6
  import FakeLiblsl from '../../testDoubles/Liblsl/FakeLiblsl'
6
7
  import {
7
8
  BoundChild,
@@ -14,10 +15,10 @@ import {
14
15
  LiblslBindings,
15
16
  LslChannel,
16
17
  } from '../../types'
17
- import AbstractLslTest from '../AbstractLslTest'
18
+ import AbstractPackageTest from '../AbstractPackageTest'
18
19
 
19
- export default class LiblslAdapterTest extends AbstractLslTest {
20
- private static lsl: Liblsl
20
+ export default class LiblslAdapterTest extends AbstractPackageTest {
21
+ private static instance: Liblsl
21
22
  private static libraryPath?: string
22
23
  private static libraryOptions?: Record<string, any>
23
24
  private static fakeBindings: LiblslBindings
@@ -85,7 +86,12 @@ export default class LiblslAdapterTest extends AbstractLslTest {
85
86
  }
86
87
 
87
88
  LiblslAdapter.resetInstance()
88
- this.lsl = LiblslAdapter.getInstance()
89
+ this.instance = LiblslAdapter.getInstance()
90
+ }
91
+
92
+ @test()
93
+ protected static async createsInstance() {
94
+ assert.isTruthy(this.instance, 'Failed to create instance!')
89
95
  }
90
96
 
91
97
  @test()
@@ -94,9 +100,13 @@ export default class LiblslAdapterTest extends AbstractLslTest {
94
100
  LiblslAdapter.resetInstance()
95
101
 
96
102
  const err = assert.doesThrow(() => LiblslAdapter.getInstance())
97
- errorAssert.assertError(err, 'FAILED_TO_LOAD_LIBLSL', {
98
- liblslPath: process.env.LIBLSL_PATH,
99
- })
103
+
104
+ debugger
105
+
106
+ assert.isTrue(
107
+ err.message.includes(this.generateFailedMessage()),
108
+ 'Did not receive the expected error!'
109
+ )
100
110
  }
101
111
 
102
112
  @test()
@@ -107,60 +117,6 @@ export default class LiblslAdapterTest extends AbstractLslTest {
107
117
  })
108
118
  }
109
119
 
110
- @test()
111
- protected static throwsWhenCreateStreamInfoIsMissingRequiredParams() {
112
- //@ts-ignore
113
- const err = assert.doesThrow(() => this.lsl.createStreamInfo())
114
- errorAssert.assertError(err, 'MISSING_PARAMETERS', {
115
- parameters: [
116
- 'name',
117
- 'type',
118
- 'channelCount',
119
- 'sampleRate',
120
- 'channelFormat',
121
- 'sourceId',
122
- ],
123
- })
124
- }
125
-
126
- @test()
127
- protected static async throwsWhenAppendChannelsIsMissingRequiredParams() {
128
- const err = assert.doesThrow(() =>
129
- //@ts-ignore
130
- this.lsl.appendChannelsToStreamInfo({})
131
- )
132
- errorAssert.assertError(err, 'MISSING_PARAMETERS', {
133
- parameters: ['info', 'channels'],
134
- })
135
- }
136
-
137
- @test()
138
- protected static async throwsWhenCreateOutletIsMissingRequiredParams() {
139
- //@ts-ignore
140
- const err = assert.doesThrow(() => this.lsl.createOutlet({}))
141
- errorAssert.assertError(err, 'MISSING_PARAMETERS', {
142
- parameters: ['info', 'chunkSize', 'maxBuffered'],
143
- })
144
- }
145
-
146
- @test()
147
- protected static async throwsWhenPushSampleFloatTimestampIsMissingRequiredParams() {
148
- //@ts-ignore
149
- const err = assert.doesThrow(() => this.lsl.pushSampleFloatTimestamp())
150
- errorAssert.assertError(err, 'MISSING_PARAMETERS', {
151
- parameters: ['outlet', 'sample', 'timestamp'],
152
- })
153
- }
154
-
155
- @test()
156
- protected static async throwsWhenPushSampleStringTimestampIsMissingRequiredParams() {
157
- //@ts-ignore
158
- const err = assert.doesThrow(() => this.lsl.pushSampleFloatTimestamp())
159
- errorAssert.assertError(err, 'MISSING_PARAMETERS', {
160
- parameters: ['outlet', 'sample', 'timestamp'],
161
- })
162
- }
163
-
164
120
  @test()
165
121
  protected static async worksAsASingleton() {
166
122
  const liblsl = LiblslAdapter.getInstance()
@@ -263,7 +219,7 @@ export default class LiblslAdapterTest extends AbstractLslTest {
263
219
  @test()
264
220
  protected static async canCreateStreamInfoWithRequiredParams() {
265
221
  const options = this.generateRandomCreateStreamInfoOptions()
266
- const actual = this.lsl.createStreamInfo(options)
222
+ const actual = this.instance.createStreamInfo(options)
267
223
 
268
224
  assert.isEqual(actual, this.fakeStreamInfo)
269
225
  assert.isEqualDeep(this.createStreamInfoParams, Object.values(options))
@@ -285,7 +241,7 @@ export default class LiblslAdapterTest extends AbstractLslTest {
285
241
  sample: expected,
286
242
  timestamp,
287
243
  }
288
- this.lsl.pushSampleFloatTimestamp(options)
244
+ this.instance.pushSampleFloatTimestamp(options)
289
245
 
290
246
  assert.isEqualDeep(this.pushSampleFloatTimestampParams, [
291
247
  this.fakeOutlet,
@@ -303,7 +259,7 @@ export default class LiblslAdapterTest extends AbstractLslTest {
303
259
  sample: expected,
304
260
  timestamp,
305
261
  }
306
- this.lsl.pushSampleStringTimestamp(options)
262
+ this.instance.pushSampleStringTimestamp(options)
307
263
  assert.isEqual(
308
264
  this.pushSampleStringTimestampParams?.[0],
309
265
  this.fakeOutlet
@@ -317,7 +273,7 @@ export default class LiblslAdapterTest extends AbstractLslTest {
317
273
  const info = this.createRandomStreamInfo()
318
274
  const channel: LslChannel = this.generateRandomChannelValues()
319
275
 
320
- this.lsl.appendChannelsToStreamInfo({
276
+ this.instance.appendChannelsToStreamInfo({
321
277
  info,
322
278
  channels: [channel],
323
279
  })
@@ -354,7 +310,7 @@ export default class LiblslAdapterTest extends AbstractLslTest {
354
310
  const channel1 = this.generateRandomChannelValues()
355
311
  const channel2 = this.generateRandomChannelValues()
356
312
 
357
- this.lsl.appendChannelsToStreamInfo({
313
+ this.instance.appendChannelsToStreamInfo({
358
314
  info,
359
315
  channels: [channel1, channel2],
360
316
  })
@@ -374,23 +330,23 @@ export default class LiblslAdapterTest extends AbstractLslTest {
374
330
  protected static async canDestroyOutlet() {
375
331
  const outlet = this.createRandomOutlet()
376
332
  const options = { outlet }
377
- this.lsl.destroyOutlet(options)
333
+ this.instance.destroyOutlet(options)
378
334
 
379
335
  assert.isEqualDeep(this.destroyOutletParams, Object.values(options))
380
336
  }
381
337
 
382
338
  @test()
383
339
  protected static async callingLocalClockTwiceReturnsDifferentTimestamps() {
384
- const t1 = this.lsl.localClock()
340
+ const t1 = this.instance.localClock()
385
341
  await this.wait(10)
386
- const t2 = this.lsl.localClock()
342
+ const t2 = this.instance.localClock()
387
343
  assert.isNotEqual(t1, t2)
388
344
  }
389
345
 
390
346
  @test()
391
347
  protected static async localClockBindingReceivesEmptyArray() {
392
348
  delete this.localClockParams
393
- this.lsl.localClock()
349
+ this.instance.localClock()
394
350
  assert.isEqualDeep(this.localClockParams, [])
395
351
  }
396
352
 
@@ -399,7 +355,7 @@ export default class LiblslAdapterTest extends AbstractLslTest {
399
355
  delete process.env.LIBLSL_PATH
400
356
 
401
357
  LiblslAdapter.resetInstance()
402
- this.lsl = LiblslAdapter.getInstance()
358
+ this.instance = LiblslAdapter.getInstance()
403
359
 
404
360
  assert.isEqual(
405
361
  this.ffiRsOpenOptions?.path,
@@ -415,20 +371,20 @@ export default class LiblslAdapterTest extends AbstractLslTest {
415
371
  }
416
372
 
417
373
  private static createRandomStreamInfo() {
418
- return this.lsl.createStreamInfo(
374
+ return this.instance.createStreamInfo(
419
375
  this.generateRandomCreateStreamInfoOptions()
420
376
  )
421
377
  }
422
378
 
423
379
  private static createRandomOutlet() {
424
380
  const options = this.createRandomOptions()
425
- const outlet = this.lsl.createOutlet(options)
381
+ const outlet = this.instance.createOutlet(options)
426
382
  return { options, outlet }
427
383
  }
428
384
 
429
385
  private static createRandomInlet() {
430
386
  const options = this.createRandomOptions()
431
- const inlet = this.lsl.createInlet(options)
387
+ const inlet = this.instance.createInlet(options)
432
388
  return { options, inlet }
433
389
  }
434
390
 
@@ -461,6 +417,10 @@ export default class LiblslAdapterTest extends AbstractLslTest {
461
417
  }
462
418
  }
463
419
 
420
+ private static generateFailedMessage() {
421
+ return `Loading the liblsl dylib failed! I tried to load it from ${process.env.LIBLSL_PATH}.`
422
+ }
423
+
464
424
  private static FakeBindings() {
465
425
  return {
466
426
  lsl_create_streaminfo: (params: any[]) => {
@@ -1,28 +1,34 @@
1
1
  import { randomInt } from 'crypto'
2
- import { assert, generateId, test } from '@sprucelabs/test-utils'
3
- import EventMarkerOutlet from '../../modules/EventMarkerOutlet'
4
- import { LslOutletOptions } from '../../modules/LslStreamOutlet'
2
+ import { assert, test } from '@sprucelabs/test-utils'
3
+ import generateId from '@neurodevs/generate-id'
4
+ import LslEventMarkerOutlet from '../../impl/LslEventMarkerOutlet'
5
+ import { StreamOutletOptions } from '../../impl/LslStreamOutlet'
6
+ import SpyEventMarkerOutlet from '../../testDoubles/EventMarkerOutlet/SpyEventMarkerOutlet'
5
7
  import generateRandomOutletOptions from '../../testDoubles/generateRandomOutletOptions'
6
- import FakeLslOutlet from '../../testDoubles/LslOutlet/FakeLslOutlet'
7
- import SpyMarkerOutlet from '../../testDoubles/MarkerOutlet/SpyMarkerOutlet'
8
- import AbstractLslTest from '../AbstractLslTest'
8
+ import FakeStreamOutlet from '../../testDoubles/StreamOutlet/FakeStreamOutlet'
9
+ import AbstractPackageTest from '../AbstractPackageTest'
9
10
 
10
- export default class EventMarkerOutletTest extends AbstractLslTest {
11
- private static instance: SpyMarkerOutlet
11
+ export default class EventMarkerOutletTest extends AbstractPackageTest {
12
+ private static instance: SpyEventMarkerOutlet
12
13
 
13
14
  protected static async beforeEach() {
14
15
  await super.beforeEach()
15
16
 
16
17
  this.setFakeLiblsl()
17
- this.setFakeLslOutlet()
18
- this.setSpyMarkerOutlet()
18
+ this.setFakeStreamOutlet()
19
+ this.setSpyEventMarkerOutlet()
19
20
 
20
- this.instance = await this.EventMarkerOutlet()
21
+ this.instance = await this.LslEventMarkerOutlet()
22
+ }
23
+
24
+ @test()
25
+ protected static async createsInstance() {
26
+ assert.isTruthy(this.instance, 'Failed to create instance!')
21
27
  }
22
28
 
23
29
  @test()
24
30
  protected static async loadsWithEventMarkerSpecificOptions() {
25
- assert.isEqualDeep(FakeLslOutlet.callsToConstructor[0].options, {
31
+ assert.isEqualDeep(FakeStreamOutlet.callsToConstructor[0].options, {
26
32
  name: 'Event markers',
27
33
  type: 'Markers',
28
34
  channelNames: ['Markers'],
@@ -39,9 +45,12 @@ export default class EventMarkerOutletTest extends AbstractLslTest {
39
45
  @test()
40
46
  protected static async canOverrideDefaultOptions() {
41
47
  const options = generateRandomOutletOptions()
42
- await this.EventMarkerOutlet(options)
48
+ await this.LslEventMarkerOutlet(options)
43
49
 
44
- assert.isEqualDeep(FakeLslOutlet.callsToConstructor[1].options, options)
50
+ assert.isEqualDeep(
51
+ FakeStreamOutlet.callsToConstructor[1].options,
52
+ options
53
+ )
45
54
  }
46
55
 
47
56
  @test()
@@ -52,7 +61,7 @@ export default class EventMarkerOutletTest extends AbstractLslTest {
52
61
  const marker = markers[0]
53
62
 
54
63
  assert.isEqual(
55
- FakeLslOutlet.callsToPushSample[0][0],
64
+ FakeStreamOutlet.callsToPushSample[0][0],
56
65
  marker.name,
57
66
  'Pushed the wrong marker!'
58
67
  )
@@ -64,7 +73,7 @@ export default class EventMarkerOutletTest extends AbstractLslTest {
64
73
  protected static async pushingTwoMarkersIncrementsHitCountAndWaitTimeTwice() {
65
74
  const markers = await this.pushTotalMarkers(2)
66
75
 
67
- assert.isEqual(FakeLslOutlet.callsToPushSample.length, 2)
76
+ assert.isEqual(FakeStreamOutlet.callsToPushSample.length, 2)
68
77
 
69
78
  assert.isEqual(
70
79
  this.instance.totalWaitTimeMs,
@@ -78,7 +87,7 @@ export default class EventMarkerOutletTest extends AbstractLslTest {
78
87
  protected static async canStopEventMarkersMidPush(bailIdx: number) {
79
88
  let hitCount = 0
80
89
 
81
- const outlet = this.instance.getLslOutlet()
90
+ const outlet = this.instance.getStreamOutlet()
82
91
 
83
92
  outlet.pushSample = () => {
84
93
  hitCount += 1
@@ -98,7 +107,7 @@ export default class EventMarkerOutletTest extends AbstractLslTest {
98
107
 
99
108
  let hitCount = 0
100
109
 
101
- const outlet = this.instance.getLslOutlet()
110
+ const outlet = this.instance.getStreamOutlet()
102
111
 
103
112
  outlet.pushSample = () => {
104
113
  hitCount++
@@ -127,7 +136,7 @@ export default class EventMarkerOutletTest extends AbstractLslTest {
127
136
  void this.pushTotalMarkers(2, 100)
128
137
  this.instance.stop()
129
138
 
130
- this.lslOutlet.pushSample = () =>
139
+ this.streamOutlet.pushSample = () =>
131
140
  assert.fail('Should not have been called')
132
141
  }
133
142
 
@@ -136,16 +145,16 @@ export default class EventMarkerOutletTest extends AbstractLslTest {
136
145
  const markerName = generateId()
137
146
  this.instance.pushMarker(markerName)
138
147
 
139
- assert.isEqual(FakeLslOutlet.callsToPushSample[0][0], markerName)
148
+ assert.isEqual(FakeStreamOutlet.callsToPushSample[0][0], markerName)
140
149
  }
141
150
 
142
- private static get lslOutlet() {
143
- return this.instance.getLslOutlet()
151
+ private static get streamOutlet() {
152
+ return this.instance.getStreamOutlet()
144
153
  }
145
154
 
146
155
  private static async setupOutlet() {
147
- EventMarkerOutlet.Class = EventMarkerOutlet as any
148
- this.instance = await this.EventMarkerOutlet()
156
+ LslEventMarkerOutlet.Class = LslEventMarkerOutlet as any
157
+ this.instance = await this.LslEventMarkerOutlet()
149
158
  }
150
159
 
151
160
  private static async pushTotalMarkers(total: number, durationMs?: number) {
@@ -165,9 +174,11 @@ export default class EventMarkerOutletTest extends AbstractLslTest {
165
174
  }
166
175
  }
167
176
 
168
- private static async EventMarkerOutlet(
169
- options?: Partial<LslOutletOptions>
177
+ private static async LslEventMarkerOutlet(
178
+ options?: Partial<StreamOutletOptions>
170
179
  ) {
171
- return (await EventMarkerOutlet.Create(options)) as SpyMarkerOutlet
180
+ return (await LslEventMarkerOutlet.Create(
181
+ options
182
+ )) as SpyEventMarkerOutlet
172
183
  }
173
184
  }
@@ -1,10 +1,11 @@
1
- import { test, assert, generateId, errorAssert } from '@sprucelabs/test-utils'
1
+ import { test, assert } from '@sprucelabs/test-utils'
2
+ import generateId from '@neurodevs/generate-id'
2
3
  import { CHANNEL_FORMATS } from '../../consts'
3
- import LslStreamInfo, { StreamInfoOptions } from '../../modules/LslStreamInfo'
4
+ import LslStreamInfo, { StreamInfoOptions } from '../../impl/LslStreamInfo'
4
5
  import SpyStreamInfo from '../../testDoubles/StreamInfo/SpyStreamInfo'
5
- import AbstractLslTest from '../AbstractLslTest'
6
+ import AbstractPackageTest from '../AbstractPackageTest'
6
7
 
7
- export default class LslStreamInfoTest extends AbstractLslTest {
8
+ export default class LslStreamInfoTest extends AbstractPackageTest {
8
9
  private static instance: SpyStreamInfo
9
10
 
10
11
  protected static async beforeEach() {
@@ -16,19 +17,8 @@ export default class LslStreamInfoTest extends AbstractLslTest {
16
17
  }
17
18
 
18
19
  @test()
19
- protected static async canCreateLslStreamInfo() {
20
- assert.isTruthy(this.instance, 'Instance should be created!')
21
- }
22
-
23
- @test()
24
- protected static async throwsWithMissingRequiredOptions() {
25
- const err = assert.doesThrow(
26
- // @ts-ignore
27
- () => LslStreamInfo.Create()
28
- )
29
- errorAssert.assertError(err, 'MISSING_PARAMETERS', {
30
- parameters: ['channelNames', 'channelFormat', 'sampleRate'],
31
- })
20
+ protected static async createsInstance() {
21
+ assert.isTruthy(this.instance, 'Failed to create instance!')
32
22
  }
33
23
 
34
24
  @test()