@decaf-ts/decorator-validation 1.11.10 → 1.11.12

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 (80) hide show
  1. package/README.md +1 -1
  2. package/dist/decorator-validation.cjs +1 -1
  3. package/dist/decorator-validation.cjs.map +1 -1
  4. package/dist/decorator-validation.js +1 -1
  5. package/dist/decorator-validation.js.map +1 -1
  6. package/lib/esm/index.d.ts +1 -1
  7. package/lib/esm/index.js +1 -1
  8. package/lib/esm/model/Model.d.ts +0 -103
  9. package/lib/esm/model/Model.js +11 -250
  10. package/lib/esm/model/Model.js.map +1 -1
  11. package/lib/esm/model/ModelRegistry.d.ts +181 -0
  12. package/lib/esm/model/ModelRegistry.js +291 -0
  13. package/lib/esm/model/ModelRegistry.js.map +1 -0
  14. package/lib/esm/model/index.d.ts +1 -0
  15. package/lib/esm/model/index.js +1 -0
  16. package/lib/esm/model/index.js.map +1 -1
  17. package/lib/esm/model/validation.d.ts +1 -1
  18. package/lib/esm/model/validation.js +6 -6
  19. package/lib/esm/model/validation.js.map +1 -1
  20. package/lib/esm/overrides/Metadata.d.ts +4 -1
  21. package/lib/esm/overrides/overrides.js +49 -0
  22. package/lib/esm/overrides/overrides.js.map +1 -1
  23. package/lib/esm/overrides/types.d.ts +1 -1
  24. package/lib/esm/utils/constants.d.ts +1 -0
  25. package/lib/esm/utils/constants.js +1 -0
  26. package/lib/esm/utils/constants.js.map +1 -1
  27. package/lib/esm/utils/index.d.ts +1 -0
  28. package/lib/esm/utils/index.js +1 -0
  29. package/lib/esm/utils/index.js.map +1 -1
  30. package/lib/esm/utils/serialization.d.ts +0 -41
  31. package/lib/esm/utils/serialization.js +1 -72
  32. package/lib/esm/utils/serialization.js.map +1 -1
  33. package/lib/esm/utils/serializers.d.ts +41 -0
  34. package/lib/esm/utils/serializers.js +73 -0
  35. package/lib/esm/utils/serializers.js.map +1 -0
  36. package/lib/esm/validation/Validation.js +1 -1
  37. package/lib/esm/validation/Validation.js.map +1 -1
  38. package/lib/esm/validation/Validators/constants.d.ts +1 -0
  39. package/lib/esm/validation/Validators/constants.js +1 -0
  40. package/lib/esm/validation/Validators/constants.js.map +1 -1
  41. package/lib/esm/validation/Validators/utils.js +1 -1
  42. package/lib/esm/validation/Validators/utils.js.map +1 -1
  43. package/lib/index.cjs +1 -1
  44. package/lib/index.d.ts +1 -1
  45. package/lib/model/Model.cjs +14 -255
  46. package/lib/model/Model.d.ts +0 -103
  47. package/lib/model/Model.js.map +1 -1
  48. package/lib/model/ModelRegistry.cjs +296 -0
  49. package/lib/model/ModelRegistry.d.ts +181 -0
  50. package/lib/model/ModelRegistry.js.map +1 -0
  51. package/lib/model/index.cjs +1 -0
  52. package/lib/model/index.d.ts +1 -0
  53. package/lib/model/index.js.map +1 -1
  54. package/lib/model/validation.cjs +6 -6
  55. package/lib/model/validation.d.ts +1 -1
  56. package/lib/model/validation.js.map +1 -1
  57. package/lib/overrides/Metadata.d.ts +4 -1
  58. package/lib/overrides/overrides.cjs +49 -0
  59. package/lib/overrides/overrides.js.map +1 -1
  60. package/lib/overrides/types.d.ts +1 -1
  61. package/lib/utils/constants.cjs +2 -1
  62. package/lib/utils/constants.d.ts +1 -0
  63. package/lib/utils/constants.js.map +1 -1
  64. package/lib/utils/index.cjs +1 -0
  65. package/lib/utils/index.d.ts +1 -0
  66. package/lib/utils/index.js.map +1 -1
  67. package/lib/utils/serialization.cjs +2 -74
  68. package/lib/utils/serialization.d.ts +0 -41
  69. package/lib/utils/serialization.js.map +1 -1
  70. package/lib/utils/serializers.cjs +77 -0
  71. package/lib/utils/serializers.d.ts +41 -0
  72. package/lib/utils/serializers.js.map +1 -0
  73. package/lib/validation/Validation.cjs +4 -4
  74. package/lib/validation/Validation.js.map +1 -1
  75. package/lib/validation/Validators/constants.cjs +1 -0
  76. package/lib/validation/Validators/constants.d.ts +1 -0
  77. package/lib/validation/Validators/constants.js.map +1 -1
  78. package/lib/validation/Validators/utils.cjs +6 -6
  79. package/lib/validation/Validators/utils.js.map +1 -1
  80. package/package.json +1 -1
