@effect-app/vue 2.52.6 → 2.52.8

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.
@@ -43,32 +43,331 @@ export const DefaultIntl = {
43
43
  /**
44
44
  * Use on form submit @handler callbacks, to handle form submitting state.
45
45
  */
46
- const onSubmit = <Arg>(
47
- command: (arg: Arg) => RuntimeFiber<any, any>
48
- ) => {
49
- return (arg: Arg, resolve: () => void) => {
50
- return command(arg).addObserver(resolve)
51
- }
46
+ const handleSubmit = <Arg, A, E>(
47
+ command: (arg: Arg) => RuntimeFiber<A, E>
48
+ ) =>
49
+ (arg: Arg, resolve: (result: Exit.Exit<A, E>) => void) => {
50
+ return command(arg).addObserver(resolve)
52
51
  }
53
52
 
54
- // export const withSubmit = <Command extends (arg: any) => RuntimeFiber<any, any>>(command: Command) => {
55
- // return Object.assign(command, {
56
- // onSubmit: (arg: any, resolve: () => void) => {
57
- // return onSubmit(command)(arg, resolve)
58
- // }
59
- // })
60
- // }
61
-
62
53
  export class CommandContext extends Context.Tag("CommandContext")<
63
54
  CommandContext,
64
55
  { action: string }
65
56
  >() {}
66
57
 
67
- export interface CommandProps<A, E> {
68
- action: string
69
- result: Result<A, E>
70
- waiting: boolean
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)
71
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<A, E>
89
+ /* for forms, only use with unary functions */
90
+ handleSubmit: (a: Arg, resolve: (a: Exit.Exit<A, E>) => void) => 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
+
72
371
  // @effect-diagnostics-next-line missingEffectServiceDependency:off
73
372
  export class Commander extends Effect.Service<Commander>()("Commander", {
74
373
  dependencies: [WithToastSvc.Default, ConfirmSvc.Default],
@@ -77,288 +376,9 @@ export class Commander extends Effect.Service<Commander>()("Commander", {
77
376
  const withToast = yield* WithToastSvc
78
377
  const { confirmOrInterrupt } = yield* ConfirmSvc
79
378
 
80
- type CommandOut<Args extends Array<any>, A, E> = {
81
- action: string
82
- result: Result<A, E>
83
- waiting: boolean
84
- handle: (...a: Args) => RuntimeFiber<Exit.Exit<A, E>, never>
85
- /* for forms, only use with unary functions */
86
- handleSubmit: Args extends [infer A] ? (a: A, resolve: () => void) => void : never
87
- }
88
-
89
- type CommandOutHelper<Args extends Array<any>, Eff extends Effect.Effect<any, any, any>> = CommandOut<
90
- Args,
91
- Effect.Effect.Success<Eff>,
92
- Effect.Effect.Error<Eff>
93
- >
94
-
95
- type Gen<RT> = {
96
- <Eff extends YieldWrap<Effect.Effect<any, any, RT | CommandContext>>, AEff, Args extends Array<any>>(
97
- body: (...args: Args) => Generator<Eff, AEff, never>
98
- ): CommandOut<
99
- Args,
100
- AEff,
101
- [Eff] extends [never] ? never
102
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
103
- : never
104
- >
105
- <
106
- Eff extends YieldWrap<Effect.Effect<any, any, any>>,
107
- AEff,
108
- Args extends Array<any>,
109
- A extends Effect.Effect<any, any, RT | CommandContext>
110
- >(
111
- body: (...args: Args) => Generator<Eff, AEff, never>,
112
- a: (
113
- _: Effect.Effect<
114
- AEff,
115
- [Eff] extends [never] ? never
116
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
117
- : never,
118
- [Eff] extends [never] ? never
119
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
120
- : never
121
- >,
122
- ...args: NoInfer<Args>
123
- ) => A
124
- ): CommandOutHelper<Args, A>
125
- <
126
- Eff extends YieldWrap<Effect.Effect<any, any, any>>,
127
- AEff,
128
- Args extends Array<any>,
129
- A,
130
- B extends Effect.Effect<any, any, RT | CommandContext>
131
- >(
132
- body: (...args: Args) => Generator<Eff, AEff, never>,
133
- a: (
134
- _: Effect.Effect<
135
- AEff,
136
- [Eff] extends [never] ? never
137
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
138
- : never,
139
- [Eff] extends [never] ? never
140
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
141
- : never
142
- >,
143
- ...args: NoInfer<Args>
144
- ) => A,
145
- b: (_: A, ...args: NoInfer<Args>) => B
146
- ): CommandOutHelper<Args, B>
147
- <
148
- Eff extends YieldWrap<Effect.Effect<any, any, any>>,
149
- AEff,
150
- Args extends Array<any>,
151
- A,
152
- B,
153
- C extends Effect.Effect<any, any, RT | CommandContext>
154
- >(
155
- body: (...args: Args) => Generator<Eff, AEff, never>,
156
- a: (
157
- _: Effect.Effect<
158
- AEff,
159
- [Eff] extends [never] ? never
160
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
161
- : never,
162
- [Eff] extends [never] ? never
163
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
164
- : never
165
- >,
166
- ...args: NoInfer<Args>
167
- ) => A,
168
- b: (_: A, ...args: NoInfer<Args>) => B,
169
- c: (_: B, ...args: NoInfer<Args>) => C
170
- ): CommandOutHelper<Args, C>
171
- <
172
- Eff extends YieldWrap<Effect.Effect<any, any, any>>,
173
- AEff,
174
- Args extends Array<any>,
175
- A,
176
- B,
177
- C,
178
- D extends Effect.Effect<any, any, RT | CommandContext>
179
- >(
180
- body: (...args: Args) => Generator<Eff, AEff, never>,
181
- a: (
182
- _: Effect.Effect<
183
- AEff,
184
- [Eff] extends [never] ? never
185
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
186
- : never,
187
- [Eff] extends [never] ? never
188
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
189
- : never
190
- >,
191
- ...args: NoInfer<Args>
192
- ) => A,
193
- b: (_: A, ...args: NoInfer<Args>) => B,
194
- c: (_: B, ...args: NoInfer<Args>) => C,
195
- d: (_: C, ...args: NoInfer<Args>) => D
196
- ): CommandOutHelper<Args, D>
197
- <
198
- Eff extends YieldWrap<Effect.Effect<any, any, any>>,
199
- AEff,
200
- Args extends Array<any>,
201
- A,
202
- B,
203
- C,
204
- D,
205
- E extends Effect.Effect<any, any, RT | CommandContext>
206
- >(
207
- body: (...args: Args) => Generator<Eff, AEff, never>,
208
- a: (
209
- _: Effect.Effect<
210
- AEff,
211
- [Eff] extends [never] ? never
212
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
213
- : never,
214
- [Eff] extends [never] ? never
215
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
216
- : never
217
- >,
218
- ...args: NoInfer<Args>
219
- ) => A,
220
- b: (_: A, ...args: NoInfer<Args>) => B,
221
- c: (_: B, ...args: NoInfer<Args>) => C,
222
- d: (_: C, ...args: NoInfer<Args>) => D,
223
- e: (_: D, ...args: NoInfer<Args>) => E
224
- ): CommandOutHelper<Args, E>
225
- <
226
- Eff extends YieldWrap<Effect.Effect<any, any, any>>,
227
- AEff,
228
- Args extends Array<any>,
229
- A,
230
- B,
231
- C,
232
- D,
233
- E,
234
- F extends Effect.Effect<any, any, RT | CommandContext>
235
- >(
236
- body: (...args: Args) => Generator<Eff, AEff, never>,
237
- a: (
238
- _: Effect.Effect<
239
- AEff,
240
- [Eff] extends [never] ? never
241
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
242
- : never,
243
- [Eff] extends [never] ? never
244
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
245
- : never
246
- >,
247
- ...args: NoInfer<Args>
248
- ) => A,
249
- b: (_: A, ...args: NoInfer<Args>) => B,
250
- c: (_: B, ...args: NoInfer<Args>) => C,
251
- d: (_: C, ...args: NoInfer<Args>) => D,
252
- e: (_: D, ...args: NoInfer<Args>) => E,
253
- f: (_: E, ...args: NoInfer<Args>) => F
254
- ): CommandOutHelper<Args, F>
255
- <
256
- Eff extends YieldWrap<Effect.Effect<any, any, any>>,
257
- AEff,
258
- Args extends Array<any>,
259
- A,
260
- B,
261
- C,
262
- D,
263
- E,
264
- F,
265
- G extends Effect.Effect<any, any, RT | CommandContext>
266
- >(
267
- body: (...args: Args) => Generator<Eff, AEff, never>,
268
- a: (
269
- _: Effect.Effect<
270
- AEff,
271
- [Eff] extends [never] ? never
272
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
273
- : never,
274
- [Eff] extends [never] ? never
275
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
276
- : never
277
- >,
278
- ...args: NoInfer<Args>
279
- ) => A,
280
- b: (_: A, ...args: NoInfer<Args>) => B,
281
- c: (_: B, ...args: NoInfer<Args>) => C,
282
- d: (_: C, ...args: NoInfer<Args>) => D,
283
- e: (_: D, ...args: NoInfer<Args>) => E,
284
- f: (_: E, ...args: NoInfer<Args>) => F,
285
- g: (_: F, ...args: NoInfer<Args>) => G
286
- ): CommandOutHelper<Args, G>
287
- <
288
- Eff extends YieldWrap<Effect.Effect<any, any, any>>,
289
- AEff,
290
- Args extends Array<any>,
291
- A,
292
- B,
293
- C,
294
- D,
295
- E,
296
- F,
297
- G,
298
- H extends Effect.Effect<any, any, RT | CommandContext>
299
- >(
300
- body: (...args: Args) => Generator<Eff, AEff, never>,
301
- a: (
302
- _: Effect.Effect<
303
- AEff,
304
- [Eff] extends [never] ? never
305
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
306
- : never,
307
- [Eff] extends [never] ? never
308
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
309
- : never
310
- >,
311
- ...args: NoInfer<Args>
312
- ) => A,
313
- b: (_: A, ...args: NoInfer<Args>) => B,
314
- c: (_: B, ...args: NoInfer<Args>) => C,
315
- d: (_: C, ...args: NoInfer<Args>) => D,
316
- e: (_: D, ...args: NoInfer<Args>) => E,
317
- f: (_: E, ...args: NoInfer<Args>) => F,
318
- g: (_: F, ...args: NoInfer<Args>) => G,
319
- h: (_: G, ...args: NoInfer<Args>) => H
320
- ): CommandOutHelper<Args, H>
321
- <
322
- Eff extends YieldWrap<Effect.Effect<any, any, any>>,
323
- AEff,
324
- Args extends Array<any>,
325
- A,
326
- B,
327
- C,
328
- D,
329
- E,
330
- F,
331
- G,
332
- H,
333
- I extends Effect.Effect<any, any, RT | CommandContext>
334
- >(
335
- body: (...args: Args) => Generator<Eff, AEff, never>,
336
- a: (
337
- _: Effect.Effect<
338
- AEff,
339
- [Eff] extends [never] ? never
340
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E
341
- : never,
342
- [Eff] extends [never] ? never
343
- : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R
344
- : never
345
- >,
346
- ...args: NoInfer<Args>
347
- ) => A,
348
- b: (_: A, ...args: NoInfer<Args>) => B,
349
- c: (_: B, ...args: NoInfer<Args>) => C,
350
- d: (_: C, ...args: NoInfer<Args>) => D,
351
- e: (_: D, ...args: NoInfer<Args>) => E,
352
- f: (_: E, ...args: NoInfer<Args>) => F,
353
- g: (_: F, ...args: NoInfer<Args>) => G,
354
- h: (_: G, ...args: NoInfer<Args>) => H,
355
- i: (_: H, ...args: NoInfer<Args>) => I
356
- ): CommandOutHelper<Args, I>
357
- }
358
-
359
- const makeCommand =
360
- <RT>(runtime: Runtime.Runtime<RT>) =>
361
- (actionName: string, errorDef?: Error) =>
379
+ const makeCommand = <RT>(runtime: Runtime.Runtime<RT>) => {
380
+ const runFork = Runtime.runFork(runtime)
381
+ return (actionName: string, errorDef?: Error) =>
362
382
  <Args extends ReadonlyArray<any>, A, E, R extends RT | CommandContext>(
363
383
  handler: (...args: Args) => Effect.Effect<A, E, R>
364
384
  ) => {
@@ -448,28 +468,19 @@ export class Commander extends Effect.Service<Commander>()("Commander", {
448
468
  return cache
449
469
  }
450
470
  }
451
- return Runtime.runFork(runtime)(Effect.withSpan(mut(...args), actionName, { captureStackTrace }))
452
- }, /* make sure always create a new one, or the state won't properly propagate */ { action })
453
-
454
- Object.defineProperty(command, "result", {
455
- get() {
456
- return result.value
457
- }
458
- })
459
- Object.defineProperty(command, "waiting", {
460
- get() {
461
- return waiting.value
462
- }
463
- })
471
+ const command = Effect.withSpan(mut(...args), actionName, { captureStackTrace })
472
+ return runFork(Effect.flatten(command)) // as we run into a RuntimeFiber anyway, we can flatten A/E anyway, so we don't get an Exit<Exit on addObserver
473
+ }, { action })
464
474
 
465
475
  return reactive({
466
476
  result,
467
477
  waiting,
468
478
  action,
469
479
  handle: command,
470
- handleSubmit: onSubmit(command as any)
480
+ handleSubmit: handleSubmit(command as any)
471
481
  })
472
482
  }
483
+ }
473
484
 
474
485
  return {
475
486
  /** Version of confirmOrInterrupt that automatically includes the action name in the default messages */
@@ -573,7 +584,7 @@ export class Commander extends Effect.Service<Commander>()("Commander", {
573
584
  */
574
585
  fn: <RT>(runtime: Runtime.Runtime<RT>) => {
575
586
  const make = makeCommand(runtime)
576
- return (actionName: string): Gen<RT> =>
587
+ return (actionName: string): Commander.Gen<RT> =>
577
588
  // TODO constrain/type combinators
578
589
  (
579
590
  fn: any,
@@ -593,7 +604,7 @@ export class Commander extends Effect.Service<Commander>()("Commander", {
593
604
  actionName: string
594
605
  ) => <Args extends Array<any>, A, E, R extends RT | CommandContext>(
595
606
  handler: (...args: Args) => Effect.Effect<A, E, R>
596
- ) => CommandOutHelper<Args, Effect.Effect<A, E>>
607
+ ) => Commander.CommandOut<Args, A, E>
597
608
  }
598
609
  })
599
610
  }) {}