@pepperi/lib
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.1.
164 lines • 24.5 kB
JavaScript
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
export var FileTypeEnum;
(function (FileTypeEnum) {
FileTypeEnum[FileTypeEnum["Script"] = 1] = "Script";
FileTypeEnum[FileTypeEnum["Style"] = 2] = "Style";
})(FileTypeEnum || (FileTypeEnum = {}));
export class FileService {
constructor() {
this.scripts = new Map();
this.styles = new Map();
}
loadFiles(files) {
const promises = [];
files.forEach((file) => {
if (file.type === FileTypeEnum.Style) {
promises.push(this.loadStyle(file.path));
}
else if (file.type === FileTypeEnum.Script) {
promises.push(this.loadScript(file.path));
}
});
return Promise.all(promises);
}
removeFiles(files) {
for (let index = 0; index < files.length && files[index].path && files[index].path.trim() !== ''; index++) {
const name = this.getFileName(files[index].path, true);
const element = document.getElementById(name);
element.parentNode.removeChild(element);
if (files[index].type === FileTypeEnum.Script && this.scripts.has(name)) {
this.scripts.delete(name);
}
else if (files[index].type === FileTypeEnum.Style && this.styles.has(name)) {
this.styles.delete(name);
}
}
}
loadScript(path) {
return new Promise((resolve, reject) => {
const name = this.getFileName(path, true);
// If the script isn't exist add it.
if (!this.scripts.has(name)) {
this.scripts.set(name, { loaded: false, src: path });
}
const scriptItem = this.scripts.get(name);
// Resolve if already loaded
if (scriptItem.loaded) {
resolve({ script: name, loaded: true, status: 'Already Loaded' });
}
else {
// Load script
const script = document.createElement('script');
script.type = 'text/javascript';
script.src = scriptItem.src;
script.setAttribute('id', name);
script.async = false;
if (script.readyState) {
// IE
script.onreadystatechange = () => {
if (script.readyState === 'loaded' || script.readyState === 'complete') {
script.onreadystatechange = null;
scriptItem.loaded = true;
resolve({ path, type: FileTypeEnum.Script, loaded: true, status: 'Loaded' });
}
};
}
else {
// Others
script.onload = () => {
scriptItem.loaded = true;
resolve({ path, type: FileTypeEnum.Script, loaded: true, status: 'Loaded' });
};
}
script.onerror = (error) => resolve({ path, type: FileTypeEnum.Script, loaded: false, status: 'Loaded' });
document.getElementsByTagName('head')[0].appendChild(script);
}
});
}
loadStyle(path) {
return new Promise((resolve, reject) => {
const name = this.getFileName(path, true);
// If the style isn't exist add it.
if (!this.styles.has(name)) {
this.styles.set(name, { loaded: false, src: path });
}
const styleItem = this.styles.get(name);
// Resolve if already loaded
if (styleItem.loaded) {
resolve({ path, type: FileTypeEnum.Style, loaded: true, status: 'Already Loaded' });
}
else {
// Load style
const style = document.createElement('link');
style.type = 'text/css';
style.rel = 'stylesheet';
style.href = styleItem.src;
style.media = 'all';
style.setAttribute('id', name);
styleItem.loaded = true;
resolve({ path, type: FileTypeEnum.Style, loaded: true, status: 'Loaded' });
document.getElementsByTagName('head')[0].appendChild(style);
}
});
}
getFileName(filePath, withExtenstion = false) {
let lastIndex = withExtenstion ? filePath.length - 1 : filePath.lastIndexOf('.');
return filePath.substr(filePath.lastIndexOf('/') + 1, lastIndex);
}
getFileExtension(filePath) {
var fileSplit = filePath.split('.');
var fileExt = '';
if (fileSplit.length > 1) {
fileExt = fileSplit[fileSplit.length - 2];
}
return fileExt;
}
/* Returns true if url is valid */
isValidUrl(url) {
/* Try creating a valid URL */
try {
const tmp = new URL(url);
return true;
}
catch (e) {
return false;
}
}
convertFromb64toBlob(b64Data, contentType = '', sliceSize = 512) {
const byteCharacters = atob(b64Data);
const byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
const slice = byteCharacters.slice(offset, offset + sliceSize);
const byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
const blob = new Blob(byteArrays, { type: contentType });
return blob;
}
getAssetsPath() {
return `/assets/pepperi-lib/`;
}
getAssetsTranslationsPath() {
return `${this.getAssetsPath()}i18n/`;
}
getAssetsImagesPath(image = '') {
return `${this.getAssetsPath()}images/${image}`;
}
getNoImagePath() {
return this.getAssetsImagesPath('no-image.svg');
}
}
FileService.ɵfac = function FileService_Factory(t) { return new (t || FileService)(); };
FileService.ɵprov = i0.ɵɵdefineInjectable({ token: FileService, factory: FileService.ɵfac, providedIn: 'root' });
/*@__PURE__*/ (function () { i0.ɵsetClassMetadata(FileService, [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], function () { return []; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGVwcGVyaS1saWIvc3JjL2NvcmUvY29tbW9uL3NlcnZpY2VzL2ZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUV6QyxNQUFNLENBQU4sSUFBWSxZQUdYO0FBSEQsV0FBWSxZQUFZO0lBQ3BCLG1EQUFZLENBQUE7SUFDWixpREFBVyxDQUFBO0FBQ2YsQ0FBQyxFQUhXLFlBQVksS0FBWixZQUFZLFFBR3ZCO0FBWUQsTUFBTSxPQUFPLFdBQVc7SUFJcEI7UUFDSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxFQUEwQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQTBDLENBQUM7SUFDcEUsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUEwQjtRQUNoQyxNQUFNLFFBQVEsR0FBVSxFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25CLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsS0FBSyxFQUFFO2dCQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDNUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxNQUFNLEVBQUU7Z0JBQzFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUM3QztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxX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LE1BQU0sV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbkMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDeEM7WUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5QyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzlCO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELGFBQWE7UUFDVCxPQUFPLHNCQUFzQixDQUFDO0lBQ2xDLENBQUM7SUFFRCx5QkFBeUI7UUFDckIsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDO0lBQzFDLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxRQUFnQixFQUFFO1FBQ2xDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsS0FBSyxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGNBQWM7UUFDVixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNwRCxDQUFDOztzRUExS1EsV0FBVzttREFBWCxXQUFXLFdBQVgsV0FBVyxtQkFGUixNQUFNO2tEQUVULFdBQVc7Y0FIdkIsVUFBVTtlQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBlbnVtIEZpbGVUeXBlRW51bSB7XHJcbiAgICAnU2NyaXB0JyA9IDEsXHJcbiAgICAnU3R5bGUnID0gMixcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbEZpbGVNb2RlbCB7XHJcbiAgICBwYXRoOiBzdHJpbmc7XHJcbiAgICB0eXBlOiBGaWxlVHlwZUVudW07XHJcbn1cclxuXHJcbmRlY2xhcmUgdmFyIGRvY3VtZW50OiBhbnk7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlU2VydmljZSB7XHJcbiAgICBwcml2YXRlIHNjcmlwdHM6IE1hcDxzdHJpbmcsIHtsb2FkZWQ6IGJvb2xlYW47IHNyYzogc3RyaW5nfT47XHJcbiAgICBwcml2YXRlIHN0eWxlczogTWFwPHN0cmluZywge2xvYWRlZDogYm9vbGVhbjsgc3JjOiBzdHJpbmd9PjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnNjcmlwdHMgPSBuZXcgTWFwPHN0cmluZywge2xvYWRlZDogYm9vbGVhbjsgc3JjOiBzdHJpbmd9PigpO1xyXG4gICAgICAgIHRoaXMuc3R5bGVzID0gbmV3IE1hcDxzdHJpbmcsIHtsb2FkZWQ6IGJvb2xlYW47IHNyYzogc3RyaW5nfT4oKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkRmlsZXMoZmlsZXM6IEV4dGVybmFsRmlsZU1vZGVsW10pOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgY29uc3QgcHJvbWlzZXM6IGFueVtdID0gW107XHJcbiAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmlsZS50eXBlID09PSBGaWxlVHlwZUVudW0uU3R5bGUpIHtcclxuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5sb2FkU3R5bGUoZmlsZS5wYXRoKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsZS50eXBlID09PSBGaWxlVHlwZUVudW0uU2NyaXB0KSB7XHJcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMubG9hZFNjcmlwdChmaWxlLnBhdGgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRmlsZXMoZmlsZXM6IEV4dGVybmFsRmlsZU1vZGVsW10pOiB2b2lkIHtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZmlsZXMubGVuZ3RoICYmIGZpbGVzW2luZGV4XS5wYXRoICYmIGZpbGVzW2luZGV4XS5wYXRoLnRyaW0oKSAhPT0gJyc7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0RmlsZU5hbWUoZmlsZXNbaW5kZXhdLnBhdGgsIHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmaWxlc1tpbmRleF0udHlwZSA9PT0gRmlsZVR5cGVFbnVtLlNjcmlwdCAmJiB0aGlzLnNjcmlwdHMuaGFzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcmlwdHMuZGVsZXRlKG5hbWUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGVzW2luZGV4XS50eXBlID09PSBGaWxlVHlwZUVudW0uU3R5bGUgJiYgdGhpcy5zdHlsZXMuaGFzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0eWxlcy5kZWxldGUobmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZFNjcmlwdChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldEZpbGVOYW1lKHBhdGgsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgLy8gSWYgdGhlIHNjcmlwdCBpc24ndCBleGlzdCBhZGQgaXQuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zY3JpcHRzLmhhcyhuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY3JpcHRzLnNldChuYW1lLCB7bG9hZGVkOiBmYWxzZSwgc3JjOiBwYXRofSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNjcmlwdEl0ZW0gPSB0aGlzLnNjcmlwdHMuZ2V0KG5hbWUpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVzb2x2ZSBpZiBhbHJlYWR5IGxvYWRlZFxyXG4gICAgICAgICAgICBpZiAoc2NyaXB0SXRlbS5sb2FkZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoe3NjcmlwdDogbmFtZSwgbG9hZGVkOiB0cnVlLCBzdGF0dXM6ICdBbHJlYWR5IExvYWRlZCd9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIExvYWQgc2NyaXB0XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuICAgICAgICAgICAgICAgIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XHJcbiAgICAgICAgICAgICAgICBzY3JpcHQuc3JjID0gc2NyaXB0SXRlbS5zcmM7XHJcbiAgICAgICAgICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKCdpZCcsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgc2NyaXB0LmFzeW5jID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSUVcclxuICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0LnJlYWR5U3RhdGUgPT09ICdsb2FkZWQnIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdEl0ZW0ubG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe3BhdGgsIHR5cGU6IEZpbGVUeXBlRW51bS5TY3JpcHQsIGxvYWRlZDogdHJ1ZSwgc3RhdHVzOiAnTG9hZGVkJ30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0SXRlbS5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtwYXRoLCB0eXBlOiBGaWxlVHlwZUVudW0uU2NyaXB0LCBsb2FkZWQ6IHRydWUsIHN0YXR1czogJ0xvYWRlZCd9KTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoZXJyb3I6IGFueSkgPT4gcmVzb2x2ZSh7cGF0aCwgdHlwZTogRmlsZVR5cGVFbnVtLlNjcmlwdCwgbG9hZGVkOiBmYWxzZSwgc3RhdHVzOiAnTG9hZGVkJ30pO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZFN0eWxlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0RmlsZU5hbWUocGF0aCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBJZiB0aGUgc3R5bGUgaXNuJ3QgZXhpc3QgYWRkIGl0LlxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc3R5bGVzLmhhcyhuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdHlsZXMuc2V0KG5hbWUsIHtsb2FkZWQ6IGZhbHNlLCBzcmM6IHBhdGh9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3R5bGVJdGVtID0gdGhpcy5zdHlsZXMuZ2V0KG5hbWUpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVzb2x2ZSBpZiBhbHJlYWR5IGxvYWRlZFxyXG4gICAgICAgICAgICBpZiAoc3R5bGVJdGVtLmxvYWRlZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7cGF0aCwgdHlwZTogRmlsZVR5cGVFbnVtLlN0eWxlLCBsb2FkZWQ6IHRydWUsIHN0YXR1czogJ0FscmVhZHkgTG9hZGVkJ30pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gTG9hZCBzdHlsZVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XHJcbiAgICAgICAgICAgICAgICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcclxuICAgICAgICAgICAgICAgIHN0eWxlLnJlbCA9ICdzdHlsZXNoZWV0JztcclxuICAgICAgICAgICAgICAgIHN0eWxlLmhyZWYgPSBzdHlsZUl0ZW0uc3JjO1xyXG4gICAgICAgICAgICAgICAgc3R5bGUubWVkaWEgPSAnYWxsJztcclxuICAgICAgICAgICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZSgnaWQnLCBuYW1lKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzdHlsZUl0ZW0ubG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoe3BhdGgsIHR5cGU6IEZpbGVUeXBlRW51bS5TdHlsZSwgbG9hZGVkOiB0cnVlLCBzdGF0dXM6ICdMb2FkZWQnfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzdHlsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWxlTmFtZShmaWxlUGF0aDogc3RyaW5nLCB3aXRoRXh0ZW5zdGlvbjogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgbGFzdEluZGV4ID0gd2l0aEV4dGVuc3Rpb24gPyBmaWxlUGF0aC5sZW5ndGggLSAxIDogZmlsZVBhdGgubGFzdEluZGV4T2YoJy4nKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZpbGVQYXRoLnN1YnN0cihmaWxlUGF0aC5sYXN0SW5kZXhPZignLycpICsgMSwgbGFzdEluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciBmaWxlU3BsaXQgPSBmaWxlUGF0aC5zcGxpdCgnLicpO1xyXG4gICAgICAgIHZhciBmaWxlRXh0ID0gJyc7XHJcbiAgICAgICAgaWYgKGZpbGVTcGxpdC5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIGZpbGVFeHQgPSBmaWxlU3BsaXRbZmlsZVNwbGl0Lmxlbmd0aCAtIDJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmlsZUV4dDtcclxuICAgIH1cclxuXHJcbiAgICAvKiBSZXR1cm5zIHRydWUgaWYgdXJsIGlzIHZhbGlkICovXHJcbiAgICBpc1ZhbGlkVXJsKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgLyogVHJ5IGNyZWF0aW5nIGEgdmFsaWQgVVJMICovXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdG1wID0gbmV3IFVSTCh1cmwpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydEZyb21iNjR0b0Jsb2IoYjY0RGF0YTogYW55LCBjb250ZW50VHlwZSA9ICcnLCBzbGljZVNpemUgPSA1MTIpOiBCbG9iIHtcclxuICAgICAgICBjb25zdCBieXRlQ2hhcmFjdGVycyA9IGF0b2IoYjY0RGF0YSk7XHJcbiAgICAgICAgY29uc3QgYnl0ZUFycmF5cyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGg7IG9mZnNldCArPSBzbGljZVNpemUpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2xpY2UgPSBieXRlQ2hhcmFjdGVycy5zbGljZShvZmZzZXQsIG9mZnNldCArIHNsaWNlU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShzbGljZS5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBieXRlTnVtYmVyc1tpXSA9IHNsaWNlLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVOdW1iZXJzKTtcclxuICAgICAgICAgICAgYnl0ZUFycmF5cy5wdXNoKGJ5dGVBcnJheSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoYnl0ZUFycmF5cywge3R5cGU6IGNvbnRlbnRUeXBlfSk7XHJcbiAgICAgICAgcmV0dXJuIGJsb2I7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QXNzZXRzUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgL2Fzc2V0cy9wZXBwZXJpLWxpYi9gO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFzc2V0c1RyYW5zbGF0aW9uc1BhdGgoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5nZXRBc3NldHNQYXRoKCl9aTE4bi9gO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFzc2V0c0ltYWdlc1BhdGgoaW1hZ2U6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5nZXRBc3NldHNQYXRoKCl9aW1hZ2VzLyR7aW1hZ2V9YDtcclxuICAgIH1cclxuXHJcbiAgICBnZXROb0ltYWdlUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEFzc2V0c0ltYWdlc1BhdGgoJ25vLWltYWdlLnN2ZycpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==