axios-inherit
Version:
👨👦 Add interceptor inheritance to axios
43 lines (36 loc) • 1.36 kB
JavaScript
/**
* Add interceptor inheritance to axios
* @param {axios} axios default export of axios is an Axios instance mounted by "create" method
* @returns {axios}
*/
module.exports = function axiosInherit(axios) {
const { create } = axios;
const instances = [];
// new instances "inherit" existing interceptors
axios.create = function(...args) {
const instance = create.apply(this, args);
instances.push(instance);
for (const type in axios.interceptors) {
axios.interceptors[type].handlers.forEach(
({ fulfilled, rejected }) => instance.interceptors[type].use(fulfilled, rejected)
);
}
return instance;
};
// new interceptors are being "inherited" to existing instances
for (const type in axios.interceptors) {
[ 'eject', 'use' ].forEach(
(method) => {
const original = axios.interceptors[type][method];
axios.interceptors[type][method] = function(...args) {
const result = original.apply(axios.interceptors[type], args);
instances.forEach(
(instance) => instance.interceptors[type][method](...args)
);
return result;
};
}
);
}
return axios;
};