UNPKG

ngx-mat-lib

Version:

A bunch of utilities and components to use in your Angular 7+ apps!

261 lines (260 loc) 26.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Injectable } from "@angular/core"; import { HttpClient, HttpParams } from "@angular/common/http"; import { XmatConstantsService } from "./xmat-constants.service"; import { XmatResponseTypes, XmatRestVerbs } from "../models/index"; import { Observable, forkJoin } from "rxjs"; import { map } from "rxjs/operators"; import { forEach } from "lodash"; /** * XMAT REST BY TONY SAMPERI * extend this file by adding a public "serviceUrls" variable * and optionally servicesConfigs * * CRUD-HTTP MAPPING * POST Create Crea una nuova risorsa * GET Read Ottiene una risorsa esistente * PUT Update Aggiorna una risorsa o ne modifica lo stato * DELETE Delete Elimina una risorsa */ var XmatRestService = /** @class */ (function () { function XmatRestService(_http, _xmatConstants) { this._http = _http; this._xmatConstants = _xmatConstants; // Sample data this.servicesUrls = {}; this.servicesConfigs = {}; this._restBaseUrl = this._xmatConstants.restBaseUrl; this._ds = this._xmatConstants.ds; } /** * @param {?} file * @param {?=} verb * @param {?=} body * @param {?=} onError * @return {?} */ XmatRestService.prototype.downloadBlobFromUrl = /** * @param {?} file * @param {?=} verb * @param {?=} body * @param {?=} onError * @return {?} */ function (file, verb, body, onError) { if (verb === void 0) { verb = XmatRestVerbs.GET; } /** @type {?} */ var call; if (verb === XmatRestVerbs.GET) { call = this.getBlobFromUrl(file, verb); } if (verb === XmatRestVerbs.PATCH) { call = this.getBlobFromUrl(file, verb, body); } call.subscribe(function (results) { // IE DOESN'T SUPPORT TRIGGERING SO WE START DOWNLOADING WITH THIS PORKAROUND if (window.navigator.msSaveOrOpenBlob) { window.navigator.msSaveOrOpenBlob(results, file.fileName); } else { /** @type {?} */ var unsafeUrl = URL.createObjectURL(results); /** @type {?} */ var linkEl = document.createElement("a"); linkEl.setAttribute("href", unsafeUrl); linkEl.setAttribute("download", file.fileName); document.body.appendChild(linkEl); linkEl.click(); document.body.removeChild(linkEl); } }, function (err) { typeof onError === typeof isNaN && onError(err); }); }; /** * @param {?} file * @param {?=} verb * @param {?=} body * @return {?} */ XmatRestService.prototype.getBlobFromUrl = /** * @param {?} file * @param {?=} verb * @param {?=} body * @return {?} */ function (file, verb, body) { if (verb === void 0) { verb = XmatRestVerbs.GET; } if (!file || !file.url) { console.error("XmatRest: invalid XmatFile provided!", file); return void 0; } // Use a default fileName if not set if (!file.fileName || !file.fileName.length) { /** @type {?} */ var ext = file.url.substr(file.url.lastIndexOf(".")); file.fileName = "xmat-document" + ext; } if (verb === XmatRestVerbs.GET) { return this._http.get(file.url, { responseType: XmatResponseTypes.blob }); } if (verb === XmatRestVerbs.PATCH) { return this._http.patch(file.url, body, { responseType: XmatResponseTypes.blob }); } throw new Error("XmatRest: invalid verb provided for 'getBlobFromUrl'. Expected GET|PATCH, got " + verb); }; /** * @param {?} configs * @return {?} */ XmatRestService.prototype.$all = /** * @param {?} configs * @return {?} */ function (configs) { var _this = this; /** @type {?} */ var queue = []; forEach(configs, function (c) { queue.push(_this.$http(c)); }); return forkJoin(queue); }; /** * @template T, U * @param {?} configs * @return {?} */ XmatRestService.prototype.$allMap = /** * @template T, U * @param {?} configs * @return {?} */ function (configs) { var _this = this; /** @type {?} */ var queue = []; /** @type {?} */ var queueKeys = []; forEach(configs, function (c, key) { queue.push(_this.$http(c)); queueKeys.push(key); }); return forkJoin(queue) .pipe(map(function (raw) { /** @type {?} */ var mapped = {}; forEach(raw, function (value, index) { mapped[queueKeys[index]] = value; }); return mapped; })); }; /** * @template T * @param {?=} config * @return {?} */ XmatRestService.prototype.$http = /** * @template T * @param {?=} config * @return {?} */ function (config) { if (config === void 0) { config = this._generateHttpConfig(); } if (!config.method) { config.method = XmatRestVerbs.GET; } if (!config.url) { console.error("Error: [$http:badconfig]", config); return new Observable(); } switch (config.method) { case XmatRestVerbs.GET: /** @type {?} */ var params_1 = config.params || new HttpParams(); /** * Transform data in query params */ if (!!config.data) { // Accepting 0, null, void 0 as empty params if (this._xmatConstants.isStrictlyObject(config.data)) { forEach(Object.keys(config.data), function (key) { params_1 = params_1.append(key, config.data[key]); }); } else { console.warn("Error: [XmatRest:badparams]"); } } return this._http.get(config.url, { params: params_1 }); case XmatRestVerbs.PATCH: return this._http.patch(config.url, config.data, { params: config.params }); case XmatRestVerbs.POST: return this._http.post(config.url, config.data, { params: config.params }); case XmatRestVerbs.DELETE: return this._http.delete(config.url, { params: config.params }); case XmatRestVerbs.PUT: return this._http.put(config.url, config.data, { params: config.params }); default: console.error("Error: [XmatRest:badmethod]", arguments); return new Observable(); } }; /** * @param {?=} method * @param {?=} url * @param {?=} queryable * @return {?} */ XmatRestService.prototype._generateHttpConfig = /** * @param {?=} method * @param {?=} url * @param {?=} queryable * @return {?} */ function (method, url, queryable) { if (method === void 0) { method = XmatRestVerbs.GET; } if (url === void 0) { url = ""; } if (queryable === void 0) { queryable = false; } url = this._xmatConstants.removeTrailingSlash(url); return /** @type {?} */ ({ method: method, url: url, data: void 0, queryable: queryable }); }; XmatRestService.decorators = [ { type: Injectable } ]; /** @nocollapse */ XmatRestService.ctorParameters = function () { return [ { type: HttpClient }, { type: XmatConstantsService } ]; }; return XmatRestService; }()); export { XmatRestService }; if (false) { /** @type {?} */ XmatRestService.prototype.servicesUrls; /** @type {?} */ XmatRestService.prototype.servicesConfigs; /** @type {?} */ XmatRestService.prototype._restBaseUrl; /** @type {?} */ XmatRestService.prototype._ds; /** @type {?} */ XmatRestService.prototype._http; /** @type {?} */ XmatRestService.prototype._xmatConstants; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1hdC1yZXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtbWF0LWxpYi8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy94bWF0LXJlc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFHSCxpQkFBaUIsRUFDakIsYUFBYSxFQUNoQixNQUFNLGlCQUFpQixDQUFDO0FBR3pCLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7Ozs7Ozs7Ozs7O0lBNEM3Qix5QkFBc0IsS0FBaUIsRUFDekIsY0FBb0M7UUFENUIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUN6QixtQkFBYyxHQUFkLGNBQWMsQ0FBc0I7O1FBM0JsRCxvQkFBd0IsRUFLdkIsQ0FBQztRQUVGLHVCQUEyQixFQWMxQixDQUFDO1FBRUYsb0JBQXlCLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDO1FBQ3pELFdBQWdCLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO0tBS3RDOzs7Ozs7OztJQUlELDZDQUFtQjs7Ozs7OztJQUFuQixVQUNJLElBQWMsRUFDZCxJQUFpRSxFQUNqRSxJQUFpQixFQUNqQixPQUE0QjtRQUY1QixxQkFBQSxFQUFBLE9BQWdELGFBQWEsQ0FBQyxHQUFHOztRQUlqRSxJQUFJLElBQUksQ0FBQztRQUNULElBQUksSUFBSSxLQUFLLGFBQWEsQ0FBQyxHQUFHLEVBQUU7WUFDNUIs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QztZQUNsRixLQUFLLGFBQWEsQ0FBQyxNQUFNO2dCQUNyQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDdkUsS0FBSyxhQUFhLENBQUMsR0FBRztnQkFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBSSxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDakY7Z0JBQ0ksT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDeEQsT0FBTyxJQUFJLFVBQVUsRUFBRSxDQUFDO1NBQy9CO0tBQ0o7Ozs7Ozs7SUFFUyw2Q0FBbUI7Ozs7OztJQUE3QixVQUE4QixNQUF5QyxFQUFFLEdBQWdCLEVBQUUsU0FBMEI7UUFBdkYsdUJBQUEsRUFBQSxTQUF3QixhQUFhLENBQUMsR0FBRztRQUFFLG9CQUFBLEVBQUEsUUFBZ0I7UUFBRSwwQkFBQSxFQUFBLGlCQUEwQjtRQUNqSCxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCx5QkFBTztZQUNILE1BQU0sRUFBRSxNQUFNO1lBQ2QsR0FBRyxFQUFFLEdBQUc7WUFDUixJQUFJLEVBQUUsS0FBSyxDQUFDO1lBQ1osU0FBUyxFQUFFLFNBQVM7U0FDTCxFQUFDO0tBQ3ZCOztnQkE3S0osVUFBVTs7OztnQkEzQkYsVUFBVTtnQkFFVixvQkFBb0I7OzBCQUg3Qjs7U0E2QmEsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuLy9cbmltcG9ydCB7IFhtYXRDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSBcIi4veG1hdC1jb25zdGFudHMuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgICBYbWF0RmlsZSxcbiAgICBYbWF0SHR0cENvbmZpZyxcbiAgICBYbWF0UmVzcG9uc2VUeXBlcyxcbiAgICBYbWF0UmVzdFZlcmJzXG59IGZyb20gXCIuLi9tb2RlbHMvaW5kZXhcIjtcbmltcG9ydCB7IFhtYXRHZW5lcmljT2JqZWN0IH0gZnJvbSBcIi4uL21vZGVscy9pbmRleFwiO1xuLy9cbmltcG9ydCB7IE9ic2VydmFibGUsIGZvcmtKb2luLCB0aHJvd0Vycm9yIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gXCJsb2Rhc2hcIjtcblxuLyoqXG4gKiBYTUFUIFJFU1QgQlkgVE9OWSBTQU1QRVJJXG4gKiBleHRlbmQgdGhpcyBmaWxlIGJ5IGFkZGluZyBhIHB1YmxpYyBcInNlcnZpY2VVcmxzXCIgdmFyaWFibGVcbiAqIGFuZCBvcHRpb25hbGx5IHNlcnZpY2VzQ29uZmlnc1xuICpcbiAqIENSVUQtSFRUUCBNQVBQSU5HXG4gKiBQT1NUICAgICAgICBDcmVhdGUgICAgICAgIENyZWEgdW5hIG51b3ZhIHJpc29yc2FcbiAqIEdFVCAgICAgICAgUmVhZCAgICAgICAgT3R0aWVuZSB1bmEgcmlzb3JzYSBlc2lzdGVudGVcbiAqIFBVVCAgICAgICAgVXBkYXRlICAgIEFnZ2lvcm5hIHVuYSByaXNvcnNhIG8gbmUgbW9kaWZpY2EgbG8gc3RhdG9cbiAqIERFTEVURSAgICBEZWxldGUgICAgRWxpbWluYSB1bmEgcmlzb3JzYVxuICovXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBYbWF0UmVzdFNlcnZpY2Uge1xuXG4gICAgLy8gU2FtcGxlIGRhdGFcbiAgICByZWFkb25seSBzZXJ2aWNlc1VybHMgPSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiAgbXlTZXJ2aWNlQTogXCJteS1zZXJ2aWNlLWFcIlxuICAgICAgICAgKiAgbXlTZXJ2aWNlQTogXCJteS1zZXJ2aWNlLWJcIlxuICAgICAgICAgKi9cbiAgICB9O1xuXG4gICAgcmVhZG9ubHkgc2VydmljZXNDb25maWdzID0ge1xuICAgICAgICAvKipcbiAgICAgICAgICogbXlTZXJ2aWNlQToge1xuICAgICAgICAgKiAgICAgZ2V0OiAoKTogWG1hdEh0dHBDb25maWcgPT4ge1xuICAgICAgICAgKiAgICAgICAgIHJldHVybiB0aGlzLl9nZW5lcmF0ZUh0dHBDb25maWcoWG1hdFJlc3RWZXJicy5HRVQsIHRoaXMuc2VydmljZXNVcmxzLm15U2VydmljZUEsIHRydWUpO1xuICAgICAgICAgKiAgICAgfSxcbiAgICAgICAgICogICAgIHBvc3Q6ICgpOiBYbWF0SHR0cENvbmZpZyA9PiB7XG4gICAgICAgICAqICAgICAgICAgcmV0dXJuIHRoaXMuX2dlbmVyYXRlSHR0cENvbmZpZyhYbWF0UmVzdFZlcmJzLlBPU1QsIHRoaXMuc2VydmljZXNVcmxzLm15U2VydmljZUEpO1xuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKiB9LFxuICAgICAgICAgKiBteVNlcnZpY2VCOiAoKTogWG1hdEh0dHBDb25maWcgPT4ge1xuICAgICAgICAgKiAgICAgcmV0dXJuIHRoaXMuX2dlbmVyYXRlSHR0cENvbmZpZyhYbWF0UmVzdFZlcmJzLkdFVCwgdGhpcy5zZXJ2aWNlc1VybHMubXlTZXJ2aWNlQSwgdHJ1ZSk7XG4gICAgICAgICAqIH1cbiAgICAgICAgICovXG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBfcmVzdEJhc2VVcmwgPSB0aGlzLl94bWF0Q29uc3RhbnRzLnJlc3RCYXNlVXJsO1xuICAgIHByb3RlY3RlZCBfZHMgPSB0aGlzLl94bWF0Q29uc3RhbnRzLmRzO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9odHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICBwcm90ZWN0ZWQgX3htYXRDb25zdGFudHM6IFhtYXRDb25zdGFudHNTZXJ2aWNlKSB7XG5cbiAgICB9XG5cbiAgICBkb3dubG9hZEJsb2JGcm9tVXJsKGZpbGU6IFhtYXRGaWxlLCB2ZXJiPzogWG1hdFJlc3RWZXJicy5HRVQsIG9uRXJyb3I/OiAoZXJyOiBhbnkpID0+IHZvaWQpOiB2b2lkO1xuICAgIGRvd25sb2FkQmxvYkZyb21VcmwoZmlsZTogWG1hdEZpbGUsIHZlcmI6IFhtYXRSZXN0VmVyYnMuUEFUQ0gsIGJvZHk6IGFueSwgb25FcnJvcj86IChlcnI6IGFueSkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgZG93bmxvYWRCbG9iRnJvbVVybChcbiAgICAgICAgZmlsZTogWG1hdEZpbGUsXG4gICAgICAgIHZlcmI6IFhtYXRSZXN0VmVyYnMuR0VUIHwgWG1hdFJlc3RWZXJicy5QQVRDSCA9IFhtYXRSZXN0VmVyYnMuR0VULFxuICAgICAgICBib2R5PzogYW55IHwgdm9pZCxcbiAgICAgICAgb25FcnJvcj86IChlcnI6IGFueSkgPT4gdm9pZFxuICAgICk6IHZvaWQge1xuICAgICAgICBsZXQgY2FsbDtcbiAgICAgICAgaWYgKHZlcmIgPT09IFhtYXRSZXN0VmVyYnMuR0VUKSB7XG4gICAgICAgICAgICBjYWxsID0gdGhpcy5nZXRCbG9iRnJvbVVybChmaWxlLCB2ZXJiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmVyYiA9PT0gWG1hdFJlc3RWZXJicy5QQVRDSCkge1xuICAgICAgICAgICAgY2FsbCA9IHRoaXMuZ2V0QmxvYkZyb21VcmwoZmlsZSwgdmVyYiwgYm9keSk7XG4gICAgICAgIH1cblxuICAgICAgICBjYWxsLnN1YnNjcmliZSgocmVzdWx0czogQmxvYikgPT4ge1xuICAgICAgICAgICAgLy8gSUUgRE9FU04nVCBTVVBQT1JUIFRSSUdHRVJJTkcgU08gV0UgU1RBUlQgRE9XTkxPQURJTkcgV0lUSCBUSElTIFBPUktBUk9VTkRcbiAgICAgICAgICAgIGlmICh3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IocmVzdWx0cywgZmlsZS5maWxlTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1bnNhZmVVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmtFbDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgICAgICAgICBsaW5rRWwuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1bnNhZmVVcmwpO1xuICAgICAgICAgICAgICAgIGxpbmtFbC5zZXRBdHRyaWJ1dGUoXCJkb3dubG9hZFwiLCBmaWxlLmZpbGVOYW1lKTtcblxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGlua0VsKTtcbiAgICAgICAgICAgICAgICBsaW5rRWwuY2xpY2soKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmtFbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgdHlwZW9mIG9uRXJyb3IgPT09IHR5cGVvZiBpc05hTiAmJiBvbkVycm9yKGVycik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEJsb2JGcm9tVXJsKGZpbGU6IFhtYXRGaWxlLCB2ZXJiPzogWG1hdFJlc3RWZXJicy5HRVQpOiBPYnNlcnZhYmxlPEJsb2I+O1xuICAgIGdldEJsb2JGcm9tVXJsKGZpbGU6IFhtYXRGaWxlLCB2ZXJiOiBYbWF0UmVzdFZlcmJzLlBBVENILCBib2R5OiBhbnkpOiBPYnNlcnZhYmxlPEJsb2I+O1xuICAgIGdldEJsb2JGcm9tVXJsKGZpbGU6IFhtYXRGaWxlLCB2ZXJiOiBYbWF0UmVzdFZlcmJzLkdFVCB8IFhtYXRSZXN0VmVyYnMuUEFUQ0ggPSBYbWF0UmVzdFZlcmJzLkdFVCwgYm9keT86IGFueSk6IE9ic2VydmFibGU8QmxvYj4ge1xuICAgICAgICBpZiAoIWZpbGUgfHwgIWZpbGUudXJsKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiWG1hdFJlc3Q6IGludmFsaWQgWG1hdEZpbGUgcHJvdmlkZWQhXCIsIGZpbGUpO1xuICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgICAvLyBVc2UgYSBkZWZhdWx0IGZpbGVOYW1lIGlmIG5vdCBzZXRcbiAgICAgICAgaWYgKCFmaWxlLmZpbGVOYW1lIHx8ICFmaWxlLmZpbGVOYW1lLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZXh0ID0gZmlsZS51cmwuc3Vic3RyKGZpbGUudXJsLmxhc3RJbmRleE9mKFwiLlwiKSk7XG4gICAgICAgICAgICBmaWxlLmZpbGVOYW1lID0gYHhtYXQtZG9jdW1lbnQke2V4dH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZlcmIgPT09IFhtYXRSZXN0VmVyYnMuR0VUKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQoZmlsZS51cmwsIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IFhtYXRSZXNwb25zZVR5cGVzLmJsb2JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2ZXJiID09PSBYbWF0UmVzdFZlcmJzLlBBVENIKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wYXRjaChmaWxlLnVybCwgYm9keSwge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogWG1hdFJlc3BvbnNlVHlwZXMuYmxvYlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFhtYXRSZXN0OiBpbnZhbGlkIHZlcmIgcHJvdmlkZWQgZm9yICdnZXRCbG9iRnJvbVVybCcuIEV4cGVjdGVkIEdFVHxQQVRDSCwgZ290ICR7dmVyYn1gKTtcbiAgICB9XG5cbiAgICAkYWxsKGNvbmZpZ3M6IFhtYXRIdHRwQ29uZmlnW10pOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgICAgIGNvbnN0IHF1ZXVlOiBPYnNlcnZhYmxlPGFueT5bXSA9IFtdO1xuICAgICAgICBmb3JFYWNoKGNvbmZpZ3MsIChjOiBYbWF0SHR0cENvbmZpZykgPT4ge1xuICAgICAgICAgICAgcXVldWUucHVzaCh0aGlzLiRodHRwKGMpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKHF1ZXVlKTtcbiAgICB9XG5cbiAgICAkYWxsTWFwPFQgZXh0ZW5kcyBYbWF0R2VuZXJpY09iamVjdDxYbWF0SHR0cENvbmZpZz4sIFUgPSBhbnk+KGNvbmZpZ3M6IFQpOiBPYnNlcnZhYmxlPFhtYXRHZW5lcmljT2JqZWN0PFU+PiB7XG4gICAgICAgIGNvbnN0IHF1ZXVlOiBPYnNlcnZhYmxlPGFueT5bXSA9IFtdO1xuICAgICAgICBjb25zdCBxdWV1ZUtleXM6IEFycmF5PG51bWJlciB8IHN0cmluZz4gPSBbXTtcbiAgICAgICAgZm9yRWFjaChjb25maWdzLCAoYzogWG1hdEh0dHBDb25maWcsIGtleTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBxdWV1ZS5wdXNoKHRoaXMuJGh0dHAoYykpO1xuICAgICAgICAgICAgcXVldWVLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmb3JrSm9pbihxdWV1ZSlcbiAgICAgICAgICAgIC5waXBlKG1hcCgocmF3OiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHt9O1xuICAgICAgICAgICAgICAgIGZvckVhY2gocmF3LCAodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG1hcHBlZFtxdWV1ZUtleXNbaW5kZXhdXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcHBlZDtcbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAkaHR0cDxUPihjb25maWc6IFhtYXRIdHRwQ29uZmlnID0gdGhpcy5fZ2VuZXJhdGVIdHRwQ29uZmlnKCkpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgaWYgKCFjb25maWcubWV0aG9kKSB7XG4gICAgICAgICAgICBjb25maWcubWV0aG9kID0gWG1hdFJlc3RWZXJicy5HRVQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb25maWcudXJsKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IFskaHR0cDpiYWRjb25maWddXCIsIGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGNvbmZpZy5tZXRob2QpIHtcbiAgICAgICAgICAgIGNhc2UgWG1hdFJlc3RWZXJicy5HRVQ6XG4gICAgICAgICAgICAgICAgbGV0IHBhcmFtcyA9IGNvbmZpZy5wYXJhbXMgfHwgbmV3IEh0dHBQYXJhbXMoKTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBUcmFuc2Zvcm0gZGF0YSBpbiBxdWVyeSBwYXJhbXNcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBpZiAoISFjb25maWcuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBBY2NlcHRpbmcgMCwgbnVsbCwgdm9pZCAwIGFzIGVtcHR5IHBhcmFtc1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5feG1hdENvbnN0YW50cy5pc1N0cmljdGx5T2JqZWN0KGNvbmZpZy5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChPYmplY3Qua2V5cyhjb25maWcuZGF0YSksIChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoa2V5LCBjb25maWcuZGF0YVtrZXldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiRXJyb3I6IFtYbWF0UmVzdDpiYWRwYXJhbXNdXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxUPihjb25maWcudXJsLCB7IHBhcmFtczogcGFyYW1zIH0pO1xuICAgICAgICAgICAgY2FzZSBYbWF0UmVzdFZlcmJzLlBBVENIOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBhdGNoPFQ+KGNvbmZpZy51cmwsIGNvbmZpZy5kYXRhLCB7IHBhcmFtczogY29uZmlnLnBhcmFtcyB9KTtcbiAgICAgICAgICAgIGNhc2UgWG1hdFJlc3RWZXJicy5QT1NUOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8VD4oY29uZmlnLnVybCwgY29uZmlnLmRhdGEsIHsgcGFyYW1zOiBjb25maWcucGFyYW1zIH0pO1xuICAgICAgICAgICAgY2FzZSBYbWF0UmVzdFZlcmJzLkRFTEVURTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8VD4oY29uZmlnLnVybCwgeyBwYXJhbXM6IGNvbmZpZy5wYXJhbXMgfSk7XG4gICAgICAgICAgICBjYXNlIFhtYXRSZXN0VmVyYnMuUFVUOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9odHRwLnB1dDxUPihjb25maWcudXJsLCBjb25maWcuZGF0YSwgeyBwYXJhbXM6IGNvbmZpZy5wYXJhbXMgfSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcjogW1htYXRSZXN0OmJhZG1ldGhvZF1cIiwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZ2VuZXJhdGVIdHRwQ29uZmlnKG1ldGhvZDogWG1hdFJlc3RWZXJicyA9IFhtYXRSZXN0VmVyYnMuR0VULCB1cmw6IHN0cmluZyA9IFwiXCIsIHF1ZXJ5YWJsZTogYm9vbGVhbiA9IGZhbHNlKTogWG1hdEh0dHBDb25maWcge1xuICAgICAgICB1cmwgPSB0aGlzLl94bWF0Q29uc3RhbnRzLnJlbW92ZVRyYWlsaW5nU2xhc2godXJsKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICBkYXRhOiB2b2lkIDAsXG4gICAgICAgICAgICBxdWVyeWFibGU6IHF1ZXJ5YWJsZVxuICAgICAgICB9IGFzIFhtYXRIdHRwQ29uZmlnO1xuICAgIH1cbn1cblxuXG4iXX0=