forked from DefinitelyTyped/DefinitelyTyped
-
Notifications
You must be signed in to change notification settings - Fork 0
/
camo.d.ts
139 lines (128 loc) · 2.98 KB
/
camo.d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
// Type definitions for camo v0.11.4
// Project: https://github.com/scottwrobinson/camo
// Definitions by: Lucas Matías Ciruzzi <https://github.com/lucasmciruzzi>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
declare module "camo" {
type TypeOrArray<Type> = Type | Type[];
/**
* Supported type constructors for document properties
*/
export type SchemaTypeConstructor =
TypeOrArray<StringConstructor> |
TypeOrArray<NumberConstructor> |
TypeOrArray<BooleanConstructor> |
TypeOrArray<DateConstructor> |
TypeOrArray<ObjectConstructor> |
TypeOrArray<ArrayConstructor>;
/**
* Supported types for document properties
*/
export type SchemaType = TypeOrArray<string | number | boolean | Date | Object>;
/**
* Document property with options
*/
export interface SchemaTypeOptions<Type> {
/**
* Type of data
*/
type: SchemaTypeConstructor;
/**
* Default value
*/
default?: Type;
/**
* Min value (only with Number)
*/
min?: number;
/**
* Max value (only with Number)
*/
max?: number;
/**
* Posible options
*/
choices?: Type[];
/**
* RegEx to match value
*/
match?: RegExp;
/**
* Validation function
*
* @param value Value taken
* @returns true (validation ok) or false (validation wrong)
*/
validate?(value: Type): boolean;
/**
* Unique value (like ids)
*/
unique?: boolean;
/**
* Required field
*/
required?: boolean;
}
/**
* Document property type or options
*/
export type SchemaTypeExtended = SchemaTypeConstructor | SchemaTypeOptions<SchemaType>;
/**
* Schema passed to Document.create()
*/
interface DocumentSchema {
/**
* Index signature
*/
[property: string]: SchemaType;
/**
* Document id
*/
_id?: string;
}
/**
* Camo document instance
*/
class DocumentInstance<Schema extends DocumentSchema> {
public save(): Promise<Schema>;
public loadOne(): Promise<Schema>;
public loadMany(): Promise<Schema>;
public delete(): Promise<Schema>;
public deleteOne(): Promise<Schema>;
public deleteMany(): Promise<Schema>;
public loadOneAndDelete(): Promise<Schema>;
public count(): Promise<Schema>;
public preValidate(): Promise<Schema>;
public postValidate(): Promise<Schema>;
public preSave(): Promise<Schema>;
public postSave(): Promise<Schema>;
public preDelete(): Promise<Schema>;
public postDelete(): Promise<Schema>;
}
/**
* Camo document
*/
export class Document {
/**
* Index signature
*/
[property: string]: SchemaTypeExtended | string | DocumentInstance<any>;
/**
* Static method to define the collection name
*
* @returns The collection name
*/
static collectionName(): string;
/**
* Creates a camo document instance
*
* @returns A camo document instance
*/
static create<Schema extends DocumentSchema>(schema: Schema): DocumentInstance<Schema>;
}
/**
* Connect function
*
* @param uri Connection URI
*/
export function connect (uri: string): Promise<any>;
}