{"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 = {};\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 = {}) {\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,mBAAsB,GAAA,IAAA;AAC1B,IAAA,MAAMC,cAAuD,EAAC;IAE9D,OAAO;AACL;;QAGAC,IAAAA,CAAAA,GAAAA;YACE,OAAOC,MAAAA,CAAOD,IAAI,CAACD,WAAAA,CAAAA;AACrB,SAAA;AAEA;;AAEC,QACDG,KAAIC,GAAmB,EAAA;YACrB,OAAOJ,WAAW,CAACI,GAAI,CAAA;AACzB,SAAA;AAEA;;AAEC,QACDC,QAAOC,SAAiB,EAAA;AACtB,YAAA,OAAOC,OAAO,CAACC,CAAAA,EAAGJ,GAAQK,GAAAA,YAAAA,CAAaL,KAAKE,SAAYN,CAAAA,CAAAA,CAAAA,WAAAA,CAAAA;AAC1D,SAAA;AAEA;;QAGAU,GAAAA,CAAAA,CAAIN,GAAmB,EAAEO,UAA2B,EAAA;YAClDX,WAAW,CAACI,IAAI,GAAGO,UAAAA;AACnB,YAAA,OAAO,IAAI;AACb,SAAA;AAEA;;AAEC,QACDC,GAAIN,CAAAA,CAAAA,SAAiB,EAAEO,cAAAA,GAAkD,EAAE,EAAA;AACzE,YAAA,KAAK,MAAMC,cAAAA,IAAkBZ,MAAOD,CAAAA,IAAI,CAACY,cAAiB,CAAA,CAAA;gBACxD,MAAMF,UAAAA,GAAaE,cAAc,CAACC,cAAe,CAAA;gBACjD,MAAMV,GAAAA,GAAMW,aAAaD,cAAgBR,EAAAA,SAAAA,CAAAA;gBAEzC,IAAIU,GAAAA,CAAIZ,KAAKJ,WAAc,CAAA,EAAA;AACzB,oBAAA,MAAM,IAAIiB,KAAM,CAAA,CAAC,WAAW,EAAEb,GAAAA,CAAI,6BAA6B,CAAC,CAAA;AAClE;gBACAJ,WAAW,CAACI,IAAI,GAAGO,UAAAA;AACrB;AACF,SAAA;AAEA;;QAGAO,MAAAA,CAAAA,CAAOd,GAAmB,EAAEe,QAA4B,EAAA;AACtD,YAAA,MAAMC,iBAAoB,GAAA,IAAI,CAACjB,GAAG,CAACC,GAAAA,CAAAA;AAEnC,YAAA,IAAI,CAACgB,iBAAmB,EAAA;AACtB,gBAAA,MAAM,IAAIH,KAAM,CAAA,CAAC,WAAW,EAAEb,GAAAA,CAAI,cAAc,CAAC,CAAA;AACnD;AAEA,YAAA,MAAMiB,gBAAgBF,QAASC,CAAAA,iBAAAA,CAAAA;YAC/BpB,WAAW,CAACI,IAAI,GAAGiB,aAAAA;AAEnB,YAAA,OAAO,IAAI;AACb;AACF,KAAA;AACF;;;;"}