@lxlib/theme
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.1.
360 lines • 27.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: src/services/http/http.decorator.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Inject, Injector } from '@angular/core';
import { ACLService } from '@lxlib/acl';
import { throwError } from 'rxjs';
import { _HttpClient } from './http.client';
/**
* @abstract
*/
export class BaseApi {
/**
* @param {?} injector
*/
constructor(injector) {
this.injector = injector;
}
}
/** @nocollapse */
BaseApi.ctorParameters = () => [
{ type: Injector, decorators: [{ type: Inject, args: [Injector,] }] }
];
if (false) {
/**
* @type {?}
* @protected
*/
BaseApi.prototype.injector;
}
/**
* @record
*/
export function HttpOptions() { }
if (false) {
/**
* ACL配置,若导入 `\@lxlib/acl` 时自动有效,等同于 `ACLService.can(roleOrAbility: ACLCanType)` 参数值
* @type {?|undefined}
*/
HttpOptions.prototype.acl;
/** @type {?|undefined} */
HttpOptions.prototype.observe;
/** @type {?|undefined} */
HttpOptions.prototype.responseType;
/** @type {?|undefined} */
HttpOptions.prototype.reportProgress;
/** @type {?|undefined} */
HttpOptions.prototype.withCredentials;
}
/**
* @record
*/
function ParamType() { }
if (false) {
/** @type {?} */
ParamType.prototype.key;
/** @type {?} */
ParamType.prototype.index;
/* Skipping unhandled member: [key: string]: any;*/
/* Skipping unhandled member: [key: number]: any;*/
}
/** @type {?} */
const paramKey = `__api_params`;
/**
* @param {?} target
* @param {?=} key
* @return {?}
*/
function setParam(target, key = paramKey) {
/** @type {?} */
let params = target[key];
if (typeof params === 'undefined') {
params = target[key] = {};
}
return params;
}
/**
* 默认基准URL
* - 有效范围:类
* @param {?} url
* @return {?}
*/
export function BaseUrl(url) {
return (/**
* @template TClass
* @param {?} target
* @return {?}
*/
function (target) {
/** @type {?} */
const params = setParam(target.prototype);
params.baseUrl = url;
return target;
});
}
/**
* 默认 `headers`
* - 有效范围:类
* @param {?} headers
* @return {?}
*/
export function BaseHeaders(headers) {
return (/**
* @template TClass
* @param {?} target
* @return {?}
*/
function (target) {
/** @type {?} */
const params = setParam(target.prototype);
params.baseHeaders = headers;
return target;
});
}
/**
* @param {?} paramName
* @return {?}
*/
function makeParam(paramName) {
return (/**
* @param {?=} key
* @return {?}
*/
function (key) {
return (/**
* @param {?} target
* @param {?} propertyKey
* @param {?} index
* @return {?}
*/
function (target, propertyKey, index) {
/** @type {?} */
const params = setParam(setParam(target), propertyKey);
/** @type {?} */
let tParams = params[paramName];
if (typeof tParams === 'undefined') {
tParams = params[paramName] = [];
}
tParams.push({
key,
index,
});
});
});
}
/**
* URL路由参数
* - 有效范围:方法参数
* @type {?}
*/
export const Path = makeParam('path');
/**
* URL 参数 `QueryString`
* - 有效范围:方法参数
* @type {?}
*/
export const Query = makeParam('query');
/**
* 参数 `Body`
* - 有效范围:方法参数
* @type {?}
*/
export const Body = makeParam('body')();
/**
* 参数 `headers`
* - 有效范围:方法参数
* - 合并 `BaseHeaders`
* @type {?}
*/
export const Headers = makeParam('headers');
/**
* Request Payload
* - Supported body (like`POST`, `PUT`) as a body data, equivalent to `\@Body`
* - Not supported body (like `GET`, `DELETE` etc) as a `QueryString`
* @type {?}
*/
export const Payload = makeParam('payload')();
/**
* @param {?} data
* @param {?} key
* @param {?} args
* @return {?}
*/
function getValidArgs(data, key, args) {
if (!data[key] || !Array.isArray(data[key]) || data[key].length <= 0) {
return undefined;
}
return args[data[key][0].index];
}
/**
* @param {?=} data
* @param {?=} payload
* @return {?}
*/
function genBody(data, payload) {
if (Array.isArray(data) || Array.isArray(payload)) {
// tslint:disable-next-line:prefer-object-spread
return Object.assign([], data, payload);
}
// tslint:disable-next-line:prefer-object-spread
return Object.assign({}, data, payload);
}
/**
* @param {?} method
* @return {?}
*/
function makeMethod(method) {
return (/**
* @param {?=} url
* @param {?=} options
* @return {?}
*/
function (url = '', options) {
return (/**
* @param {?} _target
* @param {?=} targetKey
* @param {?=} descriptor
* @return {?}
*/
(_target, targetKey, descriptor) => {
(/** @type {?} */ (descriptor)).value = (/**
* @param {...?} args
* @return {?}
*/
function (...args) {
options = options || {};
/** @type {?} */
const injector = (/** @type {?} */ (((/** @type {?} */ (this))).injector));
/** @type {?} */
const http = (/** @type {?} */ (injector.get(_HttpClient, null)));
if (http == null) {
throw new TypeError(`Not found '_HttpClient', You can import 'LxlibThemeModule' && 'HttpClientModule' in your root module.`);
}
/** @type {?} */
const baseData = setParam(this);
/** @type {?} */
const data = setParam(baseData, targetKey);
/** @type {?} */
let requestUrl = url || '';
requestUrl = [baseData.baseUrl || '', requestUrl.startsWith('/') ? requestUrl.substr(1) : requestUrl].join('/');
// fix last split
if (requestUrl.length > 1 && requestUrl.endsWith('/')) {
requestUrl = requestUrl.substr(0, requestUrl.length - 1);
}
if (options.acl) {
/** @type {?} */
const aclSrv = injector.get(ACLService, null);
if (aclSrv && !aclSrv.can(options.acl)) {
return throwError({
url: requestUrl,
status: 401,
statusText: `From Http Decorator`,
});
}
delete options.acl;
}
requestUrl = requestUrl.replace(/::/g, '^^');
(((/** @type {?} */ (data.path))) || [])
.filter((/**
* @param {?} w
* @return {?}
*/
w => typeof args[w.index] !== 'undefined'))
.forEach((/**
* @param {?} i
* @return {?}
*/
(i) => {
requestUrl = requestUrl.replace(new RegExp(`:${i.key}`, 'g'), encodeURIComponent(args[i.index]));
}));
requestUrl = requestUrl.replace(/\^\^/g, `:`);
/** @type {?} */
const params = (data.query || []).reduce((/**
* @param {?} p
* @param {?} i
* @return {?}
*/
(p, i) => {
p[i.key] = args[i.index];
return p;
}), {});
/** @type {?} */
const headers = (data.headers || []).reduce((/**
* @param {?} p
* @param {?} i
* @return {?}
*/
(p, i) => {
p[i.key] = args[i.index];
return p;
}), {});
if (method === 'FORM') {
headers['content-type'] = 'application/x-www-form-urlencoded';
}
/** @type {?} */
const payload = getValidArgs(data, 'payload', args);
/** @type {?} */
const supportedBody = method === 'POST' || method === 'PUT';
return http.request(method, requestUrl, Object.assign({ body: supportedBody ? genBody(getValidArgs(data, 'body', args), payload) : null, params: !supportedBody ? Object.assign(Object.assign({}, params), payload) : params, headers: Object.assign(Object.assign({}, baseData.baseHeaders), headers) }, options));
});
return descriptor;
});
});
}
/**
* `OPTIONS` 请求
* - 有效范围:方法
* @type {?}
*/
export const OPTIONS = makeMethod('OPTIONS');
/**
* `GET` 请求
* - 有效范围:方法
* @type {?}
*/
export const GET = makeMethod('GET');
/**
* `POST` 请求
* - 有效范围:方法
* @type {?}
*/
export const POST = makeMethod('POST');
/**
* `DELETE` 请求
* - 有效范围:方法
* @type {?}
*/
export const DELETE = makeMethod('DELETE');
/**
* `PUT` 请求
* - 有效范围:方法
* @type {?}
*/
export const PUT = makeMethod('PUT');
/**
* `HEAD` 请求
* - 有效范围:方法
* @type {?}
*/
export const HEAD = makeMethod('HEAD');
/**
* `PATCH` 请求
* - 有效范围:方法
* @type {?}
*/
export const PATCH = makeMethod('PATCH');
/**
* `JSONP` 请求
* - 有效范围:方法
* @type {?}
*/
export const JSONP = makeMethod('JSONP');
/**
* `FORM` 请求
* - 有效范围:方法
* @type {?}
*/
export const FORM = makeMethod('FORM');
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5kZWNvcmF0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbHhsaWIvdGhlbWUvIiwic291cmNlcyI6WyJzcmMvc2VydmljZXMvaHR0cC9odHRwLmRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEMsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBRTVDLE1BQU0sT0FBZ0IsT0FBTzs7OztJQUMzQixZQUF3QyxRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQUcsQ0FBQzs7OztZQVAvQyxRQUFRLHVCQU9WLE1BQU0sU0FBQyxRQUFROzs7Ozs7O0lBQWhCLDJCQUE4Qzs7Ozs7QUFHNUQsaUNBT0M7Ozs7OztJQUxDLDBCQUFVOztJQUNWLDhCQUF5Qzs7SUFDekMsbUNBQXdEOztJQUN4RCxxQ0FBeUI7O0lBQ3pCLHNDQUEwQjs7Ozs7QUFHNUIsd0JBS0M7OztJQUpDLHdCQUFZOztJQUNaLDBCQUFjOzs7OztNQUtWLFFBQVEsR0FBRyxjQUFjOzs7Ozs7QUFFL0IsU0FBUyxRQUFRLENBQUMsTUFBVyxFQUFFLEdBQUcsR0FBRyxRQUFROztRQUN2QyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUN4QixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTtRQUNqQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUMzQjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7Ozs7Ozs7QUFNRCxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQVc7SUFDakM7Ozs7O0lBQU8sVUFBMEQsTUFBYzs7Y0FDdkUsTUFBTSxH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T0FBTyxNQUFNLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBTTFDLE1BQU0sT0FBTyxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQzs7Ozs7O0FBTXBDLE1BQU0sT0FBTyxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQzs7Ozs7O0FBTXRDLE1BQU0sT0FBTyxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQzs7Ozs7O0FBTXhDLE1BQU0sT0FBTyxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQzs7Ozs7O0FBTXhDLE1BQU0sT0FBTyxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlOiBvbmx5LWFycm93LWZ1bmN0aW9uc1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBQ0xTZXJ2aWNlIH0gZnJvbSAnQGx4bGliL2FjbCc7XG5pbXBvcnQgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgX0h0dHBDbGllbnQgfSBmcm9tICcuL2h0dHAuY2xpZW50JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VBcGkge1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KEluamVjdG9yKSBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yKSB7fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBPcHRpb25zIHtcbiAgLyoqIEFDTOmFjee9ru+8jOiLpeWvvOWFpSBgQGx4bGliL2FjbGAg5pe26Ieq5Yqo5pyJ5pWI77yM562J5ZCM5LqOIGBBQ0xTZXJ2aWNlLmNhbihyb2xlT3JBYmlsaXR5OiBBQ0xDYW5UeXBlKWAg5Y+C5pWw5YC8ICovXG4gIGFjbD86IGFueTtcbiAgb2JzZXJ2ZT86ICdib2R5JyB8ICdldmVudHMnIHwgJ3Jlc3BvbnNlJztcbiAgcmVzcG9uc2VUeXBlPzogJ2FycmF5YnVmZmVyJyB8ICdibG9iJyB8ICdqc29uJyB8ICd0ZXh0JztcbiAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGFyYW1UeXBlIHtcbiAga2V5OiBzdHJpbmc7XG4gIGluZGV4OiBudW1iZXI7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbiAgW2tleTogbnVtYmVyXTogYW55O1xufVxuXG5jb25zdCBwYXJhbUtleSA9IGBfX2FwaV9wYXJhbXNgO1xuXG5mdW5jdGlvbiBzZXRQYXJhbSh0YXJnZXQ6IGFueSwga2V5ID0gcGFyYW1LZXkpIHtcbiAgbGV0IHBhcmFtcyA9IHRhcmdldFtrZXldO1xuICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBwYXJhbXMgPSB0YXJnZXRba2V5XSA9IHt9O1xuICB9XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbi8qKlxuICog6buY6K6k5Z+65YeGVVJMXG4gKiAtIOacieaViOiMg+WbtO+8muexu1xuICovXG5leHBvcnQgZnVuY3Rpb24gQmFzZVVybCh1cmw6IHN0cmluZykge1xuICByZXR1cm4gZnVuY3Rpb24gPFRDbGFzcyBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IEJhc2VBcGk+KHRhcmdldDogVENsYXNzKTogVENsYXNzIHtcbiAgICBjb25zdCBwYXJhbXMgPSBzZXRQYXJhbSh0YXJnZXQucHJvdG90eXBlKTtcbiAgICBwYXJhbXMuYmFzZVVybCA9IHVybDtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xufVxuXG4vKipcbiAqIOm7mOiupCBgaGVhZGVyc2BcbiAqIC0g5pyJ5pWI6IyD5Zu077ya57G7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBCYXNlSGVhZGVycyhcbiAgaGVhZGVyczpcbiAgICB8IEh0dHBIZWFkZXJzXG4gICAgfCB7XG4gICAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgICAgfSxcbikge1xuICByZXR1cm4gZnVuY3Rpb24gPFRDbGFzcyBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IEJhc2VBcGk+KHRhcmdldDogVENsYXNzKTogVENsYXNzIHtcbiAgICBjb25zdCBwYXJhbXMgPSBzZXRQYXJhbSh0YXJnZXQucHJvdG90eXBlKTtcbiAgICBwYXJhbXMuYmFzZUhlYWRlcnMgPSBoZWFkZXJzO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG1ha2VQYXJhbShwYXJhbU5hbWU6IHN0cmluZykge1xuICByZXR1cm4gZnVuY3Rpb24gKGtleT86IHN0cmluZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBCYXNlQXBpLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSBzZXRQYXJhbShzZXRQYXJhbSh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgICBsZXQgdFBhcmFtcyA9IHBhcmFtc1twYXJhbU5hbWVdO1xuICAgICAgaWYgKHR5cGVvZiB0UGFyYW1zID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0UGFyYW1zID0gcGFyYW1zW3BhcmFtTmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRQYXJhbXMucHVzaCh7XG4gICAgICAgIGtleSxcbiAgICAgICAgaW5kZXgsXG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xufVxuXG4vKipcbiAqIFVSTOi3r+eUseWPguaVsFxuICogLSDmnInmlYjojIPlm7TvvJrmlrnms5Xlj4LmlbBcbiAqL1xuZXhwb3J0IGNvbnN0IFBhdGggPSBtYWtlUGFyYW0oJ3BhdGgnKTtcblxuLyoqXG4gKiBVUkwg5Y+C5pWwIGBRdWVyeVN0cmluZ2BcbiAqIC0g5pyJ5pWI6IyD5Zu077ya5pa55rOV5Y+C5pWwXG4gKi9cbmV4cG9ydCBjb25zdCBRdWVyeSA9IG1ha2VQYXJhbSgncXVlcnknKTtcblxuLyoqXG4gKiDlj4LmlbAgYEJvZHlgXG4gKiAtIOacieaViOiMg+WbtO+8muaWueazleWPguaVsFxuICovXG5leHBvcnQgY29uc3QgQm9keSA9IG1ha2VQYXJhbSgnYm9keScpKCk7XG5cbi8qKlxuICog5Y+C5pWwIGBoZWFkZXJzYFxuICogLSDmnInmlYjojIPlm7TvvJrmlrnms5Xlj4LmlbBcbiAqIC0g5ZCI5bm2IGBCYXNlSGVhZGVyc2BcbiAqL1xuZXhwb3J0IGNvbnN0IEhlYWRlcnMgPSBtYWtlUGFyYW0oJ2hlYWRlcnMnKTtcblxuLyoqXG4gKiBSZXF1ZXN0IFBheWxvYWRcbiAqIC0gU3VwcG9ydGVkIGJvZHkgKGxpa2VgUE9TVGAsIGBQVVRgKSBhcyBhIGJvZHkgZGF0YSwgZXF1aXZhbGVudCB0byBgQEJvZHlgXG4gKiAtIE5vdCBzdXBwb3J0ZWQgYm9keSAobGlrZSBgR0VUYCwgYERFTEVURWAgZXRjKSBhcyBhIGBRdWVyeVN0cmluZ2BcbiAqL1xuZXhwb3J0IGNvbnN0IFBheWxvYWQgPSBtYWtlUGFyYW0oJ3BheWxvYWQnKSgpO1xuXG5mdW5jdGlvbiBnZXRWYWxpZEFyZ3MoZGF0YTogYW55LCBrZXk6IHN0cmluZywgYXJnczogYW55W10pOiB7fSB8IHVuZGVmaW5lZCB7XG4gIGlmICghZGF0YVtrZXldIHx8ICFBcnJheS5pc0FycmF5KGRhdGFba2V5XSkgfHwgZGF0YVtrZXldLmxlbmd0aCA8PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gYXJnc1tkYXRhW2tleV1bMF0uaW5kZXhdO1xufVxuXG5mdW5jdGlvbiBnZW5Cb2R5KGRhdGE/OiBhbnksIHBheWxvYWQ/OiBhbnkpOiBhbnkge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCBBcnJheS5pc0FycmF5KHBheWxvYWQpKSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1vYmplY3Qtc3ByZWFkXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oW10sIGRhdGEsIHBheWxvYWQpO1xuICB9XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItb2JqZWN0LXNwcmVhZFxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZGF0YSwgcGF5bG9hZCk7XG59XG5cbmV4cG9ydCB0eXBlIE1FVEhPRF9UWVBFID0gJ09QVElPTlMnIHwgJ0dFVCcgfCAnUE9TVCcgfCAnREVMRVRFJyB8ICdQVVQnIHwgJ0hFQUQnIHwgJ1BBVENIJyB8ICdKU09OUCcgfCAnRk9STSc7XG5cbmZ1bmN0aW9uIG1ha2VNZXRob2QobWV0aG9kOiBNRVRIT0RfVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKHVybDogc3RyaW5nID0gJycsIG9wdGlvbnM/OiBIdHRwT3B0aW9ucykge1xuICAgIHJldHVybiAoX3RhcmdldDogQmFzZUFwaSwgdGFyZ2V0S2V5Pzogc3RyaW5nLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgICBkZXNjcmlwdG9yIS52YWx1ZSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gKHRoaXMgYXMgTnpTYWZlQW55KS5pbmplY3RvciBhcyBJbmplY3RvcjtcbiAgICAgICAgY29uc3QgaHR0cCA9IGluamVjdG9yLmdldChfSHR0cENsaWVudCwgbnVsbCkgYXMgX0h0dHBDbGllbnQ7XG4gICAgICAgIGlmIChodHRwID09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBOb3QgZm91bmQgJ19IdHRwQ2xpZW50JywgWW91IGNhbiBpbXBvcnQgJ0x4bGliVGhlbWVNb2R1bGUnICYmICdIdHRwQ2xpZW50TW9kdWxlJyBpbiB5b3VyIHJvb3QgbW9kdWxlLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFzZURhdGEgPSBzZXRQYXJhbSh0aGlzKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHNldFBhcmFtKGJhc2VEYXRhLCB0YXJnZXRLZXkpO1xuXG4gICAgICAgIGxldCByZXF1ZXN0VXJsID0gdXJsIHx8ICcnO1xuICAgICAgICByZXF1ZXN0VXJsID0gW2Jhc2VEYXRhLmJhc2VVcmwgfHwgJycsIHJlcXVlc3RVcmwuc3RhcnRzV2l0aCgnLycpID8gcmVxdWVzdFVybC5zdWJzdHIoMSkgOiByZXF1ZXN0VXJsXS5qb2luKCcvJyk7XG4gICAgICAgIC8vIGZpeCBsYXN0IHNwbGl0XG4gICAgICAgIGlmIChyZXF1ZXN0VXJsLmxlbmd0aCA+IDEgJiYgcmVxdWVzdFVybC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgcmVxdWVzdFVybCA9IHJlcXVlc3RVcmwuc3Vic3RyKDAsIHJlcXVlc3RVcmwubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5hY2wpIHtcbiAgICAgICAgICBjb25zdCBhY2xTcnYgPSBpbmplY3Rvci5nZXQoQUNMU2VydmljZSwgbnVsbCk7XG4gICAgICAgICAgaWYgKGFjbFNydiAmJiAhYWNsU3J2LmNhbihvcHRpb25zLmFjbCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHtcbiAgICAgICAgICAgICAgdXJsOiByZXF1ZXN0VXJsLFxuICAgICAgICAgICAgICBzdGF0dXM6IDQwMSxcbiAgICAgICAgICAgICAgc3RhdHVzVGV4dDogYEZyb20gSHR0cCBEZWNvcmF0b3JgLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLmFjbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3RVcmwgPSByZXF1ZXN0VXJsLnJlcGxhY2UoLzo6L2csICdeXicpO1xuICAgICAgICAoKGRhdGEucGF0aCBhcyBQYXJhbVR5cGVbXSkgfHwgW10pXG4gICAgICAgICAgLmZpbHRlcih3ID0+IHR5cGVvZiBhcmdzW3cuaW5kZXhdICE9PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAuZm9yRWFjaCgoaTogUGFyYW1UeXBlKSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0VXJsID0gcmVxdWVzdFVybC5yZXBsYWNlKG5ldyBSZWdFeHAoYDoke2kua2V5fWAsICdnJyksIGVuY29kZVVSSUNvbXBvbmVudChhcmdzW2kuaW5kZXhdKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIHJlcXVlc3RVcmwgPSByZXF1ZXN0VXJsLnJlcGxhY2UoL1xcXlxcXi9nLCBgOmApO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IChkYXRhLnF1ZXJ5IHx8IFtdKS5yZWR1Y2UoKHA6IE56U2FmZUFueSwgaTogUGFyYW1UeXBlKSA9PiB7XG4gICAgICAgICAgcFtpLmtleV0gPSBhcmdzW2kuaW5kZXhdO1xuICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IChkYXRhLmhlYWRlcnMgfHwgW10pLnJlZHVjZSgocDogTnpTYWZlQW55LCBpOiBQYXJhbVR5cGUpID0+IHtcbiAgICAgICAgICBwW2kua2V5XSA9IGFyZ3NbaS5pbmRleF07XG4gICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgICBpZiAobWV0aG9kID09PSAnRk9STScpIHtcbiAgICAgICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGdldFZhbGlkQXJncyhkYXRhLCAncGF5bG9hZCcsIGFyZ3MpO1xuICAgICAgICBjb25zdCBzdXBwb3J0ZWRCb2R5ID0gbWV0aG9kID09PSAnUE9TVCcgfHwgbWV0aG9kID09PSAnUFVUJztcblxuICAgICAgICByZXR1cm4gaHR0cC5yZXF1ZXN0KG1ldGhvZCwgcmVxdWVzdFVybCwge1xuICAgICAgICAgIGJvZHk6IHN1cHBvcnRlZEJvZHkgPyBnZW5Cb2R5KGdldFZhbGlkQXJncyhkYXRhLCAnYm9keScsIGFyZ3MpLCBwYXlsb2FkKSA6IG51bGwsXG4gICAgICAgICAgcGFyYW1zOiAhc3VwcG9ydGVkQm9keSA/IHsgLi4ucGFyYW1zLCAuLi5wYXlsb2FkIH0gOiBwYXJhbXMsXG4gICAgICAgICAgaGVhZGVyczogeyAuLi5iYXNlRGF0YS5iYXNlSGVhZGVycywgLi4uaGVhZGVycyB9LFxuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBgT1BUSU9OU2Ag6K+35rGCXG4gKiAtIOacieaViOiMg+WbtO+8muaWueazlVxuICovXG5leHBvcnQgY29uc3QgT1BUSU9OUyA9IG1ha2VNZXRob2QoJ09QVElPTlMnKTtcblxuLyoqXG4gKiBgR0VUYCDor7fmsYJcbiAqIC0g5pyJ5pWI6IyD5Zu077ya5pa55rOVXG4gKi9cbmV4cG9ydCBjb25zdCBHRVQgPSBtYWtlTWV0aG9kKCdHRVQnKTtcblxuLyoqXG4gKiBgUE9TVGAg6K+35rGCXG4gKiAtIOacieaViOiMg+WbtO+8muaWueazlVxuICovXG5leHBvcnQgY29uc3QgUE9TVCA9IG1ha2VNZXRob2QoJ1BPU1QnKTtcblxuLyoqXG4gKiBgREVMRVRFYCDor7fmsYJcbiAqIC0g5pyJ5pWI6IyD5Zu077ya5pa55rOVXG4gKi9cbmV4cG9ydCBjb25zdCBERUxFVEUgPSBtYWtlTWV0aG9kKCdERUxFVEUnKTtcblxuLyoqXG4gKiBgUFVUYCDor7fmsYJcbiAqIC0g5pyJ5pWI6IyD5Zu077ya5pa55rOVXG4gKi9cbmV4cG9ydCBjb25zdCBQVVQgPSBtYWtlTWV0aG9kKCdQVVQnKTtcblxuLyoqXG4gKiBgSEVBRGAg6K+35rGCXG4gKiAtIOacieaViOiMg+WbtO+8muaWueazlVxuICovXG5leHBvcnQgY29uc3QgSEVBRCA9IG1ha2VNZXRob2QoJ0hFQUQnKTtcblxuLyoqXG4gKiBgUEFUQ0hgIOivt+axglxuICogLSDmnInmlYjojIPlm7TvvJrmlrnms5VcbiAqL1xuZXhwb3J0IGNvbnN0IFBBVENIID0gbWFrZU1ldGhvZCgnUEFUQ0gnKTtcblxuLyoqXG4gKiBgSlNPTlBgIOivt+axglxuICogLSDmnInmlYjojIPlm7TvvJrmlrnms5VcbiAqL1xuZXhwb3J0IGNvbnN0IEpTT05QID0gbWFrZU1ldGhvZCgnSlNPTlAnKTtcblxuLyoqXG4gKiBgRk9STWAg6K+35rGCXG4gKiAtIOacieaViOiMg+WbtO+8muaWueazlVxuICovXG5leHBvcnQgY29uc3QgRk9STSA9IG1ha2VNZXRob2QoJ0ZPUk0nKTtcbiJdfQ==