@alfresco/adf-content-services
Version:
Alfresco ADF content services
196 lines • 26.5 kB
JavaScript
/*!
* @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/component-selector */
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { DocumentActionsService } from '../../services/document-actions.service';
import { FolderActionsService } from '../../services/folder-actions.service';
import { ContentActionModel, ContentActionTarget } from './../../models/content-action.model';
import { ContentActionListComponent } from './content-action-list.component';
import * as i0 from "@angular/core";
import * as i1 from "./content-action-list.component";
import * as i2 from "../../services/document-actions.service";
import * as i3 from "../../services/folder-actions.service";
export class ContentActionComponent {
constructor(list, documentActions, folderActions) {
this.list = list;
this.documentActions = documentActions;
this.folderActions = folderActions;
/** The title of the action as shown in the menu. */
this.title = 'Action';
/** Visibility state (see examples). */
this.visible = true;
/** Type of item that the action applies to. Can be "document" or "folder" */
this.target = ContentActionTarget.All;
/** Is the menu item disabled? */
this.disabled = false;
/** Emitted when the user selects the action from the menu. */
this.execute = new EventEmitter();
/** Emitted when a permission error occurs */
this.permissionEvent = new EventEmitter();
/**
* Emitted when an error occurs during the action.
* Applies to copy and move actions.
*/
this.error = new EventEmitter();
/**
* Emitted when the action succeeds with the success string message.
* Applies to copy, move and delete actions.
*/
this.success = new EventEmitter();
this.subscriptions = [];
}
ngOnInit() {
if (this.target === ContentActionTarget.All) {
this.folderActionModel = this.generateAction(ContentActionTarget.Folder);
this.documentActionModel = this.generateAction(ContentActionTarget.Document);
}
else {
this.documentActionModel = this.generateAction(this.target);
}
}
ngOnChanges(changes) {
if (changes.visible && !changes.visible.firstChange) {
if (this.documentActionModel) {
this.documentActionModel.visible = changes.visible.currentValue;
}
if (this.folderActionModel) {
this.folderActionModel.visible = changes.visible.currentValue;
}
}
if (changes.disabled && !changes.disabled.firstChange) {
if (this.documentActionModel) {
this.documentActionModel.disabled = changes.disabled.currentValue;
}
if (this.folderActionModel) {
this.folderActionModel.disabled = changes.disabled.currentValue;
}
}
}
ngOnDestroy() {
this.subscriptions.forEach((subscription) => subscription.unsubscribe());
this.subscriptions = [];
if (this.documentActionModel) {
this.unregister(this.documentActionModel);
this.documentActionModel = null;
}
if (this.folderActionModel) {
this.unregister(this.folderActionModel);
this.folderActionModel = null;
}
}
register(model) {
if (this.list) {
return this.list.registerAction(model);
}
return false;
}
unregister(model) {
if (this.list) {
return this.list.unregisterAction(model);
}
return false;
}
generateAction(target) {
const model = new ContentActionModel({
title: this.title,
icon: this.icon,
permission: this.permission,
disableWithNoPermission: this.disableWithNoPermission,
target,
disabled: this.disabled,
visible: this.visible
});
if (this.handler) {
model.handler = this.getSystemHandler(target, this.handler);
}
if (this.execute) {
model.execute = (value) => {
this.execute.emit({ value });
};
}
this.register(model);
return model;
}
getSystemHandler(target, name) {
if (target) {
target = target.toLowerCase();
if (target === ContentActionTarget.Document) {
if (this.documentActions) {
this.subscriptions.push(this.documentActions.permissionEvent.subscribe((permission) => {
this.permissionEvent.emit(permission);
}), this.documentActions.error.subscribe((errors) => {
this.error.emit(errors);
}), this.documentActions.success.subscribe((message) => {
this.success.emit(message);
}));
return this.documentActions.getHandler(name);
}
return null;
}
if (target === ContentActionTarget.Folder) {
if (this.folderActions) {
this.subscriptions.push(this.folderActions.permissionEvent.subscribe((permission) => {
this.permissionEvent.emit(permission);
}), this.folderActions.error.subscribe((errors) => {
this.error.emit(errors);
}), this.folderActions.success.subscribe((message) => {
this.success.emit(message);
}));
return this.folderActions.getHandler(name);
}
return null;
}
}
return null;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ContentActionComponent, deps: [{ token: i1.ContentActionListComponent }, { token: i2.DocumentActionsService }, { token: i3.FolderActionsService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: ContentActionComponent, isStandalone: true, selector: "content-action", inputs: { title: "title", icon: "icon", visible: "visible", handler: "handler", target: "target", permission: "permission", disableWithNoPermission: "disableWithNoPermission", disabled: "disabled" }, outputs: { execute: "execute", permissionEvent: "permissionEvent", error: "error", success: "success" }, providers: [DocumentActionsService, FolderActionsService], usesOnChanges: true, ngImport: i0, template: '', isInline: true }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ContentActionComponent, decorators: [{
type: Component,
args: [{
selector: 'content-action',
standalone: true,
template: '',
providers: [DocumentActionsService, FolderActionsService]
}]
}], ctorParameters: () => [{ type: i1.ContentActionListComponent }, { type: i2.DocumentActionsService }, { type: i3.FolderActionsService }], propDecorators: { title: [{
type: Input
}], icon: [{
type: Input
}], visible: [{
type: Input
}], handler: [{
type: Input
}], target: [{
type: Input
}], permission: [{
type: Input
}], disableWithNoPermission: [{
type: Input
}], disabled: [{
type: Input
}], execute: [{
type: Output
}], permissionEvent: [{
type: Output
}], error: [{
type: Output
}], success: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1hY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9kb2N1bWVudC1saXN0L2NvbXBvbmVudHMvY29udGVudC1hY3Rpb24vY29udGVudC1hY3Rpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUF1QyxNQUFNLGVBQWUsQ0FBQztBQUdwSCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7QUFTN0UsTUFBTSxPQUFPLHNCQUFzQjtJQTREL0IsWUFDWSxJQUFnQyxFQUNoQyxlQUF1QyxFQUN2QyxhQUFtQztRQUZuQyxTQUFJLEdBQUosSUFBSSxDQUE0QjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFDdkMsa0JBQWEsR0FBYixhQUFhLENBQXNCO1FBOUQvQyxvREFBb0Q7UUFFcEQsVUFBSyxHQUFXLFFBQVEsQ0FBQztRQU16Qix1Q0FBdUM7UUFFdkMsWUFBTyxHQUFxQyxJQUFJLENBQUM7UUFNakQsNkVBQTZFO1FBRTdFLFdBQU0sR0FBVyxtQkFBbUIsQ0FBQyxHQUFHLENBQUM7UUFVekMsaUNBQWlDO1FBRWpDLGFBQVEsR0FBcUMsS0FBSyxDQUFDO1FBRW5ELDhEQUE4RDtRQUU5RCxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUU3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LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvciAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb250ZW50QWN0aW9uSGFuZGxlciB9IGZyb20gJy4uLy4uL21vZGVscy9jb250ZW50LWFjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBEb2N1bWVudEFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZG9jdW1lbnQtYWN0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IEZvbGRlckFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9sZGVyLWFjdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZW50QWN0aW9uTW9kZWwsIENvbnRlbnRBY3Rpb25UYXJnZXQgfSBmcm9tICcuLy4uLy4uL21vZGVscy9jb250ZW50LWFjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBDb250ZW50QWN0aW9uTGlzdENvbXBvbmVudCB9IGZyb20gJy4vY29udGVudC1hY3Rpb24tbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY29udGVudC1hY3Rpb24nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIHByb3ZpZGVyczogW0RvY3VtZW50QWN0aW9uc1NlcnZpY2UsIEZvbGRlckFjdGlvbnNTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50QWN0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgLyoqIFRoZSB0aXRsZSBvZiB0aGUgYWN0aW9uIGFzIHNob3duIGluIHRoZSBtZW51LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGU6IHN0cmluZyA9ICdBY3Rpb24nO1xuXG4gICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBpY29uIHRvIGRpc3BsYXkgbmV4dCB0byB0aGUgbWVudSBjb21tYW5kIChjYW4gYmUgbGVmdCBibGFuaykuICovXG4gICAgQElucHV0KClcbiAgICBpY29uOiBzdHJpbmc7XG5cbiAgICAvKiogVmlzaWJpbGl0eSBzdGF0ZSAoc2VlIGV4YW1wbGVzKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHZpc2libGU6IGJvb2xlYW4gfCAoKC4uLmFyZ3MpID0+IGJvb2xlYW4pID0gdHJ1ZTtcblxuICAgIC8qKiBTeXN0ZW0gYWN0aW9ucy4gQ2FuIGJlIFwiZGVsZXRlXCIsIFwiZG93bmxvYWRcIiwgXCJjb3B5XCIgb3IgXCJtb3ZlXCIuICovXG4gICAgQElucHV0KClcbiAgICBoYW5kbGVyOiBzdHJpbmc7XG5cbiAgICAvKiogVHlwZSBvZiBpdGVtIHRoYXQgdGhlIGFjdGlvbiBhcHBsaWVzIHRvLiBDYW4gYmUgXCJkb2N1bWVudFwiIG9yIFwiZm9sZGVyXCIgKi9cbiAgICBASW5wdXQoKVxuICAgIHRhcmdldDogc3RyaW5nID0gQ29udGVudEFjdGlvblRhcmdldC5BbGw7XG5cbiAgICAvKiogVGhlIHBlcm1pc3Npb24gdHlwZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBlcm1pc3Npb246IHN0cmluZztcblxuICAgIC8qKiBTaG91bGQgdGhpcyBhY3Rpb24gYmUgZGlzYWJsZWQgaW4gdGhlIG1lbnUgaWYgdGhlIHVzZXIgZG9lc24ndCBoYXZlIHBlcm1pc3Npb24gZm9yIGl0PyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVdpdGhOb1Blcm1pc3Npb246IGJvb2xlYW47XG5cbiAgICAvKiogSXMgdGhlIG1lbnUgaXRlbSBkaXNhYmxlZD8gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkOiBib29sZWFuIHwgKCguLi5hcmdzKSA9PiBib29sZWFuKSA9IGZhbHNlO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBzZWxlY3RzIHRoZSBhY3Rpb24gZnJvbSB0aGUgbWVudS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBleGVjdXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhIHBlcm1pc3Npb24gZXJyb3Igb2NjdXJzICovXG4gICAgQE91dHB1dCgpXG4gICAgcGVybWlzc2lvbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFjdGlvbi5cbiAgICAgKiBBcHBsaWVzIHRvIGNvcHkgYW5kIG1vdmUgYWN0aW9ucy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBlcnJvciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgYWN0aW9uIHN1Y2NlZWRzIHdpdGggdGhlIHN1Y2Nlc3Mgc3RyaW5nIG1lc3NhZ2UuXG4gICAgICogQXBwbGllcyB0byBjb3B5LCBtb3ZlIGFuZCBkZWxldGUgYWN0aW9ucy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBzdWNjZXNzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgZG9jdW1lbnRBY3Rpb25Nb2RlbDogQ29udGVudEFjdGlvbk1vZGVsO1xuICAgIGZvbGRlckFjdGlvbk1vZGVsOiBDb250ZW50QWN0aW9uTW9kZWw7XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBsaXN0OiBDb250ZW50QWN0aW9uTGlzdENvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSBkb2N1bWVudEFjdGlvbnM6IERvY3VtZW50QWN0aW9uc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZm9sZGVyQWN0aW9uczogRm9sZGVyQWN0aW9uc1NlcnZpY2VcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0ID09PSBDb250ZW50QWN0aW9uVGFyZ2V0LkFsbCkge1xuICAgICAgICAgICAgdGhpcy5mb2xkZXJBY3Rpb25Nb2RlbCA9IHRoaXMuZ2VuZXJhdGVBY3Rpb24oQ29udGVudEFjdGlvblRhcmdldC5Gb2xkZXIpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudEFjdGlvbk1vZGVsID0gdGhpcy5nZW5lcmF0ZUFjdGlvbihDb250ZW50QWN0aW9uVGFyZ2V0LkRvY3VtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRBY3Rpb25Nb2RlbCA9IHRoaXMuZ2VuZXJhdGVBY3Rpb24odGhpcy50YXJnZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy52aXNpYmxlICYmICFjaGFuZ2VzLnZpc2libGUuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRvY3VtZW50QWN0aW9uTW9kZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50QWN0aW9uTW9kZWwudmlzaWJsZSA9IGNoYW5nZXMudmlzaWJsZS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5mb2xkZXJBY3Rpb25Nb2RlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9sZGVyQWN0aW9uTW9kZWwudmlzaWJsZSA9IGNoYW5nZXMudmlzaWJsZS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5kaXNhYmxlZCAmJiAhY2hhbmdlcy5kaXNhYmxlZC5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRBY3Rpb25Nb2RlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRBY3Rpb25Nb2RlbC5kaXNhYmxlZCA9IGNoYW5nZXMuZGlzYWJsZWQuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZm9sZGVyQWN0aW9uTW9kZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvbGRlckFjdGlvbk1vZGVsLmRpc2FibGVkID0gY2hhbmdlcy5kaXNhYmxlZC5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YnNjcmlwdGlvbikgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5kb2N1bWVudEFjdGlvbk1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnVucmVnaXN0ZXIodGhpcy5kb2N1bWVudEFjdGlvbk1vZGVsKTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRBY3Rpb25Nb2RlbCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5mb2xkZXJBY3Rpb25Nb2RlbCkge1xuICAgICAgICAgICAgdGhpcy51bnJlZ2lzdGVyKHRoaXMuZm9sZGVyQWN0aW9uTW9kZWwpO1xuICAgICAgICAgICAgdGhpcy5mb2xkZXJBY3Rpb25Nb2RlbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3Rlcihtb2RlbDogQ29udGVudEFjdGlvbk1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3QucmVnaXN0ZXJBY3Rpb24obW9kZWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB1bnJlZ2lzdGVyKG1vZGVsOiBDb250ZW50QWN0aW9uTW9kZWwpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdC51bnJlZ2lzdGVyQWN0aW9uKG1vZGVsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUFjdGlvbih0YXJnZXQ6IHN0cmluZyk6IENvbnRlbnRBY3Rpb25Nb2RlbCB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IENvbnRlbnRBY3Rpb25Nb2RlbCh7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgICAgICAgIGljb246IHRoaXMuaWNvbixcbiAgICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMucGVybWlzc2lvbixcbiAgICAgICAgICAgIGRpc2FibGVXaXRoTm9QZXJtaXNzaW9uOiB0aGlzLmRpc2FibGVXaXRoTm9QZXJtaXNzaW9uLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgICAgICB2aXNpYmxlOiB0aGlzLnZpc2libGVcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmhhbmRsZXIpIHtcbiAgICAgICAgICAgIG1vZGVsLmhhbmRsZXIgPSB0aGlzLmdldFN5c3RlbUhhbmRsZXIodGFyZ2V0LCB0aGlzLmhhbmRsZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZXhlY3V0ZSkge1xuICAgICAgICAgICAgbW9kZWwuZXhlY3V0ZSA9ICh2YWx1ZTogYW55KTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlLmVtaXQoeyB2YWx1ZSB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlZ2lzdGVyKG1vZGVsKTtcbiAgICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH1cblxuICAgIGdldFN5c3RlbUhhbmRsZXIodGFyZ2V0OiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IENvbnRlbnRBY3Rpb25IYW5kbGVyIHtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IENvbnRlbnRBY3Rpb25UYXJnZXQuRG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kb2N1bWVudEFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50QWN0aW9ucy5wZXJtaXNzaW9uRXZlbnQuc3Vic2NyaWJlKChwZXJtaXNzaW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uRXZlbnQuZW1pdChwZXJtaXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudEFjdGlvbnMuZXJyb3Iuc3Vic2NyaWJlKChlcnJvcnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yLmVtaXQoZXJyb3JzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudEFjdGlvbnMuc3VjY2Vzcy5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MuZW1pdChtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRBY3Rpb25zLmdldEhhbmRsZXIobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGFyZ2V0ID09PSBDb250ZW50QWN0aW9uVGFyZ2V0LkZvbGRlcikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvbGRlckFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbGRlckFjdGlvbnMucGVybWlzc2lvbkV2ZW50LnN1YnNjcmliZSgocGVybWlzc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbkV2ZW50LmVtaXQocGVybWlzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9sZGVyQWN0aW9ucy5lcnJvci5zdWJzY3JpYmUoKGVycm9ycykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdChlcnJvcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbGRlckFjdGlvbnMuc3VjY2Vzcy5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MuZW1pdChtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9sZGVyQWN0aW9ucy5nZXRIYW5kbGVyKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iXX0=