@decaf-ts/decorator-validation 1.6.1 → 1.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -2
- package/dist/decorator-validation.cjs +1154 -352
- package/dist/decorator-validation.esm.cjs +1124 -320
- package/lib/esm/index.d.ts +5 -36
- package/lib/esm/index.js +6 -37
- package/lib/esm/model/Model.d.ts +100 -29
- package/lib/esm/model/Model.js +103 -36
- package/lib/esm/model/constants.d.ts +3 -3
- package/lib/esm/model/constants.js +4 -4
- package/lib/esm/model/construction.d.ts +3 -3
- package/lib/esm/model/construction.js +4 -4
- package/lib/esm/model/decorators.d.ts +4 -4
- package/lib/esm/model/decorators.js +6 -5
- package/lib/esm/model/types.d.ts +30 -11
- package/lib/esm/model/types.js +1 -1
- package/lib/esm/model/validation.d.ts +2 -2
- package/lib/esm/model/validation.js +5 -5
- package/lib/esm/utils/Decoration.d.ts +123 -0
- package/lib/esm/utils/Decoration.js +188 -0
- package/lib/esm/utils/constants.d.ts +27 -9
- package/lib/esm/utils/constants.js +28 -10
- package/lib/esm/utils/dates.d.ts +26 -16
- package/lib/esm/utils/dates.js +27 -17
- package/lib/esm/utils/decorators.d.ts +41 -0
- package/lib/esm/utils/decorators.js +42 -1
- package/lib/esm/utils/hashing.d.ts +50 -6
- package/lib/esm/utils/hashing.js +49 -5
- package/lib/esm/utils/index.d.ts +1 -0
- package/lib/esm/utils/index.js +2 -1
- package/lib/esm/utils/registry.d.ts +2 -2
- package/lib/esm/utils/registry.js +1 -1
- package/lib/esm/utils/serialization.d.ts +1 -1
- package/lib/esm/utils/serialization.js +2 -2
- package/lib/esm/utils/strings.d.ts +4 -4
- package/lib/esm/utils/strings.js +5 -5
- package/lib/esm/utils/types.d.ts +123 -16
- package/lib/esm/utils/types.js +1 -1
- package/lib/esm/validation/Validators/DateValidator.d.ts +40 -8
- package/lib/esm/validation/Validators/DateValidator.js +41 -9
- package/lib/esm/validation/Validators/EmailValidator.d.ts +39 -7
- package/lib/esm/validation/Validators/EmailValidator.js +40 -8
- package/lib/esm/validation/Validators/ListValidator.d.ts +44 -6
- package/lib/esm/validation/Validators/ListValidator.js +45 -7
- package/lib/esm/validation/Validators/MaxValidator.d.ts +52 -6
- package/lib/esm/validation/Validators/MaxValidator.js +53 -7
- package/lib/esm/validation/Validators/MinValidator.d.ts +52 -6
- package/lib/esm/validation/Validators/MinValidator.js +53 -7
- package/lib/esm/validation/Validators/PatternValidator.d.ts +75 -9
- package/lib/esm/validation/Validators/PatternValidator.js +76 -10
- package/lib/esm/validation/Validators/RequiredValidator.d.ts +52 -6
- package/lib/esm/validation/Validators/RequiredValidator.js +53 -7
- package/lib/esm/validation/Validators/TypeValidator.d.ts +60 -6
- package/lib/esm/validation/Validators/TypeValidator.js +69 -7
- package/lib/esm/validation/Validators/URLValidator.d.ts +41 -7
- package/lib/esm/validation/Validators/URLValidator.js +42 -8
- package/lib/esm/validation/Validators/Validator.d.ts +77 -14
- package/lib/esm/validation/Validators/Validator.js +68 -11
- package/lib/esm/validation/Validators/ValidatorRegistry.d.ts +1 -7
- package/lib/esm/validation/Validators/ValidatorRegistry.js +4 -11
- package/lib/esm/validation/decorators.d.ts +50 -40
- package/lib/esm/validation/decorators.js +102 -53
- package/lib/esm/validation/types.d.ts +146 -28
- package/lib/esm/validation/types.js +1 -1
- package/lib/index.cjs +7 -38
- package/lib/index.d.ts +5 -36
- package/lib/model/Model.cjs +103 -38
- package/lib/model/Model.d.ts +100 -29
- package/lib/model/constants.cjs +4 -4
- package/lib/model/constants.d.ts +3 -3
- package/lib/model/construction.cjs +4 -4
- package/lib/model/construction.d.ts +3 -3
- package/lib/model/decorators.cjs +6 -5
- package/lib/model/decorators.d.ts +4 -4
- package/lib/model/types.cjs +1 -1
- package/lib/model/types.d.ts +30 -11
- package/lib/model/validation.cjs +4 -4
- package/lib/model/validation.d.ts +2 -2
- package/lib/utils/Decoration.cjs +192 -0
- package/lib/utils/Decoration.d.ts +123 -0
- package/lib/utils/constants.cjs +29 -11
- package/lib/utils/constants.d.ts +27 -9
- package/lib/utils/dates.cjs +27 -17
- package/lib/utils/dates.d.ts +26 -16
- package/lib/utils/decorators.cjs +42 -1
- package/lib/utils/decorators.d.ts +41 -0
- package/lib/utils/hashing.cjs +49 -5
- package/lib/utils/hashing.d.ts +50 -6
- package/lib/utils/index.cjs +2 -1
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/registry.cjs +1 -1
- package/lib/utils/registry.d.ts +2 -2
- package/lib/utils/serialization.cjs +2 -2
- package/lib/utils/serialization.d.ts +1 -1
- package/lib/utils/strings.cjs +5 -5
- package/lib/utils/strings.d.ts +4 -4
- package/lib/utils/types.cjs +1 -1
- package/lib/utils/types.d.ts +123 -16
- package/lib/validation/Validators/DateValidator.cjs +41 -9
- package/lib/validation/Validators/DateValidator.d.ts +40 -8
- package/lib/validation/Validators/EmailValidator.cjs +40 -8
- package/lib/validation/Validators/EmailValidator.d.ts +39 -7
- package/lib/validation/Validators/ListValidator.cjs +45 -7
- package/lib/validation/Validators/ListValidator.d.ts +44 -6
- package/lib/validation/Validators/MaxValidator.cjs +53 -7
- package/lib/validation/Validators/MaxValidator.d.ts +52 -6
- package/lib/validation/Validators/MinValidator.cjs +53 -7
- package/lib/validation/Validators/MinValidator.d.ts +52 -6
- package/lib/validation/Validators/PatternValidator.cjs +76 -10
- package/lib/validation/Validators/PatternValidator.d.ts +75 -9
- package/lib/validation/Validators/RequiredValidator.cjs +53 -7
- package/lib/validation/Validators/RequiredValidator.d.ts +52 -6
- package/lib/validation/Validators/TypeValidator.cjs +69 -7
- package/lib/validation/Validators/TypeValidator.d.ts +60 -6
- package/lib/validation/Validators/URLValidator.cjs +42 -8
- package/lib/validation/Validators/URLValidator.d.ts +41 -7
- package/lib/validation/Validators/Validator.cjs +68 -11
- package/lib/validation/Validators/Validator.d.ts +77 -14
- package/lib/validation/Validators/ValidatorRegistry.cjs +4 -12
- package/lib/validation/Validators/ValidatorRegistry.d.ts +1 -7
- package/lib/validation/decorators.cjs +102 -53
- package/lib/validation/decorators.d.ts +50 -40
- package/lib/validation/types.cjs +1 -1
- package/lib/validation/types.d.ts +146 -28
- package/package.json +2 -2
|
@@ -12,7 +12,7 @@ const Model_1 = require("./Model.cjs");
|
|
|
12
12
|
* @return {T} the new instance
|
|
13
13
|
*
|
|
14
14
|
* @function construct
|
|
15
|
-
* @memberOf module:decorator-validation
|
|
15
|
+
* @memberOf module:decorator-validation
|
|
16
16
|
*/
|
|
17
17
|
function construct(constructor, ...args) {
|
|
18
18
|
const _constr = (...argz) => new constructor(...argz);
|
|
@@ -24,7 +24,7 @@ function construct(constructor, ...args) {
|
|
|
24
24
|
* @param {object} obj
|
|
25
25
|
*
|
|
26
26
|
* @function findLastProtoBeforeObject
|
|
27
|
-
* @memberOf module:decorator-validation
|
|
27
|
+
* @memberOf module:decorator-validation
|
|
28
28
|
*/
|
|
29
29
|
function findLastProtoBeforeObject(obj) {
|
|
30
30
|
let prototype = Object.getPrototypeOf(obj);
|
|
@@ -45,7 +45,7 @@ function findLastProtoBeforeObject(obj) {
|
|
|
45
45
|
* @param {unknown} obj
|
|
46
46
|
*
|
|
47
47
|
* @function bindModelPrototype
|
|
48
|
-
* @memberOf module:decorator-validation
|
|
48
|
+
* @memberOf module:decorator-validation
|
|
49
49
|
*/
|
|
50
50
|
function bindModelPrototype(obj) {
|
|
51
51
|
if (obj instanceof Model_1.Model)
|
|
@@ -66,4 +66,4 @@ function bindModelPrototype(obj) {
|
|
|
66
66
|
}
|
|
67
67
|
throw new Error("Could not find proper prototype to bind");
|
|
68
68
|
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL2NvbnN0cnVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVlBLDhCQU9DO0FBU0QsOERBU0M7QUFVRCxnREFxQkM7QUFwRUQsbUNBQWdDO0FBRWhDOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLFNBQVMsQ0FDdkIsV0FBZ0IsRUFDaEIsR0FBRyxJQUFXO0lBRWQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUM3RCxPQUFPLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUM7SUFDMUMsT0FBTyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IseUJBQXlCLENBQUMsR0FBVztJQUNuRCxJQUFJLFNBQVMsR0FBUSxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELElBQUksU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDL0MsT0FBTyxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3RDLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLElBQUksU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDckQsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxTQUFTO1lBQUUsT0FBTyxTQUFTLENBQUM7SUFDOUUsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLEdBQVk7SUFDN0MsSUFBSSxHQUFHLFlBQVksYUFBSztRQUFFLE9BQU87SUFFakMsU0FBUyxhQUFhLENBQUMsYUFBc0IsRUFBRSxTQUFpQjtRQUM5RCxNQUFNLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQVEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxJQUFJLFNBQVMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkMsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLGFBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsT0FBTyxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFDRSxJQUFJLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFDekIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUNoRCxDQUFDO1lBQ0QsT0FBTyxhQUFhLENBQUMsU0FBUyxFQUFFLGFBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztBQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi9Nb2RlbFwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IEhlbHBlciBGdW5jdGlvbiB0byBvdmVycmlkZSBjb25zdHJ1Y3RvcnNcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHthbnlbXX0gW2FyZ3NdXG4gKiBAcmV0dXJuIHtUfSB0aGUgbmV3IGluc3RhbmNlXG4gKlxuICogQGZ1bmN0aW9uIGNvbnN0cnVjdFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0PFQgZXh0ZW5kcyBNb2RlbD4oXG4gIGNvbnN0cnVjdG9yOiBhbnksXG4gIC4uLmFyZ3M6IGFueVtdXG4pOiBUIHtcbiAgY29uc3QgX2NvbnN0ciA9ICguLi5hcmd6OiBhbnlbXSkgPT4gbmV3IGNvbnN0cnVjdG9yKC4uLmFyZ3opO1xuICBfY29uc3RyLnByb3RvdHlwZSA9IGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIF9jb25zdHIoLi4uYXJncyk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgUmVjdXJzaXZlbHkgZmluZHMgdGhlIGxhc3QgcHJvdG90eXBlIGJlZm9yZSBPYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqXG4gKiBAZnVuY3Rpb24gZmluZExhc3RQcm90b0JlZm9yZU9iamVjdFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZExhc3RQcm90b0JlZm9yZU9iamVjdChvYmo6IG9iamVjdCk6IG9iamVjdCB7XG4gIGxldCBwcm90b3R5cGU6IGFueSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopO1xuICBpZiAocHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlKSByZXR1cm4gb2JqO1xuICB3aGlsZSAocHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSk7XG4gICAgaWYgKHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSkgcmV0dXJuIHByb3RvdHlwZTtcbiAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IE9iamVjdC5wcm90b3R5cGUpIHJldHVybiBwcm90b3R5cGU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgcHJvcGVyIHByb3RvdHlwZVwiKTtcbn1cblxuLyoqXG4gKiBAc3VtYXJ5IGJpbmRzIHRoZSB7QGxpbmsgTW9kZWx9IGNsYXNzIGFzIGEgcm9vdCBwcm90b3R5cGUgb2YgdGhlIHByb3ZpZGVkIGluc3RhbmNlXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSBvYmpcbiAqXG4gKiBAZnVuY3Rpb24gYmluZE1vZGVsUHJvdG90eXBlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kTW9kZWxQcm90b3R5cGUob2JqOiB1bmtub3duKSB7XG4gIGlmIChvYmogaW5zdGFuY2VvZiBNb2RlbCkgcmV0dXJuO1xuXG4gIGZ1bmN0aW9uIGJpbmRQcm90b3R5cGUob2JqVG9PdmVycmlkZTogdW5rbm93biwgcHJvdG90eXBlOiBvYmplY3QpIHtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2Yob2JqVG9PdmVycmlkZSwgcHJvdG90eXBlKTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZTogYW55ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG4gIGlmIChwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gYmluZFByb3RvdHlwZShvYmosIE1vZGVsLnByb3RvdHlwZSk7XG4gIH1cbiAgd2hpbGUgKHByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIGNvbnN0IHByb3QgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKTtcbiAgICBpZiAoXG4gICAgICBwcm90ID09PSBPYmplY3QucHJvdG90eXBlIHx8XG4gICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdCkgPT09IE9iamVjdC5wcm90b3R5cGVcbiAgICApIHtcbiAgICAgIHJldHVybiBiaW5kUHJvdG90eXBlKHByb3RvdHlwZSwgTW9kZWwucHJvdG90eXBlKTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgcHJvcGVyIHByb3RvdHlwZSB0byBiaW5kXCIpO1xufVxuIl19
|
|
@@ -7,7 +7,7 @@ import { Model } from "./Model";
|
|
|
7
7
|
* @return {T} the new instance
|
|
8
8
|
*
|
|
9
9
|
* @function construct
|
|
10
|
-
* @memberOf module:decorator-validation
|
|
10
|
+
* @memberOf module:decorator-validation
|
|
11
11
|
*/
|
|
12
12
|
export declare function construct<T extends Model>(constructor: any, ...args: any[]): T;
|
|
13
13
|
/**
|
|
@@ -15,7 +15,7 @@ export declare function construct<T extends Model>(constructor: any, ...args: an
|
|
|
15
15
|
* @param {object} obj
|
|
16
16
|
*
|
|
17
17
|
* @function findLastProtoBeforeObject
|
|
18
|
-
* @memberOf module:decorator-validation
|
|
18
|
+
* @memberOf module:decorator-validation
|
|
19
19
|
*/
|
|
20
20
|
export declare function findLastProtoBeforeObject(obj: object): object;
|
|
21
21
|
/**
|
|
@@ -24,6 +24,6 @@ export declare function findLastProtoBeforeObject(obj: object): object;
|
|
|
24
24
|
* @param {unknown} obj
|
|
25
25
|
*
|
|
26
26
|
* @function bindModelPrototype
|
|
27
|
-
* @memberOf module:decorator-validation
|
|
27
|
+
* @memberOf module:decorator-validation
|
|
28
28
|
*/
|
|
29
29
|
export declare function bindModelPrototype(obj: unknown): void;
|
package/lib/model/decorators.cjs
CHANGED
|
@@ -20,11 +20,10 @@ const reflection_1 = require("@decaf-ts/reflection");
|
|
|
20
20
|
*
|
|
21
21
|
* @function model
|
|
22
22
|
*
|
|
23
|
-
* @
|
|
24
|
-
*
|
|
23
|
+
* @category Decorators
|
|
25
24
|
*/
|
|
26
25
|
function model(instanceCallback) {
|
|
27
|
-
|
|
26
|
+
function modelDec(original) {
|
|
28
27
|
// the new constructor behaviour
|
|
29
28
|
const newConstructor = function (...args) {
|
|
30
29
|
const instance = (0, construction_1.construct)(original, ...args);
|
|
@@ -51,7 +50,9 @@ function model(instanceCallback) {
|
|
|
51
50
|
Model_1.Model.register(newConstructor, original.name);
|
|
52
51
|
// return new constructor (will override original)
|
|
53
52
|
return newConstructor;
|
|
54
|
-
}
|
|
53
|
+
}
|
|
54
|
+
// return Decoration.for(key).define(modelDec).apply();
|
|
55
|
+
return modelDec;
|
|
55
56
|
}
|
|
56
57
|
function hashedBy(algorithm, ...args) {
|
|
57
58
|
return (0, reflection_1.metadata)(Model_1.Model.key(constants_1.ModelKeys.HASHING), {
|
|
@@ -65,4 +66,4 @@ function serializedBy(serializer, ...args) {
|
|
|
65
66
|
args: args,
|
|
66
67
|
});
|
|
67
68
|
}
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNEJBLHNCQXdDQztBQUVELDRCQUtDO0FBRUQsb0NBS0M7QUFsRkQsaURBQStEO0FBQy9ELGtEQUErQztBQUMvQyxtQ0FBZ0M7QUFDaEMscURBQWdEO0FBVWhEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsU0FBZ0IsS0FBSyxDQUFDLGdCQUFtQztJQUN2RCxTQUFTLFFBQVEsQ0FBQyxRQUFhO1FBQzdCLGdDQUFnQztRQUNoQyxNQUFNLGNBQWMsR0FBUSxVQUFVLEdBQUcsSUFBVztZQUNsRCxNQUFNLFFBQVEsR0FBZ0MsSUFBQSx3QkFBUyxFQUNyRCxRQUFRLEVBQ1IsR0FBRyxJQUFJLENBQ1IsQ0FBQztZQUNGLElBQUEsaUNBQWtCLEVBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0IsMkVBQTJFO1lBQzNFLE1BQU0sT0FBTyxHQUFHLGFBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxJQUFJLE9BQU87Z0JBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRWxFLElBQUEscUJBQVEsRUFBQyxhQUFLLENBQUMsR0FBRyxDQUFDLHFCQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUUxRSxJQUFJLGdCQUFnQjtnQkFBRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUUxRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUM7UUFFRixvREFBb0Q7UUFDcEQsY0FBYyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQzlDLHlEQUF5RDtRQUN6RCxNQUFNLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUU7WUFDNUMsUUFBUSxFQUFFLEtBQUs7WUFDZixVQUFVLEVBQUUsSUFBSTtZQUNoQixZQUFZLEVBQUUsS0FBSztZQUNuQixLQUFLLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSTtTQUMzQyxDQUFDLENBQUM7UUFFSCxJQUFBLHFCQUFRLEVBQUMsYUFBSyxDQUFDLEdBQUcsQ0FBQyxxQkFBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU5RCxhQUFLLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUMsa0RBQWtEO1FBQ2xELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFDRCx1REFBdUQ7SUFFdkQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELFNBQWdCLFFBQVEsQ0FBQyxTQUFpQixFQUFFLEdBQUcsSUFBVztJQUN4RCxPQUFPLElBQUEscUJBQVEsRUFBQyxhQUFLLENBQUMsR0FBRyxDQUFDLHFCQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDNUMsU0FBUyxFQUFFLFNBQVM7UUFDcEIsSUFBSSxFQUFFLElBQUk7S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBZ0IsWUFBWSxDQUFDLFVBQWtCLEVBQUUsR0FBRyxJQUFXO0lBQzdELE9BQU8sSUFBQSxxQkFBUSxFQUFDLGFBQUssQ0FBQyxHQUFHLENBQUMscUJBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUNsRCxVQUFVLEVBQUUsVUFBVTtRQUN0QixJQUFJLEVBQUUsSUFBSTtLQUNYLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBiaW5kTW9kZWxQcm90b3R5cGUsIGNvbnN0cnVjdCB9IGZyb20gXCIuL2NvbnN0cnVjdGlvblwiO1xuaW1wb3J0IHsgTW9kZWxLZXlzIH0gZnJvbSBcIi4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi9Nb2RlbFwiO1xuaW1wb3J0IHsgbWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBkZWZpbmVzIHRoZSB0cGUgb3MgYW4gSW5zdGFuY2VDYWxsYmFjayBmdW5jdGlvblxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBNb2RlbFxuICovXG5leHBvcnQgdHlwZSBJbnN0YW5jZUNhbGxiYWNrID0gKGluc3RhbmNlOiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBjbGFzcyBhcyBhIE1vZGVsIGNsYXNzXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiAtIFJlZ2lzdGVycyB0aGUgY2xhc3MgdW5kZXIgdGhlIG1vZGVsIHJlZ2lzdHJ5IHNvIGl0IGNhbiBiZSBlYXNpbHkgcmVidWlsdDtcbiAqIC0gT3ZlcnJpZGVzIHRoZSBjbGFzcyBjb25zdHJ1Y3RvcjtcbiAqIC0gUnVucyB0aGUgZ2xvYmFsIHtAbGluayBNb2RlbEJ1aWxkZXJGdW5jdGlvbn0gaWYgZGVmaW5lZDtcbiAqIC0gUnVucyB0aGUgb3B0aW9uYWwge0BsaW5rIEluc3RhbmNlQ2FsbGJhY2t9IGlmIHByb3ZpZGVkO1xuICpcbiAqIEBwYXJhbSB7SW5zdGFuY2VDYWxsYmFja30gW2luc3RhbmNlQ2FsbGJhY2tdIG9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgaW5zdGFuY2UgdXBvbiBpbnN0YW50aWF0aW9uLiBkZWZhdWx0cyB0byB1bmRlZmluZWRcbiAqXG4gKiBAZnVuY3Rpb24gbW9kZWxcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWwoaW5zdGFuY2VDYWxsYmFjaz86IEluc3RhbmNlQ2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gbW9kZWxEZWMob3JpZ2luYWw6IGFueSkge1xuICAgIC8vIHRoZSBuZXcgY29uc3RydWN0b3IgYmVoYXZpb3VyXG4gICAgY29uc3QgbmV3Q29uc3RydWN0b3I6IGFueSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgY29uc3QgaW5zdGFuY2U6IFJldHVyblR5cGU8dHlwZW9mIG9yaWdpbmFsPiA9IGNvbnN0cnVjdChcbiAgICAgICAgb3JpZ2luYWwsXG4gICAgICAgIC4uLmFyZ3NcbiAgICAgICk7XG4gICAgICBiaW5kTW9kZWxQcm90b3R5cGUoaW5zdGFuY2UpO1xuICAgICAgLy8gcnVuIGEgYnVpbGRlciBmdW5jdGlvbiBpZiBkZWZpbmVkIHdpdGggdGhlIGZpcnN0IGFyZ3VtZW50IChUaGUgTW9kZWxBcmcpXG4gICAgICBjb25zdCBidWlsZGVyID0gTW9kZWwuZ2V0QnVpbGRlcigpO1xuICAgICAgaWYgKGJ1aWxkZXIpIGJ1aWxkZXIoaW5zdGFuY2UsIGFyZ3MubGVuZ3RoID8gYXJnc1swXSA6IHVuZGVmaW5lZCk7XG5cbiAgICAgIG1ldGFkYXRhKE1vZGVsLmtleShNb2RlbEtleXMuTU9ERUwpLCBvcmlnaW5hbC5uYW1lKShpbnN0YW5jZS5jb25zdHJ1Y3Rvcik7XG5cbiAgICAgIGlmIChpbnN0YW5jZUNhbGxiYWNrKSBpbnN0YW5jZUNhbGxiYWNrKGluc3RhbmNlLCAuLi5hcmdzKTtcblxuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG5cbiAgICAvLyBjb3B5IHByb3RvdHlwZSBzbyBpbnN0YW5jZW9mIG9wZXJhdG9yIHN0aWxsIHdvcmtzXG4gICAgbmV3Q29uc3RydWN0b3IucHJvdG90eXBlID0gb3JpZ2luYWwucHJvdG90eXBlO1xuICAgIC8vIFNldHMgdGhlIHByb3BlciBjb25zdHJ1Y3RvciBuYW1lIGZvciB0eXBlIHZlcmlmaWNhdGlvblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdDb25zdHJ1Y3RvciwgXCJuYW1lXCIsIHtcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IG9yaWdpbmFsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgIH0pO1xuXG4gICAgbWV0YWRhdGEoTW9kZWwua2V5KE1vZGVsS2V5cy5NT0RFTCksIG9yaWdpbmFsLm5hbWUpKG9yaWdpbmFsKTtcblxuICAgIE1vZGVsLnJlZ2lzdGVyKG5ld0NvbnN0cnVjdG9yLCBvcmlnaW5hbC5uYW1lKTtcblxuICAgIC8vIHJldHVybiBuZXcgY29uc3RydWN0b3IgKHdpbGwgb3ZlcnJpZGUgb3JpZ2luYWwpXG4gICAgcmV0dXJuIG5ld0NvbnN0cnVjdG9yO1xuICB9XG4gIC8vIHJldHVybiBEZWNvcmF0aW9uLmZvcihrZXkpLmRlZmluZShtb2RlbERlYykuYXBwbHkoKTtcblxuICByZXR1cm4gbW9kZWxEZWM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoZWRCeShhbGdvcml0aG06IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgcmV0dXJuIG1ldGFkYXRhKE1vZGVsLmtleShNb2RlbEtleXMuSEFTSElORyksIHtcbiAgICBhbGdvcml0aG06IGFsZ29yaXRobSxcbiAgICBhcmdzOiBhcmdzLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZWRCeShzZXJpYWxpemVyOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG4gIHJldHVybiBtZXRhZGF0YShNb2RlbC5rZXkoTW9kZWxLZXlzLlNFUklBTElaQVRJT04pLCB7XG4gICAgc2VyaWFsaXplcjogc2VyaWFsaXplcixcbiAgICBhcmdzOiBhcmdzLFxuICB9KTtcbn1cbiJdfQ==
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @summary defines the tpe os an InstanceCallback function
|
|
3
3
|
*
|
|
4
|
-
* @memberOf module:decorator-validation
|
|
4
|
+
* @memberOf module:decorator-validation
|
|
5
|
+
* @category Model
|
|
5
6
|
*/
|
|
6
7
|
export type InstanceCallback = (instance: any, ...args: any[]) => void;
|
|
7
8
|
/**
|
|
@@ -17,9 +18,8 @@ export type InstanceCallback = (instance: any, ...args: any[]) => void;
|
|
|
17
18
|
*
|
|
18
19
|
* @function model
|
|
19
20
|
*
|
|
20
|
-
* @
|
|
21
|
-
*
|
|
21
|
+
* @category Decorators
|
|
22
22
|
*/
|
|
23
|
-
export declare function model(instanceCallback?: InstanceCallback): any;
|
|
23
|
+
export declare function model(instanceCallback?: InstanceCallback): (original: any) => any;
|
|
24
24
|
export declare function hashedBy(algorithm: string, ...args: any[]): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
|
|
25
25
|
export declare function serializedBy(serializer: string, ...args: any[]): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
|
package/lib/model/types.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZGVsRXJyb3JEZWZpbml0aW9uIH0gZnJvbSBcIi4vTW9kZWxFcnJvckRlZmluaXRpb25cIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4vTW9kZWxcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBUeXBvIG9mIGEgTW9kZWwgYnVpbGRlciBmdW5jdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBNb2RlbEJ1aWxkZXJGdW5jdGlvbiA9IDxUIGV4dGVuZHMgTW9kZWw+KFxuICBzZWxmOiBULFxuICBvYmo/OiBUIHwgUmVjb3JkPHN0cmluZywgYW55PlxuKSA9PiBUO1xuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluaXRpb24gb2YgYSBNb2RlbCBDb25zdHJ1Y3RvciBBcmd1bWVudFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqXG4gKiBAc2VlIE1vZGVsQ29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxBcmc8VD4gPSBUIHwgUGFydGlhbDxUPiB8IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5pdGlvbiBvZiBhIENsYXNzIENvbnN0cnVjdG9yXG4gKiBAZGVzY3JpcHRpb24gR2VuZXJpYyB0eXBlIGZvciBDb25zdHJ1Y3RvciBmdW5jdGlvbnNcbiAqXG4gKiBAdHlwZWRlZiBDb25zdHJ1Y3RvclxuICpcbiAqIEBwYXJhbSB7YW55W119IFthcmdzXVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICovXG5leHBvcnQgdHlwZSBDb25zdHJ1Y3RvcjxUPiA9IHtcbiAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQ7XG59O1xuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluaXRpb24gb2YgYSBNb2RlbCBDb25zdHJ1Y3RvclxuICogQGRlc2NyaXB0aW9uIEdlbmVyaWMgdHlwZSBmb3IgYWxsIE1vZGVsIENvbnN0cnVjdG9yIGZ1bmN0aW9uc1xuICpcbiAqIEB0eXBlZGVmIE1vZGVsQ29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0ge01vZGVsQXJnPFQ+fSBbbW9kZWxdXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc11cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxDb25zdHJ1Y3RvcjxUIGV4dGVuZHMgTW9kZWw+ID0ge1xuICBuZXcgKG1vZGVsPzogTW9kZWxBcmc8VD4sIC4uLmFyZ3M6IGFueVtdKTogVDtcbn07XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgVmFsaWRhdGlvbiBBUEkgZm9yIHZhbGlkYXRhYmxlIG1vZGVsc1xuICogQGludGVyZmFjZSBWYWxpZGF0YWJsZVxuICpcbiAqIEBjYXRlZ29yeSBNb2RlbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRhYmxlIHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFZhbGlkYXRlcyB0aGUgbW9kZWwgYW5kIHJldHVybnMgdGhlIHtAbGluayBNb2RlbEVycm9yRGVmaW5pdGlvbn0gaWYgYW55XG4gICAqIEBwYXJhbSB7YW55fSBbYXJnc11cbiAgICpcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgaGFzRXJyb3JzKC4uLmFyZ3M6IGFueVtdKTogTW9kZWxFcnJvckRlZmluaXRpb24gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgU2VyaWFsaXphYmxlIGludGVyZmFjZVxuICpcbiAqIEBpbnRlcmZhY2UgU2VyaWFsaXphYmxlXG4gKlxuICogQGNhdGVnb3J5IE1vZGVsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXphYmxlIHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IHNlcmlhbGl6ZXMgdGhlIG1vZGVsXG4gICAqIEBtZXRob2RcbiAgICovXG4gIHNlcmlhbGl6ZSgpOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgSW50ZXJmYWNlIGZvciBvYmplY3RzIHRoYXQgY2FuIGJlIGhhc2hlZFxuICogQGludGVyZmFjZSBIYXNoYWJsZVxuICogQGNhdGVnb3J5IE1vZGVsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGFzaGFibGUge1xuICAvKipcbiAgICogQHN1bW1hcnkgR2VuZXJhdGVzIGEgaGFzaCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdFxuICAgKiBAbWV0aG9kXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IEhhc2ggdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBvYmplY3RcbiAgICovXG4gIGhhc2goKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IEludGVyZmFjZSBmb3Igb2JqZWN0cyB0aGF0IGNhbiBiZSBjb21wYXJlZCBmb3IgZXF1YWxpdHlcbiAqIEBpbnRlcmZhY2UgQ29tcGFyYWJsZVxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNvbXBhcmUgYWdhaW5zdFxuICogQGNhdGVnb3J5IE1vZGVsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFyYWJsZTxUPiB7XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBDb21wYXJlcyB0aGlzIG9iamVjdCB3aXRoIGFub3RoZXIgZm9yIGVxdWFsaXR5XG4gICAqIEBtZXRob2RcbiAgICogQHBhcmFtIHtUfSBvdGhlciAtIFRoZSBvYmplY3QgdG8gY29tcGFyZSB3aXRoXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyBmb3IgY29tcGFyaXNvblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgZXF1YWxzKG90aGVyOiBULCAuLi5hcmdzOiBhbnlbXSk6IGJvb2xlYW47XG59XG4iXX0=
|
package/lib/model/types.d.ts
CHANGED
|
@@ -2,19 +2,17 @@ import { ModelErrorDefinition } from "./ModelErrorDefinition";
|
|
|
2
2
|
import { Model } from "./Model";
|
|
3
3
|
/**
|
|
4
4
|
* @summary Typo of a Model builder function
|
|
5
|
-
* @memberOf module:decorator-validation
|
|
6
|
-
* @category Construction
|
|
5
|
+
* @memberOf module:decorator-validation
|
|
7
6
|
*/
|
|
8
7
|
export type ModelBuilderFunction = <T extends Model>(self: T, obj?: T | Record<string, any>) => T;
|
|
9
8
|
/**
|
|
10
9
|
* @summary Definition of a Model Constructor Argument
|
|
11
10
|
*
|
|
12
|
-
* @memberOf module:decorator-validation
|
|
13
|
-
* @category Model
|
|
11
|
+
* @memberOf module:decorator-validation
|
|
14
12
|
*
|
|
15
13
|
* @see ModelConstructor
|
|
16
14
|
*/
|
|
17
|
-
export type ModelArg<T> = T | Record<string, any>;
|
|
15
|
+
export type ModelArg<T> = T | Partial<T> | Record<string, any>;
|
|
18
16
|
/**
|
|
19
17
|
* @summary Definition of a Class Constructor
|
|
20
18
|
* @description Generic type for Constructor functions
|
|
@@ -22,8 +20,7 @@ export type ModelArg<T> = T | Record<string, any>;
|
|
|
22
20
|
* @typedef Constructor
|
|
23
21
|
*
|
|
24
22
|
* @param {any[]} [args]
|
|
25
|
-
* @memberOf module:decorator-validation
|
|
26
|
-
* @category Model
|
|
23
|
+
* @memberOf module:decorator-validation
|
|
27
24
|
*/
|
|
28
25
|
export type Constructor<T> = {
|
|
29
26
|
new (...args: any[]): T;
|
|
@@ -36,8 +33,7 @@ export type Constructor<T> = {
|
|
|
36
33
|
*
|
|
37
34
|
* @param {ModelArg<T>} [model]
|
|
38
35
|
* @param {any[]} [args]
|
|
39
|
-
* @memberOf module:decorator-validation
|
|
40
|
-
* @category Construction
|
|
36
|
+
* @memberOf module:decorator-validation
|
|
41
37
|
*/
|
|
42
38
|
export type ModelConstructor<T extends Model> = {
|
|
43
39
|
new (model?: ModelArg<T>, ...args: any[]): T;
|
|
@@ -46,7 +42,7 @@ export type ModelConstructor<T extends Model> = {
|
|
|
46
42
|
* @summary Defines the Validation API for validatable models
|
|
47
43
|
* @interface Validatable
|
|
48
44
|
*
|
|
49
|
-
* @category
|
|
45
|
+
* @category Model
|
|
50
46
|
*/
|
|
51
47
|
export interface Validatable {
|
|
52
48
|
/**
|
|
@@ -62,7 +58,7 @@ export interface Validatable {
|
|
|
62
58
|
*
|
|
63
59
|
* @interface Serializable
|
|
64
60
|
*
|
|
65
|
-
* @category
|
|
61
|
+
* @category Model
|
|
66
62
|
*/
|
|
67
63
|
export interface Serializable {
|
|
68
64
|
/**
|
|
@@ -71,9 +67,32 @@ export interface Serializable {
|
|
|
71
67
|
*/
|
|
72
68
|
serialize(): string;
|
|
73
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* @summary Interface for objects that can be hashed
|
|
72
|
+
* @interface Hashable
|
|
73
|
+
* @category Model
|
|
74
|
+
*/
|
|
74
75
|
export interface Hashable {
|
|
76
|
+
/**
|
|
77
|
+
* @summary Generates a hash string representation of the object
|
|
78
|
+
* @method
|
|
79
|
+
* @returns {string} Hash value representing the object
|
|
80
|
+
*/
|
|
75
81
|
hash(): string;
|
|
76
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* @summary Interface for objects that can be compared for equality
|
|
85
|
+
* @interface Comparable
|
|
86
|
+
* @template T The type of object to compare against
|
|
87
|
+
* @category Model
|
|
88
|
+
*/
|
|
77
89
|
export interface Comparable<T> {
|
|
90
|
+
/**
|
|
91
|
+
* @summary Compares this object with another for equality
|
|
92
|
+
* @method
|
|
93
|
+
* @param {T} other - The object to compare with
|
|
94
|
+
* @param {...any[]} args - Additional arguments for comparison
|
|
95
|
+
* @returns {boolean} True if the objects are equal, false otherwise
|
|
96
|
+
*/
|
|
78
97
|
equals(other: T, ...args: any[]): boolean;
|
|
79
98
|
}
|
package/lib/model/validation.cjs
CHANGED
|
@@ -17,8 +17,8 @@ const constants_3 = require("../validation/Validators/constants.cjs");
|
|
|
17
17
|
* @prop {string[]} [propsToIgnore] object properties to ignore in the validation
|
|
18
18
|
*
|
|
19
19
|
* @function validate
|
|
20
|
-
* @memberOf module:decorator-validation
|
|
21
|
-
* @category
|
|
20
|
+
* @memberOf module:decorator-validation
|
|
21
|
+
* @category Model
|
|
22
22
|
*/
|
|
23
23
|
function validate(obj, ...propsToIgnore) {
|
|
24
24
|
const decoratedProperties = [];
|
|
@@ -93,7 +93,7 @@ function validate(obj, ...propsToIgnore) {
|
|
|
93
93
|
}
|
|
94
94
|
const validate = (prop, value) => {
|
|
95
95
|
if (typeof value === "object" || typeof value === "function")
|
|
96
|
-
return
|
|
96
|
+
return Model_1.Model.isModel(value)
|
|
97
97
|
? value.hasErrors()
|
|
98
98
|
: allowedTypes.includes(typeof value)
|
|
99
99
|
? undefined
|
|
@@ -136,4 +136,4 @@ function validate(obj, ...propsToIgnore) {
|
|
|
136
136
|
}
|
|
137
137
|
return result ? new ModelErrorDefinition_1.ModelErrorDefinition(result) : undefined;
|
|
138
138
|
}
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC92YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMEJBLDRCQXNLQztBQWhNRCxpRUFBOEQ7QUFDOUQscURBQXFFO0FBQ3JFLGtEQUErQztBQUMvQyw4Q0FBc0M7QUFDdEMsMkNBQTZDO0FBRTdDLG1DQUF5QztBQUN6Qyx5REFBc0Q7QUFDdEQsa0VBQW9FO0FBT3BFOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixRQUFRLENBQ3RCLEdBQU0sRUFDTixHQUFHLGFBQXVCO0lBRTFCLE1BQU0sbUJBQW1CLEdBQTRDLEVBQUUsQ0FBQztJQUN4RSxLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUc7UUFDcEIsSUFDRSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztZQUMvQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVsQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3RCLHVCQUFVLENBQUMscUJBQXFCLENBQzlCLDBCQUFjLENBQUMsT0FBTyxFQUN0QixHQUFHLEVBQ0gsSUFBSSxDQUNvQyxDQUMzQyxDQUFDO0lBRU4sSUFBSSxNQUFNLEdBQTRCLFNBQVMsQ0FBQztJQUVoRCxLQUFLLE1BQU0saUJBQWlCLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUNwRCxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLGlCQUFpQixDQUFDO1FBRS9DLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtZQUFFLFNBQVM7UUFFaEQsTUFBTSxvQkFBb0IsR0FBc0IsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTlELGdMQUFnTDtRQUNoTCxJQUNFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNwQixJ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Q0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FDaEQ7cUNBQ0UsR0FBRyxDQUFDLENBQUMsQ0FBYyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO3FDQUMxQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVEsQ0FBQztnQ0FDbEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQztvQ0FDakIsb0NBQW9DO29DQUNwQyxHQUFHLEdBQUcsU0FBUyxDQUFDO2dDQUNsQixDQUFDOzRCQUNILENBQUM7d0JBQ0gsQ0FBQzt3QkFDRCxNQUFNO29CQUNSO3dCQUNFLElBQUksQ0FBQzs0QkFDSCxJQUFLLEdBQTJCLENBQUMsSUFBSSxDQUFDO2dDQUNwQyxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRyxHQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDN0MsQ0FBQzt3QkFBQyxPQUFPLENBQU0sRUFBRSxDQUFDOzRCQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUEsWUFBRSxFQUFDLDJDQUEyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3BFLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNSLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO2dCQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBVSxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLDJDQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZGVsRXJyb3JEZWZpbml0aW9uIH0gZnJvbSBcIi4vTW9kZWxFcnJvckRlZmluaXRpb25cIjtcbmltcG9ydCB7IERlY29yYXRvck1ldGFkYXRhLCBSZWZsZWN0aW9uIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBNb2RlbEtleXMgfSBmcm9tIFwiLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBzZiB9IGZyb20gXCIuLi91dGlscy9zdHJpbmdzXCI7XG5pbXBvcnQgeyBSZXNlcnZlZE1vZGVscyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgVmFsaWRhdGFibGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgaXNNb2RlbCwgTW9kZWwgfSBmcm9tIFwiLi9Nb2RlbFwiO1xuaW1wb3J0IHsgVmFsaWRhdGlvbiB9IGZyb20gXCIuLi92YWxpZGF0aW9uL1ZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFZhbGlkYXRpb25LZXlzIH0gZnJvbSBcIi4uL3ZhbGlkYXRpb24vVmFsaWRhdG9ycy9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIE1vZGVsRXJyb3JzLFxuICBWYWxpZGF0aW9uUHJvcGVydHlEZWNvcmF0b3JEZWZpbml0aW9uLFxufSBmcm9tIFwiLi4vdmFsaWRhdGlvbi90eXBlc1wiO1xuaW1wb3J0IHsgVmFsaWRhdG9yT3B0aW9ucyB9IGZyb20gXCIuLi92YWxpZGF0aW9uL3R5cGVzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgQW5hbHlzZXMgdGhlIGRlY29yYXRpb25zIG9mIHRoZSBwcm9wZXJ0aWVzIGFuZCB2YWxpZGF0ZXMgdGhlIG9iaiBhY2NvcmRpbmcgdG8gdGhlbVxuICpcbiAqIEB0eXBlZGVmIFQgZXh0ZW5kcyBNb2RlbFxuICogQHByb3Age1R9IG9iaiBNb2RlbCBvYmplY3QgdG8gdmFsaWRhdGVcbiAqIEBwcm9wIHtzdHJpbmdbXX0gW3Byb3BzVG9JZ25vcmVdIG9iamVjdCBwcm9wZXJ0aWVzIHRvIGlnbm9yZSBpbiB0aGUgdmFsaWRhdGlvblxuICpcbiAqIEBmdW5jdGlvbiB2YWxpZGF0ZVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5WYWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGU8VCBleHRlbmRzIE1vZGVsPihcbiAgb2JqOiBULFxuICAuLi5wcm9wc1RvSWdub3JlOiBzdHJpbmdbXVxuKTogTW9kZWxFcnJvckRlZmluaXRpb24gfCB1bmRlZmluZWQge1xuICBjb25zdCBkZWNvcmF0ZWRQcm9wZXJ0aWVzOiBWYWxpZGF0aW9uUHJvcGVydHlEZWNvcmF0b3JEZWZpbml0aW9uW10gPSBbXTtcbiAgZm9yIChjb25zdCBwcm9wIGluIG9iailcbiAgICBpZiAoXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSAmJlxuICAgICAgcHJvcHNUb0lnbm9yZS5pbmRleE9mKHByb3ApID09PSAtMVxuICAgIClcbiAgICAgIGRlY29yYXRlZFByb3BlcnRpZXMucHVzaChcbiAgICAgICAgUmVmbGVjdGlvbi5nZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICAgICAgVmFsaWRhdGlvbktleXMuUkVGTEVDVCxcbiAgICAgICAgICBvYmosXG4gICAgICAgICAgcHJvcFxuICAgICAgICApIGFzIFZhbGlkYXRpb25Qcm9wZXJ0eURlY29yYXRvckRlZmluaXRpb25cbiAgICAgICk7XG5cbiAgbGV0IHJlc3VsdDogTW9kZWxFcnJvcnMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBkZWNvcmF0ZWRQcm9wZXJ0eSBvZiBkZWNvcmF0ZWRQcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgeyBwcm9wLCBkZWNvcmF0b3JzIH0gPSBkZWNvcmF0ZWRQcm9wZXJ0eTtcblxuICAgIGlmICghZGVjb3JhdG9ycyB8fCAhZGVjb3JhdG9ycy5sZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgZGVmYXVsdFR5cGVEZWNvcmF0b3I6IERlY29yYXRvck1ldGFkYXRhID0gZGVjb3JhdG9yc1swXTtcblxuICAgIC8vIHRyaWVzIHRvIGZpbmQgYW55IHR5cGUgZGVjb3JhdG9ycyBvciBvdGhlciBkZWNvcmF0b3JzIHRoYXQgYWxyZWFkeSBlbmZvcmNlIHR5cGUgKHRoZSBvbmVzIHdpdGggdGhlIGFsbG93ZWQgdHlwZXMgcHJvcGVydHkgZGVmaW5lZCkuIGlmIHNvLCBza2lwIHRoZSBkZWZhdWx0IHR5cGUgdmVyaWZpY2F0aW9uXG4gICAgaWYgKFxuICAgICAgZGVjb3JhdG9ycy5maW5kKChkKSA9PiB7XG4gICAgICAgIGlmIChkLmtleSA9PT0gVmFsaWRhdGlvbktleXMuVFlQRSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiAhIWQucHJvcHMudHlwZXM/LmZpbmQoXG4gICAgICAgICAgKHQpID0+IHQgPT09IGRlZmF1bHRUeXBlRGVjb3JhdG9yLnByb3BzLm5hbWVcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKSB7XG4gICAgICBkZWNvcmF0b3JzLnNoaWZ0KCk7IC8vIHJlbW92ZSB0aGUgZGVzaWduOnR5cGUgZGVjb3JhdG9yLCBzaW5jZSB0aGUgdHlwZSB3aWxsIGFscmVhZHkgYmUgY2hlY2tlZFxuICAgIH1cblxuICAgIGxldCBlcnJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgZm9yIChjb25zdCBkZWNvcmF0b3Igb2YgZGVjb3JhdG9ycykge1xuICAgICAgY29uc3QgdmFsaWRhdG9yID0gVmFsaWRhdGlvbi5nZXQoZGVjb3JhdG9yLmtleSk7XG4gICAgICBpZiAoIXZhbGlkYXRvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgdmFsaWRhdG9yIGZvciAke2RlY29yYXRvci5rZXl9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlY29yYXRvclByb3BzID1cbiAgICAgICAgZGVjb3JhdG9yLmtleSA9PT0gTW9kZWxLZXlzLlRZUEVcbiAgICAgICAgICA/IFtkZWNvcmF0b3IucHJvcHNdXG4gICAgICAgICAgOiBkZWNvcmF0b3IucHJvcHMgfHwge307XG5cbiAgICAgIGNvbnN0IGVycjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdmFsaWRhdG9yLmhhc0Vycm9ycyhcbiAgICAgICAgKG9iaiBhcyBhbnkpW3Byb3AudG9TdHJpbmcoKV0sXG4gICAgICAgIGRlY29yYXRvclByb3BzIGFzIFZhbGlkYXRvck9wdGlvbnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZXJycyA9IGVycnMgfHwge307XG4gICAgICAgIGVycnNbZGVjb3JhdG9yLmtleV0gPSBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycnMpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdFtkZWNvcmF0ZWRQcm9wZXJ0eS5wcm9wLnRvU3RyaW5nKCldID0gZXJycztcbiAgICB9XG4gIH1cblxuICAvLyB0ZXN0cyBuZXN0ZWQgY2xhc3Nlc1xuICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMob2JqKS5maWx0ZXIoKGspID0+ICFyZXN1bHQgfHwgIXJlc3VsdFtrXSkpIHtcbiAgICBsZXQgZXJyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLy8gaWYgYSBuZXN0ZWQgTW9kZWxcbiAgICBjb25zdCBhbGxEZWNvcmF0b3JzID0gUmVmbGVjdGlvbi5nZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICBWYWxpZGF0aW9uS2V5cy5SRUZMRUNULFxuICAgICAgb2JqLFxuICAgICAgcHJvcFxuICAgICkuZGVjb3JhdG9ycztcbiAgICBjb25zdCBkZWNvcmF0b3JzID0gUmVmbGVjdGlvbi5nZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICBWYWxpZGF0aW9uS2V5cy5SRUZMRUNULFxuICAgICAgb2JqLFxuICAgICAgcHJvcFxuICAgICkuZGVjb3JhdG9ycy5maWx0ZXIoXG4gICAgICAoZDogeyBrZXk6IHN0cmluZyB9KSA9PlxuICAgICAgICBbTW9kZWxLZXlzLlRZUEUsIFZhbGlkYXRpb25LZXlzLlRZUEUgYXMgc3RyaW5nXS5pbmRleE9mKGQua2V5KSAhPT0gLTFcbiAgICApO1xuICAgIGlmICghZGVjb3JhdG9ycyB8fCAhZGVjb3JhdG9ycy5sZW5ndGgpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGRlYyA9IGRlY29yYXRvcnMucG9wKCkgYXMgRGVjb3JhdG9yTWV0YWRhdGE7XG4gICAgY29uc3QgY2xhenogPSBkZWMucHJvcHMubmFtZVxuICAgICAgPyBbZGVjLnByb3BzLm5hbWVdXG4gICAgICA6IEFycmF5LmlzQXJyYXkoZGVjLnByb3BzLmN1c3RvbVR5cGVzKVxuICAgICAgICA/IGRlYy5wcm9wcy5jdXN0b21UeXBlc1xuICAgICAgICA6IFtkZWMucHJvcHMuY3VzdG9tVHlwZXNdO1xuICAgIGNvbnN0IHJlc2VydmVkID0gT2JqZWN0LnZhbHVlcyhSZXNlcnZlZE1vZGVscykubWFwKCh2KSA9PlxuICAgICAgdi50b0xvd2VyQ2FzZSgpXG4gICAgKSBhcyBzdHJpbmdbXTtcblxuICAgIGZvciAoY29uc3QgYyBvZiBjbGF6eikge1xuICAgICAgaWYgKHJlc2VydmVkLmluZGV4T2YoYy50b0xvd2VyQ2FzZSgpKSA9PT0gLTEpIHtcbiAgICAgICAgY29uc3QgdHlwZURlY29yYXRvcktleSA9IEFycmF5LmlzQXJyYXkoKG9iaiBhcyBhbnkpW3Byb3BdKVxuICAgICAgICAgID8gVmFsaWRhdGlvbktleXMuTElTVFxuICAgICAgICAgIDogVmFsaWRhdGlvbktleXMuVFlQRTtcbiAgICAgICAgY29uc3QgdHlwZXM6IGFueSA9XG4gICAgICAgICAgYWxsRGVjb3JhdG9ycy5maW5kKFxuICAgICAgICAgICAgKGQ6IHsga2V5OiBzdHJpbmcgfSkgPT4gZC5rZXkgPT09IHR5cGVEZWNvcmF0b3JLZXlcbiAgICAgICAgICApIHx8IHt9O1xuICAgICAgICBsZXQgYWxsb3dlZFR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBpZiAodHlwZXMgJiYgdHlwZXMucHJvcHMpIHtcbiAgICAgICAgICBjb25zdCBjdXN0b21UeXBlcyA9IEFycmF5LmlzQXJyYXkoKG9iaiBhcyBhbnkpW3Byb3BdKVxuICAgICAgICAgICAgPyB0eXBlcy5wcm9wcy5jbGFzc1xuICAgICAgICAgICAgOiB0eXBlcy5wcm9wcy5jdXN0b21UeXBlcztcbiAgICAgICAgICBpZiAoY3VzdG9tVHlwZXMpXG4gICAgICAgICAgICBhbGxvd2VkVHlwZXMgPSBBcnJheS5pc0FycmF5KGN1c3RvbVR5cGVzKVxuICAgICAgICAgICAgICA/IGN1c3RvbVR5cGVzLm1hcCgodCkgPT4gYCR7dH1gLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICAgIDogW2N1c3RvbVR5cGVzLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsaWRhdGUgPSAocHJvcDogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55ID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgcmV0dXJuIGlzTW9kZWwodmFsdWUpXG4gICAgICAgICAgICAgID8gKHZhbHVlIGFzIE1vZGVsKS5oYXNFcnJvcnMoKVxuICAgICAgICAgICAgICA6IGFsbG93ZWRUeXBlcy5pbmNsdWRlcyh0eXBlb2YgdmFsdWUpXG4gICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA6IFwiVmFsdWUgaGFzIG5vIHZhbGlkYXRhYmxlIHR5cGVcIjtcbiAgICAgICAgfTtcblxuICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICBjYXNlIEFycmF5Lm5hbWU6XG4gICAgICAgICAgY2FzZSBTZXQubmFtZTpcbiAgICAgICAgICAgIGlmIChhbGxEZWNvcmF0b3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb25zdCBsaXN0RGVjID0gYWxsRGVjb3JhdG9ycy5maW5kKFxuICAgICAgICAgICAgICAgIChkOiB7IGtleTogc3RyaW5nIH0pID0+IGQua2V5ID09PSBWYWxpZGF0aW9uS2V5cy5MSVNUXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChsaXN0RGVjKSB7XG4gICAgICAgICAgICAgICAgZXJyID0gKFxuICAgICAgICAgICAgICAgICAgYyA9PT0gQXJyYXkubmFtZVxuICAgICAgICAgICAgICAgICAgICA/IChvYmogYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF1cbiAgICAgICAgICAgICAgICAgICAgOiAvLyBJZiBpdCdzIGEgU2V0XG4gICAgICAgICAgICAgICAgICAgICAgKG9iaiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXS52YWx1ZXMoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIC5tYXAoKHY6IFZhbGlkYXRhYmxlKSA9PiB2YWxpZGF0ZShwcm9wLCB2KSlcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGU6IGFueSkgPT4gISFlKSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnI/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHJlc3VsdCBpcyBhbiBlbXB0eSBsaXN0Li4uXG4gICAgICAgICAgICAgICAgICBlcnIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKChvYmogYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0pXG4gICAgICAgICAgICAgICAgZXJyID0gdmFsaWRhdGUocHJvcCwgKG9iaiBhcyBhbnkpW3Byb3BdKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oc2YoXCJNb2RlbCBzaG91bGQgYmUgdmFsaWRhdGFibGUgYnV0IGl0cyBub3Q6IFwiICsgZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgICAgcmVzdWx0W3Byb3BdID0gZXJyIGFzIGFueTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0ID8gbmV3IE1vZGVsRXJyb3JEZWZpbml0aW9uKHJlc3VsdCkgOiB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC92YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMEJBLDRCQXNLQztBQWhNRCxpRUFBOEQ7QUFDOUQscURBQXFFO0FBQ3JFLGtEQUErQztBQUMvQyw4Q0FBc0M7QUFDdEMsMkNBQTZDO0FBRTdDLG1DQUFnQztBQUNoQyx5REFBc0Q7QUFDdEQsa0VBQW9FO0FBT3BFOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixRQUFRLENBQ3RCLEdBQU0sRUFDTixHQUFHLGFBQXVCO0lBRTFCLE1BQU0sbUJBQW1CLEdBQTRDLEVBQUUsQ0FBQztJQUN4RSxLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUc7UUFDcEIsSUFDRSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztZQUMvQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVsQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3RCLHVCQUFVLENBQUMscUJBQXFCLENBQzlCLDBCQUFjLENBQUMsT0FBTyxFQUN0QixHQUFHLEVBQ0gsSUFBSSxDQUNvQyxDQUMzQyxDQUFDO0lBRU4sSUFBSSxNQUFNLEdBQTRCLFNBQVMsQ0FBQztJQUVoRCxLQUFLLE1BQU0saUJBQWlCLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUNwRCxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLGlCQUFpQixDQUFDO1FBRS9DLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtZQUFFLFNBQVM7UUFFaEQsTUFBTSxvQkFBb0IsR0FBc0IsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTlELGdMQUFnTDtRQUNoTCxJQUNFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNwQixJ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QUEyQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUNoRDtxQ0FDRSxHQUFHLENBQUMsQ0FBQyxDQUFjLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUNBQzFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBUSxDQUFDO2dDQUNsQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDO29DQUNqQixvQ0FBb0M7b0NBQ3BDLEdBQUcsR0FBRyxTQUFTLENBQUM7Z0NBQ2xCLENBQUM7NEJBQ0gsQ0FBQzt3QkFDSCxDQUFDO3dCQUNELE1BQU07b0JBQ1I7d0JBQ0UsSUFBSSxDQUFDOzRCQUNILElBQUssR0FBMkIsQ0FBQyxJQUFJLENBQUM7Z0NBQ3BDLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFHLEdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUM3QyxDQUFDO3dCQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7NEJBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBQSxZQUFFLEVBQUMsMkNBQTJDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDcEUsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFVLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksMkNBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUMvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxFcnJvckRlZmluaXRpb24gfSBmcm9tIFwiLi9Nb2RlbEVycm9yRGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgRGVjb3JhdG9yTWV0YWRhdGEsIFJlZmxlY3Rpb24gfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IE1vZGVsS2V5cyB9IGZyb20gXCIuLi91dGlscy9jb25zdGFudHNcIjtcbmltcG9ydCB7IHNmIH0gZnJvbSBcIi4uL3V0aWxzL3N0cmluZ3NcIjtcbmltcG9ydCB7IFJlc2VydmVkTW9kZWxzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBWYWxpZGF0YWJsZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuL01vZGVsXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uIH0gZnJvbSBcIi4uL3ZhbGlkYXRpb24vVmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgVmFsaWRhdGlvbktleXMgfSBmcm9tIFwiLi4vdmFsaWRhdGlvbi9WYWxpZGF0b3JzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgTW9kZWxFcnJvcnMsXG4gIFZhbGlkYXRpb25Qcm9wZXJ0eURlY29yYXRvckRlZmluaXRpb24sXG59IGZyb20gXCIuLi92YWxpZGF0aW9uL3R5cGVzXCI7XG5pbXBvcnQgeyBWYWxpZGF0b3JPcHRpb25zIH0gZnJvbSBcIi4uL3ZhbGlkYXRpb24vdHlwZXNcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBBbmFseXNlcyB0aGUgZGVjb3JhdGlvbnMgb2YgdGhlIHByb3BlcnRpZXMgYW5kIHZhbGlkYXRlcyB0aGUgb2JqIGFjY29yZGluZyB0byB0aGVtXG4gKlxuICogQHR5cGVkZWYgVCBleHRlbmRzIE1vZGVsXG4gKiBAcHJvcCB7VH0gb2JqIE1vZGVsIG9iamVjdCB0byB2YWxpZGF0ZVxuICogQHByb3Age3N0cmluZ1tdfSBbcHJvcHNUb0lnbm9yZV0gb2JqZWN0IHByb3BlcnRpZXMgdG8gaWdub3JlIGluIHRoZSB2YWxpZGF0aW9uXG4gKlxuICogQGZ1bmN0aW9uIHZhbGlkYXRlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlPFQgZXh0ZW5kcyBNb2RlbD4oXG4gIG9iajogVCxcbiAgLi4ucHJvcHNUb0lnbm9yZTogc3RyaW5nW11cbik6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGVjb3JhdGVkUHJvcGVydGllczogVmFsaWRhdGlvblByb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbltdID0gW107XG4gIGZvciAoY29uc3QgcHJvcCBpbiBvYmopXG4gICAgaWYgKFxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkgJiZcbiAgICAgIHByb3BzVG9JZ25vcmUuaW5kZXhPZihwcm9wKSA9PT0gLTFcbiAgICApXG4gICAgICBkZWNvcmF0ZWRQcm9wZXJ0aWVzLnB1c2goXG4gICAgICAgIFJlZmxlY3Rpb24uZ2V0UHJvcGVydHlEZWNvcmF0b3JzKFxuICAgICAgICAgIFZhbGlkYXRpb25LZXlzLlJFRkxFQ1QsXG4gICAgICAgICAgb2JqLFxuICAgICAgICAgIHByb3BcbiAgICAgICAgKSBhcyBWYWxpZGF0aW9uUHJvcGVydHlEZWNvcmF0b3JEZWZpbml0aW9uXG4gICAgICApO1xuXG4gIGxldCByZXN1bHQ6IE1vZGVsRXJyb3JzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIGZvciAoY29uc3QgZGVjb3JhdGVkUHJvcGVydHkgb2YgZGVjb3JhdGVkUHJvcGVydGllcykge1xuICAgIGNvbnN0IHsgcHJvcCwgZGVjb3JhdG9ycyB9ID0gZGVjb3JhdGVkUHJvcGVydHk7XG5cbiAgICBpZiAoIWRlY29yYXRvcnMgfHwgIWRlY29yYXRvcnMubGVuZ3RoKSBjb250aW51ZTtcblxuICAgIGNvbnN0IGRlZmF1bHRUeXBlRGVjb3JhdG9yOiBEZWNvcmF0b3JNZXRhZGF0YSA9IGRlY29yYXRvcnNbMF07XG5cbiAgICAvLyB0cmllcyB0byBmaW5kIGFueSB0eXBlIGRlY29yYXRvcnMgb3Igb3RoZXIgZGVjb3JhdG9ycyB0aGF0IGFscmVhZHkgZW5mb3JjZSB0eXBlICh0aGUgb25lcyB3aXRoIHRoZSBhbGxvd2VkIHR5cGVzIHByb3BlcnR5IGRlZmluZWQpLiBpZiBzbywgc2tpcCB0aGUgZGVmYXVsdCB0eXBlIHZlcmlmaWNhdGlvblxuICAgIGlmIChcbiAgICAgIGRlY29yYXRvcnMuZmluZCgoZCkgPT4ge1xuICAgICAgICBpZiAoZC5rZXkgPT09IFZhbGlkYXRpb25LZXlzLlRZUEUpIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gISFkLnByb3BzLnR5cGVzPy5maW5kKFxuICAgICAgICAgICh0KSA9PiB0ID09PSBkZWZhdWx0VHlwZURlY29yYXRvci5wcm9wcy5uYW1lXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICkge1xuICAgICAgZGVjb3JhdG9ycy5zaGlmdCgpOyAvLyByZW1vdmUgdGhlIGRlc2lnbjp0eXBlIGRlY29yYXRvciwgc2luY2UgdGhlIHR5cGUgd2lsbCBhbHJlYWR5IGJlIGNoZWNrZWRcbiAgICB9XG5cbiAgICBsZXQgZXJyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGZvciAoY29uc3QgZGVjb3JhdG9yIG9mIGRlY29yYXRvcnMpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRvciA9IFZhbGlkYXRpb24uZ2V0KGRlY29yYXRvci5rZXkpO1xuICAgICAgaWYgKCF2YWxpZGF0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHZhbGlkYXRvciBmb3IgJHtkZWNvcmF0b3Iua2V5fWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWNvcmF0b3JQcm9wcyA9XG4gICAgICAgIGRlY29yYXRvci5rZXkgPT09IE1vZGVsS2V5cy5UWVBFXG4gICAgICAgICAgPyBbZGVjb3JhdG9yLnByb3BzXVxuICAgICAgICAgIDogZGVjb3JhdG9yLnByb3BzIHx8IHt9O1xuXG4gICAgICBjb25zdCBlcnI6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHZhbGlkYXRvci5oYXNFcnJvcnMoXG4gICAgICAgIChvYmogYXMgYW55KVtwcm9wLnRvU3RyaW5nKCldLFxuICAgICAgICBkZWNvcmF0b3JQcm9wcyBhcyBWYWxpZGF0b3JPcHRpb25zXG4gICAgICApO1xuXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGVycnMgPSBlcnJzIHx8IHt9O1xuICAgICAgICBlcnJzW2RlY29yYXRvci5rZXldID0gZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlcnJzKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHRbZGVjb3JhdGVkUHJvcGVydHkucHJvcC50b1N0cmluZygpXSA9IGVycnM7XG4gICAgfVxuICB9XG5cbiAgLy8gdGVzdHMgbmVzdGVkIGNsYXNzZXNcbiAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5rZXlzKG9iaikuZmlsdGVyKChrKSA9PiAhcmVzdWx0IHx8ICFyZXN1bHRba10pKSB7XG4gICAgbGV0IGVycjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8vIGlmIGEgbmVzdGVkIE1vZGVsXG4gICAgY29uc3QgYWxsRGVjb3JhdG9ycyA9IFJlZmxlY3Rpb24uZ2V0UHJvcGVydHlEZWNvcmF0b3JzKFxuICAgICAgVmFsaWRhdGlvbktleXMuUkVGTEVDVCxcbiAgICAgIG9iaixcbiAgICAgIHByb3BcbiAgICApLmRlY29yYXRvcnM7XG4gICAgY29uc3QgZGVjb3JhdG9ycyA9IFJlZmxlY3Rpb24uZ2V0UHJvcGVydHlEZWNvcmF0b3JzKFxuICAgICAgVmFsaWRhdGlvbktleXMuUkVGTEVDVCxcbiAgICAgIG9iaixcbiAgICAgIHByb3BcbiAgICApLmRlY29yYXRvcnMuZmlsdGVyKFxuICAgICAgKGQ6IHsga2V5OiBzdHJpbmcgfSkgPT5cbiAgICAgICAgW01vZGVsS2V5cy5UWVBFLCBWYWxpZGF0aW9uS2V5cy5UWVBFIGFzIHN0cmluZ10uaW5kZXhPZihkLmtleSkgIT09IC0xXG4gICAgKTtcbiAgICBpZiAoIWRlY29yYXRvcnMgfHwgIWRlY29yYXRvcnMubGVuZ3RoKSBjb250aW51ZTtcbiAgICBjb25zdCBkZWMgPSBkZWNvcmF0b3JzLnBvcCgpIGFzIERlY29yYXRvck1ldGFkYXRhO1xuICAgIGNvbnN0IGNsYXp6ID0gZGVjLnByb3BzLm5hbWVcbiAgICAgID8gW2RlYy5wcm9wcy5uYW1lXVxuICAgICAgOiBBcnJheS5pc0FycmF5KGRlYy5wcm9wcy5jdXN0b21UeXBlcylcbiAgICAgICAgPyBkZWMucHJvcHMuY3VzdG9tVHlwZXNcbiAgICAgICAgOiBbZGVjLnByb3BzLmN1c3RvbVR5cGVzXTtcbiAgICBjb25zdCByZXNlcnZlZCA9IE9iamVjdC52YWx1ZXMoUmVzZXJ2ZWRNb2RlbHMpLm1hcCgodikgPT5cbiAgICAgIHYudG9Mb3dlckNhc2UoKVxuICAgICkgYXMgc3RyaW5nW107XG5cbiAgICBmb3IgKGNvbnN0IGMgb2YgY2xhenopIHtcbiAgICAgIGlmIChyZXNlcnZlZC5pbmRleE9mKGMudG9Mb3dlckNhc2UoKSkgPT09IC0xKSB7XG4gICAgICAgIGNvbnN0IHR5cGVEZWNvcmF0b3JLZXkgPSBBcnJheS5pc0FycmF5KChvYmogYXMgYW55KVtwcm9wXSlcbiAgICAgICAgICA/IFZhbGlkYXRpb25LZXlzLkxJU1RcbiAgICAgICAgICA6IFZhbGlkYXRpb25LZXlzLlRZUEU7XG4gICAgICAgIGNvbnN0IHR5cGVzOiBhbnkgPVxuICAgICAgICAgIGFsbERlY29yYXRvcnMuZmluZChcbiAgICAgICAgICAgIChkOiB7IGtleTogc3RyaW5nIH0pID0+IGQua2V5ID09PSB0eXBlRGVjb3JhdG9yS2V5XG4gICAgICAgICAgKSB8fCB7fTtcbiAgICAgICAgbGV0IGFsbG93ZWRUeXBlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKHR5cGVzICYmIHR5cGVzLnByb3BzKSB7XG4gICAgICAgICAgY29uc3QgY3VzdG9tVHlwZXMgPSBBcnJheS5pc0FycmF5KChvYmogYXMgYW55KVtwcm9wXSlcbiAgICAgICAgICAgID8gdHlwZXMucHJvcHMuY2xhc3NcbiAgICAgICAgICAgIDogdHlwZXMucHJvcHMuY3VzdG9tVHlwZXM7XG4gICAgICAgICAgaWYgKGN1c3RvbVR5cGVzKVxuICAgICAgICAgICAgYWxsb3dlZFR5cGVzID0gQXJyYXkuaXNBcnJheShjdXN0b21UeXBlcylcbiAgICAgICAgICAgICAgPyBjdXN0b21UeXBlcy5tYXAoKHQpID0+IGAke3R9YC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICA6IFtjdXN0b21UeXBlcy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlID0gKHByb3A6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIHJldHVybiBNb2RlbC5pc01vZGVsKHZhbHVlKVxuICAgICAgICAgICAgICA/ICh2YWx1ZSBhcyBNb2RlbCkuaGFzRXJyb3JzKClcbiAgICAgICAgICAgICAgOiBhbGxvd2VkVHlwZXMuaW5jbHVkZXModHlwZW9mIHZhbHVlKVxuICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgOiBcIlZhbHVlIGhhcyBubyB2YWxpZGF0YWJsZSB0eXBlXCI7XG4gICAgICAgIH07XG5cbiAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgICAgY2FzZSBBcnJheS5uYW1lOlxuICAgICAgICAgIGNhc2UgU2V0Lm5hbWU6XG4gICAgICAgICAgICBpZiAoYWxsRGVjb3JhdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgY29uc3QgbGlzdERlYyA9IGFsbERlY29yYXRvcnMuZmluZChcbiAgICAgICAgICAgICAgICAoZDogeyBrZXk6IHN0cmluZyB9KSA9PiBkLmtleSA9PT0gVmFsaWRhdGlvbktleXMuTElTVFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAobGlzdERlYykge1xuICAgICAgICAgICAgICAgIGVyciA9IChcbiAgICAgICAgICAgICAgICAgIGMgPT09IEFycmF5Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgPyAob2JqIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdXG4gICAgICAgICAgICAgICAgICAgIDogLy8gSWYgaXQncyBhIFNldFxuICAgICAgICAgICAgICAgICAgICAgIChvYmogYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0udmFsdWVzKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAubWFwKCh2OiBWYWxpZGF0YWJsZSkgPT4gdmFsaWRhdGUocHJvcCwgdikpXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChlOiBhbnkpID0+ICEhZSkgYXMgYW55O1xuICAgICAgICAgICAgICAgIGlmICghZXJyPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSByZXN1bHQgaXMgYW4gZW1wdHkgbGlzdC4uLlxuICAgICAgICAgICAgICAgICAgZXJyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmICgob2JqIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdKVxuICAgICAgICAgICAgICAgIGVyciA9IHZhbGlkYXRlKHByb3AsIChvYmogYXMgYW55KVtwcm9wXSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKHNmKFwiTW9kZWwgc2hvdWxkIGJlIHZhbGlkYXRhYmxlIGJ1dCBpdHMgbm90OiBcIiArIGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICAgIHJlc3VsdFtwcm9wXSA9IGVyciBhcyBhbnk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCA/IG5ldyBNb2RlbEVycm9yRGVmaW5pdGlvbihyZXN1bHQpIDogdW5kZWZpbmVkO1xufVxuIl19
|
|
@@ -8,7 +8,7 @@ import { Model } from "./Model";
|
|
|
8
8
|
* @prop {string[]} [propsToIgnore] object properties to ignore in the validation
|
|
9
9
|
*
|
|
10
10
|
* @function validate
|
|
11
|
-
* @memberOf module:decorator-validation
|
|
12
|
-
* @category
|
|
11
|
+
* @memberOf module:decorator-validation
|
|
12
|
+
* @category Model
|
|
13
13
|
*/
|
|
14
14
|
export declare function validate<T extends Model>(obj: T, ...propsToIgnore: string[]): ModelErrorDefinition | undefined;
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Decoration = void 0;
|
|
4
|
+
const constants_1 = require("./constants.cjs");
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
6
|
+
function defaultFlavourResolver(target) {
|
|
7
|
+
return constants_1.DefaultFlavour;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* @description A decorator management class that handles flavoured decorators
|
|
11
|
+
* @summary The Decoration class provides a builder pattern for creating and managing decorators with different flavours.
|
|
12
|
+
* It supports registering, extending, and applying decorators with context-aware flavour resolution.
|
|
13
|
+
* The class implements a fluent interface for defining, extending, and applying decorators with different flavours,
|
|
14
|
+
* allowing for framework-specific decorator implementations while maintaining a consistent API.
|
|
15
|
+
* @template T Type of the decorator (ClassDecorator | PropertyDecorator | MethodDecorator)
|
|
16
|
+
* @param {string} [flavour] Optional flavour parameter for the decorator context
|
|
17
|
+
* @class
|
|
18
|
+
* @category Model
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* // Create a new decoration for 'component' with default flavour
|
|
22
|
+
* const componentDecorator = new Decoration()
|
|
23
|
+
* .for('component')
|
|
24
|
+
* .define(customComponentDecorator);
|
|
25
|
+
*
|
|
26
|
+
* // Create a flavoured decoration
|
|
27
|
+
* const vueComponent = new Decoration('vue')
|
|
28
|
+
* .for('component')
|
|
29
|
+
* .define(vueComponentDecorator);
|
|
30
|
+
*
|
|
31
|
+
* // Apply the decoration
|
|
32
|
+
* @componentDecorator
|
|
33
|
+
* class MyComponent {}
|
|
34
|
+
* ```
|
|
35
|
+
* @mermaid
|
|
36
|
+
* sequenceDiagram
|
|
37
|
+
* participant C as Client
|
|
38
|
+
* participant D as Decoration
|
|
39
|
+
* participant R as FlavourResolver
|
|
40
|
+
* participant F as DecoratorFactory
|
|
41
|
+
*
|
|
42
|
+
* C->>D: new Decoration(flavour)
|
|
43
|
+
* C->>D: for(key)
|
|
44
|
+
* C->>D: define(decorators)
|
|
45
|
+
* D->>D: register(key, flavour, decorators)
|
|
46
|
+
* D->>F: decoratorFactory(key, flavour)
|
|
47
|
+
* F->>R: resolve(target)
|
|
48
|
+
* R-->>F: resolved flavour
|
|
49
|
+
* F->>F: apply decorators
|
|
50
|
+
* F-->>C: decorated target
|
|
51
|
+
*/
|
|
52
|
+
class Decoration {
|
|
53
|
+
/**
|
|
54
|
+
* @description Static map of registered decorators
|
|
55
|
+
* @summary Stores all registered decorators organized by key and flavour
|
|
56
|
+
*/
|
|
57
|
+
static { this.decorators = {}; }
|
|
58
|
+
/**
|
|
59
|
+
* @description Function to resolve flavour from a target
|
|
60
|
+
* @summary Resolver function that determines the appropriate flavour for a given target
|
|
61
|
+
*/
|
|
62
|
+
static { this.flavourResolver = defaultFlavourResolver; }
|
|
63
|
+
constructor(flavour = constants_1.DefaultFlavour) {
|
|
64
|
+
this.flavour = flavour;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* @description Sets the key for the decoration builder
|
|
68
|
+
* @summary Initializes a new decoration chain with the specified key
|
|
69
|
+
* @param {string} key The identifier for the decorator
|
|
70
|
+
* @return {DecorationBuilderMid} Builder instance for method chaining
|
|
71
|
+
*/
|
|
72
|
+
for(key) {
|
|
73
|
+
this.key = key;
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* @description Adds decorators to the current context
|
|
78
|
+
* @summary Internal method to add decorators with addon support
|
|
79
|
+
* @param {boolean} [addon=false] Whether the decorators are addons
|
|
80
|
+
* @param decorators Array of decorators
|
|
81
|
+
* @return {this} Current instance for chaining
|
|
82
|
+
*/
|
|
83
|
+
decorate(addon = false, ...decorators) {
|
|
84
|
+
if (!this.key)
|
|
85
|
+
throw new Error("key must be provided before decorators can be added");
|
|
86
|
+
if (!addon && !this.decorators && this.flavour !== constants_1.DefaultFlavour)
|
|
87
|
+
throw new Error("Must provide overrides or addons to override or extend decaf's decorators");
|
|
88
|
+
if (this.flavour === constants_1.DefaultFlavour && addon)
|
|
89
|
+
throw new Error("Default flavour cannot be extended");
|
|
90
|
+
this[addon ? "extras" : "decorators"] = new Set([
|
|
91
|
+
...(this[addon ? "extras" : "decorators"] || new Set()).values(),
|
|
92
|
+
...decorators,
|
|
93
|
+
]);
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* @description Defines the base decorators
|
|
98
|
+
* @summary Sets the primary decorators for the current context
|
|
99
|
+
* @param decorators Decorators to define
|
|
100
|
+
* @return Builder instance for finishing the chain
|
|
101
|
+
*/
|
|
102
|
+
define(...decorators) {
|
|
103
|
+
return this.decorate(false, ...decorators);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* @description Extends existing decorators
|
|
107
|
+
* @summary Adds additional decorators to the current context
|
|
108
|
+
* @param decorators Additional decorators
|
|
109
|
+
* @return {DecorationBuilderBuild} Builder instance for building the decorator
|
|
110
|
+
*/
|
|
111
|
+
extend(...decorators) {
|
|
112
|
+
return this.decorate(true, ...decorators);
|
|
113
|
+
}
|
|
114
|
+
decoratorFactory(key, f = constants_1.DefaultFlavour) {
|
|
115
|
+
const contextDecorator = function contextDecorator(target, propertyKey, descriptor) {
|
|
116
|
+
const flavour = Decoration.flavourResolver(target);
|
|
117
|
+
let decorators;
|
|
118
|
+
const extras = Decoration.decorators[key][flavour].extras;
|
|
119
|
+
if (Decoration.decorators[key] &&
|
|
120
|
+
Decoration.decorators[key][flavour] &&
|
|
121
|
+
Decoration.decorators[key][flavour].decorators) {
|
|
122
|
+
decorators = Decoration.decorators[key][flavour].decorators;
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
decorators = Decoration.decorators[key][constants_1.DefaultFlavour].decorators;
|
|
126
|
+
}
|
|
127
|
+
[
|
|
128
|
+
...(decorators ? decorators.values() : []),
|
|
129
|
+
...(extras ? extras.values() : []),
|
|
130
|
+
].forEach((d) => d(target, propertyKey, descriptor, descriptor));
|
|
131
|
+
// return apply(
|
|
132
|
+
//
|
|
133
|
+
// )(target, propertyKey, descriptor);
|
|
134
|
+
};
|
|
135
|
+
Object.defineProperty(contextDecorator, "name", {
|
|
136
|
+
value: [f, key].join("_decorator_for_"),
|
|
137
|
+
writable: false,
|
|
138
|
+
});
|
|
139
|
+
return contextDecorator;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* @description Creates the final decorator function
|
|
143
|
+
* @summary Builds and returns the decorator factory function
|
|
144
|
+
* @return {function(object, any?, TypedPropertyDescriptor?): any} The generated decorator function
|
|
145
|
+
*/
|
|
146
|
+
apply() {
|
|
147
|
+
if (!this.key)
|
|
148
|
+
throw new Error("No key provided for the decoration builder");
|
|
149
|
+
Decoration.register(this.key, this.flavour, this.decorators, this.extras);
|
|
150
|
+
return this.decoratorFactory(this.key, this.flavour);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* @description Registers decorators for a specific key and flavour
|
|
154
|
+
* @summary Internal method to store decorators in the static registry
|
|
155
|
+
* @param {string} key Decorator key
|
|
156
|
+
* @param {string} flavour Decorator flavour
|
|
157
|
+
* @param [decorators] Primary decorators
|
|
158
|
+
* @param [extras] Additional decorators
|
|
159
|
+
*/
|
|
160
|
+
static register(key, flavour, decorators, extras) {
|
|
161
|
+
if (!key)
|
|
162
|
+
throw new Error("No key provided for the decoration builder");
|
|
163
|
+
if (!decorators)
|
|
164
|
+
throw new Error("No decorators provided for the decoration builder");
|
|
165
|
+
if (!flavour)
|
|
166
|
+
throw new Error("No flavour provided for the decoration builder");
|
|
167
|
+
if (!Decoration.decorators[key])
|
|
168
|
+
Decoration.decorators[key] = {};
|
|
169
|
+
if (!Decoration.decorators[key][flavour])
|
|
170
|
+
Decoration.decorators[key][flavour] = {};
|
|
171
|
+
if (decorators)
|
|
172
|
+
Decoration.decorators[key][flavour].decorators = decorators;
|
|
173
|
+
if (extras)
|
|
174
|
+
Decoration.decorators[key][flavour].extras = extras;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* @description Sets the global flavour resolver
|
|
178
|
+
* @summary Configures the function used to determine decorator flavours
|
|
179
|
+
* @param {FlavourResolver} resolver Function to resolve flavours
|
|
180
|
+
*/
|
|
181
|
+
static setFlavourResolver(resolver) {
|
|
182
|
+
Decoration.flavourResolver = resolver;
|
|
183
|
+
}
|
|
184
|
+
static for(key) {
|
|
185
|
+
return new Decoration().for(key);
|
|
186
|
+
}
|
|
187
|
+
static flavouredAs(flavour) {
|
|
188
|
+
return new Decoration(flavour);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
exports.Decoration = Decoration;
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVjb3JhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9EZWNvcmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBLDJDQUE2QztBQUU3Qyw2REFBNkQ7QUFDN0QsU0FBUyxzQkFBc0IsQ0FBQyxNQUFjO0lBQzVDLE9BQU8sMEJBQWMsQ0FBQztBQUN4QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBDRztBQUNILE1BQWEsVUFBVTtJQUNyQjs7O09BR0c7YUFDWSxlQUFVLEdBU3JCLEVBQUUsQ0FBQztJQUVQOzs7T0FHRzthQUNZLG9CQUFlLEdBQW9CLHNCQUFzQixDQUFDO0lBbUJ6RSxZQUFvQixVQUFrQiwwQkFBYztRQUFoQyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtJQUFHLENBQUM7SUFFeEQ7Ozs7O09BS0c7SUFDSCxHQUFHLENBQUMsR0FBVztRQUNiLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssUUFBUSxDQUNkLFFBQWlCLEtBQUssRUFDdEIsR0FBRyxVQUFvRTtRQUV2RSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUc7WUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSywwQkFBYztZQUMvRCxNQUFNLElBQUksS0FBSyxDQUNiLDJFQUEyRSxDQUM1RSxDQUFDO1FBQ0osSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLDBCQUFjLElBQUksS0FBSztZQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFFeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUM5QyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQ2hFLEdBQUcsVUFBVTtTQUNkLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUNKLEdBQUcsVUFBb0U7UUFFdkUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FDSixHQUFHLFVBQW9FO1FBRXZFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRVMsZ0JBQWdCLENBQUMsR0FBVyxFQUFFLElBQVksMEJBQWM7UUFDaEUsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLGdCQUFnQixDQUNoRCxNQUFjLEVBQ2QsV0FBaUIsRUFDakIsVUFBeUM7WUFFekMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuRCxJQUFJLFVBQVUsQ0FBQztZQUNmLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzFELElBQ0UsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7Z0JBQzFCLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUNuQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFDOUMsQ0FBQztnQkFDRCxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFDOUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLDBCQUFjLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFDckUsQ0FBQztZQUNEO2dCQUNFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNuQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBUyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDMUUsZ0JBQWdCO1lBQ2hCLEVBQUU7WUFDRixzQ0FBc0M7UUFDeEMsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUU7WUFDOUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUN2QyxRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7UUFDSCxPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSztRQUtILElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUNoRSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLE1BQU0sQ0FBQyxRQUFRLENBQ3JCLEdBQVcsRUFDWCxPQUFlLEVBQ2YsVUFBc0UsRUFDdEUsTUFBa0U7UUFFbEUsSUFBSSxDQUFDLEdBQUc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLFVBQVU7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLE9BQU87WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFFcEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDakUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3RDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNDLElBQUksVUFBVTtZQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM1RSxJQUFJLE1BQU07WUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsa0JBQWtCLENBQUMsUUFBeUI7UUFDakQsVUFBVSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7SUFDeEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBVztRQUNwQixPQUFPLElBQUksVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQWU7UUFDaEMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDOztBQW5NSCxnQ0FvTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEZWNvcmF0aW9uQnVpbGRlckJ1aWxkLFxuICBEZWNvcmF0aW9uQnVpbGRlckVuZCxcbiAgRGVjb3JhdGlvbkJ1aWxkZXJNaWQsXG4gIERlY29yYXRpb25CdWlsZGVyU3RhcnQsXG4gIEZsYXZvdXJSZXNvbHZlcixcbiAgSURlY29yYXRpb25CdWlsZGVyLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgRGVmYXVsdEZsYXZvdXIgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZnVuY3Rpb24gZGVmYXVsdEZsYXZvdXJSZXNvbHZlcih0YXJnZXQ6IG9iamVjdCkge1xuICByZXR1cm4gRGVmYXVsdEZsYXZvdXI7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgZGVjb3JhdG9yIG1hbmFnZW1lbnQgY2xhc3MgdGhhdCBoYW5kbGVzIGZsYXZvdXJlZCBkZWNvcmF0b3JzXG4gKiBAc3VtbWFyeSBUaGUgRGVjb3JhdGlvbiBjbGFzcyBwcm92aWRlcyBhIGJ1aWxkZXIgcGF0dGVybiBmb3IgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIGRlY29yYXRvcnMgd2l0aCBkaWZmZXJlbnQgZmxhdm91cnMuXG4gKiBJdCBzdXBwb3J0cyByZWdpc3RlcmluZywgZXh0ZW5kaW5nLCBhbmQgYXBwbHlpbmcgZGVjb3JhdG9ycyB3aXRoIGNvbnRleHQtYXdhcmUgZmxhdm91ciByZXNvbHV0aW9uLlxuICogVGhlIGNsYXNzIGltcGxlbWVudHMgYSBmbHVlbnQgaW50ZXJmYWNlIGZvciBkZWZpbmluZywgZXh0ZW5kaW5nLCBhbmQgYXBwbHlpbmcgZGVjb3JhdG9ycyB3aXRoIGRpZmZlcmVudCBmbGF2b3VycyxcbiAqIGFsbG93aW5nIGZvciBmcmFtZXdvcmstc3BlY2lmaWMgZGVjb3JhdG9yIGltcGxlbWVudGF0aW9ucyB3aGlsZSBtYWludGFpbmluZyBhIGNvbnNpc3RlbnQgQVBJLlxuICogQHRlbXBsYXRlIFQgVHlwZSBvZiB0aGUgZGVjb3JhdG9yIChDbGFzc0RlY29yYXRvciB8IFByb3BlcnR5RGVjb3JhdG9yIHwgTWV0aG9kRGVjb3JhdG9yKVxuICogQHBhcmFtIHtzdHJpbmd9IFtmbGF2b3VyXSBPcHRpb25hbCBmbGF2b3VyIHBhcmFtZXRlciBmb3IgdGhlIGRlY29yYXRvciBjb250ZXh0XG4gKiBAY2xhc3NcbiAqIEBjYXRlZ29yeSBNb2RlbFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBhIG5ldyBkZWNvcmF0aW9uIGZvciAnY29tcG9uZW50JyB3aXRoIGRlZmF1bHQgZmxhdm91clxuICogY29uc3QgY29tcG9uZW50RGVjb3JhdG9yID0gbmV3IERlY29yYXRpb24oKVxuICogICAuZm9yKCdjb21wb25lbnQnKVxuICogICAuZGVmaW5lKGN1c3RvbUNvbXBvbmVudERlY29yYXRvcik7XG4gKlxuICogLy8gQ3JlYXRlIGEgZmxhdm91cmVkIGRlY29yYXRpb25cbiAqIGNvbnN0IHZ1ZUNvbXBvbmVudCA9IG5ldyBEZWNvcmF0aW9uKCd2dWUnKVxuICogICAuZm9yKCdjb21wb25lbnQnKVxuICogICAuZGVmaW5lKHZ1ZUNvbXBvbmVudERlY29yYXRvcik7XG4gKlxuICogLy8gQXBwbHkgdGhlIGRlY29yYXRpb25cbiAqIEBjb21wb25lbnREZWNvcmF0b3JcbiAqIGNsYXNzIE15Q29tcG9uZW50IHt9XG4gKiBgYGBcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQyBhcyBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgRCBhcyBEZWNvcmF0aW9uXG4gKiAgIHBhcnRpY2lwYW50IFIgYXMgRmxhdm91clJlc29sdmVyXG4gKiAgIHBhcnRpY2lwYW50IEYgYXMgRGVjb3JhdG9yRmFjdG9yeVxuICpcbiAqICAgQy0+PkQ6IG5ldyBEZWNvcmF0aW9uKGZsYXZvdXIpXG4gKiAgIEMtPj5EOiBmb3Ioa2V5KVxuICogICBDLT4+RDogZGVmaW5lKGRlY29yYXRvcnMpXG4gKiAgIEQtPj5EOiByZWdpc3RlcihrZXksIGZsYXZvdXIsIGRlY29yYXRvcnMpXG4gKiAgIEQtPj5GOiBkZWNvcmF0b3JGYWN0b3J5KGtleSwgZmxhdm91cilcbiAqICAgRi0+PlI6IHJlc29sdmUodGFyZ2V0KVxuICogICBSLS0+PkY6IHJlc29sdmVkIGZsYXZvdXJcbiAqICAgRi0+PkY6IGFwcGx5IGRlY29yYXRvcnNcbiAqICAgRi0tPj5DOiBkZWNvcmF0ZWQgdGFyZ2V0XG4gKi9cbmV4cG9ydCBjbGFzcyBEZWNvcmF0aW9uIGltcGxlbWVudHMgSURlY29yYXRpb25CdWlsZGVyIHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdGF0aWMgbWFwIG9mIHJlZ2lzdGVyZWQgZGVjb3JhdG9yc1xuICAgKiBAc3VtbWFyeSBTdG9yZXMgYWxsIHJlZ2lzdGVyZWQgZGVjb3JhdG9ycyBvcmdhbml6ZWQgYnkga2V5IGFuZCBmbGF2b3VyXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBkZWNvcmF0b3JzOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIFJlY29yZDxcbiAgICAgIHN0cmluZyxcbiAgICAgIHtcbiAgICAgICAgZGVjb3JhdG9ycz86IFNldDxDbGFzc0RlY29yYXRvciB8IFByb3BlcnR5RGVjb3JhdG9yIHwgTWV0aG9kRGVjb3JhdG9yPjtcbiAgICAgICAgZXh0cmFzPzogU2V0PENsYXNzRGVjb3JhdG9yIHwgUHJvcGVydHlEZWNvcmF0b3IgfCBNZXRob2REZWNvcmF0b3I+O1xuICAgICAgfVxuICAgID5cbiAgPiA9IHt9O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRnVuY3Rpb24gdG8gcmVzb2x2ZSBmbGF2b3VyIGZyb20gYSB0YXJnZXRcbiAgICogQHN1bW1hcnkgUmVzb2x2ZXIgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHRoZSBhcHByb3ByaWF0ZSBmbGF2b3VyIGZvciBhIGdpdmVuIHRhcmdldFxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZmxhdm91clJlc29sdmVyOiBGbGF2b3VyUmVzb2x2ZXIgPSBkZWZhdWx0Rmxhdm91clJlc29sdmVyO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0IG9mIGRlY29yYXRvcnMgZm9yIHRoZSBjdXJyZW50IGNvbnRleHRcbiAgICovXG4gIHByaXZhdGUgZGVjb3JhdG9ycz86IFNldDxcbiAgICBDbGFzc0RlY29yYXRvciB8IFByb3BlcnR5RGVjb3JhdG9yIHwgTWV0aG9kRGVjb3JhdG9yXG4gID47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXQgb2YgYWRkaXRpb25hbCBkZWNvcmF0b3JzXG4gICAqL1xuICBwcml2YXRlIGV4dHJhcz86IFNldDxDbGFzc0RlY29yYXRvciB8IFByb3BlcnR5RGVjb3JhdG9yIHwgTWV0aG9kRGVjb3JhdG9yPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgZGVjb3JhdG9yIGtleVxuICAgKi9cbiAgcHJpdmF0ZSBrZXk/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmbGF2b3VyOiBzdHJpbmcgPSBEZWZhdWx0Rmxhdm91cikge31cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGtleSBmb3IgdGhlIGRlY29yYXRpb24gYnVpbGRlclxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIG5ldyBkZWNvcmF0aW9uIGNoYWluIHdpdGggdGhlIHNwZWNpZmllZCBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgaWRlbnRpZmllciBmb3IgdGhlIGRlY29yYXRvclxuICAgKiBAcmV0dXJuIHtEZWNvcmF0aW9uQnVpbGRlck1pZH0gQnVpbGRlciBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nXG4gICAqL1xuICBmb3Ioa2V5OiBzdHJpbmcpOiBEZWNvcmF0aW9uQnVpbGRlck1pZCB7XG4gICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFkZHMgZGVjb3JhdG9ycyB0byB0aGUgY3VycmVudCBjb250ZXh0XG4gICAqIEBzdW1tYXJ5IEludGVybmFsIG1ldGhvZCB0byBhZGQgZGVjb3JhdG9ycyB3aXRoIGFkZG9uIHN1cHBvcnRcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWRkb249ZmFsc2VdIFdoZXRoZXIgdGhlIGRlY29yYXRvcnMgYXJlIGFkZG9uc1xuICAgKiBAcGFyYW0gZGVjb3JhdG9ycyBBcnJheSBvZiBkZWNvcmF0b3JzXG4gICAqIEByZXR1cm4ge3RoaXN9IEN1cnJlbnQgaW5zdGFuY2UgZm9yIGNoYWluaW5nXG4gICAqL1xuICBwcml2YXRlIGRlY29yYXRlKFxuICAgIGFkZG9uOiBib29sZWFuID0gZmFsc2UsXG4gICAgLi4uZGVjb3JhdG9yczogKENsYXNzRGVjb3JhdG9yIHwgUHJvcGVydHlEZWNvcmF0b3IgfCBNZXRob2REZWNvcmF0b3IpW11cbiAgKTogdGhpcyB7XG4gICAgaWYgKCF0aGlzLmtleSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImtleSBtdXN0IGJlIHByb3ZpZGVkIGJlZm9yZSBkZWNvcmF0b3JzIGNhbiBiZSBhZGRlZFwiKTtcbiAgICBpZiAoIWFkZG9uICYmICF0aGlzLmRlY29yYXRvcnMgJiYgdGhpcy5mbGF2b3VyICE9PSBEZWZhdWx0Rmxhdm91cilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJNdXN0IHByb3ZpZGUgb3ZlcnJpZGVzIG9yIGFkZG9ucyB0byBvdmVycmlkZSBvciBleHRlbmQgZGVjYWYncyBkZWNvcmF0b3JzXCJcbiAgICAgICk7XG4gICAgaWYgKHRoaXMuZmxhdm91ciA9PT0gRGVmYXVsdEZsYXZvdXIgJiYgYWRkb24pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWZhdWx0IGZsYXZvdXIgY2Fubm90IGJlIGV4dGVuZGVkXCIpO1xuXG4gICAgdGhpc1thZGRvbiA/IFwiZXh0cmFzXCIgOiBcImRlY29yYXRvcnNcIl0gPSBuZXcgU2V0KFtcbiAgICAgIC4uLih0aGlzW2FkZG9uID8gXCJleHRyYXNcIiA6IFwiZGVjb3JhdG9yc1wiXSB8fCBuZXcgU2V0KCkpLnZhbHVlcygpLFxuICAgICAgLi4uZGVjb3JhdG9ycyxcbiAgICBdKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZWZpbmVzIHRoZSBiYXNlIGRlY29yYXRvcnNcbiAgICogQHN1bW1hcnkgU2V0cyB0aGUgcHJpbWFyeSBkZWNvcmF0b3JzIGZvciB0aGUgY3VycmVudCBjb250ZXh0XG4gICAqIEBwYXJhbSBkZWNvcmF0b3JzIERlY29yYXRvcnMgdG8gZGVmaW5lXG4gICAqIEByZXR1cm4gQnVpbGRlciBpbnN0YW5jZSBmb3IgZmluaXNoaW5nIHRoZSBjaGFpblxuICAgKi9cbiAgZGVmaW5lKFxuICAgIC4uLmRlY29yYXRvcnM6IChDbGFzc0RlY29yYXRvciB8IFByb3BlcnR5RGVjb3JhdG9yIHwgTWV0aG9kRGVjb3JhdG9yKVtdXG4gICk6IERlY29yYXRpb25CdWlsZGVyRW5kICYgRGVjb3JhdGlvbkJ1aWxkZXJCdWlsZCB7XG4gICAgcmV0dXJuIHRoaXMuZGVjb3JhdGUoZmFsc2UsIC4uLmRlY29yYXRvcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFeHRlbmRzIGV4aXN0aW5nIGRlY29yYXRvcnNcbiAgICogQHN1bW1hcnkgQWRkcyBhZGRpdGlvbmFsIGRlY29yYXRvcnMgdG8gdGhlIGN1cnJlbnQgY29udGV4dFxuICAgKiBAcGFyYW0gZGVjb3JhdG9ycyBBZGRpdGlvbmFsIGRlY29yYXRvcnNcbiAgICogQHJldHVybiB7RGVjb3JhdGlvbkJ1aWxkZXJCdWlsZH0gQnVpbGRlciBpbnN0YW5jZSBmb3IgYnVpbGRpbmcgdGhlIGRlY29yYXRvclxuICAgKi9cbiAgZXh0ZW5kKFxuICAgIC4uLmRlY29yYXRvcnM6IChDbGFzc0RlY29yYXRvciB8IFByb3BlcnR5RGVjb3JhdG9yIHwgTWV0aG9kRGVjb3JhdG9yKVtdXG4gICk6IERlY29yYXRpb25CdWlsZGVyQnVpbGQge1xuICAgIHJldHVybiB0aGlzLmRlY29yYXRlKHRydWUsIC4uLmRlY29yYXRvcnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlY29yYXRvckZhY3Rvcnkoa2V5OiBzdHJpbmcsIGY6IHN0cmluZyA9IERlZmF1bHRGbGF2b3VyKSB7XG4gICAgY29uc3QgY29udGV4dERlY29yYXRvciA9IGZ1bmN0aW9uIGNvbnRleHREZWNvcmF0b3IoXG4gICAgICB0YXJnZXQ6IG9iamVjdCxcbiAgICAgIHByb3BlcnR5S2V5PzogYW55LFxuICAgICAgZGVzY3JpcHRvcj86IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT5cbiAgICApIHtcbiAgICAgIGNvbnN0IGZsYXZvdXIgPSBEZWNvcmF0aW9uLmZsYXZvdXJSZXNvbHZlcih0YXJnZXQpO1xuICAgICAgbGV0IGRlY29yYXRvcnM7XG4gICAgICBjb25zdCBleHRyYXMgPSBEZWNvcmF0aW9uLmRlY29yYXRvcnNba2V5XVtmbGF2b3VyXS5leHRyYXM7XG4gICAgICBpZiAoXG4gICAgICAgIERlY29yYXRpb24uZGVjb3JhdG9yc1trZXldICYmXG4gICAgICAgIERlY29yYXRpb24uZGVjb3JhdG9yc1trZXldW2ZsYXZvdXJdICYmXG4gICAgICAgIERlY29yYXRpb24uZGVjb3JhdG9yc1trZXldW2ZsYXZvdXJdLmRlY29yYXRvcnNcbiAgICAgICkge1xuICAgICAgICBkZWNvcmF0b3JzID0gRGVjb3JhdGlvbi5kZWNvcmF0b3JzW2tleV1bZmxhdm91cl0uZGVjb3JhdG9ycztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlY29yYXRvcnMgPSBEZWNvcmF0aW9uLmRlY29yYXRvcnNba2V5XVtEZWZhdWx0Rmxhdm91cl0uZGVjb3JhdG9ycztcbiAgICAgIH1cbiAgICAgIFtcbiAgICAgICAgLi4uKGRlY29yYXRvcnMgPyBkZWNvcmF0b3JzLnZhbHVlcygpIDogW10pLFxuICAgICAgICAuLi4oZXh0cmFzID8gZXh0cmFzLnZhbHVlcygpIDogW10pLFxuICAgICAgXS5mb3JFYWNoKChkKSA9PiAoZCBhcyBhbnkpKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IpKTtcbiAgICAgIC8vIHJldHVybiBhcHBseShcbiAgICAgIC8vXG4gICAgICAvLyApKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnRleHREZWNvcmF0b3IsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogW2YsIGtleV0uam9pbihcIl9kZWNvcmF0b3JfZm9yX1wiKSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgICByZXR1cm4gY29udGV4dERlY29yYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyB0aGUgZmluYWwgZGVjb3JhdG9yIGZ1bmN0aW9uXG4gICAqIEBzdW1tYXJ5IEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgZGVjb3JhdG9yIGZhY3RvcnkgZnVuY3Rpb25cbiAgICogQHJldHVybiB7ZnVuY3Rpb24ob2JqZWN0LCBhbnk/LCBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcj8pOiBhbnl9IFRoZSBnZW5lcmF0ZWQgZGVjb3JhdG9yIGZ1bmN0aW9uXG4gICAqL1xuICBhcHBseSgpOiAoXG4gICAgdGFyZ2V0OiBvYmplY3QsXG4gICAgcHJvcGVydHlLZXk/OiBhbnksXG4gICAgZGVzY3JpcHRvcj86IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT5cbiAgKSA9PiBhbnkge1xuICAgIGlmICghdGhpcy5rZXkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBrZXkgcHJvdmlkZWQgZm9yIHRoZSBkZWNvcmF0aW9uIGJ1aWxkZXJcIik7XG4gICAgRGVjb3JhdGlvbi5yZWdpc3Rlcih0aGlzLmtleSwgdGhpcy5mbGF2b3VyLCB0aGlzLmRlY29yYXRvcnMsIHRoaXMuZXh0cmFzKTtcbiAgICByZXR1cm4gdGhpcy5kZWNvcmF0b3JGYWN0b3J5KHRoaXMua2V5LCB0aGlzLmZsYXZvdXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlcnMgZGVjb3JhdG9ycyBmb3IgYSBzcGVjaWZpYyBrZXkgYW5kIGZsYXZvdXJcbiAgICogQHN1bW1hcnkgSW50ZXJuYWwgbWV0aG9kIHRvIHN0b3JlIGRlY29yYXRvcnMgaW4gdGhlIHN0YXRpYyByZWdpc3RyeVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IERlY29yYXRvciBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZsYXZvdXIgRGVjb3JhdG9yIGZsYXZvdXJcbiAgICogQHBhcmFtIFtkZWNvcmF0b3JzXSBQcmltYXJ5IGRlY29yYXRvcnNcbiAgICogQHBhcmFtIFtleHRyYXNdIEFkZGl0aW9uYWwgZGVjb3JhdG9yc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVnaXN0ZXIoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZmxhdm91cjogc3RyaW5nLFxuICAgIGRlY29yYXRvcnM/OiBTZXQ8Q2xhc3NEZWNvcmF0b3IgfCBQcm9wZXJ0eURlY29yYXRvciB8IE1ldGhvZERlY29yYXRvcj4sXG4gICAgZXh0cmFzPzogU2V0PENsYXNzRGVjb3JhdG9yIHwgUHJvcGVydHlEZWNvcmF0b3IgfCBNZXRob2REZWNvcmF0b3I+XG4gICkge1xuICAgIGlmICgha2V5KSB0aHJvdyBuZXcgRXJyb3IoXCJObyBrZXkgcHJvdmlkZWQgZm9yIHRoZSBkZWNvcmF0aW9uIGJ1aWxkZXJcIik7XG4gICAgaWYgKCFkZWNvcmF0b3JzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZGVjb3JhdG9ycyBwcm92aWRlZCBmb3IgdGhlIGRlY29yYXRpb24gYnVpbGRlclwiKTtcbiAgICBpZiAoIWZsYXZvdXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBmbGF2b3VyIHByb3ZpZGVkIGZvciB0aGUgZGVjb3JhdGlvbiBidWlsZGVyXCIpO1xuXG4gICAgaWYgKCFEZWNvcmF0aW9uLmRlY29yYXRvcnNba2V5XSkgRGVjb3JhdGlvbi5kZWNvcmF0b3JzW2tleV0gPSB7fTtcbiAgICBpZiAoIURlY29yYXRpb24uZGVjb3JhdG9yc1trZXldW2ZsYXZvdXJdKVxuICAgICAgRGVjb3JhdGlvbi5kZWNvcmF0b3JzW2tleV1bZmxhdm91cl0gPSB7fTtcbiAgICBpZiAoZGVjb3JhdG9ycykgRGVjb3JhdGlvbi5kZWNvcmF0b3JzW2tleV1bZmxhdm91cl0uZGVjb3JhdG9ycyA9IGRlY29yYXRvcnM7XG4gICAgaWYgKGV4dHJhcykgRGVjb3JhdGlvbi5kZWNvcmF0b3JzW2tleV1bZmxhdm91cl0uZXh0cmFzID0gZXh0cmFzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBnbG9iYWwgZmxhdm91ciByZXNvbHZlclxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBmdW5jdGlvbiB1c2VkIHRvIGRldGVybWluZSBkZWNvcmF0b3IgZmxhdm91cnNcbiAgICogQHBhcmFtIHtGbGF2b3VyUmVzb2x2ZXJ9IHJlc29sdmVyIEZ1bmN0aW9uIHRvIHJlc29sdmUgZmxhdm91cnNcbiAgICovXG4gIHN0YXRpYyBzZXRGbGF2b3VyUmVzb2x2ZXIocmVzb2x2ZXI6IEZsYXZvdXJSZXNvbHZlcikge1xuICAgIERlY29yYXRpb24uZmxhdm91clJlc29sdmVyID0gcmVzb2x2ZXI7XG4gIH1cblxuICBzdGF0aWMgZm9yKGtleTogc3RyaW5nKTogRGVjb3JhdGlvbkJ1aWxkZXJNaWQge1xuICAgIHJldHVybiBuZXcgRGVjb3JhdGlvbigpLmZvcihrZXkpO1xuICB9XG5cbiAgc3RhdGljIGZsYXZvdXJlZEFzKGZsYXZvdXI6IHN0cmluZyk6IERlY29yYXRpb25CdWlsZGVyU3RhcnQge1xuICAgIHJldHVybiBuZXcgRGVjb3JhdGlvbihmbGF2b3VyKTtcbiAgfVxufVxuIl19
|