plumier
Version:
Delightful Node.js Rest Framework
55 lines (54 loc) • 2.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const core_1 = require("@plumier/core");
const bytes_1 = tslib_1.__importDefault(require("bytes"));
function validateSize(opt, val, msg) {
const expected = (typeof opt === "string") ? (0, bytes_1.default)(opt) : opt;
if (val > expected)
return msg !== null && msg !== void 0 ? msg : "File size exceed the limit allowed";
}
function validateMime(opt, val, msg) {
const regex = new RegExp(opt);
if (!regex.test(val))
return msg !== null && msg !== void 0 ? msg : "Invalid file type";
}
function validateFile(opt, val) {
const list = [];
if (typeof opt === "object") {
if (opt.maxSize)
list.push(validateSize(opt.maxSize, val.size, opt.invalidSizeMessage));
if (opt.mime)
list.push(validateMime(opt.mime, val.type, opt.invalidMimeMessage));
}
else
list.push(validateSize(opt, val.size));
const result = list.filter((x) => !!x);
if (result.length > 0)
return result.join(", ");
}
core_1.val.file = (opt) => {
return core_1.val.custom((val) => {
if (Array.isArray(val)) {
const result = [];
for (const [i, value] of val.entries()) {
const message = validateFile(opt, value);
if (message)
result.push({ path: i.toString(), messages: [message] });
}
return result;
}
else
return validateFile(opt, val);
});
};
core_1.val.image = (opt) => {
var _a;
const invalidMimeMessage = "Invalid image file";
if (typeof opt === "object")
return core_1.val.file(Object.assign(Object.assign({}, opt), { mime: /^image\//i, invalidMimeMessage: (_a = opt.invalidImageMessage) !== null && _a !== void 0 ? _a : invalidMimeMessage, invalidSizeMessage: opt.invalidSizeMessage }));
else if (typeof opt === "string")
return core_1.val.file({ maxSize: opt, mime: /^image\//i, invalidMimeMessage });
else
return core_1.val.file({ mime: /^image\//i, invalidMimeMessage });
};