@kaspernj/api-maker 1.0.2107 → 1.0.2109
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/build/use-created-event.d.ts +0 -3
- package/build/use-created-event.d.ts.map +1 -1
- package/build/use-created-event.js +3 -48
- package/build/use-model-class-event.d.ts +17 -0
- package/build/use-model-class-event.d.ts.map +1 -0
- package/build/use-model-class-event.js +84 -0
- package/package.json +1 -1
|
@@ -13,7 +13,4 @@ declare function ApiMakerUseCreatedEvent(modelClass: Function, onCreated: Functi
|
|
|
13
13
|
debounce?: number;
|
|
14
14
|
onConnected?: Function;
|
|
15
15
|
}): void;
|
|
16
|
-
declare namespace ApiMakerUseCreatedEvent {
|
|
17
|
-
let propTypes: any;
|
|
18
|
-
}
|
|
19
16
|
//# sourceMappingURL=use-created-event.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-created-event.d.ts","sourceRoot":"/src/","sources":["use-created-event.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"use-created-event.d.ts","sourceRoot":"/src/","sources":["use-created-event.js"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AACH,2FALG;IAAuB,MAAM,GAArB,OAAO;IACO,QAAQ,GAAtB,MAAM;IACU,WAAW;CACnC,GAAU,IAAI,CAQhB"}
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import debounceFunction from "debounce";
|
|
3
|
-
import ModelEvents from "./model-events.js";
|
|
4
|
-
import PropTypes from "prop-types";
|
|
5
|
-
import propTypesExact from "prop-types-exact";
|
|
6
|
-
import { useCallback, useLayoutEffect } from "react";
|
|
7
|
-
import useShape from "set-state-compare/build/use-shape.js";
|
|
1
|
+
import useModelClassEvent from "./use-model-class-event.js";
|
|
8
2
|
/**
|
|
9
3
|
* @param {Function} modelClass
|
|
10
4
|
* @param {Function} onCreated
|
|
@@ -14,47 +8,8 @@ import useShape from "set-state-compare/build/use-shape.js";
|
|
|
14
8
|
* @param {Function} [args.onConnected]
|
|
15
9
|
* @returns {void}
|
|
16
10
|
*/
|
|
17
|
-
// eslint-disable-next-line max-len
|
|
18
11
|
const ApiMakerUseCreatedEvent = (modelClass, onCreated, args = { active: true, debounce: 0, onConnected: undefined }) => {
|
|
19
|
-
|
|
20
|
-
const s = useShape({ active, debounce, modelClass, onCreated });
|
|
21
|
-
const eventDebounce = useCallback(() => {
|
|
22
|
-
if (!s.meta.debounceInstance) {
|
|
23
|
-
if (typeof s.props.debounce == "number") {
|
|
24
|
-
s.meta.debounceInstance = debounceFunction(s.p.onCreated, s.p.debounce);
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
s.meta.debounceInstance = debounceFunction(s.p.onCreated);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return s.meta.debounceInstance;
|
|
31
|
-
}, []);
|
|
32
|
-
const onCreatedCallback = useCallback((...args) => {
|
|
33
|
-
if (!s.p.active) {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
if (s.p.debounce) {
|
|
37
|
-
eventDebounce()(...args);
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
s.p.onCreated(...args);
|
|
41
|
-
}
|
|
42
|
-
}, []);
|
|
43
|
-
useLayoutEffect(() => {
|
|
44
|
-
const connectCreated = ModelEvents.connectCreated(s.p.modelClass, (...args) => onCreatedCallback(...args));
|
|
45
|
-
return () => {
|
|
46
|
-
connectCreated.unsubscribe();
|
|
47
|
-
};
|
|
48
|
-
}, []);
|
|
12
|
+
useModelClassEvent(modelClass, "creates", onCreated, args);
|
|
49
13
|
};
|
|
50
|
-
ApiMakerUseCreatedEvent.propTypes = propTypesExact({
|
|
51
|
-
active: PropTypes.bool.isRequired,
|
|
52
|
-
debounce: PropTypes.oneOfType([
|
|
53
|
-
PropTypes.bool,
|
|
54
|
-
PropTypes.number
|
|
55
|
-
]),
|
|
56
|
-
modelClass: PropTypes.func.isRequired,
|
|
57
|
-
onCreated: PropTypes.func.isRequired
|
|
58
|
-
});
|
|
59
14
|
export default ApiMakerUseCreatedEvent;
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNyZWF0ZWQtZXZlbnQuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInVzZS1jcmVhdGVkLWV2ZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sa0JBQWtCLE1BQU0sNEJBQTRCLENBQUE7QUFFM0Q7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHVCQUF1QixHQUFHLENBQzlCLFVBQVUsRUFDVixTQUFTLEVBQ1QsSUFBSSxHQUFHLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUMsRUFDMUQsRUFBRTtJQUNGLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBO0FBQzVELENBQUMsQ0FBQTtBQUVELGVBQWUsdUJBQXVCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdXNlTW9kZWxDbGFzc0V2ZW50IGZyb20gXCIuL3VzZS1tb2RlbC1jbGFzcy1ldmVudC5qc1wiXG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kZWxDbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gb25DcmVhdGVkXG4gKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmFjdGl2ZV1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5kZWJvdW5jZV1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFthcmdzLm9uQ29ubmVjdGVkXVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IEFwaU1ha2VyVXNlQ3JlYXRlZEV2ZW50ID0gKFxuICBtb2RlbENsYXNzLFxuICBvbkNyZWF0ZWQsXG4gIGFyZ3MgPSB7YWN0aXZlOiB0cnVlLCBkZWJvdW5jZTogMCwgb25Db25uZWN0ZWQ6IHVuZGVmaW5lZH1cbikgPT4ge1xuICB1c2VNb2RlbENsYXNzRXZlbnQobW9kZWxDbGFzcywgXCJjcmVhdGVzXCIsIG9uQ3JlYXRlZCwgYXJncylcbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBpTWFrZXJVc2VDcmVhdGVkRXZlbnRcbiJdfQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export default apiMakerUseModelClassEvent;
|
|
2
|
+
/**
|
|
3
|
+
* @param {Function} modelClass
|
|
4
|
+
* @param {string} event
|
|
5
|
+
* @param {Function} onCallback
|
|
6
|
+
* @param {object} [args]
|
|
7
|
+
* @param {boolean} [args.active]
|
|
8
|
+
* @param {number} [args.debounce]
|
|
9
|
+
* @param {Function} [args.onConnected]
|
|
10
|
+
* @returns {void}
|
|
11
|
+
*/
|
|
12
|
+
declare function apiMakerUseModelClassEvent(modelClass: Function, event: string, onCallback: Function, args?: {
|
|
13
|
+
active?: boolean;
|
|
14
|
+
debounce?: number;
|
|
15
|
+
onConnected?: Function;
|
|
16
|
+
}): void;
|
|
17
|
+
//# sourceMappingURL=use-model-class-event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-model-class-event.d.ts","sourceRoot":"/src/","sources":["use-model-class-event.js"],"names":[],"mappings":";AA8EA;;;;;;;;;GASG;AAEH,yEATW,MAAM,+BAGd;IAAuB,MAAM,GAArB,OAAO;IACO,QAAQ,GAAtB,MAAM;IACU,WAAW;CACnC,GAAU,IAAI,CAWhB"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { ShapeHook, useShapeHook } from "set-state-compare";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import ModelEvents from "./model-events.js"; // eslint-disable-line sort-imports
|
|
4
|
+
import PropTypes from "prop-types";
|
|
5
|
+
import debounceFunction from "debounce";
|
|
6
|
+
import propTypesExact from "prop-types-exact";
|
|
7
|
+
/** Hook state container for model-class event subscriptions. */
|
|
8
|
+
class UseModelClassEventShapeHook extends ShapeHook {
|
|
9
|
+
static defaultProps = {
|
|
10
|
+
active: true,
|
|
11
|
+
debounce: 0,
|
|
12
|
+
onConnected: undefined
|
|
13
|
+
};
|
|
14
|
+
static propTypes = propTypesExact({
|
|
15
|
+
active: PropTypes.bool.isRequired,
|
|
16
|
+
debounce: PropTypes.oneOfType([
|
|
17
|
+
PropTypes.bool,
|
|
18
|
+
PropTypes.number
|
|
19
|
+
]),
|
|
20
|
+
event: PropTypes.string.isRequired,
|
|
21
|
+
modelClass: PropTypes.func.isRequired,
|
|
22
|
+
onCallback: PropTypes.func.isRequired,
|
|
23
|
+
onConnected: PropTypes.func
|
|
24
|
+
});
|
|
25
|
+
/** @returns {Function} */
|
|
26
|
+
debouncedOnCallback() {
|
|
27
|
+
return this.cache("debouncedOnCallback", () => {
|
|
28
|
+
if (typeof this.p.debounce == "number") {
|
|
29
|
+
return debounceFunction(this.p.onCallback, this.p.debounce);
|
|
30
|
+
}
|
|
31
|
+
return debounceFunction(this.p.onCallback);
|
|
32
|
+
}, [this.p.debounce, this.p.onCallback]);
|
|
33
|
+
}
|
|
34
|
+
/** @param {any[]} callbackArgs */
|
|
35
|
+
onModelClassEventCallback(...callbackArgs) {
|
|
36
|
+
if (!this.p.active) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (this.p.debounce) {
|
|
40
|
+
this.debouncedOnCallback()(...callbackArgs);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
this.p.onCallback(...callbackArgs);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** @returns {void} */
|
|
47
|
+
setup() {
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
const callback = (...callbackArgs) => this.onModelClassEventCallback(...callbackArgs);
|
|
50
|
+
const modelClassConnection = this.p.event == "creates"
|
|
51
|
+
? ModelEvents.connectCreated(this.p.modelClass, callback)
|
|
52
|
+
: ModelEvents.connectModelClass(this.p.modelClass, this.p.event, callback);
|
|
53
|
+
if (this.p.onConnected) {
|
|
54
|
+
modelClassConnection.events.addListener("connected", this.p.onConnected);
|
|
55
|
+
}
|
|
56
|
+
return () => {
|
|
57
|
+
if (this.p.onConnected) {
|
|
58
|
+
modelClassConnection.events.removeListener("connected", this.p.onConnected);
|
|
59
|
+
}
|
|
60
|
+
modelClassConnection.unsubscribe();
|
|
61
|
+
};
|
|
62
|
+
}, []);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* @param {Function} modelClass
|
|
67
|
+
* @param {string} event
|
|
68
|
+
* @param {Function} onCallback
|
|
69
|
+
* @param {object} [args]
|
|
70
|
+
* @param {boolean} [args.active]
|
|
71
|
+
* @param {number} [args.debounce]
|
|
72
|
+
* @param {Function} [args.onConnected]
|
|
73
|
+
* @returns {void}
|
|
74
|
+
*/
|
|
75
|
+
// eslint-disable-next-line max-params
|
|
76
|
+
const apiMakerUseModelClassEvent = (modelClass, event, onCallback, args = {}) => {
|
|
77
|
+
const { active = true, debounce = 0, onConnected, ...restProps } = args;
|
|
78
|
+
if (Object.keys(restProps).length > 0) {
|
|
79
|
+
throw new Error(`Unknown props given to apiMakerUseModelClassEvent: ${Object.keys(restProps).join(", ")}`);
|
|
80
|
+
}
|
|
81
|
+
useShapeHook(UseModelClassEventShapeHook, { active, debounce, event, modelClass, onCallback, onConnected });
|
|
82
|
+
};
|
|
83
|
+
export default apiMakerUseModelClassEvent;
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLW1vZGVsLWNsYXNzLWV2ZW50LmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJ1c2UtbW9kZWwtY2xhc3MtZXZlbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sT0FBTyxDQUFBO0FBQy9CLE9BQU8sV0FBVyxNQUFNLG1CQUFtQixDQUFBLENBQUMsbUNBQW1DO0FBQy9FLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLGdCQUFnQixNQUFNLFVBQVUsQ0FBQTtBQUN2QyxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUU3QyxnRUFBZ0U7QUFDaEUsTUFBTSwyQkFBNEIsU0FBUSxTQUFTO0lBQ2pELE1BQU0sQ0FBQyxZQUFZLEdBQUc7UUFDcEIsTUFBTSxFQUFFLElBQUk7UUFDWixRQUFRLEVBQUUsQ0FBQztRQUNYLFdBQVcsRUFBRSxTQUFTO0tBQ3ZCLENBQUE7SUFFRCxNQUFNLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQztRQUNoQyxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVO1FBQ2pDLFFBQVEsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDO1lBQzVCLFNBQVMsQ0FBQyxJQUFJO1lBQ2QsU0FBUyxDQUFDLE1BQU07U0FDakIsQ0FBQztRQUNGLEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVU7UUFDbEMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVTtRQUNyQyxVQUFVLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVO1FBQ3JDLFdBQVcsRUFBRSxTQUFTLENBQUMsSUFBSTtLQUM1QixDQUFDLENBQUE7SUFFRiwwQkFBMEI7SUFDMUIsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FDZixxQkFBcUIs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QyxDQUFBO0lBQzVHLENBQUM7SUFFRCxZQUFZLENBQUMsMkJBQTJCLEVBQUUsRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUE7QUFDM0csQ0FBQyxDQUFBO0FBRUQsZUFBZSwwQkFBMEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2hhcGVIb29rLCB1c2VTaGFwZUhvb2t9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZVwiXG5pbXBvcnQge3VzZUVmZmVjdH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBNb2RlbEV2ZW50cyBmcm9tIFwiLi9tb2RlbC1ldmVudHMuanNcIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgZGVib3VuY2VGdW5jdGlvbiBmcm9tIFwiZGVib3VuY2VcIlxuaW1wb3J0IHByb3BUeXBlc0V4YWN0IGZyb20gXCJwcm9wLXR5cGVzLWV4YWN0XCJcblxuLyoqIEhvb2sgc3RhdGUgY29udGFpbmVyIGZvciBtb2RlbC1jbGFzcyBldmVudCBzdWJzY3JpcHRpb25zLiAqL1xuY2xhc3MgVXNlTW9kZWxDbGFzc0V2ZW50U2hhcGVIb29rIGV4dGVuZHMgU2hhcGVIb29rIHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBhY3RpdmU6IHRydWUsXG4gICAgZGVib3VuY2U6IDAsXG4gICAgb25Db25uZWN0ZWQ6IHVuZGVmaW5lZFxuICB9XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHByb3BUeXBlc0V4YWN0KHtcbiAgICBhY3RpdmU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgZGVib3VuY2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgUHJvcFR5cGVzLmJvb2wsXG4gICAgICBQcm9wVHlwZXMubnVtYmVyXG4gICAgXSksXG4gICAgZXZlbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBtb2RlbENsYXNzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2FsbGJhY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25Db25uZWN0ZWQ6IFByb3BUeXBlcy5mdW5jXG4gIH0pXG5cbiAgLyoqIEByZXR1cm5zIHtGdW5jdGlvbn0gKi9cbiAgZGVib3VuY2VkT25DYWxsYmFjaygpIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZShcbiAgICAgIFwiZGVib3VuY2VkT25DYWxsYmFja1wiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMucC5kZWJvdW5jZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlRnVuY3Rpb24odGhpcy5wLm9uQ2FsbGJhY2ssIHRoaXMucC5kZWJvdW5jZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWJvdW5jZUZ1bmN0aW9uKHRoaXMucC5vbkNhbGxiYWNrKVxuICAgICAgfSxcbiAgICAgIFt0aGlzLnAuZGVib3VuY2UsIHRoaXMucC5vbkNhbGxiYWNrXVxuICAgIClcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2FueVtdfSBjYWxsYmFja0FyZ3MgKi9cbiAgb25Nb2RlbENsYXNzRXZlbnRDYWxsYmFjayguLi5jYWxsYmFja0FyZ3MpIHtcbiAgICBpZiAoIXRoaXMucC5hY3RpdmUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLnAuZGVib3VuY2UpIHtcbiAgICAgIHRoaXMuZGVib3VuY2VkT25DYWxsYmFjaygpKC4uLmNhbGxiYWNrQXJncylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wLm9uQ2FsbGJhY2soLi4uY2FsbGJhY2tBcmdzKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgc2V0dXAoKSB7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gKC4uLmNhbGxiYWNrQXJncykgPT4gdGhpcy5vbk1vZGVsQ2xhc3NFdmVudENhbGxiYWNrKC4uLmNhbGxiYWNrQXJncylcbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3NDb25uZWN0aW9uID0gdGhpcy5wLmV2ZW50ID09IFwiY3JlYXRlc1wiXG4gICAgICAgID8gTW9kZWxFdmVudHMuY29ubmVjdENyZWF0ZWQodGhpcy5wLm1vZGVsQ2xhc3MsIGNhbGxiYWNrKVxuICAgICAgICA6IE1vZGVsRXZlbnRzLmNvbm5lY3RNb2RlbENsYXNzKHRoaXMucC5tb2RlbENsYXNzLCB0aGlzLnAuZXZlbnQsIGNhbGxiYWNrKVxuXG4gICAgICBpZiAodGhpcy5wLm9uQ29ubmVjdGVkKSB7XG4gICAgICAgIG1vZGVsQ2xhc3NDb25uZWN0aW9uLmV2ZW50cy5hZGRMaXN0ZW5lcihcImNvbm5lY3RlZFwiLCB0aGlzLnAub25Db25uZWN0ZWQpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnAub25Db25uZWN0ZWQpIHtcbiAgICAgICAgICBtb2RlbENsYXNzQ29ubmVjdGlvbi5ldmVudHMucmVtb3ZlTGlzdGVuZXIoXCJjb25uZWN0ZWRcIiwgdGhpcy5wLm9uQ29ubmVjdGVkKVxuICAgICAgICB9XG5cbiAgICAgICAgbW9kZWxDbGFzc0Nvbm5lY3Rpb24udW5zdWJzY3JpYmUoKVxuICAgICAgfVxuICAgIH0sIFtdKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kZWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkNhbGxiYWNrXG4gKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmFjdGl2ZV1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5kZWJvdW5jZV1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFthcmdzLm9uQ29ubmVjdGVkXVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtcGFyYW1zXG5jb25zdCBhcGlNYWtlclVzZU1vZGVsQ2xhc3NFdmVudCA9IChtb2RlbENsYXNzLCBldmVudCwgb25DYWxsYmFjaywgYXJncyA9IHt9KSA9PiB7XG4gIGNvbnN0IHthY3RpdmUgPSB0cnVlLCBkZWJvdW5jZSA9IDAsIG9uQ29ubmVjdGVkLCAuLi5yZXN0UHJvcHN9ID0gYXJnc1xuXG4gIGlmIChPYmplY3Qua2V5cyhyZXN0UHJvcHMpLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcHJvcHMgZ2l2ZW4gdG8gYXBpTWFrZXJVc2VNb2RlbENsYXNzRXZlbnQ6ICR7T2JqZWN0LmtleXMocmVzdFByb3BzKS5qb2luKFwiLCBcIil9YClcbiAgfVxuXG4gIHVzZVNoYXBlSG9vayhVc2VNb2RlbENsYXNzRXZlbnRTaGFwZUhvb2ssIHthY3RpdmUsIGRlYm91bmNlLCBldmVudCwgbW9kZWxDbGFzcywgb25DYWxsYmFjaywgb25Db25uZWN0ZWR9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBhcGlNYWtlclVzZU1vZGVsQ2xhc3NFdmVudFxuIl19
|