@kaspernj/api-maker 1.0.2108 → 1.0.2110
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 +32 -0
- package/build/api.d.ts +1 -3
- package/build/api.d.ts.map +1 -1
- package/build/api.js +2 -4
- package/build/attribute-not-loaded-error.d.ts +1 -0
- package/build/attribute-not-loaded-error.d.ts.map +1 -1
- package/build/attribute-not-loaded-error.js +2 -1
- package/build/base-model/attribute.d.ts +1 -3
- package/build/base-model/attribute.d.ts.map +1 -1
- package/build/base-model/attribute.js +2 -4
- package/build/base-model/reflection.d.ts +2 -0
- package/build/base-model/reflection.d.ts.map +1 -1
- package/build/base-model/reflection.js +3 -1
- package/build/base-model/scope.d.ts +1 -0
- package/build/base-model/scope.d.ts.map +1 -1
- package/build/base-model/scope.js +2 -1
- package/build/base-model.js +128 -46
- package/build/bootstrap/attribute-row.js +54 -6
- package/build/bootstrap/attribute-rows.js +8 -4
- package/build/bootstrap/index.js +2 -1
- package/build/cable-connection-pool.d.ts +10 -0
- package/build/cable-connection-pool.d.ts.map +1 -1
- package/build/cable-connection-pool.js +11 -1
- package/build/cable-subscription-pool.d.ts +10 -0
- package/build/cable-subscription-pool.d.ts.map +1 -1
- package/build/cable-subscription-pool.js +13 -1
- package/build/cable-subscription.d.ts +2 -0
- package/build/cable-subscription.d.ts.map +1 -1
- package/build/cable-subscription.js +4 -1
- package/build/cache-key-generator.d.ts +9 -0
- package/build/cache-key-generator.d.ts.map +1 -1
- package/build/cache-key-generator.js +10 -1
- package/build/can-can.d.ts +20 -0
- package/build/can-can.d.ts.map +1 -1
- package/build/can-can.js +22 -1
- package/build/channels-consumer.d.ts.map +1 -1
- package/build/channels-consumer.js +4 -1
- package/build/collection.d.ts +57 -49
- package/build/collection.d.ts.map +1 -1
- package/build/collection.js +55 -51
- package/build/command-submit-data.d.ts +3 -0
- package/build/command-submit-data.d.ts.map +1 -1
- package/build/command-submit-data.js +4 -1
- package/build/commands-pool.d.ts +7 -0
- package/build/commands-pool.d.ts.map +1 -1
- package/build/commands-pool.js +10 -4
- package/build/compose.d.ts +1 -0
- package/build/compose.d.ts.map +1 -1
- package/build/compose.js +2 -1
- package/build/config.d.ts +2 -0
- package/build/config.d.ts.map +1 -1
- package/build/config.js +4 -1
- package/build/custom-error.d.ts +1 -0
- package/build/custom-error.d.ts.map +1 -1
- package/build/custom-error.js +2 -1
- package/build/data-set-to-attributes.d.ts +1 -0
- package/build/data-set-to-attributes.d.ts.map +1 -1
- package/build/data-set-to-attributes.js +2 -1
- package/build/deserializer.d.ts +2 -0
- package/build/deserializer.d.ts.map +1 -1
- package/build/deserializer.js +5 -3
- package/build/destroy-error.d.ts +1 -0
- package/build/destroy-error.d.ts.map +1 -1
- package/build/destroy-error.js +2 -1
- package/build/devise.d.ts +11 -0
- package/build/devise.d.ts.map +1 -1
- package/build/devise.js +17 -2
- package/build/draggable-sort/controller.d.ts +12 -0
- package/build/draggable-sort/controller.d.ts.map +1 -1
- package/build/draggable-sort/controller.js +13 -1
- package/build/error-logger.d.ts +10 -0
- package/build/error-logger.d.ts.map +1 -1
- package/build/error-logger.js +12 -1
- package/build/error-messages.d.ts +1 -3
- package/build/error-messages.d.ts.map +1 -1
- package/build/error-messages.js +2 -4
- package/build/event-connection.d.ts +1 -1
- package/build/event-connection.d.ts.map +1 -1
- package/build/event-model-class.d.ts +1 -1
- package/build/event-model-class.d.ts.map +1 -1
- package/build/events.d.ts +1 -0
- package/build/events.d.ts.map +1 -1
- package/build/events.js +2 -1
- package/build/history-expo.d.ts +7 -1
- package/build/history-expo.d.ts.map +1 -1
- package/build/history-expo.js +8 -1
- package/build/history-react-native.d.ts +7 -1
- package/build/history-react-native.d.ts.map +1 -1
- package/build/history-react-native.js +8 -1
- package/build/history.js +2 -1
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -1
- package/build/inputs/auto-submit.d.ts +14 -2
- package/build/inputs/auto-submit.d.ts.map +1 -1
- package/build/inputs/auto-submit.js +5 -1
- package/build/inputs/id-for-component.d.ts +1 -0
- package/build/inputs/id-for-component.d.ts.map +1 -1
- package/build/inputs/id-for-component.js +2 -1
- package/build/inputs/name-for-component.d.ts +1 -0
- package/build/inputs/name-for-component.d.ts.map +1 -1
- package/build/inputs/name-for-component.js +2 -1
- package/build/instance-of-class-name.d.ts +5 -1
- package/build/instance-of-class-name.d.ts.map +1 -1
- package/build/instance-of-class-name.js +11 -2
- package/build/is-expo.js +2 -1
- package/build/key-value-store.d.ts +39 -7
- package/build/key-value-store.d.ts.map +1 -1
- package/build/key-value-store.js +33 -1
- package/build/logger.d.ts +35 -9
- package/build/logger.d.ts.map +1 -1
- package/build/logger.js +25 -1
- package/build/merge-styles.d.ts +1 -0
- package/build/merge-styles.d.ts.map +1 -1
- package/build/merge-styles.js +2 -1
- package/build/model-events.d.ts +33 -5
- package/build/model-events.d.ts.map +1 -1
- package/build/model-events.js +29 -1
- package/build/model-name.d.ts +19 -5
- package/build/model-name.d.ts.map +1 -1
- package/build/model-name.js +10 -1
- package/build/model-prop-type.d.ts +11 -0
- package/build/model-prop-type.d.ts.map +1 -1
- package/build/model-prop-type.js +13 -1
- package/build/model-recipes-loader.d.ts +11 -4
- package/build/model-recipes-loader.d.ts.map +1 -1
- package/build/model-recipes-loader.js +8 -1
- package/build/model-recipes-model-loader.d.ts +67 -35
- package/build/model-recipes-model-loader.d.ts.map +1 -1
- package/build/model-recipes-model-loader.js +24 -3
- package/build/models-response-reader.d.ts +32 -6
- package/build/models-response-reader.d.ts.map +1 -1
- package/build/models-response-reader.js +12 -1
- package/build/models.d.ts +1 -1
- package/build/models.d.ts.map +1 -1
- package/build/models.js +2 -1
- package/build/money-formatter.d.ts +72 -8
- package/build/money-formatter.d.ts.map +1 -1
- package/build/money-formatter.js +36 -1
- package/build/not-loaded-error.d.ts +1 -0
- package/build/not-loaded-error.d.ts.map +1 -1
- package/build/not-loaded-error.js +2 -1
- package/build/params.d.ts +1 -0
- package/build/params.d.ts.map +1 -1
- package/build/params.js +2 -1
- package/build/preloaded.d.ts +2 -3
- package/build/preloaded.d.ts.map +1 -1
- package/build/preloaded.js +3 -4
- package/build/rest-props-validator.d.ts +5 -1
- package/build/rest-props-validator.d.ts.map +1 -1
- package/build/rest-props-validator.js +5 -1
- package/build/result.d.ts +4 -0
- package/build/result.d.ts.map +1 -1
- package/build/result.js +3 -1
- package/build/routes-native.d.ts +4 -12
- package/build/routes-native.d.ts.map +1 -1
- package/build/routes-native.js +5 -13
- package/build/routes.d.ts +11 -5
- package/build/routes.d.ts.map +1 -1
- package/build/routes.js +5 -1
- package/build/run-last.d.ts +9 -2
- package/build/run-last.d.ts.map +1 -1
- package/build/run-last.js +8 -1
- package/build/serializer.d.ts +7 -0
- package/build/serializer.d.ts.map +1 -1
- package/build/serializer.js +9 -2
- package/build/services.d.ts +10 -2
- package/build/services.d.ts.map +1 -1
- package/build/services.js +9 -1
- package/build/session-status-updater.d.ts +13 -0
- package/build/session-status-updater.d.ts.map +1 -1
- package/build/session-status-updater.js +15 -1
- package/build/source-maps-loader.js +20 -3
- package/build/super-admin/has-edit-config.d.ts +5 -1
- package/build/super-admin/has-edit-config.d.ts.map +1 -1
- package/build/super-admin/has-edit-config.js +5 -1
- package/build/super-admin/models.d.ts +1 -0
- package/build/super-admin/models.d.ts.map +1 -1
- package/build/super-admin/models.js +2 -1
- package/build/table/column-identifier.d.ts +1 -0
- package/build/table/column-identifier.d.ts.map +1 -1
- package/build/table/column-identifier.js +2 -1
- package/build/table/column-visible.d.ts +1 -0
- package/build/table/column-visible.d.ts.map +1 -1
- package/build/table/column-visible.js +2 -1
- package/build/table/model-callback-args.d.ts +1 -0
- package/build/table/model-callback-args.d.ts.map +1 -1
- package/build/table/model-callback-args.js +2 -1
- package/build/table/select-calculator.d.ts +1 -0
- package/build/table/select-calculator.d.ts.map +1 -1
- package/build/table/select-calculator.js +5 -1
- package/build/table/table-settings.d.ts +16 -0
- package/build/table/table-settings.d.ts.map +1 -1
- package/build/table/table-settings.js +19 -1
- package/build/table/use-sorting.d.ts.map +1 -1
- package/build/table/use-sorting.js +2 -4
- package/build/translated-attributes.d.ts +1 -0
- package/build/translated-attributes.d.ts.map +1 -1
- package/build/translated-attributes.js +2 -1
- package/build/translated-collections.d.ts +7 -1
- package/build/translated-collections.d.ts.map +1 -1
- package/build/translated-collections.js +7 -1
- package/build/updated-attribute.d.ts +1 -1
- package/build/updated-attribute.d.ts.map +1 -1
- package/build/use-can-can.d.ts.map +1 -1
- package/build/use-can-can.js +10 -1
- 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-destroyed-event.d.ts +3 -6
- package/build/use-destroyed-event.d.ts.map +1 -1
- package/build/use-destroyed-event.js +95 -62
- package/build/use-model-class-event.d.ts +14 -0
- package/build/use-model-class-event.d.ts.map +1 -0
- package/build/use-model-class-event.js +85 -0
- package/build/use-model-event.d.ts +2 -5
- package/build/use-model-event.d.ts.map +1 -1
- package/build/use-model-event.js +2 -1
- package/build/use-model.d.ts +2 -3
- package/build/use-model.d.ts.map +1 -1
- package/build/use-model.js +2 -1
- package/build/use-screen-layout.d.ts +2 -1
- package/build/use-screen-layout.d.ts.map +1 -1
- package/build/use-screen-layout.js +7 -2
- package/build/use-styles.d.ts +7 -1
- package/build/use-styles.d.ts.map +1 -1
- package/build/use-styles.js +18 -5
- package/build/validation-error.d.ts +1 -0
- package/build/validation-error.d.ts.map +1 -1
- package/build/validation-error.js +2 -1
- package/build/validation-errors.d.ts +7 -0
- package/build/validation-errors.d.ts.map +1 -1
- package/build/validation-errors.js +8 -1
- package/package.json +2 -2
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import SparkMD5 from "spark-md5";
|
|
2
|
+
/** Generates local/full cache keys for models. */
|
|
2
3
|
export default class CacheKeyGenerator {
|
|
4
|
+
/** Constructor. */
|
|
3
5
|
constructor(model) {
|
|
4
6
|
this.model = model;
|
|
5
7
|
this.allModels = [model];
|
|
@@ -8,25 +10,30 @@ export default class CacheKeyGenerator {
|
|
|
8
10
|
this.recordModel(model.modelClassData().name, model);
|
|
9
11
|
this.filledModels = false;
|
|
10
12
|
}
|
|
13
|
+
/** local. */
|
|
11
14
|
local() {
|
|
12
15
|
const md5 = new SparkMD5();
|
|
13
16
|
this.feedModel(this.model, md5);
|
|
14
17
|
return md5.end();
|
|
15
18
|
}
|
|
19
|
+
/** recordModelType. */
|
|
16
20
|
recordModelType(relationshipType) {
|
|
17
21
|
if (!(relationshipType in this.readModels)) {
|
|
18
22
|
this.readModels[relationshipType] = {};
|
|
19
23
|
}
|
|
20
24
|
}
|
|
25
|
+
/** recordModel. */
|
|
21
26
|
recordModel(relationshipType, model) {
|
|
22
27
|
this.allModels.push(model);
|
|
23
28
|
this.readModels[relationshipType][model.id() || model.uniqueKey()] = true;
|
|
24
29
|
}
|
|
30
|
+
/** isModelRecorded. */
|
|
25
31
|
isModelRecorded(relationshipType, model) {
|
|
26
32
|
if (model.id() in this.readModels[relationshipType]) {
|
|
27
33
|
return true;
|
|
28
34
|
}
|
|
29
35
|
}
|
|
36
|
+
/** fillModels. */
|
|
30
37
|
fillModels(model) {
|
|
31
38
|
for (const relationshipType in model.relationships) {
|
|
32
39
|
this.recordModelType(relationshipType);
|
|
@@ -48,6 +55,7 @@ export default class CacheKeyGenerator {
|
|
|
48
55
|
}
|
|
49
56
|
this.filledModels = true;
|
|
50
57
|
}
|
|
58
|
+
/** cacheKey. */
|
|
51
59
|
cacheKey() {
|
|
52
60
|
if (!this.filledModels) {
|
|
53
61
|
this.fillModels(this.model);
|
|
@@ -58,6 +66,7 @@ export default class CacheKeyGenerator {
|
|
|
58
66
|
}
|
|
59
67
|
return md5.end();
|
|
60
68
|
}
|
|
69
|
+
/** feedModel. */
|
|
61
70
|
feedModel(model, md5) {
|
|
62
71
|
md5.append("--model--");
|
|
63
72
|
md5.append(model.modelClassData().name);
|
|
@@ -75,4 +84,4 @@ export default class CacheKeyGenerator {
|
|
|
75
84
|
}
|
|
76
85
|
}
|
|
77
86
|
}
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUta2V5LWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiY2FjaGUta2V5LWdlbmVyYXRvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsTUFBTSxXQUFXLENBQUE7QUFFaEMsa0RBQWtEO0FBQ2xELE1BQU0sQ0FBQyxPQUFPLE9BQU8saUJBQWlCO0lBQ3BDLG1CQUFtQjtJQUNuQixZQUFZLEtBQUs7UUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUE7UUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ3BELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFBO0lBQzNCLENBQUM7SUFFRCxhQUFhO0lBQ2IsS0FBSztRQUNILE1BQU0sR0FBRyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUE7UUFFMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBRS9CLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQ2xCLENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsZUFBZSxDQUFDLGdCQUFnQjtRQUM5QixJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLO1FBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFBO0lBQzNFLENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsZUFBZSxDQUFDLGdCQUFnQixFQUFFLEtBQUs7UUFDckMsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDcEQsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixVQUFVLENBQUMsS0FBSztRQUNkLEtBQUssTUFBTSxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1lBRXRDLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1lBRWhFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXO2dCQUNsRCxLQUFLLE1BQU0sWUFBWSxJQUFJLGtCQUFrQixFQUFFLENBQUM7b0JBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUM7d0JBQzFELElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLENBQUE7d0JBQ2hELElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUE7b0JBQy9CLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7aUJBQU0sSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsc0JBQXNCO2dCQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7b0JBQ2hFLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtvQkFDdEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO2dCQUNyQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQTtJQUMxQixDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzdCLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFBO1FBRTFCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQzVCLENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUNsQixDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRztRQUNsQixHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3ZCLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3ZDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUM1QixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUUzQyxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7WUFDakMsR0FBRyxDQUFDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO1FBQzFDLENBQUM7UUFFRCxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBRTFCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUVyQyxLQUFLLE1BQU0sYUFBYSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUE7WUFDekIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUMzQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMvRCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNwYXJrTUQ1IGZyb20gXCJzcGFyay1tZDVcIlxuXG4vKiogR2VuZXJhdGVzIGxvY2FsL2Z1bGwgY2FjaGUga2V5cyBmb3IgbW9kZWxzLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2FjaGVLZXlHZW5lcmF0b3Ige1xuICAvKiogQ29uc3RydWN0b3IuICovXG4gIGNvbnN0cnVjdG9yKG1vZGVsKSB7XG4gICAgdGhpcy5tb2RlbCA9IG1vZGVsXG4gICAgdGhpcy5hbGxNb2RlbHMgPSBbbW9kZWxdXG4gICAgdGhpcy5yZWFkTW9kZWxzID0ge31cbiAgICB0aGlzLnJlY29yZE1vZGVsVHlwZShtb2RlbC5tb2RlbENsYXNzRGF0YSgpLm5hbWUpXG4gICAgdGhpcy5yZWNvcmRNb2RlbChtb2RlbC5tb2RlbENsYXNzRGF0YSgpLm5hbWUsIG1vZGVsKVxuICAgIHRoaXMuZmlsbGVkTW9kZWxzID0gZmFsc2VcbiAgfVxuXG4gIC8qKiBsb2NhbC4gKi9cbiAgbG9jYWwoKSB7XG4gICAgY29uc3QgbWQ1ID0gbmV3IFNwYXJrTUQ1KClcblxuICAgIHRoaXMuZmVlZE1vZGVsKHRoaXMubW9kZWwsIG1kNSlcblxuICAgIHJldHVybiBtZDUuZW5kKClcbiAgfVxuXG4gIC8qKiByZWNvcmRNb2RlbFR5cGUuICovXG4gIHJlY29yZE1vZGVsVHlwZShyZWxhdGlvbnNoaXBUeXBlKSB7XG4gICAgaWYgKCEocmVsYXRpb25zaGlwVHlwZSBpbiB0aGlzLnJlYWRNb2RlbHMpKSB7XG4gICAgICB0aGlzLnJlYWRNb2RlbHNbcmVsYXRpb25zaGlwVHlwZV0gPSB7fVxuICAgIH1cbiAgfVxuXG4gIC8qKiByZWNvcmRNb2RlbC4gKi9cbiAgcmVjb3JkTW9kZWwocmVsYXRpb25zaGlwVHlwZSwgbW9kZWwpIHtcbiAgICB0aGlzLmFsbE1vZGVscy5wdXNoKG1vZGVsKVxuICAgIHRoaXMucmVhZE1vZGVsc1tyZWxhdGlvbnNoaXBUeXBlXVttb2RlbC5pZCgpIHx8IG1vZGVsLnVuaXF1ZUtleSgpXSA9IHRydWVcbiAgfVxuXG4gIC8qKiBpc01vZGVsUmVjb3JkZWQuICovXG4gIGlzTW9kZWxSZWNvcmRlZChyZWxhdGlvbnNoaXBUeXBlLCBtb2RlbCkge1xuICAgIGlmIChtb2RlbC5pZCgpIGluIHRoaXMucmVhZE1vZGVsc1tyZWxhdGlvbnNoaXBUeXBlXSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICAvKiogZmlsbE1vZGVscy4gKi9cbiAgZmlsbE1vZGVscyhtb2RlbCkge1xuICAgIGZvciAoY29uc3QgcmVsYXRpb25zaGlwVHlwZSBpbiBtb2RlbC5yZWxhdGlvbnNoaXBzKSB7XG4gICAgICB0aGlzLnJlY29yZE1vZGVsVHlwZShyZWxhdGlvbnNoaXBUeXBlKVxuXG4gICAgICBjb25zdCBsb2FkZWRSZWxhdGlvbnNoaXAgPSBtb2RlbC5yZWxhdGlvbnNoaXBzW3JlbGF0aW9uc2hpcFR5cGVdXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGxvYWRlZFJlbGF0aW9uc2hpcCkpIHsgLy8gaGFzX21hbnlcbiAgICAgICAgZm9yIChjb25zdCBhbm90aGVyTW9kZWwgb2YgbG9hZGVkUmVsYXRpb25zaGlwKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzTW9kZWxSZWNvcmRlZChyZWxhdGlvbnNoaXBUeXBlLCBhbm90aGVyTW9kZWwpKSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZE1vZGVsKHJlbGF0aW9uc2hpcFR5cGUsIGFub3RoZXJNb2RlbClcbiAgICAgICAgICAgIHRoaXMuZmlsbE1vZGVscyhhbm90aGVyTW9kZWwpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGxvYWRlZFJlbGF0aW9uc2hpcCkgeyAvLyBiZWxvbmdzX3RvLCBoYXNfb25lXG4gICAgICAgIGlmICghdGhpcy5pc01vZGVsUmVjb3JkZWQocmVsYXRpb25zaGlwVHlwZSwgbG9hZGVkUmVsYXRpb25zaGlwKSkge1xuICAgICAgICAgIHRoaXMucmVjb3JkTW9kZWwocmVsYXRpb25zaGlwVHlwZSwgbG9hZGVkUmVsYXRpb25zaGlwKVxuICAgICAgICAgIHRoaXMuZmlsbE1vZGVscyhsb2FkZWRSZWxhdGlvbnNoaXApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZpbGxlZE1vZGVscyA9IHRydWVcbiAgfVxuXG4gIC8qKiBjYWNoZUtleS4gKi9cbiAgY2FjaGVLZXkoKSB7XG4gICAgaWYgKCF0aGlzLmZpbGxlZE1vZGVscykge1xuICAgICAgdGhpcy5maWxsTW9kZWxzKHRoaXMubW9kZWwpXG4gICAgfVxuXG4gICAgY29uc3QgbWQ1ID0gbmV3IFNwYXJrTUQ1KClcblxuICAgIGZvciAoY29uc3QgbW9kZWwgb2YgdGhpcy5hbGxNb2RlbHMpIHtcbiAgICAgIHRoaXMuZmVlZE1vZGVsKG1vZGVsLCBtZDUpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1kNS5lbmQoKVxuICB9XG5cbiAgLyoqIGZlZWRNb2RlbC4gKi9cbiAgZmVlZE1vZGVsKG1vZGVsLCBtZDUpIHtcbiAgICBtZDUuYXBwZW5kKFwiLS1tb2RlbC0tXCIpXG4gICAgbWQ1LmFwcGVuZChtb2RlbC5tb2RlbENsYXNzRGF0YSgpLm5hbWUpXG4gICAgbWQ1LmFwcGVuZChcIi0tdW5pcXVlLWtleS0tXCIpXG4gICAgbWQ1LmFwcGVuZChtb2RlbC5pZCgpIHx8IG1vZGVsLnVuaXF1ZUtleSgpKVxuXG4gICAgaWYgKG1vZGVsLm1hcmtlZEZvckRlc3RydWN0aW9uKCkpIHtcbiAgICAgIG1kNS5hcHBlbmQoXCItLW1hcmtlZC1mb3ItZGVzdHJ1Y3Rpb24tLVwiKVxuICAgIH1cblxuICAgIG1kNS5hcHBlbmQoXCItYXR0cmlidXRlcy1cIilcblxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBtb2RlbC5hdHRyaWJ1dGVzKClcblxuICAgIGZvciAoY29uc3QgYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICBtZDUuYXBwZW5kKGF0dHJpYnV0ZU5hbWUpXG4gICAgICBtZDUuYXBwZW5kKFwiLS1hdHRyaWJ1dGUtLVwiKVxuICAgICAgbWQ1LmFwcGVuZChgJHttb2RlbC5yZWFkQXR0cmlidXRlVW5kZXJzY29yZShhdHRyaWJ1dGVOYW1lKX1gKVxuICAgIH1cbiAgfVxufVxuIl19
|
package/build/can-can.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
/** Ability helper and query mapper. */
|
|
1
2
|
export default class ApiMakerCanCan {
|
|
3
|
+
/** current. */
|
|
2
4
|
static current(): any;
|
|
3
5
|
abilities: any[];
|
|
4
6
|
abilitiesToLoad: any[];
|
|
@@ -15,27 +17,45 @@ export default class ApiMakerCanCan {
|
|
|
15
17
|
lock: ReadersWriterLock;
|
|
16
18
|
abilitiesByName: Map<any, any>;
|
|
17
19
|
debugTokens: Set<any>;
|
|
20
|
+
/** can. */
|
|
18
21
|
can(ability: any, subject: any, options?: {}): any;
|
|
22
|
+
/** recordMissingAbility. */
|
|
19
23
|
recordMissingAbility(ability: any, subject: any): void;
|
|
24
|
+
/** queueMissingAbilitiesLoad. */
|
|
20
25
|
queueMissingAbilitiesLoad(): void;
|
|
26
|
+
/** loadMissingAbilities. */
|
|
21
27
|
loadMissingAbilities: () => void;
|
|
28
|
+
/** findAbility. */
|
|
22
29
|
findAbility(ability: any, subject: any): any;
|
|
30
|
+
/** isAbilityLoaded. */
|
|
23
31
|
isAbilityLoaded(ability: any, subject: any): boolean;
|
|
32
|
+
/** isReloading. */
|
|
24
33
|
isReloading(): boolean;
|
|
34
|
+
/** getCacheKey. */
|
|
25
35
|
getCacheKey(): number;
|
|
36
|
+
/** setDebug. */
|
|
26
37
|
setDebug(token: any, enabled: any): void;
|
|
38
|
+
/** isDebugging. */
|
|
27
39
|
isDebugging(): boolean;
|
|
40
|
+
/** debugLog. */
|
|
28
41
|
debugLog(message: any): void;
|
|
29
42
|
loadAbilities(abilities: any): Promise<void>;
|
|
43
|
+
/** loadAbility. */
|
|
30
44
|
loadAbility(ability: any, subject: any): Promise<any>;
|
|
45
|
+
/** queueAbilitiesRequest. */
|
|
31
46
|
queueAbilitiesRequest(): void;
|
|
32
47
|
queueAbilitiesRequestTimeout: NodeJS.Timeout;
|
|
33
48
|
resetAbilities(): Promise<any>;
|
|
34
49
|
reloadAbilities(abilities: any, reloadKey: any): Promise<any>;
|
|
50
|
+
/** sendAbilitiesRequest. */
|
|
35
51
|
sendAbilitiesRequest: () => Promise<void>;
|
|
52
|
+
/** indexAbilitiesByName. */
|
|
36
53
|
indexAbilitiesByName(abilities: any): void;
|
|
54
|
+
/** abilityKey. */
|
|
37
55
|
abilityKey(ability: any, subject: any): string;
|
|
56
|
+
/** subjectName. */
|
|
38
57
|
subjectName(subject: any): any;
|
|
58
|
+
/** reportUnhandledAsyncError. */
|
|
39
59
|
reportUnhandledAsyncError(error: any): void;
|
|
40
60
|
}
|
|
41
61
|
import { EventEmitter } from "eventemitter3";
|
package/build/can-can.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"can-can.d.ts","sourceRoot":"/src/","sources":["can-can.js"],"names":[],"mappings":"AASA;IAiBE,sBAIC;
|
|
1
|
+
{"version":3,"file":"can-can.d.ts","sourceRoot":"/src/","sources":["can-can.js"],"names":[],"mappings":"AASA,uCAAuC;AACvC;IAiBE,eAAe;IACf,sBAIC;IArBD,iBAAc;IACd,uBAAoB;IACpB,2BAAwB;IACxB,4BAAuB;IACvB,iBAAY;IACZ,qBAAgB;IAChB,gCAA4B;IAC5B,6BAA8B;IAC9B,8BAA0B;IAC1B,kBAAmB;IACnB,yBAA0B;IAC1B,2CAA2B;IAC3B,wBAA8B;IAC9B,+BAA2B;IAC3B,sBAAuB;IASvB,WAAW;IACX,mDAsBC;IAED,4BAA4B;IAC5B,uDAYC;IAED,iCAAiC;IACjC,kCAIC;IAED,4BAA4B;IAC5B,iCAeC;IAED,mBAAmB;IACnB,6CAKC;IAED,uBAAuB;IACvB,qDAEC;IAED,mBAAmB;IACnB,uBAEC;IAED,mBAAmB;IACnB,sBAEC;IAED,gBAAgB;IAChB,yCAQC;IAED,mBAAmB;IACnB,uBAEC;IAED,gBAAgB;IAChB,6BAIC;IAED,6CAyCC;IAED,mBAAmB;IACnB,sDAsBC;IAED,6BAA6B;IAC7B,8BAIC;IADC,6CAA4E;IAG9E,+BA0BC;IAED,8DA4BC;IAED,4BAA4B;IAC5B,0CA2EC;IAED,4BAA4B;IAC5B,2CAUC;IAED,kBAAkB;IAClB,+CAOC;IAED,mBAAmB;IACnB,+BAoBC;IAED,iCAAiC;IACjC,4CAIC;CACF;6BAtZ0B,eAAe;kCACV,YAAY"}
|
package/build/can-can.js
CHANGED
|
@@ -5,6 +5,7 @@ import { ReadersWriterLock } from "epic-locks";
|
|
|
5
5
|
import { digg } from "diggerize";
|
|
6
6
|
import Services from "./services.js";
|
|
7
7
|
const shared = {};
|
|
8
|
+
/** Ability helper and query mapper. */
|
|
8
9
|
export default class ApiMakerCanCan {
|
|
9
10
|
abilities = [];
|
|
10
11
|
abilitiesToLoad = [];
|
|
@@ -21,11 +22,13 @@ export default class ApiMakerCanCan {
|
|
|
21
22
|
lock = new ReadersWriterLock();
|
|
22
23
|
abilitiesByName = new Map();
|
|
23
24
|
debugTokens = new Set();
|
|
25
|
+
/** current. */
|
|
24
26
|
static current() {
|
|
25
27
|
if (!shared.currentApiMakerCanCan)
|
|
26
28
|
shared.currentApiMakerCanCan = new ApiMakerCanCan();
|
|
27
29
|
return shared.currentApiMakerCanCan;
|
|
28
30
|
}
|
|
31
|
+
/** can. */
|
|
29
32
|
can(ability, subject, options = {}) {
|
|
30
33
|
const foundAbility = this.findAbility(ability, subject);
|
|
31
34
|
if (foundAbility === undefined) {
|
|
@@ -45,6 +48,7 @@ export default class ApiMakerCanCan {
|
|
|
45
48
|
return digg(foundAbility, "can");
|
|
46
49
|
}
|
|
47
50
|
}
|
|
51
|
+
/** recordMissingAbility. */
|
|
48
52
|
recordMissingAbility(ability, subject) {
|
|
49
53
|
let missingAbilitySet = this.missingAbilities.get(subject);
|
|
50
54
|
if (!missingAbilitySet) {
|
|
@@ -56,11 +60,13 @@ export default class ApiMakerCanCan {
|
|
|
56
60
|
missingAbilitySet.add(ability);
|
|
57
61
|
this.queueMissingAbilitiesLoad();
|
|
58
62
|
}
|
|
63
|
+
/** queueMissingAbilitiesLoad. */
|
|
59
64
|
queueMissingAbilitiesLoad() {
|
|
60
65
|
if (this.missingAbilitiesTimeout)
|
|
61
66
|
return;
|
|
62
67
|
this.missingAbilitiesTimeout = setTimeout(this.loadMissingAbilities, 0);
|
|
63
68
|
}
|
|
69
|
+
/** loadMissingAbilities. */
|
|
64
70
|
loadMissingAbilities = () => {
|
|
65
71
|
const missingAbilities = this.missingAbilities;
|
|
66
72
|
this.missingAbilities = new Map();
|
|
@@ -73,21 +79,26 @@ export default class ApiMakerCanCan {
|
|
|
73
79
|
this.loadAbilities(abilitiesToLoad);
|
|
74
80
|
}
|
|
75
81
|
};
|
|
82
|
+
/** findAbility. */
|
|
76
83
|
findAbility(ability, subject) {
|
|
77
84
|
const abilityKey = this.abilityKey(ability, subject);
|
|
78
85
|
if (!abilityKey)
|
|
79
86
|
return undefined;
|
|
80
87
|
return this.abilitiesByName.get(abilityKey);
|
|
81
88
|
}
|
|
89
|
+
/** isAbilityLoaded. */
|
|
82
90
|
isAbilityLoaded(ability, subject) {
|
|
83
91
|
return this.findAbility(ability, subject) !== undefined;
|
|
84
92
|
}
|
|
93
|
+
/** isReloading. */
|
|
85
94
|
isReloading() {
|
|
86
95
|
return this.loadingCount > 0 || this.resettingGeneration !== null;
|
|
87
96
|
}
|
|
97
|
+
/** getCacheKey. */
|
|
88
98
|
getCacheKey() {
|
|
89
99
|
return this.cacheKey;
|
|
90
100
|
}
|
|
101
|
+
/** setDebug. */
|
|
91
102
|
setDebug(token, enabled) {
|
|
92
103
|
if (!token)
|
|
93
104
|
return;
|
|
@@ -98,9 +109,11 @@ export default class ApiMakerCanCan {
|
|
|
98
109
|
this.debugTokens.delete(token);
|
|
99
110
|
}
|
|
100
111
|
}
|
|
112
|
+
/** isDebugging. */
|
|
101
113
|
isDebugging() {
|
|
102
114
|
return this.debugTokens.size > 0;
|
|
103
115
|
}
|
|
116
|
+
/** debugLog. */
|
|
104
117
|
debugLog(message) {
|
|
105
118
|
if (this.isDebugging()) {
|
|
106
119
|
console.log(message);
|
|
@@ -146,6 +159,7 @@ export default class ApiMakerCanCan {
|
|
|
146
159
|
this.resettingGeneration = null;
|
|
147
160
|
}
|
|
148
161
|
}
|
|
162
|
+
/** loadAbility. */
|
|
149
163
|
loadAbility(ability, subject) {
|
|
150
164
|
return new Promise((resolve) => {
|
|
151
165
|
const normalizedAbility = inflection.underscore(ability);
|
|
@@ -165,6 +179,7 @@ export default class ApiMakerCanCan {
|
|
|
165
179
|
}
|
|
166
180
|
});
|
|
167
181
|
}
|
|
182
|
+
/** queueAbilitiesRequest. */
|
|
168
183
|
queueAbilitiesRequest() {
|
|
169
184
|
if (this.queueAbilitiesRequestTimeout)
|
|
170
185
|
return;
|
|
@@ -209,6 +224,7 @@ export default class ApiMakerCanCan {
|
|
|
209
224
|
`requests=${abilities.length}`
|
|
210
225
|
].join("; ");
|
|
211
226
|
this.debugLog(reloadSummary);
|
|
227
|
+
/** promise. */
|
|
212
228
|
const promise = (async () => {
|
|
213
229
|
await this.resetAbilities();
|
|
214
230
|
await this.loadAbilities(abilities);
|
|
@@ -224,6 +240,7 @@ export default class ApiMakerCanCan {
|
|
|
224
240
|
this.reloadPromises.delete(reloadKey);
|
|
225
241
|
}
|
|
226
242
|
}
|
|
243
|
+
/** sendAbilitiesRequest. */
|
|
227
244
|
sendAbilitiesRequest = async () => {
|
|
228
245
|
this.queueAbilitiesRequestTimeout = null;
|
|
229
246
|
const generation = this.abilitiesGeneration;
|
|
@@ -290,6 +307,7 @@ export default class ApiMakerCanCan {
|
|
|
290
307
|
}
|
|
291
308
|
}
|
|
292
309
|
};
|
|
310
|
+
/** indexAbilitiesByName. */
|
|
293
311
|
indexAbilitiesByName(abilities) {
|
|
294
312
|
for (const abilityData of abilities) {
|
|
295
313
|
if (abilityData && typeof abilityData == "object") {
|
|
@@ -300,6 +318,7 @@ export default class ApiMakerCanCan {
|
|
|
300
318
|
}
|
|
301
319
|
}
|
|
302
320
|
}
|
|
321
|
+
/** abilityKey. */
|
|
303
322
|
abilityKey(ability, subject) {
|
|
304
323
|
if (!ability)
|
|
305
324
|
return null;
|
|
@@ -308,6 +327,7 @@ export default class ApiMakerCanCan {
|
|
|
308
327
|
return null;
|
|
309
328
|
return `${inflection.underscore(ability)}:${subjectName}`;
|
|
310
329
|
}
|
|
330
|
+
/** subjectName. */
|
|
311
331
|
subjectName(subject) {
|
|
312
332
|
if (!subject)
|
|
313
333
|
return null;
|
|
@@ -325,10 +345,11 @@ export default class ApiMakerCanCan {
|
|
|
325
345
|
}
|
|
326
346
|
return null;
|
|
327
347
|
}
|
|
348
|
+
/** reportUnhandledAsyncError. */
|
|
328
349
|
reportUnhandledAsyncError(error) {
|
|
329
350
|
if (!error)
|
|
330
351
|
return;
|
|
331
352
|
Promise.reject(error);
|
|
332
353
|
}
|
|
333
354
|
}
|
|
334
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuLWNhbi5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiY2FuLWNhbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FBaUM7QUFDakMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFDNUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUM5QixPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUE7QUFFcEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO0FBRWpCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBYztJQUNqQyxTQUFTLEdBQUcsRUFBRSxDQUFBO0lBQ2QsZUFBZSxHQUFHLEVBQUUsQ0FBQTtJQUNwQixtQkFBbUIsR0FBRyxFQUFFLENBQUE7SUFDeEIsbUJBQW1CLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZCLFFBQVEsR0FBRyxDQUFDLENBQUE7SUFDWixZQUFZLEdBQUcsQ0FBQyxDQUFBO0lBQ2hCLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFDNUIsdUJBQXVCLEdBQUcsSUFBSSxDQUFBO0lBQzlCLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQzFCLFlBQVksR0FBRyxJQUFJLENBQUE7SUFDbkIsbUJBQW1CLEdBQUcsSUFBSSxDQUFBO0lBQzFCLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO0lBQzNCLElBQUksR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUE7SUFDOUIsZUFBZSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFDM0IsV0FBVyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFFdkIsTUFBTSxDQUFDLE9BQU87UUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQjtZQUFFLE1BQU0sQ0FBQyxxQkFB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QUUsQ0FBQztZQUNqQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUE7UUFDckIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELHlCQUF5QixDQUFFLEtBQUs7UUFDOUIsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFNO1FBRWxCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgc29ydC1pbXBvcnRzICovXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tIFwiZXZlbnRlbWl0dGVyM1wiXG5pbXBvcnQge1JlYWRlcnNXcml0ZXJMb2NrfSBmcm9tIFwiZXBpYy1sb2Nrc1wiXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IFNlcnZpY2VzIGZyb20gXCIuL3NlcnZpY2VzLmpzXCJcblxuY29uc3Qgc2hhcmVkID0ge31cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJDYW5DYW4ge1xuICBhYmlsaXRpZXMgPSBbXVxuICBhYmlsaXRpZXNUb0xvYWQgPSBbXVxuICBhYmlsaXRpZXNUb0xvYWREYXRhID0gW11cbiAgYWJpbGl0aWVzR2VuZXJhdGlvbiA9IDBcbiAgY2FjaGVLZXkgPSAwXG4gIGxvYWRpbmdDb3VudCA9IDBcbiAgbWlzc2luZ0FiaWxpdGllcyA9IG5ldyBNYXAoKVxuICBtaXNzaW5nQWJpbGl0aWVzVGltZW91dCA9IG51bGxcbiAgcmVsb2FkUHJvbWlzZXMgPSBuZXcgTWFwKClcbiAgcmVzZXRQcm9taXNlID0gbnVsbFxuICByZXNldHRpbmdHZW5lcmF0aW9uID0gbnVsbFxuICBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgbG9jayA9IG5ldyBSZWFkZXJzV3JpdGVyTG9jaygpXG4gIGFiaWxpdGllc0J5TmFtZSA9IG5ldyBNYXAoKVxuICBkZWJ1Z1Rva2VucyA9IG5ldyBTZXQoKVxuXG4gIHN0YXRpYyBjdXJyZW50ICgpIHtcbiAgICBpZiAoIXNoYXJlZC5jdXJyZW50QXBpTWFrZXJDYW5DYW4pIHNoYXJlZC5jdXJyZW50QXBpTWFrZXJDYW5DYW4gPSBuZXcgQXBpTWFrZXJDYW5DYW4oKVxuXG4gICAgcmV0dXJuIHNoYXJlZC5jdXJyZW50QXBpTWFrZXJDYW5DYW5cbiAgfVxuXG4gIGNhbiAoYWJpbGl0eSwgc3ViamVjdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgZm91bmRBYmlsaXR5ID0gdGhpcy5maW5kQWJpbGl0eShhYmlsaXR5LCBzdWJqZWN0KVxuXG4gICAgaWYgKGZvdW5kQWJpbGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkQWJpbGl0eSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShhYmlsaXR5KVxuICAgICAgdGhpcy5yZWNvcmRNaXNzaW5nQWJpbGl0eShub3JtYWxpemVkQWJpbGl0eSwgc3ViamVjdClcblxuICAgICAgaWYgKG9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgbGV0IHN1YmplY3RMYWJlbCA9IHN1YmplY3RcblxuICAgICAgICAvLyBUcmFuc2xhdGUgcmVzb3VyY2UtbW9kZWxzIGludG8gY2xhc3MgbmFtZSBzdHJpbmdzXG4gICAgICAgIGlmICh0eXBlb2Ygc3ViamVjdCA9PSBcImZ1bmN0aW9uXCIgJiYgc3ViamVjdC5tb2RlbENsYXNzRGF0YSkge1xuICAgICAgICAgIHN1YmplY3RMYWJlbCA9IGRpZ2coc3ViamVjdC5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEFiaWxpdHkgbm90IGxvYWRlZCAke3N1YmplY3RMYWJlbH0jJHtub3JtYWxpemVkQWJpbGl0eX1gLCB7YWJpbGl0aWVzOiB0aGlzLmFiaWxpdGllcywgYWJpbGl0eSwgc3ViamVjdH0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkaWdnKGZvdW5kQWJpbGl0eSwgXCJjYW5cIilcbiAgICB9XG4gIH1cblxuICByZWNvcmRNaXNzaW5nQWJpbGl0eSAoYWJpbGl0eSwgc3ViamVjdCkge1xuICAgIGxldCBtaXNzaW5nQWJpbGl0eVNldCA9IHRoaXMubWlzc2luZ0FiaWxpdGllcy5nZXQoc3ViamVjdClcblxuICAgIGlmICghbWlzc2luZ0FiaWxpdHlTZXQpIHtcbiAgICAgIG1pc3NpbmdBYmlsaXR5U2V0ID0gbmV3IFNldCgpXG4gICAgICB0aGlzLm1pc3NpbmdBYmlsaXRpZXMuc2V0KHN1YmplY3QsIG1pc3NpbmdBYmlsaXR5U2V0KVxuICAgIH1cblxuICAgIGlmIChtaXNzaW5nQWJpbGl0eVNldC5oYXMoYWJpbGl0eSkpIHJldHVyblxuXG4gICAgbWlzc2luZ0FiaWxpdHlTZXQuYWRkKGFiaWxpdHkpXG4gICAgdGhpcy5xdWV1ZU1pc3NpbmdBYmlsaXRpZXNMb2FkKClcbiAgfVxuXG4gIHF1ZXVlTWlzc2luZ0FiaWxpdGllc0xvYWQgKCkge1xuICAgIGlmICh0aGlzLm1pc3NpbmdBYmlsaXRpZXNUaW1lb3V0KSByZXR1cm5cblxuICAgIHRoaXMubWlzc2luZ0FiaWxpdGllc1RpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMubG9hZE1pc3NpbmdBYmlsaXRpZXMsIDApXG4gIH1cblxuICBsb2FkTWlzc2luZ0FiaWxpdGllcyA9ICgpID0+IHtcbiAgICBjb25zdCBtaXNzaW5nQWJpbGl0aWVzID0gdGhpcy5taXNzaW5nQWJpbGl0aWVzXG5cbiAgICB0aGlzLm1pc3NpbmdBYmlsaXRpZXMgPSBuZXcgTWFwKClcbiAgICB0aGlzLm1pc3NpbmdBYmlsaXRpZXNUaW1lb3V0ID0gbnVsbFxuXG4gICAgY29uc3QgYWJpbGl0aWVzVG9Mb2FkID0gW11cblxuICAgIGZvciAoY29uc3QgW3N1YmplY3QsIGFiaWxpdGllc10gb2YgbWlzc2luZ0FiaWxpdGllcy5lbnRyaWVzKCkpIHtcbiAgICAgIGFiaWxpdGllc1RvTG9hZC5wdXNoKFtzdWJqZWN0LCBBcnJheS5mcm9tKGFiaWxpdGllcyldKVxuICAgIH1cblxuICAgIGlmIChhYmlsaXRpZXNUb0xvYWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5sb2FkQWJpbGl0aWVzKGFiaWxpdGllc1RvTG9hZClcbiAgICB9XG4gIH1cblxuICBmaW5kQWJpbGl0eSAoYWJpbGl0eSwgc3ViamVjdCkge1xuICAgIGNvbnN0IGFiaWxpdHlLZXkgPSB0aGlzLmFiaWxpdHlLZXkoYWJpbGl0eSwgc3ViamVjdClcbiAgICBpZiAoIWFiaWxpdHlLZXkpIHJldHVybiB1bmRlZmluZWRcblxuICAgIHJldHVybiB0aGlzLmFiaWxpdGllc0J5TmFtZS5nZXQoYWJpbGl0eUtleSlcbiAgfVxuXG4gIGlzQWJpbGl0eUxvYWRlZCAoYWJpbGl0eSwgc3ViamVjdCkge1xuICAgIHJldHVybiB0aGlzLmZpbmRBYmlsaXR5KGFiaWxpdHksIHN1YmplY3QpICE9PSB1bmRlZmluZWRcbiAgfVxuXG4gIGlzUmVsb2FkaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwIHx8IHRoaXMucmVzZXR0aW5nR2VuZXJhdGlvbiAhPT0gbnVsbFxuICB9XG5cbiAgZ2V0Q2FjaGVLZXkgKCkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlS2V5XG4gIH1cblxuICBzZXREZWJ1ZyAodG9rZW4sIGVuYWJsZWQpIHtcbiAgICBpZiAoIXRva2VuKSByZXR1cm5cblxuICAgIGlmIChlbmFibGVkKSB7XG4gICAgICB0aGlzLmRlYnVnVG9rZW5zLmFkZCh0b2tlbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWJ1Z1Rva2Vucy5kZWxldGUodG9rZW4pXG4gICAgfVxuICB9XG5cbiAgaXNEZWJ1Z2dpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLmRlYnVnVG9rZW5zLnNpemUgPiAwXG4gIH1cblxuICBkZWJ1Z0xvZyAobWVzc2FnZSkge1xuICAgIGlmICh0aGlzLmlzRGVidWdnaW5nKCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZEFiaWxpdGllcyAoYWJpbGl0aWVzKSB7XG4gICAgY29uc3QgZ2VuZXJhdGlvbiA9IHRoaXMuYWJpbGl0aWVzR2VuZXJhdGlvblxuICAgIGNvbnN0IGxvYWRTdW1tYXJ5ID0gW1xuICAgICAgXCJbY2FuLWNhbi1kZWJ1Z10gbG9hZEFiaWxpdGllczpzdGFydFwiLFxuICAgICAgYGdlbmVyYXRpb249JHtnZW5lcmF0aW9ufWAsXG4gICAgICBgcmVxdWVzdHM9JHthYmlsaXRpZXMubGVuZ3RofWBcbiAgICBdLmpvaW4oXCI7IFwiKVxuICAgIHRoaXMuZGVidWdMb2cobG9hZFN1bW1hcnkpXG5cbiAgICB0aGlzLmxvYWRpbmdDb3VudCArPSAxXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5sb2NrLnJlYWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCBhYmlsaXR5RGF0YSBvZiBhYmlsaXRpZXMpIHtcbiAgICAgICAgICBjb25zdCBzdWJqZWN0ID0gYWJpbGl0eURhdGFbMF1cblxuICAgICAgICAgIGlmICghc3ViamVjdCkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN1YmplY3QgZ2l2ZW4gaW4gYWJpbGl0aWVzOiAke3N1YmplY3R9IC0gJHtKU09OLnN0cmluZ2lmeShhYmlsaXRpZXMpfWApXG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFiaWxpdHlEYXRhWzFdKSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhbiBhcnJheSBvZiBhYmlsaXRpZXMgYnV0IGdvdDogJHt0eXBlb2YgYWJpbGl0eURhdGFbMV19OiAke2FiaWxpdHlEYXRhWzFdfWApXG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGFiaWxpdHkgb2YgYWJpbGl0eURhdGFbMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLmxvYWRBYmlsaXR5KGFiaWxpdHksIHN1YmplY3QpXG5cbiAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgIH0pXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNvbnN0IGRvbmVTdW1tYXJ5ID0gW1xuICAgICAgICBcIltjYW4tY2FuLWRlYnVnXSBsb2FkQWJpbGl0aWVzOmRvbmVcIixcbiAgICAgICAgYGdlbmVyYXRpb249JHtnZW5lcmF0aW9ufWAsXG4gICAgICAgIGBjdXJyZW50R2VuZXJhdGlvbj0ke3RoaXMuYWJpbGl0aWVzR2VuZXJhdGlvbn1gLFxuICAgICAgICBgbG9hZGluZ0NvdW50PSR7dGhpcy5sb2FkaW5nQ291bnR9YFxuICAgICAgXS5qb2luKFwiOyBcIilcbiAgICAgIHRoaXMuZGVidWdMb2coZG9uZVN1bW1hcnkpXG4gICAgICBpZiAodGhpcy5sb2FkaW5nQ291bnQgPiAwKSB0aGlzLmxvYWRpbmdDb3VudCAtPSAxXG4gICAgICBpZiAodGhpcy5yZXNldHRpbmdHZW5lcmF0aW9uID09PSBnZW5lcmF0aW9uKSB0aGlzLnJlc2V0dGluZ0dlbmVyYXRpb24gPSBudWxsXG4gICAgfVxuICB9XG5cbiAgbG9hZEFiaWxpdHkgKGFiaWxpdHksIHN1YmplY3QpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRBYmlsaXR5ID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKGFiaWxpdHkpXG5cbiAgICAgIGlmICh0aGlzLmlzQWJpbGl0eUxvYWRlZChub3JtYWxpemVkQWJpbGl0eSwgc3ViamVjdCkpIHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3VuZEFiaWxpdHkgPSB0aGlzLmFiaWxpdGllc1RvTG9hZC5maW5kKChhYmlsaXR5VG9Mb2FkKSA9PiBkaWdnKGFiaWxpdHlUb0xvYWQsIFwiYWJpbGl0eVwiKSA9PSBub3JtYWxpemVkQWJpbGl0eSAmJlxuICAgICAgICBkaWdnKGFiaWxpdHlUb0xvYWQsIFwic3ViamVjdFwiKSA9PSBzdWJqZWN0XG4gICAgICApXG5cbiAgICAgIGlmIChmb3VuZEFiaWxpdHkpIHtcbiAgICAgICAgZm91bmRBYmlsaXR5LmNhbGxiYWNrcy5wdXNoKHJlc29sdmUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFiaWxpdGllc1RvTG9hZC5wdXNoKHthYmlsaXR5OiBub3JtYWxpemVkQWJpbGl0eSwgY2FsbGJhY2tzOiBbcmVzb2x2ZV0sIHN1YmplY3R9KVxuICAgICAgICB0aGlzLmFiaWxpdGllc1RvTG9hZERhdGEucHVzaCh7YWJpbGl0eTogbm9ybWFsaXplZEFiaWxpdHksIHN1YmplY3R9KVxuXG4gICAgICAgIHRoaXMucXVldWVBYmlsaXRpZXNSZXF1ZXN0KClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcXVldWVBYmlsaXRpZXNSZXF1ZXN0ICgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZUFiaWxpdGllc1JlcXVlc3RUaW1lb3V0KSByZXR1cm5cblxuICAgIHRoaXMucXVldWVBYmlsaXRpZXNSZXF1ZXN0VGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5zZW5kQWJpbGl0aWVzUmVxdWVzdCwgMClcbiAgfVxuXG4gIGFzeW5jIHJlc2V0QWJpbGl0aWVzICgpIHtcbiAgICBpZiAodGhpcy5yZXNldFByb21pc2UpIHJldHVybiB0aGlzLnJlc2V0UHJvbWlzZVxuXG4gICAgdGhpcy5yZXNldFByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5sb2NrLndyaXRlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hYmlsaXRpZXMgPSBbXVxuICAgICAgICB0aGlzLmFiaWxpdGllc0J5TmFtZSA9IG5ldyBNYXAoKVxuICAgICAgICB0aGlzLmFiaWxpdGllc0dlbmVyYXRpb24gKz0gMVxuICAgICAgICB0aGlzLnJlc2V0dGluZ0dlbmVyYXRpb24gPSB0aGlzLmFiaWxpdGllc0dlbmVyYXRpb25cbiAgICAgICAgdGhpcy5jYWNoZUtleSArPSAxXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzZXRTdW1tYXJ5ID0gW1xuICAgICAgICBcIltjYW4tY2FuLWRlYnVnXSByZXNldEFiaWxpdGllc1wiLFxuICAgICAgICBgZ2VuZXJhdGlvbj0ke3RoaXMuYWJpbGl0aWVzR2VuZXJhdGlvbn1gLFxuICAgICAgICBgY2FjaGVLZXk9JHt0aGlzLmNhY2hlS2V5fWAsXG4gICAgICAgIGBxdWV1ZWQ9JHt0aGlzLmFiaWxpdGllc1RvTG9hZERhdGEubGVuZ3RofWBcbiAgICAgIF0uam9pbihcIjsgXCIpXG4gICAgICB0aGlzLmRlYnVnTG9nKHJlc2V0U3VtbWFyeSlcbiAgICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJvblJlc2V0QWJpbGl0aWVzXCIpXG4gICAgfSkoKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucmVzZXRQcm9taXNlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMucmVzZXRQcm9taXNlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbG9hZEFiaWxpdGllcyAoYWJpbGl0aWVzLCByZWxvYWRLZXkpIHtcbiAgICBpZiAocmVsb2FkS2V5ICYmIHRoaXMucmVsb2FkUHJvbWlzZXMuaGFzKHJlbG9hZEtleSkpIHtcbiAgICAgIHRoaXMuZGVidWdMb2coYFtjYW4tY2FuLWRlYnVnXSByZWxvYWRBYmlsaXRpZXM6ZGVkdXBlIHJlbG9hZEtleT0ke3JlbG9hZEtleX1gKVxuICAgICAgcmV0dXJuIHRoaXMucmVsb2FkUHJvbWlzZXMuZ2V0KHJlbG9hZEtleSlcbiAgICB9XG5cbiAgICBjb25zdCByZWxvYWRTdW1tYXJ5ID0gW1xuICAgICAgXCJbY2FuLWNhbi1kZWJ1Z10gcmVsb2FkQWJpbGl0aWVzOnN0YXJ0XCIsXG4gICAgICBgcmVsb2FkS2V5PSR7cmVsb2FkS2V5IHx8IFwibm9uZVwifWAsXG4gICAgICBgZ2VuZXJhdGlvbj0ke3RoaXMuYWJpbGl0aWVzR2VuZXJhdGlvbn1gLFxuICAgICAgYHJlcXVlc3RzPSR7YWJpbGl0aWVzLmxlbmd0aH1gXG4gICAgXS5qb2luKFwiOyBcIilcbiAgICB0aGlzLmRlYnVnTG9nKHJlbG9hZFN1bW1hcnkpXG5cbiAgICBjb25zdCBwcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMucmVzZXRBYmlsaXRpZXMoKVxuICAgICAgYXdhaXQgdGhpcy5sb2FkQWJpbGl0aWVzKGFiaWxpdGllcylcbiAgICB9KSgpXG5cbiAgICBpZiAocmVsb2FkS2V5KSB0aGlzLnJlbG9hZFByb21pc2VzLnNldChyZWxvYWRLZXksIHByb21pc2UpXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgcHJvbWlzZVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmRlYnVnTG9nKGBbY2FuLWNhbi1kZWJ1Z10gcmVsb2FkQWJpbGl0aWVzOmRvbmUgcmVsb2FkS2V5PSR7cmVsb2FkS2V5IHx8IFwibm9uZVwifTsgZ2VuZXJhdGlvbj0ke3RoaXMuYWJpbGl0aWVzR2VuZXJhdGlvbn1gKVxuICAgICAgaWYgKHJlbG9hZEtleSkgdGhpcy5yZWxvYWRQcm9taXNlcy5kZWxldGUocmVsb2FkS2V5KVxuICAgIH1cbiAgfVxuXG4gIHNlbmRBYmlsaXRpZXNSZXF1ZXN0ID0gYXN5bmMgKCkgPT4ge1xuICAgIHRoaXMucXVldWVBYmlsaXRpZXNSZXF1ZXN0VGltZW91dCA9IG51bGxcbiAgICBjb25zdCBnZW5lcmF0aW9uID0gdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uXG4gICAgY29uc3QgYWJpbGl0aWVzVG9Mb2FkID0gdGhpcy5hYmlsaXRpZXNUb0xvYWRcbiAgICBjb25zdCBhYmlsaXRpZXNUb0xvYWREYXRhID0gdGhpcy5hYmlsaXRpZXNUb0xvYWREYXRhXG5cbiAgICB0aGlzLmFiaWxpdGllc1RvTG9hZCA9IFtdXG4gICAgdGhpcy5hYmlsaXRpZXNUb0xvYWREYXRhID0gW11cbiAgICB0aGlzLmRlYnVnTG9nKGBbY2FuLWNhbi1kZWJ1Z10gc2VuZEFiaWxpdGllc1JlcXVlc3Q6c3RhcnQgZ2VuZXJhdGlvbj0ke2dlbmVyYXRpb259OyBxdWV1ZWQ9JHthYmlsaXRpZXNUb0xvYWREYXRhLmxlbmd0aH1gKVxuXG4gICAgbGV0IGFiaWxpdGllcyA9IFtdXG4gICAgbGV0IGRpZEZhaWwgPSBmYWxzZVxuICAgIGxldCByZXF1ZXN0RXJyb3JcblxuICAgIC8vIExvYWQgYWJpbGl0aWVzIGZyb20gYmFja2VuZFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBTZXJ2aWNlcy5jdXJyZW50KCkuc2VuZFJlcXVlc3QoXCJDYW5DYW46OkxvYWRBYmlsaXRpZXNcIiwge1xuICAgICAgICByZXF1ZXN0OiBhYmlsaXRpZXNUb0xvYWREYXRhXG4gICAgICB9KVxuICAgICAgYWJpbGl0aWVzID0gZGlnZyhyZXN1bHQsIFwiYWJpbGl0aWVzXCIpXG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhYmlsaXRpZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgQ2FuQ2FuOjpMb2FkQWJpbGl0aWVzIHJlc3BvbnNlIGFiaWxpdGllcyB0byBiZSBhbiBhcnJheSwgZ290OiAke3R5cGVvZiBhYmlsaXRpZXN9YClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZGlkRmFpbCA9IHRydWVcbiAgICAgIHJlcXVlc3RFcnJvciA9IGVycm9yXG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGxvYWQgYWJpbGl0aWVzXCIsIGVycm9yKVxuICAgIH1cblxuICAgIGlmIChnZW5lcmF0aW9uICE9PSB0aGlzLmFiaWxpdGllc0dlbmVyYXRpb24pIHtcbiAgICAgIGNvbnN0IHN0YWxlUmVzcG9uc2VEZWJ1ZyA9IFtcbiAgICAgICAgXCJbY2FuLWNhbi1kZWJ1Z10gc2VuZEFiaWxpdGllc1JlcXVlc3Q6c3RhbGUtcmVzcG9uc2VcIixcbiAgICAgICAgYHJlcXVlc3RHZW5lcmF0aW9uPSR7Z2VuZXJhdGlvbn1gLFxuICAgICAgICBgY3VycmVudEdlbmVyYXRpb249JHt0aGlzLmFiaWxpdGllc0dlbmVyYXRpb259YCxcbiAgICAgICAgYHJlcXVldWU9JHthYmlsaXRpZXNUb0xvYWQubGVuZ3RofWBcbiAgICAgIF0uam9pbihcIjsgXCIpXG4gICAgICB0aGlzLmRlYnVnTG9nKHN0YWxlUmVzcG9uc2VEZWJ1ZylcbiAgICAgIGZvciAoY29uc3QgYWJpbGl0eURhdGEgb2YgYWJpbGl0aWVzVG9Mb2FkKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgYWJpbGl0eURhdGEuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgdGhpcy5sb2FkQWJpbGl0eShhYmlsaXR5RGF0YS5hYmlsaXR5LCBhYmlsaXR5RGF0YS5zdWJqZWN0KS50aGVuKGNhbGxiYWNrKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChkaWRGYWlsKSB7XG4gICAgICB0aGlzLmRlYnVnTG9nKGBbY2FuLWNhbi1kZWJ1Z10gc2VuZEFiaWxpdGllc1JlcXVlc3Q6ZmFpbGVkIGdlbmVyYXRpb249JHtnZW5lcmF0aW9ufTsgcXVldWVkPSR7YWJpbGl0aWVzVG9Mb2FkLmxlbmd0aH1gKVxuICAgICAgZm9yIChjb25zdCBhYmlsaXR5RGF0YSBvZiBhYmlsaXRpZXNUb0xvYWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBhYmlsaXR5RGF0YS5jYWxsYmFja3MpIHtcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVzb2x2ZSBjYWxsYmFja3MgdG8gYXZvaWQgZGVhZGxvY2tzIGZvciB3YWl0ZXJzIGV2ZW4gd2hlbiBsb2FkIGZhaWxlZC5cbiAgICAgIGlmIChyZXF1ZXN0RXJyb3IpIHRoaXMucmVwb3J0VW5oYW5kbGVkQXN5bmNFcnJvcihyZXF1ZXN0RXJyb3IpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGxvYWRlZCBhYmlsaXRpZXNcbiAgICB0aGlzLmFiaWxpdGllcyA9IHRoaXMuYWJpbGl0aWVzLmNvbmNhdChhYmlsaXRpZXMpXG4gICAgdGhpcy5pbmRleEFiaWxpdGllc0J5TmFtZShhYmlsaXRpZXMpXG4gICAgdGhpcy5jYWNoZUtleSArPSAxXG4gICAgdGhpcy5kZWJ1Z0xvZyhcbiAgICAgIGBbY2FuLWNhbi1kZWJ1Z10gc2VuZEFiaWxpdGllc1JlcXVlc3Q6c3VjY2VzcyBnZW5lcmF0aW9uPSR7Z2VuZXJhdGlvbn07IGxvYWRlZD0ke2FiaWxpdGllcy5sZW5ndGh9OyBjYWNoZUtleT0ke3RoaXMuY2FjaGVLZXl9YFxuICAgIClcbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwib25BYmlsaXRpZXNMb2FkZWRcIiwge2NhY2hlS2V5OiB0aGlzLmNhY2hlS2V5fSlcblxuICAgIC8vIENhbGwgdGhlIGNhbGxiYWNrcyB0aGF0IGFyZSB3YWl0aW5nIGZvciB0aGUgYWJpbGl0eSB0byBoYXZlIGJlZW4gbG9hZGVkXG4gICAgZm9yIChjb25zdCBhYmlsaXR5RGF0YSBvZiBhYmlsaXRpZXNUb0xvYWQpIHtcbiAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgYWJpbGl0eURhdGEuY2FsbGJhY2tzKSB7XG4gICAgICAgIGNhbGxiYWNrKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpbmRleEFiaWxpdGllc0J5TmFtZSAoYWJpbGl0aWVzKSB7XG4gICAgZm9yIChjb25zdCBhYmlsaXR5RGF0YSBvZiBhYmlsaXRpZXMpIHtcbiAgICAgIGlmIChhYmlsaXR5RGF0YSAmJiB0eXBlb2YgYWJpbGl0eURhdGEgPT0gXCJvYmplY3RcIikge1xuICAgICAgICBjb25zdCBhYmlsaXR5S2V5ID0gdGhpcy5hYmlsaXR5S2V5KGRpZ2coYWJpbGl0eURhdGEsIFwiYWJpbGl0eVwiKSwgZGlnZyhhYmlsaXR5RGF0YSwgXCJzdWJqZWN0XCIpKVxuXG4gICAgICAgIGlmIChhYmlsaXR5S2V5KSB7XG4gICAgICAgICAgdGhpcy5hYmlsaXRpZXNCeU5hbWUuc2V0KGFiaWxpdHlLZXksIGFiaWxpdHlEYXRhKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWJpbGl0eUtleSAoYWJpbGl0eSwgc3ViamVjdCkge1xuICAgIGlmICghYWJpbGl0eSkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IHN1YmplY3ROYW1lID0gdGhpcy5zdWJqZWN0TmFtZShzdWJqZWN0KVxuICAgIGlmICghc3ViamVjdE5hbWUpIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4gYCR7aW5mbGVjdGlvbi51bmRlcnNjb3JlKGFiaWxpdHkpfToke3N1YmplY3ROYW1lfWBcbiAgfVxuXG4gIHN1YmplY3ROYW1lKHN1YmplY3QpIHtcbiAgICBpZiAoIXN1YmplY3QpIHJldHVybiBudWxsXG5cbiAgICBpZiAodHlwZW9mIHN1YmplY3QgPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHN1YmplY3RcbiAgICB9XG5cbiAgICBpZiAoc3ViamVjdC5tb2RlbENsYXNzRGF0YSkge1xuICAgICAgcmV0dXJuIGRpZ2coc3ViamVjdC5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIilcbiAgICB9XG5cbiAgICBpZiAoc3ViamVjdC5yZXNvdXJjZURhdGEpIHtcbiAgICAgIHJldHVybiBkaWdnKHN1YmplY3QucmVzb3VyY2VEYXRhKCksIFwibmFtZVwiKVxuICAgIH1cblxuICAgIGlmIChzdWJqZWN0Lm5hbWUpIHtcbiAgICAgIHJldHVybiBzdWJqZWN0Lm5hbWVcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmVwb3J0VW5oYW5kbGVkQXN5bmNFcnJvciAoZXJyb3IpIHtcbiAgICBpZiAoIWVycm9yKSByZXR1cm5cblxuICAgIFByb21pc2UucmVqZWN0KGVycm9yKVxuICB9XG59XG4iXX0=
|
|
355
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuLWNhbi5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiY2FuLWNhbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FBaUM7QUFDakMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFDNUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUM5QixPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUE7QUFFcEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO0FBRWpCLHVDQUF1QztBQUN2QyxNQUFNLENBQUMsT0FBTyxPQUFPLGNBQWM7SUFDakMsU0FBUyxHQUFHLEVBQUUsQ0FBQTtJQUNkLGVBQWUsR0FBRyxFQUFFLENBQUE7SUFDcEIsbUJBQW1CLEdBQUcsRUFBRSxDQUFBO0lBQ3hCLG1CQUFtQixHQUFHLENBQUMsQ0FBQTtJQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFBO0lBQ1osWUFBWSxHQUFHLENBQUMsQ0FBQTtJQUNoQixnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQzVCLHVCQUF1QixHQUFHLElBQUksQ0FBQTtJQUM5QixjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUMxQixZQUFZLEdBQUcsSUFBSSxDQUFBO0lBQ25CLG1CQUFtQixHQUFHLElBQUksQ0FBQTtJQUMxQixNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQTtJQUMzQixJQUFJLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFBO0lBQzlCLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQzNCLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBRXZCLGVBQWU7SUFDZixNQUFNLENBQUMsT0FBTztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMscUJB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QUNoQixDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQy9DLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDN0MsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQTtRQUNyQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLHlCQUF5QixDQUFFLEtBQUs7UUFDOUIsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFNO1FBRWxCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgc29ydC1pbXBvcnRzICovXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tIFwiZXZlbnRlbWl0dGVyM1wiXG5pbXBvcnQge1JlYWRlcnNXcml0ZXJMb2NrfSBmcm9tIFwiZXBpYy1sb2Nrc1wiXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IFNlcnZpY2VzIGZyb20gXCIuL3NlcnZpY2VzLmpzXCJcblxuY29uc3Qgc2hhcmVkID0ge31cblxuLyoqIEFiaWxpdHkgaGVscGVyIGFuZCBxdWVyeSBtYXBwZXIuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlNYWtlckNhbkNhbiB7XG4gIGFiaWxpdGllcyA9IFtdXG4gIGFiaWxpdGllc1RvTG9hZCA9IFtdXG4gIGFiaWxpdGllc1RvTG9hZERhdGEgPSBbXVxuICBhYmlsaXRpZXNHZW5lcmF0aW9uID0gMFxuICBjYWNoZUtleSA9IDBcbiAgbG9hZGluZ0NvdW50ID0gMFxuICBtaXNzaW5nQWJpbGl0aWVzID0gbmV3IE1hcCgpXG4gIG1pc3NpbmdBYmlsaXRpZXNUaW1lb3V0ID0gbnVsbFxuICByZWxvYWRQcm9taXNlcyA9IG5ldyBNYXAoKVxuICByZXNldFByb21pc2UgPSBudWxsXG4gIHJlc2V0dGluZ0dlbmVyYXRpb24gPSBudWxsXG4gIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBsb2NrID0gbmV3IFJlYWRlcnNXcml0ZXJMb2NrKClcbiAgYWJpbGl0aWVzQnlOYW1lID0gbmV3IE1hcCgpXG4gIGRlYnVnVG9rZW5zID0gbmV3IFNldCgpXG5cbiAgLyoqIGN1cnJlbnQuICovXG4gIHN0YXRpYyBjdXJyZW50ICgpIHtcbiAgICBpZiAoIXNoYXJlZC5jdXJyZW50QXBpTWFrZXJDYW5DYW4pIHNoYXJlZC5jdXJyZW50QXBpTWFrZXJDYW5DYW4gPSBuZXcgQXBpTWFrZXJDYW5DYW4oKVxuXG4gICAgcmV0dXJuIHNoYXJlZC5jdXJyZW50QXBpTWFrZXJDYW5DYW5cbiAgfVxuXG4gIC8qKiBjYW4uICovXG4gIGNhbiAoYWJpbGl0eSwgc3ViamVjdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgZm91bmRBYmlsaXR5ID0gdGhpcy5maW5kQWJpbGl0eShhYmlsaXR5LCBzdWJqZWN0KVxuXG4gICAgaWYgKGZvdW5kQWJpbGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkQWJpbGl0eSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShhYmlsaXR5KVxuICAgICAgdGhpcy5yZWNvcmRNaXNzaW5nQWJpbGl0eShub3JtYWxpemVkQWJpbGl0eSwgc3ViamVjdClcblxuICAgICAgaWYgKG9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgbGV0IHN1YmplY3RMYWJlbCA9IHN1YmplY3RcblxuICAgICAgICAvLyBUcmFuc2xhdGUgcmVzb3VyY2UtbW9kZWxzIGludG8gY2xhc3MgbmFtZSBzdHJpbmdzXG4gICAgICAgIGlmICh0eXBlb2Ygc3ViamVjdCA9PSBcImZ1bmN0aW9uXCIgJiYgc3ViamVjdC5tb2RlbENsYXNzRGF0YSkge1xuICAgICAgICAgIHN1YmplY3RMYWJlbCA9IGRpZ2coc3ViamVjdC5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEFiaWxpdHkgbm90IGxvYWRlZCAke3N1YmplY3RMYWJlbH0jJHtub3JtYWxpemVkQWJpbGl0eX1gLCB7YWJpbGl0aWVzOiB0aGlzLmFiaWxpdGllcywgYWJpbGl0eSwgc3ViamVjdH0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkaWdnKGZvdW5kQWJpbGl0eSwgXCJjYW5cIilcbiAgICB9XG4gIH1cblxuICAvKiogcmVjb3JkTWlzc2luZ0FiaWxpdHkuICovXG4gIHJlY29yZE1pc3NpbmdBYmlsaXR5IChhYmlsaXR5LCBzdWJqZWN0KSB7XG4gICAgbGV0IG1pc3NpbmdBYmlsaXR5U2V0ID0gdGhpcy5taXNzaW5nQWJpbGl0aWVzLmdldChzdWJqZWN0KVxuXG4gICAgaWYgKCFtaXNzaW5nQWJpbGl0eVNldCkge1xuICAgICAgbWlzc2luZ0FiaWxpdHlTZXQgPSBuZXcgU2V0KClcbiAgICAgIHRoaXMubWlzc2luZ0FiaWxpdGllcy5zZXQoc3ViamVjdCwgbWlzc2luZ0FiaWxpdHlTZXQpXG4gICAgfVxuXG4gICAgaWYgKG1pc3NpbmdBYmlsaXR5U2V0LmhhcyhhYmlsaXR5KSkgcmV0dXJuXG5cbiAgICBtaXNzaW5nQWJpbGl0eVNldC5hZGQoYWJpbGl0eSlcbiAgICB0aGlzLnF1ZXVlTWlzc2luZ0FiaWxpdGllc0xvYWQoKVxuICB9XG5cbiAgLyoqIHF1ZXVlTWlzc2luZ0FiaWxpdGllc0xvYWQuICovXG4gIHF1ZXVlTWlzc2luZ0FiaWxpdGllc0xvYWQgKCkge1xuICAgIGlmICh0aGlzLm1pc3NpbmdBYmlsaXRpZXNUaW1lb3V0KSByZXR1cm5cblxuICAgIHRoaXMubWlzc2luZ0FiaWxpdGllc1RpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMubG9hZE1pc3NpbmdBYmlsaXRpZXMsIDApXG4gIH1cblxuICAvKiogbG9hZE1pc3NpbmdBYmlsaXRpZXMuICovXG4gIGxvYWRNaXNzaW5nQWJpbGl0aWVzID0gKCkgPT4ge1xuICAgIGNvbnN0IG1pc3NpbmdBYmlsaXRpZXMgPSB0aGlzLm1pc3NpbmdBYmlsaXRpZXNcblxuICAgIHRoaXMubWlzc2luZ0FiaWxpdGllcyA9IG5ldyBNYXAoKVxuICAgIHRoaXMubWlzc2luZ0FiaWxpdGllc1RpbWVvdXQgPSBudWxsXG5cbiAgICBjb25zdCBhYmlsaXRpZXNUb0xvYWQgPSBbXVxuXG4gICAgZm9yIChjb25zdCBbc3ViamVjdCwgYWJpbGl0aWVzXSBvZiBtaXNzaW5nQWJpbGl0aWVzLmVudHJpZXMoKSkge1xuICAgICAgYWJpbGl0aWVzVG9Mb2FkLnB1c2goW3N1YmplY3QsIEFycmF5LmZyb20oYWJpbGl0aWVzKV0pXG4gICAgfVxuXG4gICAgaWYgKGFiaWxpdGllc1RvTG9hZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxvYWRBYmlsaXRpZXMoYWJpbGl0aWVzVG9Mb2FkKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBmaW5kQWJpbGl0eS4gKi9cbiAgZmluZEFiaWxpdHkgKGFiaWxpdHksIHN1YmplY3QpIHtcbiAgICBjb25zdCBhYmlsaXR5S2V5ID0gdGhpcy5hYmlsaXR5S2V5KGFiaWxpdHksIHN1YmplY3QpXG4gICAgaWYgKCFhYmlsaXR5S2V5KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICByZXR1cm4gdGhpcy5hYmlsaXRpZXNCeU5hbWUuZ2V0KGFiaWxpdHlLZXkpXG4gIH1cblxuICAvKiogaXNBYmlsaXR5TG9hZGVkLiAqL1xuICBpc0FiaWxpdHlMb2FkZWQgKGFiaWxpdHksIHN1YmplY3QpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kQWJpbGl0eShhYmlsaXR5LCBzdWJqZWN0KSAhPT0gdW5kZWZpbmVkXG4gIH1cblxuICAvKiogaXNSZWxvYWRpbmcuICovXG4gIGlzUmVsb2FkaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwIHx8IHRoaXMucmVzZXR0aW5nR2VuZXJhdGlvbiAhPT0gbnVsbFxuICB9XG5cbiAgLyoqIGdldENhY2hlS2V5LiAqL1xuICBnZXRDYWNoZUtleSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVLZXlcbiAgfVxuXG4gIC8qKiBzZXREZWJ1Zy4gKi9cbiAgc2V0RGVidWcgKHRva2VuLCBlbmFibGVkKSB7XG4gICAgaWYgKCF0b2tlbikgcmV0dXJuXG5cbiAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgdGhpcy5kZWJ1Z1Rva2Vucy5hZGQodG9rZW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVidWdUb2tlbnMuZGVsZXRlKHRva2VuKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBpc0RlYnVnZ2luZy4gKi9cbiAgaXNEZWJ1Z2dpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLmRlYnVnVG9rZW5zLnNpemUgPiAwXG4gIH1cblxuICAvKiogZGVidWdMb2cuICovXG4gIGRlYnVnTG9nIChtZXNzYWdlKSB7XG4gICAgaWYgKHRoaXMuaXNEZWJ1Z2dpbmcoKSkge1xuICAgICAgY29uc29sZS5sb2cobWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkQWJpbGl0aWVzIChhYmlsaXRpZXMpIHtcbiAgICBjb25zdCBnZW5lcmF0aW9uID0gdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uXG4gICAgY29uc3QgbG9hZFN1bW1hcnkgPSBbXG4gICAgICBcIltjYW4tY2FuLWRlYnVnXSBsb2FkQWJpbGl0aWVzOnN0YXJ0XCIsXG4gICAgICBgZ2VuZXJhdGlvbj0ke2dlbmVyYXRpb259YCxcbiAgICAgIGByZXF1ZXN0cz0ke2FiaWxpdGllcy5sZW5ndGh9YFxuICAgIF0uam9pbihcIjsgXCIpXG4gICAgdGhpcy5kZWJ1Z0xvZyhsb2FkU3VtbWFyeSlcblxuICAgIHRoaXMubG9hZGluZ0NvdW50ICs9IDFcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmxvY2sucmVhZChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW11cblxuICAgICAgICBmb3IgKGNvbnN0IGFiaWxpdHlEYXRhIG9mIGFiaWxpdGllcykge1xuICAgICAgICAgIGNvbnN0IHN1YmplY3QgPSBhYmlsaXR5RGF0YVswXVxuXG4gICAgICAgICAgaWYgKCFzdWJqZWN0KSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc3ViamVjdCBnaXZlbiBpbiBhYmlsaXRpZXM6ICR7c3ViamVjdH0gLSAke0pTT04uc3RyaW5naWZ5KGFiaWxpdGllcyl9YClcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWJpbGl0eURhdGFbMV0pKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFuIGFycmF5IG9mIGFiaWxpdGllcyBidXQgZ290OiAke3R5cGVvZiBhYmlsaXR5RGF0YVsxXX06ICR7YWJpbGl0eURhdGFbMV19YClcblxuICAgICAgICAgIGZvciAoY29uc3QgYWJpbGl0eSBvZiBhYmlsaXR5RGF0YVsxXSkge1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMubG9hZEFiaWxpdHkoYWJpbGl0eSwgc3ViamVjdClcblxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgfSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY29uc3QgZG9uZVN1bW1hcnkgPSBbXG4gICAgICAgIFwiW2Nhbi1jYW4tZGVidWddIGxvYWRBYmlsaXRpZXM6ZG9uZVwiLFxuICAgICAgICBgZ2VuZXJhdGlvbj0ke2dlbmVyYXRpb259YCxcbiAgICAgICAgYGN1cnJlbnRHZW5lcmF0aW9uPSR7dGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9ufWAsXG4gICAgICAgIGBsb2FkaW5nQ291bnQ9JHt0aGlzLmxvYWRpbmdDb3VudH1gXG4gICAgICBdLmpvaW4oXCI7IFwiKVxuICAgICAgdGhpcy5kZWJ1Z0xvZyhkb25lU3VtbWFyeSlcbiAgICAgIGlmICh0aGlzLmxvYWRpbmdDb3VudCA+IDApIHRoaXMubG9hZGluZ0NvdW50IC09IDFcbiAgICAgIGlmICh0aGlzLnJlc2V0dGluZ0dlbmVyYXRpb24gPT09IGdlbmVyYXRpb24pIHRoaXMucmVzZXR0aW5nR2VuZXJhdGlvbiA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvKiogbG9hZEFiaWxpdHkuICovXG4gIGxvYWRBYmlsaXR5IChhYmlsaXR5LCBzdWJqZWN0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkQWJpbGl0eSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShhYmlsaXR5KVxuXG4gICAgICBpZiAodGhpcy5pc0FiaWxpdHlMb2FkZWQobm9ybWFsaXplZEFiaWxpdHksIHN1YmplY3QpKSB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgZm91bmRBYmlsaXR5ID0gdGhpcy5hYmlsaXRpZXNUb0xvYWQuZmluZCgoYWJpbGl0eVRvTG9hZCkgPT4gZGlnZyhhYmlsaXR5VG9Mb2FkLCBcImFiaWxpdHlcIikgPT0gbm9ybWFsaXplZEFiaWxpdHkgJiZcbiAgICAgICAgZGlnZyhhYmlsaXR5VG9Mb2FkLCBcInN1YmplY3RcIikgPT0gc3ViamVjdFxuICAgICAgKVxuXG4gICAgICBpZiAoZm91bmRBYmlsaXR5KSB7XG4gICAgICAgIGZvdW5kQWJpbGl0eS5jYWxsYmFja3MucHVzaChyZXNvbHZlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hYmlsaXRpZXNUb0xvYWQucHVzaCh7YWJpbGl0eTogbm9ybWFsaXplZEFiaWxpdHksIGNhbGxiYWNrczogW3Jlc29sdmVdLCBzdWJqZWN0fSlcbiAgICAgICAgdGhpcy5hYmlsaXRpZXNUb0xvYWREYXRhLnB1c2goe2FiaWxpdHk6IG5vcm1hbGl6ZWRBYmlsaXR5LCBzdWJqZWN0fSlcblxuICAgICAgICB0aGlzLnF1ZXVlQWJpbGl0aWVzUmVxdWVzdCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKiBxdWV1ZUFiaWxpdGllc1JlcXVlc3QuICovXG4gIHF1ZXVlQWJpbGl0aWVzUmVxdWVzdCAoKSB7XG4gICAgaWYgKHRoaXMucXVldWVBYmlsaXRpZXNSZXF1ZXN0VGltZW91dCkgcmV0dXJuXG5cbiAgICB0aGlzLnF1ZXVlQWJpbGl0aWVzUmVxdWVzdFRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuc2VuZEFiaWxpdGllc1JlcXVlc3QsIDApXG4gIH1cblxuICBhc3luYyByZXNldEFiaWxpdGllcyAoKSB7XG4gICAgaWYgKHRoaXMucmVzZXRQcm9taXNlKSByZXR1cm4gdGhpcy5yZXNldFByb21pc2VcblxuICAgIHRoaXMucmVzZXRQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMubG9jay53cml0ZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuYWJpbGl0aWVzID0gW11cbiAgICAgICAgdGhpcy5hYmlsaXRpZXNCeU5hbWUgPSBuZXcgTWFwKClcbiAgICAgICAgdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uICs9IDFcbiAgICAgICAgdGhpcy5yZXNldHRpbmdHZW5lcmF0aW9uID0gdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uXG4gICAgICAgIHRoaXMuY2FjaGVLZXkgKz0gMVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlc2V0U3VtbWFyeSA9IFtcbiAgICAgICAgXCJbY2FuLWNhbi1kZWJ1Z10gcmVzZXRBYmlsaXRpZXNcIixcbiAgICAgICAgYGdlbmVyYXRpb249JHt0aGlzLmFiaWxpdGllc0dlbmVyYXRpb259YCxcbiAgICAgICAgYGNhY2hlS2V5PSR7dGhpcy5jYWNoZUtleX1gLFxuICAgICAgICBgcXVldWVkPSR7dGhpcy5hYmlsaXRpZXNUb0xvYWREYXRhLmxlbmd0aH1gXG4gICAgICBdLmpvaW4oXCI7IFwiKVxuICAgICAgdGhpcy5kZWJ1Z0xvZyhyZXNldFN1bW1hcnkpXG4gICAgICB0aGlzLmV2ZW50cy5lbWl0KFwib25SZXNldEFiaWxpdGllc1wiKVxuICAgIH0pKClcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJlc2V0UHJvbWlzZVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnJlc2V0UHJvbWlzZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBhc3luYyByZWxvYWRBYmlsaXRpZXMgKGFiaWxpdGllcywgcmVsb2FkS2V5KSB7XG4gICAgaWYgKHJlbG9hZEtleSAmJiB0aGlzLnJlbG9hZFByb21pc2VzLmhhcyhyZWxvYWRLZXkpKSB7XG4gICAgICB0aGlzLmRlYnVnTG9nKGBbY2FuLWNhbi1kZWJ1Z10gcmVsb2FkQWJpbGl0aWVzOmRlZHVwZSByZWxvYWRLZXk9JHtyZWxvYWRLZXl9YClcbiAgICAgIHJldHVybiB0aGlzLnJlbG9hZFByb21pc2VzLmdldChyZWxvYWRLZXkpXG4gICAgfVxuXG4gICAgY29uc3QgcmVsb2FkU3VtbWFyeSA9IFtcbiAgICAgIFwiW2Nhbi1jYW4tZGVidWddIHJlbG9hZEFiaWxpdGllczpzdGFydFwiLFxuICAgICAgYHJlbG9hZEtleT0ke3JlbG9hZEtleSB8fCBcIm5vbmVcIn1gLFxuICAgICAgYGdlbmVyYXRpb249JHt0aGlzLmFiaWxpdGllc0dlbmVyYXRpb259YCxcbiAgICAgIGByZXF1ZXN0cz0ke2FiaWxpdGllcy5sZW5ndGh9YFxuICAgIF0uam9pbihcIjsgXCIpXG4gICAgdGhpcy5kZWJ1Z0xvZyhyZWxvYWRTdW1tYXJ5KVxuXG4gICAgLyoqIHByb21pc2UuICovXG4gICAgY29uc3QgcHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnJlc2V0QWJpbGl0aWVzKClcbiAgICAgIGF3YWl0IHRoaXMubG9hZEFiaWxpdGllcyhhYmlsaXRpZXMpXG4gICAgfSkoKVxuXG4gICAgaWYgKHJlbG9hZEtleSkgdGhpcy5yZWxvYWRQcm9taXNlcy5zZXQocmVsb2FkS2V5LCBwcm9taXNlKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHByb21pc2VcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5kZWJ1Z0xvZyhgW2Nhbi1jYW4tZGVidWddIHJlbG9hZEFiaWxpdGllczpkb25lIHJlbG9hZEtleT0ke3JlbG9hZEtleSB8fCBcIm5vbmVcIn07IGdlbmVyYXRpb249JHt0aGlzLmFiaWxpdGllc0dlbmVyYXRpb259YClcbiAgICAgIGlmIChyZWxvYWRLZXkpIHRoaXMucmVsb2FkUHJvbWlzZXMuZGVsZXRlKHJlbG9hZEtleSlcbiAgICB9XG4gIH1cblxuICAvKiogc2VuZEFiaWxpdGllc1JlcXVlc3QuICovXG4gIHNlbmRBYmlsaXRpZXNSZXF1ZXN0ID0gYXN5bmMgKCkgPT4ge1xuICAgIHRoaXMucXVldWVBYmlsaXRpZXNSZXF1ZXN0VGltZW91dCA9IG51bGxcbiAgICBjb25zdCBnZW5lcmF0aW9uID0gdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uXG4gICAgY29uc3QgYWJpbGl0aWVzVG9Mb2FkID0gdGhpcy5hYmlsaXRpZXNUb0xvYWRcbiAgICBjb25zdCBhYmlsaXRpZXNUb0xvYWREYXRhID0gdGhpcy5hYmlsaXRpZXNUb0xvYWREYXRhXG5cbiAgICB0aGlzLmFiaWxpdGllc1RvTG9hZCA9IFtdXG4gICAgdGhpcy5hYmlsaXRpZXNUb0xvYWREYXRhID0gW11cbiAgICB0aGlzLmRlYnVnTG9nKGBbY2FuLWNhbi1kZWJ1Z10gc2VuZEFiaWxpdGllc1JlcXVlc3Q6c3RhcnQgZ2VuZXJhdGlvbj0ke2dlbmVyYXRpb259OyBxdWV1ZWQ9JHthYmlsaXRpZXNUb0xvYWREYXRhLmxlbmd0aH1gKVxuXG4gICAgbGV0IGFiaWxpdGllcyA9IFtdXG4gICAgbGV0IGRpZEZhaWwgPSBmYWxzZVxuICAgIGxldCByZXF1ZXN0RXJyb3JcblxuICAgIC8vIExvYWQgYWJpbGl0aWVzIGZyb20gYmFja2VuZFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBTZXJ2aWNlcy5jdXJyZW50KCkuc2VuZFJlcXVlc3QoXCJDYW5DYW46OkxvYWRBYmlsaXRpZXNcIiwge1xuICAgICAgICByZXF1ZXN0OiBhYmlsaXRpZXNUb0xvYWREYXRhXG4gICAgICB9KVxuICAgICAgYWJpbGl0aWVzID0gZGlnZyhyZXN1bHQsIFwiYWJpbGl0aWVzXCIpXG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhYmlsaXRpZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgQ2FuQ2FuOjpMb2FkQWJpbGl0aWVzIHJlc3BvbnNlIGFiaWxpdGllcyB0byBiZSBhbiBhcnJheSwgZ290OiAke3R5cGVvZiBhYmlsaXRpZXN9YClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZGlkRmFpbCA9IHRydWVcbiAgICAgIHJlcXVlc3RFcnJvciA9IGVycm9yXG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGxvYWQgYWJpbGl0aWVzXCIsIGVycm9yKVxuICAgIH1cblxuICAgIGlmIChnZW5lcmF0aW9uICE9PSB0aGlzLmFiaWxpdGllc0dlbmVyYXRpb24pIHtcbiAgICAgIGNvbnN0IHN0YWxlUmVzcG9uc2VEZWJ1ZyA9IFtcbiAgICAgICAgXCJbY2FuLWNhbi1kZWJ1Z10gc2VuZEFiaWxpdGllc1JlcXVlc3Q6c3RhbGUtcmVzcG9uc2VcIixcbiAgICAgICAgYHJlcXVlc3RHZW5lcmF0aW9uPSR7Z2VuZXJhdGlvbn1gLFxuICAgICAgICBgY3VycmVudEdlbmVyYXRpb249JHt0aGlzLmFiaWxpdGllc0dlbmVyYXRpb259YCxcbiAgICAgICAgYHJlcXVldWU9JHthYmlsaXRpZXNUb0xvYWQubGVuZ3RofWBcbiAgICAgIF0uam9pbihcIjsgXCIpXG4gICAgICB0aGlzLmRlYnVnTG9nKHN0YWxlUmVzcG9uc2VEZWJ1ZylcbiAgICAgIGZvciAoY29uc3QgYWJpbGl0eURhdGEgb2YgYWJpbGl0aWVzVG9Mb2FkKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgYWJpbGl0eURhdGEuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgdGhpcy5sb2FkQWJpbGl0eShhYmlsaXR5RGF0YS5hYmlsaXR5LCBhYmlsaXR5RGF0YS5zdWJqZWN0KS50aGVuKGNhbGxiYWNrKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChkaWRGYWlsKSB7XG4gICAgICB0aGlzLmRlYnVnTG9nKGBbY2FuLWNhbi1kZWJ1Z10gc2VuZEFiaWxpdGllc1JlcXVlc3Q6ZmFpbGVkIGdlbmVyYXRpb249JHtnZW5lcmF0aW9ufTsgcXVldWVkPSR7YWJpbGl0aWVzVG9Mb2FkLmxlbmd0aH1gKVxuICAgICAgZm9yIChjb25zdCBhYmlsaXR5RGF0YSBvZiBhYmlsaXRpZXNUb0xvYWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBhYmlsaXR5RGF0YS5jYWxsYmFja3MpIHtcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVzb2x2ZSBjYWxsYmFja3MgdG8gYXZvaWQgZGVhZGxvY2tzIGZvciB3YWl0ZXJzIGV2ZW4gd2hlbiBsb2FkIGZhaWxlZC5cbiAgICAgIGlmIChyZXF1ZXN0RXJyb3IpIHRoaXMucmVwb3J0VW5oYW5kbGVkQXN5bmNFcnJvcihyZXF1ZXN0RXJyb3IpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGxvYWRlZCBhYmlsaXRpZXNcbiAgICB0aGlzLmFiaWxpdGllcyA9IHRoaXMuYWJpbGl0aWVzLmNvbmNhdChhYmlsaXRpZXMpXG4gICAgdGhpcy5pbmRleEFiaWxpdGllc0J5TmFtZShhYmlsaXRpZXMpXG4gICAgdGhpcy5jYWNoZUtleSArPSAxXG4gICAgdGhpcy5kZWJ1Z0xvZyhcbiAgICAgIGBbY2FuLWNhbi1kZWJ1Z10gc2VuZEFiaWxpdGllc1JlcXVlc3Q6c3VjY2VzcyBnZW5lcmF0aW9uPSR7Z2VuZXJhdGlvbn07IGxvYWRlZD0ke2FiaWxpdGllcy5sZW5ndGh9OyBjYWNoZUtleT0ke3RoaXMuY2FjaGVLZXl9YFxuICAgIClcbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwib25BYmlsaXRpZXNMb2FkZWRcIiwge2NhY2hlS2V5OiB0aGlzLmNhY2hlS2V5fSlcblxuICAgIC8vIENhbGwgdGhlIGNhbGxiYWNrcyB0aGF0IGFyZSB3YWl0aW5nIGZvciB0aGUgYWJpbGl0eSB0byBoYXZlIGJlZW4gbG9hZGVkXG4gICAgZm9yIChjb25zdCBhYmlsaXR5RGF0YSBvZiBhYmlsaXRpZXNUb0xvYWQpIHtcbiAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgYWJpbGl0eURhdGEuY2FsbGJhY2tzKSB7XG4gICAgICAgIGNhbGxiYWNrKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogaW5kZXhBYmlsaXRpZXNCeU5hbWUuICovXG4gIGluZGV4QWJpbGl0aWVzQnlOYW1lIChhYmlsaXRpZXMpIHtcbiAgICBmb3IgKGNvbnN0IGFiaWxpdHlEYXRhIG9mIGFiaWxpdGllcykge1xuICAgICAgaWYgKGFiaWxpdHlEYXRhICYmIHR5cGVvZiBhYmlsaXR5RGF0YSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGNvbnN0IGFiaWxpdHlLZXkgPSB0aGlzLmFiaWxpdHlLZXkoZGlnZyhhYmlsaXR5RGF0YSwgXCJhYmlsaXR5XCIpLCBkaWdnKGFiaWxpdHlEYXRhLCBcInN1YmplY3RcIikpXG5cbiAgICAgICAgaWYgKGFiaWxpdHlLZXkpIHtcbiAgICAgICAgICB0aGlzLmFiaWxpdGllc0J5TmFtZS5zZXQoYWJpbGl0eUtleSwgYWJpbGl0eURhdGEpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogYWJpbGl0eUtleS4gKi9cbiAgYWJpbGl0eUtleSAoYWJpbGl0eSwgc3ViamVjdCkge1xuICAgIGlmICghYWJpbGl0eSkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IHN1YmplY3ROYW1lID0gdGhpcy5zdWJqZWN0TmFtZShzdWJqZWN0KVxuICAgIGlmICghc3ViamVjdE5hbWUpIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4gYCR7aW5mbGVjdGlvbi51bmRlcnNjb3JlKGFiaWxpdHkpfToke3N1YmplY3ROYW1lfWBcbiAgfVxuXG4gIC8qKiBzdWJqZWN0TmFtZS4gKi9cbiAgc3ViamVjdE5hbWUoc3ViamVjdCkge1xuICAgIGlmICghc3ViamVjdCkgcmV0dXJuIG51bGxcblxuICAgIGlmICh0eXBlb2Ygc3ViamVjdCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gc3ViamVjdFxuICAgIH1cblxuICAgIGlmIChzdWJqZWN0Lm1vZGVsQ2xhc3NEYXRhKSB7XG4gICAgICByZXR1cm4gZGlnZyhzdWJqZWN0Lm1vZGVsQ2xhc3NEYXRhKCksIFwibmFtZVwiKVxuICAgIH1cblxuICAgIGlmIChzdWJqZWN0LnJlc291cmNlRGF0YSkge1xuICAgICAgcmV0dXJuIGRpZ2coc3ViamVjdC5yZXNvdXJjZURhdGEoKSwgXCJuYW1lXCIpXG4gICAgfVxuXG4gICAgaWYgKHN1YmplY3QubmFtZSkge1xuICAgICAgcmV0dXJuIHN1YmplY3QubmFtZVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKiogcmVwb3J0VW5oYW5kbGVkQXN5bmNFcnJvci4gKi9cbiAgcmVwb3J0VW5oYW5kbGVkQXN5bmNFcnJvciAoZXJyb3IpIHtcbiAgICBpZiAoIWVycm9yKSByZXR1cm5cblxuICAgIFByb21pc2UucmVqZWN0KGVycm9yKVxuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels-consumer.d.ts","sourceRoot":"/src/","sources":["channels-consumer.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"channels-consumer.d.ts","sourceRoot":"/src/","sources":["channels-consumer.js"],"names":[],"mappings":"AAKe,6BADD,GAAG,CAQhB"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import Config from "./config.js";
|
|
2
|
+
// @ts-expect-error
|
|
2
3
|
import { createConsumer } from "@rails/actioncable"; // eslint-disable-line import/no-unresolved
|
|
4
|
+
/** @returns {any} */
|
|
3
5
|
export default () => {
|
|
4
6
|
if (!globalThis.apiMakerChannelsConsumer) {
|
|
7
|
+
// @ts-expect-error
|
|
5
8
|
globalThis.apiMakerChannelsConsumer = createConsumer(Config.getCableUrl());
|
|
6
9
|
}
|
|
7
10
|
return globalThis.apiMakerChannelsConsumer;
|
|
8
11
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbHMtY29uc3VtZXIuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbImNoYW5uZWxzLWNvbnN1bWVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQTtBQUNoQyxtQkFBbUI7QUFDbkIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9CQUFvQixDQUFBLENBQUMsMkNBQTJDO0FBRTdGLHFCQUFxQjtBQUNyQixlQUFlLEdBQUcsRUFBRTtJQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDekMsbUJBQW1CO1FBQ25CLFVBQVUsQ0FBQyx3QkFBd0IsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7SUFDNUUsQ0FBQztJQUVELE9BQU8sVUFBVSxDQUFDLHdCQUF3QixDQUFBO0FBQzVDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb25maWcgZnJvbSBcIi4vY29uZmlnLmpzXCJcbi8vIEB0cy1leHBlY3QtZXJyb3JcbmltcG9ydCB7Y3JlYXRlQ29uc3VtZXJ9IGZyb20gXCJAcmFpbHMvYWN0aW9uY2FibGVcIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uby11bnJlc29sdmVkXG5cbi8qKiBAcmV0dXJucyB7YW55fSAqL1xuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBpZiAoIWdsb2JhbFRoaXMuYXBpTWFrZXJDaGFubmVsc0NvbnN1bWVyKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGdsb2JhbFRoaXMuYXBpTWFrZXJDaGFubmVsc0NvbnN1bWVyID0gY3JlYXRlQ29uc3VtZXIoQ29uZmlnLmdldENhYmxlVXJsKCkpXG4gIH1cblxuICByZXR1cm4gZ2xvYmFsVGhpcy5hcGlNYWtlckNoYW5uZWxzQ29uc3VtZXJcbn1cbiJdfQ==
|