namespace XFESystem.Browser;
internal static class BrowserDomAbort
{
internal const string Source = "\n" + """
class DOMException extends Error {constructor(message='',name='Error'){super(String(message));this.name=String(name);this.code=this.name==='AbortError'?20:this.name==='TimeoutError'?23:0;}}
window.DOMException=DOMException;
const abortToken={},abortStates=new WeakMap();
class AbortSignal extends EventTarget {
constructor(token){super();if(token!==abortToken)throw new TypeError('Illegal constructor');abortStates.set(this,{aborted:false,reason:undefined});this.onabort=null;}
get aborted(){return abortStates.get(this).aborted;}get reason(){return abortStates.get(this).reason;}
throwIfAborted(){if(this.aborted)throw this.reason;}
static abort(reason){const controller=new AbortController();controller.abort(reason);return controller.signal;}
static timeout(milliseconds){if(!Number.isInteger(milliseconds)||milliseconds<0||milliseconds>2147483647)throw new RangeError('Invalid abort timeout');const controller=new AbortController();setTimeout(()=>controller.abort(new DOMException('The operation timed out','TimeoutError')),milliseconds);return controller.signal;}
static any(signals){const values=Array.from(signals);if(values.length>128)throw new RangeError('Too many abort signals');for(const signal of values)if(!(signal instanceof AbortSignal))throw new TypeError('Expected AbortSignal');
const controller=new AbortController(),cleanups=[];for(const signal of values){if(signal.aborted){controller.abort(signal.reason);break;}const callback=()=>controller.abort(signal.reason);signal.addEventListener('abort',callback,{once:true});cleanups.push(()=>signal.removeEventListener('abort',callback));}
const cleanup=()=>{for(const callback of cleanups)callback();};if(controller.signal.aborted)cleanup();else controller.signal.addEventListener('abort',cleanup,{once:true});return controller.signal;}
}
class AbortController {
constructor(){Object.defineProperty(this,'signal',{value:new AbortSignal(abortToken),enumerable:true});}
abort(reason){const state=abortStates.get(this.signal);if(state.aborted)return;state.aborted=true;state.reason=reason===undefined?new DOMException('The operation was aborted','AbortError'):reason;this.signal.dispatchEvent(new Event('abort'));}
}
Object.assign(window,{AbortSignal,AbortController});
""" + "\n";
}
namespace XFESystem.Browser;
internal static class BrowserDomAbort
{
internal const string Source = "\n" + """
class DOMException extends Error {constructor(message='',name='Error'){super(String(message));this.name=String(name);this.code=this.name==='AbortError'?20:this.name==='TimeoutError'?23:0;}}
window.DOMException=DOMException;
const abortToken={},abortStates=new WeakMap();
class AbortSignal extends EventTarget {
constructor(token){super();if(token!==abortToken)throw new TypeError('Illegal constructor');abortStates.set(this,{aborted:false,reason:undefined});this.onabort=null;}
get aborted(){return abortStates.get(this).aborted;}get reason(){return abortStates.get(this).reason;}
throwIfAborted(){if(this.aborted)throw this.reason;}
static abort(reason){const controller=new AbortController();controller.abort(reason);return controller.signal;}
static timeout(milliseconds){if(!Number.isInteger(milliseconds)||milliseconds<0||milliseconds>2147483647)throw new RangeError('Invalid abort timeout');const controller=new AbortController();setTimeout(()=>controller.abort(new DOMException('The operation timed out','TimeoutError')),milliseconds);return controller.signal;}
static any(signals){const values=Array.from(signals);if(values.length>128)throw new RangeError('Too many abort signals');for(const signal of values)if(!(signal instanceof AbortSignal))throw new TypeError('Expected AbortSignal');
const controller=new AbortController(),cleanups=[];for(const signal of values){if(signal.aborted){controller.abort(signal.reason);break;}const callback=()=>controller.abort(signal.reason);signal.addEventListener('abort',callback,{once:true});cleanups.push(()=>signal.removeEventListener('abort',callback));}
const cleanup=()=>{for(const callback of cleanups)callback();};if(controller.signal.aborted)cleanup();else controller.signal.addEventListener('abort',cleanup,{once:true});return controller.signal;}
}
class AbortController {
constructor(){Object.defineProperty(this,'signal',{value:new AbortSignal(abortToken),enumerable:true});}
abort(reason){const state=abortStates.get(this.signal);if(state.aborted)return;state.aborted=true;state.reason=reason===undefined?new DOMException('The operation was aborted','AbortError'):reason;this.signal.dispatchEvent(new Event('abort'));}
}
Object.assign(window,{AbortSignal,AbortController});
""" + "\n";
}