Skip to content

WebReflection/fetch

Repository files navigation

fetch

Social Media Photo by Anthony Duran on Unsplash

build Coverage Status

A fetch with Response abilities.

(... see what I did there?)

import fetch from '@webreflection/fetch';

// await directly Response methods or accessors
console.log(await fetch('https://google.com').text());
console.log(await fetch('https://google.com').ok);

// all other Promise methods just work
console.log(await fetch('https://google.com').then(r => r.ok));

The export is simply a Proxy that forwards to the Response any explicit intent, meaning:

  • a fetch(url, ...init) returns exactly a fetch(url, ...init) reference
    • you can do everything you could do already with fetch ... this is fetch indeed!
    • you can use this module as drop-in replacement in your current code though
    • you can eventually incrementally use its features if and/or when needed
  • if any Response.prototype known key is directly accessed, such property or method is forwarded directly to the response once the fetch is resolved
  • as the goal is to shortcut the response boilerplate, Response.prototype keys prevail over Promise.prototype so if your argument is that Symbol.toStringTag returned the response one, I am afraid that's meant by design so that unless Promise API introduces a conflicting entry name with Response API, this module actually requires zero maintainability and it's future-friendly with API changes and whatnot
  • if you want to deal with status or ok or headers you still can do that:
    • reference const req = fetch(url, ...init)
    • use try/catch around req.json() or req.text() or any other forwarded method
    • use const { status, headers } = await req or const status = await req.status or any other way you like to introspect the failure
// alternatively ...
const { ok, text } = await fetch(URL);
if (ok) console.log(await text());

If none of this is interesting to you though, we're good! You can move on happily ever after 👋

About

A fetch with Response abilities.

Resources

License

Stars

Watchers

Forks

Packages

No packages published