UNPKG

js-uploader

Version:
39 lines (34 loc) 1.43 kB
import { from, Observable, of } from 'rxjs' import { map } from 'rxjs/operators' import { UploadTask, UploaderOptions, OSSProvider, TPromise } from '../../interface' import { AwsS3TaskHandler } from './AwsS3TaskHandler' import { CommonsTaskHandler } from './CommonsTaskHandler' import { QiniuOSSTaskHandler } from './QiniuOSSTaskHandler' import { QiniuOSSTaskHandler_v2 } from './QiniuOSSTaskHandler_v2' import { TaskHandler } from './TaskHandler' function toObserverble<T>(input: TPromise<T>): Observable<T> { return input && input instanceof Promise ? from(input) : of(input) } export function handle(task: UploadTask, uploaderOptions: UploaderOptions): Observable<TaskHandler> { const { ossOptions } = uploaderOptions return toObserverble(ossOptions?.enable(task)).pipe( map((enable) => { if (enable) { switch (ossOptions?.provider) { case OSSProvider.Qiniu: return new QiniuOSSTaskHandler(task, uploaderOptions) case OSSProvider.Qiniu_v2: return new QiniuOSSTaskHandler_v2(task, uploaderOptions) case OSSProvider.S3: return new AwsS3TaskHandler(task, uploaderOptions) default: throw new Error(`unkown OSSProvider:${ossOptions?.provider}`) } } else { return new CommonsTaskHandler(task, uploaderOptions) } }), ) } export * from './CommonsTaskHandler' export * from './TaskHandler'