Skip to content

Commit cfc17b6

Browse files
committed
add the error message to the code field.
1 parent 823e8ed commit cfc17b6

File tree

4 files changed

+104
-62
lines changed

4 files changed

+104
-62
lines changed

dist/index.js

Lines changed: 63 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,4 @@
11
"use strict";
2-
var __values = (this && this.__values) || function(o) {
3-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
4-
if (m) return m.call(o);
5-
if (o && typeof o.length === "number") return {
6-
next: function () {
7-
if (o && i >= o.length) o = void 0;
8-
return { value: o && o[i++], done: !o };
9-
}
10-
};
11-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
12-
};
132
var __read = (this && this.__read) || function (o, n) {
143
var m = typeof Symbol === "function" && o[Symbol.iterator];
154
if (!m) return o;
@@ -26,50 +15,68 @@ var __read = (this && this.__read) || function (o, n) {
2615
}
2716
return ar;
2817
};
18+
var __values = (this && this.__values) || function(o) {
19+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
20+
if (m) return m.call(o);
21+
if (o && typeof o.length === "number") return {
22+
next: function () {
23+
if (o && i >= o.length) o = void 0;
24+
return { value: o && o[i++], done: !o };
25+
}
26+
};
27+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
28+
};
2929
var __spread = (this && this.__spread) || function () {
3030
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
3131
return ar;
3232
};
3333
Object.defineProperty(exports, "__esModule", { value: true });
34-
exports.toValue = exports.formatData = exports.parseBody = exports.parseData = exports.checkLength = exports.validSign = exports.filterData = void 0;
34+
exports.toValue = exports.formatData = exports.parseBody = exports.parseData = exports.checkLength = exports.errorInfo = exports.validSign = exports.filterData = void 0;
3535
var lodash_1 = require("lodash");
3636
var rule_judgment_1 = require("rule-judgment");
3737
var MD5 = require("md5.js");
3838
function filterData(options, customize) {
39-
return function (data) {
39+
return function (data, errorCode) {
4040
var e_1, _a;
4141
var values = {};
42-
try {
43-
for (var options_1 = __values(options), options_1_1 = options_1.next(); !options_1_1.done; options_1_1 = options_1.next()) {
44-
var item = options_1_1.value;
45-
var key = item.key, type = item.type, rules = item.rules, format = item.format, defaultValue = item.defaultValue, md5 = item.md5, separator = item.separator;
46-
var value = data[key];
47-
if (/\[\]$/.test(type) && !lodash_1.isArray(value)) {
48-
value = toValue('string')(value || '').split(separator || /\,/);
42+
var _loop_1 = function (item) {
43+
var key = item.key, type = item.type, rules = item.rules, format = item.format, defaultValue = item.defaultValue, md5 = item.md5, separator = item.separator;
44+
var value = data[key];
45+
if (/\[\]$/.test(type) && !lodash_1.isArray(value)) {
46+
value = toValue('string')(value || '').split(separator || /\,/);
47+
}
48+
if (/\[\]$/.test(type) && lodash_1.isArray(value)) {
49+
var _a = __read(type.match(/(\S+)(\[\])$/), 2), itype = _a[1];
50+
value = lodash_1.compact(value).map(toValue(itype));
51+
if (rules) {
52+
value.forEach(function (v) { return validateRule(rules || [], customize)(v, errorCode); });
4953
}
50-
if (/\[\]$/.test(type) && lodash_1.isArray(value)) {
51-
var _b = __read(type.match(/(\S+)(\[\])$/), 2), itype = _b[1];
52-
value = lodash_1.compact(value).map(toValue(itype));
53-
rules && value.forEach(validateRule(rules, customize));
54-
if (defaultValue && value.length === 0) {
55-
value = defaultValue;
56-
}
57-
if (format) {
58-
value = value.map(formatData(format, customize));
59-
}
54+
if (defaultValue && value.length === 0) {
55+
value = defaultValue;
6056
}
61-
else {
62-
value = toValue(type)(value);
63-
rules && validateRule(rules, customize)(value);
64-
value = value || defaultValue;
65-
if (format) {
66-
value = formatData(format, customize)(value);
67-
}
68-
if (md5) {
69-
value = new MD5().update(lodash_1.template(md5)(values)).digest('hex');
70-
}
57+
if (format) {
58+
value = value.map(formatData(format, customize));
7159
}
72-
lodash_1.set(values, key, value);
60+
}
61+
else {
62+
value = toValue(type)(value);
63+
if (rules) {
64+
validateRule(rules, customize)(value, errorCode);
65+
}
66+
value = value || defaultValue;
67+
if (format) {
68+
value = formatData(format, customize)(value);
69+
}
70+
if (md5) {
71+
value = new MD5().update(lodash_1.template(md5)(values)).digest('hex');
72+
}
73+
}
74+
lodash_1.set(values, key, value);
75+
};
76+
try {
77+
for (var options_1 = __values(options), options_1_1 = options_1.next(); !options_1_1.done; options_1_1 = options_1.next()) {
78+
var item = options_1_1.value;
79+
_loop_1(item);
7380
}
7481
}
7582
catch (e_1_1) { e_1 = { error: e_1_1 }; }
@@ -92,26 +99,26 @@ function validSign(options, sign) {
9299
}
93100
exports.validSign = validSign;
94101
function validateRule(rules, customize) {
95-
return function (value) {
102+
return function (value, errorCode) {
96103
var e_2, _a;
97104
try {
98105
for (var rules_1 = __values(rules), rules_1_1 = rules_1.next(); !rules_1_1.done; rules_1_1 = rules_1.next()) {
99106
var rule = rules_1_1.value;
100-
var required = rule.required, message = rule.message, min = rule.min, max = rule.max, pattern = rule.pattern, validator = rule.validator;
107+
var required = rule.required, message = rule.message, min = rule.min, max = rule.max, pattern = rule.pattern, validator = rule.validator, code = rule.code;
101108
if (required && (lodash_1.isUndefined(value) || value === '')) {
102-
throw new Error(message);
109+
throw errorInfo(message, code || errorCode);
103110
}
104111
if (lodash_1.isString(value)) {
105112
if (min && checkLength(value) < min) {
106-
throw new Error(message);
113+
throw errorInfo(message, code || errorCode);
107114
}
108115
if (max && checkLength(value) > max) {
109-
throw new Error(message);
116+
throw errorInfo(message, code || errorCode);
110117
}
111118
if (pattern) {
112119
var reg = getRegexp(pattern);
113120
if (!reg.test(value)) {
114-
throw new Error(message);
121+
throw errorInfo(message, code || errorCode);
115122
}
116123
}
117124
}
@@ -122,7 +129,7 @@ function validateRule(rules, customize) {
122129
}
123130
if (validator && lodash_1.isFunction(validator)) {
124131
if (!validator(value) || String(value) === 'Invalid Date') {
125-
throw new Error(message);
132+
throw errorInfo(message, code || errorCode);
126133
}
127134
}
128135
}
@@ -136,6 +143,14 @@ function validateRule(rules, customize) {
136143
}
137144
};
138145
}
146+
function errorInfo(message, code) {
147+
var error = new Error(message);
148+
if (code) {
149+
error.code = code;
150+
}
151+
return error;
152+
}
153+
exports.errorInfo = errorInfo;
139154
function checkLength(str) {
140155
var e_3, _a;
141156
var size = 0;

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "parse-string",
3-
"version": "1.2.1",
3+
"version": "1.2.2",
44
"description": "Parse the string into a Map.",
55
"main": "dist/index.js",
66
"typings": "types/index.d.ts",

src/index.ts

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import * as MD5 from 'md5.js'
88
* @param options
99
* @param customize
1010
*/
11-
export function filterData (options: FilterData.options[], customize?: Record<string, Function>): (data: Record<string, any>) => Record<string, any> {
12-
return (data: Record<string, any>) => {
11+
export function filterData (options: FilterData.options[], customize?: Record<string, Function>): (data: Record<string, any>, errorCode?: number) => Record<string, any> {
12+
return (data: Record<string, any>, errorCode?: number) => {
1313
let values: Record<string, any> = {}
1414
for (let item of options) {
1515
let { key, type, rules, format, defaultValue, md5, separator } = item
@@ -20,7 +20,9 @@ export function filterData (options: FilterData.options[], customize?: Record<st
2020
if (/\[\]$/.test(type) && isArray(value)) {
2121
let [, itype] = type.match(/(\S+)(\[\])$/)
2222
value = compact(value).map( toValue(itype as ParseData.parseType) )
23-
rules && value.forEach( validateRule(rules, customize) )
23+
if (rules) {
24+
value.forEach( v => validateRule(rules || [], customize)(v, errorCode) )
25+
}
2426
if (defaultValue && value.length === 0) {
2527
value = defaultValue
2628
}
@@ -30,7 +32,9 @@ export function filterData (options: FilterData.options[], customize?: Record<st
3032
}
3133
else {
3234
value = toValue(type as ParseData.parseType)(value)
33-
rules && validateRule(rules, customize)(value)
35+
if (rules) {
36+
validateRule(rules, customize)(value, errorCode)
37+
}
3438
value = value || defaultValue
3539
if (format) {
3640
value = formatData(format, customize)(value)
@@ -62,24 +66,24 @@ export function validSign (options: string, sign: string = 'sign'): (data: Recor
6266
* @param rules
6367
* @param customize
6468
*/
65-
function validateRule (rules: FilterData.rule[], customize?: Record<string, Function>): (value: any) => void {
66-
return (value: any) => {
69+
function validateRule (rules: FilterData.rule[], customize?: Record<string, Function>): (value: any, errorCode?: number) => void {
70+
return (value: any, errorCode?: number) => {
6771
for (let rule of rules ) {
68-
let { required, message, min, max, pattern, validator } = rule
72+
let { required, message, min, max, pattern, validator, code } = rule
6973
if (required && (isUndefined(value) || value === '')) {
70-
throw new Error(message)
74+
throw errorInfo(message, code || errorCode)
7175
}
7276
if (isString(value)) {
7377
if (min && checkLength(value) < min) {
74-
throw new Error(message)
78+
throw errorInfo(message, code || errorCode)
7579
}
7680
if (max && checkLength(value) > max) {
77-
throw new Error(message)
81+
throw errorInfo(message, code || errorCode)
7882
}
7983
if (pattern) {
8084
let reg = getRegexp(pattern)
8185
if (!reg.test(value)) {
82-
throw new Error(message)
86+
throw errorInfo(message, code || errorCode)
8387
}
8488
}
8589
}
@@ -90,13 +94,26 @@ function validateRule (rules: FilterData.rule[], customize?: Record<string, Func
9094
}
9195
if (validator && isFunction(validator)) {
9296
if (!validator(value) || String(value) === 'Invalid Date') {
93-
throw new Error(message)
97+
throw errorInfo(message, code || errorCode)
9498
}
9599
}
96100
}
97101
}
98102
}
99103

104+
/**
105+
* 生成错误信息
106+
* @param message
107+
* @param code
108+
*/
109+
export function errorInfo (message: string, code?: number): FilterData.error {
110+
let error: FilterData.error = new Error(message)
111+
if (code) {
112+
error.code = code
113+
}
114+
return error
115+
}
116+
100117
/**
101118
* 检测字符串长度,中文算2个字符
102119
* @param str string

types/index.d.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ export declare namespace FilterData {
6969
message : string
7070
min ?: number
7171
max ?: number
72+
code ?: number
73+
}
74+
75+
interface error extends Error {
76+
code ?: number
7277
}
7378
}
7479

@@ -89,6 +94,11 @@ export function checkLength (str: string): number
8994

9095
export function filterData (options: FilterData.options[]): (data: Record<string, any>) => Record<string, any>
9196
export function filterData (options: FilterData.options[], customize: Record<string, Function>): (data: Record<string, any>) => Record<string, any>
97+
export function filterData (options: FilterData.options[]): (data: Record<string, any>, errorCode: number) => Record<string, any>
98+
export function filterData (options: FilterData.options[], customize: Record<string, Function>): (data: Record<string, any>, errorCode: number) => Record<string, any>
9299

93100
export function validSign (options: string): (data: Record<string, any>) => boolean
94-
export function validSign (options: string, sign: string): (data: Record<string, any>) => boolean
101+
export function validSign (options: string, sign: string): (data: Record<string, any>) => boolean
102+
103+
export function errorInfo (message: string): FilterData.error
104+
export function errorInfo (message: string, code: number): FilterData.error

0 commit comments

Comments
 (0)