UNPKG

@ackee/antonio-core

Version:

A HTTP client built on fetch API with axios-like API.

77 lines (74 loc) 7.43 kB
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