@hpe/angular-toolkit
Version:
Hewlett-Packard Enterprise : Angular toolkit for rapid project development
147 lines (146 loc) • 15 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
//=============================================================================
//===
//=== (C) Copyright 2018 Hewlett Packard Enterprise Development LP.
//===
//=== Use of this source code is governed by an MIT-style license that can be
//=== found in the LICENSE file
//=============================================================================
import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { DomSanitizer } from "@angular/platform-browser";
import { throwError } from "rxjs";
import { catchError, map, finalize } from "rxjs/operators";
import { AppEvent } from "@hpe/angular-toolkit/model";
import { EventBusService } from "./eventbus-service";
export class HttpService {
/**
* @param {?} httpClient
* @param {?} eventBusService
* @param {?} domSanitizer
*/
constructor(httpClient, eventBusService, domSanitizer) {
this.httpClient = httpClient;
this.eventBusService = eventBusService;
this.domSanitizer = domSanitizer;
this.openRequests = 0;
}
/**
* @return {?}
*/
get loading() {
return (this.openRequests > 0);
}
/**
* @param {?} url
* @param {?=} options
* @return {?}
*/
getObject(url, options) {
this.showLoader();
//--- "Pragma": "no-cache" for IE 11
let /** @type {?} */ header = {
"Pragma": "no-cache",
"Cache-Control": "no-cache",
"Expires": "0"
};
return this.httpClient.get(url, { params: options, headers: header }).pipe(catchError((error) => this.handleError(error)), finalize(() => this.hideLoader()));
}
/**
* @param {?} url
* @param {?=} options
* @return {?}
*/
getBlob(url, options) {
this.showLoader();
//--- Add timestamp to change static url to dynamic for IE 11
if (options != null) {
options.ts = Date.now();
}
return this.httpClient.get(url, { params: options, responseType: 'blob' }).pipe(map(e => this.getSanitizedUrl(URL.createObjectURL(e))), catchError((error) => this.handleError(error)), finalize(() => this.hideLoader()));
}
/**
* @param {?} url
* @param {?} object
* @param {?=} options
* @return {?}
*/
postObject(url, object, options) {
this.showLoader();
return this.httpClient.post(url, object, options).pipe(catchError((error) => this.handleError(error)), finalize(() => this.hideLoader()));
}
/**
* @param {?} url
* @return {?}
*/
getSanitizedUrl(url) {
return this.domSanitizer.bypassSecurityTrustResourceUrl(url);
}
/**
* @param {?} response
* @return {?}
*/
handleError(response) {
console.log("Got the following HTTP error : " + JSON.stringify(response));
let /** @type {?} */ error;
if (response.status == 422) {
//--- Unprocessable entity
error = response.error;
}
else {
error = {
code: response.status.toString(),
error: response.error.toString()
};
}
this.eventBusService.emitToError(error);
return throwError(error);
}
/**
* @return {?}
*/
showLoader() {
if (++this.openRequests == 1) {
this.eventBusService.emitToApp(new AppEvent(AppEvent.SUBMIT_START));
}
}
/**
* @return {?}
*/
hideLoader() {
if (--this.openRequests == 0) {
this.eventBusService.emitToApp(new AppEvent(AppEvent.SUBMIT_END));
}
}
}
HttpService.decorators = [
{ type: Injectable },
];
/** @nocollapse */
HttpService.ctorParameters = () => [
{ type: HttpClient, },
{ type: EventBusService, },
{ type: DomSanitizer, },
];
function HttpService_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
HttpService.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
HttpService.ctorParameters;
/** @type {?} */
HttpService.prototype.openRequests;
/** @type {?} */
HttpService.prototype.httpClient;
/** @type {?} */
HttpService.prototype.eventBusService;
/** @type {?} */
HttpService.prototype.domSanitizer;
}
//=============================================================================
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhwZS9hbmd1bGFyLXRvb2xraXQvc2VydmljZS8iLCJzb3VyY2VzIjpbImh0dHAtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBUSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFRLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUd2RCxPQUFPLEVBQWEsVUFBVSxFQUFDLE1BQVMsTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxRQUFRLEVBQWMsTUFBVSw0QkFBNEIsQ0FBQztBQUVyRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQWdCLG9CQUFvQixDQUFBO0FBSzVELE1BQU07Ozs7OztJQWdCTCxZQUFvQixVQUE0QixFQUNyQyxpQkFDQTtRQUZTLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQ3JDLG9CQUFlLEdBQWYsZUFBZTtRQUNmLGlCQUFZLEdBQVosWUFBWTs0QkFWUyxDQUFDO0tBVWE7Ozs7UUFRbkMsT0FBTztRQUNqQixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDOzs7Ozs7O0lBS3pCLFNBQVMsQ0FBQyxHQUFZLEVBQUUsT0FBYztRQUU1QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7O1FBSWxCLHFCQUFJLE1BQU0sR0FBRztZQUNaLFFBQVEsRUFBVSxVQUFVO1lBQzVCLGVBQWUsRUFBRyxVQUFVO1lBQzVCLFNBQVMsRUFBUyxHQUFHO1NBQ3JCLENBQUM7UUFFRixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzFFLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUM5QyxRQUFRLENBQUcsR0FBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQ3hDLENBQUM7Ozs7Ozs7SUFLSSxPQUFPLENBQUMsR0FBWSxFQUFFLE9BQWM7UUFFMUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDOztRQUlsQixFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNyQixPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUN4QjtRQUVLLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRyxNQUFNLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FDcEYsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDdEQsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQzlDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FDakMsQ0FBQzs7Ozs7Ozs7SUFLSSxVQUFVLENBQUMsR0FBVyxFQUFFLE1BQVcsRUFBRSxPQUFhO1FBRWxELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzVELFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUM5QyxRQUFRLENBQUcsR0FBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQ3hDLENBQUM7Ozs7OztJQUtJLGVBQWUsQ0FBQyxHQUFZO1FBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLDhCQUE4QixDQUFDLEdBQUcsQ0FBQyxDQUFDOzs7Ozs7SUFTdEQsV0FBVyxDQUFDLFFBQWM7UUFFakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFMUUscUJBQUksS0FBa0IsQ0FBQztRQUV2QixFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7O1lBRTVCLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxDQUFDLENBQUM7WUFDTCxLQUFLLEdBQUc7Z0JBQ1AsSUFBSSxFQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUNqQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7YUFDaEMsQ0FBQztTQUNGO1FBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7Ozs7SUFLbEIsVUFBVTtRQUVqQixFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztTQUNwRTs7Ozs7SUFLTSxVQUFVO1FBRWpCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ2xFOzs7O1lBbklGLFVBQVU7Ozs7WUFaSCxVQUFVO1lBUVYsZUFBZTtZQVBmLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLz09PVxuLy89PT0gKEMpIENvcHlyaWdodCAyMDE4IEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQLlxuLy89PT1cbi8vPT09IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4vLz09PSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmltcG9ydCB7SW5qZWN0YWJsZX0gICBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSAgIGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHtEb21TYW5pdGl6ZXJ9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XG5pbXBvcnQge1NhZmVVcmx9ICAgICAgZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvc3JjL3NlY3VyaXR5L2RvbV9zYW5pdGl6YXRpb25fc2VydmljZVwiO1xuXG5pbXBvcnQge09ic2VydmFibGUsIHRocm93RXJyb3J9ICAgIGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge2NhdGNoRXJyb3IsIG1hcCwgZmluYWxpemV9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHtBcHBFdmVudCwgRXJyb3JFdmVudCB9ICAgICBmcm9tIFwiQGhwZS9hbmd1bGFyLXRvb2xraXQvbW9kZWxcIjtcblxuaW1wb3J0IHtFdmVudEJ1c1NlcnZpY2V9ICAgICAgICAgICBmcm9tIFwiLi9ldmVudGJ1cy1zZXJ2aWNlXCJcblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSHR0cFNlcnZpY2Uge1xuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLy0tLVxuXHQvLy0tLSBWYXJpYWJsZXNcblx0Ly8tLS1cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHJpdmF0ZSBvcGVuUmVxdWVzdHMgOiBudW1iZXIgPSAwO1xuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLy0tLVxuXHQvLy0tLSBDb25zdHJ1Y3RvclxuXHQvLy0tLVxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHBDbGllbnQgICAgICA6IEh0dHBDbGllbnQsXG5cdFx0XHRcdHByaXZhdGUgZXZlbnRCdXNTZXJ2aWNlIDogRXZlbnRCdXNTZXJ2aWNlLFxuXHRcdFx0XHRwcml2YXRlIGRvbVNhbml0aXplciAgICA6IERvbVNhbml0aXplciApIHt9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cdC8vLS0tXG5cdC8vLS0tIEFQSSBtZXRob2RzXG5cdC8vLS0tXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHB1YmxpYyBnZXQgbG9hZGluZygpIDogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICh0aGlzLm9wZW5SZXF1ZXN0cyA+IDApO1xuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHVibGljIGdldE9iamVjdCh1cmwgOiBzdHJpbmcsIG9wdGlvbnM/IDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuXHRcdHRoaXMuc2hvd0xvYWRlcigpO1xuXG5cdFx0Ly8tLS0gXCJQcmFnbWFcIjogXCJuby1jYWNoZVwiIGZvciBJRSAxMVxuXG5cdFx0bGV0IGhlYWRlciA9IHtcblx0XHRcdFwiUHJhZ21hXCIgICAgICAgIDogXCJuby1jYWNoZVwiLFxuXHRcdFx0XCJDYWNoZS1Db250cm9sXCIgOiBcIm5vLWNhY2hlXCIsXG5cdFx0XHRcIkV4cGlyZXNcIiAgICAgICA6IFwiMFwiXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHVybCwgeyBwYXJhbXM6IG9wdGlvbnMsIGhlYWRlcnMgOiBoZWFkZXIgfSkucGlwZShcblx0XHRcdGNhdGNoRXJyb3IoKGVycm9yKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycm9yKSksXG5cdFx0XHRmaW5hbGl6ZSAgKCgpICAgICAgPT4gdGhpcy5oaWRlTG9hZGVyKCkpXG5cdFx0KTtcblx0fVxuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHB1YmxpYyBnZXRCbG9iKHVybCA6IHN0cmluZywgb3B0aW9ucz8gOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuXG5cdFx0dGhpcy5zaG93TG9hZGVyKCk7XG5cblx0XHQvLy0tLSBBZGQgdGltZXN0YW1wIHRvIGNoYW5nZSBzdGF0aWMgdXJsIHRvIGR5bmFtaWMgZm9yIElFIDExXG5cblx0XHRpZiAob3B0aW9ucyAhPSBudWxsKSB7XG5cdFx0XHRvcHRpb25zLnRzID0gRGF0ZS5ub3coKTtcblx0XHR9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQodXJsLCB7IHBhcmFtczogb3B0aW9ucywgcmVzcG9uc2VUeXBlIDogJ2Jsb2InfSkucGlwZShcblx0XHRcdG1hcChlID0+IHRoaXMuZ2V0U2FuaXRpemVkVXJsKFVSTC5jcmVhdGVPYmplY3RVUkwoZSkpKSxcblx0XHRcdGNhdGNoRXJyb3IoKGVycm9yKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycm9yKSksXG5cdFx0XHRmaW5hbGl6ZSgoKSA9PiB0aGlzLmhpZGVMb2FkZXIoKSlcblx0XHQpO1xuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHVibGljIHBvc3RPYmplY3QodXJsOiBzdHJpbmcsIG9iamVjdDogYW55LCBvcHRpb25zPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICB0aGlzLnNob3dMb2FkZXIoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QgKHVybCwgb2JqZWN0LCBvcHRpb25zKS5waXBlKFxuXHRcdFx0Y2F0Y2hFcnJvcigoZXJyb3IpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpKSxcblx0XHRcdGZpbmFsaXplICAoKCkgICAgICA9PiB0aGlzLmhpZGVMb2FkZXIoKSlcblx0XHQpO1xuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHVibGljIGdldFNhbml0aXplZFVybCh1cmwgOiBzdHJpbmcpOiBTYWZlVXJsIHtcblx0XHRyZXR1cm4gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHVybCk7XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8tLS1cblx0Ly8tLS0gUHJpdmF0ZSBtZXRob2RzXG5cdC8vLS0tXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdHByaXZhdGUgaGFuZGxlRXJyb3IocmVzcG9uc2UgOiBhbnkpIDogT2JzZXJ2YWJsZTxhbnk+IHtcblxuXHRcdGNvbnNvbGUubG9nKFwiR290IHRoZSBmb2xsb3dpbmcgSFRUUCBlcnJvciA6IFwiICsgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpKTtcblxuXHRcdGxldCBlcnJvciA6IEVycm9yRXZlbnQ7XG5cblx0XHRpZiAocmVzcG9uc2Uuc3RhdHVzID09IDQyMikge1xuXHRcdFx0Ly8tLS0gVW5wcm9jZXNzYWJsZSBlbnRpdHlcblx0XHRcdGVycm9yID0gcmVzcG9uc2UuZXJyb3I7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0ZXJyb3IgPSB7XG5cdFx0XHRcdGNvZGUgOiByZXNwb25zZS5zdGF0dXMudG9TdHJpbmcoKSxcblx0XHRcdFx0ZXJyb3I6IHJlc3BvbnNlLmVycm9yLnRvU3RyaW5nKClcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0dGhpcy5ldmVudEJ1c1NlcnZpY2UuZW1pdFRvRXJyb3IoZXJyb3IpO1xuXG5cdFx0cmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHJpdmF0ZSBzaG93TG9hZGVyKCk6IHZvaWQge1xuXG5cdFx0aWYgKCsrdGhpcy5vcGVuUmVxdWVzdHMgPT0gMSkge1xuXHRcdFx0dGhpcy5ldmVudEJ1c1NlcnZpY2UuZW1pdFRvQXBwKG5ldyBBcHBFdmVudChBcHBFdmVudC5TVUJNSVRfU1RBUlQpKTtcblx0XHR9XG5cdH1cblxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwcml2YXRlIGhpZGVMb2FkZXIoKTogdm9pZCB7XG5cblx0XHRpZiAoLS10aGlzLm9wZW5SZXF1ZXN0cyA9PSAwKSB7XG5cdFx0XHR0aGlzLmV2ZW50QnVzU2VydmljZS5lbWl0VG9BcHAobmV3IEFwcEV2ZW50KEFwcEV2ZW50LlNVQk1JVF9FTkQpKTtcblx0XHR9XG5cdH1cbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIl19