@vsaas/loopback-datasource-juggler 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +25 -0
- package/NOTICE +23 -0
- package/README.md +74 -0
- package/dist/_virtual/_rolldown/runtime.js +4 -0
- package/dist/index.js +26 -0
- package/dist/lib/browser.depd.js +13 -0
- package/dist/lib/case-utils.js +21 -0
- package/dist/lib/connectors/kv-memory.js +158 -0
- package/dist/lib/connectors/memory.js +810 -0
- package/dist/lib/connectors/transient.js +126 -0
- package/dist/lib/dao.js +2445 -0
- package/dist/lib/datasource.js +2215 -0
- package/dist/lib/date-string.js +87 -0
- package/dist/lib/geo.js +244 -0
- package/dist/lib/globalize.js +33 -0
- package/dist/lib/hooks.js +79 -0
- package/dist/lib/id-utils.js +66 -0
- package/dist/lib/include.js +795 -0
- package/dist/lib/include_utils.js +104 -0
- package/dist/lib/introspection.js +37 -0
- package/dist/lib/jutil.js +65 -0
- package/dist/lib/kvao/delete-all.js +57 -0
- package/dist/lib/kvao/delete.js +43 -0
- package/dist/lib/kvao/expire.js +35 -0
- package/dist/lib/kvao/get.js +34 -0
- package/dist/lib/kvao/index.js +28 -0
- package/dist/lib/kvao/iterate-keys.js +38 -0
- package/dist/lib/kvao/keys.js +55 -0
- package/dist/lib/kvao/set.js +39 -0
- package/dist/lib/kvao/ttl.js +35 -0
- package/dist/lib/list.js +101 -0
- package/dist/lib/mixins.js +58 -0
- package/dist/lib/model-builder.js +608 -0
- package/dist/lib/model-definition.js +231 -0
- package/dist/lib/model-utils.js +368 -0
- package/dist/lib/model.js +586 -0
- package/dist/lib/observer.js +235 -0
- package/dist/lib/relation-definition.js +2604 -0
- package/dist/lib/relations.js +587 -0
- package/dist/lib/scope.js +392 -0
- package/dist/lib/transaction.js +183 -0
- package/dist/lib/types.js +58 -0
- package/dist/lib/utils.js +625 -0
- package/dist/lib/validations.js +742 -0
- package/dist/package.js +93 -0
- package/package.json +85 -0
- package/types/common.d.ts +28 -0
- package/types/connector.d.ts +52 -0
- package/types/datasource.d.ts +324 -0
- package/types/date-string.d.ts +21 -0
- package/types/inclusion-mixin.d.ts +44 -0
- package/types/index.d.ts +36 -0
- package/types/kv-model.d.ts +201 -0
- package/types/model.d.ts +368 -0
- package/types/observer-mixin.d.ts +174 -0
- package/types/persisted-model.d.ts +505 -0
- package/types/query.d.ts +108 -0
- package/types/relation-mixin.d.ts +577 -0
- package/types/relation.d.ts +301 -0
- package/types/scope.d.ts +92 -0
- package/types/transaction-mixin.d.ts +47 -0
- package/types/types.d.ts +65 -0
- package/types/validation-mixin.d.ts +287 -0
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
// Copyright IBM Corp. 2018. All Rights Reserved.
|
|
2
|
+
// Node module: loopback-datasource-juggler
|
|
3
|
+
// This file is licensed under the MIT License.
|
|
4
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
5
|
+
|
|
6
|
+
import { AnyObject, Callback, Options, PromiseOrVoid } from './common';
|
|
7
|
+
import { ModelData } from './model';
|
|
8
|
+
import { Count, PersistedData, PersistedModel, PersistedModelClass } from './persisted-model';
|
|
9
|
+
import { Filter, Where } from './query';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Relation types
|
|
13
|
+
*/
|
|
14
|
+
export enum RelationType {
|
|
15
|
+
belongsTo = 'belongsTo',
|
|
16
|
+
hasMany = 'hasMany',
|
|
17
|
+
hasOne = 'hasOne',
|
|
18
|
+
hasAndBelongsToMany = 'hasAndBelongsToMany',
|
|
19
|
+
referencesMany = 'referencesMany',
|
|
20
|
+
embedsOne = 'embedsOne',
|
|
21
|
+
embedsMany = 'embedsMany',
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Relation definition
|
|
26
|
+
*/
|
|
27
|
+
export declare class RelationDefinition {
|
|
28
|
+
name: string;
|
|
29
|
+
type: RelationType;
|
|
30
|
+
modelFrom: PersistedModelClass | string;
|
|
31
|
+
keyFrom: string;
|
|
32
|
+
modelTo: PersistedModelClass | string;
|
|
33
|
+
keyTo: string;
|
|
34
|
+
polymorphic: AnyObject | boolean;
|
|
35
|
+
modelThrough?: PersistedModelClass | string;
|
|
36
|
+
keyThrough?: string;
|
|
37
|
+
multiple: boolean;
|
|
38
|
+
properties: AnyObject;
|
|
39
|
+
options: Options;
|
|
40
|
+
scope: AnyObject;
|
|
41
|
+
embed?: boolean;
|
|
42
|
+
methods?: AnyObject<Function>;
|
|
43
|
+
|
|
44
|
+
toJSON(): AnyObject;
|
|
45
|
+
defineMethod(name: string, fn: Function): Function;
|
|
46
|
+
applyScope(modelInstance: PersistedData, filter: Filter): void;
|
|
47
|
+
applyProperties(modelInstance: PersistedData, obj: AnyObject): void;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Relation of a given model instance
|
|
52
|
+
*/
|
|
53
|
+
export declare class Relation<
|
|
54
|
+
S extends PersistedModel = PersistedModel,
|
|
55
|
+
T extends PersistedModel = PersistedModel,
|
|
56
|
+
> {
|
|
57
|
+
constructor(definition: RelationDefinition, modelInstance: S);
|
|
58
|
+
|
|
59
|
+
resetCache(cache: T): void;
|
|
60
|
+
getCache(): AnyObject<T>;
|
|
61
|
+
callScopeMethod(methodName: string, ...args: any[]): any;
|
|
62
|
+
fetch(
|
|
63
|
+
condOrRefresh: boolean | AnyObject,
|
|
64
|
+
options?: Options,
|
|
65
|
+
callback?: Callback<T | T[]>,
|
|
66
|
+
): PromiseOrVoid<T | T[]>;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export declare class BelongsTo<
|
|
70
|
+
S extends PersistedModel = PersistedModel,
|
|
71
|
+
T extends PersistedModel = PersistedModel,
|
|
72
|
+
> extends Relation<S, T> {
|
|
73
|
+
create(
|
|
74
|
+
targetModelData: PersistedData<T>,
|
|
75
|
+
options?: Options,
|
|
76
|
+
callback?: Callback<T>,
|
|
77
|
+
): PromiseOrVoid<T>;
|
|
78
|
+
|
|
79
|
+
build(targetModelData: PersistedData<T>): T;
|
|
80
|
+
|
|
81
|
+
update(
|
|
82
|
+
targetModelData: PersistedData<T>,
|
|
83
|
+
options?: Options,
|
|
84
|
+
callback?: Callback<boolean>,
|
|
85
|
+
): PromiseOrVoid<boolean>;
|
|
86
|
+
|
|
87
|
+
destroy(options?: Options, callback?: Callback<boolean>): PromiseOrVoid<boolean>;
|
|
88
|
+
|
|
89
|
+
related(
|
|
90
|
+
condOrRefresh: boolean | AnyObject,
|
|
91
|
+
options?: Options,
|
|
92
|
+
callback?: Callback<T>,
|
|
93
|
+
): PromiseOrVoid<T>;
|
|
94
|
+
|
|
95
|
+
get(options?: Options, callback?: Callback<T>): PromiseOrVoid<T>;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export declare class HasMany<
|
|
99
|
+
S extends PersistedModel = PersistedModel,
|
|
100
|
+
T extends PersistedModel = PersistedModel,
|
|
101
|
+
> extends Relation<S, T> {
|
|
102
|
+
removeFromCache(id: any): T | null;
|
|
103
|
+
|
|
104
|
+
addToCache(inst: T): void;
|
|
105
|
+
|
|
106
|
+
findById(fkId: any, options?: Options, callback?: Callback<T>): PromiseOrVoid<T>;
|
|
107
|
+
|
|
108
|
+
exists(fkId: any, options?: Options, callback?: Callback<boolean>): PromiseOrVoid<boolean>;
|
|
109
|
+
|
|
110
|
+
updateById(
|
|
111
|
+
fkId: any,
|
|
112
|
+
data: ModelData,
|
|
113
|
+
options?: Options,
|
|
114
|
+
callback?: Callback<boolean>,
|
|
115
|
+
): PromiseOrVoid<boolean>;
|
|
116
|
+
|
|
117
|
+
destroyById(fkId: any, options?: Options, callback?: Callback<boolean>): PromiseOrVoid<boolean>;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export declare class HasManyThrough<
|
|
121
|
+
S extends PersistedModel = PersistedModel,
|
|
122
|
+
T extends PersistedModel = PersistedModel,
|
|
123
|
+
> extends Relation<S, T> {
|
|
124
|
+
findById(fkId: any, options?: Options, callback?: Callback<T>): PromiseOrVoid<T>;
|
|
125
|
+
|
|
126
|
+
destroyById(fkId: any, options?: Options, callback?: Callback<boolean>): PromiseOrVoid<boolean>;
|
|
127
|
+
|
|
128
|
+
create(data: PersistedData<T>, options?: Options, callback?: Callback<T>): PromiseOrVoid<T>;
|
|
129
|
+
|
|
130
|
+
add(
|
|
131
|
+
acInst: any,
|
|
132
|
+
data: PersistedData<T>,
|
|
133
|
+
options?: Options,
|
|
134
|
+
callback?: Callback<boolean>,
|
|
135
|
+
): PromiseOrVoid<boolean>;
|
|
136
|
+
|
|
137
|
+
exists(acInst: any, options?: Options, callback?: Callback<boolean>): PromiseOrVoid<boolean>;
|
|
138
|
+
|
|
139
|
+
remove(acInst: any, options?: Options, callback?: Callback<boolean>): PromiseOrVoid<boolean>;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export declare class HasOne<
|
|
143
|
+
S extends PersistedModel = PersistedModel,
|
|
144
|
+
T extends PersistedModel = PersistedModel,
|
|
145
|
+
> extends Relation<S, T> {
|
|
146
|
+
create(
|
|
147
|
+
targetModelData: PersistedData<T>,
|
|
148
|
+
options?: Options,
|
|
149
|
+
callback?: Callback<T>,
|
|
150
|
+
): PromiseOrVoid<T>;
|
|
151
|
+
|
|
152
|
+
update(
|
|
153
|
+
targetModelData: PersistedData<T>,
|
|
154
|
+
options?: Options,
|
|
155
|
+
callback?: Callback<boolean>,
|
|
156
|
+
): PromiseOrVoid<boolean>;
|
|
157
|
+
|
|
158
|
+
destroy(options?: Options, callback?: Callback<boolean>): PromiseOrVoid<boolean>;
|
|
159
|
+
|
|
160
|
+
build(targetModelData: PersistedData<T>): T;
|
|
161
|
+
|
|
162
|
+
related(condOrRefresh: any, options?: Options, callback?: Callback<T>): PromiseOrVoid<T>;
|
|
163
|
+
|
|
164
|
+
get(options?: Options, callback?: Callback<T>): PromiseOrVoid<T>;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export declare class HasAndBelongsToMany<
|
|
168
|
+
S extends PersistedModel = PersistedModel,
|
|
169
|
+
T extends PersistedModel = PersistedModel,
|
|
170
|
+
> extends Relation<S, T> {}
|
|
171
|
+
|
|
172
|
+
export declare class ReferencesMany<
|
|
173
|
+
S extends PersistedModel = PersistedModel,
|
|
174
|
+
T extends PersistedModel = PersistedModel,
|
|
175
|
+
> extends Relation<S, T> {
|
|
176
|
+
related(
|
|
177
|
+
receiver: PersistedModelClass,
|
|
178
|
+
scopeParams: AnyObject,
|
|
179
|
+
condOrRefresh: any,
|
|
180
|
+
options?: Options,
|
|
181
|
+
callback?: Callback<ModelData>,
|
|
182
|
+
): PromiseOrVoid<ModelData>;
|
|
183
|
+
|
|
184
|
+
findById(fkId: any, options?: Options, callback?: Callback<T>): PromiseOrVoid<T>;
|
|
185
|
+
|
|
186
|
+
exists(fkId: any, options?: Options, callback?: Callback<boolean>): PromiseOrVoid<boolean>;
|
|
187
|
+
|
|
188
|
+
updateById(
|
|
189
|
+
fkId: any,
|
|
190
|
+
data: PersistedData<T>,
|
|
191
|
+
options?: Options,
|
|
192
|
+
callback?: Callback<boolean>,
|
|
193
|
+
): PromiseOrVoid<boolean>;
|
|
194
|
+
|
|
195
|
+
destroyById(fkId: any, options?: Options, callback?: Callback<boolean>): PromiseOrVoid<boolean>;
|
|
196
|
+
|
|
197
|
+
at(index: number, options?: Options, callback?: Callback<T>): PromiseOrVoid<T>;
|
|
198
|
+
|
|
199
|
+
create(
|
|
200
|
+
targetModelData: PersistedData<T>,
|
|
201
|
+
options?: Options,
|
|
202
|
+
callback?: Callback<T>,
|
|
203
|
+
): PromiseOrVoid<T>;
|
|
204
|
+
|
|
205
|
+
build(targetModelData: PersistedData<T>): T;
|
|
206
|
+
|
|
207
|
+
add(acInst: any, options?: Options, callback?: Callback<boolean>): PromiseOrVoid<boolean>;
|
|
208
|
+
|
|
209
|
+
remove(acInst: any, options?: Options, callback?: Callback<boolean>): PromiseOrVoid<boolean>;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
export declare class EmbedsOne<
|
|
213
|
+
S extends PersistedModel = PersistedModel,
|
|
214
|
+
T extends PersistedModel = PersistedModel,
|
|
215
|
+
> extends Relation<S, T> {
|
|
216
|
+
related(condOrRefresh: any, options?: Options, callback?: Callback<T>): PromiseOrVoid<T>;
|
|
217
|
+
|
|
218
|
+
prepareEmbeddedInstance(inst: T): void;
|
|
219
|
+
|
|
220
|
+
embeddedValue(modelInstance: S): T;
|
|
221
|
+
|
|
222
|
+
create(
|
|
223
|
+
targetModelData: PersistedData<T>,
|
|
224
|
+
options?: Options,
|
|
225
|
+
callback?: Callback<T>,
|
|
226
|
+
): PromiseOrVoid<T>;
|
|
227
|
+
|
|
228
|
+
build(targetModelData: PersistedData<T>): T;
|
|
229
|
+
|
|
230
|
+
update(
|
|
231
|
+
targetModelData: PersistedData<T>,
|
|
232
|
+
options?: Options,
|
|
233
|
+
callback?: Callback<boolean>,
|
|
234
|
+
): PromiseOrVoid<boolean>;
|
|
235
|
+
|
|
236
|
+
destroy(options?: Options, callback?: Callback<boolean>): PromiseOrVoid<boolean>;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
export declare class EmbedsMany<
|
|
240
|
+
S extends PersistedModel = PersistedModel,
|
|
241
|
+
T extends PersistedModel = PersistedModel,
|
|
242
|
+
> extends Relation<S, T> {
|
|
243
|
+
prepareEmbeddedInstance(inst: T): void;
|
|
244
|
+
|
|
245
|
+
embeddedList(modelInstance: T[]): void;
|
|
246
|
+
|
|
247
|
+
embeddedValue(modelInstance: S): T[];
|
|
248
|
+
|
|
249
|
+
related(
|
|
250
|
+
receiver: PersistedModelClass,
|
|
251
|
+
scopeParams: AnyObject,
|
|
252
|
+
condOrRefresh: any,
|
|
253
|
+
options?: Options,
|
|
254
|
+
callback?: Callback<ModelData>,
|
|
255
|
+
): PromiseOrVoid<ModelData>;
|
|
256
|
+
|
|
257
|
+
findById(fkId: any, options?: Options, callback?: Callback<T>): PromiseOrVoid<T>;
|
|
258
|
+
|
|
259
|
+
get(fkId: any, options?: Options, callback?: Callback<ModelData>): PromiseOrVoid<ModelData>;
|
|
260
|
+
|
|
261
|
+
exists(fkId: any, options?: Options, callback?: Callback<boolean>): PromiseOrVoid<boolean>;
|
|
262
|
+
|
|
263
|
+
updateById(
|
|
264
|
+
fkId: any,
|
|
265
|
+
data: PersistedData<T>,
|
|
266
|
+
options?: Options,
|
|
267
|
+
callback?: Callback<T>,
|
|
268
|
+
): PromiseOrVoid<T>;
|
|
269
|
+
|
|
270
|
+
set(
|
|
271
|
+
fkId: any,
|
|
272
|
+
data: PersistedData<T>,
|
|
273
|
+
options?: Options,
|
|
274
|
+
callback?: Callback<boolean>,
|
|
275
|
+
): PromiseOrVoid<boolean>;
|
|
276
|
+
|
|
277
|
+
destroyById(fkId: any, options?: Options, callback?: Callback<boolean>): PromiseOrVoid<boolean>;
|
|
278
|
+
|
|
279
|
+
unset(fkId: any, options?: Options, callback?: Callback<boolean>): PromiseOrVoid<boolean>;
|
|
280
|
+
|
|
281
|
+
destroyAll(where: Where, options?: Options, callback?: Callback<Count>): PromiseOrVoid<Count>;
|
|
282
|
+
|
|
283
|
+
at(index: number, callback?: Callback<T>): PromiseOrVoid<T>;
|
|
284
|
+
|
|
285
|
+
create(
|
|
286
|
+
targetModelData: PersistedData<T>,
|
|
287
|
+
options?: Options,
|
|
288
|
+
callback?: Callback<T>,
|
|
289
|
+
): PromiseOrVoid<T>;
|
|
290
|
+
|
|
291
|
+
build(targetModelData: PersistedData<T>): T;
|
|
292
|
+
|
|
293
|
+
add(
|
|
294
|
+
acInst: any,
|
|
295
|
+
data: PersistedData<T>,
|
|
296
|
+
options?: Options,
|
|
297
|
+
callback?: Callback<boolean>,
|
|
298
|
+
): PromiseOrVoid<boolean>;
|
|
299
|
+
|
|
300
|
+
remove(acInst: any, options?: Options, callback?: Callback<boolean>): PromiseOrVoid<boolean>;
|
|
301
|
+
}
|
package/types/scope.d.ts
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// Copyright IBM Corp. 2018. All Rights Reserved.
|
|
2
|
+
// Node module: loopback-datasource-juggler
|
|
3
|
+
// This file is licensed under the MIT License.
|
|
4
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
5
|
+
|
|
6
|
+
import { AnyObject, Callback, Options, PromiseOrVoid } from './common';
|
|
7
|
+
import { ModelBase, ModelBaseClass, ModelData } from './model';
|
|
8
|
+
import { Count } from './persisted-model';
|
|
9
|
+
import { Filter, Where } from './query';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Definition metadata for scopes
|
|
13
|
+
*/
|
|
14
|
+
export declare class ScopeDefinition {
|
|
15
|
+
constructor(definition: AnyObject);
|
|
16
|
+
|
|
17
|
+
isStatic: boolean;
|
|
18
|
+
modelFrom?: ModelBaseClass;
|
|
19
|
+
modelTo?: ModelBaseClass;
|
|
20
|
+
name: string;
|
|
21
|
+
params?: AnyObject;
|
|
22
|
+
methods?: AnyObject<Function>;
|
|
23
|
+
options?: Options;
|
|
24
|
+
|
|
25
|
+
targetModel(receiver: ModelBaseClass | (() => ModelBaseClass)): void;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Find related model instances
|
|
29
|
+
* @param {*} receiver The target model class/prototype
|
|
30
|
+
* @param {Object|Function} scopeParams
|
|
31
|
+
* @param {Boolean|Object} [condOrRefresh] true for refresh or object as a filter
|
|
32
|
+
* @param {Object} [options]
|
|
33
|
+
* @param {Function} cb
|
|
34
|
+
* @returns {*}
|
|
35
|
+
*/
|
|
36
|
+
related(
|
|
37
|
+
receiver: ModelBaseClass | (() => ModelBaseClass),
|
|
38
|
+
scopeParams: AnyObject | (() => AnyObject),
|
|
39
|
+
condOrRefresh: boolean | AnyObject,
|
|
40
|
+
options?: Options,
|
|
41
|
+
callback?: Callback,
|
|
42
|
+
): PromiseOrVoid;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Define a scope method
|
|
46
|
+
* @param {String} name of the method
|
|
47
|
+
* @param {Function} function to define
|
|
48
|
+
*/
|
|
49
|
+
defineMethod(name: string, fn: Function): Function;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Define a scope to the class
|
|
54
|
+
* @param {Model} cls The class where the scope method is added
|
|
55
|
+
* @param {Model} targetClass The class that a query to run against
|
|
56
|
+
* @param {String} name The name of the scope
|
|
57
|
+
* @param {Object|Function} params The parameters object for the query or a function
|
|
58
|
+
* to return the query object
|
|
59
|
+
* @param methods An object of methods keyed by the method name to be bound to the class
|
|
60
|
+
*/
|
|
61
|
+
export declare function defineScope(
|
|
62
|
+
cls: ModelBaseClass,
|
|
63
|
+
targetClass: ModelBaseClass,
|
|
64
|
+
name: string,
|
|
65
|
+
params: AnyObject,
|
|
66
|
+
methods: AnyObject<Function>,
|
|
67
|
+
options?: Options,
|
|
68
|
+
): ScopeDefinition;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Methods injected by scopes
|
|
72
|
+
*/
|
|
73
|
+
export interface ScopedMethods<T extends ModelBase = ModelBase> {
|
|
74
|
+
build(data: ModelData<T>): T;
|
|
75
|
+
|
|
76
|
+
create(data: ModelData<T>, options?: Options, callback?: Callback<T>): PromiseOrVoid<T>;
|
|
77
|
+
|
|
78
|
+
destroyAll(where?: Where, options?: Options, callback?: Callback<Count>): PromiseOrVoid<Count>;
|
|
79
|
+
|
|
80
|
+
updateAll(
|
|
81
|
+
where?: Where,
|
|
82
|
+
data?: ModelData<T>,
|
|
83
|
+
options?: Options,
|
|
84
|
+
callback?: Callback<Count>,
|
|
85
|
+
): PromiseOrVoid<Count>;
|
|
86
|
+
|
|
87
|
+
findById(id: any, filter: Filter, options?: Options, callback?: Callback<T>): PromiseOrVoid<T>;
|
|
88
|
+
|
|
89
|
+
findOne(filter: Filter, options?: Options, callback?: Callback<T>): PromiseOrVoid<T>;
|
|
90
|
+
|
|
91
|
+
count(where: Where, options?: Options, callback?: Callback<number>): PromiseOrVoid<number>;
|
|
92
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// Copyright IBM Corp. 2018. All Rights Reserved.
|
|
2
|
+
// Node module: loopback-datasource-juggler
|
|
3
|
+
// This file is licensed under the MIT License.
|
|
4
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
5
|
+
|
|
6
|
+
import { Callback, Options, PromiseOrVoid } from './common';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Local transaction
|
|
10
|
+
*/
|
|
11
|
+
export interface Transaction {
|
|
12
|
+
/**
|
|
13
|
+
* Commit the transaction
|
|
14
|
+
* @param callback
|
|
15
|
+
*/
|
|
16
|
+
commit(callback?: Callback): PromiseOrVoid;
|
|
17
|
+
/**
|
|
18
|
+
* Rollback the transaction
|
|
19
|
+
* @param callback
|
|
20
|
+
*/
|
|
21
|
+
rollback(callback?: Callback): PromiseOrVoid;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Isolation level
|
|
26
|
+
*/
|
|
27
|
+
export enum IsolationLevel {
|
|
28
|
+
READ_COMMITTED = 'READ COMMITTED', // default
|
|
29
|
+
READ_UNCOMMITTED = 'READ UNCOMMITTED',
|
|
30
|
+
SERIALIZABLE = 'SERIALIZABLE',
|
|
31
|
+
REPEATABLE_READ = 'REPEATABLE READ',
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Mixin for transaction support
|
|
36
|
+
*/
|
|
37
|
+
export interface TransactionMixin {
|
|
38
|
+
/**
|
|
39
|
+
* Begin a new transaction
|
|
40
|
+
* @param options
|
|
41
|
+
* @param callback
|
|
42
|
+
*/
|
|
43
|
+
beginTransaction(
|
|
44
|
+
options?: IsolationLevel | Options,
|
|
45
|
+
callback?: Callback<Transaction>,
|
|
46
|
+
): PromiseOrVoid<Transaction>;
|
|
47
|
+
}
|
package/types/types.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { DateString } from './date-string';
|
|
2
|
+
|
|
3
|
+
// @achrinza: The return value is a hack to inform TypeScript of function parameter mutations.
|
|
4
|
+
// see: https://github.com/microsoft/TypeScript/issues/22865#issuecomment-725015710
|
|
5
|
+
declare function registerModelTypes(
|
|
6
|
+
modelTypes: registerModelTypes.ModelTypes,
|
|
7
|
+
): asserts modelTypes is registerModelTypes.BuiltModelTypes;
|
|
8
|
+
|
|
9
|
+
declare namespace registerModelTypes {
|
|
10
|
+
// @achrinza: One of the limitations of these definitions is that the class instance
|
|
11
|
+
// isn't callable; Hence, changing the `value` class member must be done
|
|
12
|
+
// directly. This is a TypeScript limitation as class constructors cannot
|
|
13
|
+
// have a custom return value.
|
|
14
|
+
namespace Types {
|
|
15
|
+
function Text<T extends unknown>(value: T): T extends Text ? void : T;
|
|
16
|
+
class Text implements Type {
|
|
17
|
+
value: Text;
|
|
18
|
+
constructor(value: Text);
|
|
19
|
+
toJSON(): Text;
|
|
20
|
+
toObject(): Text;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function JSON<T extends unknown>(value: T): T extends JSON ? void : T;
|
|
24
|
+
class JSON implements Type {
|
|
25
|
+
value: unknown;
|
|
26
|
+
constructor(value: unknown);
|
|
27
|
+
toJSON(): unknown;
|
|
28
|
+
toObject(): unknown;
|
|
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 // Removed temporarily. See: https://github.com/loopbackio/loopback-datasource-juggler/issues/1909
|
|
61
|
+
};
|
|
62
|
+
registerType: (type: Type, names?: string[]) => void;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export = registerModelTypes;
|