import { Account } from "../models/domain/account"; import { GlobalState } from "../models/domain/global-state"; import { AccountFactory } from "./accountFactory"; import { GlobalStateFactory } from "./globalStateFactory"; export class StateFactory< TGlobal extends GlobalState = GlobalState, TAccount extends Account = Account > { private globalStateFactory: GlobalStateFactory; private accountFactory: AccountFactory; constructor( globalStateConstructor: new (init: Partial) => TGlobal, accountConstructor: new (init: Partial) => TAccount ) { this.globalStateFactory = new GlobalStateFactory(globalStateConstructor); this.accountFactory = new AccountFactory(accountConstructor); } createGlobal(args: Partial): TGlobal { return this.globalStateFactory.create(args); } createAccount(args: Partial): TAccount { return this.accountFactory.create(args); } }