import type IDriver from './i-driver' import { ETCDDriver } from './etcd' import { SqilteDriver } from './sqlite' import type { IOptions } from '../base/options' export enum DB_TYPE { ETCD = 'etcd', SQLITE = 'sqlite' } interface SQLiteOptions { path: string } export interface ETCDClientOptions { etcd: IOptions } export interface SQLiteClientOptions { sqlite: SQLiteOptions } export type ClientOptions = ETCDClientOptions | SQLiteClientOptions function isETCDClientOptions(options: ClientOptions): options is ETCDClientOptions { return 'etcd' in options } function isSqliteClientOptions(options: ClientOptions): options is SQLiteClientOptions { return 'sqlite' in options } export class DriverMgr { private inited = false private options: ClientOptions private _driver: IDriver public get driver() { return this._driver } public async init(options: ClientOptions) { if (this.inited) { return } this.options = options if (isETCDClientOptions(options)) { this._driver = new ETCDDriver(options.etcd) } else if (isSqliteClientOptions(options)) { this._driver = new SqilteDriver(options.sqlite) await this._driver.init(options) } this.inited = true } public close() { this.inited = false this._driver.close() } }