UNPKG

property-expr-csp

Version:

tiny util for getting and setting deep object props safely

60 lines (39 loc) 2.17 kB
property-expr-csp ================= Tiny expression helper for creating accessors; handles most stuff, including ["bracket notation"] for property access. Originally based off of Kendo UI Core expression code and the original property-expr package, but here is special version to satisfy CSP (Content-Security-Policy) requirements! npm install property-expr-csp ## Use Setters and getters are not compiled to functions and executed every time to satisfy CSP var expr = require('property-expr') , obj = { foo: { bar: [ "hi", { buz: { baz: 'found me!' } }] } }; var getBaz = expr.getter('foo.bar[1]["buz"].baz') , setBaz = expr.setter('foo.bar[1]["buz"].baz') console.log(getBaz(obj)) // => 'found me!' setBaz(obj, 'set me!') console.log(obj.foo.bar[1].buz.baz) // => 'set me!' ### `getter(expression, [ safeAccess ])` Returns a function that accepts an obj and returns the value at the supplied expression. You can create a "safe" getter, which won't error out when accessing properties that don't exist, reducing existance checks befroe property access: expr.getter('foo.bar.baz', true)({ foo: {} }) // => undefined //instead of val = foo.bar && foo.bar.baz ### `setter(expression)` Returns a function that accepts an obj and a value and sets the property pointed to by the expression to the supplied value. ### `expr(expression, [ safeAccess], [ paramName = 'data'])` Method was removed, because it makes no sense in CSP version. ### `split(path) -> Array` Returns an array of each path segment. ```js split("foo['bar'][0].baz") // [ "foo", "'bar'", "0", "baz"] ``` ### `forEach(path, iterator[, thisArg]) ` Iterate through a path but segment, with some additional helpful metadata about the segment. The iterator function is called with: `pathSegment`, `isBracket`, `isArray`, `idx`, `segments` ```js .forEach('foo["bar"][1]', function(pathSegment, isBracket, isArray, idx, segments) { // 'foo' -> isBracket = false, isArray = false, idx = 0 // '"bar"' -> isBracket = true, isArray = false, idx = 1 // '0' -> isBracket = false, isArray = true, idx = 2 } ```