plain-immutable
Version:
Make plain json data(array and object) immutable
65 lines (46 loc) • 1.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = makeObjectImmutable;
var _ = require('.');
var _2 = _interopRequireDefault(_);
var _tag = require('./tag');
var _set = require('./set');
var _remove = require('./remove');
var _merge = require('./merge');
var _merge2 = _interopRequireDefault(_merge);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function makeObjectImmutable(obj) {
if ((0, _tag.isImmutable)(obj)) return obj;
_tag.setImmutableTag.call(obj);
// deeply make value immutable
Object.keys(obj).forEach(function (key) {
(0, _2.default)(obj[key]);
});
addNewMethods.call(obj);
return Object.freeze(obj);
}
function mutable() {
var _this = this;
if (!(0, _tag.isImmutable)(this)) return this;
var result = {};
Object.keys(this).forEach(function (key) {
result[key] = _this[key];
});
// addNewMethods.call(result);
return result;
}
function addNewMethods() {
Object.defineProperties(this, {
mutable: { value: mutable },
asMutable: { value: mutable },
set: { value: _set.set },
setIn: { value: _set.setIn },
remove: { value: _remove.remove },
delete: { value: _remove.remove },
removeIn: { value: _remove.removeIn },
deleteIn: { value: _remove.removeIn },
merge: { value: _merge2.default }
});
}