UNPKG

@mgrcto/angular-odata-v401

Version:

Odata Library for Angular made with Angular CLI

125 lines 18.7 kB
import { HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { ODataUtils } from './angularODataUtils'; import * as i0 from "@angular/core"; export class KeyConfigs { constructor() { this.filter = '$filter'; this.top = '$top'; this.skip = '$skip'; this.orderBy = '$orderby'; this.select = '$select'; this.search = '$search'; this.expand = '$expand'; this.apply = '$apply'; this.count = '$count'; this.maxPerPage = 'odata.maxpagesize'; this.metadata = 'odata.metadata'; this.responseCount = '@odata.count'; this.responseNextLink = '@odata.nextLink'; } } export class ODataConfiguration { constructor() { this._postHeaders = new HttpHeaders({ 'Content-Type': 'application/json; charset=utf-8' }); this._baseUrl = 'http://localhost/odata'; this.keys = new KeyConfigs(); this.defaultRequestOptions = { headers: new HttpHeaders(), observe: 'response' }; this.postRequestOptions = { headers: this._postHeaders, observe: 'response' }; this.customRequestOptions = { headers: new HttpHeaders(), observe: 'response' }; } set baseUrl(baseUrl) { this._baseUrl = baseUrl.replace(/\/+$/, ''); } get baseUrl() { return this._baseUrl; } getEntitiesUri(typeName) { if (typeName) { return `${this.baseUrl}/${this.sanitizeTypeName(typeName)}`; } return this.baseUrl; } getEntityUri(key, typeName) { return `${this.getEntitiesUri(typeName)}(${ODataUtils.quoteValue(key)})`; } getEntityPath(key, typeName) { return `${this.sanitizeTypeName(typeName)}(${ODataUtils.quoteValue(key)})`; } handleError(err, caught) { console.warn('OData error: ', err, caught); } extractQueryResultDataAsNumber(res) { if (res.status < 200 || res.status >= 300) { throw new Error('Bad response status: ' + res.status); } return (res && res.body); } extractQueryResultData(res) { if (res.status < 200 || res.status >= 300) { throw new Error('Bad response status: ' + res.status); } return (res && res.body && res.body.value); } extractQueryResultDataWithCount(res) { let pagedResult; if (res.status < 200 || res.status >= 300) { throw new Error('Bad response status: ' + res.status); } const body = res.body; let entities = body.value; delete body.value; if (!Array.isArray(entities)) { entities = []; } pagedResult = body; pagedResult.data = entities; const parseResult = ODataUtils.tryParseInt(body[`${this.keys.responseCount}`]); if (parseResult.valid) { pagedResult.count = parseResult.value; } else { console.warn('Cannot determine OData entities count. Falling back to collection length.'); pagedResult.count = entities.length; } if (body[`${this.keys.responseNextLink}`]) { pagedResult.nextLink = body[`${this.keys.responseNextLink}`]; } return pagedResult; } extractQueryResultDataWithMetadata(res) { let result; if (res.status < 200 || res.status >= 300) { throw new Error('Bad response status: ' + res.status); } const body = res.body; let entities = body.value; delete body.value; if (!Array.isArray(entities)) { entities = []; } result = body; result.data = entities; const parseResult = ODataUtils.tryParseInt(body[`${this.keys.responseCount}`]); if (parseResult.valid) { result.count = parseResult.value; } else { console.warn('Cannot determine OData entities count. Falling back to collection length.'); result.count = entities.length; } if (body[`${this.keys.responseNextLink}`]) { result.nextLink = body[`${this.keys.responseNextLink}`]; } return result; } sanitizeTypeName(typeName) { return typeName.replace(/\/+$/, '').replace(/^\/+/, ''); } } ODataConfiguration.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ODataConfiguration, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); ODataConfiguration.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ODataConfiguration }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ODataConfiguration, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhck9EYXRhQ29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEtdjQwMS9zcmMvbGliL29kYXRhL2FuZ3VsYXJPRGF0YUNvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBNEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFakQsTUFBTSxPQUFPLFVBQVU7SUFBdkI7UUFDVyxXQUFNLEdBQUcsU0FBUyxDQUFDO1FBQ25CLFFBQUcsR0FBRyxNQUFNLENBQUM7UUFDYixTQUFJLEdBQUcsT0FBTyxDQUFDO1FBQ2YsWUFBTyxHQUFHLFVBQVUsQ0FBQztRQUNyQixXQUFNLEdBQUcsU0FBUyxDQUFDO1FBQ25CLFdBQU0sR0FBRyxTQUFTLENBQUM7UUFDbkIsV0FBTSxHQUFHLFNBQVMsQ0FBQztRQUNuQixVQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ2pCLFVBQUssR0FBRyxRQUFRLENBQUM7UUFDakIsZUFBVSxHQUFHLG1CQUFtQixDQUFDO1FBQ2pDLGFBQVEsR0FBRyxnQkFBZ0IsQ0FBQztRQUM1QixrQkFBYSxHQUFHLGNBQWMsQ0FBQztRQUMvQixxQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQztJQUNoRCxDQUFDO0NBQUE7QUFHRCxNQUFNLE9BQU8sa0JBQWtCO0lBRC9CO1FBRXFCLGlCQUFZLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxjQUFjLEVBQUUsaUNBQWlDLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLGFBQVEsR0FBRyx3QkFBd0IsQ0FBQztRQUVyQyxTQUFJLEdBQWUsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUVwQywwQkFBcUIsR0FPeEIsRUFBRSxPQUFPLEVBQUUs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O1FBQ2QsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7UUFFdkIsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDbkIsTUFBTSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1NBQ3BDO2FBQU07WUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLDJFQUEyRSxDQUFDLENBQUM7WUFDMUYsTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1NBQ2xDO1FBRUQsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRTtZQUN2QyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1NBQzNEO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFFBQWdCO1FBQ3JDLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDOzsrR0E1SVEsa0JBQWtCO21IQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IE9EYXRhTWV0YWRhdGFSZXN1bHQgfSBmcm9tICcuL2FuZ3VsYXJPRGF0YU1ldGFkYXRhUmVzdWx0JztcclxuaW1wb3J0IHsgT0RhdGFQYWdlZFJlc3VsdCB9IGZyb20gJy4vYW5ndWxhck9EYXRhUGFnZWRSZXN1bHQnO1xyXG5pbXBvcnQgeyBJT0RhdGFSZXNwb25zZU1vZGVsIH0gZnJvbSAnLi9hbmd1bGFyT0RhdGFSZXNwb25zZU1vZGVsJztcclxuaW1wb3J0IHsgT0RhdGFVdGlscyB9IGZyb20gJy4vYW5ndWxhck9EYXRhVXRpbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEtleUNvbmZpZ3Mge1xyXG4gICAgcHVibGljIGZpbHRlciA9ICckZmlsdGVyJztcclxuICAgIHB1YmxpYyB0b3AgPSAnJHRvcCc7XHJcbiAgICBwdWJsaWMgc2tpcCA9ICckc2tpcCc7XHJcbiAgICBwdWJsaWMgb3JkZXJCeSA9ICckb3JkZXJieSc7XHJcbiAgICBwdWJsaWMgc2VsZWN0ID0gJyRzZWxlY3QnO1xyXG4gICAgcHVibGljIHNlYXJjaCA9ICckc2VhcmNoJztcclxuICAgIHB1YmxpYyBleHBhbmQgPSAnJGV4cGFuZCc7XHJcbiAgICBwdWJsaWMgYXBwbHkgPSAnJGFwcGx5JztcclxuICAgIHB1YmxpYyBjb3VudCA9ICckY291bnQnO1xyXG4gICAgcHVibGljIG1heFBlclBhZ2UgPSAnb2RhdGEubWF4cGFnZXNpemUnO1xyXG4gICAgcHVibGljIG1ldGFkYXRhID0gJ29kYXRhLm1ldGFkYXRhJztcclxuICAgIHB1YmxpYyByZXNwb25zZUNvdW50ID0gJ0BvZGF0YS5jb3VudCc7XHJcbiAgICBwdWJsaWMgcmVzcG9uc2VOZXh0TGluayA9ICdAb2RhdGEubmV4dExpbmsnO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBPRGF0YUNvbmZpZ3VyYXRpb24ge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcG9zdEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnIH0pO1xyXG4gICAgcHJpdmF0ZSBfYmFzZVVybCA9ICdodHRwOi8vbG9jYWxob3N0L29kYXRhJztcclxuXHJcbiAgICBwdWJsaWMga2V5czogS2V5Q29uZmlncyA9IG5ldyBLZXlDb25maWdzKCk7XHJcblxyXG4gICAgcHVibGljIGRlZmF1bHRSZXF1ZXN0T3B0aW9uczoge1xyXG4gICAgICAgIGhlYWRlcnM6IEh0dHBIZWFkZXJzO1xyXG4gICAgICAgIG9ic2VydmU6ICdyZXNwb25zZSc7XHJcbiAgICAgICAgcGFyYW1zPzogSHR0cFBhcmFtcztcclxuICAgICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XHJcbiAgICAgICAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xyXG4gICAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XHJcbiAgICB9ID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKSwgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9O1xyXG5cclxuICAgIHB1YmxpYyBwb3N0UmVxdWVzdE9wdGlvbnM6IHtcclxuICAgICAgICBoZWFkZXJzOiBIdHRwSGVhZGVycztcclxuICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnO1xyXG4gICAgICAgIHBhcmFtcz86IEh0dHBQYXJhbXM7XHJcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xyXG4gICAgICAgIHJlc3BvbnNlVHlwZT86ICdqc29uJztcclxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xyXG4gICAgfSA9IHsgaGVhZGVyczogdGhpcy5fcG9zdEhlYWRlcnMsIG9ic2VydmU6ICdyZXNwb25zZScgfTtcclxuXHJcbiAgICBwdWJsaWMgY3VzdG9tUmVxdWVzdE9wdGlvbnM6IHtcclxuICAgICAgICBoZWFkZXJzOiBIdHRwSGVhZGVycztcclxuICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnO1xyXG4gICAgICAgIHBhcmFtcz86IEh0dHBQYXJhbXM7XHJcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xyXG4gICAgICAgIHJlc3BvbnNlVHlwZT86ICdqc29uJztcclxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xyXG4gICAgfSA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCksIG9ic2VydmU6ICdyZXNwb25zZScgfTtcclxuXHJcbiAgICBzZXQgYmFzZVVybChiYXNlVXJsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9iYXNlVXJsID0gYmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYmFzZVVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9iYXNlVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFbnRpdGllc1VyaSh0eXBlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodHlwZU5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuYmFzZVVybH0vJHt0aGlzLnNhbml0aXplVHlwZU5hbWUodHlwZU5hbWUpfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEVudGl0eVVyaShrZXk6IGFueSwgdHlwZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZ2V0RW50aXRpZXNVcmkodHlwZU5hbWUpfSgke09EYXRhVXRpbHMucXVvdGVWYWx1ZShrZXkpfSlgO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFbnRpdHlQYXRoKGtleTphbnksIHR5cGVOYW1lOnN0cmluZyk6c3RyaW5ne1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnNhbml0aXplVHlwZU5hbWUodHlwZU5hbWUpfSgke09EYXRhVXRpbHMucXVvdGVWYWx1ZShrZXkpfSlgO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYW5kbGVFcnJvcihlcnI6IGFueSwgY2F1Z2h0OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ09EYXRhIGVycm9yOiAnLCBlcnIsIGNhdWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGV4dHJhY3RRdWVyeVJlc3VsdERhdGFBc051bWJlcihyZXM6IEh0dHBSZXNwb25zZTxudW1iZXI+KTogbnVtYmVyIHtcclxuICAgICAgICBpZiAocmVzLnN0YXR1cyA8IDIwMCB8fCByZXMuc3RhdHVzID49IDMwMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JhZCByZXNwb25zZSBzdGF0dXM6ICcgKyByZXMuc3RhdHVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAocmVzICYmIHJlcy5ib2R5KSBhcyBudW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGV4dHJhY3RRdWVyeVJlc3VsdERhdGE8VD4ocmVzOiBIdHRwUmVzcG9uc2U8SU9EYXRhUmVzcG9uc2VNb2RlbDxUPj4pOiBUW10ge1xyXG4gICAgICAgIGlmIChyZXMuc3RhdHVzIDwgMjAwIHx8IHJlcy5zdGF0dXMgPj0gMzAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQmFkIHJlc3BvbnNlIHN0YXR1czogJyArIHJlcy5zdGF0dXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIChyZXMgJiYgcmVzLmJvZHkgJiYgcmVzLmJvZHkudmFsdWUpIGFzIFRbXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZXh0cmFjdFF1ZXJ5UmVzdWx0RGF0YVdpdGhDb3VudDxUPihyZXM6IEh0dHBSZXNwb25zZTxJT0RhdGFSZXNwb25zZU1vZGVsPFQ+Pik6IE9EYXRhUGFnZWRSZXN1bHQ8VD4ge1xyXG4gICAgICAgIGxldCBwYWdlZFJlc3VsdDogT0RhdGFQYWdlZFJlc3VsdDxUPjtcclxuXHJcbiAgICAgICAgaWYgKHJlcy5zdGF0dXMgPCAyMDAgfHwgcmVzLnN0YXR1cyA+PSAzMDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCYWQgcmVzcG9uc2Ugc3RhdHVzOiAnICsgcmVzLnN0YXR1cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBib2R5OiBhbnkgPSByZXMuYm9keTtcclxuICAgICAgICBsZXQgZW50aXRpZXM6IFRbXSA9IGJvZHkudmFsdWU7XHJcbiAgICAgICAgZGVsZXRlIGJvZHkudmFsdWU7XHJcbiAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoZW50aXRpZXMpKXtcclxuICAgICAgICAgIGVudGl0aWVzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhZ2VkUmVzdWx0ID0gYm9keTtcclxuICAgICAgICBwYWdlZFJlc3VsdC5kYXRhID0gZW50aXRpZXM7XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gT0RhdGFVdGlscy50cnlQYXJzZUludChib2R5W2Ake3RoaXMua2V5cy5yZXNwb25zZUNvdW50fWBdKTtcclxuICAgICAgICBpZiAocGFyc2VSZXN1bHQudmFsaWQpIHtcclxuICAgICAgICAgICAgcGFnZWRSZXN1bHQuY291bnQgPSBwYXJzZVJlc3VsdC52YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Nhbm5vdCBkZXRlcm1pbmUgT0RhdGEgZW50aXRpZXMgY291bnQuIEZhbGxpbmcgYmFjayB0byBjb2xsZWN0aW9uIGxlbmd0aC4nKTtcclxuICAgICAgICAgICAgcGFnZWRSZXN1bHQuY291bnQgPSBlbnRpdGllcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYm9keVtgJHt0aGlzLmtleXMucmVzcG9uc2VOZXh0TGlua31gXSkge1xyXG4gICAgICAgICAgICBwYWdlZFJlc3VsdC5uZXh0TGluayA9IGJvZHlbYCR7dGhpcy5rZXlzLnJlc3BvbnNlTmV4dExpbmt9YF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcGFnZWRSZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGV4dHJhY3RRdWVyeVJlc3VsdERhdGFXaXRoTWV0YWRhdGE8VD4ocmVzOiBIdHRwUmVzcG9uc2U8SU9EYXRhUmVzcG9uc2VNb2RlbDxUPj4pOiBPRGF0YU1ldGFkYXRhUmVzdWx0PFQ+IHtcclxuICAgICAgbGV0IHJlc3VsdDogT0RhdGFNZXRhZGF0YVJlc3VsdDxUPjsgXHJcblxyXG4gICAgICBpZiAocmVzLnN0YXR1cyA8IDIwMCB8fCByZXMuc3RhdHVzID49IDMwMCkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCYWQgcmVzcG9uc2Ugc3RhdHVzOiAnICsgcmVzLnN0YXR1cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGJvZHk6IGFueSA9IHJlcy5ib2R5O1xyXG4gICAgICBsZXQgZW50aXRpZXM6IFRbXSA9IGJvZHkudmFsdWU7XHJcbiAgICAgIGRlbGV0ZSBib2R5LnZhbHVlO1xyXG4gICAgICBpZighQXJyYXkuaXNBcnJheShlbnRpdGllcykpe1xyXG4gICAgICAgIGVudGl0aWVzID0gW107XHJcbiAgICAgIH1cclxuICAgICAgcmVzdWx0ID0gYm9keTtcclxuICAgICAgcmVzdWx0LmRhdGEgPSBlbnRpdGllcztcclxuXHJcbiAgICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gT0RhdGFVdGlscy50cnlQYXJzZUludChib2R5W2Ake3RoaXMua2V5cy5yZXNwb25zZUNvdW50fWBdKTtcclxuICAgICAgaWYgKHBhcnNlUmVzdWx0LnZhbGlkKSB7XHJcbiAgICAgICAgICByZXN1bHQuY291bnQgPSBwYXJzZVJlc3VsdC52YWx1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybignQ2Fubm90IGRldGVybWluZSBPRGF0YSBlbnRpdGllcyBjb3VudC4gRmFsbGluZyBiYWNrIHRvIGNvbGxlY3Rpb24gbGVuZ3RoLicpO1xyXG4gICAgICAgICAgcmVzdWx0LmNvdW50ID0gZW50aXRpZXMubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYm9keVtgJHt0aGlzLmtleXMucmVzcG9uc2VOZXh0TGlua31gXSkge1xyXG4gICAgICAgICAgcmVzdWx0Lm5leHRMaW5rID0gYm9keVtgJHt0aGlzLmtleXMucmVzcG9uc2VOZXh0TGlua31gXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNhbml0aXplVHlwZU5hbWUodHlwZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVOYW1lLnJlcGxhY2UoL1xcLyskLywgJycpLnJlcGxhY2UoL15cXC8rLywgJycpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==