ngx-http-configure
Version:
Angular (6+) helpers for configure HTTP interceptors and services.
140 lines (133 loc) • 4.03 kB
JavaScript
import { HttpParams } from '@angular/common/http';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/** @type {?} */
const HTTP_OPTIONS_KEYS = [
'headers',
'observe',
'params',
'reportProgress',
'responseType',
'withCredentials',
];
/** @type {?} */
const HTTP_OPTION_PREFIX = '~';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @template T
* @param {?} options
* @param {?} predicate
* @param {?=} keyPrefix
* @return {?}
*/
function filterOptions(options, predicate, keyPrefix = '') {
return Object.keys(options).reduce((/**
* @param {?} acc
* @param {?} key
* @return {?}
*/
(acc, key) => {
if (predicate(key)) {
/** @type {?} */
const prefixedKey = `${keyPrefix}${key}`;
/** @type {?} */
let value = options[key];
if (value instanceof HttpParams) {
value = value.keys().reduce((/**
* @param {?} p
* @param {?} k
* @return {?}
*/
(p, k) => (Object.assign({}, p, { [k]: value.get(k) }))), {});
}
acc[prefixedKey] = value;
}
return acc;
}), (/** @type {?} */ ({})));
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* Configure the http client options tu extend functionality and use in interceptors.
* @param {?} options Set of extended http client options
* @return {?}
*/
function configure(options) {
/** @type {?} */
const safeOptions = filterOptions(options, (/**
* @param {?} key
* @return {?}
*/
(key) => HTTP_OPTIONS_KEYS.includes(key)));
/** @type {?} */
const extraParams = filterOptions(options, (/**
* @param {?} key
* @return {?}
*/
(key) => !HTTP_OPTIONS_KEYS.includes(key)), HTTP_OPTION_PREFIX);
safeOptions.params = Object.assign({}, safeOptions.params, extraParams);
return safeOptions;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @param {?} selector
* @return {?}
*/
function selectorPredicate(selector) {
return (/**
* @param {?} key
* @return {?}
*/
key => Array.isArray(selector)
? selector.map((/**
* @param {?} sel
* @return {?}
*/
sel => `${HTTP_OPTION_PREFIX}${sel}`)).includes(key)
: true);
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* Re-configure a request previously configured with this library.
* @param {?} request The current http request
* @param {?=} selector Apply params to array else ignore this filters
* @return {?}
*/
function reconfigure(request, selector) {
/** @type {?} */
const predicate = selectorPredicate(selector);
const { config, params } = request.params.keys().reduce((/**
* @param {?} acc
* @param {?} key
* @return {?}
*/
(acc, key) => {
/** @type {?} */
const value = request.params.get(key);
if (key.startsWith(HTTP_OPTION_PREFIX) && predicate(key)) {
/** @type {?} */
const unprefixedKey = key.replace(HTTP_OPTION_PREFIX, '');
acc.config[unprefixedKey] = value;
}
else {
acc.params = acc.params.set(key, value);
}
return acc;
}), { config: {}, params: new HttpParams() });
return { config, request: request.clone({ params }) };
}
export { configure, reconfigure };
//# sourceMappingURL=ngx-http-configure.js.map