@recursyve/nestjs-data-filter 9.3.0 → 10.0.0
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/lib/adapters/default-access-control.adapter.js +3 -3
- package/lib/adapters/default-export.adapter.js +3 -3
- package/lib/adapters/default-translate.adapter.js +3 -3
- package/lib/data-filter.repository.d.ts +1 -1
- package/lib/data-filter.repository.js +14 -11
- package/lib/data-filter.service.js +3 -3
- package/lib/decorators/attributes.decorator.js +1 -1
- package/lib/decorators/count.decorator.js +1 -1
- package/lib/decorators/distance.decorator.js +2 -2
- package/lib/decorators/ignore-in-search.decorator.js +1 -1
- package/lib/decorators/include.decorator.js +1 -1
- package/lib/decorators/limit.decorator.js +1 -1
- package/lib/decorators/order.decorator.js +1 -1
- package/lib/decorators/paranoid.decorator.js +1 -1
- package/lib/decorators/path.decorator.js +1 -1
- package/lib/decorators/required.decorator.js +1 -1
- package/lib/decorators/seachable-attributes.decorator.js +1 -1
- package/lib/decorators/separate.decorator.js +1 -1
- package/lib/decorators/sum.decorator.js +1 -1
- package/lib/decorators/where.decorator.js +1 -1
- package/lib/filter/base-filter.js +1 -1
- package/lib/filter/controllers/dynamic-filter.controller.d.ts +1 -1
- package/lib/filter/controllers/dynamic-filter.controller.js +2 -2
- package/lib/filter/controllers/filter.controller.d.ts +1 -1
- package/lib/filter/controllers/filter.controller.js +2 -2
- package/lib/filter/decorators/inject-filter.decorator.d.ts +1 -1
- package/lib/filter/filter.config.d.ts +1 -1
- package/lib/filter/filter.config.js +1 -1
- package/lib/filter/filter.factory.js +1 -1
- package/lib/filter/filter.service.d.ts +4 -4
- package/lib/filter/filter.service.js +45 -26
- package/lib/filter/filter.utils.d.ts +1 -1
- package/lib/filter/filter.utils.js +1 -1
- package/lib/filter/filters/coordinate.filter.d.ts +4 -4
- package/lib/filter/filters/coordinate.filter.js +34 -24
- package/lib/filter/filters/date-time.filter.d.ts +1 -1
- package/lib/filter/filters/date-time.filter.js +4 -1
- package/lib/filter/filters/date.filter.d.ts +1 -1
- package/lib/filter/filters/date.filter.js +18 -13
- package/lib/filter/filters/default.filter.d.ts +4 -4
- package/lib/filter/filters/default.filter.js +1 -1
- package/lib/filter/filters/filter.d.ts +13 -12
- package/lib/filter/filters/filter.js +15 -11
- package/lib/filter/filters/geo-bounds.filter.js +1 -1
- package/lib/filter/filters/geo-localization.filter.d.ts +1 -1
- package/lib/filter/filters/geo-localization.filter.js +4 -1
- package/lib/filter/filters/group.filter.d.ts +9 -9
- package/lib/filter/filters/group.filter.js +20 -15
- package/lib/filter/filters/radio.filter.d.ts +3 -3
- package/lib/filter/filters/radio.filter.js +14 -7
- package/lib/filter/filters/select.filter.d.ts +2 -2
- package/lib/filter/filters/select.filter.js +2 -2
- package/lib/filter/filters/text.filter.d.ts +1 -1
- package/lib/filter/filters/text.filter.js +1 -1
- package/lib/filter/guards/filter-query.guard.js +8 -5
- package/lib/filter/interceptors/data-file-download.interceptor.js +3 -3
- package/lib/filter/models/filter-configuration.model.d.ts +2 -2
- package/lib/filter/models/filter-configuration.model.js +1 -1
- package/lib/filter/models/rule.model.d.ts +3 -0
- package/lib/filter/models/rule.model.js +1 -1
- package/lib/filter/operators.js +2 -2
- package/lib/filter/order-rules/default.order-rule.d.ts +4 -3
- package/lib/filter/order-rules/default.order-rule.js +1 -1
- package/lib/filter/order-rules/enum.order-rule.js +1 -1
- package/lib/filter/order-rules/order-rule.d.ts +4 -3
- package/lib/filter/order-rules/order-rule.js +1 -1
- package/lib/filter/type.js +2 -2
- package/lib/handlers/attributes.handler.d.ts +1 -1
- package/lib/handlers/attributes.handler.js +1 -1
- package/lib/index.js +25 -34
- package/lib/json.data.js +1 -1
- package/lib/models/attributes.model.d.ts +4 -4
- package/lib/models/attributes.model.js +11 -6
- package/lib/models/count.model.js +1 -1
- package/lib/models/custom-attributes.model.d.ts +1 -1
- package/lib/models/custom-attributes.model.js +1 -1
- package/lib/models/data-filter.model.d.ts +1 -1
- package/lib/models/data-filter.model.js +18 -10
- package/lib/models/distance.model.d.ts +3 -3
- package/lib/models/distance.model.js +2 -2
- package/lib/models/export-types.model.js +2 -2
- package/lib/models/include.model.js +1 -1
- package/lib/models/path.model.js +1 -1
- package/lib/models/sum.model.js +1 -1
- package/lib/scanners/data-filter.scanner.js +3 -3
- package/lib/scanners/sequelize-model.scanner.d.ts +2 -2
- package/lib/scanners/sequelize-model.scanner.js +8 -7
- package/lib/sequelize.utils.d.ts +4 -4
- package/lib/sequelize.utils.js +6 -6
- package/lib/services/data-filter-validation.service.js +3 -3
- package/lib/utils/xlsx.utils.js +1 -1
- package/package.json +19 -19
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CoordinateFilter = void 0;
|
|
4
|
-
const type_1 = require("../type");
|
|
5
|
-
const operators_1 = require("../operators");
|
|
6
|
-
const filter_1 = require("./filter");
|
|
7
4
|
const sequelize_1 = require("sequelize");
|
|
8
5
|
const sequelize_utils_1 = require("../../sequelize.utils");
|
|
6
|
+
const operators_1 = require("../operators");
|
|
7
|
+
const type_1 = require("../type");
|
|
8
|
+
const filter_1 = require("./filter");
|
|
9
9
|
class CoordinateFilter extends filter_1.Filter {
|
|
10
10
|
constructor(definition) {
|
|
11
11
|
super(definition);
|
|
@@ -22,34 +22,44 @@ class CoordinateFilter extends filter_1.Filter {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
async getEqualWhereOptions(rule, latitude, longitude) {
|
|
25
|
+
const first = await super.getWhereOptions({
|
|
26
|
+
operation: operators_1.FilterOperatorTypes.Equal,
|
|
27
|
+
value: latitude,
|
|
28
|
+
id: rule.id
|
|
29
|
+
}, sequelize_utils_1.SequelizeUtils.getAttributeFullName("latitude", [this.path, this.attribute].filter(x => x).join(".")));
|
|
30
|
+
const second = await super.getWhereOptions({
|
|
31
|
+
operation: operators_1.FilterOperatorTypes.Equal,
|
|
32
|
+
value: longitude,
|
|
33
|
+
id: rule.id
|
|
34
|
+
}, sequelize_utils_1.SequelizeUtils.getAttributeFullName("longitude", [this.path, this.attribute].filter(x => x).join(".")));
|
|
35
|
+
if (!first || !second) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
25
38
|
return {
|
|
26
39
|
[sequelize_1.Op.and]: [
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
value: latitude,
|
|
30
|
-
id: rule.id
|
|
31
|
-
}, sequelize_utils_1.SequelizeUtils.getAttributeFullName("latitude", [this.path, this.attribute].filter(x => x).join("."))),
|
|
32
|
-
await super.getWhereOptions({
|
|
33
|
-
operation: operators_1.FilterOperatorTypes.Equal,
|
|
34
|
-
value: longitude,
|
|
35
|
-
id: rule.id
|
|
36
|
-
}, sequelize_utils_1.SequelizeUtils.getAttributeFullName("longitude", [this.path, this.attribute].filter(x => x).join("."))),
|
|
40
|
+
first,
|
|
41
|
+
second
|
|
37
42
|
]
|
|
38
43
|
};
|
|
39
44
|
}
|
|
40
45
|
async getNotEqualWhereOptions(rule, latitude, longitude) {
|
|
46
|
+
const first = await super.getWhereOptions({
|
|
47
|
+
operation: operators_1.FilterOperatorTypes.NotEqual,
|
|
48
|
+
value: latitude,
|
|
49
|
+
id: rule.id
|
|
50
|
+
}, sequelize_utils_1.SequelizeUtils.getAttributeFullName("latitude", [this.path, this.attribute].filter(x => x).join(".")));
|
|
51
|
+
const second = await super.getWhereOptions({
|
|
52
|
+
operation: operators_1.FilterOperatorTypes.NotEqual,
|
|
53
|
+
value: longitude,
|
|
54
|
+
id: rule.id
|
|
55
|
+
}, sequelize_utils_1.SequelizeUtils.getAttributeFullName("longitude", [this.path, this.attribute].filter(x => x).join(".")));
|
|
56
|
+
if (!first || !second) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
41
59
|
return {
|
|
42
60
|
[sequelize_1.Op.or]: [
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
value: latitude,
|
|
46
|
-
id: rule.id
|
|
47
|
-
}, sequelize_utils_1.SequelizeUtils.getAttributeFullName("latitude", [this.path, this.attribute].filter(x => x).join("."))),
|
|
48
|
-
await super.getWhereOptions({
|
|
49
|
-
operation: operators_1.FilterOperatorTypes.NotEqual,
|
|
50
|
-
value: longitude,
|
|
51
|
-
id: rule.id
|
|
52
|
-
}, sequelize_utils_1.SequelizeUtils.getAttributeFullName("longitude", [this.path, this.attribute].filter(x => x).join("."))),
|
|
61
|
+
first,
|
|
62
|
+
second
|
|
53
63
|
]
|
|
54
64
|
};
|
|
55
65
|
}
|
|
@@ -63,4 +73,4 @@ class CoordinateFilter extends filter_1.Filter {
|
|
|
63
73
|
}
|
|
64
74
|
exports.CoordinateFilter = CoordinateFilter;
|
|
65
75
|
|
|
66
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9jb29yZGluYXRlLmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBNkM7QUFDN0MsMkRBQXVEO0FBRXZELDRDQUFvRTtBQUNwRSxrQ0FBcUM7QUFDckMscUNBQXdEO0FBRXhELE1BQWEsZ0JBQWlCLFNBQVEsZUFBTTtJQUl4QyxZQUFZLFVBQWdDO1FBQ3hDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUpmLFNBQUksR0FBRyxpQkFBVSxDQUFDLFVBQVUsQ0FBQztRQUM3QixjQUFTLEdBQUcsQ0FBQyxHQUFHLDJCQUFlLENBQUMsQ0FBQztJQUl4QyxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFvQjtRQUM3QyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDcEIsS0FBSywrQkFBbUIsQ0FBQyxLQUFLO2dCQUMxQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2hFLEtBQUssK0JBQW1CLENBQUMsUUFBUTtnQkFDN0IsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN0RTtJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBb0IsRUFBRSxRQUFnQixFQUFFLFNBQWlCO1FBQ3hGLE1BQU0sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDLGVBQWUsQ0FBQztZQUN0QyxTQUFTLEVBQUUsK0JBQW1CLENBQUMsS0FBSztZQUNwQyxLQUFLLEVBQUUsUUFBUTtZQUNmLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUNkLEVBQUUsZ0NBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFHLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLGVBQWUsQ0FBQztZQUN2QyxTQUFTLEVBQUUsK0JBQW1CLENBQUMsS0FBSztZQUNwQyxLQUFLLEVBQUUsU0FBUztZQUNoQixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDZCxFQUFFLGdDQUFjLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ25CLE9BQU87U0FDVjtRQUVELE9BQU87WUFDSCxDQUFDLGNBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDTixLQUFLO2dCQUNMLE1BQU07YUFDVDtTQUNKLENBQUM7SUFDTixDQUFDO0lBRU8sS0FBSyxDQUFDLHVCQUF1QixDQUFDLElBQW9CLEVBQUUsUUFBZ0IsRUFBRSxTQUFpQjtRQUMzRixNQUFNLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDdEMsU0FBUyxFQUFFLCtCQUFtQixDQUFDLFFBQVE7WUFDdkMsS0FBSyxFQUFFLFFBQVE7WUFDZixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDZCxFQUFFLGdDQUFjLENBQUMsb0JBQW9CLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUxRyxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDdkMsU0FBUyxFQUFFLCtCQUFtQixDQUFDLFFBQVE7WUFDdkMsS0FBSyxFQUFFLFNBQVM7WUFDaEIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ2QsRUFBRSxnQ0FBYyxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0csSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNuQixPQUFPO1NBQ1Y7UUFFRCxPQUFPO1lBQ0gsQ0FBQyxjQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ0wsS0FBSztnQkFDTCxNQUFNO2FBQ1Q7U0FDSixDQUFDO0lBQ04sQ0FBQztJQUVNLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBZTtRQUN4QyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUF5QixDQUFDO1FBQzdELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUMvRCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2pCO1FBRUQsT0FBTyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0o7QUE1RUQsNENBNEVDIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVycy9jb29yZGluYXRlLmZpbHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wLCBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBTZXF1ZWxpemVVdGlscyB9IGZyb20gXCIuLi8uLi9zZXF1ZWxpemUudXRpbHNcIjtcbmltcG9ydCB7IFF1ZXJ5UnVsZU1vZGVsLCBSdWxlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBGaWx0ZXJPcGVyYXRvclR5cGVzLCBTZWxlY3RPcGVyYXRvcnMgfSBmcm9tIFwiLi4vb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSBcIi4uL3R5cGVcIjtcbmltcG9ydCB7IEJhc2VGaWx0ZXJEZWZpbml0aW9uLCBGaWx0ZXIgfSBmcm9tIFwiLi9maWx0ZXJcIjtcblxuZXhwb3J0IGNsYXNzIENvb3JkaW5hdGVGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIge1xuICAgIHB1YmxpYyB0eXBlID0gRmlsdGVyVHlwZS5Db29yZGluYXRlO1xuICAgIHB1YmxpYyBvcGVyYXRvcnMgPSBbLi4uU2VsZWN0T3BlcmF0b3JzXTtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmluaXRpb246IEJhc2VGaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICAgIHN1cGVyKGRlZmluaXRpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCBbbGF0aXR1ZGUsIGxvbmdpdHVkZV0gPSBDb29yZGluYXRlRmlsdGVyLmdldENvb3JkaW5hdGVzKHJ1bGUpO1xuICAgICAgICBzd2l0Y2ggKHJ1bGUub3BlcmF0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZXMuRXF1YWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RXF1YWxXaGVyZU9wdGlvbnMocnVsZSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSk7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZXMuTm90RXF1YWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Tm90RXF1YWxXaGVyZU9wdGlvbnMocnVsZSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEVxdWFsV2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBsYXRpdHVkZTogbnVtYmVyLCBsb25naXR1ZGU6IG51bWJlcik6IFByb21pc2U8V2hlcmVPcHRpb25zIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IGZpcnN0ID0gYXdhaXQgc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5FcXVhbCxcbiAgICAgICAgICAgIHZhbHVlOiBsYXRpdHVkZSxcbiAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgIH0sIFNlcXVlbGl6ZVV0aWxzLmdldEF0dHJpYnV0ZUZ1bGxOYW1lKFwibGF0aXR1ZGVcIiwgW3RoaXMucGF0aCwgdGhpcy5hdHRyaWJ1dGVdLmZpbHRlcih4ID0+IHgpLmpvaW4oXCIuXCIpKSk7XG5cbiAgICAgICAgY29uc3Qgc2Vjb25kID0gYXdhaXQgc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5FcXVhbCxcbiAgICAgICAgICAgIHZhbHVlOiBsb25naXR1ZGUsXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9LCBTZXF1ZWxpemVVdGlscy5nZXRBdHRyaWJ1dGVGdWxsTmFtZShcImxvbmdpdHVkZVwiLCBbdGhpcy5wYXRoLCB0aGlzLmF0dHJpYnV0ZV0uZmlsdGVyKHggPT4geCkuam9pbihcIi5cIikpKTtcblxuICAgICAgICBpZiAoIWZpcnN0IHx8ICFzZWNvbmQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbT3AuYW5kXTogW1xuICAgICAgICAgICAgICAgIGZpcnN0LFxuICAgICAgICAgICAgICAgIHNlY29uZFxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0Tm90RXF1YWxXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIGxhdGl0dWRlOiBudW1iZXIsIGxvbmdpdHVkZTogbnVtYmVyKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBhd2FpdCBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBGaWx0ZXJPcGVyYXRvclR5cGVzLk5vdEVxdWFsLFxuICAgICAgICAgICAgdmFsdWU6IGxhdGl0dWRlLFxuICAgICAgICAgICAgaWQ6IHJ1bGUuaWRcbiAgICAgICAgfSwgU2VxdWVsaXplVXRpbHMuZ2V0QXR0cmlidXRlRnVsbE5hbWUoXCJsYXRpdHVkZVwiLCBbdGhpcy5wYXRoLCB0aGlzLmF0dHJpYnV0ZV0uZmlsdGVyKHggPT4geCkuam9pbihcIi5cIikpKTtcblxuICAgICAgICBjb25zdCBzZWNvbmQgPSBhd2FpdCBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBGaWx0ZXJPcGVyYXRvclR5cGVzLk5vdEVxdWFsLFxuICAgICAgICAgICAgdmFsdWU6IGxvbmdpdHVkZSxcbiAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgIH0sIFNlcXVlbGl6ZVV0aWxzLmdldEF0dHJpYnV0ZUZ1bGxOYW1lKFwibG9uZ2l0dWRlXCIsIFt0aGlzLnBhdGgsIHRoaXMuYXR0cmlidXRlXS5maWx0ZXIoeCA9PiB4KS5qb2luKFwiLlwiKSkpO1xuXG4gICAgICAgIGlmICghZmlyc3QgfHwgIXNlY29uZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFtPcC5vcl06IFtcbiAgICAgICAgICAgICAgICBmaXJzdCxcbiAgICAgICAgICAgICAgICBzZWNvbmRcbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldENvb3JkaW5hdGVzKHJ1bGU6IFJ1bGVNb2RlbCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgICAgICBjb25zdCBbbGF0aXR1ZGUsIGxvbmdpdHVkZV0gPSBydWxlLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XG4gICAgICAgIGlmICh0eXBlb2YgbGF0aXR1ZGUgIT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGxvbmdpdHVkZSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIFswLCAwXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbGF0aXR1ZGUsIGxvbmdpdHVkZV07XG4gICAgfVxufVxuIl19
|
|
@@ -7,5 +7,5 @@ export declare class DateTimeFilter extends Filter {
|
|
|
7
7
|
type: FilterType;
|
|
8
8
|
operators: FilterOperatorTypes[];
|
|
9
9
|
constructor(definition: BaseFilterDefinition);
|
|
10
|
-
getWhereOptions(rule: QueryRuleModel): Promise<WhereOptions>;
|
|
10
|
+
getWhereOptions(rule: QueryRuleModel): Promise<WhereOptions | undefined>;
|
|
11
11
|
}
|
|
@@ -15,6 +15,9 @@ class DateTimeFilter extends filter_1.Filter {
|
|
|
15
15
|
}
|
|
16
16
|
async getWhereOptions(rule) {
|
|
17
17
|
if (rule.operation === operators_1.FilterOperatorTypes.Between || rule.operation === operators_1.FilterOperatorTypes.NotBetween) {
|
|
18
|
+
if (!Array.isArray(rule.value)) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
18
21
|
return super.getWhereOptions({
|
|
19
22
|
...rule,
|
|
20
23
|
value: [
|
|
@@ -38,4 +41,4 @@ class DateTimeFilter extends filter_1.Filter {
|
|
|
38
41
|
}
|
|
39
42
|
exports.DateTimeFilter = DateTimeFilter;
|
|
40
43
|
|
|
41
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9kYXRlLXRpbWUuZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLDRDQUFrRTtBQUNsRSxrQ0FBcUM7QUFDckMscUNBQXdEO0FBQ3hELGlDQUFpQztBQUVqQywyREFBMkQ7QUFDM0QseUNBQXlDO0FBQ3pDLE1BQWEsY0FBZSxTQUFRLGVBQU07SUFJdEMsWUFBWSxVQUFnQztRQUN4QyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFKZixTQUFJLEdBQUcsaUJBQVUsQ0FBQyxRQUFRLENBQUM7UUFDM0IsY0FBUyxHQUFHLENBQUMsR0FBRyx5QkFBYSxDQUFDLENBQUM7SUFJdEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBb0I7UUFDN0MsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLFVBQVUsRUFBRTtZQUNyRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzVCLE9BQU8sU0FBUyxDQUFDO2FBQ3BCO1lBRUQsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDO2dCQUN6QixHQUFHLElBQUk7Z0JBQ1AsS0FBSyxFQUFFO29CQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUNoQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO3lCQUNuQixNQUFNLEVBQUU7b0JBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ2hCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7eUJBQ25CLE1BQU0sRUFBRTtpQkFDaEI7YUFDSixDQUFDLENBQUM7U0FDTjtRQUVELE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQztZQUN6QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBWSxDQUFDO2lCQUMzQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO2lCQUNuQixNQUFNLEVBQUU7WUFDYixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDZCxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFuQ0Qsd0NBbUNDIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVycy9kYXRlLXRpbWUuZmlsdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV2hlcmVPcHRpb25zIH0gZnJvbSBcInNlcXVlbGl6ZVwiO1xuaW1wb3J0IHsgUXVlcnlSdWxlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBEYXRlT3BlcmF0b3JzLCBGaWx0ZXJPcGVyYXRvclR5cGVzIH0gZnJvbSBcIi4uL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gXCIuLi90eXBlXCI7XG5pbXBvcnQgeyBCYXNlRmlsdGVyRGVmaW5pdGlvbiwgRmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVyXCI7XG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuXG4vLyBGaWx0ZXJzIGEgcm93IGJ5IGV4YWN0IGRhdGUgYW5kIHRpbWUgZ2l2ZW4gaW4gdGhlIHJ1bGVzLlxuLy8gVE9ETzogRG8gbm90IGhhcmQgY29kZSB0aW1lem9uZSBvZmZzZXRcbmV4cG9ydCBjbGFzcyBEYXRlVGltZUZpbHRlciBleHRlbmRzIEZpbHRlciB7XG4gICAgcHVibGljIHR5cGUgPSBGaWx0ZXJUeXBlLkRhdGVUaW1lO1xuICAgIHB1YmxpYyBvcGVyYXRvcnMgPSBbLi4uRGF0ZU9wZXJhdG9yc107XG5cbiAgICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uOiBCYXNlRmlsdGVyRGVmaW5pdGlvbikge1xuICAgICAgICBzdXBlcihkZWZpbml0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0V2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKHJ1bGUub3BlcmF0aW9uID09PSBGaWx0ZXJPcGVyYXRvclR5cGVzLkJldHdlZW4gfHwgcnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuTm90QmV0d2Vlbikge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJ1bGUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgLi4ucnVsZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICBtb21lbnQocnVsZS52YWx1ZVswXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC51dGNPZmZzZXQoLTUsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KCksXG4gICAgICAgICAgICAgICAgICAgIG1vbWVudChydWxlLnZhbHVlWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnV0Y09mZnNldCgtNSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICBvcGVyYXRpb246IHJ1bGUub3BlcmF0aW9uLFxuICAgICAgICAgICAgdmFsdWU6IG1vbWVudChydWxlLnZhbHVlIGFzIGFueSlcbiAgICAgICAgICAgICAgICAudXRjT2Zmc2V0KC01LCB0cnVlKVxuICAgICAgICAgICAgICAgIC5mb3JtYXQoKSxcbiAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -13,7 +13,7 @@ export declare class DateFilter extends Filter implements DateFilterDefinition {
|
|
|
13
13
|
readonly defaultTimezone: string;
|
|
14
14
|
readonly skipTimezone: boolean;
|
|
15
15
|
constructor(definition: BaseFilterDefinition & DateFilterDefinition);
|
|
16
|
-
getWhereOptions(rule: QueryRuleModel): Promise<WhereOptions>;
|
|
16
|
+
getWhereOptions(rule: QueryRuleModel): Promise<WhereOptions | undefined>;
|
|
17
17
|
private getEqualWhereOptions;
|
|
18
18
|
private getNotEqualWhereOptions;
|
|
19
19
|
private getLessWhereOptions;
|
|
@@ -31,6 +31,9 @@ class DateFilter extends filter_1.Filter {
|
|
|
31
31
|
// TODO: Check if the client sends us a timezone
|
|
32
32
|
const offsetMilliseconds = (0, date_fns_tz_1.getTimezoneOffset)(this.defaultTimezone);
|
|
33
33
|
if (rule.operation === operators_1.FilterOperatorTypes.Between || rule.operation === operators_1.FilterOperatorTypes.NotBetween) {
|
|
34
|
+
if (!Array.isArray(rule.value)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
34
37
|
const values = this.skipTimezone
|
|
35
38
|
? rule.value
|
|
36
39
|
:
|
|
@@ -71,19 +74,21 @@ class DateFilter extends filter_1.Filter {
|
|
|
71
74
|
});
|
|
72
75
|
}
|
|
73
76
|
async getNotEqualWhereOptions(rule, start, end) {
|
|
77
|
+
const first = await super.getWhereOptions({
|
|
78
|
+
operation: operators_1.FilterOperatorTypes.Less,
|
|
79
|
+
value: start,
|
|
80
|
+
id: rule.id
|
|
81
|
+
});
|
|
82
|
+
const second = await super.getWhereOptions({
|
|
83
|
+
operation: operators_1.FilterOperatorTypes.Greater,
|
|
84
|
+
value: end,
|
|
85
|
+
id: rule.id
|
|
86
|
+
});
|
|
87
|
+
if (!first || !second) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
74
90
|
return {
|
|
75
|
-
[sequelize_1.Op.or]: [
|
|
76
|
-
await super.getWhereOptions({
|
|
77
|
-
operation: operators_1.FilterOperatorTypes.Less,
|
|
78
|
-
value: start,
|
|
79
|
-
id: rule.id
|
|
80
|
-
}),
|
|
81
|
-
await super.getWhereOptions({
|
|
82
|
-
operation: operators_1.FilterOperatorTypes.Greater,
|
|
83
|
-
value: end,
|
|
84
|
-
id: rule.id
|
|
85
|
-
})
|
|
86
|
-
]
|
|
91
|
+
[sequelize_1.Op.or]: [first, second]
|
|
87
92
|
};
|
|
88
93
|
}
|
|
89
94
|
async getLessWhereOptions(rule, start) {
|
|
@@ -117,4 +122,4 @@ class DateFilter extends filter_1.Filter {
|
|
|
117
122
|
}
|
|
118
123
|
exports.DateFilter = DateFilter;
|
|
119
124
|
|
|
120
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9kYXRlLmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1Q0FBNEU7QUFDNUUsNkNBQWdEO0FBQ2hELHlDQUE2QztBQUU3Qyw0Q0FBa0U7QUFDbEUsa0NBQXFDO0FBQ3JDLHFDQUF3RDtBQU94RCxtRkFBbUY7QUFDbkYsRUFBRTtBQUNGLHNIQUFzSDtBQUN0SCw0QkFBNEI7QUFDNUIsc0dBQXNHO0FBQ3RHLGdHQUFnRztBQUNoRyxFQUFFO0FBQ0Ysd0hBQXdIO0FBQ3hILGdFQUFnRTtBQUNoRSxNQUFhLFVBQVcsU0FBUSxlQUFNO0lBT2xDLFlBQVksVUFBdUQ7O1FBQy9ELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQVBmLFNBQUksR0FBRyxpQkFBVSxDQUFDLElBQUksQ0FBQztRQUN2QixjQUFTLEdBQUcsQ0FBQyxHQUFHLHlCQUFhLENBQUMsQ0FBQztRQVFsQyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQUEsVUFBVSxDQUFDLGVBQWUsbUNBQUksa0JBQWtCLENBQUM7SUFDNUUsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBb0I7UUFDN0MsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLFNBQVMsRUFBRTtZQUNuRyxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEM7UUFFRCxnREFBZ0Q7UUFDaEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFBLCtCQUFpQixFQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVuRSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssK0JBQW1CLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssK0JBQW1CLENBQUMsVUFBVSxFQUFFO1lBQ3JHLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZO2dCQUM1QixD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QUFFLCtCQUFtQixDQUFDLGNBQWM7WUFDN0MsS0FBSyxFQUFFLEtBQUs7WUFDWixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDZCxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFqSEQsZ0NBaUhDIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVycy9kYXRlLmZpbHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZE1pbGxpc2Vjb25kcywgZW5kT2ZEYXksIHBhcnNlSlNPTiwgc3RhcnRPZkRheSB9IGZyb20gXCJkYXRlLWZuc1wiO1xuaW1wb3J0IHsgZ2V0VGltZXpvbmVPZmZzZXQgfSBmcm9tIFwiZGF0ZS1mbnMtdHpcIjtcbmltcG9ydCB7IE9wLCBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBRdWVyeVJ1bGVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7IERhdGVPcGVyYXRvcnMsIEZpbHRlck9wZXJhdG9yVHlwZXMgfSBmcm9tIFwiLi4vb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSBcIi4uL3R5cGVcIjtcbmltcG9ydCB7IEJhc2VGaWx0ZXJEZWZpbml0aW9uLCBGaWx0ZXIgfSBmcm9tIFwiLi9maWx0ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRlRmlsdGVyRGVmaW5pdGlvbiB7XG4gICAgc2tpcFRpbWV6b25lPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0VGltZXpvbmU/OiBzdHJpbmc7XG59XG5cbi8vIEZpbHRlcnMgYSByb3cgYnkgZXhhY3QgZGF0ZSBnaXZlbiBpbiB0aGUgcnVsZXMuIFdlIHN0cmlwIHRoZSB0aW1lIGZyb20gdGhlIGRhdGUuXG4vL1xuLy8gRGVwZW5kaW5nIG9uIHRoZSBpbmNsdXNpdml0eSBvZiB5b3VyIHJlcXVlc3Qgd2UgdXNlIHRoZSBzdGFydCBvZiBkYXkgb3IgZW5kIG9mIGRheSwgZm9yIGV4YW1wbGUgaWYgdGhlIHJ1bGUncyB2YWx1ZVxuLy8gaXMgXCIyMDIwLTAzLTA2VDAwOjU1OjEyXCI7XG4vLyAgLSBBbmQgaXRzIG9wZXJhdG9yIGlzIExlc3NPckVxdWFsIHdlIHdpbGwgb3V0cHV0IFwiPCAyMDIwLTAzLTA2VDAwOjAwOjAwXCIgdG8gZXhjbHVkZSB0aGUgZ2l2ZW4gZGF5LlxuLy8gIC0gQW5kIGl0cyBvcGVyYXRvciBpcyBMZXNzLCB3ZSB3aWxsIG91dHB1dCBcIjwgMjAyMC0wMy0wNlQyMzo1OTo1OVwiIHRvIGluY2x1ZGUgdGhlIGdpdmVuIGRheS5cbi8vXG4vLyBGb3IgQmV0d2VlbiBhbmQgTm90QmV0d2VlbiBvcGVyYXRvcnMsIHdlIGFsd2F5cyBpbmNsdWRlIHRoZSBnaXZlbiBmaXJzdCBkYXkgYW5kIGxhc3QgZGF5LCBzbyBtYWtlIHN1cmUgdG8gc2hyaW5rIHlvdXJcbi8vIHRpbWVmcmFtZSBieSBvbmUgZGF5IGZvciBlYWNoIHNpZGUgeW91IGRvbid0IHdhbnQgdG8gaW5jbHVkZS5cbmV4cG9ydCBjbGFzcyBEYXRlRmlsdGVyIGV4dGVuZHMgRmlsdGVyIGltcGxlbWVudHMgRGF0ZUZpbHRlckRlZmluaXRpb24ge1xuICAgIHB1YmxpYyB0eXBlID0gRmlsdGVyVHlwZS5EYXRlO1xuICAgIHB1YmxpYyBvcGVyYXRvcnMgPSBbLi4uRGF0ZU9wZXJhdG9yc107XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFRpbWV6b25lOiBzdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5IHNraXBUaW1lem9uZTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmluaXRpb246IEJhc2VGaWx0ZXJEZWZpbml0aW9uICYgRGF0ZUZpbHRlckRlZmluaXRpb24pIHtcbiAgICAgICAgc3VwZXIoZGVmaW5pdGlvbik7XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0VGltZXpvbmUgPSBkZWZpbml0aW9uLmRlZmF1bHRUaW1lem9uZSA/PyBcIkFtZXJpY2EvTW9udHJlYWxcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0V2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgaWYgKHJ1bGUub3BlcmF0aW9uID09PSBGaWx0ZXJPcGVyYXRvclR5cGVzLklzTnVsbCB8fCBydWxlLm9wZXJhdGlvbiA9PT0gRmlsdGVyT3BlcmF0b3JUeXBlcy5Jc05vdE51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5nZXRXaGVyZU9wdGlvbnMocnVsZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBDaGVjayBpZiB0aGUgY2xpZW50IHNlbmRzIHVzIGEgdGltZXpvbmVcbiAgICAgICAgY29uc3Qgb2Zmc2V0TWlsbGlzZWNvbmRzID0gZ2V0VGltZXpvbmVPZmZzZXQodGhpcy5kZWZhdWx0VGltZXpvbmUpO1xuXG4gICAgICAgIGlmIChydWxlLm9wZXJhdGlvbiA9PT0gRmlsdGVyT3BlcmF0b3JUeXBlcy5CZXR3ZWVuIHx8IHJ1bGUub3BlcmF0aW9uID09PSBGaWx0ZXJPcGVyYXRvclR5cGVzLk5vdEJldHdlZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuc2tpcFRpbWV6b25lXG4gICAgICAgICAgICAgICAgPyBydWxlLnZhbHVlXG4gICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgYWRkTWlsbGlzZWNvbmRzKHN0YXJ0T2ZEYXkocGFyc2VKU09OKHJ1bGUudmFsdWVbMF0pKSwgb2Zmc2V0TWlsbGlzZWNvbmRzKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICBhZGRNaWxsaXNlY29uZHMoZW5kT2ZEYXkocGFyc2VKU09OKHJ1bGUudmFsdWVbMV0pKSwgb2Zmc2V0TWlsbGlzZWNvbmRzKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgICAgIC4uLnJ1bGUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlSlNPTihydWxlLnZhbHVlIGFzIGFueSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5za2lwVGltZXpvbmUgPyBzdGFydE9mRGF5KHBhcnNlZFZhbHVlKS50b0lTT1N0cmluZygpIDogYWRkTWlsbGlzZWNvbmRzKHN0YXJ0T2ZEYXkocGFyc2VkVmFsdWUpLCBvZmZzZXRNaWxsaXNlY29uZHMpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuc2tpcFRpbWV6b25lID8gZW5kT2ZEYXkocGFyc2VkVmFsdWUpLnRvSVNPU3RyaW5nKCkgOiBhZGRNaWxsaXNlY29uZHMoZW5kT2ZEYXkocGFyc2VkVmFsdWUpLCBvZmZzZXRNaWxsaXNlY29uZHMpLnRvSVNPU3RyaW5nKCk7XG5cbiAgICAgICAgc3dpdGNoIChydWxlLm9wZXJhdGlvbikge1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGVzLkVxdWFsOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEVxdWFsV2hlcmVPcHRpb25zKHJ1bGUsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGVzLk5vdEVxdWFsOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE5vdEVxdWFsV2hlcmVPcHRpb25zKHJ1bGUsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGVzLkxlc3M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGVzc1doZXJlT3B0aW9ucyhydWxlLCBzdGFydCk7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZXMuTGVzc09yRXF1YWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGVzc09yRXF1YWxXaGVyZU9wdGlvbnMocnVsZSwgZW5kKTtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlcy5HcmVhdGVyOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEdyZWF0ZXJXaGVyZU9wdGlvbnMocnVsZSwgZW5kKTtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlcy5HcmVhdGVyT3JFcXVhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRHcmVhdGVyT3JFcXVhbFdoZXJlT3B0aW9ucyhydWxlLCBzdGFydCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBzdXBlci5nZXRXaGVyZU9wdGlvbnMocnVsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEVxdWFsV2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZyk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBGaWx0ZXJPcGVyYXRvclR5cGVzLkJldHdlZW4sXG4gICAgICAgICAgICB2YWx1ZTogW3N0YXJ0LCBlbmRdLFxuICAgICAgICAgICAgaWQ6IHJ1bGUuaWRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXROb3RFcXVhbFdoZXJlT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW09wLm9yXTogW1xuICAgICAgICAgICAgICAgIGF3YWl0IHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5MZXNzLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgYXdhaXQgc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBGaWx0ZXJPcGVyYXRvclR5cGVzLkdyZWF0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbmQsXG4gICAgICAgICAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldExlc3NXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIHN0YXJ0OiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5MZXNzLFxuICAgICAgICAgICAgdmFsdWU6IHN0YXJ0LFxuICAgICAgICAgICAgaWQ6IHJ1bGUuaWRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRMZXNzT3JFcXVhbFdoZXJlT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgZW5kOiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5MZXNzT3JFcXVhbCxcbiAgICAgICAgICAgIHZhbHVlOiBlbmQsXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEdyZWF0ZXJXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIGVuZDogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9yVHlwZXMuR3JlYXRlcixcbiAgICAgICAgICAgIHZhbHVlOiBlbmQsXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEdyZWF0ZXJPckVxdWFsV2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBzdGFydDogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9yVHlwZXMuR3JlYXRlck9yRXF1YWwsXG4gICAgICAgICAgICB2YWx1ZTogc3RhcnQsXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
125
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9kYXRlLmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1Q0FBNEU7QUFDNUUsNkNBQWdEO0FBQ2hELHlDQUE2QztBQUU3Qyw0Q0FBa0U7QUFDbEUsa0NBQXFDO0FBQ3JDLHFDQUF3RDtBQU94RCxtRkFBbUY7QUFDbkYsRUFBRTtBQUNGLHNIQUFzSDtBQUN0SCw0QkFBNEI7QUFDNUIsc0dBQXNHO0FBQ3RHLGdHQUFnRztBQUNoRyxFQUFFO0FBQ0Ysd0hBQXdIO0FBQ3hILGdFQUFnRTtBQUNoRSxNQUFhLFVBQVcsU0FBUSxlQUFNO0lBT2xDLFlBQVksVUFBdUQ7O1FBQy9ELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQVBmLFNBQUksR0FBRyxpQkFBVSxDQUFDLElBQUksQ0FBQztRQUN2QixjQUFTLEdBQUcsQ0FBQyxHQUFHLHlCQUFhLENBQUMsQ0FBQztRQVFsQyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQUEsVUFBVSxDQUFDLGVBQWUsbUNBQUksa0JBQWtCLENBQUM7SUFDNUUsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBb0I7UUFDN0MsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLFNBQVMsRUFBRTtZQUNuRyxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEM7UUFFRCxnREFBZ0Q7UUFDaEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFBLCtCQUFpQixFQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVuRSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssK0JBQW1CLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssK0JBQW1CLENBQUMsVUFBVSxFQUFFO1lBQ3JHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FB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RUFBRSwrQkFBbUIsQ0FBQyxPQUFPO1lBQ3RDLEtBQUssRUFBRSxHQUFHO1lBQ1YsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ2QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxJQUFvQixFQUFFLEtBQWE7UUFDM0UsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDO1lBQ3pCLFNBQVMsRUFBRSwrQkFBbUIsQ0FBQyxjQUFjO1lBQzdDLEtBQUssRUFBRSxLQUFLO1lBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ2QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBeEhELGdDQXdIQyIsImZpbGUiOiJsaWIvZmlsdGVyL2ZpbHRlcnMvZGF0ZS5maWx0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZGRNaWxsaXNlY29uZHMsIGVuZE9mRGF5LCBwYXJzZUpTT04sIHN0YXJ0T2ZEYXkgfSBmcm9tIFwiZGF0ZS1mbnNcIjtcbmltcG9ydCB7IGdldFRpbWV6b25lT2Zmc2V0IH0gZnJvbSBcImRhdGUtZm5zLXR6XCI7XG5pbXBvcnQgeyBPcCwgV2hlcmVPcHRpb25zIH0gZnJvbSBcInNlcXVlbGl6ZVwiO1xuaW1wb3J0IHsgUXVlcnlSdWxlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBEYXRlT3BlcmF0b3JzLCBGaWx0ZXJPcGVyYXRvclR5cGVzIH0gZnJvbSBcIi4uL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gXCIuLi90eXBlXCI7XG5pbXBvcnQgeyBCYXNlRmlsdGVyRGVmaW5pdGlvbiwgRmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZUZpbHRlckRlZmluaXRpb24ge1xuICAgIHNraXBUaW1lem9uZT86IGJvb2xlYW47XG4gICAgZGVmYXVsdFRpbWV6b25lPzogc3RyaW5nO1xufVxuXG4vLyBGaWx0ZXJzIGEgcm93IGJ5IGV4YWN0IGRhdGUgZ2l2ZW4gaW4gdGhlIHJ1bGVzLiBXZSBzdHJpcCB0aGUgdGltZSBmcm9tIHRoZSBkYXRlLlxuLy9cbi8vIERlcGVuZGluZyBvbiB0aGUgaW5jbHVzaXZpdHkgb2YgeW91ciByZXF1ZXN0IHdlIHVzZSB0aGUgc3RhcnQgb2YgZGF5IG9yIGVuZCBvZiBkYXksIGZvciBleGFtcGxlIGlmIHRoZSBydWxlJ3MgdmFsdWVcbi8vIGlzIFwiMjAyMC0wMy0wNlQwMDo1NToxMlwiO1xuLy8gIC0gQW5kIGl0cyBvcGVyYXRvciBpcyBMZXNzT3JFcXVhbCB3ZSB3aWxsIG91dHB1dCBcIjwgMjAyMC0wMy0wNlQwMDowMDowMFwiIHRvIGV4Y2x1ZGUgdGhlIGdpdmVuIGRheS5cbi8vICAtIEFuZCBpdHMgb3BlcmF0b3IgaXMgTGVzcywgd2Ugd2lsbCBvdXRwdXQgXCI8IDIwMjAtMDMtMDZUMjM6NTk6NTlcIiB0byBpbmNsdWRlIHRoZSBnaXZlbiBkYXkuXG4vL1xuLy8gRm9yIEJldHdlZW4gYW5kIE5vdEJldHdlZW4gb3BlcmF0b3JzLCB3ZSBhbHdheXMgaW5jbHVkZSB0aGUgZ2l2ZW4gZmlyc3QgZGF5IGFuZCBsYXN0IGRheSwgc28gbWFrZSBzdXJlIHRvIHNocmluayB5b3VyXG4vLyB0aW1lZnJhbWUgYnkgb25lIGRheSBmb3IgZWFjaCBzaWRlIHlvdSBkb24ndCB3YW50IHRvIGluY2x1ZGUuXG5leHBvcnQgY2xhc3MgRGF0ZUZpbHRlciBleHRlbmRzIEZpbHRlciBpbXBsZW1lbnRzIERhdGVGaWx0ZXJEZWZpbml0aW9uIHtcbiAgICBwdWJsaWMgdHlwZSA9IEZpbHRlclR5cGUuRGF0ZTtcbiAgICBwdWJsaWMgb3BlcmF0b3JzID0gWy4uLkRhdGVPcGVyYXRvcnNdO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRUaW1lem9uZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBza2lwVGltZXpvbmUhOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoZGVmaW5pdGlvbjogQmFzZUZpbHRlckRlZmluaXRpb24gJiBEYXRlRmlsdGVyRGVmaW5pdGlvbikge1xuICAgICAgICBzdXBlcihkZWZpbml0aW9uKTtcblxuICAgICAgICB0aGlzLmRlZmF1bHRUaW1lem9uZSA9IGRlZmluaXRpb24uZGVmYXVsdFRpbWV6b25lID8/IFwiQW1lcmljYS9Nb250cmVhbFwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAocnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuSXNOdWxsIHx8IHJ1bGUub3BlcmF0aW9uID09PSBGaWx0ZXJPcGVyYXRvclR5cGVzLklzTm90TnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyhydWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IENoZWNrIGlmIHRoZSBjbGllbnQgc2VuZHMgdXMgYSB0aW1lem9uZVxuICAgICAgICBjb25zdCBvZmZzZXRNaWxsaXNlY29uZHMgPSBnZXRUaW1lem9uZU9mZnNldCh0aGlzLmRlZmF1bHRUaW1lem9uZSk7XG5cbiAgICAgICAgaWYgKHJ1bGUub3BlcmF0aW9uID09PSBGaWx0ZXJPcGVyYXRvclR5cGVzLkJldHdlZW4gfHwgcnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuTm90QmV0d2Vlbikge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJ1bGUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnNraXBUaW1lem9uZVxuICAgICAgICAgICAgICAgID8gcnVsZS52YWx1ZVxuICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIGFkZE1pbGxpc2Vjb25kcyhzdGFydE9mRGF5KHBhcnNlSlNPTihydWxlLnZhbHVlWzBdKSksIG9mZnNldE1pbGxpc2Vjb25kcykudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgYWRkTWlsbGlzZWNvbmRzKGVuZE9mRGF5KHBhcnNlSlNPTihydWxlLnZhbHVlWzFdKSksIG9mZnNldE1pbGxpc2Vjb25kcykudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAuLi5ydWxlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSBwYXJzZUpTT04ocnVsZS52YWx1ZSBhcyBhbnkpO1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc2tpcFRpbWV6b25lID8gc3RhcnRPZkRheShwYXJzZWRWYWx1ZSkudG9JU09TdHJpbmcoKSA6IGFkZE1pbGxpc2Vjb25kcyhzdGFydE9mRGF5KHBhcnNlZFZhbHVlKSwgb2Zmc2V0TWlsbGlzZWNvbmRzKS50b0lTT1N0cmluZygpO1xuICAgICAgICBjb25zdCBlbmQgPSB0aGlzLnNraXBUaW1lem9uZSA/IGVuZE9mRGF5KHBhcnNlZFZhbHVlKS50b0lTT1N0cmluZygpIDogYWRkTWlsbGlzZWNvbmRzKGVuZE9mRGF5KHBhcnNlZFZhbHVlKSwgb2Zmc2V0TWlsbGlzZWNvbmRzKS50b0lTT1N0cmluZygpO1xuXG4gICAgICAgIHN3aXRjaCAocnVsZS5vcGVyYXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlcy5FcXVhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRFcXVhbFdoZXJlT3B0aW9ucyhydWxlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RFcXVhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROb3RFcXVhbFdoZXJlT3B0aW9ucyhydWxlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlcy5MZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExlc3NXaGVyZU9wdGlvbnMocnVsZSwgc3RhcnQpO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGVzLkxlc3NPckVxdWFsOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExlc3NPckVxdWFsV2hlcmVPcHRpb25zKHJ1bGUsIGVuZCk7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZXMuR3JlYXRlcjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRHcmVhdGVyV2hlcmVPcHRpb25zKHJ1bGUsIGVuZCk7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZXMuR3JlYXRlck9yRXF1YWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0R3JlYXRlck9yRXF1YWxXaGVyZU9wdGlvbnMocnVsZSwgc3RhcnQpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHJ1bGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRFcXVhbFdoZXJlT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5CZXR3ZWVuLFxuICAgICAgICAgICAgdmFsdWU6IFtzdGFydCwgZW5kXSxcbiAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0Tm90RXF1YWxXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBhd2FpdCBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBGaWx0ZXJPcGVyYXRvclR5cGVzLkxlc3MsXG4gICAgICAgICAgICB2YWx1ZTogc3RhcnQsXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2Vjb25kID0gYXdhaXQgc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5HcmVhdGVyLFxuICAgICAgICAgICAgdmFsdWU6IGVuZCxcbiAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWZpcnN0IHx8ICFzZWNvbmQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbT3Aub3JdOiBbZmlyc3QsIHNlY29uZF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldExlc3NXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIHN0YXJ0OiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5MZXNzLFxuICAgICAgICAgICAgdmFsdWU6IHN0YXJ0LFxuICAgICAgICAgICAgaWQ6IHJ1bGUuaWRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRMZXNzT3JFcXVhbFdoZXJlT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgZW5kOiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5MZXNzT3JFcXVhbCxcbiAgICAgICAgICAgIHZhbHVlOiBlbmQsXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEdyZWF0ZXJXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIGVuZDogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9yVHlwZXMuR3JlYXRlcixcbiAgICAgICAgICAgIHZhbHVlOiBlbmQsXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEdyZWF0ZXJPckVxdWFsV2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBzdGFydDogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9yVHlwZXMuR3JlYXRlck9yRXF1YWwsXG4gICAgICAgICAgICB2YWx1ZTogc3RhcnQsXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { QueryModel, QueryRuleModel } from "../..";
|
|
1
|
+
import { IRule, QueryModel, QueryRuleModel } from "../..";
|
|
2
2
|
export interface DefaultFilterDefinition {
|
|
3
3
|
filter: QueryRuleModel | QueryModel;
|
|
4
4
|
required: boolean;
|
|
5
5
|
}
|
|
6
|
-
export declare class DefaultFilter implements DefaultFilterDefinition {
|
|
6
|
+
export declare class DefaultFilter implements DefaultFilterDefinition, IRule {
|
|
7
7
|
filter: QueryRuleModel | QueryModel;
|
|
8
8
|
required: boolean;
|
|
9
|
-
|
|
9
|
+
readonly _type = "default_filter";
|
|
10
10
|
constructor(filter: QueryRuleModel | QueryModel, required?: boolean);
|
|
11
|
-
static validate(definition:
|
|
11
|
+
static validate(definition: IRule): boolean;
|
|
12
12
|
}
|
|
@@ -13,4 +13,4 @@ class DefaultFilter {
|
|
|
13
13
|
}
|
|
14
14
|
exports.DefaultFilter = DefaultFilter;
|
|
15
15
|
|
|
16
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9kZWZhdWx0LmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSxNQUFhLGFBQWE7SUFHdEIsWUFBbUIsTUFBbUMsRUFBUyxXQUFXLElBQUk7UUFBM0QsV0FBTSxHQUFOLE1BQU0sQ0FBNkI7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFPO1FBRjlELFVBQUssR0FBRyxnQkFBZ0IsQ0FBQztJQUV3QyxDQUFDO0lBRTNFLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBaUI7UUFDcEMsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssZ0JBQWdCLENBQUM7SUFDcEQsQ0FBQztDQUNKO0FBUkQsc0NBUUMiLCJmaWxlIjoibGliL2ZpbHRlci9maWx0ZXJzL2RlZmF1bHQuZmlsdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJ1bGUsIFF1ZXJ5TW9kZWwsIFF1ZXJ5UnVsZU1vZGVsIH0gZnJvbSBcIi4uLy4uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdEZpbHRlckRlZmluaXRpb24ge1xuICAgIGZpbHRlcjogUXVlcnlSdWxlTW9kZWwgfCBRdWVyeU1vZGVsO1xuICAgIHJlcXVpcmVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgRGVmYXVsdEZpbHRlciBpbXBsZW1lbnRzIERlZmF1bHRGaWx0ZXJEZWZpbml0aW9uLCBJUnVsZSB7XG4gICAgcHVibGljIHJlYWRvbmx5IF90eXBlID0gXCJkZWZhdWx0X2ZpbHRlclwiO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGZpbHRlcjogUXVlcnlSdWxlTW9kZWwgfCBRdWVyeU1vZGVsLCBwdWJsaWMgcmVxdWlyZWQgPSB0cnVlKSB7fVxuXG4gICAgcHVibGljIHN0YXRpYyB2YWxpZGF0ZShkZWZpbml0aW9uOiBJUnVsZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5pdGlvbltcIl90eXBlXCJdID09PSBcImRlZmF1bHRfZmlsdGVyXCI7XG4gICAgfVxufVxuIl19
|
|
@@ -5,6 +5,7 @@ import { PathModel } from "../../models/path.model";
|
|
|
5
5
|
import { DataFilterUserModel } from "../../models/user.model";
|
|
6
6
|
import { FilterBaseConfigurationModel } from "../models/filter-configuration.model";
|
|
7
7
|
import { Condition, QueryModel, QueryRuleModel } from "../models/query.model";
|
|
8
|
+
import { IRule } from "../models/rule.model";
|
|
8
9
|
import { CustomOperator, FilterOperators, FilterOperatorTypes } from "../operators";
|
|
9
10
|
import { FilterType } from "../type";
|
|
10
11
|
export interface FilterConditionRule {
|
|
@@ -45,17 +46,17 @@ export interface BaseFilterDefinition {
|
|
|
45
46
|
*/
|
|
46
47
|
private?: boolean;
|
|
47
48
|
}
|
|
48
|
-
export interface FilterDefinition extends BaseFilterDefinition {
|
|
49
|
+
export interface FilterDefinition extends BaseFilterDefinition, IRule {
|
|
49
50
|
type: FilterType;
|
|
50
51
|
operators: (FilterOperatorTypes | CustomOperator)[];
|
|
51
|
-
getConfig<Request>(key: string, req: Request, user?: DataFilterUserModel): Promise<FilterBaseConfigurationModel>;
|
|
52
|
+
getConfig<Request>(key: string, req: Request, user?: DataFilterUserModel): Promise<FilterBaseConfigurationModel | null>;
|
|
52
53
|
getIncludePaths(rule: QueryRuleModel, data?: object): PathModel[];
|
|
53
|
-
getWhereOptions(rule: QueryRuleModel): Promise<WhereOptions>;
|
|
54
|
-
getHavingOptions(rule: QueryRuleModel): Promise<WhereOptions>;
|
|
54
|
+
getWhereOptions(rule: QueryRuleModel): Promise<WhereOptions | undefined>;
|
|
55
|
+
getHavingOptions(rule: QueryRuleModel): Promise<WhereOptions | undefined>;
|
|
55
56
|
usePathCondition(query: QueryModel): boolean;
|
|
56
57
|
}
|
|
57
58
|
export declare abstract class Filter implements FilterDefinition {
|
|
58
|
-
|
|
59
|
+
readonly _type = "filter";
|
|
59
60
|
protected _translateService: TranslateAdapter;
|
|
60
61
|
set translateService(translateService: TranslateAdapter);
|
|
61
62
|
type: FilterType;
|
|
@@ -70,20 +71,20 @@ export declare abstract class Filter implements FilterDefinition {
|
|
|
70
71
|
private?: boolean;
|
|
71
72
|
enabled?: ({ user, request }: EnabledConfig) => Promise<boolean>;
|
|
72
73
|
paranoid: boolean;
|
|
73
|
-
static validate(definition:
|
|
74
|
+
static validate(definition: IRule): boolean;
|
|
74
75
|
protected constructor(definition?: BaseFilterDefinition);
|
|
75
76
|
addOperators(...operator: (FilterOperatorTypes | CustomOperator)[]): Filter;
|
|
76
77
|
removeOperators(...operator: (FilterOperatorTypes | CustomOperator)[]): Filter;
|
|
77
78
|
setOperators(...operator: (FilterOperatorTypes | CustomOperator)[]): Filter;
|
|
78
|
-
getConfig<Request = any>(key: string, request: Request, user?: DataFilterUserModel): Promise<FilterBaseConfigurationModel>;
|
|
79
|
+
getConfig<Request = any>(key: string, request: Request, user?: DataFilterUserModel): Promise<FilterBaseConfigurationModel | null>;
|
|
79
80
|
getIncludePaths(rule: QueryRuleModel, data?: object): PathModel[];
|
|
80
|
-
getWhereOptions(rule: QueryRuleModel, name?: string): Promise<WhereOptions>;
|
|
81
|
-
getHavingOptions(rule: QueryRuleModel): Promise<WhereOptions>;
|
|
81
|
+
getWhereOptions(rule: QueryRuleModel, name?: string): Promise<WhereOptions | undefined>;
|
|
82
|
+
getHavingOptions(rule: QueryRuleModel): Promise<WhereOptions | undefined>;
|
|
82
83
|
usePathCondition(query: QueryModel): boolean;
|
|
83
|
-
protected getConditionWhereOptions(where: WhereOptions, rule: QueryRuleModel): WhereOptions;
|
|
84
|
+
protected getConditionWhereOptions(where: WhereOptions | undefined, rule: QueryRuleModel): WhereOptions | undefined;
|
|
84
85
|
protected generateRuleWhereOptions(filter: FilterCondition, options: WhereOptions[], parentRule: QueryRuleModel): void;
|
|
85
|
-
protected getOperatorHavingOptions(operator: FilterOperators, where
|
|
86
|
-
protected getOperatorWhereOptions(operator: FilterOperators, where: WhereOptions, value: any): WhereOptions;
|
|
86
|
+
protected getOperatorHavingOptions(operator: FilterOperators, where?: WhereOptions): WhereOptions | undefined;
|
|
87
|
+
protected getOperatorWhereOptions(operator: FilterOperators, where: WhereOptions | undefined, value: any): WhereOptions | undefined;
|
|
87
88
|
private getRuleFromKeys;
|
|
88
89
|
private transformCondition;
|
|
89
90
|
private transformForJsonArray;
|
|
@@ -32,6 +32,7 @@ class Filter {
|
|
|
32
32
|
return this;
|
|
33
33
|
}
|
|
34
34
|
async getConfig(key, request, user) {
|
|
35
|
+
var _a;
|
|
35
36
|
if (this.private) {
|
|
36
37
|
return null;
|
|
37
38
|
}
|
|
@@ -41,22 +42,23 @@ class Filter {
|
|
|
41
42
|
const config = {
|
|
42
43
|
type: this.type,
|
|
43
44
|
operators: await Promise.all(this.operators.map(async (x) => {
|
|
45
|
+
var _a, _b;
|
|
44
46
|
if (typeof x === "string") {
|
|
45
47
|
return {
|
|
46
48
|
id: x,
|
|
47
|
-
name: await this._translateService.getTranslation(user === null || user === void 0 ? void 0 : user.language, filter_utils_1.FilterUtils.getOperatorTranslationKey(x))
|
|
49
|
+
name: await this._translateService.getTranslation((_a = user === null || user === void 0 ? void 0 : user.language) !== null && _a !== void 0 ? _a : "", filter_utils_1.FilterUtils.getOperatorTranslationKey(x))
|
|
48
50
|
};
|
|
49
51
|
}
|
|
50
52
|
return {
|
|
51
53
|
id: x.name,
|
|
52
|
-
name: await this._translateService.getTranslation(user === null || user === void 0 ? void 0 : user.language, filter_utils_1.FilterUtils.getCustomOperatorTranslationKey(key, x.name))
|
|
54
|
+
name: await this._translateService.getTranslation((_b = user === null || user === void 0 ? void 0 : user.language) !== null && _b !== void 0 ? _b : "", filter_utils_1.FilterUtils.getCustomOperatorTranslationKey(key, x.name))
|
|
53
55
|
};
|
|
54
56
|
}))
|
|
55
57
|
};
|
|
56
58
|
if (this.group) {
|
|
57
59
|
config.group = {
|
|
58
60
|
key: this.group,
|
|
59
|
-
name: await this._translateService.getTranslation(user === null || user === void 0 ? void 0 : user.language, filter_utils_1.FilterUtils.getGroupTranslationKey(this.group))
|
|
61
|
+
name: await this._translateService.getTranslation((_a = user === null || user === void 0 ? void 0 : user.language) !== null && _a !== void 0 ? _a : "", filter_utils_1.FilterUtils.getGroupTranslationKey(this.group))
|
|
60
62
|
};
|
|
61
63
|
}
|
|
62
64
|
return config;
|
|
@@ -78,15 +80,15 @@ class Filter {
|
|
|
78
80
|
rule.operation = op.operator;
|
|
79
81
|
}
|
|
80
82
|
const where = ((rule === null || rule === void 0 ? void 0 : rule.value) === undefined || this.having) ?
|
|
81
|
-
this.getConditionWhereOptions(
|
|
83
|
+
this.getConditionWhereOptions(undefined, rule) :
|
|
82
84
|
this.getConditionWhereOptions(this.transformCondition(rule, name), rule);
|
|
83
85
|
return this.getOperatorWhereOptions(rule.operation, where, rule.value);
|
|
84
86
|
}
|
|
85
87
|
async getHavingOptions(rule) {
|
|
86
88
|
if (!this.having) {
|
|
87
|
-
return this.getOperatorHavingOptions(rule.operation
|
|
89
|
+
return this.getOperatorHavingOptions(rule.operation);
|
|
88
90
|
}
|
|
89
|
-
let options;
|
|
91
|
+
let options = undefined;
|
|
90
92
|
if (this.having.attribute) {
|
|
91
93
|
options = this.having;
|
|
92
94
|
}
|
|
@@ -170,7 +172,7 @@ class Filter {
|
|
|
170
172
|
return where;
|
|
171
173
|
}
|
|
172
174
|
if (!op.where && !op.operator) {
|
|
173
|
-
return
|
|
175
|
+
return;
|
|
174
176
|
}
|
|
175
177
|
if (!op.where) {
|
|
176
178
|
return where;
|
|
@@ -206,6 +208,7 @@ class Filter {
|
|
|
206
208
|
return this.transformForJsonObject(rule, name);
|
|
207
209
|
}
|
|
208
210
|
transformForJsonArray(rule, name) {
|
|
211
|
+
var _a;
|
|
209
212
|
const colName = this.path ? sequelize_1.Sequelize.col(name) : sequelize_1.Sequelize.literal(name);
|
|
210
213
|
if (rule.operation === operators_1.FilterOperatorTypes.Contains || rule.operation === operators_1.FilterOperatorTypes.NotContains) {
|
|
211
214
|
/**
|
|
@@ -216,17 +219,18 @@ class Filter {
|
|
|
216
219
|
value: true
|
|
217
220
|
};
|
|
218
221
|
const value = typeof rule.value === "string" ? `"${rule.value}"` : rule.value;
|
|
219
|
-
if (this.json.path) {
|
|
222
|
+
if ((_a = this.json) === null || _a === void 0 ? void 0 : _a.path) {
|
|
220
223
|
return (0, sequelize_1.where)((0, sequelize_1.fn)("JSON_CONTAINS", colName, value, this.json.path), sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule));
|
|
221
224
|
}
|
|
222
225
|
return (0, sequelize_1.where)((0, sequelize_1.fn)("JSON_CONTAINS", colName, value), sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule));
|
|
223
226
|
}
|
|
224
|
-
return
|
|
227
|
+
return;
|
|
225
228
|
}
|
|
226
229
|
transformForJsonObject(rule, name) {
|
|
230
|
+
var _a;
|
|
227
231
|
const colName = this.path ? sequelize_1.Sequelize.col(name) : sequelize_1.Sequelize.literal(name);
|
|
228
232
|
const value = sequelize_utils_1.SequelizeUtils.generateWhereValue(rule);
|
|
229
|
-
if (this.json.path) {
|
|
233
|
+
if ((_a = this.json) === null || _a === void 0 ? void 0 : _a.path) {
|
|
230
234
|
return sequelize_1.Sequelize.where(sequelize_1.Sequelize.fn("JSON_EXTRACT", colName, this.json.path), value);
|
|
231
235
|
}
|
|
232
236
|
return sequelize_1.Sequelize.where(sequelize_1.Sequelize.fn("JSON_EXTRACT", colName), value);
|
|
@@ -234,4 +238,4 @@ class Filter {
|
|
|
234
238
|
}
|
|
235
239
|
exports.Filter = Filter;
|
|
236
240
|
|
|
237
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQThGO0FBSzlGLDJEQUF1RDtBQUN2RCxrREFBOEM7QUFJOUMsNENBQW9GO0FBNERwRixNQUFzQixNQUFNO0lBS3hCLElBQVcsZ0JBQWdCLENBQUMsZ0JBQWtDO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztJQUM5QyxDQUFDO0lBZU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUE0QjtRQUMvQyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUM7SUFDNUMsQ0FBQztJQUVELFlBQXNCLFVBQWlDO1FBekIvQyxVQUFLLEdBQUcsUUFBUSxDQUFDO1FBbUJsQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBT25CLElBQUksVUFBVSxFQUFFO1lBQ1osTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLEdBQUcsUUFBa0Q7UUFDckUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sZUFBZSxDQUFDLEdBQUcsUUFBa0Q7UUFDeEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxZQUFZLENBQUMsR0FBRyxRQUFrRDtRQUNyRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FB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QWtCLENBQUMsT0FBb0IsQ0FBYyxDQUFDLENBQUE7U0FDMUg7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8sc0JBQXNCLENBQUMsSUFBb0IsRUFBRSxJQUFZO1FBQzdELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRSxNQUFNLEtBQUssR0FBRyxnQ0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDaEIsT0FBTyxxQkFBUyxDQUFDLEtBQUssQ0FBQyxxQkFBUyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBa0IsQ0FBQyxDQUFDO1NBQ3JHO1FBRUQsT0FBTyxxQkFBUyxDQUFDLEtBQUssQ0FBQyxxQkFBUyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLEVBQUUsS0FBa0IsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7Q0FDSjtBQWxTRCx3QkFrU0MiLCJmaWxlIjoibGliL2ZpbHRlci9maWx0ZXJzL2ZpbHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZuLCBMb2dpY1R5cGUsIE9wLCBTZXF1ZWxpemUsIHdoZXJlLCBXaGVyZU9wZXJhdG9ycywgV2hlcmVPcHRpb25zIH0gZnJvbSBcInNlcXVlbGl6ZVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlQWRhcHRlciB9IGZyb20gXCIuLi8uLi9hZGFwdGVycy90cmFuc2xhdGUuYWRhcHRlclwiO1xuaW1wb3J0IHsgSW5jbHVkZVdoZXJlTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2luY2x1ZGUubW9kZWxcIjtcbmltcG9ydCB7IFBhdGhNb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcGF0aC5tb2RlbFwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclVzZXJNb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvdXNlci5tb2RlbFwiO1xuaW1wb3J0IHsgU2VxdWVsaXplVXRpbHMgfSBmcm9tIFwiLi4vLi4vc2VxdWVsaXplLnV0aWxzXCI7XG5pbXBvcnQgeyBGaWx0ZXJVdGlscyB9IGZyb20gXCIuLi9maWx0ZXIudXRpbHNcIjtcbmltcG9ydCB7IEZpbHRlckJhc2VDb25maWd1cmF0aW9uTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpbHRlci1jb25maWd1cmF0aW9uLm1vZGVsXCI7XG5pbXBvcnQgeyBDb25kaXRpb24sIFF1ZXJ5TW9kZWwsIFF1ZXJ5UnVsZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9xdWVyeS5tb2RlbFwiO1xuaW1wb3J0IHsgUnVsZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9ydWxlLm1vZGVsXCI7XG5pbXBvcnQgeyBDdXN0b21PcGVyYXRvciwgRmlsdGVyT3BlcmF0b3JzLCBGaWx0ZXJPcGVyYXRvclR5cGVzIH0gZnJvbSBcIi4uL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gXCIuLi90eXBlXCI7XG5cbi8vIFRPRE86IERlcHJlY2F0ZSBrZXkgdG8gdXNlIGF0dHJpYnV0ZSBpbnN0ZWFkIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgQmFzZUZpbHRlckRlZmluaXRpb25cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyQ29uZGl0aW9uUnVsZSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgcGF0aD86IHN0cmluZztcbiAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9ycztcbiAgICB2YWx1ZT86ICh1bmtub3duIHwgdW5rbm93bltdKSB8ICgodmFsdWU6IHVua25vd24gfCB1bmtub3duW10pID0+IHVua25vd24gfCB1bmtub3duW10pO1xuICAgIHdoZXJlPzogSW5jbHVkZVdoZXJlTW9kZWw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyQ29uZGl0aW9uIHtcbiAgICBjb25kaXRpb246IENvbmRpdGlvbjtcbiAgICBydWxlczogKEZpbHRlckNvbmRpdGlvblJ1bGUgfCBGaWx0ZXJDb25kaXRpb24pW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkNvbmZpZyB7XG4gICAgdHlwZTogXCJhcnJheVwiIHwgXCJvYmplY3RcIjtcbiAgICBwYXRoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBQYXRoQ29uZGl0aW9uID0gYm9vbGVhbiB8IHtcbiAgICBbZmlsdGVyOiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5hYmxlZENvbmZpZzxVc2VyID0gYW55LCBSZXF1ZXN0ID0gYW55PiB7XG4gICAgdXNlcj86IFVzZXI7XG4gICAgcmVxdWVzdD86IFJlcXVlc3Rcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlRmlsdGVyRGVmaW5pdGlvbiB7XG4gICAgYXR0cmlidXRlOiBzdHJpbmc7XG4gICAgcGF0aD86IHN0cmluZztcbiAgICBoYXZpbmc/OiBhbnk7XG4gICAgcGFyYW5vaWQ/OiBib29sZWFuO1xuICAgIGNvbmRpdGlvbj86IEZpbHRlckNvbmRpdGlvbjtcbiAgICBncm91cD86IHN0cmluZztcbiAgICB3aGVyZT86IEluY2x1ZGVXaGVyZU1vZGVsO1xuICAgIHBhdGhDb25kaXRpb24/OiBQYXRoQ29uZGl0aW9uO1xuICAgIGpzb24/OiBKc29uQ29uZmlnO1xuICAgIGVuYWJsZWQ/OiAoeyB1c2VyLCByZXF1ZXN0IH06IEVuYWJsZWRDb25maWcpID0+IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIG1lYW5zIHRoYXQgdGhlIGNvbmZpZyB3aWxsIG5vdCBiZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBwcml2YXRlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJEZWZpbml0aW9uIGV4dGVuZHMgQmFzZUZpbHRlckRlZmluaXRpb24ge1xuICAgIHR5cGU6IEZpbHRlclR5cGU7XG4gICAgb3BlcmF0b3JzOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdO1xuXG4gICAgZ2V0Q29uZmlnPFJlcXVlc3Q+KGtleTogc3RyaW5nLCByZXE6IFJlcXVlc3QsIHVzZXI/OiBEYXRhRmlsdGVyVXNlck1vZGVsKTogUHJvbWlzZTxGaWx0ZXJCYXNlQ29uZmlndXJhdGlvbk1vZGVsPjtcbiAgICBnZXRJbmNsdWRlUGF0aHMocnVsZTogUXVlcnlSdWxlTW9kZWwsIGRhdGE/OiBvYmplY3QpOiBQYXRoTW9kZWxbXTtcbiAgICBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz47XG4gICAgZ2V0SGF2aW5nT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCk6IFByb21pc2U8V2hlcmVPcHRpb25zPjtcbiAgICB1c2VQYXRoQ29uZGl0aW9uKHF1ZXJ5OiBRdWVyeU1vZGVsKTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpbHRlciBpbXBsZW1lbnRzIEZpbHRlckRlZmluaXRpb24ge1xuICAgIHByaXZhdGUgX3R5cGUgPSBcImZpbHRlclwiO1xuXG4gICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVBZGFwdGVyO1xuXG4gICAgcHVibGljIHNldCB0cmFuc2xhdGVTZXJ2aWNlKHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZUFkYXB0ZXIpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IHRyYW5zbGF0ZVNlcnZpY2U7XG4gICAgfVxuXG4gICAgcHVibGljIHR5cGU6IEZpbHRlclR5cGU7XG4gICAgcHVibGljIG9wZXJhdG9yczogKEZpbHRlck9wZXJhdG9yVHlwZXMgfCBDdXN0b21PcGVyYXRvcilbXTtcbiAgICBwdWJsaWMgZ3JvdXA6IHN0cmluZztcbiAgICBwdWJsaWMgYXR0cmlidXRlOiBzdHJpbmc7XG4gICAgcHVibGljIGhhdmluZz86IGFueTtcbiAgICBwdWJsaWMgcGF0aD86IHN0cmluZztcbiAgICBwdWJsaWMgY29uZGl0aW9uPzogRmlsdGVyQ29uZGl0aW9uO1xuICAgIHB1YmxpYyBwYXRoQ29uZGl0aW9uPzogUGF0aENvbmRpdGlvbjtcbiAgICBwdWJsaWMganNvbj86IEpzb25Db25maWc7XG4gICAgcHVibGljIHByaXZhdGU/OiBib29sZWFuO1xuICAgIHB1YmxpYyBlbmFibGVkPzogKHsgdXNlciwgcmVxdWVzdCB9OiBFbmFibGVkQ29uZmlnKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICAgIHB1YmxpYyBwYXJhbm9pZCA9IHRydWU7XG5cbiAgICBwdWJsaWMgc3RhdGljIHZhbGlkYXRlKGRlZmluaXRpb246IEZpbHRlckRlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb25bXCJfdHlwZVwiXSA9PT0gXCJmaWx0ZXJcIjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZGVmaW5pdGlvbj86IEJhc2VGaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRlZmluaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFkZE9wZXJhdG9ycyguLi5vcGVyYXRvcjogKEZpbHRlck9wZXJhdG9yVHlwZXMgfCBDdXN0b21PcGVyYXRvcilbXSk6IEZpbHRlciB7XG4gICAgICAgIHRoaXMub3BlcmF0b3JzLnB1c2goLi4ub3BlcmF0b3IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlT3BlcmF0b3JzKC4uLm9wZXJhdG9yOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdKTogRmlsdGVyIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSB0aGlzLm9wZXJhdG9ycy5maWx0ZXIoeCA9PiAhb3BlcmF0b3Iuc29tZShvcCA9PiBvcCA9PT0geCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0T3BlcmF0b3JzKC4uLm9wZXJhdG9yOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdKTogRmlsdGVyIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSBbLi4ub3BlcmF0b3JdO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnPFJlcXVlc3QgPSBhbnk+KGtleTogc3RyaW5nLCByZXF1ZXN0OiBSZXF1ZXN0LCB1c2VyPzogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8RmlsdGVyQmFzZUNvbmZpZ3VyYXRpb25Nb2RlbD4ge1xuICAgICAgICBpZiAodGhpcy5wcml2YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZWQgJiYgIShhd2FpdCB0aGlzLmVuYWJsZWQoeyB1c2VyLCByZXF1ZXN0IH0pKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBvcGVyYXRvcnM6IGF3YWl0IFByb21pc2UuYWxsKHRoaXMub3BlcmF0b3JzLm1hcChhc3luYyB4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYXdhaXQgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyPy5sYW5ndWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJVdGlscy5nZXRPcGVyYXRvclRyYW5zbGF0aW9uS2V5KHgpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHgubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYXdhaXQgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/Lmxhbmd1YWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyVXRpbHMuZ2V0Q3VzdG9tT3BlcmF0b3JUcmFuc2xhdGlvbktleShrZXksIHgubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfSBhcyBGaWx0ZXJCYXNlQ29uZmlndXJhdGlvbk1vZGVsO1xuXG4gICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgICAgICAgICBjb25maWcuZ3JvdXAgPSB7XG4gICAgICAgICAgICAgICAga2V5OiB0aGlzLmdyb3VwLFxuICAgICAgICAgICAgICAgIG5hbWU6IGF3YWl0IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0VHJhbnNsYXRpb24odXNlcj8ubGFuZ3VhZ2UsIEZpbHRlclV0aWxzLmdldEdyb3VwVHJhbnNsYXRpb25LZXkodGhpcy5ncm91cCkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SW5jbHVkZVBhdGhzKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBkYXRhPzogb2JqZWN0KTogUGF0aE1vZGVsW10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFdoZXJlT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgbmFtZT86IHN0cmluZyk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgbmFtZSA9IHRoaXMucGF0aCA/IFNlcXVlbGl6ZVV0aWxzLmdldEF0dHJpYnV0ZUZ1bGxOYW1lKHRoaXMuYXR0cmlidXRlLCB0aGlzLnBhdGgpIDogdGhpcy5hdHRyaWJ1dGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcCA9IHRoaXMub3BlcmF0b3JzLmZpbmQoeCA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB4Lm5hbWUgPT09IHJ1bGUub3BlcmF0aW9uO1xuICAgICAgICB9KSBhcyBDdXN0b21PcGVyYXRvcjtcbiAgICAgICAgaWYgKG9wPy5vcGVyYXRvcikge1xuICAgICAgICAgICAgcnVsZS5vcGVyYXRpb24gPSBvcC5vcGVyYXRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdoZXJlID0gKHJ1bGU/LnZhbHVlID09PSB1bmRlZmluZWQgfHwgdGhpcy5oYXZpbmcpID9cbiAgICAgICAgICAgIHRoaXMuZ2V0Q29uZGl0aW9uV2hlcmVPcHRpb25zKG51bGwsIHJ1bGUpIDpcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29uZGl0aW9uV2hlcmVPcHRpb25zKHRoaXMudHJhbnNmb3JtQ29uZGl0aW9uKHJ1bGUsIG5hbWUpLCBydWxlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcGVyYXRvcldoZXJlT3B0aW9ucyhydWxlLm9wZXJhdGlvbiwgd2hlcmUsIHJ1bGUudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRIYXZpbmdPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgaWYgKCF0aGlzLmhhdmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JIYXZpbmdPcHRpb25zKHJ1bGUub3BlcmF0aW9uLCBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvcHRpb25zOiBXaGVyZU9wdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLmhhdmluZy5hdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLmhhdmluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKHJ1bGUpIGFzIFdoZXJlT3BlcmF0b3JzO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB3aGVyZSh0aGlzLmhhdmluZywgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JIYXZpbmdPcHRpb25zKHJ1bGUub3BlcmF0aW9uLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlUGF0aENvbmRpdGlvbihxdWVyeTogUXVlcnlNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMucGF0aENvbmRpdGlvbiB8fCB0eXBlb2YgdGhpcy5wYXRoQ29uZGl0aW9uID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucGF0aENvbmRpdGlvbik7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5nZXRSdWxlRnJvbUtleXMocXVlcnksIGtleXMpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggIT09IHJ1bGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzLmV2ZXJ5KHggPT4gdGhpcy5wYXRoQ29uZGl0aW9uW3guaWRdID09PSB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Q29uZGl0aW9uV2hlcmVPcHRpb25zKHdoZXJlOiBXaGVyZU9wdGlvbnMsIHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogV2hlcmVPcHRpb25zIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHdoZXJlID8gW3doZXJlXSA6IFtdO1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmNvbmRpdGlvbi5jb25kaXRpb24gPT09IFwiYW5kXCIgPyB7IFtPcC5hbmRdOiBjb25kaXRpb25zIH0gOiB7IFtPcC5vcl06IGNvbmRpdGlvbnMgfTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVJ1bGVXaGVyZU9wdGlvbnModGhpcy5jb25kaXRpb24sIGNvbmRpdGlvbnMsIHJ1bGUpO1xuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZVJ1bGVXaGVyZU9wdGlvbnMoZmlsdGVyOiBGaWx0ZXJDb25kaXRpb24sIG9wdGlvbnM6IFdoZXJlT3B0aW9uc1tdLCBwYXJlbnRSdWxlOiBRdWVyeVJ1bGVNb2RlbCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgZmlsdGVyLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcnVsZSBhcyBGaWx0ZXJDb25kaXRpb247XG4gICAgICAgICAgICBpZiAoYy5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKGMuY29uZGl0aW9uID09PSBcImFuZFwiID8geyBbT3AuYW5kXTogY29uZGl0aW9ucyB9IDogeyBbT3Aub3JdOiBjb25kaXRpb25zIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVSdWxlV2hlcmVPcHRpb25zKGMsIGNvbmRpdGlvbnMsIHBhcmVudFJ1bGUpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgciA9IHJ1bGUgYXMgRmlsdGVyQ29uZGl0aW9uUnVsZTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSByLnBhdGggPyBTZXF1ZWxpemVVdGlscy5nZXRBdHRyaWJ1dGVGdWxsTmFtZShyLmtleSwgci5wYXRoKSA6IHIua2V5O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByLnZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5yLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogci52YWx1ZShwYXJlbnRSdWxlLnZhbHVlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgW25hbWVdOiBTZXF1ZWxpemVVdGlscy5nZW5lcmF0ZVdoZXJlVmFsdWUociBhcyBSdWxlTW9kZWwpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRPcGVyYXRvckhhdmluZ09wdGlvbnMob3BlcmF0b3I6IEZpbHRlck9wZXJhdG9ycywgd2hlcmU6IFdoZXJlT3B0aW9ucyk6IFdoZXJlT3B0aW9ucyB7XG4gICAgICAgIGNvbnN0IG9wID0gdGhpcy5vcGVyYXRvcnMuZmluZCh4ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHgubmFtZSA9PT0gb3BlcmF0b3I7XG4gICAgICAgIH0pIGFzIEN1c3RvbU9wZXJhdG9yO1xuICAgICAgICBpZiAoIW9wKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9wLmhhdmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdoZXJlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIFtPcC5hbmRdOiBbd2hlcmUsIG9wLmhhdmluZ11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBvcC5oYXZpbmc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE9wZXJhdG9yV2hlcmVPcHRpb25zKG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvcnMsIHdoZXJlOiBXaGVyZU9wdGlvbnMsIHZhbHVlOiBhbnkpOiBXaGVyZU9wdGlvbnMge1xuICAgICAgICBjb25zdCBvcCA9IHRoaXMub3BlcmF0b3JzLmZpbmQoeCA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB4Lm5hbWUgPT09IG9wZXJhdG9yO1xuICAgICAgICB9KSBhcyBDdXN0b21PcGVyYXRvcjtcbiAgICAgICAgaWYgKCFvcCkge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcC53aGVyZSAmJiAhb3Aub3BlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcC53aGVyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3BXaGVyZSA9IHR5cGVvZiBvcC53aGVyZSA9PT0gXCJmdW5jdGlvblwiID8gb3Aud2hlcmUodmFsdWUpIDogb3Aud2hlcmU7XG4gICAgICAgIHJldHVybiB3aGVyZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBbT3AuYW5kXTogW3doZXJlLCBvcFdoZXJlXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG9wV2hlcmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSdWxlRnJvbUtleXMocXVlcnk6IFF1ZXJ5TW9kZWwsIGtleXM6IHN0cmluZ1tdKTogUXVlcnlSdWxlTW9kZWxbXSB7XG4gICAgICAgIGNvbnN0IHJ1bGVzOiBRdWVyeVJ1bGVNb2RlbFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgaWYgKChydWxlIGFzIFF1ZXJ5TW9kZWwpLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIHJ1bGVzLnB1c2goLi4udGhpcy5nZXRSdWxlRnJvbUtleXMocnVsZSBhcyBRdWVyeU1vZGVsLCBrZXlzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGtleXMuc29tZSh4ID0+IChydWxlIGFzIFF1ZXJ5UnVsZU1vZGVsKS5pZCA9PT0geCkpIHtcbiAgICAgICAgICAgICAgICBydWxlcy5wdXNoKHJ1bGUgYXMgUXVlcnlSdWxlTW9kZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtQ29uZGl0aW9uKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBuYW1lOiBzdHJpbmcpOiBXaGVyZU9wdGlvbnMge1xuICAgICAgICBpZiAoIXRoaXMuanNvbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbbmFtZV06IFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShydWxlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmpzb24udHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Gb3JKc29uQXJyYXkocnVsZSwgbmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Gb3JKc29uT2JqZWN0KHJ1bGUsIG5hbWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtRm9ySnNvbkFycmF5KHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBuYW1lOiBzdHJpbmcpOiBXaGVyZU9wdGlvbnMge1xuICAgICAgICBjb25zdCBjb2xOYW1lID0gdGhpcy5wYXRoID8gU2VxdWVsaXplLmNvbChuYW1lKSA6IFNlcXVlbGl6ZS5saXRlcmFsKG5hbWUpO1xuICAgICAgICBpZiAocnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuQ29udGFpbnMgfHwgcnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuTm90Q29udGFpbnMpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2Ugb3ZlcnJpZGUgdGhlIHJ1bGUgdG8gdXNlIGFuIGVxdWFsIG9yIG5vdCBlcXVhbCB3aXRoIGEgSlNPTl9DT05UQUlOUyBmdW5jdGlvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCBuZXdSdWxlID0ge1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogcnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuQ29udGFpbnMgPyBGaWx0ZXJPcGVyYXRvclR5cGVzLkVxdWFsIDogRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RFcXVhbCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBydWxlLnZhbHVlID09PSBcInN0cmluZ1wiID8gYFwiJHtydWxlLnZhbHVlfVwiYCA6IHJ1bGUudmFsdWU7XG4gICAgICAgICAgICBpZiAodGhpcy5qc29uLnBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2hlcmUoZm4oXCJKU09OX0NPTlRBSU5TXCIsIGNvbE5hbWUsIHZhbHVlLCB0aGlzLmpzb24ucGF0aCksIFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShuZXdSdWxlIGFzIFJ1bGVNb2RlbCkgYXMgTG9naWNUeXBlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHdoZXJlKGZuKFwiSlNPTl9DT05UQUlOU1wiLCBjb2xOYW1lLCB2YWx1ZSksIFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShuZXdSdWxlIGFzIFJ1bGVNb2RlbCkgYXMgTG9naWNUeXBlKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1Gb3JKc29uT2JqZWN0KHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBuYW1lOiBzdHJpbmcpOiBXaGVyZU9wdGlvbnMge1xuICAgICAgICBjb25zdCBjb2xOYW1lID0gdGhpcy5wYXRoID8gU2VxdWVsaXplLmNvbChuYW1lKSA6IFNlcXVlbGl6ZS5saXRlcmFsKG5hbWUpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShydWxlKTtcbiAgICAgICAgaWYgKHRoaXMuanNvbi5wYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gU2VxdWVsaXplLndoZXJlKFNlcXVlbGl6ZS5mbihcIkpTT05fRVhUUkFDVFwiLCBjb2xOYW1lLCB0aGlzLmpzb24ucGF0aCksIHZhbHVlIGFzIExvZ2ljVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU2VxdWVsaXplLndoZXJlKFNlcXVlbGl6ZS5mbihcIkpTT05fRVhUUkFDVFwiLCBjb2xOYW1lKSwgdmFsdWUgYXMgTG9naWNUeXBlKTtcbiAgICB9XG59XG4iXX0=
|
|
241
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQThGO0FBSzlGLDJEQUF1RDtBQUN2RCxrREFBOEM7QUFJOUMsNENBQW9GO0FBNERwRixNQUFzQixNQUFNO0lBS3hCLElBQVcsZ0JBQWdCLENBQUMsZ0JBQWtDO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztJQUM5QyxDQUFDO0lBZU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFpQjtRQUNwQyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUM7SUFDNUMsQ0FBQztJQUVELFlBQXNCLFVBQWlDO1FBekJ2QyxVQUFLLEdBQUcsUUFBUSxDQUFDO1FBbUIxQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBT25CLElBQUksVUFBVSxFQUFFO1lBQ1osTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLEdBQUcsUUFBa0Q7UUFDckUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sZUFBZSxDQUFDLEdBQUcsUUFBa0Q7UUFDeEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxZQUFZLENBQUMsR0FBRyxRQUFrRDtRQUNyRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FB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LGVBQWUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFvQixDQUFjLENBQUMsQ0FBQTtTQUMxSDtRQUVELE9BQU87SUFDWCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsSUFBb0IsRUFBRSxJQUFZOztRQUM3RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUUsTUFBTSxLQUFLLEdBQUcsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsSUFBSSxFQUFFO1lBQ2pCLE9BQU8scUJBQVMsQ0FBQyxLQUFLLENBQUMscUJBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQWtCLENBQUMsQ0FBQztTQUNyRztRQUVELE9BQU8scUJBQVMsQ0FBQyxLQUFLLENBQUMscUJBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEtBQWtCLENBQUMsQ0FBQztJQUN0RixDQUFDO0NBQ0o7QUFsU0Qsd0JBa1NDIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVycy9maWx0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmbiwgTG9naWNUeXBlLCBPcCwgU2VxdWVsaXplLCB3aGVyZSwgV2hlcmVPcGVyYXRvcnMsIFdoZXJlT3B0aW9ucyB9IGZyb20gXCJzZXF1ZWxpemVcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZUFkYXB0ZXIgfSBmcm9tIFwiLi4vLi4vYWRhcHRlcnMvdHJhbnNsYXRlLmFkYXB0ZXJcIjtcbmltcG9ydCB7IEluY2x1ZGVXaGVyZU1vZGVsIH0gZnJvbSBcIi4uLy4uL21vZGVscy9pbmNsdWRlLm1vZGVsXCI7XG5pbXBvcnQgeyBQYXRoTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BhdGgubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJVc2VyTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3VzZXIubW9kZWxcIjtcbmltcG9ydCB7IFNlcXVlbGl6ZVV0aWxzIH0gZnJvbSBcIi4uLy4uL3NlcXVlbGl6ZS51dGlsc1wiO1xuaW1wb3J0IHsgRmlsdGVyVXRpbHMgfSBmcm9tIFwiLi4vZmlsdGVyLnV0aWxzXCI7XG5pbXBvcnQgeyBGaWx0ZXJCYXNlQ29uZmlndXJhdGlvbk1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9maWx0ZXItY29uZmlndXJhdGlvbi5tb2RlbFwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uLCBRdWVyeU1vZGVsLCBRdWVyeVJ1bGVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvcXVlcnkubW9kZWxcIjtcbmltcG9ydCB7IElSdWxlLCBSdWxlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL3J1bGUubW9kZWxcIjtcbmltcG9ydCB7IEN1c3RvbU9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvcnMsIEZpbHRlck9wZXJhdG9yVHlwZXMgfSBmcm9tIFwiLi4vb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSBcIi4uL3R5cGVcIjtcblxuLy8gVE9ETzogRGVwcmVjYXRlIGtleSB0byB1c2UgYXR0cmlidXRlIGluc3RlYWQgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBCYXNlRmlsdGVyRGVmaW5pdGlvblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDb25kaXRpb25SdWxlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JzO1xuICAgIHZhbHVlPzogKHVua25vd24gfCB1bmtub3duW10pIHwgKCh2YWx1ZTogdW5rbm93biB8IHVua25vd25bXSkgPT4gdW5rbm93biB8IHVua25vd25bXSk7XG4gICAgd2hlcmU/OiBJbmNsdWRlV2hlcmVNb2RlbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDb25kaXRpb24ge1xuICAgIGNvbmRpdGlvbjogQ29uZGl0aW9uO1xuICAgIHJ1bGVzOiAoRmlsdGVyQ29uZGl0aW9uUnVsZSB8IEZpbHRlckNvbmRpdGlvbilbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKc29uQ29uZmlnIHtcbiAgICB0eXBlOiBcImFycmF5XCIgfCBcIm9iamVjdFwiO1xuICAgIHBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFBhdGhDb25kaXRpb24gPSBib29sZWFuIHwge1xuICAgIFtmaWx0ZXI6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbmFibGVkQ29uZmlnPFVzZXIgPSBhbnksIFJlcXVlc3QgPSBhbnk+IHtcbiAgICB1c2VyPzogVXNlcjtcbiAgICByZXF1ZXN0PzogUmVxdWVzdFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VGaWx0ZXJEZWZpbml0aW9uIHtcbiAgICBhdHRyaWJ1dGU6IHN0cmluZztcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIGhhdmluZz86IGFueTtcbiAgICBwYXJhbm9pZD86IGJvb2xlYW47XG4gICAgY29uZGl0aW9uPzogRmlsdGVyQ29uZGl0aW9uO1xuICAgIGdyb3VwPzogc3RyaW5nO1xuICAgIHdoZXJlPzogSW5jbHVkZVdoZXJlTW9kZWw7XG4gICAgcGF0aENvbmRpdGlvbj86IFBhdGhDb25kaXRpb247XG4gICAganNvbj86IEpzb25Db25maWc7XG4gICAgZW5hYmxlZD86ICh7IHVzZXIsIHJlcXVlc3QgfTogRW5hYmxlZENvbmZpZykgPT4gUHJvbWlzZTxib29sZWFuPjtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgbWVhbnMgdGhhdCB0aGUgY29uZmlnIHdpbGwgbm90IGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHByaXZhdGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckRlZmluaXRpb24gZXh0ZW5kcyBCYXNlRmlsdGVyRGVmaW5pdGlvbiwgSVJ1bGUge1xuICAgIHR5cGU6IEZpbHRlclR5cGU7XG4gICAgb3BlcmF0b3JzOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdO1xuXG4gICAgZ2V0Q29uZmlnPFJlcXVlc3Q+KGtleTogc3RyaW5nLCByZXE6IFJlcXVlc3QsIHVzZXI/OiBEYXRhRmlsdGVyVXNlck1vZGVsKTogUHJvbWlzZTxGaWx0ZXJCYXNlQ29uZmlndXJhdGlvbk1vZGVsIHwgbnVsbD47XG4gICAgZ2V0SW5jbHVkZVBhdGhzKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBkYXRhPzogb2JqZWN0KTogUGF0aE1vZGVsW107XG4gICAgZ2V0V2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+O1xuICAgIGdldEhhdmluZ09wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD47XG4gICAgdXNlUGF0aENvbmRpdGlvbihxdWVyeTogUXVlcnlNb2RlbCk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGaWx0ZXIgaW1wbGVtZW50cyBGaWx0ZXJEZWZpbml0aW9uIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgX3R5cGUgPSBcImZpbHRlclwiO1xuXG4gICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlITogVHJhbnNsYXRlQWRhcHRlcjtcblxuICAgIHB1YmxpYyBzZXQgdHJhbnNsYXRlU2VydmljZSh0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVBZGFwdGVyKSB7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0cmFuc2xhdGVTZXJ2aWNlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0eXBlITogRmlsdGVyVHlwZTtcbiAgICBwdWJsaWMgb3BlcmF0b3JzITogKEZpbHRlck9wZXJhdG9yVHlwZXMgfCBDdXN0b21PcGVyYXRvcilbXTtcbiAgICBwdWJsaWMgZ3JvdXAhOiBzdHJpbmc7XG4gICAgcHVibGljIGF0dHJpYnV0ZSE6IHN0cmluZztcbiAgICBwdWJsaWMgaGF2aW5nPzogYW55O1xuICAgIHB1YmxpYyBwYXRoPzogc3RyaW5nO1xuICAgIHB1YmxpYyBjb25kaXRpb24/OiBGaWx0ZXJDb25kaXRpb247XG4gICAgcHVibGljIHBhdGhDb25kaXRpb24/OiBQYXRoQ29uZGl0aW9uO1xuICAgIHB1YmxpYyBqc29uPzogSnNvbkNvbmZpZztcbiAgICBwdWJsaWMgcHJpdmF0ZT86IGJvb2xlYW47XG4gICAgcHVibGljIGVuYWJsZWQ/OiAoeyB1c2VyLCByZXF1ZXN0IH06IEVuYWJsZWRDb25maWcpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gICAgcHVibGljIHBhcmFub2lkID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBzdGF0aWMgdmFsaWRhdGUoZGVmaW5pdGlvbjogSVJ1bGUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb25bXCJfdHlwZVwiXSA9PT0gXCJmaWx0ZXJcIjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZGVmaW5pdGlvbj86IEJhc2VGaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRlZmluaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFkZE9wZXJhdG9ycyguLi5vcGVyYXRvcjogKEZpbHRlck9wZXJhdG9yVHlwZXMgfCBDdXN0b21PcGVyYXRvcilbXSk6IEZpbHRlciB7XG4gICAgICAgIHRoaXMub3BlcmF0b3JzLnB1c2goLi4ub3BlcmF0b3IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlT3BlcmF0b3JzKC4uLm9wZXJhdG9yOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdKTogRmlsdGVyIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSB0aGlzLm9wZXJhdG9ycy5maWx0ZXIoeCA9PiAhb3BlcmF0b3Iuc29tZShvcCA9PiBvcCA9PT0geCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0T3BlcmF0b3JzKC4uLm9wZXJhdG9yOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdKTogRmlsdGVyIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSBbLi4ub3BlcmF0b3JdO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnPFJlcXVlc3QgPSBhbnk+KGtleTogc3RyaW5nLCByZXF1ZXN0OiBSZXF1ZXN0LCB1c2VyPzogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8RmlsdGVyQmFzZUNvbmZpZ3VyYXRpb25Nb2RlbCB8IG51bGw+IHtcbiAgICAgICAgaWYgKHRoaXMucHJpdmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5lbmFibGVkICYmICEoYXdhaXQgdGhpcy5lbmFibGVkKHsgdXNlciwgcmVxdWVzdCB9KSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgb3BlcmF0b3JzOiBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLm9wZXJhdG9ycy5tYXAoYXN5bmMgeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGF3YWl0IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0VHJhbnNsYXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj8ubGFuZ3VhZ2UgPz8gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJVdGlscy5nZXRPcGVyYXRvclRyYW5zbGF0aW9uS2V5KHgpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHgubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYXdhaXQgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/Lmxhbmd1YWdlID8/IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJVdGlscy5nZXRDdXN0b21PcGVyYXRvclRyYW5zbGF0aW9uS2V5KGtleSwgeC5uYW1lKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9IGFzIEZpbHRlckJhc2VDb25maWd1cmF0aW9uTW9kZWw7XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcbiAgICAgICAgICAgIGNvbmZpZy5ncm91cCA9IHtcbiAgICAgICAgICAgICAgICBrZXk6IHRoaXMuZ3JvdXAsXG4gICAgICAgICAgICAgICAgbmFtZTogYXdhaXQgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXRUcmFuc2xhdGlvbih1c2VyPy5sYW5ndWFnZSA/PyBcIlwiLCBGaWx0ZXJVdGlscy5nZXRHcm91cFRyYW5zbGF0aW9uS2V5KHRoaXMuZ3JvdXApKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEluY2x1ZGVQYXRocyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgZGF0YT86IG9iamVjdCk6IFBhdGhNb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIG5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIG5hbWUgPSB0aGlzLnBhdGggPyBTZXF1ZWxpemVVdGlscy5nZXRBdHRyaWJ1dGVGdWxsTmFtZSh0aGlzLmF0dHJpYnV0ZSwgdGhpcy5wYXRoKSA6IHRoaXMuYXR0cmlidXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3AgPSB0aGlzLm9wZXJhdG9ycy5maW5kKHggPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geC5uYW1lID09PSBydWxlLm9wZXJhdGlvbjtcbiAgICAgICAgfSkgYXMgQ3VzdG9tT3BlcmF0b3I7XG4gICAgICAgIGlmIChvcD8ub3BlcmF0b3IpIHtcbiAgICAgICAgICAgIHJ1bGUub3BlcmF0aW9uID0gb3Aub3BlcmF0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aGVyZSA9IChydWxlPy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaGF2aW5nKSA/XG4gICAgICAgICAgICB0aGlzLmdldENvbmRpdGlvbldoZXJlT3B0aW9ucyh1bmRlZmluZWQsIHJ1bGUpIDpcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29uZGl0aW9uV2hlcmVPcHRpb25zKHRoaXMudHJhbnNmb3JtQ29uZGl0aW9uKHJ1bGUsIG5hbWUpLCBydWxlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcGVyYXRvcldoZXJlT3B0aW9ucyhydWxlLm9wZXJhdGlvbiwgd2hlcmUsIHJ1bGUudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRIYXZpbmdPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmhhdmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JIYXZpbmdPcHRpb25zKHJ1bGUub3BlcmF0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvcHRpb25zOiBXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLmhhdmluZy5hdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLmhhdmluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKHJ1bGUpIGFzIFdoZXJlT3BlcmF0b3JzO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB3aGVyZSh0aGlzLmhhdmluZywgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JIYXZpbmdPcHRpb25zKHJ1bGUub3BlcmF0aW9uLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlUGF0aENvbmRpdGlvbihxdWVyeTogUXVlcnlNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMucGF0aENvbmRpdGlvbiB8fCB0eXBlb2YgdGhpcy5wYXRoQ29uZGl0aW9uID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucGF0aENvbmRpdGlvbik7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5nZXRSdWxlRnJvbUtleXMocXVlcnksIGtleXMpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggIT09IHJ1bGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzLmV2ZXJ5KHggPT4gKHRoaXMucGF0aENvbmRpdGlvbiBhcyBhbnkpW3guaWRdID09PSB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Q29uZGl0aW9uV2hlcmVPcHRpb25zKHdoZXJlOiBXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQsIHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogV2hlcmVPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHdoZXJlID8gW3doZXJlXSA6IFtdO1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmNvbmRpdGlvbi5jb25kaXRpb24gPT09IFwiYW5kXCIgPyB7IFtPcC5hbmRdOiBjb25kaXRpb25zIH0gOiB7IFtPcC5vcl06IGNvbmRpdGlvbnMgfTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVJ1bGVXaGVyZU9wdGlvbnModGhpcy5jb25kaXRpb24sIGNvbmRpdGlvbnMsIHJ1bGUpO1xuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZVJ1bGVXaGVyZU9wdGlvbnMoZmlsdGVyOiBGaWx0ZXJDb25kaXRpb24sIG9wdGlvbnM6IFdoZXJlT3B0aW9uc1tdLCBwYXJlbnRSdWxlOiBRdWVyeVJ1bGVNb2RlbCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgZmlsdGVyLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcnVsZSBhcyBGaWx0ZXJDb25kaXRpb247XG4gICAgICAgICAgICBpZiAoYy5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25zOiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMucHVzaChjLmNvbmRpdGlvbiA9PT0gXCJhbmRcIiA/IHsgW09wLmFuZF06IGNvbmRpdGlvbnMgfSA6IHsgW09wLm9yXTogY29uZGl0aW9ucyB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlUnVsZVdoZXJlT3B0aW9ucyhjLCBjb25kaXRpb25zLCBwYXJlbnRSdWxlKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHIgPSBydWxlIGFzIEZpbHRlckNvbmRpdGlvblJ1bGU7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gci5wYXRoID8gU2VxdWVsaXplVXRpbHMuZ2V0QXR0cmlidXRlRnVsbE5hbWUoci5rZXksIHIucGF0aCkgOiByLmtleTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygci52YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgciA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHIudmFsdWUocGFyZW50UnVsZS52YWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIFtuYW1lXTogU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKHIgYXMgUnVsZU1vZGVsKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0T3BlcmF0b3JIYXZpbmdPcHRpb25zKG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvcnMsIHdoZXJlPzogV2hlcmVPcHRpb25zKTogV2hlcmVPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3Qgb3AgPSB0aGlzLm9wZXJhdG9ycy5maW5kKHggPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geC5uYW1lID09PSBvcGVyYXRvcjtcbiAgICAgICAgfSkgYXMgQ3VzdG9tT3BlcmF0b3I7XG4gICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgIHJldHVybiB3aGVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb3AuaGF2aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2hlcmVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgW09wLmFuZF06IFt3aGVyZSwgb3AuaGF2aW5nXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG9wLmhhdmluZztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0T3BlcmF0b3JXaGVyZU9wdGlvbnMob3BlcmF0b3I6IEZpbHRlck9wZXJhdG9ycywgd2hlcmU6IFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZCwgdmFsdWU6IGFueSk6IFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IG9wID0gdGhpcy5vcGVyYXRvcnMuZmluZCh4ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHgubmFtZSA9PT0gb3BlcmF0b3I7XG4gICAgICAgIH0pIGFzIEN1c3RvbU9wZXJhdG9yO1xuICAgICAgICBpZiAoIW9wKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9wLndoZXJlICYmICFvcC5vcGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcC53aGVyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3BXaGVyZSA9IHR5cGVvZiBvcC53aGVyZSA9PT0gXCJmdW5jdGlvblwiID8gb3Aud2hlcmUodmFsdWUpIDogb3Aud2hlcmU7XG4gICAgICAgIHJldHVybiB3aGVyZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBbT3AuYW5kXTogW3doZXJlLCBvcFdoZXJlXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG9wV2hlcmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSdWxlRnJvbUtleXMocXVlcnk6IFF1ZXJ5TW9kZWwsIGtleXM6IHN0cmluZ1tdKTogUXVlcnlSdWxlTW9kZWxbXSB7XG4gICAgICAgIGNvbnN0IHJ1bGVzOiBRdWVyeVJ1bGVNb2RlbFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgaWYgKChydWxlIGFzIFF1ZXJ5TW9kZWwpLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIHJ1bGVzLnB1c2goLi4udGhpcy5nZXRSdWxlRnJvbUtleXMocnVsZSBhcyBRdWVyeU1vZGVsLCBrZXlzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGtleXMuc29tZSh4ID0+IChydWxlIGFzIFF1ZXJ5UnVsZU1vZGVsKS5pZCA9PT0geCkpIHtcbiAgICAgICAgICAgICAgICBydWxlcy5wdXNoKHJ1bGUgYXMgUXVlcnlSdWxlTW9kZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtQ29uZGl0aW9uKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBuYW1lOiBzdHJpbmcpOiBXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMuanNvbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbbmFtZV06IFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShydWxlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmpzb24udHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Gb3JKc29uQXJyYXkocnVsZSwgbmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Gb3JKc29uT2JqZWN0KHJ1bGUsIG5hbWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtRm9ySnNvbkFycmF5KHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBuYW1lOiBzdHJpbmcpOiBXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBjb2xOYW1lID0gdGhpcy5wYXRoID8gU2VxdWVsaXplLmNvbChuYW1lKSA6IFNlcXVlbGl6ZS5saXRlcmFsKG5hbWUpO1xuICAgICAgICBpZiAocnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuQ29udGFpbnMgfHwgcnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuTm90Q29udGFpbnMpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2Ugb3ZlcnJpZGUgdGhlIHJ1bGUgdG8gdXNlIGFuIGVxdWFsIG9yIG5vdCBlcXVhbCB3aXRoIGEgSlNPTl9DT05UQUlOUyBmdW5jdGlvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCBuZXdSdWxlID0ge1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogcnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuQ29udGFpbnMgPyBGaWx0ZXJPcGVyYXRvclR5cGVzLkVxdWFsIDogRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RFcXVhbCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBydWxlLnZhbHVlID09PSBcInN0cmluZ1wiID8gYFwiJHtydWxlLnZhbHVlfVwiYCA6IHJ1bGUudmFsdWU7XG4gICAgICAgICAgICBpZiAodGhpcy5qc29uPy5wYXRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdoZXJlKGZuKFwiSlNPTl9DT05UQUlOU1wiLCBjb2xOYW1lLCB2YWx1ZSwgdGhpcy5qc29uLnBhdGgpLCBTZXF1ZWxpemVVdGlscy5nZW5lcmF0ZVdoZXJlVmFsdWUobmV3UnVsZSBhcyBSdWxlTW9kZWwpIGFzIExvZ2ljVHlwZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3aGVyZShmbihcIkpTT05fQ09OVEFJTlNcIiwgY29sTmFtZSwgdmFsdWUpLCBTZXF1ZWxpemVVdGlscy5nZW5lcmF0ZVdoZXJlVmFsdWUobmV3UnVsZSBhcyBSdWxlTW9kZWwpIGFzIExvZ2ljVHlwZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyYW5zZm9ybUZvckpzb25PYmplY3QocnVsZTogUXVlcnlSdWxlTW9kZWwsIG5hbWU6IHN0cmluZyk6IFdoZXJlT3B0aW9ucyB7XG4gICAgICAgIGNvbnN0IGNvbE5hbWUgPSB0aGlzLnBhdGggPyBTZXF1ZWxpemUuY29sKG5hbWUpIDogU2VxdWVsaXplLmxpdGVyYWwobmFtZSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKHJ1bGUpO1xuICAgICAgICBpZiAodGhpcy5qc29uPy5wYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gU2VxdWVsaXplLndoZXJlKFNlcXVlbGl6ZS5mbihcIkpTT05fRVhUUkFDVFwiLCBjb2xOYW1lLCB0aGlzLmpzb24ucGF0aCksIHZhbHVlIGFzIExvZ2ljVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU2VxdWVsaXplLndoZXJlKFNlcXVlbGl6ZS5mbihcIkpTT05fRVhUUkFDVFwiLCBjb2xOYW1lKSwgdmFsdWUgYXMgTG9naWNUeXBlKTtcbiAgICB9XG59XG4iXX0=
|