You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

types.d.ts 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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<any>;
  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. };