Socket
Book a DemoInstallSign in
Socket

strew

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

strew

Yet another utility to organize your scattered objects, inspired by the Redux way of working with reducers. This was originally created to maintain large and complex configs for e.g. Webpack.

latest
Source
npmnpm
Version
1.0.3
Version published
Maintainers
1
Created
Source

Strew

Yet another utility to organize your scattered objects, inspired by the Redux way of working with reducers. This was originally created to maintain large and complex configs for e.g. Webpack.

It's not recommend to use this in productions or just because Redux is cool. Therefor it's only built for Node 5+. If use find any other use case or need support for another environment, just create an issue or a pull request.

Install with Npm:

$ npm i strew --save

Install with Yarn:

$ yarn add strew

Reference

strew(...reducer)(initial);
// Each `reducer` is expected to be a function which will be invoked with the current object
// returned by the previous `reducer` as first argument and get/set functions as second argument.
// The `strew(...reducer)` returns a new function that you're able to invoke with the initial
// object and that returns the new reduced object.

strew.get(source, ...path);
// Returns the value described by `path`, if it doesn't exists it returns `undefined`

strew.set(source, ...path, value); // or
strew.set(source, ...[...path, value]);
// Returns a new object with the value(s) described by `path`. If `value` is a function, it will be
// invoked with the existing value or `undefined` as argument and use the returned value instead.
// To have a function as a value you can create a function which returns your function.

Examples

const strew = require('strew');

const initial = {dog: 'bad'};

function cat() {
  // The clean way
  return current => Object.assign({}, current, {cat: 'hairy'});
  // { dog: 'bad', cat: 'hairy' }
}

function fish() {
  // Using the `set`-function
  return (current, {set}) => set(current, 'fish', 'stonefish', 'pretty', false);
  // { dog: 'bad',
  //   cat: 'hairy',
  //   fish: { stonefish: { pretty: false } } }
}

function bird() {
  // Using the `set`-function with multiple values
  return (current, {set}) => set(current,
    ['bird', 'alive', 'deafening'],
    ['bird', 'dead', 'silent']
  );
  // { dog: 'bad',
  //   cat: 'hairy',
  //   fish: { stonefish: { pretty: false } },
  //   bird: { alive: 'deafening', dead: 'silent' } }
}

function dog() {
  // Using `set`-function to modify a existing value
  return (current, {set}) => set(current, 'dog', value => value === 'bad' ? 'rude' : 'polite');
  // { dog: 'rude',
  //   cat: 'hairy',
  //   fish: { stonefish: { pretty: false } },
  //   bird: { alive: 'deafening', dead: 'silent' } }
}

function reptile(animal, species) {
  // The advanced way
  return (current, {set, get}) => {
    current = set(current, species, animal);

    let list = get(current, 'reptile', animal);

    if (typeof list === 'undefined') {
      list = [];
    }

    current = set(current, 'reptile', animal, [...list, species]);

    return current;
  }
}

const strewed = strew(
  cat(),
  fish(),
  bird(),
  dog(),
  reptile('snake', 'blank mamba'),
  reptile('snake', 'king kobra'),
  reptile('lizard', 'komodo dragon'),
  reptile('lizard', 'iguana')
)(initial);

console.log(strewed);
// { dog: 'rude',
//   cat: 'hairy',
//   fish: { stonefish: { pretty: false } },
//   bird: { alive: 'deafening', dead: 'silent' },
//   'blank mamba': 'snake',
//   reptile:
//    { snake: [ 'blank mamba', 'king kobra' ],
//    lizard: [ 'komodo dragon', 'iguana' ] },
//   'king kobra': 'snake',
//   'komodo dragon': 'lizard',
//   iguana: 'lizard' }

console.log(initial);
// { dog: 'bad' }

FAQs

Package last updated on 22 Nov 2016

Did you know?

Socket

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.

Install

Related posts