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

stream-redux

v1.0.0

Published

Handle Redux like node streams

Downloads

4

Readme

stream-redux

YAGA - leaflet-ng2

Build Status Coverage Status FOSSA Status

Handle Redux like node streams, or Redux itself...

It implements both interfaces: Store of Redux and Duplex of node streams.

How to use

First you have to install this library from npm:

npm install --save stream-redux

This module works like the default Redux module, or like a stream. You should do something like that:

const StreamRedux = require("stream-redux").StreamRedux;
const stream = new StreamRedux(anyReducer, anyOptionalEnhancer);

Note: this module is written in TypeScript, you can use it with types, like this:

import { Action, StreamRedux } from "stream-redux";
const stream = new StreamRedux<number, Action>(counter);
function counter(state: number = 0, action: Action) {
  // ...
}

Use it as the default Redux module

You just have to instantiate the store with const stream = new StreamRedux(counter). After that you can use it like a normal Redux store.

Note: Take a look at the official documentation for further information

Use it as stream

You can use the method .write like .dispatch, but without getting the action as returned value.

You will get the initial state and each state after dispatching an action from the readable stream.

After calling the .end() method you will not be able to use either .write nor .dispatch anymore, like it is typical for streams!

Note: Take a look at the official documentation for further information...

Attention: node streams will buffer chunks, or in this case each state. This will maybe overload your RAM. If you don't want to use it as readable stream flush it or consider using the default Redux library!

Use it mixed

You can mix both worlds like you prefer:

import { expect } from "chai"; // not needed, just for this example....
import { StreamRedux } from "stream-redux";

const results = [0, 1, 2, 3, 2];
const stream = new StreamRedux(counter);

stream.on("data", (state) => {
    expect(state).to.equal(results.shift());
})

stream.on("end", () => {
    expect(results.length).to.equal(0);
});

stream.write({type: "INCREMENT"});
stream.dispatch({type: "INCREMENT"});
expect(stream.getState()).to.equal(2);
stream.write({type: "INCREMENT"});
expect(stream.getState()).to.equal(3);
stream.write({type: "DECREMENT"});
expect(stream.getState()).to.equal(1);

function counter(state = 0, action) {
  switch (action.type) {
  case 'INCREMENT':
    return state + 1;
  case 'DECREMENT':
    return state - 1;
  default:
    return state;
  }
}

Scripts Tasks

Scripts registered in package.json:

  • transpile: Transpile TypeScript Code to JavaScript
  • lint: Use the linter for TypeScript Code
  • test: Run software- and coverage-tests in node.
  • doc: Build the API documentation.

License

This library is released under the ISC License.

FOSSA Status

Links