effect 4.0.0-beta.17 → 4.0.0-beta.19
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/dist/Array.d.ts +127 -299
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +102 -62
- package/dist/Array.js.map +1 -1
- package/dist/Cache.d.ts.map +1 -1
- package/dist/Cache.js +5 -4
- package/dist/Cache.js.map +1 -1
- package/dist/Channel.d.ts +97 -11
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +72 -29
- package/dist/Channel.js.map +1 -1
- package/dist/Chunk.d.ts +54 -247
- package/dist/Chunk.d.ts.map +1 -1
- package/dist/Chunk.js +36 -67
- package/dist/Chunk.js.map +1 -1
- package/dist/Effect.d.ts +337 -437
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +118 -134
- package/dist/Effect.js.map +1 -1
- package/dist/Filter.d.ts +0 -33
- package/dist/Filter.d.ts.map +1 -1
- package/dist/Filter.js +0 -13
- package/dist/Filter.js.map +1 -1
- package/dist/HashMap.d.ts +15 -14
- package/dist/HashMap.d.ts.map +1 -1
- package/dist/HashMap.js +4 -4
- package/dist/HashMap.js.map +1 -1
- package/dist/Iterable.d.ts +40 -39
- package/dist/Iterable.d.ts.map +1 -1
- package/dist/Iterable.js +94 -22
- package/dist/Iterable.js.map +1 -1
- package/dist/Option.d.ts +22 -15
- package/dist/Option.d.ts.map +1 -1
- package/dist/Option.js +14 -7
- package/dist/Option.js.map +1 -1
- package/dist/Pull.d.ts.map +1 -1
- package/dist/Pull.js +1 -1
- package/dist/Pull.js.map +1 -1
- package/dist/Record.d.ts +24 -120
- package/dist/Record.d.ts.map +1 -1
- package/dist/Record.js +21 -41
- package/dist/Record.js.map +1 -1
- package/dist/Sink.d.ts +11 -11
- package/dist/Sink.d.ts.map +1 -1
- package/dist/Sink.js +53 -6
- package/dist/Sink.js.map +1 -1
- package/dist/Stream.d.ts +198 -386
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +103 -59
- package/dist/Stream.js.map +1 -1
- package/dist/Trie.d.ts +18 -17
- package/dist/Trie.d.ts.map +1 -1
- package/dist/Trie.js +5 -5
- package/dist/Trie.js.map +1 -1
- package/dist/TxChunk.d.ts +37 -37
- package/dist/TxChunk.d.ts.map +1 -1
- package/dist/TxChunk.js +3 -3
- package/dist/TxChunk.js.map +1 -1
- package/dist/TxDeferred.d.ts +328 -0
- package/dist/TxDeferred.d.ts.map +1 -0
- package/dist/TxDeferred.js +196 -0
- package/dist/TxDeferred.js.map +1 -0
- package/dist/TxHashMap.d.ts +84 -83
- package/dist/TxHashMap.d.ts.map +1 -1
- package/dist/TxHashMap.js +24 -24
- package/dist/TxHashMap.js.map +1 -1
- package/dist/TxHashSet.d.ts +35 -35
- package/dist/TxHashSet.d.ts.map +1 -1
- package/dist/TxHashSet.js +14 -14
- package/dist/TxHashSet.js.map +1 -1
- package/dist/TxPriorityQueue.d.ts +609 -0
- package/dist/TxPriorityQueue.d.ts.map +1 -0
- package/dist/TxPriorityQueue.js +415 -0
- package/dist/TxPriorityQueue.js.map +1 -0
- package/dist/TxPubSub.d.ts +585 -0
- package/dist/TxPubSub.d.ts.map +1 -0
- package/dist/TxPubSub.js +521 -0
- package/dist/TxPubSub.js.map +1 -0
- package/dist/TxQueue.d.ts +32 -32
- package/dist/TxQueue.d.ts.map +1 -1
- package/dist/TxQueue.js +26 -26
- package/dist/TxQueue.js.map +1 -1
- package/dist/TxReentrantLock.d.ts +523 -0
- package/dist/TxReentrantLock.d.ts.map +1 -0
- package/dist/TxReentrantLock.js +504 -0
- package/dist/TxReentrantLock.js.map +1 -0
- package/dist/TxRef.d.ts +34 -34
- package/dist/TxRef.d.ts.map +1 -1
- package/dist/TxRef.js +21 -14
- package/dist/TxRef.js.map +1 -1
- package/dist/TxSemaphore.d.ts +8 -8
- package/dist/TxSemaphore.d.ts.map +1 -1
- package/dist/TxSemaphore.js +7 -7
- package/dist/TxSemaphore.js.map +1 -1
- package/dist/TxSubscriptionRef.d.ts +508 -0
- package/dist/TxSubscriptionRef.d.ts.map +1 -0
- package/dist/TxSubscriptionRef.js +293 -0
- package/dist/TxSubscriptionRef.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/effect.js +99 -42
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/hashMap.js +3 -2
- package/dist/internal/hashMap.js.map +1 -1
- package/dist/internal/trie.js +5 -4
- package/dist/internal/trie.js.map +1 -1
- package/dist/unstable/ai/Tool.d.ts.map +1 -1
- package/dist/unstable/ai/Tool.js +0 -9
- package/dist/unstable/ai/Tool.js.map +1 -1
- package/dist/unstable/cli/Command.d.ts +1 -1
- package/dist/unstable/cli/Command.d.ts.map +1 -1
- package/dist/unstable/cli/Command.js +1 -1
- package/dist/unstable/cli/Command.js.map +1 -1
- package/dist/unstable/cluster/K8sHttpClient.js +4 -4
- package/dist/unstable/cluster/K8sHttpClient.js.map +1 -1
- package/dist/unstable/cluster/Sharding.js +1 -1
- package/dist/unstable/cluster/Sharding.js.map +1 -1
- package/dist/unstable/encoding/Sse.js +1 -1
- package/dist/unstable/encoding/Sse.js.map +1 -1
- package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcServer.js +1 -2
- package/dist/unstable/rpc/RpcServer.js.map +1 -1
- package/dist/unstable/socket/Socket.d.ts.map +1 -1
- package/dist/unstable/socket/Socket.js +3 -3
- package/dist/unstable/socket/Socket.js.map +1 -1
- package/package.json +1 -1
- package/src/Array.ts +190 -342
- package/src/Cache.ts +6 -5
- package/src/Channel.ts +506 -102
- package/src/Chunk.ts +81 -268
- package/src/Effect.ts +437 -518
- package/src/Filter.ts +0 -57
- package/src/HashMap.ts +15 -14
- package/src/Iterable.ts +105 -50
- package/src/Option.ts +30 -20
- package/src/Pull.ts +1 -1
- package/src/Record.ts +43 -152
- package/src/Sink.ts +75 -23
- package/src/Stream.ts +442 -502
- package/src/Trie.ts +18 -17
- package/src/TxChunk.ts +72 -53
- package/src/TxDeferred.ts +394 -0
- package/src/TxHashMap.ts +332 -285
- package/src/TxHashSet.ts +111 -116
- package/src/TxPriorityQueue.ts +767 -0
- package/src/TxPubSub.ts +789 -0
- package/src/TxQueue.ts +241 -251
- package/src/TxReentrantLock.ts +753 -0
- package/src/TxRef.ts +50 -38
- package/src/TxSemaphore.ts +29 -32
- package/src/TxSubscriptionRef.ts +639 -0
- package/src/index.ts +45 -0
- package/src/internal/effect.ts +368 -163
- package/src/internal/hashMap.ts +7 -5
- package/src/internal/trie.ts +16 -9
- package/src/unstable/ai/Tool.ts +0 -9
- package/src/unstable/cli/Command.ts +6 -4
- package/src/unstable/cluster/K8sHttpClient.ts +4 -4
- package/src/unstable/cluster/Sharding.ts +1 -1
- package/src/unstable/encoding/Sse.ts +1 -1
- package/src/unstable/rpc/RpcServer.ts +1 -7
- package/src/unstable/socket/Socket.ts +9 -11
package/src/internal/effect.ts
CHANGED
|
@@ -2224,19 +2224,12 @@ export const filterOrFail: {
|
|
|
2224
2224
|
predicate: Predicate.Predicate<NoInfer<A>>,
|
|
2225
2225
|
orFailWith: (a: NoInfer<A>) => E2
|
|
2226
2226
|
): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E2 | E, R>
|
|
2227
|
-
<A, B, X, E2>(
|
|
2228
|
-
filter: Filter.Filter<NoInfer<A>, B, X>,
|
|
2229
|
-
orFailWith: (x: X) => E2
|
|
2230
|
-
): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E2 | E, R>
|
|
2231
2227
|
<A, B extends A>(
|
|
2232
2228
|
refinement: Predicate.Refinement<NoInfer<A>, B>
|
|
2233
2229
|
): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, Cause.NoSuchElementError | E, R>
|
|
2234
2230
|
<A>(
|
|
2235
2231
|
predicate: Predicate.Predicate<NoInfer<A>>
|
|
2236
2232
|
): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, Cause.NoSuchElementError | E, R>
|
|
2237
|
-
<A, B, X>(
|
|
2238
|
-
filter: Filter.Filter<NoInfer<A>, B, X>
|
|
2239
|
-
): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, Cause.NoSuchElementError | E, R>
|
|
2240
2233
|
<A, E, R, E2, B extends A>(
|
|
2241
2234
|
self: Effect.Effect<A, E, R>,
|
|
2242
2235
|
refinement: Predicate.Refinement<NoInfer<A>, B>,
|
|
@@ -2247,11 +2240,6 @@ export const filterOrFail: {
|
|
|
2247
2240
|
predicate: Predicate.Predicate<NoInfer<A>>,
|
|
2248
2241
|
orFailWith: (a: NoInfer<A>) => E2
|
|
2249
2242
|
): Effect.Effect<A, E2 | E, R>
|
|
2250
|
-
<A, E, R, B, X, E2>(
|
|
2251
|
-
self: Effect.Effect<A, E, R>,
|
|
2252
|
-
filter: Filter.Filter<A, B, X>,
|
|
2253
|
-
orFailWith: (x: X) => E2
|
|
2254
|
-
): Effect.Effect<B, E2 | E, R>
|
|
2255
2243
|
<A, E, R, B extends A>(
|
|
2256
2244
|
self: Effect.Effect<A, E, R>,
|
|
2257
2245
|
refinement: Predicate.Refinement<NoInfer<A>, B>
|
|
@@ -2260,18 +2248,14 @@ export const filterOrFail: {
|
|
|
2260
2248
|
self: Effect.Effect<A, E, R>,
|
|
2261
2249
|
predicate: Predicate.Predicate<NoInfer<A>>
|
|
2262
2250
|
): Effect.Effect<A, E | Cause.NoSuchElementError, R>
|
|
2263
|
-
<A, E, R, B, X>(
|
|
2264
|
-
self: Effect.Effect<A, E, R>,
|
|
2265
|
-
filter: Filter.Filter<A, B, X>
|
|
2266
|
-
): Effect.Effect<B, E | Cause.NoSuchElementError, R>
|
|
2267
2251
|
} = dual((args) => isEffect(args[0]), <A, E, R, E2>(
|
|
2268
2252
|
self: Effect.Effect<A, E, R>,
|
|
2269
|
-
|
|
2253
|
+
predicate: Predicate.Predicate<NoInfer<A>>,
|
|
2270
2254
|
orFailWith?: (a: any) => E2
|
|
2271
2255
|
): Effect.Effect<any, E | E2 | Cause.NoSuchElementError, R> =>
|
|
2272
2256
|
filterOrElse(
|
|
2273
2257
|
self,
|
|
2274
|
-
|
|
2258
|
+
predicate as any,
|
|
2275
2259
|
orFailWith ? (a: any) => fail(orFailWith(a)) : () => fail(new NoSuchElementError() as E2)
|
|
2276
2260
|
))
|
|
2277
2261
|
|
|
@@ -2421,27 +2405,55 @@ const OnFailureProto = makePrimitiveProto({
|
|
|
2421
2405
|
|
|
2422
2406
|
/** @internal */
|
|
2423
2407
|
export const catchCauseIf: {
|
|
2424
|
-
<E,
|
|
2425
|
-
|
|
2426
|
-
f: (
|
|
2408
|
+
<E, B, E2, R2>(
|
|
2409
|
+
predicate: Predicate.Predicate<Cause.Cause<E>>,
|
|
2410
|
+
f: (cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
|
|
2411
|
+
): <A, R>(
|
|
2412
|
+
self: Effect.Effect<A, E, R>
|
|
2413
|
+
) => Effect.Effect<A | B, E | E2, R | R2>
|
|
2414
|
+
<A, E, R, B, E2, R2>(
|
|
2415
|
+
self: Effect.Effect<A, E, R>,
|
|
2416
|
+
predicate: Predicate.Predicate<Cause.Cause<E>>,
|
|
2417
|
+
f: (cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
|
|
2418
|
+
): Effect.Effect<A | B, E | E2, R | R2>
|
|
2419
|
+
} = dual(
|
|
2420
|
+
3,
|
|
2421
|
+
<A, E, R, B, E2, R2>(
|
|
2422
|
+
self: Effect.Effect<A, E, R>,
|
|
2423
|
+
predicate: Predicate.Predicate<Cause.Cause<E>>,
|
|
2424
|
+
f: (cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
|
|
2425
|
+
): Effect.Effect<A | B, E | E2, R | R2> =>
|
|
2426
|
+
catchCause(self, (cause): Effect.Effect<B, E | E2, R2> => {
|
|
2427
|
+
if (!predicate(cause)) {
|
|
2428
|
+
return failCause(cause) as any
|
|
2429
|
+
}
|
|
2430
|
+
return internalCall(() => f(cause))
|
|
2431
|
+
})
|
|
2432
|
+
)
|
|
2433
|
+
|
|
2434
|
+
/** @internal */
|
|
2435
|
+
export const catchCauseFilter: {
|
|
2436
|
+
<E, B, E2, R2, EB, X extends Cause.Cause<any>>(
|
|
2437
|
+
filter: Filter.Filter<Cause.Cause<E>, EB, X>,
|
|
2438
|
+
f: (failure: EB, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
|
|
2427
2439
|
): <A, R>(
|
|
2428
2440
|
self: Effect.Effect<A, E, R>
|
|
2429
|
-
) => Effect.Effect<A | B, Cause.Cause.Error<
|
|
2430
|
-
<A, E, R, B, E2, R2,
|
|
2441
|
+
) => Effect.Effect<A | B, Cause.Cause.Error<X> | E2, R | R2>
|
|
2442
|
+
<A, E, R, B, E2, R2, EB, X extends Cause.Cause<any>>(
|
|
2431
2443
|
self: Effect.Effect<A, E, R>,
|
|
2432
|
-
filter: Filter.
|
|
2433
|
-
f: (failure:
|
|
2434
|
-
): Effect.Effect<A | B, Cause.Cause.Error<
|
|
2444
|
+
filter: Filter.Filter<Cause.Cause<E>, EB, X>,
|
|
2445
|
+
f: (failure: EB, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
|
|
2446
|
+
): Effect.Effect<A | B, Cause.Cause.Error<X> | E2, R | R2>
|
|
2435
2447
|
} = dual(
|
|
2436
2448
|
3,
|
|
2437
|
-
<A, E, R, B, E2, R2,
|
|
2438
|
-
self: Effect.Effect<A, E, R>,
|
|
2439
|
-
filter: Filter.
|
|
2440
|
-
f: (failure:
|
|
2441
|
-
): Effect.Effect<A | B, Cause.Cause.Error<
|
|
2442
|
-
catchCause(self, (cause): Effect.Effect<B, Cause.Cause.Error<
|
|
2443
|
-
const eb =
|
|
2444
|
-
return
|
|
2449
|
+
<A, E, R, B, E2, R2, EB, X extends Cause.Cause<any>>(
|
|
2450
|
+
self: Effect.Effect<A, E, R>,
|
|
2451
|
+
filter: Filter.Filter<Cause.Cause<E>, EB, X>,
|
|
2452
|
+
f: (failure: EB, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
|
|
2453
|
+
): Effect.Effect<A | B, Cause.Cause.Error<X> | E2, R | R2> =>
|
|
2454
|
+
catchCause(self, (cause): Effect.Effect<B, Cause.Cause.Error<X> | E2, R2> => {
|
|
2455
|
+
const eb = filter(cause)
|
|
2456
|
+
return Result.isFailure(eb) ? failCause(eb.failure) : internalCall(() => f(eb.success, cause))
|
|
2445
2457
|
})
|
|
2446
2458
|
)
|
|
2447
2459
|
|
|
@@ -2459,7 +2471,7 @@ export const catch_: {
|
|
|
2459
2471
|
<A, E, R, B, E2, R2>(
|
|
2460
2472
|
self: Effect.Effect<A, E, R>,
|
|
2461
2473
|
f: (a: NoInfer<E>) => Effect.Effect<B, E2, R2>
|
|
2462
|
-
): Effect.Effect<A | B, E2, R | R2> =>
|
|
2474
|
+
): Effect.Effect<A | B, E2, R | R2> => catchCauseFilter(self, findError as any, (e: any) => f(e)) as any
|
|
2463
2475
|
)
|
|
2464
2476
|
|
|
2465
2477
|
/** @internal */
|
|
@@ -2490,7 +2502,7 @@ export const catchDefect: {
|
|
|
2490
2502
|
<A, E, R, B, E2, R2>(
|
|
2491
2503
|
self: Effect.Effect<A, E, R>,
|
|
2492
2504
|
f: (defect: unknown) => Effect.Effect<B, E2, R2>
|
|
2493
|
-
): Effect.Effect<A | B, E | E2, R | R2> =>
|
|
2505
|
+
): Effect.Effect<A | B, E | E2, R | R2> => catchCauseFilter(self, findDefect as any, f as any) as any
|
|
2494
2506
|
)
|
|
2495
2507
|
|
|
2496
2508
|
/** @internal */
|
|
@@ -2513,32 +2525,56 @@ export const tapCause: {
|
|
|
2513
2525
|
|
|
2514
2526
|
/** @internal */
|
|
2515
2527
|
export const tapCauseIf: {
|
|
2516
|
-
<E,
|
|
2517
|
-
|
|
2518
|
-
f: (
|
|
2528
|
+
<E, B, E2, R2>(
|
|
2529
|
+
predicate: Predicate.Predicate<Cause.Cause<E>>,
|
|
2530
|
+
f: (cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
|
|
2519
2531
|
): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, R | R2>
|
|
2520
|
-
<A, E, R,
|
|
2532
|
+
<A, E, R, B, E2, R2>(
|
|
2521
2533
|
self: Effect.Effect<A, E, R>,
|
|
2522
|
-
|
|
2523
|
-
f: (
|
|
2534
|
+
predicate: Predicate.Predicate<Cause.Cause<E>>,
|
|
2535
|
+
f: (cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
|
|
2524
2536
|
): Effect.Effect<A, E | E2, R | R2>
|
|
2525
2537
|
} = dual(
|
|
2526
2538
|
3,
|
|
2527
|
-
<A, E, R,
|
|
2539
|
+
<A, E, R, B, E2, R2>(
|
|
2528
2540
|
self: Effect.Effect<A, E, R>,
|
|
2529
|
-
|
|
2530
|
-
f: (
|
|
2541
|
+
predicate: Predicate.Predicate<Cause.Cause<E>>,
|
|
2542
|
+
f: (cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
|
|
2531
2543
|
): Effect.Effect<A, E | E2, R | R2> =>
|
|
2532
2544
|
catchCauseIf(
|
|
2533
2545
|
self,
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
return Result.isFailure(result) ? Result.fail(cause) : result
|
|
2537
|
-
}) as any,
|
|
2538
|
-
(failure: any, cause: Cause.Cause<E>) => andThen(internalCall(() => f(failure, cause)), failCause(cause))
|
|
2546
|
+
predicate,
|
|
2547
|
+
(cause) => andThen(internalCall(() => f(cause)), failCause(cause))
|
|
2539
2548
|
)
|
|
2540
2549
|
)
|
|
2541
2550
|
|
|
2551
|
+
/** @internal */
|
|
2552
|
+
export const tapCauseFilter: {
|
|
2553
|
+
<E, B, E2, R2, EB, X extends Cause.Cause<any>>(
|
|
2554
|
+
filter: Filter.Filter<Cause.Cause<E>, EB, X>,
|
|
2555
|
+
f: (a: EB, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
|
|
2556
|
+
): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, R | R2>
|
|
2557
|
+
<A, E, R, B, E2, R2, EB, X extends Cause.Cause<any>>(
|
|
2558
|
+
self: Effect.Effect<A, E, R>,
|
|
2559
|
+
filter: Filter.Filter<Cause.Cause<E>, EB, X>,
|
|
2560
|
+
f: (a: EB, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
|
|
2561
|
+
): Effect.Effect<A, E | E2, R | R2>
|
|
2562
|
+
} = dual(
|
|
2563
|
+
3,
|
|
2564
|
+
<A, E, R, B, E2, R2, EB, X extends Cause.Cause<any>>(
|
|
2565
|
+
self: Effect.Effect<A, E, R>,
|
|
2566
|
+
filter: Filter.Filter<Cause.Cause<E>, EB, X>,
|
|
2567
|
+
f: (a: EB, cause: Cause.Cause<E>) => Effect.Effect<B, E2, R2>
|
|
2568
|
+
): Effect.Effect<A, E | E2, R | R2> =>
|
|
2569
|
+
catchCause(self, (cause) => {
|
|
2570
|
+
const result = filter(cause)
|
|
2571
|
+
if (Result.isFailure(result)) {
|
|
2572
|
+
return failCause(cause)
|
|
2573
|
+
}
|
|
2574
|
+
return andThen(internalCall(() => f(result.success, cause)), failCause(cause))
|
|
2575
|
+
})
|
|
2576
|
+
)
|
|
2577
|
+
|
|
2542
2578
|
/** @internal */
|
|
2543
2579
|
export const tapError: {
|
|
2544
2580
|
<E, B, E2, R2>(
|
|
@@ -2553,7 +2589,7 @@ export const tapError: {
|
|
|
2553
2589
|
<A, E, R, B, E2, R2>(
|
|
2554
2590
|
self: Effect.Effect<A, E, R>,
|
|
2555
2591
|
f: (e: NoInfer<E>) => Effect.Effect<B, E2, R2>
|
|
2556
|
-
): Effect.Effect<A, E | E2, R | R2> =>
|
|
2592
|
+
): Effect.Effect<A, E | E2, R | R2> => tapCauseFilter(self, findError as any, (e: any) => f(e)) as any
|
|
2557
2593
|
)
|
|
2558
2594
|
|
|
2559
2595
|
/** @internal */
|
|
@@ -2620,7 +2656,7 @@ export const tapDefect: {
|
|
|
2620
2656
|
<A, E, R, B, E2, R2>(
|
|
2621
2657
|
self: Effect.Effect<A, E, R>,
|
|
2622
2658
|
f: (defect: unknown) => Effect.Effect<B, E2, R2>
|
|
2623
|
-
): Effect.Effect<A, E | E2, R | R2> =>
|
|
2659
|
+
): Effect.Effect<A, E | E2, R | R2> => tapCauseFilter(self, findDefect as any, (_: any) => f(_)) as any
|
|
2624
2660
|
)
|
|
2625
2661
|
|
|
2626
2662
|
/** @internal */
|
|
@@ -2630,10 +2666,10 @@ export const catchIf: {
|
|
|
2630
2666
|
f: (e: EB) => Effect.Effect<A2, E2, R2>,
|
|
2631
2667
|
orElse?: ((e: Exclude<E, EB>) => Effect.Effect<A3, E3, R3>) | undefined
|
|
2632
2668
|
): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | A2 | A3, E2 | E3, R | R2 | R3>
|
|
2633
|
-
<E,
|
|
2634
|
-
|
|
2635
|
-
f: (e:
|
|
2636
|
-
orElse?: ((e:
|
|
2669
|
+
<E, A2, E2, R2, A3 = never, E3 = E, R3 = never>(
|
|
2670
|
+
predicate: Predicate.Predicate<NoInfer<E>>,
|
|
2671
|
+
f: (e: NoInfer<E>) => Effect.Effect<A2, E2, R2>,
|
|
2672
|
+
orElse?: ((e: NoInfer<E>) => Effect.Effect<A3, E3, R3>) | undefined
|
|
2637
2673
|
): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | A2 | A3, E2 | E3, R | R2 | R3>
|
|
2638
2674
|
<A, E, R, EB extends E, A2, E2, R2, A3 = never, E3 = Exclude<E, EB>, R3 = never>(
|
|
2639
2675
|
self: Effect.Effect<A, E, R>,
|
|
@@ -2641,28 +2677,59 @@ export const catchIf: {
|
|
|
2641
2677
|
f: (e: EB) => Effect.Effect<A2, E2, R2>,
|
|
2642
2678
|
orElse?: ((e: Exclude<E, EB>) => Effect.Effect<A3, E3, R3>) | undefined
|
|
2643
2679
|
): Effect.Effect<A | A2 | A3, E2 | E3, R | R2 | R3>
|
|
2644
|
-
<A, E, R,
|
|
2680
|
+
<A, E, R, A2, E2, R2, A3 = never, E3 = E, R3 = never>(
|
|
2645
2681
|
self: Effect.Effect<A, E, R>,
|
|
2646
|
-
|
|
2647
|
-
f: (e:
|
|
2648
|
-
orElse?: ((e:
|
|
2682
|
+
predicate: Predicate.Predicate<E>,
|
|
2683
|
+
f: (e: E) => Effect.Effect<A2, E2, R2>,
|
|
2684
|
+
orElse?: ((e: E) => Effect.Effect<A3, E3, R3>) | undefined
|
|
2685
|
+
): Effect.Effect<A | A2 | A3, E2 | E3, R | R2 | R3>
|
|
2686
|
+
} = dual(
|
|
2687
|
+
(args) => isEffect(args[0]),
|
|
2688
|
+
<A, E, R, A2, E2, R2, A3 = never, E3 = E, R3 = never>(
|
|
2689
|
+
self: Effect.Effect<A, E, R>,
|
|
2690
|
+
predicate: Predicate.Predicate<E>,
|
|
2691
|
+
f: (e: E) => Effect.Effect<A2, E2, R2>,
|
|
2692
|
+
orElse?: ((e: E) => Effect.Effect<A3, E3, R3>) | undefined
|
|
2693
|
+
): Effect.Effect<A | A2 | A3, E2 | E3, R | R2 | R3> =>
|
|
2694
|
+
catchCause(self, (cause): Effect.Effect<A2 | A3, E2 | E3, R2 | R3> => {
|
|
2695
|
+
const error = findError(cause)
|
|
2696
|
+
if (Result.isFailure(error)) return failCause(error.failure)
|
|
2697
|
+
if (!predicate(error.success)) {
|
|
2698
|
+
return orElse ? internalCall(() => orElse(error.success as any)) : failCause(cause as any as Cause.Cause<E3>)
|
|
2699
|
+
}
|
|
2700
|
+
return internalCall(() => f(error.success as any))
|
|
2701
|
+
})
|
|
2702
|
+
)
|
|
2703
|
+
|
|
2704
|
+
/** @internal */
|
|
2705
|
+
export const catchFilter: {
|
|
2706
|
+
<E, EB, A2, E2, R2, X, A3 = never, E3 = X, R3 = never>(
|
|
2707
|
+
filter: Filter.Filter<NoInfer<E>, EB, X>,
|
|
2708
|
+
f: (e: EB) => Effect.Effect<A2, E2, R2>,
|
|
2709
|
+
orElse?: ((e: X) => Effect.Effect<A3, E3, R3>) | undefined
|
|
2710
|
+
): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | A2 | A3, E2 | E3, R | R2 | R3>
|
|
2711
|
+
<A, E, R, EB, A2, E2, R2, X, A3 = never, E3 = X, R3 = never>(
|
|
2712
|
+
self: Effect.Effect<A, E, R>,
|
|
2713
|
+
filter: Filter.Filter<NoInfer<E>, EB, X>,
|
|
2714
|
+
f: (e: EB) => Effect.Effect<A2, E2, R2>,
|
|
2715
|
+
orElse?: ((e: X) => Effect.Effect<A3, E3, R3>) | undefined
|
|
2649
2716
|
): Effect.Effect<A | A2 | A3, E2 | E3, R | R2 | R3>
|
|
2650
2717
|
} = dual(
|
|
2651
2718
|
(args) => isEffect(args[0]),
|
|
2652
2719
|
<A, E, R, EB, A2, E2, R2, X, A3 = never, E3 = X, R3 = never>(
|
|
2653
2720
|
self: Effect.Effect<A, E, R>,
|
|
2654
|
-
filter: Filter.Filter<NoInfer<E>, EB, X
|
|
2721
|
+
filter: Filter.Filter<NoInfer<E>, EB, X>,
|
|
2655
2722
|
f: (e: EB) => Effect.Effect<A2, E2, R2>,
|
|
2656
2723
|
orElse?: ((e: X) => Effect.Effect<A3, E3, R3>) | undefined
|
|
2657
2724
|
): Effect.Effect<A | A2 | A3, E2 | E3, R | R2 | R3> =>
|
|
2658
2725
|
catchCause(self, (cause): Effect.Effect<A2 | A3, E2 | E3, R2 | R3> => {
|
|
2659
2726
|
const error = findError(cause)
|
|
2660
2727
|
if (Result.isFailure(error)) return failCause(error.failure)
|
|
2661
|
-
const result =
|
|
2728
|
+
const result = filter(error.success)
|
|
2662
2729
|
if (Result.isFailure(result)) {
|
|
2663
2730
|
return orElse ? internalCall(() => orElse(result.failure as any)) : failCause(cause as any as Cause.Cause<E3>)
|
|
2664
2731
|
}
|
|
2665
|
-
return internalCall(() => f(result.success
|
|
2732
|
+
return internalCall(() => f(result.success))
|
|
2666
2733
|
})
|
|
2667
2734
|
)
|
|
2668
2735
|
|
|
@@ -2798,7 +2865,7 @@ export const catchTags: {
|
|
|
2798
2865
|
>
|
|
2799
2866
|
} = dual((args) => isEffect(args[0]), (self: Effect.Effect<any, any, any>, cases: Record<string, any>, orElse: any) => {
|
|
2800
2867
|
let keys: Array<string>
|
|
2801
|
-
return
|
|
2868
|
+
return catchFilter(
|
|
2802
2869
|
self,
|
|
2803
2870
|
(e) => {
|
|
2804
2871
|
keys ??= Object.keys(cases)
|
|
@@ -2808,7 +2875,7 @@ export const catchTags: {
|
|
|
2808
2875
|
},
|
|
2809
2876
|
(e: any) => internalCall(() => cases[e["_tag"] as string](e)),
|
|
2810
2877
|
orElse
|
|
2811
|
-
)
|
|
2878
|
+
) as any
|
|
2812
2879
|
})
|
|
2813
2880
|
|
|
2814
2881
|
/** @internal */
|
|
@@ -3044,7 +3111,7 @@ export const unwrapReason: {
|
|
|
3044
3111
|
self: Effect.Effect<A, E, R>,
|
|
3045
3112
|
errorTag: K
|
|
3046
3113
|
): Effect.Effect<A, ExcludeTag<E, K> | ReasonOf<ExtractTag<E, K>>, R> =>
|
|
3047
|
-
|
|
3114
|
+
catchFilter(
|
|
3048
3115
|
self,
|
|
3049
3116
|
(e: any) => {
|
|
3050
3117
|
if (isTagged(e, errorTag) && hasProperty(e, "reason")) {
|
|
@@ -3053,7 +3120,7 @@ export const unwrapReason: {
|
|
|
3053
3120
|
return Result.fail(e)
|
|
3054
3121
|
},
|
|
3055
3122
|
fail as any
|
|
3056
|
-
)
|
|
3123
|
+
) as any
|
|
3057
3124
|
)
|
|
3058
3125
|
|
|
3059
3126
|
/** @internal */
|
|
@@ -3804,34 +3871,51 @@ export const ensuring: {
|
|
|
3804
3871
|
|
|
3805
3872
|
/** @internal */
|
|
3806
3873
|
export const onExitIf: {
|
|
3807
|
-
<A, E, XE, XR
|
|
3808
|
-
|
|
3809
|
-
f: (
|
|
3810
|
-
pass: Filter.Pass<Exit.Exit<NoInfer<A>, NoInfer<E>>, Result>,
|
|
3811
|
-
exit: Exit.Exit<NoInfer<A>, NoInfer<E>>
|
|
3812
|
-
) => Effect.Effect<void, XE, XR>
|
|
3874
|
+
<A, E, XE, XR>(
|
|
3875
|
+
predicate: Predicate.Predicate<Exit.Exit<NoInfer<A>, NoInfer<E>>>,
|
|
3876
|
+
f: (exit: Exit.Exit<NoInfer<A>, NoInfer<E>>) => Effect.Effect<void, XE, XR>
|
|
3813
3877
|
): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | XE, R | XR>
|
|
3814
|
-
<A, E, R, XE, XR
|
|
3878
|
+
<A, E, R, XE, XR>(
|
|
3815
3879
|
self: Effect.Effect<A, E, R>,
|
|
3816
|
-
|
|
3817
|
-
f: (
|
|
3818
|
-
pass: Filter.Pass<Exit.Exit<NoInfer<A>, NoInfer<E>>, Result>,
|
|
3819
|
-
exit: Exit.Exit<NoInfer<A>, NoInfer<E>>
|
|
3820
|
-
) => Effect.Effect<void, XE, XR>
|
|
3880
|
+
predicate: Predicate.Predicate<Exit.Exit<NoInfer<A>, NoInfer<E>>>,
|
|
3881
|
+
f: (exit: Exit.Exit<NoInfer<A>, NoInfer<E>>) => Effect.Effect<void, XE, XR>
|
|
3821
3882
|
): Effect.Effect<A, E | XE, R | XR>
|
|
3822
3883
|
} = dual(
|
|
3823
3884
|
3,
|
|
3824
|
-
<A, E, R, XE, XR
|
|
3885
|
+
<A, E, R, XE, XR>(
|
|
3825
3886
|
self: Effect.Effect<A, E, R>,
|
|
3826
|
-
|
|
3827
|
-
f: (
|
|
3828
|
-
pass: Filter.Pass<Exit.Exit<NoInfer<A>, NoInfer<E>>, Result>,
|
|
3829
|
-
exit: Exit.Exit<NoInfer<A>, NoInfer<E>>
|
|
3830
|
-
) => Effect.Effect<void, XE, XR>
|
|
3887
|
+
predicate: Predicate.Predicate<Exit.Exit<NoInfer<A>, NoInfer<E>>>,
|
|
3888
|
+
f: (exit: Exit.Exit<NoInfer<A>, NoInfer<E>>) => Effect.Effect<void, XE, XR>
|
|
3831
3889
|
): Effect.Effect<A, E | XE, R | XR> =>
|
|
3832
3890
|
onExit(self, (exit) => {
|
|
3833
|
-
|
|
3834
|
-
|
|
3891
|
+
if (!predicate(exit)) {
|
|
3892
|
+
return void_
|
|
3893
|
+
}
|
|
3894
|
+
return f(exit)
|
|
3895
|
+
})
|
|
3896
|
+
)
|
|
3897
|
+
|
|
3898
|
+
/** @internal */
|
|
3899
|
+
export const onExitFilter: {
|
|
3900
|
+
<A, E, XE, XR, B, X>(
|
|
3901
|
+
filter: Filter.Filter<Exit.Exit<NoInfer<A>, NoInfer<E>>, B, X>,
|
|
3902
|
+
f: (b: B, exit: Exit.Exit<NoInfer<A>, NoInfer<E>>) => Effect.Effect<void, XE, XR>
|
|
3903
|
+
): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | XE, R | XR>
|
|
3904
|
+
<A, E, R, XE, XR, B, X>(
|
|
3905
|
+
self: Effect.Effect<A, E, R>,
|
|
3906
|
+
filter: Filter.Filter<Exit.Exit<NoInfer<A>, NoInfer<E>>, B, X>,
|
|
3907
|
+
f: (b: B, exit: Exit.Exit<NoInfer<A>, NoInfer<E>>) => Effect.Effect<void, XE, XR>
|
|
3908
|
+
): Effect.Effect<A, E | XE, R | XR>
|
|
3909
|
+
} = dual(
|
|
3910
|
+
3,
|
|
3911
|
+
<A, E, R, XE, XR, B, X>(
|
|
3912
|
+
self: Effect.Effect<A, E, R>,
|
|
3913
|
+
filter: Filter.Filter<Exit.Exit<NoInfer<A>, NoInfer<E>>, B, X>,
|
|
3914
|
+
f: (b: B, exit: Exit.Exit<NoInfer<A>, NoInfer<E>>) => Effect.Effect<void, XE, XR>
|
|
3915
|
+
): Effect.Effect<A, E | XE, R | XR> =>
|
|
3916
|
+
onExit(self, (exit) => {
|
|
3917
|
+
const b = filter(exit)
|
|
3918
|
+
return Result.isFailure(b) ? void_ : f(b.success, exit)
|
|
3835
3919
|
})
|
|
3836
3920
|
)
|
|
3837
3921
|
|
|
@@ -3849,37 +3933,66 @@ export const onError: {
|
|
|
3849
3933
|
<A, E, R, XE, XR>(
|
|
3850
3934
|
self: Effect.Effect<A, E, R>,
|
|
3851
3935
|
f: (cause: Cause.Cause<NoInfer<E>>) => Effect.Effect<void, XE, XR>
|
|
3852
|
-
): Effect.Effect<A, E | XE, R | XR> =>
|
|
3936
|
+
): Effect.Effect<A, E | XE, R | XR> => onExitFilter(self, exitFilterCause as any, f as any) as any
|
|
3853
3937
|
)
|
|
3854
3938
|
|
|
3855
3939
|
/** @internal */
|
|
3856
3940
|
export const onErrorIf: {
|
|
3857
|
-
<E,
|
|
3858
|
-
|
|
3859
|
-
f: (
|
|
3941
|
+
<E, XE, XR>(
|
|
3942
|
+
predicate: Predicate.Predicate<Cause.Cause<E>>,
|
|
3943
|
+
f: (cause: Cause.Cause<E>) => Effect.Effect<void, XE, XR>
|
|
3860
3944
|
): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | XE, R | XR>
|
|
3861
|
-
<A, E, R, XE, XR
|
|
3945
|
+
<A, E, R, XE, XR>(
|
|
3862
3946
|
self: Effect.Effect<A, E, R>,
|
|
3863
|
-
|
|
3864
|
-
f: (
|
|
3947
|
+
predicate: Predicate.Predicate<Cause.Cause<E>>,
|
|
3948
|
+
f: (cause: Cause.Cause<E>) => Effect.Effect<void, XE, XR>
|
|
3865
3949
|
): Effect.Effect<A, E | XE, R | XR>
|
|
3866
3950
|
} = dual(
|
|
3867
3951
|
3,
|
|
3868
|
-
<A, E, R, XE, XR
|
|
3952
|
+
<A, E, R, XE, XR>(
|
|
3869
3953
|
self: Effect.Effect<A, E, R>,
|
|
3870
|
-
|
|
3871
|
-
f: (
|
|
3954
|
+
predicate: Predicate.Predicate<Cause.Cause<E>>,
|
|
3955
|
+
f: (cause: Cause.Cause<E>) => Effect.Effect<void, XE, XR>
|
|
3872
3956
|
): Effect.Effect<A, E | XE, R | XR> =>
|
|
3873
3957
|
onExitIf(
|
|
3874
3958
|
self,
|
|
3875
|
-
(
|
|
3876
|
-
if (exit._tag !== "Failure")
|
|
3877
|
-
|
|
3878
|
-
|
|
3879
|
-
|
|
3959
|
+
(exit): exit is Exit.Failure<A, E> => {
|
|
3960
|
+
if (exit._tag !== "Failure") {
|
|
3961
|
+
return false
|
|
3962
|
+
}
|
|
3963
|
+
return predicate(exit.cause)
|
|
3964
|
+
},
|
|
3965
|
+
(exit) => f((exit as Exit.Failure<A, E>).cause)
|
|
3880
3966
|
) as any
|
|
3881
3967
|
)
|
|
3882
3968
|
|
|
3969
|
+
/** @internal */
|
|
3970
|
+
export const onErrorFilter: {
|
|
3971
|
+
<A, E, EB, X, XE, XR>(
|
|
3972
|
+
filter: Filter.Filter<Cause.Cause<E>, EB, X>,
|
|
3973
|
+
f: (failure: EB, cause: Cause.Cause<E>) => Effect.Effect<void, XE, XR>
|
|
3974
|
+
): <R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | XE, R | XR>
|
|
3975
|
+
<A, E, R, EB, X, XE, XR>(
|
|
3976
|
+
self: Effect.Effect<A, E, R>,
|
|
3977
|
+
filter: Filter.Filter<Cause.Cause<E>, EB, X>,
|
|
3978
|
+
f: (failure: EB, cause: Cause.Cause<E>) => Effect.Effect<void, XE, XR>
|
|
3979
|
+
): Effect.Effect<A, E | XE, R | XR>
|
|
3980
|
+
} = dual(
|
|
3981
|
+
3,
|
|
3982
|
+
<A, E, R, EB, X, XE, XR>(
|
|
3983
|
+
self: Effect.Effect<A, E, R>,
|
|
3984
|
+
filter: Filter.Filter<Cause.Cause<E>, EB, X>,
|
|
3985
|
+
f: (failure: EB, cause: Cause.Cause<E>) => Effect.Effect<void, XE, XR>
|
|
3986
|
+
): Effect.Effect<A, E | XE, R | XR> =>
|
|
3987
|
+
onExit(self, (exit) => {
|
|
3988
|
+
if (exit._tag !== "Failure") {
|
|
3989
|
+
return void_
|
|
3990
|
+
}
|
|
3991
|
+
const result = filter(exit.cause)
|
|
3992
|
+
return Result.isFailure(result) ? void_ : f(result.success, exit.cause)
|
|
3993
|
+
})
|
|
3994
|
+
)
|
|
3995
|
+
|
|
3883
3996
|
/** @internal */
|
|
3884
3997
|
export const onInterrupt: {
|
|
3885
3998
|
<XE, XR>(
|
|
@@ -3894,8 +4007,7 @@ export const onInterrupt: {
|
|
|
3894
4007
|
<A, E, R, XE, XR>(
|
|
3895
4008
|
self: Effect.Effect<A, E, R>,
|
|
3896
4009
|
finalizer: (interruptors: ReadonlySet<number>) => Effect.Effect<void, XE, XR>
|
|
3897
|
-
): Effect.Effect<A, E | XE, R | XR> =>
|
|
3898
|
-
onErrorIf<E, Result.Result<Set<number>, Cause.Cause<E>>, XE, XR>(causeFilterInterruptors, finalizer)(self)
|
|
4010
|
+
): Effect.Effect<A, E | XE, R | XR> => onErrorFilter(causeFilterInterruptors as any, finalizer)(self) as any
|
|
3899
4011
|
)
|
|
3900
4012
|
|
|
3901
4013
|
/** @internal */
|
|
@@ -4102,25 +4214,25 @@ export const all = <
|
|
|
4102
4214
|
|
|
4103
4215
|
/** @internal */
|
|
4104
4216
|
export const partition: {
|
|
4105
|
-
<A,
|
|
4106
|
-
|
|
4217
|
+
<A, Pass, Fail, E, R>(
|
|
4218
|
+
filter: Filter.FilterEffect<NoInfer<A>, Pass, Fail, E, R, [i: number]>,
|
|
4107
4219
|
options?: { readonly concurrency?: Concurrency | undefined }
|
|
4108
|
-
): (elements: Iterable<A>) => Effect.Effect<[excluded: Array<
|
|
4109
|
-
<A,
|
|
4220
|
+
): (elements: Iterable<A>) => Effect.Effect<[excluded: Array<Fail>, satisfying: Array<Pass>], E, R>
|
|
4221
|
+
<A, Pass, Fail, E, R>(
|
|
4110
4222
|
elements: Iterable<A>,
|
|
4111
|
-
|
|
4223
|
+
filter: Filter.FilterEffect<NoInfer<A>, Pass, Fail, E, R, [i: number]>,
|
|
4112
4224
|
options?: { readonly concurrency?: Concurrency | undefined }
|
|
4113
|
-
): Effect.Effect<[excluded: Array<
|
|
4225
|
+
): Effect.Effect<[excluded: Array<Fail>, satisfying: Array<Pass>], E, R>
|
|
4114
4226
|
} = dual(
|
|
4115
4227
|
(args) => isIterable(args[0]) && !isEffect(args[0]),
|
|
4116
|
-
<A,
|
|
4228
|
+
<A, Pass, Fail, E, R>(
|
|
4117
4229
|
elements: Iterable<A>,
|
|
4118
|
-
|
|
4230
|
+
filter: Filter.FilterEffect<A, Pass, Fail, E, R, [i: number]>,
|
|
4119
4231
|
options?: { readonly concurrency?: Concurrency | undefined }
|
|
4120
|
-
): Effect.Effect<[excluded: Array<
|
|
4232
|
+
): Effect.Effect<[excluded: Array<Fail>, satisfying: Array<Pass>], E, R> =>
|
|
4121
4233
|
map(
|
|
4122
|
-
forEach(elements,
|
|
4123
|
-
(results) => Arr.
|
|
4234
|
+
forEach(elements, filter, options),
|
|
4235
|
+
(results) => Arr.partition(results, identity)
|
|
4124
4236
|
)
|
|
4125
4237
|
)
|
|
4126
4238
|
|
|
@@ -4167,7 +4279,7 @@ export const validate: {
|
|
|
4167
4279
|
} | undefined
|
|
4168
4280
|
): Effect.Effect<Array<B> | void, Arr.NonEmptyArray<E>, R> =>
|
|
4169
4281
|
flatMap(
|
|
4170
|
-
partition(elements, f, { concurrency: options?.concurrency }),
|
|
4282
|
+
partition(elements, (a, i) => result(f(a, i)), { concurrency: options?.concurrency }),
|
|
4171
4283
|
([excluded, satisfying]) => {
|
|
4172
4284
|
if (Arr.isArrayNonEmpty(excluded)) {
|
|
4173
4285
|
return fail(excluded)
|
|
@@ -4348,33 +4460,85 @@ export const filterOrElse: {
|
|
|
4348
4460
|
refinement: Predicate.Refinement<NoInfer<A>, B>,
|
|
4349
4461
|
orElse: (a: EqualsWith<A, B, NoInfer<A>, Exclude<NoInfer<A>, B>>) => Effect.Effect<C, E2, R2>
|
|
4350
4462
|
): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B | C, E2 | E, R2 | R>
|
|
4351
|
-
<A,
|
|
4352
|
-
|
|
4353
|
-
orElse: (a:
|
|
4354
|
-
): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<
|
|
4463
|
+
<A, C, E2, R2>(
|
|
4464
|
+
predicate: Predicate.Predicate<NoInfer<A>>,
|
|
4465
|
+
orElse: (a: NoInfer<A>) => Effect.Effect<C, E2, R2>
|
|
4466
|
+
): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A | C, E2 | E, R2 | R>
|
|
4355
4467
|
<A, E, R, C, E2, R2, B extends A>(
|
|
4356
4468
|
self: Effect.Effect<A, E, R>,
|
|
4357
4469
|
refinement: Predicate.Refinement<A, B>,
|
|
4358
4470
|
orElse: (a: EqualsWith<A, B, A, Exclude<A, B>>) => Effect.Effect<C, E2, R2>
|
|
4359
4471
|
): Effect.Effect<B | C, E | E2, R | R2>
|
|
4360
|
-
<A, E, R,
|
|
4472
|
+
<A, E, R, C, E2, R2>(
|
|
4473
|
+
self: Effect.Effect<A, E, R>,
|
|
4474
|
+
predicate: Predicate.Predicate<NoInfer<A>>,
|
|
4475
|
+
orElse: (a: NoInfer<A>) => Effect.Effect<C, E2, R2>
|
|
4476
|
+
): Effect.Effect<A | C, E | E2, R | R2>
|
|
4477
|
+
} = dual(3, <A, E, R, B, E2, R2>(
|
|
4478
|
+
self: Effect.Effect<A, E, R>,
|
|
4479
|
+
predicate: Predicate.Predicate<A>,
|
|
4480
|
+
orElse: (a: A) => Effect.Effect<B, E2, R2>
|
|
4481
|
+
): Effect.Effect<A | B, E | E2, R | R2> =>
|
|
4482
|
+
flatMap(
|
|
4483
|
+
self,
|
|
4484
|
+
(a) => predicate(a) ? succeed<A | B>(a) : orElse(a)
|
|
4485
|
+
))
|
|
4486
|
+
|
|
4487
|
+
/** @internal */
|
|
4488
|
+
export const filterMapOrElse: {
|
|
4489
|
+
<A, B, X, C, E2, R2>(
|
|
4490
|
+
filter: Filter.Filter<NoInfer<A>, B, X>,
|
|
4491
|
+
orElse: (x: X) => Effect.Effect<C, E2, R2>
|
|
4492
|
+
): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B | C, E2 | E, R2 | R>
|
|
4493
|
+
<A, E, R, B, X, C, E2, R2>(
|
|
4361
4494
|
self: Effect.Effect<A, E, R>,
|
|
4362
|
-
filter: Filter.
|
|
4363
|
-
orElse: (
|
|
4364
|
-
): Effect.Effect<
|
|
4365
|
-
} = dual(3, <A, E, R,
|
|
4495
|
+
filter: Filter.Filter<NoInfer<A>, B, X>,
|
|
4496
|
+
orElse: (x: X) => Effect.Effect<C, E2, R2>
|
|
4497
|
+
): Effect.Effect<B | C, E | E2, R | R2>
|
|
4498
|
+
} = dual(3, <A, E, R, B, X, C, E2, R2>(
|
|
4366
4499
|
self: Effect.Effect<A, E, R>,
|
|
4367
|
-
filter: Filter.
|
|
4368
|
-
orElse: (
|
|
4369
|
-
): Effect.Effect<
|
|
4500
|
+
filter: Filter.Filter<NoInfer<A>, B, X>,
|
|
4501
|
+
orElse: (x: X) => Effect.Effect<C, E2, R2>
|
|
4502
|
+
): Effect.Effect<B | C, E | E2, R | R2> =>
|
|
4370
4503
|
flatMap(
|
|
4371
4504
|
self,
|
|
4372
4505
|
(a) => {
|
|
4373
|
-
const result =
|
|
4374
|
-
return Result.isFailure(result)
|
|
4506
|
+
const result = filter(a)
|
|
4507
|
+
return (Result.isFailure(result)
|
|
4508
|
+
? orElse(result.failure)
|
|
4509
|
+
: succeed(result.success)) as Effect.Effect<B | C, E2, R2>
|
|
4375
4510
|
}
|
|
4376
4511
|
))
|
|
4377
4512
|
|
|
4513
|
+
/* @internal */
|
|
4514
|
+
export const filterMapOrFail: {
|
|
4515
|
+
<A, B, X, E2>(
|
|
4516
|
+
filter: Filter.Filter<NoInfer<A>, B, X>,
|
|
4517
|
+
orFailWith: (x: X) => E2
|
|
4518
|
+
): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, E2 | E, R>
|
|
4519
|
+
<A, B, X>(
|
|
4520
|
+
filter: Filter.Filter<NoInfer<A>, B, X>
|
|
4521
|
+
): <E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<B, Cause.NoSuchElementError | E, R>
|
|
4522
|
+
<A, E, R, B, X, E2>(
|
|
4523
|
+
self: Effect.Effect<A, E, R>,
|
|
4524
|
+
filter: Filter.Filter<NoInfer<A>, B, X>,
|
|
4525
|
+
orFailWith: (x: X) => E2
|
|
4526
|
+
): Effect.Effect<B, E2 | E, R>
|
|
4527
|
+
<A, E, R, B, X>(
|
|
4528
|
+
self: Effect.Effect<A, E, R>,
|
|
4529
|
+
filter: Filter.Filter<NoInfer<A>, B, X>
|
|
4530
|
+
): Effect.Effect<B, Cause.NoSuchElementError | E, R>
|
|
4531
|
+
} = dual((args) => isEffect(args[0]), <A, E, R, B, X, E2>(
|
|
4532
|
+
self: Effect.Effect<A, E, R>,
|
|
4533
|
+
filter: Filter.Filter<NoInfer<A>, B, X>,
|
|
4534
|
+
orFailWith?: (x: X) => E2
|
|
4535
|
+
): Effect.Effect<B, E2 | Cause.NoSuchElementError | E, R> =>
|
|
4536
|
+
filterMapOrElse(
|
|
4537
|
+
self,
|
|
4538
|
+
filter,
|
|
4539
|
+
orFailWith ? (x: X) => fail(orFailWith(x)) : () => fail(new NoSuchElementError() as E2)
|
|
4540
|
+
))
|
|
4541
|
+
|
|
4378
4542
|
/** @internal */
|
|
4379
4543
|
export const filter: {
|
|
4380
4544
|
<A, B extends A>(
|
|
@@ -4383,13 +4547,6 @@ export const filter: {
|
|
|
4383
4547
|
<A>(
|
|
4384
4548
|
predicate: Predicate.Predicate<NoInfer<A>>
|
|
4385
4549
|
): (elements: Iterable<A>) => Effect.Effect<Array<A>>
|
|
4386
|
-
<A, B, X>(
|
|
4387
|
-
filter: Filter.Filter<NoInfer<A>, B, X>
|
|
4388
|
-
): (elements: Iterable<A>) => Effect.Effect<Array<B>>
|
|
4389
|
-
<A, B, X, E, R>(
|
|
4390
|
-
filter: Filter.FilterEffect<NoInfer<A>, B, X, E, R>,
|
|
4391
|
-
options?: { readonly concurrency?: Concurrency | undefined }
|
|
4392
|
-
): (elements: Iterable<A>) => Effect.Effect<Array<B>, E, R>
|
|
4393
4550
|
<A, E, R>(
|
|
4394
4551
|
predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>,
|
|
4395
4552
|
options?: { readonly concurrency?: Concurrency | undefined }
|
|
@@ -4402,15 +4559,6 @@ export const filter: {
|
|
|
4402
4559
|
elements: Iterable<A>,
|
|
4403
4560
|
predicate: Predicate.Predicate<A>
|
|
4404
4561
|
): Effect.Effect<Array<A>>
|
|
4405
|
-
<A, B, X>(
|
|
4406
|
-
elements: Iterable<A>,
|
|
4407
|
-
filter: Filter.Filter<NoInfer<A>, B, X>
|
|
4408
|
-
): Effect.Effect<Array<B>>
|
|
4409
|
-
<A, B, X, E, R>(
|
|
4410
|
-
elements: Iterable<A>,
|
|
4411
|
-
filter: Filter.FilterEffect<NoInfer<A>, B, X, E, R>,
|
|
4412
|
-
options?: { readonly concurrency?: Concurrency | undefined }
|
|
4413
|
-
): Effect.Effect<Array<B>, E, R>
|
|
4414
4562
|
<A, E, R>(
|
|
4415
4563
|
iterable: Iterable<A>,
|
|
4416
4564
|
predicate: (a: NoInfer<A>, i: number) => Effect.Effect<boolean, E, R>,
|
|
@@ -4418,36 +4566,27 @@ export const filter: {
|
|
|
4418
4566
|
): Effect.Effect<Array<A>, E, R>
|
|
4419
4567
|
} = dual(
|
|
4420
4568
|
(args) => isIterable(args[0]) && !isEffect(args[0]),
|
|
4421
|
-
<A,
|
|
4569
|
+
<A, E, R>(
|
|
4422
4570
|
elements: Iterable<A>,
|
|
4423
|
-
|
|
4424
|
-
| Filter.FilterEffect<A, B, X, E, R>
|
|
4571
|
+
predicate:
|
|
4425
4572
|
| Predicate.Predicate<A>
|
|
4426
4573
|
| ((a: A, i: number) => Effect.Effect<boolean, E, R>),
|
|
4427
4574
|
options?: { readonly concurrency?: Concurrency | undefined }
|
|
4428
|
-
): Effect.Effect<Array<
|
|
4575
|
+
): Effect.Effect<Array<A>, E, R> =>
|
|
4429
4576
|
suspend(() => {
|
|
4430
|
-
const out: Array<
|
|
4577
|
+
const out: Array<A> = []
|
|
4431
4578
|
return as(
|
|
4432
4579
|
forEach(
|
|
4433
4580
|
elements,
|
|
4434
4581
|
(a, i) => {
|
|
4435
|
-
const result = (
|
|
4582
|
+
const result = (predicate as Function)(a, i)
|
|
4436
4583
|
if (typeof result === "boolean") {
|
|
4437
4584
|
if (result) out.push(a)
|
|
4438
4585
|
return void_ as any
|
|
4439
4586
|
}
|
|
4440
|
-
|
|
4441
|
-
if (
|
|
4442
|
-
out.push(
|
|
4443
|
-
}
|
|
4444
|
-
return void_ as any
|
|
4445
|
-
}
|
|
4446
|
-
return map(result, (r: any) => {
|
|
4447
|
-
if (typeof r === "boolean") {
|
|
4448
|
-
if (r) out.push(a)
|
|
4449
|
-
} else if (!Result.isFailure(r)) {
|
|
4450
|
-
out.push(r.success)
|
|
4587
|
+
return map(result, (keep) => {
|
|
4588
|
+
if (keep) {
|
|
4589
|
+
out.push(a)
|
|
4451
4590
|
}
|
|
4452
4591
|
})
|
|
4453
4592
|
},
|
|
@@ -4461,6 +4600,72 @@ export const filter: {
|
|
|
4461
4600
|
})
|
|
4462
4601
|
)
|
|
4463
4602
|
|
|
4603
|
+
/** @internal */
|
|
4604
|
+
export const filterMap: {
|
|
4605
|
+
<A, B, X>(
|
|
4606
|
+
filter: Filter.Filter<NoInfer<A>, B, X>
|
|
4607
|
+
): (elements: Iterable<A>) => Effect.Effect<Array<B>>
|
|
4608
|
+
<A, B, X>(
|
|
4609
|
+
elements: Iterable<A>,
|
|
4610
|
+
filter: Filter.Filter<NoInfer<A>, B, X>
|
|
4611
|
+
): Effect.Effect<Array<B>>
|
|
4612
|
+
} = dual(
|
|
4613
|
+
(args) => isIterable(args[0]) && !isEffect(args[0]),
|
|
4614
|
+
<A, B, X>(
|
|
4615
|
+
elements: Iterable<A>,
|
|
4616
|
+
filter: Filter.Filter<A, B, X>
|
|
4617
|
+
): Effect.Effect<Array<B>> =>
|
|
4618
|
+
suspend(() => {
|
|
4619
|
+
const out: Array<B> = []
|
|
4620
|
+
for (const a of elements) {
|
|
4621
|
+
const result = filter(a)
|
|
4622
|
+
if (Result.isSuccess(result)) {
|
|
4623
|
+
out.push(result.success)
|
|
4624
|
+
}
|
|
4625
|
+
}
|
|
4626
|
+
return succeed(out)
|
|
4627
|
+
})
|
|
4628
|
+
)
|
|
4629
|
+
|
|
4630
|
+
/** @internal */
|
|
4631
|
+
export const filterMapEffect: {
|
|
4632
|
+
<A, B, X, E, R>(
|
|
4633
|
+
filter: Filter.FilterEffect<NoInfer<A>, B, X, E, R>,
|
|
4634
|
+
options?: { readonly concurrency?: Concurrency | undefined }
|
|
4635
|
+
): (elements: Iterable<A>) => Effect.Effect<Array<B>, E, R>
|
|
4636
|
+
<A, B, X, E, R>(
|
|
4637
|
+
elements: Iterable<A>,
|
|
4638
|
+
filter: Filter.FilterEffect<NoInfer<A>, B, X, E, R>,
|
|
4639
|
+
options?: { readonly concurrency?: Concurrency | undefined }
|
|
4640
|
+
): Effect.Effect<Array<B>, E, R>
|
|
4641
|
+
} = dual(
|
|
4642
|
+
(args) => isIterable(args[0]) && !isEffect(args[0]),
|
|
4643
|
+
<A, B, X, E, R>(
|
|
4644
|
+
elements: Iterable<A>,
|
|
4645
|
+
filter: Filter.FilterEffect<A, B, X, E, R>,
|
|
4646
|
+
options?: { readonly concurrency?: Concurrency | undefined }
|
|
4647
|
+
): Effect.Effect<Array<B>, E, R> =>
|
|
4648
|
+
suspend(() => {
|
|
4649
|
+
const out: Array<B> = []
|
|
4650
|
+
return as(
|
|
4651
|
+
forEach(
|
|
4652
|
+
elements,
|
|
4653
|
+
(a) =>
|
|
4654
|
+
map(filter(a), (result) => {
|
|
4655
|
+
if (Result.isSuccess(result)) {
|
|
4656
|
+
out.push(result.success)
|
|
4657
|
+
}
|
|
4658
|
+
}),
|
|
4659
|
+
{
|
|
4660
|
+
discard: true,
|
|
4661
|
+
concurrency: options?.concurrency
|
|
4662
|
+
}
|
|
4663
|
+
),
|
|
4664
|
+
out
|
|
4665
|
+
)
|
|
4666
|
+
})
|
|
4667
|
+
)
|
|
4668
|
+
|
|
4464
4669
|
// ----------------------------------------------------------------------------
|
|
4465
4670
|
// do notation
|
|
4466
4671
|
// ----------------------------------------------------------------------------
|