@recursyve/nestjs-data-filter 7.2.0-beta.8 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/lib/adapters/access-control.adapter.d.ts +11 -1
  2. package/lib/adapters/access-control.adapter.js +19 -2
  3. package/lib/adapters/default-access-control.adapter.d.ts +2 -2
  4. package/lib/adapters/default-access-control.adapter.js +4 -4
  5. package/lib/adapters/default-export.adapter.js +2 -2
  6. package/lib/adapters/default-translate.adapter.js +2 -2
  7. package/lib/data-filter.repository.d.ts +6 -4
  8. package/lib/data-filter.repository.js +75 -27
  9. package/lib/data-filter.service.js +2 -2
  10. package/lib/decorators/include.decorator.d.ts +5 -0
  11. package/lib/decorators/include.decorator.js +10 -3
  12. package/lib/decorators/index.d.ts +1 -0
  13. package/lib/decorators/index.js +2 -1
  14. package/lib/decorators/required.decorator.d.ts +1 -0
  15. package/lib/decorators/required.decorator.js +17 -0
  16. package/lib/decorators/where.decorator.js +5 -3
  17. package/lib/filter/base-filter.d.ts +4 -0
  18. package/lib/filter/base-filter.js +11 -1
  19. package/lib/filter/controllers/dynamic-filter.controller.d.ts +1 -0
  20. package/lib/filter/controllers/dynamic-filter.controller.js +33 -26
  21. package/lib/filter/controllers/filter.controller.d.ts +1 -0
  22. package/lib/filter/controllers/filter.controller.js +33 -26
  23. package/lib/filter/decorators/inject-filter.decorator.js +2 -2
  24. package/lib/filter/filter.config.d.ts +1 -0
  25. package/lib/filter/filter.config.js +3 -2
  26. package/lib/filter/filter.service.js +31 -11
  27. package/lib/filter/filters/filter.d.ts +1 -0
  28. package/lib/filter/filters/filter.js +3 -2
  29. package/lib/filter/filters/geo-bounds.filter.d.ts +25 -0
  30. package/lib/filter/filters/geo-bounds.filter.js +27 -0
  31. package/lib/filter/filters/geo-localization.filter.d.ts +2 -0
  32. package/lib/filter/filters/geo-localization.filter.js +4 -3
  33. package/lib/filter/filters/radio.filter.js +4 -1
  34. package/lib/filter/filters/select.filter.js +4 -1
  35. package/lib/filter/filters/text.filter.js +4 -1
  36. package/lib/filter/guards/filter-query.guard.js +3 -3
  37. package/lib/filter/interceptors/data-file-download.interceptor.js +3 -3
  38. package/lib/filter/order-rules/enum.order-rule.js +2 -2
  39. package/lib/filter/type.d.ts +2 -1
  40. package/lib/filter/type.js +2 -1
  41. package/lib/index.js +5 -5
  42. package/lib/models/attributes.model.js +10 -4
  43. package/lib/models/data-filter.model.js +5 -3
  44. package/lib/models/distance.model.d.ts +1 -0
  45. package/lib/models/distance.model.js +4 -4
  46. package/lib/models/filter.model.d.ts +1 -0
  47. package/lib/models/filter.model.js +1 -1
  48. package/lib/models/include.model.d.ts +5 -1
  49. package/lib/models/include.model.js +1 -1
  50. package/lib/models/path.model.d.ts +2 -0
  51. package/lib/models/path.model.js +1 -1
  52. package/lib/scanners/data-filter.scanner.js +2 -2
  53. package/lib/scanners/sequelize-model.scanner.js +30 -14
  54. package/lib/sequelize.utils.d.ts +2 -1
  55. package/lib/sequelize.utils.js +46 -6
  56. package/lib/utils/csv.utils.js +2 -2
  57. package/package.json +27 -28
@@ -1,4 +1,14 @@
1
+ import { Where } from "sequelize/types/lib/utils";
1
2
  import { M } from "../sequelize.utils";
3
+ export declare class AccessControlResources {
4
+ all?: boolean;
5
+ ids?: number[];
6
+ where?: Where;
7
+ private constructor();
8
+ static all(): AccessControlResources;
9
+ static fromIds(ids: number[]): AccessControlResources;
10
+ static fromCondition(where: Where): AccessControlResources;
11
+ }
2
12
  export declare abstract class AccessControlAdapter {
3
- abstract getResourceIds<Users>(model: typeof M, user: Users): Promise<number[]>;
13
+ abstract getResources<Users>(model: typeof M, user: Users): Promise<AccessControlResources>;
4
14
  }
@@ -1,8 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AccessControlAdapter = void 0;
3
+ exports.AccessControlAdapter = exports.AccessControlResources = void 0;
4
+ class AccessControlResources {
5
+ constructor({ all, ids, where }) {
6
+ this.all = all;
7
+ this.ids = ids;
8
+ this.where = where;
9
+ }
10
+ static all() {
11
+ return new AccessControlResources({ all: true });
12
+ }
13
+ static fromIds(ids) {
14
+ return new AccessControlResources({ ids });
15
+ }
16
+ static fromCondition(where) {
17
+ return new AccessControlResources({ where });
18
+ }
19
+ }
20
+ exports.AccessControlResources = AccessControlResources;
4
21
  class AccessControlAdapter {
5
22
  }
6
23
  exports.AccessControlAdapter = AccessControlAdapter;
7
24
 
8
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9hZGFwdGVycy9hY2Nlc3MtY29udHJvbC5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLE1BQXNCLG9CQUFvQjtDQUV6QztBQUZELG9EQUVDIiwiZmlsZSI6ImxpYi9hZGFwdGVycy9hY2Nlc3MtY29udHJvbC5hZGFwdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTSB9IGZyb20gXCIuLi9zZXF1ZWxpemUudXRpbHNcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFjY2Vzc0NvbnRyb2xBZGFwdGVyIHtcbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0UmVzb3VyY2VJZHM8VXNlcnM+KG1vZGVsOiB0eXBlb2YgTSwgdXNlcjogVXNlcnMpOiBQcm9taXNlPG51bWJlcltdPjtcbn1cbiJdfQ==
25
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9hZGFwdGVycy9hY2Nlc3MtY29udHJvbC5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLE1BQWEsc0JBQXNCO0lBSy9CLFlBQW9CLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQW9EO1FBQ3JGLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRU0sTUFBTSxDQUFDLEdBQUc7UUFDYixPQUFPLElBQUksc0JBQXNCLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFhO1FBQy9CLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBWTtRQUNwQyxPQUFPLElBQUksc0JBQXNCLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7Q0FDSjtBQXRCRCx3REFzQkM7QUFFRCxNQUFzQixvQkFBb0I7Q0FFekM7QUFGRCxvREFFQyIsImZpbGUiOiJsaWIvYWRhcHRlcnMvYWNjZXNzLWNvbnRyb2wuYWRhcHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdoZXJlIH0gZnJvbSBcInNlcXVlbGl6ZS90eXBlcy9saWIvdXRpbHNcIjtcbmltcG9ydCB7IE0gfSBmcm9tIFwiLi4vc2VxdWVsaXplLnV0aWxzXCI7XG5cbmV4cG9ydCBjbGFzcyBBY2Nlc3NDb250cm9sUmVzb3VyY2VzIHtcbiAgICBwdWJsaWMgYWxsPzogYm9vbGVhbjtcbiAgICBwdWJsaWMgaWRzPzogbnVtYmVyW107XG4gICAgcHVibGljIHdoZXJlPzogV2hlcmU7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKHsgYWxsLCBpZHMsIHdoZXJlIH06IHsgYWxsPzogYm9vbGVhbjsgaWRzPzogbnVtYmVyW107IHdoZXJlPzogV2hlcmUgfSkge1xuICAgICAgICB0aGlzLmFsbCA9IGFsbDtcbiAgICAgICAgdGhpcy5pZHMgPSBpZHM7XG4gICAgICAgIHRoaXMud2hlcmUgPSB3aGVyZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFsbCgpOiBBY2Nlc3NDb250cm9sUmVzb3VyY2VzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBY2Nlc3NDb250cm9sUmVzb3VyY2VzKHsgYWxsOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUlkcyhpZHM6IG51bWJlcltdKTogQWNjZXNzQ29udHJvbFJlc291cmNlcyB7XG4gICAgICAgIHJldHVybiBuZXcgQWNjZXNzQ29udHJvbFJlc291cmNlcyh7IGlkcyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Db25kaXRpb24od2hlcmU6IFdoZXJlKTogQWNjZXNzQ29udHJvbFJlc291cmNlcyB7XG4gICAgICAgIHJldHVybiBuZXcgQWNjZXNzQ29udHJvbFJlc291cmNlcyh7IHdoZXJlIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFjY2Vzc0NvbnRyb2xBZGFwdGVyIHtcbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0UmVzb3VyY2VzPFVzZXJzPihtb2RlbDogdHlwZW9mIE0sIHVzZXI6IFVzZXJzKTogUHJvbWlzZTxBY2Nlc3NDb250cm9sUmVzb3VyY2VzPjtcbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { M } from "../sequelize.utils";
2
- import { AccessControlAdapter } from "./access-control.adapter";
2
+ import { AccessControlAdapter, AccessControlResources } from "./access-control.adapter";
3
3
  export declare class DefaultAccessControlAdapter extends AccessControlAdapter {
4
- getResourceIds<Users>(model: typeof M, user: Users): Promise<number[]>;
4
+ getResources<Users>(model: typeof M, user: Users): Promise<AccessControlResources>;
5
5
  }
@@ -10,13 +10,13 @@ exports.DefaultAccessControlAdapter = void 0;
10
10
  const common_1 = require("@nestjs/common");
11
11
  const access_control_adapter_1 = require("./access-control.adapter");
12
12
  let DefaultAccessControlAdapter = class DefaultAccessControlAdapter extends access_control_adapter_1.AccessControlAdapter {
13
- async getResourceIds(model, user) {
14
- return [];
13
+ async getResources(model, user) {
14
+ return access_control_adapter_1.AccessControlResources.fromIds([]);
15
15
  }
16
16
  };
17
17
  DefaultAccessControlAdapter = __decorate([
18
- common_1.Injectable()
18
+ (0, common_1.Injectable)()
19
19
  ], DefaultAccessControlAdapter);
20
20
  exports.DefaultAccessControlAdapter = DefaultAccessControlAdapter;
21
21
 
22
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9hZGFwdGVycy9kZWZhdWx0LWFjY2Vzcy1jb250cm9sLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsMkNBQTRDO0FBRTVDLHFFQUFnRTtBQUdoRSxJQUFhLDJCQUEyQixHQUF4QyxNQUFhLDJCQUE0QixTQUFRLDZDQUFvQjtJQUMxRCxLQUFLLENBQUMsY0FBYyxDQUFRLEtBQWUsRUFBRSxJQUFXO1FBQzNELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztDQUNKLENBQUE7QUFKWSwyQkFBMkI7SUFEdkMsbUJBQVUsRUFBRTtHQUNBLDJCQUEyQixDQUl2QztBQUpZLGtFQUEyQiIsImZpbGUiOiJsaWIvYWRhcHRlcnMvZGVmYXVsdC1hY2Nlc3MtY29udHJvbC5hZGFwdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgTSB9IGZyb20gXCIuLi9zZXF1ZWxpemUudXRpbHNcIjtcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xBZGFwdGVyIH0gZnJvbSBcIi4vYWNjZXNzLWNvbnRyb2wuYWRhcHRlclwiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGVmYXVsdEFjY2Vzc0NvbnRyb2xBZGFwdGVyIGV4dGVuZHMgQWNjZXNzQ29udHJvbEFkYXB0ZXIge1xuICAgIHB1YmxpYyBhc3luYyBnZXRSZXNvdXJjZUlkczxVc2Vycz4obW9kZWw6IHR5cGVvZiBNLCB1c2VyOiBVc2Vycyk6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cbiJdfQ==
22
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9hZGFwdGVycy9kZWZhdWx0LWFjY2Vzcy1jb250cm9sLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsMkNBQTRDO0FBRTVDLHFFQUF3RjtBQUd4RixJQUFhLDJCQUEyQixHQUF4QyxNQUFhLDJCQUE0QixTQUFRLDZDQUFvQjtJQUMxRCxLQUFLLENBQUMsWUFBWSxDQUFRLEtBQWUsRUFBRSxJQUFXO1FBQ3pELE9BQU8sK0NBQXNCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7Q0FDSixDQUFBO0FBSlksMkJBQTJCO0lBRHZDLElBQUEsbUJBQVUsR0FBRTtHQUNBLDJCQUEyQixDQUl2QztBQUpZLGtFQUEyQiIsImZpbGUiOiJsaWIvYWRhcHRlcnMvZGVmYXVsdC1hY2Nlc3MtY29udHJvbC5hZGFwdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgTSB9IGZyb20gXCIuLi9zZXF1ZWxpemUudXRpbHNcIjtcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xBZGFwdGVyLCBBY2Nlc3NDb250cm9sUmVzb3VyY2VzIH0gZnJvbSBcIi4vYWNjZXNzLWNvbnRyb2wuYWRhcHRlclwiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGVmYXVsdEFjY2Vzc0NvbnRyb2xBZGFwdGVyIGV4dGVuZHMgQWNjZXNzQ29udHJvbEFkYXB0ZXIge1xuICAgIHB1YmxpYyBhc3luYyBnZXRSZXNvdXJjZXM8VXNlcnM+KG1vZGVsOiB0eXBlb2YgTSwgdXNlcjogVXNlcnMpOiBQcm9taXNlPEFjY2Vzc0NvbnRyb2xSZXNvdXJjZXM+IHtcbiAgICAgICAgcmV0dXJuIEFjY2Vzc0NvbnRyb2xSZXNvdXJjZXMuZnJvbUlkcyhbXSk7XG4gICAgfVxufVxuIl19
@@ -18,8 +18,8 @@ let DefaultExportAdapter = class DefaultExportAdapter extends export_adapter_1.E
18
18
  }
19
19
  };
20
20
  DefaultExportAdapter = __decorate([
21
- common_1.Injectable()
21
+ (0, common_1.Injectable)()
22
22
  ], DefaultExportAdapter);
23
23
  exports.DefaultExportAdapter = DefaultExportAdapter;
24
24
 
