@firestitch/api
Advanced tools
Comparing version 12.3.10 to 12.4.0
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3NlcnZpY2VzL2FwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsV0FBVyxFQUNYLGFBQWEsRUFDYixjQUFjLEVBRWQsWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUzQyxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSx3QkFBd0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBRXJGLE9BQU8sRUFDTCxhQUFhLEVBQ2IsMEJBQTBCLEVBQzFCLHVCQUF1QixFQUN2Qiw0QkFBNEIsR0FDN0IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJB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LEdBQUcsS0FBSyxDQUFDO2lCQUNuQjtxQkFBTSxJQUFJLEtBQUssWUFBWSxNQUFNLEVBQUU7b0JBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMscUJBQ0osS0FBSyxDQUNULENBQUM7b0JBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ2xDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQ25CO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7bUdBL01VLEtBQUssdUdBWU0sYUFBYSw2QkFJYixpQkFBaUIsNkJBSWpCLDBCQUEwQiw2QkFJMUIsdUJBQXVCLDZCQUl2Qiw0QkFBNEI7dUdBNUJ2QyxLQUFLOzRGQUFMLEtBQUs7a0JBRGpCLFVBQVU7OzBCQWFOLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBSWhDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsaUJBQWlCOzswQkFJcEMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQywwQkFBMEI7OzBCQUk3QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHVCQUF1Qjs7MEJBSTFDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSHR0cFJlcXVlc3QsXG4gIEh0dHBFdmVudFR5cGUsXG4gIEh0dHBYaHJCYWNrZW5kLFxuICBIdHRwRXZlbnQsXG4gIEh0dHBSZXNwb25zZSxcbiAgSFRUUF9JTlRFUkNFUFRPUlMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgUXVldWUgfSBmcm9tICdAZmlyZXN0aXRjaC9jb21tb24nO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YXAsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgaXNEYXRlLCBpc1ZhbGlkLCBmb3JtYXQgfSBmcm9tICdkYXRlLWZucyc7XG5cbmltcG9ydCB7IEZzQXBpQ29uZmlnIH0gZnJvbSAnLi4vY2xhc3Nlcy9hcGktY29uZmlnJztcbmltcG9ydCB7IFJlcXVlc3RIYW5kbGVyIH0gZnJvbSAnLi4vY2xhc3Nlcy9yZXF1ZXN0LWhhbmRsZXInO1xuXG5pbXBvcnQgeyBIZWFkZXJzSGFuZGxlckludGVyY2VwdG9yIH0gZnJvbSAnLi4vaW50ZXJjZXB0b3JzL2hlYWRlcnMtaGFuZGxlci5pbnRlcmNlcHRvcic7XG5pbXBvcnQgeyBCb2R5SGFuZGxlckludGVyY2VwdG9yIH0gZnJvbSAnLi4vaW50ZXJjZXB0b3JzL2JvZHktaGFuZGxlci5pbnRlcmNlcHRvcic7XG5pbXBvcnQgeyBQYXJhbXNIYW5kbGVySW50ZXJjZXB0b3J9IGZyb20gJy4uL2ludGVyY2VwdG9ycy9wYXJhbXMtaGFuZGxlci5pbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7XG4gIEZTX0FQSV9DT05GSUcsXG4gIEZTX0FQSV9SRVFVRVNUX0lOVEVSQ0VQVE9SLFxuICBGU19BUElfUkVTUE9OU0VfSEFORExFUixcbiAgRlNfQVBJX1JFU1BPTlNFX0RBVEFfSEFORExFUixcbn0gZnJvbSAnLi4vZnMtYXBpLXByb3ZpZGVycyc7XG5cbmltcG9ydCB7IEZzQXBpUmVzcG9uc2VIYW5kbGVyIH0gZnJvbSAnLi4vaGFuZGxlcnMvcmVzcG9uc2UuaGFuZGxlcic7XG5pbXBvcnQgeyBGc0FwaVJlc3BvbnNlQm9keUhhbmRsZXIgfSBmcm9tICcuLi9oYW5kbGVycy9yZXNwb25zZS1ib2R5LmhhbmRsZXInO1xuaW1wb3J0IHsgRnNBcGlDYWNoZUhhbmRsZXIgfSBmcm9tICcuLi9oYW5kbGVycy9jYWNoZS5oYW5kbGVyJztcbmltcG9ydCB7IElNb2R1bGVDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL21vZHVsZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcXVlc3RDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZzQXBpQmFzZUhhbmRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvaGFuZGxlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXBpQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzL2FwaS1jYWNoZSc7XG5pbXBvcnQgeyBGc0FwaUZpbGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGc0FwaSB7XG5cbiAgcHVibGljIGV2ZW50cyA9IFtdO1xuICBcbiAgcHJpdmF0ZSByZWFkb25seSBfcXVldWUgPSBuZXcgUXVldWUoNSk7XG4gIHByaXZhdGUgX2NhY2hlID0gbmV3IEFwaUNhY2hlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfYXBpQ29uZmlnOiBGc0FwaUNvbmZpZyxcbiAgICBwcml2YXRlIF9odHRwOiBIdHRwWGhyQmFja2VuZCxcbiAgICBwcml2YXRlIF9zYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAvLyBDdXN0b20gaW50ZXJjZXB0b3JzXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGU19BUElfQ09ORklHKVxuICAgIHByaXZhdGUgY29uZmlnOiBJTW9kdWxlQ29uZmlnLFxuXG4gICAgLy8gQ3VzdG9tIGludGVyY2VwdG9yc1xuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSFRUUF9JTlRFUkNFUFRPUlMpXG4gICAgcHJpdmF0ZSBodHRwSW50ZXJjZXB0b3JzLFxuXG4gICAgLy8gQ3VzdG9tIGludGVyY2VwdG9yc1xuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRlNfQVBJX1JFUVVFU1RfSU5URVJDRVBUT1IpXG4gICAgcHJpdmF0ZSByZXF1ZXN0SW50ZXJjZXB0b3JzLFxuXG4gICAgLy8gT3RoZXIgY2FsbGJhY2tzXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGU19BUElfUkVTUE9OU0VfSEFORExFUilcbiAgICBwcml2YXRlIHJlc3BvbnNlSGFuZGxlcjogRnNBcGlSZXNwb25zZUhhbmRsZXIsXG5cbiAgICAvLyBPdGhlciBjYWxsYmFja3NcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEZTX0FQSV9SRVNQT05TRV9EQVRBX0hBTkRMRVIpXG4gICAgcHJpdmF0ZSByZXNwb25zZUJvZHlIYW5kbGVyOiBGc0FwaVJlc3BvbnNlQm9keUhhbmRsZXIsXG4gICkge1xuICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyID0gcmVzcG9uc2VIYW5kbGVyID8gcmVzcG9uc2VIYW5kbGVyIDogbmV3IEZzQXBpUmVzcG9uc2VIYW5kbGVyKCk7XG4gICAgdGhpcy5yZXNwb25zZUJvZHlIYW5kbGVyID0gcmVzcG9uc2VCb2R5SGFuZGxlciA/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
334120
2947