@mwcp/ali-oss
Version:
Ali OSS Component for midway.js
98 lines (73 loc) • 2.56 kB
text/typescript
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
import assert from 'node:assert'
import {
CreateDataSourceInstanceOptions as CreateInstanceOptions,
DataSourceManager,
Init,
Inject,
Singleton,
} from '@midwayjs/core'
import { MConfig } from '@mwcp/share'
import { AliOssComponent } from './component.js'
import { Config, ConfigKey, InstanceConfig } from './types.js'
()
export class AliOssSourceManager<SourceName extends string = string>
extends DataSourceManager<AliOssComponent | undefined> {
(ConfigKey.config) private readonly sourceConfig: Config<SourceName>
() baseDir: string
// public queryUidSpanMap = new Map<string, QuerySpanInfo>()
declare dataSource: Map<SourceName, AliOssComponent>
declare getDataSource: (dataSourceName: SourceName)
=> string extends SourceName ? AliOssComponent | undefined : AliOssComponent
declare createInstance: (
config: InstanceConfig,
clientName: SourceName,
options?: CreateInstanceOptions,
) => Promise<AliOssComponent | undefined>
()
async init(): Promise<void> {
assert(this.sourceConfig?.dataSource, 'dataSourceConfig is not defined')
// 需要注意的是,这里第二个参数需要传入一个实体类扫描地址
await this.initDataSource(this.sourceConfig, this.baseDir)
}
/**
* 创建单个实例
*/
protected async createDataSource(
config: InstanceConfig,
dataSourceName: SourceName,
cacheDataSource = true,
): Promise<AliOssComponent | undefined> {
const cacheInst = cacheDataSource ? this.getDataSource(dataSourceName) : null
if (cacheDataSource && cacheInst) {
return cacheInst
}
const inst = new AliOssComponent(config)
if (cacheDataSource && inst) {
if (! this.sourceConfig.dataSource[dataSourceName]) {
this.sourceConfig.dataSource[dataSourceName] = config
}
}
if (! cacheDataSource) {
// saved in initDataSource
this.dataSource.delete(dataSourceName)
}
return inst
}
getName(): string { return ConfigKey.sourceManagerName }
protected async checkConnected(dataSource: AliOssComponent): Promise<boolean> {
if (! dataSource) {
return false
}
// @TODO check connection
return true
}
async destroyDataSource(): Promise<void> {
return
}
// protected getConfigByDbId(clientId: SourceName): InstanceConfig | undefined {
// assert(clientId)
// const config = this.sourceConfig.dataSource[clientId]
// return config
// }
}