@ackee/antonio-core
Version:
A HTTP client built on fetch API with axios-like API.
77 lines (74 loc) • 7.43 kB
JavaScript
class ResponseInterceptorManager {
id;
interceptors;
constructor() {
this.id = 0;
this.interceptors = new Map();
}
/**
* Intercept every response with attached methods:
* 1. onFulfilled - Called if `response.ok` is `true`.
* 2. onRejected - Called if `fetch`, any of `onFulfilled` callbackes throw an error or `response.ok` is `false`.
* ### `onFulfilled` examples:
*
* _1. Blank_
* @example
* ```ts
* import { Antonio } from `@ackee/antonio-core`;
* const api = new Antonio();
*
* api.interceptors.response.use(function*(response, request, requestParams) {
* // Dunno. Do something with the `response` and then return it.
* return response;
* })
* ```
*
* ### `onRejected` examples:
*
* _1. Silent response error if status matches, for instance, to `123`_
* @example
* ```ts
* import { Antonio, isAntonioError } from `@ackee/antonio-core`;
* const api = new Antonio();
*
* api.interceptors.response.use(null, function*(error) {
* if (isAntonioError(error) && error.response.status === 123) {
* return null;
* }
*
* return error;
* })
* ```
*
* _2. Log (e.g. to Sentry) only errors that match some specific criteria_
* @example
* ```ts
* import { Antonio, isAntonioError } from `@ackee/antonio-core`;
* const api = new Antonio();
*
* api.interceptors.response.use(null, error => {
* if (!isAntonioError(error)) {
* Sentry.captureException(error)
* }
*
* return error;
* })
* ```
*/
use(onFulfilled, onRejected) {
const nextId = this.id++;
this.interceptors.set(nextId, {
onFulfilled,
onRejected
});
return nextId;
}
/**
* Remove an interceptor by passing here the id from `use` method.
*/
eject(id) {
return this.interceptors.delete(id);
}
}
export default ResponseInterceptorManager;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZXNwb25zZUludGVyY2VwdG9yTWFuYWdlciIsImlkIiwiaW50ZXJjZXB0b3JzIiwiY29uc3RydWN0b3IiLCJNYXAiLCJ1c2UiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJuZXh0SWQiLCJzZXQiLCJlamVjdCIsImRlbGV0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2R1bGVzL2ludGVyY2VwdG9ycy9yZXNwb25zZUludGVyY2VwdG9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJlcXVlc3RQYXJhbXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEFudG9uaW9FcnJvciB9IGZyb20gJy4uLy4uL21vZHVsZXMvcmVzcG9uc2UvZXJyb3JzJztcblxuaW50ZXJmYWNlIE9uUmVzcG9uc2VGdWxmaWxsZWQge1xuICAgIChyZXNwb25zZTogUmVzcG9uc2UsIHJlcXVlc3Q6IFJlcXVlc3QsIHJlcXVlc3RQYXJhbXM6IFJlcXVlc3RQYXJhbXMpOlxuICAgICAgICB8IFJlc3BvbnNlXG4gICAgICAgIHwgR2VuZXJhdG9yPHVua25vd24sIFJlc3BvbnNlPlxuICAgICAgICB8IFByb21pc2U8UmVzcG9uc2U+O1xufVxuXG50eXBlIE9uUmVzcG9uc2VSZWplY3RlZFJlc3VsdCA9IEFudG9uaW9FcnJvciB8IEVycm9yIHwgbnVsbDtcblxuaW50ZXJmYWNlIE9uUmVzcG9uc2VSZWplY3RlZCB7XG4gICAgKGVycm9yOiBBbnRvbmlvRXJyb3IgfCBFcnJvciwgcmVxdWVzdDogUmVxdWVzdCwgcmVxdWVzdFBhcmFtczogUmVxdWVzdFBhcmFtcyk6XG4gICAgICAgIHwgT25SZXNwb25zZVJlamVjdGVkUmVzdWx0XG4gICAgICAgIHwgUHJvbWlzZTxPblJlc3BvbnNlUmVqZWN0ZWRSZXN1bHQ+O1xufVxuXG5leHBvcnQgdHlwZSBSZXNwb25zZUludGVyY2VwdG9ycyA9IE1hcDxcbiAgICBudW1iZXIsXG4gICAge1xuICAgICAgICBvbkZ1bGZpbGxlZD86IE9uUmVzcG9uc2VGdWxmaWxsZWQ7XG4gICAgICAgIG9uUmVqZWN0ZWQ/OiBPblJlc3BvbnNlUmVqZWN0ZWQ7XG4gICAgfVxuPjtcblxuY2xhc3MgUmVzcG9uc2VJbnRlcmNlcHRvck1hbmFnZXIge1xuICAgIHByaXZhdGUgaWQ6IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgaW50ZXJjZXB0b3JzOiBSZXNwb25zZUludGVyY2VwdG9ycztcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmlkID0gMDtcbiAgICAgICAgdGhpcy5pbnRlcmNlcHRvcnMgPSBuZXcgTWFwKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW50ZXJjZXB0IGV2ZXJ5IHJlc3BvbnNlIHdpdGggYXR0YWNoZWQgbWV0aG9kczpcbiAgICAgKiAxLiBvbkZ1bGZpbGxlZCAtIENhbGxlZCBpZiBgcmVzcG9uc2Uub2tgIGlzIGB0cnVlYC5cbiAgICAgKiAyLiBvblJlamVjdGVkIC0gQ2FsbGVkIGlmIGBmZXRjaGAsIGFueSBvZiBgb25GdWxmaWxsZWRgIGNhbGxiYWNrZXMgdGhyb3cgYW4gZXJyb3Igb3IgYHJlc3BvbnNlLm9rYCBpcyBgZmFsc2VgLlxuICAgIFxuICAgICAqICMjIyBgb25GdWxmaWxsZWRgIGV4YW1wbGVzOlxuICAgICAqXG4gICAgICogXzEuIEJsYW5rX1xuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBBbnRvbmlvIH0gZnJvbSBgQGFja2VlL2FudG9uaW8tY29yZWA7XG4gICAgICogY29uc3QgYXBpID0gbmV3IEFudG9uaW8oKTtcbiAgICAgKlxuICAgICAqIGFwaS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKGZ1bmN0aW9uKihyZXNwb25zZSwgcmVxdWVzdCwgcmVxdWVzdFBhcmFtcykge1xuICAgICAqICAgIC8vIER1bm5vLiBEbyBzb21ldGhpbmcgd2l0aCB0aGUgYHJlc3BvbnNlYCBhbmQgdGhlbiByZXR1cm4gaXQuXG4gICAgICogICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAqIH0pXG4gICAgICogYGBgXG5cbiAgICAgKlxuICAgICAqICMjIyBgb25SZWplY3RlZGAgZXhhbXBsZXM6XG4gICAgICpcbiAgICAgKiBfMS4gU2lsZW50IHJlc3BvbnNlIGVycm9yIGlmIHN0YXR1cyBtYXRjaGVzLCBmb3IgaW5zdGFuY2UsIHRvIGAxMjNgX1xuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBBbnRvbmlvLCBpc0FudG9uaW9FcnJvciB9IGZyb20gYEBhY2tlZS9hbnRvbmlvLWNvcmVgO1xuICAgICAqIGNvbnN0IGFwaSA9IG5ldyBBbnRvbmlvKCk7XG4gICAgICpcbiAgICAgKiBhcGkuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShudWxsLCBmdW5jdGlvbiooZXJyb3IpIHtcbiAgICAgKiAgICBpZiAoaXNBbnRvbmlvRXJyb3IoZXJyb3IpICYmIGVycm9yLnJlc3BvbnNlLnN0YXR1cyA9PT0gMTIzKSB7XG4gICAgICogICAgICAgcmV0dXJuIG51bGw7XG4gICAgICogICAgfVxuICAgICAqXG4gICAgICogICAgcmV0dXJuIGVycm9yO1xuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICogXG4gICAgICogXzIuIExvZyAoZS5nLiB0byBTZW50cnkpIG9ubHkgZXJyb3JzIHRoYXQgbWF0Y2ggc29tZSBzcGVjaWZpYyBjcml0ZXJpYV9cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHsgQW50b25pbywgaXNBbnRvbmlvRXJyb3IgfSBmcm9tIGBAYWNrZWUvYW50b25pby1jb3JlYDtcbiAgICAgKiBjb25zdCBhcGkgPSBuZXcgQW50b25pbygpO1xuICAgICAqXG4gICAgICogYXBpLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UobnVsbCwgZXJyb3IgPT4ge1xuICAgICAqICAgIGlmICghaXNBbnRvbmlvRXJyb3IoZXJyb3IpKSB7XG4gICAgICogICAgICAgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oZXJyb3IpXG4gICAgICogICAgfVxuICAgICAqXG4gICAgICogICAgcmV0dXJuIGVycm9yO1xuICAgICAqIH0pXG4gICAgICogYGBgXG5cbiAgICAgKi9cbiAgICB1c2Uob25GdWxmaWxsZWQ/OiBPblJlc3BvbnNlRnVsZmlsbGVkLCBvblJlamVjdGVkPzogT25SZXNwb25zZVJlamVjdGVkKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbmV4dElkID0gdGhpcy5pZCsrO1xuXG4gICAgICAgIHRoaXMuaW50ZXJjZXB0b3JzLnNldChuZXh0SWQsIHtcbiAgICAgICAgICAgIG9uRnVsZmlsbGVkLFxuICAgICAgICAgICAgb25SZWplY3RlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5leHRJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgYnkgcGFzc2luZyBoZXJlIHRoZSBpZCBmcm9tIGB1c2VgIG1ldGhvZC5cbiAgICAgKi9cbiAgICBlamVjdChpZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVyY2VwdG9ycy5kZWxldGUoaWQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVzcG9uc2VJbnRlcmNlcHRvck1hbmFnZXI7XG4iXSwibWFwcGluZ3MiOiJBQTBCQSxNQUFNQSwwQkFBMEIsQ0FBQztFQUNyQkMsRUFBRTtFQUNBQyxZQUFZO0VBRXRCQyxXQUFXQSxDQUFBLEVBQUc7SUFDVixJQUFJLENBQUNGLEVBQUUsR0FBRyxDQUFDO0lBQ1gsSUFBSSxDQUFDQyxZQUFZLEdBQUcsSUFBSUUsR0FBRyxDQUFDLENBQUM7RUFDakM7O0VBRUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBR0lDLEdBQUdBLENBQUNDLFdBQWlDLEVBQUVDLFVBQStCLEVBQVU7SUFDNUUsTUFBTUMsTUFBTSxHQUFHLElBQUksQ0FBQ1AsRUFBRSxFQUFFO0lBRXhCLElBQUksQ0FBQ0MsWUFBWSxDQUFDTyxHQUFHLENBQUNELE1BQU0sRUFBRTtNQUMxQkYsV0FBVztNQUNYQztJQUNKLENBQUMsQ0FBQztJQUVGLE9BQU9DLE1BQU07RUFDakI7O0VBRUE7QUFDSjtBQUNBO0VBQ0lFLEtBQUtBLENBQUNULEVBQVUsRUFBVztJQUN2QixPQUFPLElBQUksQ0FBQ0MsWUFBWSxDQUFDUyxNQUFNLENBQUNWLEVBQUUsQ0FBQztFQUN2QztBQUNKO0FBRUEsZUFBZUQsMEJBQTBCIiwiaWdub3JlTGlzdCI6W119