This package has been deprecated

Author message:

Deprecated, not maintained

wader
TypeScript icon, indicating that this package has built-in type declarations

1.3.3 • Public • Published

wader

Module to get and set nested object property

require("wader")

Example

const wader = require('wader');
const assert = require('assert');

const obj = { a: { b: 1, c: [2, 3] } };
// constructor versions
const ab = wader('a.b');
const ac = wader('a.c');
const ax = wader('a.x');
const ay = wader('a.y');
const bx = wader('b.x');
const by = wader('b.y');
const cy = wader('c.y');
const d = wader('d');
const e = wader('e');
// static versions
const { get, set, getIndexOf, setIndexOf, curry } = wader;
// curried static versions
const cget = curry(get);
const cset = curry(set);
const cgetIndexOf = curry(getIndexOf);
const csetIndexOf = curry(setIndexOf);
const getAB = cget(['a', 'b']);
const setAB = cset(['a', 'b']);
const getAC0 = cgetIndexOf(['a', 'c'], 0);
const setAC0 = csetIndexOf(['a', 'c'], 0);

// get value by key
assert.strictEqual(ab.get(obj), obj.a.b);
assert.deepStrictEqual(ac.get(obj), obj.a.c);
assert.deepStrictEqual(get(['a', 'b'], obj), obj.a.b);
assert.deepStrictEqual(get(['a', 'c'], obj), obj.a.c);
assert.deepStrictEqual(getAB(obj), obj.a.b);
assert.strictEqual(ax.get(obj), undefined);
assert.strictEqual(ay.get(obj), undefined);
assert.strictEqual(d.get(obj), undefined);
assert.strictEqual(get(['a', 'x'], obj), undefined);
assert.strictEqual(get(['b', 'x'], obj), undefined);
assert.strictEqual(get(['d'], obj), undefined);
// get value by key & index
assert.strictEqual(ac.getIndexOf(obj, 0), obj.a.c[0]);
assert.strictEqual(ac.getIndexOf(obj, 1), obj.a.c[1]);
assert.strictEqual(getIndexOf(['a', 'c'], 0, obj), obj.a.c[0]);
assert.strictEqual(getIndexOf(['a', 'c'], 1, obj), obj.a.c[1]);
assert.strictEqual(getAC0(obj), obj.a.c[0]);
assert.strictEqual(ac.getIndexOf(obj, 2), undefined);
assert.strictEqual(ay.getIndexOf(obj, 0), undefined);
assert.strictEqual(by.getIndexOf(obj, 0), undefined);
assert.strictEqual(e.getIndexOf(obj, 0), undefined);
assert.strictEqual(getIndexOf(['a', 'c'], 2, obj), undefined);
assert.strictEqual(getIndexOf(['a', 'y'], 0, obj), undefined);
assert.strictEqual(getIndexOf(['b', 'y'], 0, obj), undefined);
assert.strictEqual(getIndexOf(['e'], 0, obj), undefined);
// set value by key
assert.strictEqual(ab.set(obj, 5), 5);
assert.strictEqual(obj.a.b, 5);
assert.strictEqual(set(['a', 'b'], 7, obj), 7);
assert.strictEqual(obj.a.b, 7);
assert.strictEqual(setAB(9, obj), 9);
assert.strictEqual(obj.a.b, 9);
assert.strictEqual(ax.set(obj, 7), 7);
assert.strictEqual(obj.a.x, 7);
assert.strictEqual(set(['a', 'x'], 3, obj), 3);
assert.strictEqual(obj.a.x, 3);
assert.strictEqual(bx.set(obj, 3), 3);
assert.strictEqual(obj.b.x, 3);
assert.strictEqual(set(['b', 'x'], 0, obj), 0);
assert.strictEqual(obj.b.x, 0);
assert.strictEqual(d.set(obj, 0), 0);
assert.strictEqual(obj.d, 0);
assert.strictEqual(set(['d'], 1, obj), 1);
assert.strictEqual(obj.d, 1);
// set value by key & index
assert.strictEqual(ac.setIndexOf(obj, 0, 8), 8);
assert.strictEqual(ac.setIndexOf(obj, 1, 9), 9);
assert.deepStrictEqual(obj.a.c, [8, 9]);
assert.strictEqual(setIndexOf(['a', 'c'], 0, 3, obj), 3);
assert.strictEqual(setIndexOf(['a', 'c'], 1, 4, obj), 4);
assert.deepStrictEqual(obj.a.c, [3, 4]);
assert.strictEqual(setAC0(5, obj), 5);
assert.deepStrictEqual(obj.a.c, [5, 4]);
assert.strictEqual(by.setIndexOf(obj, 0, 3), 3);
assert.strictEqual(by.setIndexOf(obj, 1, 4), 4);
assert.deepStrictEqual(obj.b.y, [3, 4]);
assert.strictEqual(setIndexOf(['b', 'y'], 0, 4, obj), 4);
assert.strictEqual(setIndexOf(['b', 'y'], 1, 5, obj), 5);
assert.deepStrictEqual(obj.b.y, [4, 5]);
assert.strictEqual(cy.setIndexOf(obj, 0, 5), 5);
assert.strictEqual(cy.setIndexOf(obj, 1, 6), 6);
assert.deepStrictEqual(obj.c.y, [5, 6]);
assert.strictEqual(setIndexOf(['c', 'y'], 0, 6, obj), 6);
assert.strictEqual(setIndexOf(['c', 'y'], 1, 7, obj), 7);
assert.deepStrictEqual(obj.c.y, [6, 7]);
assert.strictEqual(e.setIndexOf(obj, 0, 8), 8);
assert.strictEqual(e.setIndexOf(obj, 1, 9), 9);
assert.deepStrictEqual(obj.e, [8, 9]);
assert.strictEqual(setIndexOf(['e'], 0, 9, obj), 9);
assert.strictEqual(setIndexOf(['e'], 1, 0, obj), 0);
assert.deepStrictEqual(obj.e, [9, 0]);

Wader

require("wader")
@property {function} get
@property {function} set
@property {function} getIndexOf
@property {function} setIndexOf
@property {function} curry

Wader.get

@param {string[]} path 
@param {Object} obj 
@returns {*} value

Wader.set

@param {string[]} path 
@param {*} value
@param {Object} obj 
@returns {*} value

Wader.getIndexOf

@param {string[]} path 
@param {number} index 
@param {Object} obj 
@returns {*} value

Wader.setIndexOf

@param {string[]} path 
@param {number} index 
@param {*} value
@param {Object} obj 
@returns {*} value

Wader factory

require("wader")(key [, separator = '.'])
@param {string} key - property name ('a.b.c')
@param {string} [separator = '.']
@returns {wader} wader

wader

@typedef {Object} wader
@property {get} get
@property {set} set
@property {getIndexOf} getIndexOf
@property {setIndexOf} setIndexOf

wader.get

@typedef {function} get
@param {Object} obj
@returns {*} value

wader.set

@typedef {function} set
@param {Object} obj
@param {*} value
@returns {*} value

wader.getIndexOf

@typedef {function} getIndexOf
@param {Object} obj
@param {number} index
@returns {*} value

wader.setIndexOf

@typedef {function} setIndexOf
@param {Object} obj
@param {number} index
@param {*} value
@returns {*} value

Package Sidebar

Install

npm i wader

Weekly Downloads

7

Version

1.3.3

License

ISC

Last publish

Collaborators

  • dab00