UNPKG

4.68 kBTypeScriptView Raw
1import { Fork } from "../types";
2declare type Deep = boolean | ((type: Type<any>, value: any) => void);
3export declare type Type<T> = ArrayType<T> | IdentityType<T> | ObjectType<T> | OrType<T> | PredicateType<T>;
4export interface AnyType {
5 toString(): string;
6 check(value: any, deep?: Deep): boolean;
7 assert(value: any, deep?: Deep): boolean;
8 arrayOf(): AnyType;
9}
10declare 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}
16declare 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}
23declare 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}
30declare 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}
37declare 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}
44declare 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}
52export 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}
79declare 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}
90declare type FieldType<T> = Field<T>;
91export { FieldType as Field };
92export interface ASTNode {
93 type: string;
94}
95export interface Builder {
96 (...args: any[]): ASTNode;
97 from(obj: {
98 [param: string]: any;
99 }): ASTNode;
100}
101export 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};