@qavajs/validation
Version:
Lib that transform plain english definition to validation functions
115 lines (114 loc) • 18.3 kB
TypeScript
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;
};
};
};
};
};
};
};
};
};
};
};