
Security News
The Hidden Blast Radius of the Axios Compromise
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.
switchreducer
Advanced tools
A simple and small Redux library designed to reduce the verbose boiler plate of the "default" switch statement reducer pattern.
switchreducerThe operation of switchreducer is dead simple. It takes two arguments, the initial state, and a function that's passed a single argument object parameter of the state and the action properties, ie ({state, ...action}). This function expects a return of a lookup table composed of "action" cases which are invoked when a "action" type matches.
switchreducer(<initial-state>, ({<state>, ...<action>}) =>
<action-lookup-table>
);
Example
import switchreducer from 'switchreducer';
// actions + state
const SET_FILTER = 'SET_FILTER';
const SET_COLOR = 'SET_COLOR';
const initialState = {};
// reducer
const myReducer = switchreducer(initialState, ({state, payload}) => ({
[SET_FILTER]: () => Object.assign({}, state, {filter: payload}),
[SET_COLOR]: () => Object.assign({}, state, {color: payload}),
}));
"default" reducer comparison
For comparison here's what the above reducer would look like using the "default" switch statement pattern.
// actions + state
const SET_FILTER = 'SET_FILTER';
const SET_COLOR = 'SET_COLOR';
const initialState = {};
// reducer
const myReducer = (state = initialState, action) => {
const { type, payload } = action;
switch (type) {
case SET_FILTER:
return Object.assign({}, state, {filter: payload});
case SET_COLOR:
return Object.assign({}, state, {color: payload}),
default:
return state;
}
};
switchcaseYou may prefer and/or there may be cases that the switchcase lookup table helper is a better fit. The switchcase function is the "real" logic behind switchreducer. It expects a "action" lookup table and two curried arguments the state and the "action" type.
switchcase(<action-lookup-table>)(<state>)(<action-type>);
Example
import { switchcase } from 'switchreducer';
// actions + state
const SET_FILTER = 'SET_FILTER';
const SET_COLOR = 'SET_COLOR';
const initialState = {};
// reducer
const myReducer = (state = initialState, action) => {
const { type, payload } = action;
return switchcase(({
[SET_FILTER]: () => Object.assign({}, state, {filter: payload}),
[SET_COLOR]: () => Object.assign({}, state, {color: payload}),
}))(state)(type);
};
Best, te
FAQs
A small but useful redux switch case helper
We found that switchreducer demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.

Research
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.

Research
Malicious versions of the Telnyx Python SDK on PyPI delivered credential-stealing malware via a multi-stage supply chain attack.