File tree 1 file changed +32
-2
lines changed
1 file changed +32
-2
lines changed Original file line number Diff line number Diff line change 1
- type Factory = Function ;
1
+ // eslint-disable-next-line
2
+ type Factory = ( ...args : any [ ] ) => any ;
2
3
3
4
export class Repository {
4
5
private readonly _repository : { [ key : string ] : Factory } ;
@@ -15,7 +16,36 @@ export class Repository {
15
16
}
16
17
17
18
public registerFactory ( key : string , factory : Factory ) : void {
18
- this . _repository [ key ] = factory ;
19
+ const proxy : Factory = new Proxy (
20
+ factory ,
21
+ {
22
+ apply ( target : Factory , _this : unknown , args : Parameters < Factory > ) : ReturnType < Factory > {
23
+ const mock : ReturnType < Factory > = target ( ...args ) ;
24
+
25
+ if ( typeof mock === 'undefined' ) {
26
+ return ;
27
+ }
28
+
29
+ if ( ! ( mock instanceof Object ) ) {
30
+ return mock ;
31
+ }
32
+
33
+ if ( typeof mock . __factory !== 'undefined' ) {
34
+ return mock ;
35
+ }
36
+
37
+ Object . defineProperty ( mock , '__factory' , {
38
+ enumerable : false ,
39
+ writable : false ,
40
+ value : key ,
41
+ } ) ;
42
+
43
+ return mock ;
44
+ } ,
45
+ } ,
46
+ ) ;
47
+
48
+ this . _repository [ key ] = proxy ;
19
49
}
20
50
21
51
public getFactory ( key : string ) : Factory {
You can’t perform that action at this time.
0 commit comments