Wrapper for XMLHttpRequest with better data-structures
$ yarn add @swan-io/request @swan-io/boxed
# --- or ---
$ npm install --save @swan-io/request @swan-io/boxed
- 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
import { Request, badStatusToError, emptyToError } from "@swan-io/request";
// Regular case
Request.make({ url: "/api/health" }).onResolve(console.log);
// Result.Ok({status: 200, ok: true, response: Option.Some("{\"ok\":true}")})
// Timeout
Request.make({ url: "/api/health", timeout: 2000 }).onResolve(console.log);
// Result.Error(TimeoutError)
// Network error
Request.make({ url: "/api/health" }).onResolve(console.log);
// Result.Error(NetworkError)
// Custom response type
Request.make({ url: "/api/health", responseType: "json" }).onResolve(
console.log,
);
// Result.Ok({status: 200, ok: true, response: Option.Some({ok: true})})
// Handle empty response as an error
Request.make({ url: "/api/health" })
.mapOkToResult(emptyToError)
.onResolve(console.log);
// Result.Error(EmptyResponseError)
// Handle bad status as an error
Request.make({ url: "/api/health" })
.mapOkToResult(badStatusToError)
.onResolve(console.log);
// Result.Error(BadStatusError)
// Cancel request
useEffect(() => {
const future = Request.make({ url: "/api/health" });
return () => future.cancel();
}, []);
url
: stringmethod
:GET
(default),POST
,OPTIONS
,PATCH
,PUT
orDELETE
responseType
:text
: (default) response will be astring
arraybuffer
: response will be aArrayBuffer
document
: response will beDocument
blob
: response will beBlob
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
Returns a Future<Result<Response<T>, NetworkError | TimeoutError>>
, where Response<T>
has the following properties:
status
:number
ok
:boolean
response
:Option<T>
xhr
:XMLHttpRequest
T
is the type associated with the responseType
provided in the config
object.
Helper to use with mapOkToResult
to consider empty response as an error.
Helper to use with mapOkToResult
to consider a status outside of the 200-299 range as an error.