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

new-babel-project-seed

v1.0.0

Published

An action creator generator function that leverages tcomb for safer and saner reducers

Downloads

1

Readme

redux-tcomb-actions

This module presents a simple way to generate action creators that provide a bit of type safety via tcomb.

The default export:

function generateActionCreator(PayloadType : [tcomb type], actionConstant : String, ?actionCreator : Function)

also has the following property:

generateActionCreator.ReduxActionIrreducible =  t.irreducible(
    'ReduxAction',
    a => a instanceof Object && t.String.is(a.type)
);

Each action creator generated will have a type refinement of this irreducible:

t.refinement(ReduxActionIrreducible,
    a => a.type === actionConstant && PayloadType.is(a.payload),
    actionConstant
);

Why use this module?

Reducer logic that depends on matching against strings is inevitably fragile, and the tcomb library provides some nice mechanisms for making actions and reducers safer, as well as simplifying reducer logic.

By adding tcomb metadata to action creators, reducers can leverate pattern matching, unions and refinements of actions to remove branching logic from reducer action handlers. See the examples/tMatchReducer.js file for an example.

Usage

Take the following example:

const UserCredentials = t.struct({
    username: t.String,
    password: Password
});

const loginStart = generateActionCreator(
    UserCredentials, // the tcomb type to validate the payload
    'login-started', // the action "type" property
    uc => ({ payload: uc }) // what you would normally use for an action creator, except you won't be specifying the "type" property
);

loginStart.actionName  // 'login-started'
loginStart.payloadType // UserCredentials
loginStart.type        // A refinement of ActionIrreducible that has a guard function validating the action's payload property conforms to the PayloadType

const loginStartAction = loginStart({ username: 'test', password: 'password' });

loginStartAction // { type: 'login-start', payload: {username: 'test', password: 'password'}}

The result of calling generateActionCreator is an action creator function, with three properties that provide some introspection capability; the most useful of which is likely the action creator's type property: a special refinement of ActionIrreducible, a custom tcomb type that validates an action's type and payload properties.

To see how these are used, take a look at the examples folder and the tests folder. There are two examples of reducers: one using tcomb pattern matching on the action creator tcomb type, and another using standard switching on the action type string.