Package Exports
- selectors
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (selectors) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Selectors
Immutable JSON selectors.
A small lib that help manipulating JSON objects in an immutable way.
Example
'use strict';
var selectors = require('selectors')
, lift = selectors.liftSelection
, map = selectors.mapSelection
, select = selectors.select
, has = selectors.hasSelection
, set = selectors.setSelection
;
var obj = {
a: {
b: 100
}
}
// Has with a path selector
console.log("Has obj.a.b?", has(['a','b'], obj))
// Result: Has obj.a.b? true
// Has with a prop selector
console.log("Has obj.Z?", has('A', obj));
// Has obj.Z? false
// Select with a path selector
console.log("obj.a.b: ", select(['a', 'b'], obj));
// obj.a.b: 100
// Select with a prop selector
console.log("obj.a: ", select('a', obj));
// obj.a: { b: 100 }
// Set a new selected property
var immutable = set(['a','c'], "I am new", obj);
console.log("New:", immutable, "Old:", obj);
// New: { a: { b: 100, c: 'I am new' } } Old: { a: { b: 100 } }
// Create a new object
console.log("New object: ", set(['x', 'y', 'z'], "I was just created", {}));
// New object: { x: { y: { z: 'I was just created' } } }
// Create a new object from `undefined`
console.log("From undefined: ", set(['create', 'from', 'undefined'], "CHECK")());
// From undefined: { create: { from: { undefined: 'CHECK' } } }
// Lift example
function add(x, y) {return x+y;}
var addTen = add.bind(null, 10);
console.log('obj.a.b + 10:', lift(addTen, ['a', 'b'], obj))
// obj.a.b + 10: 110
// Curried lift
function mul(x, y) {return x*y;}
var mulSelectionByEleven = lift(mul.bind(null, 11));
console.log('obj.a.b * 11:', mulSelectionByEleven(['a', 'b'], obj))
// obj.a.b * 11: 1100
// Curried map example
var incrementSelection = map(add.bind(null,1));
var incremented = incrementSelection(['a', 'b'], obj);
console.log('Original:', obj, 'Incremented:',incremented);
// Original: { a: { b: 100 } } Incremented: { a: { b: 101 } }
methods
var selectors = require('selectors');
All methods are auto curried and can be composed to new functions.
Common Attributes:
selector
- Several variations might applystring
- Selects the propertyarray
- Selects a pathUndefined|[]
- Selects the whole object
obj
- The JSON object to select from. It could be an empty object as well asUndefined
. When it's undefined it will simply create a new object.
hasSelection(selector, obj)
Returns false
if the selector is undefined.
select(selector, obj)
Returns the value of the selection.
setSelection(selector, value, obj)
Sets a new value
for the selection.
Returns a new object with updated value.
liftSelection(f, selector, obj)
f
- a function with the signature of f(x)
.
Lifts/Injects the value of the selection into f
.
Returns the value of f(x)
.
mapSelection(f, selector, obj);
f
- a function with a signature of f(x)
.
Maps the value of the selection with f
.
Returns a new object with the value of f(x)
at the selection.
install
With npm do:
npm install selectors
license
MIT