{"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 * TODO — custom fields call `strapi.get('custom-fields')` at schema-build\n * time; confirm with an integration test that the registry is populated when MCP\n * tools are registered (post-bootstrap).\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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"}