@recursyve/nestjs-data-filter 9.3.2 → 9.4.0-beta.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/data-filter.repository.d.ts +3 -1
- package/lib/data-filter.repository.js +12 -9
- package/lib/data-filter.service.d.ts +4 -4
- package/lib/data-filter.service.js +8 -7
- package/lib/filter/base-filter.d.ts +3 -0
- package/lib/filter/base-filter.js +19 -1
- package/lib/filter/filter.factory.d.ts +2 -1
- package/lib/filter/filter.factory.js +3 -3
- package/lib/filter/filter.provider.js +3 -2
- package/lib/filter/filter.service.d.ts +3 -1
- package/lib/filter/filter.service.js +14 -10
- package/lib/filter/filters/filter.d.ts +3 -0
- package/lib/filter/filters/filter.js +7 -4
- package/lib/filter/filters/geo-bounds.filter.js +2 -3
- package/lib/filter/filters/geo-localization.filter.js +2 -2
- package/lib/filter/filters/group.filter.d.ts +3 -0
- package/lib/filter/filters/group.filter.js +9 -2
- package/lib/filter/order-rules/enum.order-rule.js +2 -3
- package/lib/filter/order-rules/if.order-rule.js +2 -3
- package/lib/filter/order-rules/is-null.order-rule.js +2 -3
- package/lib/filter/order-rules/order-rule.d.ts +3 -0
- package/lib/filter/order-rules/order-rule.js +5 -2
- package/lib/index.js +4 -3
- package/lib/models/attributes.model.d.ts +8 -1
- package/lib/models/attributes.model.js +21 -11
- package/lib/models/count.model.d.ts +11 -4
- package/lib/models/count.model.js +25 -14
- package/lib/models/custom-attributes.model.d.ts +6 -2
- package/lib/models/custom-attributes.model.js +5 -1
- package/lib/models/data-filter.model.d.ts +9 -2
- package/lib/models/data-filter.model.js +40 -30
- package/lib/models/distance.model.d.ts +10 -3
- package/lib/models/distance.model.js +29 -18
- package/lib/models/sum.model.d.ts +10 -3
- package/lib/models/sum.model.js +19 -8
- package/lib/scanners/sequelize-model.scanner.d.ts +4 -2
- package/lib/scanners/sequelize-model.scanner.js +16 -8
- package/lib/sequelize.utils.d.ts +0 -3
- package/lib/sequelize.utils.js +1 -18
- package/lib/services/dialect-formatter.service.d.ts +10 -0
- package/lib/services/dialect-formatter.service.js +58 -0
- package/package.json +1 -1
|
@@ -10,6 +10,7 @@ import { DataFilterUserModel } from "./models/user.model";
|
|
|
10
10
|
import { DataFilterScanner } from "./scanners/data-filter.scanner";
|
|
11
11
|
import { SequelizeModelScanner } from "./scanners/sequelize-model.scanner";
|
|
12
12
|
import { M } from "./sequelize.utils";
|
|
13
|
+
import { DialectFormatterService } from "./services/dialect-formatter.service";
|
|
13
14
|
export declare class DataFilterRepository<Data> {
|
|
14
15
|
private dataDef;
|
|
15
16
|
private dataFilterScanner;
|
|
@@ -17,10 +18,11 @@ export declare class DataFilterRepository<Data> {
|
|
|
17
18
|
private accessControlAdapter;
|
|
18
19
|
private translateService;
|
|
19
20
|
private exportAdapter;
|
|
21
|
+
private dialectFormatterService;
|
|
20
22
|
private _config;
|
|
21
23
|
private _definitions;
|
|
22
24
|
get model(): typeof M;
|
|
23
|
-
constructor(dataDef: any, dataFilterScanner: DataFilterScanner, sequelizeModelScanner: SequelizeModelScanner, accessControlAdapter: AccessControlAdapter, translateService: TranslateAdapter, exportAdapter: ExportAdapter);
|
|
25
|
+
constructor(dataDef: any, dataFilterScanner: DataFilterScanner, sequelizeModelScanner: SequelizeModelScanner, accessControlAdapter: AccessControlAdapter, translateService: TranslateAdapter, exportAdapter: ExportAdapter, dialectFormatterService: DialectFormatterService);
|
|
24
26
|
findByPk(identifier: Identifier, options?: FindOptions, conditions?: object): Promise<Data | null>;
|
|
25
27
|
findByPkFromUser(user: DataFilterUserModel, identifier: Identifier, conditions?: object): Promise<Data | null>;
|
|
26
28
|
findOne(options?: FindOptions, conditions?: object): Promise<Data | null>;
|
|
@@ -17,19 +17,21 @@ const export_types_model_1 = require("./models/export-types.model");
|
|
|
17
17
|
const data_filter_scanner_1 = require("./scanners/data-filter.scanner");
|
|
18
18
|
const sequelize_model_scanner_1 = require("./scanners/sequelize-model.scanner");
|
|
19
19
|
const sequelize_utils_1 = require("./sequelize.utils");
|
|
20
|
+
const dialect_formatter_service_1 = require("./services/dialect-formatter.service");
|
|
20
21
|
const csv_utils_1 = require("./utils/csv.utils");
|
|
21
22
|
const xlsx_utils_1 = require("./utils/xlsx.utils");
|
|
22
23
|
let DataFilterRepository = class DataFilterRepository {
|
|
23
24
|
get model() {
|
|
24
25
|
return this._config.model;
|
|
25
26
|
}
|
|
26
|
-
constructor(dataDef, dataFilterScanner, sequelizeModelScanner, accessControlAdapter, translateService, exportAdapter) {
|
|
27
|
+
constructor(dataDef, dataFilterScanner, sequelizeModelScanner, accessControlAdapter, translateService, exportAdapter, dialectFormatterService) {
|
|
27
28
|
this.dataDef = dataDef;
|
|
28
29
|
this.dataFilterScanner = dataFilterScanner;
|
|
29
30
|
this.sequelizeModelScanner = sequelizeModelScanner;
|
|
30
31
|
this.accessControlAdapter = accessControlAdapter;
|
|
31
32
|
this.translateService = translateService;
|
|
32
33
|
this.exportAdapter = exportAdapter;
|
|
34
|
+
this.dialectFormatterService = dialectFormatterService;
|
|
33
35
|
this.init();
|
|
34
36
|
}
|
|
35
37
|
async findByPk(identifier, options, conditions) {
|
|
@@ -119,8 +121,8 @@ let DataFilterRepository = class DataFilterRepository {
|
|
|
119
121
|
return [];
|
|
120
122
|
}
|
|
121
123
|
const path = x.path.transformPathConfig(conditions);
|
|
122
|
-
const attributes = x.transformAttributesConfig(conditions);
|
|
123
|
-
const additionalIncludes = x.transformIncludesConfig(conditions);
|
|
124
|
+
const attributes = x.withContext(this.dialectFormatterService).transformAttributesConfig(conditions);
|
|
125
|
+
const additionalIncludes = x.withContext(this.dialectFormatterService).transformIncludesConfig(conditions);
|
|
124
126
|
return this.sequelizeModelScanner.getIncludes(this.model, path, additionalIncludes, attributes);
|
|
125
127
|
}),
|
|
126
128
|
...this._config.getCustomAttributesIncludes().map(x => this.sequelizeModelScanner.getIncludes(this.model, {
|
|
@@ -134,7 +136,7 @@ let DataFilterRepository = class DataFilterRepository {
|
|
|
134
136
|
nestedIncludes.push(options.include);
|
|
135
137
|
}
|
|
136
138
|
options.include = sequelize_utils_1.SequelizeUtils.reduceIncludes(nestedIncludes);
|
|
137
|
-
const generatedAttributes = this._config.transformAttributesConfig(conditions);
|
|
139
|
+
const generatedAttributes = this._config.withContext(this.dialectFormatterService).transformAttributesConfig(conditions);
|
|
138
140
|
if (generatedAttributes) {
|
|
139
141
|
if (options.attributes) {
|
|
140
142
|
options.attributes = sequelize_utils_1.SequelizeUtils.mergeAttributes(options.attributes, generatedAttributes);
|
|
@@ -168,8 +170,8 @@ let DataFilterRepository = class DataFilterRepository {
|
|
|
168
170
|
return [];
|
|
169
171
|
}
|
|
170
172
|
const path = x.path.transformPathConfig(conditions);
|
|
171
|
-
const attributes = x.transformAttributesConfig(conditions);
|
|
172
|
-
const additionalIncludes = x.transformIncludesConfig(conditions);
|
|
173
|
+
const attributes = x.withContext(this.dialectFormatterService).transformAttributesConfig(conditions);
|
|
174
|
+
const additionalIncludes = x.withContext(this.dialectFormatterService).transformIncludesConfig(conditions);
|
|
173
175
|
return this.sequelizeModelScanner.getIncludes(this.model, path, additionalIncludes, attributes);
|
|
174
176
|
}),
|
|
175
177
|
...this._config.getCustomAttributesIncludes().map(x => {
|
|
@@ -221,7 +223,7 @@ let DataFilterRepository = class DataFilterRepository {
|
|
|
221
223
|
continue;
|
|
222
224
|
}
|
|
223
225
|
const attr = definition.ignoreInSearch ? [] : (_a = definition.searchableAttributes) !== null && _a !== void 0 ? _a : definition.attributes;
|
|
224
|
-
const additionalIncludes = definition.transformIncludesConfig({});
|
|
226
|
+
const additionalIncludes = definition.withContext(this.dialectFormatterService).transformIncludesConfig({});
|
|
225
227
|
attributes.push(...this.sequelizeModelScanner.getAttributes(this.model, definition.path, additionalIncludes, attr));
|
|
226
228
|
}
|
|
227
229
|
return attributes;
|
|
@@ -393,7 +395,8 @@ exports.DataFilterRepository = DataFilterRepository = __decorate([
|
|
|
393
395
|
sequelize_model_scanner_1.SequelizeModelScanner,
|
|
394
396
|
adapters_1.AccessControlAdapter,
|
|
395
397
|
adapters_1.TranslateAdapter,
|
|
396
|
-
adapters_1.ExportAdapter
|
|
398
|
+
adapters_1.ExportAdapter,
|
|
399
|
+
dialect_formatter_service_1.DialectFormatterService])
|
|
397
400
|
], DataFilterRepository);
|
|
398
401
|
|
|
399
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1Qyx5Q0FBaUg7QUFHakgseUNBQW1GO0FBSW5GLG9FQUEwRDtBQUsxRCx3RUFBbUU7QUFDbkUsZ0ZBQTJFO0FBQzNFLHVEQUFzRDtBQUN0RCxpREFBNkM7QUFDN0MsbURBQStDO0FBR3hDLElBQU0sb0JBQW9CLEdBQTFCLE1BQU0sb0JBQW9CO0lBSTdCLElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFpQixDQUFDO0lBQzFDLENBQUM7SUFFRCxZQUNZLE9BQVksRUFDWixpQkFBb0MsRUFDcEMscUJBQTRDLEVBQzVDLG9CQUEwQyxFQUMxQyxnQkFBa0MsRUFDbEMsYUFBNEI7UUFMNUIsWUFBTyxHQUFQLE9BQU8sQ0FBSztRQUNaLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFFcEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQXNCLEVBQUUsT0FBcUIsRUFBRSxVQUFtQjtRQUNwRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVNLEtB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OzZDQVdzQix1Q0FBaUI7UUFDYiwrQ0FBcUI7UUFDdEIsK0JBQW9CO1FBQ3hCLDJCQUFnQjtRQUNuQix3QkFBYTtHQWQvQixvQkFBb0IsQ0FxY2hDIiwiZmlsZSI6ImxpYi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgRmluZE9wdGlvbnMsIElkZW50aWZpZXIsIEluY2x1ZGVhYmxlLCBJbmNsdWRlT3B0aW9ucywgTW9kZWwsIE9wLCBVdGlscywgV2hlcmVPcHRpb25zIH0gZnJvbSBcInNlcXVlbGl6ZVwiO1xuaW1wb3J0IHsgR3JvdXBPcHRpb24gfSBmcm9tIFwic2VxdWVsaXplL3R5cGVzL21vZGVsXCI7XG5pbXBvcnQgeyBDb2wsIEZuIH0gZnJvbSBcInNlcXVlbGl6ZS90eXBlcy91dGlsc1wiO1xuaW1wb3J0IHsgQWNjZXNzQ29udHJvbEFkYXB0ZXIsIEV4cG9ydEFkYXB0ZXIsIFRyYW5zbGF0ZUFkYXB0ZXIgfSBmcm9tIFwiLi9hZGFwdGVyc1wiO1xuaW1wb3J0IHsgQXR0cmlidXRlc0NvbmZpZyB9IGZyb20gXCIuL21vZGVscy9hdHRyaWJ1dGVzLm1vZGVsXCI7XG5pbXBvcnQgeyBDdXN0b21BdHRyaWJ1dGVzQ29uZmlnIH0gZnJvbSBcIi4vbW9kZWxzL2N1c3RvbS1hdHRyaWJ1dGVzLm1vZGVsXCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyQ29uZmlnIH0gZnJvbSBcIi4vbW9kZWxzL2RhdGEtZmlsdGVyLm1vZGVsXCI7XG5pbXBvcnQgeyBFeHBvcnRUeXBlcyB9IGZyb20gXCIuL21vZGVscy9leHBvcnQtdHlwZXMubW9kZWxcIjtcbmltcG9ydCB7IE9yZGVyTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvZmlsdGVyLm1vZGVsXCI7XG5pbXBvcnQgeyBQYXRoTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvcGF0aC5tb2RlbFwiO1xuaW1wb3J0IHsgU2VhcmNoQXR0cmlidXRlc01vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL3NlYXJjaC1hdHRyaWJ1dGVzLm1vZGVsXCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyVXNlck1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL3VzZXIubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJTY2FubmVyIH0gZnJvbSBcIi4vc2Nhbm5lcnMvZGF0YS1maWx0ZXIuc2Nhbm5lclwiO1xuaW1wb3J0IHsgU2VxdWVsaXplTW9kZWxTY2FubmVyIH0gZnJvbSBcIi4vc2Nhbm5lcnMvc2VxdWVsaXplLW1vZGVsLnNjYW5uZXJcIjtcbmltcG9ydCB7IE0sIFNlcXVlbGl6ZVV0aWxzIH0gZnJvbSBcIi4vc2VxdWVsaXplLnV0aWxzXCI7XG5pbXBvcnQgeyBDc3ZVdGlscyB9IGZyb20gXCIuL3V0aWxzL2Nzdi51dGlsc1wiO1xuaW1wb3J0IHsgWGxzeFV0aWxzIH0gZnJvbSBcIi4vdXRpbHMveGxzeC51dGlsc1wiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGF0YUZpbHRlclJlcG9zaXRvcnk8RGF0YT4ge1xuICAgIHByaXZhdGUgX2NvbmZpZzogRGF0YUZpbHRlckNvbmZpZztcbiAgICBwcml2YXRlIF9kZWZpbml0aW9uczogQXR0cmlidXRlc0NvbmZpZ1tdO1xuXG4gICAgcHVibGljIGdldCBtb2RlbCgpOiB0eXBlb2YgTSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcubW9kZWwgYXMgdHlwZW9mIE07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZGF0YURlZjogYW55LFxuICAgICAgICBwcml2YXRlIGRhdGFGaWx0ZXJTY2FubmVyOiBEYXRhRmlsdGVyU2Nhbm5lcixcbiAgICAgICAgcHJpdmF0ZSBzZXF1ZWxpemVNb2RlbFNjYW5uZXI6IFNlcXVlbGl6ZU1vZGVsU2Nhbm5lcixcbiAgICAgICAgcHJpdmF0ZSBhY2Nlc3NDb250cm9sQWRhcHRlcjogQWNjZXNzQ29udHJvbEFkYXB0ZXIsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlQWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSBleHBvcnRBZGFwdGVyOiBFeHBvcnRBZGFwdGVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kQnlQayhpZGVudGlmaWVyOiBJZGVudGlmaWVyLCBvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGEgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEJ5UGsoaWRlbnRpZmllciwgdGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKG9wdGlvbnMsIGNvbmRpdGlvbnMpKTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlZHVjZU9iamVjdChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kQnlQa0Zyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIGlkZW50aWZpZXI6IElkZW50aWZpZXIsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGEgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IHRoaXMuYWNjZXNzQ29udHJvbEFkYXB0ZXIuZ2V0UmVzb3VyY2VzKHRoaXMuX2NvbmZpZy5tb2RlbCBhcyBhbnksIHVzZXIpO1xuICAgICAgICBpZiAocmVzb3VyY2VzLmlkcz8uaW5jbHVkZXMoaWRlbnRpZmllciBhcyBudW1iZXIpIHx8IHJlc291cmNlcy5hbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmRCeVBrKGlkZW50aWZpZXIsIHt9LCBjb25kaXRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNvdXJjZXMuaWRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmRPbmUoe1xuICAgICAgICAgICAgd2hlcmU6IHtcbiAgICAgICAgICAgICAgICBbT3AuYW5kXTogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbdGhpcy5fY29uZmlnLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGVdOiBpZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlcy53aGVyZSA/PyB7fVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgY29uZGl0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRPbmUob3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhIHwgbnVsbD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRPbmUodGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKG9wdGlvbnMsIGNvbmRpdGlvbnMpKTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlZHVjZU9iamVjdChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kT25lRnJvbVVzZXIodXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgb3B0aW9uczogRmluZE9wdGlvbnMgPSB7fSwgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YSB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZE9uZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHdoZXJlOiBhd2FpdCB0aGlzLm1lcmdlQWNjZXNzQ29udHJvbENvbmRpdGlvbihvcHRpb25zLndoZXJlID8/IHt9LCB1c2VyKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbmRpdGlvbnNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZEFsbChvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRBbGwodGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKG9wdGlvbnMsIGNvbmRpdGlvbnMpKTtcbiAgICAgICAgaWYgKCFyZXN1bHQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyB1bmtub3duIGFzIERhdGFbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0Lm1hcCh4ID0+IHRoaXMucmVkdWNlT2JqZWN0KHgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZEFsbEZyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8/IHt9O1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kQWxsKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgd2hlcmU6IGF3YWl0IHRoaXMubWVyZ2VBY2Nlc3NDb250cm9sQ29uZGl0aW9uKG9wdGlvbnMud2hlcmUgPz8ge30sIHVzZXIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uZGl0aW9uc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb3VudCh3aGVyZT86IFdoZXJlT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMoeyB3aGVyZSB9LCBjb25kaXRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuY291bnQob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaChzZWFyY2g6IHN0cmluZywgb3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhW10+IHtcbiAgICAgICAgY29uc3QgZmluZE9wdGlvbnMgPSB0aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMob3B0aW9ucywgY29uZGl0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaCwgZmluZE9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEFsbChmaW5kT3B0aW9ucyk7XG4gICAgICAgIGlmICghcmVzdWx0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoeCA9PiB0aGlzLnJlZHVjZU9iamVjdCh4KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEZyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIHNlYXJjaDogc3RyaW5nLCBvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9ucyA9IHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhvcHRpb25zLCBjb25kaXRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRTZWFyY2hDb25kaXRpb24oc2VhcmNoLCBmaW5kT3B0aW9ucyk7XG5cbiAgICAgICAgZmluZE9wdGlvbnMud2hlcmUgPSBhd2FpdCB0aGlzLm1lcmdlQWNjZXNzQ29udHJvbENvbmRpdGlvbihmaW5kT3B0aW9ucy53aGVyZSwgdXNlcik7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEFsbChmaW5kT3B0aW9ucyk7XG4gICAgICAgIGlmICghcmVzdWx0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoeCA9PiB0aGlzLnJlZHVjZU9iamVjdCh4KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdlbmVyYXRlRmluZE9wdGlvbnMob3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogRmluZE9wdGlvbnMge1xuICAgICAgICBvcHRpb25zID8/PSB7fTtcblxuICAgICAgICBjb25zdCBuZXN0ZWRJbmNsdWRlczogQXJyYXk8SW5jbHVkZU9wdGlvbnMgfCBJbmNsdWRlT3B0aW9uc1tdPiA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZmluaXRpb25zLm1hcCh4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXgucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSB4LnBhdGgudHJhbnNmb3JtUGF0aENvbmZpZyhjb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0geC50cmFuc2Zvcm1BdHRyaWJ1dGVzQ29uZmlnKGNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxJbmNsdWRlcyA9IHgudHJhbnNmb3JtSW5jbHVkZXNDb25maWcoY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKHRoaXMubW9kZWwsIHBhdGgsIGFkZGl0aW9uYWxJbmNsdWRlcywgYXR0cmlidXRlcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLnRoaXMuX2NvbmZpZy5nZXRDdXN0b21BdHRyaWJ1dGVzSW5jbHVkZXMoKS5tYXAoeCA9PiB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyh0aGlzLm1vZGVsLCB7XG4gICAgICAgICAgICAgICAgcGF0aDogeC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmFub2lkOiB4LnBhcmFub2lkLFxuICAgICAgICAgICAgICAgIHN1YlF1ZXJ5OiB4LnN1YlF1ZXJ5LFxuICAgICAgICAgICAgICAgIHdoZXJlOiB4LndoZXJlID8gU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZUNvbmRpdGlvbnMoeC53aGVyZSwgY29uZGl0aW9ucykgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0sIFtdLCB4LmF0dHJpYnV0ZXMpKVxuICAgICAgICBdO1xuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlKSB7XG4gICAgICAgICAgICBuZXN0ZWRJbmNsdWRlcy5wdXNoKG9wdGlvbnMuaW5jbHVkZSBhcyBJbmNsdWRlT3B0aW9ucyB8IEluY2x1ZGVPcHRpb25zW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy5pbmNsdWRlID0gU2VxdWVsaXplVXRpbHMucmVkdWNlSW5jbHVkZXMobmVzdGVkSW5jbHVkZXMpO1xuXG4gICAgICAgIGNvbnN0IGdlbmVyYXRlZEF0dHJpYnV0ZXMgPSB0aGlzLl9jb25maWcudHJhbnNmb3JtQXR0cmlidXRlc0NvbmZpZyhjb25kaXRpb25zKTtcbiAgICAgICAgaWYgKGdlbmVyYXRlZEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSBTZXF1ZWxpemVVdGlscy5tZXJnZUF0dHJpYnV0ZXMob3B0aW9ucy5hdHRyaWJ1dGVzLCBnZW5lcmF0ZWRBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzID0gZ2VuZXJhdGVkQXR0cmlidXRlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZW5lcmF0ZU9yZGVySW5jbHVkZShvcmRlcjogT3JkZXJNb2RlbCwgY29uZGl0aW9ucz86IG9iamVjdCk6IEluY2x1ZGVPcHRpb25zW10ge1xuICAgICAgICBpZiAoIW9yZGVyIHx8ICFvcmRlci5jb2x1bW4gfHwgb3JkZXIuZGlyZWN0aW9uID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjdXN0b21BdHRyID0gdGhpcy5nZXRDdXN0b21BdHRyaWJ1dGUob3JkZXIuY29sdW1uKTtcbiAgICAgICAgaWYgKGN1c3RvbUF0dHIpIHtcbiAgICAgICAgICAgIGlmICghY3VzdG9tQXR0ci5jb25maWcucGF0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKHRoaXMubW9kZWwsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiBjdXN0b21BdHRyLmNvbmZpZy5wYXRoLFxuICAgICAgICAgICAgICAgIHdoZXJlOiBjdXN0b21BdHRyLmNvbmZpZy53aGVyZSA/IFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVDb25kaXRpb25zKGN1c3RvbUF0dHIuY29uZmlnLndoZXJlLCBjb25kaXRpb25zKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldE9yZGVySW5jbHVkZXModGhpcy5tb2RlbCwgb3JkZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZW5lcmF0ZVNlYXJjaEluY2x1ZGUoY29uZGl0aW9ucz86IG9iamVjdCk6IEluY2x1ZGVhYmxlW10ge1xuICAgICAgICBjb25zdCBuZXN0ZWRJbmNsdWRlczogQXJyYXk8SW5jbHVkZU9wdGlvbnMgfCBJbmNsdWRlT3B0aW9uc1tdPiA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZmluaXRpb25zLm1hcCh4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXgucGF0aCB8fCB4LnBhdGguc2VwYXJhdGUgfHwgeC5pZ25vcmVJblNlYXJjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSB4LnBhdGgudHJhbnNmb3JtUGF0aENvbmZpZyhjb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0geC50cmFuc2Zvcm1BdHRyaWJ1dGVzQ29uZmlnKGNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxJbmNsdWRlcyA9IHgudHJhbnNmb3JtSW5jbHVkZXNDb25maWcoY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKHRoaXMubW9kZWwsIHBhdGgsIGFkZGl0aW9uYWxJbmNsdWRlcywgYXR0cmlidXRlcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLnRoaXMuX2NvbmZpZy5nZXRDdXN0b21BdHRyaWJ1dGVzSW5jbHVkZXMoKS5tYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF4LnBhdGggfHwgeC5zZXBhcmF0ZSB8fCB4Lmlnbm9yZUluU2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXModGhpcy5tb2RlbCwge1xuICAgICAgICAgICAgICAgICAgICBwYXRoOiB4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFub2lkOiB4LnBhcmFub2lkLFxuICAgICAgICAgICAgICAgICAgICBzdWJRdWVyeTogeC5zdWJRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgd2hlcmU6IHgud2hlcmUgPyBTZXF1ZWxpemVVdGlscy5nZW5lcmF0ZVdoZXJlQ29uZGl0aW9ucyh4LndoZXJlLCBjb25kaXRpb25zKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH0sIFtdLCB4LmF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcblxuICAgICAgICByZXR1cm4gU2VxdWVsaXplVXRpbHMucmVkdWNlSW5jbHVkZXMobmVzdGVkSW5jbHVkZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWR1Y2VPYmplY3QocmVzdWx0OiBhbnkpOiBEYXRhIHtcbiAgICAgICAgY29uc3QgciA9IHJlc3VsdCBpbnN0YW5jZW9mIE1vZGVsID8gcmVzdWx0LnRvSlNPTigpIDogcmVzdWx0O1xuICAgICAgICBjb25zdCBkYXRhID0gbmV3IHRoaXMuZGF0YURlZi5wcm90b3R5cGUuY29uc3RydWN0b3Ioe30sIHsgaXNOZXdSZWNvcmQ6IGZhbHNlIH0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKGRhdGEsIHIpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE1vZGVsKSB7XG4gICAgICAgICAgICAoZGF0YSBhcyBhbnkpLmRhdGFWYWx1ZXMgPSB7XG4gICAgICAgICAgICAgICAgLi4uclxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZGVmIG9mIHRoaXMuX2RlZmluaXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoZGVmLnBhdGgpIHtcbiAgICAgICAgICAgICAgICBkYXRhW2RlZi5rZXldID0gU2VxdWVsaXplVXRpbHMucmVkdWNlTW9kZWxGcm9tUGF0aChyZXN1bHQsIGRlZi5wYXRoLnBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5zZXREYXRhVmFsdWUoZGVmLmtleSBhcyBhbnksIFNlcXVlbGl6ZVV0aWxzLnJlZHVjZU1vZGVsRnJvbVBhdGgocmVzdWx0LCBkZWYucGF0aC5wYXRoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhW2RlZi5rZXldID0gcmVzdWx0W2RlZi5rZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlYXJjaEF0dHJpYnV0ZXMoKTogU2VhcmNoQXR0cmlidXRlc01vZGVsW10ge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzOiBTZWFyY2hBdHRyaWJ1dGVzTW9kZWxbXSA9IFtdO1xuICAgICAgICBjb25zdCBtb2RlbEF0dHIgPSB0aGlzLl9jb25maWcuZ2V0U2VhcmNoYWJsZUF0dHJpYnV0ZXMoKTtcbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKFxuICAgICAgICAgICAgLi4ubW9kZWxBdHRyLm1hcChhID0+ICh7XG4gICAgICAgICAgICAgICAgbmFtZTogYSxcbiAgICAgICAgICAgICAgICBrZXk6IGEsXG4gICAgICAgICAgICAgICAgaXNKc29uOiBTZXF1ZWxpemVVdGlscy5pc0NvbHVtbkpzb24odGhpcy5tb2RlbCwgYSlcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAoY29uc3QgZGVmaW5pdGlvbiBvZiB0aGlzLl9kZWZpbml0aW9ucykge1xuICAgICAgICAgICAgaWYgKCFkZWZpbml0aW9uLnBhdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYXR0ciA9IGRlZmluaXRpb24uaWdub3JlSW5TZWFyY2ggPyBbXSA6IGRlZmluaXRpb24uc2VhcmNoYWJsZUF0dHJpYnV0ZXMgPz8gZGVmaW5pdGlvbi5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbEluY2x1ZGVzID0gZGVmaW5pdGlvbi50cmFuc2Zvcm1JbmNsdWRlc0NvbmZpZyh7fSk7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICAgICAgLi4udGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0QXR0cmlidXRlcyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbi5wYXRoIGFzIFBhdGhNb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEluY2x1ZGVzLFxuICAgICAgICAgICAgICAgICAgICBhdHRyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNDdXN0b21BdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2NvbmZpZy5jdXN0b21BdHRyaWJ1dGVzLmZpbmQoKHgpID0+IHguY29uZmlnLm5hbWUgPT09IG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDdXN0b21BdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogQ3VzdG9tQXR0cmlidXRlc0NvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcuY3VzdG9tQXR0cmlidXRlcy5maW5kKCh4KSA9PiB4LmNvbmZpZy5uYW1lID09PSBuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VzdG9tQXR0cmlidXRlR3JvdXBCeSgpOiAoc3RyaW5nIHwgRm4gfCBDb2wpW10ge1xuICAgICAgICBjb25zdCBncm91cDogR3JvdXBPcHRpb24gPSBbXTtcblxuICAgICAgICBjb25zdCBzaG91bGRHcm91cEJ5ID0gdGhpcy5fY29uZmlnLmN1c3RvbUF0dHJpYnV0ZXMuc29tZSgoYXR0cmlidXRlKSA9PiBhdHRyaWJ1dGUuc2hvdWxkR3JvdXBCeSgpKTtcbiAgICAgICAgaWYgKHNob3VsZEdyb3VwQnkpIHtcbiAgICAgICAgICAgIGdyb3VwLnB1c2goXCJpZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBncm91cDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWREYXRhKGRhdGE6IERhdGFbXSwgdHlwZTogRXhwb3J0VHlwZXMsIGxhbmc6IHN0cmluZywgb3B0aW9ucz86IGFueSk6IFByb21pc2U8QnVmZmVyIHwgc3RyaW5nPjtcbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWREYXRhKGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSwgdHlwZTogRXhwb3J0VHlwZXMsIGxhbmc6IHN0cmluZywgb3B0aW9ucz86IGFueSk6IFByb21pc2U8QnVmZmVyIHwgc3RyaW5nPjtcbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWREYXRhKFxuICAgICAgICBkYXRhT3JIZWFkZXJzOiBEYXRhW10gfCBzdHJpbmdbXSxcbiAgICAgICAgdHlwZU9yRGF0YTogRXhwb3J0VHlwZXMgfCBhbnlbXSxcbiAgICAgICAgbGFuZ09yVHlwZTogc3RyaW5nIHwgRXhwb3J0VHlwZXMsXG4gICAgICAgIG9wdGlvbnNPckxhbmc/OiBhbnkgfCBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM/OiBhbnlcbiAgICApOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz4ge1xuICAgICAgICBsZXQgdHlwZTogRXhwb3J0VHlwZXM7XG4gICAgICAgIGxldCBoZWFkZXJzOiBzdHJpbmdbXTtcbiAgICAgICAgbGV0IGRhdGE6IGFueVtdO1xuICAgICAgICBsZXQgbGFuZzogc3RyaW5nO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdHlwZU9yRGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdHlwZSA9IHR5cGVPckRhdGE7XG4gICAgICAgICAgICBsYW5nID0gbGFuZ09yVHlwZTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBhd2FpdCB0aGlzLmdldEV4cG9ydHNIZWFkZXIobGFuZywgdGhpcy5fY29uZmlnLmV4cG9ydENvbHVtbnMgPz8gW10pO1xuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0RXhwb3J0RGF0YShkYXRhT3JIZWFkZXJzIGFzIERhdGFbXSk7XG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9uc09yTGFuZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhbmcgPSBvcHRpb25zT3JMYW5nIGFzIHN0cmluZztcbiAgICAgICAgICAgIGhlYWRlcnMgPSBhd2FpdCB0aGlzLmdldEV4cG9ydHNIZWFkZXIobGFuZywgZGF0YU9ySGVhZGVycyBhcyBzdHJpbmdbXSk7XG4gICAgICAgICAgICBkYXRhID0gdHlwZU9yRGF0YTtcbiAgICAgICAgICAgIHR5cGUgPSBsYW5nT3JUeXBlIGFzIEV4cG9ydFR5cGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydFR5cGVzLlhMU1g6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG93bmxvYWRYbHN4KGhlYWRlcnMsIGRhdGEpO1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRUeXBlcy5IVE1MOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvd25sb2FkSHRtbChoZWFkZXJzLCBkYXRhLCBsYW5nLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0VHlwZXMuQ1NWOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvd25sb2FkQ3N2KGhlYWRlcnMsIGRhdGEpO1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRUeXBlcy5QREY6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG93bmxvYWRQZGYoaGVhZGVycywgZGF0YSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydFR5cGVzLlpJUDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb3dubG9hZFppcChoZWFkZXJzLCBkYXRhLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZFhsc3goaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIFhsc3hVdGlscy5hcnJheVRvWGxzeEJ1ZmZlcihcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB0aGlzLl9jb25maWcubW9kZWwuZ2V0VGFibGVOYW1lKCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgaGVhZGVyc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZEh0bWwoaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRBZGFwdGVyLmV4cG9ydEFzSHRtbChsYW5nLCB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGNvbHVtbnM6IGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZENzdihoZWFkZXJzOiBzdHJpbmdbXSwgZGF0YTogYW55W10pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgQ3N2VXRpbHMuYXJyYXlUb0NzdkJ1ZmZlcihkYXRhLCBoZWFkZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWRQZGYoaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRBZGFwdGVyLmV4cG9ydEFzUGRmKGxhbmcsIHtcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLl9jb25maWcubW9kZWwuZ2V0VGFibGVOYW1lKCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgY29sdW1uczogaGVhZGVycyxcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkWmlwKGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSwgbGFuZzogc3RyaW5nLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0QWRhcHRlci5leHBvcnRBc1ppcChsYW5nLCB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGNvbHVtbnM6IGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdCgpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5kYXRhRmlsdGVyU2Nhbm5lci5nZXREYXRhRmlsdGVyKHRoaXMuZGF0YURlZik7XG4gICAgICAgIHRoaXMuX2RlZmluaXRpb25zID0gdGhpcy5kYXRhRmlsdGVyU2Nhbm5lci5nZXRBdHRyaWJ1dGVzKHRoaXMuZGF0YURlZik7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFNlYXJjaENvbmRpdGlvbihzZWFyY2g6IHN0cmluZywgb3B0aW9uczogRmluZE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFzZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlYXJjaEluY2x1ZGUgPSB0aGlzLmdlbmVyYXRlU2VhcmNoSW5jbHVkZSh7fSk7XG4gICAgICAgIG9wdGlvbnMuaW5jbHVkZSA9IFNlcXVlbGl6ZVV0aWxzLm1lcmdlSW5jbHVkZXMoXG4gICAgICAgICAgICBvcHRpb25zLmluY2x1ZGUgYXMgSW5jbHVkZU9wdGlvbnMgfCBJbmNsdWRlT3B0aW9uc1tdLFxuICAgICAgICAgICAgc2VhcmNoSW5jbHVkZSBhcyBJbmNsdWRlT3B0aW9uc1tdXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLndoZXJlKSB7XG4gICAgICAgICAgICBvcHRpb25zLndoZXJlID0geyBbT3AuYW5kXTogW10gfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMud2hlcmUgPSB7IFtPcC5hbmRdOiBbb3B0aW9ucy53aGVyZV0gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdoZXJlID0gb3B0aW9ucy53aGVyZTtcbiAgICAgICAgY29uc3QgZ2VuZXJhdGVGaWVsZHNPYmplY3QgPSBzZWFyY2hWYWx1ZSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRTZWFyY2hBdHRyaWJ1dGVzKClcbiAgICAgICAgICAgICAgICAubWFwKGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5pc0pzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gYS5saXRlcmFsS2V5ID8/IGBcXGAke3RoaXMubW9kZWwubmFtZX1cXGAuXFxgJHthLmtleX1cXGBgO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGxpdGVyYWwgZnVuY3Rpb24gaXMgbm90IHdvcmtpbmcgb2Ygc29tZSByZWFzb24uLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLm1vZGVsLnNlcXVlbGl6ZS5lc2NhcGUoYCUke3NlYXJjaFZhbHVlLnRvVXBwZXJDYXNlKCl9JWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdGlscy5MaXRlcmFsKGBVUFBFUihKU09OX0VYVFJBQ1QoJHtmaWVsZH0sICckJykpIExJS0UgJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgW2Eua2V5XToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPcC5saWtlXTogYCUke3NlYXJjaFZhbHVlfSVgXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSkuZmlsdGVyKHggPT4gISF4KTtcblxuICAgICAgICBjb25zdCB0b2tlbnMgPSBzZWFyY2guc3BsaXQoXCIgXCIpO1xuICAgICAgICB3aGVyZVtPcC5hbmRdLnB1c2goXG4gICAgICAgICAgICB0b2tlbnMubWFwKHQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIFtPcC5vcl06IGdlbmVyYXRlRmllbGRzT2JqZWN0KHQpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnRzSGVhZGVyKGxhbmc6IHN0cmluZywgaGVhZGVyczogc3RyaW5nW10sIHRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChoZWFkZXJzLm1hcCh4ID0+IHRyYW5zbGF0ZVNlcnZpY2UuZ2V0VHJhbnNsYXRpb24obGFuZywgYGV4cG9ydHMuJHt4fWApKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnREYXRhKGRhdGE6IERhdGFbXSk6IG9iamVjdFtdIHtcbiAgICAgICAgcmV0dXJuIGRhdGEubWFwKHggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLl9jb25maWcuZXhwb3J0Q29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IFt2YWx1ZSwgcHJvcF0gPSB0aGlzLmdldEV4cG9ydFZhbHVlKHgsIGtleSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2Ake2krK306JHtwcm9wfWBdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cG9ydFZhbHVlKGRhdGE6IERhdGEsIHBhdGg6IHN0cmluZyk6IFt1bmtub3duLCBzdHJpbmddIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gW2RhdGFba2V5XSwga2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBrZXk6IHN0cmluZztcbiAgICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXlzLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2RhdGEsIGtleV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBtZXJnZUFjY2Vzc0NvbnRyb2xDb25kaXRpb24od2hlcmU6IFdoZXJlT3B0aW9ucywgdXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IHRoaXMuYWNjZXNzQ29udHJvbEFkYXB0ZXIuZ2V0UmVzb3VyY2VzKHRoaXMuX2NvbmZpZy5tb2RlbCBhcyBhbnksIHVzZXIpO1xuICAgICAgICBpZiAocmVzb3VyY2VzLmlkcykge1xuICAgICAgICAgICAgcmV0dXJuIFNlcXVlbGl6ZVV0aWxzLm1lcmdlV2hlcmUoeyBpZDogcmVzb3VyY2VzLmlkcyB9LCB3aGVyZSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2VzLndoZXJlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIFtPcC5hbmRdOiBbXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMud2hlcmVcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgIH1cbn1cbiJdfQ==
|
|
402
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1Qyx5Q0FBaUg7QUFHakgseUNBQW1GO0FBSW5GLG9FQUEwRDtBQUsxRCx3RUFBbUU7QUFDbkUsZ0ZBQTJFO0FBQzNFLHVEQUFzRDtBQUN0RCxvRkFBK0U7QUFDL0UsaURBQTZDO0FBQzdDLG1EQUErQztBQUd4QyxJQUFNLG9CQUFvQixHQUExQixNQUFNLG9CQUFvQjtJQUk3QixJQUFXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBaUIsQ0FBQztJQUMxQyxDQUFDO0lBRUQsWUFDWSxPQUFZLEVBQ1osaUJBQW9DLEVBQ3BDLHFCQUE0QyxFQUM1QyxvQkFBMEMsRUFDMUMsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLHVCQUFnRDtRQU5oRCxZQUFPLEdBQVAsT0FBTyxDQUFLO1FBQ1osc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBRXhELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFzQixFQUFFLE9BQXFCLEVBQUUsVUFBbUI7UUFDcEYsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3BHLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0Qs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QUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbEU7YUFBTSxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDeEIsT0FBTztnQkFDSCxDQUFDLGNBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDTixLQUFLO29CQUNMLFNBQVMsQ0FBQyxLQUFLO2lCQUNsQjthQUNKLENBQUM7U0FDTDtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSixDQUFBO0FBdGNZLG9EQUFvQjsrQkFBcEIsb0JBQW9CO0lBRGhDLElBQUEsbUJBQVUsR0FBRTs2Q0FXc0IsdUNBQWlCO1FBQ2IsK0NBQXFCO1FBQ3RCLCtCQUFvQjtRQUN4QiwyQkFBZ0I7UUFDbkIsd0JBQWE7UUFDSCxtREFBdUI7R0FmbkQsb0JBQW9CLENBc2NoQyIsImZpbGUiOiJsaWIvZGF0YS1maWx0ZXIucmVwb3NpdG9yeS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IEZpbmRPcHRpb25zLCBJZGVudGlmaWVyLCBJbmNsdWRlYWJsZSwgSW5jbHVkZU9wdGlvbnMsIE1vZGVsLCBPcCwgVXRpbHMsIFdoZXJlT3B0aW9ucyB9IGZyb20gXCJzZXF1ZWxpemVcIjtcbmltcG9ydCB7IEdyb3VwT3B0aW9uIH0gZnJvbSBcInNlcXVlbGl6ZS90eXBlcy9tb2RlbFwiO1xuaW1wb3J0IHsgQ29sLCBGbiB9IGZyb20gXCJzZXF1ZWxpemUvdHlwZXMvdXRpbHNcIjtcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xBZGFwdGVyLCBFeHBvcnRBZGFwdGVyLCBUcmFuc2xhdGVBZGFwdGVyIH0gZnJvbSBcIi4vYWRhcHRlcnNcIjtcbmltcG9ydCB7IEF0dHJpYnV0ZXNDb25maWcgfSBmcm9tIFwiLi9tb2RlbHMvYXR0cmlidXRlcy5tb2RlbFwiO1xuaW1wb3J0IHsgQ3VzdG9tQXR0cmlidXRlc0NvbmZpZyB9IGZyb20gXCIuL21vZGVscy9jdXN0b20tYXR0cmlidXRlcy5tb2RlbFwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlckNvbmZpZyB9IGZyb20gXCIuL21vZGVscy9kYXRhLWZpbHRlci5tb2RlbFwiO1xuaW1wb3J0IHsgRXhwb3J0VHlwZXMgfSBmcm9tIFwiLi9tb2RlbHMvZXhwb3J0LXR5cGVzLm1vZGVsXCI7XG5pbXBvcnQgeyBPcmRlck1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL2ZpbHRlci5tb2RlbFwiO1xuaW1wb3J0IHsgUGF0aE1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL3BhdGgubW9kZWxcIjtcbmltcG9ydCB7IFNlYXJjaEF0dHJpYnV0ZXNNb2RlbCB9IGZyb20gXCIuL21vZGVscy9zZWFyY2gtYXR0cmlidXRlcy5tb2RlbFwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclVzZXJNb2RlbCB9IGZyb20gXCIuL21vZGVscy91c2VyLm1vZGVsXCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyU2Nhbm5lciB9IGZyb20gXCIuL3NjYW5uZXJzL2RhdGEtZmlsdGVyLnNjYW5uZXJcIjtcbmltcG9ydCB7IFNlcXVlbGl6ZU1vZGVsU2Nhbm5lciB9IGZyb20gXCIuL3NjYW5uZXJzL3NlcXVlbGl6ZS1tb2RlbC5zY2FubmVyXCI7XG5pbXBvcnQgeyBNLCBTZXF1ZWxpemVVdGlscyB9IGZyb20gXCIuL3NlcXVlbGl6ZS51dGlsc1wiO1xuaW1wb3J0IHsgRGlhbGVjdEZvcm1hdHRlclNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9kaWFsZWN0LWZvcm1hdHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBDc3ZVdGlscyB9IGZyb20gXCIuL3V0aWxzL2Nzdi51dGlsc1wiO1xuaW1wb3J0IHsgWGxzeFV0aWxzIH0gZnJvbSBcIi4vdXRpbHMveGxzeC51dGlsc1wiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGF0YUZpbHRlclJlcG9zaXRvcnk8RGF0YT4ge1xuICAgIHByaXZhdGUgX2NvbmZpZzogRGF0YUZpbHRlckNvbmZpZztcbiAgICBwcml2YXRlIF9kZWZpbml0aW9uczogQXR0cmlidXRlc0NvbmZpZ1tdO1xuXG4gICAgcHVibGljIGdldCBtb2RlbCgpOiB0eXBlb2YgTSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcubW9kZWwgYXMgdHlwZW9mIE07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZGF0YURlZjogYW55LFxuICAgICAgICBwcml2YXRlIGRhdGFGaWx0ZXJTY2FubmVyOiBEYXRhRmlsdGVyU2Nhbm5lcixcbiAgICAgICAgcHJpdmF0ZSBzZXF1ZWxpemVNb2RlbFNjYW5uZXI6IFNlcXVlbGl6ZU1vZGVsU2Nhbm5lcixcbiAgICAgICAgcHJpdmF0ZSBhY2Nlc3NDb250cm9sQWRhcHRlcjogQWNjZXNzQ29udHJvbEFkYXB0ZXIsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlQWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSBleHBvcnRBZGFwdGVyOiBFeHBvcnRBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIGRpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlOiBEaWFsZWN0Rm9ybWF0dGVyU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZEJ5UGsoaWRlbnRpZmllcjogSWRlbnRpZmllciwgb3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhIHwgbnVsbD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRCeVBrKGlkZW50aWZpZXIsIHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhvcHRpb25zLCBjb25kaXRpb25zKSk7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yZWR1Y2VPYmplY3QocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZEJ5UGtGcm9tVXNlcih1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBpZGVudGlmaWVyOiBJZGVudGlmaWVyLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhIHwgbnVsbD4ge1xuICAgICAgICBjb25zdCByZXNvdXJjZXMgPSBhd2FpdCB0aGlzLmFjY2Vzc0NvbnRyb2xBZGFwdGVyLmdldFJlc291cmNlcyh0aGlzLl9jb25maWcubW9kZWwgYXMgYW55LCB1c2VyKTtcbiAgICAgICAgaWYgKHJlc291cmNlcy5pZHM/LmluY2x1ZGVzKGlkZW50aWZpZXIgYXMgbnVtYmVyKSB8fCByZXNvdXJjZXMuYWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kQnlQayhpZGVudGlmaWVyLCB7fSwgY29uZGl0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzb3VyY2VzLmlkcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kT25lKHtcbiAgICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICAgICAgW09wLmFuZF06IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXMuX2NvbmZpZy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXTogaWRlbnRpZmllclxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMud2hlcmUgPz8ge31cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGNvbmRpdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kT25lKG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YSB8IG51bGw+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5tb2RlbC5maW5kT25lKHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhvcHRpb25zLCBjb25kaXRpb25zKSk7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yZWR1Y2VPYmplY3QocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZE9uZUZyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIG9wdGlvbnM6IEZpbmRPcHRpb25zID0ge30sIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGEgfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRPbmUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICB3aGVyZTogYXdhaXQgdGhpcy5tZXJnZUFjY2Vzc0NvbnRyb2xDb25kaXRpb24ob3B0aW9ucy53aGVyZSA/PyB7fSwgdXNlcilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb25kaXRpb25zXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRBbGwob3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5tb2RlbC5maW5kQWxsKHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhvcHRpb25zLCBjb25kaXRpb25zKSk7XG4gICAgICAgIGlmICghcmVzdWx0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoeCA9PiB0aGlzLnJlZHVjZU9iamVjdCh4KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRBbGxGcm9tVXNlcih1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyA/PyB7fTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZEFsbChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHdoZXJlOiBhd2FpdCB0aGlzLm1lcmdlQWNjZXNzQ29udHJvbENvbmRpdGlvbihvcHRpb25zLndoZXJlID8/IHt9LCB1c2VyKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbmRpdGlvbnNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY291bnQod2hlcmU/OiBXaGVyZU9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKHsgd2hlcmUgfSwgY29uZGl0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmNvdW50KG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZWFyY2goc2VhcmNoOiBzdHJpbmcsIG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIGNvbnN0IGZpbmRPcHRpb25zID0gdGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKG9wdGlvbnMsIGNvbmRpdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZFNlYXJjaENvbmRpdGlvbihzZWFyY2gsIGZpbmRPcHRpb25zKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRBbGwoZmluZE9wdGlvbnMpO1xuICAgICAgICBpZiAoIXJlc3VsdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIHVua25vd24gYXMgRGF0YVtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQubWFwKHggPT4gdGhpcy5yZWR1Y2VPYmplY3QoeCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZWFyY2hGcm9tVXNlcih1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBzZWFyY2g6IHN0cmluZywgb3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhW10+IHtcbiAgICAgICAgY29uc3QgZmluZE9wdGlvbnMgPSB0aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMob3B0aW9ucywgY29uZGl0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaCwgZmluZE9wdGlvbnMpO1xuXG4gICAgICAgIGZpbmRPcHRpb25zLndoZXJlID0gYXdhaXQgdGhpcy5tZXJnZUFjY2Vzc0NvbnRyb2xDb25kaXRpb24oZmluZE9wdGlvbnMud2hlcmUsIHVzZXIpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRBbGwoZmluZE9wdGlvbnMpO1xuICAgICAgICBpZiAoIXJlc3VsdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIHVua25vd24gYXMgRGF0YVtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQubWFwKHggPT4gdGhpcy5yZWR1Y2VPYmplY3QoeCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZW5lcmF0ZUZpbmRPcHRpb25zKG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IEZpbmRPcHRpb25zIHtcbiAgICAgICAgb3B0aW9ucyA/Pz0ge307XG5cbiAgICAgICAgY29uc3QgbmVzdGVkSW5jbHVkZXM6IEFycmF5PEluY2x1ZGVPcHRpb25zIHwgSW5jbHVkZU9wdGlvbnNbXT4gPSBbXG4gICAgICAgICAgICAuLi50aGlzLl9kZWZpbml0aW9ucy5tYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF4LnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0geC5wYXRoLnRyYW5zZm9ybVBhdGhDb25maWcoY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHgud2l0aENvbnRleHQodGhpcy5kaWFsZWN0Rm9ybWF0dGVyU2VydmljZSkudHJhbnNmb3JtQXR0cmlidXRlc0NvbmZpZyhjb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsSW5jbHVkZXMgPSB4LndpdGhDb250ZXh0KHRoaXMuZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UpLnRyYW5zZm9ybUluY2x1ZGVzQ29uZmlnKGNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyh0aGlzLm1vZGVsLCBwYXRoLCBhZGRpdGlvbmFsSW5jbHVkZXMsIGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi50aGlzLl9jb25maWcuZ2V0Q3VzdG9tQXR0cmlidXRlc0luY2x1ZGVzKCkubWFwKHggPT4gdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXModGhpcy5tb2RlbCwge1xuICAgICAgICAgICAgICAgIHBhdGg6IHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJhbm9pZDogeC5wYXJhbm9pZCxcbiAgICAgICAgICAgICAgICBzdWJRdWVyeTogeC5zdWJRdWVyeSxcbiAgICAgICAgICAgICAgICB3aGVyZTogeC53aGVyZSA/IFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVDb25kaXRpb25zKHgud2hlcmUsIGNvbmRpdGlvbnMpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9LCBbXSwgeC5hdHRyaWJ1dGVzKSlcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZSkge1xuICAgICAgICAgICAgbmVzdGVkSW5jbHVkZXMucHVzaChvcHRpb25zLmluY2x1ZGUgYXMgSW5jbHVkZU9wdGlvbnMgfCBJbmNsdWRlT3B0aW9uc1tdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMuaW5jbHVkZSA9IFNlcXVlbGl6ZVV0aWxzLnJlZHVjZUluY2x1ZGVzKG5lc3RlZEluY2x1ZGVzKTtcblxuICAgICAgICBjb25zdCBnZW5lcmF0ZWRBdHRyaWJ1dGVzID0gdGhpcy5fY29uZmlnLndpdGhDb250ZXh0KHRoaXMuZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UpLnRyYW5zZm9ybUF0dHJpYnV0ZXNDb25maWcoY29uZGl0aW9ucyk7XG4gICAgICAgIGlmIChnZW5lcmF0ZWRBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzID0gU2VxdWVsaXplVXRpbHMubWVyZ2VBdHRyaWJ1dGVzKG9wdGlvbnMuYXR0cmlidXRlcywgZ2VuZXJhdGVkQXR0cmlidXRlcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuYXR0cmlidXRlcyA9IGdlbmVyYXRlZEF0dHJpYnV0ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2VuZXJhdGVPcmRlckluY2x1ZGUob3JkZXI6IE9yZGVyTW9kZWwsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBJbmNsdWRlT3B0aW9uc1tdIHtcbiAgICAgICAgaWYgKCFvcmRlciB8fCAhb3JkZXIuY29sdW1uIHx8IG9yZGVyLmRpcmVjdGlvbiA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VzdG9tQXR0ciA9IHRoaXMuZ2V0Q3VzdG9tQXR0cmlidXRlKG9yZGVyLmNvbHVtbik7XG4gICAgICAgIGlmIChjdXN0b21BdHRyKSB7XG4gICAgICAgICAgICBpZiAoIWN1c3RvbUF0dHIuY29uZmlnLnBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyh0aGlzLm1vZGVsLCB7XG4gICAgICAgICAgICAgICAgcGF0aDogY3VzdG9tQXR0ci5jb25maWcucGF0aCxcbiAgICAgICAgICAgICAgICB3aGVyZTogY3VzdG9tQXR0ci5jb25maWcud2hlcmUgPyBTZXF1ZWxpemVVdGlscy5nZW5lcmF0ZVdoZXJlQ29uZGl0aW9ucyhjdXN0b21BdHRyLmNvbmZpZy53aGVyZSwgY29uZGl0aW9ucykgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRPcmRlckluY2x1ZGVzKHRoaXMubW9kZWwsIG9yZGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2VuZXJhdGVTZWFyY2hJbmNsdWRlKGNvbmRpdGlvbnM/OiBvYmplY3QpOiBJbmNsdWRlYWJsZVtdIHtcbiAgICAgICAgY29uc3QgbmVzdGVkSW5jbHVkZXM6IEFycmF5PEluY2x1ZGVPcHRpb25zIHwgSW5jbHVkZU9wdGlvbnNbXT4gPSBbXG4gICAgICAgICAgICAuLi50aGlzLl9kZWZpbml0aW9ucy5tYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF4LnBhdGggfHwgeC5wYXRoLnNlcGFyYXRlIHx8IHguaWdub3JlSW5TZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0geC5wYXRoLnRyYW5zZm9ybVBhdGhDb25maWcoY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHgud2l0aENvbnRleHQodGhpcy5kaWFsZWN0Rm9ybWF0dGVyU2VydmljZSkudHJhbnNmb3JtQXR0cmlidXRlc0NvbmZpZyhjb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsSW5jbHVkZXMgPSB4LndpdGhDb250ZXh0KHRoaXMuZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UpLnRyYW5zZm9ybUluY2x1ZGVzQ29uZmlnKGNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyh0aGlzLm1vZGVsLCBwYXRoLCBhZGRpdGlvbmFsSW5jbHVkZXMsIGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi50aGlzLl9jb25maWcuZ2V0Q3VzdG9tQXR0cmlidXRlc0luY2x1ZGVzKCkubWFwKHggPT4ge1xuICAgICAgICAgICAgICAgIGlmICgheC5wYXRoIHx8IHguc2VwYXJhdGUgfHwgeC5pZ25vcmVJblNlYXJjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKHRoaXMubW9kZWwsIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogeC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbm9pZDogeC5wYXJhbm9pZCxcbiAgICAgICAgICAgICAgICAgICAgc3ViUXVlcnk6IHguc3ViUXVlcnksXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlOiB4LndoZXJlID8gU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZUNvbmRpdGlvbnMoeC53aGVyZSwgY29uZGl0aW9ucykgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9LCBbXSwgeC5hdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuIFNlcXVlbGl6ZVV0aWxzLnJlZHVjZUluY2x1ZGVzKG5lc3RlZEluY2x1ZGVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVkdWNlT2JqZWN0KHJlc3VsdDogYW55KTogRGF0YSB7XG4gICAgICAgIGNvbnN0IHIgPSByZXN1bHQgaW5zdGFuY2VvZiBNb2RlbCA/IHJlc3VsdC50b0pTT04oKSA6IHJlc3VsdDtcbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyB0aGlzLmRhdGFEZWYucHJvdG90eXBlLmNvbnN0cnVjdG9yKHt9LCB7IGlzTmV3UmVjb3JkOiBmYWxzZSB9KTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhLCByKTtcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBNb2RlbCkge1xuICAgICAgICAgICAgKGRhdGEgYXMgYW55KS5kYXRhVmFsdWVzID0ge1xuICAgICAgICAgICAgICAgIC4uLnJcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGRlZiBvZiB0aGlzLl9kZWZpbml0aW9ucykge1xuICAgICAgICAgICAgaWYgKGRlZi5wYXRoKSB7XG4gICAgICAgICAgICAgICAgZGF0YVtkZWYua2V5XSA9IFNlcXVlbGl6ZVV0aWxzLnJlZHVjZU1vZGVsRnJvbVBhdGgocmVzdWx0LCBkZWYucGF0aC5wYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE1vZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuc2V0RGF0YVZhbHVlKGRlZi5rZXkgYXMgYW55LCBTZXF1ZWxpemVVdGlscy5yZWR1Y2VNb2RlbEZyb21QYXRoKHJlc3VsdCwgZGVmLnBhdGgucGF0aCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YVtkZWYua2V5XSA9IHJlc3VsdFtkZWYua2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTZWFyY2hBdHRyaWJ1dGVzKCk6IFNlYXJjaEF0dHJpYnV0ZXNNb2RlbFtdIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlczogU2VhcmNoQXR0cmlidXRlc01vZGVsW10gPSBbXTtcbiAgICAgICAgY29uc3QgbW9kZWxBdHRyID0gdGhpcy5fY29uZmlnLmdldFNlYXJjaGFibGVBdHRyaWJ1dGVzKCk7XG4gICAgICAgIGF0dHJpYnV0ZXMucHVzaChcbiAgICAgICAgICAgIC4uLm1vZGVsQXR0ci5tYXAoYSA9PiAoe1xuICAgICAgICAgICAgICAgIG5hbWU6IGEsXG4gICAgICAgICAgICAgICAga2V5OiBhLFxuICAgICAgICAgICAgICAgIGlzSnNvbjogU2VxdWVsaXplVXRpbHMuaXNDb2x1bW5Kc29uKHRoaXMubW9kZWwsIGEpXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGRlZmluaXRpb24gb2YgdGhpcy5fZGVmaW5pdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghZGVmaW5pdGlvbi5wYXRoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGF0dHIgPSBkZWZpbml0aW9uLmlnbm9yZUluU2VhcmNoID8gW10gOiBkZWZpbml0aW9uLnNlYXJjaGFibGVBdHRyaWJ1dGVzID8/IGRlZmluaXRpb24uYXR0cmlidXRlcztcbiAgICAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxJbmNsdWRlcyA9IGRlZmluaXRpb24ud2l0aENvbnRleHQodGhpcy5kaWFsZWN0Rm9ybWF0dGVyU2VydmljZSkudHJhbnNmb3JtSW5jbHVkZXNDb25maWcoe30pO1xuICAgICAgICAgICAgYXR0cmlidXRlcy5wdXNoKFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEF0dHJpYnV0ZXMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwsXG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24ucGF0aCBhcyBQYXRoTW9kZWwsXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxJbmNsdWRlcyxcbiAgICAgICAgICAgICAgICAgICAgYXR0clxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzQ3VzdG9tQXR0cmlidXRlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9jb25maWcuY3VzdG9tQXR0cmlidXRlcy5maW5kKCh4KSA9PiB4LmNvbmZpZy5uYW1lID09PSBuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VzdG9tQXR0cmlidXRlKG5hbWU6IHN0cmluZyk6IEN1c3RvbUF0dHJpYnV0ZXNDb25maWcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmN1c3RvbUF0dHJpYnV0ZXMuZmluZCgoeCkgPT4geC5jb25maWcubmFtZSA9PT0gbmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEN1c3RvbUF0dHJpYnV0ZUdyb3VwQnkoKTogKHN0cmluZyB8IEZuIHwgQ29sKVtdIHtcbiAgICAgICAgY29uc3QgZ3JvdXA6IEdyb3VwT3B0aW9uID0gW107XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkR3JvdXBCeSA9IHRoaXMuX2NvbmZpZy5jdXN0b21BdHRyaWJ1dGVzLnNvbWUoKGF0dHJpYnV0ZSkgPT4gYXR0cmlidXRlLnNob3VsZEdyb3VwQnkoKSk7XG4gICAgICAgIGlmIChzaG91bGRHcm91cEJ5KSB7XG4gICAgICAgICAgICBncm91cC5wdXNoKFwiaWRcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShkYXRhOiBEYXRhW10sIHR5cGU6IEV4cG9ydFR5cGVzLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz47XG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShoZWFkZXJzOiBzdHJpbmdbXSwgZGF0YTogYW55W10sIHR5cGU6IEV4cG9ydFR5cGVzLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz47XG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShcbiAgICAgICAgZGF0YU9ySGVhZGVyczogRGF0YVtdIHwgc3RyaW5nW10sXG4gICAgICAgIHR5cGVPckRhdGE6IEV4cG9ydFR5cGVzIHwgYW55W10sXG4gICAgICAgIGxhbmdPclR5cGU6IHN0cmluZyB8IEV4cG9ydFR5cGVzLFxuICAgICAgICBvcHRpb25zT3JMYW5nPzogYW55IHwgc3RyaW5nLFxuICAgICAgICBvcHRpb25zPzogYW55XG4gICAgKTogUHJvbWlzZTxCdWZmZXIgfCBzdHJpbmc+IHtcbiAgICAgICAgbGV0IHR5cGU6IEV4cG9ydFR5cGVzO1xuICAgICAgICBsZXQgaGVhZGVyczogc3RyaW5nW107XG4gICAgICAgIGxldCBkYXRhOiBhbnlbXTtcbiAgICAgICAgbGV0IGxhbmc6IHN0cmluZztcblxuICAgICAgICBpZiAodHlwZW9mIHR5cGVPckRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlT3JEYXRhO1xuICAgICAgICAgICAgbGFuZyA9IGxhbmdPclR5cGU7XG4gICAgICAgICAgICBoZWFkZXJzID0gYXdhaXQgdGhpcy5nZXRFeHBvcnRzSGVhZGVyKGxhbmcsIHRoaXMuX2NvbmZpZy5leHBvcnRDb2x1bW5zID8/IFtdKTtcbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLmdldEV4cG9ydERhdGEoZGF0YU9ySGVhZGVycyBhcyBEYXRhW10pO1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnNPckxhbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYW5nID0gb3B0aW9uc09yTGFuZyBhcyBzdHJpbmc7XG4gICAgICAgICAgICBoZWFkZXJzID0gYXdhaXQgdGhpcy5nZXRFeHBvcnRzSGVhZGVyKGxhbmcsIGRhdGFPckhlYWRlcnMgYXMgc3RyaW5nW10pO1xuICAgICAgICAgICAgZGF0YSA9IHR5cGVPckRhdGE7XG4gICAgICAgICAgICB0eXBlID0gbGFuZ09yVHlwZSBhcyBFeHBvcnRUeXBlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRUeXBlcy5YTFNYOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvd25sb2FkWGxzeChoZWFkZXJzLCBkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0VHlwZXMuSFRNTDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb3dubG9hZEh0bWwoaGVhZGVycywgZGF0YSwgbGFuZywgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydFR5cGVzLkNTVjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb3dubG9hZENzdihoZWFkZXJzLCBkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0VHlwZXMuUERGOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvd25sb2FkUGRmKGhlYWRlcnMsIGRhdGEsIG9wdGlvbnMpO1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRUeXBlcy5aSVA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG93bmxvYWRaaXAoaGVhZGVycywgZGF0YSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWRYbHN4KGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIHJldHVybiBYbHN4VXRpbHMuYXJyYXlUb1hsc3hCdWZmZXIoXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGhlYWRlcnNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWRIdG1sKGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSwgbGFuZzogc3RyaW5nLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0QWRhcHRlci5leHBvcnRBc0h0bWwobGFuZywge1xuICAgICAgICAgICAgdGl0bGU6IHRoaXMuX2NvbmZpZy5tb2RlbC5nZXRUYWJsZU5hbWUoKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICBjb2x1bW5zOiBoZWFkZXJzLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWRDc3YoaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IENzdlV0aWxzLmFycmF5VG9Dc3ZCdWZmZXIoZGF0YSwgaGVhZGVycyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkUGRmKGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSwgbGFuZzogc3RyaW5nLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0QWRhcHRlci5leHBvcnRBc1BkZihsYW5nLCB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGNvbHVtbnM6IGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZFppcChoZWFkZXJzOiBzdHJpbmdbXSwgZGF0YTogYW55W10sIGxhbmc6IHN0cmluZywgb3B0aW9ucz86IGFueSk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cG9ydEFkYXB0ZXIuZXhwb3J0QXNaaXAobGFuZywge1xuICAgICAgICAgICAgdGl0bGU6IHRoaXMuX2NvbmZpZy5tb2RlbC5nZXRUYWJsZU5hbWUoKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICBjb2x1bW5zOiBoZWFkZXJzLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXQoKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuZGF0YUZpbHRlclNjYW5uZXIuZ2V0RGF0YUZpbHRlcih0aGlzLmRhdGFEZWYpO1xuICAgICAgICB0aGlzLl9kZWZpbml0aW9ucyA9IHRoaXMuZGF0YUZpbHRlclNjYW5uZXIuZ2V0QXR0cmlidXRlcyh0aGlzLmRhdGFEZWYpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRTZWFyY2hDb25kaXRpb24oc2VhcmNoOiBzdHJpbmcsIG9wdGlvbnM6IEZpbmRPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGlmICghc2VhcmNoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWFyY2hJbmNsdWRlID0gdGhpcy5nZW5lcmF0ZVNlYXJjaEluY2x1ZGUoe30pO1xuICAgICAgICBvcHRpb25zLmluY2x1ZGUgPSBTZXF1ZWxpemVVdGlscy5tZXJnZUluY2x1ZGVzKFxuICAgICAgICAgICAgb3B0aW9ucy5pbmNsdWRlIGFzIEluY2x1ZGVPcHRpb25zIHwgSW5jbHVkZU9wdGlvbnNbXSxcbiAgICAgICAgICAgIHNlYXJjaEluY2x1ZGUgYXMgSW5jbHVkZU9wdGlvbnNbXVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghb3B0aW9ucy53aGVyZSkge1xuICAgICAgICAgICAgb3B0aW9ucy53aGVyZSA9IHsgW09wLmFuZF06IFtdIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLndoZXJlID0geyBbT3AuYW5kXTogW29wdGlvbnMud2hlcmVdIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aGVyZSA9IG9wdGlvbnMud2hlcmU7XG4gICAgICAgIGNvbnN0IGdlbmVyYXRlRmllbGRzT2JqZWN0ID0gc2VhcmNoVmFsdWUgPT5cbiAgICAgICAgICAgIHRoaXMuZ2V0U2VhcmNoQXR0cmlidXRlcygpXG4gICAgICAgICAgICAgICAgLm1hcChhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuaXNKc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGEubGl0ZXJhbEtleSA/PyBgXFxgJHt0aGlzLm1vZGVsLm5hbWV9XFxgLlxcYCR7YS5rZXl9XFxgYDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBsaXRlcmFsIGZ1bmN0aW9uIGlzIG5vdCB3b3JraW5nIG9mIHNvbWUgcmVhc29uLi4uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5tb2RlbC5zZXF1ZWxpemUuZXNjYXBlKGAlJHtzZWFyY2hWYWx1ZS50b1VwcGVyQ2FzZSgpfSVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVXRpbHMuTGl0ZXJhbChgVVBQRVIoSlNPTl9FWFRSQUNUKCR7ZmllbGR9LCAnJCcpKSBMSUtFICR7dmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFthLmtleV06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbT3AubGlrZV06IGAlJHtzZWFyY2hWYWx1ZX0lYFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pLmZpbHRlcih4ID0+ICEheCk7XG5cbiAgICAgICAgY29uc3QgdG9rZW5zID0gc2VhcmNoLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgd2hlcmVbT3AuYW5kXS5wdXNoKFxuICAgICAgICAgICAgdG9rZW5zLm1hcCh0ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBbT3Aub3JdOiBnZW5lcmF0ZUZpZWxkc09iamVjdCh0KVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhwb3J0c0hlYWRlcihsYW5nOiBzdHJpbmcsIGhlYWRlcnM6IHN0cmluZ1tdLCB0cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoaGVhZGVycy5tYXAoeCA9PiB0cmFuc2xhdGVTZXJ2aWNlLmdldFRyYW5zbGF0aW9uKGxhbmcsIGBleHBvcnRzLiR7eH1gKSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhwb3J0RGF0YShkYXRhOiBEYXRhW10pOiBvYmplY3RbXSB7XG4gICAgICAgIHJldHVybiBkYXRhLm1hcCh4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5fY29uZmlnLmV4cG9ydENvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbdmFsdWUsIHByb3BdID0gdGhpcy5nZXRFeHBvcnRWYWx1ZSh4LCBrZXkpO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtgJHtpKyt9OiR7cHJvcH1gXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnRWYWx1ZShkYXRhOiBEYXRhLCBwYXRoOiBzdHJpbmcpOiBbdW5rbm93biwgc3RyaW5nXSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIFtkYXRhW2tleV0sIGtleV07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQga2V5OiBzdHJpbmc7XG4gICAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAga2V5ID0ga2V5cy5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtkYXRhLCBrZXldO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbWVyZ2VBY2Nlc3NDb250cm9sQ29uZGl0aW9uKHdoZXJlOiBXaGVyZU9wdGlvbnMsIHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICBjb25zdCByZXNvdXJjZXMgPSBhd2FpdCB0aGlzLmFjY2Vzc0NvbnRyb2xBZGFwdGVyLmdldFJlc291cmNlcyh0aGlzLl9jb25maWcubW9kZWwgYXMgYW55LCB1c2VyKTtcbiAgICAgICAgaWYgKHJlc291cmNlcy5pZHMpIHtcbiAgICAgICAgICAgIHJldHVybiBTZXF1ZWxpemVVdGlscy5tZXJnZVdoZXJlKHsgaWQ6IHJlc291cmNlcy5pZHMgfSwgd2hlcmUpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlcy53aGVyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbT3AuYW5kXTogW1xuICAgICAgICAgICAgICAgICAgICB3aGVyZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLndoZXJlXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3aGVyZTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { Type } from "@nestjs/common";
|
|
2
|
-
import { AccessControlAdapter } from "./adapters";
|
|
3
|
-
import { ExportAdapter } from "./adapters";
|
|
4
|
-
import { TranslateAdapter } from "./adapters";
|
|
2
|
+
import { AccessControlAdapter, ExportAdapter, TranslateAdapter } from "./adapters";
|
|
5
3
|
import { DataFilterRepository } from "./data-filter.repository";
|
|
6
4
|
import { DataFilterScanner } from "./scanners/data-filter.scanner";
|
|
7
5
|
import { SequelizeModelScanner } from "./scanners/sequelize-model.scanner";
|
|
6
|
+
import { DialectFormatterService } from "./services/dialect-formatter.service";
|
|
8
7
|
export declare class DataFilterService {
|
|
9
8
|
private dataFilterScanner;
|
|
10
9
|
private sequelizeModelScanner;
|
|
11
10
|
private accessControlAdapter;
|
|
12
11
|
private translateAdapter;
|
|
13
12
|
private exportAdapter;
|
|
14
|
-
|
|
13
|
+
private dialectFormatterService;
|
|
14
|
+
constructor(dataFilterScanner: DataFilterScanner, sequelizeModelScanner: SequelizeModelScanner, accessControlAdapter: AccessControlAdapter, translateAdapter: TranslateAdapter, exportAdapter: ExportAdapter, dialectFormatterService: DialectFormatterService);
|
|
15
15
|
for<T>(data: Type<T>): DataFilterRepository<T>;
|
|
16
16
|
}
|
|
@@ -12,21 +12,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.DataFilterService = void 0;
|
|
13
13
|
const common_1 = require("@nestjs/common");
|
|
14
14
|
const adapters_1 = require("./adapters");
|
|
15
|
-
const adapters_2 = require("./adapters");
|
|
16
|
-
const adapters_3 = require("./adapters");
|
|
17
15
|
const data_filter_repository_1 = require("./data-filter.repository");
|
|
18
16
|
const data_filter_scanner_1 = require("./scanners/data-filter.scanner");
|
|
19
17
|
const sequelize_model_scanner_1 = require("./scanners/sequelize-model.scanner");
|
|
18
|
+
const dialect_formatter_service_1 = require("./services/dialect-formatter.service");
|
|
20
19
|
let DataFilterService = class DataFilterService {
|
|
21
|
-
constructor(dataFilterScanner, sequelizeModelScanner, accessControlAdapter, translateAdapter, exportAdapter) {
|
|
20
|
+
constructor(dataFilterScanner, sequelizeModelScanner, accessControlAdapter, translateAdapter, exportAdapter, dialectFormatterService) {
|
|
22
21
|
this.dataFilterScanner = dataFilterScanner;
|
|
23
22
|
this.sequelizeModelScanner = sequelizeModelScanner;
|
|
24
23
|
this.accessControlAdapter = accessControlAdapter;
|
|
25
24
|
this.translateAdapter = translateAdapter;
|
|
26
25
|
this.exportAdapter = exportAdapter;
|
|
26
|
+
this.dialectFormatterService = dialectFormatterService;
|
|
27
27
|
}
|
|
28
28
|
for(data) {
|
|
29
|
-
return new data_filter_repository_1.DataFilterRepository(data, this.dataFilterScanner, this.sequelizeModelScanner, this.accessControlAdapter, this.translateAdapter, this.exportAdapter);
|
|
29
|
+
return new data_filter_repository_1.DataFilterRepository(data, this.dataFilterScanner, this.sequelizeModelScanner, this.accessControlAdapter, this.translateAdapter, this.exportAdapter, this.dialectFormatterService);
|
|
30
30
|
}
|
|
31
31
|
};
|
|
32
32
|
exports.DataFilterService = DataFilterService;
|
|
@@ -35,8 +35,9 @@ exports.DataFilterService = DataFilterService = __decorate([
|
|
|
35
35
|
__metadata("design:paramtypes", [data_filter_scanner_1.DataFilterScanner,
|
|
36
36
|
sequelize_model_scanner_1.SequelizeModelScanner,
|
|
37
37
|
adapters_1.AccessControlAdapter,
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
adapters_1.TranslateAdapter,
|
|
39
|
+
adapters_1.ExportAdapter,
|
|
40
|
+
dialect_formatter_service_1.DialectFormatterService])
|
|
40
41
|
], DataFilterService);
|
|
41
42
|
|
|
42
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLWZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFrRDtBQUNsRCx5Q0FBbUY7QUFDbkYscUVBQWdFO0FBQ2hFLHdFQUFtRTtBQUNuRSxnRkFBMkU7QUFDM0Usb0ZBQStFO0FBR3hFLElBQU0saUJBQWlCLEdBQXZCLE1BQU0saUJBQWlCO0lBQzFCLFlBQ1ksaUJBQW9DLEVBQ3BDLHFCQUE0QyxFQUM1QyxvQkFBMEMsRUFDMUMsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLHVCQUFnRDtRQUxoRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7SUFDekQsQ0FBQztJQUVHLEdBQUcsQ0FBSSxJQUFhO1FBQ3ZCLE9BQU8sSUFBSSw2Q0FBb0IsQ0FDM0IsSUFBSSxFQUNKLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsSUFBSSxDQUFDLHFCQUFxQixFQUMxQixJQUFJLENBQUMsb0JBQW9CLEVBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLHVCQUF1QixDQUMvQixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUE7QUFyQlksOENBQWlCOzRCQUFqQixpQkFBaUI7SUFEN0IsSUFBQSxtQkFBVSxHQUFFO3FDQUdzQix1Q0FBaUI7UUFDYiwrQ0FBcUI7UUFDdEIsK0JBQW9CO1FBQ3hCLDJCQUFnQjtRQUNuQix3QkFBYTtRQUNILG1EQUF1QjtHQVBuRCxpQkFBaUIsQ0FxQjdCIiwiZmlsZSI6ImxpYi9kYXRhLWZpbHRlci5zZXJ2aWNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVHlwZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgQWNjZXNzQ29udHJvbEFkYXB0ZXIsIEV4cG9ydEFkYXB0ZXIsIFRyYW5zbGF0ZUFkYXB0ZXIgfSBmcm9tIFwiLi9hZGFwdGVyc1wiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclJlcG9zaXRvcnkgfSBmcm9tIFwiLi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyU2Nhbm5lciB9IGZyb20gXCIuL3NjYW5uZXJzL2RhdGEtZmlsdGVyLnNjYW5uZXJcIjtcbmltcG9ydCB7IFNlcXVlbGl6ZU1vZGVsU2Nhbm5lciB9IGZyb20gXCIuL3NjYW5uZXJzL3NlcXVlbGl6ZS1tb2RlbC5zY2FubmVyXCI7XG5pbXBvcnQgeyBEaWFsZWN0Rm9ybWF0dGVyU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL2RpYWxlY3QtZm9ybWF0dGVyLnNlcnZpY2VcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERhdGFGaWx0ZXJTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkYXRhRmlsdGVyU2Nhbm5lcjogRGF0YUZpbHRlclNjYW5uZXIsXG4gICAgICAgIHByaXZhdGUgc2VxdWVsaXplTW9kZWxTY2FubmVyOiBTZXF1ZWxpemVNb2RlbFNjYW5uZXIsXG4gICAgICAgIHByaXZhdGUgYWNjZXNzQ29udHJvbEFkYXB0ZXI6IEFjY2Vzc0NvbnRyb2xBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZUFkYXB0ZXI6IFRyYW5zbGF0ZUFkYXB0ZXIsXG4gICAgICAgIHByaXZhdGUgZXhwb3J0QWRhcHRlcjogRXhwb3J0QWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSBkaWFsZWN0Rm9ybWF0dGVyU2VydmljZTogRGlhbGVjdEZvcm1hdHRlclNlcnZpY2VcbiAgICApIHt9XG5cbiAgICBwdWJsaWMgZm9yPFQ+KGRhdGE6IFR5cGU8VD4pOiBEYXRhRmlsdGVyUmVwb3NpdG9yeTxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0YUZpbHRlclJlcG9zaXRvcnk8VD4oXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgdGhpcy5kYXRhRmlsdGVyU2Nhbm5lcixcbiAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLFxuICAgICAgICAgICAgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlQWRhcHRlcixcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0QWRhcHRlcixcbiAgICAgICAgICAgIHRoaXMuZGlhbGVjdEZvcm1hdHRlclNlcnZpY2VcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import { Type } from "@nestjs/common";
|
|
2
2
|
import { TranslateAdapter } from "../adapters/translate.adapter";
|
|
3
|
+
import { DialectFormatterService } from "../services/dialect-formatter.service";
|
|
3
4
|
import { DefaultFilterDefinition } from "./filters/default.filter";
|
|
4
5
|
import { FilterConfig, FilterModel } from "./models";
|
|
5
6
|
import { ExportTypes } from "../models/export-types.model";
|
|
6
7
|
import { DefaultOrderRule } from "./order-rules/default.order-rule";
|
|
7
8
|
export declare abstract class BaseFilter<T> implements FilterModel<T> {
|
|
8
9
|
private _translateService;
|
|
10
|
+
private _dialectFormatterService;
|
|
9
11
|
[name: string]: FilterConfig | unknown;
|
|
10
12
|
abstract dataDefinition: Type<T>;
|
|
11
13
|
exportDataDefinition?: Type<T>;
|
|
12
14
|
defaultFilter?: DefaultFilterDefinition;
|
|
13
15
|
defaultOrderRule?: DefaultOrderRule;
|
|
14
16
|
set translateService(translateService: TranslateAdapter);
|
|
17
|
+
set dialectFormatterService(dialectFormatterService: DialectFormatterService);
|
|
15
18
|
get translateService(): TranslateAdapter;
|
|
16
19
|
getExportedFieldsKeys(type?: ExportTypes): Promise<string[]>;
|
|
17
20
|
getExportedFields(value: T, lang?: string, type?: ExportTypes): Promise<any[]>;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BaseFilter = void 0;
|
|
4
4
|
const filters_1 = require("./filters");
|
|
5
|
+
const order_rule_1 = require("./order-rules/order-rule");
|
|
5
6
|
class BaseFilter {
|
|
6
7
|
set translateService(translateService) {
|
|
7
8
|
this._translateService = translateService;
|
|
@@ -17,6 +18,23 @@ class BaseFilter {
|
|
|
17
18
|
}
|
|
18
19
|
}
|
|
19
20
|
}
|
|
21
|
+
set dialectFormatterService(dialectFormatterService) {
|
|
22
|
+
this._dialectFormatterService = dialectFormatterService;
|
|
23
|
+
for (const key in this) {
|
|
24
|
+
if (!this.hasOwnProperty(key) || key === "dataDefinition") {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (filters_1.Filter.validate(this[key])) {
|
|
28
|
+
this[key].dialectFormatterService = dialectFormatterService;
|
|
29
|
+
}
|
|
30
|
+
if (filters_1.GroupFilter.validate(this[key])) {
|
|
31
|
+
this[key].dialectFormatterService = dialectFormatterService;
|
|
32
|
+
}
|
|
33
|
+
if (order_rule_1.OrderRule.validate(this[key])) {
|
|
34
|
+
this[key].dialectFormatterService = dialectFormatterService;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
20
38
|
get translateService() {
|
|
21
39
|
return this._translateService;
|
|
22
40
|
}
|
|
@@ -29,4 +47,4 @@ class BaseFilter {
|
|
|
29
47
|
}
|
|
30
48
|
exports.BaseFilter = BaseFilter;
|
|
31
49
|
|
|
32
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvYmFzZS1maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsdUNBQXlGO0FBS3pGLHlEQUEwRTtBQUUxRSxNQUFzQixVQUFVO0lBVTVCLElBQVcsZ0JBQWdCLENBQUMsZ0JBQWtDO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUUxQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssZ0JBQWdCLEVBQUU7Z0JBQ3ZELFNBQVM7YUFDWjtZQUVELElBQUksZ0JBQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBcUIsQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFZLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7YUFDN0Q7WUFDRCxJQUFJLHFCQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTBCLENBQUMsRUFBRTtnQkFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBaUIsQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQzthQUNsRTtTQUNKO0lBQ0wsQ0FBQztJQUVELElBQVcsdUJBQXVCLENBQUMsdUJBQWdEO1FBQy9FLElBQUksQ0FBQyx3QkFBd0IsR0FBRyx1QkFBdUIsQ0FBQztRQUV4RCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssZ0JBQWdCLEVBQUU7Z0JBQ3ZELFNBQVM7YUFDWjtZQUVELElBQUksZ0JBQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBcUIsQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFZLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7YUFDM0U7WUFDRCxJQUFJLHFCQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTBCLENBQUMsRUFBRTtnQkFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBaUIsQ0FBQyx1QkFBdUIsR0FBRyx1QkFBdUIsQ0FBQzthQUNoRjtZQUNELElBQUksc0JBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBd0IsQ0FBQyxFQUFFO2dCQUNyRCxJQUFJLENBQUMsR0FBRyxDQUFlLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7YUFDOUU7U0FDSjtJQUNMLENBQUM7SUFDRCxJQUFXLGdCQUFnQjtRQUN2QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNsQyxDQUFDO0lBRU0sS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQWtCO1FBQ2pELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVNLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFRLEVBQUUsSUFBYSxFQUFFLElBQWtCO1FBQ3RFLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztDQUNKO0FBekRELGdDQXlEQyIsImZpbGUiOiJsaWIvZmlsdGVyL2Jhc2UtZmlsdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlQWRhcHRlciB9IGZyb20gXCIuLi9hZGFwdGVycy90cmFuc2xhdGUuYWRhcHRlclwiO1xuaW1wb3J0IHsgRGlhbGVjdEZvcm1hdHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvZGlhbGVjdC1mb3JtYXR0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgRmlsdGVyLCBGaWx0ZXJEZWZpbml0aW9uLCBHcm91cEZpbHRlciwgR3JvdXBGaWx0ZXJEZWZpbml0aW9uIH0gZnJvbSBcIi4vZmlsdGVyc1wiO1xuaW1wb3J0IHsgRGVmYXVsdEZpbHRlckRlZmluaXRpb24gfSBmcm9tIFwiLi9maWx0ZXJzL2RlZmF1bHQuZmlsdGVyXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWcsIEZpbHRlck1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBFeHBvcnRUeXBlcyB9IGZyb20gXCIuLi9tb2RlbHMvZXhwb3J0LXR5cGVzLm1vZGVsXCI7XG5pbXBvcnQgeyBEZWZhdWx0T3JkZXJSdWxlIH0gZnJvbSBcIi4vb3JkZXItcnVsZXMvZGVmYXVsdC5vcmRlci1ydWxlXCI7XG5pbXBvcnQgeyBPcmRlclJ1bGUsIE9yZGVyUnVsZURlZmluaXRpb24gfSBmcm9tIFwiLi9vcmRlci1ydWxlcy9vcmRlci1ydWxlXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRmlsdGVyPFQ+IGltcGxlbWVudHMgRmlsdGVyTW9kZWw8VD4ge1xuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZUFkYXB0ZXI7XG4gICAgcHJpdmF0ZSBfZGlhbGVjdEZvcm1hdHRlclNlcnZpY2U6IERpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlO1xuXG4gICAgW25hbWU6IHN0cmluZ106IEZpbHRlckNvbmZpZyB8IHVua25vd247XG4gICAgcHVibGljIGFic3RyYWN0IGRhdGFEZWZpbml0aW9uOiBUeXBlPFQ+O1xuICAgIHB1YmxpYyBleHBvcnREYXRhRGVmaW5pdGlvbj86IFR5cGU8VD47XG4gICAgcHVibGljIGRlZmF1bHRGaWx0ZXI/OiBEZWZhdWx0RmlsdGVyRGVmaW5pdGlvbjtcbiAgICBwdWJsaWMgZGVmYXVsdE9yZGVyUnVsZT86IERlZmF1bHRPcmRlclJ1bGU7XG5cbiAgICBwdWJsaWMgc2V0IHRyYW5zbGF0ZVNlcnZpY2UodHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlQWRhcHRlcikge1xuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gdHJhbnNsYXRlU2VydmljZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBrZXkgPT09IFwiZGF0YURlZmluaXRpb25cIikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoRmlsdGVyLnZhbGlkYXRlKHRoaXNba2V5XSBhcyBGaWx0ZXJEZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgICh0aGlzW2tleV0gYXMgRmlsdGVyKS50cmFuc2xhdGVTZXJ2aWNlID0gdHJhbnNsYXRlU2VydmljZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChHcm91cEZpbHRlci52YWxpZGF0ZSh0aGlzW2tleV0gYXMgR3JvdXBGaWx0ZXJEZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgICh0aGlzW2tleV0gYXMgR3JvdXBGaWx0ZXIpLnRyYW5zbGF0ZVNlcnZpY2UgPSB0cmFuc2xhdGVTZXJ2aWNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBkaWFsZWN0Rm9ybWF0dGVyU2VydmljZShkaWFsZWN0Rm9ybWF0dGVyU2VydmljZTogRGlhbGVjdEZvcm1hdHRlclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UgPSBkaWFsZWN0Rm9ybWF0dGVyU2VydmljZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBrZXkgPT09IFwiZGF0YURlZmluaXRpb25cIikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoRmlsdGVyLnZhbGlkYXRlKHRoaXNba2V5XSBhcyBGaWx0ZXJEZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgICh0aGlzW2tleV0gYXMgRmlsdGVyKS5kaWFsZWN0Rm9ybWF0dGVyU2VydmljZSA9IGRpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEdyb3VwRmlsdGVyLnZhbGlkYXRlKHRoaXNba2V5XSBhcyBHcm91cEZpbHRlckRlZmluaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgKHRoaXNba2V5XSBhcyBHcm91cEZpbHRlcikuZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UgPSBkaWFsZWN0Rm9ybWF0dGVyU2VydmljZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChPcmRlclJ1bGUudmFsaWRhdGUodGhpc1trZXldIGFzIE9yZGVyUnVsZURlZmluaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgKHRoaXNba2V5XSBhcyBPcmRlclJ1bGUpLmRpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlID0gZGlhbGVjdEZvcm1hdHRlclNlcnZpY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIGdldCB0cmFuc2xhdGVTZXJ2aWNlKCk6IFRyYW5zbGF0ZUFkYXB0ZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXhwb3J0ZWRGaWVsZHNLZXlzKHR5cGU/OiBFeHBvcnRUeXBlcyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFeHBvcnRlZEZpZWxkcyh2YWx1ZTogVCwgbGFuZz86IHN0cmluZywgdHlwZT86IEV4cG9ydFR5cGVzKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufVxuIl19
|
|
@@ -3,9 +3,10 @@ import { AccessControlAdapter } from "../adapters/access-control.adapter";
|
|
|
3
3
|
import { TranslateAdapter } from "../adapters/translate.adapter";
|
|
4
4
|
import { DataFilterService } from "../data-filter.service";
|
|
5
5
|
import { SequelizeModelScanner } from "../scanners/sequelize-model.scanner";
|
|
6
|
+
import { DialectFormatterService } from "../services/dialect-formatter.service";
|
|
6
7
|
import { BaseFilter } from "./base-filter";
|
|
7
8
|
import { FilterService } from "./filter.service";
|
|
8
9
|
export declare function FilterServiceFactory<T>(options?: {
|
|
9
10
|
disableAccessControl?: boolean;
|
|
10
|
-
}): (accessControlAdapter: AccessControlAdapter, translateAdapter: TranslateAdapter, filter: BaseFilter<T>, sequelizeModelScanner: SequelizeModelScanner, dataFilterService: DataFilterService) => FilterService<T>;
|
|
11
|
+
}): (accessControlAdapter: AccessControlAdapter, translateAdapter: TranslateAdapter, filter: BaseFilter<T>, sequelizeModelScanner: SequelizeModelScanner, dataFilterService: DataFilterService, dialectFormatterService: DialectFormatterService) => FilterService<T>;
|
|
11
12
|
export declare function FilterFactory<T>(filter: Type<T>): (...args: any[]) => T;
|
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.FilterFactory = exports.FilterServiceFactory = void 0;
|
|
4
4
|
const filter_service_1 = require("./filter.service");
|
|
5
5
|
function FilterServiceFactory(options) {
|
|
6
|
-
return (accessControlAdapter, translateAdapter, filter, sequelizeModelScanner, dataFilterService) => {
|
|
7
|
-
return new filter_service_1.FilterService(accessControlAdapter, translateAdapter, filter, sequelizeModelScanner, dataFilterService, options);
|
|
6
|
+
return (accessControlAdapter, translateAdapter, filter, sequelizeModelScanner, dataFilterService, dialectFormatterService) => {
|
|
7
|
+
return new filter_service_1.FilterService(accessControlAdapter, translateAdapter, filter, sequelizeModelScanner, dataFilterService, dialectFormatterService, options);
|
|
8
8
|
};
|
|
9
9
|
}
|
|
10
10
|
exports.FilterServiceFactory = FilterServiceFactory;
|
|
@@ -21,4 +21,4 @@ function FilterFactory(filter) {
|
|
|
21
21
|
}
|
|
22
22
|
exports.FilterFactory = FilterFactory;
|
|
23
23
|
|
|
24
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVyLmZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT0EscURBQWlEO0FBRWpELFNBQWdCLG9CQUFvQixDQUFJLE9BQTRDO0lBQ2hGLE9BQU8sQ0FDSCxvQkFBMEMsRUFDMUMsZ0JBQWtDLEVBQ2xDLE1BQXFCLEVBQ3JCLHFCQUE0QyxFQUM1QyxpQkFBb0MsRUFDcEMsdUJBQWdELEVBQ2xELEVBQUU7UUFDQSxPQUFPLElBQUksOEJBQWEsQ0FBQyxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekosQ0FBQyxDQUFBO0FBQ0wsQ0FBQztBQVhELG9EQVdDO0FBRUQsU0FBZ0IsYUFBYSxDQUFJLE1BQWU7SUFDNUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUU7UUFDZjs7V0FFRztRQUNILElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDckQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsTUFBTSxDQUFDLElBQUksY0FBYyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLGNBQWMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7U0FDeEo7UUFFRCxPQUFPLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQVhELHNDQVdDIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVyLmZhY3RvcnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sQWRhcHRlciB9IGZyb20gXCIuLi9hZGFwdGVycy9hY2Nlc3MtY29udHJvbC5hZGFwdGVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVBZGFwdGVyIH0gZnJvbSBcIi4uL2FkYXB0ZXJzL3RyYW5zbGF0ZS5hZGFwdGVyXCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyU2VydmljZSB9IGZyb20gXCIuLi9kYXRhLWZpbHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTZXF1ZWxpemVNb2RlbFNjYW5uZXIgfSBmcm9tIFwiLi4vc2Nhbm5lcnMvc2VxdWVsaXplLW1vZGVsLnNjYW5uZXJcIjtcbmltcG9ydCB7IERpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2RpYWxlY3QtZm9ybWF0dGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IEJhc2VGaWx0ZXIgfSBmcm9tIFwiLi9iYXNlLWZpbHRlclwiO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gXCIuL2ZpbHRlci5zZXJ2aWNlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBGaWx0ZXJTZXJ2aWNlRmFjdG9yeTxUPihvcHRpb25zPzogeyBkaXNhYmxlQWNjZXNzQ29udHJvbD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIGFjY2Vzc0NvbnRyb2xBZGFwdGVyOiBBY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgdHJhbnNsYXRlQWRhcHRlcjogVHJhbnNsYXRlQWRhcHRlcixcbiAgICAgICAgZmlsdGVyOiBCYXNlRmlsdGVyPFQ+LFxuICAgICAgICBzZXF1ZWxpemVNb2RlbFNjYW5uZXI6IFNlcXVlbGl6ZU1vZGVsU2Nhbm5lcixcbiAgICAgICAgZGF0YUZpbHRlclNlcnZpY2U6IERhdGFGaWx0ZXJTZXJ2aWNlLFxuICAgICAgICBkaWFsZWN0Rm9ybWF0dGVyU2VydmljZTogRGlhbGVjdEZvcm1hdHRlclNlcnZpY2UsXG4gICAgKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyU2VydmljZShhY2Nlc3NDb250cm9sQWRhcHRlciwgdHJhbnNsYXRlQWRhcHRlciwgZmlsdGVyLCBzZXF1ZWxpemVNb2RlbFNjYW5uZXIsIGRhdGFGaWx0ZXJTZXJ2aWNlLCBkaWFsZWN0Rm9ybWF0dGVyU2VydmljZSwgb3B0aW9ucyk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRmlsdGVyRmFjdG9yeTxUPihmaWx0ZXI6IFR5cGU8VD4pIHtcbiAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIGlmIGFsbCBkZXBlbmRlbmNpZXMgYXJlIGluamVjdGVkXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoZmlsdGVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5sZW5ndGggIT09IGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBlbm91Z2ggZGVwZW5kZW5jaWVzIHdlcmUgcHJvdmlkZWQgZm9yICR7ZmlsdGVyLm5hbWV9OiBleHBlY3RlZCAke2ZpbHRlci5wcm90b3R5cGUuY29uc3RydWN0b3IubGVuZ3RofSwgcmVjZWl2ZWQgJHthcmdzLmxlbmd0aH1gKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBmaWx0ZXIoLi4uYXJncyk7XG4gICAgfTtcbn1cbiJdfQ==
|
|
@@ -4,15 +4,16 @@ exports.createFilterProvider = void 0;
|
|
|
4
4
|
const adapters_1 = require("../adapters");
|
|
5
5
|
const data_filter_service_1 = require("../data-filter.service");
|
|
6
6
|
const sequelize_model_scanner_1 = require("../scanners/sequelize-model.scanner");
|
|
7
|
+
const dialect_formatter_service_1 = require("../services/dialect-formatter.service");
|
|
7
8
|
const filter_factory_1 = require("./filter.factory");
|
|
8
9
|
const filter_utils_1 = require("./filter.utils");
|
|
9
10
|
function createFilterProvider(filter, disableAccessControl) {
|
|
10
11
|
return {
|
|
11
12
|
provide: filter_utils_1.FilterUtils.getProviderToken(filter),
|
|
12
13
|
useFactory: (0, filter_factory_1.FilterServiceFactory)({ disableAccessControl }),
|
|
13
|
-
inject: [adapters_1.AccessControlAdapter, adapters_1.TranslateAdapter, filter, sequelize_model_scanner_1.SequelizeModelScanner, data_filter_service_1.DataFilterService]
|
|
14
|
+
inject: [adapters_1.AccessControlAdapter, adapters_1.TranslateAdapter, filter, sequelize_model_scanner_1.SequelizeModelScanner, data_filter_service_1.DataFilterService, dialect_formatter_service_1.DialectFormatterService]
|
|
14
15
|
};
|
|
15
16
|
}
|
|
16
17
|
exports.createFilterProvider = createFilterProvider;
|
|
17
18
|
|
|
18
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVyLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDBDQUFxRTtBQUNyRSxnRUFBMkQ7QUFDM0QsaUZBQTRFO0FBQzVFLHFGQUFnRjtBQUVoRixxREFBd0Q7QUFDeEQsaURBQTZDO0FBRTdDLFNBQWdCLG9CQUFvQixDQUFDLE1BQTZCLEVBQUUsb0JBQThCO0lBQzlGLE9BQU87UUFDSCxPQUFPLEVBQUUsMEJBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFDN0MsVUFBVSxFQUFFLElBQUEscUNBQW9CLEVBQUMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDO1FBQzFELE1BQU0sRUFBRSxDQUFDLCtCQUFvQixFQUFFLDJCQUFnQixFQUFFLE1BQU0sRUFBRSwrQ0FBcUIsRUFBRSx1Q0FBaUIsRUFBRSxtREFBdUIsQ0FBQztLQUM5SCxDQUFDO0FBQ04sQ0FBQztBQU5ELG9EQU1DIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVyLnByb3ZpZGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlkZXIsIFR5cGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xBZGFwdGVyLCBUcmFuc2xhdGVBZGFwdGVyIH0gZnJvbSBcIi4uL2FkYXB0ZXJzXCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyU2VydmljZSB9IGZyb20gXCIuLi9kYXRhLWZpbHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTZXF1ZWxpemVNb2RlbFNjYW5uZXIgfSBmcm9tIFwiLi4vc2Nhbm5lcnMvc2VxdWVsaXplLW1vZGVsLnNjYW5uZXJcIjtcbmltcG9ydCB7IERpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2RpYWxlY3QtZm9ybWF0dGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IEJhc2VGaWx0ZXIgfSBmcm9tIFwiLi9iYXNlLWZpbHRlclwiO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZUZhY3RvcnkgfSBmcm9tIFwiLi9maWx0ZXIuZmFjdG9yeVwiO1xuaW1wb3J0IHsgRmlsdGVyVXRpbHMgfSBmcm9tIFwiLi9maWx0ZXIudXRpbHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZpbHRlclByb3ZpZGVyKGZpbHRlcjogVHlwZTxCYXNlRmlsdGVyPGFueT4+LCBkaXNhYmxlQWNjZXNzQ29udHJvbD86IGJvb2xlYW4pOiBQcm92aWRlciB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJvdmlkZTogRmlsdGVyVXRpbHMuZ2V0UHJvdmlkZXJUb2tlbihmaWx0ZXIpLFxuICAgICAgICB1c2VGYWN0b3J5OiBGaWx0ZXJTZXJ2aWNlRmFjdG9yeSh7IGRpc2FibGVBY2Nlc3NDb250cm9sIH0pLFxuICAgICAgICBpbmplY3Q6IFtBY2Nlc3NDb250cm9sQWRhcHRlciwgVHJhbnNsYXRlQWRhcHRlciwgZmlsdGVyLCBTZXF1ZWxpemVNb2RlbFNjYW5uZXIsIERhdGFGaWx0ZXJTZXJ2aWNlLCBEaWFsZWN0Rm9ybWF0dGVyU2VydmljZV1cbiAgICB9O1xufVxuIl19
|
|
@@ -8,6 +8,7 @@ import { DataFilterService } from "../data-filter.service";
|
|
|
8
8
|
import { DataFilterUserModel } from "../models/user.model";
|
|
9
9
|
import { SequelizeModelScanner } from "../scanners/sequelize-model.scanner";
|
|
10
10
|
import { M } from "../sequelize.utils";
|
|
11
|
+
import { DialectFormatterService } from "../services/dialect-formatter.service";
|
|
11
12
|
import { BaseFilter } from "./base-filter";
|
|
12
13
|
import { SelectFilterValue } from "./filters";
|
|
13
14
|
import { QueryModel } from "./models";
|
|
@@ -20,11 +21,12 @@ export declare class FilterService<Data> {
|
|
|
20
21
|
private model;
|
|
21
22
|
private sequelizeModelScanner;
|
|
22
23
|
private dataFilter;
|
|
24
|
+
private dialectFormatterService;
|
|
23
25
|
private options?;
|
|
24
26
|
private definitions;
|
|
25
27
|
private repository;
|
|
26
28
|
private exportRepository;
|
|
27
|
-
constructor(accessControlAdapter: AccessControlAdapter, translateAdapter: TranslateAdapter, model: BaseFilter<Data>, sequelizeModelScanner: SequelizeModelScanner, dataFilter: DataFilterService, options?: {
|
|
29
|
+
constructor(accessControlAdapter: AccessControlAdapter, translateAdapter: TranslateAdapter, model: BaseFilter<Data>, sequelizeModelScanner: SequelizeModelScanner, dataFilter: DataFilterService, dialectFormatterService: DialectFormatterService, options?: {
|
|
28
30
|
disableAccessControl?: boolean;
|
|
29
31
|
});
|
|
30
32
|
forData<T>(dataDef: Type<T>): FilterService<T>;
|