typescript-immutable-utils
Version:
Type-safe immutability helpers for simple objects and arrays
57 lines (56 loc) • 1.6 kB
JavaScript
import { update } from "./objects";
export function createDict() {
return Object.create(null);
}
export function copyDict(dict) {
return Object.assign(createDict(), dict);
}
export function hasKey(dict, key) {
return Object.prototype.hasOwnProperty.call(dict, key.toString());
}
export function mapValues(dict, map) {
var ret = createDict();
var changed = false;
for (var _i = 0, _a = Object.keys(dict); _i < _a.length; _i++) {
var key = _a[_i];
ret[key] = map(dict[key], key);
if (ret[key] !== dict[key])
changed = true;
}
return changed ? ret : dict;
}
export function union(target, source) {
return update(target, source);
}
export function setKey(dict, key, value) {
if (dict[key] === value)
return dict;
var ret = copyDict(dict);
ret[key] = value;
return ret;
}
export function removeKey(dict) {
var keys = [];
for (var _i = 1; _i < arguments.length; _i++) {
keys[_i - 1] = arguments[_i];
}
var ret = copyDict(dict);
var changed = false;
for (var _a = 0, keys_1 = keys; _a < keys_1.length; _a++) {
var key = keys_1[_a];
if (hasKey(ret, key.toString())) {
changed = true;
delete ret[key];
}
}
return changed ? ret : dict;
}
export function fromKeys(keys, values) {
var ret = createDict();
var isFunction = typeof values === 'function';
for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {
var key = keys_2[_i];
ret[key] = isFunction ? values(key) : values;
}
return ret;
}