@@ -2,126 +2,10 @@ import { Serialization } from "./../utils/serialization.js";
2
2
  import { validate } from "./validation.js";
3
3
  import { Hashing } from "./../utils/hashing.js";
4
4
  import { ModelKeys } from "./../utils/constants.js";
5
- import { ValidationKeys } from "./../validation/Validators/constants.js";
6
- import { jsTypes, ReservedModels } from "./constants.js";
7
5
  import { ASYNC_META_KEY } from "./../constants/index.js";
8
6
  import { Metadata } from "@decaf-ts/decoration";
9
7
  import { isEqual } from "./../utils/equality.js";
10
- let modelBuilderFunction;
11
- let actingModelRegistry;
12
- /**
13
- * @description Registry manager for model constructors that enables serialization and rebuilding
14
- * @summary The ModelRegistryManager implements the ModelRegistry interface and provides
15
- * functionality for registering, retrieving, and building model instances. It maintains
16
- * a cache of model constructors indexed by name, allowing for efficient lookup and instantiation.
17
- * This class is essential for the serialization and deserialization of model objects.
18
- *
19
- * @param {function(Record<string, any>): boolean} [testFunction] - Function to test if an object is a model, defaults to {@link Model#isModel}
20
- *
21
- * @class ModelRegistryManager
22
- * @template M Type of model that can be registered, must extend Model
23
- * @implements ModelRegistry<M>
24
- * @category Model
25
- *
26
- * @example
27
- * ```typescript
28
- * // Create a model registry
29
- * const registry = new ModelRegistryManager();
30
- *
31
- * // Register a model class
32
- * registry.register(User);
33
- *
34
- * // Retrieve a model constructor by name
35
- * const UserClass = registry.get("User");
36
- *
37
- * // Build a model instance from a plain object
38
- * const userData = { name: "John", age: 30 };
39
- * const user = registry.build(userData, "User");
40
- * ```
41
- *
42
- * @mermaid
43
- * sequenceDiagram
44
- * participant C as Client
45
- * participant R as ModelRegistryManager
46
- * participant M as Model Class
47
- *
48
- * C->>R: new ModelRegistryManager(testFunction)
49
- * C->>R: register(ModelClass)
50
- * R->>R: Store in cache
51
- * C->>R: get("ModelName")
52
- * R-->>C: ModelClass constructor
53
- * C->>R: build(data, "ModelName")
54
- * R->>R: Get constructor from cache
55
- * R->>M: new ModelClass(data)
56
- * M-->>R: Model instance
57
- * R-->>C: Model instance
58
- */
59
- export class ModelRegistryManager {
60
- constructor(testFunction = Model.isModel) {
61
- this.cache = {};
62
- this.testFunction = testFunction;
63
- }
64
- /**
65
- * @description Registers a model constructor with the registry
66
- * @summary Adds a model constructor to the registry cache, making it available for
67
- * later retrieval and instantiation. If no name is provided, the constructor's name
68
- * property is used as the key in the registry.
69
- *
70
- * @param {ModelConstructor<M>} constructor - The model constructor to register
71
- * @param {string} [name] - Optional name to register the constructor under, defaults to constructor.name
72
- * @return {void}
73
- * @throws {Error} If the constructor is not a function
74
- */
75
- register(constructor, name) {
76
- if (typeof constructor !== "function")
77
- throw new Error("Model registering failed. Missing Class name or constructor");
78
- name = name || constructor.name;
79
- this.cache[name] = constructor;
80
- }
81
- /**
82
- * @summary Gets a registered Model {@link ModelConstructor}
83
- * @param {string} name
84
- */
85
- get(name) {
86
- try {
87
- return this.cache[name];
88
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
89
- }
90
- catch (e) {
91
- return undefined;
92
- }
93
- }
94
- /**
95
- * @param {Record<string, any>} obj
96
- * @param {string} [clazz] when provided, it will attempt to find the matching constructor
97
- *
98
- * @throws Error If clazz is not found, or obj is not a {@link Model} meaning it has no {@link ModelKeys.ANCHOR} property
99
- */
100
- build(obj = {}, clazz) {
101
- if (!clazz && !this.testFunction(obj))
102
- throw new Error("Provided obj is not a Model object");
103
- const name = clazz || Metadata.modelName(obj.constructor);
104
- if (!(name in this.cache))
105
- throw new Error(`Provided class ${name} is not a registered Model object`);
106
- return new this.cache[name](obj);
107
- }
108
- }
109
- /**
110
- * @summary Bulk Registers Models
111
- * @description Useful when using bundlers that might not evaluate all the code at once
112
- *
113
- * @template M extends Model
114
- * @param {Array<Constructor<M>> | Array<{name: string, constructor: Constructor<M>}>} [models]
115
- *
116
- * @memberOf module:decorator-validation
117
- * @category Model
118
- */
119
- export function bulkModelRegister(...models) {
120
- models.forEach((m) => {
121
- const constructor = (m.constructor ? m.constructor : m);
122
- Model.register(constructor, m.name);
123
- });
124
- }
8
+ import { ModelRegistryManager } from "./ModelRegistry.js";
125
9
  /**
126
10
  * @summary Abstract class representing a Validatable Model object
127
11
  * @description Meant to be used as a base class for all Model classes
@@ -333,91 +217,7 @@ export class Model {
333
217
  * M-->>C: Return updated self
334
218
  */
