import { StaticTransitionResolver } from './StaticTransitionResolver'; import type { StatefulPipelineEntity, Handler, HandlerContext } from '../types'; class StaticTransitionResolverBuilder, S, C extends HandlerContext> { private readonly resolver = new StaticTransitionResolver(); withTransition( from: S, to: S, through: Handler | ((entity: T, ctx: C) => Promise) ): StaticTransitionResolverBuilder { // eslint-disable-next-line prettier/prettier this.resolver.registerTransition( from, to, typeof through === 'function' ? { handle: through } : through ); return this; } withPassThrough(from: S, to: S): StaticTransitionResolverBuilder { this.resolver.registerTransition(from, to, { handle(entity) { return Promise.resolve(entity); } }); return this; } withTerminalStates(...state: S[]): StaticTransitionResolverBuilder { state.forEach(s => { this.resolver.registerTerminalState(s); }); return this; } build(): StaticTransitionResolver { return this.resolver; } } function createTransitionResolverBuilder< T extends StatefulPipelineEntity, S, C extends HandlerContext >(): StaticTransitionResolverBuilder { return new StaticTransitionResolverBuilder(); } export { createTransitionResolverBuilder };