@swan-io/request
Wrapper for XMLHttpRequest with better data-structures
Installation
$ yarn add @swan-io/request @swan-io/boxed
$ npm install --save @swan-io/request @swan-io/boxed
Design principles
- Has a strong contract with data-structures from Boxed (
Future
, Result
& Option
) - Makes the request easily cancellable with
Future
API - Gives freedom of interpretation for response status
- Handles
onLoadStart
& onProgress
events - Handles timeouts
- Types the response using the provided
responseType
Getting started
import { Request, badStatusToError, emptyToError } from "@swan-io/request";
Request.make({ url: "/api/health" }).onResolve(console.log);
Request.make({ url: "/api/health", timeout: 50 }).onResolve(console.log);
Request.make({ url: "/api/health" }).onResolve(console.log);
Request.make({ url: "/api/health", responseType: "json" }).onResolve(
console.log,
);
Request.make({ url: "/api/health" })
.mapOkToResult(emptyToError)
.onResolve(console.log);
Request.make({ url: "/api/health" })
.mapOkToResult(badStatusToError)
.onResolve(console.log);
useEffect(() => {
const future = Request.make({ url: "/api/health" });
return () => future.cancel();
}, []);
API
Request.make(config)
config
url
: stringmethod
: GET
(default), POST
, OPTIONS
, PATCH
, PUT
or DELETE
responseType
:
text
: (default) response will be a string
arraybuffer
: response will be a ArrayBuffer
document
: response will be Document
blob
: response will be Blob
json
: response will be a JSON value
body
: request bodyheaders
: a record containing the headerswithCredentials
: booleanonLoadStart
: event triggered on load startonProgress
: event triggered at different times when the payload is being senttimeout
: number
emptyToError
Helper to use with mapOkToResult
to consider empty response as an error.
badStatusToError
Helper to use with mapOkToResult
to consider a status outside of the 200-299 range as an error.