UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

167 lines 23.2 kB
import { HttpEventType, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common/http"; export var ProgressType; (function (ProgressType) { ProgressType["UPLOAD"] = "upload"; ProgressType["DOWNLOAD"] = "download"; })(ProgressType || (ProgressType = {})); export class AbstractResourceProvider { httpClient; constructor(httpClient) { this.httpClient = httpClient; } static addLastSlash(link) { if (link.length > 0) { return link.charAt(link.length - 1) === '/' ? link : link + '/'; } else { throw Error('No define api url'); } } static removeFirstSlash(link) { return link.charAt(0) === '/' ? link.length > 1 ? link.substring(1, link.length) : '' : link; } static sanitizeUrl(endpoint, url) { if (endpoint?.includes('http://') || (endpoint?.includes('https://'))) { if (url) { if (endpoint?.includes(url)) { return endpoint; } else { return url?.includes('https://') ? 'https://' + endpoint?.replace(/(^\w+:|^)\/\//, '') : 'http://' + endpoint?.replace(/(^\w+:|^)\/\//, ''); } } else { return endpoint; } } else { if (url) { return AbstractResourceProvider.addLastSlash(url) + AbstractResourceProvider.removeFirstSlash(endpoint); } else { throw Error('No define endpoint'); } } } /** * Combines two instances of {@link Params} type into one. * If a parameter is declared in both instances uses the value of the `highPriorityParams` in the result. * @param highPriorityParams parameters with the higher priority * @param lowPriorityParams parameters with the lower priority * @returns combination of botch parameters. Uses the value of the higher priority parameters if the keys are in conflict. */ static combineParams(highPriorityParams, lowPriorityParams) { const importantParams = highPriorityParams instanceof HttpParams ? ResourceProvider.convertHttpParamsToObjectParams(highPriorityParams) : highPriorityParams; const params = lowPriorityParams instanceof HttpParams ? ResourceProvider.convertHttpParamsToObjectParams(lowPriorityParams) : { ...lowPriorityParams }; Object.assign(params, importantParams); return new HttpParams({ fromObject: params }); } /** * Converts {@link HttpParams} instance into a simple object. * @param params instance to convert * @returns simple object with keys and values from the input argument */ static convertHttpParamsToObjectParams(params) { const result = {}; params.keys().forEach(key => { const values = params.getAll(key); if (values.length === 1) { result[key] = values[0]; } else { result[key] = values; } }); return result; } static getProgress(event) { return { type: event.type === HttpEventType.UploadProgress ? ProgressType.UPLOAD : ProgressType.DOWNLOAD, loaded: event.loaded, total: event.total, progress: event.loaded && event.total ? Math.round(event.loaded * 100 / event.total) : undefined }; } static processMessageResource(response) { const resource = response.type === HttpEventType.Response ? response.body : response; if (!!resource && resource.error) { throw new Error(resource.error); } return resource; } get$(endpoint, url, params, headers, responseType) { return this.httpClient.get(AbstractResourceProvider.sanitizeUrl(endpoint, url), { headers, params, responseType: 'json', observe: 'body' }); } getBlob$(endpoint, url, params, headers) { return this.httpClient.get(AbstractResourceProvider.sanitizeUrl(endpoint, url), { params, headers, observe: 'events', responseType: 'blob', reportProgress: true }); } post$(endpoint, url, body, params, headers, responseType) { return this.httpClient.post(AbstractResourceProvider.sanitizeUrl(endpoint, url), body, { headers, params, responseType: 'json', observe: 'body' }); } postWithEvent$(endpoint, url, body, params, headers, responseType) { return this.httpClient.post(AbstractResourceProvider.sanitizeUrl(endpoint, url), body, { params, headers, responseType: 'json', observe: 'events', reportProgress: true }); } put$(endpoint, url, body, params, headers, responseType) { return this.httpClient.put(AbstractResourceProvider.sanitizeUrl(endpoint, url), body, { headers, params, responseType: 'json', observe: 'body' }); } delete$(endpoint, url, params, headers, responseType, body) { return this.httpClient.delete(AbstractResourceProvider.sanitizeUrl(endpoint, url), { headers, params, responseType: 'json', observe: 'body', body }); } } export class ResourceProvider extends AbstractResourceProvider { constructor(httpClient) { super(httpClient); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ResourceProvider, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ResourceProvider, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ResourceProvider, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.HttpClient }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcHJvdmlkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvcmVzb3VyY2VzL3Jlc291cmNlLXByb3ZpZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF3QixhQUFhLEVBQWUsVUFBVSxFQUFrQyxNQUFNLHNCQUFzQixDQUFDO0FBRXBJLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7OztBQWlCekMsTUFBTSxDQUFOLElBQVksWUFHWDtBQUhELFdBQVksWUFBWTtJQUNwQixpQ0FBaUIsQ0FBQTtJQUNqQixxQ0FBcUIsQ0FBQTtBQUN6QixDQUFDLEVBSFcsWUFBWSxLQUFaLFlBQVksUUFHdkI7QUFVRCxNQUFNLE9BQWdCLHdCQUF3QjtJQUVWO0lBQWhDLFlBQWdDLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7SUFDdEQsQ0FBQztJQUVPLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBWTtRQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1NBQ25FO2FBQU07WUFDSCxNQUFNLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ3BDO0lBQ0wsQ0FBQztJQUVPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFZO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENB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a0IsRUFDckUsWUFBNEIsRUFBRSxJQUFhO1FBQ3pELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUksd0JBQXdCLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNsRixPQUFPO1lBQ1AsTUFBTTtZQUNOLFlBQVksRUFBRSxNQUFNO1lBQ3BCLE9BQU8sRUFBRSxNQUFNO1lBQ2YsSUFBSTtTQUNQLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQUtELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSx3QkFBd0I7SUFDMUQsWUFBWSxVQUFzQjtRQUM5QixLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEIsQ0FBQzt3R0FIUSxnQkFBZ0I7NEdBQWhCLGdCQUFnQixjQUZiLE1BQU07OzRGQUVULGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBDbGllbnQsIEh0dHBFdmVudCwgSHR0cEV2ZW50VHlwZSwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMsIEh0dHBQcm9ncmVzc0V2ZW50LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNZXNzYWdlUmVzb3VyY2V9IGZyb20gJy4vaW50ZXJmYWNlL21lc3NhZ2UtcmVzb3VyY2UnO1xuXG5cbmV4cG9ydCB0eXBlIEhlYWRlcnMgPVxuICAgIEh0dHBIZWFkZXJzIHwge1xuICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IEFycmF5PHN0cmluZz47XG59O1xuXG5leHBvcnQgdHlwZSBQYXJhbXMgPSBIdHRwUGFyYW1zIHwgT2JqZWN0UGFyYW1zO1xuXG5leHBvcnQgdHlwZSBSZXNwb25zZVR5cGUgPSAnanNvbicgfCAnaGFsJztcblxuZXhwb3J0IGludGVyZmFjZSBPYmplY3RQYXJhbXMge1xuICAgIFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGVudW0gUHJvZ3Jlc3NUeXBlIHtcbiAgICBVUExPQUQgPSAndXBsb2FkJyxcbiAgICBET1dOTE9BRCA9ICdkb3dubG9hZCdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlclByb2dyZXNzIHtcbiAgICB0eXBlOiBQcm9ncmVzc1R5cGU7XG4gICAgbG9hZGVkOiBudW1iZXI7XG4gICAgdG90YWw/OiBudW1iZXI7XG4gICAgcHJvZ3Jlc3M/OiBudW1iZXI7XG59XG5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UmVzb3VyY2VQcm92aWRlciB7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQpIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhZGRMYXN0U2xhc2gobGluazogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGxpbmsubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGxpbmsuY2hhckF0KGxpbmsubGVuZ3RoIC0gMSkgPT09ICcvJyA/IGxpbmsgOiBsaW5rICsgJy8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ05vIGRlZmluZSBhcGkgdXJsJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZW1vdmVGaXJzdFNsYXNoKGxpbms6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBsaW5rLmNoYXJBdCgwKSA9PT0gJy8nID8gbGluay5sZW5ndGggPiAxID8gbGluay5zdWJzdHJpbmcoMSwgbGluay5sZW5ndGgpIDogJycgOiBsaW5rO1xuICAgIH1cblxuXG4gICAgcHVibGljIHN0YXRpYyBzYW5pdGl6ZVVybChlbmRwb2ludD86IHN0cmluZywgdXJsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGVuZHBvaW50Py5pbmNsdWRlcygnaHR0cDovLycpIHx8IChlbmRwb2ludD8uaW5jbHVkZXMoJ2h0dHBzOi8vJykpKSB7XG4gICAgICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVuZHBvaW50Py5pbmNsdWRlcyh1cmwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmRwb2ludDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsPy5pbmNsdWRlcygnaHR0cHM6Ly8nKSA/ICdodHRwczovLycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQ/LnJlcGxhY2UoLyheXFx3Kzp8XilcXC9cXC8vLCAnJykgOiAnaHR0cDovLycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQ/LnJlcGxhY2UoLyheXFx3Kzp8XilcXC9cXC8vLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5kcG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFic3RyYWN0UmVzb3VyY2VQcm92aWRlci5hZGRMYXN0U2xhc2godXJsKSArIEFic3RyYWN0UmVzb3VyY2VQcm92aWRlci5yZW1vdmVGaXJzdFNsYXNoKGVuZHBvaW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ05vIGRlZmluZSBlbmRwb2ludCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tYmluZXMgdHdvIGluc3RhbmNlcyBvZiB7QGxpbmsgUGFyYW1zfSB0eXBlIGludG8gb25lLlxuICAgICAqIElmIGEgcGFyYW1ldGVyIGlzIGRlY2xhcmVkIGluIGJvdGggaW5zdGFuY2VzIHVzZXMgdGhlIHZhbHVlIG9mIHRoZSBgaGlnaFByaW9yaXR5UGFyYW1zYCBpbiB0aGUgcmVzdWx0LlxuICAgICAqIEBwYXJhbSBoaWdoUHJpb3JpdHlQYXJhbXMgcGFyYW1ldGVycyB3aXRoIHRoZSBoaWdoZXIgcHJpb3JpdHlcbiAgICAgKiBAcGFyYW0gbG93UHJpb3JpdHlQYXJhbXMgcGFyYW1ldGVycyB3aXRoIHRoZSBsb3dlciBwcmlvcml0eVxuICAgICAqIEByZXR1cm5zIGNvbWJpbmF0aW9uIG9mIGJvdGNoIHBhcmFtZXRlcnMuIFVzZXMgdGhlIHZhbHVlIG9mIHRoZSBoaWdoZXIgcHJpb3JpdHkgcGFyYW1ldGVycyBpZiB0aGUga2V5cyBhcmUgaW4gY29uZmxpY3QuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjb21iaW5lUGFyYW1zKGhpZ2hQcmlvcml0eVBhcmFtczogUGFyYW1zLCBsb3dQcmlvcml0eVBhcmFtczogUGFyYW1zKTogSHR0cFBhcmFtcyB7XG4gICAgICAgIGNvbnN0IGltcG9ydGFudFBhcmFtcyA9IGhpZ2hQcmlvcml0eVBhcmFtcyBpbnN0YW5jZW9mIEh0dHBQYXJhbXMgP1xuICAgICAgICAgICAgUmVzb3VyY2VQcm92aWRlci5jb252ZXJ0SHR0cFBhcmFtc1RvT2JqZWN0UGFyYW1zKGhpZ2hQcmlvcml0eVBhcmFtcykgOlxuICAgICAgICAgICAgaGlnaFByaW9yaXR5UGFyYW1zO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBsb3dQcmlvcml0eVBhcmFtcyBpbnN0YW5jZW9mIEh0dHBQYXJhbXMgP1xuICAgICAgICAgICAgUmVzb3VyY2VQcm92aWRlci5jb252ZXJ0SHR0cFBhcmFtc1RvT2JqZWN0UGFyYW1zKGxvd1ByaW9yaXR5UGFyYW1zKSA6XG4gICAgICAgICAgICB7Li4ubG93UHJpb3JpdHlQYXJhbXN9O1xuICAgICAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgaW1wb3J0YW50UGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiBwYXJhbXN9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB7QGxpbmsgSHR0cFBhcmFtc30gaW5zdGFuY2UgaW50byBhIHNpbXBsZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHBhcmFtcyBpbnN0YW5jZSB0byBjb252ZXJ0XG4gICAgICogQHJldHVybnMgc2ltcGxlIG9iamVjdCB3aXRoIGtleXMgYW5kIHZhbHVlcyBmcm9tIHRoZSBpbnB1dCBhcmd1bWVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgY29udmVydEh0dHBQYXJhbXNUb09iamVjdFBhcmFtcyhwYXJhbXM6IEh0dHBQYXJhbXMpOiBPYmplY3RQYXJhbXMge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgcGFyYW1zLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBwYXJhbXMuZ2V0QWxsKGtleSk7XG4gICAgICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVzWzBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRQcm9ncmVzcyhldmVudDogSHR0cFByb2dyZXNzRXZlbnQpOiBQcm92aWRlclByb2dyZXNzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MgPyBQcm9ncmVzc1R5cGUuVVBMT0FEIDogUHJvZ3Jlc3NUeXBlLkRPV05MT0FELFxuICAgICAgICAgICAgbG9hZGVkOiBldmVudC5sb2FkZWQsXG4gICAgICAgICAgICB0b3RhbDogZXZlbnQudG90YWwsXG4gICAgICAgICAgICBwcm9ncmVzczogZXZlbnQubG9hZGVkICYmIGV2ZW50LnRvdGFsID8gTWF0aC5yb3VuZChldmVudC5sb2FkZWQgKiAxMDAgLyBldmVudC50b3RhbCkgOiB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHByb2Nlc3NNZXNzYWdlUmVzb3VyY2UocmVzcG9uc2U6IE1lc3NhZ2VSZXNvdXJjZSB8IEh0dHBSZXNwb25zZTxNZXNzYWdlUmVzb3VyY2U+KTogTWVzc2FnZVJlc291cmNlIHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2U6IE1lc3NhZ2VSZXNvdXJjZSA9IChyZXNwb25zZSBhcyBIdHRwUmVzcG9uc2U8TWVzc2FnZVJlc291cmNlPikudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSA/XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgSHR0cFJlc3BvbnNlPE1lc3NhZ2VSZXNvdXJjZT4pLmJvZHkgOiByZXNwb25zZSBhcyBNZXNzYWdlUmVzb3VyY2U7XG4gICAgICAgIGlmICghIXJlc291cmNlICYmIHJlc291cmNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzb3VyY2UuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvdXJjZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0JDxUPihlbmRwb2ludD86IHN0cmluZywgdXJsID86IHN0cmluZywgcGFyYW1zID86IFBhcmFtcywgaGVhZGVycyA/OiBIZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZSA/OiBSZXNwb25zZVR5cGUpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8VD4oQWJzdHJhY3RSZXNvdXJjZVByb3ZpZGVyLnNhbml0aXplVXJsKGVuZHBvaW50LCB1cmwpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6ICdib2R5J1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJsb2IkKGVuZHBvaW50Pzogc3RyaW5nLCB1cmwgPzogc3RyaW5nLCBwYXJhbXMgPzogUGFyYW1zLCBoZWFkZXJzPzogSGVhZGVycyk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEJsb2I+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KEFic3RyYWN0UmVzb3VyY2VQcm92aWRlci5zYW5pdGl6ZVVybChlbmRwb2ludCwgdXJsKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiAnZXZlbnRzJyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJyxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHBvc3QkPFQ+KGVuZHBvaW50Pzogc3RyaW5nLCB1cmwgPzogc3RyaW5nLCBib2R5ID86IG9iamVjdCwgcGFyYW1zID86IFBhcmFtcywgaGVhZGVycyA/OiBIZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGUgPzogUmVzcG9uc2VUeXBlKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxUPihBYnN0cmFjdFJlc291cmNlUHJvdmlkZXIuc2FuaXRpemVVcmwoZW5kcG9pbnQsIHVybCksXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6ICdib2R5J1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHBvc3RXaXRoRXZlbnQkPFQ+KGVuZHBvaW50Pzogc3RyaW5nLCB1cmwgPzogc3RyaW5nLCBib2R5ID86IG9iamVjdCwgcGFyYW1zID86IFBhcmFtcywgaGVhZGVycz86IEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZSA/OiBSZXNwb25zZVR5cGUpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxUPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8VD4oQWJzdHJhY3RSZXNvdXJjZVByb3ZpZGVyLnNhbml0aXplVXJsKGVuZHBvaW50LCB1cmwpLFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiAnZXZlbnRzJyxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHB1dCQ8VD4oZW5kcG9pbnQ/OiBzdHJpbmcsIHVybCA/OiBzdHJpbmcsIGJvZHkgPzogb2JqZWN0LCBwYXJhbXMgPzogUGFyYW1zLCBoZWFkZXJzID86IEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlID86IFJlc3BvbnNlVHlwZSk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnB1dDxUPihBYnN0cmFjdFJlc291cmNlUHJvdmlkZXIuc2FuaXRpemVVcmwoZW5kcG9pbnQsIHVybCksXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6ICdib2R5J1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZSQ8VD4oZW5kcG9pbnQ/OiBzdHJpbmcsIHVybD86IHN0cmluZywgcGFyYW1zID86IFBhcmFtcywgaGVhZGVycyA/OiBIZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZSA/OiBSZXNwb25zZVR5cGUsIGJvZHk/OiBvYmplY3QsKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZGVsZXRlPFQ+KEFic3RyYWN0UmVzb3VyY2VQcm92aWRlci5zYW5pdGl6ZVVybChlbmRwb2ludCwgdXJsKSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgICAgICAgYm9keVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VQcm92aWRlciBleHRlbmRzIEFic3RyYWN0UmVzb3VyY2VQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoaHR0cENsaWVudDogSHR0cENsaWVudCkge1xuICAgICAgICBzdXBlcihodHRwQ2xpZW50KTtcbiAgICB9XG5cbn1cbiJdfQ==