Skip to content

apple502j/xhr-shim

Repository files navigation

xhr-shim

XMLHttpRequest, reimplemented using fetch.

Why?

  • This allows code using XHR to be tested using Node, with our friend node-fetch.
  • You can also use it inside service workers!

Differences

Due to the nature of fetch(),

  • This does not support synchronous XHR.
  • This does not support progress event.
  • This does not implement XMLHttpRequest.upload.
  • XMLHttpRequest instance is not reusable.
  • HEADERS_RECEIVED and LOADING ready states are skipped.

Because this is still XMLHttpRequest,

  • This does not support omitting cookies for same-origin requests.
  • There is no Promise support.
  • There is no built-in Node.js support. Polyfill using node-fetch.

This does not support obsolete APIs such as:

  • XMLHttpRequest.onreadystatechange
  • Basic authentication in XMLHttpRequest.open (use Authorization header!)

Due to the nature of the main usage,

  • XMLHttpRequest.responseXML always throws.
  • Document cannot be used in XMLHttpRequest.send().
  • The default MIME type is text/plain.
  • Instead of ProgressEvent, CustomEvent is used.

Requirements

This shim assumes you have these ES features:

  • async support
  • class syntax
  • globalThis
  • Object.assign
  • Object.create
  • Object.entries
  • Promise including Promise.prototype.finally
  • Symbol
  • Template literals

And these WHATWG features:

  • AbortController
  • Blob
  • Constructible DOMException
  • EventTarget.prototype.addEventListener with once option
  • fetch API with signal support
  • setTimeout

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published