25
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9hZGFwdGVycy9kZWZhdWx0LWV4cG9ydC5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1QyxxREFBNkQ7QUFHN0QsSUFBYSxvQkFBb0IsR0FBakMsTUFBYSxvQkFBcUIsU0FBUSw4QkFBYTtJQUM1QyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxJQUFnQixFQUFFLE9BQWE7UUFDakUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0RkFBNEYsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFTSxXQUFXLENBQUMsUUFBZ0IsRUFBRSxJQUFnQixFQUFFLE9BQWE7UUFDaEUsTUFBTSxJQUFJLEtBQUssQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO0lBQ2pILENBQUM7Q0FDSixDQUFBO0FBUlksb0JBQW9CO0lBRGhDLG1CQUFVLEVBQUU7R0FDQSxvQkFBb0IsQ0FRaEM7QUFSWSxvREFBb0IiLCJmaWxlIjoibGliL2FkYXB0ZXJzL2RlZmF1bHQtZXhwb3J0LmFkYXB0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBFeHBvcnRBZGFwdGVyLCBFeHBvcnREYXRhIH0gZnJvbSBcIi4vZXhwb3J0LmFkYXB0ZXJcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERlZmF1bHRFeHBvcnRBZGFwdGVyIGV4dGVuZHMgRXhwb3J0QWRhcHRlciB7XG4gICAgcHVibGljIGV4cG9ydEFzSHRtbChsYW5ndWFnZTogc3RyaW5nLCBkYXRhOiBFeHBvcnREYXRhLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YUZpbHRlciBkb2Vzbid0IHByb3ZpZGUgYSBkZWZhdWx0IEhUTUwgZXhwb3J0LiBUbyBlbmFibGUgaXQsIGFkZCBhIGN1c3RvbSBFeHBvcnRBZGFwdGVyXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBvcnRBc1BkZihsYW5ndWFnZTogc3RyaW5nLCBkYXRhOiBFeHBvcnREYXRhLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YUZpbHRlciBkb2Vzbid0IHByb3ZpZGUgYSBkZWZhdWx0IFBERiBleHBvcnQuIFRvIGVuYWJsZSBpdCwgYWRkIGEgY3VzdG9tIEV4cG9ydEFkYXB0ZXJcIik7XG4gICAgfVxufVxuIl19
25
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9hZGFwdGVycy9kZWZhdWx0LWV4cG9ydC5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1QyxxREFBNkQ7QUFHN0QsSUFBYSxvQkFBb0IsR0FBakMsTUFBYSxvQkFBcUIsU0FBUSw4QkFBYTtJQUM1QyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxJQUFnQixFQUFFLE9BQWE7UUFDakUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0RkFBNEYsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFTSxXQUFXLENBQUMsUUFBZ0IsRUFBRSxJQUFnQixFQUFFLE9BQWE7UUFDaEUsTUFBTSxJQUFJLEtBQUssQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO0lBQ2pILENBQUM7Q0FDSixDQUFBO0FBUlksb0JBQW9CO0lBRGhDLElBQUEsbUJBQVUsR0FBRTtHQUNBLG9CQUFvQixDQVFoQztBQVJZLG9EQUFvQiIsImZpbGUiOiJsaWIvYWRhcHRlcnMvZGVmYXVsdC1leHBvcnQuYWRhcHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IEV4cG9ydEFkYXB0ZXIsIEV4cG9ydERhdGEgfSBmcm9tIFwiLi9leHBvcnQuYWRhcHRlclwiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGVmYXVsdEV4cG9ydEFkYXB0ZXIgZXh0ZW5kcyBFeHBvcnRBZGFwdGVyIHtcbiAgICBwdWJsaWMgZXhwb3J0QXNIdG1sKGxhbmd1YWdlOiBzdHJpbmcsIGRhdGE6IEV4cG9ydERhdGEsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhRmlsdGVyIGRvZXNuJ3QgcHJvdmlkZSBhIGRlZmF1bHQgSFRNTCBleHBvcnQuIFRvIGVuYWJsZSBpdCwgYWRkIGEgY3VzdG9tIEV4cG9ydEFkYXB0ZXJcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cG9ydEFzUGRmKGxhbmd1YWdlOiBzdHJpbmcsIGRhdGE6IEV4cG9ydERhdGEsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhRmlsdGVyIGRvZXNuJ3QgcHJvdmlkZSBhIGRlZmF1bHQgUERGIGV4cG9ydC4gVG8gZW5hYmxlIGl0LCBhZGQgYSBjdXN0b20gRXhwb3J0QWRhcHRlclwiKTtcbiAgICB9XG59XG4iXX0=
@@ -15,8 +15,8 @@ let DefaultTranslateAdapter = class DefaultTranslateAdapter extends translate_ad
15
15
  }
16
16
  };
17
17
  DefaultTranslateAdapter = __decorate([
18
- common_1.Injectable()
18
+ (0, common_1.Injectable)()
19
19
  ], DefaultTranslateAdapter);
20
20
  exports.DefaultTranslateAdapter = DefaultTranslateAdapter;
21
21
 
22
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9hZGFwdGVycy9kZWZhdWx0LXRyYW5zbGF0ZS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1QywyREFBdUQ7QUFHdkQsSUFBYSx1QkFBdUIsR0FBcEMsTUFBYSx1QkFBd0IsU0FBUSxvQ0FBZ0I7SUFDbEQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFnQixFQUFFLEdBQVc7UUFDckQsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0NBQ0osQ0FBQTtBQUpZLHVCQUF1QjtJQURuQyxtQkFBVSxFQUFFO0dBQ0EsdUJBQXVCLENBSW5DO0FBSlksMERBQXVCIiwiZmlsZSI6ImxpYi9hZGFwdGVycy9kZWZhdWx0LXRyYW5zbGF0ZS5hZGFwdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlQWRhcHRlciB9IGZyb20gXCIuL3RyYW5zbGF0ZS5hZGFwdGVyXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEZWZhdWx0VHJhbnNsYXRlQWRhcHRlciBleHRlbmRzIFRyYW5zbGF0ZUFkYXB0ZXIge1xuICAgIHB1YmxpYyBhc3luYyBnZXRUcmFuc2xhdGlvbihsYW5ndWFnZTogc3RyaW5nLCBrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxufVxuIl19
22
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9hZGFwdGVycy9kZWZhdWx0LXRyYW5zbGF0ZS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1QywyREFBdUQ7QUFHdkQsSUFBYSx1QkFBdUIsR0FBcEMsTUFBYSx1QkFBd0IsU0FBUSxvQ0FBZ0I7SUFDbEQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFnQixFQUFFLEdBQVc7UUFDckQsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0NBQ0osQ0FBQTtBQUpZLHVCQUF1QjtJQURuQyxJQUFBLG1CQUFVLEdBQUU7R0FDQSx1QkFBdUIsQ0FJbkM7QUFKWSwwREFBdUIiLCJmaWxlIjoibGliL2FkYXB0ZXJzL2RlZmF1bHQtdHJhbnNsYXRlLmFkYXB0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVBZGFwdGVyIH0gZnJvbSBcIi4vdHJhbnNsYXRlLmFkYXB0ZXJcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERlZmF1bHRUcmFuc2xhdGVBZGFwdGVyIGV4dGVuZHMgVHJhbnNsYXRlQWRhcHRlciB7XG4gICAgcHVibGljIGFzeW5jIGdldFRyYW5zbGF0aW9uKGxhbmd1YWdlOiBzdHJpbmcsIGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG59XG4iXX0=
@@ -32,13 +32,15 @@ export declare class DataFilterRepository<Data> {
32
32
  reduceObject(result: any): Data;
33
33
  getSearchAttributes(): SearchAttributesModel[];
34
34
  downloadData(data: Data[], type: ExportTypes, lang: string, options?: any): Promise<Buffer | string>;
35
- downloadXlsx(data: Data[], lang: string): Promise<Buffer>;
36
- downloadHtml(data: Data[], lang: string, options?: any): Promise<string>;
37
- downloadCsv(data: Data[], lang: string): Promise<Buffer>;
38
- downloadPdf(data: Data[], lang: string, options?: any): Promise<Buffer>;
35
+ downloadData(headers: string[], data: any[], type: ExportTypes, lang: string, options?: any): Promise<Buffer | string>;
36
+ downloadXlsx(headers: string[], data: any[]): Promise<Buffer>;
37
+ downloadHtml(headers: string[], data: any[], lang: string, options?: any): Promise<string>;
38
+ downloadCsv(headers: string[], data: any[]): Promise<Buffer>;
39
+ downloadPdf(headers: string[], data: any[], lang: string, options?: any): Promise<Buffer>;
39
40
  private init;
40
41
  addSearchCondition(search: string, options: FindOptions): void;
41
42
  private getExportsHeader;
42
43
  private getExportData;
43
44
  private getExportValue;
45
+ private mergeAccessControlCondition;
44
46
  }
@@ -43,11 +43,24 @@ let DataFilterRepository = class DataFilterRepository {
43
43
  return this.reduceObject(result);
44
44
  }
