@mswjs/interceptors
Version:
Low-level HTTP/HTTPS/XHR/fetch request interception library.
41 lines (32 loc) • 1.17 kB
text/typescript
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
)
}
}