transmutable
Version:
immutable objects that pretend to be mutable
25 lines (24 loc) • 704 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;
var curr = target,
i = void 0;
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) {
var curr = target,
i = void 0;
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;
};