11import {
22 ContainerKey ,
3- DependencyFactory ,
43 ReadableContainer ,
4+ SyncDependencyFactory ,
55} from './container.ts' ;
66import { ParamsToResolverKeys , TupleO , Zip } from './util.ts' ;
77
@@ -13,13 +13,15 @@ export function singleton<
1313 TVal ,
1414 TDependencies extends Record < ContainerKey , unknown > ,
1515> (
16- factory : DependencyFactory < TVal , ReadableContainer < TDependencies > > ,
17- ) : DependencyFactory < TVal , ReadableContainer < TDependencies > > {
18- let result : TVal | undefined
16+ // eslint-disable-next-line @typescript-eslint/ban-types
17+ factory : SyncDependencyFactory < TVal , ReadableContainer < TDependencies , { } > > ,
18+ // eslint-disable-next-line @typescript-eslint/ban-types
19+ ) : SyncDependencyFactory < TVal , ReadableContainer < TDependencies , { } > > {
20+ let result : Awaited < TVal > | undefined
1921
20- return async ( container ) => {
22+ return ( container ) => {
2123 if ( ! result ) {
22- result = await factory ( container )
24+ result = factory ( container )
2325 }
2426 return result
2527 }
@@ -37,17 +39,19 @@ export function func<
3739> (
3840 fn : ( ...args : TParams ) => Awaited < TReturn > ,
3941 ...args : TDependencies
40- ) : DependencyFactory < ( ) => TReturn , FuncContainer < TParams , TDependencies > > {
41- return async ( container : FuncContainer < TParams , TDependencies > ) => {
42- const argPromises = args . map ( ( arg ) =>
42+ ) : SyncDependencyFactory <
43+ ( ) => TReturn ,
44+ SyncFuncContainer < TParams , TDependencies >
45+ > {
46+ return ( container : SyncFuncContainer < TParams , TDependencies > ) => {
47+ const resolvedArgs = args . map ( ( arg ) =>
4348 container . resolve (
4449 // This is ugly as hell, but I did not want to apply ts-ignore
45- arg as Parameters < FuncContainer < TParams , TDependencies > [ 'resolve' ] > [ 0 ] ,
50+ arg as Parameters <
51+ SyncFuncContainer < TParams , TDependencies > [ 'resolve' ]
52+ > [ 0 ] ,
4653 ) ,
47- )
48- const resolvedArgs = ( await Promise . all (
49- argPromises as Promise < unknown > [ ] ,
50- ) ) as unknown as TParams
54+ ) as unknown as TParams
5155
5256 return ( ) => fn ( ...resolvedArgs )
5357 }
@@ -62,19 +66,18 @@ export function constructor<
6266 TClass ,
6367 TDependencies extends ParamsToResolverKeys < TParams > ,
6468> (
65- constructor : new ( ...args : TParams ) => TClass ,
69+ constructor : new ( ...args : TParams ) => Awaited < TClass > ,
6670 ...args : TDependencies
67- ) : DependencyFactory < TClass , FuncContainer < TParams , TDependencies > > {
68- return async ( container : FuncContainer < TParams , TDependencies > ) => {
69- const argPromises = args . map ( ( arg ) =>
71+ ) : SyncDependencyFactory < TClass , SyncFuncContainer < TParams , TDependencies > > {
72+ return ( container : SyncFuncContainer < TParams , TDependencies > ) => {
73+ const resolvedArgs = args . map ( ( arg ) =>
7074 container . resolve (
7175 // This is ugly as hell, but I did not want to apply ts-ignore
72- arg as Parameters < FuncContainer < TParams , TDependencies > [ 'resolve' ] > [ 0 ] ,
76+ arg as Parameters <
77+ SyncFuncContainer < TParams , TDependencies > [ 'resolve' ]
78+ > [ 0 ] ,
7379 ) ,
74- )
75- const resolvedArgs = ( await Promise . all (
76- argPromises as Promise < unknown > [ ] ,
77- ) ) as unknown as TParams
80+ ) as unknown as TParams
7881
7982 return new constructor ( ...resolvedArgs )
8083 }
@@ -83,10 +86,14 @@ export function constructor<
8386// -----------------------------------------------------------------------------
8487// Private Types
8588// -----------------------------------------------------------------------------
86- type FuncContainer <
89+ type SyncFuncContainer <
8790 TParams extends readonly unknown [ ] ,
88- TDependencies extends ParamsToResolverKeys < TParams > ,
91+ TSyncDependencies extends ParamsToResolverKeys < TParams > ,
8992> = ReadableContainer <
90- // eslint-disable-next-line @typescript-eslint/no-explicit-any
91- TupleO < Extract < Zip < TDependencies , TParams > , readonly [ ContainerKey , any ] [ ] > >
93+ TupleO <
94+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
95+ Extract < Zip < TSyncDependencies , TParams > , readonly [ ContainerKey , any ] [ ] >
96+ > ,
97+ // eslint-disable-next-line @typescript-eslint/ban-types
98+ { }
9299>
0 commit comments