UNPKG

sequelize

Version:

Sequelize is a promise-based Node.js ORM tool for Postgres, MySQL, MariaDB, SQLite, Microsoft SQL Server, Amazon Redshift and Snowflake’s Data Cloud. It features solid transaction support, relations, eager and lazy loading, read replication and more.

103 lines (93 loc) 2.78 kB
'use strict'; const _ = require('lodash'); const validator = _.cloneDeep(require('validator')); const moment = require('moment'); const extensions = { extend(name, fn) { this[name] = fn; return this; }, notEmpty(str) { return !str.match(/^[\s\t\r\n]*$/); }, len(str, min, max) { return this.isLength(str, min, max); }, isUrl(str) { return this.isURL(str); }, isIPv6(str) { return this.isIP(str, 6); }, isIPv4(str) { return this.isIP(str, 4); }, notIn(str, values) { return !this.isIn(str, values); }, regex(str, pattern, modifiers) { str += ''; if (Object.prototype.toString.call(pattern).slice(8, -1) !== 'RegExp') { pattern = new RegExp(pattern, modifiers); } return str.match(pattern); }, notRegex(str, pattern, modifiers) { return !this.regex(str, pattern, modifiers); }, isDecimal(str) { return str !== '' && !!str.match(/^(?:-?(?:[0-9]+))?(?:\.[0-9]*)?(?:[eE][+-]?(?:[0-9]+))?$/); }, min(str, val) { const number = parseFloat(str); return isNaN(number) || number >= val; }, max(str, val) { const number = parseFloat(str); return isNaN(number) || number <= val; }, not(str, pattern, modifiers) { return this.notRegex(str, pattern, modifiers); }, contains(str, elem) { return !!elem && str.includes(elem); }, notContains(str, elem) { return !this.contains(str, elem); }, is(str, pattern, modifiers) { return this.regex(str, pattern, modifiers); } }; exports.extensions = extensions; // instance based validators validator.isImmutable = function(value, validatorArgs, field, modelInstance) { return modelInstance.isNewRecord || modelInstance.dataValues[field] === modelInstance._previousDataValues[field]; }; // extra validators validator.notNull = function(val) { return val !== null && val !== undefined; }; // https://github.com/chriso/validator.js/blob/6.2.0/validator.js _.forEach(extensions, (extend, key) => { validator[key] = extend; }); // map isNull to isEmpty // https://github.com/chriso/validator.js/commit/e33d38a26ee2f9666b319adb67c7fc0d3dea7125 validator.isNull = validator.isEmpty; // isDate removed in 7.0.0 // https://github.com/chriso/validator.js/commit/095509fc707a4dc0e99f85131df1176ad6389fc9 validator.isDate = function(dateString) { // avoid http://momentjs.com/guides/#/warnings/js-date/ // by doing a preliminary check on `dateString` const parsed = Date.parse(dateString); if (isNaN(parsed)) { // fail if we can't parse it return false; } // otherwise convert to ISO 8601 as moment prefers // http://momentjs.com/docs/#/parsing/string/ const date = new Date(parsed); return moment(date.toISOString()).isValid(); }; exports.validator = validator;