1 | /*
|
2 | Copyright 2013-2020 the original author or authors from the JHipster project.
|
3 |
|
4 | This file is part of the JHipster project, see https://www.jhipster.tech/
|
5 | for more information.
|
6 |
|
7 | Licensed under the Apache License, Version 2.0 (the "License");
|
8 | you may not use this file except in compliance with the License.
|
9 | You may obtain a copy of the License at
|
10 |
|
11 | http://www.apache.org/licenses/LICENSE-2.0
|
12 |
|
13 | Unless required by applicable law or agreed to in writing, software
|
14 | distributed under the License is distributed on an "AS IS" BASIS,
|
15 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16 | See the License for the specific language governing permissions and
|
17 | limitations under the License.
|
18 | */
|
19 | import { Injectable, SecurityContext, Optional, NgZone } from '@angular/core';
|
20 | import { DomSanitizer } from '@angular/platform-browser';
|
21 | import { TranslateService } from '@ngx-translate/core';
|
22 | import { JhiConfigService } from '../config.service';
|
23 | import * as i0 from "@angular/core";
|
24 | import * as i1 from "@angular/platform-browser";
|
25 | import * as i2 from "../config.service";
|
26 | import * as i3 from "@ngx-translate/core";
|
27 | export class JhiAlertService {
|
28 | constructor(sanitizer, configService, ngZone, translateService) {
|
29 | this.sanitizer = sanitizer;
|
30 | this.configService = configService;
|
31 | this.ngZone = ngZone;
|
32 | this.translateService = translateService;
|
33 | const config = this.configService.getConfig();
|
34 | this.toast = config.alertAsToast;
|
35 | this.i18nEnabled = config.i18nEnabled;
|
36 | this.alertId = 0; // unique id for each alert. Starts from 0.
|
37 | this.alerts = [];
|
38 | this.timeout = config.alertTimeout;
|
39 | }
|
40 | clear() {
|
41 | this.alerts.splice(0, this.alerts.length);
|
42 | }
|
43 | get() {
|
44 | return this.alerts;
|
45 | }
|
46 | success(msg, params, position) {
|
47 | return this.addAlert({
|
48 | type: 'success',
|
49 | msg,
|
50 | params,
|
51 | timeout: this.timeout,
|
52 | toast: this.isToast(),
|
53 | position
|
54 | }, []);
|
55 | }
|
56 | error(msg, params, position) {
|
57 | return this.addAlert({
|
58 | type: 'danger',
|
59 | msg,
|
60 | params,
|
61 | timeout: this.timeout,
|
62 | toast: this.isToast(),
|
63 | position
|
64 | }, []);
|
65 | }
|
66 | warning(msg, params, position) {
|
67 | return this.addAlert({
|
68 | type: 'warning',
|
69 | msg,
|
70 | params,
|
71 | timeout: this.timeout,
|
72 | toast: this.isToast(),
|
73 | position
|
74 | }, []);
|
75 | }
|
76 | info(msg, params, position) {
|
77 | return this.addAlert({
|
78 | type: 'info',
|
79 | msg,
|
80 | params,
|
81 | timeout: this.timeout,
|
82 | toast: this.isToast(),
|
83 | position
|
84 | }, []);
|
85 | }
|
86 | addAlert(alertOptions, extAlerts) {
|
87 | alertOptions.id = this.alertId++;
|
88 | if (this.i18nEnabled && alertOptions.msg) {
|
89 | alertOptions.msg = this.translateService.instant(alertOptions.msg, alertOptions.params);
|
90 | }
|
91 | const alert = this.factory(alertOptions);
|
92 | if (alertOptions.timeout && alertOptions.timeout > 0) {
|
93 | // Workaround protractor waiting for setTimeout.
|
94 | // Reference https://www.protractortest.org/#/timeouts
|
95 | this.ngZone.runOutsideAngular(() => {
|
96 | setTimeout(() => {
|
97 | this.ngZone.run(() => {
|
98 | this.closeAlert(alertOptions.id, extAlerts);
|
99 | });
|
100 | }, alertOptions.timeout);
|
101 | });
|
102 | }
|
103 | return alert;
|
104 | }
|
105 | closeAlert(id, extAlerts) {
|
106 | const thisAlerts = extAlerts && extAlerts.length > 0 ? extAlerts : this.alerts;
|
107 | return this.closeAlertByIndex(thisAlerts.map(e => e.id).indexOf(id), thisAlerts);
|
108 | }
|
109 | closeAlertByIndex(index, thisAlerts) {
|
110 | return thisAlerts.splice(index, 1);
|
111 | }
|
112 | isToast() {
|
113 | return this.toast;
|
114 | }
|
115 | factory(alertOptions) {
|
116 | const alert = {
|
117 | type: alertOptions.type,
|
118 | msg: this.sanitizer.sanitize(SecurityContext.HTML, alertOptions.msg),
|
119 | id: alertOptions.id,
|
120 | timeout: alertOptions.timeout,
|
121 | toast: alertOptions.toast,
|
122 | position: alertOptions.position ? alertOptions.position : 'top right',
|
123 | scoped: alertOptions.scoped,
|
124 | close: (alerts) => {
|
125 | return this.closeAlert(alertOptions.id, alerts);
|
126 | }
|
127 | };
|
128 | if (!alert.scoped) {
|
129 | this.alerts.push(alert);
|
130 | }
|
131 | return alert;
|
132 | }
|
133 | }
|
134 | JhiAlertService.ɵprov = i0.ɵɵdefineInjectable({ factory: function JhiAlertService_Factory() { return new JhiAlertService(i0.ɵɵinject(i1.DomSanitizer), i0.ɵɵinject(i2.JhiConfigService), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i3.TranslateService, 8)); }, token: JhiAlertService, providedIn: "root" });
|
135 | JhiAlertService.decorators = [
|
136 | { type: Injectable, args: [{
|
137 | providedIn: 'root'
|
138 | },] }
|
139 | ];
|
140 | JhiAlertService.ctorParameters = () => [
|
141 | { type: DomSanitizer },
|
142 | { type: JhiConfigService },
|
143 | { type: NgZone },
|
144 | { type: TranslateService, decorators: [{ type: Optional }] }
|
145 | ];
|
146 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlL2FsZXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBbUJyRCxNQUFNLE9BQU8sZUFBZTtJQU94QixZQUNZLFNBQXVCLEVBQ3ZCLGFBQStCLEVBQy9CLE1BQWMsRUFDRixnQkFBa0M7UUFIOUMsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNGLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFFdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsMkNBQTJDO1FBQzdELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUN2QyxDQUFDO0lBRUQsS0FBSztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENB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UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDOzs7O1lBMUlKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBckJRLFlBQVk7WUFHWixnQkFBZ0I7WUFKdUIsTUFBTTtZQUU3QyxnQkFBZ0IsdUJBZ0NoQixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiBDb3B5cmlnaHQgMjAxMy0yMDIwIHRoZSBvcmlnaW5hbCBhdXRob3Igb3IgYXV0aG9ycyBmcm9tIHRoZSBKSGlwc3RlciBwcm9qZWN0LlxuXG4gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEpIaXBzdGVyIHByb2plY3QsIHNlZSBodHRwczovL3d3dy5qaGlwc3Rlci50ZWNoL1xuIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBTZWN1cml0eUNvbnRleHQsIE9wdGlvbmFsLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBKaGlDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vY29uZmlnLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBKaGlBbGVydFR5cGUgPSAnc3VjY2VzcycgfCAnZGFuZ2VyJyB8ICd3YXJuaW5nJyB8ICdpbmZvJztcblxuZXhwb3J0IGludGVyZmFjZSBKaGlBbGVydCB7XG4gICAgaWQ/OiBudW1iZXI7XG4gICAgdHlwZTogSmhpQWxlcnRUeXBlO1xuICAgIG1zZzogc3RyaW5nO1xuICAgIHBhcmFtcz86IGFueTtcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIHRvYXN0PzogYm9vbGVhbjtcbiAgICBwb3NpdGlvbj86IHN0cmluZztcbiAgICBzY29wZWQ/OiBib29sZWFuO1xuICAgIGNsb3NlPzogKGFsZXJ0czogSmhpQWxlcnRbXSkgPT4gdm9pZDtcbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBKaGlBbGVydFNlcnZpY2Uge1xuICAgIHByaXZhdGUgYWxlcnRJZDogbnVtYmVyO1xuICAgIHByaXZhdGUgYWxlcnRzOiBKaGlBbGVydFtdO1xuICAgIHByaXZhdGUgdGltZW91dDogbnVtYmVyO1xuICAgIHByaXZhdGUgdG9hc3Q6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBpMThuRW5hYmxlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgICAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IEpoaUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICAgICkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHRoaXMudG9hc3QgPSBjb25maWcuYWxlcnRBc1RvYXN0O1xuICAgICAgICB0aGlzLmkxOG5FbmFibGVkID0gY29uZmlnLmkxOG5FbmFibGVkO1xuICAgICAgICB0aGlzLmFsZXJ0SWQgPSAwOyAvLyB1bmlxdWUgaWQgZm9yIGVhY2ggYWxlcnQuIFN0YXJ0cyBmcm9tIDAuXG4gICAgICAgIHRoaXMuYWxlcnRzID0gW107XG4gICAgICAgIHRoaXMudGltZW91dCA9IGNvbmZpZy5hbGVydFRpbWVvdXQ7XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuYWxlcnRzLnNwbGljZSgwLCB0aGlzLmFsZXJ0cy5sZW5ndGgpO1xuICAgIH1cblxuICAgIGdldCgpOiBKaGlBbGVydFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxlcnRzO1xuICAgIH1cblxuICAgIHN1Y2Nlc3MobXNnOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgcG9zaXRpb24/OiBzdHJpbmcpOiBKaGlBbGVydCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEFsZXJ0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXG4gICAgICAgICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGVycm9yKG1zZzogc3RyaW5nLCBwYXJhbXM/OiBhbnksIHBvc2l0aW9uPzogc3RyaW5nKTogSmhpQWxlcnQge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRBbGVydChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXG4gICAgICAgICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHdhcm5pbmcobXNnOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgcG9zaXRpb24/OiBzdHJpbmcpOiBKaGlBbGVydCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEFsZXJ0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXG4gICAgICAgICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGluZm8obXNnOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgcG9zaXRpb24/OiBzdHJpbmcpOiBKaGlBbGVydCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEFsZXJ0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXG4gICAgICAgICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZEFsZXJ0KGFsZXJ0T3B0aW9uczogSmhpQWxlcnQsIGV4dEFsZXJ0czogSmhpQWxlcnRbXSk6IEpoaUFsZXJ0IHtcbiAgICAgICAgYWxlcnRPcHRpb25zLmlkID0gdGhpcy5hbGVydElkKys7XG4gICAgICAgIGlmICh0aGlzLmkxOG5FbmFibGVkICYmIGFsZXJ0T3B0aW9ucy5tc2cpIHtcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9ucy5tc2cgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChhbGVydE9wdGlvbnMubXNnLCBhbGVydE9wdGlvbnMucGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGVydCA9IHRoaXMuZmFjdG9yeShhbGVydE9wdGlvbnMpO1xuICAgICAgICBpZiAoYWxlcnRPcHRpb25zLnRpbWVvdXQgJiYgYWxlcnRPcHRpb25zLnRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBwcm90cmFjdG9yIHdhaXRpbmcgZm9yIHNldFRpbWVvdXQuXG4gICAgICAgICAgICAgLy8gUmVmZXJlbmNlIGh0dHBzOi8vd3d3LnByb3RyYWN0b3J0ZXN0Lm9yZy8jL3RpbWVvdXRzXG4gICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZUFsZXJ0KGFsZXJ0T3B0aW9ucy5pZCwgZXh0QWxlcnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0sIGFsZXJ0T3B0aW9ucy50aW1lb3V0KTtcbiAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxlcnQ7XG4gICAgfVxuXG4gICAgY2xvc2VBbGVydChpZDogbnVtYmVyLCBleHRBbGVydHM/OiBKaGlBbGVydFtdKTogSmhpQWxlcnRbXSB7XG4gICAgICAgIGNvbnN0IHRoaXNBbGVydHM6IEpoaUFsZXJ0W10gPSBleHRBbGVydHMgJiYgZXh0QWxlcnRzLmxlbmd0aCA+IDAgPyBleHRBbGVydHMgOiB0aGlzLmFsZXJ0cztcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2VBbGVydEJ5SW5kZXgodGhpc0FsZXJ0cy5tYXAoZSA9PiBlLmlkKS5pbmRleE9mKGlkKSwgdGhpc0FsZXJ0cyk7XG4gICAgfVxuXG4gICAgY2xvc2VBbGVydEJ5SW5kZXgoaW5kZXg6IG51bWJlciwgdGhpc0FsZXJ0czogSmhpQWxlcnRbXSk6IEpoaUFsZXJ0W10ge1xuICAgICAgICByZXR1cm4gdGhpc0FsZXJ0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIGlzVG9hc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvYXN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZmFjdG9yeShhbGVydE9wdGlvbnM6IEpoaUFsZXJ0KTogSmhpQWxlcnQge1xuICAgICAgICBjb25zdCBhbGVydDogSmhpQWxlcnQgPSB7XG4gICAgICAgICAgICB0eXBlOiBhbGVydE9wdGlvbnMudHlwZSxcbiAgICAgICAgICAgIG1zZzogdGhpcy5zYW5pdGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LkhUTUwsIGFsZXJ0T3B0aW9ucy5tc2cpLFxuICAgICAgICAgICAgaWQ6IGFsZXJ0T3B0aW9ucy5pZCxcbiAgICAgICAgICAgIHRpbWVvdXQ6IGFsZXJ0T3B0aW9ucy50aW1lb3V0LFxuICAgICAgICAgICAgdG9hc3Q6IGFsZXJ0T3B0aW9ucy50b2FzdCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhbGVydE9wdGlvbnMucG9zaXRpb24gPyBhbGVydE9wdGlvbnMucG9zaXRpb24gOiAndG9wIHJpZ2h0JyxcbiAgICAgICAgICAgIHNjb3BlZDogYWxlcnRPcHRpb25zLnNjb3BlZCxcbiAgICAgICAgICAgIGNsb3NlOiAoYWxlcnRzOiBKaGlBbGVydFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2VBbGVydChhbGVydE9wdGlvbnMuaWQsIGFsZXJ0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICghYWxlcnQuc2NvcGVkKSB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0cy5wdXNoKGFsZXJ0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxlcnQ7XG4gICAgfVxufVxuIl19 |
\ | No newline at end of file |