@decaf-ts/decorator-validation 1.2.0 → 1.3.1

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 (45) hide show
  1. package/dist/decorator-validation.bundle.min.js +1 -1
  2. package/dist/esm/decorator-validation.bundle.min.esm.js +1 -1
  3. package/lib/esm/index.d.ts +1 -1
  4. package/lib/esm/index.js +2 -2
  5. package/lib/esm/model/Model.d.ts +9 -5
  6. package/lib/esm/model/Model.js +30 -12
  7. package/lib/esm/model/ModelErrorDefinition.d.ts +1 -1
  8. package/lib/esm/model/ModelErrorDefinition.js +1 -1
  9. package/lib/esm/model/Registry.d.ts +1 -2
  10. package/lib/esm/model/Registry.js +3 -5
  11. package/lib/esm/model/construction.d.ts +2 -0
  12. package/lib/esm/model/construction.js +37 -3
  13. package/lib/esm/model/decorators.d.ts +3 -2
  14. package/lib/esm/model/decorators.js +23 -15
  15. package/lib/esm/model/types.d.ts +6 -0
  16. package/lib/esm/model/types.js +1 -1
  17. package/lib/esm/model/utils.js +8 -4
  18. package/lib/esm/model/validation.js +3 -2
  19. package/lib/esm/utils/constants.d.ts +2 -1
  20. package/lib/esm/utils/constants.js +2 -1
  21. package/lib/esm/utils/serialization.d.ts +1 -1
  22. package/lib/esm/utils/serialization.js +7 -3
  23. package/lib/index.cjs +2 -2
  24. package/lib/index.d.ts +1 -1
  25. package/lib/model/Model.cjs +31 -13
  26. package/lib/model/Model.d.ts +9 -5
  27. package/lib/model/ModelErrorDefinition.cjs +1 -1
  28. package/lib/model/ModelErrorDefinition.d.ts +1 -1
  29. package/lib/model/Registry.cjs +3 -5
  30. package/lib/model/Registry.d.ts +1 -2
  31. package/lib/model/construction.cjs +39 -3
  32. package/lib/model/construction.d.ts +2 -0
  33. package/lib/model/decorators.cjs +22 -14
  34. package/lib/model/decorators.d.ts +3 -2
  35. package/lib/model/types.cjs +1 -1
  36. package/lib/model/types.d.ts +6 -0
  37. package/lib/model/utils.cjs +8 -4
  38. package/lib/model/validation.cjs +12 -11
  39. package/lib/utils/constants.cjs +2 -1
  40. package/lib/utils/constants.d.ts +2 -1
  41. package/lib/utils/serialization.cjs +7 -3
  42. package/lib/utils/serialization.d.ts +1 -1
  43. package/package.json +1 -1
  44. package/lib/esm/validation/Validators/index.js +0 -54
  45. package/lib/esm/validation/Validators/types.js +0 -3
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.constructFromObject = constructFromObject;
4
4
  exports.constructFromModel = constructFromModel;
5
5
  exports.construct = construct;
6
+ exports.findLastProtoBeforeObject = findLastProtoBeforeObject;
7
+ exports.bindModelPrototype = bindModelPrototype;
6
8
  const Model_1 = require("./Model.cjs");
7
9
  const constants_1 = require("../validation/Validators/constants.cjs");
8
10
  const constants_2 = require("./constants.cjs");
@@ -27,7 +29,8 @@ function constructFromObject(self, obj) {
27
29
  for (const prop in obj)
28
30
  if (obj.hasOwnProperty(prop) &&
29
31
  (self.hasOwnProperty(prop) ||
30
- (self.prototype && self.prototype.hasOwnProperty(prop))))
32
+ (self.prototype &&
33
+ self.prototype.hasOwnProperty(prop))))
31
34
  self[prop] = obj[prop] || undefined;
32
35
  return self;
33
36
  }
