27 lines
1.2 KiB
JavaScript
27 lines
1.2 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.composeInterceptors = composeInterceptors;
|
|
/**
|
|
* Compose all interceptor methods into a single function.
|
|
*
|
|
* Calling the composed function results in calling each of the provided interceptor, in order (from the first to
|
|
* the last), followed by the original function provided as argument to `composeInterceptors()`.
|
|
*
|
|
* @param interceptors a list of interceptors
|
|
* @param method the name of the interceptor method to compose
|
|
* @param next the original function to be executed at the end of the interception chain
|
|
*/
|
|
// ts-prune-ignore-next (imported via lib/interceptors)
|
|
function composeInterceptors(interceptors, method, next) {
|
|
for (let i = interceptors.length - 1; i >= 0; --i) {
|
|
const interceptor = interceptors[i];
|
|
if (interceptor?.[method] !== undefined) {
|
|
const prev = next;
|
|
// We lose type safety here because Typescript can't deduce that interceptor[method] is a function that returns
|
|
// the same type as Next<I, M>
|
|
next = ((input) => interceptor[method](input, prev));
|
|
}
|
|
}
|
|
return next;
|
|
}
|
|
//# sourceMappingURL=interceptors.js.map
|