import { assert, isntUndefined } from '@blackglory/prelude' import { AbortController } from 'extra-abort' import { importConsumerModule } from '@utils/import-consumer-module.js' import { Consumer, RunnableConsumer } from '@src/types.js' export class RunnableConsumerFromModule implements RunnableConsumer { private controller?: AbortController private fn?: Consumer /** * @param filename export `IConsumerModule` */ constructor(private filename: string) {} async init(): Promise { const module = await importConsumerModule(this.filename) this.fn = module.default } async run(params: Params): Promise { this.controller = new AbortController() assert(isntUndefined(this.fn), 'module is undefined') await this.fn(this.controller.signal, params) } async abort(): Promise { assert(this.controller, 'controller is undefined') this.controller.abort() } destroy(): void { delete this.controller } }