import _ from 'lodash'; import { errors, z } from '@strapi/utils'; import { strapiID, validateZodAsync } from '../../validation/zod.mjs'; import '@strapi/types'; import '../../services/utils/configuration/attributes.mjs'; import '../../services/utils/configuration/settings.mjs'; const { PaginationError, ValidationError } = errors; const TYPES = [ 'singleType', 'collectionType' ]; /** * Validates type kind */ const kindSchema = z.enum(TYPES).nullable().optional(); const bulkActionInputSchema = z.object({ documentIds: z.array(strapiID).min(1) }); const generateUIDInputSchema = z.object({ contentTypeUID: z.string(), field: z.string(), data: z.looseObject({}) }); const createCheckUIDAvailabilityInputSchema = (regex)=>{ const pattern = regex ? new RegExp(regex) : /^[A-Za-z0-9-_.~]*$/; return z.object({ contentTypeUID: z.string(), field: z.string(), value: z.string().refine((value)=>value === '' || pattern.test(value), { error: `Must match the custom regex or the default one "/^[A-Za-z0-9-_.~]*$/"` }) }); }; const validateUIDField = (contentTypeUID, field)=>{ const model = strapi.contentTypes[contentTypeUID]; if (!model) { throw new ValidationError('ContentType not found'); } if (!_.has(model, [ 'attributes', field ]) || _.get(model, [ 'attributes', field, 'type' ]) !== 'uid') { throw new ValidationError(`${field} must be a valid \`uid\` attribute`); } }; const validateKind = validateZodAsync(kindSchema); const validateBulkActionInput = validateZodAsync(bulkActionInputSchema); const validateGenerateUIDInput = validateZodAsync(generateUIDInputSchema); const validateCheckUIDAvailabilityInput = (body)=>{ let regex; const contentType = body.contentTypeUID in strapi.contentTypes ? strapi.contentTypes[body.contentTypeUID] : null; if (contentType?.attributes[body.field] && `regex` in contentType.attributes[body.field] && contentType.attributes[body.field].regex) { regex = (contentType?.attributes[body.field]).regex; } const schema = createCheckUIDAvailabilityInputSchema(regex); return validateZodAsync(schema)(body); }; export { validateBulkActionInput, validateCheckUIDAvailabilityInput, validateGenerateUIDInput, validateKind, validateUIDField }; //# sourceMappingURL=index.mjs.map