| 2247 | } |
| 2248 | |
| 2249 | export interface EffectedDraft< |
| 2250 | out P extends Effect = Effect, |
| 2251 | out E extends Effect = Effect, |
| 2252 | out R = unknown, |
| 2253 | > extends Iterable<E, R, unknown> { |
| 2254 | handle<Name extends ExtractEffect<E>["name"], T = R, F extends Effect = never>( |
| 2255 | effect: Name, |
| 2256 | handler: ExtractEffect<E> extends infer E ? |
| 2257 | Extract<E, Effect<Name>> extends Unresumable<Effect> ? |
| 2258 | ( |
| 2259 | { |
| 2260 | effect, |
| 2261 | terminate, |
| 2262 | }: { effect: Extract<E, Effect<Name>>; terminate: (value: T) => void }, |
| 2263 | ...payloads: Extract<E, Effect<Name>>["payloads"] |
| 2264 | ) => void | Generator<F, void, unknown> | Effected<F, void> |
| 2265 | : ( |
| 2266 | { |
| 2267 | effect, |
| 2268 | resume, |
| 2269 | terminate, |
| 2270 | }: { |
| 2271 | effect: Extract<E, Effect<Name>>; |
| 2272 | resume: (value: Extract<E, Effect<Name>>["__returnType"]) => void; |
| 2273 | terminate: (value: T) => void; |
| 2274 | }, |
| 2275 | ...payloads: Extract<E, Effect<Name>>["payloads"] |
| 2276 | ) => void | Generator<F, void, unknown> | Effected<F, void> |
| 2277 | : never, |
| 2278 | ): EffectedDraft<P, ExcludeEffect<E, Effect<Name>> | F, R | T>; |
| 2279 | handle<Name extends string | symbol, T = R, F extends Effect = never>( |
| 2280 | effect: (name: ExtractEffect<E>["name"]) => name is Name, |
| 2281 | handler: ExtractEffect<E> extends infer E ? |
| 2282 | Extract<E, Effect<Name>> extends Unresumable<Effect> ? |
| 2283 | ( |
| 2284 | { |
| 2285 | effect, |
| 2286 | terminate, |
| 2287 | }: { effect: Extract<E, Effect<Name>>; terminate: (value: T) => void }, |
| 2288 | ...payloads: Extract<E, Effect<Name>>["payloads"] |
| 2289 | ) => void | Generator<F, void, unknown> | Effected<F, void> |
| 2290 | : ( |
| 2291 | { |
| 2292 | effect, |
| 2293 | resume, |
| 2294 | terminate, |
| 2295 | }: { |
| 2296 | effect: Extract<E, Effect<Name>>; |
| 2297 | resume: (value: Extract<E, Effect<Name>>["__returnType"]) => void; |
| 2298 | terminate: (value: T) => void; |
| 2299 | }, |
| 2300 | ...payloads: Extract<E, Effect<Name>>["payloads"] |
| 2301 | ) => void | Generator<F, void, unknown> | Effected<F, void> |
| 2302 | : never, |
| 2303 | ): EffectedDraft<P, ExcludeEffect<E, Effect<Name>> | F, R | T>; |
| 2304 | |
| 2305 | resume<Name extends Exclude<E, Unresumable<Effect>>["name"], F extends Effect = never>( |
| 2306 | effect: Name, |
no outgoing calls
no test coverage detected