From 0ce824bfb391d36e5c18008938af2da2b101adfa Mon Sep 17 00:00:00 2001 From: sinclairzx81 Date: Mon, 19 Dec 2022 22:50:32 +0900 Subject: [PATCH] Additional Defaults (#294) --- example/index.ts | 2 +- package.json | 2 +- src/value/create.ts | 24 ++++++++++++++++++++---- test/runtime/value/create/literal.ts | 6 +++++- test/runtime/value/create/null.ts | 4 ++++ test/runtime/value/create/undefined.ts | 4 ++++ test/runtime/value/create/void.ts | 5 +++++ 7 files changed, 40 insertions(+), 7 deletions(-) diff --git a/example/index.ts b/example/index.ts index dfde052..ec83c14 100644 --- a/example/index.ts +++ b/example/index.ts @@ -10,7 +10,7 @@ import { Type, Kind, Static, TSchema } from '@sinclair/typebox' const T = Type.Object({ x: Type.Number(), y: Type.Number(), - z: Type.Number() + z: Type.Number(), }) type T = Static diff --git a/package.json b/package.json index bc74862..184b312 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sinclair/typebox", - "version": "0.25.13", + "version": "0.25.14", "description": "JSONSchema Type Builder with Static Type Resolution for TypeScript", "keywords": [ "typescript", diff --git a/src/value/create.ts b/src/value/create.ts index ab4d33a..19469ce 100644 --- a/src/value/create.ts +++ b/src/value/create.ts @@ -121,7 +121,11 @@ export namespace ValueCreate { } function Literal(schema: Types.TLiteral, references: Types.TSchema[]): any { - return schema.const + if (schema.default !== undefined) { + return schema.default + } else { + return schema.const + } } function Never(schema: Types.TNever, references: Types.TSchema[]): any { @@ -129,7 +133,11 @@ export namespace ValueCreate { } function Null(schema: Types.TNull, references: Types.TSchema[]): any { - return null + if (schema.default !== undefined) { + return schema.default + } else { + return null + } } function Number(schema: Types.TNumber, references: Types.TSchema[]): any { @@ -244,7 +252,11 @@ export namespace ValueCreate { } function Undefined(schema: Types.TUndefined, references: Types.TSchema[]): any { - return undefined + if (schema.default !== undefined) { + return schema.default + } else { + return undefined + } } function Union(schema: Types.TUnion, references: Types.TSchema[]): any { @@ -275,7 +287,11 @@ export namespace ValueCreate { } function Void(schema: Types.TVoid, references: Types.TSchema[]): any { - return null + if (schema.default !== undefined) { + return schema.default + } else { + return null + } } function UserDefined(schema: Types.TSchema, references: Types.TSchema[]): any { diff --git a/test/runtime/value/create/literal.ts b/test/runtime/value/create/literal.ts index 591799b..d2913ab 100644 --- a/test/runtime/value/create/literal.ts +++ b/test/runtime/value/create/literal.ts @@ -2,7 +2,7 @@ import { Value } from '@sinclair/typebox/value' import { Type } from '@sinclair/typebox' import { Assert } from '../../assert/index' -describe('value/create/KeyOf', () => { +describe('value/create/Literal', () => { it('Should create literal string', () => { const T = Type.Literal('hello') Assert.deepEqual(Value.Create(T), 'hello') @@ -15,4 +15,8 @@ describe('value/create/KeyOf', () => { const T = Type.Literal(true) Assert.deepEqual(Value.Create(T), true) }) + it('Should create literal from default value', () => { + const T = Type.Literal(true, { default: 'hello' }) + Assert.deepEqual(Value.Create(T), 'hello') + }) }) diff --git a/test/runtime/value/create/null.ts b/test/runtime/value/create/null.ts index 4b11e6d..45c42fc 100644 --- a/test/runtime/value/create/null.ts +++ b/test/runtime/value/create/null.ts @@ -7,4 +7,8 @@ describe('value/create/Null', () => { const T = Type.Null() Assert.deepEqual(Value.Create(T), null) }) + it('Should create null from default value', () => { + const T = Type.Null({ default: 'hello' }) + Assert.deepEqual(Value.Create(T), 'hello') + }) }) diff --git a/test/runtime/value/create/undefined.ts b/test/runtime/value/create/undefined.ts index 45e369a..b684204 100644 --- a/test/runtime/value/create/undefined.ts +++ b/test/runtime/value/create/undefined.ts @@ -7,4 +7,8 @@ describe('value/create/Undefined', () => { const T = Type.Undefined() Assert.deepEqual(Value.Create(T), undefined) }) + it('Should create value from default value', () => { + const T = Type.Undefined({ default: 'hello' }) + Assert.deepEqual(Value.Create(T), 'hello') + }) }) diff --git a/test/runtime/value/create/void.ts b/test/runtime/value/create/void.ts index eff8379..b748866 100644 --- a/test/runtime/value/create/void.ts +++ b/test/runtime/value/create/void.ts @@ -7,4 +7,9 @@ describe('value/create/Void', () => { const T = Type.Void() Assert.deepEqual(Value.Create(T), null) }) + + it('Should create value from default value', () => { + const T = Type.Void({ default: 'hello' }) + Assert.deepEqual(Value.Create(T), 'hello') + }) })