transmutable
Version:
immutable objects that pretend to be mutable
24 lines (22 loc) • 673 B
JavaScript
;
exports.get = function get(target, path) {
if (typeof path == 'function') return path(target);
if (typeof path == 'string' || path instanceof String) {
return target[path];
}
if (!path || !path.length) return target;
let curr = target, i;
for (i = 0; curr && i < path.length - 1; curr = curr[path[i++]]) ;
if (curr) return curr[path[i]];
}
exports.set = function set(target, path, value) {
let curr = target, i;
if (typeof path == 'string' || path instanceof String) {
target[path] = value;
return;
}
for (i = 0; i < path.length - 1; i++) {
curr = curr[path[i]] || (curr[path[i]] = {});
};
curr[path[i]] = value
}