UNPKG

@qavajs/validation

Version:

Lib that transform plain english definition to validation functions

115 lines (114 loc) 18.3 kB
import { type MatcherResult, type MatcherContext } from './expect'; export type BaseMatchers = { toSimpleEqual(this: MatcherContext<any>, expected: any): MatcherResult; toEqual(this: MatcherContext<any>, expected: any): MatcherResult; toCaseInsensitiveEqual(this: MatcherContext<any>, expected: string): MatcherResult; toBe(this: MatcherContext<any>, expected: any): MatcherResult; toBeGreaterThan(this: MatcherContext<any>, expected: number): MatcherResult; toBeGreaterThanOrEqual(this: MatcherContext<any>, expected: number): MatcherResult; toBeLessThan(this: MatcherContext<any>, expected: number): MatcherResult; toBeLessThanOrEqual(this: MatcherContext<any>, expected: number): MatcherResult; toBeNaN(this: MatcherContext<any>): MatcherResult; toBeNull(this: MatcherContext<any>): MatcherResult; toBeUndefined(this: MatcherContext<any>): MatcherResult; toBeTruthy(this: MatcherContext<any>): MatcherResult; toContain(this: MatcherContext<any>, expected: any): MatcherResult; toDeepEqual(this: MatcherContext<any>, expected: any): MatcherResult; toStrictEqual(this: MatcherContext<any>, expected: any): MatcherResult; toHaveLength(this: MatcherContext<any>, expected: number): MatcherResult; toHaveProperty(this: MatcherContext<any>, key: string, value?: any): MatcherResult; toMatch(this: MatcherContext<any>, expected: string | RegExp): MatcherResult; toThrow(this: MatcherContext<() => any>, expected?: string | RegExp): MatcherResult; toSatisfy(this: MatcherContext<any>, expected: (received: any) => boolean): MatcherResult; toResolveWith(this: MatcherContext<Promise<any>>, expected: any): Promise<MatcherResult>; toRejectWith(this: MatcherContext<Promise<any>>, expected: string): Promise<MatcherResult>; toPass(this: MatcherContext<() => any>): Promise<MatcherResult>; toMatchSchema(this: MatcherContext<any>, schema: object): MatcherResult; toHaveMembers(this: MatcherContext<any[]>, expected: any[]): MatcherResult; toIncludeMembers(this: MatcherContext<any[]>, expected: any[]): MatcherResult; toHaveType(this: MatcherContext<any>, expected: string): MatcherResult; }; export declare const expect: { <Target>(target: Target): import("./expect").Expect<Target, BaseMatchers> & { toSimpleEqual: (expected: any) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toEqual: (expected: any) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toCaseInsensitiveEqual: (expected: string) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toBe: (expected: any) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toBeGreaterThan: (expected: number) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toBeGreaterThanOrEqual: (expected: number) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toBeLessThan: (expected: number) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toBeLessThanOrEqual: (expected: number) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toBeNaN: () => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toBeNull: () => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toBeUndefined: () => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toBeTruthy: () => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toContain: (expected: any) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toDeepEqual: (expected: any) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toStrictEqual: (expected: any) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toHaveLength: (expected: number) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toHaveProperty: (key: string, value?: any) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toMatch: (expected: string | RegExp) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toThrow: ((this: MatcherContext<() => any>, expected?: string | RegExp) => MatcherResult) extends (this: MatcherContext<Target>, ...rest: infer Args extends any[]) => MatcherResult | Promise<MatcherResult> ? (...expected: Args) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers> : never; toSatisfy: (expected: (received: any) => boolean) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toResolveWith: ((this: MatcherContext<Promise<any>>, expected: any) => Promise<MatcherResult>) extends (this: MatcherContext<Target>, ...rest: infer Args extends any[]) => MatcherResult | Promise<MatcherResult> ? (...expected: Args) => Promise<import("./expect").Expect<Target, BaseMatchers>> : never; toRejectWith: ((this: MatcherContext<Promise<any>>, expected: string) => Promise<MatcherResult>) extends (this: MatcherContext<Target>, ...rest: infer Args extends any[]) => MatcherResult | Promise<MatcherResult> ? (...expected: Args) => Promise<import("./expect").Expect<Target, BaseMatchers>> : never; toPass: ((this: MatcherContext<() => any>) => Promise<MatcherResult>) extends (this: MatcherContext<Target>, ...rest: infer Args extends any[]) => MatcherResult | Promise<MatcherResult> ? (...expected: Args) => Promise<import("./expect").Expect<Target, BaseMatchers>> : never; toMatchSchema: (schema: object) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; toHaveMembers: ((this: MatcherContext<any[]>, expected: any[]) => MatcherResult) extends (this: MatcherContext<Target>, ...rest: infer Args extends any[]) => MatcherResult | Promise<MatcherResult> ? (...expected: Args) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers> : never; toIncludeMembers: ((this: MatcherContext<any[]>, expected: any[]) => MatcherResult) extends (this: MatcherContext<Target>, ...rest: infer Args extends any[]) => MatcherResult | Promise<MatcherResult> ? (...expected: Args) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers> : never; toHaveType: (expected: string) => Target extends (...args: any) => any ? Promise<import("./expect").Expect<Target, BaseMatchers>> : import("./expect").Expect<Target, BaseMatchers>; }; extend<NewMatcher extends { [x: string]: (this: MatcherContext<any>, ...rest: any[]) => MatcherResult | Promise<MatcherResult>; }>(matchers: NewMatcher): { <Target>(target: Target): import("./expect").Expect<Target, BaseMatchers & NewMatcher> & (BaseMatchers & NewMatcher extends infer T ? { [Key in keyof T]: T[Key] extends (this: MatcherContext<Target_1>, ...rest: infer Args extends any[]) => MatcherResult | Promise<MatcherResult> ? (...expected: Args) => ReturnType<T[Key]> extends Promise<any> ? Promise<import("./expect").Expect<Target_1, T>> : Target_1 extends (...args: any) => any ? Promise<import("./expect").Expect<Target_1, T>> : import("./expect").Expect<Target_1, T> : never; } : never); extend<NewMatcher_1 extends { [x: string]: (this: MatcherContext<any>, ...rest: any[]) => MatcherResult | Promise<MatcherResult>; }>(matchers: NewMatcher_1): { <Target>(target: Target): import("./expect").Expect<Target, BaseMatchers & NewMatcher & NewMatcher_1> & (BaseMatchers & NewMatcher & NewMatcher_1 extends infer T ? { [Key in keyof T]: T[Key] extends (this: MatcherContext<Target_1>, ...rest: infer Args extends any[]) => MatcherResult | Promise<MatcherResult> ? (...expected: Args) => ReturnType<T[Key]> extends Promise<any> ? Promise<import("./expect").Expect<Target_1, T>> : Target_1 extends (...args: any) => any ? Promise<import("./expect").Expect<Target_1, T>> : import("./expect").Expect<Target_1, T> : never; } : never); extend<NewMatcher_2 extends { [x: string]: (this: MatcherContext<any>, ...rest: any[]) => MatcherResult | Promise<MatcherResult>; }>(matchers: NewMatcher_2): { <Target>(target: Target): import("./expect").Expect<Target, BaseMatchers & NewMatcher & NewMatcher_1 & NewMatcher_2> & (BaseMatchers & NewMatcher & NewMatcher_1 & NewMatcher_2 extends infer T ? { [Key in keyof T]: T[Key] extends (this: MatcherContext<Target_1>, ...rest: infer Args extends any[]) => MatcherResult | Promise<MatcherResult> ? (...expected: Args) => ReturnType<T[Key]> extends Promise<any> ? Promise<import("./expect").Expect<Target_1, T>> : Target_1 extends (...args: any) => any ? Promise<import("./expect").Expect<Target_1, T>> : import("./expect").Expect<Target_1, T> : never; } : never); extend<NewMatcher_3 extends { [x: string]: (this: MatcherContext<any>, ...rest: any[]) => MatcherResult | Promise<MatcherResult>; }>(matchers: NewMatcher_3): { <Target>(target: Target): import("./expect").Expect<Target, BaseMatchers & NewMatcher & NewMatcher_1 & NewMatcher_2 & NewMatcher_3> & (BaseMatchers & NewMatcher & NewMatcher_1 & NewMatcher_2 & NewMatcher_3 extends infer T ? { [Key in keyof T]: T[Key] extends (this: MatcherContext<Target_1>, ...rest: infer Args extends any[]) => MatcherResult | Promise<MatcherResult> ? (...expected: Args) => ReturnType<T[Key]> extends Promise<any> ? Promise<import("./expect").Expect<Target_1, T>> : Target_1 extends (...args: any) => any ? Promise<import("./expect").Expect<Target_1, T>> : import("./expect").Expect<Target_1, T> : never; } : never); extend<NewMatcher_4 extends { [x: string]: (this: MatcherContext<any>, ...rest: any[]) => MatcherResult | Promise<MatcherResult>; }>(matchers: NewMatcher_4): { <Target>(target: Target): import("./expect").Expect<Target, BaseMatchers & NewMatcher & NewMatcher_1 & NewMatcher_2 & NewMatcher_3 & NewMatcher_4> & (BaseMatchers & NewMatcher & NewMatcher_1 & NewMatcher_2 & NewMatcher_3 & NewMatcher_4 extends infer T ? { [Key in keyof T]: T[Key] extends (this: MatcherContext<Target_1>, ...rest: infer Args extends any[]) => MatcherResult | Promise<MatcherResult> ? (...expected: Args) => ReturnType<T[Key]> extends Promise<any> ? Promise<import("./expect").Expect<Target_1, T>> : Target_1 extends (...args: any) => any ? Promise<import("./expect").Expect<Target_1, T>> : import("./expect").Expect<Target_1, T> : never; } : never); extend<NewMatcher_5 extends { [x: string]: (this: MatcherContext<any>, ...rest: any[]) => MatcherResult | Promise<MatcherResult>; }>(matchers: NewMatcher_5): { <Target>(target: Target): import("./expect").Expect<Target, BaseMatchers & NewMatcher & NewMatcher_1 & NewMatcher_2 & NewMatcher_3 & NewMatcher_4 & NewMatcher_5> & (BaseMatchers & NewMatcher & NewMatcher_1 & NewMatcher_2 & NewMatcher_3 & NewMatcher_4 & NewMatcher_5 extends infer T ? { [Key in keyof T]: T[Key] extends (this: MatcherContext<Target_1>, ...rest: infer Args extends any[]) => MatcherResult | Promise<MatcherResult> ? (...expected: Args) => ReturnType<T[Key]> extends Promise<any> ? Promise<import("./expect").Expect<Target_1, T>> : Target_1 extends (...args: any) => any ? Promise<import("./expect").Expect<Target_1, T>> : import("./expect").Expect<Target_1, T> : never; } : never); extend<NewMatcher_6 extends { [x: string]: (this: MatcherContext<any>, ...rest: any[]) => MatcherResult | Promise<MatcherResult>; }>(matchers: NewMatcher_6): { <Target>(target: Target): import("./expect").Expect<Target, BaseMatchers & NewMatcher & NewMatcher_1 & NewMatcher_2 & NewMatcher_3 & NewMatcher_4 & NewMatcher_5 & NewMatcher_6> & (BaseMatchers & NewMatcher & NewMatcher_1 & NewMatcher_2 & NewMatcher_3 & NewMatcher_4 & NewMatcher_5 & NewMatcher_6 extends infer T ? { [Key in keyof T]: T[Key] extends (this: MatcherContext<Target_1>, ...rest: infer Args extends any[]) => MatcherResult | Promise<MatcherResult> ? (...expected: Args) => ReturnType<T[Key]> extends Promise<any> ? Promise<import("./expect").Expect<Target_1, T>> : Target_1 extends (...args: any) => any ? Promise<import("./expect").Expect<Target_1, T>> : import("./expect").Expect<Target_1, T> : never; } : never); extend<NewMatcher_7 extends { [x: string]: (this: MatcherContext<any>, ...rest: any[]) => MatcherResult | Promise<MatcherResult>; }>(matchers: NewMatcher_7): { <Target>(target: Target): import("./expect").Expect<Target, BaseMatchers & NewMatcher & NewMatcher_1 & NewMatcher_2 & NewMatcher_3 & NewMatcher_4 & NewMatcher_5 & NewMatcher_6 & NewMatcher_7> & (BaseMatchers & NewMatcher & NewMatcher_1 & NewMatcher_2 & NewMatcher_3 & NewMatcher_4 & NewMatcher_5 & NewMatcher_6 & NewMatcher_7 extends infer T ? { [Key in keyof T]: T[Key] extends (this: MatcherContext<Target_1>, ...rest: infer Args extends any[]) => MatcherResult | Promise<MatcherResult> ? (...expected: Args) => ReturnType<T[Key]> extends Promise<any> ? Promise<import("./expect").Expect<Target_1, T>> : Target_1 extends (...args: any) => any ? Promise<import("./expect").Expect<Target_1, T>> : import("./expect").Expect<Target_1, T> : never; } : never); extend<NewMatcher_8 extends { [x: string]: (this: MatcherContext<any>, ...rest: any[]) => MatcherResult | Promise<MatcherResult>; }>(matchers: NewMatcher_8): { <Target>(target: Target): import("./expect").Expect<Target, BaseMatchers & NewMatcher & NewMatcher_1 & NewMatcher_2 & NewMatcher_3 & NewMatcher_4 & NewMatcher_5 & NewMatcher_6 & NewMatcher_7 & NewMatcher_8> & (BaseMatchers & NewMatcher & NewMatcher_1 & NewMatcher_2 & NewMatcher_3 & NewMatcher_4 & NewMatcher_5 & NewMatcher_6 & NewMatcher_7 & NewMatcher_8 extends infer T ? { [Key in keyof T]: T[Key] extends (this: MatcherContext<Target_1>, ...rest: infer Args extends any[]) => MatcherResult | Promise<MatcherResult> ? (...expected: Args) => ReturnType<T[Key]> extends Promise<any> ? Promise<import("./expect").Expect<Target_1, T>> : Target_1 extends (...args: any) => any ? Promise<import("./expect").Expect<Target_1, T>> : import("./expect").Expect<Target_1, T> : never; } : never); extend<NewMatcher_9 extends { [x: string]: (this: MatcherContext<any>, ...rest: any[]) => MatcherResult | Promise<MatcherResult>; }>(matchers: NewMatcher_9): { <Target>(target: Target): import("./expect").Expect<Target, BaseMatchers & NewMatcher & NewMatcher_1 & NewMatcher_2 & NewMatcher_3 & NewMatcher_4 & NewMatcher_5 & NewMatcher_6 & NewMatcher_7 & NewMatcher_8 & NewMatcher_9> & (BaseMatchers & NewMatcher & NewMatcher_1 & NewMatcher_2 & NewMatcher_3 & NewMatcher_4 & NewMatcher_5 & NewMatcher_6 & NewMatcher_7 & NewMatcher_8 & NewMatcher_9 extends infer T ? { [Key in keyof T]: T[Key] extends (this: MatcherContext<Target_1>, ...rest: infer Args extends any[]) => MatcherResult | Promise<MatcherResult> ? (...expected: Args) => ReturnType<T[Key]> extends Promise<any> ? Promise<import("./expect").Expect<Target_1, T>> : Target_1 extends (...args: any) => any ? Promise<import("./expect").Expect<Target_1, T>> : import("./expect").Expect<Target_1, T> : never; } : never); extend<NewMatcher_10 extends { [x: string]: (this: MatcherContext<any>, ...rest: any[]) => MatcherResult | Promise<MatcherResult>; }>(matchers: NewMatcher_10): /*elided*/ any; }; }; }; }; }; }; }; }; }; }; };