{"version":3,"file":"middleware.mjs","sources":["../../../src/services/server/middleware.ts"],"sourcesContent":["import path from 'path';\nimport { isArray } from 'lodash/fp';\nimport { importDefault } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nconst instantiateMiddleware = (\n  middlewareFactory: Core.MiddlewareFactory,\n  name: string,\n  config: unknown,\n  strapi: Core.Strapi\n) => {\n  try {\n    return middlewareFactory(config, { strapi });\n  } catch (e) {\n    if (e instanceof Error) {\n      throw new Error(`Middleware \"${name}\": ${e.message}`);\n    }\n  }\n};\n\nconst resolveRouteMiddlewares = (route: Core.Route, strapi: Core.Strapi) => {\n  const middlewaresConfig = route?.config?.middlewares ?? [];\n\n  if (!isArray(middlewaresConfig)) {\n    throw new Error('Route middlewares config must be an array');\n  }\n\n  const middlewares = resolveMiddlewares(middlewaresConfig, strapi);\n\n  return middlewares.map(({ handler }) => handler);\n};\n\nconst dummyMiddleware: Core.MiddlewareHandler = (_, next) => next();\n\n/**\n * Initialize every configured middlewares\n */\nconst resolveMiddlewares = (\n  config: Array<Core.MiddlewareName | Core.MiddlewareConfig | Core.MiddlewareHandler>,\n  strapi: Core.Strapi\n) => {\n  const middlewares: {\n    name: string | null;\n    handler: Core.MiddlewareHandler;\n  }[] = [];\n\n  for (const item of config) {\n    if (typeof item === 'function') {\n      middlewares.push({\n        name: null,\n        handler: item,\n      });\n\n      continue;\n    }\n\n    if (typeof item === 'string') {\n      const middlewareFactory = strapi.middleware(item);\n\n      if (!middlewareFactory) {\n        throw new Error(`Middleware ${item} not found.`);\n      }\n\n      middlewares.push({\n        name: item,\n        handler: instantiateMiddleware(middlewareFactory, item, {}, strapi) ?? dummyMiddleware,\n      });\n\n      continue;\n    }\n\n    if (typeof item === 'object' && item !== null) {\n      const { name, resolve, config = {} } = item;\n\n      if (name) {\n        const middlewareFactory = strapi.middleware(name);\n        middlewares.push({\n          name,\n          handler:\n            instantiateMiddleware(middlewareFactory, name, config, strapi) ?? dummyMiddleware,\n        });\n\n        continue;\n      }\n\n      if (resolve) {\n        const resolvedMiddlewareFactory = resolveCustomMiddleware(resolve, strapi);\n        middlewares.push({\n          name: resolve,\n          handler:\n            instantiateMiddleware(resolvedMiddlewareFactory, resolve, config, strapi) ??\n            dummyMiddleware,\n        });\n\n        continue;\n      }\n\n      throw new Error('Invalid middleware configuration. Missing name or resolve properties.');\n    }\n\n    throw new Error(\n      'Middleware config must either be a string or an object {name?: string, resolve?: string, config: any}.'\n    );\n  }\n\n  return middlewares;\n};\n\n/**\n * Resolve middleware from package name or path\n */\nconst resolveCustomMiddleware = (resolve: string, strapi: Core.Strapi) => {\n  let modulePath;\n\n  try {\n    modulePath = require.resolve(resolve);\n  } catch (error) {\n    if (error instanceof Error && 'code' in error && error.code === 'MODULE_NOT_FOUND') {\n      modulePath = path.resolve(strapi.dirs.dist.root, resolve);\n    } else {\n      throw error;\n    }\n  }\n\n  try {\n    return importDefault(modulePath);\n  } catch (err) {\n    throw new Error(`Could not load middleware \"${modulePath}\".`);\n  }\n};\n\nexport { resolveRouteMiddlewares, resolveMiddlewares };\n"],"names":["instantiateMiddleware","middlewareFactory","name","config","strapi","e","Error","message","resolveRouteMiddlewares","route","middlewaresConfig","middlewares","isArray","resolveMiddlewares","map","handler","dummyMiddleware","_","next","item","push","middleware","resolve","resolvedMiddlewareFactory","resolveCustomMiddleware","modulePath","require","error","code","path","dirs","dist","root","importDefault","err"],"mappings":"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"}