@alivenotions/fetchy
v1.3.4
Published
handy wrapper around fetch
Downloads
32
Readme
fetchy
fetchy is a very opinionated minimal wrapper around window.fetch
.
Goals
- Fetchy is meant for side-projects where
window.fetch
feels low-level. Instead of always writing the same abstractions overwindow.fetch
, this library can be used. - The surface area of the library is intentionally very small. This is not meant for huge projects with many developers.
Installation
npm
npm install @alivenotions/fetchy
yarn
yarn add @alivenotions/fetchy
Examples
HTTP methods
import fetchy from '@alivenotions/fetchy'
const url = `http://localhost/home`
const response = await fetchy.get(url).json()
await fetchy.post(url, { user: { id: 2 } }, { credentials: include })
Timeouts
import fetchy from '@alivenotions/fetchy'
const url = `http://localhost/home`
try {
const response = await fetchy.get(url, {}, 3000).json()
} catch (e) {
if (e.name === 'TimeoutError') {
}
}
Global configuration
import { createFetchyConfiguration } from '@alivenotions/fetchy'
const fetchy = createFetchyConfiguration({
baseResource: 'http://localhost/',
interceptors: (url, init) => {
console.log(`sent a request to ${url} at ${Date.now}`)
},
init: {
headers: {
'Content-Type': 'application/json',
},
mode: 'same-origin',
},
})
const response = await fetchy.get('home')
Design decisions
- All the HTTP request methods are available on the top level.
- Non 2xx status codes error out.
- JSON body can be passed as the second argument for
post
,put
,delete
andpatch
. It will automatically be passed throughJSON.stringify
. I mostly find myself working with JSON hence the preference.get
andhead
don't have this argument. - Regular init can be passed as the third argument to
post
,put
,delete
andhead
methods. - Helper methods to transform body data like
json
,text
etc. are available on the top-level promise to save another.then()
chain or anotherawait
. - The first argument for all methods is
resource
/url
. Currently it's always a string. In the future, we can probably accomodate theRequest
object too. - A central configuration object is also available that allows for configuring http call interceptions, base urls, and option defaults.
API
1. fetchy.get(url [, initOptions, timeout])
2. fetchy.post(url, [, body, initOptions, timeout])
3. fetchy.put(url, [, body, initOptions, timeout])
4. fetchy.delete(url, [, body, initOptions, timeout])
5. fetchy.patch(url, [, body, initOptions, timeout])
6. fetchy.head(url [, initOptions, timeout])
7. createFetchyConfiguration({ baseResource?, interceptors?, initOptions?, timeout? })
Future scope
- Add retries
Will probably stop after this, as there are already many libraries that fulfill many more requirements and are far less opinionated.