1.0.9 • Published 1 year ago

deepdown v1.0.9

Weekly downloads
36
License
MIT
Repository
github
Last release
1 year ago

deepdown

Safely drill into your JavaScript objects with dynamically defined paths

Build Status dependencies Status devDependencies Status License: MIT

Install

npm install --save deepdown

Example assignByKey

const parent = {
  child: {
    grandchild: {
      attribute: 'placeholder'
    }
  }
}
const path = 'child.grandchild.attribute'.split('.')
const value = 'value'
assignByKey(parent, path, value)
console.log(drillDown(parent, path))
/* prints
value
*/

Example drillDown

const drillDown = require('deepdown').drillDown;

const appState = {
  nested: {
    dynamic: {
      data: true,
      error: false
    },
    static: {
      other: 'stuff'
    }
  }
};

const route = 'data';
const choice = true;
const path = ['nested', choice ? 'dynamic' : 'static'];
path.push(route);

// --- no crashes even if path is wrong
const result = drillDown(appState, path);

console.log('or be brave', drillDown(appState, `wrong.${!choice ? 'static' : null}.${route}`.split('.')));

// --- what you've been doing
// to avoid crashes involves tedious, statically defined checks
const safeResult = appState.nested && appState.nested.static && appState.nested.static.other;

Example sortByKey

const sortByKey = require('deepdown').sortByKey;
const data = [
  {child: {grandchild: {value: 'bbb'}}}, // 'bbb' is greater than 'aaa'
  {child: {grandchild: {value: 'aaa'}}},
];

const firstValueBeforeSort = data[0].child.grandchild.value;
console.log(firstValueBeforeSort)
/* prints
bbb
*/

// --- sort by a nested key --- //
const key = 'child.grandchild.value'.split('.')
data.sort(sortByKey({key, order: true}));

const firstValueAfterSort = data[0].child.grandchild.value;
console.log(firstValueAfterSort)
/* prints
aaa
*/

Example equality

const equality = require('deepdown').equality;

const data = [
  {child: {grandchild: {value: 'bbb'}}}, // 'bbb' is greater than 'aaa'
  {child: {grandchild: {value: 'aaa'}}},
];

const data = [
  {child: {grandchild: {value: 'bbb'}}},
  {child: {grandchild: {value: 'aaa'}}},
];
const found = data.find(equality('child.grandchild.value'.split('.'), 'aaa'));

console.log(found);
/* prints
{ child: { grandchild: { value: 'aaa' } } }
*/

Example filterByKey

const filterByKey = require('deepdown').filterByKey;

const data = [
  {child: {grandchild: {value: 'bbb'}}},
  {child: {grandchild: {value: 'aaa'}}},
];
const key = 'child.grandchild.value'.split('.')
const value = 'aaa' // only looking for matches with `aaa`
const result = data.filter(filterByKey({key, value}))
console.log(JSON.stringify(result))
/* prints
[{"child":{"grandchild":{"value":"aaa"}}}]
*/

Example unwindByKey

const unwindByKey = require('deepdown').unwindByKey;

const data = [
    {child: {grandchild: {value: ['aaa', 'bbb', 'ccc']}}},
    {child: {grandchild: {value: ['ddd', 'eee', 'fff']}}},
];
const keyPath = 'child.grandchild.value'.split('.')
const result = unwindByKey(data, keyPath)
console.log(JSON.stringify(result))
/* prints
[
  {"child":{"grandchild":{"value":"aaa"}}},
  {"child":{"grandchild":{"value":"bbb"}}},
  {"child":{"grandchild":{"value":"ccc"}}},
  {"child":{"grandchild":{"value":"ddd"}}},
  {"child":{"grandchild":{"value":"eee"}}},
  {"child":{"grandchild":{"value":"fff"}}}
]
*/

Example indexByKey

const indexByKey = require('deepdown').indexByKey;

const data = [
    {child: {grandchild: {value: 'bbb'}}},
    {child: {grandchild: {value: 'aaa'}}},
];
const keyPath = 'child.grandchild.value'.split('.')
const result = indexByKey(data, keyPath)
console.log(JSON.stringify(result))
/* prints
{
  "bbb":[{"child":{"grandchild":{"value":"bbb"}}}],
  "aaa":[{"child":{"grandchild":{"value":"aaa"}}}]
}
*/

Commands

  • npm test - Run tests with linting and coverage results.
  • npm run lint - Run ESlint with airbnb-config
  • npm run build - Babel will transpile ES6 => ES5 and minify the code.
  • npm run prepublish - Hook for npm. Do all the checks before publishing your module.
1.0.9

1 year ago

1.0.8

2 years ago

1.0.7

4 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago