@neurodevs/node-lsl 10.2.2 → 11.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/README.md +17 -38
  2. package/build/__tests__/{AbstractNodeLslTest.d.ts → AbstractLslTest.d.ts} +5 -4
  3. package/build/__tests__/{AbstractNodeLslTest.js → AbstractLslTest.js} +30 -24
  4. package/build/__tests__/AbstractLslTest.js.map +1 -0
  5. package/build/__tests__/EventMarkerOutlet.test.d.ts +18 -0
  6. package/build/__tests__/EventMarkerOutlet.test.js +144 -0
  7. package/build/__tests__/EventMarkerOutlet.test.js.map +1 -0
  8. package/build/__tests__/{Liblsl.test.d.ts → LiblslAdapter.test.d.ts} +2 -2
  9. package/build/__tests__/{Liblsl.test.js → LiblslAdapter.test.js} +43 -75
  10. package/build/__tests__/LiblslAdapter.test.js.map +1 -0
  11. package/build/__tests__/LslStreamInfo.test.d.ts +3 -3
  12. package/build/__tests__/LslStreamInfo.test.js +3 -3
  13. package/build/__tests__/LslStreamInfo.test.js.map +1 -1
  14. package/build/__tests__/{LslInlet.test.d.ts → LslStreamInlet.test.d.ts} +4 -4
  15. package/build/__tests__/{LslInlet.test.js → LslStreamInlet.test.js} +17 -17
  16. package/build/__tests__/LslStreamInlet.test.js.map +1 -0
  17. package/build/__tests__/{LslOutlet.test.d.ts → LslStreamOutlet.test.d.ts} +3 -3
  18. package/build/__tests__/{LslOutlet.test.js → LslStreamOutlet.test.js} +45 -41
  19. package/build/__tests__/LslStreamOutlet.test.js.map +1 -0
  20. package/build/{components/Liblsl.d.ts → adapters/LiblslAdapter.d.ts} +1 -1
  21. package/build/{components/Liblsl.js → adapters/LiblslAdapter.js} +7 -7
  22. package/build/adapters/LiblslAdapter.js.map +1 -0
  23. package/build/components/EventMarkerOutlet.d.ts +20 -0
  24. package/build/components/{TimeMarkerOutlet.js → EventMarkerOutlet.js} +19 -25
  25. package/build/components/EventMarkerOutlet.js.map +1 -0
  26. package/build/components/LiblslAdapter.d.ts +24 -0
  27. package/build/components/LiblslAdapter.js +198 -0
  28. package/build/components/LiblslAdapter.js.map +1 -0
  29. package/build/components/LslStreamInfo.js +2 -2
  30. package/build/components/LslStreamInfo.js.map +1 -1
  31. package/build/components/{LslInlet.d.ts → LslStreamInlet.d.ts} +4 -4
  32. package/build/components/{LslInlet.js → LslStreamInlet.js} +5 -5
  33. package/build/components/LslStreamInlet.js.map +1 -0
  34. package/build/components/{LslOutlet.d.ts → LslStreamOutlet.d.ts} +1 -1
  35. package/build/components/{LslOutlet.js → LslStreamOutlet.js} +5 -5
  36. package/build/components/LslStreamOutlet.js.map +1 -0
  37. package/build/index.d.ts +20 -19
  38. package/build/index.js +33 -28
  39. package/build/index.js.map +1 -1
  40. package/build/nodeLsl.types.d.ts +3 -3
  41. package/build/testDoubles/{FakeLiblsl.d.ts → Liblsl/FakeLiblsl.d.ts} +1 -1
  42. package/build/testDoubles/Liblsl/FakeLiblsl.js.map +1 -0
  43. package/build/testDoubles/LslInlet/SpyLslInlet.d.ts +7 -0
  44. package/build/testDoubles/{SpyLslInlet.js → LslInlet/SpyLslInlet.js} +2 -2
  45. package/build/testDoubles/LslInlet/SpyLslInlet.js.map +1 -0
  46. package/build/testDoubles/{FakeLslOutlet.d.ts → LslOutlet/FakeLslOutlet.d.ts} +3 -5
  47. package/build/testDoubles/{FakeLslOutlet.js → LslOutlet/FakeLslOutlet.js} +0 -4
  48. package/build/testDoubles/LslOutlet/FakeLslOutlet.js.map +1 -0
  49. package/build/testDoubles/MarkerOutlet/FakeMarkerOutlet.d.ts +12 -0
  50. package/build/testDoubles/MarkerOutlet/FakeMarkerOutlet.js +25 -0
  51. package/build/testDoubles/MarkerOutlet/FakeMarkerOutlet.js.map +1 -0
  52. package/build/testDoubles/{MockTimeMarkerOutlet.d.ts → MarkerOutlet/MockMarkerOutlet.d.ts} +3 -2
  53. package/build/testDoubles/{MockTimeMarkerOutlet.js → MarkerOutlet/MockMarkerOutlet.js} +3 -3
  54. package/build/testDoubles/MarkerOutlet/MockMarkerOutlet.js.map +1 -0
  55. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.d.ts +9 -0
  56. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.js +24 -0
  57. package/build/testDoubles/MarkerOutlet/SpyMarkerOutlet.js.map +1 -0
  58. package/build/testDoubles/{FakeStreamInfo.d.ts → StreamInfo/FakeStreamInfo.d.ts} +2 -2
  59. package/build/testDoubles/StreamInfo/FakeStreamInfo.js.map +1 -0
  60. package/build/testDoubles/StreamInfo/SpyStreamInfo.d.ts +9 -0
  61. package/build/testDoubles/{SpyLslStreamInfo.js → StreamInfo/SpyStreamInfo.js} +4 -4
  62. package/build/testDoubles/StreamInfo/SpyStreamInfo.js.map +1 -0
  63. package/build/testDoubles/generateRandomOutletOptions.d.ts +1 -1
  64. package/package.json +1 -1
  65. package/src/__tests__/AbstractLslTest.ts +58 -0
  66. package/src/__tests__/EventMarkerOutlet.test.ts +165 -0
  67. package/src/__tests__/{Liblsl.test.ts → LiblslAdapter.test.ts} +18 -22
  68. package/src/__tests__/LslStreamInfo.test.ts +12 -12
  69. package/src/__tests__/{LslInlet.test.ts → LslStreamInlet.test.ts} +11 -11
  70. package/src/__tests__/{LslOutlet.test.ts → LslStreamOutlet.test.ts} +28 -22
  71. package/src/{components/Liblsl.ts → adapters/LiblslAdapter.ts} +3 -3
  72. package/src/components/{TimeMarkerOutlet.ts → EventMarkerOutlet.ts} +23 -33
  73. package/src/components/LslStreamInfo.ts +2 -2
  74. package/src/components/{LslInlet.ts → LslStreamInlet.ts} +5 -5
  75. package/src/components/{LslOutlet.ts → LslStreamOutlet.ts} +3 -3
  76. package/src/index.ts +28 -19
  77. package/src/nodeLsl.types.ts +3 -3
  78. package/src/testDoubles/{FakeLiblsl.ts → Liblsl/FakeLiblsl.ts} +1 -1
  79. package/src/testDoubles/{SpyLslInlet.ts → LslInlet/SpyLslInlet.ts} +5 -3
  80. package/src/testDoubles/{FakeLslOutlet.ts → LslOutlet/FakeLslOutlet.ts} +3 -9
  81. package/src/testDoubles/MarkerOutlet/FakeMarkerOutlet.ts +32 -0
  82. package/src/testDoubles/{MockTimeMarkerOutlet.ts → MarkerOutlet/MockMarkerOutlet.ts} +3 -2
  83. package/src/testDoubles/MarkerOutlet/SpyMarkerOutlet.ts +24 -0
  84. package/src/testDoubles/{FakeStreamInfo.ts → StreamInfo/FakeStreamInfo.ts} +2 -2
  85. package/src/testDoubles/{SpyLslStreamInfo.ts → StreamInfo/SpyStreamInfo.ts} +4 -2
  86. package/src/testDoubles/generateRandomOutletOptions.ts +1 -1
  87. package/build/__tests__/AbstractNodeLslTest.js.map +0 -1
  88. package/build/__tests__/Liblsl.test.js.map +0 -1
  89. package/build/__tests__/LslInlet.test.js.map +0 -1
  90. package/build/__tests__/LslOutlet.test.js.map +0 -1
  91. package/build/__tests__/SpyLslStreamInfo.d.ts +0 -5
  92. package/build/__tests__/SpyLslStreamInfo.js +0 -17
  93. package/build/__tests__/SpyLslStreamInfo.js.map +0 -1
  94. package/build/__tests__/TimeMarkerOutlet.test.d.ts +0 -28
  95. package/build/__tests__/TimeMarkerOutlet.test.js +0 -165
  96. package/build/__tests__/TimeMarkerOutlet.test.js.map +0 -1
  97. package/build/components/Liblsl.js.map +0 -1
  98. package/build/components/LslInlet.js.map +0 -1
  99. package/build/components/LslOutlet.js.map +0 -1
  100. package/build/components/TimeMarkerOutlet.d.ts +0 -19
  101. package/build/components/TimeMarkerOutlet.js.map +0 -1
  102. package/build/demo.d.ts +0 -1
  103. package/build/demo.js +0 -42
  104. package/build/demo.js.map +0 -1
  105. package/build/testDoubles/FakeLiblsl.js.map +0 -1
  106. package/build/testDoubles/FakeLslOutlet.js.map +0 -1
  107. package/build/testDoubles/FakeLslStreamInfo.d.ts +0 -5
  108. package/build/testDoubles/FakeLslStreamInfo.js +0 -10
  109. package/build/testDoubles/FakeLslStreamInfo.js.map +0 -1
  110. package/build/testDoubles/FakeStreamInfo.js.map +0 -1
  111. package/build/testDoubles/FakeTimeMarkerOutlet.d.ts +0 -14
  112. package/build/testDoubles/FakeTimeMarkerOutlet.js +0 -30
  113. package/build/testDoubles/FakeTimeMarkerOutlet.js.map +0 -1
  114. package/build/testDoubles/MockTimeMarkerOutlet.js.map +0 -1
  115. package/build/testDoubles/SpyLslInlet.d.ts +0 -7
  116. package/build/testDoubles/SpyLslInlet.js.map +0 -1
  117. package/build/testDoubles/SpyLslStreamInfo.d.ts +0 -9
  118. package/build/testDoubles/SpyLslStreamInfo.js.map +0 -1
  119. package/build/testDoubles/SpyTimeMarkerOutlet.d.ts +0 -9
  120. package/build/testDoubles/SpyTimeMarkerOutlet.js +0 -19
  121. package/build/testDoubles/SpyTimeMarkerOutlet.js.map +0 -1
  122. package/src/__tests__/AbstractNodeLslTest.ts +0 -50
  123. package/src/__tests__/TimeMarkerOutlet.test.ts +0 -181
  124. package/src/demo.ts +0 -43
  125. package/src/testDoubles/FakeTimeMarkerOutlet.ts +0 -39
  126. package/src/testDoubles/SpyTimeMarkerOutlet.ts +0 -19
  127. /package/build/testDoubles/{FakeLiblsl.js → Liblsl/FakeLiblsl.js} +0 -0
  128. /package/build/testDoubles/{FakeStreamInfo.js → StreamInfo/FakeStreamInfo.js} +0 -0
