UNPKG

ngx-airbrush

Version:

Angular client for jsonapi/Graphiti backends

422 lines 26.1 kB
/** * @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==