Sha256: 9a1ebe24402b5f2ae2ea518281a0810d5fb038b4e275c5f12acc31e002aa8a72

Contents?: true

Size: 1.65 KB

Versions: 26

Compression:

Stored size: 1.65 KB

Contents

import { invariant } from 'outvariant'
import { Emitter } from 'strict-event-emitter'
import { HttpRequestEventMap, IS_PATCHED_MODULE } from '../../glossary'
import { Interceptor } from '../../Interceptor'
import { createXMLHttpRequestProxy } from './XMLHttpRequestProxy'

export type XMLHttpRequestEmitter = Emitter<HttpRequestEventMap>

export class XMLHttpRequestInterceptor extends Interceptor<HttpRequestEventMap> {
  static interceptorSymbol = Symbol('xhr')

  constructor() {
    super(XMLHttpRequestInterceptor.interceptorSymbol)
  }

  protected checkEnvironment() {
    return typeof globalThis.XMLHttpRequest !== 'undefined'
  }

  protected setup() {
    const logger = this.logger.extend('setup')

    logger.info('patching "XMLHttpRequest" module...')

    const PureXMLHttpRequest = globalThis.XMLHttpRequest

    invariant(
      !(PureXMLHttpRequest as any)[IS_PATCHED_MODULE],
      'Failed to patch the "XMLHttpRequest" module: already patched.'
    )

    globalThis.XMLHttpRequest = createXMLHttpRequestProxy({
      emitter: this.emitter,
      logger: this.logger,
    })

    logger.info(
      'native "XMLHttpRequest" module patched!',
      globalThis.XMLHttpRequest.name
    )

    Object.defineProperty(globalThis.XMLHttpRequest, IS_PATCHED_MODULE, {
      enumerable: true,
      configurable: true,
      value: true,
    })

    this.subscriptions.push(() => {
      Object.defineProperty(globalThis.XMLHttpRequest, IS_PATCHED_MODULE, {
        value: undefined,
      })

      globalThis.XMLHttpRequest = PureXMLHttpRequest
      logger.info(
        'native "XMLHttpRequest" module restored!',
        globalThis.XMLHttpRequest.name
      )
    })
  }
}

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
clapton-0.0.26 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.25 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.24 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.23 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.22 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.21 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.20 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.19 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.18 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.17 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.16 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.15 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.14 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.13 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.12 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.11 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.10 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.9 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.8 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts
clapton-0.0.7 lib/clapton/javascripts/node_modules/@mswjs/interceptors/src/interceptors/XMLHttpRequest/index.ts