ng-devui
Version:
DevUI components based on Angular
126 lines • 20.1 kB
JavaScript
import { DOCUMENT } from '@angular/common';
import { Inject, Injectable } from '@angular/core';
import { I18nService } from 'ng-devui/i18n';
import { Observable, from } from 'rxjs';
import { mergeMap } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "ng-devui/i18n";
export class SelectFiles {
constructor(i18n, doc) {
this.i18n = i18n;
this.doc = doc;
this.selectFiles = ({ multiple, accept, webkitdirectory }) => {
return new Promise((resolve) => {
const tempNode = this.document.getElementById('d-upload-temp');
if (tempNode) {
this.document.body.removeChild(tempNode);
}
const input = this.document.createElement('input');
input.style.position = 'fixed';
input.style.left = '-2000px';
input.style.top = '-2000px';
input.setAttribute('id', 'd-upload-temp');
input.setAttribute('type', 'file');
if (multiple) {
input.setAttribute('multiple', '');
}
if (accept) {
input.setAttribute('accept', accept);
}
if (webkitdirectory) {
input.setAttribute('webkitdirectory', '');
}
input.addEventListener('change', event => {
resolve(Array.prototype.slice.call(event.target.files));
});
this.document.body.appendChild(input); // Fix compatibility issue with Internet Explorer 11
this.simulateClickEvent(input);
});
};
this.isAllowedFileType = (accept, file) => {
if (accept) {
const acceptArr = accept.split(',');
const baseMimeType = file.type.replace(/\/.*$/, '');
return acceptArr.some((type) => {
const validType = type.trim();
// suffix name (e.g. '.png,.xlsx')
if (validType.startsWith('.')) {
return (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.toLowerCase().length - validType.toLowerCase().length) > -1);
// mime type like 'image/*'
}
else if (/\/\*$/.test(validType)) {
return baseMimeType === validType.replace(/\/.*$/, '');
}
// mime type like 'text/plain,application/json'
return file.type === validType;
});
}
return true;
};
this.beyondMaximalSize = (fileSize, maximumSize) => {
if (maximumSize) {
return fileSize > 1024 * 1024 * maximumSize;
}
return false;
};
this.beyondAllFilesMaximalSize = (fileSize, maximumSize) => {
if (maximumSize) {
return fileSize > 1024 * 1024 * maximumSize;
}
return false;
};
this.beyondMaximumFileCount = (files, maximumCount) => {
if (maximumCount) {
return files > maximumCount;
}
return false;
};
this.triggerSelectFiles = (fileOptions, uploadOptions) => {
const { multiple, accept, webkitdirectory } = fileOptions;
return from(this.selectFiles({ multiple, accept, webkitdirectory })).pipe(mergeMap(file => file));
};
this.triggerDropFiles = (fileOptions, uploadOptions, files) => {
return new Observable(observer => observer.next(files)).pipe(mergeMap(file => file));
};
this.document = this.doc;
this.i18nText = this.i18n.getI18nText().upload;
this.i18nSubscription = this.i18n.langChange().subscribe((data) => {
this.i18nText = data.upload;
});
}
checkAllFilesSize(fileSize, maximumSize) {
if (this.beyondMaximalSize(fileSize, maximumSize)) {
this.BEYOND_MAXIMAL_FILE_SIZE_MSG = this.i18nText.getAllFilesBeyondMaximalFileSizeMsg(maximumSize);
return { checkError: true, errorMsg: this.BEYOND_MAXIMAL_FILE_SIZE_MSG };
}
}
_validateFiles(filesLen, currentFile, accept, uploadOptions) {
if (!this.isAllowedFileType(accept, currentFile)) {
this.NOT_ALLOWED_FILE_TYPE_MSG = this.i18nText.getNotAllowedFileTypeMsg(currentFile.name, accept);
return { checkError: true, errorMsg: this.NOT_ALLOWED_FILE_TYPE_MSG };
}
if (this.beyondMaximalSize(currentFile.size, uploadOptions.maximumSize)) {
this.BEYOND_MAXIMAL_FILE_SIZE_MSG = this.i18nText.getBeyondMaximalFileSizeMsg(currentFile.name, uploadOptions.maximumSize);
return { checkError: true, errorMsg: this.BEYOND_MAXIMAL_FILE_SIZE_MSG };
}
if (this.beyondMaximumFileCount(filesLen, uploadOptions.maximumCount)) {
this.BEYOND_MAXIMAL_FILE_COUNT_MSG = this.i18nText.getBeyondMaximumFileCountMsg(uploadOptions.maximumCount);
return { checkError: true, errorMsg: this.BEYOND_MAXIMAL_FILE_COUNT_MSG };
}
return { checkError: false, errorMsg: undefined };
}
simulateClickEvent(input) {
const evt = new MouseEvent('click');
evt.stopPropagation();
input.dispatchEvent(evt);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SelectFiles, deps: [{ token: i1.I18nService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SelectFiles }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SelectFiles, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: i1.I18nService }, { type: undefined, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWZpbGVzLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2dWkvdXBsb2FkL3NlbGVjdC1maWxlcy51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFpQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBSTFDLE1BQU0sT0FBTyxXQUFXO0lBUXRCLFlBQW9CLElBQWlCLEVBQTRCLEdBQVE7UUFBckQsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUE0QixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBUXpFLGdCQUFXLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFnQixFQUFtQixFQUFFO1lBQ3JGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQy9ELElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxDQUFDO2dCQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUVuRCxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7Z0JBQy9CLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFB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QUksRUFBRSxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbkksT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQzNFLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDdEUsSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsNEJBQTRCLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVHLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUM1RSxDQUFDO1FBQ0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFLO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN0QixLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7K0dBaklVLFdBQVcsNkNBUXlCLFFBQVE7bUhBUjVDLFdBQVc7OzRGQUFYLFdBQVc7a0JBRHZCLFVBQVU7OzBCQVMrQixNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEkxOG5JbnRlcmZhY2UsIEkxOG5TZXJ2aWNlIH0gZnJvbSAnbmctZGV2dWkvaTE4bic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSUZpbGVPcHRpb25zLCBJVXBsb2FkT3B0aW9ucyB9IGZyb20gJy4vZmlsZS11cGxvYWRlci50eXBlcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZWxlY3RGaWxlcyB7XG4gIE5PVF9BTExPV0VEX0ZJTEVfVFlQRV9NU0c6IHN0cmluZztcbiAgQkVZT05EX01BWElNQUxfRklMRV9TSVpFX01TRzogc3RyaW5nO1xuICBCRVlPTkRfTUFYSU1BTF9GSUxFX0NPVU5UX01TRzogc3RyaW5nO1xuICBpMThuVGV4dDogSTE4bkludGVyZmFjZVsndXBsb2FkJ107XG4gIGkxOG5TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgZG9jdW1lbnQ6IERvY3VtZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaTE4bjogSTE4blNlcnZpY2UsIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jOiBhbnkpIHtcbiAgICB0aGlzLmRvY3VtZW50ID0gdGhpcy5kb2M7XG4gICAgdGhpcy5pMThuVGV4dCA9IHRoaXMuaTE4bi5nZXRJMThuVGV4dCgpLnVwbG9hZDtcbiAgICB0aGlzLmkxOG5TdWJzY3JpcHRpb24gPSB0aGlzLmkxOG4ubGFuZ0NoYW5nZSgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5pMThuVGV4dCA9IGRhdGEudXBsb2FkO1xuICAgIH0pO1xuICB9XG5cbiAgc2VsZWN0RmlsZXMgPSAoeyBtdWx0aXBsZSwgYWNjZXB0LCB3ZWJraXRkaXJlY3RvcnkgfTogSUZpbGVPcHRpb25zKTogUHJvbWlzZTxGaWxlW10+ID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IHRlbXBOb2RlID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZC11cGxvYWQtdGVtcCcpO1xuICAgICAgaWYgKHRlbXBOb2RlKSB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZW1wTm9kZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcblxuICAgICAgaW5wdXQuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgICAgaW5wdXQuc3R5bGUubGVmdCA9ICctMjAwMHB4JztcbiAgICAgIGlucHV0LnN0eWxlLnRvcCA9ICctMjAwMHB4JztcblxuICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsICdkLXVwbG9hZC10ZW1wJyk7XG4gICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnZmlsZScpO1xuICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoYWNjZXB0KSB7XG4gICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnYWNjZXB0JywgYWNjZXB0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHdlYmtpdGRpcmVjdG9yeSkge1xuICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3dlYmtpdGRpcmVjdG9yeScsICcnKTtcbiAgICAgIH1cblxuICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZXZlbnQgPT4ge1xuICAgICAgICByZXNvbHZlKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuZmlsZXMpKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlucHV0KTsgLy8gRml4IGNvbXBhdGliaWxpdHkgaXNzdWUgd2l0aCBJbnRlcm5ldCBFeHBsb3JlciAxMVxuICAgICAgdGhpcy5zaW11bGF0ZUNsaWNrRXZlbnQoaW5wdXQpO1xuICAgIH0pO1xuICB9O1xuXG4gIGlzQWxsb3dlZEZpbGVUeXBlID0gKGFjY2VwdDogc3RyaW5nLCBmaWxlOiBGaWxlKSA9PiB7XG4gICAgaWYgKGFjY2VwdCkge1xuICAgICAgY29uc3QgYWNjZXB0QXJyID0gYWNjZXB0LnNwbGl0KCcsJyk7XG4gICAgICBjb25zdCBiYXNlTWltZVR5cGUgPSBmaWxlLnR5cGUucmVwbGFjZSgvXFwvLiokLywgJycpO1xuICAgICAgcmV0dXJuIGFjY2VwdEFyci5zb21lKCh0eXBlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRUeXBlID0gdHlwZS50cmltKCk7XG4gICAgICAgIC8vICBzdWZmaXggbmFtZSAoZS5nLiAnLnBuZywueGxzeCcpXG4gICAgICAgIGlmICh2YWxpZFR5cGUuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodmFsaWRUeXBlLnRvTG93ZXJDYXNlKCksIGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLmxlbmd0aCAtIHZhbGlkVHlwZS50b0xvd2VyQ2FzZSgpLmxlbmd0aCkgPiAtMVxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gbWltZSB0eXBlIGxpa2UgJ2ltYWdlLyonXG4gICAgICAgIH0gZWxzZSBpZiAoL1xcL1xcKiQvLnRlc3QodmFsaWRUeXBlKSkge1xuICAgICAgICAgIHJldHVybiBiYXNlTWltZVR5cGUgPT09IHZhbGlkVHlwZS5yZXBsYWNlKC9cXC8uKiQvLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gIG1pbWUgdHlwZSBsaWtlICd0ZXh0L3BsYWluLGFwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIHJldHVybiBmaWxlLnR5cGUgPT09IHZhbGlkVHlwZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBiZXlvbmRNYXhpbWFsU2l6ZSA9IChmaWxlU2l6ZSwgbWF4aW11bVNpemUpID0+IHtcbiAgICBpZiAobWF4aW11bVNpemUpIHtcbiAgICAgIHJldHVybiBmaWxlU2l6ZSA+IDEwMjQgKiAxMDI0ICogbWF4aW11bVNpemU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBiZXlvbmRBbGxGaWxlc01heGltYWxTaXplID0gKGZpbGVTaXplLCBtYXhpbXVtU2l6ZSkgPT4ge1xuICAgIGlmIChtYXhpbXVtU2l6ZSkge1xuICAgICAgcmV0dXJuIGZpbGVTaXplID4gMTAyNCAqIDEwMjQgKiBtYXhpbXVtU2l6ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIGJleW9uZE1heGltdW1GaWxlQ291bnQgPSAoZmlsZXMsIG1heGltdW1Db3VudCkgPT4ge1xuICAgIGlmIChtYXhpbXVtQ291bnQpIHtcbiAgICAgIHJldHVybiBmaWxlcyA+IG1heGltdW1Db3VudDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIHRyaWdnZXJTZWxlY3RGaWxlcyA9IChmaWxlT3B0aW9uczogSUZpbGVPcHRpb25zLCB1cGxvYWRPcHRpb25zOiBJVXBsb2FkT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHsgbXVsdGlwbGUsIGFjY2VwdCwgd2Via2l0ZGlyZWN0b3J5IH0gPSBmaWxlT3B0aW9ucztcbiAgICByZXR1cm4gZnJvbSh0aGlzLnNlbGVjdEZpbGVzKHsgbXVsdGlwbGUsIGFjY2VwdCwgd2Via2l0ZGlyZWN0b3J5IH0pKS5waXBlKG1lcmdlTWFwKGZpbGUgPT4gPGFueT5maWxlKSk7XG4gIH07XG5cbiAgdHJpZ2dlckRyb3BGaWxlcyA9IChmaWxlT3B0aW9uczogSUZpbGVPcHRpb25zLCB1cGxvYWRPcHRpb25zOiBJVXBsb2FkT3B0aW9ucywgZmlsZXM6IGFueSkgPT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiBvYnNlcnZlci5uZXh0KGZpbGVzKSkucGlwZShtZXJnZU1hcChmaWxlID0+IDxhbnk+ZmlsZSkpO1xuXG4gIH07XG5cbiAgY2hlY2tBbGxGaWxlc1NpemUoZmlsZVNpemUsIG1heGltdW1TaXplKSB7XG4gICAgaWYgKHRoaXMuYmV5b25kTWF4aW1hbFNpemUoZmlsZVNpemUsIG1heGltdW1TaXplKSkge1xuICAgICAgdGhpcy5CRVlPTkRfTUFYSU1BTF9GSUxFX1NJWkVfTVNHID0gdGhpcy5pMThuVGV4dC5nZXRBbGxGaWxlc0JleW9uZE1heGltYWxGaWxlU2l6ZU1zZyhtYXhpbXVtU2l6ZSk7XG4gICAgICByZXR1cm4geyBjaGVja0Vycm9yOiB0cnVlLCBlcnJvck1zZzogdGhpcy5CRVlPTkRfTUFYSU1BTF9GSUxFX1NJWkVfTVNHIH07XG4gICAgfVxuICB9XG5cbiAgX3ZhbGlkYXRlRmlsZXMoZmlsZXNMZW4sIGN1cnJlbnRGaWxlLCBhY2NlcHQsIHVwbG9hZE9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuaXNBbGxvd2VkRmlsZVR5cGUoYWNjZXB0LCA8RmlsZT5jdXJyZW50RmlsZSkpIHtcbiAgICAgIHRoaXMuTk9UX0FMTE9XRURfRklMRV9UWVBFX01TRyA9IHRoaXMuaTE4blRleHQuZ2V0Tm90QWxsb3dlZEZpbGVUeXBlTXNnKCg8RmlsZT5jdXJyZW50RmlsZSkubmFtZSwgYWNjZXB0KTtcbiAgICAgIHJldHVybiB7IGNoZWNrRXJyb3I6IHRydWUsIGVycm9yTXNnOiB0aGlzLk5PVF9BTExPV0VEX0ZJTEVfVFlQRV9NU0cgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYmV5b25kTWF4aW1hbFNpemUoKDxGaWxlPmN1cnJlbnRGaWxlKS5zaXplLCB1cGxvYWRPcHRpb25zLm1heGltdW1TaXplKSkge1xuICAgICAgdGhpcy5CRVlPTkRfTUFYSU1BTF9GSUxFX1NJWkVfTVNHID0gdGhpcy5pMThuVGV4dC5nZXRCZXlvbmRNYXhpbWFsRmlsZVNpemVNc2coKDxGaWxlPmN1cnJlbnRGaWxlKS5uYW1lLCB1cGxvYWRPcHRpb25zLm1heGltdW1TaXplKTtcbiAgICAgIHJldHVybiB7IGNoZWNrRXJyb3I6IHRydWUsIGVycm9yTXNnOiB0aGlzLkJFWU9ORF9NQVhJTUFMX0ZJTEVfU0laRV9NU0cgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYmV5b25kTWF4aW11bUZpbGVDb3VudChmaWxlc0xlbiwgdXBsb2FkT3B0aW9ucy5tYXhpbXVtQ291bnQpKSB7XG4gICAgICB0aGlzLkJFWU9ORF9NQVhJTUFMX0ZJTEVfQ09VTlRfTVNHID0gdGhpcy5pMThuVGV4dC5nZXRCZXlvbmRNYXhpbXVtRmlsZUNvdW50TXNnKHVwbG9hZE9wdGlvbnMubWF4aW11bUNvdW50KTtcbiAgICAgIHJldHVybiB7IGNoZWNrRXJyb3I6IHRydWUsIGVycm9yTXNnOiB0aGlzLkJFWU9ORF9NQVhJTUFMX0ZJTEVfQ09VTlRfTVNHIH07XG4gICAgfVxuICAgIHJldHVybiB7IGNoZWNrRXJyb3I6IGZhbHNlLCBlcnJvck1zZzogdW5kZWZpbmVkIH07XG4gIH1cblxuICBzaW11bGF0ZUNsaWNrRXZlbnQoaW5wdXQpIHtcbiAgICBjb25zdCBldnQgPSBuZXcgTW91c2VFdmVudCgnY2xpY2snKTtcbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChldnQpO1xuICB9XG59XG4iXX0=