ontimize-web-ngx 15.6.2 → 15.7.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 (47) hide show
  1. package/esm2020/lib/components/o-service-base-component.class.mjs +10 -1
  2. package/esm2020/lib/components/table/extensions/contextmenu/o-table-context-menu.component.mjs +17 -11
  3. package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +41 -64
  4. package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.mjs +75 -8
  5. package/esm2020/lib/components/table/extensions/dialog/visible-columns/o-table-visible-columns-dialog.component.mjs +2 -2
  6. package/esm2020/lib/components/table/extensions/header/table-columns-filter/columns/o-table-columns-filter-column.component.mjs +19 -3
  7. package/esm2020/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.mjs +68 -51
  8. package/esm2020/lib/components/table/extensions/header/table-header-column-filter-icon/o-table-header-column-filter-icon.component.mjs +26 -11
  9. package/esm2020/lib/components/table/o-table-base.class.mjs +1 -1
  10. package/esm2020/lib/components/table/o-table.component.mjs +42 -5
  11. package/esm2020/lib/components/tree/o-tree-dao.service.mjs +32 -1
  12. package/esm2020/lib/components/tree/o-tree.component.mjs +144 -22
  13. package/esm2020/lib/components/tree/o-tree.datasource.mjs +28 -14
  14. package/esm2020/lib/components/tree/o-tree.module.mjs +1 -1
  15. package/esm2020/lib/components/tree/tree-node/tree-node.component.mjs +2 -20
  16. package/esm2020/lib/i18n/i18n.mjs +13 -4
  17. package/esm2020/lib/interfaces/pagination-data.interface.mjs +2 -0
  18. package/esm2020/lib/services/state/index.mjs +3 -1
  19. package/esm2020/lib/services/state/o-tree-component-state.class.mjs +1 -1
  20. package/esm2020/lib/services/state/o-tree-component-state.service.mjs +54 -14
  21. package/esm2020/lib/types/table/o-table-initialization-options.type.mjs +1 -1
  22. package/esm2020/lib/types/tree-flat-node.type.mjs +1 -1
  23. package/fesm2015/ontimize-web-ngx.mjs +578 -191
  24. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  25. package/fesm2020/ontimize-web-ngx.mjs +564 -189
  26. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  27. package/lib/components/o-service-base-component.class.d.ts +5 -1
  28. package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.d.ts +10 -3
  29. package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.d.ts +10 -3
  30. package/lib/components/table/extensions/header/o-table-header-components.d.ts +2 -2
  31. package/lib/components/table/extensions/header/table-columns-filter/columns/o-table-columns-filter-column.component.d.ts +19 -2
  32. package/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.d.ts +10 -9
  33. package/lib/components/table/extensions/header/table-header-column-filter-icon/o-table-header-column-filter-icon.component.d.ts +7 -1
  34. package/lib/components/table/o-table-base.class.d.ts +12 -3
  35. package/lib/components/table/o-table.component.d.ts +4 -2
  36. package/lib/components/tree/o-tree-dao.service.d.ts +4 -2
  37. package/lib/components/tree/o-tree.component.d.ts +21 -2
  38. package/lib/components/tree/o-tree.datasource.d.ts +3 -0
  39. package/lib/components/tree/tree-node/tree-node.component.d.ts +0 -4
  40. package/lib/i18n/i18n.d.ts +9 -0
  41. package/lib/interfaces/pagination-data.interface.d.ts +6 -0
  42. package/lib/services/state/index.d.ts +2 -0
  43. package/lib/services/state/o-tree-component-state.class.d.ts +3 -0
  44. package/lib/services/state/o-tree-component-state.service.d.ts +4 -1
  45. package/lib/types/table/o-table-initialization-options.type.d.ts +4 -0
  46. package/lib/types/tree-flat-node.type.d.ts +5 -1
  47. package/package.json +1 -1
@@ -1,5 +1,7 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { BehaviorSubject, of } from 'rxjs';
3
+ import { ServiceUtils } from '../../util/service.utils';
4
+ import { Util } from '../../util/util';
3
5
  import * as i0 from "@angular/core";
