UNPKG

@alfresco/adf-content-services

Version:
142 lines 19.6 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. */ import { TranslationService } from '@alfresco/adf-core'; import { ContentService } from '../../common/services/content.service'; import { Injectable } from '@angular/core'; import { Subject, throwError, of } from 'rxjs'; import { PermissionModel } from '../models/permissions.model'; import { DocumentListService } from './document-list.service'; import { NodeActionsService } from './node-actions.service'; import { ContentNodeDialogService } from '../../content-node-selector/content-node-dialog.service'; import * as i0 from "@angular/core"; import * as i1 from "./node-actions.service"; import * as i2 from "../../content-node-selector/content-node-dialog.service"; import * as i3 from "@alfresco/adf-core"; import * as i4 from "./document-list.service"; import * as i5 from "../../common/services/content.service"; export class DocumentActionsService { constructor(nodeActionsService, contentNodeDialogService, translation, documentListService, contentService) { this.nodeActionsService = nodeActionsService; this.contentNodeDialogService = contentNodeDialogService; this.translation = translation; this.documentListService = documentListService; this.contentService = contentService; this.permissionEvent = new Subject(); this.error = new Subject(); this.success = new Subject(); this.handlers = {}; this.setupActionHandlers(); } /** * Gets the handler for an action. * * @param key Identifier of the action * @returns The handler for the action */ getHandler(key) { if (key) { const lKey = key.toLowerCase(); return this.handlers[lKey] || null; } return null; } /** * Sets a new handler for an action. * * @param key Identifier of the action * @param handler Handler for the action * @returns False if the key was an empty/null string, true otherwise */ setHandler(key, handler) { if (key) { const lKey = key.toLowerCase(); this.handlers[lKey] = handler; return true; } return false; } /** * Checks if actions can be executed for an item. * * @param nodeEntry Item to receive an action * @returns True if the action can be executed on this item, false otherwise */ canExecuteAction(nodeEntry) { return this.documentListService && nodeEntry && nodeEntry.entry.isFile === true; } setupActionHandlers() { this.handlers['copy'] = this.copyNode.bind(this); this.handlers['move'] = this.moveNode.bind(this); this.handlers['delete'] = this.deleteNode.bind(this); this.handlers['download'] = this.downloadNode.bind(this); this.handlers['lock'] = this.lockNode.bind(this); } lockNode(node) { return this.contentNodeDialogService.openLockNodeDialog(node.entry); } downloadNode(obj) { this.nodeActionsService.downloadNode(obj); } copyNode(node, _target, permission) { const actionObservable = this.nodeActionsService.copyContent(node.entry, permission); this.prepareHandlers(actionObservable); return actionObservable; } moveNode(node, _target, permission) { const actionObservable = this.nodeActionsService.moveContent(node.entry, permission); this.prepareHandlers(actionObservable); return actionObservable; } prepareHandlers(actionObservable) { actionObservable.subscribe((fileOperationMessage) => { this.success.next(fileOperationMessage); }, this.error.next.bind(this.error)); } deleteNode(node, _target, permission) { if (this.canExecuteAction(node)) { if (this.contentService.hasAllowableOperations(node.entry, permission)) { const handlerObservable = this.documentListService.deleteNode(node.entry.id); handlerObservable.subscribe(() => { const message = this.translation.instant('CORE.DELETE_NODE.SINGULAR', { name: node.entry.name }); this.success.next(message); }, () => { const message = this.translation.instant('CORE.DELETE_NODE.ERROR_SINGULAR', { name: node.entry.name }); this.error.next(message); }); return handlerObservable; } else { this.permissionEvent.next(new PermissionModel({ type: 'content', action: 'delete', permission })); return throwError(new Error('No permission to delete')); } } return of(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DocumentActionsService, deps: [{ token: i1.NodeActionsService }, { token: i2.ContentNodeDialogService }, { token: i3.TranslationService }, { token: i4.DocumentListService }, { token: i5.ContentService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DocumentActionsService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DocumentActionsService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.NodeActionsService }, { type: i2.ContentNodeDialogService }, { type: i3.TranslationService }, { type: i4.DocumentListService }, { type: i5.ContentService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtYWN0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9kb2N1bWVudC1saXN0L3NlcnZpY2VzL2RvY3VtZW50LWFjdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQWMsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDOzs7Ozs7O0FBS25HLE1BQU0sT0FBTyxzQkFBc0I7SUFPL0IsWUFDWSxrQkFBc0MsRUFDdEMsd0JBQWtELEVBQ2xELFdBQStCLEVBQy9CLG1CQUF5QyxFQUN6QyxjQUErQjtRQUovQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBc0I7UUFDekMsbUJBQWMsR0FBZCxjQUFjLENBQWlCO1FBWDNDLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQW1CLENBQUM7UUFDakQsVUFBSyxHQUFHLElB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QU0sQ0FBQztnQkFDSixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FDckIsSUFBSSxlQUFlLENBQUM7b0JBQ2hCLElBQUksRUFBRSxTQUFTO29CQUNmLE1BQU0sRUFBRSxRQUFRO29CQUNoQixVQUFVO2lCQUNiLENBQUMsQ0FDTCxDQUFDO2dCQUNGLE9BQU8sVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQztZQUM1RCxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sRUFBRSxFQUFFLENBQUM7SUFDaEIsQ0FBQzs4R0F2SFEsc0JBQXNCO2tIQUF0QixzQkFBc0IsY0FGbkIsTUFBTTs7MkZBRVQsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IENvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NlcnZpY2VzL2NvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlRW50cnkgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRocm93RXJyb3IsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb250ZW50QWN0aW9uSGFuZGxlciB9IGZyb20gJy4uL21vZGVscy9jb250ZW50LWFjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvcGVybWlzc2lvbnMubW9kZWwnO1xuaW1wb3J0IHsgRG9jdW1lbnRMaXN0U2VydmljZSB9IGZyb20gJy4vZG9jdW1lbnQtbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVBY3Rpb25zU2VydmljZSB9IGZyb20gJy4vbm9kZS1hY3Rpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGVudE5vZGVEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29udGVudC1ub2RlLXNlbGVjdG9yL2NvbnRlbnQtbm9kZS1kaWFsb2cuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRBY3Rpb25zU2VydmljZSB7XG4gICAgcGVybWlzc2lvbkV2ZW50ID0gbmV3IFN1YmplY3Q8UGVybWlzc2lvbk1vZGVsPigpO1xuICAgIGVycm9yID0gbmV3IFN1YmplY3Q8RXJyb3I+KCk7XG4gICAgc3VjY2VzcyA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAgIHByaXZhdGUgaGFuZGxlcnM6IHsgW2lkOiBzdHJpbmddOiBDb250ZW50QWN0aW9uSGFuZGxlciB9ID0ge307XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBub2RlQWN0aW9uc1NlcnZpY2U6IE5vZGVBY3Rpb25zU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50Tm9kZURpYWxvZ1NlcnZpY2U6IENvbnRlbnROb2RlRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGlvbjogVHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRvY3VtZW50TGlzdFNlcnZpY2U/OiBEb2N1bWVudExpc3RTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnRlbnRTZXJ2aWNlPzogQ29udGVudFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5zZXR1cEFjdGlvbkhhbmRsZXJzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaGFuZGxlciBmb3IgYW4gYWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSBJZGVudGlmaWVyIG9mIHRoZSBhY3Rpb25cbiAgICAgKiBAcmV0dXJucyBUaGUgaGFuZGxlciBmb3IgdGhlIGFjdGlvblxuICAgICAqL1xuICAgIGdldEhhbmRsZXIoa2V5OiBzdHJpbmcpOiBDb250ZW50QWN0aW9uSGFuZGxlciB7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxLZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXJzW2xLZXldIHx8IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIG5ldyBoYW5kbGVyIGZvciBhbiBhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ga2V5IElkZW50aWZpZXIgb2YgdGhlIGFjdGlvblxuICAgICAqIEBwYXJhbSBoYW5kbGVyIEhhbmRsZXIgZm9yIHRoZSBhY3Rpb25cbiAgICAgKiBAcmV0dXJucyBGYWxzZSBpZiB0aGUga2V5IHdhcyBhbiBlbXB0eS9udWxsIHN0cmluZywgdHJ1ZSBvdGhlcndpc2VcbiAgICAgKi9cbiAgICBzZXRIYW5kbGVyKGtleTogc3RyaW5nLCBoYW5kbGVyOiBDb250ZW50QWN0aW9uSGFuZGxlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBjb25zdCBsS2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXJzW2xLZXldID0gaGFuZGxlcjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYWN0aW9ucyBjYW4gYmUgZXhlY3V0ZWQgZm9yIGFuIGl0ZW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZUVudHJ5IEl0ZW0gdG8gcmVjZWl2ZSBhbiBhY3Rpb25cbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBhY3Rpb24gY2FuIGJlIGV4ZWN1dGVkIG9uIHRoaXMgaXRlbSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgICovXG4gICAgY2FuRXhlY3V0ZUFjdGlvbihub2RlRW50cnk6IE5vZGVFbnRyeSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudExpc3RTZXJ2aWNlICYmIG5vZGVFbnRyeSAmJiBub2RlRW50cnkuZW50cnkuaXNGaWxlID09PSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBBY3Rpb25IYW5kbGVycygpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVyc1snY29weSddID0gdGhpcy5jb3B5Tm9kZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZXJzWydtb3ZlJ10gPSB0aGlzLm1vdmVOb2RlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlcnNbJ2RlbGV0ZSddID0gdGhpcy5kZWxldGVOb2RlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlcnNbJ2Rvd25sb2FkJ10gPSB0aGlzLmRvd25sb2FkTm9kZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZXJzWydsb2NrJ10gPSB0aGlzLmxvY2tOb2RlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2NrTm9kZShub2RlOiBOb2RlRW50cnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudE5vZGVEaWFsb2dTZXJ2aWNlLm9wZW5Mb2NrTm9kZURpYWxvZyhub2RlLmVudHJ5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRvd25sb2FkTm9kZShvYmo6IE5vZGVFbnRyeSkge1xuICAgICAgICB0aGlzLm5vZGVBY3Rpb25zU2VydmljZS5kb3dubG9hZE5vZGUob2JqKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvcHlOb2RlKG5vZGU6IE5vZGVFbnRyeSwgX3RhcmdldD86IGFueSwgcGVybWlzc2lvbj86IHN0cmluZykge1xuICAgICAgICBjb25zdCBhY3Rpb25PYnNlcnZhYmxlID0gdGhpcy5ub2RlQWN0aW9uc1NlcnZpY2UuY29weUNvbnRlbnQobm9kZS5lbnRyeSwgcGVybWlzc2lvbik7XG4gICAgICAgIHRoaXMucHJlcGFyZUhhbmRsZXJzKGFjdGlvbk9ic2VydmFibGUpO1xuICAgICAgICByZXR1cm4gYWN0aW9uT2JzZXJ2YWJsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVOb2RlKG5vZGU6IE5vZGVFbnRyeSwgX3RhcmdldD86IGFueSwgcGVybWlzc2lvbj86IHN0cmluZykge1xuICAgICAgICBjb25zdCBhY3Rpb25PYnNlcnZhYmxlID0gdGhpcy5ub2RlQWN0aW9uc1NlcnZpY2UubW92ZUNvbnRlbnQobm9kZS5lbnRyeSwgcGVybWlzc2lvbik7XG4gICAgICAgIHRoaXMucHJlcGFyZUhhbmRsZXJzKGFjdGlvbk9ic2VydmFibGUpO1xuICAgICAgICByZXR1cm4gYWN0aW9uT2JzZXJ2YWJsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVIYW5kbGVycyhhY3Rpb25PYnNlcnZhYmxlOiBTdWJqZWN0PHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgYWN0aW9uT2JzZXJ2YWJsZS5zdWJzY3JpYmUoKGZpbGVPcGVyYXRpb25NZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3MubmV4dChmaWxlT3BlcmF0aW9uTWVzc2FnZSk7XG4gICAgICAgIH0sIHRoaXMuZXJyb3IubmV4dC5iaW5kKHRoaXMuZXJyb3IpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlbGV0ZU5vZGUobm9kZTogTm9kZUVudHJ5LCBfdGFyZ2V0PzogYW55LCBwZXJtaXNzaW9uPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMuY2FuRXhlY3V0ZUFjdGlvbihub2RlKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udGVudFNlcnZpY2UuaGFzQWxsb3dhYmxlT3BlcmF0aW9ucyhub2RlLmVudHJ5LCBwZXJtaXNzaW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJPYnNlcnZhYmxlID0gdGhpcy5kb2N1bWVudExpc3RTZXJ2aWNlLmRlbGV0ZU5vZGUobm9kZS5lbnRyeS5pZCk7XG4gICAgICAgICAgICAgICAgaGFuZGxlck9ic2VydmFibGUuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGlvbi5pbnN0YW50KCdDT1JFLkRFTEVURV9OT0RFLlNJTkdVTEFSJywgeyBuYW1lOiBub2RlLmVudHJ5Lm5hbWUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MubmV4dChtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRpb24uaW5zdGFudCgnQ09SRS5ERUxFVEVfTk9ERS5FUlJPUl9TSU5HVUxBUicsIHsgbmFtZTogbm9kZS5lbnRyeS5uYW1lIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvci5uZXh0KG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlck9ic2VydmFibGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbkV2ZW50Lm5leHQoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBQZXJtaXNzaW9uTW9kZWwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbnRlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnZGVsZXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKG5ldyBFcnJvcignTm8gcGVybWlzc2lvbiB0byBkZWxldGUnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG59XG4iXX0=