@state-sync/redux-path-reducer
Version:
state-sync client only json path reducer
40 lines (39 loc) • 1.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Parse JSON path and return array of segments
* @param {string} pathStr
* @returns {Array} array of segments
*/
function parse(pathStr) {
//TODO: optimize by indexOf loop
var split, path = [];
// Split up the path
split = pathStr.split('/');
return split.splice(1);
}
/**
* Find and return value by path, if path is not available in provided context, returns null
* @param model
* @param {string} path path to value
* @returns {any} value or null
*/
function find(model, path) {
for (var _i = 0, _a = parse(path); _i < _a.length; _i++) {
var seg = _a[_i];
if (model === null) {
return null;
}
else if (model instanceof Array) {
model = model[parseInt(seg)];
}
else if (model instanceof Object) {
model = model[seg];
}
else {
model = null;
}
}
return model;
}
exports.default = find;