UNPKG

@innoways/drip-form-plugin-formats

Version:

drip-form ajv formats插件

107 lines (90 loc) 4.47 kB
'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;