@cqa-lib/cqa-ui 1.1.175 → 1.1.177

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/esm2020/lib/compare-runs/compare-runs.component.mjs +1 -1
  2. package/esm2020/lib/dynamic-select/dynamic-select-field.component.mjs +3 -3
  3. package/esm2020/lib/execution-screen/db-query-execution-item/db-query-execution-item.component.mjs +70 -5
  4. package/esm2020/lib/execution-screen/db-verification-step/db-verification-step.component.mjs +15 -3
  5. package/esm2020/lib/iterations-loop/iterations-loop.component.mjs +1 -1
  6. package/esm2020/lib/step-builder/step-builder-action/step-builder-action.component.mjs +29 -9
  7. package/esm2020/lib/step-builder/step-builder-condition/step-builder-condition.component.mjs +330 -0
  8. package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +205 -0
  9. package/esm2020/lib/table/dynamic-table/dynamic-table.component.mjs +35 -3
  10. package/esm2020/lib/templates/table-template.component.mjs +7 -4
  11. package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step-data.mjs +5 -0
  12. package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step-ref.mjs +32 -0
  13. package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step.component.mjs +71 -0
  14. package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step.service.mjs +97 -0
  15. package/esm2020/lib/test-case-details/normal-step/normal-step.component.mjs +59 -9
  16. package/esm2020/lib/ui-kit.module.mjs +18 -3
  17. package/esm2020/lib/utils/tw-overlay-container.mjs +6 -3
  18. package/esm2020/public-api.mjs +7 -1
  19. package/fesm2015/cqa-lib-cqa-ui.mjs +939 -34
  20. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  21. package/fesm2020/cqa-lib-cqa-ui.mjs +926 -34
  22. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  23. package/lib/dynamic-select/dynamic-select-field.component.d.ts +1 -0
  24. package/lib/execution-screen/db-query-execution-item/db-query-execution-item.component.d.ts +18 -3
  25. package/lib/execution-screen/db-verification-step/db-verification-step.component.d.ts +7 -1
  26. package/lib/step-builder/step-builder-action/step-builder-action.component.d.ts +2 -1
  27. package/lib/step-builder/step-builder-condition/step-builder-condition.component.d.ts +61 -0
  28. package/lib/step-builder/step-builder-database/step-builder-database.component.d.ts +61 -0
  29. package/lib/table/dynamic-table/dynamic-table.component.d.ts +7 -1
  30. package/lib/templates/table-template.component.d.ts +6 -1
  31. package/lib/test-case-details/custom-edit-step/custom-edit-step-data.d.ts +8 -0
  32. package/lib/test-case-details/custom-edit-step/custom-edit-step-ref.d.ts +13 -0
  33. package/lib/test-case-details/custom-edit-step/custom-edit-step.component.d.ts +25 -0
  34. package/lib/test-case-details/custom-edit-step/custom-edit-step.service.d.ts +23 -0
  35. package/lib/test-case-details/normal-step/normal-step.component.d.ts +9 -0
  36. package/lib/ui-kit.module.d.ts +26 -23
  37. package/package.json +1 -1
  38. package/public-api.d.ts +6 -0
  39. package/styles.css +1 -1
