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