From d632c5b6e784efe80010bb3e32dab00c2ebd3140 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E6=9E=AB?= <645381995@qq.com> Date: Tue, 16 Apr 2024 10:55:14 +0800 Subject: [PATCH 1/5] fix: tarnsform type value --- .gitignore | 3 ++- src/index.ts | 7 +++++++ tests/deep.spec.ts | 2 +- tests/number.spec.ts | 28 ++++++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index a7ef0a9..17c792f 100644 --- a/.gitignore +++ b/.gitignore @@ -38,4 +38,5 @@ coverage .dumi/tmp .dumi/tmp-production dist -.docs-dist \ No newline at end of file +.docs-dist +.vscode \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index c8db338..1354993 100644 --- a/src/index.ts +++ b/src/index.ts @@ -145,6 +145,13 @@ class Schema { source = { ...source }; } value = source[z] = rule.transform(value); + if (!rule.type) { + if (typeof value === 'number') { + rule.type = 'number'; + } else if (Array.isArray(value)) { + rule.type = 'array'; + } + } } if (typeof rule === 'function') { rule = { diff --git a/tests/deep.spec.ts b/tests/deep.spec.ts index 464a8db..23a7d00 100644 --- a/tests/deep.spec.ts +++ b/tests/deep.spec.ts @@ -222,7 +222,7 @@ describe('deep', () => { testArray: [], }; const validator = new Schema(descriptor); - validator.validate(record, (errors, fields) => { + validator.validate(record, () => { done(); }); }); diff --git a/tests/number.spec.ts b/tests/number.spec.ts index b1b8297..55aee6e 100644 --- a/tests/number.spec.ts +++ b/tests/number.spec.ts @@ -109,4 +109,32 @@ describe('number', () => { done(); }); }); + it('transform number', done => { + const value = { v: 0 }; + new Schema({ + v: { required: true, transform: v => v }, + }) + .validate(value, errors => { + expect(value.v).toBe(0); + expect(errors).toBeFalsy(); + }) + .then(source => { + expect(source).toEqual({ v: 0 }); + done(); + }); + }); + it('transform array', done => { + const value = { v: [0, 1] }; + new Schema({ + v: { required: true, transform: v => v }, + }) + .validate(value, errors => { + expect(value.v).toEqual([0, 1]); + expect(errors).toBeFalsy(); + }) + .then(source => { + expect(source).toEqual({ v: [0, 1] }); + done(); + }); + }); }); From ccae2a985ce68a7d11c62d445d4bc9df0cbbac34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E6=9E=AB?= <645381995@qq.com> Date: Tue, 16 Apr 2024 11:17:29 +0800 Subject: [PATCH 2/5] fix: all typeof --- src/index.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/index.ts b/src/index.ts index 1354993..262b30e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,6 +3,7 @@ import type { InternalValidateMessages, Rule, RuleItem, + RuleType, RuleValuePackage, Rules, SyncErrorType, @@ -146,11 +147,8 @@ class Schema { } value = source[z] = rule.transform(value); if (!rule.type) { - if (typeof value === 'number') { - rule.type = 'number'; - } else if (Array.isArray(value)) { - rule.type = 'array'; - } + const type = Array.isArray(value) ? 'array' : typeof value; + rule.type = type as RuleType; } } if (typeof rule === 'function') { From 19ef0eb0822e5c8aa6af42b8bbe0033e4d435867 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E6=9E=AB?= <645381995@qq.com> Date: Tue, 16 Apr 2024 11:24:18 +0800 Subject: [PATCH 3/5] feat: add string test --- tests/number.spec.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/number.spec.ts b/tests/number.spec.ts index 55aee6e..b44600b 100644 --- a/tests/number.spec.ts +++ b/tests/number.spec.ts @@ -109,6 +109,20 @@ describe('number', () => { done(); }); }); + it('transform string', done => { + const value = { v: 'a' }; + new Schema({ + v: { required: true, transform: v => v }, + }) + .validate(value, errors => { + expect(value.v).toBe('a'); + expect(errors).toBeFalsy(); + }) + .then(source => { + expect(source).toEqual({ v: 'a' }); + done(); + }); + }); it('transform number', done => { const value = { v: 0 }; new Schema({ From fc874bfbeeef4c8dba0429346e61f49e93ee6878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E6=9E=AB?= <645381995@qq.com> Date: Tue, 16 Apr 2024 11:56:12 +0800 Subject: [PATCH 4/5] feat: add type test --- src/index.ts | 5 +---- tests/number.spec.ts | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index 262b30e..46d502e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -146,10 +146,7 @@ class Schema { source = { ...source }; } value = source[z] = rule.transform(value); - if (!rule.type) { - const type = Array.isArray(value) ? 'array' : typeof value; - rule.type = type as RuleType; - } + rule.type ??= (Array.isArray(value) ? 'array' : typeof value) as RuleType; } if (typeof rule === 'function') { rule = { diff --git a/tests/number.spec.ts b/tests/number.spec.ts index b44600b..f6450f2 100644 --- a/tests/number.spec.ts +++ b/tests/number.spec.ts @@ -109,6 +109,20 @@ describe('number', () => { done(); }); }); + it('transform type', done => { + const value = { v: 'a' }; + new Schema({ + v: { required: true, type: 'number', transform: () => 0 }, + }) + .validate(value, errors => { + expect(value.v).toBe('a'); + expect(errors).toBeFalsy(); + }) + .then(source => { + expect(source).toEqual({ v: 0 }); + done(); + }); + }); it('transform string', done => { const value = { v: 'a' }; new Schema({ From 0d0918e4b896262266a5a9fd12ce844e968618a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E6=9E=AB?= <645381995@qq.com> Date: Tue, 16 Apr 2024 12:14:34 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20=E5=88=A0=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/number.spec.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/number.spec.ts b/tests/number.spec.ts index f6450f2..8adbd02 100644 --- a/tests/number.spec.ts +++ b/tests/number.spec.ts @@ -115,7 +115,6 @@ describe('number', () => { v: { required: true, type: 'number', transform: () => 0 }, }) .validate(value, errors => { - expect(value.v).toBe('a'); expect(errors).toBeFalsy(); }) .then(source => { @@ -129,7 +128,6 @@ describe('number', () => { v: { required: true, transform: v => v }, }) .validate(value, errors => { - expect(value.v).toBe('a'); expect(errors).toBeFalsy(); }) .then(source => { @@ -143,7 +141,6 @@ describe('number', () => { v: { required: true, transform: v => v }, }) .validate(value, errors => { - expect(value.v).toBe(0); expect(errors).toBeFalsy(); }) .then(source => { @@ -157,7 +154,6 @@ describe('number', () => { v: { required: true, transform: v => v }, }) .validate(value, errors => { - expect(value.v).toEqual([0, 1]); expect(errors).toBeFalsy(); }) .then(source => {