@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.
@@ -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, type ComputedRef } from "vue"
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 interface CommandProps<A, E> {
49
- action: string
50
- result: Result<A, E>
51
- 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)
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
- return computed(() =>
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
- let cache: false | string = false
412
- const captureStackTrace = () => {
413
- if (cache !== false) {
414
- return cache
415
- }
416
- if (errorCall.stack) {
417
- const stackDef = errorDef!.stack!.trim().split("\n")
418
- const stackCall = errorCall.stack.trim().split("\n")
419
- let endStackDef = stackDef.slice(2).join("\n").trim()
420
- if (!endStackDef.includes(`(`)) {
421
- endStackDef = endStackDef.replace(/at (.*)/, "at ($1)")
422
- }
423
- let endStackCall = stackCall.slice(2).join("\n").trim()
424
- if (!endStackCall.includes(`(`)) {
425
- endStackCall = endStackCall.replace(/at (.*)/, "at ($1)")
426
- }
427
- cache = `${endStackDef}\n${endStackCall}`
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
- return Runtime.runFork(runtime)(Effect.withSpan(mut(...args), actionName, { captureStackTrace }))
432
- }, /* make sure always create a new one, or the state won't properly propagate */
433
- {
434
- action,
435
- result: result.value,
436
- waiting: result.value.waiting
437
- } as CommandProps<A, E>
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 ReadonlyArray<any>, A, E, R extends RT | CommandContext>(
614
+ ) => <Args extends Array<any>, A, E, R extends RT | CommandContext>(
563
615
  handler: (...args: Args) => Effect.Effect<A, E, R>
564
- ) => ComputedRef<((...a: Args) => RuntimeFiber<Exit.Exit<A, E>, never>) & CommandProps<A, E>>
616
+ ) => Commander.CommandOut<Args, A, E>
565
617
  }
566
618
  })
567
619
  }) {}