@senior-gestao-empresarial/angular-components 8.0.0 → 8.0.2

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.
@@ -94,10 +94,10 @@ export class GlobalFilterComponent {
94
94
  });
95
95
  }
96
96
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GlobalFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
97
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GlobalFilterComponent, selector: "erpx-global-filter", ngImport: i0, template: "@if (showComponent) {\n <div class=\"global-filter-mobile\">\n <small class=\"label-title\">\n {{ 'erpx_fnd.empresa.filters' | translate }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n class=\"mobile-trigger\"\n [attr.title]=\"mobileTooltip\"\n tabindex=\"0\"\n role=\"button\"\n >\n <em class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></em>\n {{ 'erpx_fnd.empresa.company_and_branch' | translate }}\n </a>\n </div>\n </div>\n <div class=\"global-filter-desktop\">\n <div class=\"ui-g\">\n @for (field of fields; track field.label) {\n <div class=\"ui-g-6\">\n <small class=\"label-title\">\n {{ field.label }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"\n ('erpx_fnd.empresa.selecionar_alterar'\n | translate) +\n ' ' +\n field.label\n \"\n >\n @if (field.value) {\n <em class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></em>\n {{ field.displayText }}\n } @else {\n <em class=\"fa fa-search\" aria-hidden=\"true\"></em>\n {{\n 'erpx_fnd.empresa.click_to_select'\n | translate\n }}\n }\n </a>\n </div>\n </div>\n }\n </div>\n </div>\n @if (showModal) {\n <erp-global-filter-modal\n [e070emp]=\"e070emp\"\n [e070fil]=\"e070fil\"\n (hideModal)=\"onHide($event)\"\n ></erp-global-filter-modal>\n }\n}\n", styles: [".label-title{color:#999}.global-filter-mobile,.global-filter-desktop{display:block;padding:8px 0}.global-filter-mobile a:hover,.global-filter-desktop a:hover{text-decoration:underline}.global-filter-mobile a .fa,.global-filter-desktop a .fa{margin-right:4px}.global-filter-desktop{display:none}@media (min-width: 768px){.global-filter-mobile{display:none}.global-filter-desktop{display:block;width:480px}.global-filter-desktop a{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}\n"], dependencies: [{ kind: "component", type: i1.GlobalFilterModalComponent, selector: "erp-global-filter-modal", inputs: ["e070emp", "e070fil"], outputs: ["hideModal"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
97
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GlobalFilterComponent, selector: "erpx-global-filter", ngImport: i0, template: "@if (showComponent) {\n <div class=\"global-filter-mobile\">\n <small class=\"label-title\">\n {{ 'erpx_fnd.empresa.filters' | translate }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n class=\"mobile-trigger\"\n [attr.title]=\"mobileTooltip\"\n tabindex=\"0\"\n role=\"button\"\n >\n <em class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></em>\n {{ 'erpx_fnd.empresa.company_and_branch' | translate }}\n </a>\n </div>\n </div>\n <div class=\"global-filter-desktop\">\n <div class=\"ui-g\">\n @for (field of fields; track field.label) {\n <div class=\"ui-g-6\">\n <small class=\"label-title\">\n {{ field.label }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"\n ('erpx_fnd.empresa.selecionar_alterar'\n | translate) +\n ' ' +\n field.label\n \"\n >\n @if (field.value) {\n <em\n class=\"fa fa-pencil-square-o\"\n aria-hidden=\"true\"\n ></em>\n {{ field.displayText }}\n } @else {\n <em\n class=\"fa fa-search\"\n aria-hidden=\"true\"\n ></em>\n {{\n 'erpx_fnd.empresa.click_to_select'\n | translate\n }}\n }\n </a>\n </div>\n </div>\n }\n </div>\n </div>\n @if (showModal) {\n <erp-global-filter-modal\n [e070emp]=\"e070emp\"\n [e070fil]=\"e070fil\"\n (hideModal)=\"onHide($event)\"\n ></erp-global-filter-modal>\n }\n}\n", styles: [".label-title{color:#999}.global-filter-mobile,.global-filter-desktop{display:block;padding:8px 0}.global-filter-mobile a:hover,.global-filter-desktop a:hover{text-decoration:underline}.global-filter-mobile a .fa,.global-filter-desktop a .fa{margin-right:4px}.global-filter-desktop{display:none}@media (min-width: 768px){.global-filter-mobile{display:none}.global-filter-desktop{display:block;width:480px}.global-filter-desktop a{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}\n"], dependencies: [{ kind: "component", type: i1.GlobalFilterModalComponent, selector: "erp-global-filter-modal", inputs: ["e070emp", "e070fil"], outputs: ["hideModal"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
98
98
  }
99
99
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GlobalFilterComponent, decorators: [{
100
100
  type: Component,
101
- args: [{ selector: 'erpx-global-filter', template: "@if (showComponent) {\n <div class=\"global-filter-mobile\">\n <small class=\"label-title\">\n {{ 'erpx_fnd.empresa.filters' | translate }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n class=\"mobile-trigger\"\n [attr.title]=\"mobileTooltip\"\n tabindex=\"0\"\n role=\"button\"\n >\n <em class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></em>\n {{ 'erpx_fnd.empresa.company_and_branch' | translate }}\n </a>\n </div>\n </div>\n <div class=\"global-filter-desktop\">\n <div class=\"ui-g\">\n @for (field of fields; track field.label) {\n <div class=\"ui-g-6\">\n <small class=\"label-title\">\n {{ field.label }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"\n ('erpx_fnd.empresa.selecionar_alterar'\n | translate) +\n ' ' +\n field.label\n \"\n >\n @if (field.value) {\n <em class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></em>\n {{ field.displayText }}\n } @else {\n <em class=\"fa fa-search\" aria-hidden=\"true\"></em>\n {{\n 'erpx_fnd.empresa.click_to_select'\n | translate\n }}\n }\n </a>\n </div>\n </div>\n }\n </div>\n </div>\n @if (showModal) {\n <erp-global-filter-modal\n [e070emp]=\"e070emp\"\n [e070fil]=\"e070fil\"\n (hideModal)=\"onHide($event)\"\n ></erp-global-filter-modal>\n }\n}\n", styles: [".label-title{color:#999}.global-filter-mobile,.global-filter-desktop{display:block;padding:8px 0}.global-filter-mobile a:hover,.global-filter-desktop a:hover{text-decoration:underline}.global-filter-mobile a .fa,.global-filter-desktop a .fa{margin-right:4px}.global-filter-desktop{display:none}@media (min-width: 768px){.global-filter-mobile{display:none}.global-filter-desktop{display:block;width:480px}.global-filter-desktop a{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}\n"] }]
101
+ args: [{ selector: 'erpx-global-filter', template: "@if (showComponent) {\n <div class=\"global-filter-mobile\">\n <small class=\"label-title\">\n {{ 'erpx_fnd.empresa.filters' | translate }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n class=\"mobile-trigger\"\n [attr.title]=\"mobileTooltip\"\n tabindex=\"0\"\n role=\"button\"\n >\n <em class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></em>\n {{ 'erpx_fnd.empresa.company_and_branch' | translate }}\n </a>\n </div>\n </div>\n <div class=\"global-filter-desktop\">\n <div class=\"ui-g\">\n @for (field of fields; track field.label) {\n <div class=\"ui-g-6\">\n <small class=\"label-title\">\n {{ field.label }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"\n ('erpx_fnd.empresa.selecionar_alterar'\n | translate) +\n ' ' +\n field.label\n \"\n >\n @if (field.value) {\n <em\n class=\"fa fa-pencil-square-o\"\n aria-hidden=\"true\"\n ></em>\n {{ field.displayText }}\n } @else {\n <em\n class=\"fa fa-search\"\n aria-hidden=\"true\"\n ></em>\n {{\n 'erpx_fnd.empresa.click_to_select'\n | translate\n }}\n }\n </a>\n </div>\n </div>\n }\n </div>\n </div>\n @if (showModal) {\n <erp-global-filter-modal\n [e070emp]=\"e070emp\"\n [e070fil]=\"e070fil\"\n (hideModal)=\"onHide($event)\"\n ></erp-global-filter-modal>\n }\n}\n", styles: [".label-title{color:#999}.global-filter-mobile,.global-filter-desktop{display:block;padding:8px 0}.global-filter-mobile a:hover,.global-filter-desktop a:hover{text-decoration:underline}.global-filter-mobile a .fa,.global-filter-desktop a .fa{margin-right:4px}.global-filter-desktop{display:none}@media (min-width: 768px){.global-filter-mobile{display:none}.global-filter-desktop{display:block;width:480px}.global-filter-desktop a{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}\n"] }]
102
102
  }] });
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zbnItZXJweC1hbmd1bGFyLWNvbXBvbmVudHMvZ2xvYmFsLWZpbHRlci9zcmMvbGliL2dsb2JhbC1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvc25yLWVycHgtYW5ndWxhci1jb21wb25lbnRzL2dsb2JhbC1maWx0ZXIvc3JjL2xpYi9nbG9iYWwtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQ0gsc0JBQXNCLEVBQ3RCLHFCQUFxQixHQUN4QixNQUFNLHVEQUF1RCxDQUFDO0FBQy9ELE9BQU8sRUFDSCxtQkFBbUIsR0FFdEIsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQWFqQyxNQUFNLE9BQU8scUJBQXFCO0lBTGxDO1FBTVcsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUlSLG1CQUFjLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDL0Msd0JBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbEQsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckMsMEJBQXFCLEdBQUcsQ0FB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QztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLHVCQUF1QjtRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07YUFDYixJQUFJLENBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsTUFBTSxDQUNGLENBQUMsS0FBSyxFQUEwQixFQUFFLENBQzlCLEtBQUssWUFBWSxhQUFhLENBQ3JDLENBQ0o7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixNQUFNLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FDN0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUN0RyxDQUFDO1lBQ0YsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1lBQzdDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQzsrR0E5R1EscUJBQXFCO21HQUFyQixxQkFBcUIsMERDekJsQyxnaEZBaUVBOzs0RkR4Q2EscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNJLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRW5kIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBFUlBYX0dMT0JBTF9GSUxURVJfS0VZLFxuICAgIEZpbHRlcnNTdG9yYWdlU2VydmljZSxcbn0gZnJvbSAnQHNlbmlvci1nZXN0YW8tZW1wcmVzYXJpYWwvYW5ndWxhci1jb21wb25lbnRzL3N0b3JhZ2UnO1xuaW1wb3J0IHtcbiAgICBHbG9iYWxGaWx0ZXJTZXJ2aWNlLFxuICAgIEdsb2JhbEZpbHRlckZpZWxkcyxcbn0gZnJvbSAnLi9nbG9iYWwtZmlsdGVyLnNlcnZpY2UnO1xuXG50eXBlIEZpbHRlckZpZWxkID0ge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdmFsdWU6IHVua25vd247XG4gICAgZGlzcGxheVRleHQ6IHN0cmluZyB8IG51bGw7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VycHgtZ2xvYmFsLWZpbHRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dsb2JhbC1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2dsb2JhbC1maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgR2xvYmFsRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHB1YmxpYyBzaG93TW9kYWwgPSBmYWxzZTtcbiAgICBwdWJsaWMgZTA3MGVtcDogdW5rbm93bjtcbiAgICBwdWJsaWMgZTA3MGZpbDogdW5rbm93bjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoRmlsdGVyc1N0b3JhZ2VTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEZpbHRlclNlcnZpY2UgPSBpbmplY3QoR2xvYmFsRmlsdGVyU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRFeGNsdWRlZFJvdXRlcyA9IFsnZm9yYmlkZGVuJywgJ21haW4nLCAnbm90LWZvdW5kJ107XG4gICAgcHJpdmF0ZSBfc2hvd0NvbXBvbmVudCA9IHRydWU7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBmb3JtYXR0ZWQgdG9vbHRpcCBzdHJpbmcgZm9yIG1vYmlsZSBkZXZpY2VzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbW9iaWxlVG9vbHRpcCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3QgbGluZXMgPSB0aGlzLmZpZWxkc1xuICAgICAgICAgICAgLmZpbHRlcigoZmlsdGVySXRlbSkgPT4gZmlsdGVySXRlbS52YWx1ZSlcbiAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgKGZpbHRlckl0ZW0pID0+IGAke2ZpbHRlckl0ZW0ubGFiZWx9OiAke2ZpbHRlckl0ZW0uZGlzcGxheVRleHR9YFxuICAgICAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gbGluZXMubGVuZ3RoID4gMCA/IGxpbmVzLmpvaW4oJ1xcbicpIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGZpbHRlciBmaWVsZCBjb25maWd1cmF0aW9uIGFycmF5LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZmllbGRzKCk6IEZpbHRlckZpZWxkW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgICAgICAgICAnZXJweF9mbmQuZW1wcmVzYS5lXzA3MF9lbXAnXG4gICAgICAgICAgICAgICAgKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZTA3MGVtcCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5VGV4dDogdGhpcy5lMDcwZW1wXG4gICAgICAgICAgICAgICAgICAgID8gYCR7KHRoaXMuZTA3MGVtcCBhcyB7IGxhYmVsOiBzdHJpbmcgfSkubGFiZWx9YFxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgICAgICAgICAnZXJweF9mbmQuZW1wcmVzYS5lXzA3MF9maWwnXG4gICAgICAgICAgICAgICAgKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZTA3MGZpbCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5VGV4dDogdGhpcy5lMDcwZmlsXG4gICAgICAgICAgICAgICAgICAgID8gYCR7KHRoaXMuZTA3MGZpbCBhcyB7IGxhYmVsOiBzdHJpbmcgfSkubGFiZWx9YFxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHZpc2liaWxpdHkgc3RhdGUgb2YgdGhlIGdsb2JhbCBmaWx0ZXIgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2hvd0NvbXBvbmVudCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsRmlsdGVyU2VydmljZS5zaG93Q29tcG9uZW50ICYmIHRoaXMuX3Nob3dDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvYWRGaWx0ZXJzRnJvbVN0b3JhZ2UoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplUm91dGVMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSGlkZShldmVudD86IEdsb2JhbEZpbHRlckZpZWxkcyk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dNb2RhbCA9IGZhbHNlO1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZTA3MGVtcCA9IGV2ZW50LmUwNzBlbXA7XG4gICAgICAgICAgICB0aGlzLmUwNzBmaWwgPSBldmVudC5lMDcwZmlsO1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJTZXJ2aWNlLm9uRmlsdGVyQ2hhbmdlKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZEZpbHRlcnNGcm9tU3RvcmFnZSgpOiB2b2lkIHtcbiAgICAgICAgdm9pZCB0aGlzLnN0b3JhZ2VTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0KEVSUFhfR0xPQkFMX0ZJTFRFUl9LRVkpXG4gICAgICAgICAgICAudGhlbigoZmlsdGVyRGF0YTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGF0YSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZmlsdGVyRGF0YSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZmlsdGVyRGF0YSkubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gZmlsdGVyRGF0YSBhcyBHbG9iYWxGaWx0ZXJGaWVsZHM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZTA3MGVtcCA9IGRhdGEuZTA3MGVtcDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lMDcwZmlsID0gZGF0YS5lMDcwZmlsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZVJvdXRlTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoZXZlbnQpOiBldmVudCBpcyBOYXZpZ2F0aW9uRW5kID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVkUm91dGVzID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgYF4vKCR7Wy4uLnRoaXMuZGVmYXVsdEV4Y2x1ZGVkUm91dGVzLCAuLi50aGlzLmdsb2JhbEZpbHRlclNlcnZpY2UuZXhjbHVkZWRSb3V0ZXNdLmpvaW4oJ3wnKX0pKC98JClgXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Um91dGUgPSBldmVudC51cmxBZnRlclJlZGlyZWN0cztcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG93Q29tcG9uZW50ID0gIWV4Y2x1ZGVkUm91dGVzLnRlc3QoY3VycmVudFJvdXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIkBpZiAoc2hvd0NvbXBvbmVudCkge1xuICAgIDxkaXYgY2xhc3M9XCJnbG9iYWwtZmlsdGVyLW1vYmlsZVwiPlxuICAgICAgICA8c21hbGwgY2xhc3M9XCJsYWJlbC10aXRsZVwiPlxuICAgICAgICAgICAge3sgJ2VycHhfZm5kLmVtcHJlc2EuZmlsdGVycycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dNb2RhbCA9IHRydWVcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzaG93TW9kYWwgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJzaG93TW9kYWwgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1vYmlsZS10cmlnZ2VyXCJcbiAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJtb2JpbGVUb29sdGlwXCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZW0+XG4gICAgICAgICAgICAgICAge3sgJ2VycHhfZm5kLmVtcHJlc2EuY29tcGFueV9hbmRfYnJhbmNoJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ2xvYmFsLWZpbHRlci1kZXNrdG9wXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1nXCI+XG4gICAgICAgICAgICBAZm9yIChmaWVsZCBvZiBmaWVsZHM7IHRyYWNrIGZpZWxkLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVpLWctNlwiPlxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJsYWJlbC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dNb2RhbCA9IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzaG93TW9kYWwgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJzaG93TW9kYWwgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZXJweF9mbmQuZW1wcmVzYS5zZWxlY2lvbmFyX2FsdGVyYXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2VtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWVsZC5kaXNwbGF5VGV4dCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XCJmYSBmYS1zZWFyY2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2VtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VycHhfZm5kLmVtcHJlc2EuY2xpY2tfdG9fc2VsZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgQGlmIChzaG93TW9kYWwpIHtcbiAgICAgICAgPGVycC1nbG9iYWwtZmlsdGVyLW1vZGFsXG4gICAgICAgICAgICBbZTA3MGVtcF09XCJlMDcwZW1wXCJcbiAgICAgICAgICAgIFtlMDcwZmlsXT1cImUwNzBmaWxcIlxuICAgICAgICAgICAgKGhpZGVNb2RhbCk9XCJvbkhpZGUoJGV2ZW50KVwiXG4gICAgICAgID48L2VycC1nbG9iYWwtZmlsdGVyLW1vZGFsPlxuICAgIH1cbn1cbiJdfQ==
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zbnItZXJweC1hbmd1bGFyLWNvbXBvbmVudHMvZ2xvYmFsLWZpbHRlci9zcmMvbGliL2dsb2JhbC1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvc25yLWVycHgtYW5ndWxhci1jb21wb25lbnRzL2dsb2JhbC1maWx0ZXIvc3JjL2xpYi9nbG9iYWwtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQ0gsc0JBQXNCLEVBQ3RCLHFCQUFxQixHQUN4QixNQUFNLHVEQUF1RCxDQUFDO0FBQy9ELE9BQU8sRUFDSCxtQkFBbUIsR0FFdEIsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQWFqQyxNQUFNLE9BQU8scUJBQXFCO0lBTGxDO1FBTVcsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUlSLG1CQUFjLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDL0Msd0JBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbEQsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckMsMEJBQXFCLEdBQUcsQ0FB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QztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLHVCQUF1QjtRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07YUFDYixJQUFJLENBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsTUFBTSxDQUNGLENBQUMsS0FBSyxFQUEwQixFQUFFLENBQzlCLEtBQUssWUFBWSxhQUFhLENBQ3JDLENBQ0o7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixNQUFNLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FDN0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUN0RyxDQUFDO1lBQ0YsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1lBQzdDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQzsrR0E5R1EscUJBQXFCO21HQUFyQixxQkFBcUIsMERDekJsQyx3dUZBdUVBOzs0RkQ5Q2EscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNJLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRW5kIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBFUlBYX0dMT0JBTF9GSUxURVJfS0VZLFxuICAgIEZpbHRlcnNTdG9yYWdlU2VydmljZSxcbn0gZnJvbSAnQHNlbmlvci1nZXN0YW8tZW1wcmVzYXJpYWwvYW5ndWxhci1jb21wb25lbnRzL3N0b3JhZ2UnO1xuaW1wb3J0IHtcbiAgICBHbG9iYWxGaWx0ZXJTZXJ2aWNlLFxuICAgIEdsb2JhbEZpbHRlckZpZWxkcyxcbn0gZnJvbSAnLi9nbG9iYWwtZmlsdGVyLnNlcnZpY2UnO1xuXG50eXBlIEZpbHRlckZpZWxkID0ge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdmFsdWU6IHVua25vd247XG4gICAgZGlzcGxheVRleHQ6IHN0cmluZyB8IG51bGw7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VycHgtZ2xvYmFsLWZpbHRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dsb2JhbC1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2dsb2JhbC1maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgR2xvYmFsRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHB1YmxpYyBzaG93TW9kYWwgPSBmYWxzZTtcbiAgICBwdWJsaWMgZTA3MGVtcDogdW5rbm93bjtcbiAgICBwdWJsaWMgZTA3MGZpbDogdW5rbm93bjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoRmlsdGVyc1N0b3JhZ2VTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEZpbHRlclNlcnZpY2UgPSBpbmplY3QoR2xvYmFsRmlsdGVyU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRFeGNsdWRlZFJvdXRlcyA9IFsnZm9yYmlkZGVuJywgJ21haW4nLCAnbm90LWZvdW5kJ107XG4gICAgcHJpdmF0ZSBfc2hvd0NvbXBvbmVudCA9IHRydWU7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBmb3JtYXR0ZWQgdG9vbHRpcCBzdHJpbmcgZm9yIG1vYmlsZSBkZXZpY2VzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbW9iaWxlVG9vbHRpcCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3QgbGluZXMgPSB0aGlzLmZpZWxkc1xuICAgICAgICAgICAgLmZpbHRlcigoZmlsdGVySXRlbSkgPT4gZmlsdGVySXRlbS52YWx1ZSlcbiAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgKGZpbHRlckl0ZW0pID0+IGAke2ZpbHRlckl0ZW0ubGFiZWx9OiAke2ZpbHRlckl0ZW0uZGlzcGxheVRleHR9YFxuICAgICAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gbGluZXMubGVuZ3RoID4gMCA/IGxpbmVzLmpvaW4oJ1xcbicpIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGZpbHRlciBmaWVsZCBjb25maWd1cmF0aW9uIGFycmF5LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZmllbGRzKCk6IEZpbHRlckZpZWxkW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgICAgICAgICAnZXJweF9mbmQuZW1wcmVzYS5lXzA3MF9lbXAnXG4gICAgICAgICAgICAgICAgKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZTA3MGVtcCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5VGV4dDogdGhpcy5lMDcwZW1wXG4gICAgICAgICAgICAgICAgICAgID8gYCR7KHRoaXMuZTA3MGVtcCBhcyB7IGxhYmVsOiBzdHJpbmcgfSkubGFiZWx9YFxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgICAgICAgICAnZXJweF9mbmQuZW1wcmVzYS5lXzA3MF9maWwnXG4gICAgICAgICAgICAgICAgKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZTA3MGZpbCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5VGV4dDogdGhpcy5lMDcwZmlsXG4gICAgICAgICAgICAgICAgICAgID8gYCR7KHRoaXMuZTA3MGZpbCBhcyB7IGxhYmVsOiBzdHJpbmcgfSkubGFiZWx9YFxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHZpc2liaWxpdHkgc3RhdGUgb2YgdGhlIGdsb2JhbCBmaWx0ZXIgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2hvd0NvbXBvbmVudCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsRmlsdGVyU2VydmljZS5zaG93Q29tcG9uZW50ICYmIHRoaXMuX3Nob3dDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvYWRGaWx0ZXJzRnJvbVN0b3JhZ2UoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplUm91dGVMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSGlkZShldmVudD86IEdsb2JhbEZpbHRlckZpZWxkcyk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dNb2RhbCA9IGZhbHNlO1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZTA3MGVtcCA9IGV2ZW50LmUwNzBlbXA7XG4gICAgICAgICAgICB0aGlzLmUwNzBmaWwgPSBldmVudC5lMDcwZmlsO1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJTZXJ2aWNlLm9uRmlsdGVyQ2hhbmdlKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZEZpbHRlcnNGcm9tU3RvcmFnZSgpOiB2b2lkIHtcbiAgICAgICAgdm9pZCB0aGlzLnN0b3JhZ2VTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0KEVSUFhfR0xPQkFMX0ZJTFRFUl9LRVkpXG4gICAgICAgICAgICAudGhlbigoZmlsdGVyRGF0YTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGF0YSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZmlsdGVyRGF0YSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZmlsdGVyRGF0YSkubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gZmlsdGVyRGF0YSBhcyBHbG9iYWxGaWx0ZXJGaWVsZHM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZTA3MGVtcCA9IGRhdGEuZTA3MGVtcDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lMDcwZmlsID0gZGF0YS5lMDcwZmlsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZVJvdXRlTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoZXZlbnQpOiBldmVudCBpcyBOYXZpZ2F0aW9uRW5kID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVkUm91dGVzID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgYF4vKCR7Wy4uLnRoaXMuZGVmYXVsdEV4Y2x1ZGVkUm91dGVzLCAuLi50aGlzLmdsb2JhbEZpbHRlclNlcnZpY2UuZXhjbHVkZWRSb3V0ZXNdLmpvaW4oJ3wnKX0pKC98JClgXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Um91dGUgPSBldmVudC51cmxBZnRlclJlZGlyZWN0cztcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG93Q29tcG9uZW50ID0gIWV4Y2x1ZGVkUm91dGVzLnRlc3QoY3VycmVudFJvdXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIkBpZiAoc2hvd0NvbXBvbmVudCkge1xuICAgIDxkaXYgY2xhc3M9XCJnbG9iYWwtZmlsdGVyLW1vYmlsZVwiPlxuICAgICAgICA8c21hbGwgY2xhc3M9XCJsYWJlbC10aXRsZVwiPlxuICAgICAgICAgICAge3sgJ2VycHhfZm5kLmVtcHJlc2EuZmlsdGVycycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dNb2RhbCA9IHRydWVcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzaG93TW9kYWwgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJzaG93TW9kYWwgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1vYmlsZS10cmlnZ2VyXCJcbiAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJtb2JpbGVUb29sdGlwXCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZW0+XG4gICAgICAgICAgICAgICAge3sgJ2VycHhfZm5kLmVtcHJlc2EuY29tcGFueV9hbmRfYnJhbmNoJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ2xvYmFsLWZpbHRlci1kZXNrdG9wXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1nXCI+XG4gICAgICAgICAgICBAZm9yIChmaWVsZCBvZiBmaWVsZHM7IHRyYWNrIGZpZWxkLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVpLWctNlwiPlxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJsYWJlbC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dNb2RhbCA9IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzaG93TW9kYWwgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJzaG93TW9kYWwgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZXJweF9mbmQuZW1wcmVzYS5zZWxlY2lvbmFyX2FsdGVyYXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtcGVuY2lsLXNxdWFyZS1vXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2VtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWVsZC5kaXNwbGF5VGV4dCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2VtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VycHhfZm5kLmVtcHJlc2EuY2xpY2tfdG9fc2VsZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgQGlmIChzaG93TW9kYWwpIHtcbiAgICAgICAgPGVycC1nbG9iYWwtZmlsdGVyLW1vZGFsXG4gICAgICAgICAgICBbZTA3MGVtcF09XCJlMDcwZW1wXCJcbiAgICAgICAgICAgIFtlMDcwZmlsXT1cImUwNzBmaWxcIlxuICAgICAgICAgICAgKGhpZGVNb2RhbCk9XCJvbkhpZGUoJGV2ZW50KVwiXG4gICAgICAgID48L2VycC1nbG9iYWwtZmlsdGVyLW1vZGFsPlxuICAgIH1cbn1cbiJdfQ==
@@ -2,11 +2,19 @@ import { Injectable, inject } from '@angular/core';
2
2
  import { filter, finalize, map, switchMap, take } from 'rxjs/operators';
3
3
  import { Client, FrameImpl, } from '@stomp/stompjs';
4
4
  import { BehaviorSubject, Subject } from 'rxjs';
5
- import SockJS from 'sockjs-client';
5
+ // O entry point padrão do `sockjs-client` (`lib/entry.js`) é código-fonte
6
+ // browserify que lê o `global` do Node no momento em que o módulo é avaliado.
7
+ // O bundler do Angular não injeta mais esse objeto, o que quebrava a aplicação
8
+ // no bootstrap e exigia um polyfill (`window.global = window`) em cada consumidor.
9
+ // O bundle pré-compilado em `dist/sockjs` já carrega o próprio shim de `global`,
10
+ // expondo a mesma API sem depender de nada do ambiente Node.
11
+ // @ts-expect-error O pacote só publica tipagem para o entry point padrão.
12
+ import SockJSBundle from 'sockjs-client/dist/sockjs';
6
13
  import { AsyncLock } from '@senior-gestao-empresarial/angular-components/utils';
7
14
  import { UserInformationService } from './user-information.service';
8
15
  import { PrimitiveManager } from './models';
9
16
  import * as i0 from "@angular/core";
17
+ const SockJS = SockJSBundle;
10
18
  const RECONNECT_INTERVAL_MILLISECONDS = 3000;
11
19
  const CONNECTION_TIMEOUT_MILLISECONDS = 5000;
12
20
  export class WebsocketService {
@@ -331,4 +339,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
331
339
  providedIn: 'root',
332
340
  }]
333
341
  }] });
