typescript-immutable-utils
Version:
Type-safe immutability helpers for simple objects and arrays
67 lines (66 loc) • 1.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var objects_1 = require("./objects");
function createDict() {
return Object.create(null);
}
exports.createDict = createDict;
function copyDict(dict) {
return Object.assign(createDict(), dict);
}
exports.copyDict = copyDict;
function hasKey(dict, key) {
return Object.prototype.hasOwnProperty.call(dict, key.toString());
}
exports.hasKey = hasKey;
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;
}
exports.mapValues = mapValues;
function union(target, source) {
return objects_1.update(target, source);
}
exports.union = union;
function setKey(dict, key, value) {
if (dict[key] === value)
return dict;
var ret = copyDict(dict);
ret[key] = value;
return ret;
}
exports.setKey = setKey;
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;
}
exports.removeKey = removeKey;
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;
}
exports.fromKeys = fromKeys;