@alfresco/adf-content-services
Version:
Alfresco ADF content services
99 lines • 17.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 { BasicPropertiesService } from './basic-properties.service';
import { of, iif, Subject } from 'rxjs';
import { PropertyGroupTranslatorService } from './property-groups-translator.service';
import { ContentMetadataConfigFactory } from './config/content-metadata-config.factory';
import { PropertyDescriptorsService } from './property-descriptors.service';
import { map, switchMap } from 'rxjs/operators';
import { ContentTypePropertiesService } from './content-type-property.service';
import * as i0 from "@angular/core";
import * as i1 from "./basic-properties.service";
import * as i2 from "./config/content-metadata-config.factory";
import * as i3 from "./property-groups-translator.service";
import * as i4 from "./property-descriptors.service";
import * as i5 from "./content-type-property.service";
export class ContentMetadataService {
constructor(basicPropertiesService, contentMetadataConfigFactory, propertyGroupTranslatorService, propertyDescriptorsService, contentTypePropertyService) {
this.basicPropertiesService = basicPropertiesService;
this.contentMetadataConfigFactory = contentMetadataConfigFactory;
this.propertyGroupTranslatorService = propertyGroupTranslatorService;
this.propertyDescriptorsService = propertyDescriptorsService;
this.contentTypePropertyService = contentTypePropertyService;
this.error = new Subject();
}
getBasicProperties(node) {
return of(this.basicPropertiesService.getProperties(node));
}
getContentTypeProperty(node) {
return this.contentTypePropertyService.getContentTypeCardItem(node);
}
openConfirmDialog(changedProperties) {
return this.contentTypePropertyService.openContentTypeDialogConfirm(changedProperties.nodeType);
}
getGroupedProperties(node, preset = 'default') {
let groupedProperties = of([]);
if (node.aspectNames) {
let contentMetadataConfig;
if (typeof preset === 'string') {
contentMetadataConfig = this.contentMetadataConfigFactory.get(preset);
}
else {
contentMetadataConfig = this.contentMetadataConfigFactory.createConfig(preset);
}
const groupNames = node.aspectNames.concat(node.nodeType).filter((groupName) => contentMetadataConfig.isGroupAllowed(groupName));
if (groupNames.length > 0) {
groupedProperties = this.propertyDescriptorsService.load(groupNames).pipe(switchMap((groups) => iif(() => contentMetadataConfig.isIncludeAllEnabled(), of(contentMetadataConfig.appendAllPreset(groups).concat(contentMetadataConfig.reorganiseByConfig(groups))), of(contentMetadataConfig.reorganiseByConfig(groups)))), map((groups) => contentMetadataConfig.filterExcludedPreset(groups)), map((groups) => this.filterEmptyPreset(groups)), map((groups) => this.setTitleToNameIfNotSet(groups)), map((groups) => this.propertyGroupTranslatorService.translateToCardViewGroups(groups, node.properties, node.definition)));
}
}
return groupedProperties;
}
setTitleToNameIfNotSet(propertyGroups) {
const propertyGroupsTitles = [];
propertyGroups.map((propertyGroup) => {
const title = propertyGroup.title;
const name = propertyGroup.name;
if (title) {
if (propertyGroupsTitles.includes(title)) {
propertyGroup.title = name ? `${title} (${name})` : title;
}
else {
propertyGroup.title = title;
}
propertyGroupsTitles.push(title);
}
else {
propertyGroup.title = name;
propertyGroupsTitles.push(name);
}
});
return propertyGroups;
}
filterEmptyPreset(propertyGroups) {
return propertyGroups.filter((props) => props.properties.length);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ContentMetadataService, deps: [{ token: i1.BasicPropertiesService }, { token: i2.ContentMetadataConfigFactory }, { token: i3.PropertyGroupTranslatorService }, { token: i4.PropertyDescriptorsService }, { token: i5.ContentTypePropertiesService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ContentMetadataService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ContentMetadataService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.BasicPropertiesService }, { type: i2.ContentMetadataConfigFactory }, { type: i3.PropertyGroupTranslatorService }, { type: i4.PropertyDescriptorsService }, { type: i5.ContentTypePropertiesService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1tZXRhZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9jb250ZW50LW1ldGFkYXRhL3NlcnZpY2VzL2NvbnRlbnQtbWV0YWRhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUd0RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN4RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7O0FBSS9FLE1BQU0sT0FBTyxzQkFBc0I7SUFHL0IsWUFDWSxzQkFBOEMsRUFDOUMsNEJBQTBELEVBQzFELDhCQUE4RCxFQUM5RCwwQkFBc0QsRUFDdEQsMEJBQXdEO1FBSnhELDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsaUNBQTRCLEdBQTVCLDRCQUE0QixDQUE4QjtRQUMxRCxtQ0FBOEIsR0FBOUIsOEJBQThCLENBQWdDO1FBQzlELCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7UUFDdEQsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE4QjtRQVBwRSxVQUFLLEdBQUcsSUFBSSxPQUFPLEVBQTJD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QUFhLENBQUMsSUFBSSxDQUFDO1lBQ2hDLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDdkMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQzlELENBQUM7cUJBQU0sQ0FBQztvQkFDSixhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDaEMsQ0FBQztnQkFDRCxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxjQUFjLENBQUM7SUFDMUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLGNBQXdDO1FBQ3RELE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRSxDQUFDOzhHQTlFUSxzQkFBc0I7a0hBQXRCLHNCQUFzQixjQUZuQixNQUFNOzsyRkFFVCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBCYXNpY1Byb3BlcnRpZXNTZXJ2aWNlIH0gZnJvbSAnLi9iYXNpYy1wcm9wZXJ0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIGlpZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJvcGVydHlHcm91cFRyYW5zbGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi9wcm9wZXJ0eS1ncm91cHMtdHJhbnNsYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IENhcmRWaWV3SXRlbSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBDYXJkVmlld0dyb3VwLCBPcmdhbmlzZWRQcm9wZXJ0eUdyb3VwLCBQcmVzZXRDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbnRlbnQtbWV0YWRhdGEuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb250ZW50TWV0YWRhdGFDb25maWdGYWN0b3J5IH0gZnJvbSAnLi9jb25maWcvY29udGVudC1tZXRhZGF0YS1jb25maWcuZmFjdG9yeSc7XG5pbXBvcnQgeyBQcm9wZXJ0eURlc2NyaXB0b3JzU2VydmljZSB9IGZyb20gJy4vcHJvcGVydHktZGVzY3JpcHRvcnMuc2VydmljZSc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbnRlbnRUeXBlUHJvcGVydGllc1NlcnZpY2UgfSBmcm9tICcuL2NvbnRlbnQtdHlwZS1wcm9wZXJ0eS5zZXJ2aWNlJztcbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ29udGVudE1ldGFkYXRhU2VydmljZSB7XG4gICAgZXJyb3IgPSBuZXcgU3ViamVjdDx7IHN0YXR1c0NvZGU6IG51bWJlcjsgbWVzc2FnZTogc3RyaW5nIH0+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBiYXNpY1Byb3BlcnRpZXNTZXJ2aWNlOiBCYXNpY1Byb3BlcnRpZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnRlbnRNZXRhZGF0YUNvbmZpZ0ZhY3Rvcnk6IENvbnRlbnRNZXRhZGF0YUNvbmZpZ0ZhY3RvcnksXG4gICAgICAgIHByaXZhdGUgcHJvcGVydHlHcm91cFRyYW5zbGF0b3JTZXJ2aWNlOiBQcm9wZXJ0eUdyb3VwVHJhbnNsYXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcHJvcGVydHlEZXNjcmlwdG9yc1NlcnZpY2U6IFByb3BlcnR5RGVzY3JpcHRvcnNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnRlbnRUeXBlUHJvcGVydHlTZXJ2aWNlOiBDb250ZW50VHlwZVByb3BlcnRpZXNTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgZ2V0QmFzaWNQcm9wZXJ0aWVzKG5vZGU6IE5vZGUpOiBPYnNlcnZhYmxlPENhcmRWaWV3SXRlbVtdPiB7XG4gICAgICAgIHJldHVybiBvZih0aGlzLmJhc2ljUHJvcGVydGllc1NlcnZpY2UuZ2V0UHJvcGVydGllcyhub2RlKSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udGVudFR5cGVQcm9wZXJ0eShub2RlOiBOb2RlKTogT2JzZXJ2YWJsZTxDYXJkVmlld0l0ZW1bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50VHlwZVByb3BlcnR5U2VydmljZS5nZXRDb250ZW50VHlwZUNhcmRJdGVtKG5vZGUpO1xuICAgIH1cblxuICAgIG9wZW5Db25maXJtRGlhbG9nKGNoYW5nZWRQcm9wZXJ0aWVzKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudFR5cGVQcm9wZXJ0eVNlcnZpY2Uub3BlbkNvbnRlbnRUeXBlRGlhbG9nQ29uZmlybShjaGFuZ2VkUHJvcGVydGllcy5ub2RlVHlwZSk7XG4gICAgfVxuXG4gICAgZ2V0R3JvdXBlZFByb3BlcnRpZXMobm9kZTogTm9kZSwgcHJlc2V0OiBzdHJpbmcgfCBQcmVzZXRDb25maWcgPSAnZGVmYXVsdCcpOiBPYnNlcnZhYmxlPENhcmRWaWV3R3JvdXBbXT4ge1xuICAgICAgICBsZXQgZ3JvdXBlZFByb3BlcnRpZXMgPSBvZihbXSk7XG5cbiAgICAgICAgaWYgKG5vZGUuYXNwZWN0TmFtZXMpIHtcbiAgICAgICAgICAgIGxldCBjb250ZW50TWV0YWRhdGFDb25maWc7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByZXNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBjb250ZW50TWV0YWRhdGFDb25maWcgPSB0aGlzLmNvbnRlbnRNZXRhZGF0YUNvbmZpZ0ZhY3RvcnkuZ2V0KHByZXNldCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRlbnRNZXRhZGF0YUNvbmZpZyA9IHRoaXMuY29udGVudE1ldGFkYXRhQ29uZmlnRmFjdG9yeS5jcmVhdGVDb25maWcocHJlc2V0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZ3JvdXBOYW1lcyA9IG5vZGUuYXNwZWN0TmFtZXMuY29uY2F0KG5vZGUubm9kZVR5cGUpLmZpbHRlcigoZ3JvdXBOYW1lKSA9PiBjb250ZW50TWV0YWRhdGFDb25maWcuaXNHcm91cEFsbG93ZWQoZ3JvdXBOYW1lKSk7XG5cbiAgICAgICAgICAgIGlmIChncm91cE5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBncm91cGVkUHJvcGVydGllcyA9IHRoaXMucHJvcGVydHlEZXNjcmlwdG9yc1NlcnZpY2UubG9hZChncm91cE5hbWVzKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKGdyb3VwcykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlpZihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiBjb250ZW50TWV0YWRhdGFDb25maWcuaXNJbmNsdWRlQWxsRW5hYmxlZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mKGNvbnRlbnRNZXRhZGF0YUNvbmZpZy5hcHBlbmRBbGxQcmVzZXQoZ3JvdXBzKS5jb25jYXQoY29udGVudE1ldGFkYXRhQ29uZmlnLnJlb3JnYW5pc2VCeUNvbmZpZyhncm91cHMpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YoY29udGVudE1ldGFkYXRhQ29uZmlnLnJlb3JnYW5pc2VCeUNvbmZpZyhncm91cHMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBtYXAoKGdyb3VwcykgPT4gY29udGVudE1ldGFkYXRhQ29uZmlnLmZpbHRlckV4Y2x1ZGVkUHJlc2V0KGdyb3VwcykpLFxuICAgICAgICAgICAgICAgICAgICBtYXAoKGdyb3VwcykgPT4gdGhpcy5maWx0ZXJFbXB0eVByZXNldChncm91cHMpKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKChncm91cHMpID0+IHRoaXMuc2V0VGl0bGVUb05hbWVJZk5vdFNldChncm91cHMpKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKChncm91cHMpID0+IHRoaXMucHJvcGVydHlHcm91cFRyYW5zbGF0b3JTZXJ2aWNlLnRyYW5zbGF0ZVRvQ2FyZFZpZXdHcm91cHMoZ3JvdXBzLCBub2RlLnByb3BlcnRpZXMsIG5vZGUuZGVmaW5pdGlvbikpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBncm91cGVkUHJvcGVydGllcztcbiAgICB9XG5cbiAgICBzZXRUaXRsZVRvTmFtZUlmTm90U2V0KHByb3BlcnR5R3JvdXBzOiBPcmdhbmlzZWRQcm9wZXJ0eUdyb3VwW10pOiBPcmdhbmlzZWRQcm9wZXJ0eUdyb3VwW10ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eUdyb3Vwc1RpdGxlcyA9IFtdO1xuICAgICAgICBwcm9wZXJ0eUdyb3Vwcy5tYXAoKHByb3BlcnR5R3JvdXApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gcHJvcGVydHlHcm91cC50aXRsZTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBwcm9wZXJ0eUdyb3VwLm5hbWU7XG4gICAgICAgICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlHcm91cHNUaXRsZXMuaW5jbHVkZXModGl0bGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5R3JvdXAudGl0bGUgPSBuYW1lID8gYCR7dGl0bGV9ICgke25hbWV9KWAgOiB0aXRsZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUdyb3VwLnRpdGxlID0gdGl0bGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb3BlcnR5R3JvdXBzVGl0bGVzLnB1c2godGl0bGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUdyb3VwLnRpdGxlID0gbmFtZTtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUdyb3Vwc1RpdGxlcy5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5R3JvdXBzO1xuICAgIH1cblxuICAgIGZpbHRlckVtcHR5UHJlc2V0KHByb3BlcnR5R3JvdXBzOiBPcmdhbmlzZWRQcm9wZXJ0eUdyb3VwW10pOiBPcmdhbmlzZWRQcm9wZXJ0eUdyb3VwW10ge1xuICAgICAgICByZXR1cm4gcHJvcGVydHlHcm91cHMuZmlsdGVyKChwcm9wcykgPT4gcHJvcHMucHJvcGVydGllcy5sZW5ndGgpO1xuICAgIH1cbn1cbiJdfQ==