{"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(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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"}