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..46d502e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,6 +3,7 @@ import type { InternalValidateMessages, Rule, RuleItem, + RuleType, RuleValuePackage, Rules, SyncErrorType, @@ -145,6 +146,7 @@ class Schema { source = { ...source }; } value = source[z] = rule.transform(value); + rule.type ??= (Array.isArray(value) ? 'array' : typeof value) as RuleType; } 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..8adbd02 100644 --- a/tests/number.spec.ts +++ b/tests/number.spec.ts @@ -109,4 +109,56 @@ describe('number', () => { done(); }); }); + it('transform type', done => { + const value = { v: 'a' }; + new Schema({ + v: { required: true, type: 'number', transform: () => 0 }, + }) + .validate(value, errors => { + expect(errors).toBeFalsy(); + }) + .then(source => { + expect(source).toEqual({ v: 0 }); + done(); + }); + }); + it('transform string', done => { + const value = { v: 'a' }; + new Schema({ + v: { required: true, transform: v => v }, + }) + .validate(value, errors => { + expect(errors).toBeFalsy(); + }) + .then(source => { + expect(source).toEqual({ v: 'a' }); + done(); + }); + }); + it('transform number', done => { + const value = { v: 0 }; + new Schema({ + v: { required: true, transform: v => v }, + }) + .validate(value, errors => { + 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(errors).toBeFalsy(); + }) + .then(source => { + expect(source).toEqual({ v: [0, 1] }); + done(); + }); + }); });