@strapi/content-manager 5.52.1 → 5.52.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"history.mjs","sources":["../../../../server/src/history/services/history.ts"],"sourcesContent":["import type { Core, Data, Modules, Schema } from '@strapi/types';\nimport { errors, traverseEntity } from '@strapi/utils';\nimport { omit } from 'lodash/fp';\n\nimport { FIELDS_TO_IGNORE, HISTORY_VERSION_UID } from '../constants';\nimport type { HistoryVersions } from '../../../../shared/contracts';\nimport type {\n CreateHistoryVersion,\n HistoryVersionDataResponse,\n} from '../../../../shared/contracts/history-versions';\nimport { createServiceUtils } from './utils';\nimport { getService as getContentManagerService } from '../../utils';\n\n// Needed because the query engine doesn't return any types yet\ntype HistoryVersionQueryResult = Omit<HistoryVersionDataResponse, 'locale'> &\n Pick<CreateHistoryVersion, 'locale'>;\n\nconst createHistoryService = ({ strapi }: { strapi: Core.Strapi }) => {\n const query = strapi.db.query(HISTORY_VERSION_UID);\n const serviceUtils = createServiceUtils({ strapi });\n\n return {\n async createVersion(historyVersionData: HistoryVersions.CreateHistoryVersion) {\n await query.create({\n data: {\n ...historyVersionData,\n createdAt: new Date(),\n createdBy: strapi.requestContext.get()?.state?.user.id,\n },\n });\n },\n\n async findVersionsPage(params: HistoryVersions.GetHistoryVersions.Request): Promise<{\n results: HistoryVersions.HistoryVersionDataResponse[];\n pagination: HistoryVersions.Pagination;\n }> {\n const schema = strapi.getModel(params.query.contentType);\n const isLocalizedContentType = serviceUtils.isLocalizedContentType(schema);\n const defaultLocale = await serviceUtils.getDefaultLocale();\n\n let locale = null;\n if (isLocalizedContentType) {\n locale = params.query.locale || defaultLocale;\n }\n\n const [{ results, pagination }, localeDictionary] = await Promise.all([\n query.findPage({\n ...params.query,\n where: {\n $and: [\n { contentType: params.query.contentType },\n ...(params.query.documentId ? [{ relatedDocumentId: params.query.documentId }] : []),\n ...(locale ? [{ locale }] : []),\n ],\n },\n populate: ['createdBy'],\n orderBy: [{ createdAt: 'desc' }],\n }),\n serviceUtils.getLocaleDictionary(),\n ]);\n\n const populateEntry = async (entry: HistoryVersionQueryResult) => {\n return traverseEntity(\n async (options, utils) => {\n if (!options.attribute) return;\n if (!options.value) return;\n\n const currentValue: any[] = Array.isArray(options.value)\n ? options.value\n : [options.value];\n\n if (options.attribute.type === 'component') {\n // Ids on components throw an error when restoring\n utils.remove('id');\n }\n\n if (\n options.attribute.type === 'relation' &&\n // TODO: handle polymorphic relations\n options.attribute.relation !== 'morphToOne' &&\n options.attribute.relation !== 'morphToMany'\n ) {\n if (options.attribute.target === 'admin::user') {\n const adminUsers = await Promise.all(\n currentValue.map((userToPopulate) => {\n if (userToPopulate == null) {\n return null;\n }\n\n return strapi.query('admin::user').findOne({\n where: {\n ...(userToPopulate.id ? { id: userToPopulate.id } : {}),\n ...(userToPopulate.documentId\n ? { documentId: userToPopulate.documentId }\n : {}),\n },\n });\n })\n );\n\n utils.set(options.key, adminUsers as any);\n }\n\n const permissionChecker = getContentManagerService('permission-checker').create({\n userAbility: params.state.userAbility,\n model: options.attribute.target,\n });\n\n const response = await serviceUtils.buildRelationReponse(\n currentValue,\n options.attribute as Schema.Attribute.RelationWithTarget\n );\n const sanitizedResults = await Promise.all(\n response.results.map((media) => permissionChecker.sanitizeOutput(media))\n );\n\n utils.set(options.key, {\n results: sanitizedResults,\n meta: response.meta,\n });\n }\n\n if (options.attribute.type === 'media') {\n const permissionChecker = getContentManagerService('permission-checker').create({\n userAbility: params.state.userAbility,\n model: 'plugin::upload.file',\n });\n\n const response = await serviceUtils.buildMediaResponse(currentValue);\n const sanitizedResults = await Promise.all(\n response.results.map((media) => permissionChecker.sanitizeOutput(media))\n );\n\n utils.set(options.key, {\n results: sanitizedResults,\n meta: response.meta,\n });\n }\n },\n {\n schema,\n getModel: strapi.getModel.bind(strapi),\n },\n entry.data\n );\n };\n\n const formattedResults: any[] = await Promise.all(\n (results as HistoryVersionQueryResult[]).map(async (result) => {\n return {\n ...result,\n data: await populateEntry(result),\n meta: {\n unknownAttributes: serviceUtils.getSchemaAttributesDiff(\n result.schema,\n strapi.getModel(params.query.contentType).attributes\n ),\n },\n locale: result.locale ? localeDictionary[result.locale] : null,\n };\n })\n );\n\n return {\n results: formattedResults,\n pagination,\n };\n },\n\n async restoreVersion(versionId: Data.ID) {\n const version = await query.findOne({ where: { id: versionId } });\n const contentTypeSchemaAttributes = strapi.getModel(version.contentType).attributes;\n const schemaDiff = serviceUtils.getSchemaAttributesDiff(\n version.schema,\n contentTypeSchemaAttributes\n );\n\n // Set all added attribute values to null\n const dataWithoutAddedAttributes = Object.keys(schemaDiff.added).reduce(\n (currentData, addedKey) => {\n currentData[addedKey] = null;\n return currentData;\n },\n // Clone to avoid mutating the original version data\n structuredClone(version.data)\n );\n\n // Remove the schema attributes history should ignore\n const schema = structuredClone(version.schema);\n schema.attributes = omit(FIELDS_TO_IGNORE, contentTypeSchemaAttributes);\n\n const dataWithoutMissingRelations = await traverseEntity(\n async (options, utils) => {\n if (!options.attribute) return;\n\n if (options.attribute.type === 'component') {\n // Ids on components throw an error when restoring\n utils.remove('id');\n\n if (options.attribute.repeatable && options.value === null) {\n // Repeatable Components should always be an array\n utils.set(options.key, [] as any);\n }\n }\n\n if (options.attribute.type === 'dynamiczone') {\n if (options.value === null) {\n // Dynamic zones should always be an array\n utils.set(options.key, [] as any);\n }\n }\n\n if (\n options.attribute.type === 'relation' &&\n // TODO: handle polymorphic relations\n options.attribute.relation !== 'morphToOne' &&\n options.attribute.relation !== 'morphToMany'\n ) {\n if (!options.value) return;\n\n const data = await serviceUtils.getRelationRestoreValue(\n options.value as Modules.Documents.AnyDocument,\n options.attribute as Schema.Attribute.RelationWithTarget\n );\n\n utils.set(options.key, data as Modules.Documents.AnyDocument);\n }\n\n if (options.attribute.type === 'media') {\n if (!options.value) return;\n\n const data = await serviceUtils.getMediaRestoreValue(\n options.value as Modules.Documents.AnyDocument\n );\n\n utils.set(options.key, data);\n }\n },\n {\n schema,\n getModel: strapi.getModel.bind(strapi),\n },\n dataWithoutAddedAttributes\n );\n\n const data = omit(['id', ...Object.keys(schemaDiff.removed)], dataWithoutMissingRelations);\n const restoredDocument = await strapi.documents(version.contentType).update({\n documentId: version.relatedDocumentId,\n locale: version.locale,\n data,\n });\n\n if (!restoredDocument) {\n throw new errors.ApplicationError('Failed to restore version');\n }\n\n return restoredDocument;\n },\n };\n};\n\nexport { createHistoryService };\n"],"names":["createHistoryService","strapi","query","db","HISTORY_VERSION_UID","serviceUtils","createServiceUtils","createVersion","historyVersionData","create","data","createdAt","Date","createdBy","requestContext","get","state","user","id","findVersionsPage","params","schema","getModel","contentType","isLocalizedContentType","defaultLocale","getDefaultLocale","locale","results","pagination","localeDictionary","Promise","all","findPage","where","$and","documentId","relatedDocumentId","populate","orderBy","getLocaleDictionary","populateEntry","entry","traverseEntity","options","utils","attribute","value","currentValue","Array","isArray","type","remove","relation","target","adminUsers","map","userToPopulate","findOne","set","key","permissionChecker","getContentManagerService","userAbility","model","response","buildRelationReponse","sanitizedResults","media","sanitizeOutput","meta","buildMediaResponse","bind","formattedResults","result","unknownAttributes","getSchemaAttributesDiff","attributes","restoreVersion","versionId","version","contentTypeSchemaAttributes","schemaDiff","dataWithoutAddedAttributes","Object","keys","added","reduce","currentData","addedKey","structuredClone","omit","FIELDS_TO_IGNORE","dataWithoutMissingRelations","repeatable","getRelationRestoreValue","getMediaRestoreValue","removed","restoredDocument","documents","update","errors","ApplicationError"],"mappings":"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"}
1
+ {"version":3,"file":"history.mjs","sources":["../../../../server/src/history/services/history.ts"],"sourcesContent":["import type { Core, Data, Modules, Schema } from '@strapi/types';\nimport { errors, traverseEntity } from '@strapi/utils';\nimport { omit } from 'lodash/fp';\n\nimport { FIELDS_TO_IGNORE, HISTORY_VERSION_UID } from '../constants';\nimport type { HistoryVersions } from '../../../../shared/contracts';\nimport type {\n CreateHistoryVersion,\n HistoryVersionDataResponse,\n} from '../../../../shared/contracts/history-versions';\nimport { createServiceUtils } from './utils';\nimport { getService as getContentManagerService } from '../../utils';\n\n// Needed because the query engine doesn't return any types yet\ntype HistoryVersionQueryResult = Omit<HistoryVersionDataResponse, 'locale'> &\n Pick<CreateHistoryVersion, 'locale'>;\n\nconst createHistoryService = ({ strapi }: { strapi: Core.Strapi }) => {\n const query = strapi.db.query(HISTORY_VERSION_UID);\n const serviceUtils = createServiceUtils({ strapi });\n\n return {\n async createVersion(historyVersionData: HistoryVersions.CreateHistoryVersion) {\n await query.create({\n data: {\n ...historyVersionData,\n createdAt: new Date(),\n createdBy: strapi.requestContext.get()?.state?.user.id,\n },\n });\n },\n\n async findVersionsPage(params: HistoryVersions.GetHistoryVersions.Request): Promise<{\n results: HistoryVersions.HistoryVersionDataResponse[];\n pagination: HistoryVersions.Pagination;\n }> {\n const schema = strapi.getModel(params.query.contentType);\n const isLocalizedContentType = serviceUtils.isLocalizedContentType(schema);\n const defaultLocale = await serviceUtils.getDefaultLocale();\n\n let locale = null;\n if (isLocalizedContentType) {\n locale = params.query.locale || defaultLocale;\n }\n\n // NOTE: We get the IDs first because sorting full rows runs MySQL/MariaDB out of sort memory\n // See: https://github.com/strapi/strapi/issues/27393\n const [{ results: versionRows, pagination }, localeDictionary] = await Promise.all([\n query.findPage({\n ...params.query,\n select: ['id'],\n where: {\n $and: [\n { contentType: params.query.contentType },\n ...(params.query.documentId ? [{ relatedDocumentId: params.query.documentId }] : []),\n ...(locale ? [{ locale }] : []),\n ],\n },\n orderBy: [{ createdAt: 'desc' }],\n }),\n serviceUtils.getLocaleDictionary(),\n ]);\n\n const ids = versionRows.map((version) => version.id);\n const versions = ids.length\n ? await query.findMany({\n where: { id: { $in: ids } },\n populate: ['createdBy'],\n })\n : [];\n const versionsById = new Map(versions.map((version) => [version.id, version]));\n const results = ids.map((id) => versionsById.get(id)).filter(Boolean);\n\n const populateEntry = async (entry: HistoryVersionQueryResult) => {\n return traverseEntity(\n async (options, utils) => {\n if (!options.attribute) return;\n if (!options.value) return;\n\n const currentValue: any[] = Array.isArray(options.value)\n ? options.value\n : [options.value];\n\n if (options.attribute.type === 'component') {\n // Ids on components throw an error when restoring\n utils.remove('id');\n }\n\n if (\n options.attribute.type === 'relation' &&\n // TODO: handle polymorphic relations\n options.attribute.relation !== 'morphToOne' &&\n options.attribute.relation !== 'morphToMany'\n ) {\n if (options.attribute.target === 'admin::user') {\n const adminUsers = await Promise.all(\n currentValue.map((userToPopulate) => {\n if (userToPopulate == null) {\n return null;\n }\n\n return strapi.query('admin::user').findOne({\n where: {\n ...(userToPopulate.id ? { id: userToPopulate.id } : {}),\n ...(userToPopulate.documentId\n ? { documentId: userToPopulate.documentId }\n : {}),\n },\n });\n })\n );\n\n utils.set(options.key, adminUsers as any);\n }\n\n const permissionChecker = getContentManagerService('permission-checker').create({\n userAbility: params.state.userAbility,\n model: options.attribute.target,\n });\n\n const response = await serviceUtils.buildRelationReponse(\n currentValue,\n options.attribute as Schema.Attribute.RelationWithTarget\n );\n const sanitizedResults = await Promise.all(\n response.results.map((media) => permissionChecker.sanitizeOutput(media))\n );\n\n utils.set(options.key, {\n results: sanitizedResults,\n meta: response.meta,\n });\n }\n\n if (options.attribute.type === 'media') {\n const permissionChecker = getContentManagerService('permission-checker').create({\n userAbility: params.state.userAbility,\n model: 'plugin::upload.file',\n });\n\n const response = await serviceUtils.buildMediaResponse(currentValue);\n const sanitizedResults = await Promise.all(\n response.results.map((media) => permissionChecker.sanitizeOutput(media))\n );\n\n utils.set(options.key, {\n results: sanitizedResults,\n meta: response.meta,\n });\n }\n },\n {\n schema,\n getModel: strapi.getModel.bind(strapi),\n },\n entry.data\n );\n };\n\n const formattedResults: any[] = await Promise.all(\n (results as HistoryVersionQueryResult[]).map(async (result) => {\n return {\n ...result,\n data: await populateEntry(result),\n meta: {\n unknownAttributes: serviceUtils.getSchemaAttributesDiff(\n result.schema,\n strapi.getModel(params.query.contentType).attributes\n ),\n },\n locale: result.locale ? localeDictionary[result.locale] : null,\n };\n })\n );\n\n return {\n results: formattedResults,\n pagination,\n };\n },\n\n async restoreVersion(versionId: Data.ID) {\n const version = await query.findOne({ where: { id: versionId } });\n const contentTypeSchemaAttributes = strapi.getModel(version.contentType).attributes;\n const schemaDiff = serviceUtils.getSchemaAttributesDiff(\n version.schema,\n contentTypeSchemaAttributes\n );\n\n // Set all added attribute values to null\n const dataWithoutAddedAttributes = Object.keys(schemaDiff.added).reduce(\n (currentData, addedKey) => {\n currentData[addedKey] = null;\n return currentData;\n },\n // Clone to avoid mutating the original version data\n structuredClone(version.data)\n );\n\n // Remove the schema attributes history should ignore\n const schema = structuredClone(version.schema);\n schema.attributes = omit(FIELDS_TO_IGNORE, contentTypeSchemaAttributes);\n\n const dataWithoutMissingRelations = await traverseEntity(\n async (options, utils) => {\n if (!options.attribute) return;\n\n if (options.attribute.type === 'component') {\n // Ids on components throw an error when restoring\n utils.remove('id');\n\n if (options.attribute.repeatable && options.value === null) {\n // Repeatable Components should always be an array\n utils.set(options.key, [] as any);\n }\n }\n\n if (options.attribute.type === 'dynamiczone') {\n if (options.value === null) {\n // Dynamic zones should always be an array\n utils.set(options.key, [] as any);\n }\n }\n\n if (\n options.attribute.type === 'relation' &&\n // TODO: handle polymorphic relations\n options.attribute.relation !== 'morphToOne' &&\n options.attribute.relation !== 'morphToMany'\n ) {\n if (!options.value) return;\n\n const data = await serviceUtils.getRelationRestoreValue(\n options.value as Modules.Documents.AnyDocument,\n options.attribute as Schema.Attribute.RelationWithTarget\n );\n\n utils.set(options.key, data as Modules.Documents.AnyDocument);\n }\n\n if (options.attribute.type === 'media') {\n if (!options.value) return;\n\n const data = await serviceUtils.getMediaRestoreValue(\n options.value as Modules.Documents.AnyDocument\n );\n\n utils.set(options.key, data);\n }\n },\n {\n schema,\n getModel: strapi.getModel.bind(strapi),\n },\n dataWithoutAddedAttributes\n );\n\n const data = omit(['id', ...Object.keys(schemaDiff.removed)], dataWithoutMissingRelations);\n const restoredDocument = await strapi.documents(version.contentType).update({\n documentId: version.relatedDocumentId,\n locale: version.locale,\n data,\n });\n\n if (!restoredDocument) {\n throw new errors.ApplicationError('Failed to restore version');\n }\n\n return restoredDocument;\n },\n };\n};\n\nexport { createHistoryService };\n"],"names":["createHistoryService","strapi","query","db","HISTORY_VERSION_UID","serviceUtils","createServiceUtils","createVersion","historyVersionData","create","data","createdAt","Date","createdBy","requestContext","get","state","user","id","findVersionsPage","params","schema","getModel","contentType","isLocalizedContentType","defaultLocale","getDefaultLocale","locale","results","versionRows","pagination","localeDictionary","Promise","all","findPage","select","where","$and","documentId","relatedDocumentId","orderBy","getLocaleDictionary","ids","map","version","versions","length","findMany","$in","populate","versionsById","Map","filter","Boolean","populateEntry","entry","traverseEntity","options","utils","attribute","value","currentValue","Array","isArray","type","remove","relation","target","adminUsers","userToPopulate","findOne","set","key","permissionChecker","getContentManagerService","userAbility","model","response","buildRelationReponse","sanitizedResults","media","sanitizeOutput","meta","buildMediaResponse","bind","formattedResults","result","unknownAttributes","getSchemaAttributesDiff","attributes","restoreVersion","versionId","contentTypeSchemaAttributes","schemaDiff","dataWithoutAddedAttributes","Object","keys","added","reduce","currentData","addedKey","structuredClone","omit","FIELDS_TO_IGNORE","dataWithoutMissingRelations","repeatable","getRelationRestoreValue","getMediaRestoreValue","removed","restoredDocument","documents","update","errors","ApplicationError"],"mappings":"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"}
@@ -201,7 +201,12 @@ const isCustomFieldAttribute = (attr)=>typeof attr === 'object' && attr !== null
201
201
  strapiUtils.z.array(relEntry),
