browser-request-listener
Version:
Execute callbacks before or after each fetch api call or XMlHttprequest call
65 lines (52 loc) • 1.6 kB
JavaScript
import { applyForFetchAPi } from "./src/applyForFetchApi";
import { applyForXMlHttpRequest } from "./src/applyForXmlHttpRequest";
import { CXTR_ERROR_APPLY_CALLED_MORE_THAN_ONCE } from "./src/messages";
import { addNewPostSubscriber } from "./src/postSubscribers";
import { addNewPreSubscriber } from "./src/preSubscribers";
/**
* @var {boolean} isAlreadyApplied the change of native function should be singleton
*/
let isAlreadyApplied = false;
export const setIsAlreadyApplied = function (status) {
isAlreadyApplied = status;
}
export class BrowserRequestListener {
/**
* @param {{
* reportOnError:function(),
* filters : {{
* disableForFetch : boolean,
* disableForXHr: boolean
* }}
*
* }} configuration
*/
constructor(configuration) {
this.configuration = configuration;
}
/**
* @param {function} callBack
*
*/
addPreHttpRequestListener(callBack) {
addNewPreSubscriber(callBack);
}
/**
* @param {function} callBack
*/
addPostHttpRequestListener(callBack) {
addNewPostSubscriber(callBack)
}
async apply() {
if (!isAlreadyApplied || this.configuration.test) {
if (!this.configuration.filters?.disableForFetch) {
applyForFetchAPi(this.configuration);
}
if (!this.configuration.filters?.disableForXHr) {
applyForXMlHttpRequest(this.configuration);
}
} else {
throw new Error(CXTR_ERROR_APPLY_CALLED_MORE_THAN_ONCE);
}
}
}