@strapi/content-type-builder 5.58.0 → 5.60.0

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.
Files changed (130) hide show
  1. package/dist/admin/components/AIChat/FeedbackModal.js +13 -7
  2. package/dist/admin/components/AIChat/FeedbackModal.js.map +1 -1
  3. package/dist/admin/components/AIChat/FeedbackModal.mjs +14 -8
  4. package/dist/admin/components/AIChat/FeedbackModal.mjs.map +1 -1
  5. package/dist/admin/components/AIChat/UploadCodeModal.js +12 -6
  6. package/dist/admin/components/AIChat/UploadCodeModal.js.map +1 -1
  7. package/dist/admin/components/AIChat/UploadCodeModal.mjs +13 -7
  8. package/dist/admin/components/AIChat/UploadCodeModal.mjs.map +1 -1
  9. package/dist/admin/components/AIChat/UploadFigmaModal.js +12 -6
  10. package/dist/admin/components/AIChat/UploadFigmaModal.js.map +1 -1
  11. package/dist/admin/components/AIChat/UploadFigmaModal.mjs +13 -7
  12. package/dist/admin/components/AIChat/UploadFigmaModal.mjs.map +1 -1
  13. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js +6 -3
  14. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js.map +1 -1
  15. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs +7 -4
  16. package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs.map +1 -1
  17. package/dist/admin/components/AIChat/components/Collapsible.js +9 -4
  18. package/dist/admin/components/AIChat/components/Collapsible.js.map +1 -1
  19. package/dist/admin/components/AIChat/components/Collapsible.mjs +10 -5
  20. package/dist/admin/components/AIChat/components/Collapsible.mjs.map +1 -1
  21. package/dist/admin/components/AIChat/components/Dropzone.js +13 -6
  22. package/dist/admin/components/AIChat/components/Dropzone.js.map +1 -1
  23. package/dist/admin/components/AIChat/components/Dropzone.mjs +14 -7
  24. package/dist/admin/components/AIChat/components/Dropzone.mjs.map +1 -1
  25. package/dist/admin/components/AIChat/components/FloatingPanel.js +11 -4
  26. package/dist/admin/components/AIChat/components/FloatingPanel.js.map +1 -1
  27. package/dist/admin/components/AIChat/components/FloatingPanel.mjs +12 -5
  28. package/dist/admin/components/AIChat/components/FloatingPanel.mjs.map +1 -1
  29. package/dist/admin/components/AIChat/components/FullScreenImage.js +16 -8
  30. package/dist/admin/components/AIChat/components/FullScreenImage.js.map +1 -1
  31. package/dist/admin/components/AIChat/components/FullScreenImage.mjs +17 -9
  32. package/dist/admin/components/AIChat/components/FullScreenImage.mjs.map +1 -1
  33. package/dist/admin/components/AIChat/components/Input.js +6 -3
  34. package/dist/admin/components/AIChat/components/Input.js.map +1 -1
  35. package/dist/admin/components/AIChat/components/Input.mjs +7 -4
  36. package/dist/admin/components/AIChat/components/Input.mjs.map +1 -1
  37. package/dist/admin/components/AIChat/components/Messages/Message.js +88 -12
  38. package/dist/admin/components/AIChat/components/Messages/Message.js.map +1 -1
  39. package/dist/admin/components/AIChat/components/Messages/Message.mjs +87 -13
  40. package/dist/admin/components/AIChat/components/Messages/Message.mjs.map +1 -1
  41. package/dist/admin/components/AIChat/components/StepModal.js +44 -17
  42. package/dist/admin/components/AIChat/components/StepModal.js.map +1 -1
  43. package/dist/admin/components/AIChat/components/StepModal.mjs +45 -18
  44. package/dist/admin/components/AIChat/components/StepModal.mjs.map +1 -1
  45. package/dist/admin/components/AIChat/providers/ChatProvider.js +79 -27
  46. package/dist/admin/components/AIChat/providers/ChatProvider.js.map +1 -1
  47. package/dist/admin/components/AIChat/providers/ChatProvider.mjs +80 -28
  48. package/dist/admin/components/AIChat/providers/ChatProvider.mjs.map +1 -1
  49. package/dist/admin/components/AIChat/providers/SchemaProvider.js +6 -3
  50. package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -1
  51. package/dist/admin/components/AIChat/providers/SchemaProvider.mjs +7 -4
  52. package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -1
  53. package/dist/admin/components/AttributeOptions/AttributeOption.js +2 -2
  54. package/dist/admin/components/AttributeOptions/AttributeOption.js.map +1 -1
  55. package/dist/admin/components/AttributeOptions/AttributeOption.mjs +2 -2
  56. package/dist/admin/components/AttributeOptions/AttributeOption.mjs.map +1 -1
  57. package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.js.map +1 -1
  58. package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.mjs.map +1 -1
  59. package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.js.map +1 -1
  60. package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.mjs.map +1 -1
  61. package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.js +2 -1
  62. package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.js.map +1 -1
  63. package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.mjs +2 -1
  64. package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.mjs.map +1 -1
  65. package/dist/admin/components/DataManager/DataManagerProvider.js +317 -275
  66. package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
  67. package/dist/admin/components/DataManager/DataManagerProvider.mjs +319 -277
  68. package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
  69. package/dist/admin/components/DataManager/RenameMigrationModal.js.map +1 -1
  70. package/dist/admin/components/DataManager/RenameMigrationModal.mjs.map +1 -1
  71. package/dist/admin/components/DataManager/reducer.js +31 -4
  72. package/dist/admin/components/DataManager/reducer.js.map +1 -1
  73. package/dist/admin/components/DataManager/reducer.mjs +31 -4
  74. package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
  75. package/dist/admin/components/DynamicZoneList.js +2 -1
  76. package/dist/admin/components/DynamicZoneList.js.map +1 -1
  77. package/dist/admin/components/DynamicZoneList.mjs +2 -1
  78. package/dist/admin/components/DynamicZoneList.mjs.map +1 -1
  79. package/dist/admin/components/FormModal/attributes/ConditionForm.js +2 -1
  80. package/dist/admin/components/FormModal/attributes/ConditionForm.js.map +1 -1
  81. package/dist/admin/components/FormModal/attributes/ConditionForm.mjs +2 -1
  82. package/dist/admin/components/FormModal/attributes/ConditionForm.mjs.map +1 -1
  83. package/dist/admin/components/FormModal/attributes/types.js +2 -2
  84. package/dist/admin/components/FormModal/attributes/types.js.map +1 -1
  85. package/dist/admin/components/FormModal/attributes/types.mjs +2 -2
  86. package/dist/admin/components/FormModal/attributes/types.mjs.map +1 -1
  87. package/dist/admin/components/FormModal/forms/forms.js +1 -1
  88. package/dist/admin/components/FormModal/forms/forms.js.map +1 -1
  89. package/dist/admin/components/FormModal/forms/forms.mjs +1 -1
  90. package/dist/admin/components/FormModal/forms/forms.mjs.map +1 -1
  91. package/dist/admin/components/GenericInputs.js +2 -1
  92. package/dist/admin/components/GenericInputs.js.map +1 -1
  93. package/dist/admin/components/GenericInputs.mjs +2 -1
  94. package/dist/admin/components/GenericInputs.mjs.map +1 -1
  95. package/dist/admin/components/TabForm.js.map +1 -1
  96. package/dist/admin/components/TabForm.mjs.map +1 -1
  97. package/dist/admin/src/components/AIChat/components/FullScreenImage.d.ts +8 -0
  98. package/dist/admin/src/components/AIChat/components/Messages/Message.d.ts +20 -0
  99. package/dist/admin/utils/folderTelemetry.js.map +1 -1
  100. package/dist/admin/utils/folderTelemetry.mjs.map +1 -1
  101. package/dist/admin/utils/formAPI.js.map +1 -1
  102. package/dist/admin/utils/formAPI.mjs.map +1 -1
  103. package/dist/server/controllers/validation/common.js +1 -1
  104. package/dist/server/controllers/validation/common.js.map +1 -1
  105. package/dist/server/controllers/validation/common.mjs +1 -1
  106. package/dist/server/controllers/validation/common.mjs.map +1 -1
  107. package/dist/server/controllers/validation/schema.js +3 -2
  108. package/dist/server/controllers/validation/schema.js.map +1 -1
  109. package/dist/server/controllers/validation/schema.mjs +4 -3
  110. package/dist/server/controllers/validation/schema.mjs.map +1 -1
  111. package/dist/server/register.js.map +1 -1
  112. package/dist/server/register.mjs.map +1 -1
  113. package/dist/server/services/migration-builder/index.js.map +1 -1
  114. package/dist/server/services/migration-builder/index.mjs.map +1 -1
  115. package/dist/server/services/schema.js +34 -1
  116. package/dist/server/services/schema.js.map +1 -1
  117. package/dist/server/services/schema.mjs +34 -1
  118. package/dist/server/services/schema.mjs.map +1 -1
  119. package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
  120. package/dist/server/src/register.d.ts.map +1 -1
  121. package/dist/server/src/services/migration-builder/index.d.ts.map +1 -1
  122. package/dist/server/src/services/schema-builder/types.d.ts.map +1 -1
  123. package/dist/server/src/services/schema.d.ts.map +1 -1
  124. package/dist/server/src/utils/uid-target.d.ts +18 -0
  125. package/dist/server/src/utils/uid-target.d.ts.map +1 -0
  126. package/dist/server/utils/uid-target.js +34 -0
  127. package/dist/server/utils/uid-target.js.map +1 -0
  128. package/dist/server/utils/uid-target.mjs +31 -0
  129. package/dist/server/utils/uid-target.mjs.map +1 -0
  130. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"schema.mjs","sources":["../../../../server/src/controllers/validation/schema.ts"],"sourcesContent":["import * as z from 'zod/v4';\nimport { strings, validateZodSchema, contentTypes } from '@strapi/utils';\nimport type { Struct, UID } from '@strapi/types';\nimport { isNumber, isObject, snakeCase } from 'lodash';\n\nimport { isReservedAttributeName, isReservedModelName } from '../../services/builder';\nimport { coreUids, typeKinds, VALID_UID_TARGETS } from '../../services/constants';\nimport { isConfigurable } from '../../utils/attributes';\n\nimport {\n CATEGORY_NAME_REGEX,\n ICON_REGEX,\n COLLECTION_NAME_REGEX,\n KEBAB_BASE_REGEX,\n NAME_REGEX,\n} from './common';\nimport { contentStructureFileSchema, type ContentStructureFileInput } from './content-structure';\n\ntype SchemaMeta =\n | {\n modelType: 'contentType';\n kind?: Struct.ContentTypeKind;\n }\n | {\n modelType: 'component';\n };\n\ntype SuperRefinement<T> = (value: T, ctx: z.RefinementCtx) => void | Promise<void>;\n\nconst uniqueAttributeName: SuperRefinement<{ name: string }[]> = (attributes, ctx) => {\n const names = new Set(attributes.map((attribute) => snakeCase(attribute.name)));\n if (names.size !== attributes.length) {\n ctx.addIssue({\n code: 'custom',\n message: 'Attributes must have unique names',\n });\n }\n};\n\nconst verifyUidTargetField: SuperRefinement<\n {\n action: 'create' | 'update' | 'delete';\n name: string;\n properties?: {\n type: unknown;\n targetField?: string | null;\n };\n }[]\n> = (attributes, ctx) => {\n attributes.forEach((attribute) => {\n if (!attribute.properties) {\n return;\n }\n\n const { properties, action } = attribute;\n\n if (properties.type === 'uid' && properties.targetField) {\n const targetAttr = attributes.find((attr) => attr.name === properties.targetField);\n\n if (!targetAttr) {\n // NOTE: on update we are setting it to undefined later in the process instead to handle renames\n if (action === 'create') {\n ctx.addIssue({\n code: 'custom',\n message: 'Target does not exist',\n });\n }\n } else if (\n !VALID_UID_TARGETS.some((validUIdTarget) => validUIdTarget === targetAttr.properties?.type)\n ) {\n ctx.addIssue({\n code: 'custom',\n message: 'Invalid target type',\n });\n }\n }\n });\n};\n\nconst verifySingularAndPluralNames: SuperRefinement<Record<string, unknown>> = (obj, ctx) => {\n // singular and plural can only be provided on creation\n if (obj.action !== 'create') {\n return;\n }\n\n if (obj.singularName === obj.pluralName) {\n ctx.addIssue({\n code: 'custom',\n message: 'Singular and plural names must be different',\n path: ['singularName'],\n });\n }\n};\n\ntype ContentTypeSchemaAction = {\n action: 'create' | 'update' | 'delete';\n draftAndPublish?: boolean;\n uid?: UID.ContentType;\n renames?: Array<{ oldName: string; newName: string }>;\n attributes?: Array<{ action: 'create' | 'update' | 'delete'; name: string }>;\n};\n\n// The payload carries the full attribute list and the saved schema is built from\n// it, so the names that will be written are the payload attributes that are not\n// deleted. The rename hops do not decide what is saved. The one exception is\n// non-configurable attributes: the builder keeps them from the current schema\n// whatever the payload says, so they are always part of the saved schema.\nconst getEffectiveAttributeNames = (contentType: ContentTypeSchemaAction): string[] => {\n const names = new Set(\n (contentType.attributes ?? [])\n .filter((attribute) => attribute.action !== 'delete')\n .map((attribute) => attribute.name)\n );\n\n if (contentType.action === 'update' && contentType.uid) {\n const existingAttributes = strapi.contentTypes[contentType.uid]?.attributes ?? {};\n\n for (const [name, attribute] of Object.entries(existingAttributes)) {\n if (!isConfigurable(attribute)) {\n names.add(name);\n }\n }\n }\n\n return [...names];\n};\n\nexport const verifyDraftAndPublishReservedAttributes: SuperRefinement<ContentTypeSchemaAction> = (\n contentType,\n ctx\n) => {\n if (contentType.action === 'delete' || !contentType.draftAndPublish) {\n return;\n }\n\n const reservedAttributeNames = contentTypes.findDraftAndPublishReservedAttributeNames(\n getEffectiveAttributeNames(contentType)\n );\n\n if (reservedAttributeNames.length > 0) {\n ctx.addIssue({\n code: 'custom',\n message: contentTypes.getDraftAndPublishEnableBlockedMessage(reservedAttributeNames),\n path: ['draftAndPublish'],\n });\n }\n};\n\nexport const maxLengthGreaterThanMinLength: SuperRefinement<Record<string, unknown>> = (\n value,\n ctx\n) => {\n if (\n value.maxLength != null &&\n value.minLength != null &&\n isNumber(value.maxLength) &&\n isNumber(value.minLength)\n ) {\n if (value.maxLength < value.minLength) {\n ctx.addIssue({\n code: 'custom',\n message: 'maxLength must be greater or equal to minLength',\n path: ['maxLength'],\n });\n }\n }\n};\n\nexport const maxGreaterThanMin: SuperRefinement<Record<string, unknown>> = (value, ctx) => {\n if (value.max != null && value.min != null && isNumber(value.max) && isNumber(value.min)) {\n if (value.max < value.min) {\n ctx.addIssue({\n code: 'custom',\n message: 'max must be greater or equal to min',\n path: ['max'],\n });\n }\n }\n};\n\nconst checkUserTarget: SuperRefinement<{\n type: string;\n target?: string;\n relation?: string;\n targetAttribute?: string | null;\n}> = (value, ctx) => {\n if (value.type !== 'relation') {\n return;\n }\n\n if (value.target === undefined || value.relation === undefined) {\n return;\n }\n\n const { target, relation, targetAttribute } = value;\n\n if (\n target === coreUids.STRAPI_USER &&\n (!STRAPI_USER_RELATIONS.includes(relation) || targetAttribute !== undefined)\n ) {\n ctx.addIssue({\n code: 'custom',\n path: ['relation'],\n message: `Relations to ${coreUids.STRAPI_USER} must be one of the following values: ${STRAPI_USER_RELATIONS.join(', ')} without targetAttribute`,\n });\n }\n};\n\nconst uidRefinement: SuperRefinement<{\n type: string;\n default?: unknown;\n targetField?: string | null;\n}> = (value, ctx) => {\n if (value.targetField != null && value.default != null) {\n ctx.addIssue({\n code: 'custom',\n message: 'Cannot define a default UID if the targetField is set',\n path: ['default'],\n });\n }\n};\n\nconst enumRefinement: SuperRefinement<{\n type: string;\n default?: unknown;\n enum?: string[];\n}> = (value, ctx) => {\n if (value.type === 'enumeration' && value.default != null && value.enum != null) {\n if (value.default === '' || !value.enum.some((v) => v === value.default)) {\n ctx.addIssue({\n code: 'custom',\n message: 'Default value must be one of the enum values',\n path: ['default'],\n });\n }\n }\n};\n\nconst conditionSchema = z.object({\n visible: z.record(z.string(), z.array(z.any())),\n});\n\nconst basePropertiesSchema = z.object({\n type: z.enum([\n 'string',\n 'text',\n 'richtext',\n 'blocks',\n 'json',\n 'enumeration',\n 'password',\n 'email',\n 'integer',\n 'biginteger',\n 'float',\n 'decimal',\n 'time',\n 'datetime',\n 'date',\n 'timestamp',\n 'boolean',\n 'component',\n 'uid',\n 'customField',\n 'media',\n 'relation',\n 'dynamiczone',\n ]),\n configurable: z.boolean().nullish(),\n private: z.boolean().nullish(),\n // Keep null invalid so searchability is always an explicit boolean when provided.\n searchable: z.boolean().optional(),\n pluginOptions: z.record(z.string(), z.unknown()).optional(),\n conditions: z.preprocess((val) => {\n return val;\n }, conditionSchema.optional()),\n});\n\nconst maxLengthSchema = z.number().int().positive().optional();\nconst minLengthSchema = z.number().int().positive().optional();\n\nconst requiredSchema = z.boolean().optional();\nconst uniqueSchema = z.boolean().optional();\n\nconst STRAPI_USER_RELATIONS = ['oneToOne', 'oneToMany'];\n\nconst baseRelationSchema = z.object({\n type: z.literal('relation'),\n relation: z.enum([\n 'oneToOne',\n 'oneToMany',\n 'manyToOne',\n 'manyToMany',\n 'morphOne',\n 'morphMany',\n 'morphToOne',\n 'morphToMany',\n ]),\n configurable: z.boolean().nullish(),\n required: requiredSchema,\n private: z.boolean().nullish(),\n pluginOptions: z.record(z.string(), z.unknown()).optional(),\n conditions: z.preprocess((val) => {\n return val;\n }, conditionSchema.optional()),\n});\n\nconst oneToOneSchema = baseRelationSchema.extend({\n relation: z.literal('oneToOne'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst oneWaySchema = baseRelationSchema.extend({\n relation: z.literal('oneToOne'),\n target: z.string(),\n});\n\nconst oneToManySchema = baseRelationSchema.extend({\n relation: z.literal('oneToMany'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst manyWaySchema = baseRelationSchema.extend({\n relation: z.literal('oneToMany'),\n target: z.string(),\n});\n\nconst manyToOneSchema = baseRelationSchema.extend({\n relation: z.literal('manyToOne'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst manyToManySchema = baseRelationSchema.extend({\n relation: z.literal('manyToMany'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst morphOneSchema = baseRelationSchema.extend({\n relation: z.literal('morphOne'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst morphManySchema = baseRelationSchema.extend({\n relation: z.literal('morphMany'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst morphToOneSchema = baseRelationSchema.extend({\n relation: z.literal('morphToOne'),\n});\n\nconst morphToManySchema = baseRelationSchema.extend({\n relation: z.literal('morphToMany'),\n});\n\nconst createRelationSchema = (meta: SchemaMeta) => {\n switch (meta.modelType) {\n case 'contentType': {\n switch (meta.kind) {\n case 'singleType':\n return z.discriminatedUnion('relation', [\n oneToOneSchema,\n oneToManySchema,\n morphOneSchema,\n morphManySchema,\n morphToOneSchema,\n morphToManySchema,\n ]);\n\n case 'collectionType':\n return z.discriminatedUnion('relation', [\n oneToOneSchema,\n oneToManySchema,\n manyToOneSchema,\n manyToManySchema,\n morphOneSchema,\n morphManySchema,\n morphToOneSchema,\n morphToManySchema,\n ]);\n default:\n throw new Error('Invalid content type kind');\n }\n }\n\n case 'component': {\n return z.discriminatedUnion('relation', [oneWaySchema, manyWaySchema]);\n }\n default:\n throw new Error('Invalid model type');\n }\n};\n\nconst richTextSchema = basePropertiesSchema.extend({\n type: z.literal('richtext'),\n required: requiredSchema,\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n default: z.string().optional(),\n});\n\nconst blocksSchema = basePropertiesSchema.extend({\n type: z.literal('blocks'),\n required: requiredSchema,\n});\n\nconst jsonSchema = basePropertiesSchema.extend({\n type: z.literal('json'),\n required: requiredSchema,\n default: z\n .unknown()\n .optional()\n .refine((value) => {\n if (value === undefined) {\n return true;\n }\n\n if (isNumber(value) || value === null || isObject(value) || Array.isArray(value)) {\n return true;\n }\n\n try {\n JSON.parse(value as string);\n\n return true;\n } catch {\n return false;\n }\n }),\n});\n\nconst enumerationSchema = basePropertiesSchema.extend({\n type: z.literal('enumeration'),\n required: requiredSchema,\n default: z.string().optional(),\n enumName: z\n .string()\n .optional()\n .refine((value) => {\n return value === '' || NAME_REGEX.test(value as string);\n }, 'Invalid enum name'),\n enum: z\n .array(\n z.string().refine((value) => {\n return value === '' || !strings.startsWithANumber(value as string);\n })\n )\n .min(1)\n .refine((values) => {\n const filtered = [...new Set(values)];\n return filtered.length === values.length;\n }),\n});\n\nconst textSchema = basePropertiesSchema.extend({\n type: z.literal('text'),\n default: z.string().nullish(),\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n required: requiredSchema,\n unique: uniqueSchema,\n regex: z\n .string()\n .optional()\n .refine((value) => {\n return value === '' || !!new RegExp(value as string);\n }, 'Invalid regular expression pattern'),\n});\n\nconst stringSchema = textSchema.extend({\n type: z.literal('string'),\n});\n\nconst passwordSchema = basePropertiesSchema.extend({\n type: z.literal('password'),\n required: requiredSchema,\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n});\n\nconst emailSchema = basePropertiesSchema.extend({\n type: z.literal('email'),\n required: requiredSchema,\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n default: z.string().email().optional(),\n unique: uniqueSchema,\n});\n\nconst integerSchema = basePropertiesSchema.extend({\n type: z.literal('integer'),\n required: requiredSchema,\n default: z.number().int().optional(),\n unique: uniqueSchema,\n min: z.number().int().optional(),\n max: z.number().int().optional(),\n});\n\nconst bigIntegerSchema = basePropertiesSchema.extend({\n type: z.literal('biginteger'),\n required: requiredSchema,\n unique: uniqueSchema,\n default: z.string().regex(/^\\d*$/).nullish(),\n min: z.string().regex(/^\\d*$/).nullish(),\n max: z.string().regex(/^\\d*$/).nullish(),\n});\n\nconst floatSchema = basePropertiesSchema.extend({\n type: z.literal('float'),\n required: requiredSchema,\n unique: uniqueSchema,\n default: z.number().optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\nconst decimalSchema = basePropertiesSchema.extend({\n type: z.literal('decimal'),\n required: requiredSchema,\n unique: uniqueSchema,\n default: z.number().optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\nconst timeSchema = basePropertiesSchema.extend({\n type: z.literal('time'),\n required: requiredSchema,\n unique: uniqueSchema,\n default: z.string().optional(),\n});\n\nconst dateSchema = timeSchema.extend({\n type: z.literal('date'),\n});\n\nconst dateTimeSchema = timeSchema.extend({\n type: z.literal('datetime'),\n});\n\nconst timeStampSchema = basePropertiesSchema.extend({\n type: z.literal('timestamp'),\n});\n\nconst booleanSchema = basePropertiesSchema.extend({\n type: z.literal('boolean'),\n required: requiredSchema,\n default: z.boolean().optional(),\n});\n\nconst componentSchema = basePropertiesSchema.extend({\n type: z.literal('component'),\n component: z.string(),\n repeatable: z.boolean().optional(),\n required: requiredSchema,\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\nconst dynamicZoneSchema = basePropertiesSchema.extend({\n type: z.literal('dynamiczone'),\n components: z.array(z.string()).nonempty(),\n required: requiredSchema,\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\nconst mediaSchema = basePropertiesSchema.extend({\n type: z.literal('media'),\n multiple: z.boolean().optional(),\n required: requiredSchema,\n allowedTypes: z\n .array(z.enum(['images', 'videos', 'files', 'audios']))\n .nonempty()\n .optional(),\n});\n\nconst uidSchema = basePropertiesSchema.extend({\n type: z.literal('uid'),\n targetField: z.string().nullish(),\n required: requiredSchema,\n default: z.string().nullish(),\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n options: z\n .object({\n separator: z.string().optional(),\n lowercase: z.boolean().optional(),\n decamelize: z.boolean().optional(),\n customReplacements: z.array(z.array(z.string()).length(2)).optional(),\n preserveLeadingUnderscore: z.boolean().optional(),\n })\n .optional(),\n regex: z\n .string()\n .optional()\n .refine((value) => {\n return value === '' || !!new RegExp(value as string);\n }, 'Invalid regular expression pattern'),\n});\n\nconst customFieldSchema = basePropertiesSchema.extend({\n type: z.literal('customField'),\n customField: z.string(),\n});\n\nconst attributePropertiesSchema = (meta: SchemaMeta) => {\n const relationSchema = createRelationSchema(meta);\n\n const base = z.union([\n mediaSchema,\n textSchema,\n stringSchema,\n richTextSchema,\n blocksSchema,\n jsonSchema,\n enumerationSchema,\n passwordSchema,\n emailSchema,\n integerSchema,\n bigIntegerSchema,\n floatSchema,\n decimalSchema,\n timeSchema,\n dateSchema,\n dateTimeSchema,\n timeStampSchema,\n booleanSchema,\n componentSchema,\n customFieldSchema.passthrough(),\n\n relationSchema,\n ]);\n\n if (meta.modelType === 'component') {\n return base\n .superRefine(enumRefinement)\n .superRefine(checkUserTarget)\n .superRefine(maxGreaterThanMin)\n .superRefine(maxLengthGreaterThanMinLength);\n }\n\n return z\n .union([...base.options, uidSchema, dynamicZoneSchema])\n .superRefine(enumRefinement)\n .superRefine(checkUserTarget)\n .superRefine(uidRefinement)\n .superRefine(maxGreaterThanMin)\n .superRefine(maxLengthGreaterThanMinLength);\n};\n\nconst createAttributeSchema = (meta: SchemaMeta) =>\n z.object({\n action: z.literal('create'),\n name: z\n .string()\n .regex(NAME_REGEX)\n .refine((value) => !isReservedAttributeName(value), 'Attribute name is reserved'),\n properties: attributePropertiesSchema(meta),\n });\n\nconst updateAttributeSchema = (meta: SchemaMeta) =>\n z.object({\n action: z.literal('update'),\n name: z.string(),\n properties: attributePropertiesSchema(meta),\n });\n\n// Ordered list of attribute rename hops performed by the user for a given\n// content-type / component, used to generate a data-preserving rename migration.\n// The order is significant: the migration replays each hop verbatim.\n// Names end up in generated migration code, so they are held to the attribute\n// name rules. The new name is held to the same reserved-name rules as a newly\n// created attribute. The old name only has to be a name an attribute can\n// legally carry today: `status` is reserved only while draft and publish is\n// enabled, and renaming it away is exactly how a type gets to enable it.\nconst renameHopNameSchema = z.string().min(1).max(64).regex(NAME_REGEX);\n\nconst renameHopOldNameSchema = renameHopNameSchema.refine(\n (value) => !contentTypes.isReservedAttributeName(value, { draftAndPublish: false }),\n 'Attribute name is reserved'\n);\n\nconst renameHopNewNameSchema = renameHopNameSchema.refine(\n (value) => !isReservedAttributeName(value),\n 'Attribute name is reserved'\n);\n\nconst renamesSchema = z\n .array(\n z\n .object({\n oldName: renameHopOldNameSchema,\n newName: renameHopNewNameSchema,\n })\n .refine((hop) => hop.oldName !== hop.newName, 'A rename must change the attribute name')\n )\n .max(200)\n .optional();\n\nconst deleteAttributeSchema = z.object({\n action: z.literal('delete'),\n name: z.string(),\n});\n\nconst contentTypeUIDSchema = z.custom<UID.ContentType>((value) => {\n return typeof value === 'string' && value.length > 0;\n});\n\nconst componentUIDSchema = z.custom<UID.Component>((value) => {\n return typeof value === 'string' && value.length > 0;\n});\n\nconst categorySchema = z.string().min(1).regex(CATEGORY_NAME_REGEX);\n\nconst baseComponentSchema = z.object({\n uid: componentUIDSchema,\n displayName: z.string().min(1),\n icon: z.string().regex(ICON_REGEX).optional(),\n description: z.string().optional(),\n category: categorySchema,\n pluginOptions: z.record(z.string(), z.unknown()).optional(),\n});\n\nconst createComponentSchema = baseComponentSchema.extend({\n action: z.literal('create'),\n config: z.record(z.string(), z.unknown()).optional().default({}),\n attributes: z\n .array(\n createAttributeSchema({\n modelType: 'component',\n })\n )\n .superRefine(uniqueAttributeName),\n});\n\nconst updateComponentSchema = baseComponentSchema.extend({\n action: z.literal('update'),\n category: categorySchema.optional(),\n renames: renamesSchema,\n attributes: z\n .array(\n z.discriminatedUnion('action', [\n createAttributeSchema({\n modelType: 'component',\n }),\n updateAttributeSchema({\n modelType: 'component',\n }),\n deleteAttributeSchema,\n ])\n )\n .superRefine(uniqueAttributeName),\n});\n\nconst deleteComponentSchema = z.object({\n action: z.literal('delete'),\n uid: componentUIDSchema,\n});\n\nconst baseContentTypeSchema = z.object({\n uid: contentTypeUIDSchema,\n displayName: z.string().min(1),\n description: z.string().optional(),\n draftAndPublish: z.boolean(),\n options: z.record(z.string(), z.unknown()).optional().default({}),\n pluginOptions: z.record(z.string(), z.unknown()).optional().default({}),\n kind: z.enum([typeKinds.SINGLE_TYPE, typeKinds.COLLECTION_TYPE]).optional(),\n});\n\nconst baseCreateContentTypeSchema = baseContentTypeSchema.extend({\n action: z.literal('create'),\n plugin: z.string().min(1).optional(),\n collectionName: z.string().regex(COLLECTION_NAME_REGEX).optional(),\n singularName: z\n .string()\n .min(1)\n .regex(KEBAB_BASE_REGEX, 'Must be kebab case')\n .refine((value) => !isReservedModelName(value), 'Model name is reserved'),\n pluralName: z\n .string()\n .min(1)\n .regex(KEBAB_BASE_REGEX, 'Must be kebab case')\n .refine((value) => !isReservedModelName(value), 'Model name is reserved'),\n config: z.record(z.string(), z.unknown()).optional(),\n});\n\nconst createSingleTypeSchema = baseCreateContentTypeSchema.extend({\n kind: z.literal(typeKinds.SINGLE_TYPE),\n attributes: z\n .array(\n createAttributeSchema({\n modelType: 'contentType',\n kind: 'singleType',\n })\n )\n .superRefine(uniqueAttributeName)\n .superRefine(verifyUidTargetField),\n});\n\nconst createCollectionTypeSchema = baseCreateContentTypeSchema.extend({\n kind: z.literal(typeKinds.COLLECTION_TYPE),\n attributes: z\n .array(\n createAttributeSchema({\n modelType: 'contentType',\n kind: 'collectionType',\n })\n )\n .superRefine(uniqueAttributeName)\n .superRefine(verifyUidTargetField),\n});\n\nconst baseUpdateContentTypeSchema = baseContentTypeSchema.extend({\n action: z.literal('update'),\n renames: renamesSchema,\n});\n\nconst updateSingleTypeSchema = baseUpdateContentTypeSchema.extend({\n kind: z.literal(typeKinds.SINGLE_TYPE).optional(),\n attributes: z\n .array(\n z.discriminatedUnion('action', [\n createAttributeSchema({\n modelType: 'contentType',\n kind: 'singleType',\n }),\n updateAttributeSchema({\n modelType: 'contentType',\n kind: 'singleType',\n }),\n deleteAttributeSchema,\n ])\n )\n .superRefine(uniqueAttributeName)\n .superRefine(verifyUidTargetField),\n});\n\nconst updateCollectionTypeSchema = baseUpdateContentTypeSchema.extend({\n kind: z.literal(typeKinds.COLLECTION_TYPE).optional(),\n attributes: z\n .array(\n z.union([\n createAttributeSchema({\n modelType: 'contentType',\n kind: 'collectionType',\n }),\n updateAttributeSchema({\n modelType: 'contentType',\n kind: 'collectionType',\n }),\n deleteAttributeSchema,\n ])\n )\n .superRefine(uniqueAttributeName)\n .superRefine(verifyUidTargetField),\n});\n\nconst deleteContentTypeSchema = z.object({\n action: z.literal('delete'),\n uid: contentTypeUIDSchema,\n});\n\nconst schemaSchema = z.object({\n components: z\n .array(z.union([createComponentSchema, updateComponentSchema, deleteComponentSchema]))\n .optional()\n .default([]),\n contentTypes: z\n .array(\n z\n .union([\n createSingleTypeSchema,\n createCollectionTypeSchema,\n updateSingleTypeSchema,\n updateCollectionTypeSchema,\n deleteContentTypeSchema,\n ])\n .superRefine(verifySingularAndPluralNames)\n .superRefine(verifyDraftAndPublishReservedAttributes)\n )\n .optional()\n .default([]),\n contentStructure: contentStructureFileSchema.optional(),\n});\n\ntype CreateComponentType = z.infer<typeof createComponentSchema>;\ntype UpdateComponentType = z.infer<typeof updateComponentSchema>;\ntype DeleteComponentType = z.infer<typeof deleteComponentSchema>;\ntype CreateCollectionType = z.infer<typeof createCollectionTypeSchema>;\ntype CreateSingleType = z.infer<typeof createSingleTypeSchema>;\ntype UpdateSingleType = z.infer<typeof updateSingleTypeSchema>;\ntype UpdateCollectionType = z.infer<typeof updateCollectionTypeSchema>;\ntype DeleteContentType = z.infer<typeof deleteContentTypeSchema>;\n\nexport type Schema = {\n components: Array<CreateComponentType | UpdateComponentType | DeleteComponentType>;\n contentTypes: Array<\n | CreateSingleType\n | CreateCollectionType\n | UpdateSingleType\n | UpdateCollectionType\n | DeleteContentType\n >;\n contentStructure?: ContentStructureFileInput;\n};\n\nconst updateSchemaInput = z.object(\n {\n data: schemaSchema,\n },\n {\n error: (issue) =>\n issue.input === undefined\n ? 'Schema is required'\n : 'Invalid schema, expected an object with a data property',\n }\n);\n\nexport const validateUpdateSchema = validateZodSchema(updateSchemaInput);\n"],"names":["uniqueAttributeName","attributes","ctx","names","Set","map","attribute","snakeCase","name","size","length","addIssue","code","message","verifyUidTargetField","forEach","properties","action","type","targetField","targetAttr","find","attr","VALID_UID_TARGETS","some","validUIdTarget","verifySingularAndPluralNames","obj","singularName","pluralName","path","getEffectiveAttributeNames","contentType","filter","uid","existingAttributes","strapi","contentTypes","Object","entries","isConfigurable","add","verifyDraftAndPublishReservedAttributes","draftAndPublish","reservedAttributeNames","findDraftAndPublishReservedAttributeNames","getDraftAndPublishEnableBlockedMessage","maxLengthGreaterThanMinLength","value","maxLength","minLength","isNumber","maxGreaterThanMin","max","min","checkUserTarget","target","undefined","relation","targetAttribute","coreUids","STRAPI_USER","STRAPI_USER_RELATIONS","includes","join","uidRefinement","default","enumRefinement","enum","v","conditionSchema","z","object","visible","record","string","array","any","basePropertiesSchema","configurable","boolean","nullish","private","searchable","optional","pluginOptions","unknown","conditions","preprocess","val","maxLengthSchema","number","int","positive","minLengthSchema","requiredSchema","uniqueSchema","baseRelationSchema","literal","required","oneToOneSchema","extend","oneWaySchema","oneToManySchema","manyWaySchema","manyToOneSchema","manyToManySchema","morphOneSchema","morphManySchema","morphToOneSchema","morphToManySchema","createRelationSchema","meta","modelType","kind","discriminatedUnion","Error","richTextSchema","blocksSchema","jsonSchema","refine","isObject","Array","isArray","JSON","parse","enumerationSchema","enumName","NAME_REGEX","test","strings","startsWithANumber","values","filtered","textSchema","unique","regex","RegExp","stringSchema","passwordSchema","emailSchema","email","integerSchema","bigIntegerSchema","floatSchema","decimalSchema","timeSchema","dateSchema","dateTimeSchema","timeStampSchema","booleanSchema","componentSchema","component","repeatable","dynamicZoneSchema","components","nonempty","mediaSchema","multiple","allowedTypes","uidSchema","options","separator","lowercase","decamelize","customReplacements","preserveLeadingUnderscore","customFieldSchema","customField","attributePropertiesSchema","relationSchema","base","union","passthrough","superRefine","createAttributeSchema","isReservedAttributeName","updateAttributeSchema","renameHopNameSchema","renameHopOldNameSchema","renameHopNewNameSchema","renamesSchema","oldName","newName","hop","deleteAttributeSchema","contentTypeUIDSchema","custom","componentUIDSchema","categorySchema","CATEGORY_NAME_REGEX","baseComponentSchema","displayName","icon","ICON_REGEX","description","category","createComponentSchema","config","updateComponentSchema","renames","deleteComponentSchema","baseContentTypeSchema","typeKinds","SINGLE_TYPE","COLLECTION_TYPE","baseCreateContentTypeSchema","plugin","collectionName","COLLECTION_NAME_REGEX","KEBAB_BASE_REGEX","isReservedModelName","createSingleTypeSchema","createCollectionTypeSchema","baseUpdateContentTypeSchema","updateSingleTypeSchema","updateCollectionTypeSchema","deleteContentTypeSchema","schemaSchema","contentStructure","contentStructureFileSchema","updateSchemaInput","data","error","issue","input","validateUpdateSchema","validateZodSchema"],"mappings":"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"}
