effect 4.0.0-beta.14 → 4.0.0-beta.15
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/Channel.d.ts +6 -6
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +4 -4
- package/dist/Channel.js.map +1 -1
- package/dist/Effect.d.ts +7 -7
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js.map +1 -1
- package/dist/Stream.d.ts +7 -7
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +8 -6
- package/dist/Stream.js.map +1 -1
- package/dist/Types.d.ts +70 -0
- package/dist/Types.d.ts.map +1 -1
- package/dist/internal/effect.js +4 -4
- package/dist/internal/effect.js.map +1 -1
- package/dist/unstable/ai/LanguageModel.d.ts +2 -0
- package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
- package/dist/unstable/ai/LanguageModel.js.map +1 -1
- package/dist/unstable/cli/Command.d.ts +34 -4
- package/dist/unstable/cli/Command.d.ts.map +1 -1
- package/dist/unstable/cli/Command.js +73 -24
- package/dist/unstable/cli/Command.js.map +1 -1
- package/dist/unstable/cli/GlobalFlag.d.ts +21 -56
- package/dist/unstable/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/unstable/cli/GlobalFlag.js +9 -48
- package/dist/unstable/cli/GlobalFlag.js.map +1 -1
- package/dist/unstable/cli/internal/command.d.ts +3 -0
- package/dist/unstable/cli/internal/command.d.ts.map +1 -1
- package/dist/unstable/cli/internal/command.js +2 -0
- package/dist/unstable/cli/internal/command.js.map +1 -1
- package/dist/unstable/cli/internal/help.d.ts +18 -4
- package/dist/unstable/cli/internal/help.d.ts.map +1 -1
- package/dist/unstable/cli/internal/help.js +61 -7
- package/dist/unstable/cli/internal/help.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.d.ts +10 -4
- package/dist/unstable/httpapi/HttpApiBuilder.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.js +17 -6
- package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +7 -2
- package/dist/unstable/httpapi/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.d.ts +2 -2
- package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomRegistry.js +2 -6
- package/dist/unstable/reactivity/AtomRegistry.js.map +1 -1
- package/package.json +1 -1
- package/src/Channel.ts +24 -14
- package/src/Effect.ts +30 -8
- package/src/Stream.ts +46 -22
- package/src/Types.ts +66 -0
- package/src/internal/effect.ts +41 -14
- package/src/unstable/ai/LanguageModel.ts +9 -6
- package/src/unstable/cli/Command.ts +119 -31
- package/src/unstable/cli/GlobalFlag.ts +36 -114
- package/src/unstable/cli/internal/command.ts +5 -0
- package/src/unstable/cli/internal/help.ts +103 -22
- package/src/unstable/httpapi/HttpApiBuilder.ts +68 -13
- package/src/unstable/httpapi/HttpApiEndpoint.ts +13 -4
- package/src/unstable/reactivity/AtomHttpApi.ts +2 -2
- package/src/unstable/reactivity/AtomRegistry.ts +2 -6
package/src/Channel.ts
CHANGED
|
@@ -5528,11 +5528,13 @@ export const catchReason: {
|
|
|
5528
5528
|
errorTag: K,
|
|
5529
5529
|
reasonTag: RK,
|
|
5530
5530
|
f: (
|
|
5531
|
-
reason: Types.ExtractReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK
|
|
5531
|
+
reason: Types.ExtractReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK>,
|
|
5532
|
+
error: Types.NarrowReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK>
|
|
5532
5533
|
) => Channel<OutElem1, OutErr1, OutDone1, InElem1, InErr1, InDone1, Env1>,
|
|
5533
5534
|
orElse?:
|
|
5534
5535
|
| ((
|
|
5535
|
-
reason: Types.ExcludeReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK
|
|
5536
|
+
reason: Types.ExcludeReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK>,
|
|
5537
|
+
error: Types.OmitReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK>
|
|
5536
5538
|
) => Channel<OutElem2, OutErr2, OutDone2, InElem2, InErr2, InDone2, Env2>)
|
|
5537
5539
|
| undefined
|
|
5538
5540
|
): <
|
|
@@ -5615,11 +5617,13 @@ export const catchReason: {
|
|
|
5615
5617
|
errorTag: K,
|
|
5616
5618
|
reasonTag: RK,
|
|
5617
5619
|
f: (
|
|
5618
|
-
reason: Types.ExtractReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK
|
|
5620
|
+
reason: Types.ExtractReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK>,
|
|
5621
|
+
error: Types.NarrowReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK>
|
|
5619
5622
|
) => Channel<OutElem1, OutErr1, OutDone1, InElem1, InErr1, InDone1, Env1>,
|
|
5620
5623
|
orElse?:
|
|
5621
5624
|
| ((
|
|
5622
|
-
reason: Types.ExcludeReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK
|
|
5625
|
+
reason: Types.ExcludeReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK>,
|
|
5626
|
+
error: Types.OmitReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK>
|
|
5623
5627
|
) => Channel<OutElem2, OutErr2, OutDone2, InElem2, InErr2, InDone2, Env2>)
|
|
5624
5628
|
| undefined
|
|
5625
5629
|
): Channel<
|
|
@@ -5660,11 +5664,13 @@ export const catchReason: {
|
|
|
5660
5664
|
errorTag: K,
|
|
5661
5665
|
reasonTag: RK,
|
|
5662
5666
|
f: (
|
|
5663
|
-
reason: Types.ExtractReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK
|
|
5667
|
+
reason: Types.ExtractReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK>,
|
|
5668
|
+
error: Types.NarrowReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK>
|
|
5664
5669
|
) => Channel<OutElem1, OutErr1, OutDone1, InElem1, InErr1, InDone1, Env1>,
|
|
5665
5670
|
orElse?:
|
|
5666
5671
|
| ((
|
|
5667
|
-
reason: Types.ExcludeReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK
|
|
5672
|
+
reason: Types.ExcludeReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK>,
|
|
5673
|
+
error: Types.OmitReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK>
|
|
5668
5674
|
) => Channel<OutElem2, OutErr2, OutDone2, InElem2, InErr2, InDone2, Env2>)
|
|
5669
5675
|
| undefined
|
|
5670
5676
|
): Channel<
|
|
@@ -5690,9 +5696,9 @@ export const catchReason: {
|
|
|
5690
5696
|
if (isTagged(error, errorTag) && hasProperty(error, "reason")) {
|
|
5691
5697
|
const reason = error.reason as Types.ExcludeReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK>
|
|
5692
5698
|
if (isTagged(reason, reasonTag)) {
|
|
5693
|
-
return f(reason as any)
|
|
5699
|
+
return f(reason as any, error as any)
|
|
5694
5700
|
}
|
|
5695
|
-
return orElse ? orElse(reason) as any : fail(error) as any
|
|
5701
|
+
return orElse ? orElse(reason, error as any) as any : fail(error) as any
|
|
5696
5702
|
}
|
|
5697
5703
|
return fail(error) as any
|
|
5698
5704
|
}
|
|
@@ -5716,7 +5722,8 @@ export const catchReasons: {
|
|
|
5716
5722
|
OutErr,
|
|
5717
5723
|
Cases extends {
|
|
5718
5724
|
[RK in Types.ReasonTags<Types.ExtractTag<Types.NoInfer<OutErr>, K>>]+?: (
|
|
5719
|
-
reason: Types.ExtractReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK
|
|
5725
|
+
reason: Types.ExtractReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK>,
|
|
5726
|
+
error: Types.NarrowReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, RK>
|
|
5720
5727
|
) => Channel<any, any, any, any, any, any, any>
|
|
5721
5728
|
},
|
|
5722
5729
|
OutElem2 = Types.unassigned,
|
|
@@ -5731,7 +5738,8 @@ export const catchReasons: {
|
|
|
5731
5738
|
cases: Cases,
|
|
5732
5739
|
orElse?:
|
|
5733
5740
|
| ((
|
|
5734
|
-
reason: Types.ExcludeReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, Extract<keyof Cases, string
|
|
5741
|
+
reason: Types.ExcludeReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, Extract<keyof Cases, string>>,
|
|
5742
|
+
error: Types.OmitReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, Extract<keyof Cases, string>>
|
|
5735
5743
|
) => Channel<OutElem2, OutErr2, OutDone2, InElem2, InErr2, InDone2, Env2>)
|
|
5736
5744
|
| undefined
|
|
5737
5745
|
): <OutElem, OutDone, InElem, InErr, InDone, Env>(
|
|
@@ -5797,7 +5805,8 @@ export const catchReasons: {
|
|
|
5797
5805
|
K extends Types.Tags<OutErr>,
|
|
5798
5806
|
Cases extends {
|
|
5799
5807
|
[RK in Types.ReasonTags<Types.ExtractTag<OutErr, K>>]+?: (
|
|
5800
|
-
reason: Types.ExtractReason<Types.ExtractTag<OutErr, K>, RK
|
|
5808
|
+
reason: Types.ExtractReason<Types.ExtractTag<OutErr, K>, RK>,
|
|
5809
|
+
error: Types.NarrowReason<Types.ExtractTag<OutErr, K>, RK>
|
|
5801
5810
|
) => Channel<any, any, any, any, any, any, any>
|
|
5802
5811
|
},
|
|
5803
5812
|
OutElem2 = Types.unassigned,
|
|
@@ -5813,7 +5822,8 @@ export const catchReasons: {
|
|
|
5813
5822
|
cases: Cases,
|
|
5814
5823
|
orElse?:
|
|
5815
5824
|
| ((
|
|
5816
|
-
reason: Types.ExcludeReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, Extract<keyof Cases, string
|
|
5825
|
+
reason: Types.ExcludeReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, Extract<keyof Cases, string>>,
|
|
5826
|
+
error: Types.OmitReason<Types.ExtractTag<Types.NoInfer<OutErr>, K>, Extract<keyof Cases, string>>
|
|
5817
5827
|
) => Channel<OutElem2, OutErr2, OutDone2, InElem2, InErr2, InDone2, Env2>)
|
|
5818
5828
|
| undefined
|
|
5819
5829
|
): Channel<
|
|
@@ -5872,9 +5882,9 @@ export const catchReasons: {
|
|
|
5872
5882
|
const reason = error.reason as { readonly _tag: string }
|
|
5873
5883
|
keys ??= new Set(Object.keys(cases))
|
|
5874
5884
|
if (keys.has(reason._tag)) {
|
|
5875
|
-
return (cases as any)[reason._tag](reason as any)
|
|
5885
|
+
return (cases as any)[reason._tag](reason as any, error)
|
|
5876
5886
|
}
|
|
5877
|
-
return orElse ? orElse(reason) as any : fail(error) as any
|
|
5887
|
+
return orElse ? orElse(reason, error) as any : fail(error) as any
|
|
5878
5888
|
}
|
|
5879
5889
|
return fail(error) as any
|
|
5880
5890
|
})
|
package/src/Effect.ts
CHANGED
|
@@ -116,7 +116,9 @@ import type {
|
|
|
116
116
|
ExcludeTag,
|
|
117
117
|
ExtractReason,
|
|
118
118
|
ExtractTag,
|
|
119
|
+
NarrowReason,
|
|
119
120
|
NoInfer,
|
|
121
|
+
OmitReason,
|
|
120
122
|
ReasonOf,
|
|
121
123
|
ReasonTags,
|
|
122
124
|
Simplify,
|
|
@@ -4534,8 +4536,16 @@ export const catchReason: {
|
|
|
4534
4536
|
>(
|
|
4535
4537
|
errorTag: K,
|
|
4536
4538
|
reasonTag: RK,
|
|
4537
|
-
f: (
|
|
4538
|
-
|
|
4539
|
+
f: (
|
|
4540
|
+
reason: ExtractReason<ExtractTag<NoInfer<E>, K>, RK>,
|
|
4541
|
+
error: NarrowReason<ExtractTag<NoInfer<E>, K>, RK>
|
|
4542
|
+
) => Effect<A2, E2, R2>,
|
|
4543
|
+
orElse?:
|
|
4544
|
+
| ((
|
|
4545
|
+
reasons: ExcludeReason<ExtractTag<NoInfer<E>, K>, RK>,
|
|
4546
|
+
error: OmitReason<ExtractTag<NoInfer<E>, K>, RK>
|
|
4547
|
+
) => Effect<A3, E3, R3>)
|
|
4548
|
+
| undefined
|
|
4539
4549
|
): <A, R>(
|
|
4540
4550
|
self: Effect<A, E, R>
|
|
4541
4551
|
) => Effect<A | A2 | Exclude<A3, unassigned>, (A3 extends unassigned ? E : ExcludeTag<E, K>) | E2 | E3, R | R2 | R3>
|
|
@@ -4590,8 +4600,10 @@ export const catchReason: {
|
|
|
4590
4600
|
self: Effect<A, E, R>,
|
|
4591
4601
|
errorTag: K,
|
|
4592
4602
|
reasonTag: RK,
|
|
4593
|
-
f: (reason: ExtractReason<ExtractTag<E, K>, RK>) => Effect<A2, E2, R2>,
|
|
4594
|
-
orElse?:
|
|
4603
|
+
f: (reason: ExtractReason<ExtractTag<E, K>, RK>, error: NarrowReason<ExtractTag<E, K>, RK>) => Effect<A2, E2, R2>,
|
|
4604
|
+
orElse?:
|
|
4605
|
+
| ((reasons: ExcludeReason<ExtractTag<E, K>, RK>, error: OmitReason<ExtractTag<E, K>, RK>) => Effect<A3, E3, R3>)
|
|
4606
|
+
| undefined
|
|
4595
4607
|
): Effect<A | A2 | Exclude<A3, unassigned>, (A3 extends unassigned ? E : ExcludeTag<E, K>) | E2 | E3, R | R2 | R3>
|
|
4596
4608
|
} = internal.catchReason
|
|
4597
4609
|
|
|
@@ -4669,7 +4681,8 @@ export const catchReasons: {
|
|
|
4669
4681
|
E,
|
|
4670
4682
|
Cases extends {
|
|
4671
4683
|
[RK in ReasonTags<ExtractTag<NoInfer<E>, K>>]+?: (
|
|
4672
|
-
reason: ExtractReason<ExtractTag<NoInfer<E>, K>, RK
|
|
4684
|
+
reason: ExtractReason<ExtractTag<NoInfer<E>, K>, RK>,
|
|
4685
|
+
error: NarrowReason<ExtractTag<NoInfer<E>, K>, RK>
|
|
4673
4686
|
) => Effect<any, any, any>
|
|
4674
4687
|
},
|
|
4675
4688
|
A2 = unassigned,
|
|
@@ -4679,7 +4692,10 @@ export const catchReasons: {
|
|
|
4679
4692
|
errorTag: K,
|
|
4680
4693
|
cases: Cases,
|
|
4681
4694
|
orElse?:
|
|
4682
|
-
| ((
|
|
4695
|
+
| ((
|
|
4696
|
+
reason: ExcludeReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>,
|
|
4697
|
+
error: OmitReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>
|
|
4698
|
+
) => Effect<A2, E2, R2>)
|
|
4683
4699
|
| undefined
|
|
4684
4700
|
): <A, R>(
|
|
4685
4701
|
self: Effect<A, E, R>
|
|
@@ -4740,7 +4756,10 @@ export const catchReasons: {
|
|
|
4740
4756
|
R,
|
|
4741
4757
|
K extends Tags<E>,
|
|
4742
4758
|
Cases extends {
|
|
4743
|
-
[RK in ReasonTags<ExtractTag<E, K>>]+?: (
|
|
4759
|
+
[RK in ReasonTags<ExtractTag<E, K>>]+?: (
|
|
4760
|
+
reason: ExtractReason<ExtractTag<E, K>, RK>,
|
|
4761
|
+
error: NarrowReason<ExtractTag<E, K>, RK>
|
|
4762
|
+
) => Effect<any, any, any>
|
|
4744
4763
|
},
|
|
4745
4764
|
A2 = unassigned,
|
|
4746
4765
|
E2 = never,
|
|
@@ -4750,7 +4769,10 @@ export const catchReasons: {
|
|
|
4750
4769
|
errorTag: K,
|
|
4751
4770
|
cases: Cases,
|
|
4752
4771
|
orElse?:
|
|
4753
|
-
| ((
|
|
4772
|
+
| ((
|
|
4773
|
+
reason: ExcludeReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>,
|
|
4774
|
+
error: OmitReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>
|
|
4775
|
+
) => Effect<A2, E2, R2>)
|
|
4754
4776
|
| undefined
|
|
4755
4777
|
): Effect<
|
|
4756
4778
|
| A
|
package/src/Stream.ts
CHANGED
|
@@ -48,7 +48,9 @@ import type {
|
|
|
48
48
|
ExcludeTag,
|
|
49
49
|
ExtractReason,
|
|
50
50
|
ExtractTag,
|
|
51
|
+
NarrowReason,
|
|
51
52
|
NoInfer,
|
|
53
|
+
OmitReason,
|
|
52
54
|
ReasonTags,
|
|
53
55
|
Tags,
|
|
54
56
|
unassigned
|
|
@@ -8092,8 +8094,16 @@ export const catchReason: {
|
|
|
8092
8094
|
>(
|
|
8093
8095
|
errorTag: K,
|
|
8094
8096
|
reasonTag: RK,
|
|
8095
|
-
f: (
|
|
8096
|
-
|
|
8097
|
+
f: (
|
|
8098
|
+
reason: ExtractReason<ExtractTag<NoInfer<E>, K>, RK>,
|
|
8099
|
+
error: NarrowReason<ExtractTag<NoInfer<E>, K>, RK>
|
|
8100
|
+
) => Stream<A2, E2, R2>,
|
|
8101
|
+
orElse?:
|
|
8102
|
+
| ((
|
|
8103
|
+
reason: ExcludeReason<ExtractTag<NoInfer<E>, K>, RK>,
|
|
8104
|
+
error: OmitReason<ExtractTag<NoInfer<E>, K>, RK>
|
|
8105
|
+
) => Stream<A3, E3, R3>)
|
|
8106
|
+
| undefined
|
|
8097
8107
|
): <A, R>(
|
|
8098
8108
|
self: Stream<A, E, R>
|
|
8099
8109
|
) => Stream<A | A2 | Exclude<A3, unassigned>, (A3 extends unassigned ? E : ExcludeTag<E, K>) | E2 | E3, R | R2 | R3>
|
|
@@ -8156,8 +8166,10 @@ export const catchReason: {
|
|
|
8156
8166
|
self: Stream<A, E, R>,
|
|
8157
8167
|
errorTag: K,
|
|
8158
8168
|
reasonTag: RK,
|
|
8159
|
-
f: (reason: ExtractReason<ExtractTag<E, K>, RK>) => Stream<A2, E2, R2>,
|
|
8160
|
-
orElse?:
|
|
8169
|
+
f: (reason: ExtractReason<ExtractTag<E, K>, RK>, error: NarrowReason<ExtractTag<E, K>, RK>) => Stream<A2, E2, R2>,
|
|
8170
|
+
orElse?:
|
|
8171
|
+
| ((reason: ExcludeReason<ExtractTag<E, K>, RK>, error: OmitReason<ExtractTag<E, K>, RK>) => Stream<A3, E3, R3>)
|
|
8172
|
+
| undefined
|
|
8161
8173
|
): Stream<A | A2 | Exclude<A3, unassigned>, (A3 extends unassigned ? E : ExcludeTag<E, K>) | E2 | E3, R | R2 | R3>
|
|
8162
8174
|
} = dual(
|
|
8163
8175
|
(args) => isStream(args[0]),
|
|
@@ -8177,16 +8189,18 @@ export const catchReason: {
|
|
|
8177
8189
|
self: Stream<A, E, R>,
|
|
8178
8190
|
errorTag: K,
|
|
8179
8191
|
reasonTag: RK,
|
|
8180
|
-
f: (reason: ExtractReason<ExtractTag<E, K>, RK>) => Stream<A2, E2, R2>,
|
|
8181
|
-
orElse?:
|
|
8192
|
+
f: (reason: ExtractReason<ExtractTag<E, K>, RK>, error: NarrowReason<ExtractTag<E, K>, RK>) => Stream<A2, E2, R2>,
|
|
8193
|
+
orElse?:
|
|
8194
|
+
| ((reason: ExcludeReason<ExtractTag<E, K>, RK>, error: OmitReason<ExtractTag<E, K>, RK>) => Stream<A3, E3, R3>)
|
|
8195
|
+
| undefined
|
|
8182
8196
|
): Stream<A | A2 | Exclude<A3, unassigned>, (A3 extends unassigned ? E : ExcludeTag<E, K>) | E2 | E3, R | R2 | R3> =>
|
|
8183
8197
|
fromChannel(
|
|
8184
8198
|
Channel.catchReason(
|
|
8185
8199
|
toChannel(self),
|
|
8186
8200
|
errorTag,
|
|
8187
8201
|
reasonTag,
|
|
8188
|
-
(reason) => f(reason).channel,
|
|
8189
|
-
orElse && ((reason) => orElse(reason).channel)
|
|
8202
|
+
(reason, error) => f(reason, error).channel,
|
|
8203
|
+
orElse && ((reason, error) => orElse(reason, error).channel)
|
|
8190
8204
|
)
|
|
8191
8205
|
) as any
|
|
8192
8206
|
)
|
|
@@ -8279,7 +8293,8 @@ export const catchReasons: {
|
|
|
8279
8293
|
E,
|
|
8280
8294
|
Cases extends {
|
|
8281
8295
|
[RK in ReasonTags<ExtractTag<NoInfer<E>, K>>]+?: (
|
|
8282
|
-
reason: ExtractReason<ExtractTag<NoInfer<E>, K>, RK
|
|
8296
|
+
reason: ExtractReason<ExtractTag<NoInfer<E>, K>, RK>,
|
|
8297
|
+
error: NarrowReason<ExtractTag<NoInfer<E>, K>, RK>
|
|
8283
8298
|
) => Stream<any, any, any>
|
|
8284
8299
|
},
|
|
8285
8300
|
A2 = unassigned,
|
|
@@ -8289,7 +8304,10 @@ export const catchReasons: {
|
|
|
8289
8304
|
errorTag: K,
|
|
8290
8305
|
cases: Cases,
|
|
8291
8306
|
orElse?:
|
|
8292
|
-
| ((
|
|
8307
|
+
| ((
|
|
8308
|
+
reason: ExcludeReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>,
|
|
8309
|
+
error: OmitReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>
|
|
8310
|
+
) => Stream<A2, E2, R2>)
|
|
8293
8311
|
| undefined
|
|
8294
8312
|
): <A, R>(self: Stream<A, E, R>) => Stream<
|
|
8295
8313
|
| A
|
|
@@ -8356,7 +8374,8 @@ export const catchReasons: {
|
|
|
8356
8374
|
K extends Tags<E>,
|
|
8357
8375
|
Cases extends {
|
|
8358
8376
|
[RK in ReasonTags<ExtractTag<E, K>>]+?: (
|
|
8359
|
-
reason: ExtractReason<ExtractTag<E, K>, RK
|
|
8377
|
+
reason: ExtractReason<ExtractTag<E, K>, RK>,
|
|
8378
|
+
error: NarrowReason<ExtractTag<E, K>, RK>
|
|
8360
8379
|
) => Stream<any, any, any>
|
|
8361
8380
|
},
|
|
8362
8381
|
A2 = unassigned,
|
|
@@ -8367,7 +8386,10 @@ export const catchReasons: {
|
|
|
8367
8386
|
errorTag: K,
|
|
8368
8387
|
cases: Cases,
|
|
8369
8388
|
orElse?:
|
|
8370
|
-
| ((
|
|
8389
|
+
| ((
|
|
8390
|
+
reason: ExcludeReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>,
|
|
8391
|
+
error: OmitReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>
|
|
8392
|
+
) => Stream<A2, E2, R2>)
|
|
8371
8393
|
| undefined
|
|
8372
8394
|
): Stream<
|
|
8373
8395
|
| A
|
|
@@ -8387,12 +8409,12 @@ export const catchReasons: {
|
|
|
8387
8409
|
}[keyof Cases]
|
|
8388
8410
|
>
|
|
8389
8411
|
} = dual((args) => isStream(args[0]), (self, errorTag, cases, orElse) => {
|
|
8390
|
-
const handlers: Record<string, (reason: any) => Channel.Channel<any, any, any, any, any, any, any>> = {}
|
|
8412
|
+
const handlers: Record<string, (reason: any, error: any) => Channel.Channel<any, any, any, any, any, any, any>> = {}
|
|
8391
8413
|
for (const key of Object.keys(cases)) {
|
|
8392
8414
|
const handler = (cases as any)[key]
|
|
8393
|
-
handlers[key] = (reason) => handler(reason).channel
|
|
8415
|
+
handlers[key] = (reason, error) => handler(reason, error).channel
|
|
8394
8416
|
}
|
|
8395
|
-
const orElseHandler = orElse && ((reason: any) => orElse(reason).channel)
|
|
8417
|
+
const orElseHandler = orElse && ((reason: any, error: any) => orElse(reason, error).channel)
|
|
8396
8418
|
return fromChannel(
|
|
8397
8419
|
Channel.catchReasons(self.channel, errorTag as any, handlers as any, orElseHandler as any) as Channel.Channel<
|
|
8398
8420
|
Arr.NonEmptyReadonlyArray<any>,
|
|
@@ -13638,12 +13660,15 @@ export const aggregateWithin: {
|
|
|
13638
13660
|
* @category Aggregation
|
|
13639
13661
|
*/
|
|
13640
13662
|
B>()
|
|
13663
|
+
let leftover: Arr.NonEmptyReadonlyArray<A2> | undefined
|
|
13641
13664
|
const step = yield* Schedule.toStepWithSleep(schedule)
|
|
13642
|
-
const stepToBuffer = Effect.suspend(()
|
|
13643
|
-
|
|
13644
|
-
|
|
13645
|
-
|
|
13646
|
-
|
|
13665
|
+
const stepToBuffer = Effect.suspend(function loop(): Pull.Pull<never, E3, void, R3> {
|
|
13666
|
+
return step(lastOutput).pipe(
|
|
13667
|
+
Effect.flatMap(() => !hadChunk && leftover === undefined ? loop() : Queue.offer(buffer, scheduleStep)),
|
|
13668
|
+
Effect.flatMap(() => Effect.never),
|
|
13669
|
+
Pull.catchDone(() => Cause.done())
|
|
13670
|
+
)
|
|
13671
|
+
})
|
|
13647
13672
|
|
|
13648
13673
|
// buffer -> sink
|
|
13649
13674
|
const pullFromBuffer: Pull.Pull<
|
|
@@ -13653,7 +13678,6 @@ export const aggregateWithin: {
|
|
|
13653
13678
|
Effect.flatMap((arr) => arr === scheduleStep ? Cause.done() : Effect.succeed(arr))
|
|
13654
13679
|
)
|
|
13655
13680
|
|
|
13656
|
-
let leftover: Arr.NonEmptyReadonlyArray<A2> | undefined
|
|
13657
13681
|
const sinkUpstream = Effect.suspend((): Pull.Pull<Arr.NonEmptyReadonlyArray<A | A2>, E> => {
|
|
13658
13682
|
if (leftover !== undefined) {
|
|
13659
13683
|
const chunk = leftover
|
|
@@ -13665,7 +13689,7 @@ export const aggregateWithin: {
|
|
|
13665
13689
|
return pullFromBuffer
|
|
13666
13690
|
})
|
|
13667
13691
|
const catchSinkHalt = Effect.flatMap(([value, leftover_]: Sink.End<B, A2>) => {
|
|
13668
|
-
// ignore the last output if the
|
|
13692
|
+
// ignore the last output if the upstream only pulled a halt
|
|
13669
13693
|
if (!hadChunk && buffer.state._tag === "Done") return Cause.done()
|
|
13670
13694
|
lastOutput = Option.some(value)
|
|
13671
13695
|
leftover = leftover_
|
package/src/Types.ts
CHANGED
|
@@ -927,6 +927,72 @@ export type ExtractReason<E, K extends string> = E extends { readonly reason: in
|
|
|
927
927
|
: never
|
|
928
928
|
: never
|
|
929
929
|
|
|
930
|
+
/**
|
|
931
|
+
* Narrows a specific reason variant by its `_tag` from an error's `reason`
|
|
932
|
+
* field.
|
|
933
|
+
*
|
|
934
|
+
* - Use to narrow down to a single reason variant from a nested error type.
|
|
935
|
+
* - Returns `never` if `E` has no matching reason variant.
|
|
936
|
+
*
|
|
937
|
+
* **Example** (Narrowing a reason variant)
|
|
938
|
+
*
|
|
939
|
+
* ```ts
|
|
940
|
+
* import type { Types } from "effect"
|
|
941
|
+
*
|
|
942
|
+
* type RateLimitError = { readonly _tag: "RateLimitError"; readonly retryAfter: number }
|
|
943
|
+
* type QuotaError = { readonly _tag: "QuotaError"; readonly limit: number }
|
|
944
|
+
* type ApiError = { readonly _tag: "ApiError"; readonly reason: RateLimitError | QuotaError }
|
|
945
|
+
*
|
|
946
|
+
* type Result = Types.NarrowReason<ApiError, "RateLimitError">
|
|
947
|
+
* // ApiError & { readonly reason: { readonly _tag: "RateLimitError"; readonly retryAfter: number } }
|
|
948
|
+
* ```
|
|
949
|
+
*
|
|
950
|
+
* @see {@link ExcludeReason}
|
|
951
|
+
* @see {@link ReasonOf}
|
|
952
|
+
* @see {@link ReasonTags}
|
|
953
|
+
*
|
|
954
|
+
* @since 4.0.0
|
|
955
|
+
* @category types
|
|
956
|
+
*/
|
|
957
|
+
export type NarrowReason<E, K extends string> = E extends { readonly reason: infer R }
|
|
958
|
+
? R extends { readonly _tag: infer T } ? K extends T ? E & { readonly reason: R } : never
|
|
959
|
+
: never
|
|
960
|
+
: never
|
|
961
|
+
|
|
962
|
+
/**
|
|
963
|
+
* Narrows an error's `reason` field to exclude a specific reason variant by
|
|
964
|
+
* its `_tag`.
|
|
965
|
+
*
|
|
966
|
+
* - Use to narrow the error to only the remaining reason variants after
|
|
967
|
+
* excluding the matched one.
|
|
968
|
+
* - Returns `never` if `E` has no `reason` field or no remaining variants.
|
|
969
|
+
*
|
|
970
|
+
* **Example** (Omitting a reason variant)
|
|
971
|
+
*
|
|
972
|
+
* ```ts
|
|
973
|
+
* import type { Types } from "effect"
|
|
974
|
+
*
|
|
975
|
+
* type RateLimitError = { readonly _tag: "RateLimitError"; readonly retryAfter: number }
|
|
976
|
+
* type QuotaError = { readonly _tag: "QuotaError"; readonly limit: number }
|
|
977
|
+
* type ApiError = { readonly _tag: "ApiError"; readonly reason: RateLimitError | QuotaError }
|
|
978
|
+
*
|
|
979
|
+
* type Result = Types.OmitReason<ApiError, "RateLimitError">
|
|
980
|
+
* // ApiError & { readonly reason: { readonly _tag: "QuotaError"; readonly limit: number } }
|
|
981
|
+
* ```
|
|
982
|
+
*
|
|
983
|
+
* @see {@link NarrowReason}
|
|
984
|
+
* @see {@link ExcludeReason}
|
|
985
|
+
* @see {@link ReasonOf}
|
|
986
|
+
* @see {@link ReasonTags}
|
|
987
|
+
*
|
|
988
|
+
* @since 4.0.0
|
|
989
|
+
* @category types
|
|
990
|
+
*/
|
|
991
|
+
export type OmitReason<E, K extends string> = E extends { readonly reason: infer R }
|
|
992
|
+
? R extends { readonly _tag: infer T } ? K extends T ? never : E & { readonly reason: R }
|
|
993
|
+
: never
|
|
994
|
+
: never
|
|
995
|
+
|
|
930
996
|
/**
|
|
931
997
|
* Excludes a specific reason variant by its `_tag` from an error's `reason`
|
|
932
998
|
* field.
|
package/src/internal/effect.ts
CHANGED
|
@@ -50,7 +50,9 @@ import type {
|
|
|
50
50
|
ExcludeTag,
|
|
51
51
|
ExtractReason,
|
|
52
52
|
ExtractTag,
|
|
53
|
+
NarrowReason,
|
|
53
54
|
NoInfer,
|
|
55
|
+
OmitReason,
|
|
54
56
|
ReasonOf,
|
|
55
57
|
ReasonTags,
|
|
56
58
|
Simplify,
|
|
@@ -2824,8 +2826,16 @@ export const catchReason: {
|
|
|
2824
2826
|
>(
|
|
2825
2827
|
errorTag: K,
|
|
2826
2828
|
reasonTag: RK,
|
|
2827
|
-
f: (
|
|
2828
|
-
|
|
2829
|
+
f: (
|
|
2830
|
+
reason: ExtractReason<ExtractTag<NoInfer<E>, K>, RK>,
|
|
2831
|
+
error: NarrowReason<ExtractTag<NoInfer<E>, K>, RK>
|
|
2832
|
+
) => Effect.Effect<A2, E2, R2>,
|
|
2833
|
+
orElse?:
|
|
2834
|
+
| ((
|
|
2835
|
+
reasons: ExcludeReason<ExtractTag<NoInfer<E>, K>, RK>,
|
|
2836
|
+
error: OmitReason<ExtractTag<NoInfer<E>, K>, RK>
|
|
2837
|
+
) => Effect.Effect<A3, E3, R3>)
|
|
2838
|
+
| undefined
|
|
2829
2839
|
): <A, R>(
|
|
2830
2840
|
self: Effect.Effect<A, E, R>
|
|
2831
2841
|
) => Effect.Effect<
|
|
@@ -2849,8 +2859,16 @@ export const catchReason: {
|
|
|
2849
2859
|
self: Effect.Effect<A, E, R>,
|
|
2850
2860
|
errorTag: K,
|
|
2851
2861
|
reasonTag: RK,
|
|
2852
|
-
f: (
|
|
2853
|
-
|
|
2862
|
+
f: (
|
|
2863
|
+
reason: ExtractReason<ExtractTag<E, K>, RK>,
|
|
2864
|
+
error: NarrowReason<ExtractTag<E, K>, RK>
|
|
2865
|
+
) => Effect.Effect<A2, E2, R2>,
|
|
2866
|
+
orElse?:
|
|
2867
|
+
| ((
|
|
2868
|
+
reasons: ExcludeReason<ExtractTag<E, K>, RK>,
|
|
2869
|
+
error: OmitReason<ExtractTag<E, K>, RK>
|
|
2870
|
+
) => Effect.Effect<A3, E3, R3>)
|
|
2871
|
+
| undefined
|
|
2854
2872
|
): Effect.Effect<
|
|
2855
2873
|
A | A2 | Exclude<A3, unassigned>,
|
|
2856
2874
|
(A3 extends unassigned ? E : ExcludeTag<E, K>) | E2 | E3,
|
|
@@ -2874,8 +2892,13 @@ export const catchReason: {
|
|
|
2874
2892
|
self: Effect.Effect<A, E, R>,
|
|
2875
2893
|
errorTag: K,
|
|
2876
2894
|
reasonTag: RK,
|
|
2877
|
-
f: (reason: ExtractReason<ExtractTag<E, K>, RK>) => Effect.Effect<A2, E2, R2>,
|
|
2878
|
-
orElse?:
|
|
2895
|
+
f: (reason: ExtractReason<ExtractTag<E, K>, RK>, error: ExtractTag<E, K>) => Effect.Effect<A2, E2, R2>,
|
|
2896
|
+
orElse?:
|
|
2897
|
+
| ((
|
|
2898
|
+
reasons: ExcludeReason<ExtractTag<E, K>, RK>,
|
|
2899
|
+
error: OmitReason<ExtractTag<E, K>, RK>
|
|
2900
|
+
) => Effect.Effect<A3, E3, R3>)
|
|
2901
|
+
| undefined
|
|
2879
2902
|
): Effect.Effect<
|
|
2880
2903
|
A | A2 | Exclude<A3, unassigned>,
|
|
2881
2904
|
(A3 extends unassigned ? E : ExcludeTag<E, K>) | E2 | E3,
|
|
@@ -2886,8 +2909,8 @@ export const catchReason: {
|
|
|
2886
2909
|
((e: any) => isTagged(e, errorTag) && hasProperty(e, "reason")) as any,
|
|
2887
2910
|
(e: any): Effect.Effect<A2 | A3, E | E2 | E3, R2 | R3> => {
|
|
2888
2911
|
const reason = e.reason as any
|
|
2889
|
-
if (isTagged(reason, reasonTag)) return f(reason as any)
|
|
2890
|
-
return orElse ? internalCall(() => orElse(reason)) : fail(e)
|
|
2912
|
+
if (isTagged(reason, reasonTag)) return f(reason as any, e)
|
|
2913
|
+
return orElse ? internalCall(() => orElse(reason, e)) : fail(e)
|
|
2891
2914
|
}
|
|
2892
2915
|
) as any
|
|
2893
2916
|
)
|
|
@@ -2899,7 +2922,8 @@ export const catchReasons: {
|
|
|
2899
2922
|
E,
|
|
2900
2923
|
Cases extends {
|
|
2901
2924
|
[RK in ReasonTags<ExtractTag<NoInfer<E>, K>>]+?: (
|
|
2902
|
-
reason: ExtractReason<ExtractTag<NoInfer<E>, K>, RK
|
|
2925
|
+
reason: ExtractReason<ExtractTag<NoInfer<E>, K>, RK>,
|
|
2926
|
+
error: NarrowReason<ExtractTag<NoInfer<E>, K>, RK>
|
|
2903
2927
|
) => Effect.Effect<any, any, any>
|
|
2904
2928
|
},
|
|
2905
2929
|
A2 = unassigned,
|
|
@@ -2910,7 +2934,8 @@ export const catchReasons: {
|
|
|
2910
2934
|
cases: Cases,
|
|
2911
2935
|
orElse?:
|
|
2912
2936
|
| ((
|
|
2913
|
-
reason: ExcludeReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string
|
|
2937
|
+
reason: ExcludeReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>,
|
|
2938
|
+
error: OmitReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>
|
|
2914
2939
|
) => Effect.Effect<A2, E2, R2>)
|
|
2915
2940
|
| undefined
|
|
2916
2941
|
): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<
|
|
@@ -2937,7 +2962,8 @@ export const catchReasons: {
|
|
|
2937
2962
|
K extends Tags<E>,
|
|
2938
2963
|
Cases extends {
|
|
2939
2964
|
[RK in ReasonTags<ExtractTag<E, K>>]+?: (
|
|
2940
|
-
reason: ExtractReason<ExtractTag<E, K>, RK
|
|
2965
|
+
reason: ExtractReason<ExtractTag<E, K>, RK>,
|
|
2966
|
+
error: NarrowReason<ExtractTag<E, K>, RK>
|
|
2941
2967
|
) => Effect.Effect<any, any, any>
|
|
2942
2968
|
},
|
|
2943
2969
|
A2 = unassigned,
|
|
@@ -2949,7 +2975,8 @@ export const catchReasons: {
|
|
|
2949
2975
|
cases: Cases,
|
|
2950
2976
|
orElse?:
|
|
2951
2977
|
| ((
|
|
2952
|
-
reason: ExcludeReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string
|
|
2978
|
+
reason: ExcludeReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>,
|
|
2979
|
+
error: OmitReason<ExtractTag<NoInfer<E>, K>, Extract<keyof Cases, string>>
|
|
2953
2980
|
) => Effect.Effect<A2, E2, R2>)
|
|
2954
2981
|
| undefined
|
|
2955
2982
|
): Effect.Effect<
|
|
@@ -2982,9 +3009,9 @@ export const catchReasons: {
|
|
|
2982
3009
|
const reason = e.reason
|
|
2983
3010
|
keys ??= Object.keys(cases)
|
|
2984
3011
|
if (keys.includes(reason._tag)) {
|
|
2985
|
-
return internalCall(() => (cases as any)[reason._tag](reason))
|
|
3012
|
+
return internalCall(() => (cases as any)[reason._tag](reason, e))
|
|
2986
3013
|
}
|
|
2987
|
-
return orElse ? internalCall(() => orElse(reason)) : fail(e)
|
|
3014
|
+
return orElse ? internalCall(() => orElse(reason, e)) : fail(e)
|
|
2988
3015
|
}
|
|
2989
3016
|
)
|
|
2990
3017
|
})
|
|
@@ -527,13 +527,16 @@ export type ExtractError<Options> = Options extends {
|
|
|
527
527
|
* @category utility types
|
|
528
528
|
*/
|
|
529
529
|
export type ExtractServices<Options> = Options extends {
|
|
530
|
-
readonly
|
|
531
|
-
}
|
|
530
|
+
readonly disableToolCallResolution: true
|
|
531
|
+
} ? never
|
|
532
|
+
: Options extends {
|
|
533
|
+
readonly toolkit: Toolkit.WithHandler<infer _Tools>
|
|
534
|
+
}
|
|
532
535
|
// Required for tool call execution
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
536
|
+
?
|
|
537
|
+
| Tool.ResultEncodingServices<_Tools[keyof _Tools]>
|
|
538
|
+
// Required for decoding large language model responses
|
|
539
|
+
| Tool.ResultDecodingServices<_Tools[keyof _Tools]>
|
|
537
540
|
: Options extends {
|
|
538
541
|
readonly toolkit: Effect.Yieldable<
|
|
539
542
|
Toolkit.Toolkit<infer _Tools>,
|