@decaf-ts/decorator-validation 1.5.2 → 1.5.5

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 (174) hide show
  1. package/LICENSE.md +0 -0
  2. package/README.md +34 -108
  3. package/dist/decorator-validation.js +2 -0
  4. package/dist/decorator-validation.js.LICENSE.txt +14 -0
  5. package/dist/esm/decorator-validation.js +2 -0
  6. package/dist/esm/decorator-validation.js.LICENSE.txt +14 -0
  7. package/lib/esm/index.d.ts +42 -0
  8. package/lib/esm/index.js +44 -0
  9. package/lib/esm/model/Model.d.ts +138 -0
  10. package/lib/esm/model/Model.js +298 -0
  11. package/lib/esm/model/ModelErrorDefinition.d.ts +22 -0
  12. package/lib/esm/model/ModelErrorDefinition.js +54 -0
  13. package/lib/esm/model/Registry.d.ts +59 -0
  14. package/lib/esm/model/Registry.js +75 -0
  15. package/lib/esm/model/constants.d.ts +56 -0
  16. package/lib/esm/model/constants.js +71 -0
  17. package/lib/esm/model/construction.d.ts +29 -0
  18. package/lib/esm/model/construction.js +65 -0
  19. package/lib/esm/model/decorators.d.ts +25 -0
  20. package/lib/esm/model/decorators.js +64 -0
  21. package/lib/esm/model/index.d.ts +9 -0
  22. package/lib/esm/model/index.js +11 -0
  23. package/lib/esm/model/types.d.ts +79 -0
  24. package/lib/esm/model/types.js +3 -0
  25. package/lib/esm/model/utils.d.ts +11 -0
  26. package/lib/esm/model/utils.js +27 -0
  27. package/lib/esm/model/validation.d.ts +14 -0
  28. package/lib/esm/model/validation.js +137 -0
  29. package/lib/esm/utils/constants.d.ts +26 -0
  30. package/lib/esm/utils/constants.js +29 -0
  31. package/lib/esm/utils/dates.d.ts +76 -0
  32. package/lib/esm/utils/dates.js +245 -0
  33. package/lib/esm/utils/decorators.d.ts +2 -0
  34. package/lib/esm/utils/decorators.js +20 -0
  35. package/lib/esm/utils/hashing.d.ts +52 -0
  36. package/lib/esm/utils/hashing.js +101 -0
  37. package/lib/esm/utils/index.d.ts +7 -0
  38. package/lib/esm/utils/index.js +9 -0
  39. package/lib/esm/utils/registry.d.ts +68 -0
  40. package/lib/esm/utils/registry.js +3 -0
  41. package/lib/esm/utils/serialization.d.ts +79 -0
  42. package/lib/esm/utils/serialization.js +90 -0
  43. package/lib/esm/utils/strings.d.ts +25 -0
  44. package/lib/esm/utils/strings.js +33 -0
  45. package/lib/esm/validation/Validation.d.ts +51 -0
  46. package/lib/esm/validation/Validation.js +73 -0
  47. package/lib/esm/validation/Validators/DateValidator.d.ts +28 -0
  48. package/lib/esm/validation/Validators/DateValidator.js +56 -0
  49. package/lib/esm/validation/Validators/EmailValidator.d.ts +28 -0
  50. package/lib/esm/validation/Validators/EmailValidator.js +52 -0
  51. package/lib/esm/validation/Validators/ListValidator.d.ts +28 -0
  52. package/lib/esm/validation/Validators/ListValidator.js +69 -0
  53. package/lib/esm/validation/Validators/MaxLengthValidator.d.ts +29 -0
  54. package/lib/esm/validation/Validators/MaxLengthValidator.js +54 -0
  55. package/lib/esm/validation/Validators/MaxValidator.d.ts +28 -0
  56. package/lib/esm/validation/Validators/MaxValidator.js +59 -0
  57. package/lib/esm/validation/Validators/MinLengthValidator.d.ts +29 -0
  58. package/lib/esm/validation/Validators/MinLengthValidator.js +54 -0
  59. package/lib/esm/validation/Validators/MinValidator.d.ts +28 -0
  60. package/lib/esm/validation/Validators/MinValidator.js +59 -0
  61. package/lib/esm/validation/Validators/PasswordValidator.d.ts +28 -0
  62. package/lib/esm/validation/Validators/PasswordValidator.js +52 -0
  63. package/lib/esm/validation/Validators/PatternValidator.d.ts +37 -0
  64. package/lib/esm/validation/Validators/PatternValidator.js +72 -0
  65. package/lib/esm/validation/Validators/RequiredValidator.d.ts +28 -0
  66. package/lib/esm/validation/Validators/RequiredValidator.js +59 -0
  67. package/lib/esm/validation/Validators/StepValidator.d.ts +29 -0
  68. package/lib/esm/validation/Validators/StepValidator.js +54 -0
  69. package/lib/esm/validation/Validators/TypeValidator.d.ts +25 -0
  70. package/lib/esm/validation/Validators/TypeValidator.js +62 -0
  71. package/lib/esm/validation/Validators/URLValidator.d.ts +27 -0
  72. package/lib/esm/validation/Validators/URLValidator.js +51 -0
  73. package/lib/esm/validation/Validators/Validator.d.ts +41 -0
  74. package/lib/esm/validation/Validators/Validator.js +49 -0
  75. package/lib/esm/validation/Validators/ValidatorRegistry.d.ts +47 -0
  76. package/lib/esm/validation/Validators/ValidatorRegistry.js +82 -0
  77. package/lib/esm/validation/Validators/constants.d.ts +96 -0
  78. package/lib/esm/validation/Validators/constants.js +136 -0
  79. package/lib/esm/validation/Validators/decorators.d.ts +12 -0
  80. package/lib/esm/validation/Validators/decorators.js +27 -0
  81. package/lib/esm/validation/Validators/index.d.ts +52 -0
  82. package/lib/esm/validation/Validators/index.js +54 -0
  83. package/lib/esm/validation/Validators/types.d.ts +88 -0
  84. package/lib/esm/validation/Validators/types.js +3 -0
  85. package/lib/esm/validation/decorators.d.ts +178 -0
  86. package/lib/esm/validation/decorators.js +290 -0
  87. package/lib/esm/validation/index.d.ts +4 -0
  88. package/lib/esm/validation/index.js +6 -0
  89. package/lib/esm/validation/types.d.ts +46 -0
  90. package/lib/esm/validation/types.js +3 -0
  91. package/lib/index.cjs +61 -0
  92. package/lib/index.d.ts +42 -0
  93. package/lib/model/Model.cjs +302 -0
  94. package/lib/model/Model.d.ts +138 -0
  95. package/lib/model/ModelErrorDefinition.cjs +58 -0
  96. package/lib/model/ModelErrorDefinition.d.ts +22 -0
  97. package/lib/model/Registry.cjs +80 -0
  98. package/lib/model/Registry.d.ts +59 -0
  99. package/lib/model/constants.cjs +74 -0
  100. package/lib/model/constants.d.ts +56 -0
  101. package/lib/model/construction.cjs +70 -0
  102. package/lib/model/construction.d.ts +29 -0
  103. package/lib/model/decorators.cjs +69 -0
  104. package/lib/model/decorators.d.ts +25 -0
  105. package/lib/model/index.cjs +27 -0
  106. package/lib/model/index.d.ts +9 -0
  107. package/lib/model/types.cjs +4 -0
  108. package/lib/model/types.d.ts +79 -0
  109. package/lib/model/utils.cjs +31 -0
  110. package/lib/model/utils.d.ts +11 -0
  111. package/lib/model/validation.cjs +140 -0
  112. package/lib/model/validation.d.ts +14 -0
  113. package/lib/utils/constants.cjs +32 -0
  114. package/lib/utils/constants.d.ts +26 -0
  115. package/lib/utils/dates.cjs +253 -0
  116. package/lib/utils/dates.d.ts +76 -0
  117. package/lib/utils/decorators.cjs +24 -0
  118. package/lib/utils/decorators.d.ts +2 -0
  119. package/lib/utils/hashing.cjs +108 -0
  120. package/lib/utils/hashing.d.ts +52 -0
  121. package/lib/utils/index.cjs +25 -0
  122. package/lib/utils/index.d.ts +7 -0
  123. package/lib/utils/registry.cjs +4 -0
  124. package/lib/utils/registry.d.ts +68 -0
  125. package/lib/utils/serialization.cjs +95 -0
  126. package/lib/utils/serialization.d.ts +79 -0
  127. package/lib/utils/strings.cjs +37 -0
  128. package/lib/utils/strings.d.ts +25 -0
  129. package/lib/validation/Validation.cjs +77 -0
  130. package/lib/validation/Validation.d.ts +51 -0
  131. package/lib/validation/Validators/DateValidator.cjs +59 -0
  132. package/lib/validation/Validators/DateValidator.d.ts +28 -0
  133. package/lib/validation/Validators/EmailValidator.cjs +55 -0
  134. package/lib/validation/Validators/EmailValidator.d.ts +28 -0
  135. package/lib/validation/Validators/ListValidator.cjs +72 -0
  136. package/lib/validation/Validators/ListValidator.d.ts +28 -0
  137. package/lib/validation/Validators/MaxLengthValidator.cjs +57 -0
  138. package/lib/validation/Validators/MaxLengthValidator.d.ts +29 -0
  139. package/lib/validation/Validators/MaxValidator.cjs +62 -0
  140. package/lib/validation/Validators/MaxValidator.d.ts +28 -0
  141. package/lib/validation/Validators/MinLengthValidator.cjs +57 -0
  142. package/lib/validation/Validators/MinLengthValidator.d.ts +29 -0
  143. package/lib/validation/Validators/MinValidator.cjs +62 -0
  144. package/lib/validation/Validators/MinValidator.d.ts +28 -0
  145. package/lib/validation/Validators/PasswordValidator.cjs +55 -0
  146. package/lib/validation/Validators/PasswordValidator.d.ts +28 -0
  147. package/lib/validation/Validators/PatternValidator.cjs +75 -0
  148. package/lib/validation/Validators/PatternValidator.d.ts +37 -0
  149. package/lib/validation/Validators/RequiredValidator.cjs +62 -0
  150. package/lib/validation/Validators/RequiredValidator.d.ts +28 -0
  151. package/lib/validation/Validators/StepValidator.cjs +57 -0
  152. package/lib/validation/Validators/StepValidator.d.ts +29 -0
  153. package/lib/validation/Validators/TypeValidator.cjs +65 -0
  154. package/lib/validation/Validators/TypeValidator.d.ts +25 -0
  155. package/lib/validation/Validators/URLValidator.cjs +54 -0
  156. package/lib/validation/Validators/URLValidator.d.ts +27 -0
  157. package/lib/validation/Validators/Validator.cjs +53 -0
  158. package/lib/validation/Validators/Validator.d.ts +41 -0
  159. package/lib/validation/Validators/ValidatorRegistry.cjs +87 -0
  160. package/lib/validation/Validators/ValidatorRegistry.d.ts +47 -0
  161. package/lib/validation/Validators/constants.cjs +139 -0
  162. package/lib/validation/Validators/constants.d.ts +96 -0
  163. package/lib/validation/Validators/decorators.cjs +30 -0
  164. package/lib/validation/Validators/decorators.d.ts +12 -0
  165. package/lib/validation/Validators/index.cjs +71 -0
  166. package/lib/validation/Validators/index.d.ts +52 -0
  167. package/lib/validation/Validators/types.d.ts +88 -0
  168. package/lib/validation/decorators.cjs +306 -0
  169. package/lib/validation/decorators.d.ts +178 -0
  170. package/lib/validation/index.cjs +22 -0
  171. package/lib/validation/index.d.ts +4 -0
  172. package/lib/validation/types.cjs +4 -0
  173. package/lib/validation/types.d.ts +46 -0
  174. package/package.json +18 -13
