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 🙏

© 2026 – Pkg Stats / Ryan Hefner

provide-multi

v1.0.0

Published

Provider factory for creating multiple instances of another provider.

Readme

provide-multi

build status npm version npm downloads

Provider factory for creating multiple instances of another provider.

Table of contents

  1. Installation
  2. Usage
  3. Example
  4. References

Installation

npm install provide-multi --save

Usage

provideMulti (Object props)

The props object must contain the following keys:

  • name (String) - Suffix used (in proper form) for namespaced actions (Eg: 'counter' will generate 'addCounter' and 'removeCounter')
  • provider (Object) - Provider object with 'actions' and 'reducers' keys
  • actionTypes (Object) - Enumeration of all action strings exported by the provider (Eg: { INCREMENT, DECREMENT })
  • initialState (Object) - Initial state exported by the provider

This will generate a provider with an add/remove action, and one action for every one that our single provider has (Eg: increment, decrement). These copied actions receive an index as parameted, and return the dispatch function.

Also, every reducer will be replicated with a 'Multi' suffix, holding an array of single reducers.

Example

  • Refer action in single provider
<MyElement onClick={increment}) />
  • Refer action in in multi provider, for instance index '0'
<MyElement onClick={increment(0)}) />
  • Dispatch action in single provider
onClick => () { increment(); }
  • Dispatch action in multi provider, for instance index '0'
onClick => () { increment(0)(); }

Provider definition:

// test/counter-multi.js

import provideMulti from 'provide-multi';
import counter, { INCREMENT, DECREMENT, INITIAL_STATE } from './counter';

const counterMulti = provideMulti({
  name: 'counter',
  provider: counter,
  actionTypes: { INCREMENT, DECREMENT },
  initialState: INITIAL_STATE,
});

export default counterMulti;

Example counter provider used to add multiple instance functionality:

// test/counter.js

export const INCREMENT = 'INCREMENT';
export const DECREMENT = 'DECREMENT';
export const INITIAL_STATE = {
  value: 0
}
const update = (state, mutations) =>
  Object.assign({}, state, mutations)

const actions = {
  increment() {
    return { type: INCREMENT };
  },
  decrement() {
    return { type: DECREMENT };
  }
}

const reducers = {
  counter(state = INITIAL_STATE, action) {
    switch (action.type) {
      case INCREMENT:
        state = update(state, { value: state.value + 1 });
        break;
      case DECREMENT:
        state = update(state, { value: state.value - 1 });
        break;
      default:
        return state;
    }
    return state;
  }
}

export default {
  actions, reducers
};

You'll then have a provider with the following actions:

  • addCounter () - Adds an instance to our multiple counter provider
  • removeCounter () - Removes an instance to our multiple counter provider
  • increment (Int index) - Returns a function which is equivalent to the single provider action (not dispatched until executed)
  • decrement (Int index) - Returns a function which is equivalent to the single provider action (not dispatched until executed)

And reducers:

  • counters

References