UNPKG

@xompass/loopback-datasource-juggler

Version:
67 lines (57 loc) 2.01 kB
import {DateString} from './date-string'; import {GeoPoint} from './geo'; // @achrinza: The return value is a hack to inform TypeScript of function parameter mutations. // see: https://github.com/microsoft/TypeScript/issues/22865#issuecomment-725015710 declare function registerModelTypes(modelTypes: registerModelTypes.ModelTypes): asserts modelTypes is registerModelTypes.BuiltModelTypes; declare namespace registerModelTypes { // @achrinza: One of the limitations of these definitions is that the class instance // isn't callable; Hence, changing the `value` class member must be done // directly. This is a TypeScript limitation as class constructors cannot // have a custom return value. namespace Types { function Text<T extends unknown>(value: T): T extends Text ? void : T; class Text implements Type { value: Text; constructor(value: Text); toJSON(): Text; toObject(): Text; } function JSON<T extends unknown>(value: T): T extends JSON ? void : T; class JSON implements Type { value: unknown; constructor(value: unknown) toJSON(): unknown; toObject(): unknown; } function Any<T extends unknown>(value: T): T extends Any ? void : T; class Any implements Type { value: unknown; constructor(value: unknown); toJSON(): unknown; toObject(): unknown; } } interface ModelTypes { [type: string]: Type | unknown; } interface Type { value: unknown; toJSON(): unknown; toObject(): unknown; } interface BuiltModelTypes extends ModelTypes { schemaTypes: Record<string, Type> & { 'String': String; 'Number': Number; 'Date': Date 'DateString': DateString 'Binary': Buffer; 'Buffer': Buffer; 'Array': Array<unknown>; 'Object': Object; 'GeoPoint': GeoPoint }; registerType: (type: Type, names?: string[]) => void; } } export = registerModelTypes;