@@ -51,7 +54,8 @@ function constructFromModel(self, obj) {
51
54
  for (const prop in obj)
52
55
  if (obj.hasOwnProperty(prop) &&
53
56
  (self.hasOwnProperty(prop) ||
54
- (self.prototype && self.prototype.hasOwnProperty(prop)))) {
57
+ (self.prototype &&
58
+ self.prototype.hasOwnProperty(prop)))) {
55
59
  self[prop] = obj[prop];
56
60
  if (typeof self[prop] !== "object")
57
61
  continue;
@@ -133,5 +137,37 @@ function construct(constructor, ...args) {
133
137
  _constr.prototype = constructor.prototype;
134
138
  return _constr(...args);
135
139
  }
140
+ function findLastProtoBeforeObject(obj) {
141
+ let prototype = Object.getPrototypeOf(obj);
142
+ if (prototype === Object.prototype)
143
+ return obj;
144
+ while (prototype !== Object.prototype) {
145
+ prototype = Object.getPrototypeOf(prototype);
146
+ if (prototype === Object.prototype)
147
+ return prototype;
148
+ if (Object.getPrototypeOf(prototype) === Object.prototype)
149
+ return prototype;
150
+ }
151
+ throw new Error("Could not find proper prototype");
152
+ }
153
+ function bindModelPrototype(obj) {
154
+ if (obj instanceof Model_1.Model)
155
+ return;
156
+ function bindPrototype(objToOverride, prototype) {
157
+ Object.setPrototypeOf(objToOverride, prototype);
158
+ }
159
+ const prototype = Object.getPrototypeOf(obj);
160
+ if (prototype === Object.prototype) {
161
+ return bindPrototype(obj, Model_1.Model.prototype);
162
+ }
163
+ while (prototype !== Object.prototype) {
164
+ const prot = Object.getPrototypeOf(prototype);
165
+ if (prot === Object.prototype ||
166
+ Object.getPrototypeOf(prot) === Object.prototype) {
167
+ return bindPrototype(prototype, Model_1.Model.prototype);
168
+ }
169
+ }
170
+ throw new Error("Could not find proper prototype to bind");
171
+ }
136
172
 
137
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9jb25zdHJ1Y3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQkEsa0RBYUM7QUFlRCxnREFrR0M7QUFhRCw4QkFPQztBQXJLRCxtQ0FBZ0M7QUFDaEMsa0VBQW9FO0FBQ3BFLDJDQUFzRDtBQUN0RCxrREFBK0M7QUFDL0MsOENBQXNDO0FBQ3RDLHFEQUFnRjtBQUNoRixtQ0FBa0M7QUFFbEM7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLG1CQUFtQixDQUNqQyxJQUFPLEVBQ1AsR0FBNkI7SUFFN0IsSUFBSSxDQUFDLEdBQUc7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN0QixLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUc7UUFDcEIsSUFDRSxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztZQUN4QixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO2dCQUN4QixDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUV6RCxJQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUNqRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsSUFBTyxFQUNQLEdBQTZCO0lBRTdCLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFdEIsSUFBSSxVQUErQixFQUFFLEdBQXNCLENBQUM7SUFFNUQsS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHO1FBQ3BCLElBQ0UsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDeEIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDeEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsY0FB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R0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNmLGdEQUFnRDtvQkFDbEQsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUVILE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixTQUFTLENBQ3ZCLFdBQWdCLEVBQ2hCLEdBQUcsSUFBVztJQUVkLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDN0QsT0FBTyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO0lBQzFDLE9BQU8sT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQyIsImZpbGUiOiJtb2RlbC9jb25zdHJ1Y3Rpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuL01vZGVsXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCIuLi92YWxpZGF0aW9uL1ZhbGlkYXRvcnMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBqc1R5cGVzLCBSZXNlcnZlZE1vZGVscyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTW9kZWxLZXlzIH0gZnJvbSBcIi4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgc2YgfSBmcm9tIFwiLi4vdXRpbHMvc3RyaW5nc1wiO1xuaW1wb3J0IHsgZ2V0UHJvcGVydHlEZWNvcmF0b3JzLCBEZWNvcmF0b3JNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgaXNNb2RlbCB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgUmVwb3B1bGF0ZXMgdGhlIE9iamVjdCBwcm9wZXJ0aWVzIHdpdGggdGhlIG9uZXMgZnJvbSB0aGUgbmV3IG9iamVjdFxuICogQGRlc2NyaXB0aW9uIEl0ZXJhdGVzIGFsbCBjb21tb24gcHJvcGVydGllcyBvZiBvYmogKGlmIGV4aXN0aW5nKSBhbmQgc2VsZiwgYW5kIGNvcGllcyB0aGVtIG9udG8gc2VsZlxuICpcbiAqIEBwYXJhbSB7VH0gc2VsZlxuICogQHBhcmFtIHtUIHwgUmVjb3JkPHN0cmluZywgYW55Pn0gW29ial1cbiAqXG4gKiBAZnVuY3Rpb24gY29uc3RydWN0RnJvbU9iamVjdFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Db25zdHJ1Y3Rpb25cbiAqIEBjYXRlZ29yeSBDb25zdHJ1Y3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdEZyb21PYmplY3Q8VCBleHRlbmRzIE1vZGVsPihcbiAgc2VsZjogVCxcbiAgb2JqPzogVCB8IFJlY29yZDxzdHJpbmcsIGFueT4sXG4pIHtcbiAgaWYgKCFvYmopIHJldHVybiBzZWxmO1xuICBmb3IgKGNvbnN0IHByb3AgaW4gb2JqKVxuICAgIGlmIChcbiAgICAgIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJlxuICAgICAgKHNlbGYuaGFzT3duUHJvcGVydHkocHJvcCkgfHxcbiAgICAgICAgKHNlbGYucHJvdG90eXBlICYmIHNlbGYucHJvdG90eXBlLmhhc093blByb3BlcnR5KHByb3ApKSlcbiAgICApXG4gICAgICAoc2VsZiBhcyBhbnkpW3Byb3BdID0gb2JqW3Byb3BdIHx8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHNlbGY7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgUmVwb3B1bGF0ZXMgdGhlIGluc3RhbmNlIHdpdGggdGhlIG9uZXMgZnJvbSB0aGUgbmV3IE1vZGVsIE9iamVjdFxuICogQGRlc2NyaXB0aW9uIEl0ZXJhdGVzIGFsbCBjb21tb24gcHJvcGVydGllcyBvZiBvYmogKGlmIGV4aXN0aW5nKSBhbmQgc2VsZiwgYW5kIGNvcGllcyB0aGVtIG9udG8gc2VsZi5cbiAqIElzIGF3YXJlIG9mIG5lc3RlZCBNb2RlbCBPYmplY3RzIGFuZCByZWJ1aWxkcyB0aGVtIGFsc28uXG4gKiBXaGVuIExpc3QgcHJvcGVydGllcyBhcmUgZGVjb3JhdGVkIHdpdGgge0BsaW5rIGxpc3R9LCB0aGV5IGxpc3QgaXRlbXMgd2lsbCBhbHNvIGJlIHJlYnVpbHRcbiAqXG4gKiBAcGFyYW0ge1R9IHNlbGZcbiAqIEBwYXJhbSB7VCB8IFJlY29yZDxzdHJpbmcsIGFueT59IFtvYmpdXG4gKlxuICogQGZ1bmN0aW9uIGNvbnN0cnVjdEZyb21Nb2RlbFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Db25zdHJ1Y3Rpb25cbiAqIEBjYXRlZ29yeSBDb25zdHJ1Y3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdEZyb21Nb2RlbDxUIGV4dGVuZHMgTW9kZWw+KFxuICBzZWxmOiBULFxuICBvYmo/OiBUIHwgUmVjb3JkPHN0cmluZywgYW55Pixcbikge1xuICBpZiAoIW9iaikgcmV0dXJuIHNlbGY7XG5cbiAgbGV0IGRlY29yYXRvcnM6IERlY29yYXRvck1ldGFkYXRhW10sIGRlYzogRGVjb3JhdG9yTWV0YWRhdGE7XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIG9iailcbiAgICBpZiAoXG4gICAgICBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgJiZcbiAgICAgIChzZWxmLmhhc093blByb3BlcnR5KHByb3ApIHx8XG4gICAgICAgIChzZWxmLnByb3RvdHlwZSAmJiBzZWxmLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkpXG4gICAgKSB7XG4gICAgICAoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSA9IChvYmogYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF07XG4gICAgICBpZiAodHlwZW9mIHNlbGZbcHJvcF0gIT09IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xuICAgICAgaWYgKGlzTW9kZWwoKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0pKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0gPSBNb2RlbC5idWlsZChcbiAgICAgICAgICAgIChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhbGxEZWNvcmF0b3JzOiBEZWNvcmF0b3JNZXRhZGF0YVtdID0gZ2V0UHJvcGVydHlEZWNvcmF0b3JzKFxuICAgICAgICBWYWxpZGF0aW9uS2V5cy5SRUZMRUNULFxuICAgICAgICBzZWxmLFxuICAgICAgICBwcm9wLFxuICAgICAgKS5kZWNvcmF0b3JzO1xuICAgICAgZGVjb3JhdG9ycyA9IGFsbERlY29yYXRvcnMuZmlsdGVyKFxuICAgICAgICAoZDogRGVjb3JhdG9yTWV0YWRhdGEpID0+XG4gICAgICAgICAgW01vZGVsS2V5cy5UWVBFLCBWYWxpZGF0aW9uS2V5cy5UWVBFXS5pbmRleE9mKGQua2V5KSAhPT0gLTEsXG4gICAgICApO1xuICAgICAgaWYgKCFkZWNvcmF0b3JzIHx8ICFkZWNvcmF0b3JzLmxlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNmKFwiZmFpbGVkIHRvIGZpbmQgZGVjb3JhdG9ycyBmb3IgcHJvcGVydHkgezB9XCIsIHByb3ApKTtcbiAgICAgIGRlYyA9IGRlY29yYXRvcnMucG9wKCkgYXMgRGVjb3JhdG9yTWV0YWRhdGE7XG4gICAgICBjb25zdCBjbGF6eiA9IGRlYy5wcm9wcy5uYW1lXG4gICAgICAgID8gW2RlYy5wcm9wcy5uYW1lXVxuICAgICAgICA6IEFycmF5LmlzQXJyYXkoZGVjLnByb3BzLmN1c3RvbVR5cGVzKVxuICAgICAgICAgID8gZGVjLnByb3BzLmN1c3RvbVR5cGVzXG4gICAgICAgICAgOiBbZGVjLnByb3BzLmN1c3RvbVR5cGVzXTtcbiAgICAgIGNvbnN0IHJlc2VydmVkID0gT2JqZWN0LnZhbHVlcyhSZXNlcnZlZE1vZGVscykubWFwKCh2KSA9PlxuICAgICAgICB2LnRvTG93ZXJDYXNlKCksXG4gICAgICApIGFzIHN0cmluZ1tdO1xuXG4gICAgICBjbGF6ei5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgIGlmIChyZXNlcnZlZC5pbmRleE9mKGMudG9Mb3dlckNhc2UoKSkgPT09IC0xKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIkFycmF5XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJTZXRcIjpcbiAgICAgICAgICAgICAgICBpZiAoYWxsRGVjb3JhdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3REZWMgPSBhbGxEZWNvcmF0b3JzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChkKSA9PiBkLmtleSA9PT0gVmFsaWRhdGlvbktleXMuTElTVCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpZiAobGlzdERlYykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGF6ek5hbWUgPSBsaXN0RGVjLnByb3BzLmNsYXNzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgKHQ6IHN0cmluZykgPT4gIWpzVHlwZXMuaW5jbHVkZXModC50b0xvd2VyQ2FzZSgpKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IFwiQXJyYXlcIilcbiAgICAgICAgICAgICAgICAgICAgICAoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PlxuICAgICAgICAgICAgICAgICAgICAgIClbcHJvcF0ubWFwKChlbDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1wib2JqZWN0XCIsIFwiZnVuY3Rpb25cIl0uaW5jbHVkZXModHlwZW9mIGVsKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGF6ek5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNb2RlbC5idWlsZChlbCwgY2xhenpOYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGVsO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gXCJTZXRcIikge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbXCJvYmplY3RcIiwgXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdikgJiYgY2xhenpOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gcy5hZGQoTW9kZWwuYnVpbGQodiwgY2xhenpOYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzLmFkZCh2KTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0gPSBzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmICgoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSlcbiAgICAgICAgICAgICAgICAgIChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdID0gTW9kZWwuYnVpbGQoXG4gICAgICAgICAgICAgICAgICAgIHNlbGZbcHJvcF0sXG4gICAgICAgICAgICAgICAgICAgIGMsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICAvLyBkbyBub3RoaW5nLiB3ZSBoYXZlIG5vIHJlZ2lzdHJ5IG9mIHRoaXMgY2xhc3NcbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgSGVscGVyIEZ1bmN0aW9uIHRvIG92ZXJyaWRlIGNvbnN0cnVjdG9yc1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc11cbiAqIEByZXR1cm4ge1R9IHRoZSBuZXcgaW5zdGFuY2VcbiAqXG4gKiBAZnVuY3Rpb24gY29uc3RydWN0XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLkNvbnN0cnVjdGlvblxuICogQGNhdGVnb3J5IENvbnN0cnVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0PFQgZXh0ZW5kcyBNb2RlbD4oXG4gIGNvbnN0cnVjdG9yOiBhbnksXG4gIC4uLmFyZ3M6IGFueVtdXG4pOiBUIHtcbiAgY29uc3QgX2NvbnN0ciA9ICguLi5hcmd6OiBhbnlbXSkgPT4gbmV3IGNvbnN0cnVjdG9yKC4uLmFyZ3opO1xuICBfY29uc3RyLnByb3RvdHlwZSA9IGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIF9jb25zdHIoLi4uYXJncyk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgVHlwbyBvZiBhIE1vZGVsIGJ1aWxkZXIgZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uQ29uc3RydWN0aW9uXG4gKiBAY2F0ZWdvcnkgQ29uc3RydWN0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIE1vZGVsQnVpbGRlckZ1bmN0aW9uID0gPFQgZXh0ZW5kcyBNb2RlbD4oXG4gIHNlbGY6IFQsXG4gIG9iaj86IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuKSA9PiBUO1xuIl19
173
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9jb25zdHJ1Y3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQkEsa0RBY0M7QUFlRCxnREFtR0M7QUFhRCw4QkFPQztBQVlELDhEQVNDO0FBRUQsZ0RBcUJDO0FBbk5ELG1DQUFnQztBQUNoQyxrRUFBb0U7QUFDcEUsMkNBQXNEO0FBQ3RELGtEQUErQztBQUMvQyw4Q0FBc0M7QUFDdEMscURBQWdGO0FBQ2hGLG1DQUFrQztBQUVsQzs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQ2pDLElBQU8sRUFDUCxHQUE2QjtJQUU3QixJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3RCLEtBQUssTUFBTSxJQUFJLElBQUksR0FBRztRQUNwQixJQUNFLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ3hCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hCLENBQUUsSUFBWSxDQUFDLFNBQVM7b0JBQ3JCLElBQVksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFakQsSUFBWSxDQUFDLElBQUksQ0FBQyxHQUFJLEdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDMUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQ2hDLElBQU8sRUFDUCxHQUE2QjtJQUU3QixJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXRCLElBQUksVUFBK0IsRUFBRSxHQUFzQixDQUFDO0lBRTVELEtBQUssTUFBTSxJQUFJLElBQUksR0FBRztRQUNwQixJQUNFLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ3hCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hCLENBQUUsSUFBWSxDQUFDLFNBQVM7b0JB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YSxDQUFDLGFBQXFCLEVBQUUsU0FBaUI7UUFDN0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFRLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25DLE9BQU8sYUFBYSxDQUFDLEdBQUcsRUFBRSxhQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELE9BQU8sU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLElBQ0UsSUFBSSxLQUFLLE1BQU0sQ0FBQyxTQUFTO1lBQ3pCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFDaEQsQ0FBQztZQUNELE9BQU8sYUFBYSxDQUFDLFNBQVMsRUFBRSxhQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7QUFDN0QsQ0FBQyIsImZpbGUiOiJtb2RlbC9jb25zdHJ1Y3Rpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuL01vZGVsXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCIuLi92YWxpZGF0aW9uL1ZhbGlkYXRvcnMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBqc1R5cGVzLCBSZXNlcnZlZE1vZGVscyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTW9kZWxLZXlzIH0gZnJvbSBcIi4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgc2YgfSBmcm9tIFwiLi4vdXRpbHMvc3RyaW5nc1wiO1xuaW1wb3J0IHsgZ2V0UHJvcGVydHlEZWNvcmF0b3JzLCBEZWNvcmF0b3JNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgaXNNb2RlbCB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgUmVwb3B1bGF0ZXMgdGhlIE9iamVjdCBwcm9wZXJ0aWVzIHdpdGggdGhlIG9uZXMgZnJvbSB0aGUgbmV3IG9iamVjdFxuICogQGRlc2NyaXB0aW9uIEl0ZXJhdGVzIGFsbCBjb21tb24gcHJvcGVydGllcyBvZiBvYmogKGlmIGV4aXN0aW5nKSBhbmQgc2VsZiwgYW5kIGNvcGllcyB0aGVtIG9udG8gc2VsZlxuICpcbiAqIEBwYXJhbSB7VH0gc2VsZlxuICogQHBhcmFtIHtUIHwgUmVjb3JkPHN0cmluZywgYW55Pn0gW29ial1cbiAqXG4gKiBAZnVuY3Rpb24gY29uc3RydWN0RnJvbU9iamVjdFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Db25zdHJ1Y3Rpb25cbiAqIEBjYXRlZ29yeSBDb25zdHJ1Y3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdEZyb21PYmplY3Q8VCBleHRlbmRzIE1vZGVsPihcbiAgc2VsZjogVCxcbiAgb2JqPzogVCB8IFJlY29yZDxzdHJpbmcsIGFueT4sXG4pIHtcbiAgaWYgKCFvYmopIHJldHVybiBzZWxmO1xuICBmb3IgKGNvbnN0IHByb3AgaW4gb2JqKVxuICAgIGlmIChcbiAgICAgIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJlxuICAgICAgKHNlbGYuaGFzT3duUHJvcGVydHkocHJvcCkgfHxcbiAgICAgICAgKChzZWxmIGFzIGFueSkucHJvdG90eXBlICYmXG4gICAgICAgICAgKHNlbGYgYXMgYW55KS5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkocHJvcCkpKVxuICAgIClcbiAgICAgIChzZWxmIGFzIGFueSlbcHJvcF0gPSAob2JqIGFzIGFueSlbcHJvcF0gfHwgdW5kZWZpbmVkO1xuICByZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBSZXBvcHVsYXRlcyB0aGUgaW5zdGFuY2Ugd2l0aCB0aGUgb25lcyBmcm9tIHRoZSBuZXcgTW9kZWwgT2JqZWN0XG4gKiBAZGVzY3JpcHRpb24gSXRlcmF0ZXMgYWxsIGNvbW1vbiBwcm9wZXJ0aWVzIG9mIG9iaiAoaWYgZXhpc3RpbmcpIGFuZCBzZWxmLCBhbmQgY29waWVzIHRoZW0gb250byBzZWxmLlxuICogSXMgYXdhcmUgb2YgbmVzdGVkIE1vZGVsIE9iamVjdHMgYW5kIHJlYnVpbGRzIHRoZW0gYWxzby5cbiAqIFdoZW4gTGlzdCBwcm9wZXJ0aWVzIGFyZSBkZWNvcmF0ZWQgd2l0aCB7QGxpbmsgbGlzdH0sIHRoZXkgbGlzdCBpdGVtcyB3aWxsIGFsc28gYmUgcmVidWlsdFxuICpcbiAqIEBwYXJhbSB7VH0gc2VsZlxuICogQHBhcmFtIHtUIHwgUmVjb3JkPHN0cmluZywgYW55Pn0gW29ial1cbiAqXG4gKiBAZnVuY3Rpb24gY29uc3RydWN0RnJvbU1vZGVsXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLkNvbnN0cnVjdGlvblxuICogQGNhdGVnb3J5IENvbnN0cnVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0RnJvbU1vZGVsPFQgZXh0ZW5kcyBNb2RlbD4oXG4gIHNlbGY6IFQsXG4gIG9iaj86IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuKSB7XG4gIGlmICghb2JqKSByZXR1cm4gc2VsZjtcblxuICBsZXQgZGVjb3JhdG9yczogRGVjb3JhdG9yTWV0YWRhdGFbXSwgZGVjOiBEZWNvcmF0b3JNZXRhZGF0YTtcblxuICBmb3IgKGNvbnN0IHByb3AgaW4gb2JqKVxuICAgIGlmIChcbiAgICAgIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJlxuICAgICAgKHNlbGYuaGFzT3duUHJvcGVydHkocHJvcCkgfHxcbiAgICAgICAgKChzZWxmIGFzIGFueSkucHJvdG90eXBlICYmXG4gICAgICAgICAgKHNlbGYgYXMgYW55KS5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkocHJvcCkpKVxuICAgICkge1xuICAgICAgKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0gPSAob2JqIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdO1xuICAgICAgaWYgKHR5cGVvZiAoc2VsZiBhcyBhbnkpW3Byb3BdICE9PSBcIm9iamVjdFwiKSBjb250aW51ZTtcbiAgICAgIGlmIChpc01vZGVsKChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdID0gTW9kZWwuYnVpbGQoXG4gICAgICAgICAgICAoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWxsRGVjb3JhdG9yczogRGVjb3JhdG9yTWV0YWRhdGFbXSA9IGdldFByb3BlcnR5RGVjb3JhdG9ycyhcbiAgICAgICAgVmFsaWRhdGlvbktleXMuUkVGTEVDVCxcbiAgICAgICAgc2VsZixcbiAgICAgICAgcHJvcCxcbiAgICAgICkuZGVjb3JhdG9ycztcbiAgICAgIGRlY29yYXRvcnMgPSBhbGxEZWNvcmF0b3JzLmZpbHRlcihcbiAgICAgICAgKGQ6IERlY29yYXRvck1ldGFkYXRhKSA9PlxuICAgICAgICAgIFtNb2RlbEtleXMuVFlQRSwgVmFsaWRhdGlvbktleXMuVFlQRV0uaW5kZXhPZihkLmtleSkgIT09IC0xLFxuICAgICAgKTtcbiAgICAgIGlmICghZGVjb3JhdG9ycyB8fCAhZGVjb3JhdG9ycy5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihzZihcImZhaWxlZCB0byBmaW5kIGRlY29yYXRvcnMgZm9yIHByb3BlcnR5IHswfVwiLCBwcm9wKSk7XG4gICAgICBkZWMgPSBkZWNvcmF0b3JzLnBvcCgpIGFzIERlY29yYXRvck1ldGFkYXRhO1xuICAgICAgY29uc3QgY2xhenogPSBkZWMucHJvcHMubmFtZVxuICAgICAgICA/IFtkZWMucHJvcHMubmFtZV1cbiAgICAgICAgOiBBcnJheS5pc0FycmF5KGRlYy5wcm9wcy5jdXN0b21UeXBlcylcbiAgICAgICAgICA/IGRlYy5wcm9wcy5jdXN0b21UeXBlc1xuICAgICAgICAgIDogW2RlYy5wcm9wcy5jdXN0b21UeXBlc107XG4gICAgICBjb25zdCByZXNlcnZlZCA9IE9iamVjdC52YWx1ZXMoUmVzZXJ2ZWRNb2RlbHMpLm1hcCgodikgPT5cbiAgICAgICAgdi50b0xvd2VyQ2FzZSgpLFxuICAgICAgKSBhcyBzdHJpbmdbXTtcblxuICAgICAgY2xhenouZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICBpZiAocmVzZXJ2ZWQuaW5kZXhPZihjLnRvTG93ZXJDYXNlKCkpID09PSAtMSlcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJBcnJheVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiU2V0XCI6XG4gICAgICAgICAgICAgICAgaWYgKGFsbERlY29yYXRvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsaXN0RGVjID0gYWxsRGVjb3JhdG9ycy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAoZCkgPT4gZC5rZXkgPT09IFZhbGlkYXRpb25LZXlzLkxJU1QsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKGxpc3REZWMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xhenpOYW1lID0gbGlzdERlYy5wcm9wcy5jbGFzcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICh0OiBzdHJpbmcpID0+ICFqc1R5cGVzLmluY2x1ZGVzKHQudG9Mb3dlckNhc2UoKSksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjID09PSBcIkFycmF5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0gPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT5cbiAgICAgICAgICAgICAgICAgICAgICApW3Byb3BdLm1hcCgoZWw6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcIm9iamVjdFwiLCBcImZ1bmN0aW9uXCJdLmluY2x1ZGVzKHR5cGVvZiBlbCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhenpOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gTW9kZWwuYnVpbGQoZWwsIGNsYXp6TmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlbDtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IFwiU2V0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiAoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgW1wib2JqZWN0XCIsIFwiZnVuY3Rpb25cIl0uaW5jbHVkZXModHlwZW9mIHYpICYmIGNsYXp6TmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHMuYWRkKE1vZGVsLmJ1aWxkKHYsIGNsYXp6TmFtZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogcy5hZGQodik7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdID0gcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0pXG4gICAgICAgICAgICAgICAgICAoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSA9IE1vZGVsLmJ1aWxkKFxuICAgICAgICAgICAgICAgICAgICAoc2VsZiBhcyBhbnkpW3Byb3BdLFxuICAgICAgICAgICAgICAgICAgICBjLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgLy8gZG8gbm90aGluZy4gd2UgaGF2ZSBubyByZWdpc3RyeSBvZiB0aGlzIGNsYXNzXG4gICAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IEhlbHBlciBGdW5jdGlvbiB0byBvdmVycmlkZSBjb25zdHJ1Y3RvcnNcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHthbnlbXX0gW2FyZ3NdXG4gKiBAcmV0dXJuIHtUfSB0aGUgbmV3IGluc3RhbmNlXG4gKlxuICogQGZ1bmN0aW9uIGNvbnN0cnVjdFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Db25zdHJ1Y3Rpb25cbiAqIEBjYXRlZ29yeSBDb25zdHJ1Y3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdDxUIGV4dGVuZHMgTW9kZWw+KFxuICBjb25zdHJ1Y3RvcjogYW55LFxuICAuLi5hcmdzOiBhbnlbXVxuKTogVCB7XG4gIGNvbnN0IF9jb25zdHIgPSAoLi4uYXJnejogYW55W10pID0+IG5ldyBjb25zdHJ1Y3RvciguLi5hcmd6KTtcbiAgX2NvbnN0ci5wcm90b3R5cGUgPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBfY29uc3RyKC4uLmFyZ3MpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFR5cG8gb2YgYSBNb2RlbCBidWlsZGVyIGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLkNvbnN0cnVjdGlvblxuICogQGNhdGVnb3J5IENvbnN0cnVjdGlvblxuICovXG5leHBvcnQgdHlwZSBNb2RlbEJ1aWxkZXJGdW5jdGlvbiA9IDxUIGV4dGVuZHMgTW9kZWw+KFxuICBzZWxmOiBULFxuICBvYmo/OiBUIHwgUmVjb3JkPHN0cmluZywgYW55PixcbikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMYXN0UHJvdG9CZWZvcmVPYmplY3Qob2JqOiBvYmplY3QpOiBvYmplY3Qge1xuICBsZXQgcHJvdG90eXBlOiBhbnkgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgaWYgKHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSkgcmV0dXJuIG9iajtcbiAgd2hpbGUgKHByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpO1xuICAgIGlmIChwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUpIHJldHVybiBwcm90b3R5cGU7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBPYmplY3QucHJvdG90eXBlKSByZXR1cm4gcHJvdG90eXBlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIHByb3BlciBwcm90b3R5cGVcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kTW9kZWxQcm90b3R5cGUob2JqOiBhbnkpIHtcbiAgaWYgKG9iaiBpbnN0YW5jZW9mIE1vZGVsKSByZXR1cm47XG5cbiAgZnVuY3Rpb24gYmluZFByb3RvdHlwZShvYmpUb092ZXJyaWRlOiBvYmplY3QsIHByb3RvdHlwZTogb2JqZWN0KSB7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG9ialRvT3ZlcnJpZGUsIHByb3RvdHlwZSk7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGU6IGFueSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopO1xuICBpZiAocHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuIGJpbmRQcm90b3R5cGUob2JqLCBNb2RlbC5wcm90b3R5cGUpO1xuICB9XG4gIHdoaWxlIChwcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBjb25zdCBwcm90ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSk7XG4gICAgaWYgKFxuICAgICAgcHJvdCA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fFxuICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3QpID09PSBPYmplY3QucHJvdG90eXBlXG4gICAgKSB7XG4gICAgICByZXR1cm4gYmluZFByb3RvdHlwZShwcm90b3R5cGUsIE1vZGVsLnByb3RvdHlwZSk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIHByb3BlciBwcm90b3R5cGUgdG8gYmluZFwiKTtcbn1cbiJdfQ==
@@ -43,3 +43,5 @@ export declare function construct<T extends Model>(constructor: any, ...args: an
43
43
  * @category Construction
44
44
  */
45
45
  export type ModelBuilderFunction = <T extends Model>(self: T, obj?: T | Record<string, any>) => T;
46
+ export declare function findLastProtoBeforeObject(obj: object): object;
47
+ export declare function bindModelPrototype(obj: any): void;
@@ -5,6 +5,7 @@ const construction_1 = require("./construction.cjs");
5
5
  const constants_1 = require("../utils/constants.cjs");
6
6
  const Model_1 = require("./Model.cjs");
7
7
  const utils_1 = require("./utils.cjs");
8
+ const reflection_1 = require("@decaf-ts/reflection");
8
9
  /**
9
10
  * @summary Defines a class as a Model class
10
11
  * @description
@@ -15,31 +16,38 @@ const utils_1 = require("./utils.cjs");
15
16
  * - Runs the optional {@link InstanceCallback} if provided;
16
17
  * - Defines an {@link ModelKeys#ANCHOR} property for serialization and model rebuilding purposes;
17
18
  *
18
- * @param {Record<string, any>} [props] additional properties to store as metadata
19
+ * @param {string} [nameOverride]
19
20
  * @param {InstanceCallback} [instanceCallback] optional callback that will be called with the instance upon instantiation. defaults to undefined
20
21
  *
22
+ * @param basePrototype
21
23
  * @function model
22
24
  * @category Decorators
23
25
  */
24
- function model(props, instanceCallback) {
26
+ function model(nameOverride, instanceCallback) {
25
27
  return (original) => {
26
28
  // the new constructor behaviour
27
29
  const newConstructor = function (...args) {
28
30
  const instance = (0, construction_1.construct)(original, ...args);
31
+ (0, construction_1.bindModelPrototype)(instance);
29
32
  // run a builder function if defined with the first argument (The ModelArg)
30
33
  const builder = Model_1.Model.getBuilder();
31
34
  if (builder)
32
35
  builder(instance, args.length ? args[0] : undefined);
33
- const metadata = Object.assign({}, {
34
- class: original.name,
35
- });
36
- Object.defineProperty(instance, constants_1.ModelKeys.ANCHOR, {
37
- writable: false,
38
- enumerable: false,
39
- configurable: false,
40
- value: metadata,
41
- });
42
- Reflect.defineMetadata((0, utils_1.getModelKey)(constants_1.ModelKeys.MODEL), Object.assign(metadata, props || {}), instance.constructor);
36
+ //
37
+ // const data = Object.assign(
38
+ // {},
39
+ // {
40
+ // class: original.name,
41
+ // },
42
+ // );
43
+ //
44
+ // Object.defineProperty(instance, ModelKeys.ANCHOR, {
45
+ // writable: false,
46
+ // enumerable: false,
47
+ // configurable: false,
48
+ // value: data,
49
+ // });
50
+ (0, reflection_1.metadata)((0, utils_1.getModelKey)(constants_1.ModelKeys.MODEL), nameOverride || original.name)(instance.constructor);
43
51
  if (instanceCallback)
44
52
  instanceCallback(instance, ...args);
45
53
  return instance;
@@ -53,10 +61,10 @@ function model(props, instanceCallback) {
53
61
  configurable: false,
54
62
  value: original.prototype.constructor.name,
55
63
  });
56
- Model_1.Model.register(newConstructor);
64
+ Model_1.Model.register(newConstructor, nameOverride);
57
65
  // return new constructor (will override original)
58
66
  return newConstructor;
59
67
  };
60
68
  }
61
69
 
62
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNEJBLHNCQXVEQztBQW5GRCxpREFBMkM7QUFDM0Msa0RBQStDO0FBQy9DLG1DQUFnQztBQUNoQyxtQ0FBc0M7QUFTdEM7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsU0FBZ0IsS0FBSyxDQUNuQixLQUEyQixFQUMzQixnQkFBbUM7SUFFbkMsT0FBTyxDQUFDLFFBQWEsRUFBRSxFQUFFO1FBQ3ZCLGdDQUFnQztRQUNoQyxNQUFNLGNBQWMsR0FBUSxVQUFVLEdBQUcsSUFBVztZQUNsRCxNQUFNLFFBQVEsR0FBZ0MsSUFBQSx3QkFBUyxFQUNyRCxRQUFRLEVBQ1IsR0FBRyxJQUFJLENBQ1IsQ0FBQztZQUNGLDJFQUEyRTtZQUMzRSxNQUFNLE9BQU8sR0FBRyxhQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkMsSUFBSSxPQUFPO2dCQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVsRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUM1QixFQUFFLEVBQ0Y7Z0JBQ0UsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJO2FBQ3JCLENBQ0YsQ0FBQztZQUVGLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLHFCQUFTLENBQUMsTUFBTSxFQUFFO2dCQUNoRCxRQUFRLEVBQUUsS0FBSztnQkFDZixVQUFVLEVBQUUsS0FBSztnQkFDakIsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLEtBQUssRUFBRSxRQUFRO2FBQ2hCLENBQUMsQ0FBQztZQUVILE9BQU8sQ0FBQyxjQUFjLENBQ3BCLElBQUEsbUJBQVcsRUFBQyxxQkFBUyxDQUFDLEtBQUssQ0FBQyxFQUM1QixNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLEVBQ3BDLFFBQVEsQ0FBQyxXQUFXLENBQ3JCLENBQUM7WUFFRixJQUFJLGdCQUFnQjtnQkFBRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUUxRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUM7UUFFRixvREFBb0Q7UUFDcEQsY0FBYyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQzlDLHlEQUF5RDtRQUN6RCxNQUFNLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUU7WUFDNUMsUUFBUSxFQUFFLEtBQUs7WUFDZixVQUFVLEVBQUUsSUFBSTtZQUNoQixZQUFZLEVBQUUsS0FBSztZQUNuQixLQUFLLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSTtTQUMzQyxDQUFDLENBQUM7UUFFSCxhQUFLLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRS9CLGtEQUFrRDtRQUNsRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDLENBQUM7QUFDSixDQUFDIiwiZmlsZSI6Im1vZGVsL2RlY29yYXRvcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25zdHJ1Y3QgfSBmcm9tIFwiLi9jb25zdHJ1Y3Rpb25cIjtcbmltcG9ydCB7IE1vZGVsS2V5cyB9IGZyb20gXCIuLi91dGlscy9jb25zdGFudHNcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4vTW9kZWxcIjtcbmltcG9ydCB7IGdldE1vZGVsS2V5IH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBkZWZpbmVzIHRoZSB0cGUgb3MgYW4gSW5zdGFuY2VDYWxsYmFjayBmdW5jdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Db25zdHJ1Y3Rpb25cbiAqIEBjYXRlZ29yeSBDb25zdHJ1Y3Rpb25cbiAqL1xuZXhwb3J0IHR5cGUgSW5zdGFuY2VDYWxsYmFjayA9IChpbnN0YW5jZTogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgY2xhc3MgYXMgYSBNb2RlbCBjbGFzc1xuICogQGRlc2NyaXB0aW9uXG4gKlxuICogLSBSZWdpc3RlcnMgdGhlIGNsYXNzIHVuZGVyIHRoZSBtb2RlbCByZWdpc3RyeSBzbyBpdCBjYW4gYmUgZWFzaWx5IHJlYnVpbHQ7XG4gKiAtIE92ZXJyaWRlcyB0aGUgY2xhc3MgY29uc3RydWN0b3I7XG4gKiAtIFJ1bnMgdGhlIGdsb2JhbCB7QGxpbmsgTW9kZWxCdWlsZGVyRnVuY3Rpb259IGlmIGRlZmluZWQ7XG4gKiAtIFJ1bnMgdGhlIG9wdGlvbmFsIHtAbGluayBJbnN0YW5jZUNhbGxiYWNrfSBpZiBwcm92aWRlZDtcbiAqIC0gRGVmaW5lcyBhbiB7QGxpbmsgTW9kZWxLZXlzI0FOQ0hPUn0gcHJvcGVydHkgZm9yIHNlcmlhbGl6YXRpb24gYW5kIG1vZGVsIHJlYnVpbGRpbmcgcHVycG9zZXM7XG4gKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbcHJvcHNdIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBzdG9yZSBhcyBtZXRhZGF0YVxuICogQHBhcmFtIHtJbnN0YW5jZUNhbGxiYWNrfSBbaW5zdGFuY2VDYWxsYmFja10gb3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBpbnN0YW5jZSB1cG9uIGluc3RhbnRpYXRpb24uIGRlZmF1bHRzIHRvIHVuZGVmaW5lZFxuICpcbiAqIEBmdW5jdGlvbiBtb2RlbFxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsKFxuICBwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIGluc3RhbmNlQ2FsbGJhY2s/OiBJbnN0YW5jZUNhbGxiYWNrLFxuKSB7XG4gIHJldHVybiAob3JpZ2luYWw6IGFueSkgPT4ge1xuICAgIC8vIHRoZSBuZXcgY29uc3RydWN0b3IgYmVoYXZpb3VyXG4gICAgY29uc3QgbmV3Q29uc3RydWN0b3I6IGFueSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgY29uc3QgaW5zdGFuY2U6IFJldHVyblR5cGU8dHlwZW9mIG9yaWdpbmFsPiA9IGNvbnN0cnVjdChcbiAgICAgICAgb3JpZ2luYWwsXG4gICAgICAgIC4uLmFyZ3MsXG4gICAgICApO1xuICAgICAgLy8gcnVuIGEgYnVpbGRlciBmdW5jdGlvbiBpZiBkZWZpbmVkIHdpdGggdGhlIGZpcnN0IGFyZ3VtZW50IChUaGUgTW9kZWxBcmcpXG4gICAgICBjb25zdCBidWlsZGVyID0gTW9kZWwuZ2V0QnVpbGRlcigpO1xuICAgICAgaWYgKGJ1aWxkZXIpIGJ1aWxkZXIoaW5zdGFuY2UsIGFyZ3MubGVuZ3RoID8gYXJnc1swXSA6IHVuZGVmaW5lZCk7XG5cbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzczogb3JpZ2luYWwubmFtZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0YW5jZSwgTW9kZWxLZXlzLkFOQ0hPUiwge1xuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogbWV0YWRhdGEsXG4gICAgICB9KTtcblxuICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbiAgICAgICAgZ2V0TW9kZWxLZXkoTW9kZWxLZXlzLk1PREVMKSxcbiAgICAgICAgT2JqZWN0LmFzc2lnbihtZXRhZGF0YSwgcHJvcHMgfHwge30pLFxuICAgICAgICBpbnN0YW5jZS5jb25zdHJ1Y3RvcixcbiAgICAgICk7XG5cbiAgICAgIGlmIChpbnN0YW5jZUNhbGxiYWNrKSBpbnN0YW5jZUNhbGxiYWNrKGluc3RhbmNlLCAuLi5hcmdzKTtcblxuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG5cbiAgICAvLyBjb3B5IHByb3RvdHlwZSBzbyBpbnN0YW5jZW9mIG9wZXJhdG9yIHN0aWxsIHdvcmtzXG4gICAgbmV3Q29uc3RydWN0b3IucHJvdG90eXBlID0gb3JpZ2luYWwucHJvdG90eXBlO1xuICAgIC8vIFNldHMgdGhlIHByb3BlciBjb25zdHJ1Y3RvciBuYW1lIGZvciB0eXBlIHZlcmlmaWNhdGlvblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdDb25zdHJ1Y3RvciwgXCJuYW1lXCIsIHtcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IG9yaWdpbmFsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgIH0pO1xuXG4gICAgTW9kZWwucmVnaXN0ZXIobmV3Q29uc3RydWN0b3IpO1xuXG4gICAgLy8gcmV0dXJuIG5ldyBjb25zdHJ1Y3RvciAod2lsbCBvdmVycmlkZSBvcmlnaW5hbClcbiAgICByZXR1cm4gbmV3Q29uc3RydWN0b3I7XG4gIH07XG59XG4iXX0=
70
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBOEJBLHNCQXVEQztBQXJGRCxpREFBK0Q7QUFDL0Qsa0RBQStDO0FBQy9DLG1DQUFnQztBQUNoQyxtQ0FBc0M7QUFDdEMscURBQWdEO0FBU2hEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBZ0IsS0FBSyxDQUNuQixZQUFxQixFQUNyQixnQkFBbUM7SUFFbkMsT0FBTyxDQUFDLFFBQWEsRUFBRSxFQUFFO1FBQ3ZCLGdDQUFnQztRQUNoQyxNQUFNLGNBQWMsR0FBUSxVQUFVLEdBQUcsSUFBVztZQUNsRCxNQUFNLFFBQVEsR0FBZ0MsSUFBQSx3QkFBUyxFQUNyRCxRQUFRLEVBQ1IsR0FBRyxJQUFJLENBQ1IsQ0FBQztZQUNGLElBQUEsaUNBQWtCLEVBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0IsMkVBQTJFO1lBQzNFLE1BQU0sT0FBTyxHQUFHLGFBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxJQUFJLE9BQU87Z0JBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xFLEVBQUU7WUFDRiw4QkFBOEI7WUFDOUIsUUFBUTtZQUNSLE1BQU07WUFDTiw0QkFBNEI7WUFDNUIsT0FBTztZQUNQLEtBQUs7WUFDTCxFQUFFO1lBQ0Ysc0RBQXNEO1lBQ3RELHFCQUFxQjtZQUNyQix1QkFBdUI7WUFDdkIseUJBQXlCO1lBQ3pCLGlCQUFpQjtZQUNqQixNQUFNO1lBRU4sSUFBQSxxQkFBUSxFQUNOLElBQUEsbUJBQVcsRUFBQyxxQkFBUyxDQUFDLEtBQUssQ0FBQyxFQUM1QixZQUFZLElBQUksUUFBUSxDQUFDLElBQUksQ0FDOUIsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFeEIsSUFBSSxnQkFBZ0I7Z0JBQUUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFFMUQsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDO1FBRUYsb0RBQW9EO1FBQ3BELGNBQWMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUM5Qyx5REFBeUQ7UUFDekQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFO1lBQzVDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLElBQUk7WUFDaEIsWUFBWSxFQUFFLEtBQUs7WUFDbkIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUk7U0FDM0MsQ0FBQyxDQUFDO1FBRUgsYUFBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFN0Msa0RBQWtEO1FBQ2xELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJmaWxlIjoibW9kZWwvZGVjb3JhdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJpbmRNb2RlbFByb3RvdHlwZSwgY29uc3RydWN0IH0gZnJvbSBcIi4vY29uc3RydWN0aW9uXCI7XG5pbXBvcnQgeyBNb2RlbEtleXMgfSBmcm9tIFwiLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuL01vZGVsXCI7XG5pbXBvcnQgeyBnZXRNb2RlbEtleSB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBtZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IGRlZmluZXMgdGhlIHRwZSBvcyBhbiBJbnN0YW5jZUNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLkNvbnN0cnVjdGlvblxuICogQGNhdGVnb3J5IENvbnN0cnVjdGlvblxuICovXG5leHBvcnQgdHlwZSBJbnN0YW5jZUNhbGxiYWNrID0gKGluc3RhbmNlOiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBjbGFzcyBhcyBhIE1vZGVsIGNsYXNzXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiAtIFJlZ2lzdGVycyB0aGUgY2xhc3MgdW5kZXIgdGhlIG1vZGVsIHJlZ2lzdHJ5IHNvIGl0IGNhbiBiZSBlYXNpbHkgcmVidWlsdDtcbiAqIC0gT3ZlcnJpZGVzIHRoZSBjbGFzcyBjb25zdHJ1Y3RvcjtcbiAqIC0gUnVucyB0aGUgZ2xvYmFsIHtAbGluayBNb2RlbEJ1aWxkZXJGdW5jdGlvbn0gaWYgZGVmaW5lZDtcbiAqIC0gUnVucyB0aGUgb3B0aW9uYWwge0BsaW5rIEluc3RhbmNlQ2FsbGJhY2t9IGlmIHByb3ZpZGVkO1xuICogLSBEZWZpbmVzIGFuIHtAbGluayBNb2RlbEtleXMjQU5DSE9SfSBwcm9wZXJ0eSBmb3Igc2VyaWFsaXphdGlvbiBhbmQgbW9kZWwgcmVidWlsZGluZyBwdXJwb3NlcztcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW25hbWVPdmVycmlkZV1cbiAqIEBwYXJhbSB7SW5zdGFuY2VDYWxsYmFja30gW2luc3RhbmNlQ2FsbGJhY2tdIG9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgaW5zdGFuY2UgdXBvbiBpbnN0YW50aWF0aW9uLiBkZWZhdWx0cyB0byB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0gYmFzZVByb3RvdHlwZVxuICogQGZ1bmN0aW9uIG1vZGVsXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWwoXG4gIG5hbWVPdmVycmlkZT86IHN0cmluZyxcbiAgaW5zdGFuY2VDYWxsYmFjaz86IEluc3RhbmNlQ2FsbGJhY2ssXG4pIHtcbiAgcmV0dXJuIChvcmlnaW5hbDogYW55KSA9PiB7XG4gICAgLy8gdGhlIG5ldyBjb25zdHJ1Y3RvciBiZWhhdmlvdXJcbiAgICBjb25zdCBuZXdDb25zdHJ1Y3RvcjogYW55ID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZTogUmV0dXJuVHlwZTx0eXBlb2Ygb3JpZ2luYWw+ID0gY29uc3RydWN0KFxuICAgICAgICBvcmlnaW5hbCxcbiAgICAgICAgLi4uYXJncyxcbiAgICAgICk7XG4gICAgICBiaW5kTW9kZWxQcm90b3R5cGUoaW5zdGFuY2UpO1xuICAgICAgLy8gcnVuIGEgYnVpbGRlciBmdW5jdGlvbiBpZiBkZWZpbmVkIHdpdGggdGhlIGZpcnN0IGFyZ3VtZW50IChUaGUgTW9kZWxBcmcpXG4gICAgICBjb25zdCBidWlsZGVyID0gTW9kZWwuZ2V0QnVpbGRlcigpO1xuICAgICAgaWYgKGJ1aWxkZXIpIGJ1aWxkZXIoaW5zdGFuY2UsIGFyZ3MubGVuZ3RoID8gYXJnc1swXSA6IHVuZGVmaW5lZCk7XG4gICAgICAvL1xuICAgICAgLy8gY29uc3QgZGF0YSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAvLyAgIHt9LFxuICAgICAgLy8gICB7XG4gICAgICAvLyAgICAgY2xhc3M6IG9yaWdpbmFsLm5hbWUsXG4gICAgICAvLyAgIH0sXG4gICAgICAvLyApO1xuICAgICAgLy9cbiAgICAgIC8vIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0YW5jZSwgTW9kZWxLZXlzLkFOQ0hPUiwge1xuICAgICAgLy8gICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAvLyAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgLy8gICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgLy8gICB2YWx1ZTogZGF0YSxcbiAgICAgIC8vIH0pO1xuXG4gICAgICBtZXRhZGF0YShcbiAgICAgICAgZ2V0TW9kZWxLZXkoTW9kZWxLZXlzLk1PREVMKSxcbiAgICAgICAgbmFtZU92ZXJyaWRlIHx8IG9yaWdpbmFsLm5hbWUsXG4gICAgICApKGluc3RhbmNlLmNvbnN0cnVjdG9yKTtcblxuICAgICAgaWYgKGluc3RhbmNlQ2FsbGJhY2spIGluc3RhbmNlQ2FsbGJhY2soaW5zdGFuY2UsIC4uLmFyZ3MpO1xuXG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcblxuICAgIC8vIGNvcHkgcHJvdG90eXBlIHNvIGluc3RhbmNlb2Ygb3BlcmF0b3Igc3RpbGwgd29ya3NcbiAgICBuZXdDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBvcmlnaW5hbC5wcm90b3R5cGU7XG4gICAgLy8gU2V0cyB0aGUgcHJvcGVyIGNvbnN0cnVjdG9yIG5hbWUgZm9yIHR5cGUgdmVyaWZpY2F0aW9uXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld0NvbnN0cnVjdG9yLCBcIm5hbWVcIiwge1xuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogb3JpZ2luYWwucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgfSk7XG5cbiAgICBNb2RlbC5yZWdpc3RlcihuZXdDb25zdHJ1Y3RvciwgbmFtZU92ZXJyaWRlKTtcblxuICAgIC8vIHJldHVybiBuZXcgY29uc3RydWN0b3IgKHdpbGwgb3ZlcnJpZGUgb3JpZ2luYWwpXG4gICAgcmV0dXJuIG5ld0NvbnN0cnVjdG9yO1xuICB9O1xufVxuIl19
@@ -14,10 +14,11 @@ export type InstanceCallback = (instance: any, ...args: any[]) => void;
14
14
  * - Runs the optional {@link InstanceCallback} if provided;
15
15
  * - Defines an {@link ModelKeys#ANCHOR} property for serialization and model rebuilding purposes;
16
16
  *
17
- * @param {Record<string, any>} [props] additional properties to store as metadata
17
+ * @param {string} [nameOverride]
18
18
  * @param {InstanceCallback} [instanceCallback] optional callback that will be called with the instance upon instantiation. defaults to undefined
19
19
  *
20
+ * @param basePrototype
20
21
  * @function model
21
22
  * @category Decorators
22
23
  */
23
- export declare function model(props?: Record<string, any>, instanceCallback?: InstanceCallback): (original: any) => any;
24
+ export declare function model(nameOverride?: string, instanceCallback?: InstanceCallback): (original: any) => any;
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
 
4
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6Im1vZGVsL3R5cGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxFcnJvckRlZmluaXRpb24gfSBmcm9tIFwiLi9Nb2RlbEVycm9yRGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi9Nb2RlbFwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluaXRpb24gb2YgYSBNb2RlbCBDb25zdHJ1Y3RvciBBcmd1bWVudFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uTW9kZWxcbiAqIEBjYXRlZ29yeSBNb2RlbFxuICpcbiAqIEBzZWUgTW9kZWxDb25zdHJ1Y3RvclxuICovXG5leHBvcnQgdHlwZSBNb2RlbEFyZzxUPiA9IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluaXRpb24gb2YgYSBDbGFzcyBDb25zdHJ1Y3RvclxuICogQGRlc2NyaXB0aW9uIEdlbmVyaWMgdHlwZSBmb3IgQ29uc3RydWN0b3IgZnVuY3Rpb25zXG4gKlxuICogQHR5cGVkZWYgQ29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc11cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uTW9kZWxcbiAqIEBjYXRlZ29yeSBNb2RlbFxuICovXG5leHBvcnQgdHlwZSBDb25zdHJ1Y3RvcjxUPiA9IHtcbiAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQ7XG59O1xuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluaXRpb24gb2YgYSBNb2RlbCBDb25zdHJ1Y3RvclxuICogQGRlc2NyaXB0aW9uIEdlbmVyaWMgdHlwZSBmb3IgYWxsIE1vZGVsIENvbnN0cnVjdG9yIGZ1bmN0aW9uc1xuICpcbiAqIEB0eXBlZGVmIE1vZGVsQ29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0ge01vZGVsQXJnPFQ+fSBbbW9kZWxdXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc11cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uTW9kZWxcbiAqIEBjYXRlZ29yeSBDb25zdHJ1Y3Rpb25cbiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxDb25zdHJ1Y3RvcjxUIGV4dGVuZHMgTW9kZWw+ID0ge1xuICBuZXcgKG1vZGVsPzogTW9kZWxBcmc8VD4sIC4uLmFyZ3M6IGFueVtdKTogVDtcbn07XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgVmFsaWRhdGlvbiBBUEkgZm9yIHZhbGlkYXRhYmxlIG1vZGVsc1xuICogQGludGVyZmFjZSBWYWxpZGF0YWJsZVxuICpcbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGFibGUge1xuICAvKipcbiAgICogQHN1bW1hcnkgVmFsaWRhdGVzIHRoZSBtb2RlbCBhbmQgcmV0dXJucyB0aGUge0BsaW5rIE1vZGVsRXJyb3JEZWZpbml0aW9ufSBpZiBhbnlcbiAgICogQHBhcmFtIHthbnl9IFthcmdzXVxuICAgKlxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBoYXNFcnJvcnMoLi4uYXJnczogYW55W10pOiBNb2RlbEVycm9yRGVmaW5pdGlvbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBTZXJpYWxpemFibGUgaW50ZXJmYWNlXG4gKlxuICogQGludGVyZmFjZSBTZXJpYWxpemFibGVcbiAqXG4gKiBAY2F0ZWdvcnkgU2VyaWFsaXphdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6YWJsZSB7XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBzZXJpYWxpemVzIHRoZSBtb2RlbFxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBzZXJpYWxpemUoKTogc3RyaW5nO1xufVxuIl19
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6Im1vZGVsL3R5cGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxFcnJvckRlZmluaXRpb24gfSBmcm9tIFwiLi9Nb2RlbEVycm9yRGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi9Nb2RlbFwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluaXRpb24gb2YgYSBNb2RlbCBDb25zdHJ1Y3RvciBBcmd1bWVudFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uTW9kZWxcbiAqIEBjYXRlZ29yeSBNb2RlbFxuICpcbiAqIEBzZWUgTW9kZWxDb25zdHJ1Y3RvclxuICovXG5leHBvcnQgdHlwZSBNb2RlbEFyZzxUPiA9IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluaXRpb24gb2YgYSBDbGFzcyBDb25zdHJ1Y3RvclxuICogQGRlc2NyaXB0aW9uIEdlbmVyaWMgdHlwZSBmb3IgQ29uc3RydWN0b3IgZnVuY3Rpb25zXG4gKlxuICogQHR5cGVkZWYgQ29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc11cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uTW9kZWxcbiAqIEBjYXRlZ29yeSBNb2RlbFxuICovXG5leHBvcnQgdHlwZSBDb25zdHJ1Y3RvcjxUPiA9IHtcbiAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQ7XG59O1xuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluaXRpb24gb2YgYSBNb2RlbCBDb25zdHJ1Y3RvclxuICogQGRlc2NyaXB0aW9uIEdlbmVyaWMgdHlwZSBmb3IgYWxsIE1vZGVsIENvbnN0cnVjdG9yIGZ1bmN0aW9uc1xuICpcbiAqIEB0eXBlZGVmIE1vZGVsQ29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0ge01vZGVsQXJnPFQ+fSBbbW9kZWxdXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc11cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uTW9kZWxcbiAqIEBjYXRlZ29yeSBDb25zdHJ1Y3Rpb25cbiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxDb25zdHJ1Y3RvcjxUIGV4dGVuZHMgTW9kZWw+ID0ge1xuICBuZXcgKG1vZGVsPzogTW9kZWxBcmc8VD4sIC4uLmFyZ3M6IGFueVtdKTogVDtcbn07XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgVmFsaWRhdGlvbiBBUEkgZm9yIHZhbGlkYXRhYmxlIG1vZGVsc1xuICogQGludGVyZmFjZSBWYWxpZGF0YWJsZVxuICpcbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGFibGUge1xuICAvKipcbiAgICogQHN1bW1hcnkgVmFsaWRhdGVzIHRoZSBtb2RlbCBhbmQgcmV0dXJucyB0aGUge0BsaW5rIE1vZGVsRXJyb3JEZWZpbml0aW9ufSBpZiBhbnlcbiAgICogQHBhcmFtIHthbnl9IFthcmdzXVxuICAgKlxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBoYXNFcnJvcnMoLi4uYXJnczogYW55W10pOiBNb2RlbEVycm9yRGVmaW5pdGlvbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBTZXJpYWxpemFibGUgaW50ZXJmYWNlXG4gKlxuICogQGludGVyZmFjZSBTZXJpYWxpemFibGVcbiAqXG4gKiBAY2F0ZWdvcnkgU2VyaWFsaXphdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6YWJsZSB7XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBzZXJpYWxpemVzIHRoZSBtb2RlbFxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBzZXJpYWxpemUoKTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhhc2hhYmxlIHtcbiAgaGFzaCgpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFyYWJsZTxUPiB7XG4gIGVxdWFscyhvdGhlcjogVCwgLi4uYXJnczogYW55W10pOiBib29sZWFuO1xufVxuIl19
@@ -65,3 +65,9 @@ export interface Serializable {
65
65
  */
66
66
  serialize(): string;
67
67
  }
68
+ export interface Hashable {
69
+ hash(): string;
70
+ }
71
+ export interface Comparable<T> {
72
+ equals(other: T, ...args: any[]): boolean;
73
+ }
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getModelKey = void 0;
4
4
  exports.isModel = isModel;
5
5
  const constants_1 = require("../utils/constants.cjs");
6
- const reflection_1 = require("@decaf-ts/reflection");
6
+ const Model_1 = require("./Model.cjs");
7
7
  /**
8
8
  * @summary Builds the key to store as Metadata under Reflections
9
9
  * @description concatenates {@link ModelKeys#REFLECT} with the provided key
@@ -24,8 +24,12 @@ exports.getModelKey = getModelKey;
24
24
  * @category Validation
25
25
  */
26
26
  function isModel(target) {
27
- return (!!target[constants_1.ModelKeys.ANCHOR] ||
28
- !!(0, reflection_1.getClassDecorators)(constants_1.ModelKeys.REFLECT, target).find((dec) => dec.key === constants_1.ModelKeys.MODEL && dec.props && dec.props.class));
27
+ try {
28
+ return !!Model_1.Model.getMetadata(target);
29
+ }
30
+ catch (e) {
31
+ return false;
32
+ }
29
33
  }
30
34
 
31
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzQkEsMEJBT0M7QUE3QkQsa0RBQStDO0FBQy9DLHFEQUEwRDtBQUUxRDs7Ozs7Ozs7R0FRRztBQUNJLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxxQkFBUyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFBdkQsUUFBQSxXQUFXLGVBQTRDO0FBRXBFOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixPQUFPLENBQUMsTUFBMkI7SUFDakQsT0FBTyxDQUNMLENBQUMsQ0FBQyxNQUFNLENBQUMscUJBQVMsQ0FBQyxNQUFNLENBQUM7UUFDMUIsQ0FBQyxDQUFDLElBQUEsK0JBQWtCLEVBQUMscUJBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUNsRCxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxxQkFBUyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUNyRSxDQUNGLENBQUM7QUFDSixDQUFDIiwiZmlsZSI6Im1vZGVsL3V0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxLZXlzIH0gZnJvbSBcIi4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZ2V0Q2xhc3NEZWNvcmF0b3JzIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgQnVpbGRzIHRoZSBrZXkgdG8gc3RvcmUgYXMgTWV0YWRhdGEgdW5kZXIgUmVmbGVjdGlvbnNcbiAqIEBkZXNjcmlwdGlvbiBjb25jYXRlbmF0ZXMge0BsaW5rIE1vZGVsS2V5cyNSRUZMRUNUfSB3aXRoIHRoZSBwcm92aWRlZCBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqXG4gKiBAZnVuY3Rpb24gZ2V0TW9kZWxLZXlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uTW9kZWxcbiAqIEBjYXRlZ29yeSBVdGlsaXRpZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldE1vZGVsS2V5ID0gKHN0cjogc3RyaW5nKSA9PiBNb2RlbEtleXMuUkVGTEVDVCArIHN0cjtcblxuLyoqXG4gKiBAc3VtbWFyeSBGb3IgU2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gcHVycG9zZXMuXG4gKiBAZGVzY3JpcHRpb24gUmVhZHMgdGhlIHtAbGluayBNb2RlbEtleXMuQU5DSE9SfSBwcm9wZXJ0eSBvZiBhIHtAbGluayBNb2RlbH0gdG8gZGlzY292ZXIgdGhlIGNsYXNzIHRvIGluc3RhbnRpYXRlXG4gKlxuICogQGZ1bmN0aW9uIGlzTW9kZWxcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uVmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTW9kZWwodGFyZ2V0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gIHJldHVybiAoXG4gICAgISF0YXJnZXRbTW9kZWxLZXlzLkFOQ0hPUl0gfHxcbiAgICAhIWdldENsYXNzRGVjb3JhdG9ycyhNb2RlbEtleXMuUkVGTEVDVCwgdGFyZ2V0KS5maW5kKFxuICAgICAgKGRlYykgPT4gZGVjLmtleSA9PT0gTW9kZWxLZXlzLk1PREVMICYmIGRlYy5wcm9wcyAmJiBkZWMucHJvcHMuY2xhc3MsXG4gICAgKVxuICApO1xufVxuIl19
35
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzQkEsMEJBTUM7QUE1QkQsa0RBQStDO0FBQy9DLG1DQUFnQztBQUVoQzs7Ozs7Ozs7R0FRRztBQUNJLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxxQkFBUyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFBdkQsUUFBQSxXQUFXLGVBQTRDO0FBRXBFOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixPQUFPLENBQUMsTUFBMkI7SUFDakQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxDQUFDLENBQUMsYUFBSyxDQUFDLFdBQVcsQ0FBQyxNQUFhLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztRQUNoQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwiZmlsZSI6Im1vZGVsL3V0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxLZXlzIH0gZnJvbSBcIi4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi9Nb2RlbFwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IEJ1aWxkcyB0aGUga2V5IHRvIHN0b3JlIGFzIE1ldGFkYXRhIHVuZGVyIFJlZmxlY3Rpb25zXG4gKiBAZGVzY3JpcHRpb24gY29uY2F0ZW5hdGVzIHtAbGluayBNb2RlbEtleXMjUkVGTEVDVH0gd2l0aCB0aGUgcHJvdmlkZWQga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKlxuICogQGZ1bmN0aW9uIGdldE1vZGVsS2V5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLk1vZGVsXG4gKiBAY2F0ZWdvcnkgVXRpbGl0aWVzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNb2RlbEtleSA9IChzdHI6IHN0cmluZykgPT4gTW9kZWxLZXlzLlJFRkxFQ1QgKyBzdHI7XG5cbi8qKlxuICogQHN1bW1hcnkgRm9yIFNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIHB1cnBvc2VzLlxuICogQGRlc2NyaXB0aW9uIFJlYWRzIHRoZSB7QGxpbmsgTW9kZWxLZXlzLkFOQ0hPUn0gcHJvcGVydHkgb2YgYSB7QGxpbmsgTW9kZWx9IHRvIGRpc2NvdmVyIHRoZSBjbGFzcyB0byBpbnN0YW50aWF0ZVxuICpcbiAqIEBmdW5jdGlvbiBpc01vZGVsXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLlZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01vZGVsKHRhcmdldDogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICB0cnkge1xuICAgIHJldHVybiAhIU1vZGVsLmdldE1ldGFkYXRhKHRhcmdldCBhcyBhbnkpO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
@@ -2,11 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validate = validate;
4
4
  const ModelErrorDefinition_1 = require("./ModelErrorDefinition.cjs");
5
- const validation_1 = require("../validation/index.cjs");
6
5
  const reflection_1 = require("@decaf-ts/reflection");
7
6
  const constants_1 = require("../utils/constants.cjs");
8
7
  const strings_1 = require("../utils/strings.cjs");
9
8
  const constants_2 = require("./constants.cjs");
9
+ const Validation_1 = require("../validation/Validation.cjs");
10
+ const constants_3 = require("../validation/Validators/constants.cjs");
10
11
  /**
11
12
  * @summary Analyses the decorations of the properties and validates the obj according to them
12
13
  *
@@ -22,7 +23,7 @@ function validate(obj, ...propsToIgnore) {
22
23
  const decoratedProperties = [];
23
24
  for (const prop in obj)
24
25
  if (obj.hasOwnProperty(prop) && propsToIgnore.indexOf(prop) === -1)
25
- decoratedProperties.push((0, reflection_1.getPropertyDecorators)(validation_1.ValidationKeys.REFLECT, obj, prop));
26
+ decoratedProperties.push((0, reflection_1.getPropertyDecorators)(constants_3.ValidationKeys.REFLECT, obj, prop));
26
27
  let result = undefined;
27
28
  for (const decoratedProperty of decoratedProperties) {
28
29
  const { prop, decorators } = decoratedProperty;
@@ -31,7 +32,7 @@ function validate(obj, ...propsToIgnore) {
31
32
  const defaultTypeDecorator = decorators[0];
32
33
  // tries to find any type decorators or other decorators that already enforce type (the ones with the allowed types property defined). if so, skip the default type verification
33
34
  if (decorators.find((d) => {
34
- if (d.key === validation_1.ValidationKeys.TYPE)
35
+ if (d.key === constants_3.ValidationKeys.TYPE)
35
36
  return true;
36
37
  return !!d.props.types?.find((t) => t === defaultTypeDecorator.props.name);
37
38
  })) {
@@ -39,7 +40,7 @@ function validate(obj, ...propsToIgnore) {
39
40
  }
40
41
  let errs = undefined;
41
42
  for (const decorator of decorators) {
42
- const validator = validation_1.Validation.get(decorator.key);
43
+ const validator = Validation_1.Validation.get(decorator.key);
43
44
  if (!validator) {
44
45
  throw new Error(`Missing validator for ${decorator.key}`);
45
46
  }
@@ -61,8 +62,8 @@ function validate(obj, ...propsToIgnore) {
61
62
  let err;
62
63
  let errs = undefined;
63
64
  // if a nested Model
64
- const allDecorators = (0, reflection_1.getPropertyDecorators)(validation_1.ValidationKeys.REFLECT, obj, prop).decorators;
65
- const decorators = (0, reflection_1.getPropertyDecorators)(validation_1.ValidationKeys.REFLECT, obj, prop).decorators.filter((d) => [constants_1.ModelKeys.TYPE, validation_1.ValidationKeys.TYPE].indexOf(d.key) !== -1);
65
+ const allDecorators = (0, reflection_1.getPropertyDecorators)(constants_3.ValidationKeys.REFLECT, obj, prop).decorators;
66
+ const decorators = (0, reflection_1.getPropertyDecorators)(constants_3.ValidationKeys.REFLECT, obj, prop).decorators.filter((d) => [constants_1.ModelKeys.TYPE, constants_3.ValidationKeys.TYPE].indexOf(d.key) !== -1);
66
67
  if (!decorators || !decorators.length)
67
68
  continue;
68
69
  const dec = decorators.pop();
@@ -75,8 +76,8 @@ function validate(obj, ...propsToIgnore) {
75
76
  for (const c of clazz) {
76
77
  if (reserved.indexOf(c.toLowerCase()) === -1) {
77
78
  const typeDecoratorKey = Array.isArray(obj[prop])
78
- ? validation_1.ValidationKeys.LIST
79
- : validation_1.ValidationKeys.TYPE;
79
+ ? constants_3.ValidationKeys.LIST
80
+ : constants_3.ValidationKeys.TYPE;
80
81
  const types = allDecorators.find((d) => d.key === typeDecoratorKey) || {};
81
82
  let allowedTypes = [];
82
83
  if (types && types.props) {
@@ -102,14 +103,14 @@ function validate(obj, ...propsToIgnore) {
102
103
  case Array.name:
103
104
  case Set.name:
104
105
  if (allDecorators.length) {
105
- const listDec = allDecorators.find((d) => d.key === validation_1.ValidationKeys.LIST);
106
+ const listDec = allDecorators.find((d) => d.key === constants_3.ValidationKeys.LIST);
106
107
  if (listDec) {
107
108
  const e = c ===
108
109
  (Array.name
109
110
  ? obj[prop]
110
111
  : obj[prop].values()).find((v, idx) => validate(prop, idx, v));
111
112
  if (e)
112
- err = (0, strings_1.sf)(validation_1.DEFAULT_ERROR_MESSAGES.LIST_INSIDE, e.toString());
113
+ err = (0, strings_1.sf)(constants_3.DEFAULT_ERROR_MESSAGES.LIST_INSIDE, e.toString());
113
114
  }
114
115
  }
115
116
  break;
@@ -136,4 +137,4 @@ function validate(obj, ...propsToIgnore) {
136
137
  return result ? new ModelErrorDefinition_1.ModelErrorDefinition(result) : undefined;
137
138
  }
138
139
 
139
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC92YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMEJBLDRCQXdLQztBQWxNRCxpRUFBOEQ7QUFDOUQsOENBTXVCO0FBQ3ZCLHFEQUFnRjtBQUNoRixrREFBK0M7QUFDL0MsOENBQXNDO0FBQ3RDLDJDQUE2QztBQUk3Qzs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IsUUFBUSxDQUN0QixHQUFNLEVBQ04sR0FBRyxhQUF1QjtJQUUxQixNQUFNLG1CQUFtQixHQUE0QyxFQUFFLENBQUM7SUFDeEUsS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHO1FBQ3BCLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRSxtQkFBbUIsQ0FBQyxJQUFJLENBQ3RCLElBQUEsa0NBQXFCLEVBQ25CLDJCQUFjLENBQUMsT0FBTyxFQUN0QixHQUFHLEVBQ0gsSUFBSSxDQUNvQyxDQUMzQyxDQUFDO0lBRU4sSUFBSSxNQUFNLEdBQTRCLFNBQVMsQ0FBQztJQUVoRCxLQUFLLE1BQU0saUJBQWlCLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUNwRCxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLGlCQUFpQixDQUFDO1FBRS9DLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtZQUFFLFNBQVM7UUFFaEQsTUFBTSxvQkFBb0IsR0FBc0IsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTlELGdMQUFnTDtRQUNoTCxJQUNFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNwQixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssMkJBQWMsQ0FBQyxJQUFJO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQy9DLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FDMUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUM3QyxDQUFDO1FBQ0osQ0FBQyxDQUFDLEVBQ0YsQ0FBQztZQUNELFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLDJFQUEyRTtRQUNqRyxDQUFDO1FBRUQsSUFBSSxJQUFJLEdBQW1ELFNBQVMsQ0FBQztRQUVyRSxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ25DLE1BQU0sU0FBUyxHQUFHLHVCQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDNUQsQ0FBQztZQUNELE1BQU0sR0FBRyxHQUF1QixTQUFTLENBQUMsU0FBUyxDQUNqRCxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQ3BCLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLHFCQUFTLENBQUMsSUFBSTtnQkFDbEMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3BDLENBQUM7WUFFRixJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNSLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ25ELENBQUM7SUFDSCxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN6RSxJQUFJLEdBQXVCLENBQUM7UUFDNUIsSUFBSSxJQUFJLEdBQW1ELFNBQVMsQ0FBQztRQUVyRSxvQkFBb0I7UUFDcEIsTUFBTSxhQUFhLEdBQUcsSUFBQSxrQ0FBcUIsRUFDekMsMkJBQWMsQ0FBQyxPQUFPLEVBQ3RCLEdBQUcsRUFDSCxJQUFJLENBQ0wsQ0FBQyxVQUFVLENBQUM7UUFDYixNQUFNLFVBQVUsR0FBRyxJQUFBLGtDQUFxQixFQUN0QywyQkFBYyxDQUFDLE9BQU8sRUFDdEIsR0FBRyxFQUNILElBQUksQ0FDTCxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQ2pCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLHFCQUFTLENBQUMsSUFBSSxFQUFFLDJCQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDbkUsQ0FBQztRQUNGLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtZQUFFLFNBQVM7UUFDaEQsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBdUIsQ0FBQztRQUNsRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUk7WUFDMUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDbEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVc7Z0JBQ3ZCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDdkQsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUNKLENBQUM7UUFFZCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3RCLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQyxDQUFDLENBQUMsMkJBQWMsQ0FBQyxJQUFJO29CQUNyQixDQUFDLENBQUMsMkJBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hCLE1BQU0sS0FBSyxHQUNULGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzlELElBQUksWUFBWSxHQUFhLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUN6QixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDMUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSzt3QkFDbkIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO29CQUM1QixJQUFJLFdBQVc7d0JBQ2IsWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDOzRCQUN2QyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQzs0QkFDOUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7Z0JBRUQsTUFBTSxRQUFRLEdBQUcsQ0FDZixJQUFZLEVBQ1osR0FBVyxFQUNYLEtBQVUsRUFDVSxFQUFFO29CQUN0QixNQUFNLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ25ELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVU7d0JBQzFELE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTOzRCQUN0QixDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTs0QkFDbkIsQ0FBQyxDQUFDLGlCQUFpQixJQUFJLElBQUksT0FBTyxvQkFBb0IsQ0FBQztvQkFDM0QsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sS0FBSyxDQUFDO3dCQUN4QyxDQUFDLENBQUMsU0FBUzt3QkFDWCxDQUFDLENBQUMsaUJBQWlCLElBQUksSUFBSSxPQUFPLG1CQUFtQixDQUFDO2dCQUMxRCxDQUFDLENBQUM7Z0JBRUYsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDVixLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUM7b0JBQ2hCLEtBQUssR0FBRyxDQUFDLElBQUk7d0JBQ1gsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7NEJBQ3pCLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQ2hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLDJCQUFjLENBQUMsSUFBSSxDQUNyQyxDQUFDOzRCQUNGLElBQUksT0FBTyxFQUFFLENBQUM7Z0NBQ1osTUFBTSxDQUFDLEdBQ0wsQ0FBQztvQ0FDRCxDQUFDLEtBQUssQ0FBQyxJQUFJO3dDQUNULENBQUMsQ0FBRSxHQUEyQixDQUFDLElBQUksQ0FBQzt3Q0FDcEMsQ0FBQyxDQUFFLEdBQTJCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQzlDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBYyxFQUFFLEdBQVcsRUFBRSxFQUFFLENBQ3JDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUN2QixDQUFDO2dDQUNKLElBQUksQ0FBQztvQ0FDSCxHQUFHLEdBQUcsSUFBQSxZQUFFLEVBQUMsbUNBQXNCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDOzRCQUMvRCxDQUFDO3dCQUNILENBQUM7d0JBQ0QsTUFBTTtvQkFDUjt3QkFDRSxJQUFJLENBQUM7NEJBQ0gsSUFBSyxHQUEyQixDQUFDLElBQUksQ0FBQztnQ0FDcEMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ3hDLENBQUM7d0JBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQzs0QkFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFBLFlBQUUsRUFBQyx5Q0FBeUMsQ0FBQyxDQUFDLENBQUM7d0JBQzlELENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUNSLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUNuQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLDJDQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDL0QsQ0FBQyIsImZpbGUiOiJtb2RlbC92YWxpZGF0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxFcnJvckRlZmluaXRpb24gfSBmcm9tIFwiLi9Nb2RlbEVycm9yRGVmaW5pdGlvblwiO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyxcbiAgTW9kZWxFcnJvcnMsXG4gIFZhbGlkYXRpb24sXG4gIFZhbGlkYXRpb25LZXlzLFxuICBWYWxpZGF0aW9uUHJvcGVydHlEZWNvcmF0b3JEZWZpbml0aW9uLFxufSBmcm9tIFwiLi4vdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgRGVjb3JhdG9yTWV0YWRhdGEsIGdldFByb3BlcnR5RGVjb3JhdG9ycyB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgTW9kZWxLZXlzIH0gZnJvbSBcIi4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgc2YgfSBmcm9tIFwiLi4vdXRpbHMvc3RyaW5nc1wiO1xuaW1wb3J0IHsgUmVzZXJ2ZWRNb2RlbHMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFZhbGlkYXRhYmxlIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4vTW9kZWxcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBBbmFseXNlcyB0aGUgZGVjb3JhdGlvbnMgb2YgdGhlIHByb3BlcnRpZXMgYW5kIHZhbGlkYXRlcyB0aGUgb2JqIGFjY29yZGluZyB0byB0aGVtXG4gKlxuICogQHR5cGVkZWYgVCBleHRlbmRzIE1vZGVsXG4gKiBAcHJvcCB7VH0gb2JqIE1vZGVsIG9iamVjdCB0byB2YWxpZGF0ZVxuICogQHByb3Age3N0cmluZ1tdfSBbcHJvcHNUb0lnbm9yZV0gb2JqZWN0IHByb3BlcnRpZXMgdG8gaWdub3JlIGluIHRoZSB2YWxpZGF0aW9uXG4gKlxuICogQGZ1bmN0aW9uIHZhbGlkYXRlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLlZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZTxUIGV4dGVuZHMgTW9kZWw+KFxuICBvYmo6IFQsXG4gIC4uLnByb3BzVG9JZ25vcmU6IHN0cmluZ1tdXG4pOiBNb2RlbEVycm9yRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlY29yYXRlZFByb3BlcnRpZXM6IFZhbGlkYXRpb25Qcm9wZXJ0eURlY29yYXRvckRlZmluaXRpb25bXSA9IFtdO1xuICBmb3IgKGNvbnN0IHByb3AgaW4gb2JqKVxuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkgJiYgcHJvcHNUb0lnbm9yZS5pbmRleE9mKHByb3ApID09PSAtMSlcbiAgICAgIGRlY29yYXRlZFByb3BlcnRpZXMucHVzaChcbiAgICAgICAgZ2V0UHJvcGVydHlEZWNvcmF0b3JzKFxuICAgICAgICAgIFZhbGlkYXRpb25LZXlzLlJFRkxFQ1QsXG4gICAgICAgICAgb2JqLFxuICAgICAgICAgIHByb3AsXG4gICAgICAgICkgYXMgVmFsaWRhdGlvblByb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbixcbiAgICAgICk7XG5cbiAgbGV0IHJlc3VsdDogTW9kZWxFcnJvcnMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBkZWNvcmF0ZWRQcm9wZXJ0eSBvZiBkZWNvcmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgeyBwcm9wLCBkZWNvcmF0b3JzIH0gPSBkZWNvcmF0ZWRQcm9wZXJ0eTtcblxuICAgIGlmICghZGVjb3JhdG9ycyB8fCAhZGVjb3JhdG9ycy5sZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgZGVmYXVsdFR5cGVEZWNvcmF0b3I6IERlY29yYXRvck1ldGFkYXRhID0gZGVjb3JhdG9yc1swXTtcblxuICAgIC8vIHRyaWVzIHRvIGZpbmQgYW55IHR5cGUgZGVjb3JhdG9ycyBvciBvdGhlciBkZWNvcmF0b3JzIHRoYXQgYWxyZWFkeSBlbmZvcmNlIHR5cGUgKHRoZSBvbmVzIHdpdGggdGhlIGFsbG93ZWQgdHlwZXMgcHJvcGVydHkgZGVmaW5lZCkuIGlmIHNvLCBza2lwIHRoZSBkZWZhdWx0IHR5cGUgdmVyaWZpY2F0aW9uXG4gICAgaWYgKFxuICAgICAgZGVjb3JhdG9ycy5maW5kKChkKSA9PiB7XG4gICAgICAgIGlmIChkLmtleSA9PT0gVmFsaWRhdGlvbktleXMuVFlQRSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiAhIWQucHJvcHMudHlwZXM/LmZpbmQoXG4gICAgICAgICAgKHQpID0+IHQgPT09IGRlZmF1bHRUeXBlRGVjb3JhdG9yLnByb3BzLm5hbWUsXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICkge1xuICAgICAgZGVjb3JhdG9ycy5zaGlmdCgpOyAvLyByZW1vdmUgdGhlIGRlc2lnbjp0eXBlIGRlY29yYXRvciwgc2luY2UgdGhlIHR5cGUgd2lsbCBhbHJlYWR5IGJlIGNoZWNrZWRcbiAgICB9XG5cbiAgICBsZXQgZXJyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGZvciAoY29uc3QgZGVjb3JhdG9yIG9mIGRlY29yYXRvcnMpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRvciA9IFZhbGlkYXRpb24uZ2V0KGRlY29yYXRvci5rZXkpO1xuICAgICAgaWYgKCF2YWxpZGF0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHZhbGlkYXRvciBmb3IgJHtkZWNvcmF0b3Iua2V5fWApO1xuICAgICAgfVxuICAgICAgY29uc3QgZXJyOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB2YWxpZGF0b3IuaGFzRXJyb3JzKFxuICAgICAgICBvYmpbcHJvcC50b1N0cmluZygpXSxcbiAgICAgICAgLi4uKGRlY29yYXRvci5rZXkgPT09IE1vZGVsS2V5cy5UWVBFXG4gICAgICAgICAgPyBbZGVjb3JhdG9yLnByb3BzXVxuICAgICAgICAgIDogT2JqZWN0LnZhbHVlcyhkZWNvcmF0b3IucHJvcHMpKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZXJycyA9IGVycnMgfHwge307XG4gICAgICAgIGVycnNbZGVjb3JhdG9yLmtleV0gPSBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycnMpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdFtkZWNvcmF0ZWRQcm9wZXJ0eS5wcm9wLnRvU3RyaW5nKCldID0gZXJycztcbiAgICB9XG4gIH1cblxuICAvLyB0ZXN0cyBuZXN0ZWQgY2xhc3Nlc1xuICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMob2JqKS5maWx0ZXIoKGspID0+ICFyZXN1bHQgfHwgIXJlc3VsdFtrXSkpIHtcbiAgICBsZXQgZXJyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGVycnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBpZiBhIG5lc3RlZCBNb2RlbFxuICAgIGNvbnN0IGFsbERlY29yYXRvcnMgPSBnZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICBWYWxpZGF0aW9uS2V5cy5SRUZMRUNULFxuICAgICAgb2JqLFxuICAgICAgcHJvcCxcbiAgICApLmRlY29yYXRvcnM7XG4gICAgY29uc3QgZGVjb3JhdG9ycyA9IGdldFByb3BlcnR5RGVjb3JhdG9ycyhcbiAgICAgIFZhbGlkYXRpb25LZXlzLlJFRkxFQ1QsXG4gICAgICBvYmosXG4gICAgICBwcm9wLFxuICAgICkuZGVjb3JhdG9ycy5maWx0ZXIoXG4gICAgICAoZCkgPT4gW01vZGVsS2V5cy5UWVBFLCBWYWxpZGF0aW9uS2V5cy5UWVBFXS5pbmRleE9mKGQua2V5KSAhPT0gLTEsXG4gICAgKTtcbiAgICBpZiAoIWRlY29yYXRvcnMgfHwgIWRlY29yYXRvcnMubGVuZ3RoKSBjb250aW51ZTtcbiAgICBjb25zdCBkZWMgPSBkZWNvcmF0b3JzLnBvcCgpIGFzIERlY29yYXRvck1ldGFkYXRhO1xuICAgIGNvbnN0IGNsYXp6ID0gZGVjLnByb3BzLm5hbWVcbiAgICAgID8gW2RlYy5wcm9wcy5uYW1lXVxuICAgICAgOiBBcnJheS5pc0FycmF5KGRlYy5wcm9wcy5jdXN0b21UeXBlcylcbiAgICAgICAgPyBkZWMucHJvcHMuY3VzdG9tVHlwZXNcbiAgICAgICAgOiBbZGVjLnByb3BzLmN1c3RvbVR5cGVzXTtcbiAgICBjb25zdCByZXNlcnZlZCA9IE9iamVjdC52YWx1ZXMoUmVzZXJ2ZWRNb2RlbHMpLm1hcCgodikgPT5cbiAgICAgIHYudG9Mb3dlckNhc2UoKSxcbiAgICApIGFzIHN0cmluZ1tdO1xuXG4gICAgZm9yIChjb25zdCBjIG9mIGNsYXp6KSB7XG4gICAgICBpZiAocmVzZXJ2ZWQuaW5kZXhPZihjLnRvTG93ZXJDYXNlKCkpID09PSAtMSkge1xuICAgICAgICBjb25zdCB0eXBlRGVjb3JhdG9yS2V5ID0gQXJyYXkuaXNBcnJheShvYmpbcHJvcF0pXG4gICAgICAgICAgPyBWYWxpZGF0aW9uS2V5cy5MSVNUXG4gICAgICAgICAgOiBWYWxpZGF0aW9uS2V5cy5UWVBFO1xuICAgICAgICBjb25zdCB0eXBlczogYW55ID1cbiAgICAgICAgICBhbGxEZWNvcmF0b3JzLmZpbmQoKGQpID0+IGQua2V5ID09PSB0eXBlRGVjb3JhdG9yS2V5KSB8fCB7fTtcbiAgICAgICAgbGV0IGFsbG93ZWRUeXBlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKHR5cGVzICYmIHR5cGVzLnByb3BzKSB7XG4gICAgICAgICAgY29uc3QgY3VzdG9tVHlwZXMgPSBBcnJheS5pc0FycmF5KG9ialtwcm9wXSlcbiAgICAgICAgICAgID8gdHlwZXMucHJvcHMuY2xhc3NcbiAgICAgICAgICAgIDogdHlwZXMucHJvcHMuY3VzdG9tVHlwZXM7XG4gICAgICAgICAgaWYgKGN1c3RvbVR5cGVzKVxuICAgICAgICAgICAgYWxsb3dlZFR5cGVzID0gQXJyYXkuaXNBcnJheShjdXN0b21UeXBlcylcbiAgICAgICAgICAgICAgPyBjdXN0b21UeXBlcy5tYXAoKHQpID0+IGAke3R9YC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICA6IFtjdXN0b21UeXBlcy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlID0gKFxuICAgICAgICAgIHByb3A6IHN0cmluZyxcbiAgICAgICAgICBpZHg6IG51bWJlcixcbiAgICAgICAgICB2YWx1ZTogYW55LFxuICAgICAgICApOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICAgICAgICAgIGNvbnN0IGF0SW5kZXggPSBpZHggPj0gMCA/IGBhdCBpbmRleCAke2lkeH0gYCA6IFwiXCI7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIHJldHVybiAhIXZhbHVlLmhhc0Vycm9yc1xuICAgICAgICAgICAgICA/IHZhbHVlLmhhc0Vycm9ycygpXG4gICAgICAgICAgICAgIDogYFZhbHVlIGluIHByb3AgJHtwcm9wfSAke2F0SW5kZXh9aXMgbm90IHZhbGlkYXRhYmxlYDtcbiAgICAgICAgICByZXR1cm4gYWxsb3dlZFR5cGVzLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSlcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IGBWYWx1ZSBpbiBwcm9wICR7cHJvcH0gJHthdEluZGV4fWhhcyBubyB2YWxpZCB0eXBlYDtcbiAgICAgICAgfTtcblxuICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICBjYXNlIEFycmF5Lm5hbWU6XG4gICAgICAgICAgY2FzZSBTZXQubmFtZTpcbiAgICAgICAgICAgIGlmIChhbGxEZWNvcmF0b3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb25zdCBsaXN0RGVjID0gYWxsRGVjb3JhdG9ycy5maW5kKFxuICAgICAgICAgICAgICAgIChkKSA9PiBkLmtleSA9PT0gVmFsaWRhdGlvbktleXMuTElTVCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGxpc3REZWMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlID1cbiAgICAgICAgICAgICAgICAgIGMgPT09XG4gICAgICAgICAgICAgICAgICAoQXJyYXkubmFtZVxuICAgICAgICAgICAgICAgICAgICA/IChvYmogYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF1cbiAgICAgICAgICAgICAgICAgICAgOiAob2JqIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdLnZhbHVlcygpXG4gICAgICAgICAgICAgICAgICApLmZpbmQoKHY6IFZhbGlkYXRhYmxlLCBpZHg6IG51bWJlcikgPT5cbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGUocHJvcCwgaWR4LCB2KSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGUpXG4gICAgICAgICAgICAgICAgICBlcnIgPSBzZihERUZBVUxUX0VSUk9SX01FU1NBR0VTLkxJU1RfSU5TSURFLCBlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKChvYmogYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0pXG4gICAgICAgICAgICAgICAgZXJyID0gdmFsaWRhdGUocHJvcCwgLTEsIG9ialtwcm9wXSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKHNmKFwiTW9kZWwgc2hvdWxkIGJlIHZhbGlkYXRhYmxlIGJ1dCBpdHMgbm90XCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBlcnJzID0gZXJycyB8fCB7fTtcbiAgICAgICAgICBlcnJzW3Byb3BdID0gZXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycnMpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdFtwcm9wXSA9IGVycnM7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCA/IG5ldyBNb2RlbEVycm9yRGVmaW5pdGlvbihyZXN1bHQpIDogdW5kZWZpbmVkO1xufVxuIl19
140
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC92YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNEJBLDRCQXdLQztBQXBNRCxpRUFBOEQ7QUFDOUQscURBQWdGO0FBQ2hGLGtEQUErQztBQUMvQyw4Q0FBc0M7QUFDdEMsMkNBQTZDO0FBRzdDLHlEQUFzRDtBQUN0RCxrRUFHNEM7QUFNNUM7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLFFBQVEsQ0FDdEIsR0FBTSxFQUNOLEdBQUcsYUFBdUI7SUFFMUIsTUFBTSxtQkFBbUIsR0FBNEMsRUFBRSxDQUFDO0lBQ3hFLEtBQUssTUFBTSxJQUFJLElBQUksR0FBRztRQUNwQixJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEUsbUJBQW1CLENBQUMsSUFBSSxDQUN0QixJQUFBLGtDQUFxQixFQUNuQiwwQkFBYyxDQUFDLE9BQU8sRUFDdEIsR0FBRyxFQUNILElBQUksQ0FDb0MsQ0FDM0MsQ0FBQztJQUVOLElBQUksTUFBTSxHQUE0QixTQUFTLENBQUM7SUFFaEQsS0FBSyxNQUFNLGlCQUFpQixJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDcEQsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztRQUUvQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU07WUFBRSxTQUFTO1FBRWhELE1BQU0sb0JBQW9CLEdBQXNCLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5RCxnTEFBZ0w7UUFDaEwsSUFDRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLDBCQUFjLENBQUMsSUFBSTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUMvQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FB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SUFBSSwyQ0FBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQy9ELENBQUMiLCJmaWxlIjoibW9kZWwvdmFsaWRhdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZGVsRXJyb3JEZWZpbml0aW9uIH0gZnJvbSBcIi4vTW9kZWxFcnJvckRlZmluaXRpb25cIjtcbmltcG9ydCB7IERlY29yYXRvck1ldGFkYXRhLCBnZXRQcm9wZXJ0eURlY29yYXRvcnMgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IE1vZGVsS2V5cyB9IGZyb20gXCIuLi91dGlscy9jb25zdGFudHNcIjtcbmltcG9ydCB7IHNmIH0gZnJvbSBcIi4uL3V0aWxzL3N0cmluZ3NcIjtcbmltcG9ydCB7IFJlc2VydmVkTW9kZWxzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBWYWxpZGF0YWJsZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuL01vZGVsXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uIH0gZnJvbSBcIi4uL3ZhbGlkYXRpb24vVmFsaWRhdGlvblwiO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyxcbiAgVmFsaWRhdGlvbktleXMsXG59IGZyb20gXCIuLi92YWxpZGF0aW9uL1ZhbGlkYXRvcnMvY29uc3RhbnRzXCI7XG5pbXBvcnQge1xuICBNb2RlbEVycm9ycyxcbiAgVmFsaWRhdGlvblByb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbixcbn0gZnJvbSBcIi4uL3ZhbGlkYXRpb24vdHlwZXNcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBBbmFseXNlcyB0aGUgZGVjb3JhdGlvbnMgb2YgdGhlIHByb3BlcnRpZXMgYW5kIHZhbGlkYXRlcyB0aGUgb2JqIGFjY29yZGluZyB0byB0aGVtXG4gKlxuICogQHR5cGVkZWYgVCBleHRlbmRzIE1vZGVsXG4gKiBAcHJvcCB7VH0gb2JqIE1vZGVsIG9iamVjdCB0byB2YWxpZGF0ZVxuICogQHByb3Age3N0cmluZ1tdfSBbcHJvcHNUb0lnbm9yZV0gb2JqZWN0IHByb3BlcnRpZXMgdG8gaWdub3JlIGluIHRoZSB2YWxpZGF0aW9uXG4gKlxuICogQGZ1bmN0aW9uIHZhbGlkYXRlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLlZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZTxUIGV4dGVuZHMgTW9kZWw+KFxuICBvYmo6IFQsXG4gIC4uLnByb3BzVG9JZ25vcmU6IHN0cmluZ1tdXG4pOiBNb2RlbEVycm9yRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlY29yYXRlZFByb3BlcnRpZXM6IFZhbGlkYXRpb25Qcm9wZXJ0eURlY29yYXRvckRlZmluaXRpb25bXSA9IFtdO1xuICBmb3IgKGNvbnN0IHByb3AgaW4gb2JqKVxuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkgJiYgcHJvcHNUb0lnbm9yZS5pbmRleE9mKHByb3ApID09PSAtMSlcbiAgICAgIGRlY29yYXRlZFByb3BlcnRpZXMucHVzaChcbiAgICAgICAgZ2V0UHJvcGVydHlEZWNvcmF0b3JzKFxuICAgICAgICAgIFZhbGlkYXRpb25LZXlzLlJFRkxFQ1QsXG4gICAgICAgICAgb2JqLFxuICAgICAgICAgIHByb3AsXG4gICAgICAgICkgYXMgVmFsaWRhdGlvblByb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbixcbiAgICAgICk7XG5cbiAgbGV0IHJlc3VsdDogTW9kZWxFcnJvcnMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBkZWNvcmF0ZWRQcm9wZXJ0eSBvZiBkZWNvcmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgeyBwcm9wLCBkZWNvcmF0b3JzIH0gPSBkZWNvcmF0ZWRQcm9wZXJ0eTtcblxuICAgIGlmICghZGVjb3JhdG9ycyB8fCAhZGVjb3JhdG9ycy5sZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgZGVmYXVsdFR5cGVEZWNvcmF0b3I6IERlY29yYXRvck1ldGFkYXRhID0gZGVjb3JhdG9yc1swXTtcblxuICAgIC8vIHRyaWVzIHRvIGZpbmQgYW55IHR5cGUgZGVjb3JhdG9ycyBvciBvdGhlciBkZWNvcmF0b3JzIHRoYXQgYWxyZWFkeSBlbmZvcmNlIHR5cGUgKHRoZSBvbmVzIHdpdGggdGhlIGFsbG93ZWQgdHlwZXMgcHJvcGVydHkgZGVmaW5lZCkuIGlmIHNvLCBza2lwIHRoZSBkZWZhdWx0IHR5cGUgdmVyaWZpY2F0aW9uXG4gICAgaWYgKFxuICAgICAgZGVjb3JhdG9ycy5maW5kKChkKSA9PiB7XG4gICAgICAgIGlmIChkLmtleSA9PT0gVmFsaWRhdGlvbktleXMuVFlQRSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiAhIWQucHJvcHMudHlwZXM/LmZpbmQoXG4gICAgICAgICAgKHQpID0+IHQgPT09IGRlZmF1bHRUeXBlRGVjb3JhdG9yLnByb3BzLm5hbWUsXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICkge1xuICAgICAgZGVjb3JhdG9ycy5zaGlmdCgpOyAvLyByZW1vdmUgdGhlIGRlc2lnbjp0eXBlIGRlY29yYXRvciwgc2luY2UgdGhlIHR5cGUgd2lsbCBhbHJlYWR5IGJlIGNoZWNrZWRcbiAgICB9XG5cbiAgICBsZXQgZXJyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGZvciAoY29uc3QgZGVjb3JhdG9yIG9mIGRlY29yYXRvcnMpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRvciA9IFZhbGlkYXRpb24uZ2V0KGRlY29yYXRvci5rZXkpO1xuICAgICAgaWYgKCF2YWxpZGF0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHZhbGlkYXRvciBmb3IgJHtkZWNvcmF0b3Iua2V5fWApO1xuICAgICAgfVxuICAgICAgY29uc3QgZXJyOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB2YWxpZGF0b3IuaGFzRXJyb3JzKFxuICAgICAgICAob2JqIGFzIGFueSlbcHJvcC50b1N0cmluZygpXSxcbiAgICAgICAgLi4uKGRlY29yYXRvci5rZXkgPT09IE1vZGVsS2V5cy5UWVBFXG4gICAgICAgICAgPyBbZGVjb3JhdG9yLnByb3BzXVxuICAgICAgICAgIDogT2JqZWN0LnZhbHVlcyhkZWNvcmF0b3IucHJvcHMpKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZXJycyA9IGVycnMgfHwge307XG4gICAgICAgIGVycnNbZGVjb3JhdG9yLmtleV0gPSBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycnMpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdFtkZWNvcmF0ZWRQcm9wZXJ0eS5wcm9wLnRvU3RyaW5nKCldID0gZXJycztcbiAgICB9XG4gIH1cblxuICAvLyB0ZXN0cyBuZXN0ZWQgY2xhc3Nlc1xuICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMob2JqKS5maWx0ZXIoKGspID0+ICFyZXN1bHQgfHwgIXJlc3VsdFtrXSkpIHtcbiAgICBsZXQgZXJyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGVycnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBpZiBhIG5lc3RlZCBNb2RlbFxuICAgIGNvbnN0IGFsbERlY29yYXRvcnMgPSBnZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICBWYWxpZGF0aW9uS2V5cy5SRUZMRUNULFxuICAgICAgb2JqLFxuICAgICAgcHJvcCxcbiAgICApLmRlY29yYXRvcnM7XG4gICAgY29uc3QgZGVjb3JhdG9ycyA9IGdldFByb3BlcnR5RGVjb3JhdG9ycyhcbiAgICAgIFZhbGlkYXRpb25LZXlzLlJFRkxFQ1QsXG4gICAgICBvYmosXG4gICAgICBwcm9wLFxuICAgICkuZGVjb3JhdG9ycy5maWx0ZXIoXG4gICAgICAoZCkgPT4gW01vZGVsS2V5cy5UWVBFLCBWYWxpZGF0aW9uS2V5cy5UWVBFXS5pbmRleE9mKGQua2V5KSAhPT0gLTEsXG4gICAgKTtcbiAgICBpZiAoIWRlY29yYXRvcnMgfHwgIWRlY29yYXRvcnMubGVuZ3RoKSBjb250aW51ZTtcbiAgICBjb25zdCBkZWMgPSBkZWNvcmF0b3JzLnBvcCgpIGFzIERlY29yYXRvck1ldGFkYXRhO1xuICAgIGNvbnN0IGNsYXp6ID0gZGVjLnByb3BzLm5hbWVcbiAgICAgID8gW2RlYy5wcm9wcy5uYW1lXVxuICAgICAgOiBBcnJheS5pc0FycmF5KGRlYy5wcm9wcy5jdXN0b21UeXBlcylcbiAgICAgICAgPyBkZWMucHJvcHMuY3VzdG9tVHlwZXNcbiAgICAgICAgOiBbZGVjLnByb3BzLmN1c3RvbVR5cGVzXTtcbiAgICBjb25zdCByZXNlcnZlZCA9IE9iamVjdC52YWx1ZXMoUmVzZXJ2ZWRNb2RlbHMpLm1hcCgodikgPT5cbiAgICAgIHYudG9Mb3dlckNhc2UoKSxcbiAgICApIGFzIHN0cmluZ1tdO1xuXG4gICAgZm9yIChjb25zdCBjIG9mIGNsYXp6KSB7XG4gICAgICBpZiAocmVzZXJ2ZWQuaW5kZXhPZihjLnRvTG93ZXJDYXNlKCkpID09PSAtMSkge1xuICAgICAgICBjb25zdCB0eXBlRGVjb3JhdG9yS2V5ID0gQXJyYXkuaXNBcnJheSgob2JqIGFzIGFueSlbcHJvcF0pXG4gICAgICAgICAgPyBWYWxpZGF0aW9uS2V5cy5MSVNUXG4gICAgICAgICAgOiBWYWxpZGF0aW9uS2V5cy5UWVBFO1xuICAgICAgICBjb25zdCB0eXBlczogYW55ID1cbiAgICAgICAgICBhbGxEZWNvcmF0b3JzLmZpbmQoKGQpID0+IGQua2V5ID09PSB0eXBlRGVjb3JhdG9yS2V5KSB8fCB7fTtcbiAgICAgICAgbGV0IGFsbG93ZWRUeXBlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKHR5cGVzICYmIHR5cGVzLnByb3BzKSB7XG4gICAgICAgICAgY29uc3QgY3VzdG9tVHlwZXMgPSBBcnJheS5pc0FycmF5KChvYmogYXMgYW55KVtwcm9wXSlcbiAgICAgICAgICAgID8gdHlwZXMucHJvcHMuY2xhc3NcbiAgICAgICAgICAgIDogdHlwZXMucHJvcHMuY3VzdG9tVHlwZXM7XG4gICAgICAgICAgaWYgKGN1c3RvbVR5cGVzKVxuICAgICAgICAgICAgYWxsb3dlZFR5cGVzID0gQXJyYXkuaXNBcnJheShjdXN0b21UeXBlcylcbiAgICAgICAgICAgICAgPyBjdXN0b21UeXBlcy5tYXAoKHQpID0+IGAke3R9YC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICA6IFtjdXN0b21UeXBlcy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlID0gKFxuICAgICAgICAgIHByb3A6IHN0cmluZyxcbiAgICAgICAgICBpZHg6IG51bWJlcixcbiAgICAgICAgICB2YWx1ZTogYW55LFxuICAgICAgICApOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICAgICAgICAgIGNvbnN0IGF0SW5kZXggPSBpZHggPj0gMCA/IGBhdCBpbmRleCAke2lkeH0gYCA6IFwiXCI7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIHJldHVybiAhIXZhbHVlLmhhc0Vycm9yc1xuICAgICAgICAgICAgICA/IHZhbHVlLmhhc0Vycm9ycygpXG4gICAgICAgICAgICAgIDogYFZhbHVlIGluIHByb3AgJHtwcm9wfSAke2F0SW5kZXh9aXMgbm90IHZhbGlkYXRhYmxlYDtcbiAgICAgICAgICByZXR1cm4gYWxsb3dlZFR5cGVzLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSlcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IGBWYWx1ZSBpbiBwcm9wICR7cHJvcH0gJHthdEluZGV4fWhhcyBubyB2YWxpZCB0eXBlYDtcbiAgICAgICAgfTtcblxuICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICBjYXNlIEFycmF5Lm5hbWU6XG4gICAgICAgICAgY2FzZSBTZXQubmFtZTpcbiAgICAgICAgICAgIGlmIChhbGxEZWNvcmF0b3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb25zdCBsaXN0RGVjID0gYWxsRGVjb3JhdG9ycy5maW5kKFxuICAgICAgICAgICAgICAgIChkKSA9PiBkLmtleSA9PT0gVmFsaWRhdGlvbktleXMuTElTVCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGxpc3REZWMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlID1cbiAgICAgICAgICAgICAgICAgIGMgPT09XG4gICAgICAgICAgICAgICAgICAoQXJyYXkubmFtZVxuICAgICAgICAgICAgICAgICAgICA/IChvYmogYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF1cbiAgICAgICAgICAgICAgICAgICAgOiAob2JqIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdLnZhbHVlcygpXG4gICAgICAgICAgICAgICAgICApLmZpbmQoKHY6IFZhbGlkYXRhYmxlLCBpZHg6IG51bWJlcikgPT5cbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGUocHJvcCwgaWR4LCB2KSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGUpXG4gICAgICAgICAgICAgICAgICBlcnIgPSBzZihERUZBVUxUX0VSUk9SX01FU1NBR0VTLkxJU1RfSU5TSURFLCBlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKChvYmogYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0pXG4gICAgICAgICAgICAgICAgZXJyID0gdmFsaWRhdGUocHJvcCwgLTEsIChvYmogYXMgYW55KVtwcm9wXSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKHNmKFwiTW9kZWwgc2hvdWxkIGJlIHZhbGlkYXRhYmxlIGJ1dCBpdHMgbm90XCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBlcnJzID0gZXJycyB8fCB7fTtcbiAgICAgICAgICBlcnJzW3Byb3BdID0gZXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycnMpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdFtwcm9wXSA9IGVycnM7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCA/IG5ldyBNb2RlbEVycm9yRGVmaW5pdGlvbihyZXN1bHQpIDogdW5kZWZpbmVkO1xufVxuIl19
@@ -25,6 +25,7 @@ var ModelKeys;
25
25
  ModelKeys["ANCHOR"] = "__modelDefinition";
26
26
  ModelKeys["HASHING"] = "hashing";
27
27
  ModelKeys["SERIALIZATION"] = "serialization";
28
+ ModelKeys["BINDING"] = "binding";
28
29
  })(ModelKeys || (exports.ModelKeys = ModelKeys = {}));
29
30
 
30
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91dGlscy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILElBQVksU0FTWDtBQVRELFdBQVksU0FBUztJQUNuQiwwQ0FBNkIsQ0FBQTtJQUM3QixpQ0FBb0IsQ0FBQTtJQUNwQix5Q0FBNEIsQ0FBQTtJQUM1Qix5Q0FBNEIsQ0FBQTtJQUM1Qiw0QkFBZSxDQUFBO0lBQ2YseUNBQTRCLENBQUE7SUFDNUIsZ0NBQW1CLENBQUE7SUFDbkIsNENBQStCLENBQUE7QUFDakMsQ0FBQyxFQVRXLFNBQVMseUJBQVQsU0FBUyxRQVNwQiIsImZpbGUiOiJ1dGlscy9jb25zdGFudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHZhcmlvdXMgTW9kZWwga2V5cyB1c2VkIGZvciByZWZsZWN0aW9uXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRkxFQ1QgcHJlZml4IHRvIGFsbCBvdGhlciBrZXlzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVFlQRSB0eXBlIGtleVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFBBUkFNUyBtZXRob2QgcGFyYW1zIGtleVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFVFVSTiBtZXRob2QgcmV0dXJuIGtleVxuICogQHByb3BlcnR5IHtzdHJpbmd9IE1PREVMIG1vZGVsIGtleVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEFOQ0hPUiBhbmNob3Iga2V5LiB3aWxsIHNlcnZlIGFzIGEgZ2hvc3QgcHJvcGVydHkgaW4gdGhlIG1vZGVsXG4gKlxuICogQGNvbnN0YW50IE1vZGVsS2V5c1xuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Nb2RlbFxuICogQGNhdGVnb3J5IE1vZGVsXG4gKi9cbmV4cG9ydCBlbnVtIE1vZGVsS2V5cyB7XG4gIFJFRkxFQ1QgPSBcIm1vZGVsLmRlZmluaXRpb24uXCIsXG4gIFRZUEUgPSBcImRlc2lnbjp0eXBlXCIsXG4gIFBBUkFNUyA9IFwiZGVzaWduOnBhcmFtdHlwZXNcIixcbiAgUkVUVVJOID0gXCJkZXNpZ246cmV0dXJudHlwZVwiLFxuICBNT0RFTCA9IFwibW9kZWxcIixcbiAgQU5DSE9SID0gXCJfX21vZGVsRGVmaW5pdGlvblwiLFxuICBIQVNISU5HID0gXCJoYXNoaW5nXCIsXG4gIFNFUklBTElaQVRJT04gPSBcInNlcmlhbGl6YXRpb25cIixcbn1cbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91dGlscy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILElBQVksU0FVWDtBQVZELFdBQVksU0FBUztJQUNuQiwwQ0FBNkIsQ0FBQTtJQUM3QixpQ0FBb0IsQ0FBQTtJQUNwQix5Q0FBNEIsQ0FBQTtJQUM1Qix5Q0FBNEIsQ0FBQTtJQUM1Qiw0QkFBZSxDQUFBO0lBQ2YseUNBQTRCLENBQUE7SUFDNUIsZ0NBQW1CLENBQUE7SUFDbkIsNENBQStCLENBQUE7SUFDL0IsZ0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQVZXLFNBQVMseUJBQVQsU0FBUyxRQVVwQiIsImZpbGUiOiJ1dGlscy9jb25zdGFudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHZhcmlvdXMgTW9kZWwga2V5cyB1c2VkIGZvciByZWZsZWN0aW9uXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRkxFQ1QgcHJlZml4IHRvIGFsbCBvdGhlciBrZXlzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVFlQRSB0eXBlIGtleVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFBBUkFNUyBtZXRob2QgcGFyYW1zIGtleVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFVFVSTiBtZXRob2QgcmV0dXJuIGtleVxuICogQHByb3BlcnR5IHtzdHJpbmd9IE1PREVMIG1vZGVsIGtleVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEFOQ0hPUiBhbmNob3Iga2V5LiB3aWxsIHNlcnZlIGFzIGEgZ2hvc3QgcHJvcGVydHkgaW4gdGhlIG1vZGVsXG4gKlxuICogQGNvbnN0YW50IE1vZGVsS2V5c1xuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Nb2RlbFxuICogQGNhdGVnb3J5IE1vZGVsXG4gKi9cbmV4cG9ydCBlbnVtIE1vZGVsS2V5cyB7XG4gIFJFRkxFQ1QgPSBcIm1vZGVsLmRlZmluaXRpb24uXCIsXG4gIFRZUEUgPSBcImRlc2lnbjp0eXBlXCIsXG4gIFBBUkFNUyA9IFwiZGVzaWduOnBhcmFtdHlwZXNcIixcbiAgUkVUVVJOID0gXCJkZXNpZ246cmV0dXJudHlwZVwiLFxuICBNT0RFTCA9IFwibW9kZWxcIixcbiAgQU5DSE9SID0gXCJfX21vZGVsRGVmaW5pdGlvblwiLFxuICBIQVNISU5HID0gXCJoYXNoaW5nXCIsXG4gIFNFUklBTElaQVRJT04gPSBcInNlcmlhbGl6YXRpb25cIixcbiAgQklORElORyA9IFwiYmluZGluZ1wiLFxufVxuIl19
@@ -20,5 +20,6 @@ export declare enum ModelKeys {
20
20
  MODEL = "model",
21
21
  ANCHOR = "__modelDefinition",
22
22
  HASHING = "hashing",
23
- SERIALIZATION = "serialization"
23
+ SERIALIZATION = "serialization",
24
+ BINDING = "binding"
24
25
  }
@@ -28,7 +28,8 @@ class JSONSerializer {
28
28
  preSerialize(model) {
29
29
  // TODO: nested preserialization (so increase performance when deserializing)
30
30
  const toSerialize = Object.assign({}, model);
31
- toSerialize[constants_1.ModelKeys.ANCHOR] = model[constants_1.ModelKeys.ANCHOR];
31
+ const metadata = Model_1.Model.getMetadata(model);
32
+ toSerialize[constants_1.ModelKeys.ANCHOR] = metadata || model.constructor.name;
32
33
  return toSerialize;
33
34
  }
34
35
  /**
@@ -39,7 +40,10 @@ class JSONSerializer {
39
40
  */
40
41
  deserialize(str) {
41
42
  const deserialization = JSON.parse(str);
42
- const model = Model_1.Model.build(deserialization);
43
+ const className = deserialization[constants_1.ModelKeys.ANCHOR];
44
+ if (!className)
45
+ throw new Error("Could not find class reference in serialized model");
46
+ const model = Model_1.Model.build(deserialization, className);
43
47
  return model;
44
48
  }
45
49
  /**
@@ -88,4 +92,4 @@ class Serialization {
88
92
  }
89
93
  exports.Serialization = Serialization;
90
94
 
91
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91dGlscy9zZXJpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDBDQUF1QztBQUN2QywyQ0FBd0M7QUFpQ3hDOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQWEsY0FBYztJQUN6Qjs7Ozs7OztPQU9HO0lBQ08sWUFBWSxDQUFDLEtBQVE7UUFDN0IsNkVBQTZFO1FBQzdFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVDLFdBQW1DLENBQUMscUJBQVMsQ0FBQyxNQUFNLENBQUMsR0FDcEQsS0FDRCxDQUFDLHFCQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLEdBQVc7UUFDckIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLEtBQUssR0FBTSxhQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBaUIsQ0FBQztRQUM5RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFNBQVMsQ0FBQyxLQUFRO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBdkNELHdDQXVDQztBQUVZLFFBQUEsMEJBQTBCLEdBQUcsTUFBTSxDQUFDO0FBRWpELE1BQWEsYUFBYTthQUNULFlBQU8sR0FBVyxrQ0FBMEIsQ0FBQzthQUU3QyxVQUFLLEdBQW9DO1FBQ3RELElBQUksRUFBRSxJQUFJLGNBQWMsRUFBRTtLQUMzQixDQUFDO0lBRUYsZ0JBQXVCLENBQUM7SUFFaEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFXO1FBQzVCLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRLENBQ2IsR0FBVyxFQUNYLElBQWtDLEVBQ2xDLFVBQVUsR0FBRyxLQUFLO1FBRWxCLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLEdBQUcscUJBQXFCLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDN0IsSUFBSSxVQUFVO1lBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDckMsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBUSxFQUFFLE1BQWUsRUFBRSxHQUFHLElBQVc7UUFDeEQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNuRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQVcsRUFBRSxNQUFlLEVBQUUsR0FBRyxJQUFXO1FBQzdELElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDckUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFjO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDOztBQXJDSCxzQ0FzQ0MiLCJmaWxlIjoidXRpbHMvc2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4uL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgeyBNb2RlbEtleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL21vZGVsL3R5cGVzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgSGVscGVyIGluIHNlcmlhbGl6YXRpb25cbiAqXG4gKiBAaW50ZXJmYWNlIFNlcmlhbGl6ZXJcbiAqIEBjYXRlZ29yeSBTZXJpYWxpemF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplcjxUIGV4dGVuZHMgTW9kZWw+IHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFNlcmlhbGl6ZXMgYSBtb2RlbFxuICAgKiBAcGFyYW0ge1R9IG1vZGVsXG4gICAqXG4gICAqIEBwYXJhbSBhcmdzXG4gICAqIEBtZXRob2RcbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICBzZXJpYWxpemUobW9kZWw6IFQsIC4uLmFyZ3M6IGFueVtdKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZWJ1aWxkcyBhIG1vZGVsIGZyb20gc2VyaWFsaXphdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqXG4gICAqIEBwYXJhbSBhcmdzXG4gICAqIEBtZXRob2RcbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICBkZXNlcmlhbGl6ZShzdHI6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBUO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIGEge0BsaW5rIFNlcmlhbGl6ZXJ9IGluIEpTT04gZm9ybWF0XG4gKiBAZGVzY3JpcHRpb24gSlMncyBuYXRpdmUgSlNPTi5zdHJpbmdpZnkgKHVzZWQgaGVyZSkgaXMgbm90IGRldGVybWluaXN0aWNcbiAqIGFuZCB0aGVyZWZvcmUgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBoYXNoaW5nIHB1cnBvc2VzXG4gKlxuICogVG8ga2VlcCBkZXBlbmRlbmNpZXMgbG93LCB3ZSB3aWxsIG5vdCBpbXBsZW1lbnQgdGhpcywgYnV0IHdlIHJlY29tbWVuZFxuICogaW1wbGVtZW50aW5nIGEgc2ltaWxhciB7QGxpbmsgSlNPTlNlcmlhbGl6ZXJ9IHVzaW5nICdkZXRlcm1pbmlzdGljLWpzb24nIGxpYnJhcmllc1xuICpcbiAqIEBjbGFzcyBKU09OU2VyaWFsaXplclxuICogQGltcGxlbWVudHMgU2VyaWFsaXplclxuICpcbiAqIEBjYXRlZ29yeSBTZXJpYWxpemF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBKU09OU2VyaWFsaXplcjxUIGV4dGVuZHMgTW9kZWw+IGltcGxlbWVudHMgU2VyaWFsaXplcjxUPiB7XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBwcmVwYXJlcyB0aGUgbW9kZWwgZm9yIHNlcmlhbGl6YXRpb25cbiAgICogQGRlc2NyaXB0aW9uIHJldHVybnMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIG9iamVjdCwgY29udGFpbmluZyBhbiBlbnVtZXJhYmxlIHtAbGluayBNb2RlbEtleXMjQU5DSE9SfSBwcm9wZXJ0eVxuICAgKiBzbyB0aGUgb2JqZWN0IGNhbiBiZSByZWNvZ25pemVkIHVwb24gZGVzZXJpYWxpemF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7VH0gbW9kZWxcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHByZVNlcmlhbGl6ZShtb2RlbDogVCkge1xuICAgIC8vIFRPRE86IG5lc3RlZCBwcmVzZXJpYWxpemF0aW9uIChzbyBpbmNyZWFzZSBwZXJmb3JtYW5jZSB3aGVuIGRlc2VyaWFsaXppbmcpXG4gICAgY29uc3QgdG9TZXJpYWxpemUgPSBPYmplY3QuYXNzaWduKHt9LCBtb2RlbCk7XG4gICAgKHRvU2VyaWFsaXplIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW01vZGVsS2V5cy5BTkNIT1JdID0gKFxuICAgICAgbW9kZWwgYXMgUmVjb3JkPHN0cmluZywgYW55PlxuICAgIClbTW9kZWxLZXlzLkFOQ0hPUl07XG4gICAgcmV0dXJuIHRvU2VyaWFsaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJlYnVpbGRzIGEgbW9kZWwgZnJvbSBhIHNlcmlhbGl6YXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgaXQgZmFpbHMgdG8gcGFyc2UgdGhlIHN0cmluZywgb3IgdG8gYnVpbGQgdGhlIG1vZGVsXG4gICAqL1xuICBkZXNlcmlhbGl6ZShzdHI6IHN0cmluZyk6IFQge1xuICAgIGNvbnN0IGRlc2VyaWFsaXphdGlvbiA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICBjb25zdCBtb2RlbDogVCA9IE1vZGVsLmJ1aWxkKGRlc2VyaWFsaXphdGlvbikgYXMgdW5rbm93biBhcyBUO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBTZXJpYWxpemVzIGEgbW9kZWxcbiAgICogQHBhcmFtIHtUfSBtb2RlbFxuICAgKlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgZmFpbHMgdG8gc2VyaWFsaXplXG4gICAqL1xuICBzZXJpYWxpemUobW9kZWw6IFQpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnByZVNlcmlhbGl6ZShtb2RlbCkpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0U2VyaWFsaXphdGlvbk1ldGhvZCA9IFwianNvblwiO1xuXG5leHBvcnQgY2xhc3MgU2VyaWFsaXphdGlvbiB7XG4gIHByaXZhdGUgc3RhdGljIGN1cnJlbnQ6IHN0cmluZyA9IERlZmF1bHRTZXJpYWxpemF0aW9uTWV0aG9kO1xuXG4gIHByaXZhdGUgc3RhdGljIGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBTZXJpYWxpemVyPGFueT4+ID0ge1xuICAgIGpzb246IG5ldyBKU09OU2VyaWFsaXplcigpLFxuICB9O1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIHByaXZhdGUgc3RhdGljIGdldChrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmNhY2hlKSByZXR1cm4gdGhpcy5jYWNoZVtrZXldO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gc2VyaWFsaXphdGlvbiBtZXRob2QgcmVnaXN0ZXJlZCB1bmRlciAke2tleX1gKTtcbiAgfVxuXG4gIHN0YXRpYyByZWdpc3RlcihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBmdW5jOiBDb25zdHJ1Y3RvcjxTZXJpYWxpemVyPGFueT4+LFxuICAgIHNldERlZmF1bHQgPSBmYWxzZSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmNhY2hlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXJpYWxpemF0aW9uIG1ldGhvZCAke2tleX0gYWxyZWFkeSByZWdpc3RlcmVkYCk7XG4gICAgdGhpcy5jYWNoZVtrZXldID0gbmV3IGZ1bmMoKTtcbiAgICBpZiAoc2V0RGVmYXVsdCkgdGhpcy5jdXJyZW50ID0ga2V5O1xuICB9XG5cbiAgc3RhdGljIHNlcmlhbGl6ZShvYmo6IGFueSwgbWV0aG9kPzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICghbWV0aG9kKSByZXR1cm4gdGhpcy5nZXQodGhpcy5jdXJyZW50KS5zZXJpYWxpemUob2JqLCAuLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcy5nZXQobWV0aG9kKS5zZXJpYWxpemUob2JqLCAuLi5hcmdzKTtcbiAgfVxuXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZShvYmo6IHN0cmluZywgbWV0aG9kPzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICghbWV0aG9kKSByZXR1cm4gdGhpcy5nZXQodGhpcy5jdXJyZW50KS5kZXNlcmlhbGl6ZShvYmosIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmdldChtZXRob2QpLmRlc2VyaWFsaXplKG9iaiwgLi4uYXJncyk7XG4gIH1cblxuICBzdGF0aWMgc2V0RGVmYXVsdChtZXRob2Q6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudCA9IHRoaXMuZ2V0KG1ldGhvZCk7XG4gIH1cbn1cbiJdfQ==
95
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91dGlscy9zZXJpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDBDQUF1QztBQUN2QywyQ0FBd0M7QUFpQ3hDOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQWEsY0FBYztJQUN6Qjs7Ozs7OztPQU9HO0lBQ08sWUFBWSxDQUFDLEtBQVE7UUFDN0IsNkVBQTZFO1FBQzdFLE1BQU0sV0FBVyxHQUF3QixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRSxNQUFNLFFBQVEsR0FBRyxhQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLFdBQVcsQ0FBQyxxQkFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNuRSxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxXQUFXLENBQUMsR0FBVztRQUNyQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxxQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sS0FBSyxHQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBaUIsQ0FBQztRQUN6RSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFNBQVMsQ0FBQyxLQUFRO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBekNELHdDQXlDQztBQUVZLFFBQUEsMEJBQTBCLEdBQUcsTUFBTSxDQUFDO0FBRWpELE1BQWEsYUFBYTthQUNULFlBQU8sR0FBVyxrQ0FBMEIsQ0FBQzthQUU3QyxVQUFLLEdBQW9DO1FBQ3RELElBQUksRUFBRSxJQUFJLGNBQWMsRUFBRTtLQUMzQixDQUFDO0lBRUYsZ0JBQXVCLENBQUM7SUFFaEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFXO1FBQzVCLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRLENBQ2IsR0FBVyxFQUNYLElBQWtDLEVBQ2xDLFVBQVUsR0FBRyxLQUFLO1FBRWxCLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLEdBQUcscUJBQXFCLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDN0IsSUFBSSxVQUFVO1lBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDckMsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBUSxFQUFFLE1BQWUsRUFBRSxHQUFHLElBQVc7UUFDeEQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNuRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQVcsRUFBRSxNQUFlLEVBQUUsR0FBRyxJQUFXO1FBQzdELElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDckUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFjO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDOztBQXJDSCxzQ0FzQ0MiLCJmaWxlIjoidXRpbHMvc2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4uL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgeyBNb2RlbEtleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL21vZGVsL3R5cGVzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgSGVscGVyIGluIHNlcmlhbGl6YXRpb25cbiAqXG4gKiBAaW50ZXJmYWNlIFNlcmlhbGl6ZXJcbiAqIEBjYXRlZ29yeSBTZXJpYWxpemF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplcjxUIGV4dGVuZHMgTW9kZWw+IHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFNlcmlhbGl6ZXMgYSBtb2RlbFxuICAgKiBAcGFyYW0ge1R9IG1vZGVsXG4gICAqXG4gICAqIEBwYXJhbSBhcmdzXG4gICAqIEBtZXRob2RcbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICBzZXJpYWxpemUobW9kZWw6IFQsIC4uLmFyZ3M6IGFueVtdKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZWJ1aWxkcyBhIG1vZGVsIGZyb20gc2VyaWFsaXphdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqXG4gICAqIEBwYXJhbSBhcmdzXG4gICAqIEBtZXRob2RcbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICBkZXNlcmlhbGl6ZShzdHI6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBUO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIGEge0BsaW5rIFNlcmlhbGl6ZXJ9IGluIEpTT04gZm9ybWF0XG4gKiBAZGVzY3JpcHRpb24gSlMncyBuYXRpdmUgSlNPTi5zdHJpbmdpZnkgKHVzZWQgaGVyZSkgaXMgbm90IGRldGVybWluaXN0aWNcbiAqIGFuZCB0aGVyZWZvcmUgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBoYXNoaW5nIHB1cnBvc2VzXG4gKlxuICogVG8ga2VlcCBkZXBlbmRlbmNpZXMgbG93LCB3ZSB3aWxsIG5vdCBpbXBsZW1lbnQgdGhpcywgYnV0IHdlIHJlY29tbWVuZFxuICogaW1wbGVtZW50aW5nIGEgc2ltaWxhciB7QGxpbmsgSlNPTlNlcmlhbGl6ZXJ9IHVzaW5nICdkZXRlcm1pbmlzdGljLWpzb24nIGxpYnJhcmllc1xuICpcbiAqIEBjbGFzcyBKU09OU2VyaWFsaXplclxuICogQGltcGxlbWVudHMgU2VyaWFsaXplclxuICpcbiAqIEBjYXRlZ29yeSBTZXJpYWxpemF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBKU09OU2VyaWFsaXplcjxUIGV4dGVuZHMgTW9kZWw+IGltcGxlbWVudHMgU2VyaWFsaXplcjxUPiB7XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBwcmVwYXJlcyB0aGUgbW9kZWwgZm9yIHNlcmlhbGl6YXRpb25cbiAgICogQGRlc2NyaXB0aW9uIHJldHVybnMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIG9iamVjdCwgY29udGFpbmluZyBhbiBlbnVtZXJhYmxlIHtAbGluayBNb2RlbEtleXMjQU5DSE9SfSBwcm9wZXJ0eVxuICAgKiBzbyB0aGUgb2JqZWN0IGNhbiBiZSByZWNvZ25pemVkIHVwb24gZGVzZXJpYWxpemF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7VH0gbW9kZWxcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHByZVNlcmlhbGl6ZShtb2RlbDogVCkge1xuICAgIC8vIFRPRE86IG5lc3RlZCBwcmVzZXJpYWxpemF0aW9uIChzbyBpbmNyZWFzZSBwZXJmb3JtYW5jZSB3aGVuIGRlc2VyaWFsaXppbmcpXG4gICAgY29uc3QgdG9TZXJpYWxpemU6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RlbCk7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBNb2RlbC5nZXRNZXRhZGF0YShtb2RlbCk7XG4gICAgdG9TZXJpYWxpemVbTW9kZWxLZXlzLkFOQ0hPUl0gPSBtZXRhZGF0YSB8fCBtb2RlbC5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHJldHVybiB0b1NlcmlhbGl6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZWJ1aWxkcyBhIG1vZGVsIGZyb20gYSBzZXJpYWxpemF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9IElmIGl0IGZhaWxzIHRvIHBhcnNlIHRoZSBzdHJpbmcsIG9yIHRvIGJ1aWxkIHRoZSBtb2RlbFxuICAgKi9cbiAgZGVzZXJpYWxpemUoc3RyOiBzdHJpbmcpOiBUIHtcbiAgICBjb25zdCBkZXNlcmlhbGl6YXRpb24gPSBKU09OLnBhcnNlKHN0cik7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gZGVzZXJpYWxpemF0aW9uW01vZGVsS2V5cy5BTkNIT1JdO1xuICAgIGlmICghY2xhc3NOYW1lKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgY2xhc3MgcmVmZXJlbmNlIGluIHNlcmlhbGl6ZWQgbW9kZWxcIik7XG4gICAgY29uc3QgbW9kZWw6IFQgPSBNb2RlbC5idWlsZChkZXNlcmlhbGl6YXRpb24sIGNsYXNzTmFtZSkgYXMgdW5rbm93biBhcyBUO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBTZXJpYWxpemVzIGEgbW9kZWxcbiAgICogQHBhcmFtIHtUfSBtb2RlbFxuICAgKlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgZmFpbHMgdG8gc2VyaWFsaXplXG4gICAqL1xuICBzZXJpYWxpemUobW9kZWw6IFQpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnByZVNlcmlhbGl6ZShtb2RlbCkpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0U2VyaWFsaXphdGlvbk1ldGhvZCA9IFwianNvblwiO1xuXG5leHBvcnQgY2xhc3MgU2VyaWFsaXphdGlvbiB7XG4gIHByaXZhdGUgc3RhdGljIGN1cnJlbnQ6IHN0cmluZyA9IERlZmF1bHRTZXJpYWxpemF0aW9uTWV0aG9kO1xuXG4gIHByaXZhdGUgc3RhdGljIGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBTZXJpYWxpemVyPGFueT4+ID0ge1xuICAgIGpzb246IG5ldyBKU09OU2VyaWFsaXplcigpLFxuICB9O1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIHByaXZhdGUgc3RhdGljIGdldChrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmNhY2hlKSByZXR1cm4gdGhpcy5jYWNoZVtrZXldO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gc2VyaWFsaXphdGlvbiBtZXRob2QgcmVnaXN0ZXJlZCB1bmRlciAke2tleX1gKTtcbiAgfVxuXG4gIHN0YXRpYyByZWdpc3RlcihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBmdW5jOiBDb25zdHJ1Y3RvcjxTZXJpYWxpemVyPGFueT4+LFxuICAgIHNldERlZmF1bHQgPSBmYWxzZSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmNhY2hlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXJpYWxpemF0aW9uIG1ldGhvZCAke2tleX0gYWxyZWFkeSByZWdpc3RlcmVkYCk7XG4gICAgdGhpcy5jYWNoZVtrZXldID0gbmV3IGZ1bmMoKTtcbiAgICBpZiAoc2V0RGVmYXVsdCkgdGhpcy5jdXJyZW50ID0ga2V5O1xuICB9XG5cbiAgc3RhdGljIHNlcmlhbGl6ZShvYmo6IGFueSwgbWV0aG9kPzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICghbWV0aG9kKSByZXR1cm4gdGhpcy5nZXQodGhpcy5jdXJyZW50KS5zZXJpYWxpemUob2JqLCAuLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcy5nZXQobWV0aG9kKS5zZXJpYWxpemUob2JqLCAuLi5hcmdzKTtcbiAgfVxuXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZShvYmo6IHN0cmluZywgbWV0aG9kPzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICghbWV0aG9kKSByZXR1cm4gdGhpcy5nZXQodGhpcy5jdXJyZW50KS5kZXNlcmlhbGl6ZShvYmosIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmdldChtZXRob2QpLmRlc2VyaWFsaXplKG9iaiwgLi4uYXJncyk7XG4gIH1cblxuICBzdGF0aWMgc2V0RGVmYXVsdChtZXRob2Q6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudCA9IHRoaXMuZ2V0KG1ldGhvZCk7XG4gIH1cbn1cbiJdfQ==
@@ -50,7 +50,7 @@ export declare class JSONSerializer<T extends Model> implements Serializer<T> {
50
50
  * @param {T} model
51
51
  * @protected
52
52
  */
53
- protected preSerialize(model: T): {} & T;
53
+ protected preSerialize(model: T): Record<string, any>;
54
54
  /**
55
55
  * @summary Rebuilds a model from a serialization
56
56
  * @param {string} str
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decaf-ts/decorator-validation",
3
- "version": "1.2.0",
3
+ "version": "1.3.1",
4
4
  "description": "simple decorator based validation engine",
5
5
  "type": "module",
6
6
  "exports": {