package/README.md CHANGED
@@ -5,8 +5,8 @@ Lab Streaming Layer (LSL) for synchronized streaming of multi-modal, time-series
5
5
  - [Overview](#overview)
6
6
  - [Installation](#installation)
7
7
  - [Usage](#usage)
8
- - [LslOutlet](#lsloutlet)
9
- - [TimeMarkerOutlet](#timemarkeroutlet)
8
+ - [LslStreamOutlet](#lslstreamoutlet)
9
+ - [EventMarkerOutlet](#eventmarkeroutlet)
10
10
  - [Test Doubles](#test-doubles)
11
11
 
12
12
  ## Overview
@@ -37,14 +37,14 @@ LIBLSL_PATH=/opt/homebrew/Cellar/lsl/1.16.2/lib/liblsl.1.16.2.dylib
37
37
 
38
38
  ## Usage
39
39
 
40
- ### LslOutlet
40
+ ### LslStreamOutlet
41
41
 
42
42
  LSL is often used to stream EEG data over a network. For example, to instantiate an LSL outlet for the [Muse S 2nd generation](https://choosemuse.com/products/muse-s-gen-2) headband:
43
43
 
44
44
  ```typescript
45
- import { LslOutletImpl } from '@neurodevs/node-lsl'
45
+ import { LslStreamOutlet } from '@neurodevs/node-lsl'
46
46
 
47
- const outlet = LslOutletImpl.Outlet({
47
+ const instance = LslStreamOutlet.Create({
48
48
  name: 'Muse S (2nd gen)',
49
49
  type: 'EEG',
50
50
  channelNames: ['TP9', 'AF7', 'AF8', 'TP10', 'AUX'],
@@ -58,29 +58,18 @@ const outlet = LslOutletImpl.Outlet({
58
58
  })
59
59
 
60
60
  // Must be in async function
61
- await outlet.pushSample(...)
61
+ await instance.pushSample(...)
62
62
  ```
63
63
 
64
- ### TimeMarkerOutlet
64
+ ### EventMarkerOutlet
65
65
 
66
- LSL is also often used to push time markers that mark different phases of an experiment or session:
66
+ LSL is also often used to push event markers that mark different phases of an experiment or session. The `pushMarkers` method pushes an event marker, waits for a specified duration, then pushes the next marker. I recommend that each event marker has a duration of at least 100 ms so that LSL receives the markers in the right order.
67
67
 
68
68
  ```typescript
69
- import { TimeMarkerOutletImpl } from '@neurodevs/node-lsl'
69
+ import { EventMarkerOutlet } from '@neurodevs/node-lsl'
70
70
 
71
- const outlet = TimeMarkerOutletImpl.Outlet()
71
+ const instance = EventMarkerOutlet.Create()
72
72
 
73
- // Must be in async function
74
- await outlet.pushSample('phase-1-begin')
75
-
76
- // Wait for phase to end
77
-
78
- await outlet.pushSample('phase-1-end')
79
- ```
80
-
81
- There is also a `pushMarkers` method that pushes a time marker, waits for a specified duration, then pushes the next marker. I recommend that each time marker has a duration of at least 100 ms so that LSL receives the markers in the right order.
82
-
83
- ```typescript
84
73
  const markers = [
85
74
  { name: 'phase-1-begin', durationMs: 30 * 1000 },
86
75
  { name: 'phase-1-end', durationMs: 0.1 * 1000 },
@@ -89,38 +78,28 @@ const markers = [
89
78
  ]
90
79
 
91
80
  // Must be in async function, hangs until complete
92
- await outlet.pushMarkers(markers)
81
+ await instance.pushMarkers(markers)
93
82
  ```
94
83
 
95
- If you then want to stop the time marker outlet early, you simply do:
84
+ If you then want to stop the `EventMarkerOutlet` early, you simply do:
96
85
 
97
86
  ```typescript
98
- outlet.stop()
99
- ```
100
-
101
- You can optionally pass any LslOutlet options to the time marker outlet during instantiation. For example, if you want to override the type:
102
-
103
- ```typescript
104
- import { TimeMarkerOutletImpl } from '@neurodevs/node-lsl'
105
-
106
- const outlet = TimeMarkerOutletImpl.Outlet({
107
- type: 'custom-type'
108
- })
87
+ instance.stop()
109
88
  ```
110
89
 
111
90
  ## Test Doubles
112
91
 
113
92
  This package was developed using test-driven development (TDD). If you also follow TDD, you'll likely want test doubles to fake or mock certain behaviors for these classes.
114
93
 
115
- For example, the `MockTimeMarkerOutlet` class lets you test whether your application appropriately calls its methods without actually doing anything. Set this mock in your test code like this:
94
+ For example, the `MockMarkerOutlet` class lets you test whether your application appropriately calls its methods without actually doing anything. Set this mock in your test code like this:
116
95
 
117
96
  ```typescript
118
- import { TimeMarkerOutletImpl, MockTimeMarkerOutlet } from '@neurodevs/node-lsl'
97
+ import { EventMarkerOutlet, MockMarkerOutlet } from '@neurodevs/node-lsl'
119
98
 
120
99
  // In your tests / beforeEach
121
- TimeMarkerOutletImpl.Class = MockTimeMarkerOutlet
100
+ EventMarkerOutlet.Class = MockMarkerOutlet
122
101
 
123
- const mock = TimeMarkerOutletImpl.Outlet()
102
+ const mock = EventMarkerOutlet.Create()
124
103
 
125
104
  // Do something in your application that should start the outlet
126
105
 
@@ -1,13 +1,14 @@
1
1
  import AbstractSpruceTest from '@sprucelabs/test-utils';
2
- import FakeLiblsl from '../testDoubles/FakeLiblsl';
3
- export default class AbstractNodeLslTest extends AbstractSpruceTest {
2
+ import FakeLiblsl from '../testDoubles/Liblsl/FakeLiblsl';
3
+ export default class AbstractLslTest extends AbstractSpruceTest {
4
4
  protected static fakeLiblsl: FakeLiblsl;
5
5
  protected static beforeEach(): Promise<void>;
6
6
  protected static setFakeLiblsl(): void;
7
- protected static setSpyLslStreamInfo(): void;
7
+ protected static setSpyStreamInfo(): void;
8
8
  protected static setFakeStreamInfo(): void;
9
9
  protected static setSpyLslInlet(): void;
10
- protected static setSpyTimeMarkerOutlet(): void;
10
+ protected static setFakeLslOutlet(): void;
11
+ protected static setSpyMarkerOutlet(): void;
11
12
  protected static readonly name_: string;
12
13
  protected static readonly type: string;
13
14
  protected static readonly sourceId: string;
@@ -37,44 +37,50 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  const test_utils_1 = __importStar(require("@sprucelabs/test-utils"));
40
- const Liblsl_1 = __importDefault(require("../components/Liblsl"));
41
- const LslInlet_1 = __importDefault(require("../components/LslInlet"));
40
+ const LiblslAdapter_1 = __importDefault(require("../adapters/LiblslAdapter"));
41
+ const EventMarkerOutlet_1 = __importDefault(require("../components/EventMarkerOutlet"));
42
42
  const LslStreamInfo_1 = __importDefault(require("../components/LslStreamInfo"));
43
- const TimeMarkerOutlet_1 = __importDefault(require("../components/TimeMarkerOutlet"));
44
- const FakeLiblsl_1 = __importDefault(require("../testDoubles/FakeLiblsl"));
45
- const FakeStreamInfo_1 = __importDefault(require("../testDoubles/FakeStreamInfo"));
46
- const SpyLslInlet_1 = require("../testDoubles/SpyLslInlet");
47
- const SpyLslStreamInfo_1 = __importDefault(require("../testDoubles/SpyLslStreamInfo"));
48
- const SpyTimeMarkerOutlet_1 = __importDefault(require("../testDoubles/SpyTimeMarkerOutlet"));
49
- class AbstractNodeLslTest extends test_utils_1.default {
43
+ const LslStreamInlet_1 = __importDefault(require("../components/LslStreamInlet"));
44
+ const LslStreamOutlet_1 = __importDefault(require("../components/LslStreamOutlet"));
45
+ const FakeLiblsl_1 = __importDefault(require("../testDoubles/Liblsl/FakeLiblsl"));
46
+ const SpyLslInlet_1 = require("../testDoubles/LslInlet/SpyLslInlet");
47
+ const FakeLslOutlet_1 = __importDefault(require("../testDoubles/LslOutlet/FakeLslOutlet"));
48
+ const SpyMarkerOutlet_1 = __importDefault(require("../testDoubles/MarkerOutlet/SpyMarkerOutlet"));
49
+ const FakeStreamInfo_1 = __importDefault(require("../testDoubles/StreamInfo/FakeStreamInfo"));
50
+ const SpyStreamInfo_1 = __importDefault(require("../testDoubles/StreamInfo/SpyStreamInfo"));
51
+ class AbstractLslTest extends test_utils_1.default {
50
52
  static async beforeEach() {
51
53
  await super.beforeEach();
52
54
  this.setFakeLiblsl();
53
55
  }
54
56
  static setFakeLiblsl() {
55
57
  this.fakeLiblsl = new FakeLiblsl_1.default();
56
- Liblsl_1.default.setInstance(this.fakeLiblsl);
58
+ LiblslAdapter_1.default.setInstance(this.fakeLiblsl);
57
59
  }
58
- static setSpyLslStreamInfo() {
59
- LslStreamInfo_1.default.Class = SpyLslStreamInfo_1.default;
60
+ static setSpyStreamInfo() {
61
+ LslStreamInfo_1.default.Class = SpyStreamInfo_1.default;
60
62
  }
61
63
  static setFakeStreamInfo() {
62
64
  LslStreamInfo_1.default.Class = FakeStreamInfo_1.default;
63
65
  FakeStreamInfo_1.default.resetTestDouble();
64
66
  }
65
67
  static setSpyLslInlet() {
66
- LslInlet_1.default.Class = SpyLslInlet_1.SpyLslInlet;
68
+ LslStreamInlet_1.default.Class = SpyLslInlet_1.SpyLslInlet;
67
69
  }
68
- static setSpyTimeMarkerOutlet() {
69
- TimeMarkerOutlet_1.default.Class = SpyTimeMarkerOutlet_1.default;
70
+ static setFakeLslOutlet() {
71
+ LslStreamOutlet_1.default.Class = FakeLslOutlet_1.default;
72
+ FakeLslOutlet_1.default.resetTestDouble();
73
+ }
74
+ static setSpyMarkerOutlet() {
75
+ EventMarkerOutlet_1.default.Class = SpyMarkerOutlet_1.default;
70
76
  }
71
77
  }
72
- AbstractNodeLslTest.name_ = (0, test_utils_1.generateId)();
73
- AbstractNodeLslTest.type = (0, test_utils_1.generateId)();
74
- AbstractNodeLslTest.sourceId = (0, test_utils_1.generateId)();
75
- AbstractNodeLslTest.units = (0, test_utils_1.generateId)();
76
- AbstractNodeLslTest.channelNames = [(0, test_utils_1.generateId)(), (0, test_utils_1.generateId)()];
77
- AbstractNodeLslTest.chunkSize = Math.floor(Math.random() * 100);
78
- AbstractNodeLslTest.maxBuffered = Math.floor(Math.random() * 100);
79
- exports.default = AbstractNodeLslTest;
80
- //# sourceMappingURL=AbstractNodeLslTest.js.map
78
+ AbstractLslTest.name_ = (0, test_utils_1.generateId)();
79
+ AbstractLslTest.type = (0, test_utils_1.generateId)();
80
+ AbstractLslTest.sourceId = (0, test_utils_1.generateId)();
81
+ AbstractLslTest.units = (0, test_utils_1.generateId)();
82
+ AbstractLslTest.channelNames = [(0, test_utils_1.generateId)(), (0, test_utils_1.generateId)()];
83
+ AbstractLslTest.chunkSize = Math.floor(Math.random() * 100);
84
+ AbstractLslTest.maxBuffered = Math.floor(Math.random() * 100);
85
+ exports.default = AbstractLslTest;
86
+ //# sourceMappingURL=AbstractLslTest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractLslTest.js","sourceRoot":"","sources":["../../src/__tests__/AbstractLslTest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qEAAuE;AACvE,8EAAqD;AACrD,wFAA+D;AAC/D,gFAAuD;AACvD,kFAAyD;AAEzD,oFAA2D;AAC3D,kFAAyD;AACzD,qEAAiE;AACjE,2FAAkE;AAClE,kGAAyE;AACzE,8FAAqE;AACrE,4FAAmE;AAEnE,MAAqB,eAAgB,SAAQ,oBAAkB;IAGjD,MAAM,CAAC,KAAK,CAAC,UAAU;QAC7B,MAAM,KAAK,CAAC,UAAU,EAAE,CAAA;QAExB,IAAI,CAAC,aAAa,EAAE,CAAA;IACxB,CAAC;IAES,MAAM,CAAC,aAAa;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,oBAAU,EAAE,CAAA;QAClC,uBAAa,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC9C,CAAC;IAES,MAAM,CAAC,gBAAgB;QAC7B,uBAAa,CAAC,KAAK,GAAG,uBAAa,CAAA;IACvC,CAAC;IAES,MAAM,CAAC,iBAAiB;QAC9B,uBAAa,CAAC,KAAK,GAAG,wBAAc,CAAA;QACpC,wBAAc,CAAC,eAAe,EAAE,CAAA;IACpC,CAAC;IAES,MAAM,CAAC,cAAc;QAC3B,wBAAc,CAAC,KAAK,GAAG,yBAAW,CAAA;IACtC,CAAC;IAES,MAAM,CAAC,gBAAgB;QAC7B,yBAAe,CAAC,KAAK,GAAG,uBAAa,CAAA;QACrC,uBAAa,CAAC,eAAe,EAAE,CAAA;IACnC,CAAC;IAES,MAAM,CAAC,kBAAkB;QAC/B,2BAAiB,CAAC,KAAK,GAAG,yBAAe,CAAA;IAC7C,CAAC;;AAEyB,qBAAK,GAAG,IAAA,uBAAU,GAAE,CAAA;AACpB,oBAAI,GAAG,IAAA,uBAAU,GAAE,CAAA;AACnB,wBAAQ,GAAG,IAAA,uBAAU,GAAE,CAAA;AACvB,qBAAK,GAAG,IAAA,uBAAU,GAAE,CAAA;AACpB,4BAAY,GAAG,CAAC,IAAA,uBAAU,GAAE,EAAE,IAAA,uBAAU,GAAE,CAAC,CAAA;AAC3C,yBAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAA;AAC3C,2BAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAA;kBA1CtD,eAAe"}
@@ -0,0 +1,18 @@
1
+ import AbstractLslTest from './AbstractLslTest';
2
+ export default class EventMarkerOutletTest extends AbstractLslTest {
3
+ private static instance;
4
+ protected static beforeEach(): Promise<void>;
5
+ protected static loadsWithEventMarkerSpecificOptions(): Promise<void>;
6
+ protected static canOverrideDefaultOptions(): Promise<void>;
7
+ protected static pushingSingleMarkerIncrementsHitCountAndWaitTime(): Promise<void>;
8
+ protected static pushingTwoMarkersIncrementsHitCountAndWaitTimeTwice(): Promise<void>;
9
+ protected static canStopEventMarkersMidPush(bailIdx: number): Promise<void>;
10
+ protected static canStartAgainAfterStopping(): Promise<void>;
11
+ protected static doesNotWaitIfStopped(): Promise<void>;
12
+ protected static clearsTheTimeoutOnStop(): Promise<void>;
13
+ private static get lslOutlet();
14
+ private static setupOutlet;
15
+ private static pushTotalMarkers;
16
+ private static generateDurationMarker;
17
+ private static EventMarkerOutlet;
18
+ }
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const crypto_1 = require("crypto");
13
+ const test_utils_1 = require("@sprucelabs/test-utils");
14
+ const EventMarkerOutlet_1 = __importDefault(require("../components/EventMarkerOutlet"));
15
+ const generateRandomOutletOptions_1 = __importDefault(require("../testDoubles/generateRandomOutletOptions"));
16
+ const FakeLslOutlet_1 = __importDefault(require("../testDoubles/LslOutlet/FakeLslOutlet"));
17
+ const AbstractLslTest_1 = __importDefault(require("./AbstractLslTest"));
18
+ class EventMarkerOutletTest extends AbstractLslTest_1.default {
19
+ static async beforeEach() {
20
+ await super.beforeEach();
21
+ this.setFakeLiblsl();
22
+ this.setFakeLslOutlet();
23
+ this.setSpyMarkerOutlet();
24
+ this.instance = await this.EventMarkerOutlet();
25
+ }
26
+ static async loadsWithEventMarkerSpecificOptions() {
27
+ test_utils_1.assert.isEqualDeep(FakeLslOutlet_1.default.callsToConstructor[0].options, {
28
+ name: 'Event markers',
29
+ type: 'Markers',
30
+ channelNames: ['Markers'],
31
+ sampleRate: 0,
32
+ channelFormat: 'string',
33
+ sourceId: 'event-markers',
34
+ manufacturer: 'N/A',
35
+ unit: 'N/A',
36
+ chunkSize: 0,
37
+ maxBuffered: 0,
38
+ });
39
+ }
40
+ static async canOverrideDefaultOptions() {
41
+ const options = (0, generateRandomOutletOptions_1.default)();
42
+ await this.EventMarkerOutlet(options);
43
+ test_utils_1.assert.isEqualDeep(FakeLslOutlet_1.default.callsToConstructor[1].options, options);
44
+ }
45
+ static async pushingSingleMarkerIncrementsHitCountAndWaitTime() {
46
+ const markers = [this.generateDurationMarker()];
47
+ await this.instance.pushMarkers(markers);
48
+ const marker = markers[0];
49
+ test_utils_1.assert.isEqual(FakeLslOutlet_1.default.callsToPushSample[0][0], marker.name, 'Pushed the wrong marker!');
50
+ test_utils_1.assert.isEqual(this.instance.totalWaitTimeMs, marker.durationMs);
51
+ }
52
+ static async pushingTwoMarkersIncrementsHitCountAndWaitTimeTwice() {
53
+ const markers = await this.pushTotalMarkers(2);
54
+ test_utils_1.assert.isEqual(FakeLslOutlet_1.default.callsToPushSample.length, 2);
55
+ test_utils_1.assert.isEqual(this.instance.totalWaitTimeMs, markers[0].durationMs + markers[1].durationMs);
56
+ }
57
+ static async canStopEventMarkersMidPush(bailIdx) {
58
+ let hitCount = 0;
59
+ const outlet = this.instance.getLslOutlet();
60
+ outlet.pushSample = () => {
61
+ hitCount += 1;
62
+ if (hitCount === bailIdx) {
63
+ this.instance.stop();
64
+ }
65
+ };
66
+ await this.pushTotalMarkers(10);
67
+ test_utils_1.assert.isEqual(hitCount, bailIdx);
68
+ }
69
+ static async canStartAgainAfterStopping() {
70
+ this.instance.stop();
71
+ let hitCount = 0;
72
+ const outlet = this.instance.getLslOutlet();
73
+ outlet.pushSample = () => {
74
+ hitCount++;
75
+ };
76
+ await this.pushTotalMarkers(10);
77
+ test_utils_1.assert.isEqual(hitCount, 10);
78
+ }
79
+ static async doesNotWaitIfStopped() {
80
+ await this.setupOutlet();
81
+ const startMs = Date.now();
82
+ const promise = this.pushTotalMarkers(2, 1000);
83
+ this.instance.stop();
84
+ await promise;
85
+ const endMs = Date.now();
86
+ test_utils_1.assert.isBelow(endMs - startMs, 10);
87
+ }
88
+ static async clearsTheTimeoutOnStop() {
89
+ void this.pushTotalMarkers(2, 100);
90
+ this.instance.stop();
91
+ this.lslOutlet.pushSample = () => test_utils_1.assert.fail('Should not have been called');
92
+ }
93
+ static get lslOutlet() {
94
+ return this.instance.getLslOutlet();
95
+ }
96
+ static async setupOutlet() {
97
+ EventMarkerOutlet_1.default.Class = EventMarkerOutlet_1.default;
98
+ this.instance = await this.EventMarkerOutlet();
99
+ }
100
+ static async pushTotalMarkers(total, durationMs) {
101
+ const markers = new Array(total)
102
+ .fill(null)
103
+ .map(() => this.generateDurationMarker(durationMs));
104
+ await this.instance.pushMarkers(markers);
105
+ return markers;
106
+ }
107
+ static generateDurationMarker(durationMs) {
108
+ return {
109
+ name: (0, test_utils_1.generateId)(),
110
+ durationMs: durationMs ?? (0, crypto_1.randomInt)(100, 1000),
111
+ };
112
+ }
113
+ static async EventMarkerOutlet(options) {
114
+ return (await EventMarkerOutlet_1.default.Create(options));
115
+ }
116
+ }
117
+ exports.default = EventMarkerOutletTest;
118
+ __decorate([
119
+ (0, test_utils_1.test)()
120
+ ], EventMarkerOutletTest, "loadsWithEventMarkerSpecificOptions", null);
121
+ __decorate([
122
+ (0, test_utils_1.test)()
123
+ ], EventMarkerOutletTest, "canOverrideDefaultOptions", null);
124
+ __decorate([
125
+ (0, test_utils_1.test)()
126
+ ], EventMarkerOutletTest, "pushingSingleMarkerIncrementsHitCountAndWaitTime", null);
127
+ __decorate([
128
+ (0, test_utils_1.test)()
129
+ ], EventMarkerOutletTest, "pushingTwoMarkersIncrementsHitCountAndWaitTimeTwice", null);
130
+ __decorate([
131
+ (0, test_utils_1.test)('can stop on the first marker', 1),
132
+ (0, test_utils_1.test)('can stop on the second marker', 2),
133
+ (0, test_utils_1.test)('can stop on the third marker', 3)
134
+ ], EventMarkerOutletTest, "canStopEventMarkersMidPush", null);
135
+ __decorate([
136
+ (0, test_utils_1.test)()
137
+ ], EventMarkerOutletTest, "canStartAgainAfterStopping", null);
138
+ __decorate([
139
+ (0, test_utils_1.test)()
140
+ ], EventMarkerOutletTest, "doesNotWaitIfStopped", null);
141
+ __decorate([
142
+ (0, test_utils_1.test)()
143
+ ], EventMarkerOutletTest, "clearsTheTimeoutOnStop", null);
144
+ //# sourceMappingURL=EventMarkerOutlet.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventMarkerOutlet.test.js","sourceRoot":"","sources":["../../src/__tests__/EventMarkerOutlet.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import AbstractSpruceTest from '@sprucelabs/test-utils';
2
- export default class LiblslTest extends AbstractSpruceTest {
1
+ import AbstractLslTest from './AbstractLslTest';
2
+ export default class LiblslAdapterTest extends AbstractLslTest {
3
3
  private static lsl;
4
4
  private static libraryPath?;
5
5
  private static libraryOptions?;
@@ -1,52 +1,20 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
2
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
3
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
4
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
5
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
23
7
  };
24
- var __importStar = (this && this.__importStar) || (function () {
25
- var ownKeys = function(o) {
26
- ownKeys = Object.getOwnPropertyNames || function (o) {
27
- var ar = [];
28
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
- return ar;
30
- };
31
- return ownKeys(o);
32
- };
33
- return function (mod) {
34
- if (mod && mod.__esModule) return mod;
35
- var result = {};
36
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
- __setModuleDefault(result, mod);
38
- return result;
39
- };
40
- })();
41
8
  var __importDefault = (this && this.__importDefault) || function (mod) {
42
9
  return (mod && mod.__esModule) ? mod : { "default": mod };
43
10
  };
44
11
  Object.defineProperty(exports, "__esModule", { value: true });
45
12
  const crypto_1 = require("crypto");
46
- const test_utils_1 = __importStar(require("@sprucelabs/test-utils"));
47
- const Liblsl_1 = __importDefault(require("../components/Liblsl"));
48
- const FakeLiblsl_1 = __importDefault(require("../testDoubles/FakeLiblsl"));
49
- class LiblslTest extends test_utils_1.default {
13
+ const test_utils_1 = require("@sprucelabs/test-utils");
14
+ const LiblslAdapter_1 = __importDefault(require("../adapters/LiblslAdapter"));
15
+ const FakeLiblsl_1 = __importDefault(require("../testDoubles/Liblsl/FakeLiblsl"));
16
+ const AbstractLslTest_1 = __importDefault(require("./AbstractLslTest"));
17
+ class LiblslAdapterTest extends AbstractLslTest_1.default {
50
18
  static async beforeEach() {
51
19
  await super.beforeEach();
52
20
  delete this.libraryPath;
@@ -70,23 +38,23 @@ class LiblslTest extends test_utils_1.default {
70
38
  this.shouldThrowWhenCreatingBindings = false;
71
39
  this.appendChildHitCount = 0;
72
40
  delete this.ffiRsOpenOptions;
73
- Liblsl_1.default.ffiRsOpen = (options) => {
41
+ LiblslAdapter_1.default.ffiRsOpen = (options) => {
74
42
  this.ffiRsOpenOptions = options;
75
43
  };
76
- Liblsl_1.default.ffiRsDefine = (options) => {
44
+ LiblslAdapter_1.default.ffiRsDefine = (options) => {
77
45
  this.ffiRsDefineOptions = options;
78
46
  if (this.shouldThrowWhenCreatingBindings) {
79
47
  throw new Error('Failed to create bindings!');
80
48
  }
81
49
  return this.fakeBindings;
82
50
  };
83
- Liblsl_1.default.resetInstance();
84
- this.lsl = Liblsl_1.default.getInstance();
51
+ LiblslAdapter_1.default.resetInstance();
52
+ this.lsl = LiblslAdapter_1.default.getInstance();
85
53
  }
86
54
  static async throwsWhenBindingsFailToLoad() {
87
55
  this.shouldThrowWhenCreatingBindings = true;
88
- Liblsl_1.default.resetInstance();
89
- const err = test_utils_1.assert.doesThrow(() => Liblsl_1.default.getInstance());
56
+ LiblslAdapter_1.default.resetInstance();
57
+ const err = test_utils_1.assert.doesThrow(() => LiblslAdapter_1.default.getInstance());
90
58
  test_utils_1.errorAssert.assertError(err, 'FAILED_TO_LOAD_LIBLSL', {
91
59
  liblslPath: process.env.LIBLSL_PATH,
92
60
  });
@@ -141,17 +109,17 @@ class LiblslTest extends test_utils_1.default {
141
109
  });
142
110
  }
143
111
  static async worksAsASingleton() {
144
- const liblsl = Liblsl_1.default.getInstance();
112
+ const liblsl = LiblslAdapter_1.default.getInstance();
145
113
  //@ts-ignore
146
- test_utils_1.assert.isInstanceOf(liblsl, Liblsl_1.default);
114
+ test_utils_1.assert.isInstanceOf(liblsl, LiblslAdapter_1.default);
147
115
  }
148
116
  static async singletonIsTheSame() {
149
- test_utils_1.assert.isEqual(Liblsl_1.default.getInstance(), Liblsl_1.default.getInstance());
117
+ test_utils_1.assert.isEqual(LiblslAdapter_1.default.getInstance(), LiblslAdapter_1.default.getInstance());
150
118
  }
151
119
  static canSetInstance() {
152
120
  const fake = new FakeLiblsl_1.default();
153
- Liblsl_1.default.setInstance(fake);
154
- test_utils_1.assert.isEqual(Liblsl_1.default.getInstance(), fake);
121
+ LiblslAdapter_1.default.setInstance(fake);
122
+ test_utils_1.assert.isEqual(LiblslAdapter_1.default.getInstance(), fake);
155
123
  }
156
124
  static async createsExpectedBindingsWithFfiRs() {
157
125
  test_utils_1.assert.isEqualDeep(this.ffiRsDefineOptions, {
@@ -327,8 +295,8 @@ class LiblslTest extends test_utils_1.default {
327
295
  }
328
296
  static async defaultsToMacOsPath() {
329
297
  delete process.env.LIBLSL_PATH;
330
- Liblsl_1.default.resetInstance();
331
- this.lsl = Liblsl_1.default.getInstance();
298
+ LiblslAdapter_1.default.resetInstance();
299
+ this.lsl = LiblslAdapter_1.default.getInstance();
332
300
  test_utils_1.assert.isEqual(this.ffiRsOpenOptions?.path, '/opt/homebrew/Cellar/lsl/1.16.2/lib/liblsl.1.16.2.dylib');
333
301
  }
334
302
  static async canCreateInletWithRequiredParams() {
@@ -423,72 +391,72 @@ class LiblslTest extends test_utils_1.default {
423
391
  };
424
392
  }
425
393
  }
426
- LiblslTest.appendChildParams = [];
427
- exports.default = LiblslTest;
394
+ LiblslAdapterTest.appendChildParams = [];
395
+ exports.default = LiblslAdapterTest;
428
396
  __decorate([
429
397
  (0, test_utils_1.test)()
430
- ], LiblslTest, "throwsWhenBindingsFailToLoad", null);
398
+ ], LiblslAdapterTest, "throwsWhenBindingsFailToLoad", null);
431
399
  __decorate([
432
400
  (0, test_utils_1.test)()
433
- ], LiblslTest, "callsOpenOnFfiRs", null);
401
+ ], LiblslAdapterTest, "callsOpenOnFfiRs", null);
434
402
  __decorate([
435
403
  (0, test_utils_1.test)()
436
- ], LiblslTest, "throwsWhenCreateStreamInfoIsMissingRequiredParams", null);
404
+ ], LiblslAdapterTest, "throwsWhenCreateStreamInfoIsMissingRequiredParams", null);
437
405
  __decorate([
438
406
  (0, test_utils_1.test)()
439
- ], LiblslTest, "throwsWhenAppendChannelsIsMissingRequiredParams", null);
407
+ ], LiblslAdapterTest, "throwsWhenAppendChannelsIsMissingRequiredParams", null);
440
408
  __decorate([
441
409
  (0, test_utils_1.test)()
442
- ], LiblslTest, "throwsWhenCreateOutletIsMissingRequiredParams", null);
410
+ ], LiblslAdapterTest, "throwsWhenCreateOutletIsMissingRequiredParams", null);
443
411
  __decorate([
444
412
  (0, test_utils_1.test)()
445
- ], LiblslTest, "throwsWhenPushSampleFloatTimestampIsMissingRequiredParams", null);
413
+ ], LiblslAdapterTest, "throwsWhenPushSampleFloatTimestampIsMissingRequiredParams", null);
446
414
  __decorate([
447
415
  (0, test_utils_1.test)()
448
- ], LiblslTest, "throwsWhenPushSampleStringTimestampIsMissingRequiredParams", null);
416
+ ], LiblslAdapterTest, "throwsWhenPushSampleStringTimestampIsMissingRequiredParams", null);
449
417
  __decorate([
450
418
  (0, test_utils_1.test)()
451
- ], LiblslTest, "worksAsASingleton", null);
419
+ ], LiblslAdapterTest, "worksAsASingleton", null);
452
420
  __decorate([
453
421
  (0, test_utils_1.test)()
454
- ], LiblslTest, "singletonIsTheSame", null);
422
+ ], LiblslAdapterTest, "singletonIsTheSame", null);
455
423
  __decorate([
456
424
  (0, test_utils_1.test)()
457
- ], LiblslTest, "canSetInstance", null);
425
+ ], LiblslAdapterTest, "canSetInstance", null);
458
426
  __decorate([
459
427
  (0, test_utils_1.test)()
460
- ], LiblslTest, "createsExpectedBindingsWithFfiRs", null);
428
+ ], LiblslAdapterTest, "createsExpectedBindingsWithFfiRs", null);
461
429
  __decorate([
462
430
  (0, test_utils_1.test)()
463
- ], LiblslTest, "canCreateStreamInfoWithRequiredParams", null);
431
+ ], LiblslAdapterTest, "canCreateStreamInfoWithRequiredParams", null);
464
432
  __decorate([
465
433
  (0, test_utils_1.test)()
466
- ], LiblslTest, "canCreateOutletWithRequiredParams", null);
434
+ ], LiblslAdapterTest, "canCreateOutletWithRequiredParams", null);
467
435
  __decorate([
468
436
  (0, test_utils_1.test)()
469
- ], LiblslTest, "canPushFloatSample", null);
437
+ ], LiblslAdapterTest, "canPushFloatSample", null);
470
438
  __decorate([
471
439
  (0, test_utils_1.test)()
472
- ], LiblslTest, "canPushStringSample", null);
440
+ ], LiblslAdapterTest, "canPushStringSample", null);
473
441
  __decorate([
474
442
  (0, test_utils_1.test)()
475
- ], LiblslTest, "addingSingleChannelGetsDescription", null);
443
+ ], LiblslAdapterTest, "addingSingleChannelGetsDescription", null);
476
444
  __decorate([
477
445
  (0, test_utils_1.test)()
478
- ], LiblslTest, "addingMultpleChannelsAddsChildrenToChannelsChild", null);
446
+ ], LiblslAdapterTest, "addingMultpleChannelsAddsChildrenToChannelsChild", null);
479
447
  __decorate([
480
448
  (0, test_utils_1.test)()
481
- ], LiblslTest, "canDestroyOutlet", null);
449
+ ], LiblslAdapterTest, "canDestroyOutlet", null);
482
450
  __decorate([
483
451
  (0, test_utils_1.test)()
484
- ], LiblslTest, "callingLocalClockTwiceReturnsDifferentTimestamps", null);
452
+ ], LiblslAdapterTest, "callingLocalClockTwiceReturnsDifferentTimestamps", null);
485
453
  __decorate([
486
454
  (0, test_utils_1.test)()
487
- ], LiblslTest, "localClockBindingReceivesEmptyArray", null);
455
+ ], LiblslAdapterTest, "localClockBindingReceivesEmptyArray", null);
488
456
  __decorate([
489
457
  (0, test_utils_1.test)()
490
- ], LiblslTest, "defaultsToMacOsPath", null);
458
+ ], LiblslAdapterTest, "defaultsToMacOsPath", null);
491
459
  __decorate([
492
460
  (0, test_utils_1.test)()
493
- ], LiblslTest, "canCreateInletWithRequiredParams", null);
494
- //# sourceMappingURL=Liblsl.test.js.map
461
+ ], LiblslAdapterTest, "canCreateInletWithRequiredParams", null);
462
+ //# sourceMappingURL=LiblslAdapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiblslAdapter.test.js","sourceRoot":"","sources":["../../src/__tests__/LiblslAdapter.test.ts"],"names":[],"mappings":"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"}