The advanced data fetching tool for web applications



<img align="right" width="174" height="180" title="Farfetched logotype"

The advanced data fetching tool for web applications

Quick Features

- Transport/protocol/backend agnostic (REST, GraphQL, promises, whatever!)
- Framework-agnostic (React, Solid, Vue, Svelte, Angular, whatever!)
- Declarative — expresses the logic of a computation without describing its control flow
- First class TypeScript support out of the box
- Focused to improve both developer and user experiences


Continue reading about Farfetched in the documentation. It covers integration with the most popular UI-frameworks (such React and Solid), error handling, dependent queries, advanced contracts and other great tools.


Getting started

- clone repo
- install deps via pnpm install
- make changes
- make sure that your changes is passing checks:
  - run tests via pnpm test
  - run type tests via pnpm test:types
  - run linter via pnpm lint
  - try to build it via pnpm build
  - format code via pnpm format
- fill in changes via pnpm changes
- open a PR
- enjoy 🎉

Release workflow

Releases of Farfetched are automated by changesets and GitHub Actions. Your only duty is creating changeset for every PR, it is controlled by Changes-action.

After merging PR to master-branch, Version-action will update special PR with the next release. To publish this release, just merge special PR and wait, Release-action will publish packages.

Repository management

New package creation

  1. ```sh
  2. pnpm nx generate @nrwl/js:library --name=NAME --importPath @farfetched/NAME
  3. ```


Run this command to see a diagram of the dependencies of projects.

  1. ```sh
  2. pnpm nx graph
  3. ```


Farfetched powered by Aviasales.

Special thanks to all contributors and especially Alexandr for endless patience during our debates about this library.

Some of external libraries were inlined to Farfetched due to bundle size and custom features requirements:

- https://github.com/jacobheun/any-signal
- https://github.com/jacobheun/timeout-abort-controller/
- https://github.com/effector/patronum
- https://github.com/effector/patronum/pull/168
- https://github.com/emn178/js-sha1/blob/master/tests/test.js
- http://www.movable-type.co.uk/scripts/sha1.html
- https://github.com/smelukov/nano-equal