@swan-io/request
v1.0.6
Published
Wrapper for XMLHttpRequest with better data-structures
Downloads
1,346
Readme
@swan-io/request
Wrapper for XMLHttpRequest with better data-structures
Installation
$ yarn add @swan-io/request @swan-io/boxed
# --- or ---
$ 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";
// 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();
}, []);
API
Request.make(config)
config
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
Return value
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.
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.