@alfresco/adf-content-services
Version:
Alfresco ADF content services
134 lines • 21.2 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.
*/
import { Injectable } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { CardViewSelectItemModel, CardViewTextItemModel } from '@alfresco/adf-core';
import { of, Subject, zip } from 'rxjs';
import { distinctUntilChanged, map } from 'rxjs/operators';
import { ContentTypeDialogComponent } from '../../content-type/content-type-dialog.component';
import { ContentTypeService } from '../../content-type/content-type.service';
import { PropertyGroupTranslatorService } from './property-groups-translator.service';
import { VersionCompatibilityService } from '../../version-compatibility/version-compatibility.service';
import * as i0 from "@angular/core";
import * as i1 from "../../content-type/content-type.service";
import * as i2 from "@angular/material/dialog";
import * as i3 from "../../version-compatibility/version-compatibility.service";
import * as i4 from "./property-groups-translator.service";
export class ContentTypePropertiesService {
constructor(contentTypeService, dialog, versionCompatibilityService, propertyGroupTranslatorService) {
this.contentTypeService = contentTypeService;
this.dialog = dialog;
this.versionCompatibilityService = versionCompatibilityService;
this.propertyGroupTranslatorService = propertyGroupTranslatorService;
}
getContentTypeCardItem(node) {
if (this.versionCompatibilityService.isVersionSupported('7')) {
return this.contentTypeService.getContentTypeByPrefix(node.nodeType).pipe(map((contentType) => {
const contentTypesOptions$ = this.getContentTypesAsSelectOption(contentType);
const contentTypeCard = this.buildContentTypeSelectCardModel(contentType.entry.id, contentTypesOptions$);
const filteredProperties = this.getContentTypeSpecificProperties(contentType);
const propertiesCard = this.buildCardItemsFromPropertyList(filteredProperties, node.properties);
return [contentTypeCard, ...propertiesCard];
}));
}
else {
return of([this.buildContentTypeTextCardModel(node.nodeType)]);
}
}
buildCardItemsFromPropertyList(properties, currentProperties) {
return properties.map((property) => {
const propertyValue = currentProperties ? currentProperties[property.id] : null;
return this.buildCardItemFromProperty(property, propertyValue);
});
}
buildCardItemFromProperty(property, propertyValue) {
return this.propertyGroupTranslatorService.translateProperty(property, propertyValue, true);
}
getContentTypeSpecificProperties(contentType) {
return contentType.entry.properties.filter((property) => property.id.startsWith(contentType.entry.model.namespacePrefix));
}
buildContentTypeTextCardModel(currentValue) {
const contentTypeCard = new CardViewTextItemModel({
label: 'CORE.METADATA.BASIC.CONTENT_TYPE',
value: currentValue,
key: 'nodeType',
editable: false
});
return contentTypeCard;
}
buildContentTypeSelectCardModel(currentValue, options$) {
const contentTypeCard = new CardViewSelectItemModel({
label: 'CORE.METADATA.BASIC.CONTENT_TYPE',
value: currentValue,
key: 'nodeType',
editable: true,
options$,
displayNoneOption: false
});
return contentTypeCard;
}
getContentTypesAsSelectOption(currentType) {
const childrenTypes$ = this.contentTypeService.getContentTypeChildren(currentType.entry.id);
return zip(childrenTypes$, of(currentType)).pipe(distinctUntilChanged(), map(([contentTypesEntries, currentContentType]) => {
const updatedTypes = this.appendCurrentType(currentContentType, contentTypesEntries);
return updatedTypes.map((contentType) => ({ key: contentType.entry.id, label: contentType.entry.title ?? contentType.entry.id }));
}));
}
appendCurrentType(currentType, contentTypesEntries) {
const resultTypes = [...contentTypesEntries];
const currentTypePresent = contentTypesEntries.find((type) => type.entry.id === currentType.entry.id);
if (!currentTypePresent) {
resultTypes.push(currentType);
}
return resultTypes;
}
openContentTypeDialogConfirm(nodeType) {
const select = new Subject();
select.subscribe({
complete: this.close.bind(this)
});
const data = {
title: 'CORE.METADATA.CONTENT_TYPE.DIALOG.TITLE',
description: 'CORE.METADATA.CONTENT_TYPE.DIALOG.DESCRIPTION',
confirmMessage: 'CORE.METADATA.CONTENT_TYPE.DIALOG.CONFIRM',
select,
nodeType
};
this.openDialog(data, 'adf-content-type-dialog', '600px');
return select;
}
close() {
this.dialog.closeAll();
}
openDialog(data, panelClass, width) {
this.dialog.open(ContentTypeDialogComponent, {
data,
panelClass,
width,
disableClose: true
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ContentTypePropertiesService, deps: [{ token: i1.ContentTypeService }, { token: i2.MatDialog }, { token: i3.VersionCompatibilityService }, { token: i4.PropertyGroupTranslatorService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ContentTypePropertiesService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ContentTypePropertiesService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.ContentTypeService }, { type: i2.MatDialog }, { type: i3.VersionCompatibilityService }, { type: i4.PropertyGroupTranslatorService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC10eXBlLXByb3BlcnR5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL2NvbnRlbnQtbWV0YWRhdGEvc2VydmljZXMvY29udGVudC10eXBlLXByb3BlcnR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFnQix1QkFBdUIsRUFBNEIscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1SCxPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRTlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTdFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDOzs7Ozs7QUFLeEcsTUFBTSxPQUFPLDRCQUE0QjtJQUNyQyxZQUNZLGtCQUFzQyxFQUN0QyxNQUFpQixFQUNqQiwyQkFBd0QsRUFDeEQsOEJBQThEO1FBSDlELHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixnQ0FBMkIsR0FBM0IsMkJBQTJCLENBQTZCO1FBQ3hELG1DQUE4QixHQUE5Qiw4QkFBOEIsQ0FBZ0M7SUFDdkUsQ0FBQztJQUVK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QUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDbEMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFJLEdBQW1DO1lBQ3pDLEtBQUssRUFBRSx5Q0FBeUM7WUFDaEQsV0FBVyxFQUFFLCtDQUErQztZQUM1RCxjQUFjLEVBQUUsMkNBQTJDO1lBQzNELE1BQU07WUFDTixRQUFRO1NBQ1gsQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLHlCQUF5QixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sVUFBVSxDQUFDLElBQW9DLEVBQUUsVUFBa0IsRUFBRSxLQUFhO1FBQ3RGLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFO1lBQ3pDLElBQUk7WUFDSixVQUFVO1lBQ1YsS0FBSztZQUNMLFlBQVksRUFBRSxJQUFJO1NBQ3JCLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBbkhRLDRCQUE0QjtrSEFBNUIsNEJBQTRCLGNBRnpCLE1BQU07OzJGQUVULDRCQUE0QjtrQkFIeEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDYXJkVmlld0l0ZW0sIENhcmRWaWV3U2VsZWN0SXRlbU1vZGVsLCBDYXJkVmlld1NlbGVjdEl0ZW1PcHRpb24sIENhcmRWaWV3VGV4dEl0ZW1Nb2RlbCB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgemlwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29udGVudFR5cGVEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb250ZW50LXR5cGUvY29udGVudC10eXBlLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29udGVudFR5cGVEaWFsb2dDb21wb25lbnREYXRhIH0gZnJvbSAnLi4vLi4vY29udGVudC10eXBlL2NvbnRlbnQtdHlwZS1tZXRhZGF0YS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29udGVudFR5cGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29udGVudC10eXBlL2NvbnRlbnQtdHlwZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGUsIFByb3BlcnR5LCBUeXBlRW50cnkgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IFByb3BlcnR5R3JvdXBUcmFuc2xhdG9yU2VydmljZSB9IGZyb20gJy4vcHJvcGVydHktZ3JvdXBzLXRyYW5zbGF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBWZXJzaW9uQ29tcGF0aWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi92ZXJzaW9uLWNvbXBhdGliaWxpdHkvdmVyc2lvbi1jb21wYXRpYmlsaXR5LnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvbnRlbnRUeXBlUHJvcGVydGllc1NlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNvbnRlbnRUeXBlU2VydmljZTogQ29udGVudFR5cGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICBwcml2YXRlIHZlcnNpb25Db21wYXRpYmlsaXR5U2VydmljZTogVmVyc2lvbkNvbXBhdGliaWxpdHlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHByb3BlcnR5R3JvdXBUcmFuc2xhdG9yU2VydmljZTogUHJvcGVydHlHcm91cFRyYW5zbGF0b3JTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgZ2V0Q29udGVudFR5cGVDYXJkSXRlbShub2RlOiBOb2RlKTogT2JzZXJ2YWJsZTxDYXJkVmlld0l0ZW1bXT4ge1xuICAgICAgICBpZiAodGhpcy52ZXJzaW9uQ29tcGF0aWJpbGl0eVNlcnZpY2UuaXNWZXJzaW9uU3VwcG9ydGVkKCc3JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRUeXBlU2VydmljZS5nZXRDb250ZW50VHlwZUJ5UHJlZml4KG5vZGUubm9kZVR5cGUpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChjb250ZW50VHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50VHlwZXNPcHRpb25zJCA9IHRoaXMuZ2V0Q29udGVudFR5cGVzQXNTZWxlY3RPcHRpb24oY29udGVudFR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50VHlwZUNhcmQgPSB0aGlzLmJ1aWxkQ29udGVudFR5cGVTZWxlY3RDYXJkTW9kZWwoY29udGVudFR5cGUuZW50cnkuaWQsIGNvbnRlbnRUeXBlc09wdGlvbnMkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQcm9wZXJ0aWVzID0gdGhpcy5nZXRDb250ZW50VHlwZVNwZWNpZmljUHJvcGVydGllcyhjb250ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXNDYXJkID0gdGhpcy5idWlsZENhcmRJdGVtc0Zyb21Qcm9wZXJ0eUxpc3QoZmlsdGVyZWRQcm9wZXJ0aWVzLCBub2RlLnByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2NvbnRlbnRUeXBlQ2FyZCwgLi4ucHJvcGVydGllc0NhcmRdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9mKFt0aGlzLmJ1aWxkQ29udGVudFR5cGVUZXh0Q2FyZE1vZGVsKG5vZGUubm9kZVR5cGUpXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBidWlsZENhcmRJdGVtc0Zyb21Qcm9wZXJ0eUxpc3QocHJvcGVydGllczogUHJvcGVydHlbXSwgY3VycmVudFByb3BlcnRpZXM6IGFueSk6IENhcmRWaWV3SXRlbVtdIHtcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMubWFwKChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGN1cnJlbnRQcm9wZXJ0aWVzID8gY3VycmVudFByb3BlcnRpZXNbcHJvcGVydHkuaWRdIDogbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1aWxkQ2FyZEl0ZW1Gcm9tUHJvcGVydHkocHJvcGVydHksIHByb3BlcnR5VmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkQ2FyZEl0ZW1Gcm9tUHJvcGVydHkocHJvcGVydHk6IFByb3BlcnR5LCBwcm9wZXJ0eVZhbHVlOiBhbnkpOiBDYXJkVmlld0l0ZW0ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eUdyb3VwVHJhbnNsYXRvclNlcnZpY2UudHJhbnNsYXRlUHJvcGVydHkocHJvcGVydHksIHByb3BlcnR5VmFsdWUsIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29udGVudFR5cGVTcGVjaWZpY1Byb3BlcnRpZXMoY29udGVudFR5cGU6IFR5cGVFbnRyeSk6IFByb3BlcnR5W10ge1xuICAgICAgICByZXR1cm4gY29udGVudFR5cGUuZW50cnkucHJvcGVydGllcy5maWx0ZXIoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5pZC5zdGFydHNXaXRoKGNvbnRlbnRUeXBlLmVudHJ5Lm1vZGVsLm5hbWVzcGFjZVByZWZpeCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRDb250ZW50VHlwZVRleHRDYXJkTW9kZWwoY3VycmVudFZhbHVlOiBzdHJpbmcpOiBDYXJkVmlld1RleHRJdGVtTW9kZWwge1xuICAgICAgICBjb25zdCBjb250ZW50VHlwZUNhcmQgPSBuZXcgQ2FyZFZpZXdUZXh0SXRlbU1vZGVsKHtcbiAgICAgICAgICAgIGxhYmVsOiAnQ09SRS5NRVRBREFUQS5CQVNJQy5DT05URU5UX1RZUEUnLFxuICAgICAgICAgICAgdmFsdWU6IGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIGtleTogJ25vZGVUeXBlJyxcbiAgICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY29udGVudFR5cGVDYXJkO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRDb250ZW50VHlwZVNlbGVjdENhcmRNb2RlbChcbiAgICAgICAgY3VycmVudFZhbHVlOiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnMkOiBPYnNlcnZhYmxlPENhcmRWaWV3U2VsZWN0SXRlbU9wdGlvbjxzdHJpbmc+W10+XG4gICAgKTogQ2FyZFZpZXdTZWxlY3RJdGVtTW9kZWw8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlQ2FyZCA9IG5ldyBDYXJkVmlld1NlbGVjdEl0ZW1Nb2RlbCh7XG4gICAgICAgICAgICBsYWJlbDogJ0NPUkUuTUVUQURBVEEuQkFTSUMuQ09OVEVOVF9UWVBFJyxcbiAgICAgICAgICAgIHZhbHVlOiBjdXJyZW50VmFsdWUsXG4gICAgICAgICAgICBrZXk6ICdub2RlVHlwZScsXG4gICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIG9wdGlvbnMkLFxuICAgICAgICAgICAgZGlzcGxheU5vbmVPcHRpb246IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjb250ZW50VHlwZUNhcmQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb250ZW50VHlwZXNBc1NlbGVjdE9wdGlvbihjdXJyZW50VHlwZTogVHlwZUVudHJ5KTogT2JzZXJ2YWJsZTxDYXJkVmlld1NlbGVjdEl0ZW1PcHRpb248c3RyaW5nPltdPiB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuVHlwZXMkID0gdGhpcy5jb250ZW50VHlwZVNlcnZpY2UuZ2V0Q29udGVudFR5cGVDaGlsZHJlbihjdXJyZW50VHlwZS5lbnRyeS5pZCk7XG4gICAgICAgIHJldHVybiB6aXAoY2hpbGRyZW5UeXBlcyQsIG9mKGN1cnJlbnRUeXBlKSkucGlwZShcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICBtYXAoKFtjb250ZW50VHlwZXNFbnRyaWVzLCBjdXJyZW50Q29udGVudFR5cGVdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFR5cGVzID0gdGhpcy5hcHBlbmRDdXJyZW50VHlwZShjdXJyZW50Q29udGVudFR5cGUsIGNvbnRlbnRUeXBlc0VudHJpZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVkVHlwZXMubWFwKChjb250ZW50VHlwZSkgPT4gKHsga2V5OiBjb250ZW50VHlwZS5lbnRyeS5pZCwgbGFiZWw6IGNvbnRlbnRUeXBlLmVudHJ5LnRpdGxlID8/IGNvbnRlbnRUeXBlLmVudHJ5LmlkIH0pKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBlbmRDdXJyZW50VHlwZShjdXJyZW50VHlwZTogVHlwZUVudHJ5LCBjb250ZW50VHlwZXNFbnRyaWVzOiBUeXBlRW50cnlbXSk6IFR5cGVFbnRyeVtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0VHlwZXMgPSBbLi4uY29udGVudFR5cGVzRW50cmllc107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUeXBlUHJlc2VudCA9IGNvbnRlbnRUeXBlc0VudHJpZXMuZmluZCgodHlwZSkgPT4gdHlwZS5lbnRyeS5pZCA9PT0gY3VycmVudFR5cGUuZW50cnkuaWQpO1xuICAgICAgICBpZiAoIWN1cnJlbnRUeXBlUHJlc2VudCkge1xuICAgICAgICAgICAgcmVzdWx0VHlwZXMucHVzaChjdXJyZW50VHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFR5cGVzO1xuICAgIH1cblxuICAgIG9wZW5Db250ZW50VHlwZURpYWxvZ0NvbmZpcm0obm9kZVR5cGUpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICAgICAgc2VsZWN0LnN1YnNjcmliZSh7XG4gICAgICAgICAgICBjb21wbGV0ZTogdGhpcy5jbG9zZS5iaW5kKHRoaXMpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRhdGE6IENvbnRlbnRUeXBlRGlhbG9nQ29tcG9uZW50RGF0YSA9IHtcbiAgICAgICAgICAgIHRpdGxlOiAnQ09SRS5NRVRBREFUQS5DT05URU5UX1RZUEUuRElBTE9HLlRJVExFJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ09SRS5NRVRBREFUQS5DT05URU5UX1RZUEUuRElBTE9HLkRFU0NSSVBUSU9OJyxcbiAgICAgICAgICAgIGNvbmZpcm1NZXNzYWdlOiAnQ09SRS5NRVRBREFUQS5DT05URU5UX1RZUEUuRElBTE9HLkNPTkZJUk0nLFxuICAgICAgICAgICAgc2VsZWN0LFxuICAgICAgICAgICAgbm9kZVR5cGVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLm9wZW5EaWFsb2coZGF0YSwgJ2FkZi1jb250ZW50LXR5cGUtZGlhbG9nJywgJzYwMHB4Jyk7XG4gICAgICAgIHJldHVybiBzZWxlY3Q7XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nLmNsb3NlQWxsKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcGVuRGlhbG9nKGRhdGE6IENvbnRlbnRUeXBlRGlhbG9nQ29tcG9uZW50RGF0YSwgcGFuZWxDbGFzczogc3RyaW5nLCB3aWR0aDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oQ29udGVudFR5cGVEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYW5lbENsYXNzLFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19