cocori-ng
Version:
Cocori-ng is an Angular full of great components & utilites based on Material
124 lines • 21.7 kB
JavaScript
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { map } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common/http";
export var SkipHeaders;
(function (SkipHeaders) {
SkipHeaders["TRUE"] = "true";
SkipHeaders["FALSE"] = "false";
})(SkipHeaders || (SkipHeaders = {}));
export class HttpService {
constructor(http, httpBackend) {
this.http = http;
this.httpBackend = httpBackend;
this.withCredentialsOption = false;
this.skip = SkipHeaders.FALSE;
this.httpWithoutInterceptor = new HttpClient(httpBackend);
}
set withCredentials(value) {
this.withCredentialsOption = value;
}
get withCredentials() {
return this.withCredentialsOption;
}
/** TODO: à tester car pas sûr que cela fonctionne... */
delete(path, params, skip = SkipHeaders.FALSE) {
let options = { params: this.buildUrlParams(params), withCredentials: this.withCredentialsOption };
if (skip === SkipHeaders.FALSE) {
options['headers'] = { skip: skip };
return this.http.delete(`${path}`, options)
.pipe(map(this.extractData.bind(this)));
}
else {
return this.httpWithoutInterceptor.delete(`${path}`, options)
.pipe(map(this.extractData.bind(this)));
}
}
get(path, params, skip = SkipHeaders.FALSE) {
let options = { params: this.buildUrlParams(params), withCredentials: this.withCredentialsOption };
if (skip === SkipHeaders.FALSE) {
options['headers'] = { skip: skip };
return this.http.get(`${path}`, options)
.pipe(map(this.extractData.bind(this)));
}
else {
return this.httpWithoutInterceptor.get(`${path}`, options)
.pipe(map(this.extractData.bind(this)));
}
}
post(path, body = {}, skip = SkipHeaders.FALSE) {
let options = { withCredentials: this.withCredentialsOption };
if (skip === SkipHeaders.FALSE) {
options['headers'] = new HttpHeaders().set('skip', skip);
return this.http.post(`${path}`, JSON.stringify(body), options).pipe(map(this.extractData.bind(this)));
}
else {
options['headers'] = new HttpHeaders()
.set('Content-Type', 'application/json; charset=utf-8');
return this.httpWithoutInterceptor.post(`${path}`, JSON.stringify(body), options).pipe(map(this.extractData.bind(this)));
}
}
put(path, body = {}, skip = SkipHeaders.FALSE) {
let options = { withCredentials: this.withCredentialsOption };
if (skip === SkipHeaders.FALSE) {
options['headers'] = { skip: skip };
return this.http.put(`${path}`, JSON.stringify(body), options).pipe(map(this.extractData.bind(this)));
}
else {
return this.httpWithoutInterceptor.put(`${path}`, JSON.stringify(body))
.pipe(map(this.extractData.bind(this)));
}
}
patch(path, body = {}, skip = SkipHeaders.FALSE) {
let options = { withCredentials: this.withCredentialsOption };
if (skip === SkipHeaders.FALSE) {
options['headers'] = new HttpHeaders().set('skip', skip);
return this.http.patch(`${path}`, JSON.stringify(body), options).pipe(map(this.extractData.bind(this)));
}
else {
options['headers'] = new HttpHeaders()
.set('Content-Type', 'application/json; charset=utf-8');
return this.httpWithoutInterceptor.patch(`${path}`, JSON.stringify(body), options).pipe(map(this.extractData.bind(this)));
}
}
file(path, params) {
return this.http.get(`${path}`, { params: this.buildUrlParams(params), withCredentials: this.withCredentialsOption, responseType: 'blob' })
.pipe(map(this.extractData.bind(this)));
}
upload(path, body = {}, options = { withCredentials: this.withCredentialsOption }) {
options['headers'] = new HttpHeaders().set('Content-Type', 'application/json; charset=utf-8');
options['reportProgress'] = true;
options['observe'] = "events";
return this.http.post(`${path}`, JSON.stringify(body), options);
}
extractData(res) {
if (!res)
return res;
const body = res.body;
if (res.status === 204)
return res.body;
if (body) {
return typeof res.body === 'string' ? JSON.parse(res.body) : res.body;
}
return res;
}
buildUrlParams(parameters) {
let params = new HttpParams();
for (const property in parameters) {
if (parameters.hasOwnProperty(property)) {
params = params.append(property, parameters[property]);
}
}
return params;
}
}
HttpService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: HttpService, deps: [{ token: i1.HttpClient }, { token: i1.HttpBackend }], target: i0.ɵɵFactoryTarget.Injectable });
HttpService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: HttpService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: HttpService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i1.HttpBackend }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29jb3JpLW5nL3NyYy9mZWF0dXJlLWNvcmUvc2VydmljZS9odHRwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLFVBQVUsRUFBYSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUVyQyxNQUFNLENBQU4sSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ25CLDRCQUFhLENBQUE7SUFDYiw4QkFBZSxDQUFBO0FBQ25CLENBQUMsRUFIVyxXQUFXLEtBQVgsV0FBVyxRQUd0QjtBQUtELE1BQU0sT0FBTyxXQUFXO0lBTXBCLFlBQ1ksSUFBZ0IsRUFDaEIsV0FBd0I7UUFEeEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQVAxQiwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFHekMsU0FBSSxHQUFnQixXQUFXLENBQUMsS0FBSyxDQUFDO1FBTTFDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFBVyxlQUFlLENBQUMsS0FBYztRQUNyQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDdEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDdEMsQ0FBQztJQUVELHdEQUF3RDtJQUN4RCxNQUFNLENBQUksSUFBWSxFQUFFLE1BQWUsRUFBRSxPQUFlLFdBQVcsQ0FBQyxLQUFLO1FBQ3JFLElBQUksT0FBTyxHQUFHLEVBQUUsTUFBTSxFQUFF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Q0FBQzs7d0dBL0pRLFdBQVc7NEdBQVgsV0FBVyxjQUZSLE1BQU07MkZBRVQsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQmFja2VuZCwgSHR0cENsaWVudCwgSHR0cEV2ZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmV4cG9ydCBlbnVtIFNraXBIZWFkZXJzIHtcclxuICAgIFRSVUUgPSAndHJ1ZScsXHJcbiAgICBGQUxTRSA9ICdmYWxzZScsXHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEh0dHBTZXJ2aWNlIHtcclxuICAgIHByb3RlY3RlZCB3aXRoQ3JlZGVudGlhbHNPcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGh0dHBXaXRob3V0SW50ZXJjZXB0b3I6IEh0dHBDbGllbnQ7XHJcblxyXG4gICAgcHJpdmF0ZSBza2lwOiBTa2lwSGVhZGVycyA9IFNraXBIZWFkZXJzLkZBTFNFO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBwcml2YXRlIGh0dHBCYWNrZW5kOiBIdHRwQmFja2VuZFxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5odHRwV2l0aG91dEludGVyY2VwdG9yID0gbmV3IEh0dHBDbGllbnQoaHR0cEJhY2tlbmQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgd2l0aENyZWRlbnRpYWxzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy53aXRoQ3JlZGVudGlhbHNPcHRpb24gPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHdpdGhDcmVkZW50aWFscygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHNPcHRpb247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRPRE86IMOgIHRlc3RlciBjYXIgcGFzIHPDu3IgcXVlIGNlbGEgZm9uY3Rpb25uZS4uLiAqL1xyXG4gICAgZGVsZXRlPFQ+KHBhdGg6IHN0cmluZywgcGFyYW1zPzogT2JqZWN0LCBza2lwOiBzdHJpbmcgPSBTa2lwSGVhZGVycy5GQUxTRSk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgICAgIGxldCBvcHRpb25zID0geyBwYXJhbXM6IHRoaXMuYnVpbGRVcmxQYXJhbXMocGFyYW1zKSwgd2l0aENyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFsc09wdGlvbiB9XHJcblxyXG4gICAgICAgIGlmIChza2lwID09PSBTa2lwSGVhZGVycy5GQUxTRSkge1xyXG5cclxuICAgICAgICAgICAgb3B0aW9uc1snaGVhZGVycyddID0geyBza2lwOiBza2lwIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3BhdGh9YCwgb3B0aW9ucylcclxuICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcCh0aGlzLmV4dHJhY3REYXRhLmJpbmQodGhpcykpXHJcbiAgICAgICAgICAgICAgICApIGFzIE9ic2VydmFibGU8VD47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFdpdGhvdXRJbnRlcmNlcHRvci5kZWxldGUoYCR7cGF0aH1gLCBvcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgbWFwKHRoaXMuZXh0cmFjdERhdGEuYmluZCh0aGlzKSlcclxuICAgICAgICAgICAgICAgICkgYXMgT2JzZXJ2YWJsZTxUPjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0PFQ+KHBhdGg6IHN0cmluZywgcGFyYW1zPzogT2JqZWN0LCBza2lwOiBzdHJpbmcgPSBTa2lwSGVhZGVycy5GQUxTRSk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgICAgIGxldCBvcHRpb25zID0geyBwYXJhbXM6IHRoaXMuYnVpbGRVcmxQYXJhbXMocGFyYW1zKSwgd2l0aENyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFsc09wdGlvbiB9XHJcblxyXG4gICAgICAgIGlmIChza2lwID09PSBTa2lwSGVhZGVycy5GQUxTRSkge1xyXG4gICAgICAgICAgICBvcHRpb25zWydoZWFkZXJzJ10gPSB7IHNraXA6IHNraXAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7cGF0aH1gLCBvcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUobWFwKHRoaXMuZXh0cmFjdERhdGEuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFdpdGhvdXRJbnRlcmNlcHRvci5nZXQoYCR7cGF0aH1gLCBvcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUobWFwKHRoaXMuZXh0cmFjdERhdGEuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHBvc3Q8VD4ocGF0aDogc3RyaW5nLCBib2R5OiBPYmplY3QgPSB7fSwgc2tpcDogc3RyaW5nID0gU2tpcEhlYWRlcnMuRkFMU0UpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgICAgICBsZXQgb3B0aW9uczogT2JqZWN0ID0geyB3aXRoQ3JlZGVudGlhbHM6IHRoaXMud2l0aENyZWRlbnRpYWxzT3B0aW9uIH1cclxuXHJcbiAgICAgICAgaWYgKHNraXAgPT09IFNraXBIZWFkZXJzLkZBTFNFKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnNbJ2hlYWRlcnMnXSA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgnc2tpcCcsIHNraXApXHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgICAgICAgICAgICBgJHtwYXRofWAsXHJcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShib2R5KSxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnNcclxuICAgICAgICAgICAgKS5waXBlKG1hcCh0aGlzLmV4dHJhY3REYXRhLmJpbmQodGhpcykpKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnNbJ2hlYWRlcnMnXSA9IG5ldyBIdHRwSGVhZGVycygpXHJcbiAgICAgICAgICAgICAgICAuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpXHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwV2l0aG91dEludGVyY2VwdG9yLnBvc3QoXHJcbiAgICAgICAgICAgICAgICBgJHtwYXRofWAsXHJcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShib2R5KSxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnNcclxuICAgICAgICAgICAgKS5waXBlKG1hcCh0aGlzLmV4dHJhY3REYXRhLmJpbmQodGhpcykpKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdXQ8VD4ocGF0aDogc3RyaW5nLCBib2R5OiBPYmplY3QgPSB7fSwgc2tpcDogc3RyaW5nID0gU2tpcEhlYWRlcnMuRkFMU0UpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIGxldCBvcHRpb25zID0geyB3aXRoQ3JlZGVudGlhbHM6IHRoaXMud2l0aENyZWRlbnRpYWxzT3B0aW9uIH1cclxuXHJcbiAgICAgICAgaWYgKHNraXAgPT09IFNraXBIZWFkZXJzLkZBTFNFKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnNbJ2hlYWRlcnMnXSA9IHsgc2tpcDogc2tpcCB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgICAgICAgICAgIGAke3BhdGh9YCxcclxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGJvZHkpLFxyXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xyXG4gICAgICAgICAgICApLnBpcGUobWFwKHRoaXMuZXh0cmFjdERhdGEuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFdpdGhvdXRJbnRlcmNlcHRvci5wdXQoYCR7cGF0aH1gLCBKU09OLnN0cmluZ2lmeShib2R5KSlcclxuICAgICAgICAgICAgICAgIC5waXBlKG1hcCh0aGlzLmV4dHJhY3REYXRhLmJpbmQodGhpcykpKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwYXRjaDxUPihwYXRoOiBzdHJpbmcsIGJvZHk6IE9iamVjdCA9IHt9LCBza2lwOiBzdHJpbmcgPSBTa2lwSGVhZGVycy5GQUxTRSk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgICAgIGxldCBvcHRpb25zOiBPYmplY3QgPSB7IHdpdGhDcmVkZW50aWFsczogdGhpcy53aXRoQ3JlZGVudGlhbHNPcHRpb24gfVxyXG5cclxuICAgICAgICBpZiAoc2tpcCA9PT0gU2tpcEhlYWRlcnMuRkFMU0UpIHtcclxuICAgICAgICAgICAgb3B0aW9uc1snaGVhZGVycyddID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdza2lwJywgc2tpcClcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2goXHJcbiAgICAgICAgICAgICAgICBgJHtwYXRofWAsXHJcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShib2R5KSxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnNcclxuICAgICAgICAgICAgKS5waXBlKG1hcCh0aGlzLmV4dHJhY3REYXRhLmJpbmQodGhpcykpKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnNbJ2hlYWRlcnMnXSA9IG5ldyBIdHRwSGVhZGVycygpXHJcbiAgICAgICAgICAgICAgICAuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpXHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwV2l0aG91dEludGVyY2VwdG9yLnBhdGNoKFxyXG4gICAgICAgICAgICAgICAgYCR7cGF0aH1gLFxyXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYm9keSksXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zXHJcbiAgICAgICAgICAgICkucGlwZShtYXAodGhpcy5leHRyYWN0RGF0YS5iaW5kKHRoaXMpKSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZmlsZTxUPihwYXRoOiBzdHJpbmcsIHBhcmFtcz86IE9iamVjdCk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3BhdGh9YCwgeyBwYXJhbXM6IHRoaXMuYnVpbGRVcmxQYXJhbXMocGFyYW1zKSwgd2l0aENyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFsc09wdGlvbiwgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAodGhpcy5leHRyYWN0RGF0YS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICApIGFzIE9ic2VydmFibGU8VD47XHJcbiAgICB9XHJcblxyXG4gICAgdXBsb2FkPFQ+KHBhdGg6IHN0cmluZywgYm9keTogT2JqZWN0ID0ge30sIG9wdGlvbnM6IE9iamVjdCA9IHsgd2l0aENyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFsc09wdGlvbiB9KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8VD4+IHtcclxuICAgICAgICBvcHRpb25zWydoZWFkZXJzJ10gPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7XHJcbiAgICAgICAgb3B0aW9uc1sncmVwb3J0UHJvZ3Jlc3MnXSA9IHRydWU7XHJcbiAgICAgICAgb3B0aW9uc1snb2JzZXJ2ZSddID0gXCJldmVudHNcIjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICAgICAgICBgJHtwYXRofWAsXHJcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGJvZHkpLFxyXG4gICAgICAgICAgICBvcHRpb25zXHJcbiAgICAgICAgKSBhcyBPYnNlcnZhYmxlPEh0dHBFdmVudDxUPj47XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGV4dHJhY3REYXRhKHJlczogUmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoIXJlcykgcmV0dXJuIHJlc1xyXG5cclxuICAgICAgICBjb25zdCBib2R5OiBhbnkgPSAoPGFueT5yZXMuYm9keSk7XHJcblxyXG4gICAgICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDQpIHJldHVybiByZXMuYm9keTtcclxuXHJcbiAgICAgICAgaWYgKGJvZHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiByZXMuYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKDxhbnk+cmVzLmJvZHkpIDogcmVzLmJvZHk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBidWlsZFVybFBhcmFtcyhwYXJhbWV0ZXJzOiBhbnkpOiBIdHRwUGFyYW1zIHtcclxuICAgICAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKHByb3BlcnR5LCBwYXJhbWV0ZXJzW3Byb3BlcnR5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhcmFtcztcclxuICAgIH1cclxufVxyXG5cclxuIl19