effect-web-midi 0.2.3

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 (232) hide show
  1. package/README.md +276 -0
  2. package/dist/index.js +2 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/src/EMIDIAccess.js +129 -0
  5. package/dist/src/EMIDIAccess.js.map +1 -0
  6. package/dist/src/EMIDIInput.js +226 -0
  7. package/dist/src/EMIDIInput.js.map +1 -0
  8. package/dist/src/EMIDIOutput.js +227 -0
  9. package/dist/src/EMIDIOutput.js.map +1 -0
  10. package/dist/src/EMIDIPort.js +218 -0
  11. package/dist/src/EMIDIPort.js.map +1 -0
  12. package/dist/src/MIDIErrors.js +4 -0
  13. package/dist/src/MIDIErrors.js.map +1 -0
  14. package/dist/src/MIDIEventStreams.js +2 -0
  15. package/dist/src/MIDIEventStreams.js.map +1 -0
  16. package/dist/src/Parsing.js +2 -0
  17. package/dist/src/Parsing.js.map +1 -0
  18. package/dist/src/StreamMaker.js +1 -0
  19. package/dist/src/StreamMaker.js.map +1 -0
  20. package/dist/src/Util.js +2 -0
  21. package/dist/src/Util.js.map +1 -0
  22. package/dist/src/index.js +10 -0
  23. package/dist/src/index.js.map +1 -0
  24. package/dist/src/internal/EMIDIAccess.js +634 -0
  25. package/dist/src/internal/EMIDIAccess.js.map +1 -0
  26. package/dist/src/internal/EMIDIInput.js +66 -0
  27. package/dist/src/internal/EMIDIInput.js.map +1 -0
  28. package/dist/src/internal/EMIDIOutput.js +120 -0
  29. package/dist/src/internal/EMIDIOutput.js.map +1 -0
  30. package/dist/src/internal/EMIDIPort.js +125 -0
  31. package/dist/src/internal/EMIDIPort.js.map +1 -0
  32. package/dist/src/internal/MIDIErrors.js +190 -0
  33. package/dist/src/internal/MIDIErrors.js.map +1 -0
  34. package/dist/src/internal/MIDIEventStreams.js +41 -0
  35. package/dist/src/internal/MIDIEventStreams.js.map +1 -0
  36. package/dist/src/internal/MIDIPortMethodCalls/acquireReleasePortConnection/acquireReleasePortConnectionByPort.js +27 -0
  37. package/dist/src/internal/MIDIPortMethodCalls/acquireReleasePortConnection/acquireReleasePortConnectionByPort.js.map +1 -0
  38. package/dist/src/internal/MIDIPortMethodCalls/acquireReleasePortConnection/acquireReleasePortConnectionByPortIdAndAccess.js +19 -0
  39. package/dist/src/internal/MIDIPortMethodCalls/acquireReleasePortConnection/acquireReleasePortConnectionByPortIdAndAccess.js.map +1 -0
  40. package/dist/src/internal/MIDIPortMethodCalls/acquireReleasePortConnection/acquireReleasePortConnectionByPortIdInContext.js +16 -0
  41. package/dist/src/internal/MIDIPortMethodCalls/acquireReleasePortConnection/acquireReleasePortConnectionByPortIdInContext.js.map +1 -0
  42. package/dist/src/internal/MIDIPortMethodCalls/actOnPort.js +17 -0
  43. package/dist/src/internal/MIDIPortMethodCalls/actOnPort.js.map +1 -0
  44. package/dist/src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPort.js +27 -0
  45. package/dist/src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPort.js.map +1 -0
  46. package/dist/src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPortIdAndAccess.js +18 -0
  47. package/dist/src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPortIdAndAccess.js.map +1 -0
  48. package/dist/src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPortIdInContext.js +16 -0
  49. package/dist/src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPortIdInContext.js.map +1 -0
  50. package/dist/src/internal/MIDIPortMethodCalls/makeMIDIPortMethodCallerFactory.js +21 -0
  51. package/dist/src/internal/MIDIPortMethodCalls/makeMIDIPortMethodCallerFactory.js.map +1 -0
  52. package/dist/src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPort.js +34 -0
  53. package/dist/src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPort.js.map +1 -0
  54. package/dist/src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPortIdAndAccess.js +18 -0
  55. package/dist/src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPortIdAndAccess.js.map +1 -0
  56. package/dist/src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPortIdInContext.js +16 -0
  57. package/dist/src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPortIdInContext.js.map +1 -0
  58. package/dist/src/internal/Parsing.js +119 -0
  59. package/dist/src/internal/Parsing.js.map +1 -0
  60. package/dist/src/internal/StreamMaker.js +105 -0
  61. package/dist/src/internal/StreamMaker.js.map +1 -0
  62. package/dist/src/internal/Util.js +59 -0
  63. package/dist/src/internal/Util.js.map +1 -0
  64. package/dist/src/internal/getPortByPortId/getPortByPortIdAndAccess.js +53 -0
  65. package/dist/src/internal/getPortByPortId/getPortByPortIdAndAccess.js.map +1 -0
  66. package/dist/src/internal/getPortByPortId/getPortByPortIdInContext.js +18 -0
  67. package/dist/src/internal/getPortByPortId/getPortByPortIdInContext.js.map +1 -0
  68. package/dist/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPort.js +52 -0
  69. package/dist/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPort.js.map +1 -0
  70. package/dist/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPortIdAndAccess.js +21 -0
  71. package/dist/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPortIdAndAccess.js.map +1 -0
  72. package/dist/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPortIdInContext.js +21 -0
  73. package/dist/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPortIdInContext.js.map +1 -0
  74. package/dist/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPort.js +66 -0
  75. package/dist/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPort.js.map +1 -0
  76. package/dist/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPortIdAndAccess.js +61 -0
  77. package/dist/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPortIdAndAccess.js.map +1 -0
  78. package/dist/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPortIdInContext.js +68 -0
  79. package/dist/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPortIdInContext.js.map +1 -0
  80. package/dist/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPort.js +42 -0
  81. package/dist/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPort.js.map +1 -0
  82. package/dist/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPortIdAndAccess.js +43 -0
  83. package/dist/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPortIdAndAccess.js.map +1 -0
  84. package/dist/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPortIdInContext.js +33 -0
  85. package/dist/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPortIdInContext.js.map +1 -0
  86. package/dist/src/internal/mutablePropertyTools/getValueInRawPortFieldUnsafe.js +6 -0
  87. package/dist/src/internal/mutablePropertyTools/getValueInRawPortFieldUnsafe.js.map +1 -0
  88. package/dist/src/internal/mutablePropertyTools/matchMutablePortProperty/matchMutablePortPropertyByPort.js +46 -0
  89. package/dist/src/internal/mutablePropertyTools/matchMutablePortProperty/matchMutablePortPropertyByPort.js.map +1 -0
  90. package/dist/src/internal/mutablePropertyTools/matchMutablePortProperty/matchMutablePortPropertyByPortIdAndAccess.js +25 -0
  91. package/dist/src/internal/mutablePropertyTools/matchMutablePortProperty/matchMutablePortPropertyByPortIdAndAccess.js.map +1 -0
  92. package/dist/src/internal/mutablePropertyTools/matchMutablePortProperty/matchMutablePortPropertyByPortIdInContext.js +31 -0
  93. package/dist/src/internal/mutablePropertyTools/matchMutablePortProperty/matchMutablePortPropertyByPortIdInContext.js.map +1 -0
  94. package/dist-types/index.d.ts +2 -0
  95. package/dist-types/index.d.ts.map +1 -0
  96. package/dist-types/src/EMIDIAccess.d.ts +18 -0
  97. package/dist-types/src/EMIDIAccess.d.ts.map +1 -0
  98. package/dist-types/src/EMIDIInput.d.ts +26 -0
  99. package/dist-types/src/EMIDIInput.d.ts.map +1 -0
  100. package/dist-types/src/EMIDIOutput.d.ts +26 -0
  101. package/dist-types/src/EMIDIOutput.d.ts.map +1 -0
  102. package/dist-types/src/EMIDIPort.d.ts +26 -0
  103. package/dist-types/src/EMIDIPort.d.ts.map +1 -0
  104. package/dist-types/src/MIDIErrors.d.ts +2 -0
  105. package/dist-types/src/MIDIErrors.d.ts.map +1 -0
  106. package/dist-types/src/MIDIEventStreams.d.ts +2 -0
  107. package/dist-types/src/MIDIEventStreams.d.ts.map +1 -0
  108. package/dist-types/src/Parsing.d.ts +2 -0
  109. package/dist-types/src/Parsing.d.ts.map +1 -0
  110. package/dist-types/src/StreamMaker.d.ts +2 -0
  111. package/dist-types/src/StreamMaker.d.ts.map +1 -0
  112. package/dist-types/src/Util.d.ts +2 -0
  113. package/dist-types/src/Util.d.ts.map +1 -0
  114. package/dist-types/src/index.d.ts +10 -0
  115. package/dist-types/src/index.d.ts.map +1 -0
  116. package/dist-types/src/internal/EMIDIAccess.d.ts +551 -0
  117. package/dist-types/src/internal/EMIDIAccess.d.ts.map +1 -0
  118. package/dist-types/src/internal/EMIDIInput.d.ts +50 -0
  119. package/dist-types/src/internal/EMIDIInput.d.ts.map +1 -0
  120. package/dist-types/src/internal/EMIDIOutput.d.ts +95 -0
  121. package/dist-types/src/internal/EMIDIOutput.d.ts.map +1 -0
  122. package/dist-types/src/internal/EMIDIPort.d.ts +90 -0
  123. package/dist-types/src/internal/EMIDIPort.d.ts.map +1 -0
  124. package/dist-types/src/internal/MIDIErrors.d.ts +270 -0
  125. package/dist-types/src/internal/MIDIErrors.d.ts.map +1 -0
  126. package/dist-types/src/internal/MIDIEventStreams.d.ts +74 -0
  127. package/dist-types/src/internal/MIDIEventStreams.d.ts.map +1 -0
  128. package/dist-types/src/internal/MIDIPortMethodCalls/acquireReleasePortConnection/acquireReleasePortConnectionByPort.d.ts +16 -0
  129. package/dist-types/src/internal/MIDIPortMethodCalls/acquireReleasePortConnection/acquireReleasePortConnectionByPort.d.ts.map +1 -0
  130. package/dist-types/src/internal/MIDIPortMethodCalls/acquireReleasePortConnection/acquireReleasePortConnectionByPortIdAndAccess.d.ts +15 -0
  131. package/dist-types/src/internal/MIDIPortMethodCalls/acquireReleasePortConnection/acquireReleasePortConnectionByPortIdAndAccess.d.ts.map +1 -0
  132. package/dist-types/src/internal/MIDIPortMethodCalls/acquireReleasePortConnection/acquireReleasePortConnectionByPortIdInContext.d.ts +13 -0
  133. package/dist-types/src/internal/MIDIPortMethodCalls/acquireReleasePortConnection/acquireReleasePortConnectionByPortIdInContext.d.ts.map +1 -0
  134. package/dist-types/src/internal/MIDIPortMethodCalls/actOnPort.d.ts +11 -0
  135. package/dist-types/src/internal/MIDIPortMethodCalls/actOnPort.d.ts.map +1 -0
  136. package/dist-types/src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPort.d.ts +23 -0
  137. package/dist-types/src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPort.d.ts.map +1 -0
  138. package/dist-types/src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPortIdAndAccess.d.ts +15 -0
  139. package/dist-types/src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPortIdAndAccess.d.ts.map +1 -0
  140. package/dist-types/src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPortIdInContext.d.ts +13 -0
  141. package/dist-types/src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPortIdInContext.d.ts.map +1 -0
  142. package/dist-types/src/internal/MIDIPortMethodCalls/makeMIDIPortMethodCallerFactory.d.ts +15 -0
  143. package/dist-types/src/internal/MIDIPortMethodCalls/makeMIDIPortMethodCallerFactory.d.ts.map +1 -0
  144. package/dist-types/src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPort.d.ts +21 -0
  145. package/dist-types/src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPort.d.ts.map +1 -0
  146. package/dist-types/src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPortIdAndAccess.d.ts +15 -0
  147. package/dist-types/src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPortIdAndAccess.d.ts.map +1 -0
  148. package/dist-types/src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPortIdInContext.d.ts +13 -0
  149. package/dist-types/src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPortIdInContext.d.ts.map +1 -0
  150. package/dist-types/src/internal/Parsing.d.ts +110 -0
  151. package/dist-types/src/internal/Parsing.d.ts.map +1 -0
  152. package/dist-types/src/internal/StreamMaker.d.ts +204 -0
  153. package/dist-types/src/internal/StreamMaker.d.ts.map +1 -0
  154. package/dist-types/src/internal/Util.d.ts +33 -0
  155. package/dist-types/src/internal/Util.d.ts.map +1 -0
  156. package/dist-types/src/internal/getPortByPortId/getPortByPortIdAndAccess.d.ts +27 -0
  157. package/dist-types/src/internal/getPortByPortId/getPortByPortIdAndAccess.d.ts.map +1 -0
  158. package/dist-types/src/internal/getPortByPortId/getPortByPortIdInContext.d.ts +20 -0
  159. package/dist-types/src/internal/getPortByPortId/getPortByPortIdInContext.d.ts.map +1 -0
  160. package/dist-types/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPort.d.ts +76 -0
  161. package/dist-types/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPort.d.ts.map +1 -0
  162. package/dist-types/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPortIdAndAccess.d.ts +39 -0
  163. package/dist-types/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPortIdAndAccess.d.ts.map +1 -0
  164. package/dist-types/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPortIdInContext.d.ts +29 -0
  165. package/dist-types/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPortIdInContext.d.ts.map +1 -0
  166. package/dist-types/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPort.d.ts +62 -0
  167. package/dist-types/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPort.d.ts.map +1 -0
  168. package/dist-types/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPortIdAndAccess.d.ts +16 -0
  169. package/dist-types/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPortIdAndAccess.d.ts.map +1 -0
  170. package/dist-types/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPortIdInContext.d.ts +65 -0
  171. package/dist-types/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPortIdInContext.d.ts.map +1 -0
  172. package/dist-types/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPort.d.ts +36 -0
  173. package/dist-types/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPort.d.ts.map +1 -0
  174. package/dist-types/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPortIdAndAccess.d.ts +23 -0
  175. package/dist-types/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPortIdAndAccess.d.ts.map +1 -0
  176. package/dist-types/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPortIdInContext.d.ts +35 -0
  177. package/dist-types/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPortIdInContext.d.ts.map +1 -0
  178. package/dist-types/src/internal/mutablePropertyTools/getValueInRawPortFieldUnsafe.d.ts +7 -0
  179. package/dist-types/src/internal/mutablePropertyTools/getValueInRawPortFieldUnsafe.d.ts.map +1 -0
  180. package/dist-types/src/internal/mutablePropertyTools/matchMutablePortProperty/matchMutablePortPropertyByPort.d.ts +71 -0
  181. package/dist-types/src/internal/mutablePropertyTools/matchMutablePortProperty/matchMutablePortPropertyByPort.d.ts.map +1 -0
  182. package/dist-types/src/internal/mutablePropertyTools/matchMutablePortProperty/matchMutablePortPropertyByPortIdAndAccess.d.ts +7 -0
  183. package/dist-types/src/internal/mutablePropertyTools/matchMutablePortProperty/matchMutablePortPropertyByPortIdAndAccess.d.ts.map +1 -0
  184. package/dist-types/src/internal/mutablePropertyTools/matchMutablePortProperty/matchMutablePortPropertyByPortIdInContext.d.ts +28 -0
  185. package/dist-types/src/internal/mutablePropertyTools/matchMutablePortProperty/matchMutablePortPropertyByPortIdInContext.d.ts.map +1 -0
  186. package/index.ts +1 -0
  187. package/package.json +87 -0
  188. package/src/EMIDIAccess.ts +285 -0
  189. package/src/EMIDIInput.ts +273 -0
  190. package/src/EMIDIOutput.ts +272 -0
  191. package/src/EMIDIPort.ts +270 -0
  192. package/src/MIDIErrors.ts +13 -0
  193. package/src/MIDIEventStreams.ts +36 -0
  194. package/src/Parsing.ts +32 -0
  195. package/src/StreamMaker.ts +12 -0
  196. package/src/Util.ts +19 -0
  197. package/src/index.ts +9 -0
  198. package/src/internal/EMIDIAccess.ts +1280 -0
  199. package/src/internal/EMIDIInput.ts +114 -0
  200. package/src/internal/EMIDIOutput.ts +231 -0
  201. package/src/internal/EMIDIPort.ts +239 -0
  202. package/src/internal/MIDIErrors.ts +260 -0
  203. package/src/internal/MIDIEventStreams.ts +255 -0
  204. package/src/internal/MIDIPortMethodCalls/acquireReleasePortConnection/acquireReleasePortConnectionByPort.ts +48 -0
  205. package/src/internal/MIDIPortMethodCalls/acquireReleasePortConnection/acquireReleasePortConnectionByPortIdAndAccess.ts +31 -0
  206. package/src/internal/MIDIPortMethodCalls/acquireReleasePortConnection/acquireReleasePortConnectionByPortIdInContext.ts +28 -0
  207. package/src/internal/MIDIPortMethodCalls/actOnPort.ts +66 -0
  208. package/src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPort.ts +38 -0
  209. package/src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPortIdAndAccess.ts +38 -0
  210. package/src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPortIdInContext.ts +28 -0
  211. package/src/internal/MIDIPortMethodCalls/makeMIDIPortMethodCallerFactory.ts +68 -0
  212. package/src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPort.ts +48 -0
  213. package/src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPortIdAndAccess.ts +38 -0
  214. package/src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPortIdInContext.ts +28 -0
  215. package/src/internal/Parsing.ts +304 -0
  216. package/src/internal/StreamMaker.ts +416 -0
  217. package/src/internal/Util.ts +152 -0
  218. package/src/internal/getPortByPortId/getPortByPortIdAndAccess.ts +117 -0
  219. package/src/internal/getPortByPortId/getPortByPortIdInContext.ts +26 -0
  220. package/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPort.ts +148 -0
  221. package/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPortIdAndAccess.ts +135 -0
  222. package/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPortIdInContext.ts +70 -0
  223. package/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPort.ts +128 -0
  224. package/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPortIdAndAccess.ts +74 -0
  225. package/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPortIdInContext.ts +132 -0
  226. package/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPort.ts +64 -0
  227. package/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPortIdAndAccess.ts +114 -0
  228. package/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPortIdInContext.ts +47 -0
  229. package/src/internal/mutablePropertyTools/getValueInRawPortFieldUnsafe.ts +12 -0
  230. package/src/internal/mutablePropertyTools/matchMutablePortProperty/matchMutablePortPropertyByPort.ts +182 -0
  231. package/src/internal/mutablePropertyTools/matchMutablePortProperty/matchMutablePortPropertyByPortIdAndAccess.ts +29 -0
  232. package/src/internal/mutablePropertyTools/matchMutablePortProperty/matchMutablePortPropertyByPortIdInContext.ts +87 -0
