UNPKG

node-web-mvc

Version:
67 lines (66 loc) 2.19 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const UnexpectedTypeException_1 = __importDefault(require("../../errors/UnexpectedTypeException")); const TypeConverter_1 = require("../../serialization/TypeConverter"); const Target_1 = __importDefault(require("../../servlets/annotations/Target")); const ElementType_1 = __importDefault(require("../../servlets/annotations/annotation/ElementType")); const Constraints_1 = __importDefault(require("./Constraints")); class Size extends Constraints_1.default { constructor() { super(...arguments); this.message = '{validation.constraints.Size.message}'; /** * 当前元素必须大于等于 min */ this.min = 0; /** * 当前元素必须小于等于 max */ this.max = Number.MAX_VALUE; } getSize(value, context) { const typer = context.currentTyper; if (typeof value == 'string') { return value.length; } else if (value instanceof Array) { return value.length; } else if (value instanceof Map) { return value.size; } else if (value instanceof Set) { return value.size; } else if (typer.isType(TypeConverter_1.TypedArray)) { return value.length; } else { throw new UnexpectedTypeException_1.default(context); } } isValid(value, context) { if (value === null || value === undefined) { // 如果为null或者undefined则忽略验证 return true; } const size = this.getSize(value, context); return size >= this.min && size <= this.max; } } /** * 验证配置元素的区间范围 * * 支持的类型: * - `String` * - `Array` * - `Map` * - `Set` * - `TypedArray` * * `null` 或者 `undefined` 则忽略验证 */ exports.default = (0, Target_1.default)([ElementType_1.default.PROPERTY, ElementType_1.default.PARAMETER])(Size);