npm i @hazae41/glacier
Node Package π¦ β’ Read the docs π β’ Next.js Example πͺ£ β’ Expo Example πͺ£ β’ Comparison with other libs π
Philosophy π§
Glacier uses two new approaches compared to other data fetching libraries like swr or react-query:
- Encapsulating key+fetcher+params in a single abstraction called schema.
- Composing features with very simple hooks instead of having bloated configuration and unexpected behaviors.
function useAutoFetchMixture(query: Query) {
useFetch(query) // Fetch on mount and url change
useVisible(query) // Fetch when the page is focused
useOnline(query) // Fetch when the browser is online
}
function useHelloWithAutoFetch() {
const query = useQuery(createHelloQuery, [])
useAutoFetchMixture(query)
return query
}
function MyApp() {
const { data, error } = useHelloWithAutoFetch()
if (error != null)
return <MyError error={error} />
if (data == null)
return <MyLoading />
return <MyPage data={data} />
}
Features π₯
- 100% TypeScript and ESM
- No external dependency
- Composition-based hooks
- Rust-like patterns
- Transport agnostic (REST, GraphQL, WebSocket)
- Storage agnostic (IndexedDB, localStorage)
- Works in a Service Worker or in a serverless function
- Per-query, encrypted, garbage-collected, persistent storage
- Store normalization and indexes
- Concurrent and multi-step optimistic states
- Request deduplication, cooldown, timeout, cancellation, expiration, and retrying
- Automatic refetching based on various signals
- Page-based and cursor-based pagination
- SSR & ISR support
- React Suspense support
- React Native support