UNPKG

@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
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==