335
219
  static fromModel(self, obj) {
336
- if (!obj)
337
- obj = {};
338
- let decorators;
339
- const props = Model.getAttributes(self);
340
- const proto = Object.getPrototypeOf(self);
341
- let descriptor;
342
- for (const prop of props) {
343
- try {
344
- self[prop] =
345
- obj[prop] ??
346
- self[prop] ??
347
- undefined;
348
- }
349
- catch (e) {
350
- descriptor = Object.getOwnPropertyDescriptor(proto, prop);
351
- if (!descriptor || descriptor.writable)
352
- throw new Error(`Unable to write property ${prop} to model: ${e}`);
353
- }
354
- if (typeof self[prop] !== "object")
355
- continue;
356
- const propM = Model.isPropertyModel(self, prop);
357
- if (propM) {
358
- try {
359
- self[prop] = Model.build(self[prop], typeof propM === "string" ? propM : undefined);
360
- }
361
- catch (e) {
362
- console.log(e);
363
- }
364
- continue;
365
- }
366
- decorators = Metadata.allowedTypes(self.constructor, prop);
367
- if (!decorators || !decorators.length)
368
- throw new Error(`failed to find decorators for property ${prop}`);
369
- const clazz = decorators.map((t) => typeof t === "function" && !t.name ? t() : t);
370
- const reserved = Object.values(ReservedModels);
371
- clazz.forEach((c) => {
372
- if (!reserved.includes(c))
373
- try {
374
- switch (c.name) {
375
- case "Array":
376
- case "Set": {
377
- const validation = Metadata.validationFor(self.constructor, prop);
378
- if (!validation || !validation[ValidationKeys.LIST])
379
- break;
380
- const listDec = validation[ValidationKeys.LIST];
381
- const clazzName = listDec.clazz
382
- .map((t) => typeof t === "function" && !t.name
383
- ? t()
384
- : t)
385
- .find((t) => !jsTypes.includes(t.name));
386
- if (c.name === "Array")
387
- self[prop] = self[prop].map((el) => {
388
- return ["object", "function"].includes(typeof el) &&
389
- clazzName
390
- ? Model.build(el, clazzName.name)
391
- : el;
392
- });
393
- if (c.name === "Set") {
394
- const s = new Set();
395
- for (const v of self[prop]) {
396
- if (["object", "function"].includes(typeof v) &&
397
- clazzName) {
398
- s.add(Model.build(v, clazzName.name));
399
- }
400
- else {
401
- s.add(v);
402
- }
403
- }
404
- self[prop] = s;
405
- }
406
- break;
407
- }
408
- default:
409
- if (typeof self[prop] !== "undefined" &&
410
- Model.get(c.name))
411
- self[prop] = Model.build(self[prop], c.name);
412
- }
413
- }
414
- catch (e) {
415
- console.log(e);
416
- // do nothing. we have no registry of this class
417
- }
418
- });
419
- }
420
- return self;
220
+ return ModelRegistryManager.fromModel(self, obj);
421
221
  }
