New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@firestitch/api

Package Overview
Dependencies
Maintainers
7
Versions
126
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@firestitch/api - npm Package Compare versions

Comparing version 12.3.10 to 12.4.0

6

app/classes/api-file.d.ts

@@ -1,4 +0,4 @@

import { Observable } from "rxjs";
import { FsApi } from "../services";
import { SafeResourceUrl, SafeUrl } from "@angular/platform-browser";
import { SafeResourceUrl, SafeUrl } from '@angular/platform-browser';
import { Observable } from 'rxjs';
import { FsApi } from '../services';
export declare class FsApiFile {

@@ -5,0 +5,0 @@ private _url;

@@ -1,12 +0,12 @@

import { HttpXhrBackend } from '@angular/common/http';
import { DomSanitizer } from '@angular/platform-browser';
import { Queue } from '@firestitch/common';
import { Observable } from 'rxjs';
import { HttpXhrBackend } from '@angular/common/http';
import { FsApiFile } from '../classes';
import { ApiCache } from '../classes/api-cache';
import { FsApiConfig } from '../classes/api-config';
import { FsApiResponseBodyHandler } from '../handlers/response-body.handler';
import { FsApiResponseHandler } from '../handlers/response.handler';
import { FsApiResponseBodyHandler } from '../handlers/response-body.handler';
import { RequestConfig } from '../interfaces';
import { IModuleConfig } from '../interfaces/module-config.interface';
import { RequestConfig } from '../interfaces';
import { ApiCache } from '../classes/api-cache';
import { FsApiFile } from '../classes';
import { DomSanitizer } from '@angular/platform-browser';
import * as i0 from "@angular/core";

@@ -17,11 +17,13 @@ export declare class FsApi {

private _sanitizer;
private config;
private httpInterceptors;
private requestInterceptors;
private responseHandler;
private responseBodyHandler;
private _config;
private _httpInterceptors;
private _requestInterceptors;
private _responseHandler;
private _responseBodyHandler;
events: any[];
private readonly _queue;
private _cache;
constructor(_apiConfig: FsApiConfig, _http: HttpXhrBackend, _sanitizer: DomSanitizer, config: IModuleConfig, httpInterceptors: any, requestInterceptors: any, responseHandler: FsApiResponseHandler, responseBodyHandler: FsApiResponseBodyHandler);
private _responseHandlers;
private _responseBodyHandlers;
constructor(_apiConfig: FsApiConfig, _http: HttpXhrBackend, _sanitizer: DomSanitizer, _config: IModuleConfig, _httpInterceptors: any, _requestInterceptors: any, _responseHandler: FsApiResponseHandler, _responseBodyHandler: FsApiResponseBodyHandler);
createApiFile(url: string, filename?: string): FsApiFile;

@@ -32,5 +34,5 @@ get queue(): Queue;

get(url: any, query?: any, config?: RequestConfig): Observable<any>;
post(url: any, data?: object, config?: RequestConfig): Observable<any>;
put(url: any, data?: object, config?: RequestConfig): Observable<any>;
delete(url: any, data?: object, config?: RequestConfig): Observable<any>;
post(url: any, data?: any, config?: RequestConfig): Observable<any>;
put(url: any, data?: any, config?: RequestConfig): Observable<any>;
delete(url: any, data?: any, config?: RequestConfig): Observable<any>;
request(method: string, url: string, data?: object, config?: RequestConfig): Observable<any>;

@@ -37,0 +39,0 @@ /**

(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common/http'), require('@angular/core'), require('@angular/common'), require('@firestitch/common'), require('rxjs'), require('rxjs/operators'), require('date-fns'), require('@firestitch/date'), require('@angular/platform-browser')) :
typeof define === 'function' && define.amd ? define('@firestitch/api', ['exports', '@angular/common/http', '@angular/core', '@angular/common', '@firestitch/common', 'rxjs', 'rxjs/operators', 'date-fns', '@firestitch/date', '@angular/platform-browser'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.firestitch = global.firestitch || {}, global.firestitch.api = {}), global.ng.common.http, global.ng.core, global.ng.common, global.common, global.rxjs, global.rxjs.operators, global.dateFns, global.date, global.ng.platformBrowser));
})(this, (function (exports, i2, i0, common$1, common, rxjs, operators, dateFns, date, i3) { 'use strict';
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core'), require('@angular/common/http'), require('@firestitch/common'), require('rxjs'), require('rxjs/operators'), require('date-fns'), require('@firestitch/date'), require('@angular/platform-browser')) :
typeof define === 'function' && define.amd ? define('@firestitch/api', ['exports', '@angular/common', '@angular/core', '@angular/common/http', '@firestitch/common', 'rxjs', 'rxjs/operators', 'date-fns', '@firestitch/date', '@angular/platform-browser'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.firestitch = global.firestitch || {}, global.firestitch.api = {}), global.ng.common, global.ng.core, global.ng.common.http, global.common, global.rxjs, global.rxjs.operators, global.dateFns, global.date, global.ng.platformBrowser));
})(this, (function (exports, common$1, i0, i2, common, rxjs, operators, dateFns, date, i3) { 'use strict';

@@ -25,11 +25,47 @@ function _interopNamespace(e) {

var i0__namespace = /*#__PURE__*/_interopNamespace(i0);
var i2__namespace = /*#__PURE__*/_interopNamespace(i2);
var i0__namespace = /*#__PURE__*/_interopNamespace(i0);
var i3__namespace = /*#__PURE__*/_interopNamespace(i3);
var FS_API_REQUEST_INTERCEPTOR = new i0.InjectionToken('fs-api.request_interceptor');
var FS_API_RESPONSE_HANDLER = new i0.InjectionToken('fs-api.response_handler');
var FS_API_RESPONSE_DATA_HANDLER = new i0.InjectionToken('fs-api.response_data_handler');
var FS_API_CONFIG = new i0.InjectionToken('fs-api.config');
exports.ResponseType = void 0;
(function (ResponseType) {
ResponseType["Json"] = "json";
ResponseType["Text"] = "text";
ResponseType["ArrayBuffer"] = "arraybuffer";
ResponseType["Blob"] = "blob";
})(exports.ResponseType || (exports.ResponseType = {}));
var FsApiConfig = /** @class */ (function () {
function FsApiConfig(config) {
this.config = config;
/** A key value store for the request headers. */
this.headers = {};
this.encoding = 'json';
this.interceptors = true;
this.handlers = true;
this.key = null;
this.query = {};
this.reportProgress = false;
this.responseType = exports.ResponseType.Json;
Object.assign(this, config || {});
}
/** Adds or overrides a header value based on the name */
FsApiConfig.prototype.appendHeader = function (name, value) {
this.headers[name] = value;
};
return FsApiConfig;
}());
FsApiConfig.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsApiConfig, deps: [{ token: 'FsApiConfig', optional: true }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
FsApiConfig.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsApiConfig });
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsApiConfig, decorators: [{
type: i0.Injectable
}], ctorParameters: function () {
return [{ type: undefined, decorators: [{
type: i0.Optional
}, {
type: i0.Inject,
args: ['FsApiConfig']
}] }];
} });
/*! *****************************************************************************

@@ -353,43 +389,139 @@ Copyright (c) Microsoft Corporation.

exports.ResponseType = void 0;
(function (ResponseType) {
ResponseType["Json"] = "json";
ResponseType["Text"] = "text";
ResponseType["ArrayBuffer"] = "arraybuffer";
ResponseType["Blob"] = "blob";
})(exports.ResponseType || (exports.ResponseType = {}));
var FsApiConfig = /** @class */ (function () {
function FsApiConfig(config) {
this.config = config;
/** A key value store for the request headers. */
this.headers = {};
this.encoding = 'json';
this.interceptors = true;
this.handlers = true;
this.key = null;
this.query = {};
this.reportProgress = false;
this.responseType = exports.ResponseType.Json;
Object.assign(this, config || {});
var FsApiFile = /** @class */ (function () {
function FsApiFile(api, url, filename) {
this._url = url;
this._api = api;
this._name = filename;
if (!this._name) {
this._name = (url || '').replace(/\?.*/, '');
this._name = this._name.substring(this._name.lastIndexOf('/') + 1);
}
}
/** Adds or overrides a header value based on the name */
FsApiConfig.prototype.appendHeader = function (name, value) {
this.headers[name] = value;
Object.defineProperty(FsApiFile.prototype, "name", {
get: function () {
return this._name;
},
enumerable: false,
configurable: true
});
Object.defineProperty(FsApiFile.prototype, "blob", {
get: function () {
return this._api
.get(this._url, {}, { handlers: false, responseType: exports.ResponseType.Blob });
},
enumerable: false,
configurable: true
});
Object.defineProperty(FsApiFile.prototype, "file", {
get: function () {
return this._api
.get(this._url, {}, {
handlers: false,
responseType: exports.ResponseType.Blob,
mapHttpResponseBody: false,
})
.pipe(operators.map(function (event) {
var filename = (event.headers.getAll('Content-Disposition') || [])
.reduce(function (accum, item) {
var matches = item.match(/filename="([^"]+)"/);
return matches ? matches[1] : accum;
}, '');
if (!filename) {
var url = new URL(event.url);
filename = url.pathname.split('/').pop();
}
return new File([event.body], filename);
}));
},
enumerable: false,
configurable: true
});
Object.defineProperty(FsApiFile.prototype, "blobUrl", {
get: function () {
return this.blob
.pipe(operators.map(function (blob) { return URL.createObjectURL(blob); }));
},
enumerable: false,
configurable: true
});
Object.defineProperty(FsApiFile.prototype, "base64", {
get: function () {
return this.blob
.pipe(operators.switchMap(function (blob) { return new rxjs.Observable(function (observer) {
var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onload = function () {
observer.next(reader.result);
observer.complete();
};
reader.onerror = function (error) { return observer.error(error); };
}); }));
},
enumerable: false,
configurable: true
});
Object.defineProperty(FsApiFile.prototype, "safeBase64Url", {
get: function () {
var _this = this;
return this.base64
.pipe(operators.map(function (data) { return _this._api.sanitizer.bypassSecurityTrustUrl(data); }));
},
enumerable: false,
configurable: true
});
Object.defineProperty(FsApiFile.prototype, "safeBase64ResourceUrl", {
get: function () {
var _this = this;
return this.base64
.pipe(operators.map(function (data) { return _this._api.sanitizer.bypassSecurityTrustResourceUrl(data); }));
},
enumerable: false,
configurable: true
});
Object.defineProperty(FsApiFile.prototype, "safeDataUrl", {
get: function () {
var _this = this;
return this.blob
.pipe(operators.map(function (blob) { return URL.createObjectURL(blob); }), operators.map(function (data) { return _this._api.sanitizer.bypassSecurityTrustUrl(data); }));
},
enumerable: false,
configurable: true
});
FsApiFile.prototype.download = function (name) {
this.file
.subscribe(function (file) {
var a = document.createElement('a');
document.body.appendChild(a);
a.style.display = 'none';
a.href = URL.createObjectURL(file);
name = name ? name : file.name;
if (name) {
a.download = name;
}
a.click();
});
};
return FsApiConfig;
return FsApiFile;
}());
FsApiConfig.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsApiConfig, deps: [{ token: 'FsApiConfig', optional: true }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
FsApiConfig.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsApiConfig });
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsApiConfig, decorators: [{
type: i0.Injectable
}], ctorParameters: function () {
return [{ type: undefined, decorators: [{
type: i0.Optional
}, {
type: i0.Inject,
args: ['FsApiConfig']
}] }];
} });
var CustomParamsEncoder = /** @class */ (function (_super) {
__extends(CustomParamsEncoder, _super);
function CustomParamsEncoder() {
return _super !== null && _super.apply(this, arguments) || this;
}
CustomParamsEncoder.prototype.encodeKey = function (key) {
return encodeURIComponent(key);
};
CustomParamsEncoder.prototype.encodeValue = function (value) {
return encodeURIComponent(value);
};
CustomParamsEncoder.prototype.decodeKey = function (key) {
return decodeURIComponent(key);
};
CustomParamsEncoder.prototype.decodeValue = function (value) {
return decodeURIComponent(value);
};
return CustomParamsEncoder;
}(i2.HttpUrlEncodingCodec));
var RequestHandler = /** @class */ (function () {

@@ -406,75 +538,133 @@ function RequestHandler(next, interceptor) {

var RequestInterceptor = /** @class */ (function () {
function RequestInterceptor(_config, _data) {
this._config = _config;
this._data = _data;
var ApiCache = /** @class */ (function () {
function ApiCache() {
this._cache = Array();
}
RequestInterceptor.prototype.intercept = function (req, next) {
return next.handle(req);
ApiCache.prototype.get = function (name, params) {
var cache = this._cache[name];
if (!cache) {
return null;
}
var paramHash = this._paramHash(params);
var data = cache[paramHash];
if (data) {
if (dateFns.differenceInMinutes(new Date(), data.date.getTime()) > 30) {
delete this._cache[name][paramHash];
}
return data.data;
}
return null;
};
return RequestInterceptor;
ApiCache.prototype.set = function (name, params, data) {
if (!this._cache[name]) {
this._cache[name] = [];
}
this._cache[name][this._paramHash(params)] = { data: data, date: new Date() };
};
ApiCache.prototype.clear = function (name) {
var _this = this;
Object.keys(this._cache).forEach(function (key) {
if (name.match(new RegExp("^" + key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')))) {
delete _this._cache[key];
}
});
};
ApiCache.prototype._paramHash = function (params) {
return JSON.stringify(params);
};
return ApiCache;
}());
function lookupBlob(data, level) {
if (level === void 0) { level = 0; }
level++;
// Depth limit
if (level > 10) {
throw Error('Maximum call stack size exceeded');
var FS_API_REQUEST_INTERCEPTOR = new i0.InjectionToken('fs-api.request_interceptor');
var FS_API_RESPONSE_HANDLER = new i0.InjectionToken('fs-api.response_handler');
var FS_API_RESPONSE_DATA_HANDLER = new i0.InjectionToken('fs-api.response_data_handler');
var FS_API_CONFIG = new i0.InjectionToken('fs-api.config');
var FsApiCacheHandler = /** @class */ (function () {
function FsApiCacheHandler(cache) {
this._cache = cache;
}
if (!data) {
return false;
}
return Object.keys(data).some(function (key) {
var item = data[key];
if (item instanceof File || item instanceof Blob) {
return true;
FsApiCacheHandler.prototype.success = function (response, config, request) {
if (request.method === 'GET') {
if (config.cache && (request.responseType === 'json' || request.responseType === 'text')) {
this._cache.set(request.url, config.query, response.body);
}
}
else if (item instanceof Object || Array.isArray(item)) {
return lookupBlob(item, level);
else {
this._cache.clear(request.url);
}
});
}
};
FsApiCacheHandler.prototype.error = function (error, config) { };
FsApiCacheHandler.prototype.complete = function (config) { };
return FsApiCacheHandler;
}());
var HeadersHandlerInterceptor = /** @class */ (function (_super) {
__extends(HeadersHandlerInterceptor, _super);
function HeadersHandlerInterceptor(_config, _data) {
var _this = _super.call(this, _config, _data) || this;
_this._config = _config;
_this._data = _data;
return _this;
var FsApiResponseBodyHandler = /** @class */ (function () {
function FsApiResponseBodyHandler() {
}
HeadersHandlerInterceptor.prototype.intercept = function (req, next) {
var _this = this;
var headers = new i2.HttpHeaders();
Object.keys(this._config.headers)
.forEach(function (name) {
headers = headers.set(name, _this._config.headers[name]);
});
if (lookupBlob(this._data)) {
this._config.encoding = 'formdata';
}
switch (this._config.encoding) {
case 'url':
{
headers = headers.set('Content-Type', 'application/x-www-form-urlencoded');
FsApiResponseBodyHandler.prototype.success = function (event, config) {
var _a;
this.processData((_a = event.body) === null || _a === void 0 ? void 0 : _a.data);
};
FsApiResponseBodyHandler.prototype.error = function (error, config) { };
FsApiResponseBodyHandler.prototype.complete = function (config) { };
FsApiResponseBodyHandler.prototype.processData = function (data) {
var e_1, _b;
if (data instanceof Object) {
try {
for (var _c = __values(Object.keys(data)), _d = _c.next(); !_d.done; _d = _c.next()) {
var key = _d.value;
data[key] = this.processData(data[key]);
}
break;
case 'json':
{
headers = headers.set('Content-Type', 'text/json');
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
}
break;
case 'formdata':
{
headers = headers.delete('Content-Type');
finally { if (e_1) throw e_1.error; }
}
}
else {
if (typeof data === 'string') {
var match = data.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}([+-]\d{2}:\d{2}|\.\d{3}Z)?$/);
if (match) {
data = match[1] ? date.parse(data) : date.parseLocal(data);
}
break;
}
}
var modified = req.clone({ headers: headers });
return next.handle(modified);
return data;
};
return HeadersHandlerInterceptor;
}(RequestInterceptor));
return FsApiResponseBodyHandler;
}());
var FsApiResponseHandler = /** @class */ (function () {
function FsApiResponseHandler() {
}
FsApiResponseHandler.prototype.success = function (event, config) {
event.body = event.body.data;
if (config.key) {
event.body = event.body[config.key];
}
};
FsApiResponseHandler.prototype.error = function (error, config) {
//
};
FsApiResponseHandler.prototype.complete = function (config) {
//
};
return FsApiResponseHandler;
}());
var RequestInterceptor = /** @class */ (function () {
function RequestInterceptor(_config, _data) {
this._config = _config;
this._data = _data;
}
RequestInterceptor.prototype.intercept = function (req, next) {
return next.handle(req);
};
return RequestInterceptor;
}());
function objectToFormData(target, formData, namespace, level) {

@@ -546,21 +736,63 @@ if (formData === void 0) { formData = new FormData(); }

var CustomParamsEncoder = /** @class */ (function (_super) {
__extends(CustomParamsEncoder, _super);
function CustomParamsEncoder() {
return _super !== null && _super.apply(this, arguments) || this;
function lookupBlob(data, level) {
if (level === void 0) { level = 0; }
level++;
// Depth limit
if (level > 10) {
throw Error('Maximum call stack size exceeded');
}
CustomParamsEncoder.prototype.encodeKey = function (key) {
return encodeURIComponent(key);
if (!data) {
return false;
}
return Object.keys(data).some(function (key) {
var item = data[key];
if (item instanceof File || item instanceof Blob) {
return true;
}
else if (item instanceof Object || Array.isArray(item)) {
return lookupBlob(item, level);
}
});
}
var HeadersHandlerInterceptor = /** @class */ (function (_super) {
__extends(HeadersHandlerInterceptor, _super);
function HeadersHandlerInterceptor(_config, _data) {
var _this = _super.call(this, _config, _data) || this;
_this._config = _config;
_this._data = _data;
return _this;
}
HeadersHandlerInterceptor.prototype.intercept = function (req, next) {
var _this = this;
var headers = new i2.HttpHeaders();
Object.keys(this._config.headers)
.forEach(function (name) {
headers = headers.set(name, _this._config.headers[name]);
});
if (lookupBlob(this._data)) {
this._config.encoding = 'formdata';
}
switch (this._config.encoding) {
case 'url':
{
headers = headers.set('Content-Type', 'application/x-www-form-urlencoded');
}
break;
case 'json':
{
headers = headers.set('Content-Type', 'text/json');
}
break;
case 'formdata':
{
headers = headers.delete('Content-Type');
}
break;
}
var modified = req.clone({ headers: headers });
return next.handle(modified);
};
CustomParamsEncoder.prototype.encodeValue = function (value) {
return encodeURIComponent(value);
};
CustomParamsEncoder.prototype.decodeKey = function (key) {
return decodeURIComponent(key);
};
CustomParamsEncoder.prototype.decodeValue = function (value) {
return decodeURIComponent(value);
};
return CustomParamsEncoder;
}(i2.HttpUrlEncodingCodec));
return HeadersHandlerInterceptor;
}(RequestInterceptor));

@@ -592,252 +824,38 @@ var ParamsHandlerInterceptor = /** @class */ (function (_super) {

var FsApiResponseHandler = /** @class */ (function () {
function FsApiResponseHandler() {
}
FsApiResponseHandler.prototype.success = function (event, config) {
event.body = event.body.data;
if (config.key) {
event.body = event.body[config.key];
}
};
FsApiResponseHandler.prototype.error = function (error, config) { };
FsApiResponseHandler.prototype.complete = function (config) { };
return FsApiResponseHandler;
}());
var FsApiResponseBodyHandler = /** @class */ (function () {
function FsApiResponseBodyHandler() {
}
FsApiResponseBodyHandler.prototype.success = function (event, config) {
var _a;
this.processData((_a = event.body) === null || _a === void 0 ? void 0 : _a.data);
};
FsApiResponseBodyHandler.prototype.error = function (error, config) { };
FsApiResponseBodyHandler.prototype.complete = function (config) { };
FsApiResponseBodyHandler.prototype.processData = function (data) {
var e_1, _b;
if (data instanceof Object) {
try {
for (var _c = __values(Object.keys(data)), _d = _c.next(); !_d.done; _d = _c.next()) {
var key = _d.value;
data[key] = this.processData(data[key]);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
}
finally { if (e_1) throw e_1.error; }
}
}
else {
if (typeof data === 'string') {
var match = data.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}([+-]\d{2}:\d{2}|\.\d{3}Z)?$/);
if (match) {
data = match[1] ? date.parse(data) : date.parseLocal(data);
}
}
}
return data;
};
return FsApiResponseBodyHandler;
}());
var FsApiCacheHandler = /** @class */ (function () {
function FsApiCacheHandler(cache) {
this._cache = cache;
}
FsApiCacheHandler.prototype.success = function (response, config, request) {
if (request.method === 'GET') {
if (config.cache && (request.responseType === 'json' || request.responseType === 'text')) {
this._cache.set(request.url, config.query, response.body);
}
}
else {
this._cache.clear(request.url);
}
};
FsApiCacheHandler.prototype.error = function (error, config) { };
FsApiCacheHandler.prototype.complete = function (config) { };
return FsApiCacheHandler;
}());
var ApiCache = /** @class */ (function () {
function ApiCache() {
this._cache = Array();
}
ApiCache.prototype.get = function (name, params) {
var cache = this._cache[name];
if (!cache) {
return null;
}
var paramHash = this._paramHash(params);
var data = cache[paramHash];
if (data) {
if (dateFns.differenceInMinutes(new Date(), data.date.getTime()) > 30) {
delete this._cache[name][paramHash];
}
return data.data;
}
return null;
};
ApiCache.prototype.set = function (name, params, data) {
if (!this._cache[name]) {
this._cache[name] = [];
}
this._cache[name][this._paramHash(params)] = { data: data, date: new Date() };
};
ApiCache.prototype.clear = function (name) {
var _this = this;
Object.keys(this._cache).forEach(function (key) {
if (name.match(new RegExp("^" + key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')))) {
delete _this._cache[key];
}
});
};
ApiCache.prototype._paramHash = function (params) {
return JSON.stringify(params);
};
return ApiCache;
}());
var FsApiFile = /** @class */ (function () {
function FsApiFile(api, url, filename) {
this._url = url;
this._api = api;
this._name = filename;
if (!this._name) {
this._name = (url || '').replace(/\?.*/, '');
this._name = this._name.substring(this._name.lastIndexOf('/') + 1);
}
}
Object.defineProperty(FsApiFile.prototype, "name", {
get: function () {
return this._name;
},
enumerable: false,
configurable: true
});
Object.defineProperty(FsApiFile.prototype, "blob", {
get: function () {
return this._api
.get(this._url, {}, { handlers: false, responseType: exports.ResponseType.Blob });
},
enumerable: false,
configurable: true
});
Object.defineProperty(FsApiFile.prototype, "file", {
get: function () {
return this._api
.get(this._url, {}, { handlers: false, responseType: exports.ResponseType.Blob, mapHttpResponseBody: false })
.pipe(operators.map(function (event) {
var filename = (event.headers.getAll('Content-Disposition') || [])
.reduce(function (accum, item) {
var matches = item.match(/filename="([^"]+)"/);
return matches ? matches[1] : accum;
}, '');
if (!filename) {
var url = new URL(event.url);
filename = url.pathname.split('/').pop();
}
return new File([event.body], filename);
}));
},
enumerable: false,
configurable: true
});
Object.defineProperty(FsApiFile.prototype, "blobUrl", {
get: function () {
return this.blob
.pipe(operators.map(function (blob) { return URL.createObjectURL(blob); }));
},
enumerable: false,
configurable: true
});
Object.defineProperty(FsApiFile.prototype, "base64", {
get: function () {
return this.blob
.pipe(operators.switchMap(function (blob) { return new rxjs.Observable(function (observer) {
var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onload = function () {
observer.next(reader.result);
observer.complete();
};
reader.onerror = function (error) { return observer.error(error); };
}); }));
},
enumerable: false,
configurable: true
});
Object.defineProperty(FsApiFile.prototype, "safeBase64Url", {
get: function () {
var _this = this;
return this.base64
.pipe(operators.map(function (data) { return _this._api.sanitizer.bypassSecurityTrustUrl(data); }));
},
enumerable: false,
configurable: true
});
Object.defineProperty(FsApiFile.prototype, "safeBase64ResourceUrl", {
get: function () {
var _this = this;
return this.base64
.pipe(operators.map(function (data) { return _this._api.sanitizer.bypassSecurityTrustResourceUrl(data); }));
},
enumerable: false,
configurable: true
});
Object.defineProperty(FsApiFile.prototype, "safeDataUrl", {
get: function () {
var _this = this;
return this.blob
.pipe(operators.map(function (blob) { return URL.createObjectURL(blob); }), operators.map(function (data) { return _this._api.sanitizer.bypassSecurityTrustUrl(data); }));
},
enumerable: false,
configurable: true
});
FsApiFile.prototype.download = function (name) {
this.file
.subscribe(function (file) {
var a = document.createElement('a');
document.body.appendChild(a);
a.style.display = 'none';
a.href = URL.createObjectURL(file);
name = name ? name : file.name;
if (name) {
a.download = name;
}
a.click();
});
};
return FsApiFile;
}());
var FsApi = /** @class */ (function () {
function FsApi(_apiConfig, _http, _sanitizer,
// Custom interceptors
config,
_config,
// Custom interceptors
httpInterceptors,
_httpInterceptors,
// Custom interceptors
requestInterceptors,
_requestInterceptors,
// Other callbacks
responseHandler,
_responseHandler,
// Other callbacks
responseBodyHandler) {
_responseBodyHandler) {
this._apiConfig = _apiConfig;
this._http = _http;
this._sanitizer = _sanitizer;
this.config = config;
this.httpInterceptors = httpInterceptors;
this.requestInterceptors = requestInterceptors;
this.responseHandler = responseHandler;
this.responseBodyHandler = responseBodyHandler;
this._config = _config;
this._httpInterceptors = _httpInterceptors;
this._requestInterceptors = _requestInterceptors;
this._responseHandler = _responseHandler;
this._responseBodyHandler = _responseBodyHandler;
this.events = [];
this._queue = new common.Queue(5);
this._cache = new ApiCache();
this.responseHandler = responseHandler ? responseHandler : new FsApiResponseHandler();
this.responseBodyHandler = responseBodyHandler ? responseBodyHandler : new FsApiResponseBodyHandler();
this._queue.setLimit((this.config && this.config.maxFileConnections) || 5);
this._responseHandlers = [new FsApiResponseHandler()];
this._responseBodyHandlers = [new FsApiResponseBodyHandler()];
if (_responseHandler) {
this._responseHandlers = Array.isArray(_responseHandler) ?
_responseHandler :
[_responseHandler];
}
if (_responseBodyHandler) {
this._responseBodyHandlers = Array.isArray(_responseBodyHandler) ?
_responseBodyHandler :
[_responseBodyHandler];
}
this._queue.setLimit((this._config && this._config.maxFileConnections) || 5);
}

@@ -897,3 +915,3 @@ FsApi.prototype.createApiFile = function (url, filename) {

responseType: config.responseType,
context: config.context
context: config.context,
});

@@ -907,17 +925,17 @@ var INTERCEPTORS = [

// Add custom interceptors into chain
if (Array.isArray(this.requestInterceptors)) {
var interceptors = this.requestInterceptors
if (Array.isArray(this._requestInterceptors)) {
var interceptors = this._requestInterceptors
.map(function (interceptor) { return interceptor(config, data); });
INTERCEPTORS.push.apply(INTERCEPTORS, __spreadArray([], __read(interceptors)));
}
else if (this.requestInterceptors) {
var interceptor = this.requestInterceptors(config, data);
else if (this._requestInterceptors) {
var interceptor = this._requestInterceptors(config, data);
INTERCEPTORS.push(interceptor);
}
INTERCEPTORS.push.apply(INTERCEPTORS, __spreadArray([], __read(this.httpInterceptors)));
INTERCEPTORS.push.apply(INTERCEPTORS, __spreadArray([], __read(this._httpInterceptors)));
}
var handlers = [];
if (config.handlers) {
handlers.push(this.responseBodyHandler);
handlers.push(this.responseHandler);
handlers.push.apply(handlers, __spreadArray([], __read(this._responseBodyHandlers)));
handlers.push.apply(handlers, __spreadArray([], __read(this._responseHandlers)));
}

@@ -950,3 +968,3 @@ handlers.push(new FsApiCacheHandler(this._cache));

});
}
},
}));

@@ -958,9 +976,5 @@ // Depends on encoding will send in queue or raw

}
else {
return this._queue.push(chainedRequest);
}
return this._queue.push(chainedRequest);
}
else {
return chainedRequest;
}
return chainedRequest;
};

@@ -1100,3 +1114,3 @@ /**

FsApi,
]
],
};

@@ -1118,3 +1132,3 @@ };

common$1.CommonModule,
i2.HttpClientModule
i2.HttpClientModule,
]] });

@@ -1126,3 +1140,3 @@ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsApiModule, decorators: [{

common$1.CommonModule,
i2.HttpClientModule
i2.HttpClientModule,
],

@@ -1142,3 +1156,3 @@ declarations: [

FsApiImagePipe,
]
],
}]

@@ -1145,0 +1159,0 @@ }] });

@@ -1,4 +0,4 @@

import { Observable } from "rxjs";
import { ResponseType } from "../enums";
import { map, switchMap } from "rxjs/operators";
import { Observable } from 'rxjs';
import { map, switchMap } from 'rxjs/operators';
import { ResponseType } from '../enums';
export class FsApiFile {

@@ -23,3 +23,7 @@ constructor(api, url, filename) {

return this._api
.get(this._url, {}, { handlers: false, responseType: ResponseType.Blob, mapHttpResponseBody: false })
.get(this._url, {}, {
handlers: false,
responseType: ResponseType.Blob,
mapHttpResponseBody: false,
})
.pipe(map((event) => {

@@ -51,3 +55,3 @@ let filename = (event.headers.getAll('Content-Disposition') || [])

};
reader.onerror = error => observer.error(error);
reader.onerror = (error) => observer.error(error);
})));

@@ -82,2 +86,2 @@ }

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2NsYXNzZXMvYXBpLWZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLaEQsTUFBTSxPQUFPLFNBQVM7SUFNcEIsWUFBbUIsR0FBVSxFQUFFLEdBQVcsRUFBRSxRQUFpQjtRQUMzRCxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNoQixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztRQUV0QixJQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3BFO0lBQ0gsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLENB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RyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3hDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDaEUsQ0FBQztJQUNOLENBQUM7SUFFTSxRQUFRLENBQUMsSUFBYTtRQUMzQixJQUFJLENBQUMsSUFBSTthQUNOLFNBQVMsQ0FBQyxDQUFDLElBQVUsRUFBRSxFQUFFO1lBQ3hCLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUE7WUFDOUIsSUFBRyxJQUFJLEVBQUU7Z0JBQ1AsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7YUFDbkI7WUFFRCxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuXG5pbXBvcnQgeyBGc0FwaSB9IGZyb20gXCIuLi9zZXJ2aWNlc1wiO1xuaW1wb3J0IHsgUmVzcG9uc2VUeXBlIH0gZnJvbSBcIi4uL2VudW1zXCI7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgU2FmZVJlc291cmNlVXJsLCBTYWZlVXJsIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcbmltcG9ydCB7IEh0dHBSZXNwb25zZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuXG5cbmV4cG9ydCBjbGFzcyBGc0FwaUZpbGUge1xuXG4gIHByaXZhdGUgX3VybDogc3RyaW5nO1xuICBwcml2YXRlIF9hcGk6IEZzQXBpO1xuICBwcml2YXRlIF9uYW1lOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGFwaTogRnNBcGksIHVybDogc3RyaW5nLCBmaWxlbmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX3VybCA9IHVybDtcbiAgICB0aGlzLl9hcGkgPSBhcGk7XG4gICAgdGhpcy5fbmFtZSA9IGZpbGVuYW1lO1xuICAgIFxuICAgIGlmKCF0aGlzLl9uYW1lKSB7XG4gICAgICB0aGlzLl9uYW1lID0gKHVybCB8fCAnJykucmVwbGFjZSgvXFw/LiovLCAnJyk7XG4gICAgICB0aGlzLl9uYW1lID0gdGhpcy5fbmFtZS5zdWJzdHJpbmcodGhpcy5fbmFtZS5sYXN0SW5kZXhPZignLycpICsgMSk7XG4gICAgfVxuICB9XG4gIFxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYmxvYigpOiBPYnNlcnZhYmxlPEJsb2I+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpXG4gICAgICAuZ2V0KHRoaXMuX3VybCwge30sIHsgaGFuZGxlcnM6IGZhbHNlLCByZXNwb25zZVR5cGU6IFJlc3BvbnNlVHlwZS5CbG9iIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWxlKCk6IE9ic2VydmFibGU8RmlsZT4ge1xuICAgIHJldHVybiB0aGlzLl9hcGlcbiAgICAgIC5nZXQodGhpcy5fdXJsLCB7fSwgeyBoYW5kbGVyczogZmFsc2UsIHJlc3BvbnNlVHlwZTogUmVzcG9uc2VUeXBlLkJsb2IsIG1hcEh0dHBSZXNwb25zZUJvZHk6IGZhbHNlIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChldmVudDogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcbiAgICAgICAgICBsZXQgZmlsZW5hbWUgPSAoZXZlbnQuaGVhZGVycy5nZXRBbGwoJ0NvbnRlbnQtRGlzcG9zaXRpb24nKSB8fCBbXSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjY3VtLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBpdGVtLm1hdGNoKC9maWxlbmFtZT1cIihbXlwiXSspXCIvKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMgPyBtYXRjaGVzWzFdIDogYWNjdW07XG4gICAgICAgICAgICB9LCAnJyk7XG5cbiAgICAgICAgICBpZighZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoZXZlbnQudXJsKTtcbiAgICAgICAgICAgIGZpbGVuYW1lID0gdXJsLnBhdGhuYW1lLnNwbGl0KCcvJykucG9wKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBGaWxlKFtldmVudC5ib2R5XSwgZmlsZW5hbWUpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYmxvYlVybCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmJsb2JcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGJsb2IpID0+IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBiYXNlNjQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ibG9iXG4gICAgICAucGlwZShcbiAgICAgICBzd2l0Y2hNYXAoKGJsb2IpID0+IG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gZXJyb3IgPT4gb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNhZmVCYXNlNjRVcmwoKTogT2JzZXJ2YWJsZTxTYWZlVXJsPiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZTY0XG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChkYXRhKSA9PiB0aGlzLl9hcGkuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoZGF0YSkpXG4gICAgICApO1xuICB9XG5cblxuICBwdWJsaWMgZ2V0IHNhZmVCYXNlNjRSZXNvdXJjZVVybCgpOiBPYnNlcnZhYmxlPFNhZmVSZXNvdXJjZVVybD4ge1xuICAgIHJldHVybiB0aGlzLmJhc2U2NFxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoZGF0YSkgPT4gdGhpcy5fYXBpLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoZGF0YSkpXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBzYWZlRGF0YVVybCgpOiBPYnNlcnZhYmxlPFNhZmVVcmw+IHtcbiAgICByZXR1cm4gdGhpcy5ibG9iXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChibG9iKSA9PiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKSxcbiAgICAgICAgbWFwKChkYXRhKSA9PiB0aGlzLl9hcGkuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoZGF0YSkpXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGRvd25sb2FkKG5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVcbiAgICAgIC5zdWJzY3JpYmUoKGZpbGU6IEZpbGUpID0+IHtcbiAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgICAgYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBhLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuICAgICAgICBuYW1lID0gbmFtZSA/IG5hbWUgOiBmaWxlLm5hbWVcbiAgICAgICAgaWYobmFtZSkge1xuICAgICAgICAgIGEuZG93bmxvYWQgPSBuYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgfSk7XG4gIH1cbn0iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2NsYXNzZXMvYXBpLWZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSWhELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFJeEMsTUFBTSxPQUFPLFNBQVM7SUFNcEIsWUFBWSxHQUFVLEVBQUUsR0FBVyxFQUFFLFFBQWlCO1FBQ3BELElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO1FBRXRCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDcEU7SUFDSCxDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FB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Q0gsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3hDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDaEUsQ0FBQztJQUNOLENBQUM7SUFFTSxRQUFRLENBQUMsSUFBYTtRQUMzQixJQUFJLENBQUMsSUFBSTthQUNOLFNBQVMsQ0FBQyxDQUFDLElBQVUsRUFBRSxFQUFFO1lBQ3hCLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDL0IsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7YUFDbkI7WUFFRCxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNhZmVSZXNvdXJjZVVybCwgU2FmZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBSZXNwb25zZVR5cGUgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBGc0FwaSB9IGZyb20gJy4uL3NlcnZpY2VzJztcblxuXG5leHBvcnQgY2xhc3MgRnNBcGlGaWxlIHtcblxuICBwcml2YXRlIF91cmw6IHN0cmluZztcbiAgcHJpdmF0ZSBfYXBpOiBGc0FwaTtcbiAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGFwaTogRnNBcGksIHVybDogc3RyaW5nLCBmaWxlbmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX3VybCA9IHVybDtcbiAgICB0aGlzLl9hcGkgPSBhcGk7XG4gICAgdGhpcy5fbmFtZSA9IGZpbGVuYW1lO1xuXG4gICAgaWYgKCF0aGlzLl9uYW1lKSB7XG4gICAgICB0aGlzLl9uYW1lID0gKHVybCB8fCAnJykucmVwbGFjZSgvXFw/LiovLCAnJyk7XG4gICAgICB0aGlzLl9uYW1lID0gdGhpcy5fbmFtZS5zdWJzdHJpbmcodGhpcy5fbmFtZS5sYXN0SW5kZXhPZignLycpICsgMSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJsb2IoKTogT2JzZXJ2YWJsZTxCbG9iPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaVxuICAgICAgLmdldCh0aGlzLl91cmwsIHt9LCB7IGhhbmRsZXJzOiBmYWxzZSwgcmVzcG9uc2VUeXBlOiBSZXNwb25zZVR5cGUuQmxvYiB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlsZSgpOiBPYnNlcnZhYmxlPEZpbGU+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpXG4gICAgICAuZ2V0KHRoaXMuX3VybCwge30sIHtcbiAgICAgICAgaGFuZGxlcnM6IGZhbHNlLFxuICAgICAgICByZXNwb25zZVR5cGU6IFJlc3BvbnNlVHlwZS5CbG9iLFxuICAgICAgICBtYXBIdHRwUmVzcG9uc2VCb2R5OiBmYWxzZSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChldmVudDogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcbiAgICAgICAgICBsZXQgZmlsZW5hbWUgPSAoZXZlbnQuaGVhZGVycy5nZXRBbGwoJ0NvbnRlbnQtRGlzcG9zaXRpb24nKSB8fCBbXSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjY3VtLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBpdGVtLm1hdGNoKC9maWxlbmFtZT1cIihbXlwiXSspXCIvKTtcblxuICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXNbMV0gOiBhY2N1bTtcbiAgICAgICAgICAgIH0sICcnKTtcblxuICAgICAgICAgIGlmICghZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoZXZlbnQudXJsKTtcbiAgICAgICAgICAgIGZpbGVuYW1lID0gdXJsLnBhdGhuYW1lLnNwbGl0KCcvJykucG9wKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBGaWxlKFtldmVudC5ib2R5XSwgZmlsZW5hbWUpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJsb2JVcmwoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ibG9iXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChibG9iKSA9PiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKSxcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJhc2U2NCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmJsb2JcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGJsb2IpID0+IG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBzYWZlQmFzZTY0VXJsKCk6IE9ic2VydmFibGU8U2FmZVVybD4ge1xuICAgIHJldHVybiB0aGlzLmJhc2U2NFxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoZGF0YSkgPT4gdGhpcy5fYXBpLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKGRhdGEpKSxcbiAgICAgICk7XG4gIH1cblxuXG4gIHB1YmxpYyBnZXQgc2FmZUJhc2U2NFJlc291cmNlVXJsKCk6IE9ic2VydmFibGU8U2FmZVJlc291cmNlVXJsPiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZTY0XG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChkYXRhKSA9PiB0aGlzLl9hcGkuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChkYXRhKSksXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBzYWZlRGF0YVVybCgpOiBPYnNlcnZhYmxlPFNhZmVVcmw+IHtcbiAgICByZXR1cm4gdGhpcy5ibG9iXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChibG9iKSA9PiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKSxcbiAgICAgICAgbWFwKChkYXRhKSA9PiB0aGlzLl9hcGkuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoZGF0YSkpLFxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBkb3dubG9hZChuYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5maWxlXG4gICAgICAuc3Vic2NyaWJlKChmaWxlOiBGaWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgICAgIGEuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgYS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcbiAgICAgICAgbmFtZSA9IG5hbWUgPyBuYW1lIDogZmlsZS5uYW1lO1xuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgIGEuZG93bmxvYWQgPSBuYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==

@@ -0,9 +1,9 @@

import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { HttpBackend, HttpClientModule, HttpXhrBackend } from '@angular/common/http';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FS_API_CONFIG } from './fs-api-providers';
import { FsApi } from './services/api.service';
import { FsApiConfig } from './classes/api-config';
import { FsApiImageDirective } from './directives';
import { FS_API_CONFIG } from './fs-api-providers';
import { FsApiImagePipe } from './pipes';
import { FsApi } from './services/api.service';
import * as i0 from "@angular/core";

@@ -18,3 +18,3 @@ export class FsApiModule {

FsApi,
]
],
};

@@ -35,3 +35,3 @@ }

CommonModule,
HttpClientModule
HttpClientModule,
]] });

@@ -43,3 +43,3 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsApiModule, decorators: [{

CommonModule,
HttpClientModule
HttpClientModule,
],

@@ -59,5 +59,5 @@ declarations: [

FsApiImagePipe,
]
],
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtYXBpLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvZnMtYXBpLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxRQUFRLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUF1QnpDLE1BQU0sT0FBTyxXQUFXO0lBQ3RCLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBd0IsRUFBRTtRQUN2QyxPQUFPO1lBQ0wsUUFBUSxFQUFFLFdBQVc7WUFDckIsU0FBUyxFQUFFO2dCQUNULEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO2dCQUM1QyxXQUFXO2dCQUNYLEtBQUs7YUFDTjtTQUNGLENBQUM7SUFDSixDQUFDOzt5R0FWVSxXQUFXOzBHQUFYLFdBQVcsaUJBZHBCLG1CQUFtQjtRQUNuQixjQUFjLGFBTGQsWUFBWTtRQUNaLGdCQUFnQixhQWFoQixtQkFBbUI7UUFDbkIsY0FBYzswR0FHTCxXQUFXLGFBWFg7UUFDVCxLQUFLO1FBQ0wsV0FBVztRQUNYLGNBQWM7UUFDZCxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRTtLQUN0RCxZQWJRO1lBQ1AsWUFBWTtZQUNaLGdCQUFnQjtTQUNqQjs0RkFnQlUsV0FBVztrQkFwQnZCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osZ0JBQWdCO3FCQUNqQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osbUJBQW1CO3dCQUNuQixjQUFjO3FCQUNmO29CQUNELFNBQVMsRUFBRTt3QkFDVCxLQUFLO3dCQUNMLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRTtxQkFDdEQ7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLG1CQUFtQjt3QkFDbkIsY0FBYztxQkFDZjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBCYWNrZW5kLCBIdHRwQ2xpZW50TW9kdWxlLCBIdHRwWGhyQmFja2VuZCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBGU19BUElfQ09ORklHIH0gZnJvbSAnLi9mcy1hcGktcHJvdmlkZXJzJztcbmltcG9ydCB7IEZzQXBpIH0gZnJvbSAnLi9zZXJ2aWNlcy9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBGc0FwaUNvbmZpZyB9IGZyb20gJy4vY2xhc3Nlcy9hcGktY29uZmlnJztcbmltcG9ydCB7IElNb2R1bGVDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRnNBcGlJbWFnZURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBGc0FwaUltYWdlUGlwZSB9IGZyb20gJy4vcGlwZXMnO1xuXG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSHR0cENsaWVudE1vZHVsZVxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBGc0FwaUltYWdlRGlyZWN0aXZlLFxuICAgIEZzQXBpSW1hZ2VQaXBlLFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBGc0FwaSxcbiAgICBGc0FwaUNvbmZpZyxcbiAgICBIdHRwWGhyQmFja2VuZCxcbiAgICB7IHByb3ZpZGU6IEh0dHBCYWNrZW5kLCB1c2VFeGlzdGluZzogSHR0cFhockJhY2tlbmQgfSxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEZzQXBpSW1hZ2VEaXJlY3RpdmUsXG4gICAgRnNBcGlJbWFnZVBpcGUsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRnNBcGlNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IElNb2R1bGVDb25maWcgPSB7fSk6IE1vZHVsZVdpdGhQcm92aWRlcnM8RnNBcGlNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEZzQXBpTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogRlNfQVBJX0NPTkZJRywgdXNlVmFsdWU6IGNvbmZpZyB9LFxuICAgICAgICBGc0FwaUNvbmZpZyxcbiAgICAgICAgRnNBcGksXG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtYXBpLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvZnMtYXBpLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUF1Qi9DLE1BQU0sT0FBTyxXQUFXO0lBQ2YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUF3QixFQUFFO1FBQzlDLE9BQU87WUFDTCxRQUFRLEVBQUUsV0FBVztZQUNyQixTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7Z0JBQzVDLFdBQVc7Z0JBQ1gsS0FBSzthQUNOO1NBQ0YsQ0FBQztJQUNKLENBQUM7O3lHQVZVLFdBQVc7MEdBQVgsV0FBVyxpQkFkcEIsbUJBQW1CO1FBQ25CLGNBQWMsYUFMZCxZQUFZO1FBQ1osZ0JBQWdCLGFBYWhCLG1CQUFtQjtRQUNuQixjQUFjOzBHQUdMLFdBQVcsYUFYWDtRQUNULEtBQUs7UUFDTCxXQUFXO1FBQ1gsY0FBYztRQUNkLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFO0tBQ3RELFlBYlE7WUFDUCxZQUFZO1lBQ1osZ0JBQWdCO1NBQ2pCOzRGQWdCVSxXQUFXO2tCQXBCdkIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixnQkFBZ0I7cUJBQ2pCO29CQUNELFlBQVksRUFBRTt3QkFDWixtQkFBbUI7d0JBQ25CLGNBQWM7cUJBQ2Y7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULEtBQUs7d0JBQ0wsV0FBVzt3QkFDWCxjQUFjO3dCQUNkLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFO3FCQUN0RDtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsbUJBQW1CO3dCQUNuQixjQUFjO3FCQUNmO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEh0dHBCYWNrZW5kLCBIdHRwQ2xpZW50TW9kdWxlLCBIdHRwWGhyQmFja2VuZCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgRnNBcGlDb25maWcgfSBmcm9tICcuL2NsYXNzZXMvYXBpLWNvbmZpZyc7XG5pbXBvcnQgeyBGc0FwaUltYWdlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IEZTX0FQSV9DT05GSUcgfSBmcm9tICcuL2ZzLWFwaS1wcm92aWRlcnMnO1xuaW1wb3J0IHsgSU1vZHVsZUNvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcy9tb2R1bGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGc0FwaUltYWdlUGlwZSB9IGZyb20gJy4vcGlwZXMnO1xuaW1wb3J0IHsgRnNBcGkgfSBmcm9tICcuL3NlcnZpY2VzL2FwaS5zZXJ2aWNlJztcblxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEh0dHBDbGllbnRNb2R1bGUsXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEZzQXBpSW1hZ2VEaXJlY3RpdmUsXG4gICAgRnNBcGlJbWFnZVBpcGUsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIEZzQXBpLFxuICAgIEZzQXBpQ29uZmlnLFxuICAgIEh0dHBYaHJCYWNrZW5kLFxuICAgIHsgcHJvdmlkZTogSHR0cEJhY2tlbmQsIHVzZUV4aXN0aW5nOiBIdHRwWGhyQmFja2VuZCB9LFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgRnNBcGlJbWFnZURpcmVjdGl2ZSxcbiAgICBGc0FwaUltYWdlUGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRnNBcGlNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZmlnOiBJTW9kdWxlQ29uZmlnID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEZzQXBpTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBGc0FwaU1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IEZTX0FQSV9DT05GSUcsIHVzZVZhbHVlOiBjb25maWcgfSxcbiAgICAgICAgRnNBcGlDb25maWcsXG4gICAgICAgIEZzQXBpLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=

@@ -8,5 +8,9 @@ export class FsApiResponseHandler {

}
error(error, config) { }
complete(config) { }
error(error, config) {
//
}
complete(config) {
//
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvaGFuZGxlcnMvcmVzcG9uc2UuaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLE9BQU8sb0JBQW9CO0lBRXhCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTTtRQUMxQixLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzdCLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNkLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLElBQVMsQ0FBQztJQUU3QixRQUFRLENBQUMsTUFBTSxJQUFTLENBQUM7Q0FDakMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IEZzQXBpQmFzZUhhbmRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvaGFuZGxlci5pbnRlcmZhY2UnO1xuXG5cbmV4cG9ydCBjbGFzcyBGc0FwaVJlc3BvbnNlSGFuZGxlciBpbXBsZW1lbnRzIEZzQXBpQmFzZUhhbmRlciB7XG5cbiAgcHVibGljIHN1Y2Nlc3MoZXZlbnQsIGNvbmZpZyk6IHZvaWQge1xuICAgIGV2ZW50LmJvZHkgPSBldmVudC5ib2R5LmRhdGE7XG4gICAgaWYgKGNvbmZpZy5rZXkpIHtcbiAgICAgIGV2ZW50LmJvZHkgPSBldmVudC5ib2R5W2NvbmZpZy5rZXldO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBlcnJvcihlcnJvciwgY29uZmlnKTogdm9pZCB7fVxuXG4gIHB1YmxpYyBjb21wbGV0ZShjb25maWcpOiB2b2lkIHt9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvaGFuZGxlcnMvcmVzcG9uc2UuaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLE9BQU8sb0JBQW9CO0lBRXhCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTTtRQUMxQixLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzdCLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNkLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNO1FBQ3hCLEVBQUU7SUFDSixDQUFDO0lBRU0sUUFBUSxDQUFDLE1BQU07UUFDcEIsRUFBRTtJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgRnNBcGlCYXNlSGFuZGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9oYW5kbGVyLmludGVyZmFjZSc7XG5cblxuZXhwb3J0IGNsYXNzIEZzQXBpUmVzcG9uc2VIYW5kbGVyIGltcGxlbWVudHMgRnNBcGlCYXNlSGFuZGVyIHtcblxuICBwdWJsaWMgc3VjY2VzcyhldmVudCwgY29uZmlnKTogdm9pZCB7XG4gICAgZXZlbnQuYm9keSA9IGV2ZW50LmJvZHkuZGF0YTtcbiAgICBpZiAoY29uZmlnLmtleSkge1xuICAgICAgZXZlbnQuYm9keSA9IGV2ZW50LmJvZHlbY29uZmlnLmtleV07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGVycm9yKGVycm9yLCBjb25maWcpOiB2b2lkIHtcbiAgICAvL1xuICB9XG5cbiAgcHVibGljIGNvbXBsZXRlKGNvbmZpZyk6IHZvaWQge1xuICAgIC8vXG4gIH1cbn1cbiJdfQ==
import { Inject, Injectable, Optional } from '@angular/core';
import { HttpRequest, HttpEventType, HttpXhrBackend, HttpResponse, HTTP_INTERCEPTORS, } from '@angular/common/http';
import { DomSanitizer } from '@angular/platform-browser';
import { Queue } from '@firestitch/common';
import { of } from 'rxjs';
import { map, tap, filter } from 'rxjs/operators';
import { isDate, isValid, format } from 'date-fns';
import { filter, map, tap } from 'rxjs/operators';
import { HTTP_INTERCEPTORS, HttpEventType, HttpRequest, HttpResponse, HttpXhrBackend, } from '@angular/common/http';
import { format, isDate, isValid } from 'date-fns';
import { FsApiFile } from '../classes';
import { ApiCache } from '../classes/api-cache';
import { FsApiConfig } from '../classes/api-config';
import { RequestHandler } from '../classes/request-handler';
import { FS_API_CONFIG, FS_API_REQUEST_INTERCEPTOR, FS_API_RESPONSE_DATA_HANDLER, FS_API_RESPONSE_HANDLER, } from '../fs-api-providers';
import { FsApiCacheHandler } from '../handlers/cache.handler';
import { FsApiResponseBodyHandler } from '../handlers/response-body.handler';
import { FsApiResponseHandler } from '../handlers/response.handler';
import { BodyHandlerInterceptor } from '../interceptors/body-handler.interceptor';
import { HeadersHandlerInterceptor } from '../interceptors/headers-handler.interceptor';
import { BodyHandlerInterceptor } from '../interceptors/body-handler.interceptor';
import { ParamsHandlerInterceptor } from '../interceptors/params-handler.interceptor';
import { FS_API_CONFIG, FS_API_REQUEST_INTERCEPTOR, FS_API_RESPONSE_HANDLER, FS_API_RESPONSE_DATA_HANDLER, } from '../fs-api-providers';
import { FsApiResponseHandler } from '../handlers/response.handler';
import { FsApiResponseBodyHandler } from '../handlers/response-body.handler';
import { FsApiCacheHandler } from '../handlers/cache.handler';
import { ApiCache } from '../classes/api-cache';
import { FsApiFile } from '../classes';
import { DomSanitizer } from '@angular/platform-browser';
import * as i0 from "@angular/core";

@@ -28,25 +28,35 @@ import * as i1 from "../classes/api-config";

// Custom interceptors
config,
_config,
// Custom interceptors
httpInterceptors,
_httpInterceptors,
// Custom interceptors
requestInterceptors,
_requestInterceptors,
// Other callbacks
responseHandler,
_responseHandler,
// Other callbacks
responseBodyHandler) {
_responseBodyHandler) {
this._apiConfig = _apiConfig;
this._http = _http;
this._sanitizer = _sanitizer;
this.config = config;
this.httpInterceptors = httpInterceptors;
this.requestInterceptors = requestInterceptors;
this.responseHandler = responseHandler;
this.responseBodyHandler = responseBodyHandler;
this._config = _config;
this._httpInterceptors = _httpInterceptors;
this._requestInterceptors = _requestInterceptors;
this._responseHandler = _responseHandler;
this._responseBodyHandler = _responseBodyHandler;
this.events = [];
this._queue = new Queue(5);
this._cache = new ApiCache();
this.responseHandler = responseHandler ? responseHandler : new FsApiResponseHandler();
this.responseBodyHandler = responseBodyHandler ? responseBodyHandler : new FsApiResponseBodyHandler();
this._queue.setLimit((this.config && this.config.maxFileConnections) || 5);
this._responseHandlers = [new FsApiResponseHandler()];
this._responseBodyHandlers = [new FsApiResponseBodyHandler()];
if (_responseHandler) {
this._responseHandlers = Array.isArray(_responseHandler) ?
_responseHandler :
[_responseHandler];
}
if (_responseBodyHandler) {
this._responseBodyHandlers = Array.isArray(_responseBodyHandler) ?
_responseBodyHandler :
[_responseBodyHandler];
}
this._queue.setLimit((this._config && this._config.maxFileConnections) || 5);
}

@@ -94,3 +104,3 @@ createApiFile(url, filename) {

responseType: config.responseType,
context: config.context
context: config.context,
});

@@ -104,17 +114,17 @@ const INTERCEPTORS = [

// Add custom interceptors into chain
if (Array.isArray(this.requestInterceptors)) {
const interceptors = this.requestInterceptors
if (Array.isArray(this._requestInterceptors)) {
const interceptors = this._requestInterceptors
.map((interceptor) => interceptor(config, data));
INTERCEPTORS.push(...interceptors);
}
else if (this.requestInterceptors) {
const interceptor = this.requestInterceptors(config, data);
else if (this._requestInterceptors) {
const interceptor = this._requestInterceptors(config, data);
INTERCEPTORS.push(interceptor);
}
INTERCEPTORS.push(...this.httpInterceptors);
INTERCEPTORS.push(...this._httpInterceptors);
}
const handlers = [];
if (config.handlers) {
handlers.push(this.responseBodyHandler);
handlers.push(this.responseHandler);
handlers.push(...this._responseBodyHandlers);
handlers.push(...this._responseHandlers);
}

@@ -147,3 +157,3 @@ handlers.push(new FsApiCacheHandler(this._cache));

});
}
},
}));

@@ -155,9 +165,5 @@ // Depends on encoding will send in queue or raw

}
else {
return this._queue.push(chainedRequest);
}
return this._queue.push(chainedRequest);
}
else {
return chainedRequest;
}
return chainedRequest;
}

@@ -184,3 +190,3 @@ /**

data[key] = [
...value
...value,
];

@@ -234,2 +240,2 @@ this._sanitize(value, data[key]);

}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3NlcnZpY2VzL2FwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsV0FBVyxFQUNYLGFBQWEsRUFDYixjQUFjLEVBRWQsWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUzQyxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSx3QkFBd0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBRXJGLE9BQU8sRUFDTCxhQUFhLEVBQ2IsMEJBQTBCLEVBQzFCLHVCQUF1QixFQUN2Qiw0QkFBNEIsR0FDN0IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUk5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7QUFJekQsTUFBTSxPQUFPLEtBQUs7SUFPaEIsWUFDVSxVQUF1QixFQUN2QixLQUFxQixFQUNyQixVQUF3QjtJQUNoQyxzQkFBc0I7SUFFZCxNQUFxQjtJQUU3QixzQkFBc0I7SUFFZCxnQkFBZ0I7SUFFeEIsc0JBQXNCO0lBRWQsbUJBQW1CO0lBRTNCLGtCQUFrQjtJQUVWLGVBQXFDO0lBRTdDLGtCQUFrQjtJQUVWLG1CQUE2QztRQXJCN0MsZUFBVSxHQUFWLFVBQVUsQ0FBYTtRQUN2QixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUFjO1FBR3hCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFJckIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFBO1FBSWhCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBQTtRQUluQixvQkFBZSxHQUFmLGVBQWUsQ0FBc0I7UUFJckMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUEwQjtRQTNCaEQsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUVGLFdBQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixXQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQTBCOUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBQ3RGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksd0JBQXdCLEVBQUUsQ0FBQztRQUN0RyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFTSxhQUFhLENBQUMsR0FBVyxFQUFFLFFBQWlCO1FBQ2pELE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBTSxFQUFFLE1BQXNCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFhLEVBQUUsTUFBc0I7UUFDcEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQWEsRUFBRSxNQUFzQjtRQUNuRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBYSxFQUFFLE1BQXNCO1FBQ3RELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU0sT0FBTyxDQUFDLE1BQWMsRUFBRSxHQUFXLEVBQUUsSUFBYSxFQUFFLE1BQXNCO1FBQy9FLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuRSxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzlCLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVCLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRTtZQUNwQixNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBRVYsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO2dCQUNoQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLEtBQUssRUFBRTtvQkFDVCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDbEI7YUFDRjtTQUNGO1FBRUQsdUJBQXVCO1FBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFFLE1BQWMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO1lBQzFELFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtZQUNqQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87U0FDeEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxZQUFZLEdBQVE7WUFDeEIsSUFBSSx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQzNDLElBQUksc0JBQXNCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUN4QyxJQUFJLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDM0MsQ0FBQztRQUVGLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtZQUV2QixxQ0FBcUM7WUFDckMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO2dCQUMzQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CO3FCQUMxQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFFbkQsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO2FBQ3BDO2lCQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUUzRCxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2hDO1lBRUQsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNuQixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRWxELDRCQUE0QjtRQUM1QixNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUM1QyxDQUFDLElBQVMsRUFBRSxXQUFnQixFQUFFLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRGLG9DQUFvQztRQUNwQyxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQzthQUNqRCxJQUFJLENBQ0gsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDZixPQUFPLE1BQU0sQ0FBQyxjQUFjLElBQUksS0FBSyxZQUFZLFlBQVksQ0FBQztRQUNoRSxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxLQUFxQixFQUFFLEVBQUU7WUFDNUIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3pDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUF3QixFQUFFLEVBQUU7b0JBQzVDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDMUMsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLEtBQXFCLEVBQUUsRUFBRTs7WUFDNUIsT0FBTyxDQUFDLENBQUMsTUFBQSxNQUFNLENBQUMsbUJBQW1CLG1DQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDOUcsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDO1lBQ0YsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQXdCLEVBQUUsRUFBRTtvQkFDNUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ2IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQXdCLEVBQUUsRUFBRTtvQkFDNUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1NBQ0YsQ0FBQyxDQUNILENBQUM7UUFFSixnREFBZ0Q7UUFDaEQsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBRTtZQUNsQyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7Z0JBQ3RCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDaEQ7aUJBQU07Z0JBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUN6QztTQUNGO2FBQU07WUFDTCxPQUFPLGNBQWMsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRTtRQUM5QixJQUFHLEdBQUcsS0FBSyxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQzFDLE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUNmLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2YsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtnQkFDdkIsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2pCLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO3FCQUN6RDtpQkFDRjtxQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRzt3QkFDVixHQUFHLEtBQUs7cUJBQ1QsQ0FBQztvQkFFRixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDbEM7cUJBQU0sSUFBRyxLQUFLLFlBQVksSUFBSSxFQUFFO29CQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2lCQUNuQjtxQkFBTSxJQUFJLEtBQUssWUFBWSxNQUFNLEVBQUU7b0JBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMscUJBQ0osS0FBSyxDQUNULENBQUM7b0JBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ2xDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQ25CO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7bUdBL01VLEtBQUssdUdBWU0sYUFBYSw2QkFJYixpQkFBaUIsNkJBSWpCLDBCQUEwQiw2QkFJMUIsdUJBQXVCLDZCQUl2Qiw0QkFBNEI7dUdBNUJ2QyxLQUFLOzRGQUFMLEtBQUs7a0JBRGpCLFVBQVU7OzBCQWFOLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBSWhDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsaUJBQWlCOzswQkFJcEMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQywwQkFBMEI7OzBCQUk3QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHVCQUF1Qjs7MEJBSTFDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSHR0cFJlcXVlc3QsXG4gIEh0dHBFdmVudFR5cGUsXG4gIEh0dHBYaHJCYWNrZW5kLFxuICBIdHRwRXZlbnQsXG4gIEh0dHBSZXNwb25zZSxcbiAgSFRUUF9JTlRFUkNFUFRPUlMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgUXVldWUgfSBmcm9tICdAZmlyZXN0aXRjaC9jb21tb24nO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YXAsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgaXNEYXRlLCBpc1ZhbGlkLCBmb3JtYXQgfSBmcm9tICdkYXRlLWZucyc7XG5cbmltcG9ydCB7IEZzQXBpQ29uZmlnIH0gZnJvbSAnLi4vY2xhc3Nlcy9hcGktY29uZmlnJztcbmltcG9ydCB7IFJlcXVlc3RIYW5kbGVyIH0gZnJvbSAnLi4vY2xhc3Nlcy9yZXF1ZXN0LWhhbmRsZXInO1xuXG5pbXBvcnQgeyBIZWFkZXJzSGFuZGxlckludGVyY2VwdG9yIH0gZnJvbSAnLi4vaW50ZXJjZXB0b3JzL2hlYWRlcnMtaGFuZGxlci5pbnRlcmNlcHRvcic7XG5pbXBvcnQgeyBCb2R5SGFuZGxlckludGVyY2VwdG9yIH0gZnJvbSAnLi4vaW50ZXJjZXB0b3JzL2JvZHktaGFuZGxlci5pbnRlcmNlcHRvcic7XG5pbXBvcnQgeyBQYXJhbXNIYW5kbGVySW50ZXJjZXB0b3J9IGZyb20gJy4uL2ludGVyY2VwdG9ycy9wYXJhbXMtaGFuZGxlci5pbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7XG4gIEZTX0FQSV9DT05GSUcsXG4gIEZTX0FQSV9SRVFVRVNUX0lOVEVSQ0VQVE9SLFxuICBGU19BUElfUkVTUE9OU0VfSEFORExFUixcbiAgRlNfQVBJX1JFU1BPTlNFX0RBVEFfSEFORExFUixcbn0gZnJvbSAnLi4vZnMtYXBpLXByb3ZpZGVycyc7XG5cbmltcG9ydCB7IEZzQXBpUmVzcG9uc2VIYW5kbGVyIH0gZnJvbSAnLi4vaGFuZGxlcnMvcmVzcG9uc2UuaGFuZGxlcic7XG5pbXBvcnQgeyBGc0FwaVJlc3BvbnNlQm9keUhhbmRsZXIgfSBmcm9tICcuLi9oYW5kbGVycy9yZXNwb25zZS1ib2R5LmhhbmRsZXInO1xuaW1wb3J0IHsgRnNBcGlDYWNoZUhhbmRsZXIgfSBmcm9tICcuLi9oYW5kbGVycy9jYWNoZS5oYW5kbGVyJztcbmltcG9ydCB7IElNb2R1bGVDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL21vZHVsZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcXVlc3RDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZzQXBpQmFzZUhhbmRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvaGFuZGxlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXBpQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzL2FwaS1jYWNoZSc7XG5pbXBvcnQgeyBGc0FwaUZpbGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGc0FwaSB7XG5cbiAgcHVibGljIGV2ZW50cyA9IFtdO1xuICBcbiAgcHJpdmF0ZSByZWFkb25seSBfcXVldWUgPSBuZXcgUXVldWUoNSk7XG4gIHByaXZhdGUgX2NhY2hlID0gbmV3IEFwaUNhY2hlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfYXBpQ29uZmlnOiBGc0FwaUNvbmZpZyxcbiAgICBwcml2YXRlIF9odHRwOiBIdHRwWGhyQmFja2VuZCxcbiAgICBwcml2YXRlIF9zYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAvLyBDdXN0b20gaW50ZXJjZXB0b3JzXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGU19BUElfQ09ORklHKVxuICAgIHByaXZhdGUgY29uZmlnOiBJTW9kdWxlQ29uZmlnLFxuXG4gICAgLy8gQ3VzdG9tIGludGVyY2VwdG9yc1xuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSFRUUF9JTlRFUkNFUFRPUlMpXG4gICAgcHJpdmF0ZSBodHRwSW50ZXJjZXB0b3JzLFxuXG4gICAgLy8gQ3VzdG9tIGludGVyY2VwdG9yc1xuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRlNfQVBJX1JFUVVFU1RfSU5URVJDRVBUT1IpXG4gICAgcHJpdmF0ZSByZXF1ZXN0SW50ZXJjZXB0b3JzLFxuXG4gICAgLy8gT3RoZXIgY2FsbGJhY2tzXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGU19BUElfUkVTUE9OU0VfSEFORExFUilcbiAgICBwcml2YXRlIHJlc3BvbnNlSGFuZGxlcjogRnNBcGlSZXNwb25zZUhhbmRsZXIsXG5cbiAgICAvLyBPdGhlciBjYWxsYmFja3NcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEZTX0FQSV9SRVNQT05TRV9EQVRBX0hBTkRMRVIpXG4gICAgcHJpdmF0ZSByZXNwb25zZUJvZHlIYW5kbGVyOiBGc0FwaVJlc3BvbnNlQm9keUhhbmRsZXIsXG4gICkge1xuICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyID0gcmVzcG9uc2VIYW5kbGVyID8gcmVzcG9uc2VIYW5kbGVyIDogbmV3IEZzQXBpUmVzcG9uc2VIYW5kbGVyKCk7XG4gICAgdGhpcy5yZXNwb25zZUJvZHlIYW5kbGVyID0gcmVzcG9uc2VCb2R5SGFuZGxlciA/IHJlc3BvbnNlQm9keUhhbmRsZXIgOiBuZXcgRnNBcGlSZXNwb25zZUJvZHlIYW5kbGVyKCk7XG4gICAgdGhpcy5fcXVldWUuc2V0TGltaXQoKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLm1heEZpbGVDb25uZWN0aW9ucykgfHwgNSk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQXBpRmlsZSh1cmw6IHN0cmluZywgZmlsZW5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZzQXBpRmlsZSh0aGlzLCB1cmwsIGZpbGVuYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVldWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlO1xuICB9XG5cbiAgcHVibGljIGdldCBjYWNoZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FjaGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNhbml0aXplcigpOiBEb21TYW5pdGl6ZXIge1xuICAgIHJldHVybiB0aGlzLl9zYW5pdGl6ZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0KHVybCwgcXVlcnk/LCBjb25maWc/OiBSZXF1ZXN0Q29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnR0VUJywgdXJsLCBxdWVyeSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBwb3N0KHVybCwgZGF0YT86IG9iamVjdCwgY29uZmlnPzogUmVxdWVzdENvbmZpZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUE9TVCcsIHVybCwgZGF0YSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBwdXQodXJsLCBkYXRhPzogb2JqZWN0LCBjb25maWc/OiBSZXF1ZXN0Q29uZmlnKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdQVVQnLCB1cmwsIGRhdGEsIGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlKHVybCwgZGF0YT86IG9iamVjdCwgY29uZmlnPzogUmVxdWVzdENvbmZpZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnREVMRVRFJywgdXJsLCBkYXRhLCBjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHJlcXVlc3QobWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCBkYXRhPzogb2JqZWN0LCBjb25maWc/OiBSZXF1ZXN0Q29uZmlnKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25maWcgPSBPYmplY3QuYXNzaWduKG5ldyBGc0FwaUNvbmZpZygpLCB0aGlzLl9hcGlDb25maWcsIGNvbmZpZyk7XG4gICAgbWV0aG9kID0gbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgZGF0YSA9IHRoaXMuX3Nhbml0aXplKGRhdGEpO1xuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAgIGNvbmZpZy5xdWVyeSA9IGRhdGE7XG4gICAgICBkYXRhID0ge307XG5cbiAgICAgIGlmIChjb25maWcuY2FjaGUpIHtcbiAgICAgICAgY29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlLmdldCh1cmwsIGNvbmZpZy5xdWVyeSk7XG4gICAgICAgIGlmIChjYWNoZSkge1xuICAgICAgICAgIHJldHVybiBvZihjYWNoZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgY2xlYXIgcmVxdWVzdFxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgSHR0cFJlcXVlc3QoKG1ldGhvZCBhcyBhbnkpLCB1cmwsIG51bGwsIHsgXG4gICAgICByZXNwb25zZVR5cGU6IGNvbmZpZy5yZXNwb25zZVR5cGUsIFxuICAgICAgY29udGV4dDogY29uZmlnLmNvbnRleHQgXG4gICAgfSk7XG5cbiAgICBjb25zdCBJTlRFUkNFUFRPUlM6IGFueSA9IFtcbiAgICAgIG5ldyBIZWFkZXJzSGFuZGxlckludGVyY2VwdG9yKGNvbmZpZywgZGF0YSksXG4gICAgICBuZXcgQm9keUhhbmRsZXJJbnRlcmNlcHRvcihjb25maWcsIGRhdGEpLFxuICAgICAgbmV3IFBhcmFtc0hhbmRsZXJJbnRlcmNlcHRvcihjb25maWcsIGRhdGEpLFxuICAgIF07XG5cbiAgICBpZiAoY29uZmlnLmludGVyY2VwdG9ycykge1xuXG4gICAgICAvLyBBZGQgY3VzdG9tIGludGVyY2VwdG9ycyBpbnRvIGNoYWluXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnJlcXVlc3RJbnRlcmNlcHRvcnMpKSB7XG4gICAgICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IHRoaXMucmVxdWVzdEludGVyY2VwdG9yc1xuICAgICAgICAgIC5tYXAoKGludGVyY2VwdG9yKSA9PiBpbnRlcmNlcHRvcihjb25maWcsIGRhdGEpKTtcblxuICAgICAgICBJTlRFUkNFUFRPUlMucHVzaCguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnJlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSB0aGlzLnJlcXVlc3RJbnRlcmNlcHRvcnMoY29uZmlnLCBkYXRhKTtcblxuICAgICAgICBJTlRFUkNFUFRPUlMucHVzaChpbnRlcmNlcHRvcik7XG4gICAgICB9XG5cbiAgICAgIElOVEVSQ0VQVE9SUy5wdXNoKC4uLnRoaXMuaHR0cEludGVyY2VwdG9ycyk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlcnMgPSBbXTtcbiAgICBpZiAoY29uZmlnLmhhbmRsZXJzKSB7XG4gICAgICBoYW5kbGVycy5wdXNoKHRoaXMucmVzcG9uc2VCb2R5SGFuZGxlcik7XG4gICAgICBoYW5kbGVycy5wdXNoKHRoaXMucmVzcG9uc2VIYW5kbGVyKTtcbiAgICB9XG5cbiAgICBoYW5kbGVycy5wdXNoKG5ldyBGc0FwaUNhY2hlSGFuZGxlcih0aGlzLl9jYWNoZSkpO1xuXG4gICAgLy8gRXhlY3V0aW5nIG9mIGludGVyY2VwdG9yc1xuICAgIGNvbnN0IGhhbmRsZXJzQ2hhaW4gPSBJTlRFUkNFUFRPUlMucmVkdWNlUmlnaHQoXG4gICAgICAobmV4dDogYW55LCBpbnRlcmNlcHRvcjogYW55KSA9PiBuZXcgUmVxdWVzdEhhbmRsZXIobmV4dCwgaW50ZXJjZXB0b3IpLCB0aGlzLl9odHRwKTtcblxuICAgIC8vIERvIHJlcXVlc3QgYW5kIHByb2Nlc3MgdGhlIGFuc3dlclxuICAgIGNvbnN0IGNoYWluZWRSZXF1ZXN0ID0gaGFuZGxlcnNDaGFpbi5oYW5kbGUocmVxdWVzdClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5yZXBvcnRQcm9ncmVzcyB8fCBldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXI6IEZzQXBpQmFzZUhhbmRlcikgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVyLnN1Y2Nlc3MoZXZlbnQsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBtYXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xuICAgICAgICAgIHJldHVybiAoKGNvbmZpZy5tYXBIdHRwUmVzcG9uc2VCb2R5ID8/IHRydWUpICYmIGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2UpID8gZXZlbnQuYm9keSA6IGV2ZW50O1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKHtcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgaGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcjogRnNBcGlCYXNlSGFuZGVyKSA9PiB7XG4gICAgICAgICAgICAgIGhhbmRsZXIuZXJyb3IoZXJyLCBjb25maWcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgaGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcjogRnNBcGlCYXNlSGFuZGVyKSA9PiB7XG4gICAgICAgICAgICAgIGhhbmRsZXIuY29tcGxldGUoY29uZmlnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAvLyBEZXBlbmRzIG9uIGVuY29kaW5nIHdpbGwgc2VuZCBpbiBxdWV1ZSBvciByYXdcbiAgICBpZiAoY29uZmlnLmVuY29kaW5nID09PSAnZm9ybWRhdGEnKSB7XG4gICAgICBpZiAoY29uZmlnLmN1c3RvbVF1ZXVlKSB7XG4gICAgICAgIHJldHVybiBjb25maWcuY3VzdG9tUXVldWUucHVzaChjaGFpbmVkUmVxdWVzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fcXVldWUucHVzaChjaGFpbmVkUmVxdWVzdCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjaGFpbmVkUmVxdWVzdDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2FuaXRpemUgdGhlIHBhc3NlZCBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIG9ialxuICAgKi9cbiAgcHJpdmF0ZSBfc2FuaXRpemUob2JqLCBkYXRhID0ge30pIHtcbiAgICBpZihvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMob2JqKVxuICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkge1xuICAgICAgICAgICAgZGF0YVtrZXldID0gZm9ybWF0KHZhbHVlLCAneXl5eS1NTS1kZFxcJ1RcXCdISDptbTpzc3h4eCcpO1xuICAgICAgICAgIH0gXG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBbXG4gICAgICAgICAgICAuLi52YWx1ZVxuICAgICAgICAgIF07XG5cbiAgICAgICAgICB0aGlzLl9zYW5pdGl6ZSh2YWx1ZSwgZGF0YVtrZXldKTsgICBcbiAgICAgICAgfSBlbHNlIGlmKHZhbHVlIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgZGF0YVtrZXldID0ge1xuICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5fc2FuaXRpemUodmFsdWUsIGRhdGFba2V5XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3NlcnZpY2VzL2FwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzNDLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsT0FBTyxFQUNMLGlCQUFpQixFQUVqQixhQUFhLEVBQ2IsV0FBVyxFQUNYLFlBQVksRUFDWixjQUFjLEdBQ2YsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQ0wsYUFBYSxFQUNiLDBCQUEwQixFQUMxQiw0QkFBNEIsRUFDNUIsdUJBQXVCLEdBQ3hCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFF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LE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHO3dCQUNWLEdBQUcsS0FBSztxQkFDVCxDQUFDO29CQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUNsQztxQkFBTSxJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUU7b0JBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQ25CO3FCQUFNLElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRTtvQkFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQkFDSixLQUFLLENBQ1QsQ0FBQztvQkFFRixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDbEM7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDbkI7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzttR0EzTlUsS0FBSyx1R0FjTSxhQUFhLDZCQUliLGlCQUFpQiw2QkFJakIsMEJBQTBCLDZCQUkxQix1QkFBdUIsNkJBSXZCLDRCQUE0Qjt1R0E5QnZDLEtBQUs7NEZBQUwsS0FBSztrQkFEakIsVUFBVTs7MEJBZU4sUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxhQUFhOzswQkFJaEMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUlwQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDBCQUEwQjs7MEJBSTdDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsdUJBQXVCOzswQkFJMUMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHsgUXVldWUgfSBmcm9tICdAZmlyZXN0aXRjaC9jb21tb24nO1xuXG5cbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBIVFRQX0lOVEVSQ0VQVE9SUyxcbiAgSHR0cEV2ZW50LFxuICBIdHRwRXZlbnRUeXBlLFxuICBIdHRwUmVxdWVzdCxcbiAgSHR0cFJlc3BvbnNlLFxuICBIdHRwWGhyQmFja2VuZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgZm9ybWF0LCBpc0RhdGUsIGlzVmFsaWQgfSBmcm9tICdkYXRlLWZucyc7XG5cbmltcG9ydCB7IEZzQXBpRmlsZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzL2FwaS1jYWNoZSc7XG5pbXBvcnQgeyBGc0FwaUNvbmZpZyB9IGZyb20gJy4uL2NsYXNzZXMvYXBpLWNvbmZpZyc7XG5pbXBvcnQgeyBSZXF1ZXN0SGFuZGxlciB9IGZyb20gJy4uL2NsYXNzZXMvcmVxdWVzdC1oYW5kbGVyJztcbmltcG9ydCB7XG4gIEZTX0FQSV9DT05GSUcsXG4gIEZTX0FQSV9SRVFVRVNUX0lOVEVSQ0VQVE9SLFxuICBGU19BUElfUkVTUE9OU0VfREFUQV9IQU5ETEVSLFxuICBGU19BUElfUkVTUE9OU0VfSEFORExFUixcbn0gZnJvbSAnLi4vZnMtYXBpLXByb3ZpZGVycyc7XG5pbXBvcnQgeyBGc0FwaUNhY2hlSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL2NhY2hlLmhhbmRsZXInO1xuaW1wb3J0IHsgRnNBcGlSZXNwb25zZUJvZHlIYW5kbGVyIH0gZnJvbSAnLi4vaGFuZGxlcnMvcmVzcG9uc2UtYm9keS5oYW5kbGVyJztcbmltcG9ydCB7IEZzQXBpUmVzcG9uc2VIYW5kbGVyIH0gZnJvbSAnLi4vaGFuZGxlcnMvcmVzcG9uc2UuaGFuZGxlcic7XG5pbXBvcnQgeyBCb2R5SGFuZGxlckludGVyY2VwdG9yIH0gZnJvbSAnLi4vaW50ZXJjZXB0b3JzL2JvZHktaGFuZGxlci5pbnRlcmNlcHRvcic7XG5pbXBvcnQgeyBIZWFkZXJzSGFuZGxlckludGVyY2VwdG9yIH0gZnJvbSAnLi4vaW50ZXJjZXB0b3JzL2hlYWRlcnMtaGFuZGxlci5pbnRlcmNlcHRvcic7XG5pbXBvcnQgeyBQYXJhbXNIYW5kbGVySW50ZXJjZXB0b3IgfSBmcm9tICcuLi9pbnRlcmNlcHRvcnMvcGFyYW1zLWhhbmRsZXIuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHsgUmVxdWVzdENvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRnNBcGlCYXNlSGFuZGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9oYW5kbGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9tb2R1bGUtY29uZmlnLmludGVyZmFjZSc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZzQXBpIHtcblxuICBwdWJsaWMgZXZlbnRzID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcXVldWUgPSBuZXcgUXVldWUoNSk7XG4gIHByaXZhdGUgX2NhY2hlID0gbmV3IEFwaUNhY2hlKCk7XG4gIHByaXZhdGUgX3Jlc3BvbnNlSGFuZGxlcnMgPSBbbmV3IEZzQXBpUmVzcG9uc2VIYW5kbGVyKCldO1xuICBwcml2YXRlIF9yZXNwb25zZUJvZHlIYW5kbGVycyA9IFtuZXcgRnNBcGlSZXNwb25zZUJvZHlIYW5kbGVyKCldO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2FwaUNvbmZpZzogRnNBcGlDb25maWcsXG4gICAgcHJpdmF0ZSBfaHR0cDogSHR0cFhockJhY2tlbmQsXG4gICAgcHJpdmF0ZSBfc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgLy8gQ3VzdG9tIGludGVyY2VwdG9yc1xuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRlNfQVBJX0NPTkZJRylcbiAgICBwcml2YXRlIF9jb25maWc6IElNb2R1bGVDb25maWcsXG5cbiAgICAvLyBDdXN0b20gaW50ZXJjZXB0b3JzXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChIVFRQX0lOVEVSQ0VQVE9SUylcbiAgICBwcml2YXRlIF9odHRwSW50ZXJjZXB0b3JzLFxuXG4gICAgLy8gQ3VzdG9tIGludGVyY2VwdG9yc1xuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRlNfQVBJX1JFUVVFU1RfSU5URVJDRVBUT1IpXG4gICAgcHJpdmF0ZSBfcmVxdWVzdEludGVyY2VwdG9ycyxcblxuICAgIC8vIE90aGVyIGNhbGxiYWNrc1xuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRlNfQVBJX1JFU1BPTlNFX0hBTkRMRVIpXG4gICAgcHJpdmF0ZSBfcmVzcG9uc2VIYW5kbGVyOiBGc0FwaVJlc3BvbnNlSGFuZGxlcixcblxuICAgIC8vIE90aGVyIGNhbGxiYWNrc1xuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRlNfQVBJX1JFU1BPTlNFX0RBVEFfSEFORExFUilcbiAgICBwcml2YXRlIF9yZXNwb25zZUJvZHlIYW5kbGVyOiBGc0FwaVJlc3BvbnNlQm9keUhhbmRsZXIsXG4gICkge1xuICAgIGlmKF9yZXNwb25zZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMgPSBBcnJheS5pc0FycmF5KF9yZXNwb25zZUhhbmRsZXIpID9cbiAgICAgICAgX3Jlc3BvbnNlSGFuZGxlciA6XG4gICAgICAgIFtfcmVzcG9uc2VIYW5kbGVyXTtcbiAgICB9XG5cbiAgICBpZihfcmVzcG9uc2VCb2R5SGFuZGxlcikge1xuICAgICAgdGhpcy5fcmVzcG9uc2VCb2R5SGFuZGxlcnMgPSBBcnJheS5pc0FycmF5KF9yZXNwb25zZUJvZHlIYW5kbGVyKSA/XG4gICAgICAgIF9yZXNwb25zZUJvZHlIYW5kbGVyIDpcbiAgICAgICAgW19yZXNwb25zZUJvZHlIYW5kbGVyXTtcbiAgICB9XG5cbiAgICB0aGlzLl9xdWV1ZS5zZXRMaW1pdCgodGhpcy5fY29uZmlnICYmIHRoaXMuX2NvbmZpZy5tYXhGaWxlQ29ubmVjdGlvbnMpIHx8IDUpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUFwaUZpbGUodXJsOiBzdHJpbmcsIGZpbGVuYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBGc0FwaUZpbGUodGhpcywgdXJsLCBmaWxlbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHF1ZXVlKCkge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlO1xuICB9XG5cbiAgcHVibGljIGdldCBzYW5pdGl6ZXIoKTogRG9tU2FuaXRpemVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyO1xuICB9XG5cbiAgcHVibGljIGdldCh1cmwsIHF1ZXJ5PzogYW55LCBjb25maWc/OiBSZXF1ZXN0Q29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnR0VUJywgdXJsLCBxdWVyeSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBwb3N0KHVybCwgZGF0YT86IGFueSwgY29uZmlnPzogUmVxdWVzdENvbmZpZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUE9TVCcsIHVybCwgZGF0YSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBwdXQodXJsLCBkYXRhPzogYW55LCBjb25maWc/OiBSZXF1ZXN0Q29uZmlnKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdQVVQnLCB1cmwsIGRhdGEsIGNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlKHVybCwgZGF0YT86IGFueSwgY29uZmlnPzogUmVxdWVzdENvbmZpZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnREVMRVRFJywgdXJsLCBkYXRhLCBjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHJlcXVlc3QobWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCBkYXRhPzogb2JqZWN0LCBjb25maWc/OiBSZXF1ZXN0Q29uZmlnKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25maWcgPSBPYmplY3QuYXNzaWduKG5ldyBGc0FwaUNvbmZpZygpLCB0aGlzLl9hcGlDb25maWcsIGNvbmZpZyk7XG4gICAgbWV0aG9kID0gbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgZGF0YSA9IHRoaXMuX3Nhbml0aXplKGRhdGEpO1xuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAgIGNvbmZpZy5xdWVyeSA9IGRhdGE7XG4gICAgICBkYXRhID0ge307XG5cbiAgICAgIGlmIChjb25maWcuY2FjaGUpIHtcbiAgICAgICAgY29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlLmdldCh1cmwsIGNvbmZpZy5xdWVyeSk7XG4gICAgICAgIGlmIChjYWNoZSkge1xuICAgICAgICAgIHJldHVybiBvZihjYWNoZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgY2xlYXIgcmVxdWVzdFxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgSHR0cFJlcXVlc3QoKG1ldGhvZCBhcyBhbnkpLCB1cmwsIG51bGwsIHtcbiAgICAgIHJlc3BvbnNlVHlwZTogY29uZmlnLnJlc3BvbnNlVHlwZSxcbiAgICAgIGNvbnRleHQ6IGNvbmZpZy5jb250ZXh0LFxuICAgIH0pO1xuXG4gICAgY29uc3QgSU5URVJDRVBUT1JTOiBhbnkgPSBbXG4gICAgICBuZXcgSGVhZGVyc0hhbmRsZXJJbnRlcmNlcHRvcihjb25maWcsIGRhdGEpLFxuICAgICAgbmV3IEJvZHlIYW5kbGVySW50ZXJjZXB0b3IoY29uZmlnLCBkYXRhKSxcbiAgICAgIG5ldyBQYXJhbXNIYW5kbGVySW50ZXJjZXB0b3IoY29uZmlnLCBkYXRhKSxcbiAgICBdO1xuXG4gICAgaWYgKGNvbmZpZy5pbnRlcmNlcHRvcnMpIHtcblxuICAgICAgLy8gQWRkIGN1c3RvbSBpbnRlcmNlcHRvcnMgaW50byBjaGFpblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5fcmVxdWVzdEludGVyY2VwdG9ycykpIHtcbiAgICAgICAgY29uc3QgaW50ZXJjZXB0b3JzID0gdGhpcy5fcmVxdWVzdEludGVyY2VwdG9yc1xuICAgICAgICAgIC5tYXAoKGludGVyY2VwdG9yKSA9PiBpbnRlcmNlcHRvcihjb25maWcsIGRhdGEpKTtcblxuICAgICAgICBJTlRFUkNFUFRPUlMucHVzaCguLi5pbnRlcmNlcHRvcnMpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9yZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gdGhpcy5fcmVxdWVzdEludGVyY2VwdG9ycyhjb25maWcsIGRhdGEpO1xuXG4gICAgICAgIElOVEVSQ0VQVE9SUy5wdXNoKGludGVyY2VwdG9yKTtcbiAgICAgIH1cblxuICAgICAgSU5URVJDRVBUT1JTLnB1c2goLi4udGhpcy5faHR0cEludGVyY2VwdG9ycyk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlcnMgPSBbXTtcbiAgICBpZiAoY29uZmlnLmhhbmRsZXJzKSB7XG4gICAgICBoYW5kbGVycy5wdXNoKC4uLnRoaXMuX3Jlc3BvbnNlQm9keUhhbmRsZXJzKTtcbiAgICAgIGhhbmRsZXJzLnB1c2goLi4udGhpcy5fcmVzcG9uc2VIYW5kbGVycyk7XG4gICAgfVxuXG4gICAgaGFuZGxlcnMucHVzaChuZXcgRnNBcGlDYWNoZUhhbmRsZXIodGhpcy5fY2FjaGUpKTtcblxuICAgIC8vIEV4ZWN1dGluZyBvZiBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCBoYW5kbGVyc0NoYWluID0gSU5URVJDRVBUT1JTLnJlZHVjZVJpZ2h0KFxuICAgICAgKG5leHQ6IGFueSwgaW50ZXJjZXB0b3I6IGFueSkgPT4gbmV3IFJlcXVlc3RIYW5kbGVyKG5leHQsIGludGVyY2VwdG9yKSwgdGhpcy5faHR0cCk7XG5cbiAgICAvLyBEbyByZXF1ZXN0IGFuZCBwcm9jZXNzIHRoZSBhbnN3ZXJcbiAgICBjb25zdCBjaGFpbmVkUmVxdWVzdCA9IGhhbmRsZXJzQ2hhaW4uaGFuZGxlKHJlcXVlc3QpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb25maWcucmVwb3J0UHJvZ3Jlc3MgfHwgZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2U7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xuICAgICAgICAgIGlmIChldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlKSB7XG4gICAgICAgICAgICBoYW5kbGVycy5mb3JFYWNoKChoYW5kbGVyOiBGc0FwaUJhc2VIYW5kZXIpID0+IHtcbiAgICAgICAgICAgICAgaGFuZGxlci5zdWNjZXNzKGV2ZW50LCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbWFwKChldmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcbiAgICAgICAgICByZXR1cm4gKChjb25maWcubWFwSHR0cFJlc3BvbnNlQm9keSA/PyB0cnVlKSAmJiBldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlKSA/IGV2ZW50LmJvZHkgOiBldmVudDtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCh7XG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXI6IEZzQXBpQmFzZUhhbmRlcikgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVyLmVycm9yKGVyciwgY29uZmlnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXI6IEZzQXBpQmFzZUhhbmRlcikgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVyLmNvbXBsZXRlKGNvbmZpZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAvLyBEZXBlbmRzIG9uIGVuY29kaW5nIHdpbGwgc2VuZCBpbiBxdWV1ZSBvciByYXdcbiAgICBpZiAoY29uZmlnLmVuY29kaW5nID09PSAnZm9ybWRhdGEnKSB7XG4gICAgICBpZiAoY29uZmlnLmN1c3RvbVF1ZXVlKSB7XG4gICAgICAgIHJldHVybiBjb25maWcuY3VzdG9tUXVldWUucHVzaChjaGFpbmVkUmVxdWVzdCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9xdWV1ZS5wdXNoKGNoYWluZWRSZXF1ZXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hhaW5lZFJlcXVlc3Q7XG4gIH1cblxuICAvKipcbiAgICogU2FuaXRpemUgdGhlIHBhc3NlZCBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIG9ialxuICAgKi9cbiAgcHJpdmF0ZSBfc2FuaXRpemUob2JqLCBkYXRhID0ge30pIHtcbiAgICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG9iailcbiAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7XG4gICAgICAgICAgICAgIGRhdGFba2V5XSA9IGZvcm1hdCh2YWx1ZSwgJ3l5eXktTU0tZGRcXCdUXFwnSEg6bW06c3N4eHgnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBkYXRhW2tleV0gPSBbXG4gICAgICAgICAgICAgIC4uLnZhbHVlLFxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgdGhpcy5fc2FuaXRpemUodmFsdWUsIGRhdGFba2V5XSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIGRhdGFba2V5XSA9IHtcbiAgICAgICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLl9zYW5pdGl6ZSh2YWx1ZSwgZGF0YVtrZXldKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG59XG4iXX0=

@@ -0,6 +1,7 @@

import { CommonModule } from '@angular/common';
import * as i0 from '@angular/core';
import { Injectable, Optional, Inject, InjectionToken, Directive, Input, Pipe, NgModule } from '@angular/core';
import * as i2 from '@angular/common/http';
import { HttpHeaders, HttpUrlEncodingCodec, HttpParams, HttpRequest, HttpResponse, HttpEventType, HTTP_INTERCEPTORS, HttpClientModule, HttpXhrBackend, HttpBackend, HttpContextToken } from '@angular/common/http';
import * as i0 from '@angular/core';
import { InjectionToken, Injectable, Optional, Inject, Directive, Input, Pipe, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HttpUrlEncodingCodec, HttpHeaders, HttpParams, HttpRequest, HttpResponse, HttpEventType, HTTP_INTERCEPTORS, HttpClientModule, HttpXhrBackend, HttpBackend, HttpContextToken } from '@angular/common/http';
import * as i3 from '@angular/platform-browser';
import { Queue } from '@firestitch/common';

@@ -11,9 +12,3 @@ import { Observable, of } from 'rxjs';

import { parse, parseLocal } from '@firestitch/date';
import * as i3 from '@angular/platform-browser';
const FS_API_REQUEST_INTERCEPTOR = new InjectionToken('fs-api.request_interceptor');
const FS_API_RESPONSE_HANDLER = new InjectionToken('fs-api.response_handler');
const FS_API_RESPONSE_DATA_HANDLER = new InjectionToken('fs-api.response_data_handler');
const FS_API_CONFIG = new InjectionToken('fs-api.config');
var ResponseType;

@@ -57,2 +52,98 @@ (function (ResponseType) {

class FsApiFile {
constructor(api, url, filename) {
this._url = url;
this._api = api;
this._name = filename;
if (!this._name) {
this._name = (url || '').replace(/\?.*/, '');
this._name = this._name.substring(this._name.lastIndexOf('/') + 1);
}
}
get name() {
return this._name;
}
get blob() {
return this._api
.get(this._url, {}, { handlers: false, responseType: ResponseType.Blob });
}
get file() {
return this._api
.get(this._url, {}, {
handlers: false,
responseType: ResponseType.Blob,
mapHttpResponseBody: false,
})
.pipe(map((event) => {
let filename = (event.headers.getAll('Content-Disposition') || [])
.reduce((accum, item) => {
const matches = item.match(/filename="([^"]+)"/);
return matches ? matches[1] : accum;
}, '');
if (!filename) {
const url = new URL(event.url);
filename = url.pathname.split('/').pop();
}
return new File([event.body], filename);
}));
}
get blobUrl() {
return this.blob
.pipe(map((blob) => URL.createObjectURL(blob)));
}
get base64() {
return this.blob
.pipe(switchMap((blob) => new Observable((observer) => {
const reader = new FileReader();
reader.readAsDataURL(blob);
reader.onload = () => {
observer.next(reader.result);
observer.complete();
};
reader.onerror = (error) => observer.error(error);
})));
}
get safeBase64Url() {
return this.base64
.pipe(map((data) => this._api.sanitizer.bypassSecurityTrustUrl(data)));
}
get safeBase64ResourceUrl() {
return this.base64
.pipe(map((data) => this._api.sanitizer.bypassSecurityTrustResourceUrl(data)));
}
get safeDataUrl() {
return this.blob
.pipe(map((blob) => URL.createObjectURL(blob)), map((data) => this._api.sanitizer.bypassSecurityTrustUrl(data)));
}
download(name) {
this.file
.subscribe((file) => {
const a = document.createElement('a');
document.body.appendChild(a);
a.style.display = 'none';
a.href = URL.createObjectURL(file);
name = name ? name : file.name;
if (name) {
a.download = name;
}
a.click();
});
}
}
class CustomParamsEncoder extends HttpUrlEncodingCodec {
encodeKey(key) {
return encodeURIComponent(key);
}
encodeValue(value) {
return encodeURIComponent(value);
}
decodeKey(key) {
return decodeURIComponent(key);
}
decodeValue(value) {
return decodeURIComponent(value);
}
}
class RequestHandler {

@@ -68,35 +159,104 @@ constructor(next, interceptor) {

class RequestInterceptor {
constructor(_config, _data) {
this._config = _config;
this._data = _data;
class ApiCache {
constructor() {
this._cache = Array();
}
intercept(req, next) {
return next.handle(req);
get(name, params) {
const cache = this._cache[name];
if (!cache) {
return null;
}
const paramHash = this._paramHash(params);
const data = cache[paramHash];
if (data) {
if (differenceInMinutes(new Date(), data.date.getTime()) > 30) {
delete this._cache[name][paramHash];
}
return data.data;
}
return null;
}
set(name, params, data) {
if (!this._cache[name]) {
this._cache[name] = [];
}
this._cache[name][this._paramHash(params)] = { data: data, date: new Date() };
}
clear(name) {
Object.keys(this._cache).forEach(key => {
if (name.match(new RegExp(`^${key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}`))) {
delete this._cache[key];
}
});
}
_paramHash(params) {
return JSON.stringify(params);
}
}
function lookupBlob(data, level = 0) {
level++;
// Depth limit
if (level > 10) {
throw Error('Maximum call stack size exceeded');
const FS_API_REQUEST_INTERCEPTOR = new InjectionToken('fs-api.request_interceptor');
const FS_API_RESPONSE_HANDLER = new InjectionToken('fs-api.response_handler');
const FS_API_RESPONSE_DATA_HANDLER = new InjectionToken('fs-api.response_data_handler');
const FS_API_CONFIG = new InjectionToken('fs-api.config');
class FsApiCacheHandler {
constructor(cache) {
this._cache = cache;
}
if (!data) {
return false;
success(response, config, request) {
if (request.method === 'GET') {
if (config.cache && (request.responseType === 'json' || request.responseType === 'text')) {
this._cache.set(request.url, config.query, response.body);
}
}
else {
this._cache.clear(request.url);
}
}
return Object.keys(data).some((key) => {
const item = data[key];
if (item instanceof File || item instanceof Blob) {
return true;
error(error, config) { }
complete(config) { }
}
class FsApiResponseBodyHandler {
success(event, config) {
var _a;
this.processData((_a = event.body) === null || _a === void 0 ? void 0 : _a.data);
}
error(error, config) { }
complete(config) { }
processData(data) {
if (data instanceof Object) {
for (const key of Object.keys(data)) {
data[key] = this.processData(data[key]);
}
}
else if (item instanceof Object || Array.isArray(item)) {
return lookupBlob(item, level);
else {
if (typeof data === 'string') {
const match = data.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}([+-]\d{2}:\d{2}|\.\d{3}Z)?$/);
if (match) {
data = match[1] ? parse(data) : parseLocal(data);
}
}
}
});
return data;
}
}
class HeadersHandlerInterceptor extends RequestInterceptor {
class FsApiResponseHandler {
success(event, config) {
event.body = event.body.data;
if (config.key) {
event.body = event.body[config.key];
}
}
error(error, config) {
//
}
complete(config) {
//
}
}
class RequestInterceptor {
constructor(_config, _data) {
super(_config, _data);
this._config = _config;

@@ -106,29 +266,3 @@ this._data = _data;

intercept(req, next) {
let headers = new HttpHeaders();
Object.keys(this._config.headers)
.forEach((name) => {
headers = headers.set(name, this._config.headers[name]);
});
if (lookupBlob(this._data)) {
this._config.encoding = 'formdata';
}
switch (this._config.encoding) {
case 'url':
{
headers = headers.set('Content-Type', 'application/x-www-form-urlencoded');
}
break;
case 'json':
{
headers = headers.set('Content-Type', 'text/json');
}
break;
case 'formdata':
{
headers = headers.delete('Content-Type');
}
break;
}
const modified = req.clone({ headers: headers });
return next.handle(modified);
return next.handle(req);
}

@@ -197,14 +331,56 @@ }

class CustomParamsEncoder extends HttpUrlEncodingCodec {
encodeKey(key) {
return encodeURIComponent(key);
function lookupBlob(data, level = 0) {
level++;
// Depth limit
if (level > 10) {
throw Error('Maximum call stack size exceeded');
}
encodeValue(value) {
return encodeURIComponent(value);
if (!data) {
return false;
}
decodeKey(key) {
return decodeURIComponent(key);
return Object.keys(data).some((key) => {
const item = data[key];
if (item instanceof File || item instanceof Blob) {
return true;
}
else if (item instanceof Object || Array.isArray(item)) {
return lookupBlob(item, level);
}
});
}
class HeadersHandlerInterceptor extends RequestInterceptor {
constructor(_config, _data) {
super(_config, _data);
this._config = _config;
this._data = _data;
}
decodeValue(value) {
return decodeURIComponent(value);
intercept(req, next) {
let headers = new HttpHeaders();
Object.keys(this._config.headers)
.forEach((name) => {
headers = headers.set(name, this._config.headers[name]);
});
if (lookupBlob(this._data)) {
this._config.encoding = 'formdata';
}
switch (this._config.encoding) {
case 'url':
{
headers = headers.set('Content-Type', 'application/x-www-form-urlencoded');
}
break;
case 'json':
{
headers = headers.set('Content-Type', 'text/json');
}
break;
case 'formdata':
{
headers = headers.delete('Content-Type');
}
break;
}
const modified = req.clone({ headers: headers });
return next.handle(modified);
}

@@ -235,196 +411,38 @@ }

class FsApiResponseHandler {
success(event, config) {
event.body = event.body.data;
if (config.key) {
event.body = event.body[config.key];
}
}
error(error, config) { }
complete(config) { }
}
class FsApiResponseBodyHandler {
success(event, config) {
var _a;
this.processData((_a = event.body) === null || _a === void 0 ? void 0 : _a.data);
}
error(error, config) { }
complete(config) { }
processData(data) {
if (data instanceof Object) {
for (const key of Object.keys(data)) {
data[key] = this.processData(data[key]);
}
}
else {
if (typeof data === 'string') {
const match = data.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}([+-]\d{2}:\d{2}|\.\d{3}Z)?$/);
if (match) {
data = match[1] ? parse(data) : parseLocal(data);
}
}
}
return data;
}
}
class FsApiCacheHandler {
constructor(cache) {
this._cache = cache;
}
success(response, config, request) {
if (request.method === 'GET') {
if (config.cache && (request.responseType === 'json' || request.responseType === 'text')) {
this._cache.set(request.url, config.query, response.body);
}
}
else {
this._cache.clear(request.url);
}
}
error(error, config) { }
complete(config) { }
}
class ApiCache {
constructor() {
this._cache = Array();
}
get(name, params) {
const cache = this._cache[name];
if (!cache) {
return null;
}
const paramHash = this._paramHash(params);
const data = cache[paramHash];
if (data) {
if (differenceInMinutes(new Date(), data.date.getTime()) > 30) {
delete this._cache[name][paramHash];
}
return data.data;
}
return null;
}
set(name, params, data) {
if (!this._cache[name]) {
this._cache[name] = [];
}
this._cache[name][this._paramHash(params)] = { data: data, date: new Date() };
}
clear(name) {
Object.keys(this._cache).forEach(key => {
if (name.match(new RegExp(`^${key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}`))) {
delete this._cache[key];
}
});
}
_paramHash(params) {
return JSON.stringify(params);
}
}
class FsApiFile {
constructor(api, url, filename) {
this._url = url;
this._api = api;
this._name = filename;
if (!this._name) {
this._name = (url || '').replace(/\?.*/, '');
this._name = this._name.substring(this._name.lastIndexOf('/') + 1);
}
}
get name() {
return this._name;
}
get blob() {
return this._api
.get(this._url, {}, { handlers: false, responseType: ResponseType.Blob });
}
get file() {
return this._api
.get(this._url, {}, { handlers: false, responseType: ResponseType.Blob, mapHttpResponseBody: false })
.pipe(map((event) => {
let filename = (event.headers.getAll('Content-Disposition') || [])
.reduce((accum, item) => {
const matches = item.match(/filename="([^"]+)"/);
return matches ? matches[1] : accum;
}, '');
if (!filename) {
const url = new URL(event.url);
filename = url.pathname.split('/').pop();
}
return new File([event.body], filename);
}));
}
get blobUrl() {
return this.blob
.pipe(map((blob) => URL.createObjectURL(blob)));
}
get base64() {
return this.blob
.pipe(switchMap((blob) => new Observable((observer) => {
const reader = new FileReader();
reader.readAsDataURL(blob);
reader.onload = () => {
observer.next(reader.result);
observer.complete();
};
reader.onerror = error => observer.error(error);
})));
}
get safeBase64Url() {
return this.base64
.pipe(map((data) => this._api.sanitizer.bypassSecurityTrustUrl(data)));
}
get safeBase64ResourceUrl() {
return this.base64
.pipe(map((data) => this._api.sanitizer.bypassSecurityTrustResourceUrl(data)));
}
get safeDataUrl() {
return this.blob
.pipe(map((blob) => URL.createObjectURL(blob)), map((data) => this._api.sanitizer.bypassSecurityTrustUrl(data)));
}
download(name) {
this.file
.subscribe((file) => {
const a = document.createElement('a');
document.body.appendChild(a);
a.style.display = 'none';
a.href = URL.createObjectURL(file);
name = name ? name : file.name;
if (name) {
a.download = name;
}
a.click();
});
}
}
class FsApi {
constructor(_apiConfig, _http, _sanitizer,
// Custom interceptors
config,
_config,
// Custom interceptors
httpInterceptors,
_httpInterceptors,
// Custom interceptors
requestInterceptors,
_requestInterceptors,
// Other callbacks
responseHandler,
_responseHandler,
// Other callbacks
responseBodyHandler) {
_responseBodyHandler) {
this._apiConfig = _apiConfig;
this._http = _http;
this._sanitizer = _sanitizer;
this.config = config;
this.httpInterceptors = httpInterceptors;
this.requestInterceptors = requestInterceptors;
this.responseHandler = responseHandler;
this.responseBodyHandler = responseBodyHandler;
this._config = _config;
this._httpInterceptors = _httpInterceptors;
this._requestInterceptors = _requestInterceptors;
this._responseHandler = _responseHandler;
this._responseBodyHandler = _responseBodyHandler;
this.events = [];
this._queue = new Queue(5);
this._cache = new ApiCache();
this.responseHandler = responseHandler ? responseHandler : new FsApiResponseHandler();
this.responseBodyHandler = responseBodyHandler ? responseBodyHandler : new FsApiResponseBodyHandler();
this._queue.setLimit((this.config && this.config.maxFileConnections) || 5);
this._responseHandlers = [new FsApiResponseHandler()];
this._responseBodyHandlers = [new FsApiResponseBodyHandler()];
if (_responseHandler) {
this._responseHandlers = Array.isArray(_responseHandler) ?
_responseHandler :
[_responseHandler];
}
if (_responseBodyHandler) {
this._responseBodyHandlers = Array.isArray(_responseBodyHandler) ?
_responseBodyHandler :
[_responseBodyHandler];
}
this._queue.setLimit((this._config && this._config.maxFileConnections) || 5);
}

@@ -472,3 +490,3 @@ createApiFile(url, filename) {

responseType: config.responseType,
context: config.context
context: config.context,
});

@@ -482,17 +500,17 @@ const INTERCEPTORS = [

// Add custom interceptors into chain
if (Array.isArray(this.requestInterceptors)) {
const interceptors = this.requestInterceptors
if (Array.isArray(this._requestInterceptors)) {
const interceptors = this._requestInterceptors
.map((interceptor) => interceptor(config, data));
INTERCEPTORS.push(...interceptors);
}
else if (this.requestInterceptors) {
const interceptor = this.requestInterceptors(config, data);
else if (this._requestInterceptors) {
const interceptor = this._requestInterceptors(config, data);
INTERCEPTORS.push(interceptor);
}
INTERCEPTORS.push(...this.httpInterceptors);
INTERCEPTORS.push(...this._httpInterceptors);
}
const handlers = [];
if (config.handlers) {
handlers.push(this.responseBodyHandler);
handlers.push(this.responseHandler);
handlers.push(...this._responseBodyHandlers);
handlers.push(...this._responseHandlers);
}

@@ -525,3 +543,3 @@ handlers.push(new FsApiCacheHandler(this._cache));

});
}
},
}));

@@ -533,9 +551,5 @@ // Depends on encoding will send in queue or raw

}
else {
return this._queue.push(chainedRequest);
}
return this._queue.push(chainedRequest);
}
else {
return chainedRequest;
}
return chainedRequest;
}

@@ -562,3 +576,3 @@ /**

data[key] = [
...value
...value,
];

@@ -667,3 +681,3 @@ this._sanitize(value, data[key]);

FsApi,
]
],
};

@@ -684,3 +698,3 @@ }

CommonModule,
HttpClientModule
HttpClientModule,
]] });

@@ -692,3 +706,3 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsApiModule, decorators: [{

CommonModule,
HttpClientModule
HttpClientModule,
],

@@ -708,3 +722,3 @@ declarations: [

FsApiImagePipe,
]
],
}]

@@ -711,0 +725,0 @@ }] });

{
"name": "@firestitch/api",
"version": "12.3.10",
"version": "12.4.0",
"repository": {

@@ -5,0 +5,0 @@ "type": "git",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc