ngx-mat-lib
Version:
A bunch of utilities and components to use in your Angular 7+ apps!
261 lines (260 loc) • 26.3 kB
JavaScript
/**
* @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=