https://github.com/apple502j/xhr-shim
https://github.com/apple502j/xhr-shim
Last synced: 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/apple502j/xhr-shim
- Owner: apple502j
- License: mit
- Created: 2021-02-25T16:13:39.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2022-09-17T00:39:31.000Z (over 2 years ago)
- Last Synced: 2024-04-25T07:43:54.080Z (about 1 year ago)
- Language: JavaScript
- Size: 122 KB
- Stars: 9
- Watchers: 2
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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 literalsAnd these WHATWG features:
- `AbortController`
- `Blob`
- Constructible `DOMException`
- `EventTarget.prototype.addEventListener` with `once` option
- `fetch` API with `signal` support
- `setTimeout`