express-cargo
Version:
express middleware for class-based request parsing
200 lines (199 loc) • 5.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: Object.getOwnPropertyDescriptor(all, name).get
});
}
_export(exports, {
get equal () {
return equal;
},
get isFalse () {
return isFalse;
},
get isTrue () {
return isTrue;
},
get length () {
return length;
},
get max () {
return max;
},
get maxLength () {
return maxLength;
},
get min () {
return min;
},
get minLength () {
return minLength;
},
get notEqual () {
return notEqual;
},
get oneOf () {
return oneOf;
},
get prefix () {
return prefix;
},
get range () {
return range;
},
get regexp () {
return regexp;
},
get suffix () {
return suffix;
},
get validate () {
return validate;
}
});
const _metadata = require("./metadata");
function addValidator(target, propertyKey, rule) {
const classMeta = new _metadata.CargoClassMetadata(target);
const fieldMeta = classMeta.getFieldMetadata(propertyKey);
fieldMeta.addValidator(rule);
classMeta.setFieldMetadata(propertyKey, fieldMeta);
}
function min(minimum) {
return (target, propertyKey)=>{
addValidator(target, propertyKey, {
type: 'min',
validate: (input)=>typeof input === 'number' && input >= minimum,
message: `${String(propertyKey)} must be >= ${minimum}`
});
};
}
function max(maximum) {
return (target, propertyKey)=>{
addValidator(target, propertyKey, {
type: 'max',
validate: (input)=>typeof input === 'number' && input <= maximum,
message: `${String(propertyKey)} must be <= ${maximum}`
});
};
}
function prefix(prefixText) {
return (target, propertyKey)=>{
addValidator(target, propertyKey, {
type: 'prefix',
validate: (val)=>typeof val === 'string' && val.startsWith(prefixText),
message: `${String(propertyKey)} must start with ${prefixText}`
});
};
}
function suffix(suffixText) {
return (target, propertyKey)=>{
addValidator(target, propertyKey, {
type: 'suffix',
validate: (val)=>typeof val === 'string' && val.endsWith(suffixText),
message: `${String(propertyKey)} must end with ${suffixText}`
});
};
}
function equal(value) {
return (target, propertyKey)=>{
addValidator(target, propertyKey, {
type: 'equal',
validate: (val)=>val === value,
message: `${String(propertyKey)} must be equal to ${value}`
});
};
}
function notEqual(value) {
return (target, propertyKey)=>{
addValidator(target, propertyKey, {
type: 'notEqual',
validate: (val)=>val !== value,
message: `${String(propertyKey)} must not be equal to ${value}`
});
};
}
function range(min, max) {
return (target, propertyKey)=>{
addValidator(target, propertyKey, {
type: 'range',
validate: (value)=>typeof value === 'number' && value >= min && value <= max,
message: `${String(propertyKey)} must be between ${min} and ${max}`
});
};
}
function isFalse() {
return (target, propertyKey)=>{
addValidator(target, propertyKey, {
type: 'isFalse',
validate: (val)=>val === false,
message: `${String(propertyKey)} must be false`
});
};
}
function isTrue() {
return (target, propertyKey)=>{
addValidator(target, propertyKey, {
type: 'isTrue',
validate: (val)=>val === true,
message: `${String(propertyKey)} must be true`
});
};
}
function length(value) {
return (target, propertyKey)=>{
addValidator(target, propertyKey, {
type: 'length',
validate: (val)=>typeof val === 'string' && val.length === value,
message: `${String(propertyKey)} must be ${value} characters`
});
};
}
function maxLength(max) {
return (target, propertyKey)=>{
addValidator(target, propertyKey, {
type: 'maxLength',
validate: (val)=>typeof val === 'string' && val.length <= max,
message: `${String(propertyKey)} must not exceed ${max} characters`
});
};
}
function minLength(min) {
return (target, propertyKey)=>{
addValidator(target, propertyKey, {
type: 'minLength',
validate: (val)=>typeof val === 'string' && val.length >= min,
message: `${String(propertyKey)} must be at least ${min} characters`
});
};
}
function oneOf(options) {
return (target, propertyKey)=>{
addValidator(target, propertyKey, {
type: 'oneOf',
validate: (value)=>options.includes(value),
message: `${String(propertyKey)} must be one of ${options.join(', ')}`
});
};
}
function validate(validateFn, message) {
return (target, propertyKey)=>{
addValidator(target, propertyKey, {
type: 'validate',
validate: validateFn,
message: message || `${String(propertyKey)} did not pass the provided validation rule.`
});
};
}
function regexp(pattern, message) {
return (target, propertyKey)=>{
addValidator(target, propertyKey, {
type: 'regexp',
validate: (value)=>typeof value === 'string' && pattern.test(value),
message: message || `${String(propertyKey)} does not match pattern ${pattern}`
});
};
}