@asi-ngtools/lib
Version:
This project is a little components library, simple to use, which will help you to simplify your project.
377 lines (376 loc) • 27.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Observable } from 'rxjs';
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { map, tap } from 'rxjs/operators';
/**
* Service de gestion de fichier
*/
var AsiFileService = /** @class */ (function () {
function AsiFileService(http, sanitizer) {
this.http = http;
this.sanitizer = sanitizer;
}
/**
* @param {?} file
* @param {?=} sanitize
* @return {?}
*/
AsiFileService.prototype.fileToBase64 = /**
* @param {?} file
* @param {?=} sanitize
* @return {?}
*/
function (file, sanitize) {
return this.toBase64(file, sanitize);
};
/**
* @param {?} file
* @param {?=} sanitize
* @return {?}
*/
AsiFileService.prototype.fileToBase64Url = /**
* @param {?} file
* @param {?=} sanitize
* @return {?}
*/
function (file, sanitize) {
return this.toBase64Url(file, sanitize);
};
/**
* @param {?} file
* @return {?}
*/
AsiFileService.prototype.fileToBase64Data = /**
* @param {?} file
* @return {?}
*/
function (file) {
return this.toBase64Data(file);
};
/**
* @param {?} blob
* @param {?=} sanitize
* @return {?}
*/
AsiFileService.prototype.blobToBase64 = /**
* @param {?} blob
* @param {?=} sanitize
* @return {?}
*/
function (blob, sanitize) {
return this.toBase64(blob, sanitize);
};
/**
* @param {?} blob
* @param {?=} sanitize
* @return {?}
*/
AsiFileService.prototype.blobToBase64Url = /**
* @param {?} blob
* @param {?=} sanitize
* @return {?}
*/
function (blob, sanitize) {
return this.toBase64Url(blob, sanitize);
};
/**
* @param {?} blob
* @return {?}
*/
AsiFileService.prototype.blobToBase64Data = /**
* @param {?} blob
* @return {?}
*/
function (blob) {
return this.toBase64Data(blob);
};
/**
* @param {?} data
* @param {?=} sanitize
* @return {?}
*/
AsiFileService.prototype.toBase64 = /**
* @param {?} data
* @param {?=} sanitize
* @return {?}
*/
function (data, sanitize) {
var _this = this;
return Observable.create(function (observer) {
/** @type {?} */
var reader = new FileReader();
reader.onloadend = function () {
/** @type {?} */
var content = reader.result;
if (!reader.result) {
content = /** @type {?} */ (reader['content']);
}
if (sanitize) {
content = _this.sanitizer.bypassSecurityTrustResourceUrl(content);
}
observer.next(content);
observer.complete();
};
reader.readAsDataURL(data);
});
};
/**
* @param {?} data
* @param {?=} sanitize
* @return {?}
*/
AsiFileService.prototype.toBase64Url = /**
* @param {?} data
* @param {?=} sanitize
* @return {?}
*/
function (data, sanitize) {
return this.toBase64(data, sanitize);
};
/**
* @param {?} data
* @return {?}
*/
AsiFileService.prototype.toBase64Data = /**
* @param {?} data
* @return {?}
*/
function (data) {
return Observable.create(function (observer) {
/** @type {?} */
var reader = new FileReader();
reader.onloadend = function () {
if (!reader.result) {
observer.next(window.btoa(/** @type {?} */ (reader['content'])));
}
else {
observer.next(window.btoa(/** @type {?} */ (reader.result)));
}
observer.complete();
};
reader.readAsBinaryString(data);
});
};
/**
* Download the blob file with the specified name
* @param {?} fileAsBlob the file to download as a Blob
* @param {?} fileName the name to give to the downloaded file
* @return {?}
*/
AsiFileService.prototype.saveToFile = /**
* Download the blob file with the specified name
* @param {?} fileAsBlob the file to download as a Blob
* @param {?} fileName the name to give to the downloaded file
* @return {?}
*/
function (fileAsBlob, fileName) {
// If no name is provided, we use the original name if available, or a default name
if (!fileName) {
if (!fileAsBlob.name) {
fileName = 'tmpFile';
}
else {
fileName = fileAsBlob.name;
}
}
if (window.navigator.msSaveBlob) {
// IE
window.navigator.msSaveBlob(fileAsBlob, fileName);
}
else {
/** @type {?} */
var url = window.URL.createObjectURL(fileAsBlob);
/** @type {?} */
var anchor = document.createElement('a');
anchor.download = fileName;
anchor.target = '_blank';
anchor.href = url;
anchor.dispatchEvent(new MouseEvent('click'));
}
};
/**
* Transform a Blob into a File adding a file name and a last modified date
* @param {?} response The blob response
* @return {?}
*/
AsiFileService.prototype.getFileFromBlobResponse = /**
* Transform a Blob into a File adding a file name and a last modified date
* @param {?} response The blob response
* @return {?}
*/
function (response) {
/** @type {?} */
var blob = response.body;
// May be null if the server doesn't explicitly add the content-disposition in the headers
if (blob.name == null) {
/** @type {?} */
var originalFileName = response.headers.get('content-disposition').replace(/ /g, '');
if (originalFileName) {
originalFileName = originalFileName.substring(originalFileName.lastIndexOf('filename=') + 9);
}
// The two attributes missing to a Blob to be a File
blob.name = originalFileName;
}
if (blob.lastModifiedDate == null) {
blob.lastModifiedDate = new Date();
}
return /** @type {?} */ (blob);
};
/**
* @param {?} file
* @return {?}
*/
AsiFileService.prototype.getFileUrl = /**
* @param {?} file
* @return {?}
*/
function (file) {
/** @type {?} */
var url = URL.createObjectURL(file);
return this.sanitizer.bypassSecurityTrustResourceUrl(url);
};
/**
* @param {?} fileUrl
* @return {?}
*/
AsiFileService.prototype.getFileAsText = /**
* @param {?} fileUrl
* @return {?}
*/
function (fileUrl) {
return this.http.get(fileUrl, { responseType: 'text' });
};
/**
* @param {?} fileUrl
* @return {?}
*/
AsiFileService.prototype.getFileAsBlob = /**
* @param {?} fileUrl
* @return {?}
*/
function (fileUrl) {
var _this = this;
return this.http.get(fileUrl, { responseType: 'blob', observe: 'response' }).pipe(map(function (response) {
return _this.getFileFromBlobResponse(response);
}));
};
/**
* @param {?} fileUrl
* @param {?} body
* @return {?}
*/
AsiFileService.prototype.getFileAsBlobFromPostRequest = /**
* @param {?} fileUrl
* @param {?} body
* @return {?}
*/
function (fileUrl, body) {
var _this = this;
return this.http.post(fileUrl, body, { responseType: 'blob', observe: 'response' }).pipe(map(function (response) {
return _this.getFileFromBlobResponse(response);
}));
};
/**
* Download the file at the given url
* @param fileUrl The url of the downloadable file
* @param fileName [Optional] The new name of the downloaded file
*/
/**
* Download the file at the given url
* @param {?} fileUrl The url of the downloadable file
* @param {?=} fileName [Optional] The new name of the downloaded file
* @return {?}
*/
AsiFileService.prototype.downloadFile = /**
* Download the file at the given url
* @param {?} fileUrl The url of the downloadable file
* @param {?=} fileName [Optional] The new name of the downloaded file
* @return {?}
*/
function (fileUrl, fileName) {
var _this = this;
return this.getFileAsBlob(fileUrl).pipe(tap(function (fileAsBlob) {
_this.saveToFile(fileAsBlob, fileName);
}));
};
/**
* Download the file at the given url from a POST request
* @param fileUrl The url of the downloadable file
* @param body the POST request body
* @param fileName [Optional] The new name of the downloaded file
*/
/**
* Download the file at the given url from a POST request
* @param {?} fileUrl The url of the downloadable file
* @param {?} body the POST request body
* @param {?=} fileName [Optional] The new name of the downloaded file
* @return {?}
*/
AsiFileService.prototype.downloadFileFromPostRequest = /**
* Download the file at the given url from a POST request
* @param {?} fileUrl The url of the downloadable file
* @param {?} body the POST request body
* @param {?=} fileName [Optional] The new name of the downloaded file
* @return {?}
*/
function (fileUrl, body, fileName) {
var _this = this;
return this.getFileAsBlobFromPostRequest(fileUrl, body).pipe(tap(function (fileAsBlob) {
_this.saveToFile(fileAsBlob, fileName);
}));
};
/**
* @param {?} fileUrl
* @return {?}
*/
AsiFileService.prototype.getBlobImage = /**
* @param {?} fileUrl
* @return {?}
*/
function (fileUrl) {
return this.http.get(fileUrl, { responseType: 'blob' });
};
/**
* @param {?} url
* @param {?} file
* @param {?=} reportProgress
* @return {?}
*/
AsiFileService.prototype.uploadFile = /**
* @param {?} url
* @param {?} file
* @param {?=} reportProgress
* @return {?}
*/
function (url, file, reportProgress) {
if (reportProgress === void 0) { reportProgress = false; }
/** @type {?} */
var formData = new FormData();
formData.append('file', file, file.name);
/** @type {?} */
var observe = reportProgress ? 'events' : 'body';
return this.http.post(url, formData, { reportProgress: reportProgress, observe: observe });
};
AsiFileService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
AsiFileService.ctorParameters = function () { return [
{ type: HttpClient },
{ type: DomSanitizer }
]; };
return AsiFileService;
}());
export { AsiFileService };
if (false) {
/** @type {?} */
AsiFileService.prototype.http;
/** @type {?} */
AsiFileService.prototype.sanitizer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLWZpbGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bhc2ktbmd0b29scy9saWIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvYXNpLWZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFtQixNQUFNLDJCQUEyQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0lBUXhDLHdCQUFvQixJQUFnQixFQUFVLFNBQXVCO1FBQWpELFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFjO0tBQ3BFOzs7Ozs7SUFFRCxxQ0FBWTs7Ozs7SUFBWixVQUFhLElBQVUsRUFBRSxRQUFrQjtRQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDdEM7Ozs7OztJQUVELHdDQUFlOzs7OztJQUFmLFVBQWdCLElBQVUsRUFBRSxRQUFrQjtRQUM1QyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDekM7Ozs7O0lBRUQseUNBQWdCOzs7O0lBQWhCLFVBQWlCLElBQVU7UUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDaEM7Ozs7OztJQUVELHFDQUFZOzs7OztJQUFaLFVBQWEsSUFBVSxFQUFFLFFBQWtCO1FBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztLQUN0Qzs7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Ozs7O2dCQVJGLFVBQVU7Z0JBRVYsWUFBWTs7eUJBSHJCOztTQVVhLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpYmVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG4vKipcclxuICogU2VydmljZSBkZSBnZXN0aW9uIGRlIGZpY2hpZXJcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEFzaUZpbGVTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7XHJcbiAgfVxyXG5cclxuICBmaWxlVG9CYXNlNjQoZmlsZTogRmlsZSwgc2FuaXRpemU/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLnRvQmFzZTY0KGZpbGUsIHNhbml0aXplKTtcclxuICB9XHJcblxyXG4gIGZpbGVUb0Jhc2U2NFVybChmaWxlOiBGaWxlLCBzYW5pdGl6ZT86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMudG9CYXNlNjRVcmwoZmlsZSwgc2FuaXRpemUpO1xyXG4gIH1cclxuXHJcbiAgZmlsZVRvQmFzZTY0RGF0YShmaWxlOiBGaWxlKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLnRvQmFzZTY0RGF0YShmaWxlKTtcclxuICB9XHJcblxyXG4gIGJsb2JUb0Jhc2U2NChibG9iOiBCbG9iLCBzYW5pdGl6ZT86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMudG9CYXNlNjQoYmxvYiwgc2FuaXRpemUpO1xyXG4gIH1cclxuXHJcbiAgYmxvYlRvQmFzZTY0VXJsKGJsb2I6IEJsb2IsIHNhbml0aXplPzogYm9vbGVhbik6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy50b0Jhc2U2NFVybChibG9iLCBzYW5pdGl6ZSk7XHJcbiAgfVxyXG5cclxuICBibG9iVG9CYXNlNjREYXRhKGJsb2I6IEJsb2IpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMudG9CYXNlNjREYXRhKGJsb2IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b0Jhc2U2NChkYXRhOiBhbnksIHNhbml0aXplPzogYm9vbGVhbik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoKG9ic2VydmVyOiBTdWJzY3JpYmVyPGFueT4pID0+IHtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHtcclxuICAgICAgICBsZXQgY29udGVudDogYW55ID0gcmVhZGVyLnJlc3VsdDtcclxuICAgICAgICBpZiAoIXJlYWRlci5yZXN1bHQpIHtcclxuICAgICAgICAgIGNvbnRlbnQgPSA8c3RyaW5nPnJlYWRlclsnY29udGVudCddO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2FuaXRpemUpIHtcclxuICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoY29udGVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9ic2VydmVyLm5leHQoY29udGVudCk7XHJcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgfVxyXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChkYXRhKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b0Jhc2U2NFVybChkYXRhOiBhbnksIHNhbml0aXplPzogYm9vbGVhbik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy50b0Jhc2U2NChkYXRhLCBzYW5pdGl6ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvQmFzZTY0RGF0YShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcjogU3Vic2NyaWJlcjxhbnk+KSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFyZWFkZXIucmVzdWx0KSB7XHJcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KHdpbmRvdy5idG9hKDxzdHJpbmc+cmVhZGVyWydjb250ZW50J10pKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dCh3aW5kb3cuYnRvYSg8c3RyaW5nPnJlYWRlci5yZXN1bHQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgfVxyXG4gICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGRhdGEpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEb3dubG9hZCB0aGUgYmxvYiBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lXHJcbiAgICogQHBhcmFtIGZpbGVBc0Jsb2IgdGhlIGZpbGUgdG8gZG93bmxvYWQgYXMgYSBCbG9iXHJcbiAgICogQHBhcmFtIGZpbGVOYW1lIHRoZSBuYW1lIHRvIGdpdmUgdG8gdGhlIGRvd25sb2FkZWQgZmlsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2F2ZVRvRmlsZShmaWxlQXNCbG9iOiBGaWxlLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyBJZiBubyBuYW1lIGlzIHByb3ZpZGVkLCB3ZSB1c2UgdGhlIG9yaWdpbmFsIG5hbWUgaWYgYXZhaWxhYmxlLCBvciBhIGRlZmF1bHQgbmFtZVxyXG4gICAgaWYgKCFmaWxlTmFtZSkge1xyXG4gICAgICBpZiAoIWZpbGVBc0Jsb2IubmFtZSkge1xyXG4gICAgICAgIGZpbGVOYW1lID0gJ3RtcEZpbGUnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbGVOYW1lID0gZmlsZUFzQmxvYi5uYW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAod2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKSB7ICAvLyBJRVxyXG4gICAgICB3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoZmlsZUFzQmxvYiwgZmlsZU5hbWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGVBc0Jsb2IpO1xyXG4gICAgICBjb25zdCBhbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgIGFuY2hvci5kb3dubG9hZCA9IGZpbGVOYW1lO1xyXG4gICAgICBhbmNob3IudGFyZ2V0ID0gJ19ibGFuayc7XHJcbiAgICAgIGFuY2hvci5ocmVmID0gdXJsO1xyXG4gICAgICBhbmNob3IuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnY2xpY2snKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFuc2Zvcm0gYSBCbG9iIGludG8gYSBGaWxlIGFkZGluZyBhIGZpbGUgbmFtZSBhbmQgYSBsYXN0IG1vZGlmaWVkIGRhdGVcclxuICAgKiBAcGFyYW0gcmVzcG9uc2UgVGhlIGJsb2IgcmVzcG9uc2VcclxuICAgKi9cclxuICBwcml2YXRlIGdldEZpbGVGcm9tQmxvYlJlc3BvbnNlKHJlc3BvbnNlOiBhbnkpOiBGaWxlIHtcclxuICAgIGNvbnN0IGJsb2I6IGFueSA9IHJlc3BvbnNlLmJvZHk7XHJcbiAgICAvLyBNYXkgYmUgbnVsbCBpZiB0aGUgc2VydmVyIGRvZXNuJ3QgZXhwbGljaXRseSBhZGQgdGhlIGNvbnRlbnQtZGlzcG9zaXRpb24gaW4gdGhlIGhlYWRlcnNcclxuICAgIGlmIChibG9iLm5hbWUgPT0gbnVsbCkge1xyXG4gICAgICBsZXQgb3JpZ2luYWxGaWxlTmFtZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWRpc3Bvc2l0aW9uJykucmVwbGFjZSgvIC9nLCAnJyk7XHJcbiAgICAgIGlmIChvcmlnaW5hbEZpbGVOYW1lKSB7XHJcbiAgICAgICAgb3JpZ2luYWxGaWxlTmFtZSA9IG9yaWdpbmFsRmlsZU5hbWUuc3Vic3RyaW5nKG9yaWdpbmFsRmlsZU5hbWUubGFzdEluZGV4T2YoJ2ZpbGVuYW1lPScpICsgOSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gVGhlIHR3byBhdHRyaWJ1dGVzIG1pc3NpbmcgdG8gYSBCbG9iIHRvIGJlIGEgRmlsZVxyXG4gICAgICBibG9iLm5hbWUgPSBvcmlnaW5hbEZpbGVOYW1lO1xyXG4gICAgfVxyXG4gICAgaWYgKGJsb2IubGFzdE1vZGlmaWVkRGF0ZSA9PSBudWxsKSB7XHJcbiAgICAgIGJsb2IubGFzdE1vZGlmaWVkRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPEZpbGU+YmxvYjtcclxuICB9XHJcblxyXG4gIGdldEZpbGVVcmwoZmlsZTogRmlsZSk6IFNhZmVSZXNvdXJjZVVybCB7XHJcbiAgICBsZXQgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodXJsKTtcclxuICB9XHJcblxyXG4gIGdldEZpbGVBc1RleHQoZmlsZVVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGZpbGVVcmwsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRGaWxlQXNCbG9iKGZpbGVVcmw6IHN0cmluZyk6IE9ic2VydmFibGU8RmlsZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZmlsZVVybCwgeyByZXNwb25zZVR5cGU6ICdibG9iJywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS5waXBlKG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmlsZUZyb21CbG9iUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmlsZUFzQmxvYkZyb21Qb3N0UmVxdWVzdChmaWxlVXJsOiBzdHJpbmcsIGJvZHk6IGFueSk6IE9ic2VydmFibGU8RmlsZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGZpbGVVcmwsIGJvZHksIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicsIG9ic2VydmU6ICdyZXNwb25zZScgfSkucGlwZShtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldEZpbGVGcm9tQmxvYlJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERvd25sb2FkIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiB1cmxcclxuICAgKiBAcGFyYW0gZmlsZVVybCBUaGUgdXJsIG9mIHRoZSBkb3dubG9hZGFibGUgZmlsZVxyXG4gICAqIEBwYXJhbSBmaWxlTmFtZSBbT3B0aW9uYWxdIFRoZSBuZXcgbmFtZSBvZiB0aGUgZG93bmxvYWRlZCBmaWxlXHJcbiAgICovXHJcbiAgZG93bmxvYWRGaWxlKGZpbGVVcmw6IHN0cmluZywgZmlsZU5hbWU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPEZpbGU+IHtcclxuICAgIHJldHVybiB0aGlzLmdldEZpbGVBc0Jsb2IoZmlsZVVybCkucGlwZSh0YXAoKGZpbGVBc0Jsb2IpID0+IHtcclxuICAgICAgdGhpcy5zYXZlVG9GaWxlKGZpbGVBc0Jsb2IsIGZpbGVOYW1lKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERvd25sb2FkIHRoZSBmaWxlIGF0IHRoZSBnaXZlbiB1cmwgZnJvbSBhIFBPU1QgcmVxdWVzdFxyXG4gICAqIEBwYXJhbSBmaWxlVXJsIFRoZSB1cmwgb2YgdGhlIGRvd25sb2FkYWJsZSBmaWxlXHJcbiAgICogQHBhcmFtIGJvZHkgdGhlIFBPU1QgcmVxdWVzdCBib2R5XHJcbiAgICogQHBhcmFtIGZpbGVOYW1lIFtPcHRpb25hbF0gVGhlIG5ldyBuYW1lIG9mIHRoZSBkb3dubG9hZGVkIGZpbGVcclxuICAgKi9cclxuICBkb3dubG9hZEZpbGVGcm9tUG9zdFJlcXVlc3QoZmlsZVVybDogc3RyaW5nLCBib2R5OiBhbnksIGZpbGVOYW1lPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxGaWxlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRGaWxlQXNCbG9iRnJvbVBvc3RSZXF1ZXN0KGZpbGVVcmwsIGJvZHkpLnBpcGUodGFwKChmaWxlQXNCbG9iKSA9PiB7XHJcbiAgICAgIHRoaXMuc2F2ZVRvRmlsZShmaWxlQXNCbG9iLCBmaWxlTmFtZSk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBnZXRCbG9iSW1hZ2UoZmlsZVVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCbG9iPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChmaWxlVXJsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkRmlsZSh1cmw6IHN0cmluZywgZmlsZTogRmlsZSwgcmVwb3J0UHJvZ3Jlc3MgPSBmYWxzZSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlLCBmaWxlLm5hbWUpO1xyXG4gICAgY29uc3Qgb2JzZXJ2ZTogYW55ID0gcmVwb3J0UHJvZ3Jlc3MgPyAnZXZlbnRzJyA6ICdib2R5JztcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIGZvcm1EYXRhLCB7IHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzcywgb2JzZXJ2ZTogb2JzZXJ2ZSB9KTtcclxuICB9XHJcbn1cclxuIl19