@recursyve/nestjs-data-filter 8.1.0 → 8.1.1

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.
@@ -13,7 +13,7 @@ class XlsxUtils {
13
13
  const aoa = rows.map((row) => {
14
14
  // Replace undefined values.
15
15
  nestjs_common_1.ObjectUtils.forEachProperty(row, (value) => {
16
- return value ? value : "N/A";
16
+ return value !== null && value !== undefined ? value : "N/A";
17
17
  });
18
18
  return nestjs_common_1.ObjectUtils.objectToArrayOfProperties(row);
19
19
  });
@@ -33,4 +33,4 @@ class XlsxUtils {
33
33
  }
34
34
  exports.XlsxUtils = XlsxUtils;
35
35
 
36
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi91dGlscy94bHN4LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDREQUF1RDtBQUN2RCw2QkFBNkI7QUFFN0IsTUFBYSxTQUFTO0lBQ1gsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQWMsRUFBRSxJQUFZLEVBQUUsTUFBaUI7UUFDM0UsNkNBQTZDO1FBQzdDLElBQUksQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsTUFBTSxJQUFHLEVBQUUsRUFBRTtZQUNuQixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDN0I7UUFFRCw2QkFBNkI7UUFDN0IsTUFBTSxHQUFHLEdBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQzFDLDRCQUE0QjtZQUM1QiwyQkFBVyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDNUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTywyQkFBVyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLEVBQUU7WUFDUixHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTNDLElBQUksV0FBVyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQ2hDO1lBQ0ksTUFBTSxFQUFFLEtBQUs7WUFDYixVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDckIsRUFDRDtZQUNJLElBQUksRUFBRSxRQUFRO1NBQ2pCLENBQ0osQ0FBQztRQUVGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNKO0FBcENELDhCQW9DQyIsImZpbGUiOiJsaWIvdXRpbHMveGxzeC51dGlscy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSBcIkByZWN1cnN5dmUvbmVzdGpzLWNvbW1vblwiO1xuaW1wb3J0ICogYXMgeGxzeCBmcm9tIFwieGxzeFwiO1xuXG5leHBvcnQgY2xhc3MgWGxzeFV0aWxzIHtcbiAgICBwdWJsaWMgc3RhdGljIGFycmF5VG9YbHN4QnVmZmVyKHJvd3M6IE9iamVjdFtdLCBuYW1lOiBzdHJpbmcsIGhlYWRlcj86IHN0cmluZ1tdKTogQnVmZmVyIHtcbiAgICAgICAgLy8gU2hlZXQgbmFtZSBjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gMzEgY2hhcnMuXG4gICAgICAgIGlmIChuYW1lPy5sZW5ndGggPiAzMSkge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDAsIDMxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnZlcnQgdG8gYXJyYXkgb2YgYXJyYXkuXG4gICAgICAgIGNvbnN0IGFvYTogYW55W11bXSA9IHJvd3MubWFwKChyb3c6IE9iamVjdCkgPT4ge1xuICAgICAgICAgICAgLy8gUmVwbGFjZSB1bmRlZmluZWQgdmFsdWVzLlxuICAgICAgICAgICAgT2JqZWN0VXRpbHMuZm9yRWFjaFByb3BlcnR5KHJvdywgKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZSA6IFwiTi9BXCI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdFV0aWxzLm9iamVjdFRvQXJyYXlPZlByb3BlcnRpZXMocm93KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGhlYWRlcikge1xuICAgICAgICAgICAgYW9hLnVuc2hpZnQoaGVhZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzaGVldCA9IHt9O1xuICAgICAgICBzaGVldFtuYW1lXSA9IHhsc3gudXRpbHMuYW9hX3RvX3NoZWV0KGFvYSk7XG5cbiAgICAgICAgbGV0IHhsc3hDb250ZW50OiBzdHJpbmcgPSB4bHN4LndyaXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFNoZWV0czogc2hlZXQsXG4gICAgICAgICAgICAgICAgU2hlZXROYW1lczogW25hbWVdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiYmluYXJ5XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oeGxzeENvbnRlbnQsIFwiYmluYXJ5XCIpO1xuICAgIH1cbn1cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi91dGlscy94bHN4LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDREQUF1RDtBQUN2RCw2QkFBNkI7QUFFN0IsTUFBYSxTQUFTO0lBQ1gsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQWMsRUFBRSxJQUFZLEVBQUUsTUFBaUI7UUFDM0UsNkNBQTZDO1FBQzdDLElBQUksQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsTUFBTSxJQUFHLEVBQUUsRUFBRTtZQUNuQixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDN0I7UUFFRCw2QkFBNkI7UUFDN0IsTUFBTSxHQUFHLEdBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQzFDLDRCQUE0QjtZQUM1QiwyQkFBVyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDNUMsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ2pFLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTywyQkFBVyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLEVBQUU7WUFDUixHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTNDLElBQUksV0FBVyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQ2hDO1lBQ0ksTUFBTSxFQUFFLEtBQUs7WUFDYixVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDckIsRUFDRDtZQUNJLElBQUksRUFBRSxRQUFRO1NBQ2pCLENBQ0osQ0FBQztRQUVGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNKO0FBcENELDhCQW9DQyIsImZpbGUiOiJsaWIvdXRpbHMveGxzeC51dGlscy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSBcIkByZWN1cnN5dmUvbmVzdGpzLWNvbW1vblwiO1xuaW1wb3J0ICogYXMgeGxzeCBmcm9tIFwieGxzeFwiO1xuXG5leHBvcnQgY2xhc3MgWGxzeFV0aWxzIHtcbiAgICBwdWJsaWMgc3RhdGljIGFycmF5VG9YbHN4QnVmZmVyKHJvd3M6IE9iamVjdFtdLCBuYW1lOiBzdHJpbmcsIGhlYWRlcj86IHN0cmluZ1tdKTogQnVmZmVyIHtcbiAgICAgICAgLy8gU2hlZXQgbmFtZSBjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gMzEgY2hhcnMuXG4gICAgICAgIGlmIChuYW1lPy5sZW5ndGggPiAzMSkge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDAsIDMxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnZlcnQgdG8gYXJyYXkgb2YgYXJyYXkuXG4gICAgICAgIGNvbnN0IGFvYTogYW55W11bXSA9IHJvd3MubWFwKChyb3c6IE9iamVjdCkgPT4ge1xuICAgICAgICAgICAgLy8gUmVwbGFjZSB1bmRlZmluZWQgdmFsdWVzLlxuICAgICAgICAgICAgT2JqZWN0VXRpbHMuZm9yRWFjaFByb3BlcnR5KHJvdywgKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogXCJOL0FcIjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMub2JqZWN0VG9BcnJheU9mUHJvcGVydGllcyhyb3cpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaGVhZGVyKSB7XG4gICAgICAgICAgICBhb2EudW5zaGlmdChoZWFkZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNoZWV0ID0ge307XG4gICAgICAgIHNoZWV0W25hbWVdID0geGxzeC51dGlscy5hb2FfdG9fc2hlZXQoYW9hKTtcblxuICAgICAgICBsZXQgeGxzeENvbnRlbnQ6IHN0cmluZyA9IHhsc3gud3JpdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgU2hlZXRzOiBzaGVldCxcbiAgICAgICAgICAgICAgICBTaGVldE5hbWVzOiBbbmFtZV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJiaW5hcnlcIlxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbSh4bHN4Q29udGVudCwgXCJiaW5hcnlcIik7XG4gICAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@recursyve/nestjs-data-filter",
3
- "version": "8.1.0",
3
+ "version": "8.1.1",
4
4
  "description": "NestJs DataFilter library",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -1,16 +0,0 @@
1
- import { WhereOptions } from "sequelize";
2
- import { FilterOperatorTypes, QueryRuleModel } from "../..";
3
- import { FilterType } from "../type";
4
- import { BaseFilterDefinition, Filter } from "./filter";
5
- export interface JsonArrayFilterDefinition {
6
- jsonPath?: string;
7
- }
8
- export declare class JsonArrayFilter extends Filter {
9
- type: FilterType;
10
- operators: FilterOperatorTypes[];
11
- jsonPath?: string;
12
- constructor(definition: JsonArrayFilterDefinition & BaseFilterDefinition);
13
- getWhereOptions(rule: QueryRuleModel, name?: string): Promise<WhereOptions>;
14
- private generateEqualsLikeOptions;
15
- private generateContainsLikeOptions;
16
- }
@@ -1,58 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.JsonArrayFilter = void 0;
4
- const sequelize_1 = require("sequelize");
5
- const __1 = require("../..");
6
- const sequelize_utils_1 = require("../../sequelize.utils");
7
- const type_1 = require("../type");
8
- const filter_1 = require("./filter");
9
- class JsonArrayFilter extends filter_1.Filter {
10
- constructor(definition) {
11
- super(definition);
12
- this.type = type_1.FilterType.JsonArray;
13
- this.operators = [...__1.JsonArrayOperators];
14
- }
15
- async getWhereOptions(rule, name) {
16
- if (!name) {
17
- name = this.path ? sequelize_utils_1.SequelizeUtils.getAttributeFullName(this.attribute, this.path) : this.attribute;
18
- }
19
- if (rule.operation === __1.FilterOperatorTypes.Equal || rule.operation === __1.FilterOperatorTypes.NotEqual) {
20
- return this.generateEqualsLikeOptions(rule, name);
21
- }
22
- return this.generateContainsLikeOptions(rule, name);
23
- }
24
- async generateEqualsLikeOptions(rule, name) {
25
- const newRule = {
26
- ...rule,
27
- value: (0, sequelize_1.fn)("JSON_ARRAY", rule.value)
28
- };
29
- if (!this.jsonPath) {
30
- return {
31
- [name]: sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule)
32
- };
33
- }
34
- const colName = this.path ? (0, sequelize_1.col)(name) : (0, sequelize_1.literal)(name);
35
- if (this.jsonPath) {
36
- return (0, sequelize_1.where)((0, sequelize_1.fn)("JSON_EXTRACT", colName, this.jsonPath), sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule));
37
- }
38
- return (0, sequelize_1.where)((0, sequelize_1.fn)("JSON_EXTRACT", colName), sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule));
39
- }
40
- async generateContainsLikeOptions(rule, name) {
41
- const value = typeof rule.value === "string" ? `"${rule.value}"` : rule.value;
42
- /**
43
- * We override the rule to use an equal or not equal with a JSON_CONTAINS function
44
- */
45
- const newRule = {
46
- operation: rule.operation === __1.FilterOperatorTypes.Contains ? __1.FilterOperatorTypes.Equal : __1.FilterOperatorTypes.NotEqual,
47
- value: true
48
- };
49
- const colName = this.path ? (0, sequelize_1.col)(name) : (0, sequelize_1.literal)(name);
50
- if (this.jsonPath) {
51
- return (0, sequelize_1.where)((0, sequelize_1.fn)("JSON_CONTAINS", colName, value, this.jsonPath), sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule));
52
- }
53
- return (0, sequelize_1.where)((0, sequelize_1.fn)("JSON_CONTAINS", colName, value), sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule));
54
- }
55
- }
56
- exports.JsonArrayFilter = JsonArrayFilter;
57
-
58
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9qc29uLWFycmF5LmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBNkU7QUFDN0UsNkJBQTJGO0FBQzNGLDJEQUF1RDtBQUN2RCxrQ0FBcUM7QUFDckMscUNBQXdEO0FBTXhELE1BQWEsZUFBZ0IsU0FBUSxlQUFNO0lBS3ZDLFlBQVksVUFBNEQ7UUFDcEUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBTGYsU0FBSSxHQUFHLGlCQUFVLENBQUMsU0FBUyxDQUFDO1FBQzVCLGNBQVMsR0FBRyxDQUFDLEdBQUcsc0JBQWtCLENBQUMsQ0FBQztJQUszQyxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFvQixFQUFFLElBQWE7UUFDNUQsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQ0FBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQ3RHO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLHVCQUFtQixDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLHVCQUFtQixDQUFDLFFBQVEsRUFBRTtZQUNqRyxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDckQ7UUFFRCxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVPLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxJQUFvQixFQUFFLElBQVk7UUFDdEUsTUFBTSxPQUFPLEdBQUc7WUFDWixHQUFHLElBQUk7WUFDUCxLQUFLLEVBQUUsSUFBQSxjQUFFLEVBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDdEMsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hCLE9BQU87Z0JBQ0gsQ0FBQyxJQUFJLENBQUMsRUFBRSxnQ0FBYyxDQUFDLGtCQUFrQixDQUFDLE9BQW9CLENBQUM7YUFDbEUsQ0FBQztTQUNMO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBQSxlQUFHLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUEsbUJBQU8sRUFBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixPQUFPLElBQUEsaUJBQUssRUFBQyxJQUFBLGNBQUUsRUFBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxnQ0FBYyxDQUFDLGtCQUFrQixDQUFDLE9BQW9CLENBQWMsQ0FBQyxDQUFBO1NBQ2pJO1FBQ0QsT0FBTyxJQUFBLGlCQUFLLEVBQUMsSUFBQSxjQUFFLEVBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxFQUFFLGdDQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBb0IsQ0FBYyxDQUFDLENBQUE7SUFDbkgsQ0FBQztJQUVPLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxJQUFvQixFQUFFLElBQVk7UUFDeEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFOUU7O1dBRUc7UUFDSCxNQUFNLE9BQU8sR0FBRztZQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLHVCQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsdUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyx1QkFBbUIsQ0FBQyxRQUFRO1lBQ3JILEtBQUssRUFBRSxJQUFJO1NBQ2QsQ0FBQTtRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUEsZUFBRyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLG1CQUFPLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTyxJQUFBLGlCQUFLLEVBQUMsSUFBQSxjQUFFLEVBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGdDQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBb0IsQ0FBYyxDQUFDLENBQUE7U0FDekk7UUFDRCxPQUFPLElBQUEsaUJBQUssRUFBQyxJQUFBLGNBQUUsRUFBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLGdDQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBb0IsQ0FBYyxDQUFDLENBQUE7SUFDM0gsQ0FBQztDQUNKO0FBdkRELDBDQXVEQyIsImZpbGUiOiJsaWIvZmlsdGVyL2ZpbHRlcnMvanNvbi1hcnJheS5maWx0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2wsIGZuLCBsaXRlcmFsLCBMb2dpY1R5cGUsIHdoZXJlLCBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBGaWx0ZXJPcGVyYXRvclR5cGVzLCBKc29uQXJyYXlPcGVyYXRvcnMsIFF1ZXJ5UnVsZU1vZGVsLCBSdWxlTW9kZWwgfSBmcm9tIFwiLi4vLi5cIjtcbmltcG9ydCB7IFNlcXVlbGl6ZVV0aWxzIH0gZnJvbSBcIi4uLy4uL3NlcXVlbGl6ZS51dGlsc1wiO1xuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gXCIuLi90eXBlXCI7XG5pbXBvcnQgeyBCYXNlRmlsdGVyRGVmaW5pdGlvbiwgRmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkFycmF5RmlsdGVyRGVmaW5pdGlvbiB7XG4gICAganNvblBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBKc29uQXJyYXlGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIge1xuICAgIHB1YmxpYyB0eXBlID0gRmlsdGVyVHlwZS5Kc29uQXJyYXk7XG4gICAgcHVibGljIG9wZXJhdG9ycyA9IFsuLi5Kc29uQXJyYXlPcGVyYXRvcnNdO1xuICAgIHB1YmxpYyBqc29uUGF0aD86IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKGRlZmluaXRpb246IEpzb25BcnJheUZpbHRlckRlZmluaXRpb24gJiBCYXNlRmlsdGVyRGVmaW5pdGlvbikge1xuICAgICAgICBzdXBlcihkZWZpbml0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0V2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBuYW1lPzogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICBuYW1lID0gdGhpcy5wYXRoID8gU2VxdWVsaXplVXRpbHMuZ2V0QXR0cmlidXRlRnVsbE5hbWUodGhpcy5hdHRyaWJ1dGUsIHRoaXMucGF0aCkgOiB0aGlzLmF0dHJpYnV0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChydWxlLm9wZXJhdGlvbiA9PT0gRmlsdGVyT3BlcmF0b3JUeXBlcy5FcXVhbCB8fCBydWxlLm9wZXJhdGlvbiA9PT0gRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RFcXVhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVFcXVhbHNMaWtlT3B0aW9ucyhydWxlLCBuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQ29udGFpbnNMaWtlT3B0aW9ucyhydWxlLCBuYW1lKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlRXF1YWxzTGlrZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIGNvbnN0IG5ld1J1bGUgPSB7XG4gICAgICAgICAgICAuLi5ydWxlLFxuICAgICAgICAgICAgdmFsdWU6IGZuKFwiSlNPTl9BUlJBWVwiLCBydWxlLnZhbHVlKVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXRoaXMuanNvblBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgW25hbWVdOiBTZXF1ZWxpemVVdGlscy5nZW5lcmF0ZVdoZXJlVmFsdWUobmV3UnVsZSBhcyBSdWxlTW9kZWwpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sTmFtZSA9IHRoaXMucGF0aCA/IGNvbChuYW1lKSA6IGxpdGVyYWwobmFtZSk7XG4gICAgICAgIGlmICh0aGlzLmpzb25QYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmUoZm4oXCJKU09OX0VYVFJBQ1RcIiwgY29sTmFtZSwgdGhpcy5qc29uUGF0aCksIFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShuZXdSdWxlIGFzIFJ1bGVNb2RlbCkgYXMgTG9naWNUeXBlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3aGVyZShmbihcIkpTT05fRVhUUkFDVFwiLCBjb2xOYW1lKSwgU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKG5ld1J1bGUgYXMgUnVsZU1vZGVsKSBhcyBMb2dpY1R5cGUpXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZUNvbnRhaW5zTGlrZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHJ1bGUudmFsdWUgPT09IFwic3RyaW5nXCIgPyBgXCIke3J1bGUudmFsdWV9XCJgIDogcnVsZS52YWx1ZTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogV2Ugb3ZlcnJpZGUgdGhlIHJ1bGUgdG8gdXNlIGFuIGVxdWFsIG9yIG5vdCBlcXVhbCB3aXRoIGEgSlNPTl9DT05UQUlOUyBmdW5jdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgbmV3UnVsZSA9IHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogcnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuQ29udGFpbnMgPyBGaWx0ZXJPcGVyYXRvclR5cGVzLkVxdWFsIDogRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RFcXVhbCxcbiAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sTmFtZSA9IHRoaXMucGF0aCA/IGNvbChuYW1lKSA6IGxpdGVyYWwobmFtZSk7XG4gICAgICAgIGlmICh0aGlzLmpzb25QYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmUoZm4oXCJKU09OX0NPTlRBSU5TXCIsIGNvbE5hbWUsIHZhbHVlLCB0aGlzLmpzb25QYXRoKSwgU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKG5ld1J1bGUgYXMgUnVsZU1vZGVsKSBhcyBMb2dpY1R5cGUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdoZXJlKGZuKFwiSlNPTl9DT05UQUlOU1wiLCBjb2xOYW1lLCB2YWx1ZSksIFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShuZXdSdWxlIGFzIFJ1bGVNb2RlbCkgYXMgTG9naWNUeXBlKVxuICAgIH1cbn1cbiJdfQ==