mirror of
https://github.com/morten-olsen/react-native-debug-console.git
synced 2026-02-08 00:36:26 +01:00
110 lines
2.6 KiB
JavaScript
110 lines
2.6 KiB
JavaScript
const proxied = global.XMLHttpRequest ? global.XMLHttpRequest.prototype.open : () => {};
|
||
let currentId = 0;
|
||
|
||
class Network {
|
||
constructor() {
|
||
this.requests = [];
|
||
this.listeners = [];
|
||
// this.clear = this.clear.bind(this);
|
||
this.get = this.get.bind(this);
|
||
}
|
||
|
||
listen(fn) {
|
||
this.listeners.push(fn);
|
||
fn(this.requests);
|
||
}
|
||
|
||
get() {
|
||
return this.requests;
|
||
}
|
||
|
||
unlisten(fn) {
|
||
this.listeners = this.listeners.filter(l => l !== fn);
|
||
}
|
||
|
||
clear() {
|
||
this.requests = [];
|
||
this.listeners.forEach(l => l(this.requests));
|
||
}
|
||
|
||
addRequest(id, request) {
|
||
const index = this.requests.findIndex(req => req.id === id);
|
||
if (index >= 0) {
|
||
this.requests[index] = {
|
||
id,
|
||
...request,
|
||
};
|
||
} else {
|
||
this.requests.push({
|
||
id,
|
||
...request,
|
||
});
|
||
}
|
||
this.listeners.forEach(l => l(this.requests));
|
||
}
|
||
|
||
attach() {
|
||
const me = this;
|
||
const headers = {};
|
||
global.XMLHttpRequest.prototype.open = function proxyOpen (...args) {
|
||
let sendArgs;
|
||
const [
|
||
method,
|
||
url,
|
||
] = args;
|
||
const id = currentId++;
|
||
this.addEventListener('load', () => {
|
||
me.addRequest(id, {
|
||
url,
|
||
method,
|
||
args: sendArgs,
|
||
headers,
|
||
requestHeaders: this.getAllResponseHeaders(),
|
||
contentType: (this.getResponseHeader('content-type') || ''),
|
||
request: this,
|
||
status: this.status || null,
|
||
});
|
||
})
|
||
this.addEventListener('error', (error) => {
|
||
me.addRequest(id, {
|
||
url,
|
||
method,
|
||
error,
|
||
args: sendArgs,
|
||
headers,
|
||
requestHeaders: this.getAllResponseHeaders(),
|
||
request: this,
|
||
status: this.status || 'Error',
|
||
});
|
||
})
|
||
const proxiedSend = this.send;
|
||
const proxiedSetRequestHeader = this.setRequestHeader;
|
||
this.send = function proxySend (...sendargs) {
|
||
sendArgs = sendargs;
|
||
me.addRequest(id, {
|
||
url,
|
||
method,
|
||
args: sendArgs,
|
||
headers,
|
||
request: this,
|
||
status: 'Waiting',
|
||
});
|
||
return proxiedSend.apply(this, [].slice.call(arguments));
|
||
}
|
||
this.setRequestHeader = function (name, value) {
|
||
headers[name] = value;
|
||
return proxiedSetRequestHeader.apply(this, [].slice.call(arguments));
|
||
}
|
||
return proxied.apply(this, [].slice.call(arguments));
|
||
};
|
||
}
|
||
|
||
detach() {
|
||
global.XMLHttpRequest.prototype.open = proxied;
|
||
}
|
||
}
|
||
|
||
const network = new Network();
|
||
|
||
export default network;
|