schemastery
Advanced tools
Comparing version 3.6.1 to 3.7.0
import { Dict } from 'cosmokit'; | ||
declare const kSchema: unique symbol; | ||
declare global { | ||
namespace Schemastery { | ||
type From<X> = X extends string | number | boolean ? Schema<X> : X extends Schema ? X : X extends typeof String ? Schema<string> : X extends typeof Number ? Schema<number> : X extends typeof Boolean ? Schema<boolean> : X extends typeof Function ? Schema<Function, (...args: any[]) => any> : X extends Constructor<infer S> ? Schema<S> : never; | ||
type _TypeS<X> = X extends Schema<infer S, unknown> ? S : never; | ||
type Inverse<X> = X extends Schema<any, infer Y> ? (arg: Y) => void : never; | ||
type TypeS<X> = _TypeS<From<X>>; | ||
type TypeT<X> = ReturnType<From<X>>; | ||
type Resolve = (data: any, schema: Schema, strict?: boolean) => [any, any?]; | ||
type IntersectS<X> = From<X> extends Schema<infer S, unknown> ? S : never; | ||
type IntersectT<X> = Inverse<From<X>> extends ((arg: infer T) => void) ? T : never; | ||
type TupleS<X extends readonly any[]> = X extends readonly [infer L, ...infer R] ? [TypeS<L>?, ...TupleS<R>] : any[]; | ||
type TupleT<X extends readonly any[]> = X extends readonly [infer L, ...infer R] ? [TypeT<L>?, ...TupleT<R>] : any[]; | ||
type ObjectS<X extends Dict> = { | ||
[K in keyof X]?: TypeS<X[K]>; | ||
} & Dict; | ||
type ObjectT<X extends Dict> = { | ||
[K in keyof X]: TypeT<X[K]>; | ||
} & Dict; | ||
type Constructor<T = any> = new (...args: any[]) => T; | ||
interface Static { | ||
<T = any>(options: Partial<Schema.Base<T>>): Schema<T>; | ||
new <T = any>(options: Partial<Schema.Base<T>>): Schema<T>; | ||
prototype: Schema; | ||
resolve: Resolve; | ||
from<X = any>(source?: X): From<X>; | ||
extend(type: string, resolve: Resolve): void; | ||
any(): Schema<any>; | ||
never(): Schema<never>; | ||
const<T>(value: T): Schema<T>; | ||
string(): Schema<string>; | ||
number(): Schema<number>; | ||
natural(): Schema<number>; | ||
percent(): Schema<number>; | ||
boolean(): Schema<boolean>; | ||
date(): Schema<string | Date, Date>; | ||
bitset<K extends string>(bits: Partial<Record<K, number>>): Schema<number | readonly K[], number>; | ||
function(): Schema<Function, (...args: any[]) => any>; | ||
is<T>(constructor: Constructor<T>): Schema<T>; | ||
array<X>(inner: X): Schema<TypeS<X>[], TypeT<X>[]>; | ||
dict<X, Y extends Schema<any, string> = Schema<string>>(inner: X, sKey?: Y): Schema<Dict<TypeS<X>, TypeS<Y>>, Dict<TypeT<X>, TypeT<Y>>>; | ||
tuple<X extends readonly any[]>(list: X): Schema<TupleS<X>, TupleT<X>>; | ||
object<X extends Dict>(dict: X): Schema<ObjectS<X>, ObjectT<X>>; | ||
union<X>(list: readonly X[]): Schema<TypeS<X>, TypeT<X>>; | ||
intersect<X>(list: readonly X[]): Schema<IntersectS<X>, IntersectT<X>>; | ||
transform<X, T>(inner: X, callback: (value: TypeS<X>) => T, preserve?: boolean): Schema<TypeS<X>, T>; | ||
} | ||
} | ||
} | ||
declare namespace Schema { | ||
export type From<X> = X extends string | number | boolean ? Schema<X> : X extends Schema ? X : X extends typeof String ? Schema<string> : X extends typeof Number ? Schema<number> : X extends typeof Boolean ? Schema<boolean> : X extends typeof Function ? Schema<Function, (...args: any[]) => any> : X extends Constructor<infer S> ? Schema<S> : never; | ||
type _TypeS<X> = X extends Schema<infer S, unknown> ? S : never; | ||
type Inverse<X> = X extends Schema<any, infer Y> ? (arg: Y) => void : never; | ||
export type TypeS<X> = _TypeS<From<X>>; | ||
export type TypeT<X> = ReturnType<From<X>>; | ||
export type Resolve = (data: any, schema: Schema, strict?: boolean) => [any, any?]; | ||
export type IntersectS<X> = From<X> extends Schema<infer S, unknown> ? S : never; | ||
export type IntersectT<X> = Inverse<From<X>> extends ((arg: infer T) => void) ? T : never; | ||
export interface Base<T = any> { | ||
interface Base<T = any> { | ||
uid: number; | ||
@@ -24,5 +64,6 @@ meta: Meta<T>; | ||
refs?: Dict<Schema>; | ||
preserve?: boolean; | ||
toString(inline?: boolean): string; | ||
} | ||
export interface Meta<T = any> { | ||
interface Meta<T = any> { | ||
default?: T extends {} ? Partial<T> : T; | ||
@@ -43,41 +84,4 @@ required?: boolean; | ||
} | ||
type TupleS<X extends readonly any[]> = X extends readonly [infer L, ...infer R] ? [TypeS<L>?, ...TupleS<R>] : any[]; | ||
type TupleT<X extends readonly any[]> = X extends readonly [infer L, ...infer R] ? [TypeT<L>?, ...TupleT<R>] : any[]; | ||
type ObjectS<X extends Dict> = { | ||
[K in keyof X]?: TypeS<X[K]>; | ||
} & Dict; | ||
type ObjectT<X extends Dict> = { | ||
[K in keyof X]: TypeT<X[K]>; | ||
} & Dict; | ||
type Constructor<T = any> = new (...args: any[]) => T; | ||
export interface Static { | ||
<T = any>(options: Partial<Base<T>>): Schema<T>; | ||
new <T = any>(options: Partial<Base<T>>): Schema<T>; | ||
prototype: Schema; | ||
resolve: Resolve; | ||
from<X = any>(source?: X): From<X>; | ||
extend(type: string, resolve: Resolve): void; | ||
any(): Schema<any>; | ||
never(): Schema<never>; | ||
const<T>(value: T): Schema<T>; | ||
string(): Schema<string>; | ||
number(): Schema<number>; | ||
natural(): Schema<number>; | ||
percent(): Schema<number>; | ||
boolean(): Schema<boolean>; | ||
date(): Schema<string | Date, Date>; | ||
bitset<K extends string>(bits: Partial<Record<K, number>>): Schema<number | readonly K[], number>; | ||
function(): Schema<Function, (...args: any[]) => any>; | ||
is<T>(constructor: Constructor<T>): Schema<T>; | ||
array<X>(inner: X): Schema<TypeS<X>[], TypeT<X>[]>; | ||
dict<X, Y extends Schema<any, string> = Schema<string>>(inner: X, sKey?: Y): Schema<Dict<TypeS<X>, TypeS<Y>>, Dict<TypeT<X>, TypeT<Y>>>; | ||
tuple<X extends readonly any[]>(list: X): Schema<TupleS<X>, TupleT<X>>; | ||
object<X extends Dict>(dict: X): Schema<ObjectS<X>, ObjectT<X>>; | ||
union<X>(list: readonly X[]): Schema<TypeS<X>, TypeT<X>>; | ||
intersect<X>(list: readonly X[]): Schema<IntersectS<X>, IntersectT<X>>; | ||
transform<X, T>(inner: X, callback: (value: TypeS<X>) => T): Schema<TypeS<X>, T>; | ||
} | ||
export {}; | ||
} | ||
declare const Schema: Schema.Static; | ||
declare const Schema: Schemastery.Static; | ||
interface Schema<S = any, T = S> extends Schema.Base<T> { | ||
@@ -84,0 +88,0 @@ (data?: S | null): T; |
{ | ||
"name": "schemastery", | ||
"description": "Type driven schema validator", | ||
"version": "3.6.1", | ||
"version": "3.7.0", | ||
"main": "lib/index.cjs", | ||
@@ -23,4 +23,4 @@ "module": "lib/index.mjs", | ||
"dependencies": { | ||
"cosmokit": "^1.3.4" | ||
"cosmokit": "^1.4.0" | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
106156
991
Updatedcosmokit@^1.4.0