Middleware framework based on Async Generator & TypeScript, inspired by Koa 2.
import OnionStack from 'onion-stack';
const list = [];
const stack = new OnionStack(
    function* () {
        list.push(1);
        yield;
        list.push(2);
        yield;
        list.push(3);
    },
    async function* () {
        await delay(0.1);
        list.push(4);
        yield;
        list.push(5);
    },
    function () {
        list.push(6);
    }
);
stack.execute().then(() => console.log(list)); //  [1, 4, 6, 5, 2]