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

@karmaniverous/reducer

v0.2.2

Published

In software, a _reducer_ is a process that accepts an input and uses it to update a state.

Downloads

11

Readme

Why?

In software, a reducer is a process that accepts an input and uses it to update a state.

Reduction is often iterative. For example, the JavaScript reduce method works its way down an array, reducing the array into whatever value or object its reducer function specifies.

Reduction is often recursive, and it shows up anywhere you have a hierarchical structure that needs to be summarized in some way.

The purpose of this project is to provide a very lightweight, general-purpose component that can reduce the state of any hierarchy of React components.

Reducing Forms

A form is an obvious candidate for reduction. It has a hierarchical structure: a form may have nested sections that ultimately contain form input controls. Each input control has a value state, but there are also other states that might be tracked at every node of the hierarchy, including:

  • dirty (if a node value has changed since initial state)
  • touched (if a node has gained & lost focus)
  • valid (possibly based on other values across the state)
  • visited (if a node has ever gained focus)

Of course, every use case is a unique flower, and there is certainly room for all kinds of reductions we didn't list above.

The genesis for this project was a complex form built with Semantic UI React components. We needed lots of validation and the Semantic form engine wasn't really up to the task. We looked at external form reducer libraries—notably the very excellent React Final Form—and were disappointed to discover how they played with third-party components like the Semantic library. You couldn't seem to get away from having to write an adapter around your third-party components.

We wanted a reducer that could interact directly with any component, no adapters required. We also recognized that form reduction is just one instance of the more general component reduction use case. We wanted to solve that one.

So here we are.

The Basics

TODO: Illustrate the structure of a basic reducer hierarchy.

Collaborators

release-it Configuration

This project includes release-it support that requires these final configurations in your local repo:

  1. Create a copy of .env.development.local.template and name it .env.development.local

  2. Create a GitHub personal access token and add it as the value of GITHUB_TOKEN in .env.development.local.

You can now build build project and publish a release to GitHub and NPM with these commands:

npm run build
npm run release