@@ -0,0 +1,23 @@
1
+ /** biome-ignore-all lint/style/useShorthandFunctionType: It's a nice way to
2
+ * preserve JSDoc comments attached to the function signature */
3
+ import * as EMIDIPort from '../../EMIDIPort.ts';
4
+ import * as F from '../makeMIDIPortMethodCallerFactory.ts';
5
+ /**
6
+ * @internal
7
+ *
8
+ * exported for acquire-release
9
+ */
10
+ export declare const makePortConnectionCloser: <THighLevelPortType extends MIDIPortType>(is: (port: unknown) => port is EMIDIPort.EMIDIPort<THighLevelPortType>) => F.TouchPort<never, never, THighLevelPortType>;
11
+ /**
12
+ *
13
+ */
14
+ export declare const closePortConnectionByPort: F.TouchPort<never, never, MIDIPortType>;
15
+ /**
16
+ *
17
+ */
18
+ export declare const closeInputConnectionByPort: F.TouchPort<never, never, "input">;
19
+ /**
20
+ *
21
+ */
22
+ export declare const closeOutputConnectionByPort: F.TouchPort<never, never, "output">;
23
+ //# sourceMappingURL=closePortConnectionByPort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closePortConnectionByPort.d.ts","sourceRoot":"","sources":["../../../../../src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPort.ts"],"names":[],"mappings":"AAAA;gEACgE;AAIhE,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,CAAC,MAAM,uCAAuC,CAAA;AAE1D;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,oKAKpC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,yCAAyC,CAAA;AAE/E;;GAEG;AACH,eAAO,MAAM,0BAA0B,oCAEtC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,2BAA2B,qCAEvC,CAAA"}
@@ -0,0 +1,15 @@
1
+ /** biome-ignore-all lint/style/useShorthandFunctionType: It's a nice way to
2
+ * preserve JSDoc comments attached to the function signature */
3
+ /**
4
+ *
5
+ */
6
+ export declare const closePortConnectionByPortIdAndAccess: import("../../EMIDIAccess.ts").GetThingByPortId<import("../../EMIDIAccess.ts").EMIDIAccessInstance, "input" | "output", never, never, import("../../MIDIErrors.ts").PortNotFoundError, never>;
7
+ /**
8
+ *
9
+ */
10
+ export declare const closeInputConnectionByPortIdAndAccess: import("../../EMIDIAccess.ts").GetThingByPortId<import("../../EMIDIAccess.ts").EMIDIAccessInstance, "input", never, never, import("../../MIDIErrors.ts").PortNotFoundError, never>;
11
+ /**
12
+ *
13
+ */
14
+ export declare const closeOutputConnectionByPortIdAndAccess: import("../../EMIDIAccess.ts").GetThingByPortId<import("../../EMIDIAccess.ts").EMIDIAccessInstance, "output", never, never, import("../../MIDIErrors.ts").PortNotFoundError, never>;
15
+ //# sourceMappingURL=closePortConnectionByPortIdAndAccess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closePortConnectionByPortIdAndAccess.d.ts","sourceRoot":"","sources":["../../../../../src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPortIdAndAccess.ts"],"names":[],"mappings":"AAAA;gEACgE;AAchE;;GAEG;AACH,eAAO,MAAM,oCAAoC,+LAGhD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qCAAqC,oLAGjD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,sCAAsC,qLAGlD,CAAA"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ *
3
+ */
4
+ export declare const closePortConnectionByPortIdInContext: (id: import("../../EMIDIPort.ts").BothId) => import("effect/Effect").Effect<import("../../EMIDIPort.ts").EMIDIPort<"input" | "output">, import("../../MIDIErrors.ts").PortNotFoundError, import("../../EMIDIAccess.ts").EMIDIAccess>;
5
+ /**
6
+ *
7
+ */
8
+ export declare const closeInputConnectionByPortIdInContext: (id: string & import("effect/Brand").Brand<"MIDIPortId"> & import("effect/Brand").Brand<"input">) => import("effect/Effect").Effect<import("../../EMIDIPort.ts").EMIDIPort<"input">, import("../../MIDIErrors.ts").PortNotFoundError, import("../../EMIDIAccess.ts").EMIDIAccess>;
9
+ /**
10
+ *
11
+ */
12
+ export declare const closeOutputConnectionByPortIdInContext: (id: string & import("effect/Brand").Brand<"MIDIPortId"> & import("effect/Brand").Brand<"output">) => import("effect/Effect").Effect<import("../../EMIDIPort.ts").EMIDIPort<"output">, import("../../MIDIErrors.ts").PortNotFoundError, import("../../EMIDIAccess.ts").EMIDIAccess>;
13
+ //# sourceMappingURL=closePortConnectionByPortIdInContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closePortConnectionByPortIdInContext.d.ts","sourceRoot":"","sources":["../../../../../src/internal/MIDIPortMethodCalls/closePortConnection/closePortConnectionByPortIdInContext.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,eAAO,MAAM,oCAAoC,sOAGhD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qCAAqC,mRAGjD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,sCAAsC,qRAGlD,CAAA"}
@@ -0,0 +1,15 @@
1
+ /** biome-ignore-all lint/style/useShorthandFunctionType: It's a nice way to
2
+ * preserve JSDoc comments attached to the function signature */
3
+ import * as Effect from 'effect/Effect';
4
+ import * as EMIDIPort from '../EMIDIPort.ts';
5
+ /**
6
+ * @internal
7
+ */
8
+ export declare const makeMIDIPortMethodCallerFactory: <TError = never>(method: 'close' | 'open', mapError: (id: EMIDIPort.BothId) => (err: unknown) => TError) => <THighLevelPortType extends MIDIPortType>(is: (port: unknown) => port is EMIDIPort.EMIDIPort<THighLevelPortType>) => TouchPort<TError, never, THighLevelPortType>;
9
+ export interface TouchPort<TAdditionalError, TAdditionalRequirement, THighLevelPortType extends MIDIPortType> {
10
+ /**
11
+ * @returns An effect with the same port for easier chaining of operations
12
+ */
13
+ <TPortType extends THighLevelPortType, TPortGettingError = never, TPortGettingRequirement = never>(polymorphicPort: EMIDIPort.PolymorphicPort<TPortGettingError, TPortGettingRequirement, TPortType>): Effect.Effect<EMIDIPort.EMIDIPort<TPortType>, TPortGettingError | TAdditionalError, TPortGettingRequirement | TAdditionalRequirement>;
14
+ }
15
+ //# sourceMappingURL=makeMIDIPortMethodCallerFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeMIDIPortMethodCallerFactory.d.ts","sourceRoot":"","sources":["../../../../src/internal/MIDIPortMethodCalls/makeMIDIPortMethodCallerFactory.ts"],"names":[],"mappings":"AAAA;gEACgE;AAEhE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAA;AAG5C;;GAEG;AACH,eAAO,MAAM,+BAA+B,GACzC,MAAM,GAAG,KAAK,UACL,OAAO,GAAG,MAAM,YACd,CAAC,EAAE,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,MAE7D,kBAAkB,SAAS,YAAY,MAClC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,IAAI,SAAS,CAAC,SAAS,CAAC,kBAAkB,CAAC,KACrE,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,kBAAkB,CAwB1C,CAAA;AAEN,MAAM,WAAW,SAAS,CACxB,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,SAAS,YAAY;IAEvC;;OAEG;IACH,CACE,SAAS,SAAS,kBAAkB,EACpC,iBAAiB,GAAG,KAAK,EACzB,uBAAuB,GAAG,KAAK,EAE/B,eAAe,EAAE,SAAS,CAAC,eAAe,CACxC,iBAAiB,EACjB,uBAAuB,EACvB,SAAS,CACV,GACA,MAAM,CAAC,MAAM,CACd,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAC9B,iBAAiB,GAAG,gBAAgB,EACpC,uBAAuB,GAAG,sBAAsB,CACjD,CAAA;CACF"}
@@ -0,0 +1,21 @@
1
+ import * as EMIDIPort from '../../EMIDIPort.ts';
2
+ import * as MIDIErrors from '../../MIDIErrors.ts';
3
+ /**
4
+ * @internal
5
+ *
6
+ * exported for acquire-release
7
+ */
8
+ export declare const makePortConnectionOpener: <THighLevelPortType extends MIDIPortType>(is: (port: unknown) => port is EMIDIPort.EMIDIPort<THighLevelPortType>) => import("../makeMIDIPortMethodCallerFactory.ts").TouchPort<MIDIErrors.CannotOpenUnavailablePortError, never, THighLevelPortType>;
9
+ /**
10
+ *
11
+ */
12
+ export declare const openPortConnectionByPort: import("../makeMIDIPortMethodCallerFactory.ts").TouchPort<MIDIErrors.CannotOpenUnavailablePortError, never, MIDIPortType>;
13
+ /**
14
+ *
15
+ */
16
+ export declare const openInputConnectionByPort: import("../makeMIDIPortMethodCallerFactory.ts").TouchPort<MIDIErrors.CannotOpenUnavailablePortError, never, "input">;
17
+ /**
18
+ *
19
+ */
20
+ export declare const openOutputConnectionByPort: import("../makeMIDIPortMethodCallerFactory.ts").TouchPort<MIDIErrors.CannotOpenUnavailablePortError, never, "output">;
21
+ //# sourceMappingURL=openPortConnectionByPort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openPortConnectionByPort.d.ts","sourceRoot":"","sources":["../../../../../src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPort.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAA;AAGjD;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,sPAmBpC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,2HAAyC,CAAA;AAE9E;;GAEG;AACH,eAAO,MAAM,yBAAyB,sHAA0C,CAAA;AAEhF;;GAEG;AACH,eAAO,MAAM,0BAA0B,uHAEtC,CAAA"}
@@ -0,0 +1,15 @@
1
+ /** biome-ignore-all lint/style/useShorthandFunctionType: It's a nice way to
2
+ * preserve JSDoc comments attached to the function signature */
3
+ /**
4
+ *
5
+ */
6
+ export declare const openPortConnectionByPortIdAndAccess: import("../../EMIDIAccess.ts").GetThingByPortId<import("../../EMIDIAccess.ts").EMIDIAccessInstance, "input" | "output", never, never, import("../../MIDIErrors.ts").CannotOpenUnavailablePortError | import("../../MIDIErrors.ts").PortNotFoundError, never>;
7
+ /**
8
+ *
9
+ */
10
+ export declare const openInputConnectionByPortIdAndAccess: import("../../EMIDIAccess.ts").GetThingByPortId<import("../../EMIDIAccess.ts").EMIDIAccessInstance, "input", never, never, import("../../MIDIErrors.ts").CannotOpenUnavailablePortError | import("../../MIDIErrors.ts").PortNotFoundError, never>;
11
+ /**
12
+ *
13
+ */
14
+ export declare const openOutputConnectionByPortIdAndAccess: import("../../EMIDIAccess.ts").GetThingByPortId<import("../../EMIDIAccess.ts").EMIDIAccessInstance, "output", never, never, import("../../MIDIErrors.ts").CannotOpenUnavailablePortError | import("../../MIDIErrors.ts").PortNotFoundError, never>;
15
+ //# sourceMappingURL=openPortConnectionByPortIdAndAccess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openPortConnectionByPortIdAndAccess.d.ts","sourceRoot":"","sources":["../../../../../src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPortIdAndAccess.ts"],"names":[],"mappings":"AAAA;gEACgE;AAchE;;GAEG;AACH,eAAO,MAAM,mCAAmC,8PAG/C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,oCAAoC,mPAGhD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qCAAqC,oPAGjD,CAAA"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ *
3
+ */
4
+ export declare const openPortConnectionByPortIdInContext: (id: import("../../EMIDIPort.ts").BothId) => import("effect/Effect").Effect<import("../../EMIDIPort.ts").EMIDIPort<"input" | "output">, import("../../MIDIErrors.ts").CannotOpenUnavailablePortError | import("../../MIDIErrors.ts").PortNotFoundError, import("../../EMIDIAccess.ts").EMIDIAccess>;
5
+ /**
6
+ *
7
+ */
8
+ export declare const openInputConnectionByPortIdInContext: (id: string & import("effect/Brand").Brand<"MIDIPortId"> & import("effect/Brand").Brand<"input">) => import("effect/Effect").Effect<import("../../EMIDIPort.ts").EMIDIPort<"input">, import("../../MIDIErrors.ts").CannotOpenUnavailablePortError | import("../../MIDIErrors.ts").PortNotFoundError, import("../../EMIDIAccess.ts").EMIDIAccess>;
9
+ /**
10
+ *
11
+ */
12
+ export declare const openOutputConnectionByPortIdInContext: (id: string & import("effect/Brand").Brand<"MIDIPortId"> & import("effect/Brand").Brand<"output">) => import("effect/Effect").Effect<import("../../EMIDIPort.ts").EMIDIPort<"output">, import("../../MIDIErrors.ts").CannotOpenUnavailablePortError | import("../../MIDIErrors.ts").PortNotFoundError, import("../../EMIDIAccess.ts").EMIDIAccess>;
13
+ //# sourceMappingURL=openPortConnectionByPortIdInContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openPortConnectionByPortIdInContext.d.ts","sourceRoot":"","sources":["../../../../../src/internal/MIDIPortMethodCalls/openPortConnection/openPortConnectionByPortIdInContext.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,eAAO,MAAM,mCAAmC,qSAG/C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,oCAAoC,kVAGhD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qCAAqC,oVAGjD,CAAA"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * @file This module is not for general use, these are just helpers to test the
3
+ * MIDI API with the only MIDI device I have: nanoPAD v1
4
+ */
5
+ import * as Stream from 'effect/Stream';
6
+ import type * as EMIDIInput from './EMIDIInput.ts';
7
+ /**
8
+ *
9
+ * @param self
10
+ * @returns
11
+ */
12
+ export declare const withParsedDataField: <A extends MIDIMessage, E, R>(self: Stream.Stream<A, E, R>) => Stream.Stream<ParsedMIDIMessage, E, R>;
13
+ /**
14
+ *
15
+ * @param self
16
+ * @returns
17
+ */
18
+ export declare const withTouchpadPositionUpdates: <A extends {
19
+ midiMessage: ControlChangePayload | TouchpadReleasePayload | PitchBendChangePayload | {
20
+ _tag: string & {};
21
+ };
22
+ }, E, R>(self: Stream.Stream<A, E, R>) => Stream.Stream<A | (Omit<A, 'midiMessage'> & {
23
+ readonly midiMessage: TouchpadPositionUpdatePayload;
24
+ }), E, R>;
25
+ export type DefaultParsedMIDIMessagePayload = NoteReleasePayload | NotePressPayload | UnknownReplyPayload | ControlChangePayload | ChannelPressurePayload | TouchpadReleasePayload | PitchBendChangePayload;
26
+ export interface MIDIMessage {
27
+ readonly _tag: 'MIDIMessage';
28
+ readonly cameFrom: EMIDIInput.EMIDIInput;
29
+ readonly capturedAt: Date;
30
+ readonly midiMessage: Uint8Array<ArrayBuffer>;
31
+ }
32
+ export interface ParsedMIDIMessage<Payload extends TaggedObject = DefaultParsedMIDIMessagePayload> {
33
+ readonly _tag: 'ParsedMIDIMessage';
34
+ readonly cameFrom: EMIDIInput.EMIDIInput;
35
+ readonly capturedAt: Date;
36
+ readonly midiMessage: Payload;
37
+ }
38
+ export interface MessagePredicate<Payload extends TaggedObject> {
39
+ (m: ParsedMIDIMessage<TaggedObject>): m is ParsedMIDIMessage<Payload>;
40
+ }
41
+ export type TaggedObject = {
42
+ readonly _tag: string;
43
+ };
44
+ export interface UnknownReplyPayload extends Readonly<{
45
+ _tag: 'Unknown Reply';
46
+ unexpectedData: string;
47
+ stack: string;
48
+ }> {
49
+ }
50
+ export declare const isUnknownReplyPayload: (e: TaggedObject) => e is UnknownReplyPayload;
51
+ export declare const isUnknownReply: MessagePredicate<UnknownReplyPayload>;
52
+ export interface NotePressPayload extends Readonly<{
53
+ _tag: 'Note Press';
54
+ channel: number;
55
+ note: number;
56
+ velocity: number;
57
+ }> {
58
+ }
59
+ export declare const isNotePressPayload: (e: TaggedObject) => e is NotePressPayload;
60
+ export declare const isNotePress: MessagePredicate<NotePressPayload>;
61
+ export interface ChannelPressurePayload extends Readonly<{
62
+ _tag: 'Channel Pressure';
63
+ channel: number;
64
+ velocity: number;
65
+ }> {
66
+ }
67
+ export declare const isChannelPressurePayload: (e: TaggedObject) => e is ChannelPressurePayload;
68
+ export declare const isChannelPressure: MessagePredicate<ChannelPressurePayload>;
69
+ export interface NoteReleasePayload extends Readonly<{
70
+ _tag: 'Note Release';
71
+ channel: number;
72
+ note: number;
73
+ velocity: number;
74
+ }> {
75
+ }
76
+ export declare const isNoteReleasePayload: (e: TaggedObject) => e is NoteReleasePayload;
77
+ export declare const isNoteRelease: MessagePredicate<NoteReleasePayload>;
78
+ export interface ControlChangePayload extends Readonly<{
79
+ _tag: 'Control Change';
80
+ channel: number;
81
+ control: number;
82
+ value: number;
83
+ }> {
84
+ }
85
+ export declare const isControlChangePayload: (e: TaggedObject) => e is ControlChangePayload;
86
+ export declare const isControlChange: MessagePredicate<ControlChangePayload>;
87
+ export interface TouchpadReleasePayload extends Readonly<{
88
+ _tag: 'Touchpad Release';
89
+ channel: number;
90
+ }> {
91
+ }
92
+ export declare const isTouchpadReleasePayload: (e: TaggedObject) => e is TouchpadReleasePayload;
93
+ export declare const isTouchpadRelease: MessagePredicate<TouchpadReleasePayload>;
94
+ export interface PitchBendChangePayload extends Readonly<{
95
+ _tag: 'Pitch Bend Change';
96
+ channel: number;
97
+ value: number;
98
+ }> {
99
+ }
100
+ export declare const isPitchBendChangePayload: (e: TaggedObject) => e is PitchBendChangePayload;
101
+ export declare const isPitchBendChange: MessagePredicate<PitchBendChangePayload>;
102
+ export interface TouchpadPositionUpdatePayload extends Readonly<{
103
+ _tag: 'Touchpad Position Update';
104
+ x: number;
105
+ y: number;
106
+ }> {
107
+ }
108
+ export declare const isTouchpadPositionUpdatePayload: (e: TaggedObject) => e is TouchpadPositionUpdatePayload;
109
+ export declare const isTouchpadPositionUpdate: MessagePredicate<TouchpadPositionUpdatePayload>;
110
+ //# sourceMappingURL=Parsing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Parsing.d.ts","sourceRoot":"","sources":["../../../src/internal/Parsing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,204 @@
1
+ /** biome-ignore-all lint/style/useShorthandFunctionType: It's a nice way to
2
+ * preserve JSDoc comments attached to the function signature */
3
+ import * as Cause from 'effect/Cause';
4
+ import * as Stream from 'effect/Stream';
5
+ import * as Util from './Util.ts';
6
+ /**
7
+ * Set of possible ways to react when the MIDI-related event will have relevant
8
+ * field be null. Although there should be no sane scenario where it would be
9
+ * the case, it's still allowed by the spec, and for a better UX this lib lets
10
+ * the developer make a decision on how to handle such cases.
11
+ *
12
+ * - `fail` will add an error into a signature of a stream, allowing the user to
13
+ * handle it
14
+ * - `die` will throw a defect, which won't be reflected as a possible failure
15
+ * in types
16
+ * - `ignore` will just silently remove such events from the stream
17
+ * - `passthrough` - will pass such events with an unmodified content of the
18
+ * relevant field
19
+ *
20
+ * @internal
21
+ */
22
+ declare const validOnNullStrategies: Set<"die" | "fail" | "ignore" | "passthrough">;
23
+ /**
24
+ * Helper utility to turn MIDI event listeners into effect's Streams.
25
+ *
26
+ * The signature is split into 2 calls, so that you are able at first call pass
27
+ * into generic an interface with `addEventListener` types of the raw web MIDI
28
+ * objects as keys and according event structures as values.
29
+ *
30
+ * **Second call arguments**
31
+ *
32
+ * - `isSelf` - Function determining if the maker was called as an overload with
33
+ * all parameters passed at once, or with them spread by 2 calls. `self` will
34
+ * be later assigned to a `cameFrom` property of the object in the success
35
+ * channel of the stream
36
+ *
37
+ * - `buildConfig` - Function that makes config out of an effectful version
38
+ * (e.g. {@linkcode EMIDIAccess.EMIDIAccessInstance|EMIDIAccess.Instance},
39
+ * {@linkcode EMIDIInput.EMIDIInput}, {@linkcode EMIDIOutput.EMIDIOutput}) of
40
+ * a MIDI object.
41
+ *
42
+ * - `remapValueToContainer` - Callback that maps the value of the event's
43
+ * selected field to an extension of the object inside stream's success
44
+ * channel. All fields of the returned object must always be present and
45
+ * should be consistently nullable, when the incoming event's field is null.
46
+ *
47
+ * @template TEventTypeToEventValueMap An interface with event types of raw Web
48
+ * MIDI objects as keys and according event structures as values. e.g.
49
+ * {@linkcode MIDIAccessEventMap}, {@linkcode MIDIPortEventMap},
50
+ * {@linkcode MIDIInputEventMap}
51
+ *
52
+ * @internal
53
+ */
54
+ export declare const createStreamMakerFrom: <TEventTypeToEventValueMap extends object>() => <TEventTarget extends Stream.EventListener<TEventTypeToEventValueMap[TSelectedEventType]>, const TSelectedEventType extends Extract<keyof TEventTypeToEventValueMap, string>, const TNullableFieldName extends Extract<keyof TEventTypeToEventValueMap[TSelectedEventType], string>, TCameFrom, const TTag extends string, TContainerWithNullableFields extends object>(isSelf: (self: unknown) => self is TCameFrom, buildConfig: (self: TCameFrom) => StreamConfig<TTag, TEventTarget, TSelectedEventType, TNullableFieldName>, remapValueToContainer: (fieldValue: TEventTypeToEventValueMap[TSelectedEventType][TNullableFieldName]) => TContainerWithNullableFields) => DualStreamMaker<TCameFrom, TTag, TContainerWithNullableFields>;
55
+ interface StreamConfig<TTag, TEventTarget, TSelectedEventType, TNullableFieldName> {
56
+ /**
57
+ * Tag that will be assigned to the object inside stream's success channel
58
+ */
59
+ readonly tag: TTag;
60
+ /**
61
+ * Config specifying where to attach the event listener
62
+ */
63
+ readonly eventListener: {
64
+ /**
65
+ * Native MIDI object (e.g. {@linkcode MIDIAccess},
66
+ * {@linkcode MIDIInput}, {@linkcode MIDIOutput}) that can have new
67
+ * listeners attached
68
+ */
69
+ readonly target: TEventTarget;
70
+ /**
71
+ * The type of event supported by the native MIDI object,
72
+ * `addEventListener`'s first argument (e.g.
73
+ * {@linkcode MIDIAccess.addEventListener|MIDIAccess's},
74
+ * {@linkcode MIDIInput.addEventListener|MIDIInput's},
75
+ * {@linkcode MIDIOutput.addEventListener|MIDIOutput's}) which can have
76
+ * new listeners attached. Restricted by the keys of
77
+ * {@linkcode TEventTypeToEventValueMap} passed in the first call
78
+ */
79
+ readonly type: TSelectedEventType;
80
+ };
81
+ /**
82
+ * Additional attributes that will be attached to Open Telemetry span of
83
+ * the stream
84
+ */
85
+ readonly spanAttributes: {
86
+ readonly spanTargetName: string;
87
+ readonly [k: string]: unknown;
88
+ };
89
+ /**
90
+ * The name of the field that will be extracted from the event (e.g.
91
+ * {@linkcode MIDIConnectionEvent.port|MIDIConnectionEvent's port},
92
+ * {@linkcode MIDIMessageEvent.data|MIDIMessageEvent's data})
93
+ */
94
+ readonly nullableFieldName: TNullableFieldName;
95
+ }
96
+ export interface StreamMakerOptionsWellknown {
97
+ /**
98
+ * A boolean value indicating that events of this type will be dispatched to
99
+ * the registered `listener` before being dispatched to any `EventTarget`
100
+ * beneath it in the DOM tree.
101
+ * @default false
102
+ */
103
+ readonly capture?: boolean;
104
+ /**
105
+ * A boolean value indicating that the `listener` should be invoked at most
106
+ * once after being added. If `true`, the `listener` would be automatically
107
+ * removed when invoked.
108
+ * @default false
109
+ */
110
+ readonly passive?: boolean;
111
+ /**
112
+ * A boolean value that, if true, indicates that the function specified by
113
+ * listener will never call `preventDefault()`. If a passive listener calls
114
+ * `preventDefault()`, nothing will happen and a console warning may be
115
+ * generated.
116
+ * @default false
117
+ */
118
+ readonly once?: boolean;
119
+ /**
120
+ * How many elements sent by event target to buffer while waiting for the
121
+ * moment they are consumed. Can be limited to a certain number
122
+ * @default "unbounded"
123
+ */
124
+ readonly bufferSize?: number | 'unbounded' | undefined;
125
+ }
126
+ export interface StreamMakerOptionsObject<TOnNullStrategy extends OnNullStrategy> extends StreamMakerOptionsWellknown {
127
+ /**
128
+ * A strategy to react when the MIDI-related event will have relevant field be
129
+ * null. Although there should be no sane scenario where it would be the case,
130
+ * it's still allowed by the spec, and for a better DevX this lib lets the dev
131
+ * make a decision on how to handle such cases.
132
+ *
133
+ * - `fail` will add an error into a signature of a stream, allowing the user
134
+ * to handle it
135
+ * - `die` will throw a defect, which won't be reflected as a possible failure
136
+ * in types. Selected by default. `undefined` is treated the same.
137
+ * - `ignore` will just silently remove such events from the stream
138
+ * - `passthrough` - will pass such events with an unmodified content of the
139
+ * relevant field
140
+ *
141
+ * @default 'die'
142
+ */
143
+ readonly onExtremelyRareNullableField?: TOnNullStrategy;
144
+ }
145
+ /**
146
+ * Passing a value of a `boolean` type is equivalent to setting
147
+ * `options.capture` property
148
+ */
149
+ export type StreamMakerOptions<TOnNullStrategy extends OnNullStrategy> = boolean | StreamMakerOptionsObject<TOnNullStrategy> | undefined;
150
+ export type OnNullStrategy = (typeof validOnNullStrategies extends Set<infer U> ? U : never) | undefined;
151
+ export type StreamValue<TTag extends string, TCameFrom, TContainerWithNullableFields extends object, TOnNullStrategy extends OnNullStrategy> = {
152
+ readonly _tag: TTag;
153
+ /**
154
+ * An effectful MIDI entity that wraps the raw MIDI object, which triggered an
155
+ * event
156
+ */
157
+ readonly cameFrom: TCameFrom;
158
+ readonly capturedAt: Date;
159
+ } & ({
160
+ readonly [NullableField in keyof TContainerWithNullableFields]: Exclude<TContainerWithNullableFields[NullableField], null>;
161
+ } | ([TOnNullStrategy] extends ['passthrough'] ? {
162
+ readonly [NullableField in keyof TContainerWithNullableFields]: null;
163
+ } : never));
164
+ export type StreamError<TOnNullStrategy extends OnNullStrategy, E> = E | ([TOnNullStrategy] extends ['fail'] ? Cause.NoSuchElementException : never);
165
+ export interface BuiltStream<TTag extends string, TCameFrom, TContainerWithNullableFields extends object, TOnNullStrategy extends OnNullStrategy, E = never, R = never> extends Stream.Stream<StreamValue<TTag, TCameFrom, TContainerWithNullableFields, TOnNullStrategy>, StreamError<TOnNullStrategy, E>, R> {
166
+ }
167
+ export interface DualStreamMaker<TCameFrom, TTag extends string, TContainerWithNullableFields extends object> extends MakeStreamTargetFirst<TCameFrom, TTag, TContainerWithNullableFields>, MakeStreamTargetLast<TCameFrom, TTag, TContainerWithNullableFields> {
168
+ }
169
+ export interface MakeStreamTargetFirst<TCameFrom, TTag extends string, TContainerWithNullableFields extends object> {
170
+ /**
171
+ * @param polymorphicEventTargetWrapper Raw MIDI object, which triggers
172
+ * events, wrapped in this lib's abstraction and potentially inside Effect.
173
+ * Will be assigned to the `cameFrom` property of the stream's success channel
174
+ * object
175
+ *
176
+ * @param options Passing a value of a `boolean` type is equivalent to setting
177
+ * `options.capture` property
178
+ */
179
+ <E = never, R = never, const TOnNullStrategy extends OnNullStrategy = undefined>(polymorphicEventTargetWrapper: Util.PolymorphicEffect<TCameFrom, E, R>, options?: StreamMakerOptions<TOnNullStrategy>): BuiltStream<TTag, TCameFrom, TContainerWithNullableFields, TOnNullStrategy, E, R>;
180
+ }
181
+ export interface MakeStreamTargetLast<TCameFrom, TTag extends string, TContainerWithNullableFields extends object> {
182
+ /**
183
+ * @param options Passing a value of a `boolean` type is equivalent to setting
184
+ * `options.capture` property
185
+ *
186
+ * **Second call argument**
187
+ *
188
+ * - `polymorphicEventTargetWrapper` Raw MIDI object, which triggers events,
189
+ * wrapped in this lib's abstraction and potentially inside Effect. Will be
190
+ * assigned to the `cameFrom` property of the stream's success channel
191
+ * object
192
+ */
193
+ <const TOnNullStrategy extends OnNullStrategy = undefined>(options?: StreamMakerOptions<TOnNullStrategy>): {
194
+ /**
195
+ * @param polymorphicEventTargetWrapper Raw MIDI object, which triggers
196
+ * events, wrapped in this lib's abstraction and potentially inside Effect.
197
+ * Will be assigned to the `cameFrom` property of the stream's success
198
+ * channel object
199
+ */
200
+ <E = never, R = never>(polymorphicEventTargetWrapper: Util.PolymorphicEffect<TCameFrom, E, R>): BuiltStream<TTag, TCameFrom, TContainerWithNullableFields, TOnNullStrategy, E, R>;
201
+ };
202
+ }
203
+ export {};
204
+ //# sourceMappingURL=StreamMaker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamMaker.d.ts","sourceRoot":"","sources":["../../../src/internal/StreamMaker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type * as Brand from 'effect/Brand';
2
+ import * as Effect from 'effect/Effect';
3
+ import * as Stream from 'effect/Stream';
4
+ import type * as MIDIErrors from './MIDIErrors.ts';
5
+ export declare const midiPortStaticFields: readonly ['id', 'name', 'manufacturer', 'version', 'type'];
6
+ export type MIDIPortStaticFields = (typeof midiPortStaticFields)[number];
7
+ export declare const getStaticMIDIPortInfo: (port: Pick<MIDIPort, MIDIPortStaticFields>) => {
8
+ readonly id: string;
9
+ readonly manufacturer: string | null;
10
+ readonly name: string | null;
11
+ readonly type: MIDIPortType;
12
+ readonly version: string | null;
13
+ };
14
+ /**
15
+ * Puts Self into success channel for easier chaining of operations on the same
16
+ * entity
17
+ */
18
+ export interface SentMessageEffectFrom<Self, E = never, R = never> extends Effect.Effect<Self, E | MIDIErrors.CannotSendSysexMessageError | MIDIErrors.MalformedMIDIMessageError | MIDIErrors.CannotSendToDisconnectedPortError, R> {
19
+ }
20
+ export type PolymorphicEffect<A, E, R> = A | Effect.Effect<A, E, R>;
21
+ export type FallbackOnUnknownOrAny<TCandidate, Fallback> = unknown extends TCandidate ? TCandidate extends unknown ? Fallback : TCandidate : TCandidate;
22
+ export declare const polymorphicCheckInDual: (is: (arg: unknown) => boolean) => (args: IArguments) => boolean;
23
+ export declare function fromPolymorphic<A, E = never, R = never>(polymorphicValue: PolymorphicEffect<A, E, R>, is: (arg: unknown) => arg is NoInfer<A>): Effect.Effect<A, E, R>;
24
+ export type IsEqualFlag<TPropertyName extends string, TExpectedValue extends string> = Brand.Branded<boolean, TPropertyName> & Brand.Brand<`expectedValue: ${TExpectedValue}`>;
25
+ export declare const isCertainDeviceState: <const TExpectedValue extends MIDIPortDeviceState>(expected: TExpectedValue) => <E, R>(self: Effect.Effect<MIDIPortDeviceState, E, R>) => Effect.Effect<IsEqualFlag<"isCertainDeviceState", TExpectedValue>, E, R>;
26
+ export declare const isCertainConnectionState: <const TExpectedValue extends MIDIPortConnectionState>(expected: TExpectedValue) => <E, R>(self: Effect.Effect<MIDIPortConnectionState, E, R>) => Effect.Effect<IsEqualFlag<"isCertainConnectionState", TExpectedValue>, E, R>;
27
+ export declare const isDeviceConnected: <E, R>(self: Effect.Effect<MIDIPortDeviceState, E, R>) => Effect.Effect<IsEqualFlag<"isCertainDeviceState", "connected">, E, R>;
28
+ export declare const isDeviceDisconnected: <E, R>(self: Effect.Effect<MIDIPortDeviceState, E, R>) => Effect.Effect<IsEqualFlag<"isCertainDeviceState", "disconnected">, E, R>;
29
+ export declare const isConnectionOpen: <E, R>(self: Effect.Effect<MIDIPortConnectionState, E, R>) => Effect.Effect<IsEqualFlag<"isCertainConnectionState", "open">, E, R>;
30
+ export declare const isConnectionPending: <E, R>(self: Effect.Effect<MIDIPortConnectionState, E, R>) => Effect.Effect<IsEqualFlag<"isCertainConnectionState", "pending">, E, R>;
31
+ export declare const isConnectionClosed: <E, R>(self: Effect.Effect<MIDIPortConnectionState, E, R>) => Effect.Effect<IsEqualFlag<"isCertainConnectionState", "closed">, E, R>;
32
+ export declare const mapToGlidingStringLogOfLimitedEntriesCount: <A>(windowSize: number, show: 'latestFirst' | 'oldestFirst', objectify: (current: NoInfer<A>) => object) => <E, R>(self: Stream.Stream<A, E, R>) => Stream.Stream<string, E, R>;
33
+ //# sourceMappingURL=Util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Util.d.ts","sourceRoot":"","sources":["../../../src/internal/Util.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAElD,eAAO,MAAM,oBAAoB,YAC/B,IAAI,EACJ,MAAM,EACN,cAAc,EACd,SAAS,EACT,MAAM,CACE,CAAA;AAEV,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAExE,eAAO,MAAM,qBAAqB,SAC1B,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC;;;;;;CACG,CAAA;AAE/C;;;GAGG;AACH,MAAM,WAAW,qBAAqB,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,CAC/D,SAAQ,MAAM,CAAC,MAAM,CACnB,IAAI,EACF,CAAC,GACD,UAAU,CAAC,2BAA2B,GACtC,UAAU,CAAC,yBAAyB,GACpC,UAAU,CAAC,iCAAiC,EAC9C,CAAC,CACF;CAAG;AAEN,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAEnE,MAAM,MAAM,sBAAsB,CAAC,UAAU,EAAE,QAAQ,IACrD,OAAO,SAAS,UAAU,GACtB,UAAU,SAAS,OAAO,GACxB,QAAQ,GACR,UAAU,GACZ,UAAU,CAAA;AAEhB,eAAO,MAAM,sBAAsB,OAC5B,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,YAAY,UAAU,YACX,CAAA;AAE3C,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EACrD,gBAAgB,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC5C,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,0BAUxC;AAeD,MAAM,MAAM,WAAW,CACrB,aAAa,SAAS,MAAM,EAC5B,cAAc,SAAS,MAAM,IAC3B,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,GACvC,KAAK,CAAC,KAAK,CAAC,kBAAkB,cAAc,EAAE,CAAC,CAAA;AAEjD,eAAO,MAAM,oBAAoB,SAdxB,cAAc,4DACpB,CAAC,EAAE,CAAC,6HAgBJ,CAAA;AAEH,eAAO,MAAM,wBAAwB,SAnB5B,cAAc,gEACpB,CAAC,EAAE,CAAC,qIAqBJ,CAAA;AAEH,eAAO,MAAM,iBAAiB,GAvB3B,CAAC,EAAE,CAAC,0HAuB2D,CAAA;AAClE,eAAO,MAAM,oBAAoB,GAxB9B,CAAC,EAAE,CAAC,6HAwBiE,CAAA;AAExE,eAAO,MAAM,gBAAgB,GA1B1B,CAAC,EAAE,CAAC,6HA0ByD,CAAA;AAChE,eAAO,MAAM,mBAAmB,GA3B7B,CAAC,EAAE,CAAC,gIA2B+D,CAAA;AACtE,eAAO,MAAM,kBAAkB,GA5B5B,CAAC,EAAE,CAAC,+HA4B6D,CAAA;AAEpE,eAAO,MAAM,0CAA0C,GACpD,CAAC,cACY,MAAM,QACZ,aAAa,GAAG,aAAa,aACxB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,MAE3C,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,gCA4ClC,CAAA"}
@@ -0,0 +1,27 @@
1
+ /** biome-ignore-all lint/style/useShorthandFunctionType: It's a nice way to
2
+ * preserve JSDoc comments attached to the function signature */
3
+ import * as EMIDIAccess from '../EMIDIAccess.ts';
4
+ import type * as EMIDIPort from '../EMIDIPort.ts';
5
+ import * as MIDIErrors from '../MIDIErrors.ts';
6
+ /**
7
+ *
8
+ * If you want to ensure the type of returned port match the type of ID, use
9
+ * type-specific getters {@linkcode getInputByPortIdAndAccess} and
10
+ * {@linkcode getOutputByPortIdAndAccess}, because in runtime, these branded
11
+ * port IDs passed as function arguments, are just strings and cannot ensure
12
+ * soundness
13
+ */
14
+ export declare const getPortByPortIdAndAccess: GetPortById<"input" | "output", "input" | "output", never, never, MIDIErrors.PortNotFoundError, never>;
15
+ /**
16
+ *
17
+ *
18
+ */
19
+ export declare const getInputByPortIdAndAccess: GetPortById<"input", "input", never, never, MIDIErrors.PortNotFoundError, never>;
20
+ /**
21
+ *
22
+ *
23
+ */
24
+ export declare const getOutputByPortIdAndAccess: GetPortById<"output", "output", never, never, MIDIErrors.PortNotFoundError, never>;
25
+ export interface GetPortById<TReturnedPortType extends TTypeOfPortId, TTypeOfPortId extends MIDIPortType, TAccessGettingFallbackError, TAccessGettingFallbackRequirement, TAdditionalError, TAdditionalRequirement> extends EMIDIAccess.GetThingByPortId<EMIDIPort.EMIDIPort<TReturnedPortType>, TTypeOfPortId, TAccessGettingFallbackError, TAccessGettingFallbackRequirement, TAdditionalError | MIDIErrors.PortNotFoundError, TAdditionalRequirement> {
26
+ }
27
+ //# sourceMappingURL=getPortByPortIdAndAccess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPortByPortIdAndAccess.d.ts","sourceRoot":"","sources":["../../../../src/internal/getPortByPortId/getPortByPortIdAndAccess.ts"],"names":[],"mappings":"AAAA;gEACgE;AAKhE,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAGhD,OAAO,KAAK,KAAK,SAAS,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAA;AAuD9C;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,wGAGnC,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,kFAMpC,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,oFAMrC,CAAA;AAEF,MAAM,WAAW,WAAW,CAC1B,iBAAiB,SAAS,aAAa,EACvC,aAAa,SAAS,YAAY,EAClC,2BAA2B,EAC3B,iCAAiC,EACjC,gBAAgB,EAChB,sBAAsB,CACtB,SAAQ,WAAW,CAAC,gBAAgB,CAClC,SAAS,CAAC,SAAS,CAAC,iBAAiB,CAAC,EACtC,aAAa,EACb,2BAA2B,EAC3B,iCAAiC,EACjC,gBAAgB,GAAG,UAAU,CAAC,iBAAiB,EAC/C,sBAAsB,CACvB;CAAG"}
@@ -0,0 +1,20 @@
1
+ import * as EMIDIAccess from '../EMIDIAccess.ts';
2
+ import type * as EMIDIInput from '../EMIDIInput.ts';
3
+ import type * as EMIDIOutput from '../EMIDIOutput.ts';
4
+ import type * as EMIDIPort from '../EMIDIPort.ts';
5
+ /**
6
+ *
7
+ *
8
+ */
9
+ export declare const getPortByPortIdInContext: (id: EMIDIPort.BothId) => EMIDIAccess.AcquiredThing<EMIDIPort.EMIDIPort<"input" | "output">, never, EMIDIAccess.EMIDIAccess, never, never, import("../MIDIErrors.ts").PortNotFoundError, never>;
10
+ /**
11
+ *
12
+ *
13
+ */
14
+ export declare const getInputByPortIdInContext: (id: EMIDIInput.Id) => EMIDIAccess.AcquiredThing<EMIDIPort.EMIDIPort<"input">, never, EMIDIAccess.EMIDIAccess, never, never, import("../MIDIErrors.ts").PortNotFoundError, never>;
15
+ /**
16
+ *
17
+ *
18
+ */
19
+ export declare const getOutputByPortIdInContext: (id: EMIDIOutput.Id) => EMIDIAccess.AcquiredThing<EMIDIPort.EMIDIPort<"output">, never, EMIDIAccess.EMIDIAccess, never, never, import("../MIDIErrors.ts").PortNotFoundError, never>;
20
+ //# sourceMappingURL=getPortByPortIdInContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPortByPortIdInContext.d.ts","sourceRoot":"","sources":["../../../../src/internal/getPortByPortId/getPortByPortIdInContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,KAAK,UAAU,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,KAAK,WAAW,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,KAAK,SAAS,MAAM,iBAAiB,CAAA;AAGjD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,OAAQ,SAAS,CAAC,MAAM,0KACF,CAAA;AAE3D;;;GAGG;AACH,eAAO,MAAM,yBAAyB,OAAQ,UAAU,CAAC,EAAE,+JACC,CAAA;AAE5D;;;GAGG;AACH,eAAO,MAAM,0BAA0B,OAAQ,WAAW,CAAC,EAAE,gKACA,CAAA"}