{"version":3,"file":"middleware-manager.mjs","sources":["../../../../src/services/document-service/middlewares/middleware-manager.ts"],"sourcesContent":["export type Middleware = (ctx: any, next: () => Promise<void>) => Promise<void> | void;\n\nexport type Options = {\n  exclude?: string[];\n};\n\nexport const createMiddlewareManager = () => {\n  const middlewares: Middleware[] = [];\n\n  const manager = {\n    use(middleware: Middleware) {\n      middlewares.push(middleware);\n\n      return () => middlewares.splice(middlewares.indexOf(middleware), 1);\n    },\n\n    async run(ctx: any, cb: () => void) {\n      let index = 0;\n      const next = async () => {\n        if (index < middlewares.length) {\n          // eslint-disable-next-line no-plusplus\n          return middlewares[index++](ctx, next);\n        }\n\n        return cb();\n      };\n\n      return next();\n    },\n\n    wrapObject<TSource>(source: TSource, ctxDefaults = {}, opts: Options = {}): TSource {\n      const facade: TSource = {} as TSource;\n      const { exclude = [] } = opts;\n\n      for (const key in source) {\n        if (Object.hasOwnProperty.call(source, key)) {\n          const prop = source[key];\n\n          if (exclude.includes(key)) {\n            facade[key] = prop;\n          } else if (typeof prop === 'function') {\n            const newMethod = async (params: any = {}) => {\n              const ctx = {\n                ...ctxDefaults,\n                action: key,\n                params,\n              };\n\n              return manager.run(ctx, () => prop(ctx.params));\n            };\n\n            facade[key] = newMethod as typeof prop;\n          } else {\n            facade[key] = prop;\n          }\n        }\n      }\n\n      return facade;\n    },\n  };\n\n  return manager;\n};\n"],"names":["createMiddlewareManager","middlewares","manager","use","middleware","push","splice","indexOf","run","ctx","cb","index","next","length","wrapObject","source","ctxDefaults","opts","facade","exclude","key","Object","hasOwnProperty","call","prop","includes","newMethod","params","action"],"mappings":"MAMaA,uBAAAA,GAA0B,IAAA;AACrC,IAAA,MAAMC,cAA4B,EAAE;AAEpC,IAAA,MAAMC,OAAAA,GAAU;AACdC,QAAAA,GAAAA,CAAAA,CAAIC,UAAsB,EAAA;AACxBH,YAAAA,WAAAA,CAAYI,IAAI,CAACD,UAAAA,CAAAA;AAEjB,YAAA,OAAO,IAAMH,WAAAA,CAAYK,MAAM,CAACL,WAAAA,CAAYM,OAAO,CAACH,UAAAA,CAAAA,EAAa,CAAA,CAAA;AACnE,QAAA,CAAA;QAEA,MAAMI,GAAAA,CAAAA,CAAIC,GAAQ,EAAEC,EAAc,EAAA;AAChC,YAAA,IAAIC,KAAAA,GAAQ,CAAA;AACZ,YAAA,MAAMC,IAAAA,GAAO,UAAA;gBACX,IAAID,KAAAA,GAAQV,WAAAA,CAAYY,MAAM,EAAE;;AAE9B,oBAAA,OAAOZ,WAAW,CAACU,KAAAA,EAAAA,CAAQ,CAACF,GAAAA,EAAKG,IAAAA,CAAAA;AACnC,gBAAA;gBAEA,OAAOF,EAAAA,EAAAA;AACT,YAAA,CAAA;YAEA,OAAOE,IAAAA,EAAAA;AACT,QAAA,CAAA;QAEAE,UAAAA,CAAAA,CAAoBC,MAAe,EAAEC,WAAAA,GAAc,EAAE,EAAEC,IAAAA,GAAgB,EAAE,EAAA;AACvE,YAAA,MAAMC,SAAkB,EAAC;AACzB,YAAA,MAAM,EAAEC,OAAAA,GAAU,EAAE,EAAE,GAAGF,IAAAA;YAEzB,IAAK,MAAMG,OAAOL,MAAAA,CAAQ;AACxB,gBAAA,IAAIM,OAAOC,cAAc,CAACC,IAAI,CAACR,QAAQK,GAAAA,CAAAA,EAAM;oBAC3C,MAAMI,IAAAA,GAAOT,MAAM,CAACK,GAAAA,CAAI;oBAExB,IAAID,OAAAA,CAAQM,QAAQ,CAACL,GAAAA,CAAAA,EAAM;wBACzBF,MAAM,CAACE,IAAI,GAAGI,IAAAA;oBAChB,CAAA,MAAO,IAAI,OAAOA,IAAAA,KAAS,UAAA,EAAY;AACrC,wBAAA,MAAME,SAAAA,GAAY,OAAOC,MAAAA,GAAc,EAAE,GAAA;AACvC,4BAAA,MAAMlB,GAAAA,GAAM;AACV,gCAAA,GAAGO,WAAW;gCACdY,MAAAA,EAAQR,GAAAA;AACRO,gCAAAA;AACF,6BAAA;AAEA,4BAAA,OAAOzB,QAAQM,GAAG,CAACC,KAAK,IAAMe,IAAAA,CAAKf,IAAIkB,MAAM,CAAA,CAAA;AAC/C,wBAAA,CAAA;wBAEAT,MAAM,CAACE,IAAI,GAAGM,SAAAA;oBAChB,CAAA,MAAO;wBACLR,MAAM,CAACE,IAAI,GAAGI,IAAAA;AAChB,oBAAA;AACF,gBAAA;AACF,YAAA;YAEA,OAAON,MAAAA;AACT,QAAA;AACF,KAAA;IAEA,OAAOhB,OAAAA;AACT;;;;"}