@effect-app/vue 2.52.5 → 2.52.7
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/CHANGELOG.md +12 -0
- package/dist/experimental/commander.d.ts +79 -58
- package/dist/experimental/commander.d.ts.map +1 -1
- package/dist/experimental/commander.js +39 -7
- package/dist/experimental/makeExperimental.d.ts +3 -54
- package/dist/experimental/makeExperimental.d.ts.map +1 -1
- package/dist/experimental/toast.d.ts +1 -1
- package/package.json +1 -1
- package/src/experimental/commander.ts +373 -321
- package/test/Mutation.test.ts +46 -46
- package/test/dist/stubs.d.ts +4 -54
- package/test/dist/stubs.d.ts.map +1 -1
|
@@ -8,7 +8,7 @@ import { OperationFailure, OperationSuccess } from "effect-app/Operations"
|
|
|
8
8
|
import { type RuntimeFiber } from "effect/Fiber"
|
|
9
9
|
import { type NoInfer } from "effect/Types"
|
|
10
10
|
import { type YieldWrap } from "effect/Utils"
|
|
11
|
-
import { computed,
|
|
11
|
+
import { computed, reactive } from "vue"
|
|
12
12
|
import { ConfirmSvc } from "./confirm.js"
|
|
13
13
|
import { IntlSvc } from "./intl.js"
|
|
14
14
|
import { WithToastSvc } from "./withToast.js"
|
|
@@ -40,16 +40,334 @@ export const DefaultIntl = {
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
/**
|
|
44
|
+
* Use on form submit @handler callbacks, to handle form submitting state.
|
|
45
|
+
*/
|
|
46
|
+
const handleSubmit = <Arg>(
|
|
47
|
+
command: (arg: Arg) => RuntimeFiber<any, any>
|
|
48
|
+
) =>
|
|
49
|
+
(arg: Arg, resolve: () => void) => {
|
|
50
|
+
return command(arg).addObserver(resolve)
|
|
51
|
+
}
|
|
52
|
+
|
|
43
53
|
export class CommandContext extends Context.Tag("CommandContext")<
|
|
44
54
|
CommandContext,
|
|
45
55
|
{ action: string }
|
|
46
56
|
>() {}
|
|
47
57
|
|
|
48
|
-
export
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
58
|
+
export type EmitWithCallback<A, Event extends string> = (event: Event, value: A, onDone: () => void) => void
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Use to wrap emit calls with a callback to signal completion.
|
|
62
|
+
* Useful when the publisher wants to wait for the subscriber to finish processing.
|
|
63
|
+
*/
|
|
64
|
+
export const wrapEmit = <A, Event extends string>(
|
|
65
|
+
emit: EmitWithCallback<A, NoInfer<Event>>,
|
|
66
|
+
event: Event
|
|
67
|
+
) =>
|
|
68
|
+
(value: A) => new Promise<void>((resolve) => emit(event, value, resolve))
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Shorthand of @see wrapEmit to wrap emit calls for OmegaForm form submission callback
|
|
72
|
+
*/
|
|
73
|
+
export const wrapEmitSubmit = <A>(
|
|
74
|
+
emit: EmitWithCallback<A, "submit">
|
|
75
|
+
) => {
|
|
76
|
+
const submit = wrapEmit(emit, "submit")
|
|
77
|
+
return ({ value }: { value: A }) => submit(value)
|
|
52
78
|
}
|
|
79
|
+
|
|
80
|
+
export declare namespace Commander {
|
|
81
|
+
export interface CommandProps<A, E> {
|
|
82
|
+
action: string
|
|
83
|
+
result: Result<A, E>
|
|
84
|
+
waiting: boolean
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export interface UnaryCommandOut<Arg, A, E> extends CommandProps<A, E> {
|
|
88
|
+
handle: (a: Arg) => RuntimeFiber<Exit.Exit<A, E>, never>
|
|
89
|
+
/* for forms, only use with unary functions */
|
|
90
|
+
handleSubmit: (a: Arg, resolve: () => Exit.Exit<A, E>) => void
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export interface OtherCommandOut<Args extends Array<any>, A, E> extends CommandProps<A, E> {
|
|
94
|
+
handle: (...args: Args) => RuntimeFiber<Exit.Exit<A, E>, never>
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export type CommandOut<Args extends Array<any>, A, E> = Args extends [infer _A] ? UnaryCommandOut<_A, A, E>
|
|
98
|
+
: OtherCommandOut<Args, A, E>
|
|
99
|
+
|
|
100
|
+
type CommandOutHelper<Args extends Array<any>, Eff extends Effect.Effect<any, any, any>> = CommandOut<
|
|
101
|
+
Args,
|
|
102
|
+
Effect.Effect.Success<Eff>,
|
|
103
|
+
Effect.Effect.Error<Eff>
|
|
104
|
+
>
|
|
105
|
+
|
|
106
|
+
export type Gen<RT> = {
|
|
107
|
+
<Eff extends YieldWrap<Effect.Effect<any, any, RT | CommandContext>>, AEff, Args extends Array<any>>(
|
|
108
|
+
body: (...args: Args) => Generator<Eff, AEff, never>
|
|
109
|
+
): CommandOut<
|
|
110
|
+
Args,
|
|
111
|
+
AEff,
|
|
112
|
+
[Eff] extends [never] ? never
|
|
113
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
114
|
+
: never
|
|
115
|
+
>
|
|
116
|
+
<
|
|
117
|
+
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
118
|
+
AEff,
|
|
119
|
+
Args extends Array<any>,
|
|
120
|
+
A extends Effect.Effect<any, any, RT | CommandContext>
|
|
121
|
+
>(
|
|
122
|
+
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
123
|
+
a: (
|
|
124
|
+
_: Effect.Effect<
|
|
125
|
+
AEff,
|
|
126
|
+
[Eff] extends [never] ? never
|
|
127
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
128
|
+
: never,
|
|
129
|
+
[Eff] extends [never] ? never
|
|
130
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
131
|
+
: never
|
|
132
|
+
>,
|
|
133
|
+
...args: NoInfer<Args>
|
|
134
|
+
) => A
|
|
135
|
+
): CommandOutHelper<Args, A>
|
|
136
|
+
<
|
|
137
|
+
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
138
|
+
AEff,
|
|
139
|
+
Args extends Array<any>,
|
|
140
|
+
A,
|
|
141
|
+
B extends Effect.Effect<any, any, RT | CommandContext>
|
|
142
|
+
>(
|
|
143
|
+
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
144
|
+
a: (
|
|
145
|
+
_: Effect.Effect<
|
|
146
|
+
AEff,
|
|
147
|
+
[Eff] extends [never] ? never
|
|
148
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
149
|
+
: never,
|
|
150
|
+
[Eff] extends [never] ? never
|
|
151
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
152
|
+
: never
|
|
153
|
+
>,
|
|
154
|
+
...args: NoInfer<Args>
|
|
155
|
+
) => A,
|
|
156
|
+
b: (_: A, ...args: NoInfer<Args>) => B
|
|
157
|
+
): CommandOutHelper<Args, B>
|
|
158
|
+
<
|
|
159
|
+
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
160
|
+
AEff,
|
|
161
|
+
Args extends Array<any>,
|
|
162
|
+
A,
|
|
163
|
+
B,
|
|
164
|
+
C extends Effect.Effect<any, any, RT | CommandContext>
|
|
165
|
+
>(
|
|
166
|
+
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
167
|
+
a: (
|
|
168
|
+
_: Effect.Effect<
|
|
169
|
+
AEff,
|
|
170
|
+
[Eff] extends [never] ? never
|
|
171
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
172
|
+
: never,
|
|
173
|
+
[Eff] extends [never] ? never
|
|
174
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
175
|
+
: never
|
|
176
|
+
>,
|
|
177
|
+
...args: NoInfer<Args>
|
|
178
|
+
) => A,
|
|
179
|
+
b: (_: A, ...args: NoInfer<Args>) => B,
|
|
180
|
+
c: (_: B, ...args: NoInfer<Args>) => C
|
|
181
|
+
): CommandOutHelper<Args, C>
|
|
182
|
+
<
|
|
183
|
+
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
184
|
+
AEff,
|
|
185
|
+
Args extends Array<any>,
|
|
186
|
+
A,
|
|
187
|
+
B,
|
|
188
|
+
C,
|
|
189
|
+
D extends Effect.Effect<any, any, RT | CommandContext>
|
|
190
|
+
>(
|
|
191
|
+
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
192
|
+
a: (
|
|
193
|
+
_: Effect.Effect<
|
|
194
|
+
AEff,
|
|
195
|
+
[Eff] extends [never] ? never
|
|
196
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
197
|
+
: never,
|
|
198
|
+
[Eff] extends [never] ? never
|
|
199
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
200
|
+
: never
|
|
201
|
+
>,
|
|
202
|
+
...args: NoInfer<Args>
|
|
203
|
+
) => A,
|
|
204
|
+
b: (_: A, ...args: NoInfer<Args>) => B,
|
|
205
|
+
c: (_: B, ...args: NoInfer<Args>) => C,
|
|
206
|
+
d: (_: C, ...args: NoInfer<Args>) => D
|
|
207
|
+
): CommandOutHelper<Args, D>
|
|
208
|
+
<
|
|
209
|
+
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
210
|
+
AEff,
|
|
211
|
+
Args extends Array<any>,
|
|
212
|
+
A,
|
|
213
|
+
B,
|
|
214
|
+
C,
|
|
215
|
+
D,
|
|
216
|
+
E extends Effect.Effect<any, any, RT | CommandContext>
|
|
217
|
+
>(
|
|
218
|
+
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
219
|
+
a: (
|
|
220
|
+
_: Effect.Effect<
|
|
221
|
+
AEff,
|
|
222
|
+
[Eff] extends [never] ? never
|
|
223
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
224
|
+
: never,
|
|
225
|
+
[Eff] extends [never] ? never
|
|
226
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
227
|
+
: never
|
|
228
|
+
>,
|
|
229
|
+
...args: NoInfer<Args>
|
|
230
|
+
) => A,
|
|
231
|
+
b: (_: A, ...args: NoInfer<Args>) => B,
|
|
232
|
+
c: (_: B, ...args: NoInfer<Args>) => C,
|
|
233
|
+
d: (_: C, ...args: NoInfer<Args>) => D,
|
|
234
|
+
e: (_: D, ...args: NoInfer<Args>) => E
|
|
235
|
+
): CommandOutHelper<Args, E>
|
|
236
|
+
<
|
|
237
|
+
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
238
|
+
AEff,
|
|
239
|
+
Args extends Array<any>,
|
|
240
|
+
A,
|
|
241
|
+
B,
|
|
242
|
+
C,
|
|
243
|
+
D,
|
|
244
|
+
E,
|
|
245
|
+
F extends Effect.Effect<any, any, RT | CommandContext>
|
|
246
|
+
>(
|
|
247
|
+
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
248
|
+
a: (
|
|
249
|
+
_: Effect.Effect<
|
|
250
|
+
AEff,
|
|
251
|
+
[Eff] extends [never] ? never
|
|
252
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
253
|
+
: never,
|
|
254
|
+
[Eff] extends [never] ? never
|
|
255
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
256
|
+
: never
|
|
257
|
+
>,
|
|
258
|
+
...args: NoInfer<Args>
|
|
259
|
+
) => A,
|
|
260
|
+
b: (_: A, ...args: NoInfer<Args>) => B,
|
|
261
|
+
c: (_: B, ...args: NoInfer<Args>) => C,
|
|
262
|
+
d: (_: C, ...args: NoInfer<Args>) => D,
|
|
263
|
+
e: (_: D, ...args: NoInfer<Args>) => E,
|
|
264
|
+
f: (_: E, ...args: NoInfer<Args>) => F
|
|
265
|
+
): CommandOutHelper<Args, F>
|
|
266
|
+
<
|
|
267
|
+
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
268
|
+
AEff,
|
|
269
|
+
Args extends Array<any>,
|
|
270
|
+
A,
|
|
271
|
+
B,
|
|
272
|
+
C,
|
|
273
|
+
D,
|
|
274
|
+
E,
|
|
275
|
+
F,
|
|
276
|
+
G extends Effect.Effect<any, any, RT | CommandContext>
|
|
277
|
+
>(
|
|
278
|
+
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
279
|
+
a: (
|
|
280
|
+
_: Effect.Effect<
|
|
281
|
+
AEff,
|
|
282
|
+
[Eff] extends [never] ? never
|
|
283
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
284
|
+
: never,
|
|
285
|
+
[Eff] extends [never] ? never
|
|
286
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
287
|
+
: never
|
|
288
|
+
>,
|
|
289
|
+
...args: NoInfer<Args>
|
|
290
|
+
) => A,
|
|
291
|
+
b: (_: A, ...args: NoInfer<Args>) => B,
|
|
292
|
+
c: (_: B, ...args: NoInfer<Args>) => C,
|
|
293
|
+
d: (_: C, ...args: NoInfer<Args>) => D,
|
|
294
|
+
e: (_: D, ...args: NoInfer<Args>) => E,
|
|
295
|
+
f: (_: E, ...args: NoInfer<Args>) => F,
|
|
296
|
+
g: (_: F, ...args: NoInfer<Args>) => G
|
|
297
|
+
): CommandOutHelper<Args, G>
|
|
298
|
+
<
|
|
299
|
+
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
300
|
+
AEff,
|
|
301
|
+
Args extends Array<any>,
|
|
302
|
+
A,
|
|
303
|
+
B,
|
|
304
|
+
C,
|
|
305
|
+
D,
|
|
306
|
+
E,
|
|
307
|
+
F,
|
|
308
|
+
G,
|
|
309
|
+
H extends Effect.Effect<any, any, RT | CommandContext>
|
|
310
|
+
>(
|
|
311
|
+
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
312
|
+
a: (
|
|
313
|
+
_: Effect.Effect<
|
|
314
|
+
AEff,
|
|
315
|
+
[Eff] extends [never] ? never
|
|
316
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
317
|
+
: never,
|
|
318
|
+
[Eff] extends [never] ? never
|
|
319
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
320
|
+
: never
|
|
321
|
+
>,
|
|
322
|
+
...args: NoInfer<Args>
|
|
323
|
+
) => A,
|
|
324
|
+
b: (_: A, ...args: NoInfer<Args>) => B,
|
|
325
|
+
c: (_: B, ...args: NoInfer<Args>) => C,
|
|
326
|
+
d: (_: C, ...args: NoInfer<Args>) => D,
|
|
327
|
+
e: (_: D, ...args: NoInfer<Args>) => E,
|
|
328
|
+
f: (_: E, ...args: NoInfer<Args>) => F,
|
|
329
|
+
g: (_: F, ...args: NoInfer<Args>) => G,
|
|
330
|
+
h: (_: G, ...args: NoInfer<Args>) => H
|
|
331
|
+
): CommandOutHelper<Args, H>
|
|
332
|
+
<
|
|
333
|
+
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
334
|
+
AEff,
|
|
335
|
+
Args extends Array<any>,
|
|
336
|
+
A,
|
|
337
|
+
B,
|
|
338
|
+
C,
|
|
339
|
+
D,
|
|
340
|
+
E,
|
|
341
|
+
F,
|
|
342
|
+
G,
|
|
343
|
+
H,
|
|
344
|
+
I extends Effect.Effect<any, any, RT | CommandContext>
|
|
345
|
+
>(
|
|
346
|
+
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
347
|
+
a: (
|
|
348
|
+
_: Effect.Effect<
|
|
349
|
+
AEff,
|
|
350
|
+
[Eff] extends [never] ? never
|
|
351
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
352
|
+
: never,
|
|
353
|
+
[Eff] extends [never] ? never
|
|
354
|
+
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
355
|
+
: never
|
|
356
|
+
>,
|
|
357
|
+
...args: NoInfer<Args>
|
|
358
|
+
) => A,
|
|
359
|
+
b: (_: A, ...args: NoInfer<Args>) => B,
|
|
360
|
+
c: (_: B, ...args: NoInfer<Args>) => C,
|
|
361
|
+
d: (_: C, ...args: NoInfer<Args>) => D,
|
|
362
|
+
e: (_: D, ...args: NoInfer<Args>) => E,
|
|
363
|
+
f: (_: E, ...args: NoInfer<Args>) => F,
|
|
364
|
+
g: (_: F, ...args: NoInfer<Args>) => G,
|
|
365
|
+
h: (_: G, ...args: NoInfer<Args>) => H,
|
|
366
|
+
i: (_: H, ...args: NoInfer<Args>) => I
|
|
367
|
+
): CommandOutHelper<Args, I>
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
53
371
|
// @effect-diagnostics-next-line missingEffectServiceDependency:off
|
|
54
372
|
export class Commander extends Effect.Service<Commander>()("Commander", {
|
|
55
373
|
dependencies: [WithToastSvc.Default, ConfirmSvc.Default],
|
|
@@ -58,284 +376,6 @@ export class Commander extends Effect.Service<Commander>()("Commander", {
|
|
|
58
376
|
const withToast = yield* WithToastSvc
|
|
59
377
|
const { confirmOrInterrupt } = yield* ConfirmSvc
|
|
60
378
|
|
|
61
|
-
type CommandOut<Args extends Array<any>, A, E> = ComputedRef<
|
|
62
|
-
((...a: Args) => RuntimeFiber<Exit.Exit<A, E>, never>) & {
|
|
63
|
-
action: string
|
|
64
|
-
result: Result<A, E>
|
|
65
|
-
waiting: boolean
|
|
66
|
-
}
|
|
67
|
-
>
|
|
68
|
-
|
|
69
|
-
type CommandOutHelper<Args extends Array<any>, Eff extends Effect.Effect<any, any, any>> = CommandOut<
|
|
70
|
-
Args,
|
|
71
|
-
Effect.Effect.Success<Eff>,
|
|
72
|
-
Effect.Effect.Error<Eff>
|
|
73
|
-
>
|
|
74
|
-
|
|
75
|
-
type Gen<RT> = {
|
|
76
|
-
<Eff extends YieldWrap<Effect.Effect<any, any, RT | CommandContext>>, AEff, Args extends Array<any>>(
|
|
77
|
-
body: (...args: Args) => Generator<Eff, AEff, never>
|
|
78
|
-
): CommandOut<
|
|
79
|
-
Args,
|
|
80
|
-
AEff,
|
|
81
|
-
[Eff] extends [never] ? never
|
|
82
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
83
|
-
: never
|
|
84
|
-
>
|
|
85
|
-
<
|
|
86
|
-
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
87
|
-
AEff,
|
|
88
|
-
Args extends Array<any>,
|
|
89
|
-
A extends Effect.Effect<any, any, RT | CommandContext>
|
|
90
|
-
>(
|
|
91
|
-
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
92
|
-
a: (
|
|
93
|
-
_: Effect.Effect<
|
|
94
|
-
AEff,
|
|
95
|
-
[Eff] extends [never] ? never
|
|
96
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
97
|
-
: never,
|
|
98
|
-
[Eff] extends [never] ? never
|
|
99
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
100
|
-
: never
|
|
101
|
-
>,
|
|
102
|
-
...args: NoInfer<Args>
|
|
103
|
-
) => A
|
|
104
|
-
): CommandOutHelper<Args, A>
|
|
105
|
-
<
|
|
106
|
-
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
107
|
-
AEff,
|
|
108
|
-
Args extends Array<any>,
|
|
109
|
-
A,
|
|
110
|
-
B extends Effect.Effect<any, any, RT | CommandContext>
|
|
111
|
-
>(
|
|
112
|
-
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
113
|
-
a: (
|
|
114
|
-
_: Effect.Effect<
|
|
115
|
-
AEff,
|
|
116
|
-
[Eff] extends [never] ? never
|
|
117
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
118
|
-
: never,
|
|
119
|
-
[Eff] extends [never] ? never
|
|
120
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
121
|
-
: never
|
|
122
|
-
>,
|
|
123
|
-
...args: NoInfer<Args>
|
|
124
|
-
) => A,
|
|
125
|
-
b: (_: A, ...args: NoInfer<Args>) => B
|
|
126
|
-
): CommandOutHelper<Args, B>
|
|
127
|
-
<
|
|
128
|
-
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
129
|
-
AEff,
|
|
130
|
-
Args extends Array<any>,
|
|
131
|
-
A,
|
|
132
|
-
B,
|
|
133
|
-
C extends Effect.Effect<any, any, RT | CommandContext>
|
|
134
|
-
>(
|
|
135
|
-
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
136
|
-
a: (
|
|
137
|
-
_: Effect.Effect<
|
|
138
|
-
AEff,
|
|
139
|
-
[Eff] extends [never] ? never
|
|
140
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
141
|
-
: never,
|
|
142
|
-
[Eff] extends [never] ? never
|
|
143
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
144
|
-
: never
|
|
145
|
-
>,
|
|
146
|
-
...args: NoInfer<Args>
|
|
147
|
-
) => A,
|
|
148
|
-
b: (_: A, ...args: NoInfer<Args>) => B,
|
|
149
|
-
c: (_: B, ...args: NoInfer<Args>) => C
|
|
150
|
-
): CommandOutHelper<Args, C>
|
|
151
|
-
<
|
|
152
|
-
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
153
|
-
AEff,
|
|
154
|
-
Args extends Array<any>,
|
|
155
|
-
A,
|
|
156
|
-
B,
|
|
157
|
-
C,
|
|
158
|
-
D extends Effect.Effect<any, any, RT | CommandContext>
|
|
159
|
-
>(
|
|
160
|
-
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
161
|
-
a: (
|
|
162
|
-
_: Effect.Effect<
|
|
163
|
-
AEff,
|
|
164
|
-
[Eff] extends [never] ? never
|
|
165
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
166
|
-
: never,
|
|
167
|
-
[Eff] extends [never] ? never
|
|
168
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
169
|
-
: never
|
|
170
|
-
>,
|
|
171
|
-
...args: NoInfer<Args>
|
|
172
|
-
) => A,
|
|
173
|
-
b: (_: A, ...args: NoInfer<Args>) => B,
|
|
174
|
-
c: (_: B, ...args: NoInfer<Args>) => C,
|
|
175
|
-
d: (_: C, ...args: NoInfer<Args>) => D
|
|
176
|
-
): CommandOutHelper<Args, D>
|
|
177
|
-
<
|
|
178
|
-
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
179
|
-
AEff,
|
|
180
|
-
Args extends Array<any>,
|
|
181
|
-
A,
|
|
182
|
-
B,
|
|
183
|
-
C,
|
|
184
|
-
D,
|
|
185
|
-
E extends Effect.Effect<any, any, RT | CommandContext>
|
|
186
|
-
>(
|
|
187
|
-
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
188
|
-
a: (
|
|
189
|
-
_: Effect.Effect<
|
|
190
|
-
AEff,
|
|
191
|
-
[Eff] extends [never] ? never
|
|
192
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
193
|
-
: never,
|
|
194
|
-
[Eff] extends [never] ? never
|
|
195
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
196
|
-
: never
|
|
197
|
-
>,
|
|
198
|
-
...args: NoInfer<Args>
|
|
199
|
-
) => A,
|
|
200
|
-
b: (_: A, ...args: NoInfer<Args>) => B,
|
|
201
|
-
c: (_: B, ...args: NoInfer<Args>) => C,
|
|
202
|
-
d: (_: C, ...args: NoInfer<Args>) => D,
|
|
203
|
-
e: (_: D, ...args: NoInfer<Args>) => E
|
|
204
|
-
): CommandOutHelper<Args, E>
|
|
205
|
-
<
|
|
206
|
-
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
207
|
-
AEff,
|
|
208
|
-
Args extends Array<any>,
|
|
209
|
-
A,
|
|
210
|
-
B,
|
|
211
|
-
C,
|
|
212
|
-
D,
|
|
213
|
-
E,
|
|
214
|
-
F extends Effect.Effect<any, any, RT | CommandContext>
|
|
215
|
-
>(
|
|
216
|
-
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
217
|
-
a: (
|
|
218
|
-
_: Effect.Effect<
|
|
219
|
-
AEff,
|
|
220
|
-
[Eff] extends [never] ? never
|
|
221
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
222
|
-
: never,
|
|
223
|
-
[Eff] extends [never] ? never
|
|
224
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
225
|
-
: never
|
|
226
|
-
>,
|
|
227
|
-
...args: NoInfer<Args>
|
|
228
|
-
) => A,
|
|
229
|
-
b: (_: A, ...args: NoInfer<Args>) => B,
|
|
230
|
-
c: (_: B, ...args: NoInfer<Args>) => C,
|
|
231
|
-
d: (_: C, ...args: NoInfer<Args>) => D,
|
|
232
|
-
e: (_: D, ...args: NoInfer<Args>) => E,
|
|
233
|
-
f: (_: E, ...args: NoInfer<Args>) => F
|
|
234
|
-
): CommandOutHelper<Args, F>
|
|
235
|
-
<
|
|
236
|
-
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
237
|
-
AEff,
|
|
238
|
-
Args extends Array<any>,
|
|
239
|
-
A,
|
|
240
|
-
B,
|
|
241
|
-
C,
|
|
242
|
-
D,
|
|
243
|
-
E,
|
|
244
|
-
F,
|
|
245
|
-
G extends Effect.Effect<any, any, RT | CommandContext>
|
|
246
|
-
>(
|
|
247
|
-
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
248
|
-
a: (
|
|
249
|
-
_: Effect.Effect<
|
|
250
|
-
AEff,
|
|
251
|
-
[Eff] extends [never] ? never
|
|
252
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
253
|
-
: never,
|
|
254
|
-
[Eff] extends [never] ? never
|
|
255
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
256
|
-
: never
|
|
257
|
-
>,
|
|
258
|
-
...args: NoInfer<Args>
|
|
259
|
-
) => A,
|
|
260
|
-
b: (_: A, ...args: NoInfer<Args>) => B,
|
|
261
|
-
c: (_: B, ...args: NoInfer<Args>) => C,
|
|
262
|
-
d: (_: C, ...args: NoInfer<Args>) => D,
|
|
263
|
-
e: (_: D, ...args: NoInfer<Args>) => E,
|
|
264
|
-
f: (_: E, ...args: NoInfer<Args>) => F,
|
|
265
|
-
g: (_: F, ...args: NoInfer<Args>) => G
|
|
266
|
-
): CommandOutHelper<Args, G>
|
|
267
|
-
<
|
|
268
|
-
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
269
|
-
AEff,
|
|
270
|
-
Args extends Array<any>,
|
|
271
|
-
A,
|
|
272
|
-
B,
|
|
273
|
-
C,
|
|
274
|
-
D,
|
|
275
|
-
E,
|
|
276
|
-
F,
|
|
277
|
-
G,
|
|
278
|
-
H extends Effect.Effect<any, any, RT | CommandContext>
|
|
279
|
-
>(
|
|
280
|
-
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
281
|
-
a: (
|
|
282
|
-
_: Effect.Effect<
|
|
283
|
-
AEff,
|
|
284
|
-
[Eff] extends [never] ? never
|
|
285
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
286
|
-
: never,
|
|
287
|
-
[Eff] extends [never] ? never
|
|
288
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
289
|
-
: never
|
|
290
|
-
>,
|
|
291
|
-
...args: NoInfer<Args>
|
|
292
|
-
) => A,
|
|
293
|
-
b: (_: A, ...args: NoInfer<Args>) => B,
|
|
294
|
-
c: (_: B, ...args: NoInfer<Args>) => C,
|
|
295
|
-
d: (_: C, ...args: NoInfer<Args>) => D,
|
|
296
|
-
e: (_: D, ...args: NoInfer<Args>) => E,
|
|
297
|
-
f: (_: E, ...args: NoInfer<Args>) => F,
|
|
298
|
-
g: (_: F, ...args: NoInfer<Args>) => G,
|
|
299
|
-
h: (_: G, ...args: NoInfer<Args>) => H
|
|
300
|
-
): CommandOutHelper<Args, H>
|
|
301
|
-
<
|
|
302
|
-
Eff extends YieldWrap<Effect.Effect<any, any, any>>,
|
|
303
|
-
AEff,
|
|
304
|
-
Args extends Array<any>,
|
|
305
|
-
A,
|
|
306
|
-
B,
|
|
307
|
-
C,
|
|
308
|
-
D,
|
|
309
|
-
E,
|
|
310
|
-
F,
|
|
311
|
-
G,
|
|
312
|
-
H,
|
|
313
|
-
I extends Effect.Effect<any, any, RT | CommandContext>
|
|
314
|
-
>(
|
|
315
|
-
body: (...args: Args) => Generator<Eff, AEff, never>,
|
|
316
|
-
a: (
|
|
317
|
-
_: Effect.Effect<
|
|
318
|
-
AEff,
|
|
319
|
-
[Eff] extends [never] ? never
|
|
320
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
|
|
321
|
-
: never,
|
|
322
|
-
[Eff] extends [never] ? never
|
|
323
|
-
: [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
|
|
324
|
-
: never
|
|
325
|
-
>,
|
|
326
|
-
...args: NoInfer<Args>
|
|
327
|
-
) => A,
|
|
328
|
-
b: (_: A, ...args: NoInfer<Args>) => B,
|
|
329
|
-
c: (_: B, ...args: NoInfer<Args>) => C,
|
|
330
|
-
d: (_: C, ...args: NoInfer<Args>) => D,
|
|
331
|
-
e: (_: D, ...args: NoInfer<Args>) => E,
|
|
332
|
-
f: (_: E, ...args: NoInfer<Args>) => F,
|
|
333
|
-
g: (_: F, ...args: NoInfer<Args>) => G,
|
|
334
|
-
h: (_: G, ...args: NoInfer<Args>) => H,
|
|
335
|
-
i: (_: H, ...args: NoInfer<Args>) => I
|
|
336
|
-
): CommandOutHelper<Args, I>
|
|
337
|
-
}
|
|
338
|
-
|
|
339
379
|
const makeCommand =
|
|
340
380
|
<RT>(runtime: Runtime.Runtime<RT>) =>
|
|
341
381
|
(actionName: string, errorDef?: Error) =>
|
|
@@ -400,43 +440,55 @@ export class Commander extends Effect.Service<Commander>()("Commander", {
|
|
|
400
440
|
|
|
401
441
|
const [result, mut] = asResult(theHandler)
|
|
402
442
|
|
|
403
|
-
|
|
404
|
-
Object.assign(
|
|
405
|
-
(...args: Args) => {
|
|
406
|
-
const limit = Error.stackTraceLimit
|
|
407
|
-
Error.stackTraceLimit = 2
|
|
408
|
-
const errorCall = new Error()
|
|
409
|
-
Error.stackTraceLimit = limit
|
|
443
|
+
const waiting = computed(() => result.value.waiting)
|
|
410
444
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
return cache
|
|
429
|
-
}
|
|
445
|
+
const command = Object.assign((...args: Args) => {
|
|
446
|
+
const limit = Error.stackTraceLimit
|
|
447
|
+
Error.stackTraceLimit = 2
|
|
448
|
+
const errorCall = new Error()
|
|
449
|
+
Error.stackTraceLimit = limit
|
|
450
|
+
|
|
451
|
+
let cache: false | string = false
|
|
452
|
+
const captureStackTrace = () => {
|
|
453
|
+
if (cache !== false) {
|
|
454
|
+
return cache
|
|
455
|
+
}
|
|
456
|
+
if (errorCall.stack) {
|
|
457
|
+
const stackDef = errorDef!.stack!.trim().split("\n")
|
|
458
|
+
const stackCall = errorCall.stack.trim().split("\n")
|
|
459
|
+
let endStackDef = stackDef.slice(2).join("\n").trim()
|
|
460
|
+
if (!endStackDef.includes(`(`)) {
|
|
461
|
+
endStackDef = endStackDef.replace(/at (.*)/, "at ($1)")
|
|
430
462
|
}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
|
|
463
|
+
let endStackCall = stackCall.slice(2).join("\n").trim()
|
|
464
|
+
if (!endStackCall.includes(`(`)) {
|
|
465
|
+
endStackCall = endStackCall.replace(/at (.*)/, "at ($1)")
|
|
466
|
+
}
|
|
467
|
+
cache = `${endStackDef}\n${endStackCall}`
|
|
468
|
+
return cache
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
return Runtime.runFork(runtime)(Effect.withSpan(mut(...args), actionName, { captureStackTrace }))
|
|
472
|
+
}, /* make sure always create a new one, or the state won't properly propagate */ { action })
|
|
473
|
+
|
|
474
|
+
Object.defineProperty(command, "result", {
|
|
475
|
+
get() {
|
|
476
|
+
return result.value
|
|
477
|
+
}
|
|
478
|
+
})
|
|
479
|
+
Object.defineProperty(command, "waiting", {
|
|
480
|
+
get() {
|
|
481
|
+
return waiting.value
|
|
482
|
+
}
|
|
483
|
+
})
|
|
484
|
+
|
|
485
|
+
return reactive({
|
|
486
|
+
result,
|
|
487
|
+
waiting,
|
|
488
|
+
action,
|
|
489
|
+
handle: command,
|
|
490
|
+
handleSubmit: handleSubmit(command as any)
|
|
491
|
+
})
|
|
440
492
|
}
|
|
441
493
|
|
|
442
494
|
return {
|
|
@@ -541,7 +593,7 @@ export class Commander extends Effect.Service<Commander>()("Commander", {
|
|
|
541
593
|
*/
|
|
542
594
|
fn: <RT>(runtime: Runtime.Runtime<RT>) => {
|
|
543
595
|
const make = makeCommand(runtime)
|
|
544
|
-
return (actionName: string): Gen<RT> =>
|
|
596
|
+
return (actionName: string): Commander.Gen<RT> =>
|
|
545
597
|
// TODO constrain/type combinators
|
|
546
598
|
(
|
|
547
599
|
fn: any,
|
|
@@ -559,9 +611,9 @@ export class Commander extends Effect.Service<Commander>()("Commander", {
|
|
|
559
611
|
|
|
560
612
|
alt: makeCommand as <RT>(runtime: Runtime.Runtime<RT>) => (
|
|
561
613
|
actionName: string
|
|
562
|
-
) => <Args extends
|
|
614
|
+
) => <Args extends Array<any>, A, E, R extends RT | CommandContext>(
|
|
563
615
|
handler: (...args: Args) => Effect.Effect<A, E, R>
|
|
564
|
-
) =>
|
|
616
|
+
) => Commander.CommandOut<Args, A, E>
|
|
565
617
|
}
|
|
566
618
|
})
|
|
567
619
|
}) {}
|