@strapi/content-type-builder 5.43.0 → 5.45.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.
- package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.js +3 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.js.map +1 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.mjs +3 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.mjs.map +1 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js +53 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js.map +1 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs +53 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs.map +1 -1
- package/dist/admin/src/components/AIChat/lib/types/schema.d.ts +2 -0
- package/dist/admin/translations/cs.json.js +158 -2
- package/dist/admin/translations/cs.json.js.map +1 -1
- package/dist/admin/translations/cs.json.mjs +158 -2
- package/dist/admin/translations/cs.json.mjs.map +1 -1
- package/dist/server/controllers/validation/content-type.js.map +1 -1
- package/dist/server/controllers/validation/content-type.mjs.map +1 -1
- package/dist/server/controllers/validation/schema.js +5 -2
- package/dist/server/controllers/validation/schema.js.map +1 -1
- package/dist/server/controllers/validation/schema.mjs +6 -3
- package/dist/server/controllers/validation/schema.mjs.map +1 -1
- package/dist/server/services/api-handler.js +8 -0
- package/dist/server/services/api-handler.js.map +1 -1
- package/dist/server/services/api-handler.mjs +8 -0
- package/dist/server/services/api-handler.mjs.map +1 -1
- package/dist/server/services/schema-builder/content-type-builder.js +3 -2
- package/dist/server/services/schema-builder/content-type-builder.js.map +1 -1
- package/dist/server/services/schema-builder/content-type-builder.mjs +3 -2
- package/dist/server/services/schema-builder/content-type-builder.mjs.map +1 -1
- package/dist/server/services/schema.js +8 -6
- package/dist/server/services/schema.js.map +1 -1
- package/dist/server/services/schema.mjs +8 -6
- package/dist/server/services/schema.mjs.map +1 -1
- package/dist/server/src/controllers/validation/content-type.d.ts +1 -0
- package/dist/server/src/controllers/validation/content-type.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/schema.d.ts +9 -1
- package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
- package/dist/server/src/services/api-handler.d.ts.map +1 -1
- package/dist/server/src/services/schema-builder/content-type-builder.d.ts.map +1 -1
- package/dist/server/src/services/schema.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.mjs","sources":["../../../../server/src/controllers/validation/schema.ts"],"sourcesContent":["import { z } from 'zod';\nimport { strings, validateZod } from '@strapi/utils';\nimport type { Struct, UID } from '@strapi/types';\nimport { isArray, isNil, isNull, isNumber, isObject, isUndefined, snakeCase } from 'lodash/fp';\n\nimport { isReservedAttributeName, isReservedModelName } from '../../services/builder';\nimport { coreUids, typeKinds, VALID_UID_TARGETS } from '../../services/constants';\n\nimport {\n CATEGORY_NAME_REGEX,\n ICON_REGEX,\n COLLECTION_NAME_REGEX,\n KEBAB_BASE_REGEX,\n NAME_REGEX,\n} from './common';\n\ntype SchemaMeta =\n | {\n modelType: 'contentType';\n kind?: Struct.ContentTypeKind;\n }\n | {\n modelType: 'component';\n };\n\nconst uniqueAttributeName: z.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: z.ZodIssueCode.custom,\n message: 'Attributes must have unique names',\n });\n }\n};\n\nconst verifyUidTargetField: z.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: z.ZodIssueCode.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: z.ZodIssueCode.custom,\n message: 'Invalid target type',\n });\n }\n }\n });\n};\n\nconst verifySingularAndPluralNames: z.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: z.ZodIssueCode.custom,\n message: 'Singular and plural names must be different',\n path: ['singularName'],\n });\n }\n};\n\nexport const maxLengthGreaterThanMinLength: z.SuperRefinement<Record<string, unknown>> = (\n value,\n ctx\n) => {\n if (\n !isNil(value.maxLength) &&\n !isNil(value.minLength) &&\n isNumber(value.maxLength) &&\n isNumber(value.minLength)\n ) {\n if (value.maxLength < value.minLength) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'maxLength must be greater or equal to minLength',\n path: ['maxLength'],\n });\n }\n }\n};\n\nexport const maxGreaterThanMin: z.SuperRefinement<Record<string, unknown>> = (value, ctx) => {\n if (!isNil(value.max) && !isNil(value.min) && isNumber(value.max) && isNumber(value.min)) {\n if (value.max < value.min) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'max must be greater or equal to min',\n path: ['max'],\n });\n }\n }\n};\n\nconst checkUserTarget: z.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 (isUndefined(value.target) || isUndefined(value.relation)) {\n return;\n }\n\n const { target, relation, targetAttribute } = value;\n\n if (\n target === coreUids.STRAPI_USER &&\n (!STRAPI_USER_RELATIONS.includes(relation) || !isUndefined(targetAttribute))\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.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: z.SuperRefinement<{\n type: string;\n default?: unknown;\n targetField?: string | null;\n}> = (value, ctx) => {\n if (!isNil(value.targetField) && !isNil(value.default)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Cannot define a default UID if the targetField is set',\n path: ['default'],\n });\n }\n};\n\nconst enumRefinement: z.SuperRefinement<{\n type: string;\n default?: unknown;\n enum?: string[];\n}> = (value, ctx) => {\n if (value.type === 'enumeration' && !isNil(value.default) && !isNil(value.enum)) {\n if (value.default === '' || !value.enum.some((v) => v === value.default)) {\n ctx.addIssue({\n code: z.ZodIssueCode.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 pluginOptions: z.record(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 private: z.boolean().nullish(),\n pluginOptions: z.record(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) || isNull(value) || isObject(value) || isArray(value)) {\n return true;\n }\n\n try {\n JSON.parse(value as string);\n\n return true;\n } catch (err) {\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\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 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.unknown()).optional().default({}),\n pluginOptions: z.record(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 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});\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 )\n .optional()\n .default([]),\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};\n\nexport const validateUpdateSchema = validateZod(\n z.object(\n {\n data: schemaSchema,\n },\n {\n invalid_type_error: 'Invalid schema, expected an object with a data property',\n required_error: 'Schema is required',\n }\n )\n);\n"],"names":["uniqueAttributeName","attributes","ctx","names","Set","map","attribute","snakeCase","name","size","length","addIssue","code","z","ZodIssueCode","custom","message","verifyUidTargetField","forEach","properties","action","type","targetField","targetAttr","find","attr","VALID_UID_TARGETS","some","validUIdTarget","verifySingularAndPluralNames","obj","singularName","pluralName","path","maxLengthGreaterThanMinLength","value","isNil","maxLength","minLength","isNumber","maxGreaterThanMin","max","min","checkUserTarget","isUndefined","target","relation","targetAttribute","coreUids","STRAPI_USER","STRAPI_USER_RELATIONS","includes","join","uidRefinement","default","enumRefinement","enum","v","conditionSchema","object","visible","record","string","array","any","basePropertiesSchema","configurable","boolean","nullish","private","pluginOptions","unknown","optional","conditions","preprocess","val","maxLengthSchema","number","int","positive","minLengthSchema","requiredSchema","uniqueSchema","baseRelationSchema","literal","oneToOneSchema","extend","oneWaySchema","oneToManySchema","manyWaySchema","manyToOneSchema","manyToManySchema","morphOneSchema","morphManySchema","morphToOneSchema","morphToManySchema","createRelationSchema","meta","modelType","kind","discriminatedUnion","Error","richTextSchema","required","blocksSchema","jsonSchema","refine","undefined","isNull","isObject","isArray","JSON","parse","err","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","deleteAttributeSchema","contentTypeUIDSchema","componentUIDSchema","categorySchema","CATEGORY_NAME_REGEX","baseComponentSchema","uid","displayName","icon","ICON_REGEX","description","category","createComponentSchema","config","updateComponentSchema","deleteComponentSchema","baseContentTypeSchema","draftAndPublish","typeKinds","SINGLE_TYPE","COLLECTION_TYPE","baseCreateContentTypeSchema","collectionName","COLLECTION_NAME_REGEX","KEBAB_BASE_REGEX","isReservedModelName","createSingleTypeSchema","createCollectionTypeSchema","baseUpdateContentTypeSchema","updateSingleTypeSchema","updateCollectionTypeSchema","deleteContentTypeSchema","schemaSchema","contentTypes","validateUpdateSchema","validateZod","data","invalid_type_error","required_error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.mjs","sources":["../../../../server/src/controllers/validation/schema.ts"],"sourcesContent":["import { z } from 'zod';\nimport { strings, validateZodSchema } from '@strapi/utils';\nimport type { Struct, UID } from '@strapi/types';\nimport { isArray, isNil, isNull, isNumber, isObject, isUndefined, snakeCase } from 'lodash/fp';\n\nimport { isReservedAttributeName, isReservedModelName } from '../../services/builder';\nimport { coreUids, typeKinds, VALID_UID_TARGETS } from '../../services/constants';\n\nimport {\n CATEGORY_NAME_REGEX,\n ICON_REGEX,\n COLLECTION_NAME_REGEX,\n KEBAB_BASE_REGEX,\n NAME_REGEX,\n} from './common';\n\ntype SchemaMeta =\n | {\n modelType: 'contentType';\n kind?: Struct.ContentTypeKind;\n }\n | {\n modelType: 'component';\n };\n\nconst uniqueAttributeName: z.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: z.ZodIssueCode.custom,\n message: 'Attributes must have unique names',\n });\n }\n};\n\nconst verifyUidTargetField: z.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: z.ZodIssueCode.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: z.ZodIssueCode.custom,\n message: 'Invalid target type',\n });\n }\n }\n });\n};\n\nconst verifySingularAndPluralNames: z.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: z.ZodIssueCode.custom,\n message: 'Singular and plural names must be different',\n path: ['singularName'],\n });\n }\n};\n\nexport const maxLengthGreaterThanMinLength: z.SuperRefinement<Record<string, unknown>> = (\n value,\n ctx\n) => {\n if (\n !isNil(value.maxLength) &&\n !isNil(value.minLength) &&\n isNumber(value.maxLength) &&\n isNumber(value.minLength)\n ) {\n if (value.maxLength < value.minLength) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'maxLength must be greater or equal to minLength',\n path: ['maxLength'],\n });\n }\n }\n};\n\nexport const maxGreaterThanMin: z.SuperRefinement<Record<string, unknown>> = (value, ctx) => {\n if (!isNil(value.max) && !isNil(value.min) && isNumber(value.max) && isNumber(value.min)) {\n if (value.max < value.min) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'max must be greater or equal to min',\n path: ['max'],\n });\n }\n }\n};\n\nconst checkUserTarget: z.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 (isUndefined(value.target) || isUndefined(value.relation)) {\n return;\n }\n\n const { target, relation, targetAttribute } = value;\n\n if (\n target === coreUids.STRAPI_USER &&\n (!STRAPI_USER_RELATIONS.includes(relation) || !isUndefined(targetAttribute))\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.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: z.SuperRefinement<{\n type: string;\n default?: unknown;\n targetField?: string | null;\n}> = (value, ctx) => {\n if (!isNil(value.targetField) && !isNil(value.default)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Cannot define a default UID if the targetField is set',\n path: ['default'],\n });\n }\n};\n\nconst enumRefinement: z.SuperRefinement<{\n type: string;\n default?: unknown;\n enum?: string[];\n}> = (value, ctx) => {\n if (value.type === 'enumeration' && !isNil(value.default) && !isNil(value.enum)) {\n if (value.default === '' || !value.enum.some((v) => v === value.default)) {\n ctx.addIssue({\n code: z.ZodIssueCode.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 pluginOptions: z.record(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 private: z.boolean().nullish(),\n pluginOptions: z.record(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) || isNull(value) || isObject(value) || isArray(value)) {\n return true;\n }\n\n try {\n JSON.parse(value as string);\n\n return true;\n } catch (err) {\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\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 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.unknown()).optional().default({}),\n pluginOptions: z.record(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});\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 )\n .optional()\n .default([]),\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};\n\nconst updateSchemaInput = z.object(\n {\n data: schemaSchema,\n },\n {\n invalid_type_error: 'Invalid schema, expected an object with a data property',\n required_error: 'Schema is required',\n }\n);\n\n// TODO: Remove cast when content-type-builder migrates to Zod 4\nexport const validateUpdateSchema = validateZodSchema(\n updateSchemaInput as unknown as import('@strapi/utils').z.ZodType<\n z.infer<typeof updateSchemaInput>\n >\n);\n"],"names":["uniqueAttributeName","attributes","ctx","names","Set","map","attribute","snakeCase","name","size","length","addIssue","code","z","ZodIssueCode","custom","message","verifyUidTargetField","forEach","properties","action","type","targetField","targetAttr","find","attr","VALID_UID_TARGETS","some","validUIdTarget","verifySingularAndPluralNames","obj","singularName","pluralName","path","maxLengthGreaterThanMinLength","value","isNil","maxLength","minLength","isNumber","maxGreaterThanMin","max","min","checkUserTarget","isUndefined","target","relation","targetAttribute","coreUids","STRAPI_USER","STRAPI_USER_RELATIONS","includes","join","uidRefinement","default","enumRefinement","enum","v","conditionSchema","object","visible","record","string","array","any","basePropertiesSchema","configurable","boolean","nullish","private","pluginOptions","unknown","optional","conditions","preprocess","val","maxLengthSchema","number","int","positive","minLengthSchema","requiredSchema","uniqueSchema","baseRelationSchema","literal","oneToOneSchema","extend","oneWaySchema","oneToManySchema","manyWaySchema","manyToOneSchema","manyToManySchema","morphOneSchema","morphManySchema","morphToOneSchema","morphToManySchema","createRelationSchema","meta","modelType","kind","discriminatedUnion","Error","richTextSchema","required","blocksSchema","jsonSchema","refine","undefined","isNull","isObject","isArray","JSON","parse","err","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","deleteAttributeSchema","contentTypeUIDSchema","componentUIDSchema","categorySchema","CATEGORY_NAME_REGEX","baseComponentSchema","uid","displayName","icon","ICON_REGEX","description","category","createComponentSchema","config","updateComponentSchema","deleteComponentSchema","baseContentTypeSchema","draftAndPublish","typeKinds","SINGLE_TYPE","COLLECTION_TYPE","baseCreateContentTypeSchema","plugin","collectionName","COLLECTION_NAME_REGEX","KEBAB_BASE_REGEX","isReservedModelName","createSingleTypeSchema","createCollectionTypeSchema","baseUpdateContentTypeSchema","updateSingleTypeSchema","updateCollectionTypeSchema","deleteContentTypeSchema","schemaSchema","contentTypes","updateSchemaInput","data","invalid_type_error","required_error","validateUpdateSchema","validateZodSchema"],"mappings":"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"}
|
|
@@ -28,6 +28,8 @@ var fse__namespace = /*#__PURE__*/_interopNamespaceDefault(fse);
|
|
|
28
28
|
*/ async function clear(uid) {
|
|
29
29
|
// TODO double check if this is the correct way to get the apiName
|
|
30
30
|
const { apiName, modelName } = strapi.contentTypes[uid];
|
|
31
|
+
// Opt out if the content type is not linked to an API (e.g. plugin content type)
|
|
32
|
+
if (!apiName) return;
|
|
31
33
|
const apiFolder = path__namespace.join(strapi.dirs.app.api, apiName);
|
|
32
34
|
await recursiveRemoveFiles(apiFolder, createDeleteApiFunction(modelName));
|
|
33
35
|
await deleteBackup(uid);
|
|
@@ -37,6 +39,8 @@ var fse__namespace = /*#__PURE__*/_interopNamespaceDefault(fse);
|
|
|
37
39
|
* @param {string} uid content type uid
|
|
38
40
|
*/ async function backup(uid) {
|
|
39
41
|
const { apiName } = strapi.contentTypes[uid];
|
|
42
|
+
// Opt out if the content type is not linked to an API (e.g. plugin content type)
|
|
43
|
+
if (!apiName) return;
|
|
40
44
|
const apiFolder = path__namespace.join(strapi.dirs.app.api, apiName);
|
|
41
45
|
const backupFolder = path__namespace.join(strapi.dirs.app.api, '.backup', apiName);
|
|
42
46
|
// backup the api folder
|
|
@@ -46,6 +50,8 @@ var fse__namespace = /*#__PURE__*/_interopNamespaceDefault(fse);
|
|
|
46
50
|
* Deletes an API backup folder
|
|
47
51
|
*/ async function deleteBackup(uid) {
|
|
48
52
|
const { apiName } = strapi.contentTypes[uid];
|
|
53
|
+
// Opt out if the content type is not linked to an API (e.g. plugin content type)
|
|
54
|
+
if (!apiName) return;
|
|
49
55
|
const backupFolder = path__namespace.join(strapi.dirs.app.api, '.backup');
|
|
50
56
|
const apiBackupFolder = path__namespace.join(strapi.dirs.app.api, '.backup', apiName);
|
|
51
57
|
await fse__namespace.remove(apiBackupFolder);
|
|
@@ -58,6 +64,8 @@ var fse__namespace = /*#__PURE__*/_interopNamespaceDefault(fse);
|
|
|
58
64
|
* Rollbacks the API folder of a contentType
|
|
59
65
|
*/ async function rollback(uid) {
|
|
60
66
|
const { apiName } = strapi.contentTypes[uid];
|
|
67
|
+
// Opt out if the content type is not linked to an API (e.g. plugin content type)
|
|
68
|
+
if (!apiName) return;
|
|
61
69
|
const apiFolder = path__namespace.join(strapi.dirs.app.api, apiName);
|
|
62
70
|
const backupFolder = path__namespace.join(strapi.dirs.app.api, '.backup', apiName);
|
|
63
71
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-handler.js","sources":["../../../server/src/services/api-handler.ts"],"sourcesContent":["import * as path from 'path';\nimport * as fse from 'fs-extra';\nimport type { Internal } from '@strapi/types';\n\n/**\n * Deletes the API folder of a contentType\n */\nexport async function clear(uid: Internal.UID.ContentType) {\n // TODO double check if this is the correct way to get the apiName\n const { apiName, modelName } = strapi.contentTypes[uid] as any;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n\n await recursiveRemoveFiles(apiFolder, createDeleteApiFunction(modelName));\n await deleteBackup(uid);\n}\n\n/**\n * Backups the API folder of a contentType\n * @param {string} uid content type uid\n */\nexport async function backup(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n const backupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n // backup the api folder\n await fse.copy(apiFolder, backupFolder);\n}\n\n/**\n * Deletes an API backup folder\n */\nasync function deleteBackup(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n const backupFolder = path.join(strapi.dirs.app.api, '.backup');\n const apiBackupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n await fse.remove(apiBackupFolder);\n\n const list = await fse.readdir(backupFolder);\n if (list.length === 0) {\n await fse.remove(backupFolder);\n }\n}\n\n/**\n * Rollbacks the API folder of a contentType\n */\nexport async function rollback(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n const backupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n try {\n await fse.access(backupFolder);\n } catch {\n throw new Error('Cannot rollback api that was not backed up');\n }\n\n await fse.remove(apiFolder);\n await fse.copy(backupFolder, apiFolder);\n await deleteBackup(uid);\n}\n\n/**\n * Creates a delete function to clear an api folder\n */\nconst createDeleteApiFunction = (baseName: string) => {\n /**\n * Delets a file in an api.\n * Will only update routes.json instead of deleting it if other routes are present\n */\n return async (filePath: string) => {\n const fileName = path.basename(filePath, path.extname(filePath));\n\n const isSchemaFile = filePath.endsWith(`${baseName}/schema.json`);\n if (fileName === baseName || isSchemaFile) {\n return fse.remove(filePath);\n }\n };\n};\n\n/**\n * Deletes a folder recursively using a delete function\n * @param {string} folder folder to delete\n */\nconst recursiveRemoveFiles = async (folder: string, deleteFn: (file: string) => unknown) => {\n const filesName = await fse.readdir(folder);\n\n for (const fileName of filesName) {\n const filePath = path.join(folder, fileName);\n\n const stat = await fse.stat(filePath);\n\n if (stat.isDirectory()) {\n await recursiveRemoveFiles(filePath, deleteFn);\n } else {\n await deleteFn(filePath);\n }\n }\n\n const files = await fse.readdir(folder);\n if (files.length === 0) {\n await fse.remove(folder);\n }\n};\n"],"names":["clear","uid","apiName","modelName","strapi","contentTypes","apiFolder","path","join","dirs","app","api","recursiveRemoveFiles","createDeleteApiFunction","deleteBackup","backup","backupFolder","fse","copy","apiBackupFolder","remove","list","readdir","length","rollback","access","Error","baseName","filePath","fileName","basename","extname","isSchemaFile","endsWith","folder","deleteFn","filesName","stat","isDirectory","files"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;IAGO,eAAeA,KAAAA,CAAMC,GAA6B,EAAA;;IAEvD,MAAM,EAAEC,OAAO,EAAEC,SAAS,EAAE,GAAGC,MAAAA,CAAOC,YAAY,CAACJ,GAAAA,CAAI;
|
|
1
|
+
{"version":3,"file":"api-handler.js","sources":["../../../server/src/services/api-handler.ts"],"sourcesContent":["import * as path from 'path';\nimport * as fse from 'fs-extra';\nimport type { Internal } from '@strapi/types';\n\n/**\n * Deletes the API folder of a contentType\n */\nexport async function clear(uid: Internal.UID.ContentType) {\n // TODO double check if this is the correct way to get the apiName\n const { apiName, modelName } = strapi.contentTypes[uid] as any;\n\n // Opt out if the content type is not linked to an API (e.g. plugin content type)\n if (!apiName) return;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n\n await recursiveRemoveFiles(apiFolder, createDeleteApiFunction(modelName));\n await deleteBackup(uid);\n}\n\n/**\n * Backups the API folder of a contentType\n * @param {string} uid content type uid\n */\nexport async function backup(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n // Opt out if the content type is not linked to an API (e.g. plugin content type)\n if (!apiName) return;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n const backupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n // backup the api folder\n await fse.copy(apiFolder, backupFolder);\n}\n\n/**\n * Deletes an API backup folder\n */\nasync function deleteBackup(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n // Opt out if the content type is not linked to an API (e.g. plugin content type)\n if (!apiName) return;\n\n const backupFolder = path.join(strapi.dirs.app.api, '.backup');\n const apiBackupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n await fse.remove(apiBackupFolder);\n\n const list = await fse.readdir(backupFolder);\n if (list.length === 0) {\n await fse.remove(backupFolder);\n }\n}\n\n/**\n * Rollbacks the API folder of a contentType\n */\nexport async function rollback(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n // Opt out if the content type is not linked to an API (e.g. plugin content type)\n if (!apiName) return;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n const backupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n try {\n await fse.access(backupFolder);\n } catch {\n throw new Error('Cannot rollback api that was not backed up');\n }\n\n await fse.remove(apiFolder);\n await fse.copy(backupFolder, apiFolder);\n await deleteBackup(uid);\n}\n\n/**\n * Creates a delete function to clear an api folder\n */\nconst createDeleteApiFunction = (baseName: string) => {\n /**\n * Delets a file in an api.\n * Will only update routes.json instead of deleting it if other routes are present\n */\n return async (filePath: string) => {\n const fileName = path.basename(filePath, path.extname(filePath));\n\n const isSchemaFile = filePath.endsWith(`${baseName}/schema.json`);\n if (fileName === baseName || isSchemaFile) {\n return fse.remove(filePath);\n }\n };\n};\n\n/**\n * Deletes a folder recursively using a delete function\n * @param {string} folder folder to delete\n */\nconst recursiveRemoveFiles = async (folder: string, deleteFn: (file: string) => unknown) => {\n const filesName = await fse.readdir(folder);\n\n for (const fileName of filesName) {\n const filePath = path.join(folder, fileName);\n\n const stat = await fse.stat(filePath);\n\n if (stat.isDirectory()) {\n await recursiveRemoveFiles(filePath, deleteFn);\n } else {\n await deleteFn(filePath);\n }\n }\n\n const files = await fse.readdir(folder);\n if (files.length === 0) {\n await fse.remove(folder);\n }\n};\n"],"names":["clear","uid","apiName","modelName","strapi","contentTypes","apiFolder","path","join","dirs","app","api","recursiveRemoveFiles","createDeleteApiFunction","deleteBackup","backup","backupFolder","fse","copy","apiBackupFolder","remove","list","readdir","length","rollback","access","Error","baseName","filePath","fileName","basename","extname","isSchemaFile","endsWith","folder","deleteFn","filesName","stat","isDirectory","files"],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ import * as fse from 'fs-extra';
|
|
|
6
6
|
*/ async function clear(uid) {
|
|
7
7
|
// TODO double check if this is the correct way to get the apiName
|
|
8
8
|
const { apiName, modelName } = strapi.contentTypes[uid];
|
|
9
|
+
// Opt out if the content type is not linked to an API (e.g. plugin content type)
|
|
10
|
+
if (!apiName) return;
|
|
9
11
|
const apiFolder = path.join(strapi.dirs.app.api, apiName);
|
|
10
12
|
await recursiveRemoveFiles(apiFolder, createDeleteApiFunction(modelName));
|
|
11
13
|
await deleteBackup(uid);
|
|
@@ -15,6 +17,8 @@ import * as fse from 'fs-extra';
|
|
|
15
17
|
* @param {string} uid content type uid
|
|
16
18
|
*/ async function backup(uid) {
|
|
17
19
|
const { apiName } = strapi.contentTypes[uid];
|
|
20
|
+
// Opt out if the content type is not linked to an API (e.g. plugin content type)
|
|
21
|
+
if (!apiName) return;
|
|
18
22
|
const apiFolder = path.join(strapi.dirs.app.api, apiName);
|
|
19
23
|
const backupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);
|
|
20
24
|
// backup the api folder
|
|
@@ -24,6 +28,8 @@ import * as fse from 'fs-extra';
|
|
|
24
28
|
* Deletes an API backup folder
|
|
25
29
|
*/ async function deleteBackup(uid) {
|
|
26
30
|
const { apiName } = strapi.contentTypes[uid];
|
|
31
|
+
// Opt out if the content type is not linked to an API (e.g. plugin content type)
|
|
32
|
+
if (!apiName) return;
|
|
27
33
|
const backupFolder = path.join(strapi.dirs.app.api, '.backup');
|
|
28
34
|
const apiBackupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);
|
|
29
35
|
await fse.remove(apiBackupFolder);
|
|
@@ -36,6 +42,8 @@ import * as fse from 'fs-extra';
|
|
|
36
42
|
* Rollbacks the API folder of a contentType
|
|
37
43
|
*/ async function rollback(uid) {
|
|
38
44
|
const { apiName } = strapi.contentTypes[uid];
|
|
45
|
+
// Opt out if the content type is not linked to an API (e.g. plugin content type)
|
|
46
|
+
if (!apiName) return;
|
|
39
47
|
const apiFolder = path.join(strapi.dirs.app.api, apiName);
|
|
40
48
|
const backupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);
|
|
41
49
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-handler.mjs","sources":["../../../server/src/services/api-handler.ts"],"sourcesContent":["import * as path from 'path';\nimport * as fse from 'fs-extra';\nimport type { Internal } from '@strapi/types';\n\n/**\n * Deletes the API folder of a contentType\n */\nexport async function clear(uid: Internal.UID.ContentType) {\n // TODO double check if this is the correct way to get the apiName\n const { apiName, modelName } = strapi.contentTypes[uid] as any;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n\n await recursiveRemoveFiles(apiFolder, createDeleteApiFunction(modelName));\n await deleteBackup(uid);\n}\n\n/**\n * Backups the API folder of a contentType\n * @param {string} uid content type uid\n */\nexport async function backup(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n const backupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n // backup the api folder\n await fse.copy(apiFolder, backupFolder);\n}\n\n/**\n * Deletes an API backup folder\n */\nasync function deleteBackup(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n const backupFolder = path.join(strapi.dirs.app.api, '.backup');\n const apiBackupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n await fse.remove(apiBackupFolder);\n\n const list = await fse.readdir(backupFolder);\n if (list.length === 0) {\n await fse.remove(backupFolder);\n }\n}\n\n/**\n * Rollbacks the API folder of a contentType\n */\nexport async function rollback(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n const backupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n try {\n await fse.access(backupFolder);\n } catch {\n throw new Error('Cannot rollback api that was not backed up');\n }\n\n await fse.remove(apiFolder);\n await fse.copy(backupFolder, apiFolder);\n await deleteBackup(uid);\n}\n\n/**\n * Creates a delete function to clear an api folder\n */\nconst createDeleteApiFunction = (baseName: string) => {\n /**\n * Delets a file in an api.\n * Will only update routes.json instead of deleting it if other routes are present\n */\n return async (filePath: string) => {\n const fileName = path.basename(filePath, path.extname(filePath));\n\n const isSchemaFile = filePath.endsWith(`${baseName}/schema.json`);\n if (fileName === baseName || isSchemaFile) {\n return fse.remove(filePath);\n }\n };\n};\n\n/**\n * Deletes a folder recursively using a delete function\n * @param {string} folder folder to delete\n */\nconst recursiveRemoveFiles = async (folder: string, deleteFn: (file: string) => unknown) => {\n const filesName = await fse.readdir(folder);\n\n for (const fileName of filesName) {\n const filePath = path.join(folder, fileName);\n\n const stat = await fse.stat(filePath);\n\n if (stat.isDirectory()) {\n await recursiveRemoveFiles(filePath, deleteFn);\n } else {\n await deleteFn(filePath);\n }\n }\n\n const files = await fse.readdir(folder);\n if (files.length === 0) {\n await fse.remove(folder);\n }\n};\n"],"names":["clear","uid","apiName","modelName","strapi","contentTypes","apiFolder","path","join","dirs","app","api","recursiveRemoveFiles","createDeleteApiFunction","deleteBackup","backup","backupFolder","fse","copy","apiBackupFolder","remove","list","readdir","length","rollback","access","Error","baseName","filePath","fileName","basename","extname","isSchemaFile","endsWith","folder","deleteFn","filesName","stat","isDirectory","files"],"mappings":";;;AAIA;;IAGO,eAAeA,KAAAA,CAAMC,GAA6B,EAAA;;IAEvD,MAAM,EAAEC,OAAO,EAAEC,SAAS,EAAE,GAAGC,MAAAA,CAAOC,YAAY,CAACJ,GAAAA,CAAI;
|
|
1
|
+
{"version":3,"file":"api-handler.mjs","sources":["../../../server/src/services/api-handler.ts"],"sourcesContent":["import * as path from 'path';\nimport * as fse from 'fs-extra';\nimport type { Internal } from '@strapi/types';\n\n/**\n * Deletes the API folder of a contentType\n */\nexport async function clear(uid: Internal.UID.ContentType) {\n // TODO double check if this is the correct way to get the apiName\n const { apiName, modelName } = strapi.contentTypes[uid] as any;\n\n // Opt out if the content type is not linked to an API (e.g. plugin content type)\n if (!apiName) return;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n\n await recursiveRemoveFiles(apiFolder, createDeleteApiFunction(modelName));\n await deleteBackup(uid);\n}\n\n/**\n * Backups the API folder of a contentType\n * @param {string} uid content type uid\n */\nexport async function backup(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n // Opt out if the content type is not linked to an API (e.g. plugin content type)\n if (!apiName) return;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n const backupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n // backup the api folder\n await fse.copy(apiFolder, backupFolder);\n}\n\n/**\n * Deletes an API backup folder\n */\nasync function deleteBackup(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n // Opt out if the content type is not linked to an API (e.g. plugin content type)\n if (!apiName) return;\n\n const backupFolder = path.join(strapi.dirs.app.api, '.backup');\n const apiBackupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n await fse.remove(apiBackupFolder);\n\n const list = await fse.readdir(backupFolder);\n if (list.length === 0) {\n await fse.remove(backupFolder);\n }\n}\n\n/**\n * Rollbacks the API folder of a contentType\n */\nexport async function rollback(uid: Internal.UID.ContentType) {\n const { apiName } = strapi.contentTypes[uid] as any;\n\n // Opt out if the content type is not linked to an API (e.g. plugin content type)\n if (!apiName) return;\n\n const apiFolder = path.join(strapi.dirs.app.api, apiName);\n const backupFolder = path.join(strapi.dirs.app.api, '.backup', apiName);\n\n try {\n await fse.access(backupFolder);\n } catch {\n throw new Error('Cannot rollback api that was not backed up');\n }\n\n await fse.remove(apiFolder);\n await fse.copy(backupFolder, apiFolder);\n await deleteBackup(uid);\n}\n\n/**\n * Creates a delete function to clear an api folder\n */\nconst createDeleteApiFunction = (baseName: string) => {\n /**\n * Delets a file in an api.\n * Will only update routes.json instead of deleting it if other routes are present\n */\n return async (filePath: string) => {\n const fileName = path.basename(filePath, path.extname(filePath));\n\n const isSchemaFile = filePath.endsWith(`${baseName}/schema.json`);\n if (fileName === baseName || isSchemaFile) {\n return fse.remove(filePath);\n }\n };\n};\n\n/**\n * Deletes a folder recursively using a delete function\n * @param {string} folder folder to delete\n */\nconst recursiveRemoveFiles = async (folder: string, deleteFn: (file: string) => unknown) => {\n const filesName = await fse.readdir(folder);\n\n for (const fileName of filesName) {\n const filePath = path.join(folder, fileName);\n\n const stat = await fse.stat(filePath);\n\n if (stat.isDirectory()) {\n await recursiveRemoveFiles(filePath, deleteFn);\n } else {\n await deleteFn(filePath);\n }\n }\n\n const files = await fse.readdir(folder);\n if (files.length === 0) {\n await fse.remove(folder);\n }\n};\n"],"names":["clear","uid","apiName","modelName","strapi","contentTypes","apiFolder","path","join","dirs","app","api","recursiveRemoveFiles","createDeleteApiFunction","deleteBackup","backup","backupFolder","fse","copy","apiBackupFolder","remove","list","readdir","length","rollback","access","Error","baseName","filePath","fileName","basename","extname","isSchemaFile","endsWith","folder","deleteFn","filesName","stat","isDirectory","files"],"mappings":"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"}
|
|
@@ -109,9 +109,10 @@ function createComponentBuilder() {
|
|
|
109
109
|
if (this.contentTypes.has(uid)) {
|
|
110
110
|
throw new ApplicationError('contentType.alreadyExists');
|
|
111
111
|
}
|
|
112
|
+
const dir = infos.plugin ? path.join(strapi.dirs.app.extensions, infos.plugin, 'content-types', infos.singularName) : path.join(strapi.dirs.app.api, infos.singularName, 'content-types', infos.singularName);
|
|
112
113
|
const contentType = schemaHandler({
|
|
113
114
|
modelName: infos.singularName,
|
|
114
|
-
dir
|
|
115
|
+
dir,
|
|
115
116
|
filename: `schema.json`
|
|
116
117
|
});
|
|
117
118
|
this.contentTypes.set(uid, contentType);
|
|
@@ -263,7 +264,7 @@ function createComponentBuilder() {
|
|
|
263
264
|
* @param {object} options options
|
|
264
265
|
* @param {string} options.singularName content-type singularName
|
|
265
266
|
* @returns {string} uid
|
|
266
|
-
*/ const createContentTypeUID = ({ singularName })
|
|
267
|
+
*/ const createContentTypeUID = ({ plugin, singularName })=>`${plugin ? `plugin` : `api`}::${plugin || singularName}.${singularName}`;
|
|
267
268
|
const generateRelation = ({ key, attribute, uid, targetAttribute = {} })=>{
|
|
268
269
|
const opts = {
|
|
269
270
|
type: 'relation',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-type-builder.js","sources":["../../../../server/src/services/schema-builder/content-type-builder.ts"],"sourcesContent":["import path from 'path';\nimport _ from 'lodash';\n\nimport { strings, errors } from '@strapi/utils';\nimport type { Schema, Internal } from '@strapi/types';\nimport { isRelation, isConfigurable } from '../../utils/attributes';\nimport { typeKinds } from '../constants';\nimport createSchemaHandler from './schema-handler';\nimport { CreateContentTypeInput } from '../../controllers/validation/content-type';\nimport type { InternalRelationAttribute, InternalAttribute } from './types';\n\nconst { ApplicationError } = errors;\n\nconst reuseUnsetPreviousProperties = (\n newAttribute: Schema.Attribute.AnyAttribute,\n oldAttribute: Schema.Attribute.AnyAttribute\n) => {\n _.defaults(\n newAttribute,\n _.omit(oldAttribute, [\n 'configurable',\n 'required',\n 'private',\n 'unique',\n 'pluginOptions',\n 'inversedBy',\n 'mappedBy',\n 'conditions', // Don't automatically preserve conditions\n ])\n );\n};\n\nexport default function createComponentBuilder() {\n return {\n setRelation(\n this: any,\n { key, uid, attribute }: { key: string; uid: string; attribute: InternalRelationAttribute }\n ) {\n if (!_.has(attribute, 'target')) {\n return;\n }\n\n const targetCT = this.contentTypes.get(attribute.target);\n\n if (!targetCT) {\n throw new ApplicationError(`Content type ${attribute.target} not found`);\n }\n\n const targetAttribute = targetCT.getAttribute(attribute.targetAttribute);\n\n if (!attribute.targetAttribute) {\n return;\n }\n\n // When generating the inverse relation, preserve existing conditions if they exist\n // If the target attribute already exists and has conditions, preserve them\n const targetAttributeData = targetAttribute || {};\n\n // If the source doesn't have conditions but the target does, preserve target's conditions\n\n targetCT.setAttribute(\n attribute.targetAttribute,\n generateRelation({ key, attribute, uid, targetAttribute: targetAttributeData })\n );\n },\n\n unsetRelation(\n this: any,\n attribute: Schema.Attribute.Relation<Schema.Attribute.RelationKind.Any>\n ) {\n if (!('target' in attribute) || !attribute.target) {\n return;\n }\n\n const targetCT = this.contentTypes.get(attribute.target);\n\n const relationAttribute = attribute as InternalRelationAttribute;\n const targetAttributeName = relationAttribute.inversedBy || relationAttribute.mappedBy;\n const targetAttribute = targetCT.getAttribute(targetAttributeName);\n\n if (!targetAttribute) return;\n\n return targetCT.deleteAttribute(targetAttributeName);\n },\n\n createContentTypeAttributes(\n this: any,\n uid: string,\n attributes: CreateContentTypeInput['attributes']\n ) {\n if (!this.contentTypes.has(uid)) {\n throw new ApplicationError('contentType.notFound');\n }\n\n const contentType = this.contentTypes.get(uid);\n\n // support self referencing content type relation\n Object.keys(attributes).forEach((key) => {\n const { target } = attributes[key];\n if (target === '__self__') {\n attributes[key].target = uid;\n }\n });\n\n contentType.setAttributes(this.convertAttributes(attributes));\n\n Object.keys(attributes).forEach((key) => {\n const attribute = attributes[key] as InternalAttribute;\n\n if (isRelation(attribute)) {\n const relationAttribute = attribute as InternalRelationAttribute;\n if (['manyToMany', 'oneToOne'].includes(relationAttribute.relation)) {\n if (\n relationAttribute.target === uid &&\n relationAttribute.targetAttribute !== undefined\n ) {\n // self referencing relation\n const targetAttribute = attributes[\n relationAttribute.targetAttribute\n ] as InternalRelationAttribute;\n\n if (targetAttribute.dominant === undefined) {\n relationAttribute.dominant = true;\n } else {\n relationAttribute.dominant = false;\n }\n } else {\n relationAttribute.dominant = true;\n }\n }\n\n this.setRelation({\n key,\n uid,\n attribute: relationAttribute,\n });\n }\n });\n\n return contentType;\n },\n\n /**\n * Creates a content type in memory to be written to files later on\n */\n createContentType(this: any, infos: CreateContentTypeInput) {\n // TODO:: check for unique uid / singularName & pluralName & collectionName\n\n if (infos.uid && infos.uid !== createContentTypeUID(infos)) {\n throw new ApplicationError('contentType.invalidUID');\n }\n\n const uid = infos.uid ?? createContentTypeUID(infos);\n\n if (this.contentTypes.has(uid)) {\n throw new ApplicationError('contentType.alreadyExists');\n }\n\n const contentType = createSchemaHandler({\n modelName: infos.singularName,\n dir: path.join(\n strapi.dirs.app.api,\n infos.singularName,\n 'content-types',\n infos.singularName\n ),\n filename: `schema.json`,\n });\n\n this.contentTypes.set(uid, contentType);\n\n contentType\n .setUID(uid)\n .set('kind', infos.kind || typeKinds.COLLECTION_TYPE)\n .set(\n 'collectionName',\n infos.collectionName || strings.nameToCollectionName(infos.pluralName)\n )\n .set('info', {\n singularName: infos.singularName,\n pluralName: infos.pluralName,\n displayName: infos.displayName,\n description: infos.description,\n })\n .set('options', {\n ...(infos.options ?? {}),\n draftAndPublish: infos.draftAndPublish,\n })\n .set('pluginOptions', infos.pluginOptions)\n .set('config', infos.config);\n\n this.createContentTypeAttributes(uid, infos.attributes);\n\n return contentType;\n },\n\n editContentType(this: any, infos: any) {\n const { uid } = infos;\n\n if (!this.contentTypes.has(uid)) {\n throw new ApplicationError('contentType.notFound');\n }\n\n const contentType = this.contentTypes.get(uid);\n\n const oldAttributes = contentType.schema.attributes;\n\n const newAttributes = _.omitBy(infos.attributes, (attr, key) => {\n return _.has(oldAttributes, key) && !isConfigurable(oldAttributes[key]);\n });\n\n const newKeys = _.difference(Object.keys(newAttributes), Object.keys(oldAttributes));\n const deletedKeys = _.difference(Object.keys(oldAttributes), Object.keys(newAttributes));\n const remainingKeys = _.intersection(Object.keys(oldAttributes), Object.keys(newAttributes));\n\n // remove old relations\n deletedKeys.forEach((key) => {\n const attribute = oldAttributes[key];\n\n // if the old relation has a target attribute. we need to remove it in the target type\n if (isConfigurable(attribute) && isRelation(attribute)) {\n const relationAttribute = attribute as InternalRelationAttribute;\n const targetAttributeName = relationAttribute.inversedBy || relationAttribute.mappedBy;\n\n if (targetAttributeName !== null && targetAttributeName !== undefined) {\n this.unsetRelation(attribute);\n }\n }\n });\n\n remainingKeys.forEach((key) => {\n const oldAttribute = oldAttributes[key];\n const newAttribute = newAttributes[key] as InternalAttribute;\n\n if (!isRelation(oldAttribute) && isRelation(newAttribute)) {\n return this.setRelation({\n key,\n uid,\n attribute: newAttribute as InternalRelationAttribute,\n });\n }\n\n if (isRelation(oldAttribute) && !isRelation(newAttribute)) {\n return this.unsetRelation(oldAttribute);\n }\n\n if (isRelation(oldAttribute) && isRelation(newAttribute)) {\n const relationAttribute = newAttribute as InternalRelationAttribute;\n const oldRelationAttribute = oldAttribute as InternalRelationAttribute;\n const oldTargetAttributeName =\n oldRelationAttribute.inversedBy || oldRelationAttribute.mappedBy;\n\n const sameRelation = oldAttribute.relation === relationAttribute.relation;\n const targetAttributeHasChanged =\n oldTargetAttributeName !== relationAttribute.targetAttribute;\n\n if (!sameRelation || targetAttributeHasChanged) {\n this.unsetRelation(oldAttribute);\n }\n\n // keep extra options that were set manually on oldAttribute\n reuseUnsetPreviousProperties(relationAttribute, oldAttribute);\n\n // Handle conditions explicitly - only preserve if present and not undefined in new attribute\n const newAttributeFromInfos = newAttributes[key];\n const hasNewConditions =\n newAttributeFromInfos.conditions !== undefined &&\n newAttributeFromInfos.conditions !== null;\n\n if (oldAttribute.conditions) {\n if (hasNewConditions) {\n // Conditions are still present, keep them\n relationAttribute.conditions = newAttributeFromInfos.conditions;\n } else {\n // Conditions were removed (undefined or null), ensure they're not preserved\n delete relationAttribute.conditions;\n }\n } else if (hasNewConditions) {\n // New conditions added\n relationAttribute.conditions = newAttributeFromInfos.conditions;\n }\n\n if (oldRelationAttribute.inversedBy) {\n relationAttribute.dominant = true;\n } else if (oldRelationAttribute.mappedBy) {\n relationAttribute.dominant = false;\n }\n\n return this.setRelation({\n key,\n uid,\n attribute: relationAttribute,\n });\n }\n });\n\n // add new relations\n newKeys.forEach((key) => {\n const attribute = newAttributes[key] as InternalAttribute;\n\n if (isRelation(attribute)) {\n const relationAttribute = attribute as InternalRelationAttribute;\n if (['manyToMany', 'oneToOne'].includes(relationAttribute.relation)) {\n if (\n relationAttribute.target === uid &&\n relationAttribute.targetAttribute !== undefined\n ) {\n // self referencing relation\n const targetAttribute = newAttributes[\n relationAttribute.targetAttribute\n ] as InternalRelationAttribute;\n\n if (targetAttribute.dominant === undefined) {\n relationAttribute.dominant = true;\n } else {\n relationAttribute.dominant = false;\n }\n } else {\n relationAttribute.dominant = true;\n }\n }\n\n this.setRelation({\n key,\n uid,\n attribute: relationAttribute,\n });\n }\n });\n\n contentType\n .set('kind', infos.kind || contentType.schema.kind)\n .set(['info', 'displayName'], infos.displayName)\n .set(['info', 'description'], infos.description)\n .set('options', {\n ...(infos.options ?? {}),\n draftAndPublish: infos.draftAndPublish,\n })\n .set('pluginOptions', infos.pluginOptions)\n .setAttributes(this.convertAttributes(newAttributes));\n\n return contentType;\n },\n\n deleteContentType(this: any, uid: string) {\n if (!this.contentTypes.has(uid)) {\n throw new ApplicationError('contentType.notFound');\n }\n\n this.components.forEach((compo: any) => {\n compo.removeContentType(uid);\n });\n\n this.contentTypes.forEach((ct: any) => {\n ct.removeContentType(uid);\n });\n\n return this.contentTypes.get(uid).delete();\n },\n };\n}\n\n/**\n * Returns a uid from a content type infos\n *\n * @param {object} options options\n * @param {string} options.singularName content-type singularName\n * @returns {string} uid\n */\nconst createContentTypeUID = ({\n singularName,\n}: {\n singularName: string;\n}): Internal.UID.ContentType => `api::${singularName}.${singularName}`;\n\nconst generateRelation = ({\n key,\n attribute,\n uid,\n targetAttribute = {},\n}: {\n key: string;\n attribute: InternalRelationAttribute;\n uid: string;\n targetAttribute?: Partial<InternalRelationAttribute>;\n}) => {\n const opts: any = {\n type: 'relation',\n target: uid,\n private: targetAttribute.private || undefined,\n pluginOptions: targetAttribute.pluginOptions || undefined,\n // Preserve conditions from targetAttribute if they exist\n // This allows each side of the relation to maintain its own conditions\n ...(targetAttribute.conditions && { conditions: targetAttribute.conditions }),\n };\n\n switch (attribute.relation) {\n case 'oneToOne': {\n opts.relation = 'oneToOne';\n\n if (attribute.dominant) {\n opts.mappedBy = key;\n } else {\n opts.inversedBy = key;\n }\n break;\n }\n case 'oneToMany': {\n opts.relation = 'manyToOne';\n opts.inversedBy = key;\n break;\n }\n case 'manyToOne': {\n opts.relation = 'oneToMany';\n opts.mappedBy = key;\n break;\n }\n case 'manyToMany': {\n opts.relation = 'manyToMany';\n\n if (attribute.dominant) {\n opts.mappedBy = key;\n } else {\n opts.inversedBy = key;\n }\n\n break;\n }\n default:\n }\n\n // we do this just to make sure we have the same key order when writing to files\n const { type, relation, target, ...restOptions } = opts;\n\n const result = {\n type,\n relation,\n target,\n ...restOptions,\n };\n\n return result;\n};\n"],"names":["ApplicationError","errors","reuseUnsetPreviousProperties","newAttribute","oldAttribute","_","defaults","omit","createComponentBuilder","setRelation","key","uid","attribute","has","targetCT","contentTypes","get","target","targetAttribute","getAttribute","targetAttributeData","setAttribute","generateRelation","unsetRelation","relationAttribute","targetAttributeName","inversedBy","mappedBy","deleteAttribute","createContentTypeAttributes","attributes","contentType","Object","keys","forEach","setAttributes","convertAttributes","isRelation","includes","relation","undefined","dominant","createContentType","infos","createContentTypeUID","createSchemaHandler","modelName","singularName","dir","path","join","strapi","dirs","app","api","filename","set","setUID","kind","typeKinds","COLLECTION_TYPE","collectionName","strings","nameToCollectionName","pluralName","displayName","description","options","draftAndPublish","pluginOptions","config","editContentType","oldAttributes","schema","newAttributes","omitBy","attr","isConfigurable","newKeys","difference","deletedKeys","remainingKeys","intersection","oldRelationAttribute","oldTargetAttributeName","sameRelation","targetAttributeHasChanged","newAttributeFromInfos","hasNewConditions","conditions","deleteContentType","components","compo","removeContentType","ct","delete","opts","type","private","restOptions","result"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content-type-builder.js","sources":["../../../../server/src/services/schema-builder/content-type-builder.ts"],"sourcesContent":["import path from 'path';\nimport _ from 'lodash';\n\nimport { strings, errors } from '@strapi/utils';\nimport type { Schema, Internal } from '@strapi/types';\nimport { isRelation, isConfigurable } from '../../utils/attributes';\nimport { typeKinds } from '../constants';\nimport createSchemaHandler from './schema-handler';\nimport { CreateContentTypeInput } from '../../controllers/validation/content-type';\nimport type { InternalRelationAttribute, InternalAttribute } from './types';\n\nconst { ApplicationError } = errors;\n\nconst reuseUnsetPreviousProperties = (\n newAttribute: Schema.Attribute.AnyAttribute,\n oldAttribute: Schema.Attribute.AnyAttribute\n) => {\n _.defaults(\n newAttribute,\n _.omit(oldAttribute, [\n 'configurable',\n 'required',\n 'private',\n 'unique',\n 'pluginOptions',\n 'inversedBy',\n 'mappedBy',\n 'conditions', // Don't automatically preserve conditions\n ])\n );\n};\n\nexport default function createComponentBuilder() {\n return {\n setRelation(\n this: any,\n { key, uid, attribute }: { key: string; uid: string; attribute: InternalRelationAttribute }\n ) {\n if (!_.has(attribute, 'target')) {\n return;\n }\n\n const targetCT = this.contentTypes.get(attribute.target);\n\n if (!targetCT) {\n throw new ApplicationError(`Content type ${attribute.target} not found`);\n }\n\n const targetAttribute = targetCT.getAttribute(attribute.targetAttribute);\n\n if (!attribute.targetAttribute) {\n return;\n }\n\n // When generating the inverse relation, preserve existing conditions if they exist\n // If the target attribute already exists and has conditions, preserve them\n const targetAttributeData = targetAttribute || {};\n\n // If the source doesn't have conditions but the target does, preserve target's conditions\n\n targetCT.setAttribute(\n attribute.targetAttribute,\n generateRelation({ key, attribute, uid, targetAttribute: targetAttributeData })\n );\n },\n\n unsetRelation(\n this: any,\n attribute: Schema.Attribute.Relation<Schema.Attribute.RelationKind.Any>\n ) {\n if (!('target' in attribute) || !attribute.target) {\n return;\n }\n\n const targetCT = this.contentTypes.get(attribute.target);\n\n const relationAttribute = attribute as InternalRelationAttribute;\n const targetAttributeName = relationAttribute.inversedBy || relationAttribute.mappedBy;\n const targetAttribute = targetCT.getAttribute(targetAttributeName);\n\n if (!targetAttribute) return;\n\n return targetCT.deleteAttribute(targetAttributeName);\n },\n\n createContentTypeAttributes(\n this: any,\n uid: string,\n attributes: CreateContentTypeInput['attributes']\n ) {\n if (!this.contentTypes.has(uid)) {\n throw new ApplicationError('contentType.notFound');\n }\n\n const contentType = this.contentTypes.get(uid);\n\n // support self referencing content type relation\n Object.keys(attributes).forEach((key) => {\n const { target } = attributes[key];\n if (target === '__self__') {\n attributes[key].target = uid;\n }\n });\n\n contentType.setAttributes(this.convertAttributes(attributes));\n\n Object.keys(attributes).forEach((key) => {\n const attribute = attributes[key] as InternalAttribute;\n\n if (isRelation(attribute)) {\n const relationAttribute = attribute as InternalRelationAttribute;\n if (['manyToMany', 'oneToOne'].includes(relationAttribute.relation)) {\n if (\n relationAttribute.target === uid &&\n relationAttribute.targetAttribute !== undefined\n ) {\n // self referencing relation\n const targetAttribute = attributes[\n relationAttribute.targetAttribute\n ] as InternalRelationAttribute;\n\n if (targetAttribute.dominant === undefined) {\n relationAttribute.dominant = true;\n } else {\n relationAttribute.dominant = false;\n }\n } else {\n relationAttribute.dominant = true;\n }\n }\n\n this.setRelation({\n key,\n uid,\n attribute: relationAttribute,\n });\n }\n });\n\n return contentType;\n },\n\n /**\n * Creates a content type in memory to be written to files later on\n */\n createContentType(this: any, infos: CreateContentTypeInput) {\n // TODO:: check for unique uid / singularName & pluralName & collectionName\n\n if (infos.uid && infos.uid !== createContentTypeUID(infos)) {\n throw new ApplicationError('contentType.invalidUID');\n }\n\n const uid = infos.uid ?? createContentTypeUID(infos);\n\n if (this.contentTypes.has(uid)) {\n throw new ApplicationError('contentType.alreadyExists');\n }\n\n const dir = infos.plugin\n ? path.join(strapi.dirs.app.extensions, infos.plugin, 'content-types', infos.singularName)\n : path.join(strapi.dirs.app.api, infos.singularName, 'content-types', infos.singularName);\n\n const contentType = createSchemaHandler({\n modelName: infos.singularName,\n dir,\n filename: `schema.json`,\n });\n\n this.contentTypes.set(uid, contentType);\n\n contentType\n .setUID(uid)\n .set('kind', infos.kind || typeKinds.COLLECTION_TYPE)\n .set(\n 'collectionName',\n infos.collectionName || strings.nameToCollectionName(infos.pluralName)\n )\n .set('info', {\n singularName: infos.singularName,\n pluralName: infos.pluralName,\n displayName: infos.displayName,\n description: infos.description,\n })\n .set('options', {\n ...(infos.options ?? {}),\n draftAndPublish: infos.draftAndPublish,\n })\n .set('pluginOptions', infos.pluginOptions)\n .set('config', infos.config);\n\n this.createContentTypeAttributes(uid, infos.attributes);\n\n return contentType;\n },\n\n editContentType(this: any, infos: any) {\n const { uid } = infos;\n\n if (!this.contentTypes.has(uid)) {\n throw new ApplicationError('contentType.notFound');\n }\n\n const contentType = this.contentTypes.get(uid);\n\n const oldAttributes = contentType.schema.attributes;\n\n const newAttributes = _.omitBy(infos.attributes, (attr, key) => {\n return _.has(oldAttributes, key) && !isConfigurable(oldAttributes[key]);\n });\n\n const newKeys = _.difference(Object.keys(newAttributes), Object.keys(oldAttributes));\n const deletedKeys = _.difference(Object.keys(oldAttributes), Object.keys(newAttributes));\n const remainingKeys = _.intersection(Object.keys(oldAttributes), Object.keys(newAttributes));\n\n // remove old relations\n deletedKeys.forEach((key) => {\n const attribute = oldAttributes[key];\n\n // if the old relation has a target attribute. we need to remove it in the target type\n if (isConfigurable(attribute) && isRelation(attribute)) {\n const relationAttribute = attribute as InternalRelationAttribute;\n const targetAttributeName = relationAttribute.inversedBy || relationAttribute.mappedBy;\n\n if (targetAttributeName !== null && targetAttributeName !== undefined) {\n this.unsetRelation(attribute);\n }\n }\n });\n\n remainingKeys.forEach((key) => {\n const oldAttribute = oldAttributes[key];\n const newAttribute = newAttributes[key] as InternalAttribute;\n\n if (!isRelation(oldAttribute) && isRelation(newAttribute)) {\n return this.setRelation({\n key,\n uid,\n attribute: newAttribute as InternalRelationAttribute,\n });\n }\n\n if (isRelation(oldAttribute) && !isRelation(newAttribute)) {\n return this.unsetRelation(oldAttribute);\n }\n\n if (isRelation(oldAttribute) && isRelation(newAttribute)) {\n const relationAttribute = newAttribute as InternalRelationAttribute;\n const oldRelationAttribute = oldAttribute as InternalRelationAttribute;\n const oldTargetAttributeName =\n oldRelationAttribute.inversedBy || oldRelationAttribute.mappedBy;\n\n const sameRelation = oldAttribute.relation === relationAttribute.relation;\n const targetAttributeHasChanged =\n oldTargetAttributeName !== relationAttribute.targetAttribute;\n\n if (!sameRelation || targetAttributeHasChanged) {\n this.unsetRelation(oldAttribute);\n }\n\n // keep extra options that were set manually on oldAttribute\n reuseUnsetPreviousProperties(relationAttribute, oldAttribute);\n\n // Handle conditions explicitly - only preserve if present and not undefined in new attribute\n const newAttributeFromInfos = newAttributes[key];\n const hasNewConditions =\n newAttributeFromInfos.conditions !== undefined &&\n newAttributeFromInfos.conditions !== null;\n\n if (oldAttribute.conditions) {\n if (hasNewConditions) {\n // Conditions are still present, keep them\n relationAttribute.conditions = newAttributeFromInfos.conditions;\n } else {\n // Conditions were removed (undefined or null), ensure they're not preserved\n delete relationAttribute.conditions;\n }\n } else if (hasNewConditions) {\n // New conditions added\n relationAttribute.conditions = newAttributeFromInfos.conditions;\n }\n\n if (oldRelationAttribute.inversedBy) {\n relationAttribute.dominant = true;\n } else if (oldRelationAttribute.mappedBy) {\n relationAttribute.dominant = false;\n }\n\n return this.setRelation({\n key,\n uid,\n attribute: relationAttribute,\n });\n }\n });\n\n // add new relations\n newKeys.forEach((key) => {\n const attribute = newAttributes[key] as InternalAttribute;\n\n if (isRelation(attribute)) {\n const relationAttribute = attribute as InternalRelationAttribute;\n if (['manyToMany', 'oneToOne'].includes(relationAttribute.relation)) {\n if (\n relationAttribute.target === uid &&\n relationAttribute.targetAttribute !== undefined\n ) {\n // self referencing relation\n const targetAttribute = newAttributes[\n relationAttribute.targetAttribute\n ] as InternalRelationAttribute;\n\n if (targetAttribute.dominant === undefined) {\n relationAttribute.dominant = true;\n } else {\n relationAttribute.dominant = false;\n }\n } else {\n relationAttribute.dominant = true;\n }\n }\n\n this.setRelation({\n key,\n uid,\n attribute: relationAttribute,\n });\n }\n });\n\n contentType\n .set('kind', infos.kind || contentType.schema.kind)\n .set(['info', 'displayName'], infos.displayName)\n .set(['info', 'description'], infos.description)\n .set('options', {\n ...(infos.options ?? {}),\n draftAndPublish: infos.draftAndPublish,\n })\n .set('pluginOptions', infos.pluginOptions)\n .setAttributes(this.convertAttributes(newAttributes));\n\n return contentType;\n },\n\n deleteContentType(this: any, uid: string) {\n if (!this.contentTypes.has(uid)) {\n throw new ApplicationError('contentType.notFound');\n }\n\n this.components.forEach((compo: any) => {\n compo.removeContentType(uid);\n });\n\n this.contentTypes.forEach((ct: any) => {\n ct.removeContentType(uid);\n });\n\n return this.contentTypes.get(uid).delete();\n },\n };\n}\n\n/**\n * Returns a uid from a content type infos\n *\n * @param {object} options options\n * @param {string} options.singularName content-type singularName\n * @returns {string} uid\n */\nconst createContentTypeUID = ({\n plugin,\n singularName,\n}: {\n plugin?: string;\n singularName: string;\n}): Internal.UID.ContentType =>\n `${plugin ? `plugin` : `api`}::${plugin || singularName}.${singularName}`;\n\nconst generateRelation = ({\n key,\n attribute,\n uid,\n targetAttribute = {},\n}: {\n key: string;\n attribute: InternalRelationAttribute;\n uid: string;\n targetAttribute?: Partial<InternalRelationAttribute>;\n}) => {\n const opts: any = {\n type: 'relation',\n target: uid,\n private: targetAttribute.private || undefined,\n pluginOptions: targetAttribute.pluginOptions || undefined,\n // Preserve conditions from targetAttribute if they exist\n // This allows each side of the relation to maintain its own conditions\n ...(targetAttribute.conditions && { conditions: targetAttribute.conditions }),\n };\n\n switch (attribute.relation) {\n case 'oneToOne': {\n opts.relation = 'oneToOne';\n\n if (attribute.dominant) {\n opts.mappedBy = key;\n } else {\n opts.inversedBy = key;\n }\n break;\n }\n case 'oneToMany': {\n opts.relation = 'manyToOne';\n opts.inversedBy = key;\n break;\n }\n case 'manyToOne': {\n opts.relation = 'oneToMany';\n opts.mappedBy = key;\n break;\n }\n case 'manyToMany': {\n opts.relation = 'manyToMany';\n\n if (attribute.dominant) {\n opts.mappedBy = key;\n } else {\n opts.inversedBy = key;\n }\n\n break;\n }\n default:\n }\n\n // we do this just to make sure we have the same key order when writing to files\n const { type, relation, target, ...restOptions } = opts;\n\n const result = {\n type,\n relation,\n target,\n ...restOptions,\n };\n\n return result;\n};\n"],"names":["ApplicationError","errors","reuseUnsetPreviousProperties","newAttribute","oldAttribute","_","defaults","omit","createComponentBuilder","setRelation","key","uid","attribute","has","targetCT","contentTypes","get","target","targetAttribute","getAttribute","targetAttributeData","setAttribute","generateRelation","unsetRelation","relationAttribute","targetAttributeName","inversedBy","mappedBy","deleteAttribute","createContentTypeAttributes","attributes","contentType","Object","keys","forEach","setAttributes","convertAttributes","isRelation","includes","relation","undefined","dominant","createContentType","infos","createContentTypeUID","dir","plugin","path","join","strapi","dirs","app","extensions","singularName","api","createSchemaHandler","modelName","filename","set","setUID","kind","typeKinds","COLLECTION_TYPE","collectionName","strings","nameToCollectionName","pluralName","displayName","description","options","draftAndPublish","pluginOptions","config","editContentType","oldAttributes","schema","newAttributes","omitBy","attr","isConfigurable","newKeys","difference","deletedKeys","remainingKeys","intersection","oldRelationAttribute","oldTargetAttributeName","sameRelation","targetAttributeHasChanged","newAttributeFromInfos","hasNewConditions","conditions","deleteContentType","components","compo","removeContentType","ct","delete","opts","type","private","restOptions","result"],"mappings":"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"}
|
|
@@ -107,9 +107,10 @@ function createComponentBuilder() {
|
|
|
107
107
|
if (this.contentTypes.has(uid)) {
|
|
108
108
|
throw new ApplicationError('contentType.alreadyExists');
|
|
109
109
|
}
|
|
110
|
+
const dir = infos.plugin ? path__default.join(strapi.dirs.app.extensions, infos.plugin, 'content-types', infos.singularName) : path__default.join(strapi.dirs.app.api, infos.singularName, 'content-types', infos.singularName);
|
|
110
111
|
const contentType = createSchemaHandler({
|
|
111
112
|
modelName: infos.singularName,
|
|
112
|
-
dir
|
|
113
|
+
dir,
|
|
113
114
|
filename: `schema.json`
|
|
114
115
|
});
|
|
115
116
|
this.contentTypes.set(uid, contentType);
|
|
@@ -261,7 +262,7 @@ function createComponentBuilder() {
|
|
|
261
262
|
* @param {object} options options
|
|
262
263
|
* @param {string} options.singularName content-type singularName
|
|
263
264
|
* @returns {string} uid
|
|
264
|
-
*/ const createContentTypeUID = ({ singularName })
|
|
265
|
+
*/ const createContentTypeUID = ({ plugin, singularName })=>`${plugin ? `plugin` : `api`}::${plugin || singularName}.${singularName}`;
|
|
265
266
|
const generateRelation = ({ key, attribute, uid, targetAttribute = {} })=>{
|
|
266
267
|
const opts = {
|
|
267
268
|
type: 'relation',
|