@@ -0,0 +1,97 @@
1
+ import { Injectable, Injector } from '@angular/core';
2
+ import { OverlayConfig } from '@angular/cdk/overlay';
3
+ import { ComponentPortal } from '@angular/cdk/portal';
4
+ import { filter } from 'rxjs/operators';
5
+ import { CustomEditStepComponent } from './custom-edit-step.component';
6
+ import { CustomEditStepRef } from './custom-edit-step-ref';
7
+ import { CUSTOM_EDIT_STEP_DATA, } from './custom-edit-step-data';
8
+ import { CUSTOM_EDIT_STEP_REF } from './custom-edit-step-ref';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/cdk/overlay";
11
+ export class CustomEditStepService {
12
+ constructor(overlay, injector) {
13
+ this.overlay = overlay;
14
+ this.injector = injector;
15
+ /** Currently open Step Description overlay ref; only one panel is allowed at a time. */
16
+ this.currentRef = null;
17
+ }
18
+ /**
19
+ * Opens the Step Description modal positioned just below the given origin element.
20
+ * If a panel is already open, returns the existing ref and does not open a duplicate.
21
+ * @param origin Element (e.g. description span or edit icon) to position below
22
+ * @param data Initial description and optional help URL
23
+ * @returns Ref with afterClosed() and close(); afterClosed emits the new description on Apply, undefined on Cancel, or EDIT_IN_DEPTH symbol when user clicks "Edit in depth"
24
+ */
25
+ open(origin, data) {
26
+ if (this.currentRef) {
27
+ return this.currentRef;
28
+ }
29
+ const originEl = origin.nativeElement;
30
+ const gap = 8;
31
+ const modalWidth = 500;
32
+ const margin = 8;
33
+ originEl.scrollIntoView({ block: 'nearest', behavior: 'auto' });
34
+ const positionStrategy = this.overlay.position().global();
35
+ const overlayRef = this.overlay.create(new OverlayConfig({
36
+ hasBackdrop: true,
37
+ backdropClass: 'cdk-overlay-transparent-backdrop',
38
+ scrollStrategy: this.overlay.scrollStrategies.reposition(),
39
+ positionStrategy,
40
+ panelClass: ['cqa-custom-edit-step-panel', 'cqa-ui-root'],
41
+ width: 'min(560px, 90vw)',
42
+ }));
43
+ const updatePosition = () => {
44
+ const rect = originEl.getBoundingClientRect();
45
+ const viewportWidth = window.innerWidth;
46
+ let top = rect.bottom + gap;
47
+ let left = rect.left;
48
+ if (left + modalWidth > viewportWidth - margin) {
49
+ left = viewportWidth - modalWidth - margin;
50
+ }
51
+ if (left < margin) {
52
+ left = margin;
53
+ }
54
+ if (top < margin) {
55
+ top = margin;
56
+ }
57
+ positionStrategy.top(`${top}px`).left(`${left}px`);
58
+ overlayRef.updatePosition();
59
+ };
60
+ const editStepRef = new CustomEditStepRef(overlayRef);
61
+ const injector = Injector.create({
62
+ parent: this.injector,
63
+ providers: [
64
+ { provide: CUSTOM_EDIT_STEP_REF, useValue: editStepRef },
65
+ { provide: CUSTOM_EDIT_STEP_DATA, useValue: data },
66
+ ],
67
+ });
68
+ updatePosition();
69
+ const portal = new ComponentPortal(CustomEditStepComponent, undefined, injector);
70
+ overlayRef.attach(portal);
71
+ requestAnimationFrame(() => updatePosition());
72
+ const scrollListener = () => updatePosition();
73
+ window.addEventListener('scroll', scrollListener, true);
74
+ window.addEventListener('resize', scrollListener);
75
+ this.currentRef = editStepRef;
76
+ editStepRef.afterClosed().subscribe(() => {
77
+ this.currentRef = null;
78
+ window.removeEventListener('scroll', scrollListener, true);
79
+ window.removeEventListener('resize', scrollListener);
80
+ });
81
+ overlayRef.backdropClick().subscribe(() => editStepRef.close(undefined));
82
+ overlayRef
83
+ .keydownEvents()
84
+ .pipe(filter((e) => e.key === 'Escape' || e.key === 'Esc'))
85
+ .subscribe(() => editStepRef.close(undefined));
86
+ return editStepRef;
87
+ }
88
+ }
89
+ CustomEditStepService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CustomEditStepService, deps: [{ token: i1.Overlay }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
90
+ CustomEditStepService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CustomEditStepService, providedIn: 'root' });
91
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CustomEditStepService, decorators: [{
92
+ type: Injectable,
93
+ args: [{
94
+ providedIn: 'root',
95
+ }]
96
+ }], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.Injector }]; } });
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWVkaXQtc3RlcC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy9jdXN0b20tZWRpdC1zdGVwL2N1c3RvbS1lZGl0LXN0ZXAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQVcsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQ0wscUJBQXFCLEdBR3RCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7OztBQVU5RCxNQUFNLE9BQU8scUJBQXFCO0lBSWhDLFlBQTZCLE9BQWdCLEVBQW1CLFFBQWtCO1FBQXJELFlBQU8sR0FBUCxPQUFPLENBQVM7UUFBbUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUhsRix3RkFBd0Y7UUFDaEYsZUFBVSxHQUFtRCxJQUFJLENBQUM7SUFFVyxDQUFDO0lBRXRGOzs7Ozs7T0FNRztJQUNILElBQUksQ0FDRixNQUErQixFQUMvQixJQUF3QjtRQUV4QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ3hCO1FBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUN0QyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFD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WUFDdkIsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDM0QsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUVILFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLFVBQVU7YUFDUCxhQUFhLEVBQUU7YUFDZixJQUFJLENBQ0gsTUFBTSxDQUFDLENBQUMsQ0FBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FDcEU7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRWpELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7O2tIQTlGVSxxQkFBcUI7c0hBQXJCLHFCQUFxQixjQUZwQixNQUFNOzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ3VzdG9tRWRpdFN0ZXBDb21wb25lbnQgfSBmcm9tICcuL2N1c3RvbS1lZGl0LXN0ZXAuY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbUVkaXRTdGVwUmVmIH0gZnJvbSAnLi9jdXN0b20tZWRpdC1zdGVwLXJlZic7XG5pbXBvcnQge1xuICBDVVNUT01fRURJVF9TVEVQX0RBVEEsXG4gIENVU1RPTV9FRElUX1NURVBfRURJVF9JTl9ERVBUSCxcbiAgQ3VzdG9tRWRpdFN0ZXBEYXRhLFxufSBmcm9tICcuL2N1c3RvbS1lZGl0LXN0ZXAtZGF0YSc7XG5pbXBvcnQgeyBDVVNUT01fRURJVF9TVEVQX1JFRiB9IGZyb20gJy4vY3VzdG9tLWVkaXQtc3RlcC1yZWYnO1xuXG5leHBvcnQgdHlwZSBDdXN0b21FZGl0U3RlcFJlc3VsdCA9XG4gIHwgc3RyaW5nXG4gIHwgdW5kZWZpbmVkXG4gIHwgdHlwZW9mIENVU1RPTV9FRElUX1NURVBfRURJVF9JTl9ERVBUSDtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbUVkaXRTdGVwU2VydmljZSB7XG4gIC8qKiBDdXJyZW50bHkgb3BlbiBTdGVwIERlc2NyaXB0aW9uIG92ZXJsYXkgcmVmOyBvbmx5IG9uZSBwYW5lbCBpcyBhbGxvd2VkIGF0IGEgdGltZS4gKi9cbiAgcHJpdmF0ZSBjdXJyZW50UmVmOiBDdXN0b21FZGl0U3RlcFJlZjxDdXN0b21FZGl0U3RlcFJlc3VsdD4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXk6IE92ZXJsYXksIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7fVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgU3RlcCBEZXNjcmlwdGlvbiBtb2RhbCBwb3NpdGlvbmVkIGp1c3QgYmVsb3cgdGhlIGdpdmVuIG9yaWdpbiBlbGVtZW50LlxuICAgKiBJZiBhIHBhbmVsIGlzIGFscmVhZHkgb3BlbiwgcmV0dXJucyB0aGUgZXhpc3RpbmcgcmVmIGFuZCBkb2VzIG5vdCBvcGVuIGEgZHVwbGljYXRlLlxuICAgKiBAcGFyYW0gb3JpZ2luIEVsZW1lbnQgKGUuZy4gZGVzY3JpcHRpb24gc3BhbiBvciBlZGl0IGljb24pIHRvIHBvc2l0aW9uIGJlbG93XG4gICAqIEBwYXJhbSBkYXRhIEluaXRpYWwgZGVzY3JpcHRpb24gYW5kIG9wdGlvbmFsIGhlbHAgVVJMXG4gICAqIEByZXR1cm5zIFJlZiB3aXRoIGFmdGVyQ2xvc2VkKCkgYW5kIGNsb3NlKCk7IGFmdGVyQ2xvc2VkIGVtaXRzIHRoZSBuZXcgZGVzY3JpcHRpb24gb24gQXBwbHksIHVuZGVmaW5lZCBvbiBDYW5jZWwsIG9yIEVESVRfSU5fREVQVEggc3ltYm9sIHdoZW4gdXNlciBjbGlja3MgXCJFZGl0IGluIGRlcHRoXCJcbiAgICovXG4gIG9wZW4oXG4gICAgb3JpZ2luOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBkYXRhOiBDdXN0b21FZGl0U3RlcERhdGFcbiAgKTogQ3VzdG9tRWRpdFN0ZXBSZWY8Q3VzdG9tRWRpdFN0ZXBSZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5jdXJyZW50UmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50UmVmO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5FbCA9IG9yaWdpbi5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGdhcCA9IDg7XG4gICAgY29uc3QgbW9kYWxXaWR0aCA9IDUwMDtcbiAgICBjb25zdCBtYXJnaW4gPSA4O1xuXG4gICAgb3JpZ2luRWwuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnLCBiZWhhdmlvcjogJ2F1dG8nIH0pO1xuXG4gICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMub3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpO1xuXG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoXG4gICAgICBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICBiYWNrZHJvcENsYXNzOiAnY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AnLFxuICAgICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxuICAgICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgICBwYW5lbENsYXNzOiBbJ2NxYS1jdXN0b20tZWRpdC1zdGVwLXBhbmVsJywgJ2NxYS11aS1yb290J10sXG4gICAgICAgIHdpZHRoOiAnbWluKDU2MHB4LCA5MHZ3KScsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCB1cGRhdGVQb3NpdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHJlY3QgPSBvcmlnaW5FbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgIGxldCB0b3AgPSByZWN0LmJvdHRvbSArIGdhcDtcbiAgICAgIGxldCBsZWZ0ID0gcmVjdC5sZWZ0O1xuICAgICAgaWYgKGxlZnQgKyBtb2RhbFdpZHRoID4gdmlld3BvcnRXaWR0aCAtIG1hcmdpbikge1xuICAgICAgICBsZWZ0ID0gdmlld3BvcnRXaWR0aCAtIG1vZGFsV2lkdGggLSBtYXJnaW47XG4gICAgICB9XG4gICAgICBpZiAobGVmdCA8IG1hcmdpbikge1xuICAgICAgICBsZWZ0ID0gbWFyZ2luO1xuICAgICAgfVxuICAgICAgaWYgKHRvcCA8IG1hcmdpbikge1xuICAgICAgICB0b3AgPSBtYXJnaW47XG4gICAgICB9XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5LnRvcChgJHt0b3B9cHhgKS5sZWZ0KGAke2xlZnR9cHhgKTtcbiAgICAgIG92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZWRpdFN0ZXBSZWYgPSBuZXcgQ3VzdG9tRWRpdFN0ZXBSZWY8Q3VzdG9tRWRpdFN0ZXBSZXN1bHQ+KG92ZXJsYXlSZWYpO1xuXG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogQ1VTVE9NX0VESVRfU1RFUF9SRUYsIHVzZVZhbHVlOiBlZGl0U3RlcFJlZiB9LFxuICAgICAgICB7IHByb3ZpZGU6IENVU1RPTV9FRElUX1NURVBfREFUQSwgdXNlVmFsdWU6IGRhdGEgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICB1cGRhdGVQb3NpdGlvbigpO1xuXG4gICAgY29uc3QgcG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChDdXN0b21FZGl0U3RlcENvbXBvbmVudCwgdW5kZWZpbmVkLCBpbmplY3Rvcik7XG4gICAgb3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB1cGRhdGVQb3NpdGlvbigpKTtcblxuICAgIGNvbnN0IHNjcm9sbExpc3RlbmVyID0gKCk6IHZvaWQgPT4gdXBkYXRlUG9zaXRpb24oKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2Nyb2xsTGlzdGVuZXIsIHRydWUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzY3JvbGxMaXN0ZW5lcik7XG4gICAgdGhpcy5jdXJyZW50UmVmID0gZWRpdFN0ZXBSZWY7XG4gICAgZWRpdFN0ZXBSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50UmVmID0gbnVsbDtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzY3JvbGxMaXN0ZW5lciwgdHJ1ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc2Nyb2xsTGlzdGVuZXIpO1xuICAgIH0pO1xuXG4gICAgb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpID0+IGVkaXRTdGVwUmVmLmNsb3NlKHVuZGVmaW5lZCkpO1xuICAgIG92ZXJsYXlSZWZcbiAgICAgIC5rZXlkb3duRXZlbnRzKClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGU6IEtleWJvYXJkRXZlbnQpID0+IGUua2V5ID09PSAnRXNjYXBlJyB8fCBlLmtleSA9PT0gJ0VzYycpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IGVkaXRTdGVwUmVmLmNsb3NlKHVuZGVmaW5lZCkpO1xuXG4gICAgcmV0dXJuIGVkaXRTdGVwUmVmO1xuICB9XG59XG4iXX0=