@innoways/drip-form-plugin-formats
Version:
drip-form ajv formats插件
107 lines (90 loc) • 4.47 kB
JavaScript
'use strict';
var _typeof = require('@babel/runtime/helpers/typeof');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof);
/*
* 校验颜色、支持rgba、rgb、hex三种颜色
* @Author: jiangxiaowei
* @Date: 2021-07-29 12:43:09
* @Last Modified by: jiangxiaowei
* @Last Modified time: 2021-07-29 17:47:11
*/
var customPattern = {
colorRgba: /^[rR][gG][Bb][Aa][(]([\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?),){2}[\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?),[\s]*(0\.\d{1,2}|1|0)?[)]{1}$/,
colorRgb: /^[rR][gG][Bb][(]([\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?),){2}[\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)[)]{1}$/,
colorHex: /^#[0-9a-fA-F]{6}$/
};
var color = function color(data) {
var colorRgb = customPattern.colorRgb,
colorRgba = customPattern.colorRgba,
colorHex = customPattern.colorHex;
if (/^[rR][gG][Bb]/.test(data) && colorRgb.test(data)) {
return true;
} else if (/^[rR][gG][Bb][Aa]/.test(data) && colorRgba.test(data)) {
return true;
} else if (colorHex.test(data)) {
return true;
}
return false;
};
/*
* JSONSchema 默认date-time 校验UTC格式,我们校验2021-07-29 11:50:01
* @Author: jiangxiaowei
* @Date: 2021-07-29 11:50:01
* @Last Modified by: jiangxiaowei
* @Last Modified time: 2021-07-29 17:05:25
*/
var dateTimeReg = /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)$/i;
/*
* 校验https格式url
* For test cases: https://mathiasbynens.be/demo/url-regex
* @Author: jiangxiaowei
* @Date: 2022-01-07 17:44:59
* @Last Modified by: jiangxiaowei
* @Last Modified time: 2022-01-07 17:46:47
*/
var https = /^(http[s\u017F]):\/\/(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!(?:10|127)(?:\.[0-9]{1,3}){3})(?!(?:169\.254|192\.168)(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+\x2D)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+\x2D)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:(?![\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF])[\s\S])*)?$/i;
/*
* 是否是json对象 这里只判断string类型(format针对string类型)
* @Author: jiangxiaowei
* @Date: 2022-01-14 20:28:33
* @Last Modified by: jiangxiaowei
* @Last Modified time: 2022-01-14 20:50:21
*/
var jsonObject = function jsonObject(data) {
try {
data = JSON.parse(data);
} catch (e) {
return false;
}
return _typeof__default["default"](data) === 'object' && data !== null;
};
var formats = {
'date-time': dateTimeReg,
color: color,
https: https,
jsonObject: jsonObject
};
/*
* addFormat(ajv) 添加所有formats
* addFormat(ajv,['color','date-time']) 仅添加color和date-time format
* @Author: jiangxiaowei
* @Date: 2021-07-29 12:56:28
* @Last Modified by: jiangxiaowei
* @Last Modified time: 2022-01-07 17:48:50
*/
var addFormat = function addFormat(ajv, options) {
if (Array.isArray(options)) {
Object.keys(formats).filter(function (item) {
return options.includes(item);
}).map(function (item) {
ajv.addFormat(item, formats[item]);
});
} else if (!options) {
Object.keys(formats).map(function (item) {
ajv.addFormat(item, formats[item]);
});
}
return ajv;
};
module.exports = addFormat;