Comparing version 0.0.27 to 0.0.28
declare abstract class Type<T> { | ||
constructor(); | ||
abstract parse(value: unknown): T; | ||
optional(): UnionType<[Type<T>, UndefinedType]>; | ||
nullable(): UnionType<[Type<T>, NullType]>; | ||
optional(): OptionalType<Type<T>>; | ||
nullable(): NullableType<Type<T>>; | ||
and<K extends AnyType>(schema: K): IntersectionType<Type<T>, K>; | ||
@@ -66,2 +66,12 @@ or<K extends AnyType>(schema: K): UnionType<[Type<T>, K]>; | ||
} | ||
declare class OptionalType<T extends AnyType> extends Type<Infer<T> | undefined> { | ||
private readonly schema; | ||
constructor(schema: T); | ||
parse(value: unknown): Infer<T> | undefined; | ||
} | ||
declare class NullableType<T extends AnyType> extends Type<Infer<T> | null> { | ||
private readonly schema; | ||
constructor(schema: T); | ||
parse(value: unknown): Infer<T> | null; | ||
} | ||
declare class DateType extends Type<Date> { | ||
@@ -92,3 +102,3 @@ constructor(); | ||
declare type DeepPartialShape<T extends ObjectShape> = { | ||
[key in keyof T]: T[key] extends ObjectType<infer K> ? UnionType<[ObjectType<DeepPartialShape<K>>, UndefinedType]> : UnionType<[T[key], UndefinedType]>; | ||
[key in keyof T]: T[key] extends ObjectType<infer K> ? OptionalType<ObjectType<DeepPartialShape<K>>> : OptionalType<T[key]>; | ||
}; | ||
@@ -95,0 +105,0 @@ declare class ObjectType<T extends ObjectShape> extends Type<Eval<InferObjectShape<T>>> { |
@@ -6,6 +6,6 @@ "use strict"; | ||
optional() { | ||
return new UnionType([this, new UndefinedType()]); | ||
return new OptionalType(this); | ||
} | ||
nullable() { | ||
return new UnionType([this, new NullType()]); | ||
return new NullableType(this); | ||
} | ||
@@ -188,2 +188,32 @@ and(schema) { | ||
} | ||
class OptionalType extends Type { | ||
constructor(schema) { | ||
super(); | ||
this.schema = schema; | ||
this[coercionTypeSybol] = this.schema[coercionTypeSybol]; | ||
this[shapekeysSymbol] = this.schema[shapekeysSymbol]; | ||
this[allowUnknownSymbol] = this.schema[allowUnknownSymbol]; | ||
} | ||
parse(value) { | ||
if (value === undefined) { | ||
return undefined; | ||
} | ||
return this.schema.parse(value); | ||
} | ||
} | ||
class NullableType extends Type { | ||
constructor(schema) { | ||
super(); | ||
this.schema = schema; | ||
this[coercionTypeSybol] = this.schema[coercionTypeSybol]; | ||
this[shapekeysSymbol] = this.schema[shapekeysSymbol]; | ||
this[allowUnknownSymbol] = this.schema[allowUnknownSymbol]; | ||
} | ||
parse(value) { | ||
if (value === null) { | ||
return null; | ||
} | ||
return this.schema.parse(value); | ||
} | ||
} | ||
// Non Primitive types | ||
@@ -190,0 +220,0 @@ class DateType extends Type { |
{ | ||
"name": "myzod", | ||
"version": "0.0.27", | ||
"version": "0.0.28", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "main": "./libs/index.js", |
61355
1135