{"version":3,"file":"index.mjs","sources":["../../../src/core-api/controller/index.ts"],"sourcesContent":["import { prop } from 'lodash/fp';\nimport type Koa from 'koa';\nimport { contentTypes as contentTypeUtils } from '@strapi/utils';\nimport type { Core, Struct } from '@strapi/types';\n\nimport { transformResponse } from './transform';\nimport { createSingleTypeController } from './single-type';\nimport { createCollectionTypeController } from './collection-type';\nimport requestCtx from '../../services/request-context';\n\nconst isSingleType = (\n  contentType: Struct.ContentTypeSchema\n): contentType is Struct.SingleTypeSchema => contentTypeUtils.isSingleType(contentType);\n\nconst getAuthFromKoaContext = (ctx: Koa.Context) => prop('state.auth', ctx) ?? {};\n\n/** Build options for contentAPI.sanitize/validate from the request context (auth, route, strictParams). */\nconst getContentAPIOptions = (ctx: Koa.Context) => {\n  const auth = getAuthFromKoaContext(ctx);\n  const route = ctx.state?.route;\n  const options: { auth: unknown; strictParams?: boolean; route?: typeof route } = { auth, route };\n  const apiStrictParams = strapi.config.get('api.rest.strictParams');\n  if (typeof apiStrictParams === 'boolean') {\n    options.strictParams = apiStrictParams;\n  }\n  return options;\n};\n\nfunction createController<T extends Struct.SingleTypeSchema | Struct.CollectionTypeSchema>(opts: {\n  contentType: T;\n}): T extends Struct.SingleTypeSchema\n  ? Core.CoreAPI.Controller.SingleType\n  : Core.CoreAPI.Controller.CollectionType;\nfunction createController({\n  contentType,\n}: {\n  contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema;\n}) {\n  // TODO: replace with Base class + SingleType and CollectionType classes\n\n  const proto: Core.CoreAPI.Controller.Base = {\n    transformResponse(data, meta) {\n      const ctx = requestCtx.get();\n      return transformResponse(data, meta, {\n        contentType,\n        useJsonAPIFormat: ctx?.headers?.['strapi-response-format'] === 'v4',\n        encodeSourceMaps: ctx?.headers?.['strapi-encode-source-maps'] === 'true',\n      });\n    },\n\n    async sanitizeOutput(data, ctx) {\n      const auth = getAuthFromKoaContext(ctx);\n\n      return strapi.contentAPI.sanitize.output(data, contentType, { auth });\n    },\n\n    async sanitizeInput(data, ctx) {\n      return strapi.contentAPI.sanitize.input(data, contentType, getContentAPIOptions(ctx));\n    },\n\n    async sanitizeQuery(ctx) {\n      return strapi.contentAPI.sanitize.query(ctx.query, contentType, getContentAPIOptions(ctx));\n    },\n\n    async validateQuery(ctx) {\n      return strapi.contentAPI.validate.query(ctx.query, contentType, getContentAPIOptions(ctx));\n    },\n\n    async validateInput(data, ctx) {\n      return strapi.contentAPI.validate.input(data, contentType, getContentAPIOptions(ctx));\n    },\n  };\n\n  let ctrl;\n\n  if (isSingleType(contentType)) {\n    ctrl = createSingleTypeController({ contentType });\n  } else {\n    ctrl = createCollectionTypeController({ contentType });\n  }\n\n  return Object.assign(Object.create(proto), ctrl);\n}\n\nexport { createController };\n"],"names":["isSingleType","contentType","contentTypeUtils","getAuthFromKoaContext","ctx","prop","getContentAPIOptions","auth","route","state","options","apiStrictParams","strapi","config","get","strictParams","createController","proto","transformResponse","data","meta","requestCtx","useJsonAPIFormat","headers","encodeSourceMaps","sanitizeOutput","contentAPI","sanitize","output","sanitizeInput","input","sanitizeQuery","query","validateQuery","validate","validateInput","ctrl","createSingleTypeController","createCollectionTypeController","Object","assign","create"],"mappings":"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"}