@alfresco/adf-content-services
Version:
Alfresco ADF content services
159 lines • 19.4 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 { AppConfigService, UserPreferencesService } from '@alfresco/adf-core';
import { CategoriesApi, SearchApi, SEARCH_LANGUAGE } from '@alfresco/js-api';
import { AlfrescoApiService } from '../../services/alfresco-api.service';
import { from } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "../../services/alfresco-api.service";
import * as i2 from "@alfresco/adf-core";
export class CategoryService {
get categoriesApi() {
this._categoriesApi = this._categoriesApi ?? new CategoriesApi(this.apiService.getInstance());
return this._categoriesApi;
}
get searchApi() {
this._searchApi = this._searchApi ?? new SearchApi(this.apiService.getInstance());
return this._searchApi;
}
constructor(apiService, userPreferencesService, appConfigService) {
this.apiService = apiService;
this.userPreferencesService = userPreferencesService;
this.appConfigService = appConfigService;
}
/**
* Get subcategories of a given parent category
*
* @param parentCategoryId The identifier of a parent category.
* @param skipCount Number of top categories to skip.
* @param maxItems Maximum number of subcategories returned from Observable.
* @returns Observable<CategoryPaging>
*/
getSubcategories(parentCategoryId, skipCount, maxItems) {
return from(this.categoriesApi.getSubcategories(parentCategoryId ?? '-root-', { skipCount, maxItems }));
}
/**
* Get a category by ID
*
* @param categoryId The identifier of a category.
* @param opts Optional parameters.
* @param opts.fields A list of field names.
* @param opts.include Returns additional information about the category. The following optional fields can be requested:
* count
* path
* @returns Observable<CategoryEntry>
*/
getCategory(categoryId, opts) {
return from(this.categoriesApi.getCategory(categoryId, opts));
}
/**
* Creates subcategories under category with provided categoryId
*
* @param parentCategoryId The identifier of a parent category.
* @param payload List of categories to be created.
* @returns Observable<CategoryPaging | CategoryEntry>
*/
createSubcategories(parentCategoryId, payload) {
return from(this.categoriesApi.createSubcategories(parentCategoryId, payload, {}));
}
/**
* Updates category
*
* @param categoryId The identifier of a category.
* @param payload Updated category body
* @returns Observable<CategoryEntry>
*/
updateCategory(categoryId, payload) {
return from(this.categoriesApi.updateCategory(categoryId, payload, {}));
}
/**
* Deletes category
*
* @param categoryId The identifier of a category.
* @returns Observable<void>
*/
deleteCategory(categoryId) {
return from(this.categoriesApi.deleteCategory(categoryId));
}
/**
* Searches categories by their name.
*
* @param name Value for name which should be used during searching categories.
* @param skipCount Specify how many first results should be skipped. Default 0.
* @param maxItems Specify max number of returned categories. Default is specified by UserPreferencesService.
* @returns Observable<ResultSetPaging> Found categories which name contains searched name.
*/
searchCategories(name, skipCount = 0, maxItems) {
maxItems = maxItems || this.userPreferencesService.paginationSize;
return from(this.searchApi.search({
query: {
language: SEARCH_LANGUAGE.AFTS,
query: `cm:name:"*${name}*" AND TYPE:'cm:category' AND PATH:"/cm:categoryRoot/cm:generalclassifiable//*"`
},
paging: {
skipCount,
maxItems
},
include: ['path']
}));
}
/**
* List of categories that node is assigned to
*
* @param nodeId The identifier of a node.
* @returns Observable<CategoryPaging> Categories that node is assigned to
*/
getCategoryLinksForNode(nodeId) {
return from(this.categoriesApi.getCategoryLinksForNode(nodeId, { include: ['path'] }));
}
/**
* Unlink category from a node
*
* @param nodeId The identifier of a node.
* @param categoryId The identifier of a category.
* @returns Observable<void>
*/
unlinkNodeFromCategory(nodeId, categoryId) {
return from(this.categoriesApi.unlinkNodeFromCategory(nodeId, categoryId));
}
/**
* Link node to a category
*
* @param nodeId The identifier of a node.
* @param categoryLinkBodyCreate Array of a categories that node will be linked to.
* @returns Observable<CategoryEntry>
*/
linkNodeToCategory(nodeId, categoryLinkBodyCreate) {
return from(this.categoriesApi.linkNodeToCategory(nodeId, categoryLinkBodyCreate));
}
/**
* Checks if categories plugin is enabled.
*
* @returns boolean true if categories plugin is enabled, false otherwise.
*/
areCategoriesEnabled() {
return this.appConfigService.get('plugins.categoriesEnabled', true);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CategoryService, deps: [{ token: i1.AlfrescoApiService }, { token: i2.UserPreferencesService }, { token: i2.AppConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CategoryService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CategoryService, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}], ctorParameters: () => [{ type: i1.AlfrescoApiService }, { type: i2.UserPreferencesService }, { type: i2.AppConfigService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvY2F0ZWdvcnkvc2VydmljZXMvY2F0ZWdvcnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlFLE9BQU8sRUFDSCxhQUFhLEVBTWIsU0FBUyxFQUNULGVBQWUsRUFDbEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsSUFBSSxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7O0FBR3hDLE1BQU0sT0FBTyxlQUFlO0lBSXhCLElBQUksYUFBYTtRQUNiLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDOUYsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDVCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFDWSxVQUE4QixFQUM5QixzQkFBOEMsRUFDOUMsZ0JBQWtDO1FBRmxDLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMs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InNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSwgVXNlclByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQge1xuICAgIENhdGVnb3JpZXNBcGksXG4gICAgQ2F0ZWdvcnlCb2R5LFxuICAgIENhdGVnb3J5RW50cnksXG4gICAgQ2F0ZWdvcnlMaW5rQm9keSxcbiAgICBDYXRlZ29yeVBhZ2luZyxcbiAgICBSZXN1bHRTZXRQYWdpbmcsXG4gICAgU2VhcmNoQXBpLFxuICAgIFNFQVJDSF9MQU5HVUFHRVxufSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IEFsZnJlc2NvQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FsZnJlc2NvLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBDYXRlZ29yeVNlcnZpY2Uge1xuICAgIHByaXZhdGUgX2NhdGVnb3JpZXNBcGk6IENhdGVnb3JpZXNBcGk7XG4gICAgcHJpdmF0ZSBfc2VhcmNoQXBpOiBTZWFyY2hBcGk7XG5cbiAgICBnZXQgY2F0ZWdvcmllc0FwaSgpOiBDYXRlZ29yaWVzQXBpIHtcbiAgICAgICAgdGhpcy5fY2F0ZWdvcmllc0FwaSA9IHRoaXMuX2NhdGVnb3JpZXNBcGkgPz8gbmV3IENhdGVnb3JpZXNBcGkodGhpcy5hcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcmllc0FwaTtcbiAgICB9XG5cbiAgICBnZXQgc2VhcmNoQXBpKCk6IFNlYXJjaEFwaSB7XG4gICAgICAgIHRoaXMuX3NlYXJjaEFwaSA9IHRoaXMuX3NlYXJjaEFwaSA/PyBuZXcgU2VhcmNoQXBpKHRoaXMuYXBpU2VydmljZS5nZXRJbnN0YW5jZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaEFwaTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBBbGZyZXNjb0FwaVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdXNlclByZWZlcmVuY2VzU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogR2V0IHN1YmNhdGVnb3JpZXMgb2YgYSBnaXZlbiBwYXJlbnQgY2F0ZWdvcnlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnRDYXRlZ29yeUlkIFRoZSBpZGVudGlmaWVyIG9mIGEgcGFyZW50IGNhdGVnb3J5LlxuICAgICAqIEBwYXJhbSBza2lwQ291bnQgTnVtYmVyIG9mIHRvcCBjYXRlZ29yaWVzIHRvIHNraXAuXG4gICAgICogQHBhcmFtIG1heEl0ZW1zIE1heGltdW0gbnVtYmVyIG9mIHN1YmNhdGVnb3JpZXMgcmV0dXJuZWQgZnJvbSBPYnNlcnZhYmxlLlxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGU8Q2F0ZWdvcnlQYWdpbmc+XG4gICAgICovXG4gICAgZ2V0U3ViY2F0ZWdvcmllcyhwYXJlbnRDYXRlZ29yeUlkOiBzdHJpbmcsIHNraXBDb3VudD86IG51bWJlciwgbWF4SXRlbXM/OiBudW1iZXIpOiBPYnNlcnZhYmxlPENhdGVnb3J5UGFnaW5nPiB7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMuY2F0ZWdvcmllc0FwaS5nZXRTdWJjYXRlZ29yaWVzKHBhcmVudENhdGVnb3J5SWQgPz8gJy1yb290LScsIHsgc2tpcENvdW50LCBtYXhJdGVtcyB9KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgY2F0ZWdvcnkgYnkgSURcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeUlkIFRoZSBpZGVudGlmaWVyIG9mIGEgY2F0ZWdvcnkuXG4gICAgICogQHBhcmFtIG9wdHMgT3B0aW9uYWwgcGFyYW1ldGVycy5cbiAgICAgKiBAcGFyYW0gb3B0cy5maWVsZHMgQSBsaXN0IG9mIGZpZWxkIG5hbWVzLlxuICAgICAqIEBwYXJhbSBvcHRzLmluY2x1ZGUgUmV0dXJucyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYXRlZ29yeS4gVGhlIGZvbGxvd2luZyBvcHRpb25hbCBmaWVsZHMgY2FuIGJlIHJlcXVlc3RlZDpcbiAgICAgKiBjb3VudFxuICAgICAqIHBhdGhcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPENhdGVnb3J5RW50cnk+XG4gICAgICovXG4gICAgZ2V0Q2F0ZWdvcnkoY2F0ZWdvcnlJZDogc3RyaW5nLCBvcHRzPzogYW55KTogT2JzZXJ2YWJsZTxDYXRlZ29yeUVudHJ5PiB7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMuY2F0ZWdvcmllc0FwaS5nZXRDYXRlZ29yeShjYXRlZ29yeUlkLCBvcHRzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBzdWJjYXRlZ29yaWVzIHVuZGVyIGNhdGVnb3J5IHdpdGggcHJvdmlkZWQgY2F0ZWdvcnlJZFxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmVudENhdGVnb3J5SWQgVGhlIGlkZW50aWZpZXIgb2YgYSBwYXJlbnQgY2F0ZWdvcnkuXG4gICAgICogQHBhcmFtIHBheWxvYWQgTGlzdCBvZiBjYXRlZ29yaWVzIHRvIGJlIGNyZWF0ZWQuXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxDYXRlZ29yeVBhZ2luZyB8IENhdGVnb3J5RW50cnk+XG4gICAgICovXG4gICAgY3JlYXRlU3ViY2F0ZWdvcmllcyhwYXJlbnRDYXRlZ29yeUlkOiBzdHJpbmcsIHBheWxvYWQ6IENhdGVnb3J5Qm9keVtdKTogT2JzZXJ2YWJsZTxDYXRlZ29yeVBhZ2luZyB8IENhdGVnb3J5RW50cnk+IHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5jYXRlZ29yaWVzQXBpLmNyZWF0ZVN1YmNhdGVnb3JpZXMocGFyZW50Q2F0ZWdvcnlJZCwgcGF5bG9hZCwge30pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIGNhdGVnb3J5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZCBUaGUgaWRlbnRpZmllciBvZiBhIGNhdGVnb3J5LlxuICAgICAqIEBwYXJhbSBwYXlsb2FkIFVwZGF0ZWQgY2F0ZWdvcnkgYm9keVxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGU8Q2F0ZWdvcnlFbnRyeT5cbiAgICAgKi9cbiAgICB1cGRhdGVDYXRlZ29yeShjYXRlZ29yeUlkOiBzdHJpbmcsIHBheWxvYWQ6IENhdGVnb3J5Qm9keSk6IE9ic2VydmFibGU8Q2F0ZWdvcnlFbnRyeT4ge1xuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLmNhdGVnb3JpZXNBcGkudXBkYXRlQ2F0ZWdvcnkoY2F0ZWdvcnlJZCwgcGF5bG9hZCwge30pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGVzIGNhdGVnb3J5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZCBUaGUgaWRlbnRpZmllciBvZiBhIGNhdGVnb3J5LlxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGU8dm9pZD5cbiAgICAgKi9cbiAgICBkZWxldGVDYXRlZ29yeShjYXRlZ29yeUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5jYXRlZ29yaWVzQXBpLmRlbGV0ZUNhdGVnb3J5KGNhdGVnb3J5SWQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWFyY2hlcyBjYXRlZ29yaWVzIGJ5IHRoZWlyIG5hbWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSBWYWx1ZSBmb3IgbmFtZSB3aGljaCBzaG91bGQgYmUgdXNlZCBkdXJpbmcgc2VhcmNoaW5nIGNhdGVnb3JpZXMuXG4gICAgICogQHBhcmFtIHNraXBDb3VudCBTcGVjaWZ5IGhvdyBtYW55IGZpcnN0IHJlc3VsdHMgc2hvdWxkIGJlIHNraXBwZWQuIERlZmF1bHQgMC5cbiAgICAgKiBAcGFyYW0gbWF4SXRlbXMgU3BlY2lmeSBtYXggbnVtYmVyIG9mIHJldHVybmVkIGNhdGVnb3JpZXMuIERlZmF1bHQgaXMgc3BlY2lmaWVkIGJ5IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UuXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxSZXN1bHRTZXRQYWdpbmc+IEZvdW5kIGNhdGVnb3JpZXMgd2hpY2ggbmFtZSBjb250YWlucyBzZWFyY2hlZCBuYW1lLlxuICAgICAqL1xuICAgIHNlYXJjaENhdGVnb3JpZXMobmFtZTogc3RyaW5nLCBza2lwQ291bnQgPSAwLCBtYXhJdGVtcz86IG51bWJlcik6IE9ic2VydmFibGU8UmVzdWx0U2V0UGFnaW5nPiB7XG4gICAgICAgIG1heEl0ZW1zID0gbWF4SXRlbXMgfHwgdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlLnBhZ2luYXRpb25TaXplO1xuICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQXBpLnNlYXJjaCh7XG4gICAgICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IFNFQVJDSF9MQU5HVUFHRS5BRlRTLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeTogYGNtOm5hbWU6XCIqJHtuYW1lfSpcIiBBTkQgVFlQRTonY206Y2F0ZWdvcnknIEFORCBQQVRIOlwiL2NtOmNhdGVnb3J5Um9vdC9jbTpnZW5lcmFsY2xhc3NpZmlhYmxlLy8qXCJgXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYWdpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgc2tpcENvdW50LFxuICAgICAgICAgICAgICAgICAgICBtYXhJdGVtc1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW5jbHVkZTogWydwYXRoJ11cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBjYXRlZ29yaWVzIHRoYXQgbm9kZSBpcyBhc3NpZ25lZCB0b1xuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGVJZCBUaGUgaWRlbnRpZmllciBvZiBhIG5vZGUuXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxDYXRlZ29yeVBhZ2luZz4gQ2F0ZWdvcmllcyB0aGF0IG5vZGUgaXMgYXNzaWduZWQgdG9cbiAgICAgKi9cbiAgICBnZXRDYXRlZ29yeUxpbmtzRm9yTm9kZShub2RlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2F0ZWdvcnlQYWdpbmc+IHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5jYXRlZ29yaWVzQXBpLmdldENhdGVnb3J5TGlua3NGb3JOb2RlKG5vZGVJZCwgeyBpbmNsdWRlOiBbJ3BhdGgnXSB9KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5saW5rIGNhdGVnb3J5IGZyb20gYSBub2RlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZUlkIFRoZSBpZGVudGlmaWVyIG9mIGEgbm9kZS5cbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZCBUaGUgaWRlbnRpZmllciBvZiBhIGNhdGVnb3J5LlxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGU8dm9pZD5cbiAgICAgKi9cbiAgICB1bmxpbmtOb2RlRnJvbUNhdGVnb3J5KG5vZGVJZDogc3RyaW5nLCBjYXRlZ29yeUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5jYXRlZ29yaWVzQXBpLnVubGlua05vZGVGcm9tQ2F0ZWdvcnkobm9kZUlkLCBjYXRlZ29yeUlkKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGluayBub2RlIHRvIGEgY2F0ZWdvcnlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlSWQgVGhlIGlkZW50aWZpZXIgb2YgYSBub2RlLlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeUxpbmtCb2R5Q3JlYXRlIEFycmF5IG9mIGEgY2F0ZWdvcmllcyB0aGF0IG5vZGUgd2lsbCBiZSBsaW5rZWQgdG8uXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxDYXRlZ29yeUVudHJ5PlxuICAgICAqL1xuICAgIGxpbmtOb2RlVG9DYXRlZ29yeShub2RlSWQ6IHN0cmluZywgY2F0ZWdvcnlMaW5rQm9keUNyZWF0ZTogQ2F0ZWdvcnlMaW5rQm9keVtdKTogT2JzZXJ2YWJsZTxDYXRlZ29yeVBhZ2luZyB8IENhdGVnb3J5RW50cnk+IHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5jYXRlZ29yaWVzQXBpLmxpbmtOb2RlVG9DYXRlZ29yeShub2RlSWQsIGNhdGVnb3J5TGlua0JvZHlDcmVhdGUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgY2F0ZWdvcmllcyBwbHVnaW4gaXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGJvb2xlYW4gdHJ1ZSBpZiBjYXRlZ29yaWVzIHBsdWdpbiBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgYXJlQ2F0ZWdvcmllc0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0KCdwbHVnaW5zLmNhdGVnb3JpZXNFbmFibGVkJywgdHJ1ZSk7XG4gICAgfVxufVxuIl19