{"version":3,"file":"middlewares.mjs","sources":["../../src/registries/middlewares.ts"],"sourcesContent":["import { pickBy, has } from 'lodash/fp';\nimport type { Core, UID } from '@strapi/types';\nimport { addNamespace, hasNamespace } from './namespace';\n\ntype MiddlewareExtendFn = (middleware: Core.Middleware) => Core.Middleware;\n\n// TODO: move instantiation part here instead of in the server service\nconst middlewaresRegistry = () => {\n  const middlewares: Record<UID.Middleware, Core.Middleware> = {};\n\n  return {\n    /**\n     * Returns this list of registered middlewares uids\n     */\n    keys() {\n      return Object.keys(middlewares);\n    },\n\n    /**\n     * Returns the instance of a middleware. Instantiate the middleware if not already done\n     */\n    get(uid: UID.Middleware) {\n      return middlewares[uid];\n    },\n\n    /**\n     * Returns a map with all the middlewares in a namespace\n     */\n    getAll(namespace: string) {\n      return pickBy((_, uid) => hasNamespace(uid, namespace))(middlewares);\n    },\n\n    /**\n     * Registers a middleware\n     */\n    set(uid: UID.Middleware, middleware: Core.Middleware) {\n      middlewares[uid] = middleware;\n      return this;\n    },\n\n    /**\n     * Registers a map of middlewares for a specific namespace\n     */\n    add(namespace: string, rawMiddlewares: Record<string, Core.Middleware> = {}) {\n      for (const middlewareName of Object.keys(rawMiddlewares)) {\n        const middleware = rawMiddlewares[middlewareName];\n        const uid = addNamespace(middlewareName, namespace) as UID.Middleware;\n\n        if (has(uid, middlewares)) {\n          throw new Error(`Middleware ${uid} has already been registered.`);\n        }\n        middlewares[uid] = middleware;\n      }\n    },\n\n    /**\n     * Wraps a middleware to extend it\n     */\n    extend(uid: UID.Middleware, extendFn: MiddlewareExtendFn) {\n      const currentMiddleware = this.get(uid);\n\n      if (!currentMiddleware) {\n        throw new Error(`Middleware ${uid} doesn't exist`);\n      }\n\n      const newMiddleware = extendFn(currentMiddleware);\n      middlewares[uid] = newMiddleware;\n\n      return this;\n    },\n  };\n};\n\nexport default middlewaresRegistry;\n"],"names":["middlewaresRegistry","middlewares","keys","Object","get","uid","getAll","namespace","pickBy","_","hasNamespace","set","middleware","add","rawMiddlewares","middlewareName","addNamespace","has","Error","extend","extendFn","currentMiddleware","newMiddleware"],"mappings":";;;AAMA;AACA,MAAMA,mBAAAA,GAAsB,IAAA;AAC1B,IAAA,MAAMC,cAAuD,EAAC;IAE9D,OAAO;AACL;;QAGAC,IAAAA,CAAAA,GAAAA;YACE,OAAOC,MAAAA,CAAOD,IAAI,CAACD,WAAAA,CAAAA;AACrB,QAAA,CAAA;AAEA;;AAEC,QACDG,KAAIC,GAAmB,EAAA;YACrB,OAAOJ,WAAW,CAACI,GAAAA,CAAI;AACzB,QAAA,CAAA;AAEA;;AAEC,QACDC,QAAOC,SAAiB,EAAA;AACtB,YAAA,OAAOC,OAAO,CAACC,CAAAA,EAAGJ,GAAAA,GAAQK,YAAAA,CAAaL,KAAKE,SAAAA,CAAAA,CAAAA,CAAYN,WAAAA,CAAAA;AAC1D,QAAA,CAAA;AAEA;;QAGAU,GAAAA,CAAAA,CAAIN,GAAmB,EAAEO,UAA2B,EAAA;YAClDX,WAAW,CAACI,IAAI,GAAGO,UAAAA;AACnB,YAAA,OAAO,IAAI;AACb,QAAA,CAAA;AAEA;;AAEC,QACDC,GAAAA,CAAAA,CAAIN,SAAiB,EAAEO,cAAAA,GAAkD,EAAE,EAAA;AACzE,YAAA,KAAK,MAAMC,cAAAA,IAAkBZ,MAAAA,CAAOD,IAAI,CAACY,cAAAA,CAAAA,CAAiB;gBACxD,MAAMF,UAAAA,GAAaE,cAAc,CAACC,cAAAA,CAAe;gBACjD,MAAMV,GAAAA,GAAMW,aAAaD,cAAAA,EAAgBR,SAAAA,CAAAA;gBAEzC,IAAIU,GAAAA,CAAIZ,KAAKJ,WAAAA,CAAAA,EAAc;AACzB,oBAAA,MAAM,IAAIiB,KAAAA,CAAM,CAAC,WAAW,EAAEb,GAAAA,CAAI,6BAA6B,CAAC,CAAA;AAClE,gBAAA;gBACAJ,WAAW,CAACI,IAAI,GAAGO,UAAAA;AACrB,YAAA;AACF,QAAA,CAAA;AAEA;;QAGAO,MAAAA,CAAAA,CAAOd,GAAmB,EAAEe,QAA4B,EAAA;AACtD,YAAA,MAAMC,iBAAAA,GAAoB,IAAI,CAACjB,GAAG,CAACC,GAAAA,CAAAA;AAEnC,YAAA,IAAI,CAACgB,iBAAAA,EAAmB;AACtB,gBAAA,MAAM,IAAIH,KAAAA,CAAM,CAAC,WAAW,EAAEb,GAAAA,CAAI,cAAc,CAAC,CAAA;AACnD,YAAA;AAEA,YAAA,MAAMiB,gBAAgBF,QAAAA,CAASC,iBAAAA,CAAAA;YAC/BpB,WAAW,CAACI,IAAI,GAAGiB,aAAAA;AAEnB,YAAA,OAAO,IAAI;AACb,QAAA;AACF,KAAA;AACF;;;;"}