effect-web-midi 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +139 -37
- package/package.json +1 -1
- package/src/internal/EMIDIAccess.ts +1 -1
- package/src/internal/Parsing.ts +5 -1
- package/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPortIdAndAccess.ts +3 -3
- package/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPortIdAndAccess.ts +15 -15
- package/src/internal/mutablePropertyTools/doesMutablePortPropertyHaveSpecificValue/doesMutablePortPropertyHaveSpecificValueByPortIdInContext.ts +15 -15
- package/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPortIdAndAccess.ts +4 -4
- package/src/internal/mutablePropertyTools/getMutablePortProperty/getMutablePortPropertyByPortIdInContext.ts +4 -4
- package/src/internal/mutablePropertyTools/matchMutablePortProperty/matchMutablePortPropertyByPortIdAndAccess.ts +6 -6
package/README.md
CHANGED
|
@@ -13,29 +13,24 @@ Huge thanks to [Web MIDI spec](https://www.w3.org/TR/webmidi/)!
|
|
|
13
13
|
import { Atom, Result, useAtom, useAtomValue } from '@effect-atom/atom-react';
|
|
14
14
|
import { styled } from '@linaria/react';
|
|
15
15
|
import * as Cause from 'effect/Cause';
|
|
16
|
-
import * as Chunk from 'effect/Chunk';
|
|
17
16
|
import * as Console from 'effect/Console';
|
|
18
17
|
import * as Effect from 'effect/Effect';
|
|
19
18
|
import { flow, pipe } from 'effect/Function';
|
|
19
|
+
import * as Record from 'effect/Record';
|
|
20
20
|
import * as Stream from 'effect/Stream';
|
|
21
|
-
import
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
'1A0CE1F47C19C43DAEB93B9595F6E4BA822ED318FE8D8BF2750B66286B5BEC38'
|
|
31
|
-
);
|
|
32
|
-
const nanoPadInputId2 = EMIDIInput.Id(
|
|
33
|
-
'EF5E7457082713264B5DBD318651DA2134B6A34EB9F32BFD2C8E0B121508D10A'
|
|
21
|
+
import * as EMIDIAccess from 'effect-web-midi/EMIDIAccess';
|
|
22
|
+
import * as EMIDIInput from 'effect-web-midi/EMIDIInput';
|
|
23
|
+
import * as EMIDIOutput from 'effect-web-midi/EMIDIOutput';
|
|
24
|
+
import * as EMIDIPort from 'effect-web-midi/EMIDIPort';
|
|
25
|
+
import * as Parsing from 'effect-web-midi/Parsing';
|
|
26
|
+
import * as Util from 'effect-web-midi/Util';
|
|
27
|
+
|
|
28
|
+
const nanoPadInputId = EMIDIInput.Id(
|
|
29
|
+
'380CB1F6BC0A21C5AAA0CDF95170A996937337454636CDDE223EEA6812283B07'
|
|
34
30
|
);
|
|
35
|
-
const nanoPadInputId = nanoPadInputId2;
|
|
36
31
|
|
|
37
32
|
const nanoPadOutputId = EMIDIOutput.Id(
|
|
38
|
-
'
|
|
33
|
+
'045297AACE044DA224B59E92DBC0E874160B85D0D43BE505CBB053747F4AA90A'
|
|
39
34
|
);
|
|
40
35
|
|
|
41
36
|
const globalDataDumpRequest = new Uint8Array([
|
|
@@ -46,23 +41,94 @@ const globalDataDumpRequest = new Uint8Array([
|
|
|
46
41
|
0x1f, 0x0e, 0x00, 0xf7,
|
|
47
42
|
]);
|
|
48
43
|
|
|
49
|
-
const _MIDIDeviceConnectionEventsStringLog =
|
|
44
|
+
const _MIDIDeviceConnectionEventsStringLog = pipe(
|
|
45
|
+
// The lib supports both ways of working with access. You can either work with
|
|
46
|
+
// its instance directly, or provide it through DI. All of the functions have
|
|
47
|
+
// equivalents supporting both approaches. In this case we work with it directly
|
|
48
|
+
EMIDIAccess.request(),
|
|
49
|
+
// ⬆️ Effect<
|
|
50
|
+
// EMIDIAccess.EMIDIAccessInstance,
|
|
51
|
+
// | AbortError
|
|
52
|
+
// | UnderlyingSystemError
|
|
53
|
+
// | MIDIAccessNotSupportedError
|
|
54
|
+
// | MIDIAccessNotAllowedError,
|
|
55
|
+
// never
|
|
56
|
+
// >
|
|
50
57
|
Effect.catchTag(
|
|
51
58
|
'MIDIAccessNotSupportedError',
|
|
52
59
|
flow(Console.log, Effect.andThen(Effect.never))
|
|
53
60
|
),
|
|
61
|
+
// notice that function below consumed access. It can consume access
|
|
62
|
+
// regardless if it's wrapped in effect or not. It also has both
|
|
63
|
+
// data-first and data-last signatures supported. Every function in this lib
|
|
64
|
+
// conforms that rule
|
|
54
65
|
EMIDIAccess.makeAllPortsStateChangesStream(),
|
|
66
|
+
// ⬆️ Stream<
|
|
67
|
+
// {
|
|
68
|
+
// readonly _tag: "MIDIPortStateChange";
|
|
69
|
+
// readonly cameFrom: EMIDIAccess.EMIDIAccessInstance;
|
|
70
|
+
// readonly capturedAt: Date;
|
|
71
|
+
// readonly newState: {
|
|
72
|
+
// readonly ofDevice: MIDIPortDeviceState;
|
|
73
|
+
// readonly ofConnection: MIDIPortConnectionState;
|
|
74
|
+
// };
|
|
75
|
+
// readonly port: EMIDIOutput | EMIDIInput;
|
|
76
|
+
// },
|
|
77
|
+
// | AbortError
|
|
78
|
+
// | UnderlyingSystemError
|
|
79
|
+
// | MIDIAccessNotAllowedError,
|
|
80
|
+
// never
|
|
81
|
+
// >
|
|
82
|
+
// This is just a helper to render a list of objects to a string in nice-ish way
|
|
55
83
|
Util.mapToGlidingStringLogOfLimitedEntriesCount(50, 'latestFirst', (_) => ({
|
|
56
84
|
time: _.capturedAt.toISOString(),
|
|
57
85
|
id: _.port.id.slice(-10),
|
|
58
86
|
device: _.newState.ofDevice.padStart(12),
|
|
59
87
|
connection: _.newState.ofConnection.padStart(7),
|
|
60
88
|
}))
|
|
89
|
+
// ⬆️ Stream<
|
|
90
|
+
// string,
|
|
91
|
+
// | AbortError
|
|
92
|
+
// | UnderlyingSystemError
|
|
93
|
+
// | MIDIAccessNotAllowedError,
|
|
94
|
+
// never
|
|
95
|
+
// >
|
|
61
96
|
);
|
|
62
97
|
|
|
63
98
|
const MIDIMessageEventsStringLog = pipe(
|
|
99
|
+
// if the ID below turned out to be output's, it would cause defect (by design),
|
|
100
|
+
// because messages can only come from inputs. Notice that instead of demanding
|
|
101
|
+
// access from arguments, this particular method expects it to be provided in
|
|
102
|
+
// requirements.
|
|
64
103
|
EMIDIInput.makeMessagesStreamById(nanoPadInputId),
|
|
104
|
+
// ⬆️ Stream<
|
|
105
|
+
// {
|
|
106
|
+
// readonly _tag: "MIDIMessage";
|
|
107
|
+
// readonly cameFrom: EMIDIInput;
|
|
108
|
+
// readonly capturedAt: Date;
|
|
109
|
+
// readonly midiMessage: Uint8Array<ArrayBuffer>;
|
|
110
|
+
// },
|
|
111
|
+
// PortNotFoundError,
|
|
112
|
+
// EMIDIAccess
|
|
113
|
+
// >
|
|
65
114
|
Parsing.withParsedDataField,
|
|
115
|
+
// ⬆️ Stream<
|
|
116
|
+
// {
|
|
117
|
+
// readonly _tag: "ParsedMIDIMessage";
|
|
118
|
+
// readonly cameFrom: EMIDIInput;
|
|
119
|
+
// readonly capturedAt: Date;
|
|
120
|
+
// readonly midiMessage: | NoteRelease
|
|
121
|
+
// | NotePress
|
|
122
|
+
// | UnknownReply
|
|
123
|
+
// | ControlChange
|
|
124
|
+
// | TouchpadRelease
|
|
125
|
+
// | PitchBendChange
|
|
126
|
+
// },
|
|
127
|
+
// PortNotFoundError,
|
|
128
|
+
// EMIDIAccess
|
|
129
|
+
// >
|
|
130
|
+
// function below adds new member to the midiMessage union inferred from
|
|
131
|
+
// ControlChange, PitchBendChange, and TouchpadRelease
|
|
66
132
|
Parsing.withTouchpadPositionUpdates,
|
|
67
133
|
Stream.filter(
|
|
68
134
|
(a) =>
|
|
@@ -71,8 +137,9 @@ const MIDIMessageEventsStringLog = pipe(
|
|
|
71
137
|
a.midiMessage._tag === 'Note Press' ||
|
|
72
138
|
a.midiMessage._tag === 'Note Release'
|
|
73
139
|
),
|
|
140
|
+
// Just for the demo, show only select list of events
|
|
74
141
|
Util.mapToGlidingStringLogOfLimitedEntriesCount(
|
|
75
|
-
|
|
142
|
+
50,
|
|
76
143
|
'latestFirst',
|
|
77
144
|
(current) => ({
|
|
78
145
|
time: current.capturedAt.toISOString(),
|
|
@@ -80,30 +147,65 @@ const MIDIMessageEventsStringLog = pipe(
|
|
|
80
147
|
...current.midiMessage,
|
|
81
148
|
})
|
|
82
149
|
),
|
|
83
|
-
Stream
|
|
84
|
-
|
|
150
|
+
// ⬆️ Stream<string, PortNotFoundError, EMIDIAccess>
|
|
151
|
+
Stream.catchTag('PortNotFound', (err) =>
|
|
152
|
+
Stream.fromEffect(
|
|
153
|
+
EMIDIPort.FullRecord.pipe(
|
|
154
|
+
// ⬆️ Effect<
|
|
155
|
+
// {
|
|
156
|
+
// [id: EMIDIPort.Id<'input'>]: EMIDIPort<'input'>
|
|
157
|
+
// } & {
|
|
158
|
+
// [id: EMIDIPort.Id<'output'>]: EMIDIPort<'output'>
|
|
159
|
+
// },
|
|
160
|
+
// never,
|
|
161
|
+
// EMIDIAccess.EMIDIAccess
|
|
162
|
+
// >
|
|
163
|
+
Effect.map(
|
|
164
|
+
Record.reduce(
|
|
165
|
+
`Port with id=${err.portId} is not found. Currently available ports: \n`,
|
|
166
|
+
(acc, { type, version, name }, id) =>
|
|
167
|
+
acc + type.padEnd(7) + id + ' ' + version + ' ' + name + '\n'
|
|
168
|
+
)
|
|
169
|
+
),
|
|
170
|
+
Effect.flatMap(Console.log),
|
|
171
|
+
Effect.andThen(
|
|
172
|
+
`KORG nanoPAD not found in the list of connected devices`
|
|
173
|
+
)
|
|
174
|
+
)
|
|
175
|
+
)
|
|
85
176
|
),
|
|
177
|
+
// ⬆️ Stream.Stream<string, never, EMIDIAccess>
|
|
86
178
|
Stream.provideLayer(EMIDIAccess.layerSystemExclusiveSupported),
|
|
179
|
+
// ⬆️ Stream.Stream<
|
|
180
|
+
// string,
|
|
181
|
+
// | AbortError
|
|
182
|
+
// | UnderlyingSystemError
|
|
183
|
+
// | MIDIAccessNotSupportedError
|
|
184
|
+
// | MIDIAccessNotAllowedError,
|
|
185
|
+
// never
|
|
186
|
+
// >
|
|
87
187
|
Stream.catchTag('MIDIAccessNotSupportedError', (e) =>
|
|
88
188
|
Stream.succeed(e.cause.message)
|
|
89
189
|
)
|
|
90
190
|
);
|
|
91
191
|
|
|
92
192
|
const dumpRequester = Atom.fn(() =>
|
|
193
|
+
// A particular example of methods flexibility. Here EMIDIAccess.send is a
|
|
194
|
+
// data-first signature and accepts EMIDIAccess wrapped by Effect
|
|
93
195
|
EMIDIAccess.send(
|
|
94
196
|
EMIDIAccess.request({ sysex: true }),
|
|
95
|
-
//
|
|
96
|
-
//
|
|
97
|
-
//
|
|
98
|
-
//
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
-
//
|
|
102
|
-
//
|
|
197
|
+
// ⬆️ Effect.Effect<
|
|
198
|
+
// EMIDIAccess.EMIDIAccessInstance,
|
|
199
|
+
// | AbortError
|
|
200
|
+
// | UnderlyingSystemError
|
|
201
|
+
// | MIDIAccessNotAllowedError
|
|
202
|
+
// | MIDIAccessNotSupportedError,
|
|
203
|
+
// never
|
|
204
|
+
// >
|
|
103
205
|
nanoPadOutputId,
|
|
104
|
-
//
|
|
206
|
+
// ⬆️ string & Brand<"MIDIPortId"> & Brand<"output">
|
|
105
207
|
globalDataDumpRequest
|
|
106
|
-
//
|
|
208
|
+
// ⬆️ Uint8Array<ArrayBuffer>
|
|
107
209
|
)
|
|
108
210
|
);
|
|
109
211
|
|
|
@@ -114,6 +216,7 @@ const textAtom = Atom.make(
|
|
|
114
216
|
|
|
115
217
|
export default function Home() {
|
|
116
218
|
const text = useAtomValue(textAtom);
|
|
219
|
+
console.log(text);
|
|
117
220
|
const [, mutate] = useAtom(dumpRequester);
|
|
118
221
|
|
|
119
222
|
return (
|
|
@@ -121,12 +224,10 @@ export default function Home() {
|
|
|
121
224
|
<form
|
|
122
225
|
onSubmit={(event) => {
|
|
123
226
|
event.preventDefault();
|
|
124
|
-
console.log('hex', new FormData(event.target as any).get('hex'));
|
|
125
227
|
mutate();
|
|
126
228
|
}}
|
|
127
229
|
>
|
|
128
|
-
<input type='
|
|
129
|
-
<input type='submit' value='send' />
|
|
230
|
+
<input type='submit' value='dump' />
|
|
130
231
|
</form>
|
|
131
232
|
|
|
132
233
|
{Result.match(text, {
|
|
@@ -134,10 +235,7 @@ export default function Home() {
|
|
|
134
235
|
<>
|
|
135
236
|
failure:
|
|
136
237
|
<br />
|
|
137
|
-
{Cause.
|
|
138
|
-
Chunk.map((e) => e.message),
|
|
139
|
-
Chunk.join('\n')
|
|
140
|
-
)}
|
|
238
|
+
{Cause.pretty(_.cause)}
|
|
141
239
|
</>
|
|
142
240
|
),
|
|
143
241
|
onInitial: (e) => <>initial waiting: {e.waiting.toString()}</>,
|
|
@@ -151,3 +249,7 @@ const Wrapper = styled.div`
|
|
|
151
249
|
color: wheat;
|
|
152
250
|
`;
|
|
153
251
|
```
|
|
252
|
+
|
|
253
|
+
<img width="1567" height="946" alt="Screenshot From 2025-12-29 01-46-34" src="https://github.com/user-attachments/assets/7411d393-0ef4-485a-954d-0d8d4e56a42e" />
|
|
254
|
+
|
|
255
|
+

|
package/package.json
CHANGED
|
@@ -595,7 +595,7 @@ export const makeMessagesStreamByInputId = <
|
|
|
595
595
|
|
|
596
596
|
// TODO: makeMessagesStreamByInputIdAndAccess
|
|
597
597
|
export const makeMessagesStreamByInputIdAndAccess = () => {
|
|
598
|
-
throw new Error('
|
|
598
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
599
599
|
}
|
|
600
600
|
|
|
601
601
|
/**
|
package/src/internal/Parsing.ts
CHANGED
|
@@ -22,9 +22,13 @@ export const withParsedDataField = <
|
|
|
22
22
|
) =>
|
|
23
23
|
Stream.map(self, ({ midiMessage, ...obj }) => ({
|
|
24
24
|
...obj,
|
|
25
|
+
_tag: 'ParsedMIDIMessage' as const,
|
|
25
26
|
midiMessage: dataEntryParser(midiMessage),
|
|
26
27
|
})) as Stream.Stream<
|
|
27
|
-
Omit<A, 'midiMessage'> & {
|
|
28
|
+
Omit<A, 'midiMessage' | '_tag'> & {
|
|
29
|
+
readonly _tag: 'ParsedMIDIMessage'
|
|
30
|
+
readonly midiMessage: ParsedMIDIMessages
|
|
31
|
+
},
|
|
28
32
|
E,
|
|
29
33
|
R
|
|
30
34
|
>
|
package/src/internal/makePortStateChangesStream/makePortStateChangesStreamByPortIdAndAccess.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// TODO: makeInputStateChangesStreamByPortIdAndAccess
|
|
2
2
|
export const makeInputStateChangesStreamByPortIdAndAccess = () => {
|
|
3
|
-
throw new Error('
|
|
3
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
// TODO: makeOutputStateChangesStreamByPortIdAndAccess
|
|
7
7
|
export const makeOutputStateChangesStreamByPortIdAndAccess = () => {
|
|
8
|
-
throw new Error('
|
|
8
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
// TODO: makePortStateChangesStreamByPortIdAndAccess
|
|
12
12
|
export const makePortStateChangesStreamByPortIdAndAccess = () => {
|
|
13
|
-
throw new Error('
|
|
13
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
14
14
|
}
|
|
@@ -1,74 +1,74 @@
|
|
|
1
1
|
// TODO: isInputConnectionClosedByPortIdAndAccess
|
|
2
2
|
export const isInputConnectionClosedByPortIdAndAccess = () => {
|
|
3
|
-
throw new Error('
|
|
3
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
// TODO: isInputConnectionOpenByPortIdAndAccess
|
|
7
7
|
export const isInputConnectionOpenByPortIdAndAccess = () => {
|
|
8
|
-
throw new Error('
|
|
8
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
// TODO: isInputConnectionPendingByPortIdAndAccess
|
|
12
12
|
export const isInputConnectionPendingByPortIdAndAccess = () => {
|
|
13
|
-
throw new Error('
|
|
13
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
// TODO: isInputDeviceConnectedByPortIdAndAccess
|
|
17
17
|
export const isInputDeviceConnectedByPortIdAndAccess = () => {
|
|
18
|
-
throw new Error('
|
|
18
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
// TODO: isInputDeviceDisconnectedByPortIdAndAccess
|
|
22
22
|
export const isInputDeviceDisconnectedByPortIdAndAccess = () => {
|
|
23
|
-
throw new Error('
|
|
23
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
// TODO: isOutputConnectionClosedByPortIdAndAccess
|
|
27
27
|
export const isOutputConnectionClosedByPortIdAndAccess = () => {
|
|
28
|
-
throw new Error('
|
|
28
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
// TODO: isOutputConnectionOpenByPortIdAndAccess
|
|
32
32
|
export const isOutputConnectionOpenByPortIdAndAccess = () => {
|
|
33
|
-
throw new Error('
|
|
33
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
// TODO: isOutputConnectionPendingByPortIdAndAccess
|
|
37
37
|
export const isOutputConnectionPendingByPortIdAndAccess = () => {
|
|
38
|
-
throw new Error('
|
|
38
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
// TODO: isOutputDeviceConnectedByPortIdAndAccess
|
|
42
42
|
export const isOutputDeviceConnectedByPortIdAndAccess = () => {
|
|
43
|
-
throw new Error('
|
|
43
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
// TODO: isOutputDeviceDisconnectedByPortIdAndAccess
|
|
47
47
|
export const isOutputDeviceDisconnectedByPortIdAndAccess = () => {
|
|
48
|
-
throw new Error('
|
|
48
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
// TODO: isPortConnectionClosedByPortIdAndAccess
|
|
52
52
|
export const isPortConnectionClosedByPortIdAndAccess = () => {
|
|
53
|
-
throw new Error('
|
|
53
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
// TODO: isPortConnectionOpenByPortIdAndAccess
|
|
57
57
|
export const isPortConnectionOpenByPortIdAndAccess = () => {
|
|
58
|
-
throw new Error('
|
|
58
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
// TODO: isPortConnectionPendingByPortIdAndAccess
|
|
62
62
|
export const isPortConnectionPendingByPortIdAndAccess = () => {
|
|
63
|
-
throw new Error('
|
|
63
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
// TODO: isPortDeviceConnectedByPortIdAndAccess
|
|
67
67
|
export const isPortDeviceConnectedByPortIdAndAccess = () => {
|
|
68
|
-
throw new Error('
|
|
68
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
// TODO: isPortDeviceDisconnectedByPortIdAndAccess
|
|
72
72
|
export const isPortDeviceDisconnectedByPortIdAndAccess = () => {
|
|
73
|
-
throw new Error('
|
|
73
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
74
74
|
}
|
|
@@ -1,74 +1,74 @@
|
|
|
1
1
|
// TODO: isInputConnectionClosedByPortIdInContext
|
|
2
2
|
export const isInputConnectionClosedByPortIdInContext = () => {
|
|
3
|
-
throw new Error('
|
|
3
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
// TODO: isInputConnectionOpenByPortIdInContext
|
|
7
7
|
export const isInputConnectionOpenByPortIdInContext = () => {
|
|
8
|
-
throw new Error('
|
|
8
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
// TODO: isInputConnectionPendingByPortIdInContext
|
|
12
12
|
export const isInputConnectionPendingByPortIdInContext = () => {
|
|
13
|
-
throw new Error('
|
|
13
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
// TODO: isInputDeviceConnectedByPortIdInContext
|
|
17
17
|
export const isInputDeviceConnectedByPortIdInContext = () => {
|
|
18
|
-
throw new Error('
|
|
18
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
// TODO: isInputDeviceDisconnectedByPortIdInContext
|
|
22
22
|
export const isInputDeviceDisconnectedByPortIdInContext = () => {
|
|
23
|
-
throw new Error('
|
|
23
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
// TODO: isOutputConnectionClosedByPortIdInContext
|
|
27
27
|
export const isOutputConnectionClosedByPortIdInContext = () => {
|
|
28
|
-
throw new Error('
|
|
28
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
// TODO: isOutputConnectionOpenByPortIdInContext
|
|
32
32
|
export const isOutputConnectionOpenByPortIdInContext = () => {
|
|
33
|
-
throw new Error('
|
|
33
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
// TODO: isOutputConnectionPendingByPortIdInContext
|
|
37
37
|
export const isOutputConnectionPendingByPortIdInContext = () => {
|
|
38
|
-
throw new Error('
|
|
38
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
// TODO: isOutputDeviceConnectedByPortIdInContext
|
|
42
42
|
export const isOutputDeviceConnectedByPortIdInContext = () => {
|
|
43
|
-
throw new Error('
|
|
43
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
// TODO: isOutputDeviceDisconnectedByPortIdInContext
|
|
47
47
|
export const isOutputDeviceDisconnectedByPortIdInContext = () => {
|
|
48
|
-
throw new Error('
|
|
48
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
// TODO: isPortConnectionClosedByPortIdInContext
|
|
52
52
|
export const isPortConnectionClosedByPortIdInContext = () => {
|
|
53
|
-
throw new Error('
|
|
53
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
// TODO: isPortConnectionOpenByPortIdInContext
|
|
57
57
|
export const isPortConnectionOpenByPortIdInContext = () => {
|
|
58
|
-
throw new Error('
|
|
58
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
// TODO: isPortConnectionPendingByPortIdInContext
|
|
62
62
|
export const isPortConnectionPendingByPortIdInContext = () => {
|
|
63
|
-
throw new Error('
|
|
63
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
// TODO: isPortDeviceConnectedByPortIdInContext
|
|
67
67
|
export const isPortDeviceConnectedByPortIdInContext = () => {
|
|
68
|
-
throw new Error('
|
|
68
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
// TODO: isPortDeviceDisconnectedByPortIdInContext
|
|
72
72
|
export const isPortDeviceDisconnectedByPortIdInContext = () => {
|
|
73
|
-
throw new Error('
|
|
73
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
74
74
|
}
|
|
@@ -91,20 +91,20 @@ export const getPortConnectionStateByPortIdAndAccess = <TE = never, TR = never>(
|
|
|
91
91
|
|
|
92
92
|
// TODO: getInputConnectionStateByPortIdAndAccess
|
|
93
93
|
export const getInputConnectionStateByPortIdAndAccess = () => {
|
|
94
|
-
throw new Error('
|
|
94
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
// TODO: getInputDeviceStateByPortIdAndAccess
|
|
98
98
|
export const getInputDeviceStateByPortIdAndAccess = () => {
|
|
99
|
-
throw new Error('
|
|
99
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
// TODO: getOutputConnectionStateByPortIdAndAccess
|
|
103
103
|
export const getOutputConnectionStateByPortIdAndAccess = () => {
|
|
104
|
-
throw new Error('
|
|
104
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
// TODO: getOutputDeviceStateByPortIdAndAccess
|
|
108
108
|
export const getOutputDeviceStateByPortIdAndAccess = () => {
|
|
109
|
-
throw new Error('
|
|
109
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
110
110
|
}
|
|
@@ -18,20 +18,20 @@ export const getPortConnectionStateByPortId = (id: EMIDIPort.BothId) =>
|
|
|
18
18
|
|
|
19
19
|
// TODO: getInputConnectionStateByPortId
|
|
20
20
|
export const getInputConnectionStateByPortId = () => {
|
|
21
|
-
throw new Error('
|
|
21
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
// TODO: getInputDeviceStateByPortId
|
|
25
25
|
export const getInputDeviceStateByPortId = () => {
|
|
26
|
-
throw new Error('
|
|
26
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
// TODO: getOutputConnectionStateByPortId
|
|
30
30
|
export const getOutputConnectionStateByPortId = () => {
|
|
31
|
-
throw new Error('
|
|
31
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
// TODO: getOutputDeviceStateByPortId
|
|
35
35
|
export const getOutputDeviceStateByPortId = () => {
|
|
36
|
-
throw new Error('
|
|
36
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
37
37
|
}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
// TODO: matchInputConnectionStateByPortIdAndAccess
|
|
2
2
|
export const matchInputConnectionStateByPortIdAndAccess = () => {
|
|
3
|
-
throw new Error('
|
|
3
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
// TODO: matchInputDeviceStateByPortIdAndAccess
|
|
7
7
|
export const matchInputDeviceStateByPortIdAndAccess = () => {
|
|
8
|
-
throw new Error('
|
|
8
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
// TODO: matchOutputConnectionStateByPortIdAndAccess
|
|
12
12
|
export const matchOutputConnectionStateByPortIdAndAccess = () => {
|
|
13
|
-
throw new Error('
|
|
13
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
// TODO: matchOutputDeviceStateByPortIdAndAccess
|
|
17
17
|
export const matchOutputDeviceStateByPortIdAndAccess = () => {
|
|
18
|
-
throw new Error('
|
|
18
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
// TODO: matchPortConnectionStateByPortIdAndAccess
|
|
22
22
|
export const matchPortConnectionStateByPortIdAndAccess = () => {
|
|
23
|
-
throw new Error('
|
|
23
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
// TODO: matchPortDeviceStateByPortIdAndAccess
|
|
27
27
|
export const matchPortDeviceStateByPortIdAndAccess = () => {
|
|
28
|
-
throw new Error('
|
|
28
|
+
throw new Error('Not implemented 😿 YET!! 🤩')
|
|
29
29
|
}
|