UNPKG

@forestadmin/datasource-toolkit

Version:
75 lines 7.71 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const rules_1 = require("./rules"); const type_getter_1 = __importDefault(require("./type-getter")); const errors_1 = require("../errors"); const index_1 = require("../index"); class FieldValidator { static validate(collection, field, values) { const dotIndex = field.indexOf(':'); if (dotIndex === -1) { const schema = index_1.SchemaUtils.getField(collection.schema, field, collection.name); if (schema.type !== 'Column') { throw new errors_1.ValidationError(`Unexpected field type: '${collection.name}.${field}' ` + `(found '${schema.type}' expected '${'Column'}')`); } if (values !== undefined) { values.forEach(value => FieldValidator.validateValue(field, schema, value)); } } else { const prefix = field.substring(0, dotIndex); const schema = collection.schema.fields[prefix]; if (!schema) { throw new errors_1.MissingRelationError({ collectionName: collection.name, fieldName: prefix, availableFields: Object.keys(collection.schema.fields).filter(name => collection.schema.fields[name].type === 'ManyToOne' || collection.schema.fields[name].type === 'OneToOne'), }); } if (schema.type !== 'ManyToOne' && schema.type !== 'OneToOne') { throw new errors_1.ValidationError(`Unexpected field type: '${collection.name}.${prefix}' (found ` + `'${schema.type}' expected '${'ManyToOne'}' or '${'OneToOne'}')`); } const suffix = field.substring(dotIndex + 1); const association = collection.dataSource.getCollection(schema.foreignCollection); FieldValidator.validate(association, suffix, values); } } static validateValueForId(field, schema, value) { FieldValidator.validateValue(field, schema, value, [schema.columnType]); } static validateValue(field, schema, value, allowedTypes = rules_1.MAP_ALLOWED_TYPES_FOR_COLUMN_TYPE[schema.columnType]) { // FIXME: handle complex type from ColumnType if (typeof schema.columnType !== 'string') { return; } const type = type_getter_1.default.get(value, schema.columnType); if (!allowedTypes?.includes(type)) { throw new errors_1.ValidationError(`The given value has a wrong type for "${field}": ${value}.\n Expects ${JSON.stringify(allowedTypes).slice(1, -1)}`); } if (value && schema.columnType === 'Enum') { FieldValidator.checkEnumValue(schema, value); } } static checkEnumValue(columnSchema, enumValue) { const isEnumAllowed = columnSchema.enumValues.includes(enumValue); if (!isEnumAllowed) { throw new errors_1.ValidationError(`The given enum value(s) ${enumValue} is not listed in [${columnSchema.enumValues}]`); } } static validateName(collectionName, name) { if (/ /.test(name)) { const sanitizedName = name.replace(/ (.)/g, (_, s) => s.toUpperCase()); throw new Error(`The name of field '${name}' you configured on` + ` '${collectionName}' must not contain space.` + ` Something like '${sanitizedName}' should work has expected.`); } } } exports.default = FieldValidator; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdmFsaWRhdGlvbi9maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUE0RDtBQUM1RCxnRUFBdUM7QUFDdkMsc0NBQWtFO0FBQ2xFLG9DQUF1QztBQUl2QyxNQUFxQixjQUFjO0lBQ2pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBc0IsRUFBRSxLQUFhLEVBQUUsTUFBa0I7UUFDdkUsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwQyxJQUFJLFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNuQixNQUFNLE1BQU0sR0FBRyxtQkFBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0UsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtnQkFDNUIsTUFBTSxJQUFJLHdCQUFlLENBQ3ZCLDJCQUEyQixVQUFVLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSTtvQkFDckQsV0FBVyxNQUFNLENBQUMsSUFBSSxlQUFlLFFBQVEsSUFBSSxDQUNwRCxDQUFDO2FBQ0g7WUFFRCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7Z0JBQ3hCLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUM3RTtTQUNGO2FBQU07WUFDTCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM1QyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVoRCxJQUFJLENBQUMsTUFB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