Comparing version 1.5.3 to 1.6.0
@@ -15,6 +15,17 @@ declare const typeErrSym: unique symbol; | ||
try(value: unknown): T | ValidationError; | ||
map<K>(fn: (value: T) => K): Type<K>; | ||
map<K>(fn: (value: T) => K): MappedType<Type<T>, K>; | ||
onTypeError(msg: string | (() => string)): this; | ||
protected typeError(msg: string): ValidationError; | ||
} | ||
declare class MappedType<T extends AnyType, K> extends Type<K> implements WithPredicate<K>, Defaultable<K> { | ||
protected schema: T; | ||
protected mapFn: (value: Infer<T>) => K; | ||
private predicates; | ||
private defaultValue?; | ||
constructor(schema: T, mapFn: (value: Infer<T>) => K); | ||
parse(value: unknown): K; | ||
and<O extends AnyType>(other: O): never; | ||
withPredicate(fn: Predicate<K>['func'], errMsg?: ErrMsg<K>): MappedType<T, K>; | ||
default(value: K | (() => K)): MappedType<T, K>; | ||
} | ||
export declare class ValidationError extends Error { | ||
@@ -31,3 +42,6 @@ name: string; | ||
declare const shapekeysSymbol: unique symbol; | ||
export declare type IntersectionResult<T extends AnyType, K extends AnyType> = T extends ObjectType<any> ? K extends ObjectType<any> ? T extends ObjectType<infer Shape1> ? K extends ObjectType<infer Shape2> ? ObjectType<Eval<MergeShapes<Shape1, Shape2>>> : never : never : IntersectionType<T, K> : T extends ArrayType<any> ? K extends ArrayType<any> ? T extends ArrayType<infer S1> ? K extends ArrayType<infer S2> ? ArrayType<IntersectionResult<S1, S2>> : never : never : IntersectionType<T, K> : T extends TupleType<any> ? K extends TupleType<any> ? T extends TupleType<infer S1> ? K extends TupleType<infer S2> ? TupleType<Join<S1, S2>> : never : never : IntersectionType<T, K> : IntersectionType<T, K>; | ||
declare type ObjectIntersection<O1 extends ObjectType<any>, O2 extends ObjectType<any>> = O1 extends ObjectType<infer Shape1> ? O2 extends ObjectType<infer Shape2> ? ObjectType<Flat<MergeShapes<Shape1, Shape2>>> : never : never; | ||
declare type ArrayIntersection<A1 extends ArrayType<any>, A2 extends ArrayType<any>> = A1 extends ArrayType<infer S1> ? A2 extends ArrayType<infer S2> ? ArrayType<IntersectionResult<S1, S2>> : never : never; | ||
declare type TupleIntersection<T1 extends TupleType<any>, T2 extends TupleType<any>> = T1 extends TupleType<infer S1> ? T2 extends TupleType<infer S2> ? TupleType<Join<S1, S2>> : never : never; | ||
export declare type IntersectionResult<T extends AnyType, K extends AnyType> = T extends ObjectType<any> ? K extends ObjectType<any> ? ObjectIntersection<T, K> : IntersectionType<T, K> : T extends ArrayType<any> ? K extends ArrayType<any> ? ArrayIntersection<T, K> : IntersectionType<T, K> : T extends TupleType<any> ? K extends TupleType<any> ? TupleIntersection<T, K> : IntersectionType<T, K> : IntersectionType<T, K>; | ||
declare type ErrMsg<T> = string | ((value: T) => string); | ||
@@ -34,0 +48,0 @@ declare type Predicate<T> = { |
@@ -50,7 +50,3 @@ "use strict"; | ||
map(fn) { | ||
const cpy = clone(this); | ||
const parse = cpy.parse.bind(cpy); | ||
cpy.parse = (value) => fn(parse(value)); | ||
cpy[coercionTypeSymbol] = true; | ||
return cpy; | ||
return new MappedType(this, fn); | ||
} | ||
@@ -77,2 +73,31 @@ onTypeError(msg) { | ||
exports.Type = Type; | ||
class MappedType extends Type { | ||
constructor(schema, mapFn) { | ||
super(); | ||
this.schema = schema; | ||
this.mapFn = mapFn; | ||
this.predicates = null; | ||
this[coercionTypeSymbol] = true; | ||
} | ||
parse(value) { | ||
const ret = value === undefined && this.defaultValue | ||
? typeof this.defaultValue === 'function' | ||
? this.defaultValue() | ||
: this.defaultValue | ||
: this.mapFn(this.schema.parse(value)); | ||
if (this.predicates) { | ||
applyPredicates(this.predicates, ret); | ||
} | ||
return ret; | ||
} | ||
and(other) { | ||
throw new Error('mapped types cannot be intersected'); | ||
} | ||
withPredicate(fn, errMsg) { | ||
return withPredicate(this, { func: fn, errMsg }); | ||
} | ||
default(value) { | ||
return withDefault(this, value); | ||
} | ||
} | ||
class ValidationError extends Error { | ||
@@ -79,0 +104,0 @@ // @ts-ignore |
{ | ||
"name": "myzod", | ||
"version": "1.5.3", | ||
"version": "1.6.0", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "main": "./libs/index.js", |
105630
1845