422
222
  /**
423
223
  * @description Configures the global model builder function
@@ -427,7 +227,7 @@ export class Model {
427
227
  * @return {void}
428
228
  */
429
229
  static setBuilder(builder) {
430
- modelBuilderFunction = builder;
230
+ ModelRegistryManager.setBuilder(builder);
431
231
  }
432
232
  /**
433
233
  * @description Retrieves the currently configured global model builder function
@@ -436,7 +236,7 @@ export class Model {
436
236
  * @return {ModelBuilderFunction | undefined} - The current global builder function or undefined if not set
437
237
  */
438
238
  static getBuilder() {
439
- return modelBuilderFunction || Model.fromModel;
239
+ return ModelRegistryManager.getBuilder();
440
240
  }
441
241
  /**
442
242
  * @description Provides access to the current model registry
@@ -446,9 +246,7 @@ export class Model {
446
246
  * @private
447
247
  */
448
248
  static getRegistry() {
449
- if (!actingModelRegistry)
450
- actingModelRegistry = new ModelRegistryManager();
451
- return actingModelRegistry;
249
+ return ModelRegistryManager.getRegistry();
452
250
  }
453
251
  /**
454
252
  * @description Configures the model registry to be used by the Model system
@@ -458,7 +256,7 @@ export class Model {
458
256
  * @return {void}
459
257
  */
460
258
  static setRegistry(modelRegistry) {
461
- actingModelRegistry = modelRegistry;
259
+ ModelRegistryManager.setRegistry(modelRegistry);
462
260
  }
463
261
  /**
464
262
  * @description Registers a model constructor with the model registry
@@ -472,7 +270,7 @@ export class Model {
472
270
  * @see ModelRegistry
473
271
  */
474
272
  static register(constructor, name) {
475
- return Model.getRegistry().register(constructor, name);
273
+ return ModelRegistryManager.getRegistry().register(constructor, name);
476
274
  }
477
275
  /**
478
276
  * @description Retrieves a registered model constructor by name
@@ -485,7 +283,7 @@ export class Model {
485
283
  * @see ModelRegistry
486
284
  */
487
285
  static get(name) {
488
- return Model.getRegistry().get(name);
286
+ return ModelRegistryManager.getRegistry().get(name);
489
287
  }
490
288
  /**
491
289
  * @description Creates a model instance from a plain object
@@ -511,23 +309,7 @@ export class Model {
511
309
  * @return {string[]} - Array of attribute names defined in the model
512
310
  */
513
311
  static getAttributes(model) {
514
- const constructor = model instanceof Model ? model.constructor : model;
515
- const seen = new Set();
516
- const collect = (current) => {
517
- if (!current)
518
- return [];
519
- const parent = Object.getPrototypeOf(current);
520
- const attributes = collect(parent);
521
- const props = Metadata.properties(current) ?? [];
522
- for (const prop of props) {
523
- if (!seen.has(prop)) {
524
- seen.add(prop);
525
- attributes.push(prop);
526
- }
527
- }
528
- return attributes;
529
- };
530
- return collect(constructor);
312
+ return Metadata.getAttributes(model);
531
313
  }
532
314
  /**
533
315
  * @description Compares two model instances for equality
@@ -612,22 +394,7 @@ export class Model {
612
394
  * ```
613
395
  */
614
396
  static isModel(target) {
615
- try {
616
- if (target instanceof Model)
617
- return true;
618
- const constr = Metadata.constr(target);
619
- if (!constr || constr === target)
620
- return false;
621
- return !!Metadata.modelName(constr);
622
- //
623
- // // return target instanceof Model || !!Metadata.modelName(target as any);
624
- // const modelName = Metadata.modelName(target as any);
625
- // return target instanceof Model || !!Model.get(modelName);
626
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
627
- }
628
- catch (e) {
629
- return false;
630
- }
397
+ return Metadata.isModel(target);
631
398
  }
632
399
  /**
633
400
  * @description Checks if a property of a model is itself a model or has a model type
@@ -641,13 +408,7 @@ export class Model {
641
408
  * the model name if the property has a model type, or undefined if not a model
642
409
  */
