UNPKG

1.38 kBPlain TextView Raw
1import { Pipeline, PipelineEntry, MiddlewareMethod } from '../types/middleware'
2
3export default class MiddlewarePipeline<T,U> implements Pipeline<T,U> {
4 private entries: PipelineEntry<T,U>[] = []
5
6 insertFirst (entry: PipelineEntry<T,U>) {
7 this.entries = [entry, ...this.entries]
8 }
9
10 insertLast (entry: PipelineEntry<T,U>) {
11 this.entries = [...this.entries, entry]
12 }
13
14 insertBefore (middlewareName: string, entry: PipelineEntry<T,U>) {
15 const pipelineNames = this.entries.map((m: PipelineEntry<T,U>) => m.name)
16 const index = pipelineNames.indexOf(middlewareName)
17
18 if (index === -1) {
19 throw new Error(`could not insert before middleware; not found. name=${middlewareName}`)
20 }
21
22 this.entries = [
23 ...this.entries.slice(0, index),
24 entry,
25 ...this.entries.slice(index)
26 ]
27 }
28
29 insertAfter (middlewareName: string, entry: PipelineEntry<T,U>) {
30 const pipelineNames = this.entries.map((m: PipelineEntry<T,U>) => m.name)
31 const index = pipelineNames.indexOf(middlewareName)
32
33 if (index === -1) {
34 throw new Error(`could not insert after middleware; not found. name=${middlewareName}`)
35 }
36
37 this.entries = [
38 ...this.entries.slice(0, index + 1),
39 entry,
40 ...this.entries.slice(index + 1)
41 ]
42 }
43
44 getMethods (): MiddlewareMethod<T,U>[] {
45 return this.entries.map(e => e.method)
46 }
47}