From 4842c783fd3c98993016b6caebfbba036e2bac6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E6=9E=AB?= <645381995@qq.com> Date: Mon, 6 May 2024 11:35:31 +0800 Subject: [PATCH 1/5] fix: transform undefined --- src/index.ts | 15 +++++++++++++-- tests/number.spec.ts | 9 +++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/index.ts b/src/index.ts index 46d502e..3e8f11b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -16,7 +16,15 @@ import type { Values, } from './interface'; import { messages as defaultMessages, newMessages } from './messages'; -import { asyncMap, complementError, convertFieldsError, deepMerge, format, warning } from './util'; +import { + asyncMap, + complementError, + convertFieldsError, + deepMerge, + format, + isEmptyValue, + warning, +} from './util'; import validators from './validator/index'; export * from './interface'; @@ -146,7 +154,10 @@ class Schema { source = { ...source }; } value = source[z] = rule.transform(value); - rule.type ??= (Array.isArray(value) ? 'array' : typeof value) as RuleType; + const type = rule.type || ((Array.isArray(value) ? 'array' : typeof value) as RuleType); + if (!isEmptyValue(value, type)) { + rule.type = type; + } } if (typeof rule === 'function') { rule = { diff --git a/tests/number.spec.ts b/tests/number.spec.ts index 8adbd02..db1c3cb 100644 --- a/tests/number.spec.ts +++ b/tests/number.spec.ts @@ -161,4 +161,13 @@ describe('number', () => { done(); }); }); + it('transform undefined', done => { + const value = { v: [0, 1] }; + new Schema({ + v: { required: true, transform: v => undefined }, + }).validate(value, errors => { + expect(errors).toBeTruthy(); + done(); + }); + }); }); From ebcadc972bcdd8ea8bdc53c618bfd13bb919158a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E6=9E=AB?= <645381995@qq.com> Date: Mon, 13 May 2024 18:54:17 +0800 Subject: [PATCH 2/5] fix: fix undefined type --- src/index.ts | 5 ++--- tests/number.spec.ts | 11 +++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/index.ts b/src/index.ts index 3e8f11b..e7d14e7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -154,9 +154,8 @@ class Schema { source = { ...source }; } value = source[z] = rule.transform(value); - const type = rule.type || ((Array.isArray(value) ? 'array' : typeof value) as RuleType); - if (!isEmptyValue(value, type)) { - rule.type = type; + if (value !== undefined && value !== null) { + rule.type = rule.type || ((Array.isArray(value) ? 'array' : typeof value) as RuleType); } } if (typeof rule === 'function') { diff --git a/tests/number.spec.ts b/tests/number.spec.ts index db1c3cb..219a09d 100644 --- a/tests/number.spec.ts +++ b/tests/number.spec.ts @@ -167,6 +167,17 @@ describe('number', () => { v: { required: true, transform: v => undefined }, }).validate(value, errors => { expect(errors).toBeTruthy(); + expect(errors[0].message).toBe('v is required'); + done(); + }); + }); + it('[] is required', done => { + const value = { v: [] }; + new Schema({ + v: { required: true, transform: () => [] }, + }).validate(value, errors => { + expect(errors).toBeTruthy(); + expect(errors[0].message).toBe('v is required'); done(); }); }); From 225738fe24c37704c1143eba2696c459046566e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E6=9E=AB?= <645381995@qq.com> Date: Mon, 13 May 2024 18:54:48 +0800 Subject: [PATCH 3/5] chroe: code --- src/index.ts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/index.ts b/src/index.ts index e7d14e7..532bdda 100644 --- a/src/index.ts +++ b/src/index.ts @@ -16,15 +16,7 @@ import type { Values, } from './interface'; import { messages as defaultMessages, newMessages } from './messages'; -import { - asyncMap, - complementError, - convertFieldsError, - deepMerge, - format, - isEmptyValue, - warning, -} from './util'; +import { asyncMap, complementError, convertFieldsError, deepMerge, format, warning } from './util'; import validators from './validator/index'; export * from './interface'; From d1e607304f3f6b4e461867e94d63485d5f30b316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E6=9E=AB?= <645381995@qq.com> Date: Mon, 13 May 2024 19:10:36 +0800 Subject: [PATCH 4/5] chroe: message --- tests/number.spec.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/number.spec.ts b/tests/number.spec.ts index 219a09d..5caa7e3 100644 --- a/tests/number.spec.ts +++ b/tests/number.spec.ts @@ -172,6 +172,16 @@ describe('number', () => { }); }); it('[] is required', done => { + const value = { v: [] }; + new Schema({ + v: { required: true }, + }).validate(value, errors => { + expect(errors).toBeTruthy(); + expect(errors[0].message).toBe('v is required'); + done(); + }); + }); + it('empty array message is "v is required"', done => { const value = { v: [] }; new Schema({ v: { required: true, transform: () => [] }, From 4411bcae422c71d424dc7ca363218336f9d1f300 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E6=9E=AB?= <645381995@qq.com> Date: Mon, 13 May 2024 19:11:13 +0800 Subject: [PATCH 5/5] chroe: message --- tests/number.spec.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/tests/number.spec.ts b/tests/number.spec.ts index 5caa7e3..fbb54e4 100644 --- a/tests/number.spec.ts +++ b/tests/number.spec.ts @@ -171,16 +171,6 @@ describe('number', () => { done(); }); }); - it('[] is required', done => { - const value = { v: [] }; - new Schema({ - v: { required: true }, - }).validate(value, errors => { - expect(errors).toBeTruthy(); - expect(errors[0].message).toBe('v is required'); - done(); - }); - }); it('empty array message is "v is required"', done => { const value = { v: [] }; new Schema({