@@ -13523,14 +13523,18 @@ export const Service: <Self = never>() => [Self] extends [never] ? MissingSelfGe
13523
13523
const Key extends string ,
13524
13524
const Make extends
13525
13525
| {
13526
- readonly scoped : Effect < Service . AllowedType < Key , Make > , any , any >
13526
+ readonly scoped :
13527
+ | Effect < Service . AllowedType < Key , Make > , any , any >
13528
+ | ( ( ...args : any ) => Effect < Service . AllowedType < Key , Make > , any , any > )
13527
13529
readonly dependencies ?: ReadonlyArray < Layer . Layer . Any >
13528
13530
readonly accessors ?: boolean
13529
13531
/** @deprecated */
13530
13532
readonly ಠ_ಠ : never
13531
13533
}
13532
13534
| {
13533
- readonly effect : Effect < Service . AllowedType < Key , Make > , any , any >
13535
+ readonly effect :
13536
+ | Effect < Service . AllowedType < Key , Make > , any , any >
13537
+ | ( ( ...args : any ) => Effect < Service . AllowedType < Key , Make > , any , any > )
13534
13538
readonly dependencies ?: ReadonlyArray < Layer . Layer . Any >
13535
13539
readonly accessors ?: boolean
13536
13540
/** @deprecated */
@@ -13557,7 +13561,9 @@ export const Service: <Self = never>() => [Self] extends [never] ? MissingSelfGe
13557
13561
<
13558
13562
const Key extends string ,
13559
13563
const Make extends NoExcessProperties < {
13560
- readonly scoped : Effect < Service . AllowedType < Key , Make > , any , any >
13564
+ readonly scoped :
13565
+ | Effect < Service . AllowedType < Key , Make > , any , any >
13566
+ | ( ( ...args : any ) => Effect < Service . AllowedType < Key , Make > , any , any > )
13561
13567
readonly dependencies ?: ReadonlyArray < Layer . Layer . Any >
13562
13568
readonly accessors ?: boolean
13563
13569
} , Make >
@@ -13568,7 +13574,9 @@ export const Service: <Self = never>() => [Self] extends [never] ? MissingSelfGe
13568
13574
<
13569
13575
const Key extends string ,
13570
13576
const Make extends NoExcessProperties < {
13571
- readonly effect : Effect < Service . AllowedType < Key , Make > , any , any >
13577
+ readonly effect :
13578
+ | Effect < Service . AllowedType < Key , Make > , any , any >
13579
+ | ( ( ...args : any ) => Effect < Service . AllowedType < Key , Make > , any , any > )
13572
13580
readonly dependencies ?: ReadonlyArray < Layer . Layer . Any >
13573
13581
readonly accessors ?: boolean
13574
13582
} , Make >
@@ -13651,15 +13659,28 @@ export const Service: <Self = never>() => [Self] extends [never] ? MissingSelfGe
13651
13659
const hasDeps = "dependencies" in maker && maker . dependencies . length > 0
13652
13660
const layerName = hasDeps ? "DefaultWithoutDependencies" : "Default"
13653
13661
let layerCache : Layer . Layer . Any | undefined
13662
+ let isFunction = false
13654
13663
if ( "effect" in maker ) {
13664
+ isFunction = typeof maker . effect === "function"
13655
13665
Object . defineProperty ( TagClass , layerName , {
13656
13666
get ( this : any ) {
13667
+ if ( isFunction ) {
13668
+ return function ( this : typeof TagClass ) {
13669
+ return layer . fromEffect ( TagClass , map ( maker . effect . apply ( null , arguments ) , ( _ ) => new this ( _ ) ) )
13670
+ } . bind ( this )
13671
+ }
13657
13672
return layerCache ??= layer . fromEffect ( TagClass , map ( maker . effect , ( _ ) => new this ( _ ) ) )
13658
13673
}
13659
13674
} )
13660
13675
} else if ( "scoped" in maker ) {
13676
+ isFunction = typeof maker . scoped === "function"
13661
13677
Object . defineProperty ( TagClass , layerName , {
13662
13678
get ( this : any ) {
13679
+ if ( isFunction ) {
13680
+ return function ( this : typeof TagClass ) {
13681
+ return layer . scoped ( TagClass , map ( maker . scoped . apply ( null , arguments ) , ( _ ) => new this ( _ ) ) )
13682
+ } . bind ( this )
13683
+ }
13663
13684
return layerCache ??= layer . scoped ( TagClass , map ( maker . scoped , ( _ ) => new this ( _ ) ) )
13664
13685
}
13665
13686
} )
@@ -13681,6 +13702,14 @@ export const Service: <Self = never>() => [Self] extends [never] ? MissingSelfGe
13681
13702
let layerWithDepsCache : Layer . Layer . Any | undefined
13682
13703
Object . defineProperty ( TagClass , "Default" , {
13683
13704
get ( this : any ) {
13705
+ if ( isFunction ) {
13706
+ return function ( this : typeof TagClass ) {
13707
+ return layer . provide (
13708
+ this . DefaultWithoutDependencies . apply ( null , arguments ) ,
13709
+ maker . dependencies
13710
+ )
13711
+ }
13712
+ }
13684
13713
return layerWithDepsCache ??= layer . provide (
13685
13714
this . DefaultWithoutDependencies ,
13686
13715
maker . dependencies
@@ -13753,23 +13782,36 @@ export declare namespace Service {
13753
13782
& { key : Key }
13754
13783
& ( MakeAccessors < Make > extends true ? Tag . Proxy < Self , MakeService < Make > > : { } )
13755
13784
& ( MakeDeps < Make > extends never ? {
13756
- readonly Default : Layer . Layer < Self , MakeError < Make > , MakeContext < Make > >
13785
+ readonly Default : HasArguments < Make > extends true ?
13786
+ ( ...args : MakeArguments < Make > ) => Layer . Layer < Self , MakeError < Make > , MakeContext < Make > >
13787
+ : Layer . Layer < Self , MakeError < Make > , MakeContext < Make > >
13757
13788
} :
13758
13789
{
13759
- readonly DefaultWithoutDependencies : Layer . Layer < Self , MakeError < Make > , MakeContext < Make > >
13760
- readonly Default : Layer . Layer <
13761
- Self ,
13762
- MakeError < Make > | MakeDepsE < Make > ,
13763
- | Exclude < MakeContext < Make > , MakeDepsOut < Make > >
13764
- | MakeDepsIn < Make >
13765
- >
13790
+ readonly DefaultWithoutDependencies : HasArguments < Make > extends true
13791
+ ? ( ...args : MakeArguments < Make > ) => Layer . Layer < Self , MakeError < Make > , MakeContext < Make > >
13792
+ : Layer . Layer < Self , MakeError < Make > , MakeContext < Make > >
13793
+
13794
+ readonly Default : HasArguments < Make > extends true ? ( ...args : MakeArguments < Make > ) => Layer . Layer <
13795
+ Self ,
13796
+ MakeError < Make > | MakeDepsE < Make > ,
13797
+ | Exclude < MakeContext < Make > , MakeDepsOut < Make > >
13798
+ | MakeDepsIn < Make >
13799
+ > :
13800
+ Layer . Layer <
13801
+ Self ,
13802
+ MakeError < Make > | MakeDepsE < Make > ,
13803
+ | Exclude < MakeContext < Make > , MakeDepsOut < Make > >
13804
+ | MakeDepsIn < Make >
13805
+ >
13766
13806
} )
13767
13807
13768
13808
/**
13769
13809
* @since 3.9.0
13770
13810
*/
13771
13811
export type MakeService < Make > = Make extends { readonly effect : Effect < infer _A , infer _E , infer _R > } ? _A
13772
13812
: Make extends { readonly scoped : Effect < infer _A , infer _E , infer _R > } ? _A
13813
+ : Make extends { readonly effect : ( ...args : infer _Args ) => Effect < infer _A , infer _E , infer _R > } ? _A
13814
+ : Make extends { readonly scoped : ( ...args : infer _Args ) => Effect < infer _A , infer _E , infer _R > } ? _A
13773
13815
: Make extends { readonly sync : LazyArg < infer A > } ? A
13774
13816
: Make extends { readonly succeed : infer A } ? A
13775
13817
: never
@@ -13779,13 +13821,18 @@ export declare namespace Service {
13779
13821
*/
13780
13822
export type MakeError < Make > = Make extends { readonly effect : Effect < infer _A , infer _E , infer _R > } ? _E
13781
13823
: Make extends { readonly scoped : Effect < infer _A , infer _E , infer _R > } ? _E
13824
+ : Make extends { readonly effect : ( ...args : infer _Args ) => Effect < infer _A , infer _E , infer _R > } ? _E
13825
+ : Make extends { readonly scoped : ( ...args : infer _Args ) => Effect < infer _A , infer _E , infer _R > } ? _E
13782
13826
: never
13783
13827
13784
13828
/**
13785
13829
* @since 3.9.0
13786
13830
*/
13787
13831
export type MakeContext < Make > = Make extends { readonly effect : Effect < infer _A , infer _E , infer _R > } ? _R
13788
13832
: Make extends { readonly scoped : Effect < infer _A , infer _E , infer _R > } ? Exclude < _R , Scope . Scope >
13833
+ : Make extends { readonly effect : ( ...args : infer _Args ) => Effect < infer _A , infer _E , infer _R > } ? _R
13834
+ : Make extends { readonly scoped : ( ...args : infer _Args ) => Effect < infer _A , infer _E , infer _R > } ?
13835
+ Exclude < _R , Scope . Scope >
13789
13836
: never
13790
13837
13791
13838
/**
@@ -13815,6 +13862,25 @@ export declare namespace Service {
13815
13862
*/
13816
13863
export type MakeAccessors < Make > = Make extends { readonly accessors : true } ? true
13817
13864
: false
13865
+
13866
+ /**
13867
+ * @since 3.16.0
13868
+ */
13869
+ export type MakeArguments < Make > = Make extends
13870
+ { readonly effect : ( ...args : infer Args ) => Effect < infer _A , infer _E , infer _R > } ? Args
13871
+ : Make extends { readonly scoped : ( ...args : infer Args ) => Effect < infer _A , infer _E , infer _R > } ? Args
13872
+ : never
13873
+
13874
+ /**
13875
+ * @since 3.16.0
13876
+ */
13877
+ export type HasArguments < Make > = Make extends {
13878
+ readonly scoped : ( ...args : ReadonlyArray < any > ) => Effect < infer _A , infer _E , infer _R >
13879
+ } ? true :
13880
+ Make extends {
13881
+ readonly effect : ( ...args : ReadonlyArray < any > ) => Effect < infer _A , infer _E , infer _R >
13882
+ } ? true :
13883
+ false
13818
13884
}
13819
13885
13820
13886
/**
0 commit comments