node-web-mvc
Version:
node spring mvc
67 lines (66 loc) • 2.19 kB
JavaScript
;
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);