@decaf-ts/decorator-validation 1.5.6 → 1.5.8

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 (100) hide show
  1. package/dist/decorator-validation.js +2 -604
  2. package/dist/decorator-validation.js.LICENSE.txt +14 -0
  3. package/dist/esm/decorator-validation.js +2 -541
  4. package/dist/esm/decorator-validation.js.LICENSE.txt +14 -0
  5. package/lib/esm/index.d.ts +1 -1
  6. package/lib/esm/index.js +1 -3
  7. package/lib/esm/model/Model.d.ts +65 -0
  8. package/lib/esm/model/Model.js +87 -3
  9. package/lib/esm/model/ModelErrorDefinition.js +0 -2
  10. package/lib/esm/model/constants.js +0 -2
  11. package/lib/esm/model/construction.js +0 -2
  12. package/lib/esm/model/decorators.js +0 -2
  13. package/lib/esm/model/index.d.ts +0 -1
  14. package/lib/esm/model/index.js +0 -3
  15. package/lib/esm/model/types.js +0 -2
  16. package/lib/esm/model/utils.d.ts +0 -9
  17. package/lib/esm/model/utils.js +1 -20
  18. package/lib/esm/model/validation.js +2 -4
  19. package/lib/esm/utils/constants.js +0 -2
  20. package/lib/esm/utils/dates.js +0 -2
  21. package/lib/esm/utils/decorators.js +0 -2
  22. package/lib/esm/utils/hashing.js +0 -2
  23. package/lib/esm/utils/index.js +0 -2
  24. package/lib/esm/utils/registry.js +0 -2
  25. package/lib/esm/utils/serialization.js +0 -2
  26. package/lib/esm/utils/strings.js +0 -2
  27. package/lib/esm/validation/Validation.js +0 -2
  28. package/lib/esm/validation/Validators/DateValidator.js +0 -2
  29. package/lib/esm/validation/Validators/EmailValidator.js +0 -2
  30. package/lib/esm/validation/Validators/ListValidator.js +0 -2
  31. package/lib/esm/validation/Validators/MaxLengthValidator.js +0 -2
  32. package/lib/esm/validation/Validators/MaxValidator.js +0 -2
  33. package/lib/esm/validation/Validators/MinLengthValidator.js +0 -2
  34. package/lib/esm/validation/Validators/MinValidator.js +0 -2
  35. package/lib/esm/validation/Validators/PasswordValidator.js +0 -2
  36. package/lib/esm/validation/Validators/PatternValidator.js +0 -2
  37. package/lib/esm/validation/Validators/RequiredValidator.js +0 -2
  38. package/lib/esm/validation/Validators/StepValidator.js +0 -2
  39. package/lib/esm/validation/Validators/TypeValidator.js +0 -2
  40. package/lib/esm/validation/Validators/URLValidator.js +0 -2
  41. package/lib/esm/validation/Validators/Validator.js +0 -2
  42. package/lib/esm/validation/Validators/ValidatorRegistry.js +0 -2
  43. package/lib/esm/validation/Validators/constants.js +0 -2
  44. package/lib/esm/validation/Validators/decorators.js +0 -2
  45. package/lib/esm/validation/Validators/index.js +0 -2
  46. package/lib/esm/validation/Validators/types.js +1 -0
  47. package/lib/esm/validation/decorators.js +0 -2
  48. package/lib/esm/validation/index.js +0 -2
  49. package/lib/esm/validation/types.js +0 -2
  50. package/lib/index.d.ts +1 -1
  51. package/lib/index.js +1 -3
  52. package/lib/model/Model.d.ts +65 -0
  53. package/lib/model/Model.js +92 -5
  54. package/lib/model/ModelErrorDefinition.js +0 -2
  55. package/lib/model/constants.js +0 -2
  56. package/lib/model/construction.js +0 -2
  57. package/lib/model/decorators.js +0 -2
  58. package/lib/model/index.d.ts +0 -1
  59. package/lib/model/index.js +0 -3
  60. package/lib/model/types.js +0 -2
  61. package/lib/model/utils.d.ts +0 -9
  62. package/lib/model/utils.js +1 -21
  63. package/lib/model/validation.js +3 -5
  64. package/lib/utils/constants.js +0 -2
  65. package/lib/utils/dates.js +0 -2
  66. package/lib/utils/decorators.js +0 -2
  67. package/lib/utils/hashing.js +0 -2
  68. package/lib/utils/index.js +0 -2
  69. package/lib/utils/registry.js +0 -2
  70. package/lib/utils/serialization.js +0 -2
  71. package/lib/utils/strings.js +0 -2
  72. package/lib/validation/Validation.js +0 -2
  73. package/lib/validation/Validators/DateValidator.js +0 -2
  74. package/lib/validation/Validators/EmailValidator.js +0 -2
  75. package/lib/validation/Validators/ListValidator.js +0 -2
  76. package/lib/validation/Validators/MaxLengthValidator.js +0 -2
  77. package/lib/validation/Validators/MaxValidator.js +0 -2
  78. package/lib/validation/Validators/MinLengthValidator.js +0 -2
  79. package/lib/validation/Validators/MinValidator.js +0 -2
  80. package/lib/validation/Validators/PasswordValidator.js +0 -2
  81. package/lib/validation/Validators/PatternValidator.js +0 -2
  82. package/lib/validation/Validators/RequiredValidator.js +0 -2
  83. package/lib/validation/Validators/StepValidator.js +0 -2
  84. package/lib/validation/Validators/TypeValidator.js +0 -2
  85. package/lib/validation/Validators/URLValidator.js +0 -2
  86. package/lib/validation/Validators/Validator.js +0 -2
  87. package/lib/validation/Validators/ValidatorRegistry.js +85 -0
  88. package/lib/validation/Validators/constants.js +137 -0
  89. package/lib/validation/Validators/decorators.js +28 -0
  90. package/lib/validation/Validators/index.js +69 -0
  91. package/lib/validation/Validators/types.js +2 -0
  92. package/lib/validation/decorators.js +0 -2
  93. package/lib/validation/index.js +0 -2
  94. package/lib/validation/types.js +0 -2
  95. package/package.json +2 -2
  96. package/lib/esm/model/Registry.d.ts +0 -59
  97. package/lib/esm/model/Registry.js +0 -75
  98. package/lib/esm/validation/Validators/types.d.ts +0 -88
  99. package/lib/model/Registry.d.ts +0 -59
  100. package/lib/model/Registry.js +0 -80
