11import  {  ObjLogger  }  from  "@scramjet/obj-logger" ; 
22import  {  IRuntimeAdapter ,  InstanceRequirements ,  STHConfiguration  }  from  "@scramjet/types" ; 
33
4+ export  type  InitializedRuntimeAdapter  =  IRuntimeAdapter  &  { 
5+     pkgName : string ; 
6+     status : "ready"  |  {  error ?: string  } ; 
7+ } ; 
8+ 
49export  class  AdapterManager  { 
5-     adapters : {  [ key : string ] : IRuntimeAdapter  }  =  { } ; 
10+     adapters : {  [ key : string ] : InitializedRuntimeAdapter  }  =  { } ; 
611    sthConfig : STHConfiguration ; 
712
813    logger  =  new  ObjLogger ( this ) ; 
@@ -23,13 +28,18 @@ export class AdapterManager {
2328            Object . keys ( this . sthConfig . adapters ) . map ( 
2429                async  ( pkgName )  =>  { 
2530                    const  typedPkgName  =  pkgName  as  unknown  as  keyof  STHConfiguration [ "adapters" ] ; 
26-                     const  adapter  =  Object . assign ( await  import ( pkgName ) ,  {  pkgName } )  as  IRuntimeAdapter ; 
31+                     const  config  =  this . sthConfig . adapters [ typedPkgName ] ! ; 
32+ 
33+                     const  adapter  =  Object . assign ( 
34+                         new  ( await  import ( pkgName ) ) . default ( config ) , 
35+                         {  pkgName } 
36+                     )  as  InitializedRuntimeAdapter ; 
2737
2838                    if  ( ! AdapterManager . validateAdapter ( adapter ) )  { 
2939                        throw  new  Error ( `Invalid adapter provided ${ adapter . pkgName }  ) ; 
3040                    } 
3141
32-                     adapter . config  =  this . sthConfig . adapters [ typedPkgName ] ! ; 
42+                     adapter . config  =  config ; 
3343                    adapter . status  =  await  this . initAdapter ( adapter ) ; 
3444
3545                    if  ( adapter . status  !==  "ready" )  { 
@@ -63,7 +73,7 @@ export class AdapterManager {
6373     * @returns  {boolean } True if required fields are available. 
6474     */ 
6575    static  validateAdapter ( adapter : IRuntimeAdapter ) : boolean  { 
66-         return  ! ! ( adapter . name . trim ( )  &&  [ "SequenceAdapter " ,  "InstanceAdapter " ,  "init" ] . every ( ( className : string )  =>  className  in  adapter ) ) ; 
76+         return  ! ! ( adapter . name ? .trim ( )  &&  [ "sequenceAdapter " ,  "instanceAdapter " ,  "init" ] . every ( ( className : string )  =>  className  in  adapter ) ) ; 
6777    } 
6878
6979    /** 
@@ -73,7 +83,7 @@ export class AdapterManager {
7383     * @returns  Object with error field if initialization failed, "ready" otherwise. 
7484     */ 
7585    async  initAdapter ( adapter : IRuntimeAdapter ) : Promise < {  error ?: string  }  |  "ready" >  { 
76-         const  initResult  =  await  adapter . init ( adapter . config ) ; 
86+         const  initResult  =  await  adapter . init ( ) ; 
7787
7888        return  initResult . error  ? initResult  : Promise . resolve ( "ready" ) ; 
7989    } 
@@ -84,7 +94,7 @@ export class AdapterManager {
8494     * @param  {string } pkgName Adapter package name. 
8595     * @returns  {IRuntimeAdapter } Adapter 
8696     */ 
87-     getAdapterByName ( pkgName : string ) : IRuntimeAdapter  |  undefined  { 
97+     getAdapterByName ( pkgName : string ) : InitializedRuntimeAdapter  |  undefined  { 
8898        return  Object . values ( this . adapters ) . find ( a  =>  a . pkgName  ===  pkgName ) ; 
8999    } 
90100
0 commit comments