45
45
  async findByPkFromUser(user, identifier, conditions) {
46
- const ids = await this.accessControlAdapter.getResourceIds(this._config.model, user);
47
- if (!ids.includes(identifier)) {
46
+ var _a, _b, _c;
47
+ const resources = await this.accessControlAdapter.getResources(this._config.model, user);
48
+ if (((_a = resources.ids) === null || _a === void 0 ? void 0 : _a.includes(identifier)) || resources.all) {
49
+ return await this.findByPk(identifier, conditions);
50
+ }
51
+ if ((_b = resources.ids) === null || _b === void 0 ? void 0 : _b.length) {
48
52
  return null;
49
53
  }
50
- return await this.findByPk(identifier, conditions);
54
+ return await this.findOne({
55
+ where: {
56
+ [sequelize_1.Op.and]: [
57
+ {
58
+ [this._config.model.primaryKeyAttribute]: identifier
59
+ },
60
+ (_c = resources.where) !== null && _c !== void 0 ? _c : {}
61
+ ]
62
+ }
63
+ }, conditions);
51
64
  }
52
65
  async findOne(options, conditions) {
53
66
  const result = await this.model.findOne({
@@ -70,10 +83,11 @@ let DataFilterRepository = class DataFilterRepository {
70
83
  return result.map(x => this.reduceObject(x));
71
84
  }
72
85
  async findAllFromUser(user, options, conditions) {
73
- const ids = await this.accessControlAdapter.getResourceIds(this._config.model, user);
86
+ var _a;
87
+ options = options !== null && options !== void 0 ? options : {};
74
88
  return await this.findAll({
75
89
  ...options,
76
- where: sequelize_utils_1.SequelizeUtils.mergeWhere({ id: ids }, options.where)
90
+ where: await this.mergeAccessControlCondition((_a = options.where) !== null && _a !== void 0 ? _a : {}, user)
77
91
  }, conditions);
78
92
  }
79
93
  async count(where, conditions) {
@@ -97,8 +111,7 @@ let DataFilterRepository = class DataFilterRepository {
97
111
  const findOptions = this.generateFindOptions(conditions);
98
112
  Object.assign(findOptions, options);
99
113
  this.addSearchCondition(search, findOptions);
100
- const ids = await this.accessControlAdapter.getResourceIds(this._config.model, user);
101
- findOptions.where = sequelize_utils_1.SequelizeUtils.mergeWhere({ id: ids }, findOptions.where);
114
+ findOptions.where = await this.mergeAccessControlCondition(findOptions.where, user);
102
115
  const result = await this.model.findAll(findOptions);
103
116
  if (!(result === null || result === void 0 ? void 0 : result.length)) {
104
117
  return result;
@@ -117,7 +130,9 @@ let DataFilterRepository = class DataFilterRepository {
117
130
  return this.sequelizeModelScanner.getIncludes(this.model, path, additionalIncludes, attributes);
118
131
  }),
119
132
  ...this._config.getCustomAttributesIncludes().map(x => this.sequelizeModelScanner.getIncludes(this.model, {
120
- path: x.path
133
+ path: x.path,
134
+ paranoid: x.paranoid,
135
+ subQuery: x.subQuery
121
136
  }, [], x.attributes))
122
137
  ];
123
138
  const attributes = this._config.transformAttributesConfig(conditions);
@@ -177,36 +192,54 @@ let DataFilterRepository = class DataFilterRepository {
177
192
  }
178
193
  return attributes;
179
194
  }
180
- async downloadData(data, type, lang, options) {
195
+ async downloadData(dataOrHeaders, typeOrData, langOrType, optionsOrLang, options) {
196
+ var _a;
197
+ let type;
198
+ let headers;
199
+ let data;
200
+ let lang;
201
+ if (typeof typeOrData === "string") {
202
+ type = typeOrData;
203
+ lang = langOrType;
204
+ headers = await this.getExportsHeader(lang, (_a = this._config.exportColumns) !== null && _a !== void 0 ? _a : []);
205
+ data = await this.getExportData(dataOrHeaders);
206
+ options = optionsOrLang;
207
+ }
208
+ else {
209
+ lang = optionsOrLang;
210
+ headers = await this.getExportsHeader(lang, dataOrHeaders);
211
+ data = typeOrData;
212
+ type = langOrType;
213
+ }
181
214
  switch (type) {
182
215
  case export_types_model_1.ExportTypes.XLSX:
183
- return await this.downloadXlsx(data, lang);
216
+ return await this.downloadXlsx(headers, data);
184
217
  case export_types_model_1.ExportTypes.HTML:
185
- return await this.downloadHtml(data, lang, options);
218
+ return await this.downloadHtml(headers, data, lang, options);
186
219
  case export_types_model_1.ExportTypes.CSV:
187
- return await this.downloadCsv(data, lang);
220
+ return await this.downloadCsv(headers, data);
188
221
  case export_types_model_1.ExportTypes.PDF:
189
- return await this.downloadPdf(data, lang, options);
222
+ return await this.downloadPdf(headers, data, options);
190
223
  }
191
224
  }
192
- async downloadXlsx(data, lang) {
193
- return xlsx_utils_1.XlsxUtils.arrayToXlsxBuffer(this.getExportData(data), this._config.model.getTableName(), await this.getExportsHeader(lang));
225
+ async downloadXlsx(headers, data) {
226
+ return xlsx_utils_1.XlsxUtils.arrayToXlsxBuffer(data, this._config.model.getTableName(), headers);
194
227
  }
195
- async downloadHtml(data, lang, options) {
228
+ async downloadHtml(headers, data, lang, options) {
196
229
  return this.exportAdapter.exportAsHtml(lang, {
197
230
  title: this._config.model.getTableName(),
198
- columns: await this.getExportsHeader(lang),
199
- data: this.getExportData(data)
231
+ columns: headers,
232
+ data: data
200
233
  }, options);
201
234
  }
202
- async downloadCsv(data, lang) {
203
- return await csv_utils_1.CsvUtils.arrayToCsvBuffer(this.getExportData(data), await this.getExportsHeader(lang));
235
+ async downloadCsv(headers, data) {
236
+ return await csv_utils_1.CsvUtils.arrayToCsvBuffer(data, headers);
204
237
  }
205
- async downloadPdf(data, lang, options) {
238
+ async downloadPdf(headers, data, lang, options) {
206
239
  return this.exportAdapter.exportAsPdf(lang, {
207
240
  title: this._config.model.getTableName(),
208
- columns: await this.getExportsHeader(lang),
209
- data: this.getExportData(data)
241
+ columns: headers,
242
+ data: data
210
243
  }, options);
211
244
  }
212
245
  init() {
@@ -248,8 +281,8 @@ let DataFilterRepository = class DataFilterRepository {
248
281
  };
249
282
  }));
250
283
  }
251
- getExportsHeader(lang, translateService = this.translateService) {
252
- return Promise.all(this._config.exportColumns.map(x => translateService.getTranslation(lang, `exports.${x}`)));
284
+ getExportsHeader(lang, headers, translateService = this.translateService) {
285
+ return Promise.all(headers.map(x => translateService.getTranslation(lang, `exports.${x}`)));
253
286
  }
254
287
  getExportData(data) {
255
288
  return data.map(x => {
@@ -277,9 +310,24 @@ let DataFilterRepository = class DataFilterRepository {
277
310
  }
278
311
  return [data, key];
279
312
  }
313
+ async mergeAccessControlCondition(where, user) {
314
+ const resources = await this.accessControlAdapter.getResources(this._config.model, user);
315
+ if (resources.ids) {
316
+ return sequelize_utils_1.SequelizeUtils.mergeWhere({ id: resources.ids }, where);
317
+ }
318
+ else if (resources.where) {
319
+ return {
320
+ [sequelize_1.Op.and]: [
321
+ where,
322
+ resources.where
323
+ ]
324
+ };
325
+ }
326
+ return where;
327
+ }
280
328
  };
281
329
  DataFilterRepository = __decorate([
282
- common_1.Injectable(),
330
+ (0, common_1.Injectable)(),
283
331
  __metadata("design:paramtypes", [Object, data_filter_scanner_1.DataFilterScanner,
284
332
  sequelize_model_scanner_1.SequelizeModelScanner,
285
333
  adapters_1.AccessControlAdapter,
@@ -288,4 +336,4 @@ DataFilterRepository = __decorate([
288
336
  ], DataFilterRepository);
289
337
  exports.DataFilterRepository = DataFilterRepository;
290
338
 
291
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1Qyx5Q0FBK0c7QUFFL0cseUNBQW1GO0FBR25GLG9FQUEwRDtBQUsxRCx3RUFBbUU7QUFDbkUsZ0ZBQTJFO0FBQzNFLHVEQUFzRDtBQUN0RCxpREFBNkM7QUFDN0MsbURBQStDO0FBRy9DLElBQWEsb0JBQW9CLEdBQWpDLE1BQWEsb0JBQW9CO0lBUTdCLFlBQ1ksT0FBWSxFQUNaLGlCQUFvQyxFQUNwQyxxQkFBNEMsRUFDNUMsb0JBQTBDLEVBQzFDLGdCQUFrQyxFQUNsQyxhQUE0QjtRQUw1QixZQUFPLEdBQVAsT0FBTyxDQUFLO1FBQ1osc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUVwQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQWJELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFpQixDQUFDO0lBQzFDLENBQUM7SUFhTSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQXNCLEVBQUUsT0FBcUIsRUFBRSxVQUFtQjtRQUNwRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUNqRCxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7WUFDdkMsR0FBRyxDQUFDLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUFJLEVBQUUsQ0FBQztTQUNyQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxNQUF5QixDQUFDO1NBQ3BD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QUcsS0FBSyxDQUFDO2FBQ3BDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sY0FBYyxDQUFDLElBQVUsRUFBRSxJQUFZO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNuQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUMzQjtRQUVELElBQUksR0FBVyxDQUFDO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLElBQUksSUFBSSxFQUFFO2dCQUNOLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDcEI7U0FDSjtRQUVELE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztDQUNKLENBQUE7QUFyVVksb0JBQW9CO0lBRGhDLG1CQUFVLEVBQUU7NkNBV3NCLHVDQUFpQjtRQUNiLCtDQUFxQjtRQUN0QiwrQkFBb0I7UUFDeEIsMkJBQWdCO1FBQ25CLHdCQUFhO0dBZC9CLG9CQUFvQixDQXFVaEM7QUFyVVksb0RBQW9CIiwiZmlsZSI6ImxpYi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgRmluZE9wdGlvbnMsIElkZW50aWZpZXIsIEluY2x1ZGVPcHRpb25zLCBNb2RlbCwgT3AsIFV0aWxzLCBXaGVyZU9wdGlvbnMsIFNlcXVlbGl6ZSB9IGZyb20gXCJzZXF1ZWxpemVcIjtcbmltcG9ydCAqIGFzIHNlcXVlbGl6ZSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sQWRhcHRlciwgRXhwb3J0QWRhcHRlciwgVHJhbnNsYXRlQWRhcHRlciB9IGZyb20gXCIuL2FkYXB0ZXJzXCI7XG5pbXBvcnQgeyBBdHRyaWJ1dGVzQ29uZmlnIH0gZnJvbSBcIi4vbW9kZWxzL2F0dHJpYnV0ZXMubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJDb25maWcgfSBmcm9tIFwiLi9tb2RlbHMvZGF0YS1maWx0ZXIubW9kZWxcIjtcbmltcG9ydCB7IEV4cG9ydFR5cGVzIH0gZnJvbSBcIi4vbW9kZWxzL2V4cG9ydC10eXBlcy5tb2RlbFwiO1xuaW1wb3J0IHsgT3JkZXJNb2RlbCB9IGZyb20gXCIuL21vZGVscy9maWx0ZXIubW9kZWxcIjtcbmltcG9ydCB7IFBhdGhNb2RlbCB9IGZyb20gXCIuL21vZGVscy9wYXRoLm1vZGVsXCI7XG5pbXBvcnQgeyBTZWFyY2hBdHRyaWJ1dGVzTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvc2VhcmNoLWF0dHJpYnV0ZXMubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJVc2VyTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvdXNlci5tb2RlbFwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclNjYW5uZXIgfSBmcm9tIFwiLi9zY2FubmVycy9kYXRhLWZpbHRlci5zY2FubmVyXCI7XG5pbXBvcnQgeyBTZXF1ZWxpemVNb2RlbFNjYW5uZXIgfSBmcm9tIFwiLi9zY2FubmVycy9zZXF1ZWxpemUtbW9kZWwuc2Nhbm5lclwiO1xuaW1wb3J0IHsgTSwgU2VxdWVsaXplVXRpbHMgfSBmcm9tIFwiLi9zZXF1ZWxpemUudXRpbHNcIjtcbmltcG9ydCB7IENzdlV0aWxzIH0gZnJvbSBcIi4vdXRpbHMvY3N2LnV0aWxzXCI7XG5pbXBvcnQgeyBYbHN4VXRpbHMgfSBmcm9tIFwiLi91dGlscy94bHN4LnV0aWxzXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXRhRmlsdGVyUmVwb3NpdG9yeTxEYXRhPiB7XG4gICAgcHJpdmF0ZSBfY29uZmlnOiBEYXRhRmlsdGVyQ29uZmlnO1xuICAgIHByaXZhdGUgX2RlZmluaXRpb25zOiBBdHRyaWJ1dGVzQ29uZmlnW107XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCk6IHR5cGVvZiBNIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5tb2RlbCBhcyB0eXBlb2YgTTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkYXRhRGVmOiBhbnksXG4gICAgICAgIHByaXZhdGUgZGF0YUZpbHRlclNjYW5uZXI6IERhdGFGaWx0ZXJTY2FubmVyLFxuICAgICAgICBwcml2YXRlIHNlcXVlbGl6ZU1vZGVsU2Nhbm5lcjogU2VxdWVsaXplTW9kZWxTY2FubmVyLFxuICAgICAgICBwcml2YXRlIGFjY2Vzc0NvbnRyb2xBZGFwdGVyOiBBY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIGV4cG9ydEFkYXB0ZXI6IEV4cG9ydEFkYXB0ZXJcbiAgICApIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRCeVBrKGlkZW50aWZpZXI6IElkZW50aWZpZXIsIG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRCeVBrKGlkZW50aWZpZXIsIHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zID8/IHt9KVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlZHVjZU9iamVjdChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kQnlQa0Zyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIGlkZW50aWZpZXI6IElkZW50aWZpZXIsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGE+IHtcbiAgICAgICAgY29uc3QgaWRzID0gYXdhaXQgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlci5nZXRSZXNvdXJjZUlkcyh0aGlzLl9jb25maWcubW9kZWwgYXMgYW55LCB1c2VyKTtcbiAgICAgICAgaWYgKCFpZHMuaW5jbHVkZXMoaWRlbnRpZmllciBhcyBudW1iZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kQnlQayhpZGVudGlmaWVyLCBjb25kaXRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZE9uZShvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGE+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5tb2RlbC5maW5kT25lKHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zID8/IHt9KVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlZHVjZU9iamVjdChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kQWxsKG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEFsbCh7XG4gICAgICAgICAgICAuLi50aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMoY29uZGl0aW9ucyksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucyA/PyB7fSlcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcmVzdWx0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoeCA9PiB0aGlzLnJlZHVjZU9iamVjdCh4KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRBbGxGcm9tVXNlcih1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCBpZHMgPSBhd2FpdCB0aGlzLmFjY2Vzc0NvbnRyb2xBZGFwdGVyLmdldFJlc291cmNlSWRzKHRoaXMuX2NvbmZpZy5tb2RlbCBhcyBhbnksIHVzZXIpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kQWxsKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgd2hlcmU6IFNlcXVlbGl6ZVV0aWxzLm1lcmdlV2hlcmUoeyBpZDogaWRzIH0sIG9wdGlvbnMud2hlcmUpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uZGl0aW9uc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb3VudCh3aGVyZT86IFdoZXJlT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMoY29uZGl0aW9ucyksXG4gICAgICAgICAgICB3aGVyZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5jb3VudChvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoKHNlYXJjaDogc3RyaW5nLCBvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9ucyA9IHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaW5kT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaCwgZmluZE9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEFsbChmaW5kT3B0aW9ucyk7XG4gICAgICAgIGlmICghcmVzdWx0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoeCA9PiB0aGlzLnJlZHVjZU9iamVjdCh4KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEZyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIHNlYXJjaDogc3RyaW5nLCBvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9ucyA9IHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaW5kT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaCwgZmluZE9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRoaXMuYWNjZXNzQ29udHJvbEFkYXB0ZXIuZ2V0UmVzb3VyY2VJZHModGhpcy5fY29uZmlnLm1vZGVsIGFzIGFueSwgdXNlcik7XG4gICAgICAgIGZpbmRPcHRpb25zLndoZXJlID0gU2VxdWVsaXplVXRpbHMubWVyZ2VXaGVyZSh7IGlkOiBpZHMgfSwgZmluZE9wdGlvbnMud2hlcmUpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEFsbChmaW5kT3B0aW9ucyk7XG4gICAgICAgIGlmICghcmVzdWx0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoeCA9PiB0aGlzLnJlZHVjZU9iamVjdCh4KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdlbmVyYXRlRmluZE9wdGlvbnMoY29uZGl0aW9ucz86IG9iamVjdCk6IEZpbmRPcHRpb25zIHtcbiAgICAgICAgY29uc3QgaW5jbHVkZXM6IEluY2x1ZGVPcHRpb25zW11bXSA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZmluaXRpb25zLm1hcCh4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXgucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSB4LnRyYW5zZm9ybVBhdGhDb25maWcoY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHgudHJhbnNmb3JtQXR0cmlidXRlc0NvbmZpZyhjb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsSW5jbHVkZXMgPSB4LnRyYW5zZm9ybUluY2x1ZGVzQ29uZmlnKGNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyh0aGlzLm1vZGVsLCBwYXRoLCBhZGRpdGlvbmFsSW5jbHVkZXMsIGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi50aGlzLl9jb25maWcuZ2V0Q3VzdG9tQXR0cmlidXRlc0luY2x1ZGVzKCkubWFwKHggPT4gdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXModGhpcy5tb2RlbCwge1xuICAgICAgICAgICAgICAgIHBhdGg6IHgucGF0aFxuICAgICAgICAgICAgfSwgW10sIHguYXR0cmlidXRlcykpXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHRoaXMuX2NvbmZpZy50cmFuc2Zvcm1BdHRyaWJ1dGVzQ29uZmlnKGNvbmRpdGlvbnMpO1xuXG4gICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgaW5jbHVkZTogU2VxdWVsaXplVXRpbHMucmVkdWNlSW5jbHVkZXMoaW5jbHVkZXMpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluY2x1ZGU6IFNlcXVlbGl6ZVV0aWxzLnJlZHVjZUluY2x1ZGVzKGluY2x1ZGVzKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZW5lcmF0ZU9yZGVySW5jbHVkZShvcmRlcjogT3JkZXJNb2RlbCk6IEluY2x1ZGVPcHRpb25zW10ge1xuICAgICAgICBpZiAoIW9yZGVyIHx8ICFvcmRlci5jb2x1bW4gfHwgb3JkZXIuZGlyZWN0aW9uID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0T3JkZXJJbmNsdWRlcyh0aGlzLm1vZGVsLCBvcmRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZHVjZU9iamVjdChyZXN1bHQ6IGFueSk6IERhdGEge1xuICAgICAgICBjb25zdCByID0gcmVzdWx0IGluc3RhbmNlb2YgTW9kZWwgPyByZXN1bHQudG9KU09OKCkgOiByZXN1bHQ7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgdGhpcy5kYXRhRGVmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcih7fSwgeyBpc05ld1JlY29yZDogZmFsc2UgfSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YSwgcik7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICAgICAgICAgIChkYXRhIGFzIGFueSkuZGF0YVZhbHVlcyA9IHtcbiAgICAgICAgICAgICAgICAuLi5yXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBkZWYgb2YgdGhpcy5fZGVmaW5pdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChkZWYucGF0aCkge1xuICAgICAgICAgICAgICAgIGRhdGFbZGVmLmtleV0gPSBTZXF1ZWxpemVVdGlscy5yZWR1Y2VNb2RlbEZyb21QYXRoKHJlc3VsdCwgZGVmLnBhdGgucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBNb2RlbCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnNldERhdGFWYWx1ZShkZWYua2V5IGFzIGFueSwgU2VxdWVsaXplVXRpbHMucmVkdWNlTW9kZWxGcm9tUGF0aChyZXN1bHQsIGRlZi5wYXRoLnBhdGgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGFbZGVmLmtleV0gPSByZXN1bHRbZGVmLmtleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2VhcmNoQXR0cmlidXRlcygpOiBTZWFyY2hBdHRyaWJ1dGVzTW9kZWxbXSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXM6IFNlYXJjaEF0dHJpYnV0ZXNNb2RlbFtdID0gW107XG4gICAgICAgIGNvbnN0IG1vZGVsQXR0ciA9IHRoaXMuX2NvbmZpZy5nZXRTZWFyY2hhYmxlQXR0cmlidXRlcygpO1xuICAgICAgICBhdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICAuLi5tb2RlbEF0dHIubWFwKGEgPT4gKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhLFxuICAgICAgICAgICAgICAgIGtleTogYSxcbiAgICAgICAgICAgICAgICBpc0pzb246IFNlcXVlbGl6ZVV0aWxzLmlzQ29sdW1uSnNvbih0aGlzLm1vZGVsLCBhKVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgZm9yIChjb25zdCBkZWZpbml0aW9uIG9mIHRoaXMuX2RlZmluaXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIWRlZmluaXRpb24ucGF0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhdHRyID0gZGVmaW5pdGlvbi5pZ25vcmVJblNlYXJjaCA/IFtdIDogZGVmaW5pdGlvbi5zZWFyY2hhYmxlQXR0cmlidXRlcyA/PyBkZWZpbml0aW9uLmF0dHJpYnV0ZXM7XG4gICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsSW5jbHVkZXMgPSBkZWZpbml0aW9uLnRyYW5zZm9ybUluY2x1ZGVzQ29uZmlnKHt9KTtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaChcbiAgICAgICAgICAgICAgICAuLi50aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRBdHRyaWJ1dGVzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uLnBhdGggYXMgUGF0aE1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsSW5jbHVkZXMsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShkYXRhOiBEYXRhW10sIHR5cGU6IEV4cG9ydFR5cGVzLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz4ge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0VHlwZXMuWExTWDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb3dubG9hZFhsc3goZGF0YSwgbGFuZyk7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydFR5cGVzLkhUTUw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG93bmxvYWRIdG1sKGRhdGEsIGxhbmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRUeXBlcy5DU1Y6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG93bmxvYWRDc3YoZGF0YSwgbGFuZyk7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydFR5cGVzLlBERjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb3dubG9hZFBkZihkYXRhLCBsYW5nLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZFhsc3goZGF0YTogRGF0YVtdLCBsYW5nOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gWGxzeFV0aWxzLmFycmF5VG9YbHN4QnVmZmVyKFxuICAgICAgICAgICAgdGhpcy5nZXRFeHBvcnREYXRhKGRhdGEpLFxuICAgICAgICAgICAgdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0RXhwb3J0c0hlYWRlcihsYW5nKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZEh0bWwoZGF0YTogRGF0YVtdLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRBZGFwdGVyLmV4cG9ydEFzSHRtbChsYW5nLCB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGNvbHVtbnM6IGF3YWl0IHRoaXMuZ2V0RXhwb3J0c0hlYWRlcihsYW5nKSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZ2V0RXhwb3J0RGF0YShkYXRhKVxuICAgICAgICB9LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWRDc3YoZGF0YTogRGF0YVtdLCBsYW5nOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgQ3N2VXRpbHMuYXJyYXlUb0NzdkJ1ZmZlcih0aGlzLmdldEV4cG9ydERhdGEoZGF0YSksIGF3YWl0IHRoaXMuZ2V0RXhwb3J0c0hlYWRlcihsYW5nKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkUGRmKGRhdGE6IERhdGFbXSwgbGFuZzogc3RyaW5nLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0QWRhcHRlci5leHBvcnRBc1BkZihsYW5nLCB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGNvbHVtbnM6IGF3YWl0IHRoaXMuZ2V0RXhwb3J0c0hlYWRlcihsYW5nKSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZ2V0RXhwb3J0RGF0YShkYXRhKVxuICAgICAgICB9LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXQoKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuZGF0YUZpbHRlclNjYW5uZXIuZ2V0RGF0YUZpbHRlcih0aGlzLmRhdGFEZWYpO1xuICAgICAgICB0aGlzLl9kZWZpbml0aW9ucyA9IHRoaXMuZGF0YUZpbHRlclNjYW5uZXIuZ2V0QXR0cmlidXRlcyh0aGlzLmRhdGFEZWYpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRTZWFyY2hDb25kaXRpb24oc2VhcmNoOiBzdHJpbmcsIG9wdGlvbnM6IEZpbmRPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGlmICghc2VhcmNoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXBvT3B0aW9uID0gdGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKHt9KTtcbiAgICAgICAgb3B0aW9ucy5pbmNsdWRlID0gU2VxdWVsaXplVXRpbHMubWVyZ2VJbmNsdWRlcyhcbiAgICAgICAgICAgIG9wdGlvbnMuaW5jbHVkZSBhcyBJbmNsdWRlT3B0aW9uc1tdLFxuICAgICAgICAgICAgcmVwb09wdGlvbi5pbmNsdWRlIGFzIEluY2x1ZGVPcHRpb25zW11cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIW9wdGlvbnMud2hlcmUpIHtcbiAgICAgICAgICAgIG9wdGlvbnMud2hlcmUgPSB7IFtPcC5hbmRdOiBbXSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd2hlcmUgPSBvcHRpb25zLndoZXJlO1xuICAgICAgICBjb25zdCBnZW5lcmF0ZUZpZWxkc09iamVjdCA9IHNlYXJjaFZhbHVlID0+XG4gICAgICAgICAgICB0aGlzLmdldFNlYXJjaEF0dHJpYnV0ZXMoKVxuICAgICAgICAgICAgICAgIC5tYXAoYSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmlzSnNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBhLmxpdGVyYWxLZXkgPz8gYFxcYCR7dGhpcy5tb2RlbC5uYW1lfVxcYC5cXGAke2Eua2V5fVxcYGA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogbGl0ZXJhbCBmdW5jdGlvbiBpcyBub3Qgd29ya2luZyBvZiBzb21lIHJlYXNvbi4uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogVGhpcyBpcyB0aGUgZXF1aXZhbGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMubW9kZWwuc2VxdWVsaXplLmVzY2FwZShgJSR7c2VhcmNoVmFsdWUudG9VcHBlckNhc2UoKX0lYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFV0aWxzLkxpdGVyYWwoYFVQUEVSKEpTT05fRVhUUkFDVCgke2ZpZWxkfSwgJyQnKSkgTElLRSAke3ZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbYS5rZXldOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW09wLmxpa2VdOiBgJSR7c2VhcmNoVmFsdWV9JWBcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KS5maWx0ZXIoeCA9PiAhIXgpO1xuXG4gICAgICAgIGNvbnN0IHRva2VucyA9IHNlYXJjaC5zcGxpdChcIiBcIik7XG4gICAgICAgIHdoZXJlW09wLmFuZF0ucHVzaChcbiAgICAgICAgICAgIHRva2Vucy5tYXAodCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgW09wLm9yXTogZ2VuZXJhdGVGaWVsZHNPYmplY3QodClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cG9ydHNIZWFkZXIobGFuZzogc3RyaW5nLCB0cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5fY29uZmlnLmV4cG9ydENvbHVtbnMubWFwKHggPT4gdHJhbnNsYXRlU2VydmljZS5nZXRUcmFuc2xhdGlvbihsYW5nLCBgZXhwb3J0cy4ke3h9YCkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cG9ydERhdGEoZGF0YTogRGF0YVtdKTogb2JqZWN0W10ge1xuICAgICAgICByZXR1cm4gZGF0YS5tYXAoeCA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMuX2NvbmZpZy5leHBvcnRDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3ZhbHVlLCBwcm9wXSA9IHRoaXMuZ2V0RXhwb3J0VmFsdWUoeCwga2V5KTtcbiAgICAgICAgICAgICAgICByZXN1bHRbYCR7aSsrfToke3Byb3B9YF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhwb3J0VmFsdWUoZGF0YTogRGF0YSwgcGF0aDogc3RyaW5nKTogW3Vua25vd24sIHN0cmluZ10ge1xuICAgICAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdChcIi5cIik7XG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgICAgIHJldHVybiBbZGF0YVtrZXldLCBrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGtleTogc3RyaW5nO1xuICAgICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGtleSA9IGtleXMuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbZGF0YSwga2V5XTtcbiAgICB9XG59XG4iXX0=
339
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1Qyx5Q0FBMkc7QUFDM0cseUNBQW1GO0FBR25GLG9FQUEwRDtBQUsxRCx3RUFBbUU7QUFDbkUsZ0ZBQTJFO0FBQzNFLHVEQUFzRDtBQUN0RCxpREFBNkM7QUFDN0MsbURBQStDO0FBRy9DLElBQWEsb0JBQW9CLEdBQWpDLE1BQWEsb0JBQW9CO0lBUTdCLFlBQ1ksT0FBWSxFQUNaLGlCQUFvQyxFQUNwQyxxQkFBNEMsRUFDNUMsb0JBQTBDLEVBQzFDLGdCQUFrQyxFQUNsQyxhQUE0QjtRQUw1QixZQUFPLEdBQVAsT0FBTyxDQUFLO1FBQ1osc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUVwQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQWJELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFpQixDQUFDO0lBQzFDLENBQUM7SUFhTSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQXNCLEVBQUUsT0FBcUIsRUFBRSxVQUFtQjtRQUNwRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUNqRCxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7WUFDdkMsR0FBRyxDQUFDLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUFJLEVBQUUsQ0FBQztTQUNyQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxNQUF5QixDQUFDO1NBQ3BDO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBeUIsRUFBRSxVQUFzQixFQUFFLFVBQW1COztRQUNoRyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFBLE1BQUEsU0FBUyxDQUFDLEdBQUcsMENBQUUsUUFBUSxDQUFDLFVBQW9CLENBQUMsS0FBSSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2hFLE9BQU8sTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUN0RDtRQUVELElBQUksTUFBQSxTQUFTLENBQUMsR0FBRywwQ0FBRSxNQUFNLEVBQUU7WUFDdkIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3RCLEtBQUssRUFBRTtnQkFDSCxDQUFDLGNBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDTjt3QkFDSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsVUFBVTtxQkFDdkQ7b0JBQ0QsTUFBQSxTQUFTLENBQUMsS0FBSyxtQ0FBSSxFQUFFO2lCQUN4QjthQUNKO1NBQ0osRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFxQixFQUFFLFVBQW1CO1FBQzNELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDcEMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDO1lBQ3ZDLEdBQUcsQ0FBQyxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSxFQUFFLENBQUM7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU8sTUFBeUIsQ0FBQztTQUNwQztRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFxQixFQUFFLFVBQW1CO1FBQzNELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDcEMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDO1lBQ3ZDLEdBQUcsQ0FBQyxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSxFQUFFLENBQUM7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sQ0FBQSxFQUFFO1lBQ2pCLE9BQU8sTUFBMkIsQ0FBQztTQUN0QztRQUNELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUF5QixFQUFFLE9BQXFCLEVBQUUsVUFBbUI7O1FBQzlGLE9BQU8sR0FBRyxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSxFQUFFLENBQUM7UUFDeEIsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQ3JCO1lBQ0ksR0FBRyxPQUFPO1lBQ1YsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLE1BQUEsT0FBTyxDQUFDLEtBQUssbUNBQUksRUFBRSxFQUFFLElBQUksQ0FBQztTQUMzRSxFQUNELFVBQVUsQ0FDYixDQUFDO0lBQ04sQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBb0IsRUFBRSxVQUFtQjtRQUN4RCxNQUFNLE9BQU8sR0FBRztZQUNaLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztZQUN2QyxLQUFLO1NBQ1IsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBYyxFQUFFLE9BQXFCLEVBQUUsVUFBbUI7UUFDMUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFN0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSxDQUFBLEVBQUU7WUFDakIsT0FBTyxNQUEyQixDQUFDO1NBQ3RDO1FBQ0QsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQXlCLEVBQUUsTUFBYyxFQUFFLE9BQXFCLEVBQUUsVUFBbUI7UUFDN0csTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFN0MsV0FBVyxDQUFDLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sQ0FBQSxFQUFFO1lBQ2pCLE9BQU8sTUFBMkIsQ0FBQztTQUN0QztRQUNELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0sbUJBQW1CLENBQUMsVUFBbUI7UUFDMUMsTUFBTSxRQUFRLEdBQXVCO1lBQ2pDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUNULE9BQU8sRUFBRSxDQUFDO2lCQUNiO2dCQUNELE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDL0MsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMzRCxNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDakUsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3BHLENBQUMsQ0FBQztZQUNGLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDdEcsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO2dCQUNaLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtnQkFDcEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO2FBQ3ZCLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN4QixDQUFDO1FBRUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV0RSxJQUFJLFVBQVUsRUFBRTtZQUNaLE9BQU87Z0JBQ0gsVUFBVSxFQUFFLFVBQVU7Z0JBQ3RCLE9BQU8sRUFBRSxnQ0FBYyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7YUFDbkQsQ0FBQztTQUNMO1FBRUQsT0FBTztZQUNILE9BQU8sRUFBRSxnQ0FBYyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7U0FDbkQsQ0FBQztJQUNOLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxLQUFpQjtRQUN6QyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLEVBQUUsRUFBRTtZQUNuRCxPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU0sWUFBWSxDQUFDLE1BQVc7UUFDM0IsTUFBTSxDQUFDLEdBQUcsTUFBTSxZQUFZLGlCQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzdELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksSUFBSSxZQUFZLGlCQUFLLEVBQUU7WUFDdEIsSUFBWSxDQUFDLFVBQVUsR0FBRztnQkFDdkIsR0FBRyxDQUFDO2FBQ1AsQ0FBQztTQUNMO1FBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pDLElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtnQkFDVixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGdDQUFjLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFFLElBQUksSUFBSSxZQUFZLGlCQUFLLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQVUsRUFBRSxnQ0FBYyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQ2hHO2dCQUNELFNBQVM7YUFDWjtZQUVELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNuQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxtQkFBbUI7O1FBQ3RCLE1BQU0sVUFBVSxHQUE0QixFQUFFLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3pELFVBQVUsQ0FBQyxJQUFJLENBQ1gsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuQixJQUFJLEVBQUUsQ0FBQztZQUNQLEdBQUcsRUFBRSxDQUFDO1lBQ04sTUFBTSxFQUFFLGdDQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3JELENBQUMsQ0FBQyxDQUNOLENBQUM7UUFFRixLQUFLLE1BQU0sVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2xCLFNBQVM7YUFDWjtZQUVELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBQSxVQUFVLENBQUMsb0JBQW9CLG1DQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDdkcsTUFBTSxrQkFBa0IsR0FBRyxVQUFVLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEUsVUFBVSxDQUFDLElBQUksQ0FDWCxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQ3ZDLElBQUksQ0FBQyxLQUFLLEVBQ1YsVUFBVSxDQUFDLElBQWlCLEVBQzVCLGtCQUFrQixFQUNsQixJQUFJLENBQ1AsQ0FDSixDQUFDO1NBQ0w7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBSU0sS0FBSyxDQUFDLFlBQVksQ0FDckIsYUFBZ0MsRUFDaEMsVUFBK0IsRUFDL0IsVUFBZ0MsRUFDaEMsYUFBNEIsRUFDNUIsT0FBYTs7UUFFYixJQUFJLElBQWlCLENBQUM7UUFDdEIsSUFBSSxPQUFpQixDQUFDO1FBQ3RCLElBQUksSUFBVyxDQUFDO1FBQ2hCLElBQUksSUFBWSxDQUFDO1FBRWpCLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFO1lBQ2hDLElBQUksR0FBRyxVQUFVLENBQUM7WUFDbEIsSUFBSSxHQUFHLFVBQVUsQ0FBQztZQUNsQixPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLG1DQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBdUIsQ0FBQyxDQUFDO1lBQ3pELE9BQU8sR0FBRyxhQUFhLENBQUM7U0FDM0I7YUFBTTtZQUNILElBQUksR0FBRyxhQUF1QixDQUFDO1lBQy9CLE9BQU8sR0FBSSxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsYUFBeUIsQ0FBQyxDQUFDO1lBQ3hFLElBQUksR0FBRyxVQUFVLENBQUM7WUFDbEIsSUFBSSxHQUFHLFVBQXlCLENBQUM7U0FDcEM7UUFFRCxRQUFRLElBQUksRUFBRTtZQUNWLEtBQUssZ0NBQVcsQ0FBQyxJQUFJO2dCQUNqQixPQUFPLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEQsS0FBSyxnQ0FBVyxDQUFDLElBQUk7Z0JBQ2pCLE9BQU8sTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pFLEtBQUssZ0NBQVcsQ0FBQyxHQUFHO2dCQUNoQixPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakQsS0FBSyxnQ0FBVyxDQUFDLEdBQUc7Z0JBQ2hCLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDN0Q7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFpQixFQUFFLElBQVc7UUFDcEQsT0FBTyxzQkFBUyxDQUFDLGlCQUFpQixDQUM5QixJQUFJLEVBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFZLEVBQzNDLE9BQU8sQ0FDVixDQUFDO0lBQ04sQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBaUIsRUFBRSxJQUFXLEVBQUUsSUFBWSxFQUFFLE9BQWE7UUFDakYsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUU7WUFDekMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBWTtZQUNsRCxPQUFPLEVBQUUsT0FBTztZQUNoQixJQUFJLEVBQUUsSUFBSTtTQUNiLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBaUIsRUFBRSxJQUFXO1FBQ25ELE9BQU8sTUFBTSxvQkFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFpQixFQUFFLElBQVcsRUFBRSxJQUFZLEVBQUUsT0FBYTtRQUNoRixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRTtZQUN4QyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFZO1lBQ2xELE9BQU8sRUFBRSxPQUFPO1lBQ2hCLElBQUksRUFBRSxJQUFJO1NBQ2IsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRU8sSUFBSTtRQUNSLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU0sa0JBQWtCLENBQUMsTUFBYyxFQUFFLE9BQW9CO1FBQzFELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEQsT0FBTyxDQUFDLE9BQU8sR0FBRyxnQ0FBYyxDQUFDLGFBQWEsQ0FDMUMsT0FBTyxDQUFDLE9BQTJCLEVBQ25DLFVBQVUsQ0FBQyxPQUEyQixDQUN6QyxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDaEIsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsY0FBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ3BDO1FBRUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUM1QixNQUFNLG9CQUFvQixHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTthQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7O1lBQ0wsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUNWLE1BQU0sS0FBSyxHQUFHLE1BQUEsQ0FBQyxDQUFDLFVBQVUsbUNBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBRXBFOzs7bUJBR0c7Z0JBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDNUUsT0FBTyxJQUFJLGlCQUFLLENBQUMsT0FBTyxDQUFDLHNCQUFzQixLQUFLLGdCQUFnQixLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ2hGO1lBQ0QsT0FBTztnQkFDSCxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDTCxDQUFDLGNBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFdBQVcsR0FBRztpQkFDaEM7YUFDSixDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsS0FBSyxDQUFDLGNBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNYLE9BQU87Z0JBQ0gsQ0FBQyxjQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO2FBQ25DLENBQUM7UUFDTixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVPLGdCQUFnQixDQUFDLElBQVksRUFBRSxPQUFpQixFQUFFLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0I7UUFDOUYsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFZO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoQixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtnQkFDMUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDcEM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxjQUFjLENBQUMsSUFBVSxFQUFFLElBQVk7UUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ25CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzNCO1FBRUQsSUFBSSxHQUFXLENBQUM7UUFDaEIsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsSUFBSSxJQUFJLEVBQUU7Z0JBQ04sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNwQjtTQUNKO1FBRUQsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRU8sS0FBSyxDQUFDLDJCQUEyQixDQUFDLEtBQW1CLEVBQUUsSUFBeUI7UUFDcEYsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hHLElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNmLE9BQU8sZ0NBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2xFO2FBQU0sSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO1lBQ3hCLE9BQU87Z0JBQ0gsQ0FBQyxjQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ04sS0FBSztvQkFDTCxTQUFTLENBQUMsS0FBSztpQkFDbEI7YUFDSixDQUFBO1NBQ0o7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0osQ0FBQTtBQTVYWSxvQkFBb0I7SUFEaEMsSUFBQSxtQkFBVSxHQUFFOzZDQVdzQix1Q0FBaUI7UUFDYiwrQ0FBcUI7UUFDdEIsK0JBQW9CO1FBQ3hCLDJCQUFnQjtRQUNuQix3QkFBYTtHQWQvQixvQkFBb0IsQ0E0WGhDO0FBNVhZLG9EQUFvQiIsImZpbGUiOiJsaWIvZGF0YS1maWx0ZXIucmVwb3NpdG9yeS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IEZpbmRPcHRpb25zLCBJZGVudGlmaWVyLCBJbmNsdWRlT3B0aW9ucywgTW9kZWwsIE9wLCBVdGlscywgd2hlcmUsIFdoZXJlT3B0aW9ucyB9IGZyb20gXCJzZXF1ZWxpemVcIjtcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xBZGFwdGVyLCBFeHBvcnRBZGFwdGVyLCBUcmFuc2xhdGVBZGFwdGVyIH0gZnJvbSBcIi4vYWRhcHRlcnNcIjtcbmltcG9ydCB7IEF0dHJpYnV0ZXNDb25maWcgfSBmcm9tIFwiLi9tb2RlbHMvYXR0cmlidXRlcy5tb2RlbFwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlckNvbmZpZyB9IGZyb20gXCIuL21vZGVscy9kYXRhLWZpbHRlci5tb2RlbFwiO1xuaW1wb3J0IHsgRXhwb3J0VHlwZXMgfSBmcm9tIFwiLi9tb2RlbHMvZXhwb3J0LXR5cGVzLm1vZGVsXCI7XG5pbXBvcnQgeyBPcmRlck1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL2ZpbHRlci5tb2RlbFwiO1xuaW1wb3J0IHsgUGF0aE1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL3BhdGgubW9kZWxcIjtcbmltcG9ydCB7IFNlYXJjaEF0dHJpYnV0ZXNNb2RlbCB9IGZyb20gXCIuL21vZGVscy9zZWFyY2gtYXR0cmlidXRlcy5tb2RlbFwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclVzZXJNb2RlbCB9IGZyb20gXCIuL21vZGVscy91c2VyLm1vZGVsXCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyU2Nhbm5lciB9IGZyb20gXCIuL3NjYW5uZXJzL2RhdGEtZmlsdGVyLnNjYW5uZXJcIjtcbmltcG9ydCB7IFNlcXVlbGl6ZU1vZGVsU2Nhbm5lciB9IGZyb20gXCIuL3NjYW5uZXJzL3NlcXVlbGl6ZS1tb2RlbC5zY2FubmVyXCI7XG5pbXBvcnQgeyBNLCBTZXF1ZWxpemVVdGlscyB9IGZyb20gXCIuL3NlcXVlbGl6ZS51dGlsc1wiO1xuaW1wb3J0IHsgQ3N2VXRpbHMgfSBmcm9tIFwiLi91dGlscy9jc3YudXRpbHNcIjtcbmltcG9ydCB7IFhsc3hVdGlscyB9IGZyb20gXCIuL3V0aWxzL3hsc3gudXRpbHNcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERhdGFGaWx0ZXJSZXBvc2l0b3J5PERhdGE+IHtcbiAgICBwcml2YXRlIF9jb25maWc6IERhdGFGaWx0ZXJDb25maWc7XG4gICAgcHJpdmF0ZSBfZGVmaW5pdGlvbnM6IEF0dHJpYnV0ZXNDb25maWdbXTtcblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKTogdHlwZW9mIE0ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLm1vZGVsIGFzIHR5cGVvZiBNO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGRhdGFEZWY6IGFueSxcbiAgICAgICAgcHJpdmF0ZSBkYXRhRmlsdGVyU2Nhbm5lcjogRGF0YUZpbHRlclNjYW5uZXIsXG4gICAgICAgIHByaXZhdGUgc2VxdWVsaXplTW9kZWxTY2FubmVyOiBTZXF1ZWxpemVNb2RlbFNjYW5uZXIsXG4gICAgICAgIHByaXZhdGUgYWNjZXNzQ29udHJvbEFkYXB0ZXI6IEFjY2Vzc0NvbnRyb2xBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZUFkYXB0ZXIsXG4gICAgICAgIHByaXZhdGUgZXhwb3J0QWRhcHRlcjogRXhwb3J0QWRhcHRlclxuICAgICkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZEJ5UGsoaWRlbnRpZmllcjogSWRlbnRpZmllciwgb3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEJ5UGsoaWRlbnRpZmllciwge1xuICAgICAgICAgICAgLi4udGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKGNvbmRpdGlvbnMpLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMgPz8ge30pXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyB1bmtub3duIGFzIERhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVkdWNlT2JqZWN0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRCeVBrRnJvbVVzZXIodXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgaWRlbnRpZmllcjogSWRlbnRpZmllciwgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YT4ge1xuICAgICAgICBjb25zdCByZXNvdXJjZXMgPSBhd2FpdCB0aGlzLmFjY2Vzc0NvbnRyb2xBZGFwdGVyLmdldFJlc291cmNlcyh0aGlzLl9jb25maWcubW9kZWwgYXMgYW55LCB1c2VyKTtcbiAgICAgICAgaWYgKHJlc291cmNlcy5pZHM/LmluY2x1ZGVzKGlkZW50aWZpZXIgYXMgbnVtYmVyKSB8fCByZXNvdXJjZXMuYWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kQnlQayhpZGVudGlmaWVyLCBjb25kaXRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNvdXJjZXMuaWRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmRPbmUoe1xuICAgICAgICAgICAgd2hlcmU6IHtcbiAgICAgICAgICAgICAgICBbT3AuYW5kXTogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbdGhpcy5fY29uZmlnLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGVdOiBpZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlcy53aGVyZSA/PyB7fVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgY29uZGl0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRPbmUob3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZE9uZSh7XG4gICAgICAgICAgICAuLi50aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMoY29uZGl0aW9ucyksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucyA/PyB7fSlcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIHVua25vd24gYXMgRGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yZWR1Y2VPYmplY3QocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZEFsbChvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRBbGwoe1xuICAgICAgICAgICAgLi4udGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKGNvbmRpdGlvbnMpLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMgPz8ge30pXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXJlc3VsdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIHVua25vd24gYXMgRGF0YVtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQubWFwKHggPT4gdGhpcy5yZWR1Y2VPYmplY3QoeCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kQWxsRnJvbVVzZXIodXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgb3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhW10+IHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgPz8ge307XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmRBbGwoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICB3aGVyZTogYXdhaXQgdGhpcy5tZXJnZUFjY2Vzc0NvbnRyb2xDb25kaXRpb24ob3B0aW9ucy53aGVyZSA/PyB7fSwgdXNlcilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb25kaXRpb25zXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvdW50KHdoZXJlPzogV2hlcmVPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKSxcbiAgICAgICAgICAgIHdoZXJlXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmNvdW50KG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZWFyY2goc2VhcmNoOiBzdHJpbmcsIG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIGNvbnN0IGZpbmRPcHRpb25zID0gdGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKGNvbmRpdGlvbnMpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpbmRPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRTZWFyY2hDb25kaXRpb24oc2VhcmNoLCBmaW5kT3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5tb2RlbC5maW5kQWxsKGZpbmRPcHRpb25zKTtcbiAgICAgICAgaWYgKCFyZXN1bHQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyB1bmtub3duIGFzIERhdGFbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0Lm1hcCh4ID0+IHRoaXMucmVkdWNlT2JqZWN0KHgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoRnJvbVVzZXIodXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgc2VhcmNoOiBzdHJpbmcsIG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIGNvbnN0IGZpbmRPcHRpb25zID0gdGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKGNvbmRpdGlvbnMpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpbmRPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRTZWFyY2hDb25kaXRpb24oc2VhcmNoLCBmaW5kT3B0aW9ucyk7XG5cbiAgICAgICAgZmluZE9wdGlvbnMud2hlcmUgPSBhd2FpdCB0aGlzLm1lcmdlQWNjZXNzQ29udHJvbENvbmRpdGlvbihmaW5kT3B0aW9ucy53aGVyZSwgdXNlcik7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEFsbChmaW5kT3B0aW9ucyk7XG4gICAgICAgIGlmICghcmVzdWx0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoeCA9PiB0aGlzLnJlZHVjZU9iamVjdCh4KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdlbmVyYXRlRmluZE9wdGlvbnMoY29uZGl0aW9ucz86IG9iamVjdCk6IEZpbmRPcHRpb25zIHtcbiAgICAgICAgY29uc3QgaW5jbHVkZXM6IEluY2x1ZGVPcHRpb25zW11bXSA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZmluaXRpb25zLm1hcCh4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXgucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSB4LnRyYW5zZm9ybVBhdGhDb25maWcoY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHgudHJhbnNmb3JtQXR0cmlidXRlc0NvbmZpZyhjb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsSW5jbHVkZXMgPSB4LnRyYW5zZm9ybUluY2x1ZGVzQ29uZmlnKGNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyh0aGlzLm1vZGVsLCBwYXRoLCBhZGRpdGlvbmFsSW5jbHVkZXMsIGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi50aGlzLl9jb25maWcuZ2V0Q3VzdG9tQXR0cmlidXRlc0luY2x1ZGVzKCkubWFwKHggPT4gdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXModGhpcy5tb2RlbCwge1xuICAgICAgICAgICAgICAgIHBhdGg6IHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJhbm9pZDogeC5wYXJhbm9pZCxcbiAgICAgICAgICAgICAgICBzdWJRdWVyeTogeC5zdWJRdWVyeVxuICAgICAgICAgICAgfSwgW10sIHguYXR0cmlidXRlcykpXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHRoaXMuX2NvbmZpZy50cmFuc2Zvcm1BdHRyaWJ1dGVzQ29uZmlnKGNvbmRpdGlvbnMpO1xuXG4gICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgaW5jbHVkZTogU2VxdWVsaXplVXRpbHMucmVkdWNlSW5jbHVkZXMoaW5jbHVkZXMpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluY2x1ZGU6IFNlcXVlbGl6ZVV0aWxzLnJlZHVjZUluY2x1ZGVzKGluY2x1ZGVzKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZW5lcmF0ZU9yZGVySW5jbHVkZShvcmRlcjogT3JkZXJNb2RlbCk6IEluY2x1ZGVPcHRpb25zW10ge1xuICAgICAgICBpZiAoIW9yZGVyIHx8ICFvcmRlci5jb2x1bW4gfHwgb3JkZXIuZGlyZWN0aW9uID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0T3JkZXJJbmNsdWRlcyh0aGlzLm1vZGVsLCBvcmRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZHVjZU9iamVjdChyZXN1bHQ6IGFueSk6IERhdGEge1xuICAgICAgICBjb25zdCByID0gcmVzdWx0IGluc3RhbmNlb2YgTW9kZWwgPyByZXN1bHQudG9KU09OKCkgOiByZXN1bHQ7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgdGhpcy5kYXRhRGVmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcih7fSwgeyBpc05ld1JlY29yZDogZmFsc2UgfSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YSwgcik7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICAgICAgICAgIChkYXRhIGFzIGFueSkuZGF0YVZhbHVlcyA9IHtcbiAgICAgICAgICAgICAgICAuLi5yXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBkZWYgb2YgdGhpcy5fZGVmaW5pdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChkZWYucGF0aCkge1xuICAgICAgICAgICAgICAgIGRhdGFbZGVmLmtleV0gPSBTZXF1ZWxpemVVdGlscy5yZWR1Y2VNb2RlbEZyb21QYXRoKHJlc3VsdCwgZGVmLnBhdGgucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBNb2RlbCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnNldERhdGFWYWx1ZShkZWYua2V5IGFzIGFueSwgU2VxdWVsaXplVXRpbHMucmVkdWNlTW9kZWxGcm9tUGF0aChyZXN1bHQsIGRlZi5wYXRoLnBhdGgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGFbZGVmLmtleV0gPSByZXN1bHRbZGVmLmtleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2VhcmNoQXR0cmlidXRlcygpOiBTZWFyY2hBdHRyaWJ1dGVzTW9kZWxbXSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXM6IFNlYXJjaEF0dHJpYnV0ZXNNb2RlbFtdID0gW107XG4gICAgICAgIGNvbnN0IG1vZGVsQXR0ciA9IHRoaXMuX2NvbmZpZy5nZXRTZWFyY2hhYmxlQXR0cmlidXRlcygpO1xuICAgICAgICBhdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICAuLi5tb2RlbEF0dHIubWFwKGEgPT4gKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhLFxuICAgICAgICAgICAgICAgIGtleTogYSxcbiAgICAgICAgICAgICAgICBpc0pzb246IFNlcXVlbGl6ZVV0aWxzLmlzQ29sdW1uSnNvbih0aGlzLm1vZGVsLCBhKVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgZm9yIChjb25zdCBkZWZpbml0aW9uIG9mIHRoaXMuX2RlZmluaXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIWRlZmluaXRpb24ucGF0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhdHRyID0gZGVmaW5pdGlvbi5pZ25vcmVJblNlYXJjaCA/IFtdIDogZGVmaW5pdGlvbi5zZWFyY2hhYmxlQXR0cmlidXRlcyA/PyBkZWZpbml0aW9uLmF0dHJpYnV0ZXM7XG4gICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsSW5jbHVkZXMgPSBkZWZpbml0aW9uLnRyYW5zZm9ybUluY2x1ZGVzQ29uZmlnKHt9KTtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaChcbiAgICAgICAgICAgICAgICAuLi50aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRBdHRyaWJ1dGVzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uLnBhdGggYXMgUGF0aE1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsSW5jbHVkZXMsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShkYXRhOiBEYXRhW10sIHR5cGU6IEV4cG9ydFR5cGVzLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz47XG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShoZWFkZXJzOiBzdHJpbmdbXSwgZGF0YTogYW55W10sIHR5cGU6IEV4cG9ydFR5cGVzLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz47XG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShcbiAgICAgICAgZGF0YU9ySGVhZGVyczogRGF0YVtdIHwgc3RyaW5nW10sXG4gICAgICAgIHR5cGVPckRhdGE6IEV4cG9ydFR5cGVzIHwgYW55W10sXG4gICAgICAgIGxhbmdPclR5cGU6IHN0cmluZyB8IEV4cG9ydFR5cGVzLFxuICAgICAgICBvcHRpb25zT3JMYW5nPzogYW55IHwgc3RyaW5nLFxuICAgICAgICBvcHRpb25zPzogYW55XG4gICAgKTogUHJvbWlzZTxCdWZmZXIgfCBzdHJpbmc+IHtcbiAgICAgICAgbGV0IHR5cGU6IEV4cG9ydFR5cGVzO1xuICAgICAgICBsZXQgaGVhZGVyczogc3RyaW5nW107XG4gICAgICAgIGxldCBkYXRhOiBhbnlbXTtcbiAgICAgICAgbGV0IGxhbmc6IHN0cmluZztcblxuICAgICAgICBpZiAodHlwZW9mIHR5cGVPckRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlT3JEYXRhO1xuICAgICAgICAgICAgbGFuZyA9IGxhbmdPclR5cGU7XG4gICAgICAgICAgICBoZWFkZXJzID0gYXdhaXQgdGhpcy5nZXRFeHBvcnRzSGVhZGVyKGxhbmcsIHRoaXMuX2NvbmZpZy5leHBvcnRDb2x1bW5zID8/IFtdKTtcbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLmdldEV4cG9ydERhdGEoZGF0YU9ySGVhZGVycyBhcyBEYXRhW10pO1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnNPckxhbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYW5nID0gb3B0aW9uc09yTGFuZyBhcyBzdHJpbmc7XG4gICAgICAgICAgICBoZWFkZXJzID0gIGF3YWl0IHRoaXMuZ2V0RXhwb3J0c0hlYWRlcihsYW5nLCBkYXRhT3JIZWFkZXJzIGFzIHN0cmluZ1tdKTtcbiAgICAgICAgICAgIGRhdGEgPSB0eXBlT3JEYXRhO1xuICAgICAgICAgICAgdHlwZSA9IGxhbmdPclR5cGUgYXMgRXhwb3J0VHlwZXM7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0VHlwZXMuWExTWDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb3dubG9hZFhsc3goaGVhZGVycywgZGF0YSk7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydFR5cGVzLkhUTUw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG93bmxvYWRIdG1sKGhlYWRlcnMsIGRhdGEsIGxhbmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRUeXBlcy5DU1Y6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG93bmxvYWRDc3YoaGVhZGVycywgZGF0YSk7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydFR5cGVzLlBERjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb3dubG9hZFBkZihoZWFkZXJzLCBkYXRhLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZFhsc3goaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIFhsc3hVdGlscy5hcnJheVRvWGxzeEJ1ZmZlcihcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB0aGlzLl9jb25maWcubW9kZWwuZ2V0VGFibGVOYW1lKCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgaGVhZGVyc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZEh0bWwoaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRBZGFwdGVyLmV4cG9ydEFzSHRtbChsYW5nLCB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGNvbHVtbnM6IGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZENzdihoZWFkZXJzOiBzdHJpbmdbXSwgZGF0YTogYW55W10pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgQ3N2VXRpbHMuYXJyYXlUb0NzdkJ1ZmZlcihkYXRhLCBoZWFkZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWRQZGYoaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRBZGFwdGVyLmV4cG9ydEFzUGRmKGxhbmcsIHtcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLl9jb25maWcubW9kZWwuZ2V0VGFibGVOYW1lKCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgY29sdW1uczogaGVhZGVycyxcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0KCkge1xuICAgICAgICB0aGlzLl9jb25maWcgPSB0aGlzLmRhdGFGaWx0ZXJTY2FubmVyLmdldERhdGFGaWx0ZXIodGhpcy5kYXRhRGVmKTtcbiAgICAgICAgdGhpcy5fZGVmaW5pdGlvbnMgPSB0aGlzLmRhdGFGaWx0ZXJTY2FubmVyLmdldEF0dHJpYnV0ZXModGhpcy5kYXRhRGVmKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaDogc3RyaW5nLCBvcHRpb25zOiBGaW5kT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBpZiAoIXNlYXJjaCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVwb09wdGlvbiA9IHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyh7fSk7XG4gICAgICAgIG9wdGlvbnMuaW5jbHVkZSA9IFNlcXVlbGl6ZVV0aWxzLm1lcmdlSW5jbHVkZXMoXG4gICAgICAgICAgICBvcHRpb25zLmluY2x1ZGUgYXMgSW5jbHVkZU9wdGlvbnNbXSxcbiAgICAgICAgICAgIHJlcG9PcHRpb24uaW5jbHVkZSBhcyBJbmNsdWRlT3B0aW9uc1tdXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLndoZXJlKSB7XG4gICAgICAgICAgICBvcHRpb25zLndoZXJlID0geyBbT3AuYW5kXTogW10gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdoZXJlID0gb3B0aW9ucy53aGVyZTtcbiAgICAgICAgY29uc3QgZ2VuZXJhdGVGaWVsZHNPYmplY3QgPSBzZWFyY2hWYWx1ZSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRTZWFyY2hBdHRyaWJ1dGVzKClcbiAgICAgICAgICAgICAgICAubWFwKGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5pc0pzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gYS5saXRlcmFsS2V5ID8/IGBcXGAke3RoaXMubW9kZWwubmFtZX1cXGAuXFxgJHthLmtleX1cXGBgO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGxpdGVyYWwgZnVuY3Rpb24gaXMgbm90IHdvcmtpbmcgb2Ygc29tZSByZWFzb24uLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLm1vZGVsLnNlcXVlbGl6ZS5lc2NhcGUoYCUke3NlYXJjaFZhbHVlLnRvVXBwZXJDYXNlKCl9JWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdGlscy5MaXRlcmFsKGBVUFBFUihKU09OX0VYVFJBQ1QoJHtmaWVsZH0sICckJykpIExJS0UgJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgW2Eua2V5XToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPcC5saWtlXTogYCUke3NlYXJjaFZhbHVlfSVgXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSkuZmlsdGVyKHggPT4gISF4KTtcblxuICAgICAgICBjb25zdCB0b2tlbnMgPSBzZWFyY2guc3BsaXQoXCIgXCIpO1xuICAgICAgICB3aGVyZVtPcC5hbmRdLnB1c2goXG4gICAgICAgICAgICB0b2tlbnMubWFwKHQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIFtPcC5vcl06IGdlbmVyYXRlRmllbGRzT2JqZWN0KHQpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnRzSGVhZGVyKGxhbmc6IHN0cmluZywgaGVhZGVyczogc3RyaW5nW10sIHRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChoZWFkZXJzLm1hcCh4ID0+IHRyYW5zbGF0ZVNlcnZpY2UuZ2V0VHJhbnNsYXRpb24obGFuZywgYGV4cG9ydHMuJHt4fWApKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnREYXRhKGRhdGE6IERhdGFbXSk6IG9iamVjdFtdIHtcbiAgICAgICAgcmV0dXJuIGRhdGEubWFwKHggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLl9jb25maWcuZXhwb3J0Q29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IFt2YWx1ZSwgcHJvcF0gPSB0aGlzLmdldEV4cG9ydFZhbHVlKHgsIGtleSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2Ake2krK306JHtwcm9wfWBdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cG9ydFZhbHVlKGRhdGE6IERhdGEsIHBhdGg6IHN0cmluZyk6IFt1bmtub3duLCBzdHJpbmddIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gW2RhdGFba2V5XSwga2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBrZXk6IHN0cmluZztcbiAgICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXlzLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2RhdGEsIGtleV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBtZXJnZUFjY2Vzc0NvbnRyb2xDb25kaXRpb24od2hlcmU6IFdoZXJlT3B0aW9ucywgdXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IHRoaXMuYWNjZXNzQ29udHJvbEFkYXB0ZXIuZ2V0UmVzb3VyY2VzKHRoaXMuX2NvbmZpZy5tb2RlbCBhcyBhbnksIHVzZXIpO1xuICAgICAgICBpZiAocmVzb3VyY2VzLmlkcykge1xuICAgICAgICAgICAgcmV0dXJuIFNlcXVlbGl6ZVV0aWxzLm1lcmdlV2hlcmUoeyBpZDogcmVzb3VyY2VzLmlkcyB9LCB3aGVyZSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2VzLndoZXJlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIFtPcC5hbmRdOiBbXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMud2hlcmVcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgfVxufVxuIl19
@@ -30,7 +30,7 @@ let DataFilterService = class DataFilterService {
30
30
  }
31
31
  };
32
32
  DataFilterService = __decorate([
33
- common_1.Injectable(),
33
+ (0, common_1.Injectable)(),
34
34
  __metadata("design:paramtypes", [data_filter_scanner_1.DataFilterScanner,
35
35
  sequelize_model_scanner_1.SequelizeModelScanner,
36
36
  adapters_1.AccessControlAdapter,
@@ -39,4 +39,4 @@ DataFilterService = __decorate([
39
39
  ], DataFilterService);
40
40
  exports.DataFilterService = DataFilterService;
41
41
 
42
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLWZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFrRDtBQUNsRCx5Q0FBa0Q7QUFDbEQseUNBQTJDO0FBQzNDLHlDQUE4QztBQUM5QyxxRUFBZ0U7QUFDaEUsd0VBQW1FO0FBQ25FLGdGQUEyRTtBQUczRSxJQUFhLGlCQUFpQixHQUE5QixNQUFhLGlCQUFpQjtJQUMxQixZQUNZLGlCQUFvQyxFQUNwQyxxQkFBNEMsRUFDNUMsb0JBQTBDLEVBQzFDLGdCQUFrQyxFQUNsQyxhQUE0QjtRQUo1QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ3JDLENBQUM7SUFFRyxHQUFHLENBQUksSUFBYTtRQUN2QixPQUFPLElBQUksNkNBQW9CLENBQzNCLElBQUksRUFDSixJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUksQ0FBQyxxQkFBcUIsRUFDMUIsSUFBSSxDQUFDLG9CQUFvQixFQUN6QixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxhQUFhLENBQ3JCLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQTtBQW5CWSxpQkFBaUI7SUFEN0IsbUJBQVUsRUFBRTtxQ0FHc0IsdUNBQWlCO1FBQ2IsK0NBQXFCO1FBQ3RCLCtCQUFvQjtRQUN4QiwyQkFBZ0I7UUFDbkIsd0JBQWE7R0FOL0IsaUJBQWlCLENBbUI3QjtBQW5CWSw4Q0FBaUIiLCJmaWxlIjoibGliL2RhdGEtZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sQWRhcHRlciB9IGZyb20gXCIuL2FkYXB0ZXJzXCI7XG5pbXBvcnQgeyBFeHBvcnRBZGFwdGVyIH0gZnJvbSBcIi4vYWRhcHRlcnNcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZUFkYXB0ZXIgfSBmcm9tIFwiLi9hZGFwdGVyc1wiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclJlcG9zaXRvcnkgfSBmcm9tIFwiLi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyU2Nhbm5lciB9IGZyb20gXCIuL3NjYW5uZXJzL2RhdGEtZmlsdGVyLnNjYW5uZXJcIjtcbmltcG9ydCB7IFNlcXVlbGl6ZU1vZGVsU2Nhbm5lciB9IGZyb20gXCIuL3NjYW5uZXJzL3NlcXVlbGl6ZS1tb2RlbC5zY2FubmVyXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXRhRmlsdGVyU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZGF0YUZpbHRlclNjYW5uZXI6IERhdGFGaWx0ZXJTY2FubmVyLFxuICAgICAgICBwcml2YXRlIHNlcXVlbGl6ZU1vZGVsU2Nhbm5lcjogU2VxdWVsaXplTW9kZWxTY2FubmVyLFxuICAgICAgICBwcml2YXRlIGFjY2Vzc0NvbnRyb2xBZGFwdGVyOiBBY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVBZGFwdGVyOiBUcmFuc2xhdGVBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIGV4cG9ydEFkYXB0ZXI6IEV4cG9ydEFkYXB0ZXJcbiAgICApIHt9XG5cbiAgICBwdWJsaWMgZm9yPFQ+KGRhdGE6IFR5cGU8VD4pOiBEYXRhRmlsdGVyUmVwb3NpdG9yeTxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0YUZpbHRlclJlcG9zaXRvcnk8VD4oXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgdGhpcy5kYXRhRmlsdGVyU2Nhbm5lcixcbiAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLFxuICAgICAgICAgICAgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlQWRhcHRlcixcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0QWRhcHRlclxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
42
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLWZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFrRDtBQUNsRCx5Q0FBa0Q7QUFDbEQseUNBQTJDO0FBQzNDLHlDQUE4QztBQUM5QyxxRUFBZ0U7QUFDaEUsd0VBQW1FO0FBQ25FLGdGQUEyRTtBQUczRSxJQUFhLGlCQUFpQixHQUE5QixNQUFhLGlCQUFpQjtJQUMxQixZQUNZLGlCQUFvQyxFQUNwQyxxQkFBNEMsRUFDNUMsb0JBQTBDLEVBQzFDLGdCQUFrQyxFQUNsQyxhQUE0QjtRQUo1QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ3JDLENBQUM7SUFFRyxHQUFHLENBQUksSUFBYTtRQUN2QixPQUFPLElBQUksNkNBQW9CLENBQzNCLElBQUksRUFDSixJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUksQ0FBQyxxQkFBcUIsRUFDMUIsSUFBSSxDQUFDLG9CQUFvQixFQUN6QixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxhQUFhLENBQ3JCLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQTtBQW5CWSxpQkFBaUI7SUFEN0IsSUFBQSxtQkFBVSxHQUFFO3FDQUdzQix1Q0FBaUI7UUFDYiwrQ0FBcUI7UUFDdEIsK0JBQW9CO1FBQ3hCLDJCQUFnQjtRQUNuQix3QkFBYTtHQU4vQixpQkFBaUIsQ0FtQjdCO0FBbkJZLDhDQUFpQiIsImZpbGUiOiJsaWIvZGF0YS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xBZGFwdGVyIH0gZnJvbSBcIi4vYWRhcHRlcnNcIjtcbmltcG9ydCB7IEV4cG9ydEFkYXB0ZXIgfSBmcm9tIFwiLi9hZGFwdGVyc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRlQWRhcHRlciB9IGZyb20gXCIuL2FkYXB0ZXJzXCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyUmVwb3NpdG9yeSB9IGZyb20gXCIuL2RhdGEtZmlsdGVyLnJlcG9zaXRvcnlcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJTY2FubmVyIH0gZnJvbSBcIi4vc2Nhbm5lcnMvZGF0YS1maWx0ZXIuc2Nhbm5lclwiO1xuaW1wb3J0IHsgU2VxdWVsaXplTW9kZWxTY2FubmVyIH0gZnJvbSBcIi4vc2Nhbm5lcnMvc2VxdWVsaXplLW1vZGVsLnNjYW5uZXJcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERhdGFGaWx0ZXJTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkYXRhRmlsdGVyU2Nhbm5lcjogRGF0YUZpbHRlclNjYW5uZXIsXG4gICAgICAgIHByaXZhdGUgc2VxdWVsaXplTW9kZWxTY2FubmVyOiBTZXF1ZWxpemVNb2RlbFNjYW5uZXIsXG4gICAgICAgIHByaXZhdGUgYWNjZXNzQ29udHJvbEFkYXB0ZXI6IEFjY2Vzc0NvbnRyb2xBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZUFkYXB0ZXI6IFRyYW5zbGF0ZUFkYXB0ZXIsXG4gICAgICAgIHByaXZhdGUgZXhwb3J0QWRhcHRlcjogRXhwb3J0QWRhcHRlclxuICAgICkge31cblxuICAgIHB1YmxpYyBmb3I8VD4oZGF0YTogVHlwZTxUPik6IERhdGFGaWx0ZXJSZXBvc2l0b3J5PFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhRmlsdGVyUmVwb3NpdG9yeTxUPihcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB0aGlzLmRhdGFGaWx0ZXJTY2FubmVyLFxuICAgICAgICAgICAgdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIsXG4gICAgICAgICAgICB0aGlzLmFjY2Vzc0NvbnRyb2xBZGFwdGVyLFxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVBZGFwdGVyLFxuICAgICAgICAgICAgdGhpcy5leHBvcnRBZGFwdGVyXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
@@ -1,3 +1,8 @@
1
1
  import { IncludeConfig } from "../models/include.model";
2
+ /**
3
+ * @deprecated
4
+ * Should should @Include(path, options?) instead
5
+ */
2
6
  export declare function Include(options: IncludeConfig): PropertyDecorator;
3
7
  export declare function Include(path: string, separate?: boolean): PropertyDecorator;
8
+ export declare function Include(path: string, IncludeConfig?: Omit<IncludeConfig, "path">): PropertyDecorator;
@@ -2,11 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Include = void 0;
4
4
  const attributes_handler_1 = require("../handlers/attributes.handler");
5
- function Include(optionsOrPath, separate) {
5
+ function Include(optionsOrPath, separateOrOptions) {
6
6
  return (target, propertyKey) => {
7
+ const separate = typeof separateOrOptions === "boolean" ? separateOrOptions : false;
8
+ const options = typeof separateOrOptions === "boolean" ? {} : separateOrOptions;
7
9
  // Simplify just passing the path.
8
10
  if (typeof optionsOrPath === "string") {
9
- optionsOrPath = { path: optionsOrPath, separate };
11
+ optionsOrPath = { path: optionsOrPath, separate, paranoid: true, ...options };
12
+ }
13
+ else {
14
+ if (!optionsOrPath.paranoid) {
15
+ optionsOrPath.paranoid = true;
16
+ }
10
17
  }
11
18
  const attribute = attributes_handler_1.AttributesHandler.getAttribute(target, propertyKey);
12
19
  attribute.addInclude(optionsOrPath);
@@ -15,4 +22,4 @@ function Include(optionsOrPath, separate) {
15
22
  }
16
23
  exports.Include = Include;
17
24
 
18
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kZWNvcmF0b3JzL2luY2x1ZGUuZGVjb3JhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHVFQUFtRTtBQUluRSxTQUFnQixPQUFPLENBQUMsYUFBcUMsRUFBRSxRQUFrQjtJQUM3RSxPQUFPLENBQUMsTUFBYyxFQUFFLFdBQW1CLEVBQUUsRUFBRTtRQUMzQyxrQ0FBa0M7UUFDbEMsSUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRLEVBQUU7WUFDbkMsYUFBYSxHQUFHLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsQ0FBQztTQUNyRDtRQUVELE1BQU0sU0FBUyxHQUFHLHNDQUFpQixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdEUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwQyxzQ0FBaUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQztBQUNOLENBQUM7QUFYRCwwQkFXQyIsImZpbGUiOiJsaWIvZGVjb3JhdG9ycy9pbmNsdWRlLmRlY29yYXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluY2x1ZGVDb25maWcgfSBmcm9tIFwiLi4vbW9kZWxzL2luY2x1ZGUubW9kZWxcIjtcbmltcG9ydCB7IEF0dHJpYnV0ZXNIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL2F0dHJpYnV0ZXMuaGFuZGxlclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gSW5jbHVkZShvcHRpb25zOiBJbmNsdWRlQ29uZmlnKTogUHJvcGVydHlEZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gSW5jbHVkZShwYXRoOiBzdHJpbmcsIHNlcGFyYXRlPzogYm9vbGVhbik6IFByb3BlcnR5RGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIEluY2x1ZGUob3B0aW9uc09yUGF0aDogSW5jbHVkZUNvbmZpZyB8IHN0cmluZywgc2VwYXJhdGU/OiBib29sZWFuKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuICAgIHJldHVybiAodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgLy8gU2ltcGxpZnkganVzdCBwYXNzaW5nIHRoZSBwYXRoLlxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNPclBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnNPclBhdGggPSB7IHBhdGg6IG9wdGlvbnNPclBhdGgsIHNlcGFyYXRlIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBBdHRyaWJ1dGVzSGFuZGxlci5nZXRBdHRyaWJ1dGUodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIGF0dHJpYnV0ZS5hZGRJbmNsdWRlKG9wdGlvbnNPclBhdGgpO1xuICAgICAgICBBdHRyaWJ1dGVzSGFuZGxlci5zYXZlQXR0cmlidXRlKHRhcmdldCwgYXR0cmlidXRlKTtcbiAgICB9O1xufVxuIl19
25
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kZWNvcmF0b3JzL2luY2x1ZGUuZGVjb3JhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHVFQUFtRTtBQVNuRSxTQUFnQixPQUFPLENBQUMsYUFBcUMsRUFBRSxpQkFBeUQ7SUFDcEgsT0FBTyxDQUFDLE1BQWMsRUFBRSxXQUFtQixFQUFFLEVBQUU7UUFDM0MsTUFBTSxRQUFRLEdBQUcsT0FBTyxpQkFBaUIsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDcEYsTUFBTSxPQUFPLEdBQUcsT0FBTyxpQkFBaUIsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFFaEYsa0NBQWtDO1FBQ2xDLElBQUksT0FBTyxhQUFhLEtBQUssUUFBUSxFQUFFO1lBQ25DLGFBQWEsR0FBRyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztTQUNqRjthQUFNO1lBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3pCLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2FBQ2pDO1NBQ0o7UUFFRCxNQUFNLFNBQVMsR0FBRyxzQ0FBaUIsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RFLFNBQVMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEMsc0NBQWlCLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDLENBQUM7QUFDTixDQUFDO0FBbEJELDBCQWtCQyIsImZpbGUiOiJsaWIvZGVjb3JhdG9ycy9pbmNsdWRlLmRlY29yYXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluY2x1ZGVDb25maWcgfSBmcm9tIFwiLi4vbW9kZWxzL2luY2x1ZGUubW9kZWxcIjtcbmltcG9ydCB7IEF0dHJpYnV0ZXNIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL2F0dHJpYnV0ZXMuaGFuZGxlclwiO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKiBTaG91bGQgc2hvdWxkIEBJbmNsdWRlKHBhdGgsIG9wdGlvbnM/KSBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJbmNsdWRlKG9wdGlvbnM6IEluY2x1ZGVDb25maWcpOiBQcm9wZXJ0eURlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBJbmNsdWRlKHBhdGg6IHN0cmluZywgc2VwYXJhdGU/OiBib29sZWFuKTogUHJvcGVydHlEZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gSW5jbHVkZShwYXRoOiBzdHJpbmcsIEluY2x1ZGVDb25maWc/OiBPbWl0PEluY2x1ZGVDb25maWcsIFwicGF0aFwiPik6IFByb3BlcnR5RGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIEluY2x1ZGUob3B0aW9uc09yUGF0aDogSW5jbHVkZUNvbmZpZyB8IHN0cmluZywgc2VwYXJhdGVPck9wdGlvbnM/OiBib29sZWFuIHwgT21pdDxJbmNsdWRlQ29uZmlnLCBcInBhdGhcIj4pOiBQcm9wZXJ0eURlY29yYXRvciB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBzZXBhcmF0ZSA9IHR5cGVvZiBzZXBhcmF0ZU9yT3B0aW9ucyA9PT0gXCJib29sZWFuXCIgPyBzZXBhcmF0ZU9yT3B0aW9ucyA6IGZhbHNlO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdHlwZW9mIHNlcGFyYXRlT3JPcHRpb25zID09PSBcImJvb2xlYW5cIiA/IHt9IDogc2VwYXJhdGVPck9wdGlvbnM7XG5cbiAgICAgICAgLy8gU2ltcGxpZnkganVzdCBwYXNzaW5nIHRoZSBwYXRoLlxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNPclBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnNPclBhdGggPSB7IHBhdGg6IG9wdGlvbnNPclBhdGgsIHNlcGFyYXRlLCBwYXJhbm9pZDogdHJ1ZSwgLi4ub3B0aW9ucyB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zT3JQYXRoLnBhcmFub2lkKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc09yUGF0aC5wYXJhbm9pZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBBdHRyaWJ1dGVzSGFuZGxlci5nZXRBdHRyaWJ1dGUodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIGF0dHJpYnV0ZS5hZGRJbmNsdWRlKG9wdGlvbnNPclBhdGgpO1xuICAgICAgICBBdHRyaWJ1dGVzSGFuZGxlci5zYXZlQXR0cmlidXRlKHRhcmdldCwgYXR0cmlidXRlKTtcbiAgICB9O1xufVxuIl19
@@ -7,6 +7,7 @@ export * from "./include.decorator";
7
7
  export * from "./order.decorator";
8
8
  export * from "./paranoid.decorator";
9
9
  export * from "./path.decorator";
10
+ export * from "./required.decorator";
10
11
  export * from "./seachable-attributes.decorator";
11
12
  export * from "./separate.decorator";
12
13
  export * from "./where.decorator";
@@ -19,8 +19,9 @@ __exportStar(require("./include.decorator"), exports);
19
19
  __exportStar(require("./order.decorator"), exports);
20
20
  __exportStar(require("./paranoid.decorator"), exports);
21
21
  __exportStar(require("./path.decorator"), exports);
22
+ __exportStar(require("./required.decorator"), exports);
22
23
  __exportStar(require("./seachable-attributes.decorator"), exports);
23
24
  __exportStar(require("./separate.decorator"), exports);
24
25
  __exportStar(require("./where.decorator"), exports);
25
26
 
26
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kZWNvcmF0b3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHlEQUF1QztBQUN2QyxtREFBaUM7QUFDakMsdURBQXFDO0FBQ3JDLHFEQUFtQztBQUNuQywrREFBNkM7QUFDN0Msc0RBQW9DO0FBQ3BDLG9EQUFrQztBQUNsQyx1REFBcUM7QUFDckMsbURBQWlDO0FBQ2pDLG1FQUFpRDtBQUNqRCx1REFBcUM7QUFDckMsb0RBQWtDIiwiZmlsZSI6ImxpYi9kZWNvcmF0b3JzL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYXR0cmlidXRlcy5kZWNvcmF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGEuZGVjb3JhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kaXN0YW5jZS5kZWNvcmF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4cG9ydC5kZWNvcmF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lnbm9yZS1pbi1zZWFyY2guZGVjb3JhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbmNsdWRlLmRlY29yYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vb3JkZXIuZGVjb3JhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wYXJhbm9pZC5kZWNvcmF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3BhdGguZGVjb3JhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZWFjaGFibGUtYXR0cmlidXRlcy5kZWNvcmF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NlcGFyYXRlLmRlY29yYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vd2hlcmUuZGVjb3JhdG9yXCI7XG4iXX0=
27
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kZWNvcmF0b3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHlEQUF1QztBQUN2QyxtREFBaUM7QUFDakMsdURBQXFDO0FBQ3JDLHFEQUFtQztBQUNuQywrREFBNkM7QUFDN0Msc0RBQW9DO0FBQ3BDLG9EQUFrQztBQUNsQyx1REFBcUM7QUFDckMsbURBQWlDO0FBQ2pDLHVEQUFxQztBQUNyQyxtRUFBaUQ7QUFDakQsdURBQXFDO0FBQ3JDLG9EQUFrQyIsImZpbGUiOiJsaWIvZGVjb3JhdG9ycy9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2F0dHJpYnV0ZXMuZGVjb3JhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhLmRlY29yYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGlzdGFuY2UuZGVjb3JhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leHBvcnQuZGVjb3JhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pZ25vcmUtaW4tc2VhcmNoLmRlY29yYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW5jbHVkZS5kZWNvcmF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29yZGVyLmRlY29yYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGFyYW5vaWQuZGVjb3JhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wYXRoLmRlY29yYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVxdWlyZWQuZGVjb3JhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZWFjaGFibGUtYXR0cmlidXRlcy5kZWNvcmF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NlcGFyYXRlLmRlY29yYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vd2hlcmUuZGVjb3JhdG9yXCI7XG4iXX0=
@@ -0,0 +1 @@
1
+ export declare function Required(required?: boolean): PropertyDecorator;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Required = void 0;
4
+ const attributes_handler_1 = require("../handlers/attributes.handler");
5
+ function Required(required = true) {
6
+ return (target, propertyKey) => {
7
+ var _a;
8
+ const attribute = attributes_handler_1.AttributesHandler.getAttribute(target, propertyKey);
9
+ const path = (_a = attribute.path) !== null && _a !== void 0 ? _a : {};
10
+ path.required = required;
11
+ attribute.setPath(path);
12
+ attributes_handler_1.AttributesHandler.saveAttribute(target, attribute);
13
+ };
14
+ }
15
+ exports.Required = Required;
16
+
17
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kZWNvcmF0b3JzL3JlcXVpcmVkLmRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1RUFBbUU7QUFHbkUsU0FBZ0IsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJO0lBQ3BDLE9BQU8sQ0FBQyxNQUFjLEVBQUUsV0FBbUIsRUFBRSxFQUFFOztRQUMzQyxNQUFNLFNBQVMsR0FBRyxzQ0FBaUIsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sSUFBSSxHQUFHLE1BQUEsU0FBUyxDQUFDLElBQUksbUNBQUksRUFBZ0IsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLHNDQUFpQixDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQVJELDRCQVFDIiwiZmlsZSI6ImxpYi9kZWNvcmF0b3JzL3JlcXVpcmVkLmRlY29yYXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0dHJpYnV0ZXNIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL2F0dHJpYnV0ZXMuaGFuZGxlclwiO1xuaW1wb3J0IHsgUGF0aENvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvcGF0aC5tb2RlbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWlyZWQocmVxdWlyZWQgPSB0cnVlKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuICAgIHJldHVybiAodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gQXR0cmlidXRlc0hhbmRsZXIuZ2V0QXR0cmlidXRlKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICBjb25zdCBwYXRoID0gYXR0cmlidXRlLnBhdGggPz8ge30gYXMgUGF0aENvbmZpZztcbiAgICAgICAgcGF0aC5yZXF1aXJlZCA9IHJlcXVpcmVkO1xuICAgICAgICBhdHRyaWJ1dGUuc2V0UGF0aChwYXRoKTtcbiAgICAgICAgQXR0cmlidXRlc0hhbmRsZXIuc2F2ZUF0dHJpYnV0ZSh0YXJnZXQsIGF0dHJpYnV0ZSk7XG4gICAgfTtcbn1cbiJdfQ==
@@ -2,11 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Where = void 0;
4
4
  const attributes_handler_1 = require("../handlers/attributes.handler");
5
- function Where(where, required = true) {
5
+ function Where(where, required = false) {
6
6
  return (target, propertyKey) => {
7
7
  var _a;
8
8
  const attribute = attributes_handler_1.AttributesHandler.getAttribute(target, propertyKey);
9
- const path = (_a = attribute.path) !== null && _a !== void 0 ? _a : {};
9
+ const path = (_a = attribute.path) !== null && _a !== void 0 ? _a : {
10
+ paranoid: true
11
+ };
10
12
  path.where = where;
11
13
  path.required = required;
12
14
  attribute.setPath(path);
@@ -15,4 +17,4 @@ function Where(where, required = true) {
15
17
  }
16
18
  exports.Where = Where;
17
19
 
18
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kZWNvcmF0b3JzL3doZXJlLmRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx1RUFBbUU7QUFHbkUsU0FBZ0IsS0FBSyxDQUFDLEtBQXdCLEVBQUUsUUFBUSxHQUFHLElBQUk7SUFDM0QsT0FBTyxDQUFDLE1BQWMsRUFBRSxXQUFtQixFQUFFLEVBQUU7O1FBQzNDLE1BQU0sU0FBUyxHQUFHLHNDQUFpQixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdEUsTUFBTSxJQUFJLEdBQUcsTUFBQSxTQUFTLENBQUMsSUFBSSxtQ0FBSSxFQUFnQixDQUFDO1FBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsc0NBQWlCLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDLENBQUM7QUFDTixDQUFDO0FBVEQsc0JBU0MiLCJmaWxlIjoibGliL2RlY29yYXRvcnMvd2hlcmUuZGVjb3JhdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5jbHVkZVdoZXJlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2luY2x1ZGUubW9kZWxcIjtcbmltcG9ydCB7IEF0dHJpYnV0ZXNIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL2F0dHJpYnV0ZXMuaGFuZGxlclwiO1xuaW1wb3J0IHsgUGF0aENvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvcGF0aC5tb2RlbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gV2hlcmUod2hlcmU6IEluY2x1ZGVXaGVyZU1vZGVsLCByZXF1aXJlZCA9IHRydWUpOiBQcm9wZXJ0eURlY29yYXRvciB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBBdHRyaWJ1dGVzSGFuZGxlci5nZXRBdHRyaWJ1dGUodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIGNvbnN0IHBhdGggPSBhdHRyaWJ1dGUucGF0aCA/PyB7fSBhcyBQYXRoQ29uZmlnO1xuICAgICAgICBwYXRoLndoZXJlID0gd2hlcmU7XG4gICAgICAgIHBhdGgucmVxdWlyZWQgPSByZXF1aXJlZDtcbiAgICAgICAgYXR0cmlidXRlLnNldFBhdGgocGF0aCk7XG4gICAgICAgIEF0dHJpYnV0ZXNIYW5kbGVyLnNhdmVBdHRyaWJ1dGUodGFyZ2V0LCBhdHRyaWJ1dGUpO1xuICAgIH07XG59XG4iXX0=
20
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kZWNvcmF0b3JzL3doZXJlLmRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx1RUFBbUU7QUFHbkUsU0FBZ0IsS0FBSyxDQUFDLEtBQXdCLEVBQUUsUUFBUSxHQUFHLEtBQUs7SUFDNUQsT0FBTyxDQUFDLE1BQWMsRUFBRSxXQUFtQixFQUFFLEVBQUU7O1FBQzNDLE1BQU0sU0FBUyxHQUFHLHNDQUFpQixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdEUsTUFBTSxJQUFJLEdBQUcsTUFBQSxTQUFTLENBQUMsSUFBSSxtQ0FBSTtZQUMzQixRQUFRLEVBQUUsSUFBSTtTQUNILENBQUM7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixzQ0FBaUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQztBQUNOLENBQUM7QUFYRCxzQkFXQyIsImZpbGUiOiJsaWIvZGVjb3JhdG9ycy93aGVyZS5kZWNvcmF0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmNsdWRlV2hlcmVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvaW5jbHVkZS5tb2RlbFwiO1xuaW1wb3J0IHsgQXR0cmlidXRlc0hhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvYXR0cmlidXRlcy5oYW5kbGVyXCI7XG5pbXBvcnQgeyBQYXRoQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy9wYXRoLm1vZGVsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBXaGVyZSh3aGVyZTogSW5jbHVkZVdoZXJlTW9kZWwsIHJlcXVpcmVkID0gZmFsc2UpOiBQcm9wZXJ0eURlY29yYXRvciB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBBdHRyaWJ1dGVzSGFuZGxlci5nZXRBdHRyaWJ1dGUodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIGNvbnN0IHBhdGggPSBhdHRyaWJ1dGUucGF0aCA/PyB7XG4gICAgICAgICAgICBwYXJhbm9pZDogdHJ1ZVxuICAgICAgICB9IGFzIFBhdGhDb25maWc7XG4gICAgICAgIHBhdGgud2hlcmUgPSB3aGVyZTtcbiAgICAgICAgcGF0aC5yZXF1aXJlZCA9IHJlcXVpcmVkO1xuICAgICAgICBhdHRyaWJ1dGUuc2V0UGF0aChwYXRoKTtcbiAgICAgICAgQXR0cmlidXRlc0hhbmRsZXIuc2F2ZUF0dHJpYnV0ZSh0YXJnZXQsIGF0dHJpYnV0ZSk7XG4gICAgfTtcbn1cbiJdfQ==