@@ -905,7 +905,40 @@ export const RequestCacheLayers = Layer.mergeAll(
905905 Layer . setRequestBatching ( true )
906906)
907907
908+ type GetContext < T > = T extends Context . Context < infer Y > ? Y : never
909+
910+ export const contextMaker = <
911+ TDeps extends Array . NonEmptyReadonlyArray <
912+ & (
913+ | Context . Tag < any , Effect < Context . Context < any > , any , any > & { _tag : any } >
914+ | Context . Tag < any , Effect < Context . Context < any > , never , never > & { _tag : any } >
915+ )
916+ & {
917+ new ( ...args : any [ ] ) : any
918+ Default : Layer . Layer < Effect < Context . Context < any > > & { _tag : any } , any , any >
919+ }
920+ >
921+ > ( ...deps : TDeps ) : {
922+ dependencies : { [ K in keyof TDeps ] : TDeps [ K ] [ "Default" ] }
923+ effect : Effect . Effect <
924+ Effect . Effect <
925+ Context . Context < GetContext < Effect . Success < InstanceType < TDeps [ number ] > > > > ,
926+ Effect . Error < InstanceType < TDeps [ number ] > > ,
927+ Effect . Context < InstanceType < TDeps [ number ] > >
928+ > ,
929+ never ,
930+ InstanceType < TDeps [ number ] >
931+ >
932+ } => ( {
933+ dependencies : deps . map ( ( _ ) => _ . Default ) as any ,
934+ effect : Effect . gen ( function * ( ) {
935+ const services = yield * Effect . all ( deps )
936+ return Effect . all ( services as any [ ] ) . pipe (
937+ Effect . map ( ( _ ) => Context . mergeAll ( ..._ as any ) )
938+ )
939+ } ) as any
940+ } )
941+
908942export class DefaultContextMaker extends Effect . Service < DefaultContextMaker > ( ) ( "DefaultContextMaker" , {
909- strict : false ,
910943 succeed : Effect . succeed ( Context . empty ( ) ) satisfies ContextProviderShape < never >
911944} ) { }
0 commit comments