@innoways/drip-form-plugin-keywords
Version:
drip-form ajv关键字插件
158 lines (136 loc) • 4.07 kB
JavaScript
import _typeof from '@babel/runtime/helpers/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(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;
};
export { addKeywords as default };