UNPKG

@innoways/drip-form-plugin-keywords

Version:

drip-form ajv关键字插件

164 lines (139 loc) 4.29 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); /* * @Author: jiangxiaowei * @Date: 2021-07-29 19:40:44 * @Last Modified by: jiangxiaowei * @Last Modified time: 2021-08-17 18:40:36 */ /** * 针对对string类型的关键字:使用分割符分割之后的最长最短输入校验 * @schemaKey {string} delimiter 字符串分隔符 * @schemaKey {number} max 最大长度 * @schemaKey {number} min 最短长度 */ var rangeDelimiter = function rangeDelimiter(ajv) { if (!ajv.getKeyword('rangeDelimiter')) { ajv.addKeyword({ // schema关键字 keyword: 'rangeDelimiter', // 允许的校验类型 type: 'string', // modifying:true, // 校验函数 validate: function validate(schema, data) { var delimiter = schema.delimiter, max = schema.max, min = schema.min; var dataList = data.split(delimiter).filter(function (item) { return item; }).length; // TODO 使用codegen修改data数据 return !(dataList > max || dataList < min); } }); } return ajv; }; /* * @Author: jiangxiaowei * @Date: 2022-01-20 19:26:31 * @Last Modified by: jiangxiaowei * @Last Modified time: 2022-01-20 19:48:12 */ /** * 计算中文、英文最长最短长度 * @schemaKey {number} max 最大长度 * @schemaKey {number} min 最短长度 */ var gbkLength = function gbkLength(ajv) { if (!ajv.getKeyword('gbkLength')) { ajv.addKeyword({ // schema关键字 keyword: 'gbkLength', // 允许的校验类型 type: 'string', // modifying:true, // 校验函数 validate: function validate(schema, data) { var max = schema.max, min = schema.min; // eslint-disable-next-line no-control-regex var len = data.trim().replace(/[^\x00-\xff]/g, 'aa').length; if (min !== undefined && min > len) { return false; } else if (max !== undefined && max < len) { return false; } return true; } }); } return ajv; }; /* * @Author: jiangxiaowei * @Date: 2022-01-20 19:26:31 * @Last Modified by: jiangxiaowei * @Last Modified time: 2022-01-20 19:48:12 */ /** * 计算中文、英文最长最短长度 * @schemaKey {number} max 最大长度 * @schemaKey {number} min 最短长度 */ var dateChecking = function dateChecking(ajv) { if (!ajv.getKeyword('dateChecking')) { ajv.addKeyword({ // schema关键字 keyword: 'dateChecking', // 允许的校验类型 type: 'object', // modifying:true, // 校验函数 validate: function validate(schema, data) { var earlierDateChecking = schema.earlierDateChecking, authModeDateChecking = schema.authModeDateChecking; // // eslint-disable-next-line no-control-regex if (_typeof__default["default"](data) === 'object' && data.self && data[earlierDateChecking]) { var from = new Date(data[earlierDateChecking]).getTime(); var to = new Date(data.self).getTime(); if (to <= from && authModeDateChecking === 'lt') { return false; } else if (to < from && authModeDateChecking === 'lte') { return false; } } return true; } }); } return ajv; }; var keywords = { rangeDelimiter: rangeDelimiter, gbkLength: gbkLength, dateChecking: dateChecking }; /* * addKeywords(ajv) 添加所有keywords * addKeywords(ajv,['rangeDelimiter']) 仅添加rangeDelimiter关键字 * @Author: jiangxiaowei * @Date: 2021-07-29 12:56:28 * @Last Modified by: jiangxiaowei * @Last Modified time: 2021-08-17 15:45:38 */ var addKeywords = function addKeywords(ajv, options) { if (Array.isArray(options)) { Object.keys(keywords).filter(function (item) { return options.includes(item); }).map(function (item) { keywords[item](ajv); }); } else if (!options) { Object.keys(keywords).map(function (item) { keywords[item](ajv); }); } return ajv; }; module.exports = addKeywords;