{"version":3,"file":"onion-stack.modern.mjs","sources":["../source/index.ts"],"sourcesContent":["export type Nextable = Generator | AsyncGenerator;\n\nexport type Middleware =\n    | AsyncGeneratorFunction\n    | GeneratorFunction\n    | ((...data: any[]) => any | Promise<any>);\n\nconst { push, [Symbol.iterator]: iterator } = Array.prototype;\n\nexport default class OnionStack {\n    length = 0;\n\n    [index: number]: Middleware;\n\n    constructor(...list: Middleware[]) {\n        for (const middleware of list) this.use(middleware);\n    }\n\n    use(middleware: Middleware) {\n        push.call(this, middleware);\n\n        return this;\n    }\n\n    [Symbol.iterator] = iterator;\n\n    mount(stack: OnionStack) {\n        return this.use(() => stack.execute());\n    }\n\n    async execute(...data: any[]) {\n        const nextStack: Nextable[] = [];\n\n        for (const middleware of Array.from<Middleware>(this)) {\n            const result = middleware(...data);\n\n            if (\n                typeof result?.[Symbol.iterator] === 'function' ||\n                typeof result?.[Symbol.asyncIterator] === 'function'\n            ) {\n                await (result as Nextable).next();\n\n                nextStack.push(result);\n            } else {\n                if (result instanceof Promise) await result;\n\n                break;\n            }\n        }\n        for (let item: Nextable; (item = nextStack.pop()); ) await item.next();\n    }\n}\n"],"names":["push","Symbol","iterator","Array","prototype","OnionStack","constructor","list","this","length","middleware","use","call","mount","stack","execute","data","nextStack","from","result","asyncIterator","Promise","next","item","pop"],"mappings":"AAOA,MAAMA,KAAEA,EAAM,CAACC,OAAOC,UAAWA,GAAaC,MAAMC,gBAE/BC,EAKjBC,WAAAA,IAAeC,GAAkBC,KAJjCC,OAAS,OAcRR,OAAOC,UAAYA,EAThB,IAAK,MAAMQ,KAAcH,EAAMC,KAAKG,IAAID,EAC5C,CAEAC,GAAAA,CAAID,GAGA,OAFAV,EAAKY,KAAKJ,KAAME,GAETF,IACX,CAIAK,KAAAA,CAAMC,GACF,YAAYH,IAAI,IAAMG,EAAMC,UAChC,CAEA,aAAMA,IAAWC,GACb,MAAMC,EAAwB,GAE9B,IAAK,MAAMP,KAAcP,MAAMe,KAAiBV,MAAO,CACnD,MAAMW,EAAST,KAAcM,GAE7B,GACyC,mBAAxB,MAANG,OAAM,EAANA,EAASlB,OAAOC,YACmB,mBAAnCiB,MAAAA,OAAAA,EAAAA,EAASlB,OAAOmB,gBAKpB,CACCD,aAAkBE,eAAeF,EAErC,KACJ,OAPWA,EAAoBG,OAE3BL,EAAUjB,KAAKmB,EAMvB,CACA,IAAK,IAAII,EAAiBA,EAAON,EAAUO,aAAgBD,EAAKD,MACpE"}