1
+ {"version":3,"file":"schema.mjs","sources":["../../../../server/src/controllers/validation/schema.ts"],"sourcesContent":["import * as z from 'zod/v4';\nimport { strings, validateZodSchema, contentTypes } from '@strapi/utils';\nimport type { Struct, UID } from '@strapi/types';\nimport { isNumber, isObject, snakeCase } from 'lodash';\n\nimport { isReservedAttributeName, isReservedModelName } from '../../services/builder';\nimport { coreUids, typeKinds } from '../../services/constants';\nimport { isConfigurable } from '../../utils/attributes';\nimport { isValidUidTarget } from '../../utils/uid-target';\n\nimport {\n CATEGORY_NAME_REGEX,\n ICON_REGEX,\n COLLECTION_NAME_REGEX,\n KEBAB_BASE_REGEX,\n NAME_REGEX,\n} from './common';\nimport { contentStructureFileSchema, type ContentStructureFileInput } from './content-structure';\n\ntype SchemaMeta =\n | {\n modelType: 'contentType';\n kind?: Struct.ContentTypeKind;\n }\n | {\n modelType: 'component';\n };\n\ntype SuperRefinement<T> = (value: T, ctx: z.RefinementCtx) => void | Promise<void>;\n\nconst uniqueAttributeName: SuperRefinement<{ name: string }[]> = (attributes, ctx) => {\n const names = new Set(attributes.map((attribute) => snakeCase(attribute.name)));\n if (names.size !== attributes.length) {\n ctx.addIssue({\n code: 'custom',\n message: 'Attributes must have unique names',\n });\n }\n};\n\nconst verifyUidTargetField: SuperRefinement<\n {\n action: 'create' | 'update' | 'delete';\n name: string;\n properties?: {\n type: unknown;\n customField?: unknown;\n targetField?: string | null;\n };\n }[]\n> = (attributes, ctx) => {\n attributes.forEach((attribute) => {\n if (!attribute.properties) {\n return;\n }\n\n const { properties, action } = attribute;\n\n if (properties.type === 'uid' && properties.targetField) {\n const targetAttr = attributes.find(\n (attr) => attr.action !== 'delete' && attr.name === properties.targetField\n );\n\n if (!targetAttr) {\n // NOTE: on update we are setting it to undefined later in the process instead to handle renames\n if (action === 'create') {\n ctx.addIssue({\n code: 'custom',\n message: 'Target does not exist',\n });\n }\n } else if (!targetAttr.properties || !isValidUidTarget(targetAttr.properties)) {\n ctx.addIssue({\n code: 'custom',\n message: 'Invalid target type',\n });\n }\n }\n });\n};\n\nconst verifySingularAndPluralNames: SuperRefinement<Record<string, unknown>> = (obj, ctx) => {\n // singular and plural can only be provided on creation\n if (obj.action !== 'create') {\n return;\n }\n\n if (obj.singularName === obj.pluralName) {\n ctx.addIssue({\n code: 'custom',\n message: 'Singular and plural names must be different',\n path: ['singularName'],\n });\n }\n};\n\ntype ContentTypeSchemaAction = {\n action: 'create' | 'update' | 'delete';\n draftAndPublish?: boolean;\n uid?: UID.ContentType;\n renames?: Array<{ oldName: string; newName: string }>;\n attributes?: Array<{ action: 'create' | 'update' | 'delete'; name: string }>;\n};\n\n// The payload carries the full attribute list and the saved schema is built from\n// it, so the names that will be written are the payload attributes that are not\n// deleted. The rename hops do not decide what is saved. The one exception is\n// non-configurable attributes: the builder keeps them from the current schema\n// whatever the payload says, so they are always part of the saved schema.\nconst getEffectiveAttributeNames = (contentType: ContentTypeSchemaAction): string[] => {\n const names = new Set(\n (contentType.attributes ?? [])\n .filter((attribute) => attribute.action !== 'delete')\n .map((attribute) => attribute.name)\n );\n\n if (contentType.action === 'update' && contentType.uid) {\n const existingAttributes = strapi.contentTypes[contentType.uid]?.attributes ?? {};\n\n for (const [name, attribute] of Object.entries(existingAttributes)) {\n if (!isConfigurable(attribute)) {\n names.add(name);\n }\n }\n }\n\n return [...names];\n};\n\nexport const verifyDraftAndPublishReservedAttributes: SuperRefinement<ContentTypeSchemaAction> = (\n contentType,\n ctx\n) => {\n if (contentType.action === 'delete' || !contentType.draftAndPublish) {\n return;\n }\n\n const reservedAttributeNames = contentTypes.findDraftAndPublishReservedAttributeNames(\n getEffectiveAttributeNames(contentType)\n );\n\n if (reservedAttributeNames.length > 0) {\n ctx.addIssue({\n code: 'custom',\n message: contentTypes.getDraftAndPublishEnableBlockedMessage(reservedAttributeNames),\n path: ['draftAndPublish'],\n });\n }\n};\n\nexport const maxLengthGreaterThanMinLength: SuperRefinement<Record<string, unknown>> = (\n value,\n ctx\n) => {\n if (\n value.maxLength != null &&\n value.minLength != null &&\n isNumber(value.maxLength) &&\n isNumber(value.minLength)\n ) {\n if (value.maxLength < value.minLength) {\n ctx.addIssue({\n code: 'custom',\n message: 'maxLength must be greater or equal to minLength',\n path: ['maxLength'],\n });\n }\n }\n};\n\nexport const maxGreaterThanMin: SuperRefinement<Record<string, unknown>> = (value, ctx) => {\n if (value.max != null && value.min != null && isNumber(value.max) && isNumber(value.min)) {\n if (value.max < value.min) {\n ctx.addIssue({\n code: 'custom',\n message: 'max must be greater or equal to min',\n path: ['max'],\n });\n }\n }\n};\n\nconst checkUserTarget: SuperRefinement<{\n type: string;\n target?: string;\n relation?: string;\n targetAttribute?: string | null;\n}> = (value, ctx) => {\n if (value.type !== 'relation') {\n return;\n }\n\n if (value.target === undefined || value.relation === undefined) {\n return;\n }\n\n const { target, relation, targetAttribute } = value;\n\n if (\n target === coreUids.STRAPI_USER &&\n (!STRAPI_USER_RELATIONS.includes(relation) || targetAttribute !== undefined)\n ) {\n ctx.addIssue({\n code: 'custom',\n path: ['relation'],\n message: `Relations to ${coreUids.STRAPI_USER} must be one of the following values: ${STRAPI_USER_RELATIONS.join(', ')} without targetAttribute`,\n });\n }\n};\n\nconst uidRefinement: SuperRefinement<{\n type: string;\n default?: unknown;\n targetField?: string | null;\n}> = (value, ctx) => {\n if (value.targetField != null && value.default != null) {\n ctx.addIssue({\n code: 'custom',\n message: 'Cannot define a default UID if the targetField is set',\n path: ['default'],\n });\n }\n};\n\nconst enumRefinement: SuperRefinement<{\n type: string;\n default?: unknown;\n enum?: string[];\n}> = (value, ctx) => {\n if (value.type === 'enumeration' && value.default != null && value.enum != null) {\n if (value.default === '' || !value.enum.some((v) => v === value.default)) {\n ctx.addIssue({\n code: 'custom',\n message: 'Default value must be one of the enum values',\n path: ['default'],\n });\n }\n }\n};\n\nconst conditionSchema = z.object({\n visible: z.record(z.string(), z.array(z.any())),\n});\n\nconst basePropertiesSchema = z.object({\n type: z.enum([\n 'string',\n 'text',\n 'richtext',\n 'blocks',\n 'json',\n 'enumeration',\n 'password',\n 'email',\n 'integer',\n 'biginteger',\n 'float',\n 'decimal',\n 'time',\n 'datetime',\n 'date',\n 'timestamp',\n 'boolean',\n 'component',\n 'uid',\n 'customField',\n 'media',\n 'relation',\n 'dynamiczone',\n ]),\n configurable: z.boolean().nullish(),\n private: z.boolean().nullish(),\n // Keep null invalid so searchability is always an explicit boolean when provided.\n searchable: z.boolean().optional(),\n pluginOptions: z.record(z.string(), z.unknown()).optional(),\n conditions: z.preprocess((val) => {\n return val;\n }, conditionSchema.optional()),\n});\n\nconst maxLengthSchema = z.number().int().positive().optional();\nconst minLengthSchema = z.number().int().positive().optional();\n\nconst requiredSchema = z.boolean().optional();\nconst uniqueSchema = z.boolean().optional();\n\nconst STRAPI_USER_RELATIONS = ['oneToOne', 'oneToMany'];\n\nconst baseRelationSchema = z.object({\n type: z.literal('relation'),\n relation: z.enum([\n 'oneToOne',\n 'oneToMany',\n 'manyToOne',\n 'manyToMany',\n 'morphOne',\n 'morphMany',\n 'morphToOne',\n 'morphToMany',\n ]),\n configurable: z.boolean().nullish(),\n required: requiredSchema,\n private: z.boolean().nullish(),\n pluginOptions: z.record(z.string(), z.unknown()).optional(),\n conditions: z.preprocess((val) => {\n return val;\n }, conditionSchema.optional()),\n});\n\nconst oneToOneSchema = baseRelationSchema.extend({\n relation: z.literal('oneToOne'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst oneWaySchema = baseRelationSchema.extend({\n relation: z.literal('oneToOne'),\n target: z.string(),\n});\n\nconst oneToManySchema = baseRelationSchema.extend({\n relation: z.literal('oneToMany'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst manyWaySchema = baseRelationSchema.extend({\n relation: z.literal('oneToMany'),\n target: z.string(),\n});\n\nconst manyToOneSchema = baseRelationSchema.extend({\n relation: z.literal('manyToOne'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst manyToManySchema = baseRelationSchema.extend({\n relation: z.literal('manyToMany'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst morphOneSchema = baseRelationSchema.extend({\n relation: z.literal('morphOne'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst morphManySchema = baseRelationSchema.extend({\n relation: z.literal('morphMany'),\n target: z.string(),\n targetAttribute: z.string().nullish(),\n});\n\nconst morphToOneSchema = baseRelationSchema.extend({\n relation: z.literal('morphToOne'),\n});\n\nconst morphToManySchema = baseRelationSchema.extend({\n relation: z.literal('morphToMany'),\n});\n\nconst createRelationSchema = (meta: SchemaMeta) => {\n switch (meta.modelType) {\n case 'contentType': {\n switch (meta.kind) {\n case 'singleType':\n return z.discriminatedUnion('relation', [\n oneToOneSchema,\n oneToManySchema,\n morphOneSchema,\n morphManySchema,\n morphToOneSchema,\n morphToManySchema,\n ]);\n\n case 'collectionType':\n return z.discriminatedUnion('relation', [\n oneToOneSchema,\n oneToManySchema,\n manyToOneSchema,\n manyToManySchema,\n morphOneSchema,\n morphManySchema,\n morphToOneSchema,\n morphToManySchema,\n ]);\n default:\n throw new Error('Invalid content type kind');\n }\n }\n\n case 'component': {\n return z.discriminatedUnion('relation', [oneWaySchema, manyWaySchema]);\n }\n default:\n throw new Error('Invalid model type');\n }\n};\n\nconst richTextSchema = basePropertiesSchema.extend({\n type: z.literal('richtext'),\n required: requiredSchema,\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n default: z.string().optional(),\n});\n\nconst blocksSchema = basePropertiesSchema.extend({\n type: z.literal('blocks'),\n required: requiredSchema,\n});\n\nconst jsonSchema = basePropertiesSchema.extend({\n type: z.literal('json'),\n required: requiredSchema,\n default: z\n .unknown()\n .optional()\n .refine((value) => {\n if (value === undefined) {\n return true;\n }\n\n if (isNumber(value) || value === null || isObject(value) || Array.isArray(value)) {\n return true;\n }\n\n try {\n JSON.parse(value as string);\n\n return true;\n } catch {\n return false;\n }\n }),\n});\n\nconst enumerationSchema = basePropertiesSchema.extend({\n type: z.literal('enumeration'),\n required: requiredSchema,\n default: z.string().optional(),\n enumName: z\n .string()\n .optional()\n .refine((value) => {\n return value === '' || NAME_REGEX.test(value as string);\n }, 'Invalid enum name'),\n enum: z\n .array(\n z.string().refine((value) => {\n return value === '' || !strings.startsWithANumber(value as string);\n })\n )\n .min(1)\n .refine((values) => {\n const filtered = [...new Set(values)];\n return filtered.length === values.length;\n }),\n});\n\nconst textSchema = basePropertiesSchema.extend({\n type: z.literal('text'),\n default: z.string().nullish(),\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n required: requiredSchema,\n unique: uniqueSchema,\n regex: z\n .string()\n .optional()\n .refine((value) => {\n return value === '' || !!new RegExp(value as string);\n }, 'Invalid regular expression pattern'),\n});\n\nconst stringSchema = textSchema.extend({\n type: z.literal('string'),\n});\n\nconst passwordSchema = basePropertiesSchema.extend({\n type: z.literal('password'),\n required: requiredSchema,\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n});\n\nconst emailSchema = basePropertiesSchema.extend({\n type: z.literal('email'),\n required: requiredSchema,\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n default: z.string().email().optional(),\n unique: uniqueSchema,\n});\n\nconst integerSchema = basePropertiesSchema.extend({\n type: z.literal('integer'),\n required: requiredSchema,\n default: z.number().int().optional(),\n unique: uniqueSchema,\n min: z.number().int().optional(),\n max: z.number().int().optional(),\n});\n\nconst bigIntegerSchema = basePropertiesSchema.extend({\n type: z.literal('biginteger'),\n required: requiredSchema,\n unique: uniqueSchema,\n default: z.string().regex(/^\\d*$/).nullish(),\n min: z.string().regex(/^\\d*$/).nullish(),\n max: z.string().regex(/^\\d*$/).nullish(),\n});\n\nconst floatSchema = basePropertiesSchema.extend({\n type: z.literal('float'),\n required: requiredSchema,\n unique: uniqueSchema,\n default: z.number().optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\nconst decimalSchema = basePropertiesSchema.extend({\n type: z.literal('decimal'),\n required: requiredSchema,\n unique: uniqueSchema,\n default: z.number().optional(),\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\nconst timeSchema = basePropertiesSchema.extend({\n type: z.literal('time'),\n required: requiredSchema,\n unique: uniqueSchema,\n default: z.string().optional(),\n});\n\nconst dateSchema = timeSchema.extend({\n type: z.literal('date'),\n});\n\nconst dateTimeSchema = timeSchema.extend({\n type: z.literal('datetime'),\n});\n\nconst timeStampSchema = basePropertiesSchema.extend({\n type: z.literal('timestamp'),\n});\n\nconst booleanSchema = basePropertiesSchema.extend({\n type: z.literal('boolean'),\n required: requiredSchema,\n default: z.boolean().optional(),\n});\n\nconst componentSchema = basePropertiesSchema.extend({\n type: z.literal('component'),\n component: z.string(),\n repeatable: z.boolean().optional(),\n required: requiredSchema,\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\nconst dynamicZoneSchema = basePropertiesSchema.extend({\n type: z.literal('dynamiczone'),\n components: z.array(z.string()).nonempty(),\n required: requiredSchema,\n min: z.number().optional(),\n max: z.number().optional(),\n});\n\nconst mediaSchema = basePropertiesSchema.extend({\n type: z.literal('media'),\n multiple: z.boolean().optional(),\n required: requiredSchema,\n allowedTypes: z\n .array(z.enum(['images', 'videos', 'files', 'audios']))\n .nonempty()\n .optional(),\n});\n\nconst uidSchema = basePropertiesSchema.extend({\n type: z.literal('uid'),\n targetField: z.string().nullish(),\n required: requiredSchema,\n default: z.string().nullish(),\n minLength: minLengthSchema,\n maxLength: maxLengthSchema,\n options: z\n .object({\n separator: z.string().optional(),\n lowercase: z.boolean().optional(),\n decamelize: z.boolean().optional(),\n customReplacements: z.array(z.array(z.string()).length(2)).optional(),\n preserveLeadingUnderscore: z.boolean().optional(),\n })\n .optional(),\n regex: z\n .string()\n .optional()\n .refine((value) => {\n return value === '' || !!new RegExp(value as string);\n }, 'Invalid regular expression pattern'),\n});\n\nconst customFieldSchema = basePropertiesSchema.extend({\n type: z.literal('customField'),\n customField: z.string(),\n});\n\nconst attributePropertiesSchema = (meta: SchemaMeta) => {\n const relationSchema = createRelationSchema(meta);\n\n const base = z.union([\n mediaSchema,\n textSchema,\n stringSchema,\n richTextSchema,\n blocksSchema,\n jsonSchema,\n enumerationSchema,\n passwordSchema,\n emailSchema,\n integerSchema,\n bigIntegerSchema,\n floatSchema,\n decimalSchema,\n timeSchema,\n dateSchema,\n dateTimeSchema,\n timeStampSchema,\n booleanSchema,\n componentSchema,\n customFieldSchema.passthrough(),\n\n relationSchema,\n ]);\n\n if (meta.modelType === 'component') {\n return base\n .superRefine(enumRefinement)\n .superRefine(checkUserTarget)\n .superRefine(maxGreaterThanMin)\n .superRefine(maxLengthGreaterThanMinLength);\n }\n\n return z\n .union([...base.options, uidSchema, dynamicZoneSchema])\n .superRefine(enumRefinement)\n .superRefine(checkUserTarget)\n .superRefine(uidRefinement)\n .superRefine(maxGreaterThanMin)\n .superRefine(maxLengthGreaterThanMinLength);\n};\n\nconst createAttributeSchema = (meta: SchemaMeta) =>\n z.object({\n action: z.literal('create'),\n name: z\n .string()\n .regex(NAME_REGEX)\n .refine((value) => !isReservedAttributeName(value), 'Attribute name is reserved'),\n properties: attributePropertiesSchema(meta),\n });\n\nconst updateAttributeSchema = (meta: SchemaMeta) =>\n z.object({\n action: z.literal('update'),\n name: z.string(),\n properties: attributePropertiesSchema(meta),\n });\n\n// Ordered list of attribute rename hops performed by the user for a given\n// content-type / component, used to generate a data-preserving rename migration.\n// The order is significant: the migration replays each hop verbatim.\n// Names end up in generated migration code, so they are held to the attribute\n// name rules. The new name is held to the same reserved-name rules as a newly\n// created attribute. The old name only has to be a name an attribute can\n// legally carry today: `status` is reserved only while draft and publish is\n// enabled, and renaming it away is exactly how a type gets to enable it.\nconst renameHopNameSchema = z.string().min(1).max(64).regex(NAME_REGEX);\n\nconst renameHopOldNameSchema = renameHopNameSchema.refine(\n (value) => !contentTypes.isReservedAttributeName(value, { draftAndPublish: false }),\n 'Attribute name is reserved'\n);\n\nconst renameHopNewNameSchema = renameHopNameSchema.refine(\n (value) => !isReservedAttributeName(value),\n 'Attribute name is reserved'\n);\n\nconst renamesSchema = z\n .array(\n z\n .object({\n oldName: renameHopOldNameSchema,\n newName: renameHopNewNameSchema,\n })\n .refine((hop) => hop.oldName !== hop.newName, 'A rename must change the attribute name')\n )\n .max(200)\n .optional();\n\nconst deleteAttributeSchema = z.object({\n action: z.literal('delete'),\n name: z.string(),\n});\n\nconst contentTypeUIDSchema = z.custom<UID.ContentType>((value) => {\n return typeof value === 'string' && value.length > 0;\n});\n\nconst componentUIDSchema = z.custom<UID.Component>((value) => {\n return typeof value === 'string' && value.length > 0;\n});\n\nconst categorySchema = z.string().min(1).regex(CATEGORY_NAME_REGEX);\n\nconst baseComponentSchema = z.object({\n uid: componentUIDSchema,\n displayName: z.string().min(1),\n icon: z.string().regex(ICON_REGEX).optional(),\n description: z.string().optional(),\n category: categorySchema,\n pluginOptions: z.record(z.string(), z.unknown()).optional(),\n});\n\nconst createComponentSchema = baseComponentSchema.extend({\n action: z.literal('create'),\n config: z.record(z.string(), z.unknown()).optional().default({}),\n attributes: z\n .array(\n createAttributeSchema({\n modelType: 'component',\n })\n )\n .superRefine(uniqueAttributeName),\n});\n\nconst updateComponentSchema = baseComponentSchema.extend({\n action: z.literal('update'),\n category: categorySchema.optional(),\n renames: renamesSchema,\n attributes: z\n .array(\n z.discriminatedUnion('action', [\n createAttributeSchema({\n modelType: 'component',\n }),\n updateAttributeSchema({\n modelType: 'component',\n }),\n deleteAttributeSchema,\n ])\n )\n .superRefine(uniqueAttributeName),\n});\n\nconst deleteComponentSchema = z.object({\n action: z.literal('delete'),\n uid: componentUIDSchema,\n});\n\nconst baseContentTypeSchema = z.object({\n uid: contentTypeUIDSchema,\n displayName: z.string().min(1),\n description: z.string().optional(),\n draftAndPublish: z.boolean(),\n options: z.record(z.string(), z.unknown()).optional().default({}),\n pluginOptions: z.record(z.string(), z.unknown()).optional().default({}),\n kind: z.enum([typeKinds.SINGLE_TYPE, typeKinds.COLLECTION_TYPE]).optional(),\n});\n\nconst baseCreateContentTypeSchema = baseContentTypeSchema.extend({\n action: z.literal('create'),\n plugin: z.string().min(1).optional(),\n collectionName: z.string().regex(COLLECTION_NAME_REGEX).optional(),\n singularName: z\n .string()\n .min(1)\n .regex(KEBAB_BASE_REGEX, 'Must be kebab case')\n .refine((value) => !isReservedModelName(value), 'Model name is reserved'),\n pluralName: z\n .string()\n .min(1)\n .regex(KEBAB_BASE_REGEX, 'Must be kebab case')\n .refine((value) => !isReservedModelName(value), 'Model name is reserved'),\n config: z.record(z.string(), z.unknown()).optional(),\n});\n\nconst createSingleTypeSchema = baseCreateContentTypeSchema.extend({\n kind: z.literal(typeKinds.SINGLE_TYPE),\n attributes: z\n .array(\n createAttributeSchema({\n modelType: 'contentType',\n kind: 'singleType',\n })\n )\n .superRefine(uniqueAttributeName)\n .superRefine(verifyUidTargetField),\n});\n\nconst createCollectionTypeSchema = baseCreateContentTypeSchema.extend({\n kind: z.literal(typeKinds.COLLECTION_TYPE),\n attributes: z\n .array(\n createAttributeSchema({\n modelType: 'contentType',\n kind: 'collectionType',\n })\n )\n .superRefine(uniqueAttributeName)\n .superRefine(verifyUidTargetField),\n});\n\nconst baseUpdateContentTypeSchema = baseContentTypeSchema.extend({\n action: z.literal('update'),\n renames: renamesSchema,\n});\n\nconst updateSingleTypeSchema = baseUpdateContentTypeSchema.extend({\n kind: z.literal(typeKinds.SINGLE_TYPE).optional(),\n attributes: z\n .array(\n z.discriminatedUnion('action', [\n createAttributeSchema({\n modelType: 'contentType',\n kind: 'singleType',\n }),\n updateAttributeSchema({\n modelType: 'contentType',\n kind: 'singleType',\n }),\n deleteAttributeSchema,\n ])\n )\n .superRefine(uniqueAttributeName)\n .superRefine(verifyUidTargetField),\n});\n\nconst updateCollectionTypeSchema = baseUpdateContentTypeSchema.extend({\n kind: z.literal(typeKinds.COLLECTION_TYPE).optional(),\n attributes: z\n .array(\n z.union([\n createAttributeSchema({\n modelType: 'contentType',\n kind: 'collectionType',\n }),\n updateAttributeSchema({\n modelType: 'contentType',\n kind: 'collectionType',\n }),\n deleteAttributeSchema,\n ])\n )\n .superRefine(uniqueAttributeName)\n .superRefine(verifyUidTargetField),\n});\n\nconst deleteContentTypeSchema = z.object({\n action: z.literal('delete'),\n uid: contentTypeUIDSchema,\n});\n\nconst schemaSchema = z.object({\n components: z\n .array(z.union([createComponentSchema, updateComponentSchema, deleteComponentSchema]))\n .optional()\n .default([]),\n contentTypes: z\n .array(\n z\n .union([\n createSingleTypeSchema,\n createCollectionTypeSchema,\n updateSingleTypeSchema,\n updateCollectionTypeSchema,\n deleteContentTypeSchema,\n ])\n .superRefine(verifySingularAndPluralNames)\n .superRefine(verifyDraftAndPublishReservedAttributes)\n )\n .optional()\n .default([]),\n contentStructure: contentStructureFileSchema.optional(),\n});\n\ntype CreateComponentType = z.infer<typeof createComponentSchema>;\ntype UpdateComponentType = z.infer<typeof updateComponentSchema>;\ntype DeleteComponentType = z.infer<typeof deleteComponentSchema>;\ntype CreateCollectionType = z.infer<typeof createCollectionTypeSchema>;\ntype CreateSingleType = z.infer<typeof createSingleTypeSchema>;\ntype UpdateSingleType = z.infer<typeof updateSingleTypeSchema>;\ntype UpdateCollectionType = z.infer<typeof updateCollectionTypeSchema>;\ntype DeleteContentType = z.infer<typeof deleteContentTypeSchema>;\n\nexport type Schema = {\n components: Array<CreateComponentType | UpdateComponentType | DeleteComponentType>;\n contentTypes: Array<\n | CreateSingleType\n | CreateCollectionType\n | UpdateSingleType\n | UpdateCollectionType\n | DeleteContentType\n >;\n contentStructure?: ContentStructureFileInput;\n};\n\nconst updateSchemaInput = z.object(\n {\n data: schemaSchema,\n },\n {\n error: (issue) =>\n issue.input === undefined\n ? 'Schema is required'\n : 'Invalid schema, expected an object with a data property',\n }\n);\n\nexport const validateUpdateSchema = validateZodSchema(updateSchemaInput);\n"],"names":["uniqueAttributeName","attributes","ctx","names","Set","map","attribute","snakeCase","name","size","length","addIssue","code","message","verifyUidTargetField","forEach","properties","action","type","targetField","targetAttr","find","attr","isValidUidTarget","verifySingularAndPluralNames","obj","singularName","pluralName","path","getEffectiveAttributeNames","contentType","filter","uid","existingAttributes","strapi","contentTypes","Object","entries","isConfigurable","add","verifyDraftAndPublishReservedAttributes","draftAndPublish","reservedAttributeNames","findDraftAndPublishReservedAttributeNames","getDraftAndPublishEnableBlockedMessage","maxLengthGreaterThanMinLength","value","maxLength","minLength","isNumber","maxGreaterThanMin","max","min","checkUserTarget","target","undefined","relation","targetAttribute","coreUids","STRAPI_USER","STRAPI_USER_RELATIONS","includes","join","uidRefinement","default","enumRefinement","enum","some","v","conditionSchema","z","object","visible","record","string","array","any","basePropertiesSchema","configurable","boolean","nullish","private","searchable","optional","pluginOptions","unknown","conditions","preprocess","val","maxLengthSchema","number","int","positive","minLengthSchema","requiredSchema","uniqueSchema","baseRelationSchema","literal","required","oneToOneSchema","extend","oneWaySchema","oneToManySchema","manyWaySchema","manyToOneSchema","manyToManySchema","morphOneSchema","morphManySchema","morphToOneSchema","morphToManySchema","createRelationSchema","meta","modelType","kind","discriminatedUnion","Error","richTextSchema","blocksSchema","jsonSchema","refine","isObject","Array","isArray","JSON","parse","enumerationSchema","enumName","NAME_REGEX","test","strings","startsWithANumber","values","filtered","textSchema","unique","regex","RegExp","stringSchema","passwordSchema","emailSchema","email","integerSchema","bigIntegerSchema","floatSchema","decimalSchema","timeSchema","dateSchema","dateTimeSchema","timeStampSchema","booleanSchema","componentSchema","component","repeatable","dynamicZoneSchema","components","nonempty","mediaSchema","multiple","allowedTypes","uidSchema","options","separator","lowercase","decamelize","customReplacements","preserveLeadingUnderscore","customFieldSchema","customField","attributePropertiesSchema","relationSchema","base","union","passthrough","superRefine","createAttributeSchema","isReservedAttributeName","updateAttributeSchema","renameHopNameSchema","renameHopOldNameSchema","renameHopNewNameSchema","renamesSchema","oldName","newName","hop","deleteAttributeSchema","contentTypeUIDSchema","custom","componentUIDSchema","categorySchema","CATEGORY_NAME_REGEX","baseComponentSchema","displayName","icon","ICON_REGEX","description","category","createComponentSchema","config","updateComponentSchema","renames","deleteComponentSchema","baseContentTypeSchema","typeKinds","SINGLE_TYPE","COLLECTION_TYPE","baseCreateContentTypeSchema","plugin","collectionName","COLLECTION_NAME_REGEX","KEBAB_BASE_REGEX","isReservedModelName","createSingleTypeSchema","createCollectionTypeSchema","baseUpdateContentTypeSchema","updateSingleTypeSchema","updateCollectionTypeSchema","deleteContentTypeSchema","schemaSchema","contentStructure","contentStructureFileSchema","updateSchemaInput","data","error","issue","input","validateUpdateSchema","validateZodSchema"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sources":["../../server/src/register.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { CSP_DEFAULTS, extendMiddlewareConfiguration } from '@strapi/utils';\n\nexport default async ({ strapi }: { strapi: Core.Strapi }) => {\n const isAiEnabled = strapi.ai.admin.isStrapiManagedAiEnabled();\n\n if (isAiEnabled) {\n const s3Domains = [\n 'strapi-ai-staging.s3.us-east-1.amazonaws.com',\n 'strapi-ai-production.s3.us-east-1.amazonaws.com',\n ];\n\n const defaultImgSrc = CSP_DEFAULTS['img-src'];\n const defaultMediaSrc = CSP_DEFAULTS['media-src'];\n\n // Extend the security middleware configuration to include S3 domains + defaults\n const middlewares = strapi.config.get('middlewares') as (\n | string\n | { name?: string; config?: any }\n )[];\n\n const configuredMiddlewares = extendMiddlewareConfiguration(middlewares, {\n name: 'strapi::security',\n config: {\n contentSecurityPolicy: {\n directives: {\n 'img-src': [...defaultImgSrc, ...s3Domains],\n 'media-src': [...defaultMediaSrc, ...s3Domains],\n },\n },\n },\n });\n\n strapi.config.set('middlewares', configuredMiddlewares);\n }\n};\n"],"names":["strapi","isAiEnabled","ai","admin","isStrapiManagedAiEnabled","s3Domains","defaultImgSrc","CSP_DEFAULTS","defaultMediaSrc","middlewares","config","get","configuredMiddlewares","extendMiddlewareConfiguration","name","contentSecurityPolicy","directives","set"],"mappings":";;;;AAGA,eAAe,CAAA,OAAO,EAAEA,MAAM,EAA2B,GAAA;AACvD,IAAA,MAAMC,cAAcD,MAAAA,CAAOE,EAAE,CAACC,KAAK,CAACC,wBAAwB,EAAA;AAE5D,IAAA,IAAIH,WAAAA,EAAa;AACf,QAAA,MAAMI,SAAAA,GAAY;AAChB,YAAA,8CAAA;AACA,YAAA;AACD,SAAA;QAED,MAAMC,aAAAA,GAAgBC,kBAAY,CAAC,SAAA,CAAU;QAC7C,MAAMC,eAAAA,GAAkBD,kBAAY,CAAC,WAAA,CAAY;;AAGjD,QAAA,MAAME,WAAAA,GAAcT,MAAAA,CAAOU,MAAM,CAACC,GAAG,CAAC,aAAA,CAAA;QAKtC,MAAMC,qBAAAA,GAAwBC,oCAA8BJ,WAAAA,EAAa;YACvEK,IAAAA,EAAM,kBAAA;YACNJ,MAAAA,EAAQ;gBACNK,qBAAAA,EAAuB;oBACrBC,UAAAA,EAAY;wBACV,SAAA,EAAW;AAAIV,4BAAAA,GAAAA,aAAAA;AAAkBD,4BAAAA,GAAAA;AAAU,yBAAA;wBAC3C,WAAA,EAAa;AAAIG,4BAAAA,GAAAA,eAAAA;AAAoBH,4BAAAA,GAAAA;AAAU;AACjD;AACF;AACF;AACF,SAAA,CAAA;AAEAL,QAAAA,MAAAA,CAAOU,MAAM,CAACO,GAAG,CAAC,aAAA,EAAeL,qBAAAA,CAAAA;AACnC,IAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"register.js","sources":["../../server/src/register.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { CSP_DEFAULTS, extendMiddlewareConfiguration } from '@strapi/utils';\n\nexport default async ({ strapi }: { strapi: Core.Strapi }) => {\n const isAiEnabled = strapi.ai.admin.isStrapiManagedAiEnabled();\n\n if (isAiEnabled) {\n const s3Domains = [\n 'strapi-ai-staging.s3.us-east-1.amazonaws.com',\n 'strapi-ai-production.s3.us-east-1.amazonaws.com',\n ];\n\n const defaultImgSrc = CSP_DEFAULTS['img-src'];\n const defaultMediaSrc = CSP_DEFAULTS['media-src'];\n\n // Extend the security middleware configuration to include S3 domains + defaults\n const middlewares = strapi.config.get('middlewares') as (\n string | { name?: string; config?: any }\n )[];\n\n const configuredMiddlewares = extendMiddlewareConfiguration(middlewares, {\n name: 'strapi::security',\n config: {\n contentSecurityPolicy: {\n directives: {\n 'img-src': [...defaultImgSrc, ...s3Domains],\n 'media-src': [...defaultMediaSrc, ...s3Domains],\n },\n },\n },\n });\n\n strapi.config.set('middlewares', configuredMiddlewares);\n }\n};\n"],"names":["strapi","isAiEnabled","ai","admin","isStrapiManagedAiEnabled","s3Domains","defaultImgSrc","CSP_DEFAULTS","defaultMediaSrc","middlewares","config","get","configuredMiddlewares","extendMiddlewareConfiguration","name","contentSecurityPolicy","directives","set"],"mappings":";;;;AAGA,eAAe,CAAA,OAAO,EAAEA,MAAM,EAA2B,GAAA;AACvD,IAAA,MAAMC,cAAcD,MAAAA,CAAOE,EAAE,CAACC,KAAK,CAACC,wBAAwB,EAAA;AAE5D,IAAA,IAAIH,WAAAA,EAAa;AACf,QAAA,MAAMI,SAAAA,GAAY;AAChB,YAAA,8CAAA;AACA,YAAA;AACD,SAAA;QAED,MAAMC,aAAAA,GAAgBC,kBAAY,CAAC,SAAA,CAAU;QAC7C,MAAMC,eAAAA,GAAkBD,kBAAY,CAAC,WAAA,CAAY;;AAGjD,QAAA,MAAME,WAAAA,GAAcT,MAAAA,CAAOU,MAAM,CAACC,GAAG,CAAC,aAAA,CAAA;QAItC,MAAMC,qBAAAA,GAAwBC,oCAA8BJ,WAAAA,EAAa;YACvEK,IAAAA,EAAM,kBAAA;YACNJ,MAAAA,EAAQ;gBACNK,qBAAAA,EAAuB;oBACrBC,UAAAA,EAAY;wBACV,SAAA,EAAW;AAAIV,4BAAAA,GAAAA,aAAAA;AAAkBD,4BAAAA,GAAAA;AAAU,yBAAA;wBAC3C,WAAA,EAAa;AAAIG,4BAAAA,GAAAA,eAAAA;AAAoBH,4BAAAA,GAAAA;AAAU;AACjD;AACF;AACF;AACF,SAAA,CAAA;AAEAL,QAAAA,MAAAA,CAAOU,MAAM,CAACO,GAAG,CAAC,aAAA,EAAeL,qBAAAA,CAAAA;AACnC,IAAA;AACF,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"register.mjs","sources":["../../server/src/register.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { CSP_DEFAULTS, extendMiddlewareConfiguration } from '@strapi/utils';\n\nexport default async ({ strapi }: { strapi: Core.Strapi }) => {\n const isAiEnabled = strapi.ai.admin.isStrapiManagedAiEnabled();\n\n if (isAiEnabled) {\n const s3Domains = [\n 'strapi-ai-staging.s3.us-east-1.amazonaws.com',\n 'strapi-ai-production.s3.us-east-1.amazonaws.com',\n ];\n\n const defaultImgSrc = CSP_DEFAULTS['img-src'];\n const defaultMediaSrc = CSP_DEFAULTS['media-src'];\n\n // Extend the security middleware configuration to include S3 domains + defaults\n const middlewares = strapi.config.get('middlewares') as (\n | string\n | { name?: string; config?: any }\n )[];\n\n const configuredMiddlewares = extendMiddlewareConfiguration(middlewares, {\n name: 'strapi::security',\n config: {\n contentSecurityPolicy: {\n directives: {\n 'img-src': [...defaultImgSrc, ...s3Domains],\n 'media-src': [...defaultMediaSrc, ...s3Domains],\n },\n },\n },\n });\n\n strapi.config.set('middlewares', configuredMiddlewares);\n }\n};\n"],"names":["strapi","isAiEnabled","ai","admin","isStrapiManagedAiEnabled","s3Domains","defaultImgSrc","CSP_DEFAULTS","defaultMediaSrc","middlewares","config","get","configuredMiddlewares","extendMiddlewareConfiguration","name","contentSecurityPolicy","directives","set"],"mappings":";;AAGA,eAAe,CAAA,OAAO,EAAEA,MAAM,EAA2B,GAAA;AACvD,IAAA,MAAMC,cAAcD,MAAAA,CAAOE,EAAE,CAACC,KAAK,CAACC,wBAAwB,EAAA;AAE5D,IAAA,IAAIH,WAAAA,EAAa;AACf,QAAA,MAAMI,SAAAA,GAAY;AAChB,YAAA,8CAAA;AACA,YAAA;AACD,SAAA;QAED,MAAMC,aAAAA,GAAgBC,YAAY,CAAC,SAAA,CAAU;QAC7C,MAAMC,eAAAA,GAAkBD,YAAY,CAAC,WAAA,CAAY;;AAGjD,QAAA,MAAME,WAAAA,GAAcT,MAAAA,CAAOU,MAAM,CAACC,GAAG,CAAC,aAAA,CAAA;QAKtC,MAAMC,qBAAAA,GAAwBC,8BAA8BJ,WAAAA,EAAa;YACvEK,IAAAA,EAAM,kBAAA;YACNJ,MAAAA,EAAQ;gBACNK,qBAAAA,EAAuB;oBACrBC,UAAAA,EAAY;wBACV,SAAA,EAAW;AAAIV,4BAAAA,GAAAA,aAAAA;AAAkBD,4BAAAA,GAAAA;AAAU,yBAAA;wBAC3C,WAAA,EAAa;AAAIG,4BAAAA,GAAAA,eAAAA;AAAoBH,4BAAAA,GAAAA;AAAU;AACjD;AACF;AACF;AACF,SAAA,CAAA;AAEAL,QAAAA,MAAAA,CAAOU,MAAM,CAACO,GAAG,CAAC,aAAA,EAAeL,qBAAAA,CAAAA;AACnC,IAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"register.mjs","sources":["../../server/src/register.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { CSP_DEFAULTS, extendMiddlewareConfiguration } from '@strapi/utils';\n\nexport default async ({ strapi }: { strapi: Core.Strapi }) => {\n const isAiEnabled = strapi.ai.admin.isStrapiManagedAiEnabled();\n\n if (isAiEnabled) {\n const s3Domains = [\n 'strapi-ai-staging.s3.us-east-1.amazonaws.com',\n 'strapi-ai-production.s3.us-east-1.amazonaws.com',\n ];\n\n const defaultImgSrc = CSP_DEFAULTS['img-src'];\n const defaultMediaSrc = CSP_DEFAULTS['media-src'];\n\n // Extend the security middleware configuration to include S3 domains + defaults\n const middlewares = strapi.config.get('middlewares') as (\n string | { name?: string; config?: any }\n )[];\n\n const configuredMiddlewares = extendMiddlewareConfiguration(middlewares, {\n name: 'strapi::security',\n config: {\n contentSecurityPolicy: {\n directives: {\n 'img-src': [...defaultImgSrc, ...s3Domains],\n 'media-src': [...defaultMediaSrc, ...s3Domains],\n },\n },\n },\n });\n\n strapi.config.set('middlewares', configuredMiddlewares);\n }\n};\n"],"names":["strapi","isAiEnabled","ai","admin","isStrapiManagedAiEnabled","s3Domains","defaultImgSrc","CSP_DEFAULTS","defaultMediaSrc","middlewares","config","get","configuredMiddlewares","extendMiddlewareConfiguration","name","contentSecurityPolicy","directives","set"],"mappings":";;AAGA,eAAe,CAAA,OAAO,EAAEA,MAAM,EAA2B,GAAA;AACvD,IAAA,MAAMC,cAAcD,MAAAA,CAAOE,EAAE,CAACC,KAAK,CAACC,wBAAwB,EAAA;AAE5D,IAAA,IAAIH,WAAAA,EAAa;AACf,QAAA,MAAMI,SAAAA,GAAY;AAChB,YAAA,8CAAA;AACA,YAAA;AACD,SAAA;QAED,MAAMC,aAAAA,GAAgBC,YAAY,CAAC,SAAA,CAAU;QAC7C,MAAMC,eAAAA,GAAkBD,YAAY,CAAC,WAAA,CAAY;;AAGjD,QAAA,MAAME,WAAAA,GAAcT,MAAAA,CAAOU,MAAM,CAACC,GAAG,CAAC,aAAA,CAAA;QAItC,MAAMC,qBAAAA,GAAwBC,8BAA8BJ,WAAAA,EAAa;YACvEK,IAAAA,EAAM,kBAAA;YACNJ,MAAAA,EAAQ;gBACNK,qBAAAA,EAAuB;oBACrBC,UAAAA,EAAY;wBACV,SAAA,EAAW;AAAIV,4BAAAA,GAAAA,aAAAA;AAAkBD,4BAAAA,GAAAA;AAAU,yBAAA;wBAC3C,WAAA,EAAa;AAAIG,4BAAAA,GAAAA,eAAAA;AAAoBH,4BAAAA,GAAAA;AAAU;AACjD;AACF;AACF;AACF,SAAA,CAAA;AAEAL,QAAAA,MAAAA,CAAOU,MAAM,CAACO,GAAG,CAAC,aAAA,EAAeL,qBAAAA,CAAAA;AACnC,IAAA;AACF,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../server/src/services/migration-builder/index.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { contentTypes as contentTypesUtils } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\n/**\n * The CTB-level attribute definition of the *new* side of a rename hop (the\n * `properties` the admin sends for `newName`). Only the storage-relevant keys\n * are inspected; see `isCompatibleRename`.\n */\nexport interface RenameAttributeDefinition {\n type?: string;\n relation?: string;\n target?: string;\n component?: string;\n repeatable?: boolean;\n customField?: string;\n targetAttribute?: string | null;\n inversedBy?: string;\n mappedBy?: string;\n configurable?: boolean;\n [key: string]: unknown;\n}\n\nexport interface RenameNames {\n oldName: string;\n newName: string;\n /**\n * Definition of the attribute under its new name, when known. Used to refuse\n * hops that also change the attribute's storage (e.g. `string` -> `integer`,\n * or a relation retargeted): renaming the column and letting schema sync\n * alter its type in place can fail on Postgres/MySQL, whereas the legacy\n * drop-and-recreate path is always safe.\n */\n newAttribute?: RenameAttributeDefinition;\n}\n\nexport type UnsupportedRenameReason =\n | 'model-not-found'\n | 'attribute-not-found'\n | 'unsupported-type'\n | 'type-changed'\n | 'target-occupied';\n\nexport interface UnsupportedRename {\n uid: string;\n oldName: string;\n newName: string;\n reason: UnsupportedRenameReason;\n}\n\n/**\n * Whether a relation definition has a counterpart on its target. The live\n * schema carries `inversedBy` / `mappedBy`; the CTB payload carries\n * `targetAttribute`.\n */\nconst isBidirectionalRelation = (attribute: RenameAttributeDefinition): boolean =>\n Boolean(attribute.inversedBy || attribute.mappedBy || attribute.targetAttribute);\n\n/**\n * Whether the storage of `oldAttribute` can host `newAttribute` after a plain\n * rename of its physical artifact. Anything else must go through the legacy\n * drop-and-recreate path, so the hop is reported as `type-changed`.\n *\n * `resolveType` maps a definition to its storage type. The builder passes one\n * that resolves custom fields (sent as `type: 'customField'` by the admin, but\n * already converted to their underlying type in the live schema).\n */\nexport const isCompatibleRename = (\n oldAttribute: RenameAttributeDefinition | undefined,\n newAttribute: RenameAttributeDefinition | undefined,\n resolveType: (attribute: RenameAttributeDefinition) => string | undefined = (attribute) =>\n attribute.type\n): boolean => {\n const oldType = oldAttribute ? resolveType(oldAttribute) : undefined;\n const newType = newAttribute ? resolveType(newAttribute) : undefined;\n\n // Without both definitions there is nothing to compare; the metadata-based\n // classification is the only guard we have.\n if (!oldAttribute || !newAttribute || !oldType || !newType) {\n return true;\n }\n\n if (oldType !== newType) {\n return false;\n }\n\n // A different custom field on the same underlying type is still a different\n // field.\n if (\n (oldAttribute.customField || newAttribute.customField) &&\n oldAttribute.customField !== newAttribute.customField\n ) {\n return false;\n }\n\n switch (newType) {\n case 'relation':\n // `manyWay` and a bidirectional `oneToMany` share `relation: 'oneToMany'`,\n // but switching between them moves join-table ownership.\n return (\n oldAttribute.relation === newAttribute.relation &&\n oldAttribute.target === newAttribute.target &&\n isBidirectionalRelation(oldAttribute) === isBidirectionalRelation(newAttribute)\n );\n case 'component':\n return (\n oldAttribute.component === newAttribute.component &&\n Boolean(oldAttribute.repeatable) === Boolean(newAttribute.repeatable)\n );\n default:\n return true;\n }\n};\n\nexport interface BuiltMigration {\n filename: string;\n content: string;\n}\n\n/**\n * How a renamed attribute maps to a physical database artifact, resolved from\n * `strapi.db.metadata` (the live, pre-rename schema). The `from` field is the\n * current physical identifier and moves forward at each hop so rename chains and\n * user-routed swaps replay verbatim.\n *\n * - `scalarColumn` / `joinColumn`: a column on the model's own table. Scalar\n * columns resolve names via `getColumnName`; relation join columns (`<field>_id`)\n * via `getJoinColumnAttributeIdName`.\n * - `joinTable`: a relation backed by a join/link table (the table name encodes\n * the owning attribute name).\n * - `component`: a component or dynamic zone — the attribute name is a *value* in\n * the per-type link table's `field` column, so it is an `UPDATE`, not DDL.\n * - `media`: like `component`, but stored in the shared `files_related_morphs`\n * table, so the `UPDATE` is additionally scoped by `related_type` (the uid).\n * - `skip`: recognised but needs no DB change (e.g. the inverse side of a\n * bidirectional relation — the join table is named from the owning side).\n * - `unsupported`: cannot be migrated automatically (polymorphic morph relations,\n * which are not creatable through the CTB UI anyway).\n */\ntype Resolved =\n | { kind: 'scalarColumn'; table: string; from: string }\n | { kind: 'joinColumn'; table: string; from: string }\n | { kind: 'joinTable'; from: string }\n | { kind: 'component'; table: string; fieldColumn: string; from: string }\n | {\n kind: 'media';\n table: string;\n fieldColumn: string;\n typeColumn: string;\n typeValue: string;\n from: string;\n }\n | { kind: 'skip' }\n | { kind: 'unsupported'; reason: UnsupportedRename['reason'] };\n\ninterface MigrationBuilderDeps {\n strapi: Core.Strapi;\n}\n\n/**\n * The database metadata shapes the builder reads, derived from `Core.Strapi`\n * so the Content-Type Builder does not depend on `@strapi/database` directly.\n */\ntype ModelMeta = NonNullable<ReturnType<Core.Strapi['db']['metadata']['get']>>;\n\n/**\n * A metadata attribute, widened with the relation/join keys the builder\n * inspects (the metadata union only declares them on some members).\n */\ntype AttributeMeta = ModelMeta['attributes'][string] & {\n relation?: string;\n mappedBy?: string;\n morphColumn?: unknown;\n joinColumn?: { name?: string };\n joinTable?: JoinTableMeta;\n};\n\ninterface JoinTableMeta {\n name?: string;\n on?: Record<string, unknown>;\n morphColumn?: { typeColumn?: { name?: string } };\n}\n\ntype SchemaModel = Parameters<typeof contentTypesUtils.getNonVisibleAttributes>[0];\n\n/**\n * Per-uid `origin -> current name` of every received hop, accepted or refused:\n * the logical field is the same field even when its data cannot be carried.\n */\nexport type AttributeRenamesMapping = Record<string, Record<string, string>>;\n\nconst MIGRATION_NAME = 'rename-fields';\n\nexport const createMigrationBuilder = ({ strapi }: MigrationBuilderDeps) => {\n const { db } = strapi;\n\n const migrationFileBuilder = db.migrations.createFileBuilder();\n const unsupported: UnsupportedRename[] = [];\n\n // Physical-name rules shared with the metadata loader, so the *new* side of a\n // rename is derived exactly as `db.metadata` will derive it after the reload.\n const { naming } = db.metadata;\n\n /**\n * The app's *source* migrations dir. Generated files always land here (see\n * `writeFiles`), and it is also the dir discovery reads from when\n * `useTypescriptMigrations` is off or no tsconfig `outDir` resolves.\n */\n const sourceMigrationsDir = () => path.join(strapi.dirs.app.root, 'database', 'migrations');\n\n let format: 'javascript' | 'typescript' | undefined;\n\n /**\n * Mirror the database's discovery decision (`Strapi.ts`): it reads from\n * `<outDir>/database/migrations` only when `useTypescriptMigrations` is on\n * *and* a tsconfig `outDir` resolves. In that case the source file must be\n * `.ts` so `tsc` carries it into `dist`. Otherwise discovery reads the source\n * dir and only loads `.js`, so a `.ts` file would never run.\n *\n * Memoised so the fallback warning is logged once per builder (both `build`\n * and `writeFiles` call this).\n */\n const getFormat = (): 'javascript' | 'typescript' => {\n if (format) {\n return format;\n }\n\n const useTSM = strapi.config.get('database.settings.useTypescriptMigrations') === true;\n const discoveryDir = db.config.settings.migrations?.dir;\n const discoversFromDist =\n typeof discoveryDir === 'string' &&\n path.resolve(discoveryDir) !== path.resolve(sourceMigrationsDir());\n\n if (useTSM && !discoversFromDist) {\n strapi.log.warn(\n 'database.settings.useTypescriptMigrations is enabled but no TypeScript outDir was resolved for this app; ' +\n 'writing the rename migration as JavaScript so it is discovered from database/migrations.'\n );\n }\n\n format = useTSM && discoversFromDist ? 'typescript' : 'javascript';\n return format;\n };\n\n // Artifacts \"in flight\" for the current save, i.e. produced by an earlier\n // rename hop in this same batch (e.g. the intermediate `tmp` field a user\n // routes a swap through). Keyed per uid by the *logical* field name the hop\n // produced; the value records how that field resolves to a physical artifact\n // and its current `from` identifier, so a continuation hop replays from the\n // right place instead of being treated as a brand-new, unknown attribute.\n const inFlight = new Map<string, Map<string, Resolved>>();\n\n // CTB-level definition of each in-flight field (per uid, by logical name), so\n // a continuation hop can still be checked for a storage change against the\n // definition the chain started from.\n const inFlightDefinitions = new Map<string, Map<string, RenameAttributeDefinition>>();\n\n // Logical names vacated by an earlier accepted hop of this batch (per uid). A\n // refused hop never vacates its source: the artifact stays live until schema\n // sync drops it. A hop may only target a name that is free: not live in the\n // pre-reload schema (unless an earlier accepted hop vacated it) and not\n // produced by an earlier hop still in flight. At migration time the schema-sync drop of a still-live field has\n // not happened yet, so renaming onto it would collide and the runtime guard\n // would silently skip the hop. Refusing it here surfaces the problem (e.g. a\n // truncated chain sent by a client) instead of losing data.\n const vacated = new Map<string, Set<string>>();\n\n const isTargetOccupied = (uid: string, newName: string): boolean => {\n if (inFlight.get(uid)?.has(newName)) {\n return true;\n }\n return Boolean(schemaAttributeOf(uid, newName)) && !(vacated.get(uid)?.has(newName) ?? false);\n };\n\n const trackVacated = (uid: string, oldName: string, newName: string): void => {\n let names = vacated.get(uid);\n if (!names) {\n names = new Set<string>();\n vacated.set(uid, names);\n }\n names.add(oldName);\n // The target is occupied again by the in-flight field.\n names.delete(newName);\n };\n\n const markInFlight = (uid: string, name: string, resolved: Resolved): void => {\n let entries = inFlight.get(uid);\n if (!entries) {\n entries = new Map<string, Resolved>();\n inFlight.set(uid, entries);\n }\n entries.set(name, resolved);\n };\n\n // Per uid, logical origin name -> current name, folded over every received hop.\n const origins = new Map<string, Map<string, string>>();\n\n const trackOrigin = (uid: string, oldName: string, newName: string): void => {\n let byOrigin = origins.get(uid);\n if (!byOrigin) {\n byOrigin = new Map<string, string>();\n origins.set(uid, byOrigin);\n }\n\n for (const [origin, current] of byOrigin) {\n if (current === oldName) {\n byOrigin.set(origin, newName);\n return;\n }\n }\n\n // A name that is already an origin but no longer current was re-occupied by\n // something this save did not rename; do not overwrite its logical field.\n if (!byOrigin.has(oldName)) {\n byOrigin.set(oldName, newName);\n }\n };\n\n const isMorphRelation = (attribute: AttributeMeta): boolean =>\n typeof attribute.relation === 'string' && attribute.relation.startsWith('morph');\n\n const schemaModelOf = (\n uid: string\n ): { attributes?: Record<string, RenameAttributeDefinition> } | undefined => {\n const contentTypes = strapi.contentTypes as Record<string, unknown> | undefined;\n const components = strapi.components as Record<string, unknown> | undefined;\n return (contentTypes?.[uid] ?? components?.[uid]) as\n | { attributes?: Record<string, RenameAttributeDefinition> }\n | undefined;\n };\n\n const schemaAttributeOf = (uid: string, name: string): RenameAttributeDefinition | undefined =>\n schemaModelOf(uid)?.attributes?.[name];\n\n /**\n * The type an attribute is stored as. Custom fields are sent by the admin as\n * `type: 'customField'`, while the live schema already carries their\n * underlying type, so both sides are resolved through the registry.\n */\n const storageTypeOf = (attribute: RenameAttributeDefinition): string | undefined => {\n if (attribute.type !== 'customField' && typeof attribute.customField !== 'string') {\n return attribute.type;\n }\n\n try {\n const customField = strapi.get('custom-fields').get(attribute.customField as string) as\n | { type?: string }\n | undefined;\n return customField?.type ?? attribute.type;\n } catch {\n // Unknown custom field (e.g. its plugin was removed).\n return attribute.type;\n }\n };\n\n const schemaTypeOf = (uid: string, name: string): string | undefined =>\n schemaAttributeOf(uid, name)?.type;\n\n // Resolves the shared upload morph table (e.g. `files_related_morphs`) and its\n // `related_type` column from the file model's `related` morph attribute. This\n // is the single table every media field across all types writes to, keyed by\n // (`field` = attribute name, `related_type` = owning uid).\n const resolveUploadMorphTable = ():\n | { table: string; fieldColumn: string; typeColumn: string }\n | undefined => {\n if (!db.metadata.has('plugin::upload.file')) {\n return undefined;\n }\n const fileMeta = db.metadata.get('plugin::upload.file');\n const related = fileMeta.attributes?.related as\n | (AttributeMeta & { morphColumn?: JoinTableMeta['morphColumn'] })\n | undefined;\n const joinTable = related?.joinTable;\n const morphColumn = joinTable?.morphColumn ?? related?.morphColumn;\n if (!joinTable?.name || !morphColumn?.typeColumn?.name) {\n return undefined;\n }\n return {\n table: joinTable.name,\n fieldColumn: db.metadata.identifiers.FIELD_COLUMN,\n typeColumn: morphColumn.typeColumn.name,\n };\n };\n\n /**\n * Classifies the *first* hop of a rename by inspecting the live metadata, which\n * still reflects the pre-rename schema. Continuation hops never reach here —\n * they inherit their classification from the in-flight map.\n */\n const classifyMedia = (\n uid: string,\n oldName: string,\n joinTable: JoinTableMeta | undefined,\n upload: ReturnType<typeof resolveUploadMorphTable>\n ): Resolved | undefined => {\n // Media: the attribute name is a value in the shared `files_related_morphs`\n // `field` column, scoped by `related_type` (the owning uid). Detect it by\n // schema type OR by the join table being the shared upload table — the\n // latter guard is critical so a media field can never fall through to the\n // unscoped component branch and corrupt other types' media on the shared\n // table.\n const isMedia =\n schemaTypeOf(uid, oldName) === 'media' || (!!upload && joinTable?.name === upload.table);\n if (!isMedia) {\n return undefined;\n }\n if (!upload) {\n return { kind: 'unsupported', reason: 'unsupported-type' };\n }\n return {\n kind: 'media',\n table: upload.table,\n fieldColumn: upload.fieldColumn,\n typeColumn: upload.typeColumn,\n typeValue: uid,\n from: oldName,\n };\n };\n\n const classifyComponent = (\n oldName: string,\n joinTable: JoinTableMeta | undefined\n ): Resolved | undefined => {\n const on = joinTable?.on;\n if (!joinTable?.name || !on || typeof on !== 'object') {\n return undefined;\n }\n const fieldColumn = Object.keys(on).find((key) => on[key] === oldName);\n if (!fieldColumn) {\n return undefined;\n }\n return { kind: 'component', table: joinTable.name, fieldColumn, from: oldName };\n };\n\n const classifyRelation = (\n meta: ModelMeta,\n attribute: AttributeMeta,\n joinTable: JoinTableMeta | undefined\n ): Resolved => {\n // Polymorphic morph relations need shared-table handling and are not\n // creatable through the CTB UI, so they are left unsupported.\n if (isMorphRelation(attribute) || attribute.morphColumn) {\n return { kind: 'unsupported', reason: 'unsupported-type' };\n }\n\n // Join column on the owner's own table (`<field>_id`), e.g. useJoinTable:false.\n // The inverse side of a bidirectional join-column relation also carries a\n // `joinColumn` (pointing at `id`), but owns no column.\n if (attribute.joinColumn?.name && !joinTable) {\n if (attribute.mappedBy) {\n return { kind: 'skip' };\n }\n return { kind: 'joinColumn', table: meta.tableName, from: attribute.joinColumn.name };\n }\n\n if (joinTable?.name) {\n // The inverse side of a bidirectional relation: the join table is named\n // from the owning attribute, so renaming this side touches no artifact.\n if (attribute.mappedBy) {\n return { kind: 'skip' };\n }\n return { kind: 'joinTable', from: joinTable.name };\n }\n\n return { kind: 'unsupported', reason: 'unsupported-type' };\n };\n\n /**\n * Whether the schema lets users rename this attribute at all. System\n * attributes (`documentId`, `createdBy`, `locale`, `publishedAt`, review\n * workflow stages…) are also in the metadata and would otherwise be renamed\n * away, only for sync to re-add them empty.\n */\n const isRenamableAttribute = (uid: string, name: string): boolean => {\n const schemaAttribute = schemaAttributeOf(uid, name);\n // Same rule as payload validation applies to a hop's old name: `status` is\n // only reserved with draft and publish, and a legacy field may carry it.\n if (\n schemaAttribute?.configurable === false ||\n contentTypesUtils.isReservedAttributeName(name, { draftAndPublish: false })\n ) {\n return false;\n }\n\n const model = schemaModelOf(uid);\n return !contentTypesUtils.getNonVisibleAttributes(model as SchemaModel).includes(name);\n };\n\n const classify = (uid: string, oldName: string): Resolved => {\n if (!schemaAttributeOf(uid, oldName)) {\n return { kind: 'unsupported', reason: 'attribute-not-found' };\n }\n\n if (!isRenamableAttribute(uid, oldName)) {\n return { kind: 'unsupported', reason: 'unsupported-type' };\n }\n\n const meta = db.metadata.get(uid);\n const attribute = meta.attributes?.[oldName] as AttributeMeta | undefined;\n\n if (!attribute) {\n return { kind: 'unsupported', reason: 'attribute-not-found' };\n }\n\n const joinTable = attribute.joinTable;\n const upload = resolveUploadMorphTable();\n const media = classifyMedia(uid, oldName, joinTable, upload);\n if (media) {\n return media;\n }\n\n const component = classifyComponent(oldName, joinTable);\n if (component) {\n return component;\n }\n\n if (attribute.type === 'relation') {\n return classifyRelation(meta, attribute, joinTable);\n }\n\n // Plain scalar column on the model's own table.\n if ('columnName' in attribute && attribute.columnName) {\n return { kind: 'scalarColumn', table: meta.tableName, from: attribute.columnName };\n }\n\n return { kind: 'unsupported', reason: 'unsupported-type' };\n };\n\n /**\n * Computes the destination identifier for a resolved artifact given the new\n * field name, and the next in-flight state (with `from` advanced to `to`).\n */\n const advance = (uid: string, resolved: Resolved, oldName: string, newName: string): Resolved => {\n const meta = db.metadata.get(uid);\n const comment = `${uid}: rename field \"${oldName}\" -> \"${newName}\"`;\n\n switch (resolved.kind) {\n case 'scalarColumn':\n case 'joinColumn': {\n const to =\n resolved.kind === 'joinColumn'\n ? naming.joinColumnName(newName)\n : naming.columnName(newName);\n if (resolved.from !== to) {\n migrationFileBuilder.renameColumn({\n table: resolved.table,\n from: resolved.from,\n to,\n comment,\n });\n }\n return { ...resolved, from: to };\n }\n case 'joinTable': {\n const to = naming.joinTableName(meta.tableName, newName);\n if (resolved.from !== to) {\n migrationFileBuilder.renameTable({ from: resolved.from, to, comment });\n }\n return { ...resolved, from: to };\n }\n case 'component': {\n const to = newName;\n if (resolved.from !== to) {\n migrationFileBuilder.updateRows({\n table: resolved.table,\n guardColumn: resolved.fieldColumn,\n where: { [resolved.fieldColumn]: resolved.from },\n set: { [resolved.fieldColumn]: to },\n comment,\n });\n }\n return { ...resolved, from: to };\n }\n case 'media': {\n const to = newName;\n if (resolved.from !== to) {\n migrationFileBuilder.updateRows({\n table: resolved.table,\n guardColumn: resolved.fieldColumn,\n where: {\n [resolved.fieldColumn]: resolved.from,\n [resolved.typeColumn]: resolved.typeValue,\n },\n set: { [resolved.fieldColumn]: to },\n comment,\n });\n }\n return { ...resolved, from: to };\n }\n default:\n return resolved;\n }\n };\n\n /**\n * Records one rename hop exactly in the order the user performed it. Because the\n * Content-Type Builder forbids two fields sharing a name at any instant, the\n * recorded path is inherently collision-free: replaying each hop verbatim never\n * targets an occupied artifact, so no synthetic temporary name is ever needed\n * (a \"swap\" is already expressed by the user's own intermediate-name hop).\n */\n const addRename = (uid: string, { oldName, newName, newAttribute }: RenameNames): void => {\n // `metadata.get` throws when the model is unknown, so guard with `has` first.\n if (!db.metadata.has(uid)) {\n unsupported.push({ uid, oldName, newName, reason: 'model-not-found' });\n return;\n }\n\n trackOrigin(uid, oldName, newName);\n\n if (isTargetOccupied(uid, newName)) {\n unsupported.push({ uid, oldName, newName, reason: 'target-occupied' });\n // Keep the chain consistent so a later continuation hop stays silent. The\n // source is not vacated: its artifact was not moved.\n markInFlight(uid, newName, { kind: 'unsupported', reason: 'target-occupied' });\n return;\n }\n\n const entries = inFlight.get(uid);\n const definitions = inFlightDefinitions.get(uid);\n const oldAttribute = definitions?.get(oldName) ?? schemaAttributeOf(uid, oldName);\n let resolved = entries?.get(oldName) ?? classify(uid, oldName);\n\n // A rename that also changes the attribute's storage cannot be expressed as a\n // rename of the physical artifact: leave it to the drop-and-recreate path.\n if (\n resolved.kind !== 'unsupported' &&\n !isCompatibleRename(oldAttribute, newAttribute, storageTypeOf)\n ) {\n resolved = { kind: 'unsupported', reason: 'type-changed' };\n }\n\n if (newAttribute ?? oldAttribute) {\n let byName = inFlightDefinitions.get(uid);\n if (!byName) {\n byName = new Map();\n inFlightDefinitions.set(uid, byName);\n }\n byName.set(newName, (newAttribute ?? oldAttribute) as RenameAttributeDefinition);\n }\n\n if (resolved.kind === 'unsupported') {\n unsupported.push({ uid, oldName, newName, reason: resolved.reason });\n // Keep the chain consistent so a later continuation hop stays silent. The\n // source keeps its in-flight entry and is not vacated: its physical\n // artifact stays where it is until schema sync drops it.\n markInFlight(uid, newName, resolved);\n return;\n }\n\n // Accepted from here on: the source name is free and the field moves.\n entries?.delete(oldName);\n definitions?.delete(oldName);\n trackVacated(uid, oldName, newName);\n\n if (resolved.kind === 'skip') {\n markInFlight(uid, newName, resolved);\n return;\n }\n\n const next = advance(uid, resolved, oldName, newName);\n markInFlight(uid, newName, next);\n };\n\n return {\n addRenameAttribute(uid: string, names: RenameNames): void {\n addRename(uid, names);\n },\n\n /**\n * The composed `origin -> final` name of every schema attribute that\n * received hops in this save, per uid. Identity entries (`a -> b -> a`) and\n * origins that are not schema attributes are left out.\n */\n attributeRenamesMapping(): AttributeRenamesMapping {\n const mapping: AttributeRenamesMapping = {};\n\n for (const [uid, byOrigin] of origins) {\n for (const [origin, final] of byOrigin) {\n if (origin === final || !schemaAttributeOf(uid, origin)) {\n continue;\n }\n mapping[uid] ??= {};\n mapping[uid][origin] = final;\n }\n }\n\n return mapping;\n },\n\n /**\n * Adds the logical op that carries this save's renames to the stores keyed\n * by attribute name (admin field permissions, via handlers registered on\n * the database). Call it after every hop so it is the last operation.\n */\n addAttributeRenames(renames: AttributeRenamesMapping): void {\n if (Object.keys(renames).length === 0) {\n return;\n }\n\n migrationFileBuilder.attributeRenames({\n renames,\n comment:\n \"Update stores keyed by attribute name (admin field permissions) for this save's renames\",\n });\n },\n\n hasChanges(): boolean {\n return migrationFileBuilder.hasChanges();\n },\n\n getUnsupported(): UnsupportedRename[] {\n return [...unsupported];\n },\n\n getOperations() {\n return migrationFileBuilder.getOperations();\n },\n\n build(): BuiltMigration | null {\n return migrationFileBuilder.build({ name: MIGRATION_NAME, format: getFormat() });\n },\n\n async writeFiles(): Promise<string | null> {\n // Always write to the app's *source* migrations dir, never the database's\n // configured dir: when `useTypescriptMigrations` is enabled that points at\n // build output (e.g. `dist/database/migrations`), which is gitignored and\n // wiped on the next build, so the generated migration would not be a\n // portable record.\n const dir = sourceMigrationsDir();\n return migrationFileBuilder.writeFiles({ name: MIGRATION_NAME, format: getFormat(), dir });\n },\n };\n};\n\nexport type MigrationBuilder = ReturnType<typeof createMigrationBuilder>;\n"],"names":["isBidirectionalRelation","attribute","Boolean","inversedBy","mappedBy","targetAttribute","isCompatibleRename","oldAttribute","newAttribute","resolveType","type","oldType","undefined","newType","customField","relation","target","component","repeatable","MIGRATION_NAME","createMigrationBuilder","strapi","db","migrationFileBuilder","migrations","createFileBuilder","unsupported","naming","metadata","sourceMigrationsDir","path","join","dirs","app","root","format","getFormat","useTSM","config","get","discoveryDir","settings","dir","discoversFromDist","resolve","log","warn","inFlight","Map","inFlightDefinitions","vacated","isTargetOccupied","uid","newName","has","schemaAttributeOf","trackVacated","oldName","names","Set","set","add","delete","markInFlight","name","resolved","entries","origins","trackOrigin","byOrigin","origin","current","isMorphRelation","startsWith","schemaModelOf","contentTypes","components","attributes","storageTypeOf","schemaTypeOf","resolveUploadMorphTable","fileMeta","related","joinTable","morphColumn","typeColumn","table","fieldColumn","identifiers","FIELD_COLUMN","classifyMedia","upload","isMedia","kind","reason","typeValue","from","classifyComponent","on","Object","keys","find","key","classifyRelation","meta","joinColumn","tableName","isRenamableAttribute","schemaAttribute","configurable","contentTypesUtils","isReservedAttributeName","draftAndPublish","model","getNonVisibleAttributes","includes","classify","media","columnName","advance","comment","to","joinColumnName","renameColumn","joinTableName","renameTable","updateRows","guardColumn","where","addRename","push","definitions","byName","next","addRenameAttribute","attributeRenamesMapping","mapping","final","addAttributeRenames","renames","length","attributeRenames","hasChanges","getUnsupported","getOperations","build","writeFiles"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../server/src/services/migration-builder/index.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { contentTypes as contentTypesUtils } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\n/**\n * The CTB-level attribute definition of the *new* side of a rename hop (the\n * `properties` the admin sends for `newName`). Only the storage-relevant keys\n * are inspected; see `isCompatibleRename`.\n */\nexport interface RenameAttributeDefinition {\n type?: string;\n relation?: string;\n target?: string;\n component?: string;\n repeatable?: boolean;\n customField?: string;\n targetAttribute?: string | null;\n inversedBy?: string;\n mappedBy?: string;\n configurable?: boolean;\n [key: string]: unknown;\n}\n\nexport interface RenameNames {\n oldName: string;\n newName: string;\n /**\n * Definition of the attribute under its new name, when known. Used to refuse\n * hops that also change the attribute's storage (e.g. `string` -> `integer`,\n * or a relation retargeted): renaming the column and letting schema sync\n * alter its type in place can fail on Postgres/MySQL, whereas the legacy\n * drop-and-recreate path is always safe.\n */\n newAttribute?: RenameAttributeDefinition;\n}\n\nexport type UnsupportedRenameReason =\n | 'model-not-found'\n | 'attribute-not-found'\n | 'unsupported-type'\n | 'type-changed'\n | 'target-occupied';\n\nexport interface UnsupportedRename {\n uid: string;\n oldName: string;\n newName: string;\n reason: UnsupportedRenameReason;\n}\n\n/**\n * Whether a relation definition has a counterpart on its target. The live\n * schema carries `inversedBy` / `mappedBy`; the CTB payload carries\n * `targetAttribute`.\n */\nconst isBidirectionalRelation = (attribute: RenameAttributeDefinition): boolean =>\n Boolean(attribute.inversedBy || attribute.mappedBy || attribute.targetAttribute);\n\n/**\n * Whether the storage of `oldAttribute` can host `newAttribute` after a plain\n * rename of its physical artifact. Anything else must go through the legacy\n * drop-and-recreate path, so the hop is reported as `type-changed`.\n *\n * `resolveType` maps a definition to its storage type. The builder passes one\n * that resolves custom fields (sent as `type: 'customField'` by the admin, but\n * already converted to their underlying type in the live schema).\n */\nexport const isCompatibleRename = (\n oldAttribute: RenameAttributeDefinition | undefined,\n newAttribute: RenameAttributeDefinition | undefined,\n resolveType: (attribute: RenameAttributeDefinition) => string | undefined = (attribute) =>\n attribute.type\n): boolean => {\n const oldType = oldAttribute ? resolveType(oldAttribute) : undefined;\n const newType = newAttribute ? resolveType(newAttribute) : undefined;\n\n // Without both definitions there is nothing to compare; the metadata-based\n // classification is the only guard we have.\n if (!oldAttribute || !newAttribute || !oldType || !newType) {\n return true;\n }\n\n if (oldType !== newType) {\n return false;\n }\n\n // A different custom field on the same underlying type is still a different\n // field.\n if (\n (oldAttribute.customField || newAttribute.customField) &&\n oldAttribute.customField !== newAttribute.customField\n ) {\n return false;\n }\n\n switch (newType) {\n case 'relation':\n // `manyWay` and a bidirectional `oneToMany` share `relation: 'oneToMany'`,\n // but switching between them moves join-table ownership.\n return (\n oldAttribute.relation === newAttribute.relation &&\n oldAttribute.target === newAttribute.target &&\n isBidirectionalRelation(oldAttribute) === isBidirectionalRelation(newAttribute)\n );\n case 'component':\n return (\n oldAttribute.component === newAttribute.component &&\n Boolean(oldAttribute.repeatable) === Boolean(newAttribute.repeatable)\n );\n default:\n return true;\n }\n};\n\nexport interface BuiltMigration {\n filename: string;\n content: string;\n}\n\n/**\n * How a renamed attribute maps to a physical database artifact, resolved from\n * `strapi.db.metadata` (the live, pre-rename schema). The `from` field is the\n * current physical identifier and moves forward at each hop so rename chains and\n * user-routed swaps replay verbatim.\n *\n * - `scalarColumn` / `joinColumn`: a column on the model's own table. Scalar\n * columns resolve names via `getColumnName`; relation join columns (`<field>_id`)\n * via `getJoinColumnAttributeIdName`.\n * - `joinTable`: a relation backed by a join/link table (the table name encodes\n * the owning attribute name).\n * - `component`: a component or dynamic zone — the attribute name is a *value* in\n * the per-type link table's `field` column, so it is an `UPDATE`, not DDL.\n * - `media`: like `component`, but stored in the shared `files_related_morphs`\n * table, so the `UPDATE` is additionally scoped by `related_type` (the uid).\n * - `skip`: recognised but needs no DB change (e.g. the inverse side of a\n * bidirectional relation — the join table is named from the owning side).\n * - `unsupported`: cannot be migrated automatically (polymorphic morph relations,\n * which are not creatable through the CTB UI anyway).\n */\ntype Resolved =\n | { kind: 'scalarColumn'; table: string; from: string }\n | { kind: 'joinColumn'; table: string; from: string }\n | { kind: 'joinTable'; from: string }\n | { kind: 'component'; table: string; fieldColumn: string; from: string }\n | {\n kind: 'media';\n table: string;\n fieldColumn: string;\n typeColumn: string;\n typeValue: string;\n from: string;\n }\n | { kind: 'skip' }\n | { kind: 'unsupported'; reason: UnsupportedRename['reason'] };\n\ninterface MigrationBuilderDeps {\n strapi: Core.Strapi;\n}\n\n/**\n * The database metadata shapes the builder reads, derived from `Core.Strapi`\n * so the Content-Type Builder does not depend on `@strapi/database` directly.\n */\ntype ModelMeta = NonNullable<ReturnType<Core.Strapi['db']['metadata']['get']>>;\n\n/**\n * A metadata attribute, widened with the relation/join keys the builder\n * inspects (the metadata union only declares them on some members).\n */\ntype AttributeMeta = ModelMeta['attributes'][string] & {\n relation?: string;\n mappedBy?: string;\n morphColumn?: unknown;\n joinColumn?: { name?: string };\n joinTable?: JoinTableMeta;\n};\n\ninterface JoinTableMeta {\n name?: string;\n on?: Record<string, unknown>;\n morphColumn?: { typeColumn?: { name?: string } };\n}\n\ntype SchemaModel = Parameters<typeof contentTypesUtils.getNonVisibleAttributes>[0];\n\n/**\n * Per-uid `origin -> current name` of every received hop, accepted or refused:\n * the logical field is the same field even when its data cannot be carried.\n */\nexport type AttributeRenamesMapping = Record<string, Record<string, string>>;\n\nconst MIGRATION_NAME = 'rename-fields';\n\nexport const createMigrationBuilder = ({ strapi }: MigrationBuilderDeps) => {\n const { db } = strapi;\n\n const migrationFileBuilder = db.migrations.createFileBuilder();\n const unsupported: UnsupportedRename[] = [];\n\n // Physical-name rules shared with the metadata loader, so the *new* side of a\n // rename is derived exactly as `db.metadata` will derive it after the reload.\n const { naming } = db.metadata;\n\n /**\n * The app's *source* migrations dir. Generated files always land here (see\n * `writeFiles`), and it is also the dir discovery reads from when\n * `useTypescriptMigrations` is off or no tsconfig `outDir` resolves.\n */\n const sourceMigrationsDir = () => path.join(strapi.dirs.app.root, 'database', 'migrations');\n\n let format: 'javascript' | 'typescript' | undefined;\n\n /**\n * Mirror the database's discovery decision (`Strapi.ts`): it reads from\n * `<outDir>/database/migrations` only when `useTypescriptMigrations` is on\n * *and* a tsconfig `outDir` resolves. In that case the source file must be\n * `.ts` so `tsc` carries it into `dist`. Otherwise discovery reads the source\n * dir and only loads `.js`, so a `.ts` file would never run.\n *\n * Memoised so the fallback warning is logged once per builder (both `build`\n * and `writeFiles` call this).\n */\n const getFormat = (): 'javascript' | 'typescript' => {\n if (format) {\n return format;\n }\n\n const useTSM = strapi.config.get('database.settings.useTypescriptMigrations') === true;\n const discoveryDir = db.config.settings.migrations?.dir;\n const discoversFromDist =\n typeof discoveryDir === 'string' &&\n path.resolve(discoveryDir) !== path.resolve(sourceMigrationsDir());\n\n if (useTSM && !discoversFromDist) {\n strapi.log.warn(\n 'database.settings.useTypescriptMigrations is enabled but no TypeScript outDir was resolved for this app; ' +\n 'writing the rename migration as JavaScript so it is discovered from database/migrations.'\n );\n }\n\n format = useTSM && discoversFromDist ? 'typescript' : 'javascript';\n return format;\n };\n\n // Artifacts \"in flight\" for the current save, i.e. produced by an earlier\n // rename hop in this same batch (e.g. the intermediate `tmp` field a user\n // routes a swap through). Keyed per uid by the *logical* field name the hop\n // produced; the value records how that field resolves to a physical artifact\n // and its current `from` identifier, so a continuation hop replays from the\n // right place instead of being treated as a brand-new, unknown attribute.\n const inFlight = new Map<string, Map<string, Resolved>>();\n\n // CTB-level definition of each in-flight field (per uid, by logical name), so\n // a continuation hop can still be checked for a storage change against the\n // definition the chain started from.\n const inFlightDefinitions = new Map<string, Map<string, RenameAttributeDefinition>>();\n\n // Logical names vacated by an earlier accepted hop of this batch (per uid). A\n // refused hop never vacates its source: the artifact stays live until schema\n // sync drops it. A hop may only target a name that is free: not live in the\n // pre-reload schema (unless an earlier accepted hop vacated it) and not\n // produced by an earlier hop still in flight. At migration time the schema-sync drop of a still-live field has\n // not happened yet, so renaming onto it would collide and the runtime guard\n // would silently skip the hop. Refusing it here surfaces the problem (e.g. a\n // truncated chain sent by a client) instead of losing data.\n const vacated = new Map<string, Set<string>>();\n\n const isTargetOccupied = (uid: string, newName: string): boolean => {\n if (inFlight.get(uid)?.has(newName)) {\n return true;\n }\n return Boolean(schemaAttributeOf(uid, newName)) && !(vacated.get(uid)?.has(newName) ?? false);\n };\n\n const trackVacated = (uid: string, oldName: string, newName: string): void => {\n let names = vacated.get(uid);\n if (!names) {\n names = new Set<string>();\n vacated.set(uid, names);\n }\n names.add(oldName);\n // The target is occupied again by the in-flight field.\n names.delete(newName);\n };\n\n const markInFlight = (uid: string, name: string, resolved: Resolved): void => {\n let entries = inFlight.get(uid);\n if (!entries) {\n entries = new Map<string, Resolved>();\n inFlight.set(uid, entries);\n }\n entries.set(name, resolved);\n };\n\n // Per uid, logical origin name -> current name, folded over every received hop.\n const origins = new Map<string, Map<string, string>>();\n\n const trackOrigin = (uid: string, oldName: string, newName: string): void => {\n let byOrigin = origins.get(uid);\n if (!byOrigin) {\n byOrigin = new Map<string, string>();\n origins.set(uid, byOrigin);\n }\n\n for (const [origin, current] of byOrigin) {\n if (current === oldName) {\n byOrigin.set(origin, newName);\n return;\n }\n }\n\n // A name that is already an origin but no longer current was re-occupied by\n // something this save did not rename; do not overwrite its logical field.\n if (!byOrigin.has(oldName)) {\n byOrigin.set(oldName, newName);\n }\n };\n\n const isMorphRelation = (attribute: AttributeMeta): boolean =>\n typeof attribute.relation === 'string' && attribute.relation.startsWith('morph');\n\n const schemaModelOf = (\n uid: string\n ): { attributes?: Record<string, RenameAttributeDefinition> } | undefined => {\n const contentTypes = strapi.contentTypes as Record<string, unknown> | undefined;\n const components = strapi.components as Record<string, unknown> | undefined;\n return (contentTypes?.[uid] ?? components?.[uid]) as\n { attributes?: Record<string, RenameAttributeDefinition> } | undefined;\n };\n\n const schemaAttributeOf = (uid: string, name: string): RenameAttributeDefinition | undefined =>\n schemaModelOf(uid)?.attributes?.[name];\n\n /**\n * The type an attribute is stored as. Custom fields are sent by the admin as\n * `type: 'customField'`, while the live schema already carries their\n * underlying type, so both sides are resolved through the registry.\n */\n const storageTypeOf = (attribute: RenameAttributeDefinition): string | undefined => {\n if (attribute.type !== 'customField' && typeof attribute.customField !== 'string') {\n return attribute.type;\n }\n\n try {\n const customField = strapi.get('custom-fields').get(attribute.customField as string) as\n { type?: string } | undefined;\n return customField?.type ?? attribute.type;\n } catch {\n // Unknown custom field (e.g. its plugin was removed).\n return attribute.type;\n }\n };\n\n const schemaTypeOf = (uid: string, name: string): string | undefined =>\n schemaAttributeOf(uid, name)?.type;\n\n // Resolves the shared upload morph table (e.g. `files_related_morphs`) and its\n // `related_type` column from the file model's `related` morph attribute. This\n // is the single table every media field across all types writes to, keyed by\n // (`field` = attribute name, `related_type` = owning uid).\n const resolveUploadMorphTable = ():\n { table: string; fieldColumn: string; typeColumn: string } | undefined => {\n if (!db.metadata.has('plugin::upload.file')) {\n return undefined;\n }\n const fileMeta = db.metadata.get('plugin::upload.file');\n const related = fileMeta.attributes?.related as\n (AttributeMeta & { morphColumn?: JoinTableMeta['morphColumn'] }) | undefined;\n const joinTable = related?.joinTable;\n const morphColumn = joinTable?.morphColumn ?? related?.morphColumn;\n if (!joinTable?.name || !morphColumn?.typeColumn?.name) {\n return undefined;\n }\n return {\n table: joinTable.name,\n fieldColumn: db.metadata.identifiers.FIELD_COLUMN,\n typeColumn: morphColumn.typeColumn.name,\n };\n };\n\n /**\n * Classifies the *first* hop of a rename by inspecting the live metadata, which\n * still reflects the pre-rename schema. Continuation hops never reach here —\n * they inherit their classification from the in-flight map.\n */\n const classifyMedia = (\n uid: string,\n oldName: string,\n joinTable: JoinTableMeta | undefined,\n upload: ReturnType<typeof resolveUploadMorphTable>\n ): Resolved | undefined => {\n // Media: the attribute name is a value in the shared `files_related_morphs`\n // `field` column, scoped by `related_type` (the owning uid). Detect it by\n // schema type OR by the join table being the shared upload table — the\n // latter guard is critical so a media field can never fall through to the\n // unscoped component branch and corrupt other types' media on the shared\n // table.\n const isMedia =\n schemaTypeOf(uid, oldName) === 'media' || (!!upload && joinTable?.name === upload.table);\n if (!isMedia) {\n return undefined;\n }\n if (!upload) {\n return { kind: 'unsupported', reason: 'unsupported-type' };\n }\n return {\n kind: 'media',\n table: upload.table,\n fieldColumn: upload.fieldColumn,\n typeColumn: upload.typeColumn,\n typeValue: uid,\n from: oldName,\n };\n };\n\n const classifyComponent = (\n oldName: string,\n joinTable: JoinTableMeta | undefined\n ): Resolved | undefined => {\n const on = joinTable?.on;\n if (!joinTable?.name || !on || typeof on !== 'object') {\n return undefined;\n }\n const fieldColumn = Object.keys(on).find((key) => on[key] === oldName);\n if (!fieldColumn) {\n return undefined;\n }\n return { kind: 'component', table: joinTable.name, fieldColumn, from: oldName };\n };\n\n const classifyRelation = (\n meta: ModelMeta,\n attribute: AttributeMeta,\n joinTable: JoinTableMeta | undefined\n ): Resolved => {\n // Polymorphic morph relations need shared-table handling and are not\n // creatable through the CTB UI, so they are left unsupported.\n if (isMorphRelation(attribute) || attribute.morphColumn) {\n return { kind: 'unsupported', reason: 'unsupported-type' };\n }\n\n // Join column on the owner's own table (`<field>_id`), e.g. useJoinTable:false.\n // The inverse side of a bidirectional join-column relation also carries a\n // `joinColumn` (pointing at `id`), but owns no column.\n if (attribute.joinColumn?.name && !joinTable) {\n if (attribute.mappedBy) {\n return { kind: 'skip' };\n }\n return { kind: 'joinColumn', table: meta.tableName, from: attribute.joinColumn.name };\n }\n\n if (joinTable?.name) {\n // The inverse side of a bidirectional relation: the join table is named\n // from the owning attribute, so renaming this side touches no artifact.\n if (attribute.mappedBy) {\n return { kind: 'skip' };\n }\n return { kind: 'joinTable', from: joinTable.name };\n }\n\n return { kind: 'unsupported', reason: 'unsupported-type' };\n };\n\n /**\n * Whether the schema lets users rename this attribute at all. System\n * attributes (`documentId`, `createdBy`, `locale`, `publishedAt`, review\n * workflow stages…) are also in the metadata and would otherwise be renamed\n * away, only for sync to re-add them empty.\n */\n const isRenamableAttribute = (uid: string, name: string): boolean => {\n const schemaAttribute = schemaAttributeOf(uid, name);\n // Same rule as payload validation applies to a hop's old name: `status` is\n // only reserved with draft and publish, and a legacy field may carry it.\n if (\n schemaAttribute?.configurable === false ||\n contentTypesUtils.isReservedAttributeName(name, { draftAndPublish: false })\n ) {\n return false;\n }\n\n const model = schemaModelOf(uid);\n return !contentTypesUtils.getNonVisibleAttributes(model as SchemaModel).includes(name);\n };\n\n const classify = (uid: string, oldName: string): Resolved => {\n if (!schemaAttributeOf(uid, oldName)) {\n return { kind: 'unsupported', reason: 'attribute-not-found' };\n }\n\n if (!isRenamableAttribute(uid, oldName)) {\n return { kind: 'unsupported', reason: 'unsupported-type' };\n }\n\n const meta = db.metadata.get(uid);\n const attribute = meta.attributes?.[oldName] as AttributeMeta | undefined;\n\n if (!attribute) {\n return { kind: 'unsupported', reason: 'attribute-not-found' };\n }\n\n const joinTable = attribute.joinTable;\n const upload = resolveUploadMorphTable();\n const media = classifyMedia(uid, oldName, joinTable, upload);\n if (media) {\n return media;\n }\n\n const component = classifyComponent(oldName, joinTable);\n if (component) {\n return component;\n }\n\n if (attribute.type === 'relation') {\n return classifyRelation(meta, attribute, joinTable);\n }\n\n // Plain scalar column on the model's own table.\n if ('columnName' in attribute && attribute.columnName) {\n return { kind: 'scalarColumn', table: meta.tableName, from: attribute.columnName };\n }\n\n return { kind: 'unsupported', reason: 'unsupported-type' };\n };\n\n /**\n * Computes the destination identifier for a resolved artifact given the new\n * field name, and the next in-flight state (with `from` advanced to `to`).\n */\n const advance = (uid: string, resolved: Resolved, oldName: string, newName: string): Resolved => {\n const meta = db.metadata.get(uid);\n const comment = `${uid}: rename field \"${oldName}\" -> \"${newName}\"`;\n\n switch (resolved.kind) {\n case 'scalarColumn':\n case 'joinColumn': {\n const to =\n resolved.kind === 'joinColumn'\n ? naming.joinColumnName(newName)\n : naming.columnName(newName);\n if (resolved.from !== to) {\n migrationFileBuilder.renameColumn({\n table: resolved.table,\n from: resolved.from,\n to,\n comment,\n });\n }\n return { ...resolved, from: to };\n }\n case 'joinTable': {\n const to = naming.joinTableName(meta.tableName, newName);\n if (resolved.from !== to) {\n migrationFileBuilder.renameTable({ from: resolved.from, to, comment });\n }\n return { ...resolved, from: to };\n }\n case 'component': {\n const to = newName;\n if (resolved.from !== to) {\n migrationFileBuilder.updateRows({\n table: resolved.table,\n guardColumn: resolved.fieldColumn,\n where: { [resolved.fieldColumn]: resolved.from },\n set: { [resolved.fieldColumn]: to },\n comment,\n });\n }\n return { ...resolved, from: to };\n }\n case 'media': {\n const to = newName;\n if (resolved.from !== to) {\n migrationFileBuilder.updateRows({\n table: resolved.table,\n guardColumn: resolved.fieldColumn,\n where: {\n [resolved.fieldColumn]: resolved.from,\n [resolved.typeColumn]: resolved.typeValue,\n },\n set: { [resolved.fieldColumn]: to },\n comment,\n });\n }\n return { ...resolved, from: to };\n }\n default:\n return resolved;\n }\n };\n\n /**\n * Records one rename hop exactly in the order the user performed it. Because the\n * Content-Type Builder forbids two fields sharing a name at any instant, the\n * recorded path is inherently collision-free: replaying each hop verbatim never\n * targets an occupied artifact, so no synthetic temporary name is ever needed\n * (a \"swap\" is already expressed by the user's own intermediate-name hop).\n */\n const addRename = (uid: string, { oldName, newName, newAttribute }: RenameNames): void => {\n // `metadata.get` throws when the model is unknown, so guard with `has` first.\n if (!db.metadata.has(uid)) {\n unsupported.push({ uid, oldName, newName, reason: 'model-not-found' });\n return;\n }\n\n trackOrigin(uid, oldName, newName);\n\n if (isTargetOccupied(uid, newName)) {\n unsupported.push({ uid, oldName, newName, reason: 'target-occupied' });\n // Keep the chain consistent so a later continuation hop stays silent. The\n // source is not vacated: its artifact was not moved.\n markInFlight(uid, newName, { kind: 'unsupported', reason: 'target-occupied' });\n return;\n }\n\n const entries = inFlight.get(uid);\n const definitions = inFlightDefinitions.get(uid);\n const oldAttribute = definitions?.get(oldName) ?? schemaAttributeOf(uid, oldName);\n let resolved = entries?.get(oldName) ?? classify(uid, oldName);\n\n // A rename that also changes the attribute's storage cannot be expressed as a\n // rename of the physical artifact: leave it to the drop-and-recreate path.\n if (\n resolved.kind !== 'unsupported' &&\n !isCompatibleRename(oldAttribute, newAttribute, storageTypeOf)\n ) {\n resolved = { kind: 'unsupported', reason: 'type-changed' };\n }\n\n if (newAttribute ?? oldAttribute) {\n let byName = inFlightDefinitions.get(uid);\n if (!byName) {\n byName = new Map();\n inFlightDefinitions.set(uid, byName);\n }\n byName.set(newName, (newAttribute ?? oldAttribute) as RenameAttributeDefinition);\n }\n\n if (resolved.kind === 'unsupported') {\n unsupported.push({ uid, oldName, newName, reason: resolved.reason });\n // Keep the chain consistent so a later continuation hop stays silent. The\n // source keeps its in-flight entry and is not vacated: its physical\n // artifact stays where it is until schema sync drops it.\n markInFlight(uid, newName, resolved);\n return;\n }\n\n // Accepted from here on: the source name is free and the field moves.\n entries?.delete(oldName);\n definitions?.delete(oldName);\n trackVacated(uid, oldName, newName);\n\n if (resolved.kind === 'skip') {\n markInFlight(uid, newName, resolved);\n return;\n }\n\n const next = advance(uid, resolved, oldName, newName);\n markInFlight(uid, newName, next);\n };\n\n return {\n addRenameAttribute(uid: string, names: RenameNames): void {\n addRename(uid, names);\n },\n\n /**\n * The composed `origin -> final` name of every schema attribute that\n * received hops in this save, per uid. Identity entries (`a -> b -> a`) and\n * origins that are not schema attributes are left out.\n */\n attributeRenamesMapping(): AttributeRenamesMapping {\n const mapping: AttributeRenamesMapping = {};\n\n for (const [uid, byOrigin] of origins) {\n for (const [origin, final] of byOrigin) {\n if (origin === final || !schemaAttributeOf(uid, origin)) {\n continue;\n }\n mapping[uid] ??= {};\n mapping[uid][origin] = final;\n }\n }\n\n return mapping;\n },\n\n /**\n * Adds the logical op that carries this save's renames to the stores keyed\n * by attribute name (admin field permissions, via handlers registered on\n * the database). Call it after every hop so it is the last operation.\n */\n addAttributeRenames(renames: AttributeRenamesMapping): void {\n if (Object.keys(renames).length === 0) {\n return;\n }\n\n migrationFileBuilder.attributeRenames({\n renames,\n comment:\n \"Update stores keyed by attribute name (admin field permissions) for this save's renames\",\n });\n },\n\n hasChanges(): boolean {\n return migrationFileBuilder.hasChanges();\n },\n\n getUnsupported(): UnsupportedRename[] {\n return [...unsupported];\n },\n\n getOperations() {\n return migrationFileBuilder.getOperations();\n },\n\n build(): BuiltMigration | null {\n return migrationFileBuilder.build({ name: MIGRATION_NAME, format: getFormat() });\n },\n\n async writeFiles(): Promise<string | null> {\n // Always write to the app's *source* migrations dir, never the database's\n // configured dir: when `useTypescriptMigrations` is enabled that points at\n // build output (e.g. `dist/database/migrations`), which is gitignored and\n // wiped on the next build, so the generated migration would not be a\n // portable record.\n const dir = sourceMigrationsDir();\n return migrationFileBuilder.writeFiles({ name: MIGRATION_NAME, format: getFormat(), dir });\n },\n };\n};\n\nexport type MigrationBuilder = ReturnType<typeof createMigrationBuilder>;\n"],"names":["isBidirectionalRelation","attribute","Boolean","inversedBy","mappedBy","targetAttribute","isCompatibleRename","oldAttribute","newAttribute","resolveType","type","oldType","undefined","newType","customField","relation","target","component","repeatable","MIGRATION_NAME","createMigrationBuilder","strapi","db","migrationFileBuilder","migrations","createFileBuilder","unsupported","naming","metadata","sourceMigrationsDir","path","join","dirs","app","root","format","getFormat","useTSM","config","get","discoveryDir","settings","dir","discoversFromDist","resolve","log","warn","inFlight","Map","inFlightDefinitions","vacated","isTargetOccupied","uid","newName","has","schemaAttributeOf","trackVacated","oldName","names","Set","set","add","delete","markInFlight","name","resolved","entries","origins","trackOrigin","byOrigin","origin","current","isMorphRelation","startsWith","schemaModelOf","contentTypes","components","attributes","storageTypeOf","schemaTypeOf","resolveUploadMorphTable","fileMeta","related","joinTable","morphColumn","typeColumn","table","fieldColumn","identifiers","FIELD_COLUMN","classifyMedia","upload","isMedia","kind","reason","typeValue","from","classifyComponent","on","Object","keys","find","key","classifyRelation","meta","joinColumn","tableName","isRenamableAttribute","schemaAttribute","configurable","contentTypesUtils","isReservedAttributeName","draftAndPublish","model","getNonVisibleAttributes","includes","classify","media","columnName","advance","comment","to","joinColumnName","renameColumn","joinTableName","renameTable","updateRows","guardColumn","where","addRename","push","definitions","byName","next","addRenameAttribute","attributeRenamesMapping","mapping","final","addAttributeRenames","renames","length","attributeRenames","hasChanges","getUnsupported","getOperations","build","writeFiles"],"mappings":"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"}