@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.
- package/README.md +1 -1
- package/dist/decorator-validation.cjs +1 -1
- package/dist/decorator-validation.cjs.map +1 -1
- package/dist/decorator-validation.js +1 -1
- package/dist/decorator-validation.js.map +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/model/Model.d.ts +0 -103
- package/lib/esm/model/Model.js +11 -250
- package/lib/esm/model/Model.js.map +1 -1
- package/lib/esm/model/ModelRegistry.d.ts +181 -0
- package/lib/esm/model/ModelRegistry.js +291 -0
- package/lib/esm/model/ModelRegistry.js.map +1 -0
- package/lib/esm/model/index.d.ts +1 -0
- package/lib/esm/model/index.js +1 -0
- package/lib/esm/model/index.js.map +1 -1
- package/lib/esm/model/validation.d.ts +1 -1
- package/lib/esm/model/validation.js +6 -6
- package/lib/esm/model/validation.js.map +1 -1
- package/lib/esm/overrides/Metadata.d.ts +4 -1
- package/lib/esm/overrides/overrides.js +49 -0
- package/lib/esm/overrides/overrides.js.map +1 -1
- package/lib/esm/overrides/types.d.ts +1 -1
- package/lib/esm/utils/constants.d.ts +1 -0
- package/lib/esm/utils/constants.js +1 -0
- package/lib/esm/utils/constants.js.map +1 -1
- package/lib/esm/utils/index.d.ts +1 -0
- package/lib/esm/utils/index.js +1 -0
- package/lib/esm/utils/index.js.map +1 -1
- package/lib/esm/utils/serialization.d.ts +0 -41
- package/lib/esm/utils/serialization.js +1 -72
- package/lib/esm/utils/serialization.js.map +1 -1
- package/lib/esm/utils/serializers.d.ts +41 -0
- package/lib/esm/utils/serializers.js +73 -0
- package/lib/esm/utils/serializers.js.map +1 -0
- package/lib/esm/validation/Validation.js +1 -1
- package/lib/esm/validation/Validation.js.map +1 -1
- package/lib/esm/validation/Validators/constants.d.ts +1 -0
- package/lib/esm/validation/Validators/constants.js +1 -0
- package/lib/esm/validation/Validators/constants.js.map +1 -1
- package/lib/esm/validation/Validators/utils.js +1 -1
- package/lib/esm/validation/Validators/utils.js.map +1 -1
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/model/Model.cjs +14 -255
- package/lib/model/Model.d.ts +0 -103
- package/lib/model/Model.js.map +1 -1
- package/lib/model/ModelRegistry.cjs +296 -0
- package/lib/model/ModelRegistry.d.ts +181 -0
- package/lib/model/ModelRegistry.js.map +1 -0
- package/lib/model/index.cjs +1 -0
- package/lib/model/index.d.ts +1 -0
- package/lib/model/index.js.map +1 -1
- package/lib/model/validation.cjs +6 -6
- package/lib/model/validation.d.ts +1 -1
- package/lib/model/validation.js.map +1 -1
- package/lib/overrides/Metadata.d.ts +4 -1
- package/lib/overrides/overrides.cjs +49 -0
- package/lib/overrides/overrides.js.map +1 -1
- package/lib/overrides/types.d.ts +1 -1
- package/lib/utils/constants.cjs +2 -1
- package/lib/utils/constants.d.ts +1 -0
- package/lib/utils/constants.js.map +1 -1
- package/lib/utils/index.cjs +1 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/serialization.cjs +2 -74
- package/lib/utils/serialization.d.ts +0 -41
- package/lib/utils/serialization.js.map +1 -1
- package/lib/utils/serializers.cjs +77 -0
- package/lib/utils/serializers.d.ts +41 -0
- package/lib/utils/serializers.js.map +1 -0
- package/lib/validation/Validation.cjs +4 -4
- package/lib/validation/Validation.js.map +1 -1
- package/lib/validation/Validators/constants.cjs +1 -0
- package/lib/validation/Validators/constants.d.ts +1 -0
- package/lib/validation/Validators/constants.js.map +1 -1
- package/lib/validation/Validators/utils.cjs +6 -6
- package/lib/validation/Validators/utils.js.map +1 -1
- package/package.json +1 -1
package/lib/esm/model/Model.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|