1 | import { Fork } from "../types";
|
2 | declare type Deep = boolean | ((type: Type<any>, value: any) => void);
|
3 | export declare type Type<T> = ArrayType<T> | IdentityType<T> | ObjectType<T> | OrType<T> | PredicateType<T>;
|
4 | export interface AnyType {
|
5 | toString(): string;
|
6 | check(value: any, deep?: Deep): boolean;
|
7 | assert(value: any, deep?: Deep): boolean;
|
8 | arrayOf(): AnyType;
|
9 | }
|
10 | declare abstract class BaseType<T> {
|
11 | abstract toString(): string;
|
12 | abstract check(value: any, deep?: Deep): value is T;
|
13 | assert(value: any, deep?: Deep): value is T;
|
14 | arrayOf(): Type<T[]>;
|
15 | }
|
16 | declare class ArrayType<T> extends BaseType<T> {
|
17 | readonly elemType: Type<T extends (infer E)[] ? E : never>;
|
18 | readonly kind: "ArrayType";
|
19 | constructor(elemType: Type<T extends (infer E)[] ? E : never>);
|
20 | toString(): string;
|
21 | check(value: any, deep?: Deep): value is T;
|
22 | }
|
23 | declare class IdentityType<T> extends BaseType<T> {
|
24 | readonly value: T;
|
25 | readonly kind: "IdentityType";
|
26 | constructor(value: T);
|
27 | toString(): string;
|
28 | check(value: any, deep?: Deep): value is T;
|
29 | }
|
30 | declare class ObjectType<T> extends BaseType<T> {
|
31 | readonly fields: Field<any>[];
|
32 | readonly kind: "ObjectType";
|
33 | constructor(fields: Field<any>[]);
|
34 | toString(): string;
|
35 | check(value: any, deep?: Deep): value is T;
|
36 | }
|
37 | declare class OrType<T> extends BaseType<T> {
|
38 | readonly types: Type<any>[];
|
39 | readonly kind: "OrType";
|
40 | constructor(types: Type<any>[]);
|
41 | toString(): string;
|
42 | check(value: any, deep?: Deep): value is T;
|
43 | }
|
44 | declare class PredicateType<T> extends BaseType<T> {
|
45 | readonly name: string;
|
46 | readonly predicate: (value: any, deep?: Deep) => boolean;
|
47 | readonly kind: "PredicateType";
|
48 | constructor(name: string, predicate: (value: any, deep?: Deep) => boolean);
|
49 | toString(): string;
|
50 | check(value: any, deep?: Deep): value is T;
|
51 | }
|
52 | export declare abstract class Def<T = any> {
|
53 | readonly type: Type<T>;
|
54 | readonly typeName: string;
|
55 | baseNames: string[];
|
56 | ownFields: {
|
57 | [name: string]: Field<any>;
|
58 | };
|
59 | allSupertypes: {
|
60 | [name: string]: Def<any>;
|
61 | };
|
62 | supertypeList: string[];
|
63 | allFields: {
|
64 | [name: string]: Field<any>;
|
65 | };
|
66 | fieldNames: string[];
|
67 | finalized: boolean;
|
68 | buildable: boolean;
|
69 | buildParams: string[];
|
70 | constructor(type: Type<T>, typeName: string);
|
71 | isSupertypeOf(that: Def<any>): boolean;
|
72 | checkAllFields(value: any, deep?: any): boolean;
|
73 | abstract check(value: any, deep?: any): boolean;
|
74 | bases(...supertypeNames: string[]): this;
|
75 | abstract build(...buildParams: string[]): this;
|
76 | abstract field(name: string, type: any, defaultFn?: Function, hidden?: boolean): this;
|
77 | abstract finalize(): void;
|
78 | }
|
79 | declare class Field<T> {
|
80 | readonly name: string;
|
81 | readonly type: Type<T>;
|
82 | readonly defaultFn?: Function | undefined;
|
83 | readonly hidden: boolean;
|
84 | constructor(name: string, type: Type<T>, defaultFn?: Function | undefined, hidden?: boolean);
|
85 | toString(): string;
|
86 | getValue(obj: {
|
87 | [key: string]: any;
|
88 | }): any;
|
89 | }
|
90 | declare type FieldType<T> = Field<T>;
|
91 | export { FieldType as Field };
|
92 | export interface ASTNode {
|
93 | type: string;
|
94 | }
|
95 | export interface Builder {
|
96 | (...args: any[]): ASTNode;
|
97 | from(obj: {
|
98 | [param: string]: any;
|
99 | }): ASTNode;
|
100 | }
|
101 | export default function typesPlugin(_fork: Fork): {
|
102 | Type: {
|
103 | or(...types: any[]): Type<any>;
|
104 | from<T>(value: any, name?: string | undefined): Type<T>;
|
105 | def(typeName: string): Def;
|
106 | hasDef(typeName: string): boolean;
|
107 | };
|
108 | builtInTypes: {
|
109 | string: Type<string>;
|
110 | function: Type<Function>;
|
111 | array: Type<any[]>;
|
112 | object: Type<{
|
113 | [key: string]: any;
|
114 | }>;
|
115 | RegExp: Type<RegExp>;
|
116 | Date: Type<Date>;
|
117 | number: Type<number>;
|
118 | boolean: Type<boolean>;
|
119 | null: Type<null>;
|
120 | undefined: Type<undefined>;
|
121 | };
|
122 | getSupertypeNames: (typeName: string) => string[];
|
123 | computeSupertypeLookupTable: (candidates: any) => {
|
124 | [typeName: string]: any;
|
125 | };
|
126 | builders: import("../gen/builders").builders;
|
127 | defineMethod: (name: any, func?: Function | undefined) => Function;
|
128 | getBuilderName: (typeName: any) => any;
|
129 | getStatementBuilderName: (typeName: any) => any;
|
130 | namedTypes: import("../gen/namedTypes").NamedTypes;
|
131 | getFieldNames: (object: any) => string[];
|
132 | getFieldValue: (object: any, fieldName: any) => any;
|
133 | eachField: (object: any, callback: (name: any, value: any) => any, context?: any) => void;
|
134 | someField: (object: any, callback: (name: any, value: any) => any, context?: any) => boolean;
|
135 | finalize: () => void;
|
136 | };
|