1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | module.exports = compose;
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 | function compose(middleware){
|
19 | return function *(downstream){
|
20 | var done = false;
|
21 | var ctx = this;
|
22 | var i = 0;
|
23 |
|
24 | yield *next();
|
25 |
|
26 | function next(){
|
27 | var mw = middleware[i++];
|
28 |
|
29 | if (!mw) {
|
30 | if (done) throw new Error('middleware yielded control multiple times');
|
31 | done = true;
|
32 | return downstream || noop();
|
33 | }
|
34 |
|
35 | return mw.call(ctx, next());
|
36 | }
|
37 | }
|
38 | }
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 | function *noop(){} |
\ | No newline at end of file |