202
202
  strapiUtils.z.null()
203
203
  ]).optional().describe('Replace all relations. Array replaces existing; null clears all. Mutually exclusive with connect/disconnect.')
204
- }).strict();
204
+ }).strict().refine((value)=>value.set === undefined || value.connect === undefined && value.disconnect === undefined, {
205
+ message: 'set is mutually exclusive with connect and disconnect',
206
+ path: [
207
+ 'set'
208
+ ]
209
+ });
205
210
  } else {
206
211
  s = strapiUtils.z.union([
207
212
  relDocumentId,
@@ -1 +1 @@
1
- {"version":3,"file":"data-schema.js","sources":["../../../../server/src/mcp/schemas/data-schema.ts"],"sourcesContent":["import { contentTypes, z } from '@strapi/utils';\nimport type { Core, Schema, Struct } from '@strapi/types';\n\nimport { buildBlocksInputSchema } from './blocks-schema';\nimport type { ContentManagerModelForMcp } from '../types';\n\ntype CustomFieldAttribute = {\n type: 'customField';\n customField: string;\n [key: string]: unknown;\n};\n\nconst isCustomFieldAttribute = (attr: unknown): attr is CustomFieldAttribute =>\n typeof attr === 'object' &&\n attr !== null &&\n (attr as Record<string, unknown>).type === 'customField' &&\n typeof (attr as Record<string, unknown>).customField === 'string';\n\n/**\n * Builds a structured Zod object schema for a Strapi component UID.\n * Declared as a regular function so it is hoisted above `attributeToInputSchema`\n * — the two functions are mutually recursive (component attrs recurse into\n * attributeToInputSchema; attributeToInputSchema calls this for 'component' cases).\n *\n * @param strapi - Strapi instance (components registry available post-load).\n * @param componentUid - e.g. \"common.seo\".\n * @param visited - cycle-guard; prevents infinite recursion on self-referencing components.\n */\nexport function buildComponentInputSchema(\n strapi: Core.Strapi,\n componentUid: string,\n visited: Set<string> = new Set()\n): z.ZodTypeAny {\n if (visited.has(componentUid) === true) {\n // Circular reference — fall back to permissive but non-empty JSON Schema\n return z.record(z.string(), z.unknown());\n }\n\n type ComponentEntry = { attributes: Record<string, Schema.Attribute.AnyAttribute> };\n const componentsMap = strapi.components as unknown as Record<string, ComponentEntry | undefined>;\n const component = componentsMap[componentUid];\n if (component === undefined) {\n return z.record(z.string(), z.unknown());\n }\n\n visited.add(componentUid);\n\n const shape: Record<string, z.ZodTypeAny> = {};\n for (const [key, attr] of Object.entries(component.attributes)) {\n if (key === 'id') {\n // eslint-disable-next-line no-continue\n continue;\n }\n shape[key] = attributeToInputSchema(strapi, attr, visited);\n }\n\n visited.delete(componentUid);\n\n return z.object(shape).strict();\n}\n\n/**\n * Maps a single Strapi attribute to a Zod input schema, carrying constraints\n * (min, max, minLength, maxLength, required, enum values, etc.).\n *\n * Mirrors the `mapAttributeToInputSchema` logic from\n * `packages/core/core/src/core-api/routes/validation/mappers.ts` — kept inline\n * here to avoid a cross-package import from @strapi/content-manager into\n * @strapi/core (which is not a listed dependency).\n *\n */\nexport const attributeToInputSchema = (\n strapi: Core.Strapi,\n attr: Schema.Attribute.AnyAttribute,\n visited: Set<string> = new Set()\n): z.ZodTypeAny => {\n switch (attr.type) {\n case 'string':\n case 'text':\n case 'richtext':\n case 'password': {\n const { required, minLength, maxLength } = attr as Schema.Attribute.String;\n let s: z.ZodString = z.string();\n if (minLength !== undefined) s = s.min(minLength);\n if (maxLength !== undefined) s = s.max(maxLength);\n return required === true ? s : s.optional();\n }\n case 'email': {\n const { required } = attr as Schema.Attribute.Email;\n const s = z.string().email();\n return required === true ? s : s.optional();\n }\n case 'uid': {\n const { required } = attr as Schema.Attribute.UID;\n const s = z.string();\n return required === true ? s : s.optional();\n }\n case 'integer': {\n const { required, min, max } = attr as Schema.Attribute.Integer;\n let s = z.number().int();\n if (min !== undefined) s = s.min(min);\n if (max !== undefined) s = s.max(max);\n return required === true ? s : s.optional();\n }\n case 'biginteger': {\n const { required } = attr as Schema.Attribute.BigInteger;\n const s = z.string();\n return required === true ? s : s.optional();\n }\n case 'decimal':\n case 'float': {\n const { required, min, max } = attr as Schema.Attribute.Decimal;\n let s = z.number();\n if (min !== undefined) s = s.min(min);\n if (max !== undefined) s = s.max(max);\n return required === true ? s : s.optional();\n }\n case 'boolean': {\n const { required } = attr as Schema.Attribute.Boolean;\n const s = z.boolean();\n return required === true ? s : s.optional();\n }\n case 'date':\n case 'datetime':\n case 'time':\n case 'timestamp': {\n const { required } = attr as Schema.Attribute.Date;\n const s = z.string();\n return required === true ? s : s.optional();\n }\n case 'enumeration': {\n const { required, enum: values } = attr as Schema.Attribute.Enumeration<string[]>;\n if (Array.isArray(values) && values.length > 0) {\n const s = z.enum(values as [string, ...string[]]);\n return required === true ? s : s.optional();\n }\n const s = z.string();\n return required === true ? s : s.optional();\n }\n case 'json': {\n const { required } = attr as Schema.Attribute.JSON;\n const s = z.any();\n return required === true ? s : s.optional();\n }\n case 'blocks': {\n const { required } = attr as Schema.Attribute.Blocks;\n const s = buildBlocksInputSchema();\n return required === true ? s : s.optional();\n }\n case 'component': {\n // Cast to a plain record to avoid generic defaults on `repeatable` (Constants.False)\n const componentAttr = attr as unknown as {\n required?: boolean;\n repeatable?: boolean;\n component?: string;\n min?: number;\n max?: number;\n };\n const componentUid = componentAttr.component;\n const componentSchema: z.ZodTypeAny =\n componentUid !== undefined\n ? buildComponentInputSchema(strapi, componentUid, visited)\n : z.record(z.string(), z.unknown());\n\n let s: z.ZodTypeAny =\n componentAttr.repeatable === true ? z.array(componentSchema) : componentSchema;\n if (componentAttr.repeatable === true && componentAttr.min !== undefined) {\n s = (s as z.ZodArray<z.ZodTypeAny>).min(componentAttr.min);\n }\n if (componentAttr.repeatable === true && componentAttr.max !== undefined) {\n s = (s as z.ZodArray<z.ZodTypeAny>).max(componentAttr.max);\n }\n return componentAttr.required === true ? s : s.optional();\n }\n case 'dynamiczone': {\n const dzAttr = attr as unknown as { required?: boolean; min?: number; max?: number };\n let s = z.array(z.any());\n if (dzAttr.min !== undefined) s = (s as z.ZodArray<z.ZodAny>).min(dzAttr.min);\n if (dzAttr.max !== undefined) s = (s as z.ZodArray<z.ZodAny>).max(dzAttr.max);\n return dzAttr.required === true ? s : s.optional();\n }\n case 'media': {\n const mediaAttr = attr as unknown as { required?: boolean; multiple?: boolean };\n const s = mediaAttr.multiple === true ? z.array(z.any()) : z.any();\n return mediaAttr.required === true ? s : s.optional();\n }\n case 'relation': {\n const relAttr = attr as Schema.Attribute.Relation;\n const isToMany = relAttr.relation?.endsWith('ToMany') === true;\n\n const relDocumentId = z\n .string()\n .min(1)\n .describe('Strapi document ID (e.g. \"z7v8zma53x01r6oceimv922b\").');\n\n const relLongHand = z\n .object({\n documentId: relDocumentId,\n locale: z\n .string()\n .optional()\n .describe('Target locale. Defaults to source document locale.'),\n status: z\n .enum(['draft', 'published'])\n .optional()\n .describe('Target version status. Defaults based on draftAndPublish config.'),\n })\n .strict();\n\n let s: z.ZodTypeAny;\n\n if (isToMany === true) {\n const relEntry = z.union([relDocumentId, relLongHand]);\n\n const relConnectPosition = z\n .object({\n before: z.string().optional().describe('Document ID to insert before.'),\n after: z.string().optional().describe('Document ID to insert after.'),\n start: z.boolean().optional().describe('Insert at start of list.'),\n end: z.boolean().optional().describe('Insert at end of list (default).'),\n })\n .strict();\n\n const relConnectEntry = z\n .object({\n documentId: relDocumentId,\n locale: z.string().optional(),\n status: z.enum(['draft', 'published']).optional(),\n position: relConnectPosition\n .optional()\n .describe('Ordering hint. Default: { end: true }.'),\n })\n .strict();\n\n s = z\n .object({\n connect: z\n .array(z.union([relDocumentId, relConnectEntry]))\n .optional()\n .describe(\n 'Add relations. Each entry: documentId string, or { documentId, locale?, status?, position? }.'\n ),\n disconnect: z\n .array(relEntry)\n .optional()\n .describe(\n 'Remove relations. Each entry: documentId string, or { documentId, locale?, status? }.'\n ),\n set: z\n .union([z.array(relEntry), z.null()])\n .optional()\n .describe(\n 'Replace all relations. Array replaces existing; null clears all. Mutually exclusive with connect/disconnect.'\n ),\n })\n .strict();\n } else {\n s = z.union([\n relDocumentId,\n relLongHand,\n z.null().describe('Set to null to clear the relation.'),\n ]);\n }\n\n return relAttr.required === true ? s : s.optional();\n }\n default: {\n const unknownAttr: unknown = attr;\n if (isCustomFieldAttribute(unknownAttr)) {\n const customField = strapi.get('custom-fields').get(unknownAttr.customField);\n if (customField !== undefined) {\n return attributeToInputSchema(\n strapi,\n {\n ...unknownAttr,\n type: customField.type,\n } as unknown as Schema.Attribute.AnyAttribute,\n visited\n );\n }\n }\n return z.unknown();\n }\n }\n};\n\n/**\n * Derives a per-content-type `data` Zod schema from the model's writable attributes.\n * Uses `contentTypes.isWritableAttribute` to filter system-managed keys\n * (id, documentId, timestamps, createdBy, updatedBy, localizations, locale, etc.).\n * Unknown keys are rejected (strict mode) — invalid field names fail at the MCP boundary.\n */\nexport const buildDataSchema = (\n strapi: Core.Strapi,\n schema: Struct.ContentTypeSchema | ContentManagerModelForMcp,\n attributes: Struct.SchemaAttributes,\n permittedFields?: Set<string> | null\n): z.ZodTypeAny => {\n const shape: Record<string, z.ZodTypeAny> = {};\n\n for (const [key, attr] of Object.entries(attributes)) {\n const isPermitted =\n permittedFields === null ||\n permittedFields === undefined ||\n permittedFields.has(key) === true;\n\n if (\n isPermitted === true &&\n contentTypes.isWritableAttribute(schema as Struct.ContentTypeSchema, key) === true &&\n contentTypes.isPrivateAttribute(schema as Struct.ContentTypeSchema, key) !== true\n ) {\n shape[key] = attributeToInputSchema(strapi, attr);\n }\n }\n\n return z.object(shape).strict().describe('Document field values to write.');\n};\n"],"names":["isCustomFieldAttribute","attr","type","customField","buildComponentInputSchema","strapi","componentUid","visited","Set","has","z","record","string","unknown","componentsMap","components","component","undefined","add","shape","key","Object","entries","attributes","attributeToInputSchema","delete","object","strict","required","minLength","maxLength","s","min","max","optional","email","number","int","boolean","enum","values","Array","isArray","length","any","buildBlocksInputSchema","componentAttr","componentSchema","repeatable","array","dzAttr","mediaAttr","multiple","relAttr","isToMany","relation","endsWith","relDocumentId","describe","relLongHand","documentId","locale","status","relEntry","union","relConnectPosition","before","after","start","end","relConnectEntry","position","connect","disconnect","set","null","unknownAttr","get","buildDataSchema","schema","permittedFields","isPermitted","contentTypes","isWritableAttribute","isPrivateAttribute"],"mappings":"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"}
1
+ {"version":3,"file":"data-schema.js","sources":["../../../../server/src/mcp/schemas/data-schema.ts"],"sourcesContent":["import { contentTypes, z } from '@strapi/utils';\nimport type { Core, Schema, Struct } from '@strapi/types';\n\nimport { buildBlocksInputSchema } from './blocks-schema';\nimport type { ContentManagerModelForMcp } from '../types';\n\ntype CustomFieldAttribute = {\n type: 'customField';\n customField: string;\n [key: string]: unknown;\n};\n\nconst isCustomFieldAttribute = (attr: unknown): attr is CustomFieldAttribute =>\n typeof attr === 'object' &&\n attr !== null &&\n (attr as Record<string, unknown>).type === 'customField' &&\n typeof (attr as Record<string, unknown>).customField === 'string';\n\n/**\n * Builds a structured Zod object schema for a Strapi component UID.\n * Declared as a regular function so it is hoisted above `attributeToInputSchema`\n * — the two functions are mutually recursive (component attrs recurse into\n * attributeToInputSchema; attributeToInputSchema calls this for 'component' cases).\n *\n * @param strapi - Strapi instance (components registry available post-load).\n * @param componentUid - e.g. \"common.seo\".\n * @param visited - cycle-guard; prevents infinite recursion on self-referencing components.\n */\nexport function buildComponentInputSchema(\n strapi: Core.Strapi,\n componentUid: string,\n visited: Set<string> = new Set()\n): z.ZodTypeAny {\n if (visited.has(componentUid) === true) {\n // Circular reference — fall back to permissive but non-empty JSON Schema\n return z.record(z.string(), z.unknown());\n }\n\n type ComponentEntry = { attributes: Record<string, Schema.Attribute.AnyAttribute> };\n const componentsMap = strapi.components as unknown as Record<string, ComponentEntry | undefined>;\n const component = componentsMap[componentUid];\n if (component === undefined) {\n return z.record(z.string(), z.unknown());\n }\n\n visited.add(componentUid);\n\n const shape: Record<string, z.ZodTypeAny> = {};\n for (const [key, attr] of Object.entries(component.attributes)) {\n if (key === 'id') {\n // eslint-disable-next-line no-continue\n continue;\n }\n shape[key] = attributeToInputSchema(strapi, attr, visited);\n }\n\n visited.delete(componentUid);\n\n return z.object(shape).strict();\n}\n\n/**\n * Maps a single Strapi attribute to a Zod input schema, carrying constraints\n * (min, max, minLength, maxLength, required, enum values, etc.).\n *\n * Mirrors the `mapAttributeToInputSchema` logic from\n * `packages/core/core/src/core-api/routes/validation/mappers.ts` — kept inline\n * here to avoid a cross-package import from @strapi/content-manager into\n * @strapi/core (which is not a listed dependency).\n *\n */\nexport const attributeToInputSchema = (\n strapi: Core.Strapi,\n attr: Schema.Attribute.AnyAttribute,\n visited: Set<string> = new Set()\n): z.ZodTypeAny => {\n switch (attr.type) {\n case 'string':\n case 'text':\n case 'richtext':\n case 'password': {\n const { required, minLength, maxLength } = attr as Schema.Attribute.String;\n let s: z.ZodString = z.string();\n if (minLength !== undefined) s = s.min(minLength);\n if (maxLength !== undefined) s = s.max(maxLength);\n return required === true ? s : s.optional();\n }\n case 'email': {\n const { required } = attr as Schema.Attribute.Email;\n const s = z.string().email();\n return required === true ? s : s.optional();\n }\n case 'uid': {\n const { required } = attr as Schema.Attribute.UID;\n const s = z.string();\n return required === true ? s : s.optional();\n }\n case 'integer': {\n const { required, min, max } = attr as Schema.Attribute.Integer;\n let s = z.number().int();\n if (min !== undefined) s = s.min(min);\n if (max !== undefined) s = s.max(max);\n return required === true ? s : s.optional();\n }\n case 'biginteger': {\n const { required } = attr as Schema.Attribute.BigInteger;\n const s = z.string();\n return required === true ? s : s.optional();\n }\n case 'decimal':\n case 'float': {\n const { required, min, max } = attr as Schema.Attribute.Decimal;\n let s = z.number();\n if (min !== undefined) s = s.min(min);\n if (max !== undefined) s = s.max(max);\n return required === true ? s : s.optional();\n }\n case 'boolean': {\n const { required } = attr as Schema.Attribute.Boolean;\n const s = z.boolean();\n return required === true ? s : s.optional();\n }\n case 'date':\n case 'datetime':\n case 'time':\n case 'timestamp': {\n const { required } = attr as Schema.Attribute.Date;\n const s = z.string();\n return required === true ? s : s.optional();\n }\n case 'enumeration': {\n const { required, enum: values } = attr as Schema.Attribute.Enumeration<string[]>;\n if (Array.isArray(values) && values.length > 0) {\n const s = z.enum(values as [string, ...string[]]);\n return required === true ? s : s.optional();\n }\n const s = z.string();\n return required === true ? s : s.optional();\n }\n case 'json': {\n const { required } = attr as Schema.Attribute.JSON;\n const s = z.any();\n return required === true ? s : s.optional();\n }\n case 'blocks': {\n const { required } = attr as Schema.Attribute.Blocks;\n const s = buildBlocksInputSchema();\n return required === true ? s : s.optional();\n }\n case 'component': {\n // Cast to a plain record to avoid generic defaults on `repeatable` (Constants.False)\n const componentAttr = attr as unknown as {\n required?: boolean;\n repeatable?: boolean;\n component?: string;\n min?: number;\n max?: number;\n };\n const componentUid = componentAttr.component;\n const componentSchema: z.ZodTypeAny =\n componentUid !== undefined\n ? buildComponentInputSchema(strapi, componentUid, visited)\n : z.record(z.string(), z.unknown());\n\n let s: z.ZodTypeAny =\n componentAttr.repeatable === true ? z.array(componentSchema) : componentSchema;\n if (componentAttr.repeatable === true && componentAttr.min !== undefined) {\n s = (s as z.ZodArray<z.ZodTypeAny>).min(componentAttr.min);\n }\n if (componentAttr.repeatable === true && componentAttr.max !== undefined) {\n s = (s as z.ZodArray<z.ZodTypeAny>).max(componentAttr.max);\n }\n return componentAttr.required === true ? s : s.optional();\n }\n case 'dynamiczone': {\n const dzAttr = attr as unknown as { required?: boolean; min?: number; max?: number };\n let s = z.array(z.any());\n if (dzAttr.min !== undefined) s = (s as z.ZodArray<z.ZodAny>).min(dzAttr.min);\n if (dzAttr.max !== undefined) s = (s as z.ZodArray<z.ZodAny>).max(dzAttr.max);\n return dzAttr.required === true ? s : s.optional();\n }\n case 'media': {\n const mediaAttr = attr as unknown as { required?: boolean; multiple?: boolean };\n const s = mediaAttr.multiple === true ? z.array(z.any()) : z.any();\n return mediaAttr.required === true ? s : s.optional();\n }\n case 'relation': {\n const relAttr = attr as Schema.Attribute.Relation;\n const isToMany = relAttr.relation?.endsWith('ToMany') === true;\n\n const relDocumentId = z\n .string()\n .min(1)\n .describe('Strapi document ID (e.g. \"z7v8zma53x01r6oceimv922b\").');\n\n const relLongHand = z\n .object({\n documentId: relDocumentId,\n locale: z\n .string()\n .optional()\n .describe('Target locale. Defaults to source document locale.'),\n status: z\n .enum(['draft', 'published'])\n .optional()\n .describe('Target version status. Defaults based on draftAndPublish config.'),\n })\n .strict();\n\n let s: z.ZodTypeAny;\n\n if (isToMany === true) {\n const relEntry = z.union([relDocumentId, relLongHand]);\n\n const relConnectPosition = z\n .object({\n before: z.string().optional().describe('Document ID to insert before.'),\n after: z.string().optional().describe('Document ID to insert after.'),\n start: z.boolean().optional().describe('Insert at start of list.'),\n end: z.boolean().optional().describe('Insert at end of list (default).'),\n })\n .strict();\n\n const relConnectEntry = z\n .object({\n documentId: relDocumentId,\n locale: z.string().optional(),\n status: z.enum(['draft', 'published']).optional(),\n position: relConnectPosition\n .optional()\n .describe('Ordering hint. Default: { end: true }.'),\n })\n .strict();\n\n s = z\n .object({\n connect: z\n .array(z.union([relDocumentId, relConnectEntry]))\n .optional()\n .describe(\n 'Add relations. Each entry: documentId string, or { documentId, locale?, status?, position? }.'\n ),\n disconnect: z\n .array(relEntry)\n .optional()\n .describe(\n 'Remove relations. Each entry: documentId string, or { documentId, locale?, status? }.'\n ),\n set: z\n .union([z.array(relEntry), z.null()])\n .optional()\n .describe(\n 'Replace all relations. Array replaces existing; null clears all. Mutually exclusive with connect/disconnect.'\n ),\n })\n .strict()\n .refine(\n (value) =>\n value.set === undefined ||\n (value.connect === undefined && value.disconnect === undefined),\n {\n message: 'set is mutually exclusive with connect and disconnect',\n path: ['set'],\n }\n );\n } else {\n s = z.union([\n relDocumentId,\n relLongHand,\n z.null().describe('Set to null to clear the relation.'),\n ]);\n }\n\n return relAttr.required === true ? s : s.optional();\n }\n default: {\n const unknownAttr: unknown = attr;\n if (isCustomFieldAttribute(unknownAttr)) {\n const customField = strapi.get('custom-fields').get(unknownAttr.customField);\n if (customField !== undefined) {\n return attributeToInputSchema(\n strapi,\n {\n ...unknownAttr,\n type: customField.type,\n } as unknown as Schema.Attribute.AnyAttribute,\n visited\n );\n }\n }\n return z.unknown();\n }\n }\n};\n\n/**\n * Derives a per-content-type `data` Zod schema from the model's writable attributes.\n * Uses `contentTypes.isWritableAttribute` to filter system-managed keys\n * (id, documentId, timestamps, createdBy, updatedBy, localizations, locale, etc.).\n * Unknown keys are rejected (strict mode) — invalid field names fail at the MCP boundary.\n */\nexport const buildDataSchema = (\n strapi: Core.Strapi,\n schema: Struct.ContentTypeSchema | ContentManagerModelForMcp,\n attributes: Struct.SchemaAttributes,\n permittedFields?: Set<string> | null\n): z.ZodTypeAny => {\n const shape: Record<string, z.ZodTypeAny> = {};\n\n for (const [key, attr] of Object.entries(attributes)) {\n const isPermitted =\n permittedFields === null ||\n permittedFields === undefined ||\n permittedFields.has(key) === true;\n\n if (\n isPermitted === true &&\n contentTypes.isWritableAttribute(schema as Struct.ContentTypeSchema, key) === true &&\n contentTypes.isPrivateAttribute(schema as Struct.ContentTypeSchema, key) !== true\n ) {\n shape[key] = attributeToInputSchema(strapi, attr);\n }\n }\n\n return z.object(shape).strict().describe('Document field values to write.');\n};\n"],"names":["isCustomFieldAttribute","attr","type","customField","buildComponentInputSchema","strapi","componentUid","visited","Set","has","z","record","string","unknown","componentsMap","components","component","undefined","add","shape","key","Object","entries","attributes","attributeToInputSchema","delete","object","strict","required","minLength","maxLength","s","min","max","optional","email","number","int","boolean","enum","values","Array","isArray","length","any","buildBlocksInputSchema","componentAttr","componentSchema","repeatable","array","dzAttr","mediaAttr","multiple","relAttr","isToMany","relation","endsWith","relDocumentId","describe","relLongHand","documentId","locale","status","relEntry","union","relConnectPosition","before","after","start","end","relConnectEntry","position","connect","disconnect","set","null","refine","value","message","path","unknownAttr","get","buildDataSchema","schema","permittedFields","isPermitted","contentTypes","isWritableAttribute","isPrivateAttribute"],"mappings":"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"}
@@ -199,7 +199,12 @@ const isCustomFieldAttribute = (attr)=>typeof attr === 'object' && attr !== null
199
199
  z.array(relEntry),
200
200
  z.null()
201
201
  ]).optional().describe('Replace all relations. Array replaces existing; null clears all. Mutually exclusive with connect/disconnect.')
202
- }).strict();
202
+ }).strict().refine((value)=>value.set === undefined || value.connect === undefined && value.disconnect === undefined, {
203
+ message: 'set is mutually exclusive with connect and disconnect',
204
+ path: [
205
+ 'set'
206
+ ]
207
+ });
203
208
  } else {
204
209
  s = z.union([
205
210
  relDocumentId,
@@ -1 +1 @@
1
- {"version":3,"file":"data-schema.mjs","sources":["../../../../server/src/mcp/schemas/data-schema.ts"],"sourcesContent":["import { contentTypes, z } from '@strapi/utils';\nimport type { Core, Schema, Struct } from '@strapi/types';\n\nimport { buildBlocksInputSchema } from './blocks-schema';\nimport type { ContentManagerModelForMcp } from '../types';\n\ntype CustomFieldAttribute = {\n type: 'customField';\n customField: string;\n [key: string]: unknown;\n};\n\nconst isCustomFieldAttribute = (attr: unknown): attr is CustomFieldAttribute =>\n typeof attr === 'object' &&\n attr !== null &&\n (attr as Record<string, unknown>).type === 'customField' &&\n typeof (attr as Record<string, unknown>).customField === 'string';\n\n/**\n * Builds a structured Zod object schema for a Strapi component UID.\n * Declared as a regular function so it is hoisted above `attributeToInputSchema`\n * — the two functions are mutually recursive (component attrs recurse into\n * attributeToInputSchema; attributeToInputSchema calls this for 'component' cases).\n *\n * @param strapi - Strapi instance (components registry available post-load).\n * @param componentUid - e.g. \"common.seo\".\n * @param visited - cycle-guard; prevents infinite recursion on self-referencing components.\n */\nexport function buildComponentInputSchema(\n strapi: Core.Strapi,\n componentUid: string,\n visited: Set<string> = new Set()\n): z.ZodTypeAny {\n if (visited.has(componentUid) === true) {\n // Circular reference — fall back to permissive but non-empty JSON Schema\n return z.record(z.string(), z.unknown());\n }\n\n type ComponentEntry = { attributes: Record<string, Schema.Attribute.AnyAttribute> };\n const componentsMap = strapi.components as unknown as Record<string, ComponentEntry | undefined>;\n const component = componentsMap[componentUid];\n if (component === undefined) {\n return z.record(z.string(), z.unknown());\n }\n\n visited.add(componentUid);\n\n const shape: Record<string, z.ZodTypeAny> = {};\n for (const [key, attr] of Object.entries(component.attributes)) {\n if (key === 'id') {\n // eslint-disable-next-line no-continue\n continue;\n }\n shape[key] = attributeToInputSchema(strapi, attr, visited);\n }\n\n visited.delete(componentUid);\n\n return z.object(shape).strict();\n}\n\n/**\n * Maps a single Strapi attribute to a Zod input schema, carrying constraints\n * (min, max, minLength, maxLength, required, enum values, etc.).\n *\n * Mirrors the `mapAttributeToInputSchema` logic from\n * `packages/core/core/src/core-api/routes/validation/mappers.ts` — kept inline\n * here to avoid a cross-package import from @strapi/content-manager into\n * @strapi/core (which is not a listed dependency).\n *\n */\nexport const attributeToInputSchema = (\n strapi: Core.Strapi,\n attr: Schema.Attribute.AnyAttribute,\n visited: Set<string> = new Set()\n): z.ZodTypeAny => {\n switch (attr.type) {\n case 'string':\n case 'text':\n case 'richtext':\n case 'password': {\n const { required, minLength, maxLength } = attr as Schema.Attribute.String;\n let s: z.ZodString = z.string();\n if (minLength !== undefined) s = s.min(minLength);\n if (maxLength !== undefined) s = s.max(maxLength);\n return required === true ? s : s.optional();\n }\n case 'email': {\n const { required } = attr as Schema.Attribute.Email;\n const s = z.string().email();\n return required === true ? s : s.optional();\n }\n case 'uid': {\n const { required } = attr as Schema.Attribute.UID;\n const s = z.string();\n return required === true ? s : s.optional();\n }\n case 'integer': {\n const { required, min, max } = attr as Schema.Attribute.Integer;\n let s = z.number().int();\n if (min !== undefined) s = s.min(min);\n if (max !== undefined) s = s.max(max);\n return required === true ? s : s.optional();\n }\n case 'biginteger': {\n const { required } = attr as Schema.Attribute.BigInteger;\n const s = z.string();\n return required === true ? s : s.optional();\n }\n case 'decimal':\n case 'float': {\n const { required, min, max } = attr as Schema.Attribute.Decimal;\n let s = z.number();\n if (min !== undefined) s = s.min(min);\n if (max !== undefined) s = s.max(max);\n return required === true ? s : s.optional();\n }\n case 'boolean': {\n const { required } = attr as Schema.Attribute.Boolean;\n const s = z.boolean();\n return required === true ? s : s.optional();\n }\n case 'date':\n case 'datetime':\n case 'time':\n case 'timestamp': {\n const { required } = attr as Schema.Attribute.Date;\n const s = z.string();\n return required === true ? s : s.optional();\n }\n case 'enumeration': {\n const { required, enum: values } = attr as Schema.Attribute.Enumeration<string[]>;\n if (Array.isArray(values) && values.length > 0) {\n const s = z.enum(values as [string, ...string[]]);\n return required === true ? s : s.optional();\n }\n const s = z.string();\n return required === true ? s : s.optional();\n }\n case 'json': {\n const { required } = attr as Schema.Attribute.JSON;\n const s = z.any();\n return required === true ? s : s.optional();\n }\n case 'blocks': {\n const { required } = attr as Schema.Attribute.Blocks;\n const s = buildBlocksInputSchema();\n return required === true ? s : s.optional();\n }\n case 'component': {\n // Cast to a plain record to avoid generic defaults on `repeatable` (Constants.False)\n const componentAttr = attr as unknown as {\n required?: boolean;\n repeatable?: boolean;\n component?: string;\n min?: number;\n max?: number;\n };\n const componentUid = componentAttr.component;\n const componentSchema: z.ZodTypeAny =\n componentUid !== undefined\n ? buildComponentInputSchema(strapi, componentUid, visited)\n : z.record(z.string(), z.unknown());\n\n let s: z.ZodTypeAny =\n componentAttr.repeatable === true ? z.array(componentSchema) : componentSchema;\n if (componentAttr.repeatable === true && componentAttr.min !== undefined) {\n s = (s as z.ZodArray<z.ZodTypeAny>).min(componentAttr.min);\n }\n if (componentAttr.repeatable === true && componentAttr.max !== undefined) {\n s = (s as z.ZodArray<z.ZodTypeAny>).max(componentAttr.max);\n }\n return componentAttr.required === true ? s : s.optional();\n }\n case 'dynamiczone': {\n const dzAttr = attr as unknown as { required?: boolean; min?: number; max?: number };\n let s = z.array(z.any());\n if (dzAttr.min !== undefined) s = (s as z.ZodArray<z.ZodAny>).min(dzAttr.min);\n if (dzAttr.max !== undefined) s = (s as z.ZodArray<z.ZodAny>).max(dzAttr.max);\n return dzAttr.required === true ? s : s.optional();\n }\n case 'media': {\n const mediaAttr = attr as unknown as { required?: boolean; multiple?: boolean };\n const s = mediaAttr.multiple === true ? z.array(z.any()) : z.any();\n return mediaAttr.required === true ? s : s.optional();\n }\n case 'relation': {\n const relAttr = attr as Schema.Attribute.Relation;\n const isToMany = relAttr.relation?.endsWith('ToMany') === true;\n\n const relDocumentId = z\n .string()\n .min(1)\n .describe('Strapi document ID (e.g. \"z7v8zma53x01r6oceimv922b\").');\n\n const relLongHand = z\n .object({\n documentId: relDocumentId,\n locale: z\n .string()\n .optional()\n .describe('Target locale. Defaults to source document locale.'),\n status: z\n .enum(['draft', 'published'])\n .optional()\n .describe('Target version status. Defaults based on draftAndPublish config.'),\n })\n .strict();\n\n let s: z.ZodTypeAny;\n\n if (isToMany === true) {\n const relEntry = z.union([relDocumentId, relLongHand]);\n\n const relConnectPosition = z\n .object({\n before: z.string().optional().describe('Document ID to insert before.'),\n after: z.string().optional().describe('Document ID to insert after.'),\n start: z.boolean().optional().describe('Insert at start of list.'),\n end: z.boolean().optional().describe('Insert at end of list (default).'),\n })\n .strict();\n\n const relConnectEntry = z\n .object({\n documentId: relDocumentId,\n locale: z.string().optional(),\n status: z.enum(['draft', 'published']).optional(),\n position: relConnectPosition\n .optional()\n .describe('Ordering hint. Default: { end: true }.'),\n })\n .strict();\n\n s = z\n .object({\n connect: z\n .array(z.union([relDocumentId, relConnectEntry]))\n .optional()\n .describe(\n 'Add relations. Each entry: documentId string, or { documentId, locale?, status?, position? }.'\n ),\n disconnect: z\n .array(relEntry)\n .optional()\n .describe(\n 'Remove relations. Each entry: documentId string, or { documentId, locale?, status? }.'\n ),\n set: z\n .union([z.array(relEntry), z.null()])\n .optional()\n .describe(\n 'Replace all relations. Array replaces existing; null clears all. Mutually exclusive with connect/disconnect.'\n ),\n })\n .strict();\n } else {\n s = z.union([\n relDocumentId,\n relLongHand,\n z.null().describe('Set to null to clear the relation.'),\n ]);\n }\n\n return relAttr.required === true ? s : s.optional();\n }\n default: {\n const unknownAttr: unknown = attr;\n if (isCustomFieldAttribute(unknownAttr)) {\n const customField = strapi.get('custom-fields').get(unknownAttr.customField);\n if (customField !== undefined) {\n return attributeToInputSchema(\n strapi,\n {\n ...unknownAttr,\n type: customField.type,\n } as unknown as Schema.Attribute.AnyAttribute,\n visited\n );\n }\n }\n return z.unknown();\n }\n }\n};\n\n/**\n * Derives a per-content-type `data` Zod schema from the model's writable attributes.\n * Uses `contentTypes.isWritableAttribute` to filter system-managed keys\n * (id, documentId, timestamps, createdBy, updatedBy, localizations, locale, etc.).\n * Unknown keys are rejected (strict mode) — invalid field names fail at the MCP boundary.\n */\nexport const buildDataSchema = (\n strapi: Core.Strapi,\n schema: Struct.ContentTypeSchema | ContentManagerModelForMcp,\n attributes: Struct.SchemaAttributes,\n permittedFields?: Set<string> | null\n): z.ZodTypeAny => {\n const shape: Record<string, z.ZodTypeAny> = {};\n\n for (const [key, attr] of Object.entries(attributes)) {\n const isPermitted =\n permittedFields === null ||\n permittedFields === undefined ||\n permittedFields.has(key) === true;\n\n if (\n isPermitted === true &&\n contentTypes.isWritableAttribute(schema as Struct.ContentTypeSchema, key) === true &&\n contentTypes.isPrivateAttribute(schema as Struct.ContentTypeSchema, key) !== true\n ) {\n shape[key] = attributeToInputSchema(strapi, attr);\n }\n }\n\n return z.object(shape).strict().describe('Document field values to write.');\n};\n"],"names":["isCustomFieldAttribute","attr","type","customField","buildComponentInputSchema","strapi","componentUid","visited","Set","has","z","record","string","unknown","componentsMap","components","component","undefined","add","shape","key","Object","entries","attributes","attributeToInputSchema","delete","object","strict","required","minLength","maxLength","s","min","max","optional","email","number","int","boolean","enum","values","Array","isArray","length","any","buildBlocksInputSchema","componentAttr","componentSchema","repeatable","array","dzAttr","mediaAttr","multiple","relAttr","isToMany","relation","endsWith","relDocumentId","describe","relLongHand","documentId","locale","status","relEntry","union","relConnectPosition","before","after","start","end","relConnectEntry","position","connect","disconnect","set","null","unknownAttr","get","buildDataSchema","schema","permittedFields","isPermitted","contentTypes","isWritableAttribute","isPrivateAttribute"],"mappings":";;;AAYA,MAAMA,yBAAyB,CAACC,IAAAA,GAC9B,OAAOA,IAAAA,KAAS,YAChBA,IAAAA,KAAS,IAAA,IACT,IAACA,CAAiCC,IAAI,KAAK,aAAA,IAC3C,OAAO,IAACD,CAAiCE,WAAW,KAAK,QAAA;AAE3D;;;;;;;;;IAUO,SAASC,yBAAAA,CACdC,MAAmB,EACnBC,YAAoB,EACpBC,OAAAA,GAAuB,IAAIC,GAAAA,EAAK,EAAA;AAEhC,IAAA,IAAID,OAAAA,CAAQE,GAAG,CAACH,YAAAA,CAAAA,KAAkB,IAAA,EAAM;;AAEtC,QAAA,OAAOI,EAAEC,MAAM,CAACD,EAAEE,MAAM,EAAA,EAAIF,EAAEG,OAAO,EAAA,CAAA;AACvC,IAAA;IAGA,MAAMC,aAAAA,GAAgBT,OAAOU,UAAU;IACvC,MAAMC,SAAAA,GAAYF,aAAa,CAACR,YAAAA,CAAa;AAC7C,IAAA,IAAIU,cAAcC,SAAAA,EAAW;AAC3B,QAAA,OAAOP,EAAEC,MAAM,CAACD,EAAEE,MAAM,EAAA,EAAIF,EAAEG,OAAO,EAAA,CAAA;AACvC,IAAA;AAEAN,IAAAA,OAAAA,CAAQW,GAAG,CAACZ,YAAAA,CAAAA;AAEZ,IAAA,MAAMa,QAAsC,EAAC;IAC7C,KAAK,MAAM,CAACC,GAAAA,EAAKnB,IAAAA,CAAK,IAAIoB,OAAOC,OAAO,CAACN,SAAAA,CAAUO,UAAU,CAAA,CAAG;AAC9D,QAAA,IAAIH,QAAQ,IAAA,EAAM;AAEhB,YAAA;AACF,QAAA;AACAD,QAAAA,KAAK,CAACC,GAAAA,CAAI,GAAGI,sBAAAA,CAAuBnB,QAAQJ,IAAAA,EAAMM,OAAAA,CAAAA;AACpD,IAAA;AAEAA,IAAAA,OAAAA,CAAQkB,MAAM,CAACnB,YAAAA,CAAAA;AAEf,IAAA,OAAOI,CAAAA,CAAEgB,MAAM,CAACP,KAAAA,CAAAA,CAAOQ,MAAM,EAAA;AAC/B;AAEA;;;;;;;;;UAUaH,sBAAAA,GAAyB,CACpCnB,QACAJ,IAAAA,EACAM,OAAAA,GAAuB,IAAIC,GAAAA,EAAK,GAAA;AAEhC,IAAA,OAAQP,KAAKC,IAAI;QACf,KAAK,QAAA;QACL,KAAK,MAAA;QACL,KAAK,UAAA;QACL,KAAK,UAAA;AAAY,YAAA;AACf,gBAAA,MAAM,EAAE0B,QAAQ,EAAEC,SAAS,EAAEC,SAAS,EAAE,GAAG7B,IAAAA;gBAC3C,IAAI8B,CAAAA,GAAiBrB,EAAEE,MAAM,EAAA;AAC7B,gBAAA,IAAIiB,SAAAA,KAAcZ,SAAAA,EAAWc,CAAAA,GAAIA,CAAAA,CAAEC,GAAG,CAACH,SAAAA,CAAAA;AACvC,gBAAA,IAAIC,SAAAA,KAAcb,SAAAA,EAAWc,CAAAA,GAAIA,CAAAA,CAAEE,GAAG,CAACH,SAAAA,CAAAA;AACvC,gBAAA,OAAOF,QAAAA,KAAa,IAAA,GAAOG,CAAAA,GAAIA,CAAAA,CAAEG,QAAQ,EAAA;AAC3C,YAAA;QACA,KAAK,OAAA;AAAS,YAAA;gBACZ,MAAM,EAAEN,QAAQ,EAAE,GAAG3B,IAAAA;AACrB,gBAAA,MAAM8B,CAAAA,GAAIrB,CAAAA,CAAEE,MAAM,EAAA,CAAGuB,KAAK,EAAA;AAC1B,gBAAA,OAAOP,QAAAA,KAAa,IAAA,GAAOG,CAAAA,GAAIA,CAAAA,CAAEG,QAAQ,EAAA;AAC3C,YAAA;QACA,KAAK,KAAA;AAAO,YAAA;gBACV,MAAM,EAAEN,QAAQ,EAAE,GAAG3B,IAAAA;gBACrB,MAAM8B,CAAAA,GAAIrB,EAAEE,MAAM,EAAA;AAClB,gBAAA,OAAOgB,QAAAA,KAAa,IAAA,GAAOG,CAAAA,GAAIA,CAAAA,CAAEG,QAAQ,EAAA;AAC3C,YAAA;QACA,KAAK,SAAA;AAAW,YAAA;AACd,gBAAA,MAAM,EAAEN,QAAQ,EAAEI,GAAG,EAAEC,GAAG,EAAE,GAAGhC,IAAAA;AAC/B,gBAAA,IAAI8B,CAAAA,GAAIrB,CAAAA,CAAE0B,MAAM,EAAA,CAAGC,GAAG,EAAA;AACtB,gBAAA,IAAIL,GAAAA,KAAQf,SAAAA,EAAWc,CAAAA,GAAIA,CAAAA,CAAEC,GAAG,CAACA,GAAAA,CAAAA;AACjC,gBAAA,IAAIC,GAAAA,KAAQhB,SAAAA,EAAWc,CAAAA,GAAIA,CAAAA,CAAEE,GAAG,CAACA,GAAAA,CAAAA;AACjC,gBAAA,OAAOL,QAAAA,KAAa,IAAA,GAAOG,CAAAA,GAAIA,CAAAA,CAAEG,QAAQ,EAAA;AAC3C,YAAA;QACA,KAAK,YAAA;AAAc,YAAA;gBACjB,MAAM,EAAEN,QAAQ,EAAE,GAAG3B,IAAAA;gBACrB,MAAM8B,CAAAA,GAAIrB,EAAEE,MAAM,EAAA;AAClB,gBAAA,OAAOgB,QAAAA,KAAa,IAAA,GAAOG,CAAAA,GAAIA,CAAAA,CAAEG,QAAQ,EAAA;AAC3C,YAAA;QACA,KAAK,SAAA;QACL,KAAK,OAAA;AAAS,YAAA;AACZ,gBAAA,MAAM,EAAEN,QAAQ,EAAEI,GAAG,EAAEC,GAAG,EAAE,GAAGhC,IAAAA;gBAC/B,IAAI8B,CAAAA,GAAIrB,EAAE0B,MAAM,EAAA;AAChB,gBAAA,IAAIJ,GAAAA,KAAQf,SAAAA,EAAWc,CAAAA,GAAIA,CAAAA,CAAEC,GAAG,CAACA,GAAAA,CAAAA;AACjC,gBAAA,IAAIC,GAAAA,KAAQhB,SAAAA,EAAWc,CAAAA,GAAIA,CAAAA,CAAEE,GAAG,CAACA,GAAAA,CAAAA;AACjC,gBAAA,OAAOL,QAAAA,KAAa,IAAA,GAAOG,CAAAA,GAAIA,CAAAA,CAAEG,QAAQ,EAAA;AAC3C,YAAA;QACA,KAAK,SAAA;AAAW,YAAA;gBACd,MAAM,EAAEN,QAAQ,EAAE,GAAG3B,IAAAA;gBACrB,MAAM8B,CAAAA,GAAIrB,EAAE4B,OAAO,EAAA;AACnB,gBAAA,OAAOV,QAAAA,KAAa,IAAA,GAAOG,CAAAA,GAAIA,CAAAA,CAAEG,QAAQ,EAAA;AAC3C,YAAA;QACA,KAAK,MAAA;QACL,KAAK,UAAA;QACL,KAAK,MAAA;QACL,KAAK,WAAA;AAAa,YAAA;gBAChB,MAAM,EAAEN,QAAQ,EAAE,GAAG3B,IAAAA;gBACrB,MAAM8B,CAAAA,GAAIrB,EAAEE,MAAM,EAAA;AAClB,gBAAA,OAAOgB,QAAAA,KAAa,IAAA,GAAOG,CAAAA,GAAIA,CAAAA,CAAEG,QAAQ,EAAA;AAC3C,YAAA;QACA,KAAK,aAAA;AAAe,YAAA;AAClB,gBAAA,MAAM,EAAEN,QAAQ,EAAEW,IAAAA,EAAMC,MAAM,EAAE,GAAGvC,IAAAA;AACnC,gBAAA,IAAIwC,MAAMC,OAAO,CAACF,WAAWA,MAAAA,CAAOG,MAAM,GAAG,CAAA,EAAG;oBAC9C,MAAMZ,CAAAA,GAAIrB,CAAAA,CAAE6B,IAAI,CAACC,MAAAA,CAAAA;AACjB,oBAAA,OAAOZ,QAAAA,KAAa,IAAA,GAAOG,CAAAA,GAAIA,CAAAA,CAAEG,QAAQ,EAAA;AAC3C,gBAAA;gBACA,MAAMH,CAAAA,GAAIrB,EAAEE,MAAM,EAAA;AAClB,gBAAA,OAAOgB,QAAAA,KAAa,IAAA,GAAOG,CAAAA,GAAIA,CAAAA,CAAEG,QAAQ,EAAA;AAC3C,YAAA;QACA,KAAK,MAAA;AAAQ,YAAA;gBACX,MAAM,EAAEN,QAAQ,EAAE,GAAG3B,IAAAA;gBACrB,MAAM8B,CAAAA,GAAIrB,EAAEkC,GAAG,EAAA;AACf,gBAAA,OAAOhB,QAAAA,KAAa,IAAA,GAAOG,CAAAA,GAAIA,CAAAA,CAAEG,QAAQ,EAAA;AAC3C,YAAA;QACA,KAAK,QAAA;AAAU,YAAA;gBACb,MAAM,EAAEN,QAAQ,EAAE,GAAG3B,IAAAA;AACrB,gBAAA,MAAM8B,CAAAA,GAAIc,sBAAAA,EAAAA;AACV,gBAAA,OAAOjB,QAAAA,KAAa,IAAA,GAAOG,CAAAA,GAAIA,CAAAA,CAAEG,QAAQ,EAAA;AAC3C,YAAA;QACA,KAAK,WAAA;AAAa,YAAA;;AAEhB,gBAAA,MAAMY,aAAAA,GAAgB7C,IAAAA;gBAOtB,MAAMK,YAAAA,GAAewC,cAAc9B,SAAS;AAC5C,gBAAA,MAAM+B,eAAAA,GACJzC,YAAAA,KAAiBW,SAAAA,GACbb,yBAAAA,CAA0BC,QAAQC,YAAAA,EAAcC,OAAAA,CAAAA,GAChDG,CAAAA,CAAEC,MAAM,CAACD,CAAAA,CAAEE,MAAM,EAAA,EAAIF,EAAEG,OAAO,EAAA,CAAA;gBAEpC,IAAIkB,CAAAA,GACFe,cAAcE,UAAU,KAAK,OAAOtC,CAAAA,CAAEuC,KAAK,CAACF,eAAAA,CAAAA,GAAmBA,eAAAA;AACjE,gBAAA,IAAID,cAAcE,UAAU,KAAK,QAAQF,aAAAA,CAAcd,GAAG,KAAKf,SAAAA,EAAW;AACxEc,oBAAAA,CAAAA,GAAI,CAACA,CAA+BC,GAAG,CAACc,cAAcd,GAAG,CAAA;AAC3D,gBAAA;AACA,gBAAA,IAAIc,cAAcE,UAAU,KAAK,QAAQF,aAAAA,CAAcb,GAAG,KAAKhB,SAAAA,EAAW;AACxEc,oBAAAA,CAAAA,GAAI,CAACA,CAA+BE,GAAG,CAACa,cAAcb,GAAG,CAAA;AAC3D,gBAAA;AACA,gBAAA,OAAOa,cAAclB,QAAQ,KAAK,IAAA,GAAOG,CAAAA,GAAIA,EAAEG,QAAQ,EAAA;AACzD,YAAA;QACA,KAAK,aAAA;AAAe,YAAA;AAClB,gBAAA,MAAMgB,MAAAA,GAASjD,IAAAA;AACf,gBAAA,IAAI8B,CAAAA,GAAIrB,CAAAA,CAAEuC,KAAK,CAACvC,EAAEkC,GAAG,EAAA,CAAA;gBACrB,IAAIM,MAAAA,CAAOlB,GAAG,KAAKf,SAAAA,EAAWc,CAAAA,GAAI,CAACA,CAA2BC,GAAG,CAACkB,MAAAA,CAAOlB,GAAG,CAAA;gBAC5E,IAAIkB,MAAAA,CAAOjB,GAAG,KAAKhB,SAAAA,EAAWc,CAAAA,GAAI,CAACA,CAA2BE,GAAG,CAACiB,MAAAA,CAAOjB,GAAG,CAAA;AAC5E,gBAAA,OAAOiB,OAAOtB,QAAQ,KAAK,IAAA,GAAOG,CAAAA,GAAIA,EAAEG,QAAQ,EAAA;AAClD,YAAA;QACA,KAAK,OAAA;AAAS,YAAA;AACZ,gBAAA,MAAMiB,SAAAA,GAAYlD,IAAAA;AAClB,gBAAA,MAAM8B,CAAAA,GAAIoB,SAAAA,CAAUC,QAAQ,KAAK,IAAA,GAAO1C,CAAAA,CAAEuC,KAAK,CAACvC,CAAAA,CAAEkC,GAAG,EAAA,CAAA,GAAMlC,CAAAA,CAAEkC,GAAG,EAAA;AAChE,gBAAA,OAAOO,UAAUvB,QAAQ,KAAK,IAAA,GAAOG,CAAAA,GAAIA,EAAEG,QAAQ,EAAA;AACrD,YAAA;QACA,KAAK,UAAA;AAAY,YAAA;AACf,gBAAA,MAAMmB,OAAAA,GAAUpD,IAAAA;AAChB,gBAAA,MAAMqD,QAAAA,GAAWD,OAAAA,CAAQE,QAAQ,EAAEC,SAAS,QAAA,CAAA,KAAc,IAAA;gBAE1D,MAAMC,aAAAA,GAAgB/C,EACnBE,MAAM,EAAA,CACNoB,GAAG,CAAC,CAAA,CAAA,CACJ0B,QAAQ,CAAC,uDAAA,CAAA;gBAEZ,MAAMC,WAAAA,GAAcjD,CAAAA,CACjBgB,MAAM,CAAC;oBACNkC,UAAAA,EAAYH,aAAAA;AACZI,oBAAAA,MAAAA,EAAQnD,EACLE,MAAM,EAAA,CACNsB,QAAQ,EAAA,CACRwB,QAAQ,CAAC,oDAAA,CAAA;oBACZI,MAAAA,EAAQpD,CAAAA,CACL6B,IAAI,CAAC;AAAC,wBAAA,OAAA;AAAS,wBAAA;qBAAY,CAAA,CAC3BL,QAAQ,EAAA,CACRwB,QAAQ,CAAC,kEAAA;AACd,iBAAA,CAAA,CACC/B,MAAM,EAAA;gBAET,IAAII,CAAAA;AAEJ,gBAAA,IAAIuB,aAAa,IAAA,EAAM;oBACrB,MAAMS,QAAAA,GAAWrD,CAAAA,CAAEsD,KAAK,CAAC;AAACP,wBAAAA,aAAAA;AAAeE,wBAAAA;AAAY,qBAAA,CAAA;oBAErD,MAAMM,kBAAAA,GAAqBvD,CAAAA,CACxBgB,MAAM,CAAC;AACNwC,wBAAAA,MAAAA,EAAQxD,EAAEE,MAAM,EAAA,CAAGsB,QAAQ,EAAA,CAAGwB,QAAQ,CAAC,+BAAA,CAAA;AACvCS,wBAAAA,KAAAA,EAAOzD,EAAEE,MAAM,EAAA,CAAGsB,QAAQ,EAAA,CAAGwB,QAAQ,CAAC,8BAAA,CAAA;AACtCU,wBAAAA,KAAAA,EAAO1D,EAAE4B,OAAO,EAAA,CAAGJ,QAAQ,EAAA,CAAGwB,QAAQ,CAAC,0BAAA,CAAA;AACvCW,wBAAAA,GAAAA,EAAK3D,EAAE4B,OAAO,EAAA,CAAGJ,QAAQ,EAAA,CAAGwB,QAAQ,CAAC,kCAAA;AACvC,qBAAA,CAAA,CACC/B,MAAM,EAAA;oBAET,MAAM2C,eAAAA,GAAkB5D,CAAAA,CACrBgB,MAAM,CAAC;wBACNkC,UAAAA,EAAYH,aAAAA;wBACZI,MAAAA,EAAQnD,CAAAA,CAAEE,MAAM,EAAA,CAAGsB,QAAQ,EAAA;wBAC3B4B,MAAAA,EAAQpD,CAAAA,CAAE6B,IAAI,CAAC;AAAC,4BAAA,OAAA;AAAS,4BAAA;AAAY,yBAAA,CAAA,CAAEL,QAAQ,EAAA;AAC/CqC,wBAAAA,QAAAA,EAAUN,kBAAAA,CACP/B,QAAQ,EAAA,CACRwB,QAAQ,CAAC,wCAAA;AACd,qBAAA,CAAA,CACC/B,MAAM,EAAA;oBAETI,CAAAA,GAAIrB,CAAAA,CACDgB,MAAM,CAAC;AACN8C,wBAAAA,OAAAA,EAAS9D,CAAAA,CACNuC,KAAK,CAACvC,CAAAA,CAAEsD,KAAK,CAAC;AAACP,4BAAAA,aAAAA;AAAea,4BAAAA;yBAAgB,CAAA,CAAA,CAC9CpC,QAAQ,EAAA,CACRwB,QAAQ,CACP,+FAAA,CAAA;AAEJe,wBAAAA,UAAAA,EAAY/D,EACTuC,KAAK,CAACc,UACN7B,QAAQ,EAAA,CACRwB,QAAQ,CACP,uFAAA,CAAA;wBAEJgB,GAAAA,EAAKhE,CAAAA,CACFsD,KAAK,CAAC;AAACtD,4BAAAA,CAAAA,CAAEuC,KAAK,CAACc,QAAAA,CAAAA;AAAWrD,4BAAAA,CAAAA,CAAEiE,IAAI;yBAAG,CAAA,CACnCzC,QAAQ,EAAA,CACRwB,QAAQ,CACP,8GAAA;AAEN,qBAAA,CAAA,CACC/B,MAAM,EAAA;gBACX,CAAA,MAAO;oBACLI,CAAAA,GAAIrB,CAAAA,CAAEsD,KAAK,CAAC;AACVP,wBAAAA,aAAAA;AACAE,wBAAAA,WAAAA;wBACAjD,CAAAA,CAAEiE,IAAI,EAAA,CAAGjB,QAAQ,CAAC,oCAAA;AACnB,qBAAA,CAAA;AACH,gBAAA;AAEA,gBAAA,OAAOL,QAAQzB,QAAQ,KAAK,IAAA,GAAOG,CAAAA,GAAIA,EAAEG,QAAQ,EAAA;AACnD,YAAA;AACA,QAAA;AAAS,YAAA;AACP,gBAAA,MAAM0C,WAAAA,GAAuB3E,IAAAA;AAC7B,gBAAA,IAAID,uBAAuB4E,WAAAA,CAAAA,EAAc;oBACvC,MAAMzE,WAAAA,GAAcE,OAAOwE,GAAG,CAAC,iBAAiBA,GAAG,CAACD,YAAYzE,WAAW,CAAA;AAC3E,oBAAA,IAAIA,gBAAgBc,SAAAA,EAAW;AAC7B,wBAAA,OAAOO,uBACLnB,MAAAA,EACA;AACE,4BAAA,GAAGuE,WAAW;AACd1E,4BAAAA,IAAAA,EAAMC,YAAYD;yBACpB,EACAK,OAAAA,CAAAA;AAEJ,oBAAA;AACF,gBAAA;AACA,gBAAA,OAAOG,EAAEG,OAAO,EAAA;AAClB,YAAA;AACF;AACF;AAEA;;;;;AAKC,IACM,MAAMiE,eAAAA,GAAkB,CAC7BzE,MAAAA,EACA0E,QACAxD,UAAAA,EACAyD,eAAAA,GAAAA;AAEA,IAAA,MAAM7D,QAAsC,EAAC;IAE7C,KAAK,MAAM,CAACC,GAAAA,EAAKnB,IAAAA,CAAK,IAAIoB,MAAAA,CAAOC,OAAO,CAACC,UAAAA,CAAAA,CAAa;QACpD,MAAM0D,WAAAA,GACJD,oBAAoB,IAAA,IACpBA,eAAAA,KAAoB/D,aACpB+D,eAAAA,CAAgBvE,GAAG,CAACW,GAAAA,CAAAA,KAAS,IAAA;AAE/B,QAAA,IACE6D,WAAAA,KAAgB,IAAA,IAChBC,YAAAA,CAAaC,mBAAmB,CAACJ,MAAAA,EAAoC3D,GAAAA,CAAAA,KAAS,IAAA,IAC9E8D,YAAAA,CAAaE,kBAAkB,CAACL,MAAAA,EAAoC3D,SAAS,IAAA,EAC7E;AACAD,YAAAA,KAAK,CAACC,GAAAA,CAAI,GAAGI,sBAAAA,CAAuBnB,MAAAA,EAAQJ,IAAAA,CAAAA;AAC9C,QAAA;AACF,IAAA;AAEA,IAAA,OAAOS,EAAEgB,MAAM,CAACP,OAAOQ,MAAM,EAAA,CAAG+B,QAAQ,CAAC,iCAAA,CAAA;AAC3C;;;;"}
1
+ {"version":3,"file":"data-schema.mjs","sources":["../../../../server/src/mcp/schemas/data-schema.ts"],"sourcesContent":["import { contentTypes, z } from '@strapi/utils';\nimport type { Core, Schema, Struct } from '@strapi/types';\n\nimport { buildBlocksInputSchema } from './blocks-schema';\nimport type { ContentManagerModelForMcp } from '../types';\n\ntype CustomFieldAttribute = {\n type: 'customField';\n customField: string;\n [key: string]: unknown;\n};\n\nconst isCustomFieldAttribute = (attr: unknown): attr is CustomFieldAttribute =>\n typeof attr === 'object' &&\n attr !== null &&\n (attr as Record<string, unknown>).type === 'customField' &&\n typeof (attr as Record<string, unknown>).customField === 'string';\n\n/**\n * Builds a structured Zod object schema for a Strapi component UID.\n * Declared as a regular function so it is hoisted above `attributeToInputSchema`\n * — the two functions are mutually recursive (component attrs recurse into\n * attributeToInputSchema; attributeToInputSchema calls this for 'component' cases).\n *\n * @param strapi - Strapi instance (components registry available post-load).\n * @param componentUid - e.g. \"common.seo\".\n * @param visited - cycle-guard; prevents infinite recursion on self-referencing components.\n */\nexport function buildComponentInputSchema(\n strapi: Core.Strapi,\n componentUid: string,\n visited: Set<string> = new Set()\n): z.ZodTypeAny {\n if (visited.has(componentUid) === true) {\n // Circular reference — fall back to permissive but non-empty JSON Schema\n return z.record(z.string(), z.unknown());\n }\n\n type ComponentEntry = { attributes: Record<string, Schema.Attribute.AnyAttribute> };\n const componentsMap = strapi.components as unknown as Record<string, ComponentEntry | undefined>;\n const component = componentsMap[componentUid];\n if (component === undefined) {\n return z.record(z.string(), z.unknown());\n }\n\n visited.add(componentUid);\n\n const shape: Record<string, z.ZodTypeAny> = {};\n for (const [key, attr] of Object.entries(component.attributes)) {\n if (key === 'id') {\n // eslint-disable-next-line no-continue\n continue;\n }\n shape[key] = attributeToInputSchema(strapi, attr, visited);\n }\n\n visited.delete(componentUid);\n\n return z.object(shape).strict();\n}\n\n/**\n * Maps a single Strapi attribute to a Zod input schema, carrying constraints\n * (min, max, minLength, maxLength, required, enum values, etc.).\n *\n * Mirrors the `mapAttributeToInputSchema` logic from\n * `packages/core/core/src/core-api/routes/validation/mappers.ts` — kept inline\n * here to avoid a cross-package import from @strapi/content-manager into\n * @strapi/core (which is not a listed dependency).\n *\n */\nexport const attributeToInputSchema = (\n strapi: Core.Strapi,\n attr: Schema.Attribute.AnyAttribute,\n visited: Set<string> = new Set()\n): z.ZodTypeAny => {\n switch (attr.type) {\n case 'string':\n case 'text':\n case 'richtext':\n case 'password': {\n const { required, minLength, maxLength } = attr as Schema.Attribute.String;\n let s: z.ZodString = z.string();\n if (minLength !== undefined) s = s.min(minLength);\n if (maxLength !== undefined) s = s.max(maxLength);\n return required === true ? s : s.optional();\n }\n case 'email': {\n const { required } = attr as Schema.Attribute.Email;\n const s = z.string().email();\n return required === true ? s : s.optional();\n }\n case 'uid': {\n const { required } = attr as Schema.Attribute.UID;\n const s = z.string();\n return required === true ? s : s.optional();\n }\n case 'integer': {\n const { required, min, max } = attr as Schema.Attribute.Integer;\n let s = z.number().int();\n if (min !== undefined) s = s.min(min);\n if (max !== undefined) s = s.max(max);\n return required === true ? s : s.optional();\n }\n case 'biginteger': {\n const { required } = attr as Schema.Attribute.BigInteger;\n const s = z.string();\n return required === true ? s : s.optional();\n }\n case 'decimal':\n case 'float': {\n const { required, min, max } = attr as Schema.Attribute.Decimal;\n let s = z.number();\n if (min !== undefined) s = s.min(min);\n if (max !== undefined) s = s.max(max);\n return required === true ? s : s.optional();\n }\n case 'boolean': {\n const { required } = attr as Schema.Attribute.Boolean;\n const s = z.boolean();\n return required === true ? s : s.optional();\n }\n case 'date':\n case 'datetime':\n case 'time':\n case 'timestamp': {\n const { required } = attr as Schema.Attribute.Date;\n const s = z.string();\n return required === true ? s : s.optional();\n }\n case 'enumeration': {\n const { required, enum: values } = attr as Schema.Attribute.Enumeration<string[]>;\n if (Array.isArray(values) && values.length > 0) {\n const s = z.enum(values as [string, ...string[]]);\n return required === true ? s : s.optional();\n }\n const s = z.string();\n return required === true ? s : s.optional();\n }\n case 'json': {\n const { required } = attr as Schema.Attribute.JSON;\n const s = z.any();\n return required === true ? s : s.optional();\n }\n case 'blocks': {\n const { required } = attr as Schema.Attribute.Blocks;\n const s = buildBlocksInputSchema();\n return required === true ? s : s.optional();\n }\n case 'component': {\n // Cast to a plain record to avoid generic defaults on `repeatable` (Constants.False)\n const componentAttr = attr as unknown as {\n required?: boolean;\n repeatable?: boolean;\n component?: string;\n min?: number;\n max?: number;\n };\n const componentUid = componentAttr.component;\n const componentSchema: z.ZodTypeAny =\n componentUid !== undefined\n ? buildComponentInputSchema(strapi, componentUid, visited)\n : z.record(z.string(), z.unknown());\n\n let s: z.ZodTypeAny =\n componentAttr.repeatable === true ? z.array(componentSchema) : componentSchema;\n if (componentAttr.repeatable === true && componentAttr.min !== undefined) {\n s = (s as z.ZodArray<z.ZodTypeAny>).min(componentAttr.min);\n }\n if (componentAttr.repeatable === true && componentAttr.max !== undefined) {\n s = (s as z.ZodArray<z.ZodTypeAny>).max(componentAttr.max);\n }\n return componentAttr.required === true ? s : s.optional();\n }\n case 'dynamiczone': {\n const dzAttr = attr as unknown as { required?: boolean; min?: number; max?: number };\n let s = z.array(z.any());\n if (dzAttr.min !== undefined) s = (s as z.ZodArray<z.ZodAny>).min(dzAttr.min);\n if (dzAttr.max !== undefined) s = (s as z.ZodArray<z.ZodAny>).max(dzAttr.max);\n return dzAttr.required === true ? s : s.optional();\n }\n case 'media': {\n const mediaAttr = attr as unknown as { required?: boolean; multiple?: boolean };\n const s = mediaAttr.multiple === true ? z.array(z.any()) : z.any();\n return mediaAttr.required === true ? s : s.optional();\n }\n case 'relation': {\n const relAttr = attr as Schema.Attribute.Relation;\n const isToMany = relAttr.relation?.endsWith('ToMany') === true;\n\n const relDocumentId = z\n .string()\n .min(1)\n .describe('Strapi document ID (e.g. \"z7v8zma53x01r6oceimv922b\").');\n\n const relLongHand = z\n .object({\n documentId: relDocumentId,\n locale: z\n .string()\n .optional()\n .describe('Target locale. Defaults to source document locale.'),\n status: z\n .enum(['draft', 'published'])\n .optional()\n .describe('Target version status. Defaults based on draftAndPublish config.'),\n })\n .strict();\n\n let s: z.ZodTypeAny;\n\n if (isToMany === true) {\n const relEntry = z.union([relDocumentId, relLongHand]);\n\n const relConnectPosition = z\n .object({\n before: z.string().optional().describe('Document ID to insert before.'),\n after: z.string().optional().describe('Document ID to insert after.'),\n start: z.boolean().optional().describe('Insert at start of list.'),\n end: z.boolean().optional().describe('Insert at end of list (default).'),\n })\n .strict();\n\n const relConnectEntry = z\n .object({\n documentId: relDocumentId,\n locale: z.string().optional(),\n status: z.enum(['draft', 'published']).optional(),\n position: relConnectPosition\n .optional()\n .describe('Ordering hint. Default: { end: true }.'),\n })\n .strict();\n\n s = z\n .object({\n connect: z\n .array(z.union([relDocumentId, relConnectEntry]))\n .optional()\n .describe(\n 'Add relations. Each entry: documentId string, or { documentId, locale?, status?, position? }.'\n ),\n disconnect: z\n .array(relEntry)\n .optional()\n .describe(\n 'Remove relations. Each entry: documentId string, or { documentId, locale?, status? }.'\n ),\n set: z\n .union([z.array(relEntry), z.null()])\n .optional()\n .describe(\n 'Replace all relations. Array replaces existing; null clears all. Mutually exclusive with connect/disconnect.'\n ),\n })\n .strict()\n .refine(\n (value) =>\n value.set === undefined ||\n (value.connect === undefined && value.disconnect === undefined),\n {\n message: 'set is mutually exclusive with connect and disconnect',\n path: ['set'],\n }\n );\n } else {\n s = z.union([\n relDocumentId,\n relLongHand,\n z.null().describe('Set to null to clear the relation.'),\n ]);\n }\n\n return relAttr.required === true ? s : s.optional();\n }\n default: {\n const unknownAttr: unknown = attr;\n if (isCustomFieldAttribute(unknownAttr)) {\n const customField = strapi.get('custom-fields').get(unknownAttr.customField);\n if (customField !== undefined) {\n return attributeToInputSchema(\n strapi,\n {\n ...unknownAttr,\n type: customField.type,\n } as unknown as Schema.Attribute.AnyAttribute,\n visited\n );\n }\n }\n return z.unknown();\n }\n }\n};\n\n/**\n * Derives a per-content-type `data` Zod schema from the model's writable attributes.\n * Uses `contentTypes.isWritableAttribute` to filter system-managed keys\n * (id, documentId, timestamps, createdBy, updatedBy, localizations, locale, etc.).\n * Unknown keys are rejected (strict mode) — invalid field names fail at the MCP boundary.\n */\nexport const buildDataSchema = (\n strapi: Core.Strapi,\n schema: Struct.ContentTypeSchema | ContentManagerModelForMcp,\n attributes: Struct.SchemaAttributes,\n permittedFields?: Set<string> | null\n): z.ZodTypeAny => {\n const shape: Record<string, z.ZodTypeAny> = {};\n\n for (const [key, attr] of Object.entries(attributes)) {\n const isPermitted =\n permittedFields === null ||\n permittedFields === undefined ||\n permittedFields.has(key) === true;\n\n if (\n isPermitted === true &&\n contentTypes.isWritableAttribute(schema as Struct.ContentTypeSchema, key) === true &&\n contentTypes.isPrivateAttribute(schema as Struct.ContentTypeSchema, key) !== true\n ) {\n shape[key] = attributeToInputSchema(strapi, attr);\n }\n }\n\n return z.object(shape).strict().describe('Document field values to write.');\n};\n"],"names":["isCustomFieldAttribute","attr","type","customField","buildComponentInputSchema","strapi","componentUid","visited","Set","has","z","record","string","unknown","componentsMap","components","component","undefined","add","shape","key","Object","entries","attributes","attributeToInputSchema","delete","object","strict","required","minLength","maxLength","s","min","max","optional","email","number","int","boolean","enum","values","Array","isArray","length","any","buildBlocksInputSchema","componentAttr","componentSchema","repeatable","array","dzAttr","mediaAttr","multiple","relAttr","isToMany","relation","endsWith","relDocumentId","describe","relLongHand","documentId","locale","status","relEntry","union","relConnectPosition","before","after","start","end","relConnectEntry","position","connect","disconnect","set","null","refine","value","message","path","unknownAttr","get","buildDataSchema","schema","permittedFields","isPermitted","contentTypes","isWritableAttribute","isPrivateAttribute"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../../../server/src/history/services/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAU,MAAM,eAAe,CAAC;AAKjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAYpE,QAAA,MAAM,oBAAoB,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;sCAKrB,eAAe,CAAC,oBAAoB;6BAU7C,eAAe,CAAC,kBAAkB,CAAC,OAAO,GAAG,OAAO,CAAC;QAClF,OAAO,EAAE,eAAe,CAAC,0BAA0B,EAAE,CAAC;QACtD,UAAU,EAAE,eAAe,CAAC,UAAU,CAAC;KACxC,CAAC;8BAsI8B,IAAI,CAAC,EAAE;CA0F1C,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../../../server/src/history/services/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAU,MAAM,eAAe,CAAC;AAKjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAYpE,QAAA,MAAM,oBAAoB,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;sCAKrB,eAAe,CAAC,oBAAoB;6BAU7C,eAAe,CAAC,kBAAkB,CAAC,OAAO,GAAG,OAAO,CAAC;QAClF,OAAO,EAAE,eAAe,CAAC,0BAA0B,EAAE,CAAC;QACtD,UAAU,EAAE,eAAe,CAAC,UAAU,CAAC;KACxC,CAAC;8BAkJ8B,IAAI,CAAC,EAAE;CA0F1C,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-schema.d.ts","sourceRoot":"","sources":["../../../../../server/src/mcp/schemas/data-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,CAAC,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAG1D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAc1D;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,GAAG,CAAC,MAAM,CAAa,GAC/B,CAAC,CAAC,UAAU,CA2Bd;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,IAAI,CAAC,MAAM,EACnB,MAAM,MAAM,CAAC,SAAS,CAAC,YAAY,EACnC,UAAS,GAAG,CAAC,MAAM,CAAa,KAC/B,CAAC,CAAC,UAiNJ,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,IAAI,CAAC,MAAM,EACnB,QAAQ,MAAM,CAAC,iBAAiB,GAAG,yBAAyB,EAC5D,YAAY,MAAM,CAAC,gBAAgB,EACnC,kBAAkB,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,KACnC,CAAC,CAAC,UAmBJ,CAAC"}
1
+ {"version":3,"file":"data-schema.d.ts","sourceRoot":"","sources":["../../../../../server/src/mcp/schemas/data-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,CAAC,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAG1D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAc1D;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,GAAG,CAAC,MAAM,CAAa,GAC/B,CAAC,CAAC,UAAU,CA2Bd;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,IAAI,CAAC,MAAM,EACnB,MAAM,MAAM,CAAC,SAAS,CAAC,YAAY,EACnC,UAAS,GAAG,CAAC,MAAM,CAAa,KAC/B,CAAC,CAAC,UA0NJ,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,IAAI,CAAC,MAAM,EACnB,QAAQ,MAAM,CAAC,iBAAiB,GAAG,yBAAyB,EAC5D,YAAY,MAAM,CAAC,gBAAgB,EACnC,kBAAkB,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,KACnC,CAAC,CAAC,UAmBJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/content-manager",
3
- "version": "5.52.1",
3
+ "version": "5.52.2",
4
4
  "description": "A powerful UI to easily manage your data.",
5
5
  "homepage": "https://strapi.io",
6
6
  "bugs": {
@@ -75,8 +75,8 @@
75
75
  "@sindresorhus/slugify": "1.1.0",
76
76
  "@strapi/design-system": "2.2.4",
77
77
  "@strapi/icons": "2.2.4",
78
- "@strapi/types": "5.52.1",
79
- "@strapi/utils": "5.52.1",
78
+ "@strapi/types": "5.52.2",
79
+ "@strapi/utils": "5.52.2",
80
80
  "codemirror5": "npm:codemirror@^5.65.11",
81
81
  "date-fns": "2.30.0",
82
82
  "dompurify": "3.4.13",
@@ -108,11 +108,11 @@
108
108
  "slate-history": "0.93.0",
109
109
  "slate-react": "0.98.4",
110
110
  "yup": "0.32.9",
111
- "zod": "3.25.76"
111
+ "zod": "4.4.3"
112
112
  },
113
113
  "devDependencies": {
114
- "@strapi/admin": "5.52.1",
115
- "@strapi/database": "5.52.1",
114
+ "@strapi/admin": "5.52.2",
115
+ "@strapi/database": "5.52.2",
116
116
  "@testing-library/dom": "10.4.1",
117
117
  "@testing-library/jest-dom": "6.9.1",
118
118
  "@testing-library/react": "16.3.2",