@@ -1,59 +0,0 @@
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;
@@ -1,75 +0,0 @@
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==
@@ -1,88 +0,0 @@
1
- import { Validator } from "./Validator";
2
- import { IRegistry } from "../../utils/registry";
3
- import { Constructor } from "../../model/types";
4
- /**
5
- * @summary Util type for {@link Validator} configuration
6
- * @memberOf module:decorator-validation.Validation
7
- * @category Validation
8
- */
9
- export type ValidatorDefinition = {
10
- validator: Constructor<Validator>;
11
- validationKey: string;
12
- save: boolean;
13
- };
14
- /**
15
- * @summary Base API for a {@link Validator} registry
16
- *
17
- * @interface ValidatorRegistry
18
- * @extends IRegistry
19
- *
20
- * @category Validation
21
- */
22
- export interface IValidatorRegistry<T extends Validator> extends IRegistry<T> {
23
- /**
24
- * @summary retrieves the custom keys
25
- * @method
26
- */
27
- getCustomKeys(): Record<string, string>;
28
- /**
29
- * @summary Retrieves the Registered validator keys
30
- * @return {string[]} the registered validators keys
31
- * @method
32
- */
33
- getKeys(): string[];
34
- /**
35
- * @summary Registers the provided validators onto the registry
36
- *
37
- * @typedef T extends Validator
38
- * @param {T[] | ValidatorDefinition[]} validator
39
- * @method
40
- */
41
- register<T extends Validator>(...validator: (T | ValidatorDefinition)[]): void;
42
- /**
43
- * @summary Retrieves the Validator constructor if registered
44
- *
45
- * @typedef T extends Validator
46
- * @param {string} key one of the {@link ValidationKeys}
47
- * @return {Validator | undefined} the registered Validator or undefined if there is nono matching the provided key
48
- * @method
49
- */
50
- get<T extends Validator>(key: string): T | undefined;
51
- }
52
- export type ValidatorOptions = {
53
- message?: string;
54
- };
55
- export interface URLValidatorOptions extends ValidatorOptions {
56
- types: string | string[] | {
57
- name: string;
58
- };
59
- }
60
- export interface TypeValidatorOptions extends ValidatorOptions {
61
- types: string | string[] | {
62
- name: string;
63
- };
64
- }
65
- export interface StepValidatorOptions extends ValidatorOptions {
66
- step: number | string;
67
- }
68
- export interface PatternValidatorOptions extends ValidatorOptions {
69
- pattern?: RegExp | string;
70
- }
71
- export interface MinValidatorOptions extends ValidatorOptions {
72
- min: number | Date | string;
73
- }
74
- export interface MinLengthValidatorOptions extends ValidatorOptions {
75
- minLength: number;
76
- }
77
- export interface MaxValidatorOptions extends ValidatorOptions {
78
- max: number | Date | string;
79
- }
80
- export interface MaxLengthValidatorOptions extends ValidatorOptions {
81
- maxLength: number;
82
- }
83
- export interface ListValidatorOptions extends ValidatorOptions {
84
- clazz: string[];
85
- }
86
- export interface DateValidatorOptions extends ValidatorOptions {
87
- format?: string;
88
- }
@@ -1,59 +0,0 @@
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;
@@ -1,80 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ModelRegistryManager = void 0;
4
- exports.bulkModelRegister = bulkModelRegister;
5
- const Model_1 = require("./Model");
6
- const strings_1 = require("../utils/strings");
7
- const utils_1 = require("./utils");
8
- /**
9
- * @summary Util class to enable serialization and correct rebuilding
10
- *
11
- * @param {string} anchorKey defaults to {@link ModelKeys.ANCHOR}. The property name where the registered class name is stored;
12
- * @param {function(Record<string, any>): boolean} [testFunction] method to test if the provided object is a Model Object. defaults to {@link isModel}
13
- *
14
- * @class ModelRegistryManager
15
- * @implements ModelRegistry
16
- *
17
- * @category Model
18
- */
19
- class ModelRegistryManager {
20
- constructor(testFunction = utils_1.isModel) {
21
- this.cache = {};
22
- this.testFunction = testFunction;
23
- }
24
- /**
25
- * @summary register new Models
26
- * @param {any} constructor
27
- * @param {string} [name] when not defined, the name of the constructor will be used
28
- */
29
- register(constructor, name) {
30
- if (typeof constructor !== "function")
31
- throw new Error("Model registering failed. Missing Class name or constructor");
32
- name = name || constructor.name;
33
- this.cache[name] = constructor;
34
- }
35
- /**
36
- * @summary Gets a registered Model {@link ModelConstructor}
37
- * @param {string} name
38
- */
39
- get(name) {
40
- try {
41
- return this.cache[name];
42
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
43
- }
44
- catch (e) {
45
- return undefined;
46
- }
47
- }
48
- /**
49
- * @param {Record<string, any>} obj
50
- * @param {string} [clazz] when provided, it will attempt to find the matching constructor
51
- *
52
- * @throws Error If clazz is not found, or obj is not a {@link Model} meaning it has no {@link ModelKeys.ANCHOR} property
53
- */
54
- build(obj = {}, clazz) {
55
- if (!clazz && !this.testFunction(obj))
56
- throw new Error("Provided obj is not a Model object");
57
- const name = clazz || Model_1.Model.getMetadata(obj);
58
- if (!(name in this.cache))
59
- throw new Error((0, strings_1.sf)("Provided class {0} is not a registered Model object", name));
60
- return new this.cache[name](obj);
61
- }
62
- }
63
- exports.ModelRegistryManager = ModelRegistryManager;
64
- /**
65
- * @summary Bulk Registers Models
66
- * @description Useful when using bundlers that might not evaluate all the code at once
67
- *
68
- * @param {Array<Constructor<T>> | Array<{name: string, constructor: Constructor<T>}>} [models]
69
- *
70
- * @memberOf module:decorator-validation.Model
71
- * @category Model
72
- */
73
- function bulkModelRegister(...models) {
74
- models.forEach((m) => {
75
- const constructor = (m.constructor ? m.constructor : m);
76
- Model_1.Model.register(constructor, m.name);
77
- });
78
- }
79
-
80
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9SZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF5RkEsOENBV0M7QUFwR0QsbUNBQWdDO0FBR2hDLDhDQUFzQztBQUN0QyxtQ0FBa0M7QUFZbEM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsb0JBQW9CO0lBSS9CLFlBQVksZUFBc0QsZUFBTztRQUhqRSxVQUFLLEdBQXdDLEVBQUUsQ0FBQztRQUl0RCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxXQUFnQyxFQUFFLElBQWE7UUFDdEQsSUFBSSxPQUFPLFdBQVcsS0FBSyxVQUFVO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2IsNkRBQTZELENBQzlELENBQUM7UUFDSixJQUFJLEdBQUcsSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxJQUFZO1FBQ2QsSUFBSSxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLDZEQUE2RDtRQUMvRCxDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLE1BQTJCLEVBQUUsRUFBRSxLQUFjO1FBQ2pELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztZQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDeEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxJQUFJLGFBQUssQ0FBQyxXQUFXLENBQUMsR0FBVSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FDYixJQUFBLFlBQUUsRUFBQyxxREFBcUQsRUFBRSxJQUFJLENBQUMsQ0FDaEUsQ0FBQztRQUNKLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQW5ERCxvREFtREM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLGlCQUFpQixDQUMvQixHQUFHLE1BQTBFO0lBRTdFLE1BQU0sQ0FBQyxPQUFPLENBQ1osQ0FBQyxDQUFpRSxFQUFFLEVBQUU7UUFDcEUsTUFBTSxXQUFXLEdBQW1CLENBQ2xDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDaEIsQ0FBQztRQUNwQixhQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRyxDQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFELENBQUMsQ0FDRixDQUFDO0FBQ0osQ0FBQyIsImZpbGUiOiJtb2RlbC9SZWdpc3RyeS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4vTW9kZWxcIjtcbmltcG9ydCB7IEJ1aWxkZXJSZWdpc3RyeSB9IGZyb20gXCIuLi91dGlscy9yZWdpc3RyeVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsQ29uc3RydWN0b3IgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgc2YgfSBmcm9tIFwiLi4vdXRpbHMvc3RyaW5nc1wiO1xuaW1wb3J0IHsgaXNNb2RlbCB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgTW9kZWxSZWdpc3RyeSBJbnRlcmZhY2VcbiAqXG4gKiBAaW50ZXJmYWNlIE1vZGVsUmVnaXN0cnlcbiAqIEBleHRlbmRzIEJ1aWxkZXJSZWdpc3RyeTxNb2RlbD5cbiAqXG4gKiBAY2F0ZWdvcnkgTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxSZWdpc3RyeTxUIGV4dGVuZHMgTW9kZWw+ID0gQnVpbGRlclJlZ2lzdHJ5PFQ+O1xuXG4vKipcbiAqIEBzdW1tYXJ5IFV0aWwgY2xhc3MgdG8gZW5hYmxlIHNlcmlhbGl6YXRpb24gYW5kIGNvcnJlY3QgcmVidWlsZGluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbmNob3JLZXkgZGVmYXVsdHMgdG8ge0BsaW5rIE1vZGVsS2V5cy5BTkNIT1J9LiBUaGUgcHJvcGVydHkgbmFtZSB3aGVyZSB0aGUgcmVnaXN0ZXJlZCBjbGFzcyBuYW1lIGlzIHN0b3JlZDtcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oUmVjb3JkPHN0cmluZywgYW55Pik6IGJvb2xlYW59IFt0ZXN0RnVuY3Rpb25dIG1ldGhvZCB0byB0ZXN0IGlmIHRoZSBwcm92aWRlZCBvYmplY3QgaXMgYSBNb2RlbCBPYmplY3QuIGRlZmF1bHRzIHRvIHtAbGluayBpc01vZGVsfVxuICpcbiAqIEBjbGFzcyBNb2RlbFJlZ2lzdHJ5TWFuYWdlclxuICogQGltcGxlbWVudHMgTW9kZWxSZWdpc3RyeVxuICpcbiAqIEBjYXRlZ29yeSBNb2RlbFxuICovXG5leHBvcnQgY2xhc3MgTW9kZWxSZWdpc3RyeU1hbmFnZXI8VCBleHRlbmRzIE1vZGVsPiBpbXBsZW1lbnRzIE1vZGVsUmVnaXN0cnk8VD4ge1xuICBwcml2YXRlIGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbENvbnN0cnVjdG9yPFQ+PiA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IHRlc3RGdW5jdGlvbjogKG9iajogb2JqZWN0KSA9PiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHRlc3RGdW5jdGlvbjogKG9iajogUmVjb3JkPHN0cmluZywgYW55PikgPT4gYm9vbGVhbiA9IGlzTW9kZWwpIHtcbiAgICB0aGlzLnRlc3RGdW5jdGlvbiA9IHRlc3RGdW5jdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSByZWdpc3RlciBuZXcgTW9kZWxzXG4gICAqIEBwYXJhbSB7YW55fSBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWVdIHdoZW4gbm90IGRlZmluZWQsIHRoZSBuYW1lIG9mIHRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIHVzZWRcbiAgICovXG4gIHJlZ2lzdGVyKGNvbnN0cnVjdG9yOiBNb2RlbENvbnN0cnVjdG9yPFQ+LCBuYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjb25zdHJ1Y3RvciAhPT0gXCJmdW5jdGlvblwiKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIk1vZGVsIHJlZ2lzdGVyaW5nIGZhaWxlZC4gTWlzc2luZyBDbGFzcyBuYW1lIG9yIGNvbnN0cnVjdG9yXCJcbiAgICAgICk7XG4gICAgbmFtZSA9IG5hbWUgfHwgY29uc3RydWN0b3IubmFtZTtcbiAgICB0aGlzLmNhY2hlW25hbWVdID0gY29uc3RydWN0b3I7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgR2V0cyBhIHJlZ2lzdGVyZWQgTW9kZWwge0BsaW5rIE1vZGVsQ29uc3RydWN0b3J9XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuICBnZXQobmFtZTogc3RyaW5nKTogTW9kZWxDb25zdHJ1Y3RvcjxUPiB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlW25hbWVdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBvYmpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjbGF6el0gd2hlbiBwcm92aWRlZCwgaXQgd2lsbCBhdHRlbXB0IHRvIGZpbmQgdGhlIG1hdGNoaW5nIGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEB0aHJvd3MgRXJyb3IgSWYgY2xhenogaXMgbm90IGZvdW5kLCBvciBvYmogaXMgbm90IGEge0BsaW5rIE1vZGVsfSBtZWFuaW5nIGl0IGhhcyBubyB7QGxpbmsgTW9kZWxLZXlzLkFOQ0hPUn0gcHJvcGVydHlcbiAgICovXG4gIGJ1aWxkKG9iajogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9LCBjbGF6ej86IHN0cmluZyk6IFQge1xuICAgIGlmICghY2xhenogJiYgIXRoaXMudGVzdEZ1bmN0aW9uKG9iaikpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm92aWRlZCBvYmogaXMgbm90IGEgTW9kZWwgb2JqZWN0XCIpO1xuICAgIGNvbnN0IG5hbWUgPSBjbGF6eiB8fCBNb2RlbC5nZXRNZXRhZGF0YShvYmogYXMgYW55KTtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMuY2FjaGUpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBzZihcIlByb3ZpZGVkIGNsYXNzIHswfSBpcyBub3QgYSByZWdpc3RlcmVkIE1vZGVsIG9iamVjdFwiLCBuYW1lKVxuICAgICAgKTtcbiAgICByZXR1cm4gbmV3IHRoaXMuY2FjaGVbbmFtZV0ob2JqKTtcbiAgfVxufVxuXG4vKipcbiAqIEBzdW1tYXJ5IEJ1bGsgUmVnaXN0ZXJzIE1vZGVsc1xuICogQGRlc2NyaXB0aW9uIFVzZWZ1bCB3aGVuIHVzaW5nIGJ1bmRsZXJzIHRoYXQgbWlnaHQgbm90IGV2YWx1YXRlIGFsbCB0aGUgY29kZSBhdCBvbmNlXG4gKlxuICogQHBhcmFtIHtBcnJheTxDb25zdHJ1Y3RvcjxUPj4gfCBBcnJheTx7bmFtZTogc3RyaW5nLCBjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8VD59Pn0gW21vZGVsc11cbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLk1vZGVsXG4gKiBAY2F0ZWdvcnkgTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1bGtNb2RlbFJlZ2lzdGVyPFQgZXh0ZW5kcyBNb2RlbD4oXG4gIC4uLm1vZGVsczogKENvbnN0cnVjdG9yPFQ+IHwgeyBuYW1lOiBzdHJpbmc7IGNvbnN0cnVjdG9yOiBDb25zdHJ1Y3RvcjxUPiB9KVtdXG4pIHtcbiAgbW9kZWxzLmZvckVhY2goXG4gICAgKG06IENvbnN0cnVjdG9yPFQ+IHwgeyBuYW1lOiBzdHJpbmc7IGNvbnN0cnVjdG9yOiBDb25zdHJ1Y3RvcjxUPiB9KSA9PiB7XG4gICAgICBjb25zdCBjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8VD4gPSAoXG4gICAgICAgIG0uY29uc3RydWN0b3IgPyBtLmNvbnN0cnVjdG9yIDogbVxuICAgICAgKSBhcyBDb25zdHJ1Y3RvcjxUPjtcbiAgICAgIE1vZGVsLnJlZ2lzdGVyKGNvbnN0cnVjdG9yLCAobSBhcyBDb25zdHJ1Y3RvcjxUPikubmFtZSk7XG4gICAgfVxuICApO1xufVxuIl19