npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ts-remote-data

v1.1.4

Published

Utility type for working with snapshot views of asynchronously-available data

Downloads

369

Readme

ts-remote-data

ts-remote-data provides a data type and helper functions for representing asynchronously-available data in a React component, Redux store, or anywhere that you need to have a view of a Promise or other async operation at a moment in time. Declaring properties as RemoteData<T> allows you to avoid passing around separate isFooLoading and fooError properties, and requires you to put guards in before reading that value so you don't have to remember to add it.

This package is inspired by Elm's RemoteData, which solves the same problem.

Example

interface State {
    me: RemoteData<UserProfile>;
    messages: RemoteData<Message[]>;
}

const INITIAL_STATE: State = {
    me: RemoteData.NOT_ASKED,
    messages: RemoteData.NOT_ASKED,
};

When the user provides login credentials, your reducer would set me to RemoteData.LOADING. On success, me would be set to the profile object returned by the server. On a failed login, me would be set to the error returned by the server so your app could surface the appropriate error to the user.

After login, your app would kick off a message fetch. At that point, messages would be set to RemoteData.or(state.messages, RemoteData.LOADING), so that if messages were already visible they wouldn't be hidden by the loading spinner. If the message fetch succeeds, messages would be set to the new value. If the message fetch fails, messages would be set to RemoteData.or(state.messages, RemoteData.fail()), and dispatch an effect, thunk, or saga to show a generic notification.

Incremental Adoption

RemoteData<T> is designed to be introduced gradually into an existing codebase. Functions that accept T can be changed to accept RemoteData<T> without modifying arguments at call sites. Changing a function to return RemoteData<T> will immediately cause compile errors that you can use to find where changes are needed. The error variant of RemoteData<T> is always unknown, which makes conversion from a rejected promise very easy.

Efficiency

RemoteData is built to be lean. It doesn't perform any allocations for the not-asked, loading, or ready/success states.