643
410
  static isPropertyModel(target, attribute) {
644
- const isModel = Model.isModel(target[attribute]);
645
- if (isModel)
646
- return true;
647
- const metadata = Metadata.type(target.constructor, attribute);
648
- if (!metadata)
649
- return undefined;
650
- return Model.get(metadata.name) ? metadata.name : undefined;
411
+ return Metadata.isPropertyModel(target, attribute);
651
412
  }
652
413
  static describe(model, key) {
653
414
  return Metadata.description(model, key);
@@ -1 +1 @@
1
- {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../../src/model/Model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../../src/model/Model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ import { Constructor } from "@decaf-ts/decoration";
2
+ import { ModelBuilderFunction, ModelConstructor } from "./types";
3
+ import { type Model } from "./Model";
4
+ import { BuilderRegistry } from "../utils/registry";
5
+ /**
6
+ * @description Registry type for storing and retrieving model constructors
7
+ * @summary The ModelRegistry type defines a registry for model constructors that extends
8
+ * the BuilderRegistry interface. It provides a standardized way to register, retrieve,
9
+ * and build model instances, enabling the model system to work with different types of models.
10
+ *
11
+ * @interface ModelRegistry
12
+ * @template T Type of model that can be registered, must extend Model
13
+ * @extends BuilderRegistry<T>
14
+ * @memberOf module:decorator-validation
15
+ * @category Model
16
+ */
17
+ export type ModelRegistry<T extends Model> = BuilderRegistry<T>;
18
+ /**
19
+ * @description Registry manager for model constructors that enables serialization and rebuilding
20
+ * @summary The ModelRegistryManager implements the ModelRegistry interface and provides
21
+ * functionality for registering, retrieving, and building model instances. It maintains
22
+ * a cache of model constructors indexed by name, allowing for efficient lookup and instantiation.
23
+ * This class is essential for the serialization and deserialization of model objects.
24
+ *
25
+ * @param {function(Record<string, any>): boolean} [testFunction] - Function to test if an object is a model, defaults to {@link Model#isModel}
26
+ *
27
+ * @class ModelRegistryManager
28
+ * @template M Type of model that can be registered, must extend Model
29
+ * @implements ModelRegistry<M>
30
+ * @category Model
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * // Create a model registry
35
+ * const registry = new ModelRegistryManager();
36
+ *
37
+ * // Register a model class
38
+ * registry.register(User);
39
+ *
40
+ * // Retrieve a model constructor by name
41
+ * const UserClass = registry.get("User");
42
+ *
43
+ * // Build a model instance from a plain object
44
+ * const userData = { name: "John", age: 30 };
45
+ * const user = registry.build(userData, "User");
46
+ * ```
47
+ *
48
+ * @mermaid
49
+ * sequenceDiagram
50
+ * participant C as Client
51
+ * participant R as ModelRegistryManager
52
+ * participant M as Model Class
53
+ *
54
+ * C->>R: new ModelRegistryManager(testFunction)
55
+ * C->>R: register(ModelClass)
56
+ * R->>R: Store in cache
57
+ * C->>R: get("ModelName")
58
+ * R-->>C: ModelClass constructor
59
+ * C->>R: build(data, "ModelName")
60
+ * R->>R: Get constructor from cache
61
+ * R->>M: new ModelClass(data)
62
+ * M-->>R: Model instance
63
+ * R-->>C: Model instance
64
+ */
65
+ export declare class ModelRegistryManager<M extends Model<true | false>> implements ModelRegistry<M> {
66
+ private cache;
67
+ private readonly testFunction;
68
+ constructor(testFunction?: (obj: Record<string, any>) => boolean);
69
+ /**
70
+ * @description Registers a model constructor with the registry
71
+ * @summary Adds a model constructor to the registry cache, making it available for
72
+ * later retrieval and instantiation. If no name is provided, the constructor's name
73
+ * property is used as the key in the registry.
74
+ *
75
+ * @param {ModelConstructor<M>} constructor - The model constructor to register
76
+ * @param {string} [name] - Optional name to register the constructor under, defaults to constructor.name
77
+ * @return {void}
78
+ * @throws {Error} If the constructor is not a function
79
+ */
80
+ register(constructor: ModelConstructor<M>, name?: string): void;
81
+ /**
82
+ * @summary Gets a registered Model {@link ModelConstructor}
83
+ * @param {string} name
84
+ */
85
+ get(name: string): ModelConstructor<M> | undefined;
86
+ /**
87
+ * @param {Record<string, any>} obj
88
+ * @param {string} [clazz] when provided, it will attempt to find the matching constructor
89
+ *
90
+ * @throws Error If clazz is not found, or obj is not a {@link Model} meaning it has no {@link ModelKeys.ANCHOR} property
91
+ */
92
+ build(obj?: Record<string, any>, clazz?: string): M;
93
+ /**
94
+ * @description Configures the global model builder function
95
+ * @summary Sets the Global {@link ModelBuilderFunction} used for building model instances
96
+ *
97
+ * @param {ModelBuilderFunction} [builder] - The builder function to set as the global builder
98
+ * @return {void}
99
+ */
100
+ static setBuilder(builder?: ModelBuilderFunction): void;
101
+ /**
102
+ * @description Retrieves the currently configured global model builder function
103
+ * @summary Returns the current global {@link ModelBuilderFunction} used for building model instances
104
+ *
105
+ * @return {ModelBuilderFunction | undefined} - The current global builder function or undefined if not set
106
+ */
107
+ static getBuilder(): ModelBuilderFunction | undefined;
108
+ /**
109
+ * @description Copies and rebuilds properties from a source object to a model instance, handling nested models
110
+ * @summary Repopulates the instance with properties from the new Model Object, recursively rebuilding nested models
111
+ *
112
+ * @template T
113
+ * @param {T} self - The target model instance to update
114
+ * @param {T | Record<string, any>} [obj] - The source object containing properties to copy
115
+ * @return {T} - The updated model instance with rebuilt nested models
116
+ *
117
+ * @mermaid
118
+ * sequenceDiagram
119
+ * participant C as Client
120
+ * participant M as Model.fromModel
121
+ * participant B as Model.build
122
+ * participant R as Reflection
123
+ *
124
+ * C->>M: fromModel(self, obj)
125
+ * M->>M: Get attributes from self
126
+ * loop For each property
127
+ * M->>M: Copy property from obj to self
128
+ * alt Property is a model
129
+ * M->>M: Check if property is a model
130
+ * M->>B: build(property, modelType)
131
+ * B-->>M: Return built model
132
+ * else Property is a complex type
133
+ * M->>R: Get property decorators
134
+ * R-->>M: Return decorators
135
+ * M->>M: Filter type decorators
136
+ * alt Property is Array/Set with list decorator
137
+ * M->>M: Process each item in collection
138
+ * loop For each item
139
+ * M->>B: build(item, itemModelType)
140
+ * B-->>M: Return built model
141
+ * end
142
+ * else Property is another model type
143
+ * M->>B: build(property, propertyType)
144
+ * B-->>M: Return built model
145
+ * end
146
+ * end
147
+ * end
148
+ * M-->>C: Return updated self
149
+ */
150
+ static fromModel<T extends Model>(self: T, obj?: T | Record<string, any>): T;
151
+ /**
152
+ * @description Provides access to the current model registry
153
+ * @summary Returns the current {@link ModelRegistryManager} instance, creating one if it doesn't exist
154
+ *
155
+ * @return {ModelRegistry<any>} - The current model registry, defaults to a new {@link ModelRegistryManager} if not set
156
+ * @private
157
+ */
158
+ static getRegistry(): BuilderRegistry<any>;
159
+ /**
160
+ * @description Configures the model registry to be used by the Model system
161
+ * @summary Sets the current model registry to a custom implementation
162
+ *
163
+ * @param {BuilderRegistry<any>} modelRegistry - The new implementation of Registry to use
164
+ * @return {void}
165
+ */
166
+ static setRegistry(modelRegistry: BuilderRegistry<any>): void;
167
+ }
168
+ /**
169
+ * @summary Bulk Registers Models
170
+ * @description Useful when using bundlers that might not evaluate all the code at once
171
+ *
172
+ * @template M extends Model
173
+ * @param {Array<Constructor<M>> | Array<{name: string, constructor: Constructor<M>}>} [models]
174
+ *
175
+ * @memberOf module:decorator-validation
176
+ * @category Model
177
+ */
178
+ export declare function bulkModelRegister<M extends Model>(...models: (Constructor<M> | {
179
+ name: string;
180
+ constructor: Constructor<M>;
181
+ })[]): void;