EmbyCrackedClient/web/modules/polyfills/abortablefetch.js
2025-06-25 11:46:04 +08:00

1 line
No EOL
1 KiB
JavaScript

let{fetch,Request:NativeRequest=fetch.Request,AbortController:NativeAbortController}=globalThis,realFetch=((Request=function(input,init){let signal;init&&init.signal&&(signal=init.signal,delete init.signal);input=new NativeRequest(input,init);return signal&&Object.defineProperty(input,"signal",{writable:!1,enumerable:!1,configurable:!0,value:signal}),input}).prototype=NativeRequest.prototype,fetch),abortableFetch=(input,init)=>{let signal=Request&&Request.prototype.isPrototypeOf(input)?input.signal:init?init.signal:void 0;if(signal){let abortError;try{abortError=new DOMException("Aborted","AbortError")}catch(err){(abortError=new Error("Aborted")).name="AbortError"}var cancellation;return signal.aborted?Promise.reject(abortError):(cancellation=new Promise((_,reject)=>{signal.addEventListener("abort",()=>reject(abortError),{once:!0})}),init&&init.signal&&delete init.signal,Promise.race([cancellation,realFetch(input,init)]))}return realFetch(input,init)};globalThis.fetch=abortableFetch,globalThis.Request=Request;export default abortableFetch;