52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import { assert } from 'oak-domain/lib/utils/assert';
|
|
import { EntityDict } from '../../oak-app-domain';
|
|
|
|
import { CosBackend } from '../../types/Cos';
|
|
import { Config } from '../../types/Config';
|
|
import CTYunBackend from './ctyun.backend';
|
|
import WechatBackend from './wechat.backend';
|
|
import QiniuBackend from './qiniu.backend';
|
|
import AliyunBackend from './aliyun.backend';
|
|
import TencentBackend from './tencent.backend';
|
|
import S3Backend from './s3.backend';
|
|
import UnknownBackend from './unknown.backend';
|
|
import { BRC } from '../..';
|
|
|
|
|
|
const CosBackendDict: Record<string, CosBackend<any>> = {
|
|
unknown: new UnknownBackend(),
|
|
ctyun: new CTYunBackend(),
|
|
wechat: new WechatBackend(),
|
|
qiniu: new QiniuBackend(),
|
|
aliyun: new AliyunBackend(),
|
|
tencent: new TencentBackend(),
|
|
s3: new S3Backend(),
|
|
};
|
|
|
|
/**
|
|
* 注入一个其它OSS上实现的uploader类
|
|
* @param clazz
|
|
*/
|
|
export function registerCosBackend<ED extends EntityDict>(clazz: new () => CosBackend<ED>) {
|
|
const instance = new clazz();
|
|
CosBackendDict[instance.name] = instance as CosBackend<ED>;
|
|
}
|
|
|
|
export function getCosBackend<ED extends EntityDict>(origin: string) {
|
|
assert(CosBackendDict.hasOwnProperty(origin));
|
|
return CosBackendDict[origin] as CosBackend<ED>;
|
|
}
|
|
|
|
export async function composeFileUrlBackend<ED extends EntityDict>(
|
|
application: ED['application']['Schema'],
|
|
extraFile: ED['extraFile']['OpSchema'],
|
|
context: BRC<ED>,
|
|
style?: string
|
|
) {
|
|
const { origin } = extraFile;
|
|
const cos = CosBackendDict[origin];
|
|
return cos.composeFileUrlBackend({
|
|
application, extraFile, context, style
|
|
});
|
|
}
|