@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.
Files changed (63) hide show
  1. package/LICENSE +25 -0
  2. package/NOTICE +23 -0
  3. package/README.md +74 -0
  4. package/dist/_virtual/_rolldown/runtime.js +4 -0
  5. package/dist/index.js +26 -0
  6. package/dist/lib/browser.depd.js +13 -0
  7. package/dist/lib/case-utils.js +21 -0
  8. package/dist/lib/connectors/kv-memory.js +158 -0
  9. package/dist/lib/connectors/memory.js +810 -0
  10. package/dist/lib/connectors/transient.js +126 -0
  11. package/dist/lib/dao.js +2445 -0
  12. package/dist/lib/datasource.js +2215 -0
  13. package/dist/lib/date-string.js +87 -0
  14. package/dist/lib/geo.js +244 -0
  15. package/dist/lib/globalize.js +33 -0
  16. package/dist/lib/hooks.js +79 -0
  17. package/dist/lib/id-utils.js +66 -0
  18. package/dist/lib/include.js +795 -0
  19. package/dist/lib/include_utils.js +104 -0
  20. package/dist/lib/introspection.js +37 -0
  21. package/dist/lib/jutil.js +65 -0
  22. package/dist/lib/kvao/delete-all.js +57 -0
  23. package/dist/lib/kvao/delete.js +43 -0
  24. package/dist/lib/kvao/expire.js +35 -0
  25. package/dist/lib/kvao/get.js +34 -0
  26. package/dist/lib/kvao/index.js +28 -0
  27. package/dist/lib/kvao/iterate-keys.js +38 -0
  28. package/dist/lib/kvao/keys.js +55 -0
  29. package/dist/lib/kvao/set.js +39 -0
  30. package/dist/lib/kvao/ttl.js +35 -0
  31. package/dist/lib/list.js +101 -0
  32. package/dist/lib/mixins.js +58 -0
  33. package/dist/lib/model-builder.js +608 -0
  34. package/dist/lib/model-definition.js +231 -0
  35. package/dist/lib/model-utils.js +368 -0
  36. package/dist/lib/model.js +586 -0
  37. package/dist/lib/observer.js +235 -0
  38. package/dist/lib/relation-definition.js +2604 -0
  39. package/dist/lib/relations.js +587 -0
  40. package/dist/lib/scope.js +392 -0
  41. package/dist/lib/transaction.js +183 -0
  42. package/dist/lib/types.js +58 -0
  43. package/dist/lib/utils.js +625 -0
  44. package/dist/lib/validations.js +742 -0
  45. package/dist/package.js +93 -0
  46. package/package.json +85 -0
  47. package/types/common.d.ts +28 -0
  48. package/types/connector.d.ts +52 -0
  49. package/types/datasource.d.ts +324 -0
  50. package/types/date-string.d.ts +21 -0
  51. package/types/inclusion-mixin.d.ts +44 -0
  52. package/types/index.d.ts +36 -0
  53. package/types/kv-model.d.ts +201 -0
  54. package/types/model.d.ts +368 -0
  55. package/types/observer-mixin.d.ts +174 -0
  56. package/types/persisted-model.d.ts +505 -0
  57. package/types/query.d.ts +108 -0
  58. package/types/relation-mixin.d.ts +577 -0
  59. package/types/relation.d.ts +301 -0
  60. package/types/scope.d.ts +92 -0
  61. package/types/transaction-mixin.d.ts +47 -0
  62. package/types/types.d.ts +65 -0
  63. 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
+ }
@@ -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
+ }
@@ -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;