@@ -0,0 +1,59 @@
1
+ import { Model } from "./Model";
2
+ import { BuilderRegistry } from "../utils/registry";
3
+ import { Constructor, ModelConstructor } from "./types";
4
+ /**
5
+ * @summary ModelRegistry Interface
6
+ *
7
+ * @interface ModelRegistry
8
+ * @extends BuilderRegistry<Model>
9
+ *
10
+ * @category Model
11
+ */
12
+ export type ModelRegistry<T extends Model> = BuilderRegistry<T>;
13
+ /**
14
+ * @summary Util class to enable serialization and correct rebuilding
15
+ *
16
+ * @param {string} anchorKey defaults to {@link ModelKeys.ANCHOR}. The property name where the registered class name is stored;
17
+ * @param {function(Record<string, any>): boolean} [testFunction] method to test if the provided object is a Model Object. defaults to {@link isModel}
18
+ *
19
+ * @class ModelRegistryManager
20
+ * @implements ModelRegistry
21
+ *
22
+ * @category Model
23
+ */
24
+ export declare class ModelRegistryManager<T extends Model> implements ModelRegistry<T> {
25
+ private cache;
26
+ private readonly testFunction;
27
+ constructor(testFunction?: (obj: Record<string, any>) => boolean);
28
+ /**
29
+ * @summary register new Models
30
+ * @param {any} constructor
31
+ * @param {string} [name] when not defined, the name of the constructor will be used
32
+ */
33
+ register(constructor: ModelConstructor<T>, name?: string): void;
34
+ /**
35
+ * @summary Gets a registered Model {@link ModelConstructor}
36
+ * @param {string} name
37
+ */
38
+ get(name: string): ModelConstructor<T> | undefined;
39
+ /**
40
+ * @param {Record<string, any>} obj
41
+ * @param {string} [clazz] when provided, it will attempt to find the matching constructor
42
+ *
43
+ * @throws Error If clazz is not found, or obj is not a {@link Model} meaning it has no {@link ModelKeys.ANCHOR} property
44
+ */
45
+ build(obj?: Record<string, any>, clazz?: string): T;
46
+ }
47
+ /**
48
+ * @summary Bulk Registers Models
49
+ * @description Useful when using bundlers that might not evaluate all the code at once
50
+ *
51
+ * @param {Array<Constructor<T>> | Array<{name: string, constructor: Constructor<T>}>} [models]
52
+ *
53
+ * @memberOf module:decorator-validation.Model
54
+ * @category Model
55
+ */
56
+ export declare function bulkModelRegister<T extends Model>(...models: (Constructor<T> | {
57
+ name: string;
58
+ constructor: Constructor<T>;
59
+ })[]): void;
@@ -0,0 +1,75 @@
1
+ import { Model } from "./Model";
2
+ import { sf } from "../utils/strings";
3
+ import { isModel } from "./utils";
4
+ /**
5
+ * @summary Util class to enable serialization and correct rebuilding
6
+ *
7
+ * @param {string} anchorKey defaults to {@link ModelKeys.ANCHOR}. The property name where the registered class name is stored;
8
+ * @param {function(Record<string, any>): boolean} [testFunction] method to test if the provided object is a Model Object. defaults to {@link isModel}
9
+ *
10
+ * @class ModelRegistryManager
11
+ * @implements ModelRegistry
12
+ *
13
+ * @category Model
14
+ */
15
+ export class ModelRegistryManager {
16
+ constructor(testFunction = isModel) {
17
+ this.cache = {};
18
+ this.testFunction = testFunction;
19
+ }
20
+ /**
21
+ * @summary register new Models
22
+ * @param {any} constructor
23
+ * @param {string} [name] when not defined, the name of the constructor will be used
24
+ */
25
+ register(constructor, name) {
26
+ if (typeof constructor !== "function")
27
+ throw new Error("Model registering failed. Missing Class name or constructor");
28
+ name = name || constructor.name;
29
+ this.cache[name] = constructor;
30
+ }
31
+ /**
32
+ * @summary Gets a registered Model {@link ModelConstructor}
33
+ * @param {string} name
34
+ */
35
+ get(name) {
36
+ try {
37
+ return this.cache[name];
38
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
39
+ }
40
+ catch (e) {
41
+ return undefined;
42
+ }
43
+ }
44
+ /**
45
+ * @param {Record<string, any>} obj
46
+ * @param {string} [clazz] when provided, it will attempt to find the matching constructor
47
+ *
48
+ * @throws Error If clazz is not found, or obj is not a {@link Model} meaning it has no {@link ModelKeys.ANCHOR} property
49
+ */
50
+ build(obj = {}, clazz) {
51
+ if (!clazz && !this.testFunction(obj))
52
+ throw new Error("Provided obj is not a Model object");
53
+ const name = clazz || Model.getMetadata(obj);
54
+ if (!(name in this.cache))
55
+ throw new Error(sf("Provided class {0} is not a registered Model object", name));
56
+ return new this.cache[name](obj);
57
+ }
58
+ }
59
+ /**
60
+ * @summary Bulk Registers Models
61
+ * @description Useful when using bundlers that might not evaluate all the code at once
62
+ *
63
+ * @param {Array<Constructor<T>> | Array<{name: string, constructor: Constructor<T>}>} [models]
64
+ *
65
+ * @memberOf module:decorator-validation.Model
66
+ * @category Model
67
+ */
68
+ export function bulkModelRegister(...models) {
69
+ models.forEach((m) => {
70
+ const constructor = (m.constructor ? m.constructor : m);
71
+ Model.register(constructor, m.name);
72
+ });
73
+ }
74
+
75
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9SZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBR2hDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBWWxDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLE9BQU8sb0JBQW9CO0lBSS9CLFlBQVksZUFBc0QsT0FBTztRQUhqRSxVQUFLLEdBQXdDLEVBQUUsQ0FBQztRQUl0RCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxXQUFnQyxFQUFFLElBQWE7UUFDdEQsSUFBSSxPQUFPLFdBQVcsS0FBSyxVQUFVO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2IsNkRBQTZELENBQzlELENBQUM7UUFDSixJQUFJLEdBQUcsSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxJQUFZO1FBQ2QsSUFBSSxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLDZEQUE2RDtRQUMvRCxDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLE1BQTJCLEVBQUUsRUFBRSxLQUFjO1FBQ2pELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztZQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDeEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBVSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FDYixFQUFFLENBQUMscURBQXFELEVBQUUsSUFBSSxDQUFDLENBQ2hFLENBQUM7UUFDSixPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsR0FBRyxNQUEwRTtJQUU3RSxNQUFNLENBQUMsT0FBTyxDQUNaLENBQUMsQ0FBaUUsRUFBRSxFQUFFO1FBQ3BFLE1BQU0sV0FBVyxHQUFtQixDQUNsQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2hCLENBQUM7UUFDcEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUcsQ0FBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQ0YsQ0FBQztBQUNKLENBQUMiLCJmaWxlIjoibW9kZWwvUmVnaXN0cnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuL01vZGVsXCI7XG5pbXBvcnQgeyBCdWlsZGVyUmVnaXN0cnkgfSBmcm9tIFwiLi4vdXRpbHMvcmVnaXN0cnlcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbENvbnN0cnVjdG9yIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IHNmIH0gZnJvbSBcIi4uL3V0aWxzL3N0cmluZ3NcIjtcbmltcG9ydCB7IGlzTW9kZWwgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IE1vZGVsUmVnaXN0cnkgSW50ZXJmYWNlXG4gKlxuICogQGludGVyZmFjZSBNb2RlbFJlZ2lzdHJ5XG4gKiBAZXh0ZW5kcyBCdWlsZGVyUmVnaXN0cnk8TW9kZWw+XG4gKlxuICogQGNhdGVnb3J5IE1vZGVsXG4gKi9cbmV4cG9ydCB0eXBlIE1vZGVsUmVnaXN0cnk8VCBleHRlbmRzIE1vZGVsPiA9IEJ1aWxkZXJSZWdpc3RyeTxUPjtcblxuLyoqXG4gKiBAc3VtbWFyeSBVdGlsIGNsYXNzIHRvIGVuYWJsZSBzZXJpYWxpemF0aW9uIGFuZCBjb3JyZWN0IHJlYnVpbGRpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYW5jaG9yS2V5IGRlZmF1bHRzIHRvIHtAbGluayBNb2RlbEtleXMuQU5DSE9SfS4gVGhlIHByb3BlcnR5IG5hbWUgd2hlcmUgdGhlIHJlZ2lzdGVyZWQgY2xhc3MgbmFtZSBpcyBzdG9yZWQ7XG4gKiBAcGFyYW0ge2Z1bmN0aW9uKFJlY29yZDxzdHJpbmcsIGFueT4pOiBib29sZWFufSBbdGVzdEZ1bmN0aW9uXSBtZXRob2QgdG8gdGVzdCBpZiB0aGUgcHJvdmlkZWQgb2JqZWN0IGlzIGEgTW9kZWwgT2JqZWN0LiBkZWZhdWx0cyB0byB7QGxpbmsgaXNNb2RlbH1cbiAqXG4gKiBAY2xhc3MgTW9kZWxSZWdpc3RyeU1hbmFnZXJcbiAqIEBpbXBsZW1lbnRzIE1vZGVsUmVnaXN0cnlcbiAqXG4gKiBAY2F0ZWdvcnkgTW9kZWxcbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGVsUmVnaXN0cnlNYW5hZ2VyPFQgZXh0ZW5kcyBNb2RlbD4gaW1wbGVtZW50cyBNb2RlbFJlZ2lzdHJ5PFQ+IHtcbiAgcHJpdmF0ZSBjYWNoZTogUmVjb3JkPHN0cmluZywgTW9kZWxDb25zdHJ1Y3RvcjxUPj4gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSB0ZXN0RnVuY3Rpb246IChvYmo6IG9iamVjdCkgPT4gYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcih0ZXN0RnVuY3Rpb246IChvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGJvb2xlYW4gPSBpc01vZGVsKSB7XG4gICAgdGhpcy50ZXN0RnVuY3Rpb24gPSB0ZXN0RnVuY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgcmVnaXN0ZXIgbmV3IE1vZGVsc1xuICAgKiBAcGFyYW0ge2FueX0gY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lXSB3aGVuIG5vdCBkZWZpbmVkLCB0aGUgbmFtZSBvZiB0aGUgY29uc3RydWN0b3Igd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWdpc3Rlcihjb25zdHJ1Y3RvcjogTW9kZWxDb25zdHJ1Y3RvcjxUPiwgbmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgY29uc3RydWN0b3IgIT09IFwiZnVuY3Rpb25cIilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJNb2RlbCByZWdpc3RlcmluZyBmYWlsZWQuIE1pc3NpbmcgQ2xhc3MgbmFtZSBvciBjb25zdHJ1Y3RvclwiXG4gICAgICApO1xuICAgIG5hbWUgPSBuYW1lIHx8IGNvbnN0cnVjdG9yLm5hbWU7XG4gICAgdGhpcy5jYWNoZVtuYW1lXSA9IGNvbnN0cnVjdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEdldHMgYSByZWdpc3RlcmVkIE1vZGVsIHtAbGluayBNb2RlbENvbnN0cnVjdG9yfVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKi9cbiAgZ2V0KG5hbWU6IHN0cmluZyk6IE1vZGVsQ29uc3RydWN0b3I8VD4gfCB1bmRlZmluZWQge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZVtuYW1lXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbY2xhenpdIHdoZW4gcHJvdmlkZWQsIGl0IHdpbGwgYXR0ZW1wdCB0byBmaW5kIHRoZSBtYXRjaGluZyBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAdGhyb3dzIEVycm9yIElmIGNsYXp6IGlzIG5vdCBmb3VuZCwgb3Igb2JqIGlzIG5vdCBhIHtAbGluayBNb2RlbH0gbWVhbmluZyBpdCBoYXMgbm8ge0BsaW5rIE1vZGVsS2V5cy5BTkNIT1J9IHByb3BlcnR5XG4gICAqL1xuICBidWlsZChvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSwgY2xheno/OiBzdHJpbmcpOiBUIHtcbiAgICBpZiAoIWNsYXp6ICYmICF0aGlzLnRlc3RGdW5jdGlvbihvYmopKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvdmlkZWQgb2JqIGlzIG5vdCBhIE1vZGVsIG9iamVjdFwiKTtcbiAgICBjb25zdCBuYW1lID0gY2xhenogfHwgTW9kZWwuZ2V0TWV0YWRhdGEob2JqIGFzIGFueSk7XG4gICAgaWYgKCEobmFtZSBpbiB0aGlzLmNhY2hlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgc2YoXCJQcm92aWRlZCBjbGFzcyB7MH0gaXMgbm90IGEgcmVnaXN0ZXJlZCBNb2RlbCBvYmplY3RcIiwgbmFtZSlcbiAgICAgICk7XG4gICAgcmV0dXJuIG5ldyB0aGlzLmNhY2hlW25hbWVdKG9iaik7XG4gIH1cbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBCdWxrIFJlZ2lzdGVycyBNb2RlbHNcbiAqIEBkZXNjcmlwdGlvbiBVc2VmdWwgd2hlbiB1c2luZyBidW5kbGVycyB0aGF0IG1pZ2h0IG5vdCBldmFsdWF0ZSBhbGwgdGhlIGNvZGUgYXQgb25jZVxuICpcbiAqIEBwYXJhbSB7QXJyYXk8Q29uc3RydWN0b3I8VD4+IHwgQXJyYXk8e25hbWU6IHN0cmluZywgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPFQ+fT59IFttb2RlbHNdXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Nb2RlbFxuICogQGNhdGVnb3J5IE1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWxrTW9kZWxSZWdpc3RlcjxUIGV4dGVuZHMgTW9kZWw+KFxuICAuLi5tb2RlbHM6IChDb25zdHJ1Y3RvcjxUPiB8IHsgbmFtZTogc3RyaW5nOyBjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8VD4gfSlbXVxuKSB7XG4gIG1vZGVscy5mb3JFYWNoKFxuICAgIChtOiBDb25zdHJ1Y3RvcjxUPiB8IHsgbmFtZTogc3RyaW5nOyBjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8VD4gfSkgPT4ge1xuICAgICAgY29uc3QgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPFQ+ID0gKFxuICAgICAgICBtLmNvbnN0cnVjdG9yID8gbS5jb25zdHJ1Y3RvciA6IG1cbiAgICAgICkgYXMgQ29uc3RydWN0b3I8VD47XG4gICAgICBNb2RlbC5yZWdpc3Rlcihjb25zdHJ1Y3RvciwgKG0gYXMgQ29uc3RydWN0b3I8VD4pLm5hbWUpO1xuICAgIH1cbiAgKTtcbn1cbiJdfQ==
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @summary References the relevant JS primitives
3
+ *
4
+ * @property {string} STRING references the string primitive
5
+ * @property {string} NUMBER references the number primitive
6
+ * @property {string} BOOLEAN references the boolean primitive
7
+ * @property {string} BIGINT references the bigint primitive
8
+ *
9
+ * @constant Primitives
10
+ * @memberOf module:decorator-validation.Model
11
+ */
12
+ export declare enum Primitives {
13
+ STRING = "string",
14
+ NUMBER = "number",
15
+ BOOLEAN = "boolean",
16
+ BIGINT = "bigint"
17
+ }
18
+ /**
19
+ * @summary References the Reserved model names to ignore during Model rebuilding
20
+ *
21
+ * @property {string} STRING
22
+ * @property {string} OBJECT
23
+ * @property {string} NUMBER
24
+ * @property {string} BOOLEAN
25
+ * @property {string} BIGINT
26
+ * @property {string} DATE
27
+ *
28
+ * @constant ReservedModels
29
+ * @memberOf module:decorator-validation.Model
30
+ */
31
+ export declare enum ReservedModels {
32
+ STRING = "string",
33
+ OBJECT = "object",
34
+ NUMBER = "number",
35
+ BOOLEAN = "boolean",
36
+ BIGINT = "bigint",
37
+ DATE = "date"
38
+ }
39
+ /**
40
+ * @summary References the basic supported js types
41
+ *
42
+ * @property {string} string
43
+ * @property {string} array
44
+ * @property {string} number
45
+ * @property {string} boolean
46
+ * @property {string} symbol
47
+ * @property {string} function
48
+ * @property {string} object
49
+ * @property {string} undefined
50
+ * @property {string} null
51
+ * @property {string} BIGINT
52
+ *
53
+ * @constant jsTypes
54
+ * @memberOf module:decorator-validation.Model
55
+ */
56
+ export declare const jsTypes: string[];
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @summary References the relevant JS primitives
3
+ *
4
+ * @property {string} STRING references the string primitive
5
+ * @property {string} NUMBER references the number primitive
6
+ * @property {string} BOOLEAN references the boolean primitive
7
+ * @property {string} BIGINT references the bigint primitive
8
+ *
9
+ * @constant Primitives
10
+ * @memberOf module:decorator-validation.Model
11
+ */
12
+ export var Primitives;
13
+ (function (Primitives) {
14
+ Primitives["STRING"] = "string";
15
+ Primitives["NUMBER"] = "number";
16
+ Primitives["BOOLEAN"] = "boolean";
17
+ Primitives["BIGINT"] = "bigint";
18
+ })(Primitives || (Primitives = {}));
19
+ /**
20
+ * @summary References the Reserved model names to ignore during Model rebuilding
21
+ *
22
+ * @property {string} STRING
23
+ * @property {string} OBJECT
24
+ * @property {string} NUMBER
25
+ * @property {string} BOOLEAN
26
+ * @property {string} BIGINT
27
+ * @property {string} DATE
28
+ *
29
+ * @constant ReservedModels
30
+ * @memberOf module:decorator-validation.Model
31
+ */
32
+ export var ReservedModels;
33
+ (function (ReservedModels) {
34
+ ReservedModels["STRING"] = "string";
35
+ ReservedModels["OBJECT"] = "object";
36
+ ReservedModels["NUMBER"] = "number";
37
+ ReservedModels["BOOLEAN"] = "boolean";
38
+ ReservedModels["BIGINT"] = "bigint";
39
+ ReservedModels["DATE"] = "date";
40
+ })(ReservedModels || (ReservedModels = {}));
41
+ /**
42
+ * @summary References the basic supported js types
43
+ *
44
+ * @property {string} string
45
+ * @property {string} array
46
+ * @property {string} number
47
+ * @property {string} boolean
48
+ * @property {string} symbol
49
+ * @property {string} function
50
+ * @property {string} object
51
+ * @property {string} undefined
52
+ * @property {string} null
53
+ * @property {string} BIGINT
54
+ *
55
+ * @constant jsTypes
56
+ * @memberOf module:decorator-validation.Model
57
+ */
58
+ export const jsTypes = [
59
+ "string",
60
+ "array",
61
+ "number",
62
+ "boolean",
63
+ "symbol",
64
+ "function",
65
+ "object",
66
+ "undefined",
67
+ "null",
68
+ "bigint",
69
+ ];
70
+
71
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBTixJQUFZLFVBS1g7QUFMRCxXQUFZLFVBQVU7SUFDcEIsK0JBQWlCLENBQUE7SUFDakIsK0JBQWlCLENBQUE7SUFDakIsaUNBQW1CLENBQUE7SUFDbkIsK0JBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUxXLFVBQVUsS0FBVixVQUFVLFFBS3JCO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxDQUFOLElBQVksY0FPWDtBQVBELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQixtQ0FBaUIsQ0FBQTtJQUNqQixtQ0FBaUIsQ0FBQTtJQUNqQixxQ0FBbUIsQ0FBQTtJQUNuQixtQ0FBaUIsQ0FBQTtJQUNqQiwrQkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQVBXLGNBQWMsS0FBZCxjQUFjLFFBT3pCO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUc7SUFDckIsUUFBUTtJQUNSLE9BQU87SUFDUCxRQUFRO0lBQ1IsU0FBUztJQUNULFFBQVE7SUFDUixVQUFVO0lBQ1YsUUFBUTtJQUNSLFdBQVc7SUFDWCxNQUFNO0lBQ04sUUFBUTtDQUNULENBQUMiLCJmaWxlIjoibW9kZWwvY29uc3RhbnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAc3VtbWFyeSBSZWZlcmVuY2VzIHRoZSByZWxldmFudCBKUyBwcmltaXRpdmVzXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFNUUklORyByZWZlcmVuY2VzIHRoZSBzdHJpbmcgcHJpbWl0aXZlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTlVNQkVSIHJlZmVyZW5jZXMgdGhlIG51bWJlciBwcmltaXRpdmVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBCT09MRUFOIHJlZmVyZW5jZXMgdGhlIGJvb2xlYW4gcHJpbWl0aXZlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQklHSU5UIHJlZmVyZW5jZXMgdGhlIGJpZ2ludCBwcmltaXRpdmVcbiAqXG4gKiBAY29uc3RhbnQgUHJpbWl0aXZlc1xuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Nb2RlbFxuICovXG5leHBvcnQgZW51bSBQcmltaXRpdmVzIHtcbiAgU1RSSU5HID0gXCJzdHJpbmdcIixcbiAgTlVNQkVSID0gXCJudW1iZXJcIixcbiAgQk9PTEVBTiA9IFwiYm9vbGVhblwiLFxuICBCSUdJTlQgPSBcImJpZ2ludFwiLFxufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFJlZmVyZW5jZXMgdGhlIFJlc2VydmVkIG1vZGVsIG5hbWVzIHRvIGlnbm9yZSBkdXJpbmcgTW9kZWwgcmVidWlsZGluZ1xuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBTVFJJTkdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBPQkpFQ1RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBOVU1CRVJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBCT09MRUFOXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQklHSU5UXG4gKiBAcHJvcGVydHkge3N0cmluZ30gREFURVxuICpcbiAqIEBjb25zdGFudCBSZXNlcnZlZE1vZGVsc1xuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Nb2RlbFxuICovXG5leHBvcnQgZW51bSBSZXNlcnZlZE1vZGVscyB7XG4gIFNUUklORyA9IFwic3RyaW5nXCIsXG4gIE9CSkVDVCA9IFwib2JqZWN0XCIsXG4gIE5VTUJFUiA9IFwibnVtYmVyXCIsXG4gIEJPT0xFQU4gPSBcImJvb2xlYW5cIixcbiAgQklHSU5UID0gXCJiaWdpbnRcIixcbiAgREFURSA9IFwiZGF0ZVwiLFxufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFJlZmVyZW5jZXMgdGhlIGJhc2ljIHN1cHBvcnRlZCBqcyB0eXBlc1xuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdHJpbmdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcnJheVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG51bWJlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGJvb2xlYW5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzeW1ib2xcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmdW5jdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IG9iamVjdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHVuZGVmaW5lZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG51bGxcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBCSUdJTlRcbiAqXG4gKiBAY29uc3RhbnQganNUeXBlc1xuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Nb2RlbFxuICovXG5leHBvcnQgY29uc3QganNUeXBlcyA9IFtcbiAgXCJzdHJpbmdcIixcbiAgXCJhcnJheVwiLFxuICBcIm51bWJlclwiLFxuICBcImJvb2xlYW5cIixcbiAgXCJzeW1ib2xcIixcbiAgXCJmdW5jdGlvblwiLFxuICBcIm9iamVjdFwiLFxuICBcInVuZGVmaW5lZFwiLFxuICBcIm51bGxcIixcbiAgXCJiaWdpbnRcIixcbl07XG4iXX0=
@@ -0,0 +1,29 @@
1
+ import { Model } from "./Model";
2
+ /**
3
+ * @summary Helper Function to override constructors
4
+ *
5
+ * @param {Function} constructor
6
+ * @param {any[]} [args]
7
+ * @return {T} the new instance
8
+ *
9
+ * @function construct
10
+ * @memberOf module:decorator-validation.Construction
11
+ */
12
+ export declare function construct<T extends Model>(constructor: any, ...args: any[]): T;
13
+ /**
14
+ * @summary Recursively finds the last prototype before Object
15
+ * @param {object} obj
16
+ *
17
+ * @function findLastProtoBeforeObject
18
+ * @memberOf module:decorator-validation.Construction
19
+ */
20
+ export declare function findLastProtoBeforeObject(obj: object): object;
21
+ /**
22
+ * @sumary binds the {@link Model} class as a root prototype of the provided instance
23
+ *
24
+ * @param {unknown} obj
25
+ *
26
+ * @function bindModelPrototype
27
+ * @memberOf module:decorator-validation.Construction
28
+ */
29
+ export declare function bindModelPrototype(obj: unknown): void;
@@ -0,0 +1,65 @@
1
+ import { Model } from "./Model";
2
+ /**
3
+ * @summary Helper Function to override constructors
4
+ *
5
+ * @param {Function} constructor
6
+ * @param {any[]} [args]
7
+ * @return {T} the new instance
8
+ *
9
+ * @function construct
10
+ * @memberOf module:decorator-validation.Construction
11
+ */
12
+ export function construct(constructor, ...args) {
13
+ const _constr = (...argz) => new constructor(...argz);
14
+ _constr.prototype = constructor.prototype;
15
+ return _constr(...args);
16
+ }
17
+ /**
18
+ * @summary Recursively finds the last prototype before Object
19
+ * @param {object} obj
20
+ *
21
+ * @function findLastProtoBeforeObject
22
+ * @memberOf module:decorator-validation.Construction
23
+ */
24
+ export function findLastProtoBeforeObject(obj) {
25
+ let prototype = Object.getPrototypeOf(obj);
26
+ if (prototype === Object.prototype)
27
+ return obj;
28
+ while (prototype !== Object.prototype) {
29
+ prototype = Object.getPrototypeOf(prototype);
30
+ if (prototype === Object.prototype)
31
+ return prototype;
32
+ if (Object.getPrototypeOf(prototype) === Object.prototype)
33
+ return prototype;
34
+ }
35
+ throw new Error("Could not find proper prototype");
36
+ }
37
+ /**
38
+ * @sumary binds the {@link Model} class as a root prototype of the provided instance
39
+ *
40
+ * @param {unknown} obj
41
+ *
42
+ * @function bindModelPrototype
43
+ * @memberOf module:decorator-validation.Construction
44
+ */
45
+ export function bindModelPrototype(obj) {
46
+ if (obj instanceof Model)
47
+ return;
48
+ function bindPrototype(objToOverride, prototype) {
49
+ Object.setPrototypeOf(objToOverride, prototype);
50
+ }
51
+ const prototype = Object.getPrototypeOf(obj);
52
+ if (prototype === Object.prototype) {
53
+ return bindPrototype(obj, Model.prototype);
54
+ }
55
+ while (prototype !== Object.prototype) {
56
+ const prot = Object.getPrototypeOf(prototype);
57
+ if (prot === Object.prototype ||
58
+ Object.getPrototypeOf(prot) === Object.prototype) {
59
+ return bindPrototype(prototype, Model.prototype);
60
+ }
61
+ }
62
+ throw new Error("Could not find proper prototype to bind");
63
+ }
64
+
65
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9jb25zdHJ1Y3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVoQzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUN2QixXQUFnQixFQUNoQixHQUFHLElBQVc7SUFFZCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzdELE9BQU8sQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUMxQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsR0FBVztJQUNuRCxJQUFJLFNBQVMsR0FBUSxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELElBQUksU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDL0MsT0FBTyxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3RDLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLElBQUksU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDckQsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxTQUFTO1lBQUUsT0FBTyxTQUFTLENBQUM7SUFDOUUsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxHQUFZO0lBQzdDLElBQUksR0FBRyxZQUFZLEtBQUs7UUFBRSxPQUFPO0lBRWpDLFNBQVMsYUFBYSxDQUFDLGFBQXNCLEVBQUUsU0FBaUI7UUFDOUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFRLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25DLE9BQU8sYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELE9BQU8sU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLElBQ0UsSUFBSSxLQUFLLE1BQU0sQ0FBQyxTQUFTO1lBQ3pCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFDaEQsQ0FBQztZQUNELE9BQU8sYUFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7QUFDN0QsQ0FBQyIsImZpbGUiOiJtb2RlbC9jb25zdHJ1Y3Rpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuL01vZGVsXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgSGVscGVyIEZ1bmN0aW9uIHRvIG92ZXJyaWRlIGNvbnN0cnVjdG9yc1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc11cbiAqIEByZXR1cm4ge1R9IHRoZSBuZXcgaW5zdGFuY2VcbiAqXG4gKiBAZnVuY3Rpb24gY29uc3RydWN0XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLkNvbnN0cnVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0PFQgZXh0ZW5kcyBNb2RlbD4oXG4gIGNvbnN0cnVjdG9yOiBhbnksXG4gIC4uLmFyZ3M6IGFueVtdXG4pOiBUIHtcbiAgY29uc3QgX2NvbnN0ciA9ICguLi5hcmd6OiBhbnlbXSkgPT4gbmV3IGNvbnN0cnVjdG9yKC4uLmFyZ3opO1xuICBfY29uc3RyLnByb3RvdHlwZSA9IGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIF9jb25zdHIoLi4uYXJncyk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgUmVjdXJzaXZlbHkgZmluZHMgdGhlIGxhc3QgcHJvdG90eXBlIGJlZm9yZSBPYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqXG4gKiBAZnVuY3Rpb24gZmluZExhc3RQcm90b0JlZm9yZU9iamVjdFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Db25zdHJ1Y3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMYXN0UHJvdG9CZWZvcmVPYmplY3Qob2JqOiBvYmplY3QpOiBvYmplY3Qge1xuICBsZXQgcHJvdG90eXBlOiBhbnkgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgaWYgKHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSkgcmV0dXJuIG9iajtcbiAgd2hpbGUgKHByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpO1xuICAgIGlmIChwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUpIHJldHVybiBwcm90b3R5cGU7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBPYmplY3QucHJvdG90eXBlKSByZXR1cm4gcHJvdG90eXBlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIHByb3BlciBwcm90b3R5cGVcIik7XG59XG5cbi8qKlxuICogQHN1bWFyeSBiaW5kcyB0aGUge0BsaW5rIE1vZGVsfSBjbGFzcyBhcyBhIHJvb3QgcHJvdG90eXBlIG9mIHRoZSBwcm92aWRlZCBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gb2JqXG4gKlxuICogQGZ1bmN0aW9uIGJpbmRNb2RlbFByb3RvdHlwZVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Db25zdHJ1Y3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRNb2RlbFByb3RvdHlwZShvYmo6IHVua25vd24pIHtcbiAgaWYgKG9iaiBpbnN0YW5jZW9mIE1vZGVsKSByZXR1cm47XG5cbiAgZnVuY3Rpb24gYmluZFByb3RvdHlwZShvYmpUb092ZXJyaWRlOiB1bmtub3duLCBwcm90b3R5cGU6IG9iamVjdCkge1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihvYmpUb092ZXJyaWRlLCBwcm90b3R5cGUpO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlOiBhbnkgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgaWYgKHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIHJldHVybiBiaW5kUHJvdG90eXBlKG9iaiwgTW9kZWwucHJvdG90eXBlKTtcbiAgfVxuICB3aGlsZSAocHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgY29uc3QgcHJvdCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpO1xuICAgIGlmIChcbiAgICAgIHByb3QgPT09IE9iamVjdC5wcm90b3R5cGUgfHxcbiAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90KSA9PT0gT2JqZWN0LnByb3RvdHlwZVxuICAgICkge1xuICAgICAgcmV0dXJuIGJpbmRQcm90b3R5cGUocHJvdG90eXBlLCBNb2RlbC5wcm90b3R5cGUpO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBwcm9wZXIgcHJvdG90eXBlIHRvIGJpbmRcIik7XG59XG4iXX0=
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @summary defines the tpe os an InstanceCallback function
3
+ *
4
+ * @memberOf module:decorator-validation.Model
5
+ */
6
+ export type InstanceCallback = (instance: any, ...args: any[]) => void;
7
+ /**
8
+ * @summary Defines a class as a Model class
9
+ * @description
10
+ *
11
+ * - Registers the class under the model registry so it can be easily rebuilt;
12
+ * - Overrides the class constructor;
13
+ * - Runs the global {@link ModelBuilderFunction} if defined;
14
+ * - Runs the optional {@link InstanceCallback} if provided;
15
+ *
16
+ * @param {InstanceCallback} [instanceCallback] optional callback that will be called with the instance upon instantiation. defaults to undefined
17
+ *
18
+ * @function model
19
+ *
20
+ * @memberOf module:decorator-validation.Model
21
+ *
22
+ */
23
+ export declare function model(instanceCallback?: InstanceCallback): any;
24
+ export declare function hashedBy(algorithm: string, ...args: any[]): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
25
+ export declare function serializedBy(serializer: string, ...args: any[]): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
@@ -0,0 +1,64 @@
1
+ import { bindModelPrototype, construct } from "./construction";
2
+ import { ModelKeys } from "../utils/constants";
3
+ import { Model } from "./Model";
4
+ import { metadata } from "@decaf-ts/reflection";
5
+ /**
6
+ * @summary Defines a class as a Model class
7
+ * @description
8
+ *
9
+ * - Registers the class under the model registry so it can be easily rebuilt;
10
+ * - Overrides the class constructor;
11
+ * - Runs the global {@link ModelBuilderFunction} if defined;
12
+ * - Runs the optional {@link InstanceCallback} if provided;
13
+ *
14
+ * @param {InstanceCallback} [instanceCallback] optional callback that will be called with the instance upon instantiation. defaults to undefined
15
+ *
16
+ * @function model
17
+ *
18
+ * @memberOf module:decorator-validation.Model
19
+ *
20
+ */
21
+ export function model(instanceCallback) {
22
+ return ((original) => {
23
+ // the new constructor behaviour
24
+ const newConstructor = function (...args) {
25
+ const instance = construct(original, ...args);
26
+ bindModelPrototype(instance);
27
+ // run a builder function if defined with the first argument (The ModelArg)
28
+ const builder = Model.getBuilder();
29
+ if (builder)
30
+ builder(instance, args.length ? args[0] : undefined);
31
+ metadata(Model.key(ModelKeys.MODEL), original.name)(instance.constructor);
32
+ if (instanceCallback)
33
+ instanceCallback(instance, ...args);
34
+ return instance;
35
+ };
36
+ // copy prototype so instanceof operator still works
37
+ newConstructor.prototype = original.prototype;
38
+ // Sets the proper constructor name for type verification
39
+ Object.defineProperty(newConstructor, "name", {
40
+ writable: false,
41
+ enumerable: true,
42
+ configurable: false,
43
+ value: original.prototype.constructor.name,
44
+ });
45
+ metadata(Model.key(ModelKeys.MODEL), original.name)(original);
46
+ Model.register(newConstructor, original.name);
47
+ // return new constructor (will override original)
48
+ return newConstructor;
49
+ });
50
+ }
51
+ export function hashedBy(algorithm, ...args) {
52
+ return metadata(Model.key(ModelKeys.HASHING), {
53
+ algorithm: algorithm,
54
+ args: args,
55
+ });
56
+ }
57
+ export function serializedBy(serializer, ...args) {
58
+ return metadata(Model.key(ModelKeys.SERIALIZATION), {
59
+ serializer: serializer,
60
+ args: args,
61
+ });
62
+ }
63
+
64
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFTaEQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxnQkFBbUM7SUFDdkQsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7UUFDeEIsZ0NBQWdDO1FBQ2hDLE1BQU0sY0FBYyxHQUFRLFVBQVUsR0FBRyxJQUFXO1lBQ2xELE1BQU0sUUFBUSxHQUFnQyxTQUFTLENBQ3JELFFBQVEsRUFDUixHQUFHLElBQUksQ0FDUixDQUFDO1lBQ0Ysa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0IsMkVBQTJFO1lBQzNFLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxJQUFJLE9BQU87Z0JBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRWxFLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTFFLElBQUksZ0JBQWdCO2dCQUFFLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBRTFELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQztRQUVGLG9EQUFvRDtRQUNwRCxjQUFjLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDOUMseURBQXlEO1FBQ3pELE1BQU0sQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRTtZQUM1QyxRQUFRLEVBQUUsS0FBSztZQUNmLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFlBQVksRUFBRSxLQUFLO1lBQ25CLEtBQUssRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJO1NBQzNDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTlDLGtEQUFrRDtRQUNsRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDLENBQVEsQ0FBQztBQUNaLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLFNBQWlCLEVBQUUsR0FBRyxJQUFXO0lBQ3hELE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzVDLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLElBQUksRUFBRSxJQUFJO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsVUFBa0IsRUFBRSxHQUFHLElBQVc7SUFDN0QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDbEQsVUFBVSxFQUFFLFVBQVU7UUFDdEIsSUFBSSxFQUFFLElBQUk7S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDIiwiZmlsZSI6Im1vZGVsL2RlY29yYXRvcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBiaW5kTW9kZWxQcm90b3R5cGUsIGNvbnN0cnVjdCB9IGZyb20gXCIuL2NvbnN0cnVjdGlvblwiO1xuaW1wb3J0IHsgTW9kZWxLZXlzIH0gZnJvbSBcIi4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi9Nb2RlbFwiO1xuaW1wb3J0IHsgbWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBkZWZpbmVzIHRoZSB0cGUgb3MgYW4gSW5zdGFuY2VDYWxsYmFjayBmdW5jdGlvblxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgSW5zdGFuY2VDYWxsYmFjayA9IChpbnN0YW5jZTogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgY2xhc3MgYXMgYSBNb2RlbCBjbGFzc1xuICogQGRlc2NyaXB0aW9uXG4gKlxuICogLSBSZWdpc3RlcnMgdGhlIGNsYXNzIHVuZGVyIHRoZSBtb2RlbCByZWdpc3RyeSBzbyBpdCBjYW4gYmUgZWFzaWx5IHJlYnVpbHQ7XG4gKiAtIE92ZXJyaWRlcyB0aGUgY2xhc3MgY29uc3RydWN0b3I7XG4gKiAtIFJ1bnMgdGhlIGdsb2JhbCB7QGxpbmsgTW9kZWxCdWlsZGVyRnVuY3Rpb259IGlmIGRlZmluZWQ7XG4gKiAtIFJ1bnMgdGhlIG9wdGlvbmFsIHtAbGluayBJbnN0YW5jZUNhbGxiYWNrfSBpZiBwcm92aWRlZDtcbiAqXG4gKiBAcGFyYW0ge0luc3RhbmNlQ2FsbGJhY2t9IFtpbnN0YW5jZUNhbGxiYWNrXSBvcHRpb25hbCBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGluc3RhbmNlIHVwb24gaW5zdGFudGlhdGlvbi4gZGVmYXVsdHMgdG8gdW5kZWZpbmVkXG4gKlxuICogQGZ1bmN0aW9uIG1vZGVsXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Nb2RlbFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsKGluc3RhbmNlQ2FsbGJhY2s/OiBJbnN0YW5jZUNhbGxiYWNrKSB7XG4gIHJldHVybiAoKG9yaWdpbmFsOiBhbnkpID0+IHtcbiAgICAvLyB0aGUgbmV3IGNvbnN0cnVjdG9yIGJlaGF2aW91clxuICAgIGNvbnN0IG5ld0NvbnN0cnVjdG9yOiBhbnkgPSBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlOiBSZXR1cm5UeXBlPHR5cGVvZiBvcmlnaW5hbD4gPSBjb25zdHJ1Y3QoXG4gICAgICAgIG9yaWdpbmFsLFxuICAgICAgICAuLi5hcmdzXG4gICAgICApO1xuICAgICAgYmluZE1vZGVsUHJvdG90eXBlKGluc3RhbmNlKTtcbiAgICAgIC8vIHJ1biBhIGJ1aWxkZXIgZnVuY3Rpb24gaWYgZGVmaW5lZCB3aXRoIHRoZSBmaXJzdCBhcmd1bWVudCAoVGhlIE1vZGVsQXJnKVxuICAgICAgY29uc3QgYnVpbGRlciA9IE1vZGVsLmdldEJ1aWxkZXIoKTtcbiAgICAgIGlmIChidWlsZGVyKSBidWlsZGVyKGluc3RhbmNlLCBhcmdzLmxlbmd0aCA/IGFyZ3NbMF0gOiB1bmRlZmluZWQpO1xuXG4gICAgICBtZXRhZGF0YShNb2RlbC5rZXkoTW9kZWxLZXlzLk1PREVMKSwgb3JpZ2luYWwubmFtZSkoaW5zdGFuY2UuY29uc3RydWN0b3IpO1xuXG4gICAgICBpZiAoaW5zdGFuY2VDYWxsYmFjaykgaW5zdGFuY2VDYWxsYmFjayhpbnN0YW5jZSwgLi4uYXJncyk7XG5cbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuXG4gICAgLy8gY29weSBwcm90b3R5cGUgc28gaW5zdGFuY2VvZiBvcGVyYXRvciBzdGlsbCB3b3Jrc1xuICAgIG5ld0NvbnN0cnVjdG9yLnByb3RvdHlwZSA9IG9yaWdpbmFsLnByb3RvdHlwZTtcbiAgICAvLyBTZXRzIHRoZSBwcm9wZXIgY29uc3RydWN0b3IgbmFtZSBmb3IgdHlwZSB2ZXJpZmljYXRpb25cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3Q29uc3RydWN0b3IsIFwibmFtZVwiLCB7XG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBvcmlnaW5hbC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZSxcbiAgICB9KTtcblxuICAgIG1ldGFkYXRhKE1vZGVsLmtleShNb2RlbEtleXMuTU9ERUwpLCBvcmlnaW5hbC5uYW1lKShvcmlnaW5hbCk7XG5cbiAgICBNb2RlbC5yZWdpc3RlcihuZXdDb25zdHJ1Y3Rvciwgb3JpZ2luYWwubmFtZSk7XG5cbiAgICAvLyByZXR1cm4gbmV3IGNvbnN0cnVjdG9yICh3aWxsIG92ZXJyaWRlIG9yaWdpbmFsKVxuICAgIHJldHVybiBuZXdDb25zdHJ1Y3RvcjtcbiAgfSkgYXMgYW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzaGVkQnkoYWxnb3JpdGhtOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG4gIHJldHVybiBtZXRhZGF0YShNb2RlbC5rZXkoTW9kZWxLZXlzLkhBU0hJTkcpLCB7XG4gICAgYWxnb3JpdGhtOiBhbGdvcml0aG0sXG4gICAgYXJnczogYXJncyxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVkQnkoc2VyaWFsaXplcjogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICByZXR1cm4gbWV0YWRhdGEoTW9kZWwua2V5KE1vZGVsS2V5cy5TRVJJQUxJWkFUSU9OKSwge1xuICAgIHNlcmlhbGl6ZXI6IHNlcmlhbGl6ZXIsXG4gICAgYXJnczogYXJncyxcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1,9 @@
1
+ export * from "./constants";
2
+ export * from "./construction";
3
+ export * from "./decorators";
4
+ export * from "./Model";
5
+ export * from "./ModelErrorDefinition";
6
+ export * from "./Registry";
7
+ export * from "./types";
8
+ export * from "./utils";
9
+ export * from "./validation";
@@ -0,0 +1,11 @@
1
+ export * from "./constants";
2
+ export * from "./construction";
3
+ export * from "./decorators";
4
+ export * from "./Model";
5
+ export * from "./ModelErrorDefinition";
6
+ export * from "./Registry";
7
+ export * from "./types";
8
+ export * from "./utils";
9
+ export * from "./validation";
10
+
11
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxjQUFjLENBQUMiLCJmaWxlIjoibW9kZWwvaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0cnVjdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vTW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL01vZGVsRXJyb3JEZWZpbml0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZWdpc3RyeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92YWxpZGF0aW9uXCI7XG4iXX0=
@@ -0,0 +1,79 @@
1
+ import { ModelErrorDefinition } from "./ModelErrorDefinition";
2
+ import { Model } from "./Model";
3
+ /**
4
+ * @summary Typo of a Model builder function
5
+ * @memberOf module:decorator-validation.Construction
6
+ * @category Construction
7
+ */
8
+ export type ModelBuilderFunction = <T extends Model>(self: T, obj?: T | Record<string, any>) => T;
9
+ /**
10
+ * @summary Definition of a Model Constructor Argument
11
+ *
12
+ * @memberOf module:decorator-validation.Model
13
+ * @category Model
14
+ *
15
+ * @see ModelConstructor
16
+ */
17
+ export type ModelArg<T> = T | Record<string, any>;
18
+ /**
19
+ * @summary Definition of a Class Constructor
20
+ * @description Generic type for Constructor functions
21
+ *
22
+ * @typedef Constructor
23
+ *
24
+ * @param {any[]} [args]
25
+ * @memberOf module:decorator-validation.Model
26
+ * @category Model
27
+ */
28
+ export type Constructor<T> = {
29
+ new (...args: any[]): T;
30
+ };
31
+ /**
32
+ * @summary Definition of a Model Constructor
33
+ * @description Generic type for all Model Constructor functions
34
+ *
35
+ * @typedef ModelConstructor
36
+ *
37
+ * @param {ModelArg<T>} [model]
38
+ * @param {any[]} [args]
39
+ * @memberOf module:decorator-validation.Model
40
+ * @category Construction
41
+ */
42
+ export type ModelConstructor<T extends Model> = {
43
+ new (model?: ModelArg<T>, ...args: any[]): T;
44
+ };
45
+ /**
46
+ * @summary Defines the Validation API for validatable models
47
+ * @interface Validatable
48
+ *
49
+ * @category Validation
50
+ */
51
+ export interface Validatable {
52
+ /**
53
+ * @summary Validates the model and returns the {@link ModelErrorDefinition} if any
54
+ * @param {any} [args]
55
+ *
56
+ * @method
57
+ */
58
+ hasErrors(...args: any[]): ModelErrorDefinition | undefined;
59
+ }
60
+ /**
61
+ * @summary Serializable interface
62
+ *
63
+ * @interface Serializable
64
+ *
65
+ * @category Serialization
66
+ */
67
+ export interface Serializable {
68
+ /**
69
+ * @summary serializes the model
70
+ * @method
71
+ */
72
+ serialize(): string;
73
+ }
74
+ export interface Hashable {
75
+ hash(): string;
76
+ }
77
+ export interface Comparable<T> {
78
+ equals(other: T, ...args: any[]): boolean;
79
+ }
@@ -0,0 +1,3 @@
1
+ export {};
2
+
3
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6Im1vZGVsL3R5cGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxFcnJvckRlZmluaXRpb24gfSBmcm9tIFwiLi9Nb2RlbEVycm9yRGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi9Nb2RlbFwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFR5cG8gb2YgYSBNb2RlbCBidWlsZGVyIGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLkNvbnN0cnVjdGlvblxuICogQGNhdGVnb3J5IENvbnN0cnVjdGlvblxuICovXG5leHBvcnQgdHlwZSBNb2RlbEJ1aWxkZXJGdW5jdGlvbiA9IDxUIGV4dGVuZHMgTW9kZWw+KFxuICBzZWxmOiBULFxuICBvYmo/OiBUIHwgUmVjb3JkPHN0cmluZywgYW55PlxuKSA9PiBUO1xuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluaXRpb24gb2YgYSBNb2RlbCBDb25zdHJ1Y3RvciBBcmd1bWVudFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uTW9kZWxcbiAqIEBjYXRlZ29yeSBNb2RlbFxuICpcbiAqIEBzZWUgTW9kZWxDb25zdHJ1Y3RvclxuICovXG5leHBvcnQgdHlwZSBNb2RlbEFyZzxUPiA9IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluaXRpb24gb2YgYSBDbGFzcyBDb25zdHJ1Y3RvclxuICogQGRlc2NyaXB0aW9uIEdlbmVyaWMgdHlwZSBmb3IgQ29uc3RydWN0b3IgZnVuY3Rpb25zXG4gKlxuICogQHR5cGVkZWYgQ29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc11cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uTW9kZWxcbiAqIEBjYXRlZ29yeSBNb2RlbFxuICovXG5leHBvcnQgdHlwZSBDb25zdHJ1Y3RvcjxUPiA9IHtcbiAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQ7XG59O1xuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluaXRpb24gb2YgYSBNb2RlbCBDb25zdHJ1Y3RvclxuICogQGRlc2NyaXB0aW9uIEdlbmVyaWMgdHlwZSBmb3IgYWxsIE1vZGVsIENvbnN0cnVjdG9yIGZ1bmN0aW9uc1xuICpcbiAqIEB0eXBlZGVmIE1vZGVsQ29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0ge01vZGVsQXJnPFQ+fSBbbW9kZWxdXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc11cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uTW9kZWxcbiAqIEBjYXRlZ29yeSBDb25zdHJ1Y3Rpb25cbiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxDb25zdHJ1Y3RvcjxUIGV4dGVuZHMgTW9kZWw+ID0ge1xuICBuZXcgKG1vZGVsPzogTW9kZWxBcmc8VD4sIC4uLmFyZ3M6IGFueVtdKTogVDtcbn07XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgVmFsaWRhdGlvbiBBUEkgZm9yIHZhbGlkYXRhYmxlIG1vZGVsc1xuICogQGludGVyZmFjZSBWYWxpZGF0YWJsZVxuICpcbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGFibGUge1xuICAvKipcbiAgICogQHN1bW1hcnkgVmFsaWRhdGVzIHRoZSBtb2RlbCBhbmQgcmV0dXJucyB0aGUge0BsaW5rIE1vZGVsRXJyb3JEZWZpbml0aW9ufSBpZiBhbnlcbiAgICogQHBhcmFtIHthbnl9IFthcmdzXVxuICAgKlxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBoYXNFcnJvcnMoLi4uYXJnczogYW55W10pOiBNb2RlbEVycm9yRGVmaW5pdGlvbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBTZXJpYWxpemFibGUgaW50ZXJmYWNlXG4gKlxuICogQGludGVyZmFjZSBTZXJpYWxpemFibGVcbiAqXG4gKiBAY2F0ZWdvcnkgU2VyaWFsaXphdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6YWJsZSB7XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBzZXJpYWxpemVzIHRoZSBtb2RlbFxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBzZXJpYWxpemUoKTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhhc2hhYmxlIHtcbiAgaGFzaCgpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFyYWJsZTxUPiB7XG4gIGVxdWFscyhvdGhlcjogVCwgLi4uYXJnczogYW55W10pOiBib29sZWFuO1xufVxuIl19
@@ -0,0 +1,11 @@
1
+ import { Model } from "./Model";
2
+ export declare function isPropertyModel<M extends Model>(target: M, attribute: string): boolean | string | undefined;
3
+ /**
4
+ * @summary For Serialization/deserialization purposes.
5
+ * @description Reads the {@link ModelKeys.ANCHOR} property of a {@link Model} to discover the class to instantiate
6
+ *
7
+ * @function isModel
8
+ * @memberOf module:decorator-validation.Validation
9
+ * @category Validation
10
+ */
11
+ export declare function isModel(target: Record<string, any>): boolean;
@@ -0,0 +1,27 @@
1
+ import { ModelKeys } from "../utils/constants";
2
+ import { Model } from "./Model";
3
+ export function isPropertyModel(target, attribute) {
4
+ if (isModel(target[attribute]))
5
+ return true;
6
+ const metadata = Reflect.getMetadata(ModelKeys.TYPE, target, attribute);
7
+ return Model.get(metadata.name) ? metadata.name : undefined;
8
+ }
9
+ /**
10
+ * @summary For Serialization/deserialization purposes.
11
+ * @description Reads the {@link ModelKeys.ANCHOR} property of a {@link Model} to discover the class to instantiate
12
+ *
13
+ * @function isModel
14
+ * @memberOf module:decorator-validation.Validation
15
+ * @category Validation
16
+ */
17
+ export function isModel(target) {
18
+ try {
19
+ return target instanceof Model || !!Model.getMetadata(target);
20
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
21
+ }
22
+ catch (e) {
23
+ return false;
24
+ }
25
+ }
26
+
27
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxNQUFNLFVBQVUsZUFBZSxDQUM3QixNQUFTLEVBQ1QsU0FBaUI7SUFFakIsSUFBSSxPQUFPLENBQUUsTUFBOEIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3JFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDeEUsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzlELENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxNQUEyQjtJQUNqRCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBYSxDQUFDLENBQUM7UUFDckUsNkRBQTZEO0lBQy9ELENBQUM7SUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1FBQ2hCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMiLCJmaWxlIjoibW9kZWwvdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbEtleXMgfSBmcm9tIFwiLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuL01vZGVsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5TW9kZWw8TSBleHRlbmRzIE1vZGVsPihcbiAgdGFyZ2V0OiBNLFxuICBhdHRyaWJ1dGU6IHN0cmluZ1xuKTogYm9vbGVhbiB8IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChpc01vZGVsKCh0YXJnZXQgYXMgUmVjb3JkPHN0cmluZywgYW55PilbYXR0cmlidXRlXSkpIHJldHVybiB0cnVlO1xuICBjb25zdCBtZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoTW9kZWxLZXlzLlRZUEUsIHRhcmdldCwgYXR0cmlidXRlKTtcbiAgcmV0dXJuIE1vZGVsLmdldChtZXRhZGF0YS5uYW1lKSA/IG1ldGFkYXRhLm5hbWUgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRm9yIFNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIHB1cnBvc2VzLlxuICogQGRlc2NyaXB0aW9uIFJlYWRzIHRoZSB7QGxpbmsgTW9kZWxLZXlzLkFOQ0hPUn0gcHJvcGVydHkgb2YgYSB7QGxpbmsgTW9kZWx9IHRvIGRpc2NvdmVyIHRoZSBjbGFzcyB0byBpbnN0YW50aWF0ZVxuICpcbiAqIEBmdW5jdGlvbiBpc01vZGVsXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLlZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01vZGVsKHRhcmdldDogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICB0cnkge1xuICAgIHJldHVybiB0YXJnZXQgaW5zdGFuY2VvZiBNb2RlbCB8fCAhIU1vZGVsLmdldE1ldGFkYXRhKHRhcmdldCBhcyBhbnkpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { ModelErrorDefinition } from "./ModelErrorDefinition";
2
+ import { Model } from "./Model";
3
+ /**
4
+ * @summary Analyses the decorations of the properties and validates the obj according to them
5
+ *
6
+ * @typedef T extends Model
7
+ * @prop {T} obj Model object to validate
8
+ * @prop {string[]} [propsToIgnore] object properties to ignore in the validation
9
+ *
10
+ * @function validate
11
+ * @memberOf module:decorator-validation.Validation
12
+ * @category Validation
13
+ */
14
+ export declare function validate<T extends Model>(obj: T, ...propsToIgnore: string[]): ModelErrorDefinition | undefined;