nasa8x / rss-to-json

RSS and Atom feed generator for Node.js
https://morioh.com/@5df445b0103f3007600e1a57
177 stars 77 forks source link

feat(parse): allow custom HTTP client #61

Open sarahdayan opened 1 year ago

sarahdayan commented 1 year ago

This introduces the ability to pass a custom HTTP client if you don't want to use Axios. This can be helpful if you're already using a client locally with features such as request deduping, caching, etc.

The second parameter can now be a function. When it is, parse recognizes you're trying to pass a custom client and not an Axios configuration object.

Here's an example using window.fetch:

import { parse } from 'rss-to-json';

const client = (url: string) => fetch(url).then((r) => r.text()).then((data) => ({ data }));

(async () => {
  const rss = await parse('https://blog.ethereum.org/feed.xml', client);

  console.log(JSON.stringify(rss, null, 3));
})();

I wanted to test the feature so I took the liberty to set up the testing environment. I'm using MSW to mock network calls, which is quite helpful as it allows to test without really making HTTP calls, but without having to mock the HTTP client itself.

I hope this feature makes it 🙂 Let me know if anything needs to change!

closes #60