UNPKG

@alfresco/adf-content-services

Version:
137 lines 19 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 * as i0 from "@angular/core"; import * as i1 from "./node-actions.service"; import * as i2 from "./document-list.service"; import * as i3 from "../../common/services/content.service"; import * as i4 from "@alfresco/adf-core"; export class FolderActionsService { constructor(nodeActionsService, documentListService, contentService, translation) { this.nodeActionsService = nodeActionsService; this.documentListService = documentListService; this.contentService = contentService; this.translation = translation; this.permissionEvent = new Subject(); this.error = new Subject(); this.success = new Subject(); this.handlers = {}; this.setupActionHandlers(); } /** * Gets the handler function for an action. * * @param key Identifier for the action * @returns The handler function */ getHandler(key) { if (key) { const lKey = key.toLowerCase(); return this.handlers[lKey] || null; } return null; } /** * Sets a new handler function for an action. * * @param key Identifier for the action * @param handler The new handler function * @returns True if the key was a valid action identifier, false otherwise */ setHandler(key, handler) { if (key) { const lKey = key.toLowerCase(); this.handlers[lKey] = handler; return true; } return false; } /** * Checks if an action is available for a particular item. * * @param nodeEntry Item to check * @returns True if the action is available, false otherwise */ canExecuteAction(nodeEntry) { return this.documentListService && nodeEntry && nodeEntry.entry.isFolder === 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); } downloadNode(nodeEntry) { this.nodeActionsService.downloadNode(nodeEntry); } copyNode(nodeEntry, target, permission) { const actionObservable = this.nodeActionsService.copyFolder(nodeEntry.entry, permission); this.prepareHandlers(actionObservable, target); return actionObservable; } moveNode(nodeEntry, target, permission) { const actionObservable = this.nodeActionsService.moveFolder(nodeEntry.entry, permission); this.prepareHandlers(actionObservable, target); return actionObservable; } prepareHandlers(actionObservable, target) { actionObservable.subscribe((fileOperationMessage) => { if (target && typeof target.reload === 'function') { target.reload(); } 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(() => { if (target && typeof target.reload === 'function') { target.reload(); } 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: 'folder', 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: FolderActionsService, deps: [{ token: i1.NodeActionsService }, { token: i2.DocumentListService }, { token: i3.ContentService }, { token: i4.TranslationService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: FolderActionsService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: FolderActionsService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.NodeActionsService }, { type: i2.DocumentListService }, { type: i3.ContentService }, { type: i4.TranslationService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9sZGVyLWFjdGlvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvZG9jdW1lbnQtbGlzdC9zZXJ2aWNlcy9mb2xkZXItYWN0aW9ucy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQUs1RCxNQUFNLE9BQU8sb0JBQW9CO0lBTzdCLFlBQ1ksa0JBQXNDLEVBQ3RDLG1CQUF3QyxFQUN4QyxjQUE4QixFQUM5QixXQUErQjtRQUgvQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQVYzQyxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFtQixDQUFDO1FBQ2pELFVBQUssR0FBRyxJQUFJLE9BQU8sRUFBUyxDQUFDO1FBQzdCLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBRXhCLGFBQVEsR0FBMkMsRUFBRSxDQUFDO1FBUTFELElBQUksQ0FB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QUMsSUFBSSxlQUFlLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNqRyxPQUFPLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLEVBQUUsRUFBRSxDQUFDO0lBQ2hCLENBQUM7OEdBbkhRLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGNBRmpCLE1BQU07OzJGQUVULG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBDb250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9zZXJ2aWNlcy9jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9kZUVudHJ5IH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0aHJvd0Vycm9yLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29udGVudEFjdGlvbkhhbmRsZXIgfSBmcm9tICcuLi9tb2RlbHMvY29udGVudC1hY3Rpb24ubW9kZWwnO1xuaW1wb3J0IHsgUGVybWlzc2lvbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3Blcm1pc3Npb25zLm1vZGVsJztcbmltcG9ydCB7IERvY3VtZW50TGlzdFNlcnZpY2UgfSBmcm9tICcuL2RvY3VtZW50LWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlQWN0aW9uc1NlcnZpY2UgfSBmcm9tICcuL25vZGUtYWN0aW9ucy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBGb2xkZXJBY3Rpb25zU2VydmljZSB7XG4gICAgcGVybWlzc2lvbkV2ZW50ID0gbmV3IFN1YmplY3Q8UGVybWlzc2lvbk1vZGVsPigpO1xuICAgIGVycm9yID0gbmV3IFN1YmplY3Q8RXJyb3I+KCk7XG4gICAgc3VjY2VzcyA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAgIHByaXZhdGUgaGFuZGxlcnM6IHsgW2lkOiBzdHJpbmddOiBDb250ZW50QWN0aW9uSGFuZGxlciB9ID0ge307XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBub2RlQWN0aW9uc1NlcnZpY2U6IE5vZGVBY3Rpb25zU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkb2N1bWVudExpc3RTZXJ2aWNlOiBEb2N1bWVudExpc3RTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnRlbnRTZXJ2aWNlOiBDb250ZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGlvbjogVHJhbnNsYXRpb25TZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc2V0dXBBY3Rpb25IYW5kbGVycygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGhhbmRsZXIgZnVuY3Rpb24gZm9yIGFuIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBrZXkgSWRlbnRpZmllciBmb3IgdGhlIGFjdGlvblxuICAgICAqIEByZXR1cm5zIFRoZSBoYW5kbGVyIGZ1bmN0aW9uXG4gICAgICovXG4gICAgZ2V0SGFuZGxlcihrZXk6IHN0cmluZyk6IENvbnRlbnRBY3Rpb25IYW5kbGVyIHtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgY29uc3QgbEtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlcnNbbEtleV0gfHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbmV3IGhhbmRsZXIgZnVuY3Rpb24gZm9yIGFuIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBrZXkgSWRlbnRpZmllciBmb3IgdGhlIGFjdGlvblxuICAgICAqIEBwYXJhbSBoYW5kbGVyIFRoZSBuZXcgaGFuZGxlciBmdW5jdGlvblxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGtleSB3YXMgYSB2YWxpZCBhY3Rpb24gaWRlbnRpZmllciwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgICovXG4gICAgc2V0SGFuZGxlcihrZXk6IHN0cmluZywgaGFuZGxlcjogQ29udGVudEFjdGlvbkhhbmRsZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgY29uc3QgbEtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVyc1tsS2V5XSA9IGhhbmRsZXI7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGFuIGFjdGlvbiBpcyBhdmFpbGFibGUgZm9yIGEgcGFydGljdWxhciBpdGVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGVFbnRyeSBJdGVtIHRvIGNoZWNrXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgICovXG4gICAgY2FuRXhlY3V0ZUFjdGlvbihub2RlRW50cnk6IE5vZGVFbnRyeSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudExpc3RTZXJ2aWNlICYmIG5vZGVFbnRyeSAmJiBub2RlRW50cnkuZW50cnkuaXNGb2xkZXIgPT09IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cEFjdGlvbkhhbmRsZXJzKCkge1xuICAgICAgICB0aGlzLmhhbmRsZXJzWydjb3B5J10gPSB0aGlzLmNvcHlOb2RlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlcnNbJ21vdmUnXSA9IHRoaXMubW92ZU5vZGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVyc1snZGVsZXRlJ10gPSB0aGlzLmRlbGV0ZU5vZGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVyc1snZG93bmxvYWQnXSA9IHRoaXMuZG93bmxvYWROb2RlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkb3dubG9hZE5vZGUobm9kZUVudHJ5OiBOb2RlRW50cnkpIHtcbiAgICAgICAgdGhpcy5ub2RlQWN0aW9uc1NlcnZpY2UuZG93bmxvYWROb2RlKG5vZGVFbnRyeSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb3B5Tm9kZShub2RlRW50cnk6IE5vZGVFbnRyeSwgdGFyZ2V0PzogYW55LCBwZXJtaXNzaW9uPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbk9ic2VydmFibGUgPSB0aGlzLm5vZGVBY3Rpb25zU2VydmljZS5jb3B5Rm9sZGVyKG5vZGVFbnRyeS5lbnRyeSwgcGVybWlzc2lvbik7XG4gICAgICAgIHRoaXMucHJlcGFyZUhhbmRsZXJzKGFjdGlvbk9ic2VydmFibGUsIHRhcmdldCk7XG4gICAgICAgIHJldHVybiBhY3Rpb25PYnNlcnZhYmxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW92ZU5vZGUobm9kZUVudHJ5OiBOb2RlRW50cnksIHRhcmdldD86IGFueSwgcGVybWlzc2lvbj86IHN0cmluZykge1xuICAgICAgICBjb25zdCBhY3Rpb25PYnNlcnZhYmxlID0gdGhpcy5ub2RlQWN0aW9uc1NlcnZpY2UubW92ZUZvbGRlcihub2RlRW50cnkuZW50cnksIHBlcm1pc3Npb24pO1xuICAgICAgICB0aGlzLnByZXBhcmVIYW5kbGVycyhhY3Rpb25PYnNlcnZhYmxlLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gYWN0aW9uT2JzZXJ2YWJsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVIYW5kbGVycyhhY3Rpb25PYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGFueT4sIHRhcmdldD86IGFueSk6IHZvaWQge1xuICAgICAgICBhY3Rpb25PYnNlcnZhYmxlLnN1YnNjcmliZSgoZmlsZU9wZXJhdGlvbk1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldC5yZWxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQucmVsb2FkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3MubmV4dChmaWxlT3BlcmF0aW9uTWVzc2FnZSk7XG4gICAgICAgIH0sIHRoaXMuZXJyb3IubmV4dC5iaW5kKHRoaXMuZXJyb3IpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlbGV0ZU5vZGUobm9kZTogTm9kZUVudHJ5LCB0YXJnZXQ/OiBhbnksIHBlcm1pc3Npb24/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5FeGVjdXRlQWN0aW9uKG5vZGUpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250ZW50U2VydmljZS5oYXNBbGxvd2FibGVPcGVyYXRpb25zKG5vZGUuZW50cnksIHBlcm1pc3Npb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlck9ic2VydmFibGUgPSB0aGlzLmRvY3VtZW50TGlzdFNlcnZpY2UuZGVsZXRlTm9kZShub2RlLmVudHJ5LmlkKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyT2JzZXJ2YWJsZS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldC5yZWxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0aW9uLmluc3RhbnQoJ0NPUkUuREVMRVRFX05PREUuU0lOR1VMQVInLCB7IG5hbWU6IG5vZGUuZW50cnkubmFtZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzcy5uZXh0KG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGlvbi5pbnN0YW50KCdDT1JFLkRFTEVURV9OT0RFLkVSUk9SX1NJTkdVTEFSJywgeyBuYW1lOiBub2RlLmVudHJ5Lm5hbWUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yLm5leHQobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJPYnNlcnZhYmxlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25FdmVudC5uZXh0KG5ldyBQZXJtaXNzaW9uTW9kZWwoeyB0eXBlOiAnZm9sZGVyJywgYWN0aW9uOiAnZGVsZXRlJywgcGVybWlzc2lvbiB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IobmV3IEVycm9yKCdObyBwZXJtaXNzaW9uIHRvIGRlbGV0ZScpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvZigpO1xuICAgIH1cbn1cbiJdfQ==