334
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zbnItZXJweC1hbmd1bGFyLWNvbXBvbmVudHMvd2Vic29ja2V0L3NyYy9saWIvd2Vic29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBSUgsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUNuQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDaEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUc1QyxNQUFNLCtCQUErQixHQUFHLElBQUksQ0FBQztBQUM3QyxNQUFNLCtCQUErQixHQUFHLElBQUksQ0FBQztBQUs3QyxNQUFNLE9BQU8sZ0JBQWdCO0lBSDdCO1FBSXFCLDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRXhELGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNqRCxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDcEMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ25DLFdBQU0sR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQy9CLGdCQUFXLEdBQUcsSUFB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L2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaW5hbGl6ZSwgbWFwLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIElGcmFtZSxcbiAgICBTdG9tcENvbmZpZyxcbiAgICBTdG9tcFN1YnNjcmlwdGlvbixcbiAgICBDbGllbnQsXG4gICAgRnJhbWVJbXBsLFxufSBmcm9tICdAc3RvbXAvc3RvbXBqcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCBTb2NrSlMgZnJvbSAnc29ja2pzLWNsaWVudCc7XG5pbXBvcnQgeyBBc3luY0xvY2sgfSBmcm9tICdAc2VuaW9yLWdlc3Rhby1lbXByZXNhcmlhbC9hbmd1bGFyLWNvbXBvbmVudHMvdXRpbHMnO1xuaW1wb3J0IHsgVXNlckluZm9ybWF0aW9uU2VydmljZSB9IGZyb20gJy4vdXNlci1pbmZvcm1hdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFByaW1pdGl2ZU1hbmFnZXIgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBPbkV2ZW50T3B0aW9ucywgUHJpbWl0aXZlRXZlbnQgfSBmcm9tICcuL3Byb3RvY29scyc7XG5cbmNvbnN0IFJFQ09OTkVDVF9JTlRFUlZBTF9NSUxMSVNFQ09ORFMgPSAzMDAwO1xuY29uc3QgQ09OTkVDVElPTl9USU1FT1VUX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFdlYnNvY2tldFNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlckluZm9ybWF0aW9uU2VydmljZSA9IGluamVjdChVc2VySW5mb3JtYXRpb25TZXJ2aWNlKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlzY29ubmVjdGVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZWNvbm5lY3RlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJyb3IkID0gbmV3IFN1YmplY3Q8SUZyYW1lPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3Vic2NyaWJlZCQgPSBuZXcgU3ViamVjdDxQcmltaXRpdmVNYW5hZ2VyPGFueT4+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHByaW1pdGl2ZU1hbmFnZXJzOiBNYXA8c3RyaW5nLCBQcmltaXRpdmVNYW5hZ2VyPGFueT4+ID1cbiAgICAgICAgbmV3IE1hcDxzdHJpbmcsIFByaW1pdGl2ZU1hbmFnZXI8YW55Pj4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbm5lY3Rpb25Mb2NrID0gbmV3IEFzeW5jTG9jaygpO1xuXG4gICAgcHJpdmF0ZSBzdG9tcENsaWVudCE6IENsaWVudDtcbiAgICBwcml2YXRlIGRlYnVnRW5hYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBsb3N0Q29ubmVjdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBzdG9tcGpzIGRlYnVnIGxvZ3MgYW5kIGFkZGl0aW9uYWwgaW5mb1xuICAgICAqL1xuICAgIHB1YmxpYyBlbmFibGVEZWJ1Z0xvZ3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVidWdFbmFibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hbnVhbGx5IHN0YXJ0cyB0aGUgY29ubmVjdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBjb25uZWN0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb25Mb2NrLmFjcXVpcmUoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQoKSB8fCB0aGlzLmlzQ29ubmVjdGluZygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb3N0Q29ubmVjdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCBzdG9tcENvbmZpZzogU3RvbXBDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgd2ViU29ja2V0RmFjdG9yeTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNvY2tKUyh0aGlzLmdldFN1YnNjcmlwdGlvblVybCgpLCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiBDT05ORUNUSU9OX1RJTUVPVVRfTUlMTElTRUNPTkRTLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0OiBDT05ORUNUSU9OX1RJTUVPVVRfTUlMTElTRUNPTkRTLFxuICAgICAgICAgICAgICAgIHJlY29ubmVjdERlbGF5OiBSRUNPTk5FQ1RfSU5URVJWQUxfTUlMTElTRUNPTkRTLFxuICAgICAgICAgICAgICAgIGRlYnVnOiB0aGlzLmRlYnVnLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgb25Db25uZWN0OiB0aGlzLmhhbmRsZU9uQ29ubmVjdGVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgb25EaXNjb25uZWN0OiB0aGlzLmhhbmRsZU9uRGlzY29ubmVjdC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgIG9uV2ViU29ja2V0Q2xvc2U6IHRoaXMuaGFuZGxlT25XZWJTb2NrZXRDbG9zZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgIG9uU3RvbXBFcnJvcjogdGhpcy5oYW5kbGVPblN0b21wRXJyb3IuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICBvbldlYlNvY2tldEVycm9yOiB0aGlzLmhhbmRsZU9uV2ViU29ja2V0RXJyb3IuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ0Nvbm5lY3RpbmcgdGhlIFdlYnNjb2tldCcpO1xuXG4gICAgICAgICAgICB0aGlzLnN0b21wQ2xpZW50ID0gbmV3IENsaWVudChzdG9tcENvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLnN0b21wQ2xpZW50LmFjdGl2YXRlKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb25Mb2NrLnJlbGVhc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hbnVhbGx5IGRpc2Nvbm5lY3QgdGhlIHdlYnNvY2tldC4gVGhlIHJlY29ubmVjdCBsb29wIHdpbGwgYmUgc3RvcHBlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbkxvY2suYWNxdWlyZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcmltaXRpdmVNYW5hZ2VyIG9mIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGVkJC5uZXh0KGZhbHNlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc3RvbXBDbGllbnQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b21wQ2xpZW50LmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbkxvY2sucmVsZWFzZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIHdlYnNvY2tldCBpcyBjb25uZWN0ZWRcbiAgICAgKiBAcmV0dXJuIGBib29sZWFuYCByZXByZXNlbnRpbmcgaWYgdGhlIHdlYnNvY2tldCBpcyBjb25uZWN0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5zdG9tcENsaWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvbXBDbGllbnQuY29ubmVjdGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSB3ZWJzb2NrZXQgaXMgdHJpbmcgdG8gY29ubmVjdFxuICAgICAqIEByZXR1cm4gYGJvb2xlYW5gIHJlcHJlc2VudGluZyBpZiB0aGUgd2Vic29ja2V0IHN0YXR1c1xuICAgICAqL1xuICAgIHB1YmxpYyBpc0Nvbm5lY3RpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5zdG9tcENsaWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICF0aGlzLnN0b21wQ2xpZW50LmNvbm5lY3RlZCAmJiB0aGlzLnN0b21wQ2xpZW50LmFjdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCByZXNwb25zYWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuXG4gICAgICogRG8gbm90IGZvcmdldCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTxib29sZWFuPmBcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Db25uZWN0KCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWQkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZmlsdGVyKChwKSA9PiBwID09PSB0cnVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgcmVzcG9uc2FibGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC5cbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cbiAgICAgKiBAcmV0dXJuIGBPYnNlcnZhYmxlPHZvaWQ+YFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkRpc2Nvbm5lY3QoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2Nvbm5lY3RlZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgcmVzcG9uc2FibGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIHJlZXN0YWJsaXNoZWQuXG4gICAgICogRG8gbm90IGZvcmdldCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTx2b2lkPmBcbiAgICAgKi9cbiAgICBwdWJsaWMgb25SZWNvbm5lY3QoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlY29ubmVjdGVkJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCByZXNwb25zYWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gYW4gZXJyb3Igb2N1cnJlZC5cbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cbiAgICAgKiBAcmV0dXJuIGBPYnNlcnZhYmxlPEZyYW1lSW1wbD5gXG4gICAgICovXG4gICAgcHVibGljIG9uRXJyb3IoKTogT2JzZXJ2YWJsZTxJRnJhbWU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHJlc3BvbnNpYmxlIHRvIGVtaXQgYW4gZXZlbnQgd2hlbiBhIHByaW1pdGl2ZSBpcyBjYWxsZWQuXG4gICAgICogRG8gbm90IGZvcmdldCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuXG4gICAgICogQHR5cGVQYXJhbSBgPFQ+YCBPYmplY3QgdHlwZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgb2JzZXJ2YWJsZSBmb3IgdGhlIGBkYXRhYCBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0ge09uRXZlbnRPcHRpb25zfSBvcHRpb25zIENvbmZpZ3VyYXRpb25zIGZvciB0aGUgZXZlbnQuXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTxQcmltaXRpdmVFdmVudDxUPj5gIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhbiBldmVudCB3aGVuIHRoZSBzZXJ2aWNlIGNhbGxzIHRoZSBwcmltaXRpdmUuXG4gICAgICovXG4gICAgcHVibGljIG9uRXZlbnQ8VD4ob3B0aW9uczogT25FdmVudE9wdGlvbnMpOiBPYnNlcnZhYmxlPFByaW1pdGl2ZUV2ZW50PFQ+PiB7XG4gICAgICAgIGNvbnN0IHsgZG9tYWluLCBzZXJ2aWNlLCBwcmltaXRpdmUgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KGRvbWFpbiwgc2VydmljZSwgcHJpbWl0aXZlKTtcblxuICAgICAgICBjb25zdCBleGlzdGluZ1ByaW1pdGl2ZU1hbmFnZXIgPSB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmdldChrZXkpO1xuICAgICAgICBpZiAoZXhpc3RpbmdQcmltaXRpdmVNYW5hZ2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdQcmltaXRpdmVNYW5hZ2VyLmdldEV2ZW50T2JzZXJ2YWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJpbWl0aXZlTWFuYWdlciA9IG5ldyBQcmltaXRpdmVNYW5hZ2VyPFQ+KFxuICAgICAgICAgICAgZG9tYWluLFxuICAgICAgICAgICAgc2VydmljZSxcbiAgICAgICAgICAgIHByaW1pdGl2ZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLnNldChrZXksIHByaW1pdGl2ZU1hbmFnZXIpO1xuXG4gICAgICAgIHZvaWQgdGhpcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29ubmVjdCgpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVTdG9tcFN1YnNjcmlwdGlvbnMocHJpbWl0aXZlTWFuYWdlcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwcmltaXRpdmVNYW5hZ2VyXG4gICAgICAgICAgICAuZ2V0RXZlbnRPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKFxuICAgICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCB0aGlzLnVuc3Vic2NyaWJlUHJpbWl0aXZlT25GaW5hbGl6ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCByZXNwb25zaWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gYSBzdWJzY3JpcHRpb24gaXMgY3JlYXRlZCBmb3IgdGhlIHByaW1pdGl2ZS5cbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cbiAgICAgKiBAcGFyYW0ge09uRXZlbnRPcHRpb25zfSBvcHRpb25zIENvbmZpZ3VyYXRpb25zIGZvciB0aGUgZXZlbnQuXG4gICAgICogT2JzZXJ2YWJsZSByZXNwb25zw6F2ZWwgcG9yIGVtaXRpciB1bWEgbm90aWZpY2HDp8OjbyBhcMOzcyBvIHN1YnNjcmliZSBkbyBldmVudG8gcGVsYSBwcmltZWlyYSB2ZXouXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTxib29sZWFuPmAgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIHNlcnZpY2UgY2FsbHMgdGhlIHByaW1pdGl2ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25TdWJzY3JpYmUob3B0aW9uczogT25FdmVudE9wdGlvbnMpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgeyBkb21haW4sIHNlcnZpY2UsIHByaW1pdGl2ZSB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5idWlsZFByaW1pdGl2ZU1hbmFnZXJLZXkoZG9tYWluLCBzZXJ2aWNlLCBwcmltaXRpdmUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm9uQ29ubmVjdCgpLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1ByaW1pdGl2ZU1hbmFnZXIgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmdldChrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1ByaW1pdGl2ZU1hbmFnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nUHJpbWl0aXZlTWFuYWdlclxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldFN1YnNjcmlwdGlvbk9ic2VydmFibGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3Vic2NyaWJlZCQuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChwcmltaXRpdmVNYW5hZ2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLmRvbWFpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnByaW1pdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPT09IGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVidWcobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kZWJ1Z0VuYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUud2FybignV1MgZGVidWc6ICcgKyBtZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbmZvKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1dTIGluZm86ICcgKyBtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU9uQ29ubmVjdGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluZm8oJ1dlYnNjb2tldCBjb25uZWN0ZWQnKTtcblxuICAgICAgICB0aGlzLmNvbm5lY3RlZCQubmV4dCh0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMubG9zdENvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuaW5mbygnV2Vic2Nva2V0IHJlY29ubmVjdGVkLCByZWNyaWF0aW5nIHN1YnNjcmlwdGlvbnMnKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVjb25uZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU9uRGlzY29ubmVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbmZvKCdXZWJzY29rZXQgZGlzY29ubmVjdGVkJyk7XG5cbiAgICAgICAgdGhpcy5jb25uZWN0ZWQkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3RlZCQubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlT25XZWJTb2NrZXRDbG9zZShkYXRhOiBDbG9zZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChkYXRhPy5yZWFzb24gPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLmxvc3RDb25uZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gRXhlY3V0b3JTdWJzY3JpYmFibGVDaGFubmVsJyxcbiAgICAgICAgICAgICAgICBuZXcgRnJhbWVJbXBsKHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkYXRhLnJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhPy5yZWFzb24/LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZ28gYXdheScpICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5sb3N0Q29ubmVjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFxuICAgICAgICAgICAgICAgICdBdXRoZW50aWNhdGlvbkVycm9yJyxcbiAgICAgICAgICAgICAgICBuZXcgRnJhbWVJbXBsKHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkYXRhLnJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGE/LnJlYXNvbj8udG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjYW5ub3QgY29ubmVjdCB0byBzZXJ2ZXInKSAhPT1cbiAgICAgICAgICAgIC0xXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5sb3N0Q29ubmVjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFxuICAgICAgICAgICAgICAgICdDb25uZWN0aW9uRXJyb3InLFxuICAgICAgICAgICAgICAgIG5ldyBGcmFtZUltcGwoe1xuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiBkYXRhLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRhdGEucmVhc29uLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEud2FzQ2xlYW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9zdENvbm5lY3Rpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlT25TdG9tcEVycm9yKGRhdGE6IElGcmFtZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKCdTdG9tcEVycm9yJywgZGF0YSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNBdXRoZW50aWNhdGlvbkVycm9yKGRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLmluZm8oJ0F1dGhlbnRpY2F0aW9uIGVycm9yLCByZWNyaWF0aW5nIHN1YnNjcmlwdGlvbnMnKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVjb25uZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQXV0aGVudGljYXRpb25FcnJvcihkYXRhOiBJRnJhbWUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZGF0YT8uaGVhZGVycz8uWydtZXNzYWdlJ107XG4gICAgICAgIGlmICghZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZm9yYmlkZGVuZXhjZXB0aW9uJykgIT09IC0xO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlT25XZWJTb2NrZXRFcnJvcihkYXRhOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ1dlYlNvY2tldEVycm9yJywgZGF0YSBhcyBJRnJhbWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRXJyb3Iob3JpZ2luOiBzdHJpbmcsIGRhdGE6IElGcmFtZSk6IHZvaWQge1xuICAgICAgICBjb25zb2xlLmVycm9yKG9yaWdpbiwgZGF0YSk7XG4gICAgICAgIHRoaXMuZXJyb3IkLm5leHQoZGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVSZWNvbm5lY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9zdENvbm5lY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWNvbm5lY3RQcmltaXRpdmVzKCk7XG4gICAgICAgIHRoaXMucmVjb25uZWN0ZWQkLm5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlY29ubmVjdFByaW1pdGl2ZXMoKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgcHJpbWl0aXZlTWFuYWdlciBvZiB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVN0b21wU3Vic2NyaXB0aW9ucyhwcmltaXRpdmVNYW5hZ2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRTdWJzY3JpcHRpb25VcmxXaXRoVG9rZW4oXG4gICAgICAgIGRvbWFpbjogc3RyaW5nLFxuICAgICAgICBzZXJ2aWNlOiBzdHJpbmcsXG4gICAgICAgIHByaW1pdGl2ZTogc3RyaW5nXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgYXV0aFRva2VuID0gdGhpcy51c2VySW5mb3JtYXRpb25TZXJ2aWNlLmdldEF1dGhUb2tlbigpO1xuICAgICAgICBjb25zdCB0ZW5hbnQgPSB0aGlzLnVzZXJJbmZvcm1hdGlvblNlcnZpY2UuZ2V0VGVuYW50RG9tYWluKCk7XG4gICAgICAgIHJldHVybiBgL3RvcGljLyR7dGVuYW50fS8ke2F1dGhUb2tlbn0vJHtkb21haW59LyR7c2VydmljZX0vJHtwcmltaXRpdmV9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1YnNjcmlwdGlvblVybFdpdGhvdXRUb2tlbihcbiAgICAgICAgZG9tYWluOiBzdHJpbmcsXG4gICAgICAgIHNlcnZpY2U6IHN0cmluZyxcbiAgICAgICAgcHJpbWl0aXZlOiBzdHJpbmdcbiAgICApOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB0ZW5hbnQgPSB0aGlzLnVzZXJJbmZvcm1hdGlvblNlcnZpY2UuZ2V0VGVuYW50RG9tYWluKCk7XG4gICAgICAgIHJldHVybiBgL3RvcGljLyR7dGVuYW50fS8ke2RvbWFpbn0vJHtzZXJ2aWNlfS8ke3ByaW1pdGl2ZX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KFxuICAgICAgICBkb21haW46IHN0cmluZyxcbiAgICAgICAgc2VydmljZTogc3RyaW5nLFxuICAgICAgICBwcmltaXRpdmU6IHN0cmluZ1xuICAgICk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtkb21haW59LyR7c2VydmljZX0vJHtwcmltaXRpdmV9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHVuc3Vic2NyaWJlUHJpbWl0aXZlT25GaW5hbGl6ZShcbiAgICAgICAgcHJpbWl0aXZlTWFuYWdlcjogUHJpbWl0aXZlTWFuYWdlcjxhbnk+XG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHByaW1pdGl2ZU1hbmFnZXIudW5zdWJzY3JpYmUoKTtcblxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkUHJpbWl0aXZlTWFuYWdlcktleShcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZG9tYWluLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5wcmltaXRpdmVcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmRlbGV0ZShrZXkpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdElmTm9Nb3JlT2JzZXJ2YWJsZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGRpc2Nvbm5lY3RJZk5vTW9yZU9ic2VydmFibGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5nZXRPYnNlcnZlcnNDb3VudCgpID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKFxuICAgICAgICAgICAgICAgICdNYW51YWxseSBkaXNjb25uZWN0aW5nIGJlY2F1c2UgdGhlcmUgYXJlIG5vIG1vcmUgb2JzZXJ2ZXJzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPYnNlcnZlcnNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICBsZXQgb2JzZXJ2ZXJzQ291bnQgPSAwO1xuXG4gICAgICAgIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMuZm9yRWFjaCgocHJpbWl0aXZlTWFuYWdlcikgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXJzQ291bnQgKz0gcHJpbWl0aXZlTWFuYWdlci5nZXRPYnNlcnZlcnNDb3VudCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gb2JzZXJ2ZXJzQ291bnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVTdG9tcFN1YnNjcmlwdGlvbjxUPihcbiAgICAgICAgZGVzdGluYXRpb246IHN0cmluZyxcbiAgICAgICAgcHJpbWl0aXZlTWFuYWdlcjogUHJpbWl0aXZlTWFuYWdlcjxUPlxuICAgICk6IFN0b21wU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvbXBDbGllbnQuc3Vic2NyaWJlKGRlc3RpbmF0aW9uLCAobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBKU09OLnBhcnNlKG1lc3NhZ2UuYm9keSB8fCAne30nKTtcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZmlyZUV2ZW50KGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVTdG9tcFN1YnNjcmlwdGlvbnM8VD4oXG4gICAgICAgIHByaW1pdGl2ZU1hbmFnZXI6IFByaW1pdGl2ZU1hbmFnZXI8VD5cbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uVXJsV2l0aFRva2VuID0gdGhpcy5idWlsZFN1YnNjcmlwdGlvblVybFdpdGhUb2tlbihcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZG9tYWluLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5wcmltaXRpdmVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uVXJsV2l0aG91dFRva2VuID0gdGhpcy5nZXRTdWJzY3JpcHRpb25VcmxXaXRob3V0VG9rZW4oXG4gICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLmRvbWFpbixcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuc2VydmljZSxcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIucHJpbWl0aXZlXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgc3RvbXBTdWJzY3JpcHRpb25XaXRoVG9rZW4gPSB0aGlzLmNyZWF0ZVN0b21wU3Vic2NyaXB0aW9uKFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uVXJsV2l0aFRva2VuLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlclxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzdG9tcFN1YnNjcmlwdGlvbldpdGhvdXRUb2tlbiA9IHRoaXMuY3JlYXRlU3RvbXBTdWJzY3JpcHRpb24oXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25VcmxXaXRob3V0VG9rZW4sXG4gICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyXG4gICAgICAgICk7XG4gICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuc3Vic2NyaWJlKFxuICAgICAgICAgICAgc3RvbXBTdWJzY3JpcHRpb25XaXRoVG9rZW4sXG4gICAgICAgICAgICBzdG9tcFN1YnNjcmlwdGlvbldpdGhvdXRUb2tlblxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN1YnNjcmliZWQkLm5leHQocHJpbWl0aXZlTWFuYWdlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdWJzY3JpcHRpb25VcmwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMudXNlckluZm9ybWF0aW9uU2VydmljZS5nZXRXZWJTb2NrZXRVcmwoKX0vc3Vic2NyaXB0aW9uYDtcbiAgICB9XG59XG4iXX0=
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zbnItZXJweC1hbmd1bGFyLWNvbXBvbmVudHMvd2Vic29ja2V0L3NyYy9saWIvd2Vic29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBSUgsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRTVELDBFQUEwRTtBQUMxRSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLG1GQUFtRjtBQUNuRixpRkFBaUY7QUFDakYsNkRBQTZEO0FBQzdELDBFQUEwRTtBQUMxRSxPQUFPLFlBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDaEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUc1QyxNQUFNLE1BQU0sR0FBRyxZQUFtQyxDQUFDO0FBRW5ELE1BQU0sK0JBQStCLEdBQUcsSUFBSSxDQUFDO0FBQzdDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxDQUFDO0FBSzdDLE1BQU0sT0FBTyxnQkFBZ0I7SUFIN0I7UUFJcUIsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFeEQsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2pE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Ozs0RkFFVCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIGZpbmFsaXplLCBtYXAsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgSUZyYW1lLFxuICAgIFN0b21wQ29uZmlnLFxuICAgIFN0b21wU3Vic2NyaXB0aW9uLFxuICAgIENsaWVudCxcbiAgICBGcmFtZUltcGwsXG59IGZyb20gJ0BzdG9tcC9zdG9tcGpzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHR5cGUgU29ja0pTU3RhdGljIGZyb20gJ3NvY2tqcy1jbGllbnQnO1xuLy8gTyBlbnRyeSBwb2ludCBwYWRyw6NvIGRvIGBzb2NranMtY2xpZW50YCAoYGxpYi9lbnRyeS5qc2ApIMOpIGPDs2RpZ28tZm9udGVcbi8vIGJyb3dzZXJpZnkgcXVlIGzDqiBvIGBnbG9iYWxgIGRvIE5vZGUgbm8gbW9tZW50byBlbSBxdWUgbyBtw7NkdWxvIMOpIGF2YWxpYWRvLlxuLy8gTyBidW5kbGVyIGRvIEFuZ3VsYXIgbsOjbyBpbmpldGEgbWFpcyBlc3NlIG9iamV0bywgbyBxdWUgcXVlYnJhdmEgYSBhcGxpY2HDp8Ojb1xuLy8gbm8gYm9vdHN0cmFwIGUgZXhpZ2lhIHVtIHBvbHlmaWxsIChgd2luZG93Lmdsb2JhbCA9IHdpbmRvd2ApIGVtIGNhZGEgY29uc3VtaWRvci5cbi8vIE8gYnVuZGxlIHByw6ktY29tcGlsYWRvIGVtIGBkaXN0L3NvY2tqc2AgasOhIGNhcnJlZ2EgbyBwcsOzcHJpbyBzaGltIGRlIGBnbG9iYWxgLFxuLy8gZXhwb25kbyBhIG1lc21hIEFQSSBzZW0gZGVwZW5kZXIgZGUgbmFkYSBkbyBhbWJpZW50ZSBOb2RlLlxuLy8gQHRzLWV4cGVjdC1lcnJvciBPIHBhY290ZSBzw7MgcHVibGljYSB0aXBhZ2VtIHBhcmEgbyBlbnRyeSBwb2ludCBwYWRyw6NvLlxuaW1wb3J0IFNvY2tKU0J1bmRsZSBmcm9tICdzb2NranMtY2xpZW50L2Rpc3Qvc29ja2pzJztcbmltcG9ydCB7IEFzeW5jTG9jayB9IGZyb20gJ0BzZW5pb3ItZ2VzdGFvLWVtcHJlc2FyaWFsL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5pbXBvcnQgeyBVc2VySW5mb3JtYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi91c2VyLWluZm9ybWF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJpbWl0aXZlTWFuYWdlciB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IE9uRXZlbnRPcHRpb25zLCBQcmltaXRpdmVFdmVudCB9IGZyb20gJy4vcHJvdG9jb2xzJztcblxuY29uc3QgU29ja0pTID0gU29ja0pTQnVuZGxlIGFzIHR5cGVvZiBTb2NrSlNTdGF0aWM7XG5cbmNvbnN0IFJFQ09OTkVDVF9JTlRFUlZBTF9NSUxMSVNFQ09ORFMgPSAzMDAwO1xuY29uc3QgQ09OTkVDVElPTl9USU1FT1VUX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFdlYnNvY2tldFNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlckluZm9ybWF0aW9uU2VydmljZSA9IGluamVjdChVc2VySW5mb3JtYXRpb25TZXJ2aWNlKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlzY29ubmVjdGVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZWNvbm5lY3RlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJyb3IkID0gbmV3IFN1YmplY3Q8SUZyYW1lPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3Vic2NyaWJlZCQgPSBuZXcgU3ViamVjdDxQcmltaXRpdmVNYW5hZ2VyPGFueT4+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHByaW1pdGl2ZU1hbmFnZXJzOiBNYXA8c3RyaW5nLCBQcmltaXRpdmVNYW5hZ2VyPGFueT4+ID1cbiAgICAgICAgbmV3IE1hcDxzdHJpbmcsIFByaW1pdGl2ZU1hbmFnZXI8YW55Pj4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbm5lY3Rpb25Mb2NrID0gbmV3IEFzeW5jTG9jaygpO1xuXG4gICAgcHJpdmF0ZSBzdG9tcENsaWVudCE6IENsaWVudDtcbiAgICBwcml2YXRlIGRlYnVnRW5hYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBsb3N0Q29ubmVjdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBzdG9tcGpzIGRlYnVnIGxvZ3MgYW5kIGFkZGl0aW9uYWwgaW5mb1xuICAgICAqL1xuICAgIHB1YmxpYyBlbmFibGVEZWJ1Z0xvZ3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVidWdFbmFibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hbnVhbGx5IHN0YXJ0cyB0aGUgY29ubmVjdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBjb25uZWN0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb25Mb2NrLmFjcXVpcmUoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQoKSB8fCB0aGlzLmlzQ29ubmVjdGluZygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb3N0Q29ubmVjdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCBzdG9tcENvbmZpZzogU3RvbXBDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgd2ViU29ja2V0RmFjdG9yeTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNvY2tKUyh0aGlzLmdldFN1YnNjcmlwdGlvblVybCgpLCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiBDT05ORUNUSU9OX1RJTUVPVVRfTUlMTElTRUNPTkRTLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0OiBDT05ORUNUSU9OX1RJTUVPVVRfTUlMTElTRUNPTkRTLFxuICAgICAgICAgICAgICAgIHJlY29ubmVjdERlbGF5OiBSRUNPTk5FQ1RfSU5URVJWQUxfTUlMTElTRUNPTkRTLFxuICAgICAgICAgICAgICAgIGRlYnVnOiB0aGlzLmRlYnVnLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgb25Db25uZWN0OiB0aGlzLmhhbmRsZU9uQ29ubmVjdGVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgb25EaXNjb25uZWN0OiB0aGlzLmhhbmRsZU9uRGlzY29ubmVjdC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgIG9uV2ViU29ja2V0Q2xvc2U6IHRoaXMuaGFuZGxlT25XZWJTb2NrZXRDbG9zZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgIG9uU3RvbXBFcnJvcjogdGhpcy5oYW5kbGVPblN0b21wRXJyb3IuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICBvbldlYlNvY2tldEVycm9yOiB0aGlzLmhhbmRsZU9uV2ViU29ja2V0RXJyb3IuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ0Nvbm5lY3RpbmcgdGhlIFdlYnNjb2tldCcpO1xuXG4gICAgICAgICAgICB0aGlzLnN0b21wQ2xpZW50ID0gbmV3IENsaWVudChzdG9tcENvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLnN0b21wQ2xpZW50LmFjdGl2YXRlKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb25Mb2NrLnJlbGVhc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hbnVhbGx5IGRpc2Nvbm5lY3QgdGhlIHdlYnNvY2tldC4gVGhlIHJlY29ubmVjdCBsb29wIHdpbGwgYmUgc3RvcHBlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbkxvY2suYWNxdWlyZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcmltaXRpdmVNYW5hZ2VyIG9mIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGVkJC5uZXh0KGZhbHNlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc3RvbXBDbGllbnQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b21wQ2xpZW50LmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbkxvY2sucmVsZWFzZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIHdlYnNvY2tldCBpcyBjb25uZWN0ZWRcbiAgICAgKiBAcmV0dXJuIGBib29sZWFuYCByZXByZXNlbnRpbmcgaWYgdGhlIHdlYnNvY2tldCBpcyBjb25uZWN0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5zdG9tcENsaWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvbXBDbGllbnQuY29ubmVjdGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSB3ZWJzb2NrZXQgaXMgdHJpbmcgdG8gY29ubmVjdFxuICAgICAqIEByZXR1cm4gYGJvb2xlYW5gIHJlcHJlc2VudGluZyBpZiB0aGUgd2Vic29ja2V0IHN0YXR1c1xuICAgICAqL1xuICAgIHB1YmxpYyBpc0Nvbm5lY3RpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5zdG9tcENsaWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICF0aGlzLnN0b21wQ2xpZW50LmNvbm5lY3RlZCAmJiB0aGlzLnN0b21wQ2xpZW50LmFjdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCByZXNwb25zYWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuXG4gICAgICogRG8gbm90IGZvcmdldCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTxib29sZWFuPmBcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Db25uZWN0KCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWQkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZmlsdGVyKChwKSA9PiBwID09PSB0cnVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgcmVzcG9uc2FibGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC5cbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cbiAgICAgKiBAcmV0dXJuIGBPYnNlcnZhYmxlPHZvaWQ+YFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkRpc2Nvbm5lY3QoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2Nvbm5lY3RlZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgcmVzcG9uc2FibGUgdG8gZW1pdCBhbiBldmVudCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIHJlZXN0YWJsaXNoZWQuXG4gICAgICogRG8gbm90IGZvcmdldCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTx2b2lkPmBcbiAgICAgKi9cbiAgICBwdWJsaWMgb25SZWNvbm5lY3QoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlY29ubmVjdGVkJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCByZXNwb25zYWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gYW4gZXJyb3Igb2N1cnJlZC5cbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cbiAgICAgKiBAcmV0dXJuIGBPYnNlcnZhYmxlPEZyYW1lSW1wbD5gXG4gICAgICovXG4gICAgcHVibGljIG9uRXJyb3IoKTogT2JzZXJ2YWJsZTxJRnJhbWU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2ZW50IHJlc3BvbnNpYmxlIHRvIGVtaXQgYW4gZXZlbnQgd2hlbiBhIHByaW1pdGl2ZSBpcyBjYWxsZWQuXG4gICAgICogRG8gbm90IGZvcmdldCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuXG4gICAgICogQHR5cGVQYXJhbSBgPFQ+YCBPYmplY3QgdHlwZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgb2JzZXJ2YWJsZSBmb3IgdGhlIGBkYXRhYCBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0ge09uRXZlbnRPcHRpb25zfSBvcHRpb25zIENvbmZpZ3VyYXRpb25zIGZvciB0aGUgZXZlbnQuXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTxQcmltaXRpdmVFdmVudDxUPj5gIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhbiBldmVudCB3aGVuIHRoZSBzZXJ2aWNlIGNhbGxzIHRoZSBwcmltaXRpdmUuXG4gICAgICovXG4gICAgcHVibGljIG9uRXZlbnQ8VD4ob3B0aW9uczogT25FdmVudE9wdGlvbnMpOiBPYnNlcnZhYmxlPFByaW1pdGl2ZUV2ZW50PFQ+PiB7XG4gICAgICAgIGNvbnN0IHsgZG9tYWluLCBzZXJ2aWNlLCBwcmltaXRpdmUgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KGRvbWFpbiwgc2VydmljZSwgcHJpbWl0aXZlKTtcblxuICAgICAgICBjb25zdCBleGlzdGluZ1ByaW1pdGl2ZU1hbmFnZXIgPSB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmdldChrZXkpO1xuICAgICAgICBpZiAoZXhpc3RpbmdQcmltaXRpdmVNYW5hZ2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdQcmltaXRpdmVNYW5hZ2VyLmdldEV2ZW50T2JzZXJ2YWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJpbWl0aXZlTWFuYWdlciA9IG5ldyBQcmltaXRpdmVNYW5hZ2VyPFQ+KFxuICAgICAgICAgICAgZG9tYWluLFxuICAgICAgICAgICAgc2VydmljZSxcbiAgICAgICAgICAgIHByaW1pdGl2ZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLnNldChrZXksIHByaW1pdGl2ZU1hbmFnZXIpO1xuXG4gICAgICAgIHZvaWQgdGhpcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29ubmVjdCgpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVTdG9tcFN1YnNjcmlwdGlvbnMocHJpbWl0aXZlTWFuYWdlcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwcmltaXRpdmVNYW5hZ2VyXG4gICAgICAgICAgICAuZ2V0RXZlbnRPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKFxuICAgICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCB0aGlzLnVuc3Vic2NyaWJlUHJpbWl0aXZlT25GaW5hbGl6ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCByZXNwb25zaWJsZSB0byBlbWl0IGFuIGV2ZW50IHdoZW4gYSBzdWJzY3JpcHRpb24gaXMgY3JlYXRlZCBmb3IgdGhlIHByaW1pdGl2ZS5cbiAgICAgKiBEbyBub3QgZm9yZ2V0IHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55bW9yZS5cbiAgICAgKiBAcGFyYW0ge09uRXZlbnRPcHRpb25zfSBvcHRpb25zIENvbmZpZ3VyYXRpb25zIGZvciB0aGUgZXZlbnQuXG4gICAgICogT2JzZXJ2YWJsZSByZXNwb25zw6F2ZWwgcG9yIGVtaXRpciB1bWEgbm90aWZpY2HDp8OjbyBhcMOzcyBvIHN1YnNjcmliZSBkbyBldmVudG8gcGVsYSBwcmltZWlyYSB2ZXouXG4gICAgICogQHJldHVybiBgT2JzZXJ2YWJsZTxib29sZWFuPmAgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIHNlcnZpY2UgY2FsbHMgdGhlIHByaW1pdGl2ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25TdWJzY3JpYmUob3B0aW9uczogT25FdmVudE9wdGlvbnMpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgeyBkb21haW4sIHNlcnZpY2UsIHByaW1pdGl2ZSB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5idWlsZFByaW1pdGl2ZU1hbmFnZXJLZXkoZG9tYWluLCBzZXJ2aWNlLCBwcmltaXRpdmUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm9uQ29ubmVjdCgpLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1ByaW1pdGl2ZU1hbmFnZXIgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmdldChrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1ByaW1pdGl2ZU1hbmFnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nUHJpbWl0aXZlTWFuYWdlclxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldFN1YnNjcmlwdGlvbk9ic2VydmFibGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3Vic2NyaWJlZCQuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChwcmltaXRpdmVNYW5hZ2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLmRvbWFpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLnByaW1pdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPT09IGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVidWcobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kZWJ1Z0VuYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUud2FybignV1MgZGVidWc6ICcgKyBtZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbmZvKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1dTIGluZm86ICcgKyBtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU9uQ29ubmVjdGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluZm8oJ1dlYnNjb2tldCBjb25uZWN0ZWQnKTtcblxuICAgICAgICB0aGlzLmNvbm5lY3RlZCQubmV4dCh0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMubG9zdENvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuaW5mbygnV2Vic2Nva2V0IHJlY29ubmVjdGVkLCByZWNyaWF0aW5nIHN1YnNjcmlwdGlvbnMnKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVjb25uZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU9uRGlzY29ubmVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbmZvKCdXZWJzY29rZXQgZGlzY29ubmVjdGVkJyk7XG5cbiAgICAgICAgdGhpcy5jb25uZWN0ZWQkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3RlZCQubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlT25XZWJTb2NrZXRDbG9zZShkYXRhOiBDbG9zZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChkYXRhPy5yZWFzb24gPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLmxvc3RDb25uZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8gRXhlY3V0b3JTdWJzY3JpYmFibGVDaGFubmVsJyxcbiAgICAgICAgICAgICAgICBuZXcgRnJhbWVJbXBsKHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkYXRhLnJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhPy5yZWFzb24/LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZ28gYXdheScpICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5sb3N0Q29ubmVjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFxuICAgICAgICAgICAgICAgICdBdXRoZW50aWNhdGlvbkVycm9yJyxcbiAgICAgICAgICAgICAgICBuZXcgRnJhbWVJbXBsKHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkYXRhLnJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGE/LnJlYXNvbj8udG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjYW5ub3QgY29ubmVjdCB0byBzZXJ2ZXInKSAhPT1cbiAgICAgICAgICAgIC0xXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5sb3N0Q29ubmVjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFxuICAgICAgICAgICAgICAgICdDb25uZWN0aW9uRXJyb3InLFxuICAgICAgICAgICAgICAgIG5ldyBGcmFtZUltcGwoe1xuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiBkYXRhLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRhdGEucmVhc29uLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEud2FzQ2xlYW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9zdENvbm5lY3Rpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlT25TdG9tcEVycm9yKGRhdGE6IElGcmFtZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKCdTdG9tcEVycm9yJywgZGF0YSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNBdXRoZW50aWNhdGlvbkVycm9yKGRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLmluZm8oJ0F1dGhlbnRpY2F0aW9uIGVycm9yLCByZWNyaWF0aW5nIHN1YnNjcmlwdGlvbnMnKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVjb25uZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQXV0aGVudGljYXRpb25FcnJvcihkYXRhOiBJRnJhbWUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZGF0YT8uaGVhZGVycz8uWydtZXNzYWdlJ107XG4gICAgICAgIGlmICghZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZm9yYmlkZGVuZXhjZXB0aW9uJykgIT09IC0xO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlT25XZWJTb2NrZXRFcnJvcihkYXRhOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ1dlYlNvY2tldEVycm9yJywgZGF0YSBhcyBJRnJhbWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRXJyb3Iob3JpZ2luOiBzdHJpbmcsIGRhdGE6IElGcmFtZSk6IHZvaWQge1xuICAgICAgICBjb25zb2xlLmVycm9yKG9yaWdpbiwgZGF0YSk7XG4gICAgICAgIHRoaXMuZXJyb3IkLm5leHQoZGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVSZWNvbm5lY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9zdENvbm5lY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWNvbm5lY3RQcmltaXRpdmVzKCk7XG4gICAgICAgIHRoaXMucmVjb25uZWN0ZWQkLm5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlY29ubmVjdFByaW1pdGl2ZXMoKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgcHJpbWl0aXZlTWFuYWdlciBvZiB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVN0b21wU3Vic2NyaXB0aW9ucyhwcmltaXRpdmVNYW5hZ2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRTdWJzY3JpcHRpb25VcmxXaXRoVG9rZW4oXG4gICAgICAgIGRvbWFpbjogc3RyaW5nLFxuICAgICAgICBzZXJ2aWNlOiBzdHJpbmcsXG4gICAgICAgIHByaW1pdGl2ZTogc3RyaW5nXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgYXV0aFRva2VuID0gdGhpcy51c2VySW5mb3JtYXRpb25TZXJ2aWNlLmdldEF1dGhUb2tlbigpO1xuICAgICAgICBjb25zdCB0ZW5hbnQgPSB0aGlzLnVzZXJJbmZvcm1hdGlvblNlcnZpY2UuZ2V0VGVuYW50RG9tYWluKCk7XG4gICAgICAgIHJldHVybiBgL3RvcGljLyR7dGVuYW50fS8ke2F1dGhUb2tlbn0vJHtkb21haW59LyR7c2VydmljZX0vJHtwcmltaXRpdmV9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1YnNjcmlwdGlvblVybFdpdGhvdXRUb2tlbihcbiAgICAgICAgZG9tYWluOiBzdHJpbmcsXG4gICAgICAgIHNlcnZpY2U6IHN0cmluZyxcbiAgICAgICAgcHJpbWl0aXZlOiBzdHJpbmdcbiAgICApOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB0ZW5hbnQgPSB0aGlzLnVzZXJJbmZvcm1hdGlvblNlcnZpY2UuZ2V0VGVuYW50RG9tYWluKCk7XG4gICAgICAgIHJldHVybiBgL3RvcGljLyR7dGVuYW50fS8ke2RvbWFpbn0vJHtzZXJ2aWNlfS8ke3ByaW1pdGl2ZX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRQcmltaXRpdmVNYW5hZ2VyS2V5KFxuICAgICAgICBkb21haW46IHN0cmluZyxcbiAgICAgICAgc2VydmljZTogc3RyaW5nLFxuICAgICAgICBwcmltaXRpdmU6IHN0cmluZ1xuICAgICk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtkb21haW59LyR7c2VydmljZX0vJHtwcmltaXRpdmV9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHVuc3Vic2NyaWJlUHJpbWl0aXZlT25GaW5hbGl6ZShcbiAgICAgICAgcHJpbWl0aXZlTWFuYWdlcjogUHJpbWl0aXZlTWFuYWdlcjxhbnk+XG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHByaW1pdGl2ZU1hbmFnZXIudW5zdWJzY3JpYmUoKTtcblxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkUHJpbWl0aXZlTWFuYWdlcktleShcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZG9tYWluLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5wcmltaXRpdmVcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnByaW1pdGl2ZU1hbmFnZXJzLmRlbGV0ZShrZXkpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdElmTm9Nb3JlT2JzZXJ2YWJsZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGRpc2Nvbm5lY3RJZk5vTW9yZU9ic2VydmFibGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5nZXRPYnNlcnZlcnNDb3VudCgpID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKFxuICAgICAgICAgICAgICAgICdNYW51YWxseSBkaXNjb25uZWN0aW5nIGJlY2F1c2UgdGhlcmUgYXJlIG5vIG1vcmUgb2JzZXJ2ZXJzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPYnNlcnZlcnNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICBsZXQgb2JzZXJ2ZXJzQ291bnQgPSAwO1xuXG4gICAgICAgIHRoaXMucHJpbWl0aXZlTWFuYWdlcnMuZm9yRWFjaCgocHJpbWl0aXZlTWFuYWdlcikgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXJzQ291bnQgKz0gcHJpbWl0aXZlTWFuYWdlci5nZXRPYnNlcnZlcnNDb3VudCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gb2JzZXJ2ZXJzQ291bnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVTdG9tcFN1YnNjcmlwdGlvbjxUPihcbiAgICAgICAgZGVzdGluYXRpb246IHN0cmluZyxcbiAgICAgICAgcHJpbWl0aXZlTWFuYWdlcjogUHJpbWl0aXZlTWFuYWdlcjxUPlxuICAgICk6IFN0b21wU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvbXBDbGllbnQuc3Vic2NyaWJlKGRlc3RpbmF0aW9uLCAobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBKU09OLnBhcnNlKG1lc3NhZ2UuYm9keSB8fCAne30nKTtcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZmlyZUV2ZW50KGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVTdG9tcFN1YnNjcmlwdGlvbnM8VD4oXG4gICAgICAgIHByaW1pdGl2ZU1hbmFnZXI6IFByaW1pdGl2ZU1hbmFnZXI8VD5cbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uVXJsV2l0aFRva2VuID0gdGhpcy5idWlsZFN1YnNjcmlwdGlvblVybFdpdGhUb2tlbihcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuZG9tYWluLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5zZXJ2aWNlLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlci5wcmltaXRpdmVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uVXJsV2l0aG91dFRva2VuID0gdGhpcy5nZXRTdWJzY3JpcHRpb25VcmxXaXRob3V0VG9rZW4oXG4gICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyLmRvbWFpbixcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuc2VydmljZSxcbiAgICAgICAgICAgIHByaW1pdGl2ZU1hbmFnZXIucHJpbWl0aXZlXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgc3RvbXBTdWJzY3JpcHRpb25XaXRoVG9rZW4gPSB0aGlzLmNyZWF0ZVN0b21wU3Vic2NyaXB0aW9uKFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uVXJsV2l0aFRva2VuLFxuICAgICAgICAgICAgcHJpbWl0aXZlTWFuYWdlclxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzdG9tcFN1YnNjcmlwdGlvbldpdGhvdXRUb2tlbiA9IHRoaXMuY3JlYXRlU3RvbXBTdWJzY3JpcHRpb24oXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25VcmxXaXRob3V0VG9rZW4sXG4gICAgICAgICAgICBwcmltaXRpdmVNYW5hZ2VyXG4gICAgICAgICk7XG4gICAgICAgIHByaW1pdGl2ZU1hbmFnZXIuc3Vic2NyaWJlKFxuICAgICAgICAgICAgc3RvbXBTdWJzY3JpcHRpb25XaXRoVG9rZW4sXG4gICAgICAgICAgICBzdG9tcFN1YnNjcmlwdGlvbldpdGhvdXRUb2tlblxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN1YnNjcmliZWQkLm5leHQocHJpbWl0aXZlTWFuYWdlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdWJzY3JpcHRpb25VcmwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMudXNlckluZm9ybWF0aW9uU2VydmljZS5nZXRXZWJTb2NrZXRVcmwoKX0vc3Vic2NyaXB0aW9uYDtcbiAgICB9XG59XG4iXX0=
@@ -264,11 +264,11 @@ class GlobalFilterComponent {
264
264
  });
265
265
  }
266
266
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GlobalFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
267
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GlobalFilterComponent, selector: "erpx-global-filter", ngImport: i0, template: "@if (showComponent) {\n <div class=\"global-filter-mobile\">\n <small class=\"label-title\">\n {{ 'erpx_fnd.empresa.filters' | translate }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n class=\"mobile-trigger\"\n [attr.title]=\"mobileTooltip\"\n tabindex=\"0\"\n role=\"button\"\n >\n <em class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></em>\n {{ 'erpx_fnd.empresa.company_and_branch' | translate }}\n </a>\n </div>\n </div>\n <div class=\"global-filter-desktop\">\n <div class=\"ui-g\">\n @for (field of fields; track field.label) {\n <div class=\"ui-g-6\">\n <small class=\"label-title\">\n {{ field.label }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"\n ('erpx_fnd.empresa.selecionar_alterar'\n | translate) +\n ' ' +\n field.label\n \"\n >\n @if (field.value) {\n <em class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></em>\n {{ field.displayText }}\n } @else {\n <em class=\"fa fa-search\" aria-hidden=\"true\"></em>\n {{\n 'erpx_fnd.empresa.click_to_select'\n | translate\n }}\n }\n </a>\n </div>\n </div>\n }\n </div>\n </div>\n @if (showModal) {\n <erp-global-filter-modal\n [e070emp]=\"e070emp\"\n [e070fil]=\"e070fil\"\n (hideModal)=\"onHide($event)\"\n ></erp-global-filter-modal>\n }\n}\n", styles: [".label-title{color:#999}.global-filter-mobile,.global-filter-desktop{display:block;padding:8px 0}.global-filter-mobile a:hover,.global-filter-desktop a:hover{text-decoration:underline}.global-filter-mobile a .fa,.global-filter-desktop a .fa{margin-right:4px}.global-filter-desktop{display:none}@media (min-width: 768px){.global-filter-mobile{display:none}.global-filter-desktop{display:block;width:480px}.global-filter-desktop a{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}\n"], dependencies: [{ kind: "component", type: GlobalFilterModalComponent, selector: "erp-global-filter-modal", inputs: ["e070emp", "e070fil"], outputs: ["hideModal"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
267
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GlobalFilterComponent, selector: "erpx-global-filter", ngImport: i0, template: "@if (showComponent) {\n <div class=\"global-filter-mobile\">\n <small class=\"label-title\">\n {{ 'erpx_fnd.empresa.filters' | translate }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n class=\"mobile-trigger\"\n [attr.title]=\"mobileTooltip\"\n tabindex=\"0\"\n role=\"button\"\n >\n <em class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></em>\n {{ 'erpx_fnd.empresa.company_and_branch' | translate }}\n </a>\n </div>\n </div>\n <div class=\"global-filter-desktop\">\n <div class=\"ui-g\">\n @for (field of fields; track field.label) {\n <div class=\"ui-g-6\">\n <small class=\"label-title\">\n {{ field.label }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"\n ('erpx_fnd.empresa.selecionar_alterar'\n | translate) +\n ' ' +\n field.label\n \"\n >\n @if (field.value) {\n <em\n class=\"fa fa-pencil-square-o\"\n aria-hidden=\"true\"\n ></em>\n {{ field.displayText }}\n } @else {\n <em\n class=\"fa fa-search\"\n aria-hidden=\"true\"\n ></em>\n {{\n 'erpx_fnd.empresa.click_to_select'\n | translate\n }}\n }\n </a>\n </div>\n </div>\n }\n </div>\n </div>\n @if (showModal) {\n <erp-global-filter-modal\n [e070emp]=\"e070emp\"\n [e070fil]=\"e070fil\"\n (hideModal)=\"onHide($event)\"\n ></erp-global-filter-modal>\n }\n}\n", styles: [".label-title{color:#999}.global-filter-mobile,.global-filter-desktop{display:block;padding:8px 0}.global-filter-mobile a:hover,.global-filter-desktop a:hover{text-decoration:underline}.global-filter-mobile a .fa,.global-filter-desktop a .fa{margin-right:4px}.global-filter-desktop{display:none}@media (min-width: 768px){.global-filter-mobile{display:none}.global-filter-desktop{display:block;width:480px}.global-filter-desktop a{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}\n"], dependencies: [{ kind: "component", type: GlobalFilterModalComponent, selector: "erp-global-filter-modal", inputs: ["e070emp", "e070fil"], outputs: ["hideModal"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
268
268
  }
269
269
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GlobalFilterComponent, decorators: [{
270
270
  type: Component,
271
- args: [{ selector: 'erpx-global-filter', template: "@if (showComponent) {\n <div class=\"global-filter-mobile\">\n <small class=\"label-title\">\n {{ 'erpx_fnd.empresa.filters' | translate }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n class=\"mobile-trigger\"\n [attr.title]=\"mobileTooltip\"\n tabindex=\"0\"\n role=\"button\"\n >\n <em class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></em>\n {{ 'erpx_fnd.empresa.company_and_branch' | translate }}\n </a>\n </div>\n </div>\n <div class=\"global-filter-desktop\">\n <div class=\"ui-g\">\n @for (field of fields; track field.label) {\n <div class=\"ui-g-6\">\n <small class=\"label-title\">\n {{ field.label }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"\n ('erpx_fnd.empresa.selecionar_alterar'\n | translate) +\n ' ' +\n field.label\n \"\n >\n @if (field.value) {\n <em class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></em>\n {{ field.displayText }}\n } @else {\n <em class=\"fa fa-search\" aria-hidden=\"true\"></em>\n {{\n 'erpx_fnd.empresa.click_to_select'\n | translate\n }}\n }\n </a>\n </div>\n </div>\n }\n </div>\n </div>\n @if (showModal) {\n <erp-global-filter-modal\n [e070emp]=\"e070emp\"\n [e070fil]=\"e070fil\"\n (hideModal)=\"onHide($event)\"\n ></erp-global-filter-modal>\n }\n}\n", styles: [".label-title{color:#999}.global-filter-mobile,.global-filter-desktop{display:block;padding:8px 0}.global-filter-mobile a:hover,.global-filter-desktop a:hover{text-decoration:underline}.global-filter-mobile a .fa,.global-filter-desktop a .fa{margin-right:4px}.global-filter-desktop{display:none}@media (min-width: 768px){.global-filter-mobile{display:none}.global-filter-desktop{display:block;width:480px}.global-filter-desktop a{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}\n"] }]
271
+ args: [{ selector: 'erpx-global-filter', template: "@if (showComponent) {\n <div class=\"global-filter-mobile\">\n <small class=\"label-title\">\n {{ 'erpx_fnd.empresa.filters' | translate }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n class=\"mobile-trigger\"\n [attr.title]=\"mobileTooltip\"\n tabindex=\"0\"\n role=\"button\"\n >\n <em class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></em>\n {{ 'erpx_fnd.empresa.company_and_branch' | translate }}\n </a>\n </div>\n </div>\n <div class=\"global-filter-desktop\">\n <div class=\"ui-g\">\n @for (field of fields; track field.label) {\n <div class=\"ui-g-6\">\n <small class=\"label-title\">\n {{ field.label }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"\n ('erpx_fnd.empresa.selecionar_alterar'\n | translate) +\n ' ' +\n field.label\n \"\n >\n @if (field.value) {\n <em\n class=\"fa fa-pencil-square-o\"\n aria-hidden=\"true\"\n ></em>\n {{ field.displayText }}\n } @else {\n <em\n class=\"fa fa-search\"\n aria-hidden=\"true\"\n ></em>\n {{\n 'erpx_fnd.empresa.click_to_select'\n | translate\n }}\n }\n </a>\n </div>\n </div>\n }\n </div>\n </div>\n @if (showModal) {\n <erp-global-filter-modal\n [e070emp]=\"e070emp\"\n [e070fil]=\"e070fil\"\n (hideModal)=\"onHide($event)\"\n ></erp-global-filter-modal>\n }\n}\n", styles: [".label-title{color:#999}.global-filter-mobile,.global-filter-desktop{display:block;padding:8px 0}.global-filter-mobile a:hover,.global-filter-desktop a:hover{text-decoration:underline}.global-filter-mobile a .fa,.global-filter-desktop a .fa{margin-right:4px}.global-filter-desktop{display:none}@media (min-width: 768px){.global-filter-mobile{display:none}.global-filter-desktop{display:block;width:480px}.global-filter-desktop a{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}\n"] }]
272
272
  }] });
273
273
 
274
274
  class GlobalFilterModule {
@@ -1 +1 @@
1
- {"version":3,"file":"senior-gestao-empresarial-angular-components-global-filter.mjs","sources":["../../projects/snr-erpx-angular-components/global-filter/src/lib/global-filter.service.ts","../../projects/snr-erpx-angular-components/global-filter/src/lib/global-filter-modal/global-filter-modal.component.ts","../../projects/snr-erpx-angular-components/global-filter/src/lib/global-filter-modal/global-filter-modal.component.html","../../projects/snr-erpx-angular-components/global-filter/src/lib/global-filter.component.ts","../../projects/snr-erpx-angular-components/global-filter/src/lib/global-filter.component.html","../../projects/snr-erpx-angular-components/global-filter/src/lib/global-filter.module.ts","../../projects/snr-erpx-angular-components/global-filter/src/senior-gestao-empresarial-angular-components-global-filter.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\n\nexport interface GlobalFilterFields {\n e070emp: unknown;\n e070fil: unknown;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class GlobalFilterService {\n private _showComponent = true;\n private _excludedRoutes: string[] = [];\n private readonly filterChangeSubject = new Subject<GlobalFilterFields>();\n\n /**\n * Emits a filter change event to all subscribers.\n * This method should be called whenever the global filter values change\n * to notify all components listening for filter updates.\n *\n * @param event - The filter fields object containing e070emp and e070fil information\n */\n public onFilterChange(event: GlobalFilterFields): void {\n this.filterChangeSubject.next(event);\n }\n\n /**\n * Observable stream of filter changes.\n * Subscribe to this to receive notifications when the filter changes.\n */\n public get filterChange(): Observable<GlobalFilterFields> {\n return this.filterChangeSubject.asObservable();\n }\n\n /**\n * Gets the visibility state of the global filter component.\n */\n public get showComponent(): boolean {\n return this._showComponent;\n }\n\n /**\n * Sets the visibility state of the global filter component.\n */\n public set showComponent(value: boolean) {\n this._showComponent = value;\n }\n\n /**\n * Gets the list of routes where the global filter component should not be displayed.\n */\n public get excludedRoutes(): string[] {\n return this._excludedRoutes;\n }\n\n /**\n * Sets the routes where the global filter component should not be displayed.\n */\n public set excludedRoutes(value: string[]) {\n this._excludedRoutes = value;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n OnDestroy,\n OnInit,\n inject,\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n E070EmpLookup,\n E070FilLookup,\n} from '@senior-gestao-empresarial/angular-components/lookups';\nimport {\n ERPX_GLOBAL_FILTER_KEY,\n FiltersStorageService,\n} from '@senior-gestao-empresarial/angular-components/storage';\nimport { GlobalFilterFields } from '../global-filter.service';\nimport {\n DynamicType,\n DynamicStructure,\n} from '@seniorsistemas/angular-components/dynamic-form';\n\n@Component({\n selector: 'erp-global-filter-modal',\n templateUrl: './global-filter-modal.component.html',\n styles: [\n `\n .description {\n padding: 0px 7px;\n }\n `,\n ],\n})\nexport class GlobalFilterModalComponent implements OnInit, OnDestroy {\n @Input() public e070emp: unknown;\n @Input() public e070fil: unknown;\n @Output() public hideModal: EventEmitter<GlobalFilterFields> =\n new EventEmitter<GlobalFilterFields>();\n\n public isVisible = true;\n public formGroup!: UntypedFormGroup;\n public formFields!: DynamicType[];\n\n private readonly formBuilder = inject(UntypedFormBuilder);\n private readonly translate = inject(TranslateService);\n private readonly e070empLookup = inject(E070EmpLookup);\n private readonly e070filLookup = inject(E070FilLookup);\n private readonly storageService = inject(FiltersStorageService);\n private readonly ngUnsubscribe = new Subject<void>();\n\n public ngOnInit(): void {\n this.createFormGroup();\n this.createFormField();\n this.handleFormChanges();\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public onHide(value?: GlobalFilterFields): void {\n this.isVisible = false;\n this.hideModal.emit(value);\n }\n\n public onSave(): void {\n const value = this.formGroup.getRawValue() as GlobalFilterFields;\n void this.storageService\n .store(ERPX_GLOBAL_FILTER_KEY, value)\n .then(() => this.onHide(value));\n }\n\n public get formFieldsDynamicConfigs(): DynamicStructure[] {\n return [{ type: 'row', fields: this.formFields }];\n }\n\n private createFormGroup(): void {\n this.formGroup = this.formBuilder.group({\n e070emp: [{ value: this.e070emp, disabled: false }],\n e070fil: [{ value: this.e070fil, disabled: !this.e070emp }],\n });\n }\n\n private createFormField(): void {\n this.formFields = [\n {\n ...this.e070empLookup.mountOptions({\n multiple: false,\n queryFields: [\n 'e031moe.sigMoe',\n 'e031moe.codMoe',\n 'e031moe.desMoe',\n ],\n }),\n appendTo: 'body',\n emptyMessage: this.translate.instant(\n 'erpx_fnd.empresa.nothing_found'\n ) as string,\n } as DynamicType,\n {\n ...this.e070filLookup.mountOptions({\n multiple: false,\n lookupFields: [\n { name: 'codFil', type: 'integer' },\n { name: 'nomFil', type: 'string' },\n ],\n searchFields: [\n { name: 'codFil', type: 'integer' },\n { name: 'nomFil', type: 'string' },\n ],\n searchGridFields: [\n { name: 'codFil', type: 'integer' },\n { name: 'nomFil', type: 'string' },\n ],\n entityDependency: [\n {\n name: 'e070emp',\n field: 'id',\n value: () =>\n this.formGroup.get('e070emp')?.value as unknown,\n },\n ],\n }),\n emptyMessage: this.translate.instant(\n 'erpx_fnd.empresa.nothing_found'\n ) as string,\n appendTo: 'body',\n } as DynamicType,\n ];\n }\n\n private handleFormChanges(): void {\n this.formGroup.controls['e070emp'].valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((value: unknown) => {\n const control = this.formGroup.get('e070fil');\n if (!control) {\n return;\n }\n value ? control.enable() : control.disable();\n control.reset();\n });\n }\n}\n","<p-dialog\n [(visible)]=\"isVisible\"\n [modal]=\"true\"\n (onHide)=\"onHide()\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [focusOnShow]=\"false\"\n [closeAriaLabel]=\"'erpx_fnd.empresa.fechar' | translate\"\n>\n <ng-template #header>\n {{ 'erpx_fnd.empresa.global_filter_header' | translate }}\n </ng-template>\n <p class=\"description\">\n {{ 'erpx_fnd.empresa.global_filter_description' | translate }}\n </p>\n <br />\n <s-dynamic-form\n [configs]=\"formFieldsDynamicConfigs\"\n [form]=\"formGroup\"\n ></s-dynamic-form>\n <ng-template #footer>\n <s-button\n [label]=\"'erpx_fnd.empresa.save' | translate\"\n priority=\"primary\"\n (clicked)=\"onSave()\"\n ></s-button>\n <s-button\n [label]=\"'erpx_fnd.empresa.cancel' | translate\"\n priority=\"link\"\n (clicked)=\"onHide()\"\n ></s-button>\n </ng-template>\n</p-dialog>\n","import { Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport {\n ERPX_GLOBAL_FILTER_KEY,\n FiltersStorageService,\n} from '@senior-gestao-empresarial/angular-components/storage';\nimport {\n GlobalFilterService,\n GlobalFilterFields,\n} from './global-filter.service';\n\ntype FilterField = {\n label: string;\n value: unknown;\n displayText: string | null;\n};\n\n@Component({\n selector: 'erpx-global-filter',\n templateUrl: './global-filter.component.html',\n styleUrls: ['./global-filter.component.scss'],\n})\nexport class GlobalFilterComponent implements OnInit, OnDestroy {\n public showModal = false;\n public e070emp: unknown;\n public e070fil: unknown;\n\n private readonly storageService = inject(FiltersStorageService);\n private readonly globalFilterService = inject(GlobalFilterService);\n private readonly router = inject(Router);\n private readonly translate = inject(TranslateService);\n private readonly defaultExcludedRoutes = ['forbidden', 'main', 'not-found'];\n private _showComponent = true;\n private readonly ngUnsubscribe = new Subject<void>();\n\n /**\n * Gets a formatted tooltip string for mobile devices.\n */\n public get mobileTooltip(): string | null {\n const lines = this.fields\n .filter((filterItem) => filterItem.value)\n .map(\n (filterItem) => `${filterItem.label}: ${filterItem.displayText}`\n );\n\n return lines.length > 0 ? lines.join('\\n') : null;\n }\n\n /**\n * Gets the current filter field configuration array.\n */\n public get fields(): FilterField[] {\n return [\n {\n label: this.translate.instant(\n 'erpx_fnd.empresa.e_070_emp'\n ) as string,\n value: this.e070emp,\n displayText: this.e070emp\n ? `${(this.e070emp as { label: string }).label}`\n : null,\n },\n {\n label: this.translate.instant(\n 'erpx_fnd.empresa.e_070_fil'\n ) as string,\n value: this.e070fil,\n displayText: this.e070fil\n ? `${(this.e070fil as { label: string }).label}`\n : null,\n },\n ];\n }\n\n /**\n * Gets the visibility state of the global filter component.\n */\n public get showComponent(): boolean {\n return this.globalFilterService.showComponent && this._showComponent;\n }\n\n public ngOnInit(): void {\n this.loadFiltersFromStorage();\n this.initializeRouteListener();\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public onHide(event?: GlobalFilterFields): void {\n this.showModal = false;\n if (event) {\n this.e070emp = event.e070emp;\n this.e070fil = event.e070fil;\n this.globalFilterService.onFilterChange(event);\n }\n }\n\n private loadFiltersFromStorage(): void {\n void this.storageService\n .get(ERPX_GLOBAL_FILTER_KEY)\n .then((filterData: unknown) => {\n if (\n filterData &&\n typeof filterData === 'object' &&\n Object.keys(filterData).length > 0\n ) {\n const data = filterData as GlobalFilterFields;\n this.e070emp = data.e070emp;\n this.e070fil = data.e070fil;\n }\n });\n }\n\n private initializeRouteListener(): void {\n this.router.events\n .pipe(\n takeUntil(this.ngUnsubscribe),\n filter(\n (event): event is NavigationEnd =>\n event instanceof NavigationEnd\n )\n )\n .subscribe((event) => {\n const excludedRoutes = new RegExp(\n `^/(${[...this.defaultExcludedRoutes, ...this.globalFilterService.excludedRoutes].join('|')})(/|$)`\n );\n const currentRoute = event.urlAfterRedirects;\n this._showComponent = !excludedRoutes.test(currentRoute);\n });\n }\n}\n","@if (showComponent) {\n <div class=\"global-filter-mobile\">\n <small class=\"label-title\">\n {{ 'erpx_fnd.empresa.filters' | translate }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n class=\"mobile-trigger\"\n [attr.title]=\"mobileTooltip\"\n tabindex=\"0\"\n role=\"button\"\n >\n <em class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></em>\n {{ 'erpx_fnd.empresa.company_and_branch' | translate }}\n </a>\n </div>\n </div>\n <div class=\"global-filter-desktop\">\n <div class=\"ui-g\">\n @for (field of fields; track field.label) {\n <div class=\"ui-g-6\">\n <small class=\"label-title\">\n {{ field.label }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"\n ('erpx_fnd.empresa.selecionar_alterar'\n | translate) +\n ' ' +\n field.label\n \"\n >\n @if (field.value) {\n <em class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></em>\n {{ field.displayText }}\n } @else {\n <em class=\"fa fa-search\" aria-hidden=\"true\"></em>\n {{\n 'erpx_fnd.empresa.click_to_select'\n | translate\n }}\n }\n </a>\n </div>\n </div>\n }\n </div>\n </div>\n @if (showModal) {\n <erp-global-filter-modal\n [e070emp]=\"e070emp\"\n [e070fil]=\"e070fil\"\n (hideModal)=\"onHide($event)\"\n ></erp-global-filter-modal>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ButtonComponent } from '@seniorsistemas/angular-components/button';\nimport { DynamicFormModule } from '@seniorsistemas/angular-components/dynamic-form';\nimport { DialogModule } from 'primeng/dialog';\nimport { GlobalFilterModalComponent } from './global-filter-modal/global-filter-modal.component';\nimport { GlobalFilterComponent } from './global-filter.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ErpLookupsModule } from '@senior-gestao-empresarial/angular-components/lookups';\nimport { FiltersStorageService } from '@senior-gestao-empresarial/angular-components/storage';\n\n@NgModule({\n imports: [\n CommonModule,\n DynamicFormModule,\n DialogModule,\n ButtonComponent,\n TranslateModule,\n ErpLookupsModule,\n ],\n providers: [FiltersStorageService],\n declarations: [GlobalFilterComponent, GlobalFilterModalComponent],\n exports: [GlobalFilterComponent],\n})\nexport class GlobalFilterModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.GlobalFilterModalComponent","i2"],"mappings":"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"}
1
+ {"version":3,"file":"senior-gestao-empresarial-angular-components-global-filter.mjs","sources":["../../projects/snr-erpx-angular-components/global-filter/src/lib/global-filter.service.ts","../../projects/snr-erpx-angular-components/global-filter/src/lib/global-filter-modal/global-filter-modal.component.ts","../../projects/snr-erpx-angular-components/global-filter/src/lib/global-filter-modal/global-filter-modal.component.html","../../projects/snr-erpx-angular-components/global-filter/src/lib/global-filter.component.ts","../../projects/snr-erpx-angular-components/global-filter/src/lib/global-filter.component.html","../../projects/snr-erpx-angular-components/global-filter/src/lib/global-filter.module.ts","../../projects/snr-erpx-angular-components/global-filter/src/senior-gestao-empresarial-angular-components-global-filter.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\n\nexport interface GlobalFilterFields {\n e070emp: unknown;\n e070fil: unknown;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class GlobalFilterService {\n private _showComponent = true;\n private _excludedRoutes: string[] = [];\n private readonly filterChangeSubject = new Subject<GlobalFilterFields>();\n\n /**\n * Emits a filter change event to all subscribers.\n * This method should be called whenever the global filter values change\n * to notify all components listening for filter updates.\n *\n * @param event - The filter fields object containing e070emp and e070fil information\n */\n public onFilterChange(event: GlobalFilterFields): void {\n this.filterChangeSubject.next(event);\n }\n\n /**\n * Observable stream of filter changes.\n * Subscribe to this to receive notifications when the filter changes.\n */\n public get filterChange(): Observable<GlobalFilterFields> {\n return this.filterChangeSubject.asObservable();\n }\n\n /**\n * Gets the visibility state of the global filter component.\n */\n public get showComponent(): boolean {\n return this._showComponent;\n }\n\n /**\n * Sets the visibility state of the global filter component.\n */\n public set showComponent(value: boolean) {\n this._showComponent = value;\n }\n\n /**\n * Gets the list of routes where the global filter component should not be displayed.\n */\n public get excludedRoutes(): string[] {\n return this._excludedRoutes;\n }\n\n /**\n * Sets the routes where the global filter component should not be displayed.\n */\n public set excludedRoutes(value: string[]) {\n this._excludedRoutes = value;\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output,\n OnDestroy,\n OnInit,\n inject,\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n E070EmpLookup,\n E070FilLookup,\n} from '@senior-gestao-empresarial/angular-components/lookups';\nimport {\n ERPX_GLOBAL_FILTER_KEY,\n FiltersStorageService,\n} from '@senior-gestao-empresarial/angular-components/storage';\nimport { GlobalFilterFields } from '../global-filter.service';\nimport {\n DynamicType,\n DynamicStructure,\n} from '@seniorsistemas/angular-components/dynamic-form';\n\n@Component({\n selector: 'erp-global-filter-modal',\n templateUrl: './global-filter-modal.component.html',\n styles: [\n `\n .description {\n padding: 0px 7px;\n }\n `,\n ],\n})\nexport class GlobalFilterModalComponent implements OnInit, OnDestroy {\n @Input() public e070emp: unknown;\n @Input() public e070fil: unknown;\n @Output() public hideModal: EventEmitter<GlobalFilterFields> =\n new EventEmitter<GlobalFilterFields>();\n\n public isVisible = true;\n public formGroup!: UntypedFormGroup;\n public formFields!: DynamicType[];\n\n private readonly formBuilder = inject(UntypedFormBuilder);\n private readonly translate = inject(TranslateService);\n private readonly e070empLookup = inject(E070EmpLookup);\n private readonly e070filLookup = inject(E070FilLookup);\n private readonly storageService = inject(FiltersStorageService);\n private readonly ngUnsubscribe = new Subject<void>();\n\n public ngOnInit(): void {\n this.createFormGroup();\n this.createFormField();\n this.handleFormChanges();\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public onHide(value?: GlobalFilterFields): void {\n this.isVisible = false;\n this.hideModal.emit(value);\n }\n\n public onSave(): void {\n const value = this.formGroup.getRawValue() as GlobalFilterFields;\n void this.storageService\n .store(ERPX_GLOBAL_FILTER_KEY, value)\n .then(() => this.onHide(value));\n }\n\n public get formFieldsDynamicConfigs(): DynamicStructure[] {\n return [{ type: 'row', fields: this.formFields }];\n }\n\n private createFormGroup(): void {\n this.formGroup = this.formBuilder.group({\n e070emp: [{ value: this.e070emp, disabled: false }],\n e070fil: [{ value: this.e070fil, disabled: !this.e070emp }],\n });\n }\n\n private createFormField(): void {\n this.formFields = [\n {\n ...this.e070empLookup.mountOptions({\n multiple: false,\n queryFields: [\n 'e031moe.sigMoe',\n 'e031moe.codMoe',\n 'e031moe.desMoe',\n ],\n }),\n appendTo: 'body',\n emptyMessage: this.translate.instant(\n 'erpx_fnd.empresa.nothing_found'\n ) as string,\n } as DynamicType,\n {\n ...this.e070filLookup.mountOptions({\n multiple: false,\n lookupFields: [\n { name: 'codFil', type: 'integer' },\n { name: 'nomFil', type: 'string' },\n ],\n searchFields: [\n { name: 'codFil', type: 'integer' },\n { name: 'nomFil', type: 'string' },\n ],\n searchGridFields: [\n { name: 'codFil', type: 'integer' },\n { name: 'nomFil', type: 'string' },\n ],\n entityDependency: [\n {\n name: 'e070emp',\n field: 'id',\n value: () =>\n this.formGroup.get('e070emp')?.value as unknown,\n },\n ],\n }),\n emptyMessage: this.translate.instant(\n 'erpx_fnd.empresa.nothing_found'\n ) as string,\n appendTo: 'body',\n } as DynamicType,\n ];\n }\n\n private handleFormChanges(): void {\n this.formGroup.controls['e070emp'].valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((value: unknown) => {\n const control = this.formGroup.get('e070fil');\n if (!control) {\n return;\n }\n value ? control.enable() : control.disable();\n control.reset();\n });\n }\n}\n","<p-dialog\n [(visible)]=\"isVisible\"\n [modal]=\"true\"\n (onHide)=\"onHide()\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [focusOnShow]=\"false\"\n [closeAriaLabel]=\"'erpx_fnd.empresa.fechar' | translate\"\n>\n <ng-template #header>\n {{ 'erpx_fnd.empresa.global_filter_header' | translate }}\n </ng-template>\n <p class=\"description\">\n {{ 'erpx_fnd.empresa.global_filter_description' | translate }}\n </p>\n <br />\n <s-dynamic-form\n [configs]=\"formFieldsDynamicConfigs\"\n [form]=\"formGroup\"\n ></s-dynamic-form>\n <ng-template #footer>\n <s-button\n [label]=\"'erpx_fnd.empresa.save' | translate\"\n priority=\"primary\"\n (clicked)=\"onSave()\"\n ></s-button>\n <s-button\n [label]=\"'erpx_fnd.empresa.cancel' | translate\"\n priority=\"link\"\n (clicked)=\"onHide()\"\n ></s-button>\n </ng-template>\n</p-dialog>\n","import { Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport {\n ERPX_GLOBAL_FILTER_KEY,\n FiltersStorageService,\n} from '@senior-gestao-empresarial/angular-components/storage';\nimport {\n GlobalFilterService,\n GlobalFilterFields,\n} from './global-filter.service';\n\ntype FilterField = {\n label: string;\n value: unknown;\n displayText: string | null;\n};\n\n@Component({\n selector: 'erpx-global-filter',\n templateUrl: './global-filter.component.html',\n styleUrls: ['./global-filter.component.scss'],\n})\nexport class GlobalFilterComponent implements OnInit, OnDestroy {\n public showModal = false;\n public e070emp: unknown;\n public e070fil: unknown;\n\n private readonly storageService = inject(FiltersStorageService);\n private readonly globalFilterService = inject(GlobalFilterService);\n private readonly router = inject(Router);\n private readonly translate = inject(TranslateService);\n private readonly defaultExcludedRoutes = ['forbidden', 'main', 'not-found'];\n private _showComponent = true;\n private readonly ngUnsubscribe = new Subject<void>();\n\n /**\n * Gets a formatted tooltip string for mobile devices.\n */\n public get mobileTooltip(): string | null {\n const lines = this.fields\n .filter((filterItem) => filterItem.value)\n .map(\n (filterItem) => `${filterItem.label}: ${filterItem.displayText}`\n );\n\n return lines.length > 0 ? lines.join('\\n') : null;\n }\n\n /**\n * Gets the current filter field configuration array.\n */\n public get fields(): FilterField[] {\n return [\n {\n label: this.translate.instant(\n 'erpx_fnd.empresa.e_070_emp'\n ) as string,\n value: this.e070emp,\n displayText: this.e070emp\n ? `${(this.e070emp as { label: string }).label}`\n : null,\n },\n {\n label: this.translate.instant(\n 'erpx_fnd.empresa.e_070_fil'\n ) as string,\n value: this.e070fil,\n displayText: this.e070fil\n ? `${(this.e070fil as { label: string }).label}`\n : null,\n },\n ];\n }\n\n /**\n * Gets the visibility state of the global filter component.\n */\n public get showComponent(): boolean {\n return this.globalFilterService.showComponent && this._showComponent;\n }\n\n public ngOnInit(): void {\n this.loadFiltersFromStorage();\n this.initializeRouteListener();\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public onHide(event?: GlobalFilterFields): void {\n this.showModal = false;\n if (event) {\n this.e070emp = event.e070emp;\n this.e070fil = event.e070fil;\n this.globalFilterService.onFilterChange(event);\n }\n }\n\n private loadFiltersFromStorage(): void {\n void this.storageService\n .get(ERPX_GLOBAL_FILTER_KEY)\n .then((filterData: unknown) => {\n if (\n filterData &&\n typeof filterData === 'object' &&\n Object.keys(filterData).length > 0\n ) {\n const data = filterData as GlobalFilterFields;\n this.e070emp = data.e070emp;\n this.e070fil = data.e070fil;\n }\n });\n }\n\n private initializeRouteListener(): void {\n this.router.events\n .pipe(\n takeUntil(this.ngUnsubscribe),\n filter(\n (event): event is NavigationEnd =>\n event instanceof NavigationEnd\n )\n )\n .subscribe((event) => {\n const excludedRoutes = new RegExp(\n `^/(${[...this.defaultExcludedRoutes, ...this.globalFilterService.excludedRoutes].join('|')})(/|$)`\n );\n const currentRoute = event.urlAfterRedirects;\n this._showComponent = !excludedRoutes.test(currentRoute);\n });\n }\n}\n","@if (showComponent) {\n <div class=\"global-filter-mobile\">\n <small class=\"label-title\">\n {{ 'erpx_fnd.empresa.filters' | translate }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n class=\"mobile-trigger\"\n [attr.title]=\"mobileTooltip\"\n tabindex=\"0\"\n role=\"button\"\n >\n <em class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></em>\n {{ 'erpx_fnd.empresa.company_and_branch' | translate }}\n </a>\n </div>\n </div>\n <div class=\"global-filter-desktop\">\n <div class=\"ui-g\">\n @for (field of fields; track field.label) {\n <div class=\"ui-g-6\">\n <small class=\"label-title\">\n {{ field.label }}\n </small>\n <div>\n <a\n (click)=\"showModal = true\"\n (keyup.enter)=\"showModal = true\"\n (keydown.space)=\"showModal = true\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"\n ('erpx_fnd.empresa.selecionar_alterar'\n | translate) +\n ' ' +\n field.label\n \"\n >\n @if (field.value) {\n <em\n class=\"fa fa-pencil-square-o\"\n aria-hidden=\"true\"\n ></em>\n {{ field.displayText }}\n } @else {\n <em\n class=\"fa fa-search\"\n aria-hidden=\"true\"\n ></em>\n {{\n 'erpx_fnd.empresa.click_to_select'\n | translate\n }}\n }\n </a>\n </div>\n </div>\n }\n </div>\n </div>\n @if (showModal) {\n <erp-global-filter-modal\n [e070emp]=\"e070emp\"\n [e070fil]=\"e070fil\"\n (hideModal)=\"onHide($event)\"\n ></erp-global-filter-modal>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ButtonComponent } from '@seniorsistemas/angular-components/button';\nimport { DynamicFormModule } from '@seniorsistemas/angular-components/dynamic-form';\nimport { DialogModule } from 'primeng/dialog';\nimport { GlobalFilterModalComponent } from './global-filter-modal/global-filter-modal.component';\nimport { GlobalFilterComponent } from './global-filter.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ErpLookupsModule } from '@senior-gestao-empresarial/angular-components/lookups';\nimport { FiltersStorageService } from '@senior-gestao-empresarial/angular-components/storage';\n\n@NgModule({\n imports: [\n CommonModule,\n DynamicFormModule,\n DialogModule,\n ButtonComponent,\n TranslateModule,\n ErpLookupsModule,\n ],\n providers: [FiltersStorageService],\n declarations: [GlobalFilterComponent, GlobalFilterModalComponent],\n exports: [GlobalFilterComponent],\n})\nexport class GlobalFilterModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.GlobalFilterModalComponent","i2"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { Injectable, inject } from '@angular/core';
3
3
  import { filter, take, finalize, switchMap, map } from 'rxjs/operators';
4
4
  import { Client, FrameImpl } from '@stomp/stompjs';
5
5
  import { Subject, BehaviorSubject } from 'rxjs';
6
- import SockJS from 'sockjs-client';
6
+ import SockJSBundle from 'sockjs-client/dist/sockjs';
7
7
  import { AsyncLock } from '@senior-gestao-empresarial/angular-components/utils';
8
8
  import { get } from 'js-cookie';
9
9
 
@@ -71,6 +71,7 @@ class PrimitiveManager {
71
71
  }
72
72
  }
73
73
 
74
+ const SockJS = SockJSBundle;
74
75
  const RECONNECT_INTERVAL_MILLISECONDS = 3000;
75
76
  const CONNECTION_TIMEOUT_MILLISECONDS = 5000;
76
77
  class WebsocketService {
@@ -1 +1 @@
1
- {"version":3,"file":"senior-gestao-empresarial-angular-components-websocket.mjs","sources":["../../projects/snr-erpx-angular-components/websocket/src/lib/user-information.service.ts","../../projects/snr-erpx-angular-components/websocket/src/lib/models/primitive-manager.ts","../../projects/snr-erpx-angular-components/websocket/src/lib/websocket.service.ts","../../projects/snr-erpx-angular-components/websocket/src/senior-gestao-empresarial-angular-components-websocket.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { get as getCookie } from 'js-cookie';\n\ninterface AuthToken {\n access_token?: string;\n username?: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserInformationService {\n private static readonly BASE_URL_COOKIE_KEY = 'com.senior.base.url';\n private static readonly TOKEN_COOKIE_KEY = 'com.senior.token';\n\n public getAuthToken(): string | undefined {\n const cookieValue =\n getCookie(UserInformationService.TOKEN_COOKIE_KEY) ?? '{}';\n const authToken = JSON.parse(cookieValue) as AuthToken;\n return authToken.access_token;\n }\n\n public getTenantDomain(): string | undefined {\n const cookieValue =\n getCookie(UserInformationService.TOKEN_COOKIE_KEY) ?? '{}';\n const authToken = JSON.parse(cookieValue) as AuthToken;\n return authToken.username?.split('@')[1];\n }\n\n public getWebSocketUrl(): string {\n let baseUrl = getCookie(UserInformationService.BASE_URL_COOKIE_KEY);\n if (baseUrl && !baseUrl.endsWith('/')) {\n baseUrl += '/';\n }\n return (baseUrl ?? '') + 'websocket';\n }\n}\n","import { StompSubscription } from '@stomp/stompjs';\nimport { BehaviorSubject, Subject, Observable } from 'rxjs';\nimport { PrimitiveEvent } from '../protocols/primitive-event';\n\nexport class PrimitiveManager<T> {\n public domain: string;\n public service: string;\n public primitive: string;\n\n private readonly stompSubscriptions: StompSubscription[];\n private readonly event$: Subject<PrimitiveEvent<T>>;\n private readonly subscribed$: BehaviorSubject<boolean>;\n\n public constructor(domain: string, service: string, primitive: string) {\n this.domain = domain;\n this.service = service;\n this.primitive = primitive;\n\n this.stompSubscriptions = [];\n this.event$ = new Subject<PrimitiveEvent<T>>();\n this.subscribed$ = new BehaviorSubject(false);\n }\n\n public unsubscribe(): void {\n this.event$.complete();\n\n for (const stompSubscription of this.stompSubscriptions) {\n stompSubscription.unsubscribe();\n }\n\n this.subscribed$.complete();\n }\n\n public fireEvent(event: PrimitiveEvent<T>): void {\n this.event$.next(event);\n }\n\n public subscribe(...subscriptions: StompSubscription[]): void {\n this.stompSubscriptions.push(...subscriptions);\n this.subscribed$.next(true);\n }\n\n public getEventObservable(): Observable<PrimitiveEvent<T>> {\n return this.event$.asObservable();\n }\n\n public getSubscriptionObservable(): Observable<boolean> {\n return this.subscribed$.asObservable();\n }\n\n public getObserversCount(): number {\n return this.event$.observers.length;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { filter, finalize, map, switchMap, take } from 'rxjs/operators';\nimport {\n IFrame,\n StompConfig,\n StompSubscription,\n Client,\n FrameImpl,\n} from '@stomp/stompjs';\nimport { BehaviorSubject, Subject, Observable } from 'rxjs';\nimport SockJS from 'sockjs-client';\nimport { AsyncLock } from '@senior-gestao-empresarial/angular-components/utils';\nimport { UserInformationService } from './user-information.service';\nimport { PrimitiveManager } from './models';\nimport { OnEventOptions, PrimitiveEvent } from './protocols';\n\nconst RECONNECT_INTERVAL_MILLISECONDS = 3000;\nconst CONNECTION_TIMEOUT_MILLISECONDS = 5000;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WebsocketService {\n private readonly userInformationService = inject(UserInformationService);\n\n private readonly connected$ = new BehaviorSubject<boolean>(false);\n private readonly disconnected$ = new Subject<void>();\n private readonly reconnected$ = new Subject<void>();\n private readonly error$ = new Subject<IFrame>();\n private readonly subscribed$ = new Subject<PrimitiveManager<any>>();\n\n private readonly primitiveManagers: Map<string, PrimitiveManager<any>> =\n new Map<string, PrimitiveManager<any>>();\n private readonly connectionLock = new AsyncLock();\n\n private stompClient!: Client;\n private debugEnable = false;\n private lostConnection = false;\n\n /**\n * Enables stompjs debug logs and additional info\n */\n public enableDebugLogs(): void {\n this.debugEnable = true;\n }\n\n /**\n * Manually starts the connection\n */\n public async connect(): Promise<void> {\n await this.connectionLock.acquire();\n\n try {\n if (this.isConnected() || this.isConnecting()) {\n return;\n }\n this.lostConnection = false;\n\n const stompConfig: StompConfig = {\n webSocketFactory: () => {\n return new SockJS(this.getSubscriptionUrl(), null, {\n timeout: CONNECTION_TIMEOUT_MILLISECONDS,\n });\n },\n connectionTimeout: CONNECTION_TIMEOUT_MILLISECONDS,\n reconnectDelay: RECONNECT_INTERVAL_MILLISECONDS,\n debug: this.debug.bind(this),\n onConnect: this.handleOnConnected.bind(this),\n onDisconnect: this.handleOnDisconnect.bind(this),\n onWebSocketClose: this.handleOnWebSocketClose.bind(this),\n onStompError: this.handleOnStompError.bind(this),\n onWebSocketError: this.handleOnWebSocketError.bind(this),\n };\n\n this.debug('Connecting the Webscoket');\n\n this.stompClient = new Client(stompConfig);\n this.stompClient.activate();\n } finally {\n await this.connectionLock.release();\n }\n }\n\n /**\n * Manually disconnect the websocket. The reconnect loop will be stopped.\n */\n public async disconnect(): Promise<void> {\n if (!this.isConnected()) {\n return;\n }\n\n await this.connectionLock.acquire();\n try {\n for (const primitiveManager of this.primitiveManagers.values()) {\n primitiveManager.unsubscribe();\n }\n\n this.primitiveManagers.clear();\n this.connected$.next(false);\n\n if (this.stompClient) {\n await this.stompClient.deactivate();\n }\n } finally {\n await this.connectionLock.release();\n }\n }\n\n /**\n * Check if the websocket is connected\n * @return `boolean` representing if the websocket is connected\n */\n public isConnected(): boolean {\n if (!this.stompClient) {\n return false;\n }\n\n return this.stompClient.connected;\n }\n\n /**\n * Check if the websocket is tring to connect\n * @return `boolean` representing if the websocket status\n */\n public isConnecting(): boolean {\n if (!this.stompClient) {\n return false;\n }\n\n return !this.stompClient.connected && this.stompClient.active;\n }\n\n /**\n * Event responsable to emit an event when the connection is established.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @return `Observable<boolean>`\n */\n public onConnect(): Observable<boolean> {\n return this.connected$.asObservable().pipe(filter((p) => p === true));\n }\n\n /**\n * Event responsable to emit an event when the connection is closed.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @return `Observable<void>`\n */\n public onDisconnect(): Observable<void> {\n return this.disconnected$.asObservable();\n }\n\n /**\n * Event responsable to emit an event when the connection is reestablished.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @return `Observable<void>`\n */\n public onReconnect(): Observable<void> {\n return this.reconnected$.asObservable();\n }\n\n /**\n * Event responsable to emit an event when an error ocurred.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @return `Observable<FrameImpl>`\n */\n public onError(): Observable<IFrame> {\n return this.error$.asObservable();\n }\n\n /**\n * Event responsible to emit an event when a primitive is called.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @typeParam `<T>` Object type that will be used in the observable for the `data` property.\n * @param {OnEventOptions} options Configurations for the event.\n * @return `Observable<PrimitiveEvent<T>>` Observable that emits an event when the service calls the primitive.\n */\n public onEvent<T>(options: OnEventOptions): Observable<PrimitiveEvent<T>> {\n const { domain, service, primitive } = options;\n const key = this.buildPrimitiveManagerKey(domain, service, primitive);\n\n const existingPrimitiveManager = this.primitiveManagers.get(key);\n if (existingPrimitiveManager) {\n return existingPrimitiveManager.getEventObservable();\n }\n\n const primitiveManager = new PrimitiveManager<T>(\n domain,\n service,\n primitive\n );\n this.primitiveManagers.set(key, primitiveManager);\n\n void this.connect().then(() => {\n this.onConnect()\n .pipe(take(1))\n .subscribe(() => {\n this.createStompSubscriptions(primitiveManager);\n });\n });\n\n return primitiveManager\n .getEventObservable()\n .pipe(\n finalize(\n () =>\n void this.unsubscribePrimitiveOnFinalize(\n primitiveManager\n )\n )\n );\n }\n\n /**\n * Event responsible to emit an event when a subscription is created for the primitive.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @param {OnEventOptions} options Configurations for the event.\n * Observable responsável por emitir uma notificação após o subscribe do evento pela primeira vez.\n * @return `Observable<boolean>` Observable that emits an event when the service calls the primitive.\n */\n public onSubscribe(options: OnEventOptions): Observable<boolean> {\n const { domain, service, primitive } = options;\n const key = this.buildPrimitiveManagerKey(domain, service, primitive);\n\n return this.onConnect().pipe(\n take(1),\n switchMap(() => {\n const existingPrimitiveManager =\n this.primitiveManagers.get(key);\n if (existingPrimitiveManager) {\n return existingPrimitiveManager\n .getSubscriptionObservable()\n .pipe(take(1));\n }\n\n return this.subscribed$.asObservable().pipe(\n filter((primitiveManager) => {\n return (\n this.buildPrimitiveManagerKey(\n primitiveManager.domain,\n primitiveManager.service,\n primitiveManager.primitive\n ) === key\n );\n }),\n map(() => true),\n take(1)\n );\n })\n );\n }\n\n private debug(message: string, ...optionalParams: unknown[]): void {\n if (!this.debugEnable) {\n return;\n }\n console.warn('WS debug: ' + message, ...optionalParams);\n }\n\n private info(message: string): void {\n console.warn('WS info: ' + message);\n }\n\n private handleOnConnected(): void {\n this.info('Webscoket connected');\n\n this.connected$.next(true);\n if (this.lostConnection) {\n this.info('Webscoket reconnected, recriating subscriptions');\n this.handleReconnection();\n }\n }\n\n private handleOnDisconnect(): void {\n this.info('Webscoket disconnected');\n\n this.connected$.next(false);\n this.disconnected$.next();\n }\n\n private handleOnWebSocketClose(data: CloseEvent): void {\n if (data?.reason === '') {\n this.lostConnection = true;\n this.handleError(\n 'Failed to send message to ExecutorSubscribableChannel',\n new FrameImpl({\n command: data.type,\n headers: {\n message: data.reason,\n },\n })\n );\n return;\n }\n\n if (data?.reason?.toLowerCase().indexOf('go away') !== -1) {\n this.lostConnection = true;\n this.handleError(\n 'AuthenticationError',\n new FrameImpl({\n command: data.type,\n headers: {\n message: data.reason,\n },\n })\n );\n return;\n }\n\n if (\n data?.reason?.toLowerCase().indexOf('cannot connect to server') !==\n -1\n ) {\n this.lostConnection = true;\n this.handleError(\n 'ConnectionError',\n new FrameImpl({\n command: data.type,\n headers: {\n message: data.reason,\n },\n })\n );\n return;\n }\n\n if (data.wasClean) {\n return;\n }\n\n this.lostConnection = true;\n }\n\n private handleOnStompError(data: IFrame): void {\n this.handleError('StompError', data);\n\n if (this.isAuthenticationError(data)) {\n this.info('Authentication error, recriating subscriptions');\n this.handleReconnection();\n }\n }\n\n private isAuthenticationError(data: IFrame): boolean {\n const errorMessage = data?.headers?.['message'];\n if (!errorMessage) {\n return false;\n }\n\n return errorMessage.toLowerCase().indexOf('forbiddenexception') !== -1;\n }\n\n private handleOnWebSocketError(data: unknown): void {\n this.handleError('WebSocketError', data as IFrame);\n }\n\n private handleError(origin: string, data: IFrame): void {\n console.error(origin, data);\n this.error$.next(data);\n }\n\n private handleReconnection(): void {\n this.lostConnection = false;\n this.reconnectPrimitives();\n this.reconnected$.next();\n }\n\n private reconnectPrimitives(): void {\n for (const primitiveManager of this.primitiveManagers.values()) {\n this.createStompSubscriptions(primitiveManager);\n }\n }\n\n private buildSubscriptionUrlWithToken(\n domain: string,\n service: string,\n primitive: string\n ): string {\n const authToken = this.userInformationService.getAuthToken();\n const tenant = this.userInformationService.getTenantDomain();\n return `/topic/${tenant}/${authToken}/${domain}/${service}/${primitive}`;\n }\n\n private getSubscriptionUrlWithoutToken(\n domain: string,\n service: string,\n primitive: string\n ): string {\n const tenant = this.userInformationService.getTenantDomain();\n return `/topic/${tenant}/${domain}/${service}/${primitive}`;\n }\n\n private buildPrimitiveManagerKey(\n domain: string,\n service: string,\n primitive: string\n ): string {\n return `${domain}/${service}/${primitive}`;\n }\n\n private async unsubscribePrimitiveOnFinalize(\n primitiveManager: PrimitiveManager<any>\n ): Promise<void> {\n primitiveManager.unsubscribe();\n\n const key = this.buildPrimitiveManagerKey(\n primitiveManager.domain,\n primitiveManager.service,\n primitiveManager.primitive\n );\n\n this.primitiveManagers.delete(key);\n\n await this.disconnectIfNoMoreObservables();\n }\n\n private async disconnectIfNoMoreObservables(): Promise<void> {\n if (this.getObserversCount() === 0) {\n this.debug(\n 'Manually disconnecting because there are no more observers'\n );\n await this.disconnect();\n }\n }\n\n private getObserversCount(): number {\n let observersCount = 0;\n\n this.primitiveManagers.forEach((primitiveManager) => {\n observersCount += primitiveManager.getObserversCount();\n });\n\n return observersCount;\n }\n\n private createStompSubscription<T>(\n destination: string,\n primitiveManager: PrimitiveManager<T>\n ): StompSubscription {\n return this.stompClient.subscribe(destination, (message) => {\n const event = JSON.parse(message.body || '{}');\n primitiveManager.fireEvent(event);\n });\n }\n\n private createStompSubscriptions<T>(\n primitiveManager: PrimitiveManager<T>\n ): void {\n const subscriptionUrlWithToken = this.buildSubscriptionUrlWithToken(\n primitiveManager.domain,\n primitiveManager.service,\n primitiveManager.primitive\n );\n const subscriptionUrlWithoutToken = this.getSubscriptionUrlWithoutToken(\n primitiveManager.domain,\n primitiveManager.service,\n primitiveManager.primitive\n );\n\n const stompSubscriptionWithToken = this.createStompSubscription(\n subscriptionUrlWithToken,\n primitiveManager\n );\n const stompSubscriptionWithoutToken = this.createStompSubscription(\n subscriptionUrlWithoutToken,\n primitiveManager\n );\n primitiveManager.subscribe(\n stompSubscriptionWithToken,\n stompSubscriptionWithoutToken\n );\n this.subscribed$.next(primitiveManager);\n }\n\n private getSubscriptionUrl(): string {\n return `${this.userInformationService.getWebSocketUrl()}/subscription`;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getCookie"],"mappings":"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"}
1
+ {"version":3,"file":"senior-gestao-empresarial-angular-components-websocket.mjs","sources":["../../projects/snr-erpx-angular-components/websocket/src/lib/user-information.service.ts","../../projects/snr-erpx-angular-components/websocket/src/lib/models/primitive-manager.ts","../../projects/snr-erpx-angular-components/websocket/src/lib/websocket.service.ts","../../projects/snr-erpx-angular-components/websocket/src/senior-gestao-empresarial-angular-components-websocket.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { get as getCookie } from 'js-cookie';\n\ninterface AuthToken {\n access_token?: string;\n username?: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserInformationService {\n private static readonly BASE_URL_COOKIE_KEY = 'com.senior.base.url';\n private static readonly TOKEN_COOKIE_KEY = 'com.senior.token';\n\n public getAuthToken(): string | undefined {\n const cookieValue =\n getCookie(UserInformationService.TOKEN_COOKIE_KEY) ?? '{}';\n const authToken = JSON.parse(cookieValue) as AuthToken;\n return authToken.access_token;\n }\n\n public getTenantDomain(): string | undefined {\n const cookieValue =\n getCookie(UserInformationService.TOKEN_COOKIE_KEY) ?? '{}';\n const authToken = JSON.parse(cookieValue) as AuthToken;\n return authToken.username?.split('@')[1];\n }\n\n public getWebSocketUrl(): string {\n let baseUrl = getCookie(UserInformationService.BASE_URL_COOKIE_KEY);\n if (baseUrl && !baseUrl.endsWith('/')) {\n baseUrl += '/';\n }\n return (baseUrl ?? '') + 'websocket';\n }\n}\n","import { StompSubscription } from '@stomp/stompjs';\nimport { BehaviorSubject, Subject, Observable } from 'rxjs';\nimport { PrimitiveEvent } from '../protocols/primitive-event';\n\nexport class PrimitiveManager<T> {\n public domain: string;\n public service: string;\n public primitive: string;\n\n private readonly stompSubscriptions: StompSubscription[];\n private readonly event$: Subject<PrimitiveEvent<T>>;\n private readonly subscribed$: BehaviorSubject<boolean>;\n\n public constructor(domain: string, service: string, primitive: string) {\n this.domain = domain;\n this.service = service;\n this.primitive = primitive;\n\n this.stompSubscriptions = [];\n this.event$ = new Subject<PrimitiveEvent<T>>();\n this.subscribed$ = new BehaviorSubject(false);\n }\n\n public unsubscribe(): void {\n this.event$.complete();\n\n for (const stompSubscription of this.stompSubscriptions) {\n stompSubscription.unsubscribe();\n }\n\n this.subscribed$.complete();\n }\n\n public fireEvent(event: PrimitiveEvent<T>): void {\n this.event$.next(event);\n }\n\n public subscribe(...subscriptions: StompSubscription[]): void {\n this.stompSubscriptions.push(...subscriptions);\n this.subscribed$.next(true);\n }\n\n public getEventObservable(): Observable<PrimitiveEvent<T>> {\n return this.event$.asObservable();\n }\n\n public getSubscriptionObservable(): Observable<boolean> {\n return this.subscribed$.asObservable();\n }\n\n public getObserversCount(): number {\n return this.event$.observers.length;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { filter, finalize, map, switchMap, take } from 'rxjs/operators';\nimport {\n IFrame,\n StompConfig,\n StompSubscription,\n Client,\n FrameImpl,\n} from '@stomp/stompjs';\nimport { BehaviorSubject, Subject, Observable } from 'rxjs';\nimport type SockJSStatic from 'sockjs-client';\n// O entry point padrão do `sockjs-client` (`lib/entry.js`) é código-fonte\n// browserify que lê o `global` do Node no momento em que o módulo é avaliado.\n// O bundler do Angular não injeta mais esse objeto, o que quebrava a aplicação\n// no bootstrap e exigia um polyfill (`window.global = window`) em cada consumidor.\n// O bundle pré-compilado em `dist/sockjs` já carrega o próprio shim de `global`,\n// expondo a mesma API sem depender de nada do ambiente Node.\n// @ts-expect-error O pacote só publica tipagem para o entry point padrão.\nimport SockJSBundle from 'sockjs-client/dist/sockjs';\nimport { AsyncLock } from '@senior-gestao-empresarial/angular-components/utils';\nimport { UserInformationService } from './user-information.service';\nimport { PrimitiveManager } from './models';\nimport { OnEventOptions, PrimitiveEvent } from './protocols';\n\nconst SockJS = SockJSBundle as typeof SockJSStatic;\n\nconst RECONNECT_INTERVAL_MILLISECONDS = 3000;\nconst CONNECTION_TIMEOUT_MILLISECONDS = 5000;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WebsocketService {\n private readonly userInformationService = inject(UserInformationService);\n\n private readonly connected$ = new BehaviorSubject<boolean>(false);\n private readonly disconnected$ = new Subject<void>();\n private readonly reconnected$ = new Subject<void>();\n private readonly error$ = new Subject<IFrame>();\n private readonly subscribed$ = new Subject<PrimitiveManager<any>>();\n\n private readonly primitiveManagers: Map<string, PrimitiveManager<any>> =\n new Map<string, PrimitiveManager<any>>();\n private readonly connectionLock = new AsyncLock();\n\n private stompClient!: Client;\n private debugEnable = false;\n private lostConnection = false;\n\n /**\n * Enables stompjs debug logs and additional info\n */\n public enableDebugLogs(): void {\n this.debugEnable = true;\n }\n\n /**\n * Manually starts the connection\n */\n public async connect(): Promise<void> {\n await this.connectionLock.acquire();\n\n try {\n if (this.isConnected() || this.isConnecting()) {\n return;\n }\n this.lostConnection = false;\n\n const stompConfig: StompConfig = {\n webSocketFactory: () => {\n return new SockJS(this.getSubscriptionUrl(), null, {\n timeout: CONNECTION_TIMEOUT_MILLISECONDS,\n });\n },\n connectionTimeout: CONNECTION_TIMEOUT_MILLISECONDS,\n reconnectDelay: RECONNECT_INTERVAL_MILLISECONDS,\n debug: this.debug.bind(this),\n onConnect: this.handleOnConnected.bind(this),\n onDisconnect: this.handleOnDisconnect.bind(this),\n onWebSocketClose: this.handleOnWebSocketClose.bind(this),\n onStompError: this.handleOnStompError.bind(this),\n onWebSocketError: this.handleOnWebSocketError.bind(this),\n };\n\n this.debug('Connecting the Webscoket');\n\n this.stompClient = new Client(stompConfig);\n this.stompClient.activate();\n } finally {\n await this.connectionLock.release();\n }\n }\n\n /**\n * Manually disconnect the websocket. The reconnect loop will be stopped.\n */\n public async disconnect(): Promise<void> {\n if (!this.isConnected()) {\n return;\n }\n\n await this.connectionLock.acquire();\n try {\n for (const primitiveManager of this.primitiveManagers.values()) {\n primitiveManager.unsubscribe();\n }\n\n this.primitiveManagers.clear();\n this.connected$.next(false);\n\n if (this.stompClient) {\n await this.stompClient.deactivate();\n }\n } finally {\n await this.connectionLock.release();\n }\n }\n\n /**\n * Check if the websocket is connected\n * @return `boolean` representing if the websocket is connected\n */\n public isConnected(): boolean {\n if (!this.stompClient) {\n return false;\n }\n\n return this.stompClient.connected;\n }\n\n /**\n * Check if the websocket is tring to connect\n * @return `boolean` representing if the websocket status\n */\n public isConnecting(): boolean {\n if (!this.stompClient) {\n return false;\n }\n\n return !this.stompClient.connected && this.stompClient.active;\n }\n\n /**\n * Event responsable to emit an event when the connection is established.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @return `Observable<boolean>`\n */\n public onConnect(): Observable<boolean> {\n return this.connected$.asObservable().pipe(filter((p) => p === true));\n }\n\n /**\n * Event responsable to emit an event when the connection is closed.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @return `Observable<void>`\n */\n public onDisconnect(): Observable<void> {\n return this.disconnected$.asObservable();\n }\n\n /**\n * Event responsable to emit an event when the connection is reestablished.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @return `Observable<void>`\n */\n public onReconnect(): Observable<void> {\n return this.reconnected$.asObservable();\n }\n\n /**\n * Event responsable to emit an event when an error ocurred.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @return `Observable<FrameImpl>`\n */\n public onError(): Observable<IFrame> {\n return this.error$.asObservable();\n }\n\n /**\n * Event responsible to emit an event when a primitive is called.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @typeParam `<T>` Object type that will be used in the observable for the `data` property.\n * @param {OnEventOptions} options Configurations for the event.\n * @return `Observable<PrimitiveEvent<T>>` Observable that emits an event when the service calls the primitive.\n */\n public onEvent<T>(options: OnEventOptions): Observable<PrimitiveEvent<T>> {\n const { domain, service, primitive } = options;\n const key = this.buildPrimitiveManagerKey(domain, service, primitive);\n\n const existingPrimitiveManager = this.primitiveManagers.get(key);\n if (existingPrimitiveManager) {\n return existingPrimitiveManager.getEventObservable();\n }\n\n const primitiveManager = new PrimitiveManager<T>(\n domain,\n service,\n primitive\n );\n this.primitiveManagers.set(key, primitiveManager);\n\n void this.connect().then(() => {\n this.onConnect()\n .pipe(take(1))\n .subscribe(() => {\n this.createStompSubscriptions(primitiveManager);\n });\n });\n\n return primitiveManager\n .getEventObservable()\n .pipe(\n finalize(\n () =>\n void this.unsubscribePrimitiveOnFinalize(\n primitiveManager\n )\n )\n );\n }\n\n /**\n * Event responsible to emit an event when a subscription is created for the primitive.\n * Do not forget to unsubscribe the observable when you don't need it anymore.\n * @param {OnEventOptions} options Configurations for the event.\n * Observable responsável por emitir uma notificação após o subscribe do evento pela primeira vez.\n * @return `Observable<boolean>` Observable that emits an event when the service calls the primitive.\n */\n public onSubscribe(options: OnEventOptions): Observable<boolean> {\n const { domain, service, primitive } = options;\n const key = this.buildPrimitiveManagerKey(domain, service, primitive);\n\n return this.onConnect().pipe(\n take(1),\n switchMap(() => {\n const existingPrimitiveManager =\n this.primitiveManagers.get(key);\n if (existingPrimitiveManager) {\n return existingPrimitiveManager\n .getSubscriptionObservable()\n .pipe(take(1));\n }\n\n return this.subscribed$.asObservable().pipe(\n filter((primitiveManager) => {\n return (\n this.buildPrimitiveManagerKey(\n primitiveManager.domain,\n primitiveManager.service,\n primitiveManager.primitive\n ) === key\n );\n }),\n map(() => true),\n take(1)\n );\n })\n );\n }\n\n private debug(message: string, ...optionalParams: unknown[]): void {\n if (!this.debugEnable) {\n return;\n }\n console.warn('WS debug: ' + message, ...optionalParams);\n }\n\n private info(message: string): void {\n console.warn('WS info: ' + message);\n }\n\n private handleOnConnected(): void {\n this.info('Webscoket connected');\n\n this.connected$.next(true);\n if (this.lostConnection) {\n this.info('Webscoket reconnected, recriating subscriptions');\n this.handleReconnection();\n }\n }\n\n private handleOnDisconnect(): void {\n this.info('Webscoket disconnected');\n\n this.connected$.next(false);\n this.disconnected$.next();\n }\n\n private handleOnWebSocketClose(data: CloseEvent): void {\n if (data?.reason === '') {\n this.lostConnection = true;\n this.handleError(\n 'Failed to send message to ExecutorSubscribableChannel',\n new FrameImpl({\n command: data.type,\n headers: {\n message: data.reason,\n },\n })\n );\n return;\n }\n\n if (data?.reason?.toLowerCase().indexOf('go away') !== -1) {\n this.lostConnection = true;\n this.handleError(\n 'AuthenticationError',\n new FrameImpl({\n command: data.type,\n headers: {\n message: data.reason,\n },\n })\n );\n return;\n }\n\n if (\n data?.reason?.toLowerCase().indexOf('cannot connect to server') !==\n -1\n ) {\n this.lostConnection = true;\n this.handleError(\n 'ConnectionError',\n new FrameImpl({\n command: data.type,\n headers: {\n message: data.reason,\n },\n })\n );\n return;\n }\n\n if (data.wasClean) {\n return;\n }\n\n this.lostConnection = true;\n }\n\n private handleOnStompError(data: IFrame): void {\n this.handleError('StompError', data);\n\n if (this.isAuthenticationError(data)) {\n this.info('Authentication error, recriating subscriptions');\n this.handleReconnection();\n }\n }\n\n private isAuthenticationError(data: IFrame): boolean {\n const errorMessage = data?.headers?.['message'];\n if (!errorMessage) {\n return false;\n }\n\n return errorMessage.toLowerCase().indexOf('forbiddenexception') !== -1;\n }\n\n private handleOnWebSocketError(data: unknown): void {\n this.handleError('WebSocketError', data as IFrame);\n }\n\n private handleError(origin: string, data: IFrame): void {\n console.error(origin, data);\n this.error$.next(data);\n }\n\n private handleReconnection(): void {\n this.lostConnection = false;\n this.reconnectPrimitives();\n this.reconnected$.next();\n }\n\n private reconnectPrimitives(): void {\n for (const primitiveManager of this.primitiveManagers.values()) {\n this.createStompSubscriptions(primitiveManager);\n }\n }\n\n private buildSubscriptionUrlWithToken(\n domain: string,\n service: string,\n primitive: string\n ): string {\n const authToken = this.userInformationService.getAuthToken();\n const tenant = this.userInformationService.getTenantDomain();\n return `/topic/${tenant}/${authToken}/${domain}/${service}/${primitive}`;\n }\n\n private getSubscriptionUrlWithoutToken(\n domain: string,\n service: string,\n primitive: string\n ): string {\n const tenant = this.userInformationService.getTenantDomain();\n return `/topic/${tenant}/${domain}/${service}/${primitive}`;\n }\n\n private buildPrimitiveManagerKey(\n domain: string,\n service: string,\n primitive: string\n ): string {\n return `${domain}/${service}/${primitive}`;\n }\n\n private async unsubscribePrimitiveOnFinalize(\n primitiveManager: PrimitiveManager<any>\n ): Promise<void> {\n primitiveManager.unsubscribe();\n\n const key = this.buildPrimitiveManagerKey(\n primitiveManager.domain,\n primitiveManager.service,\n primitiveManager.primitive\n );\n\n this.primitiveManagers.delete(key);\n\n await this.disconnectIfNoMoreObservables();\n }\n\n private async disconnectIfNoMoreObservables(): Promise<void> {\n if (this.getObserversCount() === 0) {\n this.debug(\n 'Manually disconnecting because there are no more observers'\n );\n await this.disconnect();\n }\n }\n\n private getObserversCount(): number {\n let observersCount = 0;\n\n this.primitiveManagers.forEach((primitiveManager) => {\n observersCount += primitiveManager.getObserversCount();\n });\n\n return observersCount;\n }\n\n private createStompSubscription<T>(\n destination: string,\n primitiveManager: PrimitiveManager<T>\n ): StompSubscription {\n return this.stompClient.subscribe(destination, (message) => {\n const event = JSON.parse(message.body || '{}');\n primitiveManager.fireEvent(event);\n });\n }\n\n private createStompSubscriptions<T>(\n primitiveManager: PrimitiveManager<T>\n ): void {\n const subscriptionUrlWithToken = this.buildSubscriptionUrlWithToken(\n primitiveManager.domain,\n primitiveManager.service,\n primitiveManager.primitive\n );\n const subscriptionUrlWithoutToken = this.getSubscriptionUrlWithoutToken(\n primitiveManager.domain,\n primitiveManager.service,\n primitiveManager.primitive\n );\n\n const stompSubscriptionWithToken = this.createStompSubscription(\n subscriptionUrlWithToken,\n primitiveManager\n );\n const stompSubscriptionWithoutToken = this.createStompSubscription(\n subscriptionUrlWithoutToken,\n primitiveManager\n );\n primitiveManager.subscribe(\n stompSubscriptionWithToken,\n stompSubscriptionWithoutToken\n );\n this.subscribed$.next(primitiveManager);\n }\n\n private getSubscriptionUrl(): string {\n return `${this.userInformationService.getWebSocketUrl()}/subscription`;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getCookie"],"mappings":"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"}
package/package.json CHANGED
@@ -1,130 +1,130 @@
1
1
  {
2
- "name": "@senior-gestao-empresarial/angular-components",
3
- "version": "8.0.0",
4
- "schematics": "./schematics/collection.json",
5
- "ng-update": {
6
- "migrations": "./schematics/migrations.json"
7
- },
8
- "repository": {
9
- "type": "git",
10
- "url": "http://git.senior.com.br/gestao-empresarial/angular-components"
11
- },
12
- "peerDependencies": {
13
- "@angular/animations": "^18.2.0",
14
- "@angular/common": "^18.2.0",
15
- "@angular/core": "^18.2.0",
16
- "@angular/forms": "^18.2.0",
17
- "@angular/router": "^18.2.0",
18
- "@ngx-translate/core": "^16.0.0",
19
- "@seniorsistemas/angular-components": "~19.9.1",
20
- "@seniorsistemas/platform-components": "^7.0.0",
21
- "@seniorsistemas/primeng-theme": "^10.2.4",
22
- "@seniorsistemas/senior-platform-data": "^5.4.1",
23
- "@stomp/stompjs": "^6.1.2",
24
- "js-cookie": "^2.2.1",
25
- "primeng": "^18.0.0",
26
- "rxjs": "^7.8.0",
27
- "sockjs-client": "^1.6.1"
28
- },
29
- "peerDependenciesMeta": {
30
- "@stomp/stompjs": {
31
- "optional": true
32
- },
33
- "js-cookie": {
34
- "optional": true
35
- },
36
- "sockjs-client": {
37
- "optional": true
38
- }
39
- },
40
2
  "dependencies": {
41
3
  "moment": "^2.30.1",
42
4
  "tslib": "^2.3.0"
43
5
  },
44
- "module": "fesm2022/senior-gestao-empresarial-angular-components.mjs",
45
- "typings": "index.d.ts",
46
6
  "exports": {
47
- "./package.json": {
48
- "default": "./package.json"
49
- },
50
7
  ".": {
51
- "types": "./index.d.ts",
52
- "esm2022": "./esm2022/senior-gestao-empresarial-angular-components.mjs",
8
+ "default": "./fesm2022/senior-gestao-empresarial-angular-components.mjs",
53
9
  "esm": "./esm2022/senior-gestao-empresarial-angular-components.mjs",
54
- "default": "./fesm2022/senior-gestao-empresarial-angular-components.mjs"
10
+ "esm2022": "./esm2022/senior-gestao-empresarial-angular-components.mjs",
11
+ "types": "./index.d.ts"
55
12
  },
56
13
  "./breadcrumb": {
57
- "types": "./breadcrumb/index.d.ts",
58
- "esm2022": "./esm2022/breadcrumb/senior-gestao-empresarial-angular-components-breadcrumb.mjs",
14
+ "default": "./fesm2022/senior-gestao-empresarial-angular-components-breadcrumb.mjs",
59
15
  "esm": "./esm2022/breadcrumb/senior-gestao-empresarial-angular-components-breadcrumb.mjs",
60
- "default": "./fesm2022/senior-gestao-empresarial-angular-components-breadcrumb.mjs"
16
+ "esm2022": "./esm2022/breadcrumb/senior-gestao-empresarial-angular-components-breadcrumb.mjs",
17
+ "types": "./breadcrumb/index.d.ts"
61
18
  },
62
19
  "./global-filter": {
63
- "types": "./global-filter/index.d.ts",
64
- "esm2022": "./esm2022/global-filter/senior-gestao-empresarial-angular-components-global-filter.mjs",
20
+ "default": "./fesm2022/senior-gestao-empresarial-angular-components-global-filter.mjs",
65
21
  "esm": "./esm2022/global-filter/senior-gestao-empresarial-angular-components-global-filter.mjs",
66
- "default": "./fesm2022/senior-gestao-empresarial-angular-components-global-filter.mjs"
67
- },
68
- "./lookups": {
69
- "types": "./lookups/index.d.ts",
70
- "esm2022": "./esm2022/lookups/senior-gestao-empresarial-angular-components-lookups.mjs",
71
- "esm": "./esm2022/lookups/senior-gestao-empresarial-angular-components-lookups.mjs",
72
- "default": "./fesm2022/senior-gestao-empresarial-angular-components-lookups.mjs"
22
+ "esm2022": "./esm2022/global-filter/senior-gestao-empresarial-angular-components-global-filter.mjs",
23
+ "types": "./global-filter/index.d.ts"
73
24
  },
74
25
  "./locale": {
75
- "types": "./locale/index.d.ts",
76
- "esm2022": "./esm2022/locale/senior-gestao-empresarial-angular-components-locale.mjs",
26
+ "default": "./fesm2022/senior-gestao-empresarial-angular-components-locale.mjs",
77
27
  "esm": "./esm2022/locale/senior-gestao-empresarial-angular-components-locale.mjs",
78
- "default": "./fesm2022/senior-gestao-empresarial-angular-components-locale.mjs"
28
+ "esm2022": "./esm2022/locale/senior-gestao-empresarial-angular-components-locale.mjs",
29
+ "types": "./locale/index.d.ts"
30
+ },
31
+ "./lookups": {
32
+ "default": "./fesm2022/senior-gestao-empresarial-angular-components-lookups.mjs",
33
+ "esm": "./esm2022/lookups/senior-gestao-empresarial-angular-components-lookups.mjs",
34
+ "esm2022": "./esm2022/lookups/senior-gestao-empresarial-angular-components-lookups.mjs",
35
+ "types": "./lookups/index.d.ts"
79
36
  },
80
37
  "./nps": {
81
- "types": "./nps/index.d.ts",
82
- "esm2022": "./esm2022/nps/senior-gestao-empresarial-angular-components-nps.mjs",
38
+ "default": "./fesm2022/senior-gestao-empresarial-angular-components-nps.mjs",
83
39
  "esm": "./esm2022/nps/senior-gestao-empresarial-angular-components-nps.mjs",
84
- "default": "./fesm2022/senior-gestao-empresarial-angular-components-nps.mjs"
40
+ "esm2022": "./esm2022/nps/senior-gestao-empresarial-angular-components-nps.mjs",
41
+ "types": "./nps/index.d.ts"
85
42
  },
86
43
  "./object-card": {
87
- "types": "./object-card/index.d.ts",
88
- "esm2022": "./esm2022/object-card/senior-gestao-empresarial-angular-components-object-card.mjs",
44
+ "default": "./fesm2022/senior-gestao-empresarial-angular-components-object-card.mjs",
89
45
  "esm": "./esm2022/object-card/senior-gestao-empresarial-angular-components-object-card.mjs",
90
- "default": "./fesm2022/senior-gestao-empresarial-angular-components-object-card.mjs"
46
+ "esm2022": "./esm2022/object-card/senior-gestao-empresarial-angular-components-object-card.mjs",
47
+ "types": "./object-card/index.d.ts"
48
+ },
49
+ "./package.json": {
50
+ "default": "./package.json"
91
51
  },
92
52
  "./permissions": {
93
- "types": "./permissions/index.d.ts",
94
- "esm2022": "./esm2022/permissions/senior-gestao-empresarial-angular-components-permissions.mjs",
53
+ "default": "./fesm2022/senior-gestao-empresarial-angular-components-permissions.mjs",
95
54
  "esm": "./esm2022/permissions/senior-gestao-empresarial-angular-components-permissions.mjs",
96
- "default": "./fesm2022/senior-gestao-empresarial-angular-components-permissions.mjs"
55
+ "esm2022": "./esm2022/permissions/senior-gestao-empresarial-angular-components-permissions.mjs",
56
+ "types": "./permissions/index.d.ts"
97
57
  },
98
58
  "./polling": {
99
- "types": "./polling/index.d.ts",
100
- "esm2022": "./esm2022/polling/senior-gestao-empresarial-angular-components-polling.mjs",
59
+ "default": "./fesm2022/senior-gestao-empresarial-angular-components-polling.mjs",
101
60
  "esm": "./esm2022/polling/senior-gestao-empresarial-angular-components-polling.mjs",
102
- "default": "./fesm2022/senior-gestao-empresarial-angular-components-polling.mjs"
61
+ "esm2022": "./esm2022/polling/senior-gestao-empresarial-angular-components-polling.mjs",
62
+ "types": "./polling/index.d.ts"
103
63
  },
104
64
  "./storage": {
105
- "types": "./storage/index.d.ts",
106
- "esm2022": "./esm2022/storage/senior-gestao-empresarial-angular-components-storage.mjs",
65
+ "default": "./fesm2022/senior-gestao-empresarial-angular-components-storage.mjs",
107
66
  "esm": "./esm2022/storage/senior-gestao-empresarial-angular-components-storage.mjs",
108
- "default": "./fesm2022/senior-gestao-empresarial-angular-components-storage.mjs"
67
+ "esm2022": "./esm2022/storage/senior-gestao-empresarial-angular-components-storage.mjs",
68
+ "types": "./storage/index.d.ts"
109
69
  },
110
70
  "./thumbnail": {
111
- "types": "./thumbnail/index.d.ts",
112
- "esm2022": "./esm2022/thumbnail/senior-gestao-empresarial-angular-components-thumbnail.mjs",
71
+ "default": "./fesm2022/senior-gestao-empresarial-angular-components-thumbnail.mjs",
113
72
  "esm": "./esm2022/thumbnail/senior-gestao-empresarial-angular-components-thumbnail.mjs",
114
- "default": "./fesm2022/senior-gestao-empresarial-angular-components-thumbnail.mjs"
73
+ "esm2022": "./esm2022/thumbnail/senior-gestao-empresarial-angular-components-thumbnail.mjs",
74
+ "types": "./thumbnail/index.d.ts"
115
75
  },
116
76
  "./utils": {
117
- "types": "./utils/index.d.ts",
118
- "esm2022": "./esm2022/utils/senior-gestao-empresarial-angular-components-utils.mjs",
77
+ "default": "./fesm2022/senior-gestao-empresarial-angular-components-utils.mjs",
119
78
  "esm": "./esm2022/utils/senior-gestao-empresarial-angular-components-utils.mjs",
120
- "default": "./fesm2022/senior-gestao-empresarial-angular-components-utils.mjs"
79
+ "esm2022": "./esm2022/utils/senior-gestao-empresarial-angular-components-utils.mjs",
80
+ "types": "./utils/index.d.ts"
121
81
  },
122
82
  "./websocket": {
123
- "types": "./websocket/index.d.ts",
124
- "esm2022": "./esm2022/websocket/senior-gestao-empresarial-angular-components-websocket.mjs",
83
+ "default": "./fesm2022/senior-gestao-empresarial-angular-components-websocket.mjs",
125
84
  "esm": "./esm2022/websocket/senior-gestao-empresarial-angular-components-websocket.mjs",
126
- "default": "./fesm2022/senior-gestao-empresarial-angular-components-websocket.mjs"
85
+ "esm2022": "./esm2022/websocket/senior-gestao-empresarial-angular-components-websocket.mjs",
86
+ "types": "./websocket/index.d.ts"
87
+ }
88
+ },
89
+ "module": "fesm2022/senior-gestao-empresarial-angular-components.mjs",
90
+ "name": "@senior-gestao-empresarial/angular-components",
91
+ "ng-update": {
92
+ "migrations": "./schematics/migrations.json"
93
+ },
94
+ "peerDependencies": {
95
+ "@angular/animations": "^18.2.0",
96
+ "@angular/common": "^18.2.0",
97
+ "@angular/core": "^18.2.0",
98
+ "@angular/forms": "^18.2.0",
99
+ "@angular/router": "^18.2.0",
100
+ "@ngx-translate/core": "^16.0.0",
101
+ "@seniorsistemas/angular-components": "~19.9.1",
102
+ "@seniorsistemas/platform-components": "^7.0.0",
103
+ "@seniorsistemas/primeng-theme": "^10.2.4",
104
+ "@seniorsistemas/senior-platform-data": "^5.4.1",
105
+ "@stomp/stompjs": "^6.1.2",
106
+ "js-cookie": "^2.2.1",
107
+ "primeng": "^18.0.0",
108
+ "rxjs": "^7.8.0",
109
+ "sockjs-client": "^1.6.1"
110
+ },
111
+ "peerDependenciesMeta": {
112
+ "@stomp/stompjs": {
113
+ "optional": true
114
+ },
115
+ "js-cookie": {
116
+ "optional": true
117
+ },
118
+ "sockjs-client": {
119
+ "optional": true
127
120
  }
128
121
  },
129
- "sideEffects": false
130
- }
122
+ "repository": {
123
+ "type": "git",
124
+ "url": "http://git.senior.com.br/gestao-empresarial/angular-components"
125
+ },
126
+ "schematics": "./schematics/collection.json",
127
+ "sideEffects": false,
128
+ "typings": "index.d.ts",
129
+ "version": "8.0.2"
130
+ }