ngx-airbrush
Version:
Angular client for jsonapi/Graphiti backends
422 lines • 26.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { map, catchError } from 'rxjs/operators';
import { throwError } from 'rxjs';
import { ServiceMetadata, ModelMetadata } from '../lib/decorators/symboles';
import { ResourceBase } from './resource-base.model';
import { Scope } from './scope';
/**
* @record
*/
export function Response() { }
/**
* @abstract
* @template T
*/
var /**
* @abstract
* @template T
*/
JsonapiBaseService = /** @class */ (function () {
function JsonapiBaseService(http) {
this.http = http;
}
/**
* @param {?=} options
* @return {?}
*/
JsonapiBaseService.prototype.all = /**
* @param {?=} options
* @return {?}
*/
function (options) {
var _this = this;
/** @type {?} */
var url = this.buildUrl();
options = options || {};
/** @type {?} */
var params = options.params;
/** @type {?} */
var request = this.http.get(url, { params: params, observe: 'response' }).pipe(map((/**
* @param {?} res
* @return {?}
*/
function (res) { return _this.successful(res); })));
if (options.metadata) {
return request.pipe(map((/**
* @param {?} res
* @return {?}
*/
function (res) { return (({ data: _this.extract(res), meta: _this.extractMeta(res) })); })), catchError((/**
* @param {?} res
* @return {?}
*/
function (res) { return _this.handleError(res); })));
} // else
return request.pipe(map((/**
* @param {?} res
* @return {?}
*/
function (res) { return _this.extract(res); })), catchError((/**
* @param {?} res
* @return {?}
*/
function (res) { return _this.handleError(res); })));
};
/**
* @param {?} id
* @param {?=} params
* @return {?}
*/
JsonapiBaseService.prototype.find = /**
* @param {?} id
* @param {?=} params
* @return {?}
*/
function (id, params) {
var _this = this;
/** @type {?} */
var url = this.buildUrl(id);
return this.http.get(url, { params: params, observe: 'response' }).pipe(map((/**
* @param {?} res
* @return {?}
*/
function (res) { return _this.successful(res); })), map((/**
* @param {?} res
* @return {?}
*/
function (res) { return _this.extract(res); })), catchError((/**
* @param {?} res
* @return {?}
*/
function (res) { return _this.handleError(res); })));
};
/**
* @param {?} model
* @return {?}
*/
JsonapiBaseService.prototype.save = /**
* @param {?} model
* @return {?}
*/
function (model) {
var _this = this;
/** @type {?} */
var url = this.buildUrl(model.id);
/** @type {?} */
var body = model.toJsonapi();
/** @type {?} */
var httpCall;
if (model.id) {
httpCall = (/** @type {?} */ (this.http.put(url, body, { observe: 'response' })));
}
else {
httpCall = (/** @type {?} */ (this.http.post(url, body, { observe: 'response' })));
}
return httpCall.pipe(map((/**
* @param {?} res
* @return {?}
*/
function (res) { return _this.successful(res); })), map((/**
* @param {?} res
* @return {?}
*/
function (res) { return _this.extract(res); })), catchError((/**
* @param {?} res
* @return {?}
*/
function (res) { return _this.handleError(res); })));
};
/**
* @param {?} id
* @return {?}
*/
JsonapiBaseService.prototype.delete = /**
* @param {?} id
* @return {?}
*/
function (id) {
var _this = this;
/** @type {?} */
var url = this.buildUrl(id);
return this.http.delete(url, { observe: 'response' }).pipe(map((/**
* @param {?} res
* @return {?}
*/
function (res) { return _this.successful(res); })), catchError((/**
* @param {?} res
* @return {?}
*/
function (res) { return _this.handleError(res); })));
};
/**
* @protected
* @param {?} response
* @return {?}
*/
JsonapiBaseService.prototype.extractMeta = /**
* @protected
* @param {?} response
* @return {?}
*/
function (response) {
/** @type {?} */
var body = response.body;
/** @type {?} */
var meta = body.meta;
return meta;
};
/**
* @protected
* @param {?} response
* @return {?}
*/
JsonapiBaseService.prototype.extract = /**
* @protected
* @param {?} response
* @return {?}
*/
function (response) {
var _this = this;
/** @type {?} */
var body = response.body;
/** @type {?} */
var records = body.data;
if (Array.isArray(records)) {
/** @type {?} */
var models_1 = [];
records.forEach((/**
* @param {?} data
* @return {?}
*/
function (data) {
/** @type {?} */
var model = _this.deserializeModel({ data: data, included: body.included });
models_1.push(model);
}));
return models_1;
}
else {
/** @type {?} */
var model = this.deserializeModel(body);
return model;
}
};
/**
* @protected
* @param {?} data
* @return {?}
*/
JsonapiBaseService.prototype.deserializeModel = /**
* @protected
* @param {?} data
* @return {?}
*/
function (data) {
/** @type {?} */
var modelType = this.getModelType();
return ResourceBase.getModel(modelType, data);
};
/**
* @protected
* @param {?} error
* @return {?}
*/
JsonapiBaseService.prototype.handleError = /**
* @protected
* @param {?} error
* @return {?}
*/
function (error) {
return throwError(error);
};
/**
* @protected
* @param {?=} id
* @return {?}
*/
JsonapiBaseService.prototype.buildUrl = /**
* @protected
* @param {?=} id
* @return {?}
*/
function (id) {
/** @type {?} */
var serviceConfig = this.getServiceConfig();
/** @type {?} */
var modelConfig = this.getModelConfig();
/** @type {?} */
var baseUrl = this.baseUrl;
/** @type {?} */
var apiVersion = serviceConfig.apiVersion;
/** @type {?} */
var endpointUrl = serviceConfig.endpointUrl || modelConfig.type;
/** @type {?} */
var url = [baseUrl, apiVersion, endpointUrl, id].filter((/**
* @param {?} itm
* @return {?}
*/
function (itm) { return !!itm; })).join('/');
return url;
};
/**
* @private
* @return {?}
*/
JsonapiBaseService.prototype.getModelType = /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var serviceConfig = this.getServiceConfig();
return serviceConfig.model();
};
/**
* @return {?}
*/
JsonapiBaseService.prototype.getModelConfig = /**
* @return {?}
*/
function () {
return Reflect.getMetadata(ModelMetadata, this.getModelType());
};
/**
* @return {?}
*/
JsonapiBaseService.prototype.getServiceConfig = /**
* @return {?}
*/
function () {
return Reflect.getMetadata(ServiceMetadata, this.className);
};
/**
* @protected
* @param {?} response
* @return {?}
*/
JsonapiBaseService.prototype.successful = /**
* @protected
* @param {?} response
* @return {?}
*/
function (response) {
/** @type {?} */
var code = response.status;
if (code < 400) {
return response;
}
throw (response);
};
/**
* @param {?} pageNumber
* @return {?}
*/
JsonapiBaseService.prototype.page = /**
* @param {?} pageNumber
* @return {?}
*/
function (pageNumber) {
/** @type {?} */
var scope = new Scope(this);
return scope.page(pageNumber);
};
/**
* @param {?} size
* @return {?}
*/
JsonapiBaseService.prototype.per = /**
* @param {?} size
* @return {?}
*/
function (size) {
/** @type {?} */
var scope = new Scope(this);
return scope.per(size);
};
/**
* @param {?} clause
* @return {?}
*/
JsonapiBaseService.prototype.where = /**
* @param {?} clause
* @return {?}
*/
function (clause) {
/** @type {?} */
var scope = new Scope(this);
return scope.where(clause);
};
/**
* @param {?} clause
* @return {?}
*/
JsonapiBaseService.prototype.stats = /**
* @param {?} clause
* @return {?}
*/
function (clause) {
/** @type {?} */
var scope = new Scope(this);
return scope.stats(clause);
};
/**
* @param {?} clause
* @return {?}
*/
JsonapiBaseService.prototype.order = /**
* @param {?} clause
* @return {?}
*/
function (clause) {
/** @type {?} */
var scope = new Scope(this);
return scope.order(clause);
};
/**
* @param {?} clause
* @return {?}
*/
JsonapiBaseService.prototype.select = /**
* @param {?} clause
* @return {?}
*/
function (clause) {
/** @type {?} */
var scope = new Scope(this);
return scope.select(clause);
};
/**
* @param {?} clause
* @return {?}
*/
JsonapiBaseService.prototype.includes = /**
* @param {?} clause
* @return {?}
*/
function (clause) {
/** @type {?} */
var scope = new Scope(this);
return scope.includes(clause);
};
return JsonapiBaseService;
}());
/**
* @abstract
* @template T
*/
export { JsonapiBaseService };
if (false) {
/** @type {?} */
JsonapiBaseService.prototype.baseUrl;
/** @type {?} */
JsonapiBaseService.prototype.className;
/**
* @type {?}
* @protected
*/
JsonapiBaseService.prototype.http;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmFwaS1iYXNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYWlyYnJ1c2gvIiwic291cmNlcyI6WyJsaWIvanNvbmFwaS1iYXNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUc5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7O0FBSWhDLDhCQUFrRTs7Ozs7QUFFbEU7Ozs7O0lBS0UsNEJBQXNCLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7SUFBRyxDQUFDOzs7OztJQUtuQyxnQ0FBRzs7OztJQUFWLFVBQVcsT0FBcUQ7UUFBaEUsaUJBbUJDOztZQWxCTyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUMzQixPQUFPLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQzs7WUFFbEIsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNOztZQUN2QixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxRQUFBLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0RSxHQUFHOzs7O1FBQUMsVUFBQyxHQUFhLElBQUssT0FBQSxLQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFwQixDQUFvQixFQUFDLENBQzdDO1FBRUQsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3BCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FDakIsR0FBRzs7OztZQUFDLFVBQUMs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QUFiLFVBQWMsTUFBc0M7O1lBQzVDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDN0IsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLENBQUM7Ozs7O0lBRU0scUNBQVE7Ozs7SUFBZixVQUFnQixNQUFvQjs7WUFDNUIsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztRQUM3QixPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNILHlCQUFDO0FBQUQsQ0FBQyxBQXZLRCxJQXVLQzs7Ozs7Ozs7SUF0S0MscUNBQXlCOztJQUN6Qix1Q0FBd0I7Ozs7O0lBR1osa0NBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFJlc3BvbnNlLCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHRocm93RXJyb3IsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2VydmljZURlY29yYXRvck9wdGlvbnMsIE1vZGVsRGVjb3JhdG9yT3B0aW9ucyB9IGZyb20gJy4vZGVjb3JhdG9ycy9vcHRpb24uaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTZXJ2aWNlTWV0YWRhdGEsIE1vZGVsTWV0YWRhdGEgfSBmcm9tICcuLi9saWIvZGVjb3JhdG9ycy9zeW1ib2xlcyc7XG5pbXBvcnQgeyBSZXNvdXJjZUJhc2UgfSBmcm9tICcuL3Jlc291cmNlLWJhc2UubW9kZWwnO1xuaW1wb3J0IHsgSnNvbmFwaVJlc3BvbnNlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2pzb25hcGkuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNjb3BlIH0gZnJvbSAnLi9zY29wZSc7XG5pbXBvcnQgeyBTb3J0U2NvcGUsIEZpZWxkU2NvcGUsIEZpbHRlclNjb3BlLCBTdGF0c1Njb3BlLCBJbmNsdWRlU2NvcGUgfSBmcm9tICcuL2ludGVyZmFjZXMvcXVlcnkuaW50ZXJmYWNlJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlIGV4dGVuZHMgSHR0cFJlc3BvbnNlPEpzb25hcGlSZXNwb25zZT4ge31cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEpzb25hcGlCYXNlU2VydmljZTxUIGV4dGVuZHMgUmVzb3VyY2VCYXNlPiB7XG4gIGFic3RyYWN0IGJhc2VVcmw6IHN0cmluZztcbiAgYWJzdHJhY3QgY2xhc3NOYW1lOiBhbnk7XG5cblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCkge31cblxuICBwdWJsaWMgYWxsKG9wdGlvbnM/OiB7IHBhcmFtcz86IEh0dHBQYXJhbXMgfSk6IE9ic2VydmFibGU8VFtdPjtcbiAgcHVibGljIGFsbChvcHRpb25zOiB7IHBhcmFtcz86IEh0dHBQYXJhbXMsIG1ldGFkYXRhOiB0cnVlIH0pOiBPYnNlcnZhYmxlPHsgZGF0YTogVFtdLCBtZXRhOiBhbnkgfT47XG5cbiAgcHVibGljIGFsbChvcHRpb25zPzogeyBwYXJhbXM/OiBIdHRwUGFyYW1zLCBtZXRhZGF0YT86IGJvb2xlYW4gfSk6IE9ic2VydmFibGU8VFtdPiB8IE9ic2VydmFibGU8eyBkYXRhOiBUW10sIG1ldGE6IGFueSB9PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybCgpO1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgY29uc3QgcGFyYW1zID0gb3B0aW9ucy5wYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuaHR0cC5nZXQodXJsLCB7IHBhcmFtcywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS5waXBlKFxuICAgICAgbWFwKChyZXM6IFJlc3BvbnNlKSA9PiB0aGlzLnN1Y2Nlc3NmdWwocmVzKSksXG4gICAgKTtcblxuICAgIGlmIChvcHRpb25zLm1ldGFkYXRhKSB7XG4gICAgICByZXR1cm4gcmVxdWVzdC5waXBlKFxuICAgICAgICBtYXAoKHJlczogUmVzcG9uc2UpID0+ICgoeyBkYXRhOiB0aGlzLmV4dHJhY3QocmVzKSwgbWV0YTogdGhpcy5leHRyYWN0TWV0YShyZXMpIH0pKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKHJlczogYW55KSA9PiB0aGlzLmhhbmRsZUVycm9yKHJlcykpXG4gICAgICApO1xuICAgIH0gLy8gZWxzZVxuICAgIHJldHVybiByZXF1ZXN0LnBpcGUoXG4gICAgICBtYXAoKHJlczogUmVzcG9uc2UpID0+IHRoaXMuZXh0cmFjdChyZXMpKSxcbiAgICAgIGNhdGNoRXJyb3IoKHJlczogYW55KSA9PiB0aGlzLmhhbmRsZUVycm9yKHJlcykpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kKGlkOiBzdHJpbmcsIHBhcmFtcz86IEh0dHBQYXJhbXMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKGlkKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwgeyBwYXJhbXMsIG9ic2VydmU6ICdyZXNwb25zZScgfSkucGlwZShcbiAgICAgIG1hcCgocmVzOiBSZXNwb25zZSkgPT4gdGhpcy5zdWNjZXNzZnVsKHJlcykpLFxuICAgICAgbWFwKChyZXM6IFJlc3BvbnNlKSA9PiB0aGlzLmV4dHJhY3QocmVzKSksXG4gICAgICBjYXRjaEVycm9yKChyZXM6IGFueSkgPT4gdGhpcy5oYW5kbGVFcnJvcihyZXMpKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZShtb2RlbDogVCk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwobW9kZWwuaWQpO1xuXG4gICAgY29uc3QgYm9keSA9IG1vZGVsLnRvSnNvbmFwaSgpO1xuXG4gICAgbGV0IGh0dHBDYWxsOiBPYnNlcnZhYmxlPFJlc3BvbnNlPjtcbiAgICBpZiAobW9kZWwuaWQpIHtcbiAgICAgIGh0dHBDYWxsID0gdGhpcy5odHRwLnB1dDxvYmplY3Q+KHVybCwgYm9keSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pIGFzIE9ic2VydmFibGU8UmVzcG9uc2U+O1xuICAgIH0gZWxzZSB7XG4gICAgICBodHRwQ2FsbCA9IHRoaXMuaHR0cC5wb3N0PG9iamVjdD4odXJsLCBib2R5LCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkgYXMgT2JzZXJ2YWJsZTxSZXNwb25zZT47XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0dHBDYWxsLnBpcGUoXG4gICAgICBtYXAoKHJlczogUmVzcG9uc2UpID0+IHRoaXMuc3VjY2Vzc2Z1bChyZXMpKSxcbiAgICAgIG1hcCgocmVzOiBSZXNwb25zZSkgPT4gdGhpcy5leHRyYWN0KHJlcykpLFxuICAgICAgY2F0Y2hFcnJvcigocmVzOiBhbnkpID0+IHRoaXMuaGFuZGxlRXJyb3IocmVzKSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKGlkKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKHVybCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlczogUmVzcG9uc2UpID0+IHRoaXMuc3VjY2Vzc2Z1bChyZXMpKSxcbiAgICAgIGNhdGNoRXJyb3IoKHJlczogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IocmVzKSlcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGV4dHJhY3RNZXRhKHJlc3BvbnNlOiBSZXNwb25zZSkge1xuICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZS5ib2R5O1xuICAgIGNvbnN0IG1ldGEgPSBib2R5Lm1ldGE7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cblxuICBwcm90ZWN0ZWQgZXh0cmFjdChyZXNwb25zZTogUmVzcG9uc2UpOiBUIHwgVFtdIHtcbiAgICBjb25zdCBib2R5ID0gcmVzcG9uc2UuYm9keTtcbiAgICBjb25zdCByZWNvcmRzID0gYm9keS5kYXRhO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVjb3JkcykpIHtcbiAgICAgIGNvbnN0IG1vZGVsczogVFtdID0gW107XG4gICAgICByZWNvcmRzLmZvckVhY2goKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuZGVzZXJpYWxpemVNb2RlbCh7IGRhdGEsIGluY2x1ZGVkOiBib2R5LmluY2x1ZGVkIH0pO1xuICAgICAgICBtb2RlbHMucHVzaChtb2RlbCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBtb2RlbHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5kZXNlcmlhbGl6ZU1vZGVsKGJvZHkpO1xuICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBkZXNlcmlhbGl6ZU1vZGVsKGRhdGE6IGFueSk6IFQge1xuICAgIGNvbnN0IG1vZGVsVHlwZSA9IHRoaXMuZ2V0TW9kZWxUeXBlKCk7XG4gICAgcmV0dXJuIFJlc291cmNlQmFzZS5nZXRNb2RlbDxUPihtb2RlbFR5cGUsIGRhdGEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUVycm9yKGVycm9yOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZFVybChpZD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VydmljZUNvbmZpZyA9IHRoaXMuZ2V0U2VydmljZUNvbmZpZygpO1xuICAgIGNvbnN0IG1vZGVsQ29uZmlnID0gdGhpcy5nZXRNb2RlbENvbmZpZygpO1xuXG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXMuYmFzZVVybDtcbiAgICBjb25zdCBhcGlWZXJzaW9uID0gc2VydmljZUNvbmZpZy5hcGlWZXJzaW9uO1xuICAgIGNvbnN0IGVuZHBvaW50VXJsOiBzdHJpbmcgPSBzZXJ2aWNlQ29uZmlnLmVuZHBvaW50VXJsIHx8IG1vZGVsQ29uZmlnLnR5cGU7XG5cbiAgICBjb25zdCB1cmw6IHN0cmluZyA9IFtiYXNlVXJsLCBhcGlWZXJzaW9uLCBlbmRwb2ludFVybCwgaWRdLmZpbHRlcihpdG0gPT4gISFpdG0pLmpvaW4oJy8nKTtcblxuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICBwcml2YXRlIGdldE1vZGVsVHlwZSgpIHtcbiAgICBjb25zdCBzZXJ2aWNlQ29uZmlnID0gdGhpcy5nZXRTZXJ2aWNlQ29uZmlnKCk7XG4gICAgcmV0dXJuIHNlcnZpY2VDb25maWcubW9kZWwoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNb2RlbENvbmZpZygpOiBNb2RlbERlY29yYXRvck9wdGlvbnMge1xuICAgIHJldHVybiBSZWZsZWN0LmdldE1ldGFkYXRhKE1vZGVsTWV0YWRhdGEsIHRoaXMuZ2V0TW9kZWxUeXBlKCkpO1xuICB9XG5cbiAgcHVibGljIGdldFNlcnZpY2VDb25maWcoKTogU2VydmljZURlY29yYXRvck9wdGlvbnMge1xuICAgIHJldHVybiBSZWZsZWN0LmdldE1ldGFkYXRhKFNlcnZpY2VNZXRhZGF0YSwgdGhpcy5jbGFzc05hbWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1Y2Nlc3NmdWwocmVzcG9uc2U6IFJlc3BvbnNlKTogUmVzcG9uc2Uge1xuICAgIGNvbnN0IGNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgaWYgKCBjb2RlIDwgNDAwICkgeyByZXR1cm4gcmVzcG9uc2U7IH1cbiAgICB0aHJvdyhyZXNwb25zZSk7XG4gIH1cblxuICBwdWJsaWMgcGFnZShwYWdlTnVtYmVyOiBudW1iZXIpOiBTY29wZTxUPiB7XG4gICAgY29uc3Qgc2NvcGUgPSBuZXcgU2NvcGUodGhpcyk7XG4gICAgcmV0dXJuIHNjb3BlLnBhZ2UocGFnZU51bWJlcik7XG4gIH1cblxuICBwdWJsaWMgcGVyKHNpemU6IG51bWJlcik6IFNjb3BlPFQ+IHtcbiAgICBjb25zdCBzY29wZSA9IG5ldyBTY29wZSh0aGlzKTtcbiAgICByZXR1cm4gc2NvcGUucGVyKHNpemUpO1xuICB9XG5cbiAgcHVibGljIHdoZXJlKGNsYXVzZTogRmlsdGVyU2NvcGUpOiBTY29wZTxUPiB7XG4gICAgY29uc3Qgc2NvcGUgPSBuZXcgU2NvcGUodGhpcyk7XG4gICAgcmV0dXJuIHNjb3BlLndoZXJlKGNsYXVzZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdHMoY2xhdXNlOiBTdGF0c1Njb3BlKTogU2NvcGU8VD4ge1xuICAgIGNvbnN0IHNjb3BlID0gbmV3IFNjb3BlKHRoaXMpO1xuICAgIHJldHVybiBzY29wZS5zdGF0cyhjbGF1c2UpO1xuICB9XG5cbiAgcHVibGljIG9yZGVyKGNsYXVzZTogU29ydFNjb3BlIHwgc3RyaW5nKTogU2NvcGU8VD4ge1xuICAgIGNvbnN0IHNjb3BlID0gbmV3IFNjb3BlKHRoaXMpO1xuICAgIHJldHVybiBzY29wZS5vcmRlcihjbGF1c2UpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdChjbGF1c2U6IEZpZWxkU2NvcGUgfCBzdHJpbmcgfCBzdHJpbmdbXSk6IFNjb3BlPFQ+IHtcbiAgICBjb25zdCBzY29wZSA9IG5ldyBTY29wZSh0aGlzKTtcbiAgICByZXR1cm4gc2NvcGUuc2VsZWN0KGNsYXVzZSk7XG4gIH1cblxuICBwdWJsaWMgaW5jbHVkZXMoY2xhdXNlOiBJbmNsdWRlU2NvcGUpOiBTY29wZTxUPiB7XG4gICAgY29uc3Qgc2NvcGUgPSBuZXcgU2NvcGUodGhpcyk7XG4gICAgcmV0dXJuIHNjb3BlLmluY2x1ZGVzKGNsYXVzZSk7XG4gIH1cbn1cbiJdfQ==