UNPKG

@mswjs/interceptors

Version:

Low-level HTTP/HTTPS/XHR/fetch request interception library.

41 lines (32 loc) 1.17 kB
import { Emitter } from 'strict-event-emitter' import { HttpRequestEventMap } from '../../glossary' import { Interceptor } from '../../Interceptor' import { createXMLHttpRequestProxy } from './XMLHttpRequestProxy' import { hasConfigurableGlobal } from '../../utils/hasConfigurableGlobal' import { patchesRegistry } from '../../utils/patchesRegistry' export type XMLHttpRequestEmitter = Emitter<HttpRequestEventMap> export class XMLHttpRequestInterceptor extends Interceptor<HttpRequestEventMap> { static symbol = Symbol.for('xhr-interceptor') constructor() { super(XMLHttpRequestInterceptor.symbol) } protected checkEnvironment() { return hasConfigurableGlobal('XMLHttpRequest') } protected setup() { const logger = this.logger.extend('setup') logger.info('patching global XMLHttpRequest...') this.subscriptions.push( patchesRegistry.applyPatch(globalThis, 'XMLHttpRequest', () => { return createXMLHttpRequestProxy({ emitter: this.emitter, logger: this.logger, }) }) ) logger.info( 'global XMLHttpRequest patched!', globalThis.XMLHttpRequest.name ) } }