UNPKG

@alfresco/adf-content-services

Version:
177 lines 24.5 kB
/*! * @license * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* eslint-disable @angular-eslint/no-input-rename */ import { Directive, ElementRef, EventEmitter, HostListener, Input, Output } from '@angular/core'; import { TrashcanApi, NodesApi } from '@alfresco/js-api'; import { forkJoin, from, of } from 'rxjs'; import { TranslationService } from '@alfresco/adf-core'; import { map, catchError, retry } from 'rxjs/operators'; import { AlfrescoApiService } from '../services/alfresco-api.service'; import * as i0 from "@angular/core"; import * as i1 from "../services/alfresco-api.service"; import * as i2 from "@alfresco/adf-core"; export class NodeDeleteDirective { get trashcanApi() { this._trashcanApi = this._trashcanApi ?? new TrashcanApi(this.alfrescoApiService.getInstance()); return this._trashcanApi; } get nodesApi() { this._nodesApi = this._nodesApi ?? new NodesApi(this.alfrescoApiService.getInstance()); return this._nodesApi; } onClick() { this.process(this.selection); } constructor(alfrescoApiService, translation, elementRef) { this.alfrescoApiService = alfrescoApiService; this.translation = translation; this.elementRef = elementRef; /** If true then the nodes are deleted immediately rather than being put in the trash */ this.permanent = false; /** Emitted when the nodes have been deleted. */ this.delete = new EventEmitter(); } ngOnChanges() { if (!this.selection || (this.selection && this.selection.length === 0)) { this.setDisableAttribute(true); } else { if (!this.elementRef.nativeElement.hasAttribute('adf-check-allowable-operation')) { this.setDisableAttribute(false); } } } setDisableAttribute(disable) { this.elementRef.nativeElement.disabled = disable; } process(selection) { if (selection?.length) { const batch = this.getDeleteNodesBatch(selection); forkJoin(...batch).subscribe((data) => { const processedItems = this.processStatus(data); const message = this.getMessage(processedItems); if (message) { this.delete.emit(message); } }); } } getDeleteNodesBatch(selection) { return selection.map((node) => this.deleteNode(node)); } deleteNode(node) { const id = node.entry.nodeId || node.entry.id; let promise; if (Object.prototype.hasOwnProperty.call(node.entry, 'archivedAt') && node.entry['archivedAt']) { promise = this.trashcanApi.deleteDeletedNode(id); } else { promise = this.nodesApi.deleteNode(id, { permanent: this.permanent }); } return from(promise).pipe(retry(3), map(() => ({ entry: node.entry, status: 1 })), catchError(() => of({ entry: node.entry, status: 0 }))); } processStatus(data) { const deleteStatus = { success: [], failed: [], get someFailed() { return !!this.failed.length; }, get someSucceeded() { return !!this.success.length; }, get oneFailed() { return this.failed.length === 1; }, get oneSucceeded() { return this.success.length === 1; }, get allSucceeded() { return this.someSucceeded && !this.someFailed; }, get allFailed() { return this.someFailed && !this.someSucceeded; } }; return data.reduce((acc, next) => { if (next.status === 1) { acc.success.push(next); } else { acc.failed.push(next); } return acc; }, deleteStatus); } getMessage(status) { if (status.allFailed && !status.oneFailed) { return this.translation.instant('CORE.DELETE_NODE.ERROR_PLURAL', // eslint-disable-next-line id-blacklist { number: status.failed.length }); } if (status.allSucceeded && !status.oneSucceeded) { return this.translation.instant('CORE.DELETE_NODE.PLURAL', // eslint-disable-next-line id-blacklist { number: status.success.length }); } if (status.someFailed && status.someSucceeded && !status.oneSucceeded) { return this.translation.instant('CORE.DELETE_NODE.PARTIAL_PLURAL', { success: status.success.length, failed: status.failed.length }); } if (status.someFailed && status.oneSucceeded) { return this.translation.instant('CORE.DELETE_NODE.PARTIAL_SINGULAR', { success: status.success.length, failed: status.failed.length }); } if (status.oneFailed && !status.someSucceeded) { return this.translation.instant('CORE.DELETE_NODE.ERROR_SINGULAR', { name: status.failed[0].entry.name }); } if (status.oneSucceeded && !status.someFailed) { return this.translation.instant('CORE.DELETE_NODE.SINGULAR', { name: status.success[0].entry.name }); } return null; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: NodeDeleteDirective, deps: [{ token: i1.AlfrescoApiService }, { token: i2.TranslationService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.3", type: NodeDeleteDirective, isStandalone: true, selector: "[adf-delete]", inputs: { selection: ["adf-delete", "selection"], permanent: "permanent" }, outputs: { delete: "delete" }, host: { listeners: { "click": "onClick()" } }, usesOnChanges: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: NodeDeleteDirective, decorators: [{ type: Directive, args: [{ standalone: true, selector: '[adf-delete]' }] }], ctorParameters: () => [{ type: i1.AlfrescoApiService }, { type: i2.TranslationService }, { type: i0.ElementRef }], propDecorators: { selection: [{ type: Input, args: ['adf-delete'] }], permanent: [{ type: Input }], delete: [{ type: Output }], onClick: [{ type: HostListener, args: ['click'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1kZWxldGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9kaXJlY3RpdmVzL25vZGUtZGVsZXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxvREFBb0Q7QUFFcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBa0QsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pHLE9BQU8sRUFBYyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7OztBQTRCdEUsTUFBTSxPQUFPLG1CQUFtQjtJQWM1QixJQUFJLFdBQVc7UUFDWCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDaEcsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFHRCxJQUFJLFFBQVE7UUFDUixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDdkYsT0FBTyxJQUFJLENB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NS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWUgKi9cblxuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlRW50cnksIE5vZGUsIERlbGV0ZWROb2RlRW50cnksIERlbGV0ZWROb2RlLCBUcmFzaGNhbkFwaSwgTm9kZXNBcGkgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZvcmtKb2luLCBmcm9tLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciwgcmV0cnkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBbGZyZXNjb0FwaVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hbGZyZXNjby1hcGkuc2VydmljZSc7XG5cbmludGVyZmFjZSBQcm9jZXNzZWROb2RlRGF0YSB7XG4gICAgZW50cnk6IE5vZGUgfCBEZWxldGVkTm9kZTtcbiAgICBzdGF0dXM6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFByb2Nlc3NTdGF0dXMge1xuICAgIHN1Y2Nlc3M6IFByb2Nlc3NlZE5vZGVEYXRhW107XG4gICAgZmFpbGVkOiBQcm9jZXNzZWROb2RlRGF0YVtdO1xuXG4gICAgc29tZUZhaWxlZCgpO1xuXG4gICAgc29tZVN1Y2NlZWRlZCgpO1xuXG4gICAgb25lRmFpbGVkKCk7XG5cbiAgICBvbmVTdWNjZWVkZWQoKTtcblxuICAgIGFsbFN1Y2NlZWRlZCgpO1xuXG4gICAgYWxsRmFpbGVkKCk7XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdbYWRmLWRlbGV0ZV0nXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVEZWxldGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIC8qKiBBcnJheSBvZiBub2RlcyB0byBkZWxldGUuICovXG4gICAgQElucHV0KCdhZGYtZGVsZXRlJylcbiAgICBzZWxlY3Rpb246IE5vZGVFbnRyeVtdIHwgRGVsZXRlZE5vZGVFbnRyeVtdO1xuXG4gICAgLyoqIElmIHRydWUgdGhlbiB0aGUgbm9kZXMgYXJlIGRlbGV0ZWQgaW1tZWRpYXRlbHkgcmF0aGVyIHRoYW4gYmVpbmcgcHV0IGluIHRoZSB0cmFzaCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGVybWFuZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBub2RlcyBoYXZlIGJlZW4gZGVsZXRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBkZWxldGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHJpdmF0ZSBfdHJhc2hjYW5BcGk6IFRyYXNoY2FuQXBpO1xuICAgIGdldCB0cmFzaGNhbkFwaSgpOiBUcmFzaGNhbkFwaSB7XG4gICAgICAgIHRoaXMuX3RyYXNoY2FuQXBpID0gdGhpcy5fdHJhc2hjYW5BcGkgPz8gbmV3IFRyYXNoY2FuQXBpKHRoaXMuYWxmcmVzY29BcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhc2hjYW5BcGk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbm9kZXNBcGk6IE5vZGVzQXBpO1xuICAgIGdldCBub2Rlc0FwaSgpOiBOb2Rlc0FwaSB7XG4gICAgICAgIHRoaXMuX25vZGVzQXBpID0gdGhpcy5fbm9kZXNBcGkgPz8gbmV3IE5vZGVzQXBpKHRoaXMuYWxmcmVzY29BcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNBcGk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICAgIG9uQ2xpY2soKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzcyh0aGlzLnNlbGVjdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhbGZyZXNjb0FwaVNlcnZpY2U6IEFsZnJlc2NvQXBpU2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGlvbjogVHJhbnNsYXRpb25TZXJ2aWNlLCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgICBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbiB8fCAodGhpcy5zZWxlY3Rpb24gJiYgdGhpcy5zZWxlY3Rpb24ubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgdGhpcy5zZXREaXNhYmxlQXR0cmlidXRlKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2FkZi1jaGVjay1hbGxvd2FibGUtb3BlcmF0aW9uJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERpc2FibGVBdHRyaWJ1dGUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREaXNhYmxlQXR0cmlidXRlKGRpc2FibGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSBkaXNhYmxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2VzcyhzZWxlY3Rpb246IE5vZGVFbnRyeVtdIHwgRGVsZXRlZE5vZGVFbnRyeVtdKSB7XG4gICAgICAgIGlmIChzZWxlY3Rpb24/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgYmF0Y2ggPSB0aGlzLmdldERlbGV0ZU5vZGVzQmF0Y2goc2VsZWN0aW9uKTtcblxuICAgICAgICAgICAgZm9ya0pvaW4oLi4uYmF0Y2gpLnN1YnNjcmliZSgoZGF0YTogUHJvY2Vzc2VkTm9kZURhdGFbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW1zOiBQcm9jZXNzU3RhdHVzID0gdGhpcy5wcm9jZXNzU3RhdHVzKGRhdGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmdldE1lc3NhZ2UocHJvY2Vzc2VkSXRlbXMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGUuZW1pdChtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGVsZXRlTm9kZXNCYXRjaChzZWxlY3Rpb246IE5vZGVFbnRyeVtdIHwgRGVsZXRlZE5vZGVFbnRyeVtdKTogT2JzZXJ2YWJsZTxQcm9jZXNzZWROb2RlRGF0YT5bXSB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb24ubWFwKChub2RlKSA9PiB0aGlzLmRlbGV0ZU5vZGUobm9kZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVsZXRlTm9kZShub2RlOiBOb2RlRW50cnkgfCBEZWxldGVkTm9kZUVudHJ5KTogT2JzZXJ2YWJsZTxQcm9jZXNzZWROb2RlRGF0YT4ge1xuICAgICAgICBjb25zdCBpZCA9IChub2RlLmVudHJ5IGFzIGFueSkubm9kZUlkIHx8IG5vZGUuZW50cnkuaWQ7XG5cbiAgICAgICAgbGV0IHByb21pc2U6IFByb21pc2U8YW55PjtcblxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUuZW50cnksICdhcmNoaXZlZEF0JykgJiYgbm9kZS5lbnRyeVsnYXJjaGl2ZWRBdCddKSB7XG4gICAgICAgICAgICBwcm9taXNlID0gdGhpcy50cmFzaGNhbkFwaS5kZWxldGVEZWxldGVkTm9kZShpZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9taXNlID0gdGhpcy5ub2Rlc0FwaS5kZWxldGVOb2RlKGlkLCB7IHBlcm1hbmVudDogdGhpcy5wZXJtYW5lbnQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnJvbShwcm9taXNlKS5waXBlKFxuICAgICAgICAgICAgcmV0cnkoMyksXG4gICAgICAgICAgICBtYXAoKCkgPT4gKHtcbiAgICAgICAgICAgICAgICBlbnRyeTogbm9kZS5lbnRyeSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IDFcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT5cbiAgICAgICAgICAgICAgICBvZih7XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5OiBub2RlLmVudHJ5LFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IDBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1N0YXR1cyhkYXRhKTogUHJvY2Vzc1N0YXR1cyB7XG4gICAgICAgIGNvbnN0IGRlbGV0ZVN0YXR1cyA9IHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IFtdLFxuICAgICAgICAgICAgZmFpbGVkOiBbXSxcbiAgICAgICAgICAgIGdldCBzb21lRmFpbGVkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIXRoaXMuZmFpbGVkLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgc29tZVN1Y2NlZWRlZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISF0aGlzLnN1Y2Nlc3MubGVuZ3RoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBvbmVGYWlsZWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmFpbGVkLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgb25lU3VjY2VlZGVkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1Y2Nlc3MubGVuZ3RoID09PSAxO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBhbGxTdWNjZWVkZWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc29tZVN1Y2NlZWRlZCAmJiAhdGhpcy5zb21lRmFpbGVkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBhbGxGYWlsZWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc29tZUZhaWxlZCAmJiAhdGhpcy5zb21lU3VjY2VlZGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBkYXRhLnJlZHVjZSgoYWNjLCBuZXh0KSA9PiB7XG4gICAgICAgICAgICBpZiAobmV4dC5zdGF0dXMgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBhY2Muc3VjY2Vzcy5wdXNoKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhY2MuZmFpbGVkLnB1c2gobmV4dCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIGRlbGV0ZVN0YXR1cyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNZXNzYWdlKHN0YXR1czogUHJvY2Vzc1N0YXR1cyk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBpZiAoc3RhdHVzLmFsbEZhaWxlZCAmJiAhc3RhdHVzLm9uZUZhaWxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb24uaW5zdGFudChcbiAgICAgICAgICAgICAgICAnQ09SRS5ERUxFVEVfTk9ERS5FUlJPUl9QTFVSQUwnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpZC1ibGFja2xpc3RcbiAgICAgICAgICAgICAgICB7IG51bWJlcjogc3RhdHVzLmZhaWxlZC5sZW5ndGggfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0dXMuYWxsU3VjY2VlZGVkICYmICFzdGF0dXMub25lU3VjY2VlZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbi5pbnN0YW50KFxuICAgICAgICAgICAgICAgICdDT1JFLkRFTEVURV9OT0RFLlBMVVJBTCcsXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGlkLWJsYWNrbGlzdFxuICAgICAgICAgICAgICAgIHsgbnVtYmVyOiBzdGF0dXMuc3VjY2Vzcy5sZW5ndGggfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0dXMuc29tZUZhaWxlZCAmJiBzdGF0dXMuc29tZVN1Y2NlZWRlZCAmJiAhc3RhdHVzLm9uZVN1Y2NlZWRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb24uaW5zdGFudCgnQ09SRS5ERUxFVEVfTk9ERS5QQVJUSUFMX1BMVVJBTCcsIHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBzdGF0dXMuc3VjY2Vzcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgZmFpbGVkOiBzdGF0dXMuZmFpbGVkLmxlbmd0aFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdHVzLnNvbWVGYWlsZWQgJiYgc3RhdHVzLm9uZVN1Y2NlZWRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb24uaW5zdGFudCgnQ09SRS5ERUxFVEVfTk9ERS5QQVJUSUFMX1NJTkdVTEFSJywge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHN0YXR1cy5zdWNjZXNzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBmYWlsZWQ6IHN0YXR1cy5mYWlsZWQubGVuZ3RoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0dXMub25lRmFpbGVkICYmICFzdGF0dXMuc29tZVN1Y2NlZWRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb24uaW5zdGFudCgnQ09SRS5ERUxFVEVfTk9ERS5FUlJPUl9TSU5HVUxBUicsIHsgbmFtZTogc3RhdHVzLmZhaWxlZFswXS5lbnRyeS5uYW1lIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXR1cy5vbmVTdWNjZWVkZWQgJiYgIXN0YXR1cy5zb21lRmFpbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbi5pbnN0YW50KCdDT1JFLkRFTEVURV9OT0RFLlNJTkdVTEFSJywgeyBuYW1lOiBzdGF0dXMuc3VjY2Vzc1swXS5lbnRyeS5uYW1lIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIl19