"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createBaseNumberSchema = void 0; const Yup = __importStar(require("yup")); const lodash_1 = require("lodash"); const schema_1 = require("../../schema"); const config_1 = require("../config"); const util_1 = require("./util"); /** * Initializes a yup number schema derived from a json number schema */ const createNumberSchema = ([key, value], required) => { const defaultMessage = (0, config_1.getErrorMessage)(value.description, schema_1.DataTypes.NUMBER, [ key, { title: value.title } ]) || "This field is not of type number"; return (0, exports.createBaseNumberSchema)(Yup.number().typeError(defaultMessage), [key, value], required); }; /** * Generates a yup number schema instance that is used for both number and integer schema */ const createBaseNumberSchema = (yupSchema, [key, value], required) => { const { const: _const, default: _default, description, enum: _enum, exclusiveMaximum, exclusiveMinimum, minimum, maximum, multipleOf, title } = value; const isMinNumber = (0, lodash_1.isNumber)(minimum); const isMaxNumber = (0, lodash_1.isNumber)(maximum); const isExclusiveMaxNumber = (0, lodash_1.isNumber)(exclusiveMaximum); const isExclusiveMinNumber = (0, lodash_1.isNumber)(exclusiveMinimum); yupSchema = (0, util_1.createDefaultSchema)(yupSchema, [ (0, lodash_1.isNumber)(_default), _default ]); if (isExclusiveMinNumber && isMinNumber) { throw new Error("Minimum and exclusive minimum keys can not be used together"); } if (isExclusiveMaxNumber && isMaxNumber) { throw new Error("Maximum and exclusive maximum keys can not be used together"); } // Minimum value is inclusive if (isMinNumber) { const message = (0, config_1.getErrorMessage)(description, schema_1.SchemaKeywords.MINIMUM, [ key, { title, minimum } ]) || `This field requires a minimum value of ${minimum}`; yupSchema = yupSchema.concat(yupSchema.min(minimum, message)); } if (isExclusiveMinNumber) { const message = (0, config_1.getErrorMessage)(description, schema_1.SchemaKeywords.EXCLUSIVE_MINIMUM, [ key, { title, exclusiveMinimum } ]) || `This field requires a exclusive minimum value of ${exclusiveMinimum}`; yupSchema = yupSchema.concat(yupSchema.moreThan(exclusiveMinimum, message)); } // Maximum value is inclusive if (isMaxNumber) { const message = (0, config_1.getErrorMessage)(description, schema_1.SchemaKeywords.MAXIMUM, [ key, { title, maximum } ]) || `This field cannot exceed a maximum value of ${maximum}`; yupSchema = yupSchema.concat(yupSchema.max(maximum, message)); } if (isExclusiveMaxNumber) { const message = (0, config_1.getErrorMessage)(description, schema_1.SchemaKeywords.EXCLUSIVE_MAXIMUM, [ key, { title, exclusiveMaximum } ]) || `This field cannot exceed a exclusive maximum value of ${exclusiveMaximum}`; yupSchema = yupSchema.concat(yupSchema.lessThan(exclusiveMaximum, message)); } if ((0, lodash_1.isNumber)(multipleOf)) { const message = (0, config_1.getErrorMessage)(description, schema_1.SchemaKeywords.MULTIPLE_OF, [ key, { title, multipleOf } ]) || `This field requires a multiple of ${multipleOf}`; yupSchema = yupSchema.concat(yupSchema.test({ name: "multipleOf", message, test: (field) => { if (field === undefined) return true; return field % multipleOf === 0; } })); } const constantErrorMessage = (0, config_1.getErrorMessage)(description, schema_1.SchemaKeywords.CONST, [key, { const: _const?.toString(), title }]); yupSchema = (0, util_1.createConstantSchema)(yupSchema, [ constantErrorMessage, _const ]); const enumErrorMessage = (0, config_1.getErrorMessage)(description, schema_1.SchemaKeywords.ENUM, [ key, { enum: _enum?.join(","), title } ]); yupSchema = (0, util_1.createEnumSchema)(yupSchema, [ enumErrorMessage, _enum ]); const requiredErrorMessage = (0, config_1.getErrorMessage)(description, schema_1.SchemaKeywords.REQUIRED, [key, { title, required: required?.join(",") }]); yupSchema = (0, util_1.createRequiredSchema)(yupSchema, [ requiredErrorMessage, { key, required } ]); return yupSchema; }; exports.createBaseNumberSchema = createBaseNumberSchema; exports.default = createNumberSchema; //# sourceMappingURL=number.js.map