4
6
  export class OTreeDao {
5
7
  constructor() {
@@ -34,10 +36,39 @@ export class OTreeDao {
34
36
  clearTimeout(this.loadingTimer);
35
37
  }
36
38
  }
39
+ queryNodeChildren(flatNode, recursive) {
40
+ const component = recursive ? flatNode.node : flatNode.childNode;
41
+ const queryMethodName = component.pageable
42
+ ? component.paginatedQueryMethod
43
+ : component.queryMethod;
44
+ const entity = component.entity;
45
+ const service = component.getDataService();
46
+ if (!service || !(queryMethodName in service) || !entity) {
47
+ return of({ data: [] });
48
+ }
49
+ let filter;
50
+ if (component.recursive) {
51
+ const parentItem = ServiceUtils.getParentKeysFromForm(component.getParentKeysEquivalence(), component.getForm());
52
+ filter = parentItem ?? {};
53
+ filter[component.parentColumn] = flatNode.data[component.getKeys()[0]];
54
+ }
55
+ else {
56
+ filter = ServiceUtils.getFilterUsingParentKeys(flatNode.data, flatNode.childNode.getParentKeysEquivalence());
57
+ }
58
+ const queryArgs = [
59
+ filter,
60
+ Util.parseArray(component.columns, true),
61
+ component.entity,
62
+ null,
63
+ flatNode.offset ?? 0,
64
+ component.recursive ? component.queryRows : flatNode.childNode.queryRows
65
+ ];
66
+ return service[queryMethodName](...queryArgs);
67
+ }
37
68
  }
38
69
  OTreeDao.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTreeDao, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
39
70
  OTreeDao.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTreeDao });
40
71
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTreeDao, decorators: [{
41
72
  type: Injectable
42
73
  }] });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10cmVlLWRhby5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS9vLXRyZWUtZGFvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLFFBQVE7SUFEckI7UUFFWSxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFHN0MsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFHakQsbUJBQWMsR0FBb0IsRUFBRSxDQUFDO1FBRXJDLGdCQUFXLEdBQUcsSUFBSSxHQUFHLEVBQXNCLENBQUM7S0E0QjdDO0lBaENDLElBQUksSUFBSSxLQUFZLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBTW5ELFlBQVksQ0FBQyxJQUFnQjtRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksZ0JBQWdCLENBQUMsR0FBWTtRQUMvQixJQUFJLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUM7WUFDL0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVTLFVBQVU7UUFDbEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDOztxR0FyQ1UsUUFBUTt5R0FBUixRQUFROzJGQUFSLFFBQVE7a0JBRHBCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPVHJlZUZsYXROb2RlIH0gZnJvbSAnLi4vLi4vdHlwZXMvdHJlZS1mbGF0LW5vZGUudHlwZSc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9UcmVlRGFvIHtcbiAgcHJvdGVjdGVkIF9pc0xvYWRpbmdSZXN1bHRzOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBsb2FkaW5nVGltZXI7XG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuZXZlciB0aGUgZGF0YSBoYXMgYmVlbiBtb2RpZmllZC4gKi9cbiAgZGF0YUNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcbiAgc3FsVHlwZXNDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG9iamVjdD4oe30pO1xuICBnZXQgZGF0YSgpOiBhbnlbXSB7IHJldHVybiB0aGlzLmRhdGFDaGFuZ2UudmFsdWU7IH1cblxuICByb290TGV2ZWxOb2RlczogT1RyZWVGbGF0Tm9kZVtdID0gW107XG4gIC8qKiBNYXAgZnJvbSBmbGF0IG5vZGUgdG8gbmVzdGVkIG5vZGUuIFRoaXMgaGVscHMgdXMgZmluZGluZyB0aGUgbmVzdGVkIG5vZGUgdG8gYmUgbW9kaWZpZWQgKi9cbiAgZmxhdE5vZGVNYXAgPSBuZXcgTWFwPE9UcmVlRmxhdE5vZGUsIGFueT4oKTtcblxuICBzZXREYXRhQXJyYXkoZGF0YTogQXJyYXk8YW55Pikge1xuICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KGRhdGEpO1xuICAgIHJldHVybiBvZihkYXRhKTtcbiAgfVxuXG4gIGdldCBpc0xvYWRpbmdSZXN1bHRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0xvYWRpbmdSZXN1bHRzO1xuICB9XG5cbiAgc2V0IGlzTG9hZGluZ1Jlc3VsdHModmFsOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhpcy5jbGVhblRpbWVyKCk7XG4gICAgICB0aGlzLmxvYWRpbmdUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9pc0xvYWRpbmdSZXN1bHRzID0gdmFsO1xuICAgICAgfSwgNTAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhblRpbWVyKCk7XG4gICAgICB0aGlzLl9pc0xvYWRpbmdSZXN1bHRzID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhblRpbWVyKCkge1xuICAgIGlmICh0aGlzLmxvYWRpbmdUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVyKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10cmVlLWRhby5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS9vLXRyZWUtZGFvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUl2QyxNQUFNLE9BQU8sUUFBUTtJQURyQjtRQUVZLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUc3QyxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVEsRUFBRSxDQUFDLENBQUM7UUFDNUMsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUdqRCxtQkFBYyxHQUFvQixFQUFFLENBQUM7UUFFckMsZ0JBQVcsR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztLQW1FN0M7SUF2RUMsSUFBSSxJQUFJLEtBQVksT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFNbkQsWUFBWSxDQUFDLElBQWdCO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFZO1FBQy9CLElBQUksR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztZQUMvQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDVDthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRVMsVUFBVTtRQUNsQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxRQUF1QixFQUFFLFNBQWlCO1FBQzFELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUNqRSxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsUUFBUTtZQUN4QyxDQUFDLENBQUMsU0FBUyxDQUFDLG9CQUFvQjtZQUNoQyxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztRQUcxQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFRLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUVoRCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxlQUFlLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDeEQsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFxQixDQUFDLENBQUM7U0FDNUM7UUFFRCxJQUFJLE1BQU0sQ0FBQztRQUNYLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUN2QixNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDakgsTUFBTSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hFO2FBQU07WUFDTCxNQUFNLEdBQUcsWUFBWSxDQUFDLHdCQUF3QixDQUM1QyxRQUFRLENBQUMsSUFBSSxFQUNiLFFBQVEsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLEVBQUUsQ0FDOUMsQ0FBQztTQUNIO1FBRUQsTUFBTSxTQUFTLEdBQUc7WUFDaEIsTUFBTTtZQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7WUFDeEMsU0FBUyxDQUFDLE1BQU07WUFDaEIsSUFBSTtZQUNKLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUNwQixTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVM7U0FDekUsQ0FBQztRQUVGLE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFnQyxDQUFDO0lBQy9FLENBQUM7O3FHQTNFVSxRQUFRO3lHQUFSLFFBQVE7MkZBQVIsUUFBUTtrQkFEcEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9UcmVlRmxhdE5vZGUgfSBmcm9tICcuLi8uLi90eXBlcy90cmVlLWZsYXQtbm9kZS50eXBlJztcbmltcG9ydCB7IFNlcnZpY2VSZXNwb25zZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2VydmljZS1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VydmljZVV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC9zZXJ2aWNlLnV0aWxzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPVHJlZURhbyB7XG4gIHByb3RlY3RlZCBfaXNMb2FkaW5nUmVzdWx0czogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgbG9hZGluZ1RpbWVyO1xuICAvKiogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbmV2ZXIgdGhlIGRhdGEgaGFzIGJlZW4gbW9kaWZpZWQuICovXG4gIGRhdGFDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XG4gIHNxbFR5cGVzQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxvYmplY3Q+KHt9KTtcbiAgZ2V0IGRhdGEoKTogYW55W10geyByZXR1cm4gdGhpcy5kYXRhQ2hhbmdlLnZhbHVlOyB9XG5cbiAgcm9vdExldmVsTm9kZXM6IE9UcmVlRmxhdE5vZGVbXSA9IFtdO1xuICAvKiogTWFwIGZyb20gZmxhdCBub2RlIHRvIG5lc3RlZCBub2RlLiBUaGlzIGhlbHBzIHVzIGZpbmRpbmcgdGhlIG5lc3RlZCBub2RlIHRvIGJlIG1vZGlmaWVkICovXG4gIGZsYXROb2RlTWFwID0gbmV3IE1hcDxPVHJlZUZsYXROb2RlLCBhbnk+KCk7XG5cbiAgc2V0RGF0YUFycmF5KGRhdGE6IEFycmF5PGFueT4pIHtcbiAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dChkYXRhKTtcbiAgICByZXR1cm4gb2YoZGF0YSk7XG4gIH1cblxuICBnZXQgaXNMb2FkaW5nUmVzdWx0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNMb2FkaW5nUmVzdWx0cztcbiAgfVxuXG4gIHNldCBpc0xvYWRpbmdSZXN1bHRzKHZhbDogYm9vbGVhbikge1xuICAgIGlmICh2YWwpIHtcbiAgICAgIHRoaXMuY2xlYW5UaW1lcigpO1xuICAgICAgdGhpcy5sb2FkaW5nVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5faXNMb2FkaW5nUmVzdWx0cyA9IHZhbDtcbiAgICAgIH0sIDUwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYW5UaW1lcigpO1xuICAgICAgdGhpcy5faXNMb2FkaW5nUmVzdWx0cyA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYW5UaW1lcigpIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lcik7XG4gICAgfVxuICB9XG5cbiAgcXVlcnlOb2RlQ2hpbGRyZW4oZmxhdE5vZGU6IE9UcmVlRmxhdE5vZGUsIHJlY3Vyc2l2ZTpib29sZWFuKTogT2JzZXJ2YWJsZTxTZXJ2aWNlUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjb21wb25lbnQgPSByZWN1cnNpdmUgPyBmbGF0Tm9kZS5ub2RlIDogZmxhdE5vZGUuY2hpbGROb2RlO1xuICAgIGNvbnN0IHF1ZXJ5TWV0aG9kTmFtZSA9IGNvbXBvbmVudC5wYWdlYWJsZVxuICAgICAgPyBjb21wb25lbnQucGFnaW5hdGVkUXVlcnlNZXRob2RcbiAgICAgIDogY29tcG9uZW50LnF1ZXJ5TWV0aG9kO1xuXG5cbiAgICBjb25zdCBlbnRpdHkgPSBjb21wb25lbnQuZW50aXR5O1xuICAgIGNvbnN0IHNlcnZpY2U6IGFueSA9IGNvbXBvbmVudC5nZXREYXRhU2VydmljZSgpO1xuXG4gICAgaWYgKCFzZXJ2aWNlIHx8ICEocXVlcnlNZXRob2ROYW1lIGluIHNlcnZpY2UpIHx8ICFlbnRpdHkpIHtcbiAgICAgIHJldHVybiBvZih7IGRhdGE6IFtdIH0gYXMgU2VydmljZVJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyO1xuICAgIGlmIChjb21wb25lbnQucmVjdXJzaXZlKSB7XG4gICAgICBjb25zdCBwYXJlbnRJdGVtID0gU2VydmljZVV0aWxzLmdldFBhcmVudEtleXNGcm9tRm9ybShjb21wb25lbnQuZ2V0UGFyZW50S2V5c0VxdWl2YWxlbmNlKCksIGNvbXBvbmVudC5nZXRGb3JtKCkpO1xuICAgICAgZmlsdGVyID0gcGFyZW50SXRlbSA/PyB7fTtcbiAgICAgIGZpbHRlcltjb21wb25lbnQucGFyZW50Q29sdW1uXSA9IGZsYXROb2RlLmRhdGFbY29tcG9uZW50LmdldEtleXMoKVswXV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlciA9IFNlcnZpY2VVdGlscy5nZXRGaWx0ZXJVc2luZ1BhcmVudEtleXMoXG4gICAgICAgIGZsYXROb2RlLmRhdGEsXG4gICAgICAgIGZsYXROb2RlLmNoaWxkTm9kZS5nZXRQYXJlbnRLZXlzRXF1aXZhbGVuY2UoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeUFyZ3MgPSBbXG4gICAgICBmaWx0ZXIsXG4gICAgICBVdGlsLnBhcnNlQXJyYXkoY29tcG9uZW50LmNvbHVtbnMsIHRydWUpLFxuICAgICAgY29tcG9uZW50LmVudGl0eSxcbiAgICAgIG51bGwsXG4gICAgICBmbGF0Tm9kZS5vZmZzZXQgPz8gMCxcbiAgICAgIGNvbXBvbmVudC5yZWN1cnNpdmUgPyBjb21wb25lbnQucXVlcnlSb3dzIDogZmxhdE5vZGUuY2hpbGROb2RlLnF1ZXJ5Um93c1xuICAgIF07XG5cbiAgICByZXR1cm4gc2VydmljZVtxdWVyeU1ldGhvZE5hbWVdKC4uLnF1ZXJ5QXJncykgYXMgT2JzZXJ2YWJsZTxTZXJ2aWNlUmVzcG9uc2U+O1xuICB9XG5cbn1cbiJdfQ==