MCPcopy Create free account
hub / github.com/Useful-Scripts-Extension/useful-script / initFetch

Function initFetch

scripts/libs/ajax-hook/index.js:27–76  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

25let readyFetch = false;
26
27function initFetch() {
28 const originalFetch = window.fetch;
29 window.fetch = async function (urlOrRequest, options) {
30 let url = urlOrRequest;
31 if (urlOrRequest instanceof Request) {
32 url = urlOrRequest?.url;
33 options = options || {};
34 for (const key in urlOrRequest) {
35 const type = typeof urlOrRequest[key];
36 if (type === "string" || type === "number" || type === "boolean") {
37 options[key] = urlOrRequest[key];
38 }
39 }
40 }
41
42 let request = { url, options };
43 for (const { fn } of onBeforeFetchFn) {
44 const res = await fn?.(request.url, request.options)?.catch(
45 console.error
46 );
47 if (res) request = res;
48 if (res === null) return null;
49 }
50
51 if (urlOrRequest instanceof Request) {
52 try {
53 // TODO modify options
54 // for (const key in request.options) {
55 // urlOrRequest[key] = request.options[key];
56 // }
57 if (urlOrRequest.url !== request.url) {
58 urlOrRequest = new Request(request.url, urlOrRequest);
59 }
60 } catch (e) {
61 debugger;
62 }
63 }
64
65 let response = await originalFetch(urlOrRequest, options);
66 for (const { fn } of onAfterFetchFn) {
67 const res = await fn?.(request.url, request.options, response)?.catch(
68 console.error
69 );
70 if (res) response = res;
71 if (res === null) return null;
72 }
73
74 return response;
75 };
76}
77
78export function hookFetch({ onBefore, onAfter } = {}) {
79 if (!readyFetch) {

Callers 1

hookFetchFunction · 0.85

Calls 1

fnFunction · 0.50

Tested by

no test coverage detected