UNPKG

2.01 kBTypeScriptView Raw
1import {DateString} from './date-string';
2import {GeoPoint} from './geo';
3
4// @achrinza: The return value is a hack to inform TypeScript of function parameter mutations.
5// see: https://github.com/microsoft/TypeScript/issues/22865#issuecomment-725015710
6declare function registerModelTypes(modelTypes: registerModelTypes.ModelTypes): asserts modelTypes is registerModelTypes.BuiltModelTypes;
7
8declare namespace registerModelTypes {
9 // @achrinza: One of the limitations of these definitions is that the class instance
10 // isn't callable; Hence, changing the `value` class member must be done
11 // directly. This is a TypeScript limitation as class constructors cannot
12 // have a custom return value.
13 namespace Types {
14 function Text<T extends unknown>(value: T): T extends Text ? void : T;
15 class Text implements Type {
16 value: Text;
17 constructor(value: Text);
18 toJSON(): Text;
19 toObject(): Text;
20 }
21
22 function JSON<T extends unknown>(value: T): T extends JSON ? void : T;
23 class JSON implements Type {
24 value: unknown;
25 constructor(value: unknown)
26 toJSON(): unknown;
27 toObject(): unknown;
28 }
29
30
31 function Any<T extends unknown>(value: T): T extends Any ? void : T;
32 class Any implements Type {
33 value: unknown;
34 constructor(value: unknown);
35 toJSON(): unknown;
36 toObject(): unknown;
37 }
38 }
39
40 interface ModelTypes {
41 [type: string]: Type | unknown;
42 }
43
44 interface Type {
45 value: unknown;
46 toJSON(): unknown;
47 toObject(): unknown;
48 }
49
50 interface BuiltModelTypes extends ModelTypes {
51 schemaTypes: Record<string, Type> & {
52 'String': String;
53 'Number': Number;
54 'Date': Date
55 'DateString': DateString
56 'Binary': Buffer;
57 'Buffer': Buffer;
58 'Array': Array<unknown>;
59 'Object': Object;
60 'GeoPoint': GeoPoint
61 };
62 registerType: (type: Type, names?: string[]) => void;
63 }
64
65}
66export = registerModelTypes;