{"version":3,"file":"index.mjs","sources":["../../../src/core-api/routes/index.ts"],"sourcesContent":["import type { Core, Schema } from '@strapi/types';\n\nimport { contentTypes, contentTypes as contentTypeUtils } from '@strapi/utils';\nimport * as z from 'zod/v4';\nimport type { QueryParam } from './validation/content-type';\n\nimport { CoreContentTypeRouteValidator } from './validation';\n\nexport const createRoutes = ({\n  strapi,\n  contentType,\n}: {\n  strapi: Core.Strapi;\n  contentType: Schema.ContentType;\n}) => {\n  if (contentTypeUtils.isSingleType(contentType)) {\n    return getSingleTypeRoutes(contentType, strapi);\n  }\n\n  return getCollectionTypeRoutes(contentType, strapi);\n};\n\nconst getSingleTypeRoutes = (\n  schema: Schema.ContentType,\n  strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n  const { uid, info } = schema;\n\n  const validator = new CoreContentTypeRouteValidator(strapi, uid);\n  const conditionalQueryParams = getConditionalQueryParams(schema);\n\n  return {\n    find: {\n      method: 'GET',\n      path: `/${info.singularName}`,\n      handler: `${uid}.find`,\n      request: {\n        query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n      },\n      response: z.object({ data: validator.document }),\n      config: {},\n    },\n    update: {\n      method: 'PUT',\n      path: `/${info.singularName}`,\n      handler: `${uid}.update`,\n      request: {\n        query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n        body: { 'application/json': validator.partialBody },\n      },\n      response: z.object({ data: validator.document }),\n      config: {},\n    },\n    delete: {\n      method: 'DELETE',\n      path: `/${info.singularName}`,\n      handler: `${uid}.delete`,\n      request: {\n        query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n      },\n      response: z.object({ data: validator.document }),\n      config: {},\n    },\n  };\n};\n\nconst getCollectionTypeRoutes = (\n  schema: Schema.ContentType,\n  strapi: Core.Strapi\n): Record<string, Partial<Core.Route>> => {\n  const { uid, info } = schema;\n\n  const validator = new CoreContentTypeRouteValidator(strapi, uid);\n  const conditionalQueryParams = getConditionalQueryParams(schema);\n\n  return {\n    find: {\n      method: 'GET',\n      path: `/${info.pluralName}`,\n      handler: `${uid}.find`,\n      request: {\n        query: validator.queryParams([\n          'fields',\n          'filters',\n          '_q',\n          'pagination',\n          'sort',\n          'populate',\n          ...conditionalQueryParams,\n        ]),\n      },\n      response: z.object({ data: validator.documents }),\n      config: {},\n    },\n    findOne: {\n      method: 'GET',\n      path: `/${info.pluralName}/:id`,\n      handler: `${uid}.findOne`,\n      request: {\n        params: { id: validator.documentID },\n        query: validator.queryParams([\n          'fields',\n          'populate',\n          'filters',\n          'sort',\n          ...conditionalQueryParams,\n        ]),\n      },\n      response: z.object({ data: validator.document }),\n    },\n    create: {\n      method: 'POST',\n      path: `/${info.pluralName}`,\n      handler: `${uid}.create`,\n      request: {\n        query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n        body: { 'application/json': validator.body },\n      },\n      response: z.object({ data: validator.document }),\n      config: {},\n    },\n    update: {\n      method: 'PUT',\n      path: `/${info.pluralName}/:id`,\n      handler: `${uid}.update`,\n      request: {\n        query: validator.queryParams(['fields', 'populate', ...conditionalQueryParams]),\n        params: { id: validator.documentID },\n        body: { 'application/json': validator.partialBody },\n      },\n      response: z.object({ data: validator.document }),\n    },\n    delete: {\n      method: 'DELETE',\n      path: `/${info.pluralName}/:id`,\n      handler: `${uid}.delete`,\n      request: {\n        query: validator.queryParams(['fields', 'populate', 'filters', ...conditionalQueryParams]),\n        params: { id: validator.documentID },\n      },\n      response: z.object({ data: validator.document }),\n    },\n  };\n};\n\n/**\n * Query params that are conditionally part of this route's contract (and OpenAPI spec)\n * based on the content type: e.g. locale only for localized types, status only for draft & publish.\n *\n * This is separate from the runtime allowlist used when api.rest.strictParams is on\n * (ALLOWED_QUERY_PARAM_KEYS + registerQueryParam in @strapi/utils). That allowlist is global\n * (locale and status are always allowed); validate/sanitize then pass them through and the\n * document service or i18n layer ignores them when not applicable.\n *\n * So the two can differ: a non-localized route will not declare \"locale\" here (OpenAPI says\n * no locale param), but the runtime allowlist still allows the key and downstream ignores it.\n * That is intentional: this drives the route contract/docs; the allowlist drives enforcement.\n */\nconst getConditionalQueryParams = (schema: Schema.ContentType) => {\n  const isLocalized = strapi.plugin('i18n').service('content-types').isLocalizedContentType(schema);\n  const hasDraftAndPublish = contentTypes.hasDraftAndPublish(schema);\n\n  return [\n    ...(isLocalized ? ['locale'] : []),\n    ...(hasDraftAndPublish ? ['status', 'hasPublishedVersion'] : []),\n  ] as QueryParam[];\n};\n"],"names":["createRoutes","strapi","contentType","contentTypeUtils","isSingleType","getSingleTypeRoutes","getCollectionTypeRoutes","schema","uid","info","validator","CoreContentTypeRouteValidator","conditionalQueryParams","getConditionalQueryParams","find","method","path","singularName","handler","request","query","queryParams","response","z","object","data","document","config","update","body","partialBody","delete","pluralName","documents","findOne","params","id","documentID","create","isLocalized","plugin","service","isLocalizedContentType","hasDraftAndPublish","contentTypes"],"mappings":"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"}