UNPKG

mvom

Version:

Multivalue Object Mapper

77 lines (65 loc) 2.92 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _dataTransformers = require("../dataTransformers"); var _ForeignKeyDbTransformer = _interopRequireDefault(require("../ForeignKeyDbTransformer")); var _BaseScalarType = _interopRequireDefault(require("./BaseScalarType")); /** String Schema Type */ class StringType extends _BaseScalarType.default { /** Data transformer */ /** Array of allowed enumerations */ /* Regular expression to validate the property value against */ /* Transform schema foreign key definitions to the db format */ constructor(definition, options = {}) { super(definition, options); const { enum: definitionEnum, match, foreignKey } = definition; this.enum = definitionEnum ?? null; this.match = match ?? null; this.foreignKeyDbTransformer = new _ForeignKeyDbTransformer.default(foreignKey); this.dataTransformer = new _dataTransformers.StringDataTransformer(definitionEnum); // add validators for this type this.validators.unshift(this.createMatchValidator()); this.validators.unshift(this.createEnumValidator()); } /** Create an array of foreign key definitions that will be validated before save */ transformForeignKeyDefinitionsToDb(value) { return this.foreignKeyDbTransformer.transform(value); } /** String required validator */ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types -- Use any instead of unknown to avoid type errors in enum validation validateRequired = value => !this.required || this.enum?.includes(value) || value != null && value !== ''; /** Enum validator */ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Use any instead of unknown to avoid type errors in enum validation validateEnum = value => // skip validation on nullish values because a required validation error, if applicable, is more helpful value == null || this.enum == null || this.enum.includes(value); /** Create validation object for enum validation */ createEnumValidator() { const message = 'Value not present in list of allowed values'; return { validationFn: this.validateEnum, message }; } /** Match validator */ // eslint-disable-next-line @typescript-eslint/no-explicit-any validateMatch = value => // skip validation on nullish values because a required validation error, if applicable, is more helpful value == null || this.match == null || this.match.test(value); /** Create validation object for match validation */ createMatchValidator() { const message = 'Value does not match pattern'; return { validationFn: this.validateMatch, message }; } } var _default = exports.default = StringType;