UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

154 lines 22.4 kB
import { Component } from '@angular/core'; import { FormControl } from '@angular/forms'; import { ProgressType } from '../../../resources/resource-provider.service'; import * as i0 from "@angular/core"; import * as i1 from "../../models/side-menu-control"; import * as i2 from "../../../resources/engine-endpoint/petri-net-resource.service"; import * as i3 from "../../../navigation/service/path.service"; import * as i4 from "../../../logger/services/logger.service"; import * as i5 from "../../../snack-bar/services/snack-bar.service"; import * as i6 from "@ngx-translate/core"; export class FileUploadModel { stringId; data; inProgress; progress; completed; error; uploaded; downloading; sub; } export class AbstractImportNetComponent { _sideMenuControl; _petriNetResource; _pathService; _log; _snackbar; _translate; files = {}; releaseTypes = ['Major', 'Minor', 'Patch']; releaseTypeControl = new FormControl(this.releaseTypes[0]); _response = undefined; _fileInput; constructor(_sideMenuControl, _petriNetResource, _pathService, _log, _snackbar, _translate) { this._sideMenuControl = _sideMenuControl; this._petriNetResource = _petriNetResource; this._pathService = _pathService; this._log = _log; this._snackbar = _snackbar; this._translate = _translate; } ngAfterViewInit() { this._fileInput = document.getElementById('sidemenu-fileUpload'); this._fileInput.onchange = () => { for (const fileIndex of Array.from(Array(this._fileInput.files.length).keys())) { const file = this._fileInput.files[fileIndex]; if (this.files[file.name]) { const knownFile = this.files[file.name].data; if (knownFile.type !== file.type || knownFile.lastModified !== file.lastModified) { this.files[file.name] = this.setupFile(file); } } else { this.files[file.name] = this.setupFile(file); } } this.uploadFiles(); }; } get fileList() { return Object.values(this.files); } get isAllFinished() { return Object.values(this.files).every(file => !file.inProgress && file.progress === 100); } onProcessFileChosen() { if (this._fileInput) { this._fileInput.click(); } } cancelFile(file) { file.sub.unsubscribe(); this.removeFile(file); } retryFile(file) { this.uploadFile(file); } close() { this._sideMenuControl.close({ opened: false, message: 'All process files were processed', data: this._response ? { net: this._response.net } : undefined }); } setupFile(file) { return { data: file, stringId: '', downloading: false, inProgress: false, progress: 0, completed: false, uploaded: false }; } uploadFiles() { this._fileInput.value = ''; this.fileList.filter(fileModel => !fileModel.completed && fileModel.progress === 0).forEach(file => { this.uploadFile(file); }); } removeFile(file) { if (this.files[file.data.name]) { delete this.files[file.data.name]; this._sideMenuControl.publish({ opened: true, message: 'Process ' + file.data.name + ' was deleted from the list', data: file }); } } uploadFile(file) { const fileFormData = new FormData(); fileFormData.append('file', file.data); fileFormData.append('meta', this.releaseTypeControl.value.toString().toUpperCase()); file.inProgress = true; file.completed = false; file.error = false; file.sub = this._petriNetResource.importPetriNet(fileFormData).subscribe((response) => { if (response.type && response.type === ProgressType.UPLOAD) { file.progress = response.progress; if (file.progress === 100) { file.uploaded = true; } } else { this._log.info(response.success); this._response = response.outcome; file.inProgress = false; file.completed = true; this._snackbar.openSuccessSnackBar(response.outcome.message === undefined ? this._translate.instant('workflow.snackBar.uploadSuccess') : response.outcome.message); this._sideMenuControl.publish({ opened: true, message: response.outcome.message === undefined ? 'Process ' + file.data.name + ' successfully uploaded' : response.outcome.message, data: { net: response.outcome.net } }); } }, error => { file.inProgress = false; file.completed = false; file.error = true; this._log.error('Importing process file has failed!', error); this._snackbar.openErrorSnackBar(`${this._translate.instant('workflow.snackBar.uploadFailed')} ${error?.error?.message ?? ''}`); }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractImportNetComponent, deps: [{ token: i1.SideMenuControl }, { token: i2.PetriNetResourceService }, { token: i3.PathService }, { token: i4.LoggerService }, { token: i5.SnackBarService }, { token: i6.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractImportNetComponent, selector: "ncc-abstract-import-net", ngImport: i0, template: '', isInline: true }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractImportNetComponent, decorators: [{ type: Component, args: [{ selector: 'ncc-abstract-import-net', template: '' }] }], ctorParameters: () => [{ type: i1.SideMenuControl }, { type: i2.PetriNetResourceService }, { type: i3.PathService }, { type: i4.LoggerService }, { type: i5.SnackBarService }, { type: i6.TranslateService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtaW1wb3J0LW5ldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3NpZGUtbWVudS9jb250ZW50LWNvbXBvbmVudHMvaW1wb3J0LW5ldC9hYnN0cmFjdC1pbXBvcnQtbmV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFLM0MsT0FBTyxFQUFDLFlBQVksRUFBbUIsTUFBTSw4Q0FBOEMsQ0FBQzs7Ozs7Ozs7QUFRNUYsTUFBTSxPQUFPLGVBQWU7SUFDeEIsUUFBUSxDQUFTO0lBQ2pCLElBQUksQ0FBNkI7SUFDakMsVUFBVSxDQUFVO0lBQ3BCLFFBQVEsQ0FBUztJQUNqQixTQUFTLENBQVU7SUFDbkIsS0FBSyxDQUFXO0lBQ2hCLFFBQVEsQ0FBVztJQUNuQixXQUFXLENBQVU7SUFDckIsR0FBRyxDQUFnQjtDQUN0QjtBQVVELE1BQU0sT0FBZ0IsMEJBQTBCO0lBU3RCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQVpmLEtBQUssR0FBYSxFQUFFLENBQUM7SUFDckIsWUFBWSxHQUFrQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUQsa0JBQWtCLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXhELFNBQVMsR0FBeUIsU0FBUyxDQUFDO0lBQzVDLFVBQVUsQ0FBbUI7SUFFdkMsWUFBc0IsZ0JBQWlDLEVBQ2pDLGlCQUEwQyxFQUMxQyxZQUF5QixFQUN6QixJQUFtQixFQUNuQixTQUEwQixFQUMxQixVQUE0QjtRQUw1QixxQkFBZ0IsR0FB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QkFDWixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUzt3QkFDM0MsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyx3QkFBd0I7d0JBQ3hELENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU87b0JBRTlCLElBQUksRUFBRSxFQUFDLEdBQUcsRUFBRyxRQUFRLENBQUMsT0FBZ0MsQ0FBQyxHQUFHLEVBQUM7aUJBQzlELENBQUMsQ0FBQzthQUNOO1FBQ0wsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ1AsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FDNUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkcsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO3dHQWxJaUIsMEJBQTBCOzRGQUExQiwwQkFBMEIsK0RBRmxDLEVBQUU7OzRGQUVNLDBCQUEwQjtrQkFKL0MsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxRQUFRLEVBQUUsRUFBRTtpQkFDZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7U2lkZU1lbnVDb250cm9sfSBmcm9tICcuLi8uLi9tb2RlbHMvc2lkZS1tZW51LWNvbnRyb2wnO1xuaW1wb3J0IHtQZXRyaU5ldFJlc291cmNlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2VuZ2luZS1lbmRwb2ludC9wZXRyaS1uZXQtcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0V2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZX0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9tZXNzYWdlLXJlc291cmNlJztcbmltcG9ydCB7UHJvZ3Jlc3NUeXBlLCBQcm92aWRlclByb2dyZXNzfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvcmVzb3VyY2UtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQge1NuYWNrQmFyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc25hY2stYmFyL3NlcnZpY2VzL3NuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7RmlsZVVwbG9hZERhdGFNb2RlbH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1maWVsZHMvZmlsZS1maWVsZC9tb2RlbHMvZmlsZS1maWVsZCc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtQZXRyaU5ldEV2ZW50T3V0Y29tZX0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvbW9kZWwvZXZlbnQtb3V0Y29tZXMvcGV0cmluZXQtb3V0Y29tZXMvcGV0cmktbmV0LWV2ZW50LW91dGNvbWUnO1xuaW1wb3J0IHtQYXRoU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL25hdmlnYXRpb24vc2VydmljZS9wYXRoLnNlcnZpY2VcIjtcblxuZXhwb3J0IGNsYXNzIEZpbGVVcGxvYWRNb2RlbCB7XG4gICAgc3RyaW5nSWQ6IHN0cmluZztcbiAgICBkYXRhOiBGaWxlIHwgRmlsZVVwbG9hZERhdGFNb2RlbDtcbiAgICBpblByb2dyZXNzOiBib29sZWFuO1xuICAgIHByb2dyZXNzOiBudW1iZXI7XG4gICAgY29tcGxldGVkOiBib29sZWFuO1xuICAgIGVycm9yPzogYm9vbGVhbjtcbiAgICB1cGxvYWRlZD86IGJvb2xlYW47XG4gICAgZG93bmxvYWRpbmc6IGJvb2xlYW47XG4gICAgc3ViPzogU3Vic2NyaXB0aW9uO1xufVxuXG5pbnRlcmZhY2UgRmlsZUxpc3Qge1xuICAgIFtrZXk6IHN0cmluZ106IEZpbGVVcGxvYWRNb2RlbDtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduY2MtYWJzdHJhY3QtaW1wb3J0LW5ldCcsXG4gICAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0SW1wb3J0TmV0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgICBwdWJsaWMgZmlsZXM6IEZpbGVMaXN0ID0ge307XG4gICAgcHVibGljIHJlbGVhc2VUeXBlczogQXJyYXk8c3RyaW5nPiA9IFsnTWFqb3InLCAnTWlub3InLCAnUGF0Y2gnXTtcbiAgICBwdWJsaWMgcmVsZWFzZVR5cGVDb250cm9sID0gbmV3IEZvcm1Db250cm9sKHRoaXMucmVsZWFzZVR5cGVzWzBdKTtcblxuICAgIHByb3RlY3RlZCBfcmVzcG9uc2U6IFBldHJpTmV0RXZlbnRPdXRjb21lID0gdW5kZWZpbmVkO1xuICAgIHByb3RlY3RlZCBfZmlsZUlucHV0OiBIVE1MSW5wdXRFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9zaWRlTWVudUNvbnRyb2w6IFNpZGVNZW51Q29udHJvbCxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3BldHJpTmV0UmVzb3VyY2U6IFBldHJpTmV0UmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfcGF0aFNlcnZpY2U6IFBhdGhTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfc25hY2tiYXI6IFNuYWNrQmFyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkge1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZmlsZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NpZGVtZW51LWZpbGVVcGxvYWQnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICB0aGlzLl9maWxlSW5wdXQub25jaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpbGVJbmRleCBvZiBBcnJheS5mcm9tKEFycmF5KHRoaXMuX2ZpbGVJbnB1dC5maWxlcy5sZW5ndGgpLmtleXMoKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gdGhpcy5fZmlsZUlucHV0LmZpbGVzW2ZpbGVJbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXNbZmlsZS5uYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrbm93bkZpbGUgPSB0aGlzLmZpbGVzW2ZpbGUubmFtZV0uZGF0YSBhcyBGaWxlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa25vd25GaWxlLnR5cGUgIT09IGZpbGUudHlwZSB8fCBrbm93bkZpbGUubGFzdE1vZGlmaWVkICE9PSBmaWxlLmxhc3RNb2RpZmllZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc1tmaWxlLm5hbWVdID0gdGhpcy5zZXR1cEZpbGUoZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzW2ZpbGUubmFtZV0gPSB0aGlzLnNldHVwRmlsZShmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVzKCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0IGZpbGVMaXN0KCk6IEFycmF5PEZpbGVVcGxvYWRNb2RlbD4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmZpbGVzKTtcbiAgICB9XG5cbiAgICBnZXQgaXNBbGxGaW5pc2hlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5maWxlcykuZXZlcnkoZmlsZSA9PiAhZmlsZS5pblByb2dyZXNzICYmIGZpbGUucHJvZ3Jlc3MgPT09IDEwMCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUHJvY2Vzc0ZpbGVDaG9zZW4oKSB7XG4gICAgICAgIGlmICh0aGlzLl9maWxlSW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpbGVJbnB1dC5jbGljaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNhbmNlbEZpbGUoZmlsZTogRmlsZVVwbG9hZE1vZGVsKSB7XG4gICAgICAgIGZpbGUuc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMucmVtb3ZlRmlsZShmaWxlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmV0cnlGaWxlKGZpbGU6IEZpbGVVcGxvYWRNb2RlbCkge1xuICAgICAgICB0aGlzLnVwbG9hZEZpbGUoZmlsZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zaWRlTWVudUNvbnRyb2wuY2xvc2Uoe1xuICAgICAgICAgICAgb3BlbmVkOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdBbGwgcHJvY2VzcyBmaWxlcyB3ZXJlIHByb2Nlc3NlZCcsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLl9yZXNwb25zZSA/IHsgbmV0OiB0aGlzLl9yZXNwb25zZS5uZXQgfSA6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2V0dXBGaWxlKGZpbGU6IEZpbGUpOiBGaWxlVXBsb2FkTW9kZWwge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YTogZmlsZSwgc3RyaW5nSWQ6ICcnLCBkb3dubG9hZGluZzogZmFsc2UsIGluUHJvZ3Jlc3M6IGZhbHNlLCBwcm9ncmVzczogMCwgY29tcGxldGVkOiBmYWxzZSwgdXBsb2FkZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHVwbG9hZEZpbGVzKCkge1xuICAgICAgICB0aGlzLl9maWxlSW5wdXQudmFsdWUgPSAnJztcblxuICAgICAgICB0aGlzLmZpbGVMaXN0LmZpbHRlcihmaWxlTW9kZWwgPT4gIWZpbGVNb2RlbC5jb21wbGV0ZWQgJiYgZmlsZU1vZGVsLnByb2dyZXNzID09PSAwKS5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlKGZpbGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVtb3ZlRmlsZShmaWxlOiBGaWxlVXBsb2FkTW9kZWwpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZXNbZmlsZS5kYXRhLm5hbWVdKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5maWxlc1tmaWxlLmRhdGEubmFtZV07XG4gICAgICAgICAgICB0aGlzLl9zaWRlTWVudUNvbnRyb2wucHVibGlzaCh7XG4gICAgICAgICAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQcm9jZXNzICcgKyBmaWxlLmRhdGEubmFtZSArICcgd2FzIGRlbGV0ZWQgZnJvbSB0aGUgbGlzdCcsXG4gICAgICAgICAgICAgICAgZGF0YTogZmlsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBsb2FkRmlsZShmaWxlOiBGaWxlVXBsb2FkTW9kZWwpIHtcbiAgICAgICAgY29uc3QgZmlsZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZpbGVGb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlLmRhdGEgYXMgRmlsZSk7XG4gICAgICAgIGZpbGVGb3JtRGF0YS5hcHBlbmQoJ21ldGEnLCB0aGlzLnJlbGVhc2VUeXBlQ29udHJvbC52YWx1ZS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCkpO1xuXG4gICAgICAgIGZpbGUuaW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgIGZpbGUuY29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgIGZpbGUuZXJyb3IgPSBmYWxzZTtcbiAgICAgICAgZmlsZS5zdWIgPSB0aGlzLl9wZXRyaU5ldFJlc291cmNlLmltcG9ydFBldHJpTmV0KGZpbGVGb3JtRGF0YSkuc3Vic2NyaWJlKChyZXNwb25zZTogRXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoKHJlc3BvbnNlIGFzIFByb3ZpZGVyUHJvZ3Jlc3MpLnR5cGUgJiYgKHJlc3BvbnNlIGFzIFByb3ZpZGVyUHJvZ3Jlc3MpLnR5cGUgPT09IFByb2dyZXNzVHlwZS5VUExPQUQpIHtcbiAgICAgICAgICAgICAgICBmaWxlLnByb2dyZXNzID0gKHJlc3BvbnNlIGFzIFByb3ZpZGVyUHJvZ3Jlc3MpLnByb2dyZXNzO1xuICAgICAgICAgICAgICAgIGlmIChmaWxlLnByb2dyZXNzID09PSAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZS51cGxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuaW5mbyhyZXNwb25zZS5zdWNjZXNzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNwb25zZSA9IHJlc3BvbnNlLm91dGNvbWUgYXMgUGV0cmlOZXRFdmVudE91dGNvbWU7XG4gICAgICAgICAgICAgICAgZmlsZS5pblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZmlsZS5jb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5TdWNjZXNzU25hY2tCYXIocmVzcG9uc2Uub3V0Y29tZS5tZXNzYWdlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnd29ya2Zsb3cuc25hY2tCYXIudXBsb2FkU3VjY2VzcycpXG4gICAgICAgICAgICAgICAgICAgIDogcmVzcG9uc2Uub3V0Y29tZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaWRlTWVudUNvbnRyb2wucHVibGlzaCh7XG4gICAgICAgICAgICAgICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2Uub3V0Y29tZS5tZXNzYWdlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ1Byb2Nlc3MgJyArIGZpbGUuZGF0YS5uYW1lICsgJyBzdWNjZXNzZnVsbHkgdXBsb2FkZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJlc3BvbnNlLm91dGNvbWUubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtuZXQ6IChyZXNwb25zZS5vdXRjb21lIGFzIFBldHJpTmV0RXZlbnRPdXRjb21lKS5uZXR9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIGZpbGUuaW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgICAgZmlsZS5jb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZpbGUuZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKCdJbXBvcnRpbmcgcHJvY2VzcyBmaWxlIGhhcyBmYWlsZWQhJywgZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5fc25hY2tiYXIub3BlbkVycm9yU25hY2tCYXIoXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3dvcmtmbG93LnNuYWNrQmFyLnVwbG9hZEZhaWxlZCcpfSAke2Vycm9yPy5lcnJvcj8ubWVzc2FnZSA/PyAnJ31gKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG59XG4iXX0=