Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Socket
Sign inDemoInstall

immer

Package Overview
Dependencies
Maintainers
2
Versions
173
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

immer - npm Package Compare versions

Comparing version 2.1.1 to 2.1.2

dist/immer.mjs

8

dist/immer.d.ts

@@ -241,1 +241,9 @@ /** Object types that should never be mapped */

}
// Backward compatibility with --target es5
declare global {
interface Set<T> {}
interface Map<K, V> {}
interface WeakSet<T> {}
interface WeakMap<K extends object, V> {}
}

1657

dist/immer.js

@@ -5,744 +5,704 @@ 'use strict';

var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
var classCallCheck = function (instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
};
var createClass = function () {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);
if (staticProps) defineProperties(Constructor, staticProps);
return Constructor;
};
}();
var defineProperty = function (obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
};
var NOTHING = typeof Symbol !== "undefined" ? Symbol("immer-nothing") : defineProperty({}, "immer-nothing", true);
var obj;
var NOTHING = typeof Symbol !== "undefined" ? Symbol("immer-nothing") : ( obj = {}, obj["immer-nothing"] = true, obj );
var DRAFTABLE = typeof Symbol !== "undefined" ? Symbol.for("immer-draftable") : "__$immer_draftable";
var DRAFT_STATE = typeof Symbol !== "undefined" ? Symbol.for("immer-state") : "__$immer_state";
function isDraft(value) {
return !!value && !!value[DRAFT_STATE];
return !!value && !!value[DRAFT_STATE];
}
function isDraftable(value) {
if (!value || (typeof value === "undefined" ? "undefined" : _typeof(value)) !== "object") return false;
if (Array.isArray(value)) return true;
var proto = Object.getPrototypeOf(value);
if (!proto || proto === Object.prototype) return true;
return !!value[DRAFTABLE] || !!value.constructor[DRAFTABLE];
if (!value || typeof value !== "object") { return false; }
if (Array.isArray(value)) { return true; }
var proto = Object.getPrototypeOf(value);
if (!proto || proto === Object.prototype) { return true; }
return !!value[DRAFTABLE] || !!value.constructor[DRAFTABLE];
}
function original(value) {
if (value && value[DRAFT_STATE]) {
return value[DRAFT_STATE].base;
} // otherwise return undefined
function original(value) {
if (value && value[DRAFT_STATE]) {
return value[DRAFT_STATE].base;
}
// otherwise return undefined
}
var assign = Object.assign || function assign(target, value) {
for (var key in value) {
if (has(value, key)) {
target[key] = value[key];
}
for (var key in value) {
if (has(value, key)) {
target[key] = value[key];
}
return target;
}
return target;
};
var ownKeys = typeof Reflect !== "undefined" && Reflect.ownKeys ? Reflect.ownKeys : typeof Object.getOwnPropertySymbols !== "undefined" ? function (obj) { return Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj)); } : Object.getOwnPropertyNames;
function shallowCopy(base, invokeGetters) {
if ( invokeGetters === void 0 ) invokeGetters = false;
var ownKeys = typeof Reflect !== "undefined" && Reflect.ownKeys ? Reflect.ownKeys : typeof Object.getOwnPropertySymbols !== "undefined" ? function (obj) {
return Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj));
} : Object.getOwnPropertyNames;
if (Array.isArray(base)) { return base.slice(); }
var clone = Object.create(Object.getPrototypeOf(base));
ownKeys(base).forEach(function (key) {
if (key === DRAFT_STATE) {
return; // Never copy over draft state.
}
function shallowCopy(base) {
var invokeGetters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var desc = Object.getOwnPropertyDescriptor(base, key);
if (Array.isArray(base)) return base.slice();
var clone = Object.create(Object.getPrototypeOf(base));
ownKeys(base).forEach(function (key) {
if (key === DRAFT_STATE) {
return; // Never copy over draft state.
}
var desc = Object.getOwnPropertyDescriptor(base, key);
if (desc.get) {
if (!invokeGetters) {
throw new Error("Immer drafts cannot have computed properties");
}
desc.value = desc.get.call(base);
}
if (desc.enumerable) {
clone[key] = desc.value;
} else {
Object.defineProperty(clone, key, {
value: desc.value,
writable: true,
configurable: true
});
}
});
return clone;
}
if (desc.get) {
if (!invokeGetters) {
throw new Error("Immer drafts cannot have computed properties");
}
function each(value, cb) {
if (Array.isArray(value)) {
for (var i = 0; i < value.length; i++) {
cb(i, value[i], value);
}
desc.value = desc.get.call(base);
}
if (desc.enumerable) {
clone[key] = desc.value;
} else {
ownKeys(value).forEach(function (key) {
return cb(key, value[key], value);
});
Object.defineProperty(clone, key, {
value: desc.value,
writable: true,
configurable: true
});
}
});
return clone;
}
function each(value, cb) {
if (Array.isArray(value)) {
for (var i = 0; i < value.length; i++) { cb(i, value[i], value); }
} else {
ownKeys(value).forEach(function (key) { return cb(key, value[key], value); });
}
}
function isEnumerable(base, prop) {
return Object.getOwnPropertyDescriptor(base, prop).enumerable;
return Object.getOwnPropertyDescriptor(base, prop).enumerable;
}
function has(thing, prop) {
return Object.prototype.hasOwnProperty.call(thing, prop);
return Object.prototype.hasOwnProperty.call(thing, prop);
}
function is(x, y) {
// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js
if (x === y) {
return x !== 0 || 1 / x === 1 / y;
} else {
return x !== x && y !== y;
}
// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js
if (x === y) {
return x !== 0 || 1 / x === 1 / y;
} else {
return x !== x && y !== y;
}
}
/** Each scope represents a `produce` call. */
var ImmerScope = function () {
function ImmerScope(parent) {
classCallCheck(this, ImmerScope);
this.drafts = [];
this.parent = parent;
var ImmerScope = function ImmerScope(parent) {
this.drafts = [];
this.parent = parent; // Whenever the modified draft contains a draft from another scope, we
// need to prevent auto-freezing so the unowned draft can be finalized.
// Whenever the modified draft contains a draft from another scope, we
// need to prevent auto-freezing so the unowned draft can be finalized.
this.canAutoFreeze = true;
this.canAutoFreeze = true; // To avoid prototype lookups:
// To avoid prototype lookups:
this.patches = null;
}
this.patches = null;
};
createClass(ImmerScope, [{
key: "usePatches",
value: function usePatches(patchListener) {
if (patchListener) {
this.patches = [];
this.inversePatches = [];
this.patchListener = patchListener;
}
}
}, {
key: "revoke",
value: function revoke() {
this.leave();
this.drafts.forEach(_revoke);
this.drafts = null; // Make draft-related methods throw.
}
}, {
key: "leave",
value: function leave() {
if (this === ImmerScope.current) {
ImmerScope.current = this.parent;
}
}
}]);
return ImmerScope;
}();
ImmerScope.prototype.usePatches = function usePatches (patchListener) {
if (patchListener) {
this.patches = [];
this.inversePatches = [];
this.patchListener = patchListener;
}
};
ImmerScope.prototype.revoke = function revoke$1 () {
this.leave();
this.drafts.forEach(revoke);
this.drafts = null; // Make draft-related methods throw.
};
ImmerScope.prototype.leave = function leave () {
if (this === ImmerScope.current) {
ImmerScope.current = this.parent;
}
};
ImmerScope.current = null;
ImmerScope.enter = function () {
return this.current = new ImmerScope(this.current);
return this.current = new ImmerScope(this.current);
};
function _revoke(draft) {
draft[DRAFT_STATE].revoke();
function revoke(draft) {
draft[DRAFT_STATE].revoke();
}
// property descriptors are recycled to make sure we don't create a get and set closure per property,
// but share them all instead
var descriptors = {};
function willFinalize(scope, result, isReplaced) {
scope.drafts.forEach(function (draft) {
draft[DRAFT_STATE].finalizing = true;
});
function willFinalize(scope, result, isReplaced) {
scope.drafts.forEach(function (draft) {
draft[DRAFT_STATE].finalizing = true;
});
if (!isReplaced) {
if (scope.patches) {
markChangesRecursively(scope.drafts[0]);
}
// This is faster when we don't care about which attributes changed.
markChangesSweep(scope.drafts);
if (!isReplaced) {
if (scope.patches) {
markChangesRecursively(scope.drafts[0]);
} // This is faster when we don't care about which attributes changed.
markChangesSweep(scope.drafts);
} // When a child draft is returned, look for changes.
else if (isDraft(result) && result[DRAFT_STATE].scope === scope) {
markChangesSweep(scope.drafts);
}
// When a child draft is returned, look for changes.
else if (isDraft(result) && result[DRAFT_STATE].scope === scope) {
markChangesSweep(scope.drafts);
}
}
function createProxy(base, parent) {
var isArray = Array.isArray(base);
var draft = clonePotentialDraft(base);
each(draft, function (prop) {
proxyProperty(draft, prop, isArray || isEnumerable(base, prop));
});
var isArray = Array.isArray(base);
var draft = clonePotentialDraft(base);
each(draft, function (prop) {
proxyProperty(draft, prop, isArray || isEnumerable(base, prop));
}); // See "proxy.js" for property documentation.
// See "proxy.js" for property documentation.
var scope = parent ? parent.scope : ImmerScope.current;
var state = {
scope: scope,
modified: false,
finalizing: false, // es5 only
finalized: false,
assigned: {},
parent: parent,
base: base,
draft: draft,
copy: null,
revoke: revoke,
revoked: false // es5 only
};
var scope = parent ? parent.scope : ImmerScope.current;
var state = {
scope: scope,
modified: false,
finalizing: false,
// es5 only
finalized: false,
assigned: {},
parent: parent,
base: base,
draft: draft,
copy: null,
revoke: revoke$1,
revoked: false // es5 only
createHiddenProperty(draft, DRAFT_STATE, state);
scope.drafts.push(draft);
return draft;
};
createHiddenProperty(draft, DRAFT_STATE, state);
scope.drafts.push(draft);
return draft;
}
function revoke() {
this.revoked = true;
function revoke$1() {
this.revoked = true;
}
function source(state) {
return state.copy || state.base;
return state.copy || state.base;
}
function _get(state, prop) {
assertUnrevoked(state);
var value = source(state)[prop];
// Drafts are only created for proxyable values that exist in the base state.
if (!state.finalizing && value === state.base[prop] && isDraftable(value)) {
prepareCopy(state);
return state.copy[prop] = createProxy(value, state);
}
return value;
function get(state, prop) {
assertUnrevoked(state);
var value = source(state)[prop]; // Drafts are only created for proxyable values that exist in the base state.
if (!state.finalizing && value === state.base[prop] && isDraftable(value)) {
prepareCopy(state);
return state.copy[prop] = createProxy(value, state);
}
return value;
}
function _set(state, prop, value) {
assertUnrevoked(state);
state.assigned[prop] = true;
if (!state.modified) {
if (is(source(state)[prop], value)) return;
markChanged(state);
prepareCopy(state);
}
state.copy[prop] = value;
function set(state, prop, value) {
assertUnrevoked(state);
state.assigned[prop] = true;
if (!state.modified) {
if (is(source(state)[prop], value)) { return; }
markChanged(state);
prepareCopy(state);
}
state.copy[prop] = value;
}
function markChanged(state) {
if (!state.modified) {
state.modified = true;
if (state.parent) markChanged(state.parent);
}
if (!state.modified) {
state.modified = true;
if (state.parent) { markChanged(state.parent); }
}
}
function prepareCopy(state) {
if (!state.copy) state.copy = clonePotentialDraft(state.base);
if (!state.copy) { state.copy = clonePotentialDraft(state.base); }
}
function clonePotentialDraft(base) {
var state = base && base[DRAFT_STATE];
if (state) {
state.finalizing = true;
var draft = shallowCopy(state.draft, true);
state.finalizing = false;
return draft;
}
return shallowCopy(base);
var state = base && base[DRAFT_STATE];
if (state) {
state.finalizing = true;
var draft = shallowCopy(state.draft, true);
state.finalizing = false;
return draft;
}
return shallowCopy(base);
}
function proxyProperty(draft, prop, enumerable) {
var desc = descriptors[prop];
if (desc) {
desc.enumerable = enumerable;
} else {
descriptors[prop] = desc = {
configurable: true,
enumerable: enumerable,
get: function get$$1() {
return _get(this[DRAFT_STATE], prop);
},
set: function set$$1(value) {
_set(this[DRAFT_STATE], prop, value);
}
};
}
Object.defineProperty(draft, prop, desc);
var desc = descriptors[prop];
if (desc) {
desc.enumerable = enumerable;
} else {
descriptors[prop] = desc = {
configurable: true,
enumerable: enumerable,
get: function get$1() {
return get(this[DRAFT_STATE], prop);
},
set: function set$1(value) {
set(this[DRAFT_STATE], prop, value);
}
};
}
Object.defineProperty(draft, prop, desc);
}
function assertUnrevoked(state) {
if (state.revoked === true) throw new Error("Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? " + JSON.stringify(source(state)));
}
if (state.revoked === true) { throw new Error("Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? " + JSON.stringify(source(state))); }
} // This looks expensive, but only proxies are visited, and only objects without known changes are scanned.
// This looks expensive, but only proxies are visited, and only objects without known changes are scanned.
function markChangesSweep(drafts) {
// The natural order of drafts in the `scope` array is based on when they
// were accessed. By processing drafts in reverse natural order, we have a
// better chance of processing leaf nodes first. When a leaf node is known to
// have changed, we can avoid any traversal of its ancestor nodes.
for (var i = drafts.length - 1; i >= 0; i--) {
var state = drafts[i][DRAFT_STATE];
if (!state.modified) {
if (Array.isArray(state.base)) {
if (hasArrayChanges(state)) markChanged(state);
} else if (hasObjectChanges(state)) markChanged(state);
}
// The natural order of drafts in the `scope` array is based on when they
// were accessed. By processing drafts in reverse natural order, we have a
// better chance of processing leaf nodes first. When a leaf node is known to
// have changed, we can avoid any traversal of its ancestor nodes.
for (var i = drafts.length - 1; i >= 0; i--) {
var state = drafts[i][DRAFT_STATE];
if (!state.modified) {
if (Array.isArray(state.base)) {
if (hasArrayChanges(state)) { markChanged(state); }
} else if (hasObjectChanges(state)) { markChanged(state); }
}
}
}
function markChangesRecursively(object) {
if (!object || (typeof object === "undefined" ? "undefined" : _typeof(object)) !== "object") return;
var state = object[DRAFT_STATE];
if (!state) return;
var base = state.base,
draft = state.draft,
assigned = state.assigned;
if (!object || typeof object !== "object") { return; }
var state = object[DRAFT_STATE];
if (!state) { return; }
var base = state.base;
var draft = state.draft;
var assigned = state.assigned;
if (!Array.isArray(object)) {
// Look for added keys.
Object.keys(draft).forEach(function (key) {
// The `undefined` check is a fast path for pre-existing keys.
if (base[key] === undefined && !has(base, key)) {
assigned[key] = true;
markChanged(state);
} else if (!assigned[key]) {
// Only untouched properties trigger recursion.
markChangesRecursively(draft[key]);
}
});
// Look for removed keys.
Object.keys(base).forEach(function (key) {
// The `undefined` check is a fast path for pre-existing keys.
if (draft[key] === undefined && !has(draft, key)) {
assigned[key] = false;
markChanged(state);
}
});
} else if (hasArrayChanges(state)) {
if (!Array.isArray(object)) {
// Look for added keys.
Object.keys(draft).forEach(function (key) {
// The `undefined` check is a fast path for pre-existing keys.
if (base[key] === undefined && !has(base, key)) {
assigned[key] = true;
markChanged(state);
assigned.length = true;
if (draft.length < base.length) {
for (var i = draft.length; i < base.length; i++) {
assigned[i] = false;
}
} else {
for (var _i = base.length; _i < draft.length; _i++) {
assigned[_i] = true;
}
}
for (var _i2 = 0; _i2 < draft.length; _i2++) {
// Only untouched indices trigger recursion.
if (assigned[_i2] === undefined) markChangesRecursively(draft[_i2]);
}
} else if (!assigned[key]) {
// Only untouched properties trigger recursion.
markChangesRecursively(draft[key]);
}
}); // Look for removed keys.
Object.keys(base).forEach(function (key) {
// The `undefined` check is a fast path for pre-existing keys.
if (draft[key] === undefined && !has(draft, key)) {
assigned[key] = false;
markChanged(state);
}
});
} else if (hasArrayChanges(state)) {
markChanged(state);
assigned.length = true;
if (draft.length < base.length) {
for (var i = draft.length; i < base.length; i++) { assigned[i] = false; }
} else {
for (var i$1 = base.length; i$1 < draft.length; i$1++) { assigned[i$1] = true; }
}
for (var i$2 = 0; i$2 < draft.length; i$2++) {
// Only untouched indices trigger recursion.
if (assigned[i$2] === undefined) { markChangesRecursively(draft[i$2]); }
}
}
}
function hasObjectChanges(state) {
var base = state.base,
draft = state.draft;
var base = state.base;
var draft = state.draft; // Search for added keys and changed keys. Start at the back, because
// non-numeric keys are ordered by time of definition on the object.
// Search for added keys. Start at the back, because non-numeric keys
// are ordered by time of definition on the object.
var keys = Object.keys(draft);
var keys = Object.keys(draft);
for (var i = keys.length - 1; i >= 0; i--) {
// The `undefined` check is a fast path for pre-existing keys.
if (base[keys[i]] === undefined && !has(base, keys[i])) {
return true;
for (var i = keys.length - 1; i >= 0; i--) {
var key = keys[i];
var baseValue = base[key]; // The `undefined` check is a fast path for pre-existing keys.
if (baseValue === undefined && !has(base, key)) {
return true;
} // Once a base key is deleted, future changes go undetected, because its
// descriptor is erased. This branch detects any missed changes.
else {
var value = draft[key];
var state$1 = value && value[DRAFT_STATE];
if (state$1 ? state$1.base !== baseValue : !is(value, baseValue)) {
return true;
}
}
}
} // At this point, no keys were added or changed.
// Compare key count to determine if keys were deleted.
// Since no keys have been added, we can compare lengths to know if an
// object has been deleted.
return keys.length !== Object.keys(base).length;
return keys.length !== Object.keys(base).length;
}
function hasArrayChanges(state) {
var draft = state.draft;
var draft = state.draft;
if (draft.length !== state.base.length) { return true; } // See #116
// If we first shorten the length, our array interceptors will be removed.
// If after that new items are added, result in the same original length,
// those last items will have no intercepting property.
// So if there is no own descriptor on the last position, we know that items were removed and added
// N.B.: splice, unshift, etc only shift values around, but not prop descriptors, so we only have to check
// the last one
if (draft.length !== state.base.length) return true;
// See #116
// If we first shorten the length, our array interceptors will be removed.
// If after that new items are added, result in the same original length,
// those last items will have no intercepting property.
// So if there is no own descriptor on the last position, we know that items were removed and added
// N.B.: splice, unshift, etc only shift values around, but not prop descriptors, so we only have to check
// the last one
var descriptor = Object.getOwnPropertyDescriptor(draft, draft.length - 1);
// descriptor can be null, but only for newly created sparse arrays, eg. new Array(10)
if (descriptor && !descriptor.get) return true;
// For all other cases, we don't have to compare, as they would have been picked up by the index setters
return false;
var descriptor = Object.getOwnPropertyDescriptor(draft, draft.length - 1); // descriptor can be null, but only for newly created sparse arrays, eg. new Array(10)
if (descriptor && !descriptor.get) { return true; } // For all other cases, we don't have to compare, as they would have been picked up by the index setters
return false;
}
function createHiddenProperty(target, prop, value) {
Object.defineProperty(target, prop, {
value: value,
enumerable: false,
writable: true
});
Object.defineProperty(target, prop, {
value: value,
enumerable: false,
writable: true
});
}
var legacyProxy = Object.freeze({
willFinalize: willFinalize,
createProxy: createProxy
var legacyProxy = /*#__PURE__*/Object.freeze({
willFinalize: willFinalize,
createProxy: createProxy
});
// Do nothing before being finalized.
function willFinalize$1() {}
function createProxy$1(base, parent) {
var scope = parent ? parent.scope : ImmerScope.current;
var state = {
// Track which produce call this is associated with.
scope: scope,
// True for both shallow and deep changes.
modified: false,
// Used during finalization.
finalized: false,
// Track which properties have been assigned (true) or deleted (false).
assigned: {},
// The parent draft state.
parent: parent,
// The base state.
base: base,
// The base proxy.
draft: null,
// Any property proxies.
drafts: {},
// The base copy with any updated values.
copy: null,
// Called by the `produce` function.
revoke: null
};
var scope = parent ? parent.scope : ImmerScope.current;
var state = {
// Track which produce call this is associated with.
scope: scope,
// True for both shallow and deep changes.
modified: false,
// Used during finalization.
finalized: false,
// Track which properties have been assigned (true) or deleted (false).
assigned: {},
// The parent draft state.
parent: parent,
// The base state.
base: base,
// The base proxy.
draft: null,
// Any property proxies.
drafts: {},
// The base copy with any updated values.
copy: null,
// Called by the `produce` function.
revoke: null
};
var ref = Array.isArray(base) ? // [state] is used for arrays, to make sure the proxy is array-ish and not violate invariants,
// although state itself is an object
Proxy.revocable([state], arrayTraps) : Proxy.revocable(state, objectTraps);
var revoke = ref.revoke;
var proxy = ref.proxy;
state.draft = proxy;
state.revoke = revoke;
scope.drafts.push(proxy);
return proxy;
}
var objectTraps = {
get: get$1,
var _ref = Array.isArray(base) ? // [state] is used for arrays, to make sure the proxy is array-ish and not violate invariants,
// although state itself is an object
Proxy.revocable([state], arrayTraps) : Proxy.revocable(state, objectTraps),
revoke = _ref.revoke,
proxy = _ref.proxy;
has: function has$$1(target, prop) {
return prop in source$1(target);
},
state.draft = proxy;
state.revoke = revoke;
ownKeys: function ownKeys$$1(target) {
return Reflect.ownKeys(source$1(target));
},
scope.drafts.push(proxy);
return proxy;
}
set: set$1,
deleteProperty: deleteProperty,
getOwnPropertyDescriptor: getOwnPropertyDescriptor,
var objectTraps = {
get: get$1,
has: function has$$1(target, prop) {
return prop in source$1(target);
},
ownKeys: function ownKeys$$1(target) {
return Reflect.ownKeys(source$1(target));
},
defineProperty: function defineProperty() {
throw new Error("Object.defineProperty() cannot be used on an Immer draft"); // prettier-ignore
},
set: set$1,
deleteProperty: deleteProperty,
getOwnPropertyDescriptor: getOwnPropertyDescriptor,
defineProperty: function defineProperty() {
throw new Error("Object.defineProperty() cannot be used on an Immer draft"); // prettier-ignore
},
getPrototypeOf: function getPrototypeOf(target) {
return Object.getPrototypeOf(target.base);
},
setPrototypeOf: function setPrototypeOf() {
throw new Error("Object.setPrototypeOf() cannot be used on an Immer draft"); // prettier-ignore
}
getPrototypeOf: function getPrototypeOf(target) {
return Object.getPrototypeOf(target.base);
},
setPrototypeOf: function setPrototypeOf() {
throw new Error("Object.setPrototypeOf() cannot be used on an Immer draft"); // prettier-ignore
}
};
var arrayTraps = {};
each(objectTraps, function (key, fn) {
arrayTraps[key] = function () {
arguments[0] = arguments[0][0];
return fn.apply(this, arguments);
};
arrayTraps[key] = function () {
arguments[0] = arguments[0][0];
return fn.apply(this, arguments);
};
});
arrayTraps.deleteProperty = function (state, prop) {
if (isNaN(parseInt(prop))) {
throw new Error("Immer only supports deleting array indices"); // prettier-ignore
}
return objectTraps.deleteProperty.call(this, state[0], prop);
if (isNaN(parseInt(prop))) {
throw new Error("Immer only supports deleting array indices"); // prettier-ignore
}
return objectTraps.deleteProperty.call(this, state[0], prop);
};
arrayTraps.set = function (state, prop, value) {
if (prop !== "length" && isNaN(parseInt(prop))) {
throw new Error("Immer only supports setting array indices and the 'length' property"); // prettier-ignore
}
return objectTraps.set.call(this, state[0], prop, value);
};
if (prop !== "length" && isNaN(parseInt(prop))) {
throw new Error("Immer only supports setting array indices and the 'length' property"); // prettier-ignore
}
// returns the object we should be reading the current value from, which is base, until some change has been made
return objectTraps.set.call(this, state[0], prop, value);
}; // returns the object we should be reading the current value from, which is base, until some change has been made
function source$1(state) {
return state.copy || state.base;
return state.copy || state.base;
}
function get$1(state, prop) {
if (prop === DRAFT_STATE) return state;
var drafts = state.drafts;
if (prop === DRAFT_STATE) { return state; }
var drafts = state.drafts; // Check for existing draft in unmodified state.
// Check for existing draft in unmodified state.
if (!state.modified && has(drafts, prop)) {
return drafts[prop];
}
if (!state.modified && has(drafts, prop)) {
return drafts[prop];
}
var value = source$1(state)[prop];
if (state.finalized || !isDraftable(value)) { return value; } // Check for existing draft in modified state.
var value = source$1(state)[prop];
if (state.finalized || !isDraftable(value)) return value;
if (state.modified) {
// Assigned values are never drafted. This catches any drafts we created, too.
if (value !== state.base[prop]) { return value; } // Store drafts on the copy (when one exists).
// Check for existing draft in modified state.
if (state.modified) {
// Assigned values are never drafted. This catches any drafts we created, too.
if (value !== state.base[prop]) return value;
// Store drafts on the copy (when one exists).
drafts = state.copy;
}
drafts = state.copy;
}
return drafts[prop] = createProxy$1(value, state);
return drafts[prop] = createProxy$1(value, state);
}
function set$1(state, prop, value) {
if (!state.modified) {
// Optimize based on value's truthiness. Truthy values are guaranteed to
// never be undefined, so we can avoid the `in` operator. Lastly, truthy
// values may be drafts, but falsy values are never drafts.
var isUnchanged = value ? is(state.base[prop], value) || value === state.drafts[prop] : is(state.base[prop], value) && prop in state.base;
if (isUnchanged) return true;
markChanged$1(state);
}
state.assigned[prop] = true;
state.copy[prop] = value;
return true;
if (!state.modified) {
// Optimize based on value's truthiness. Truthy values are guaranteed to
// never be undefined, so we can avoid the `in` operator. Lastly, truthy
// values may be drafts, but falsy values are never drafts.
var isUnchanged = value ? is(state.base[prop], value) || value === state.drafts[prop] : is(state.base[prop], value) && prop in state.base;
if (isUnchanged) { return true; }
markChanged$1(state);
}
state.assigned[prop] = true;
state.copy[prop] = value;
return true;
}
function deleteProperty(state, prop) {
// The `undefined` check is a fast path for pre-existing keys.
if (state.base[prop] !== undefined || prop in state.base) {
state.assigned[prop] = false;
markChanged$1(state);
}
if (state.copy) delete state.copy[prop];
return true;
// The `undefined` check is a fast path for pre-existing keys.
if (state.base[prop] !== undefined || prop in state.base) {
state.assigned[prop] = false;
markChanged$1(state);
}
if (state.copy) { delete state.copy[prop]; }
return true;
}
function getOwnPropertyDescriptor(state, prop) {
var owner = source$1(state);
var desc = Reflect.getOwnPropertyDescriptor(owner, prop);
if (desc) {
desc.writable = true;
desc.configurable = !Array.isArray(owner) || prop !== "length";
}
return desc;
var owner = source$1(state);
var desc = Reflect.getOwnPropertyDescriptor(owner, prop);
if (desc) {
desc.writable = true;
desc.configurable = !Array.isArray(owner) || prop !== "length";
}
return desc;
}
function markChanged$1(state) {
if (!state.modified) {
state.modified = true;
state.copy = assign(shallowCopy(state.base), state.drafts);
state.drafts = null;
if (state.parent) markChanged$1(state.parent);
}
if (!state.modified) {
state.modified = true;
state.copy = assign(shallowCopy(state.base), state.drafts);
state.drafts = null;
if (state.parent) { markChanged$1(state.parent); }
}
}
var modernProxy = Object.freeze({
willFinalize: willFinalize$1,
createProxy: createProxy$1
var modernProxy = /*#__PURE__*/Object.freeze({
willFinalize: willFinalize$1,
createProxy: createProxy$1
});
function generatePatches(state, basePath, patches, inversePatches) {
Array.isArray(state.base) ? generateArrayPatches(state, basePath, patches, inversePatches) : generateObjectPatches(state, basePath, patches, inversePatches);
Array.isArray(state.base) ? generateArrayPatches(state, basePath, patches, inversePatches) : generateObjectPatches(state, basePath, patches, inversePatches);
}
function generateArrayPatches(state, basePath, patches, inversePatches) {
var base = state.base,
copy = state.copy,
assigned = state.assigned;
var assign$$1, assign$1;
// Reduce complexity by ensuring `base` is never longer.
var base = state.base;
var copy = state.copy;
var assigned = state.assigned; // Reduce complexity by ensuring `base` is never longer.
if (copy.length < base.length) {
var _ref = [copy, base];
base = _ref[0];
copy = _ref[1];
var _ref2 = [inversePatches, patches];
patches = _ref2[0];
inversePatches = _ref2[1];
}
if (copy.length < base.length) {
(assign$$1 = [copy, base], base = assign$$1[0], copy = assign$$1[1]);
(assign$1 = [inversePatches, patches], patches = assign$1[0], inversePatches = assign$1[1]);
}
var delta = copy.length - base.length;
var delta = copy.length - base.length; // Find the first replaced index.
// Find the first replaced index.
var start = 0;
while (base[start] === copy[start] && start < base.length) {
++start;
}
var start = 0;
// Find the last replaced index. Search from the end to optimize splice patches.
var end = base.length;
while (end > start && base[end - 1] === copy[end + delta - 1]) {
--end;
}
while (base[start] === copy[start] && start < base.length) {
++start;
} // Find the last replaced index. Search from the end to optimize splice patches.
// Process replaced indices.
for (var i = start; i < end; ++i) {
if (assigned[i] && copy[i] !== base[i]) {
var path = basePath.concat([i]);
patches.push({
op: "replace",
path: path,
value: copy[i]
});
inversePatches.push({
op: "replace",
path: path,
value: base[i]
});
}
var end = base.length;
while (end > start && base[end - 1] === copy[end + delta - 1]) {
--end;
} // Process replaced indices.
for (var i = start; i < end; ++i) {
if (assigned[i] && copy[i] !== base[i]) {
var path = basePath.concat([i]);
patches.push({
op: "replace",
path: path,
value: copy[i]
});
inversePatches.push({
op: "replace",
path: path,
value: base[i]
});
}
}
var useRemove = end != base.length;
var replaceCount = patches.length;
var useRemove = end != base.length;
var replaceCount = patches.length; // Process added indices.
// Process added indices.
for (var _i = end + delta - 1; _i >= end; --_i) {
var _path = basePath.concat([_i]);
patches[replaceCount + _i - end] = {
op: "add",
path: _path,
value: copy[_i]
};
if (useRemove) {
inversePatches.push({
op: "remove",
path: _path
});
}
for (var i$1 = end + delta - 1; i$1 >= end; --i$1) {
var path$1 = basePath.concat([i$1]);
patches[replaceCount + i$1 - end] = {
op: "add",
path: path$1,
value: copy[i$1]
};
if (useRemove) {
inversePatches.push({
op: "remove",
path: path$1
});
}
} // One "replace" patch reverses all non-splicing "add" patches.
// One "replace" patch reverses all non-splicing "add" patches.
if (!useRemove) {
inversePatches.push({
op: "replace",
path: basePath.concat(["length"]),
value: base.length
});
}
if (!useRemove) {
inversePatches.push({
op: "replace",
path: basePath.concat(["length"]),
value: base.length
});
}
}
function generateObjectPatches(state, basePath, patches, inversePatches) {
var base = state.base,
copy = state.copy;
each(state.assigned, function (key, assignedValue) {
var origValue = base[key];
var value = copy[key];
var op = !assignedValue ? "remove" : key in base ? "replace" : "add";
if (origValue === value && op === "replace") return;
var path = basePath.concat(key);
patches.push(op === "remove" ? { op: op, path: path } : { op: op, path: path, value: value });
inversePatches.push(op === "add" ? { op: "remove", path: path } : op === "remove" ? { op: "add", path: path, value: origValue } : { op: "replace", path: path, value: origValue });
var base = state.base;
var copy = state.copy;
each(state.assigned, function (key, assignedValue) {
var origValue = base[key];
var value = copy[key];
var op = !assignedValue ? "remove" : key in base ? "replace" : "add";
if (origValue === value && op === "replace") { return; }
var path = basePath.concat(key);
patches.push(op === "remove" ? {
op: op,
path: path
} : {
op: op,
path: path,
value: value
});
inversePatches.push(op === "add" ? {
op: "remove",
path: path
} : op === "remove" ? {
op: "add",
path: path,
value: origValue
} : {
op: "replace",
path: path,
value: origValue
});
});
}
function applyPatches(draft, patches) {
for (var i = 0; i < patches.length; i++) {
var patch = patches[i];
var path = patch.path;
for (var i = 0; i < patches.length; i++) {
var patch = patches[i];
var path = patch.path;
if (path.length === 0 && patch.op === "replace") {
draft = patch.value;
} else {
var base = draft;
for (var _i2 = 0; _i2 < path.length - 1; _i2++) {
base = base[path[_i2]];
if (!base || (typeof base === "undefined" ? "undefined" : _typeof(base)) !== "object") throw new Error("Cannot apply patch, path doesn't resolve: " + path.join("/")); // prettier-ignore
}
var key = path[path.length - 1];
switch (patch.op) {
case "replace":
base[key] = patch.value;
break;
case "add":
if (Array.isArray(base)) {
// TODO: support "foo/-" paths for appending to an array
base.splice(key, 0, patch.value);
} else {
base[key] = patch.value;
}
break;
case "remove":
if (Array.isArray(base)) {
base.splice(key, 1);
} else {
delete base[key];
}
break;
default:
throw new Error("Unsupported patch operation: " + patch.op);
}
}
if (path.length === 0 && patch.op === "replace") {
draft = patch.value;
} else {
var base = draft;
for (var i$1 = 0; i$1 < path.length - 1; i$1++) {
base = base[path[i$1]];
if (!base || typeof base !== "object") { throw new Error("Cannot apply patch, path doesn't resolve: " + path.join("/")); } // prettier-ignore
}
var key = path[path.length - 1];
switch (patch.op) {
case "replace":
base[key] = patch.value;
break;
case "add":
if (Array.isArray(base)) {
// TODO: support "foo/-" paths for appending to an array
base.splice(key, 0, patch.value);
} else {
base[key] = patch.value;
}
break;
case "remove":
if (Array.isArray(base)) {
base.splice(key, 1);
} else {
delete base[key];
}
break;
default:
throw new Error("Unsupported patch operation: " + patch.op);
}
}
return draft;
}
return draft;
}

@@ -753,299 +713,298 @@

var configDefaults = {
useProxies: typeof Proxy !== "undefined" && typeof Reflect !== "undefined",
autoFreeze: typeof process !== "undefined" ? process.env.NODE_ENV !== "production" : verifyMinified.name === "verifyMinified",
onAssign: null,
onDelete: null,
onCopy: null
useProxies: typeof Proxy !== "undefined" && typeof Reflect !== "undefined",
autoFreeze: typeof process !== "undefined" ? process.env.NODE_ENV !== "production" : verifyMinified.name === "verifyMinified",
onAssign: null,
onDelete: null,
onCopy: null
};
var Immer = function Immer(config) {
assign(this, configDefaults, config);
this.setUseProxies(this.useProxies);
this.produce = this.produce.bind(this);
};
var Immer = function () {
function Immer(config) {
classCallCheck(this, Immer);
Immer.prototype.produce = function produce (base, recipe, patchListener) {
var this$1 = this;
assign(this, configDefaults, config);
this.setUseProxies(this.useProxies);
this.produce = this.produce.bind(this);
// curried invocation
if (typeof base === "function" && typeof recipe !== "function") {
var defaultBase = recipe;
recipe = base; // prettier-ignore
return function (base) {
if ( base === void 0 ) base = defaultBase;
var args = [], len = arguments.length - 1;
while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
return this$1.produce(base, function (draft) { return recipe.call.apply(recipe, [ draft, draft ].concat( args )); });
};
} // prettier-ignore
{
if (typeof recipe !== "function") {
throw new Error("The first or second argument to `produce` must be a function");
}
createClass(Immer, [{
key: "produce",
value: function produce(base, recipe, patchListener) {
var _this = this;
if (patchListener !== undefined && typeof patchListener !== "function") {
throw new Error("The third argument to `produce` must be a function or undefined");
}
}
var result; // Only plain objects, arrays, and "immerable classes" are drafted.
// curried invocation
if (typeof base === "function" && typeof recipe !== "function") {
var defaultBase = recipe;
recipe = base;
if (isDraftable(base)) {
var scope = ImmerScope.enter();
var proxy = this.createProxy(base);
var hasError = true;
// prettier-ignore
return function () {
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
try {
result = recipe.call(proxy, proxy);
hasError = false;
} finally {
// finally instead of catch + rethrow better preserves original stack
if (hasError) { scope.revoke(); }else { scope.leave(); }
}
var base = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultBase;
return _this.produce(base, function (draft) {
var _recipe;
if (result instanceof Promise) {
return result.then(function (result) {
scope.usePatches(patchListener);
return this$1.processResult(result, scope);
}, function (error) {
scope.revoke();
throw error;
});
}
return (_recipe = recipe).call.apply(_recipe, [draft, draft].concat(args));
});
};
}
scope.usePatches(patchListener);
return this.processResult(result, scope);
} else {
result = recipe(base);
if (result === undefined) { return base; }
return result !== NOTHING ? result : undefined;
}
};
// prettier-ignore
{
if (typeof recipe !== "function") throw new Error("if first argument is not a function, the second argument to produce should be a function");
if (patchListener !== undefined && typeof patchListener !== "function") throw new Error("the third argument of a producer should not be set or a function");
}
Immer.prototype.createDraft = function createDraft (base) {
if (!isDraftable(base)) {
throw new Error("First argument to `createDraft` must be a plain object, an array, or an immerable object"); // prettier-ignore
}
var result = void 0;
var scope = ImmerScope.enter();
var proxy = this.createProxy(base);
proxy[DRAFT_STATE].isManual = true;
scope.leave();
return proxy;
};
// Only plain objects, arrays, and "immerable classes" are drafted.
if (isDraftable(base)) {
var scope = ImmerScope.enter();
var proxy = this.createProxy(base);
var hasError = true;
try {
result = recipe.call(proxy, proxy);
hasError = false;
} finally {
// finally instead of catch + rethrow better preserves original stack
if (hasError) scope.revoke();else scope.leave();
}
if (result instanceof Promise) {
return result.then(function (result) {
scope.usePatches(patchListener);
return _this.processResult(result, scope);
}, function (error) {
scope.revoke();
throw error;
});
}
scope.usePatches(patchListener);
return this.processResult(result, scope);
} else {
result = recipe(base);
if (result === undefined) return base;
return result !== NOTHING ? result : undefined;
}
}
}, {
key: "createDraft",
value: function createDraft(base) {
if (!isDraftable(base)) throw new Error("First argument to createDraft should be a plain object, an array, or an immerable object."); // prettier-ignore
var scope = ImmerScope.enter();
var proxy = this.createProxy(base);
scope.leave();
proxy[DRAFT_STATE].customDraft = true;
return proxy;
}
}, {
key: "finishDraft",
value: function finishDraft(draft, patchListener) {
if (!isDraft(draft)) throw new Error("First argument to finishDraft should be an object from createDraft."); // prettier-ignore
var state = draft[DRAFT_STATE];
if (!state.customDraft) throw new Error("The draft provided was not created using `createDraft`"); // prettier-ignore
if (state.finalized) throw new Error("The draft provided was has already been finished"); // prettier-ignore
// TODO: check if created with createDraft
// TODO: check if not finsihed twice
var scope = state.scope;
Immer.prototype.finishDraft = function finishDraft (draft, patchListener) {
var state = draft && draft[DRAFT_STATE];
scope.usePatches(patchListener);
return this.processResult(undefined, scope);
}
}, {
key: "setAutoFreeze",
value: function setAutoFreeze(value) {
this.autoFreeze = value;
}
}, {
key: "setUseProxies",
value: function setUseProxies(value) {
this.useProxies = value;
assign(this, value ? modernProxy : legacyProxy);
}
}, {
key: "applyPatches",
value: function applyPatches$$1(base, patches) {
// Mutate the base state when a draft is passed.
if (isDraft(base)) {
return applyPatches(base, patches);
}
// Otherwise, produce a copy of the base state.
return this.produce(base, function (draft) {
return applyPatches(draft, patches);
});
}
/** @internal */
if (!state || !state.isManual) {
throw new Error("First argument to `finishDraft` must be a draft returned by `createDraft`"); // prettier-ignore
}
}, {
key: "processResult",
value: function processResult(result, scope) {
var baseDraft = scope.drafts[0];
var isReplaced = result !== undefined && result !== baseDraft;
this.willFinalize(scope, result, isReplaced);
if (isReplaced) {
if (baseDraft[DRAFT_STATE].modified) {
scope.revoke();
throw new Error("An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft."); // prettier-ignore
}
if (isDraftable(result)) {
// Finalize the result in case it contains (or is) a subset of the draft.
result = this.finalize(result, null, scope);
}
if (scope.patches) {
scope.patches.push({
op: "replace",
path: [],
value: result
});
scope.inversePatches.push({
op: "replace",
path: [],
value: baseDraft[DRAFT_STATE].base
});
}
} else {
// Finalize the base draft.
result = this.finalize(baseDraft, [], scope);
}
scope.revoke();
if (scope.patches) {
scope.patchListener(scope.patches, scope.inversePatches);
}
return result !== NOTHING ? result : undefined;
}
/**
* @internal
* Finalize a draft, returning either the unmodified base state or a modified
* copy of the base state.
*/
if (state.finalized) {
throw new Error("The given draft is already finalized"); // prettier-ignore
}
}, {
key: "finalize",
value: function finalize(draft, path, scope) {
var _this2 = this;
var scope = state.scope;
scope.usePatches(patchListener);
return this.processResult(undefined, scope);
};
var state = draft[DRAFT_STATE];
if (!state) {
if (Object.isFrozen(draft)) return draft;
return this.finalizeTree(draft, null, scope);
}
// Never finalize drafts owned by another scope.
if (state.scope !== scope) {
return draft;
}
if (!state.modified) {
return state.base;
}
if (!state.finalized) {
state.finalized = true;
this.finalizeTree(state.draft, path, scope);
Immer.prototype.setAutoFreeze = function setAutoFreeze (value) {
this.autoFreeze = value;
};
if (this.onDelete) {
// The `assigned` object is unreliable with ES5 drafts.
if (this.useProxies) {
var assigned = state.assigned;
Immer.prototype.setUseProxies = function setUseProxies (value) {
this.useProxies = value;
assign(this, value ? modernProxy : legacyProxy);
};
for (var prop in assigned) {
if (!assigned[prop]) this.onDelete(state, prop);
}
} else {
var base = state.base,
copy = state.copy;
Immer.prototype.applyPatches = function applyPatches$1 (base, patches) {
// Mutate the base state when a draft is passed.
if (isDraft(base)) {
return applyPatches(base, patches);
} // Otherwise, produce a copy of the base state.
each(base, function (prop) {
if (!has(copy, prop)) _this2.onDelete(state, prop);
});
}
}
if (this.onCopy) {
this.onCopy(state);
}
// At this point, all descendants of `state.copy` have been finalized,
// so we can be sure that `scope.canAutoFreeze` is accurate.
if (this.autoFreeze && scope.canAutoFreeze) {
Object.freeze(state.copy);
}
return this.produce(base, function (draft) { return applyPatches(draft, patches); });
};
/** @internal */
if (path && scope.patches) {
generatePatches(state, path, scope.patches, scope.inversePatches);
}
}
return state.copy;
Immer.prototype.processResult = function processResult (result, scope) {
var baseDraft = scope.drafts[0];
var isReplaced = result !== undefined && result !== baseDraft;
this.willFinalize(scope, result, isReplaced);
if (isReplaced) {
if (baseDraft[DRAFT_STATE].modified) {
scope.revoke();
throw new Error("An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft."); // prettier-ignore
}
if (isDraftable(result)) {
// Finalize the result in case it contains (or is) a subset of the draft.
result = this.finalize(result, null, scope);
}
if (scope.patches) {
scope.patches.push({
op: "replace",
path: [],
value: result
});
scope.inversePatches.push({
op: "replace",
path: [],
value: baseDraft[DRAFT_STATE].base
});
}
} else {
// Finalize the base draft.
result = this.finalize(baseDraft, [], scope);
}
scope.revoke();
if (scope.patches) {
scope.patchListener(scope.patches, scope.inversePatches);
}
return result !== NOTHING ? result : undefined;
};
/**
* @internal
* Finalize a draft, returning either the unmodified base state or a modified
* copy of the base state.
*/
Immer.prototype.finalize = function finalize (draft, path, scope) {
var this$1 = this;
var state = draft[DRAFT_STATE];
if (!state) {
if (Object.isFrozen(draft)) { return draft; }
return this.finalizeTree(draft, null, scope);
} // Never finalize drafts owned by another scope.
if (state.scope !== scope) {
return draft;
}
if (!state.modified) {
return state.base;
}
if (!state.finalized) {
state.finalized = true;
this.finalizeTree(state.draft, path, scope);
if (this.onDelete) {
// The `assigned` object is unreliable with ES5 drafts.
if (this.useProxies) {
var assigned = state.assigned;
for (var prop in assigned) {
if (!assigned[prop]) { this.onDelete(state, prop); }
}
/**
* @internal
* Finalize all drafts in the given state tree.
*/
} else {
var base = state.base;
var copy = state.copy;
each(base, function (prop) {
if (!has(copy, prop)) { this$1.onDelete(state, prop); }
});
}
}
}, {
key: "finalizeTree",
value: function finalizeTree(root, rootPath, scope) {
var _this3 = this;
if (this.onCopy) {
this.onCopy(state);
} // At this point, all descendants of `state.copy` have been finalized,
// so we can be sure that `scope.canAutoFreeze` is accurate.
var state = root[DRAFT_STATE];
if (state) {
if (!this.useProxies) {
state.finalizing = true;
state.copy = shallowCopy(state.draft, true);
state.finalizing = false;
}
root = state.copy;
}
var needPatches = !!rootPath && !!scope.patches;
var finalizeProperty = function finalizeProperty(prop, value, parent) {
if (value === parent) {
throw Error("Immer forbids circular references");
}
if (this.autoFreeze && scope.canAutoFreeze) {
Object.freeze(state.copy);
}
// In the `finalizeTree` method, only the `root` object may be a draft.
var isDraftProp = !!state && parent === root;
if (path && scope.patches) {
generatePatches(state, path, scope.patches, scope.inversePatches);
}
}
if (isDraft(value)) {
var path = isDraftProp && needPatches && !state.assigned[prop] ? rootPath.concat(prop) : null;
return state.copy;
};
/**
* @internal
* Finalize all drafts in the given state tree.
*/
// Drafts owned by `scope` are finalized here.
value = _this3.finalize(value, path, scope);
// Drafts from another scope must prevent auto-freezing.
if (isDraft(value)) {
scope.canAutoFreeze = false;
}
Immer.prototype.finalizeTree = function finalizeTree (root, rootPath, scope) {
var this$1 = this;
// Preserve non-enumerable properties.
if (Array.isArray(parent) || isEnumerable(parent, prop)) {
parent[prop] = value;
} else {
Object.defineProperty(parent, prop, { value: value });
}
var state = root[DRAFT_STATE];
// Unchanged drafts are never passed to the `onAssign` hook.
if (isDraftProp && value === state.base[prop]) return;
}
// Unchanged draft properties are ignored.
else if (isDraftProp && is(value, state.base[prop])) {
return;
}
// Search new objects for unfinalized drafts. Frozen objects should never contain drafts.
else if (isDraftable(value) && !Object.isFrozen(value)) {
each(value, finalizeProperty);
}
if (state) {
if (!this.useProxies) {
state.finalizing = true;
state.copy = shallowCopy(state.draft, true);
state.finalizing = false;
}
if (isDraftProp && _this3.onAssign) {
_this3.onAssign(state, prop, value);
}
};
root = state.copy;
}
each(root, finalizeProperty);
return root;
var needPatches = !!rootPath && !!scope.patches;
var finalizeProperty = function (prop, value, parent) {
if (value === parent) {
throw Error("Immer forbids circular references");
} // In the `finalizeTree` method, only the `root` object may be a draft.
var isDraftProp = !!state && parent === root;
if (isDraft(value)) {
var path = isDraftProp && needPatches && !state.assigned[prop] ? rootPath.concat(prop) : null; // Drafts owned by `scope` are finalized here.
value = this$1.finalize(value, path, scope); // Drafts from another scope must prevent auto-freezing.
if (isDraft(value)) {
scope.canAutoFreeze = false;
} // Preserve non-enumerable properties.
if (Array.isArray(parent) || isEnumerable(parent, prop)) {
parent[prop] = value;
} else {
Object.defineProperty(parent, prop, {
value: value
});
} // Unchanged drafts are never passed to the `onAssign` hook.
if (isDraftProp && value === state.base[prop]) { return; }
} // Unchanged draft properties are ignored.
else if (isDraftProp && is(value, state.base[prop])) {
return;
} // Search new objects for unfinalized drafts. Frozen objects should never contain drafts.
else if (isDraftable(value) && !Object.isFrozen(value)) {
each(value, finalizeProperty);
}
}]);
return Immer;
}();
if (isDraftProp && this$1.onAssign) {
this$1.onAssign(state, prop, value);
}
};
each(root, finalizeProperty);
return root;
};
var immer = new Immer();
/**

@@ -1070,2 +1029,3 @@ * The `produce` function takes a value and a "recipe function" (whose

*/
var produce = immer.produce;

@@ -1077,4 +1037,4 @@ /**

*/
var setAutoFreeze = immer.setAutoFreeze.bind(immer);
/**

@@ -1086,4 +1046,4 @@ * Pass true to use the ES2015 `Proxy` class when creating drafts, which is

*/
var setUseProxies = immer.setUseProxies.bind(immer);
/**

@@ -1094,4 +1054,4 @@ * Apply an array of Immer patches to the first argument.

*/
var applyPatches$1 = immer.applyPatches.bind(immer);
/**

@@ -1101,4 +1061,4 @@ * Create an Immer draft from the given base state, which may be a draft itself.

*/
var createDraft = immer.createDraft.bind(immer);
/**

@@ -1112,6 +1072,7 @@ * Finalize an Immer draft from a `createDraft` call, returning the base state

*/
var finishDraft = immer.finishDraft.bind(immer);
exports.produce = produce;
exports['default'] = produce;
exports.default = produce;
exports.setAutoFreeze = setAutoFreeze;

@@ -1118,0 +1079,0 @@ exports.setUseProxies = setUseProxies;

@@ -1,2 +0,2 @@

var e,r;e=this,r=function(e){"use strict";var r,t,n,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=function(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")},a=function(){function e(e,r){for(var t=0;t<r.length;t++){var n=r[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(r,t,n){return t&&e(r.prototype,t),n&&e(r,n),r}}(),f="undefined"!=typeof Symbol?Symbol("immer-nothing"):(n=!0,(t="immer-nothing")in(r={})?Object.defineProperty(r,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):r[t]=n,r),s="undefined"!=typeof Symbol?Symbol.for("immer-draftable"):"__$immer_draftable",u="undefined"!=typeof Symbol?Symbol.for("immer-state"):"__$immer_state";function c(e){return!!e&&!!e[u]}function l(e){if(!e||"object"!==(void 0===e?"undefined":o(e)))return!1;if(Array.isArray(e))return!0;var r=Object.getPrototypeOf(e);return!r||r===Object.prototype||(!!e[s]||!!e.constructor[s])}var p=Object.assign||function(e,r){for(var t in r)b(r,t)&&(e[t]=r[t]);return e},d="undefined"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames;function h(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Array.isArray(e))return e.slice();var t=Object.create(Object.getPrototypeOf(e));return d(e).forEach(function(n){if(n!==u){var o=Object.getOwnPropertyDescriptor(e,n);if(o.get){if(!r)throw new Error("Immer drafts cannot have computed properties");o.value=o.get.call(e)}o.enumerable?t[n]=o.value:Object.defineProperty(t,n,{value:o.value,writable:!0,configurable:!0})}}),t}function y(e,r){if(Array.isArray(e))for(var t=0;t<e.length;t++)r(t,e[t],e);else d(e).forEach(function(t){return r(t,e[t],e)})}function v(e,r){return Object.getOwnPropertyDescriptor(e,r).enumerable}function b(e,r){return Object.prototype.hasOwnProperty.call(e,r)}function m(e,r){return e===r?0!==e||1/e==1/r:e!=e&&r!=r}var g=function(){function e(r){i(this,e),this.drafts=[],this.parent=r,this.canAutoFreeze=!0,this.patches=null}return a(e,[{key:"usePatches",value:function(e){e&&(this.patches=[],this.inversePatches=[],this.patchListener=e)}},{key:"revoke",value:function(){this.leave(),this.drafts.forEach(w),this.drafts=null}},{key:"leave",value:function(){this===e.current&&(e.current=this.parent)}}]),e}();function w(e){e[u].revoke()}g.current=null,g.enter=function(){return this.current=new g(this.current)};var P={};function O(e,r){var t=Array.isArray(e),n=E(e);y(n,function(r){!function(e,r,t){var n=P[r];n?n.enumerable=t:P[r]=n={configurable:!0,enumerable:t,get:function(){return function(e,r){D(e);var t=z(e)[r];if(!e.finalizing&&t===e.base[r]&&l(t))return k(e),e.copy[r]=O(t,e);return t}(this[u],r)},set:function(e){!function(e,r,t){if(D(e),e.assigned[r]=!0,!e.modified){if(m(z(e)[r],t))return;A(e),k(e)}e.copy[r]=t}(this[u],r,e)}};Object.defineProperty(e,r,n)}(n,r,t||v(e,r))});var o,i,a,f=r?r.scope:g.current;return o=n,i=u,a={scope:f,modified:!1,finalizing:!1,finalized:!1,assigned:{},parent:r,base:e,draft:n,copy:null,revoke:j,revoked:!1},Object.defineProperty(o,i,{value:a,enumerable:!1,writable:!0}),f.drafts.push(n),n}function j(){this.revoked=!0}function z(e){return e.copy||e.base}function A(e){e.modified||(e.modified=!0,e.parent&&A(e.parent))}function k(e){e.copy||(e.copy=E(e.base))}function E(e){var r=e&&e[u];if(r){r.finalizing=!0;var t=h(r.draft,!0);return r.finalizing=!1,t}return h(e)}function D(e){if(!0===e.revoked)throw new Error("Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? "+JSON.stringify(z(e)))}function x(e){for(var r=e.length-1;r>=0;r--){var t=e[r][u];t.modified||(Array.isArray(t.base)?S(t)&&A(t):F(t)&&A(t))}}function F(e){for(var r=e.base,t=e.draft,n=Object.keys(t),o=n.length-1;o>=0;o--)if(void 0===r[n[o]]&&!b(r,n[o]))return!0;return n.length!==Object.keys(r).length}function S(e){var r=e.draft;if(r.length!==e.base.length)return!0;var t=Object.getOwnPropertyDescriptor(r,r.length-1);return!(!t||t.get)}var R=Object.freeze({willFinalize:function(e,r,t){e.drafts.forEach(function(e){e[u].finalizing=!0}),t?c(r)&&r[u].scope===e&&x(e.drafts):(e.patches&&function e(r){if(r&&"object"===(void 0===r?"undefined":o(r))){var t=r[u];if(t){var n=t.base,i=t.draft,a=t.assigned;if(Array.isArray(r)){if(S(t)){if(A(t),a.length=!0,i.length<n.length)for(var f=i.length;f<n.length;f++)a[f]=!1;else for(var s=n.length;s<i.length;s++)a[s]=!0;for(var c=0;c<i.length;c++)void 0===a[c]&&e(i[c])}}else Object.keys(i).forEach(function(r){void 0!==n[r]||b(n,r)?a[r]||e(i[r]):(a[r]=!0,A(t))}),Object.keys(n).forEach(function(e){void 0!==i[e]||b(i,e)||(a[e]=!1,A(t))})}}}(e.drafts[0]),x(e.drafts))},createProxy:O});function I(e,r){var t=r?r.scope:g.current,n={scope:t,modified:!1,finalized:!1,assigned:{},parent:r,base:e,draft:null,drafts:{},copy:null,revoke:null},o=Array.isArray(e)?Proxy.revocable([n],_):Proxy.revocable(n,N),i=o.revoke,a=o.proxy;return n.draft=a,n.revoke=i,t.drafts.push(a),a}var N={get:function(e,r){if(r===u)return e;var t=e.drafts;if(!e.modified&&b(t,r))return t[r];var n=C(e)[r];if(e.finalized||!l(n))return n;if(e.modified){if(n!==e.base[r])return n;t=e.copy}return t[r]=I(n,e)},has:function(e,r){return r in C(e)},ownKeys:function(e){return Reflect.ownKeys(C(e))},set:function(e,r,t){if(!e.modified){var n=t?m(e.base[r],t)||t===e.drafts[r]:m(e.base[r],t)&&r in e.base;if(n)return!0;T(e)}return e.assigned[r]=!0,e.copy[r]=t,!0},deleteProperty:function(e,r){(void 0!==e.base[r]||r in e.base)&&(e.assigned[r]=!1,T(e));e.copy&&delete e.copy[r];return!0},getOwnPropertyDescriptor:function(e,r){var t=C(e),n=Reflect.getOwnPropertyDescriptor(t,r);n&&(n.writable=!0,n.configurable=!Array.isArray(t)||"length"!==r);return n},defineProperty:function(){throw new Error("Object.defineProperty() cannot be used on an Immer draft")},getPrototypeOf:function(e){return Object.getPrototypeOf(e.base)},setPrototypeOf:function(){throw new Error("Object.setPrototypeOf() cannot be used on an Immer draft")}},_={};function C(e){return e.copy||e.base}function T(e){e.modified||(e.modified=!0,e.copy=p(h(e.base),e.drafts),e.drafts=null,e.parent&&T(e.parent))}y(N,function(e,r){_[e]=function(){return arguments[0]=arguments[0][0],r.apply(this,arguments)}}),_.deleteProperty=function(e,r){if(isNaN(parseInt(r)))throw new Error("Immer only supports deleting array indices");return N.deleteProperty.call(this,e[0],r)},_.set=function(e,r,t){if("length"!==r&&isNaN(parseInt(r)))throw new Error("Immer only supports setting array indices and the 'length' property");return N.set.call(this,e[0],r,t)};var U=Object.freeze({willFinalize:function(){},createProxy:I});function K(e,r,t,n){Array.isArray(e.base)?function(e,r,t,n){var o=e.base,i=e.copy,a=e.assigned;if(i.length<o.length){var f=[i,o];o=f[0],i=f[1];var s=[n,t];t=s[0],n=s[1]}var u=i.length-o.length,c=0;for(;o[c]===i[c]&&c<o.length;)++c;var l=o.length;for(;l>c&&o[l-1]===i[l+u-1];)--l;for(var p=c;p<l;++p)if(a[p]&&i[p]!==o[p]){var d=r.concat([p]);t.push({op:"replace",path:d,value:i[p]}),n.push({op:"replace",path:d,value:o[p]})}for(var h=l!=o.length,y=t.length,v=l+u-1;v>=l;--v){var b=r.concat([v]);t[y+v-l]={op:"add",path:b,value:i[v]},h&&n.push({op:"remove",path:b})}h||n.push({op:"replace",path:r.concat(["length"]),value:o.length})}(e,r,t,n):function(e,r,t,n){var o=e.base,i=e.copy;y(e.assigned,function(e,a){var f=o[e],s=i[e],u=a?e in o?"replace":"add":"remove";if(f!==s||"replace"!==u){var c=r.concat(e);t.push("remove"===u?{op:u,path:c}:{op:u,path:c,value:s}),n.push("add"===u?{op:"remove",path:c}:"remove"===u?{op:"add",path:c,value:f}:{op:"replace",path:c,value:f})}})}(e,r,t,n)}function L(e,r){for(var t=0;t<r.length;t++){var n=r[t],i=n.path;if(0===i.length&&"replace"===n.op)e=n.value;else{for(var a=e,f=0;f<i.length-1;f++)if(!(a=a[i[f]])||"object"!==(void 0===a?"undefined":o(a)))throw new Error("Cannot apply patch, path doesn't resolve: "+i.join("/"));var s=i[i.length-1];switch(n.op){case"replace":a[s]=n.value;break;case"add":Array.isArray(a)?a.splice(s,0,n.value):a[s]=n.value;break;case"remove":Array.isArray(a)?a.splice(s,1):delete a[s];break;default:throw new Error("Unsupported patch operation: "+n.op)}}}return e}var M={useProxies:"undefined"!=typeof Proxy&&"undefined"!=typeof Reflect,autoFreeze:"undefined"!=typeof process?"production"!==process.env.NODE_ENV:"verifyMinified"===function(){}.name,onAssign:null,onDelete:null,onCopy:null},$=function(){function e(r){i(this,e),p(this,M,r),this.setUseProxies(this.useProxies),this.produce=this.produce.bind(this)}return a(e,[{key:"produce",value:function(e,r,t){var n=this;if("function"==typeof e&&"function"!=typeof r){var o=r;return r=e,function(){for(var e=arguments.length,t=Array(e>1?e-1:0),i=1;i<e;i++)t[i-1]=arguments[i];var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o;return n.produce(a,function(e){var n;return(n=r).call.apply(n,[e,e].concat(t))})}}if("function"!=typeof r)throw new Error("if first argument is not a function, the second argument to produce should be a function");if(void 0!==t&&"function"!=typeof t)throw new Error("the third argument of a producer should not be set or a function");var i=void 0;if(l(e)){var a=g.enter(),s=this.createProxy(e),u=!0;try{i=r.call(s,s),u=!1}finally{u?a.revoke():a.leave()}return i instanceof Promise?i.then(function(e){return a.usePatches(t),n.processResult(e,a)},function(e){throw a.revoke(),e}):(a.usePatches(t),this.processResult(i,a))}return void 0===(i=r(e))?e:i!==f?i:void 0}},{key:"createDraft",value:function(e){if(!l(e))throw new Error("First argument to createDraft should be a plain object, an array, or an immerable object.");var r=g.enter(),t=this.createProxy(e);return r.leave(),t[u].customDraft=!0,t}},{key:"finishDraft",value:function(e,r){if(!c(e))throw new Error("First argument to finishDraft should be an object from createDraft.");var t=e[u];if(!t.customDraft)throw new Error("The draft provided was not created using `createDraft`");if(t.finalized)throw new Error("The draft provided was has already been finished");var n=t.scope;return n.usePatches(r),this.processResult(void 0,n)}},{key:"setAutoFreeze",value:function(e){this.autoFreeze=e}},{key:"setUseProxies",value:function(e){this.useProxies=e,p(this,e?U:R)}},{key:"applyPatches",value:function(e,r){return c(e)?L(e,r):this.produce(e,function(e){return L(e,r)})}},{key:"processResult",value:function(e,r){var t=r.drafts[0],n=void 0!==e&&e!==t;if(this.willFinalize(r,e,n),n){if(t[u].modified)throw r.revoke(),new Error("An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.");l(e)&&(e=this.finalize(e,null,r)),r.patches&&(r.patches.push({op:"replace",path:[],value:e}),r.inversePatches.push({op:"replace",path:[],value:t[u].base}))}else e=this.finalize(t,[],r);return r.revoke(),r.patches&&r.patchListener(r.patches,r.inversePatches),e!==f?e:void 0}},{key:"finalize",value:function(e,r,t){var n=this,o=e[u];if(!o)return Object.isFrozen(e)?e:this.finalizeTree(e,null,t);if(o.scope!==t)return e;if(!o.modified)return o.base;if(!o.finalized){if(o.finalized=!0,this.finalizeTree(o.draft,r,t),this.onDelete)if(this.useProxies){var i=o.assigned;for(var a in i)i[a]||this.onDelete(o,a)}else{var f=o.base,s=o.copy;y(f,function(e){b(s,e)||n.onDelete(o,e)})}this.onCopy&&this.onCopy(o),this.autoFreeze&&t.canAutoFreeze&&Object.freeze(o.copy),r&&t.patches&&K(o,r,t.patches,t.inversePatches)}return o.copy}},{key:"finalizeTree",value:function(e,r,t){var n=this,o=e[u];o&&(this.useProxies||(o.finalizing=!0,o.copy=h(o.draft,!0),o.finalizing=!1),e=o.copy);var i=!!r&&!!t.patches;return y(e,function a(f,s,u){if(s===u)throw Error("Immer forbids circular references");var p=!!o&&u===e;if(c(s)){var d=p&&i&&!o.assigned[f]?r.concat(f):null;if(c(s=n.finalize(s,d,t))&&(t.canAutoFreeze=!1),Array.isArray(u)||v(u,f)?u[f]=s:Object.defineProperty(u,f,{value:s}),p&&s===o.base[f])return}else{if(p&&m(s,o.base[f]))return;l(s)&&!Object.isFrozen(s)&&y(s,a)}p&&n.onAssign&&n.onAssign(o,f,s)}),e}}]),e}(),J=new $,V=J.produce,q=J.setAutoFreeze.bind(J),B=J.setUseProxies.bind(J),G=J.applyPatches.bind(J),H=J.createDraft.bind(J),Q=J.finishDraft.bind(J);e.produce=V,e.default=V,e.setAutoFreeze=q,e.setUseProxies=B,e.applyPatches=G,e.createDraft=H,e.finishDraft=Q,e.Immer=$,e.original=function(e){if(e&&e[u])return e[u].base},e.isDraft=c,e.isDraftable=l,e.nothing=f,e.immerable=s,Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r(e.immer={});
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((e=e||self).immer={})}(this,function(e){"use strict";var r,t="undefined"!=typeof Symbol?Symbol("immer-nothing"):((r={})["immer-nothing"]=!0,r),n="undefined"!=typeof Symbol?Symbol.for("immer-draftable"):"__$immer_draftable",o="undefined"!=typeof Symbol?Symbol.for("immer-state"):"__$immer_state";function i(e){return!!e&&!!e[o]}function a(e){if(!e||"object"!=typeof e)return!1;if(Array.isArray(e))return!0;var r=Object.getPrototypeOf(e);return!r||r===Object.prototype||(!!e[n]||!!e.constructor[n])}var s=Object.assign||function(e,r){for(var t in r)l(r,t)&&(e[t]=r[t]);return e},f="undefined"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames;function c(e,r){if(void 0===r&&(r=!1),Array.isArray(e))return e.slice();var t=Object.create(Object.getPrototypeOf(e));return f(e).forEach(function(n){if(n!==o){var i=Object.getOwnPropertyDescriptor(e,n);if(i.get){if(!r)throw new Error("Immer drafts cannot have computed properties");i.value=i.get.call(e)}i.enumerable?t[n]=i.value:Object.defineProperty(t,n,{value:i.value,writable:!0,configurable:!0})}}),t}function u(e,r){if(Array.isArray(e))for(var t=0;t<e.length;t++)r(t,e[t],e);else f(e).forEach(function(t){return r(t,e[t],e)})}function p(e,r){return Object.getOwnPropertyDescriptor(e,r).enumerable}function l(e,r){return Object.prototype.hasOwnProperty.call(e,r)}function d(e,r){return e===r?0!==e||1/e==1/r:e!=e&&r!=r}var h=function(e){this.drafts=[],this.parent=e,this.canAutoFreeze=!0,this.patches=null};function y(e){e[o].revoke()}h.prototype.usePatches=function(e){e&&(this.patches=[],this.inversePatches=[],this.patchListener=e)},h.prototype.revoke=function(){this.leave(),this.drafts.forEach(y),this.drafts=null},h.prototype.leave=function(){this===h.current&&(h.current=this.parent)},h.current=null,h.enter=function(){return this.current=new h(this.current)};var v={};function b(e,r){var t=Array.isArray(e),n=O(e);u(n,function(r){!function(e,r,t){var n=v[r];n?n.enumerable=t:v[r]=n={configurable:!0,enumerable:t,get:function(){return function(e,r){j(e);var t=m(e)[r];if(!e.finalizing&&t===e.base[r]&&a(t))return P(e),e.copy[r]=b(t,e);return t}(this[o],r)},set:function(e){!function(e,r,t){if(j(e),e.assigned[r]=!0,!e.modified){if(d(m(e)[r],t))return;w(e),P(e)}e.copy[r]=t}(this[o],r,e)}};Object.defineProperty(e,r,n)}(n,r,t||p(e,r))});var i,s,f,c=r?r.scope:h.current;return i=n,s=o,f={scope:c,modified:!1,finalizing:!1,finalized:!1,assigned:{},parent:r,base:e,draft:n,copy:null,revoke:g,revoked:!1},Object.defineProperty(i,s,{value:f,enumerable:!1,writable:!0}),c.drafts.push(n),n}function g(){this.revoked=!0}function m(e){return e.copy||e.base}function w(e){e.modified||(e.modified=!0,e.parent&&w(e.parent))}function P(e){e.copy||(e.copy=O(e.base))}function O(e){var r=e&&e[o];if(r){r.finalizing=!0;var t=c(r.draft,!0);return r.finalizing=!1,t}return c(e)}function j(e){if(!0===e.revoked)throw new Error("Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? "+JSON.stringify(m(e)))}function z(e){for(var r=e.length-1;r>=0;r--){var t=e[r][o];t.modified||(Array.isArray(t.base)?E(t)&&w(t):A(t)&&w(t))}}function A(e){for(var r=e.base,t=e.draft,n=Object.keys(t),i=n.length-1;i>=0;i--){var a=n[i],s=r[a];if(void 0===s&&!l(r,a))return!0;var f=t[a],c=f&&f[o];if(c?c.base!==s:!d(f,s))return!0}return n.length!==Object.keys(r).length}function E(e){var r=e.draft;if(r.length!==e.base.length)return!0;var t=Object.getOwnPropertyDescriptor(r,r.length-1);return!(!t||t.get)}var D=Object.freeze({willFinalize:function(e,r,t){e.drafts.forEach(function(e){e[o].finalizing=!0}),t?i(r)&&r[o].scope===e&&z(e.drafts):(e.patches&&function e(r){if(r&&"object"==typeof r){var t=r[o];if(t){var n=t.base,i=t.draft,a=t.assigned;if(Array.isArray(r)){if(E(t)){if(w(t),a.length=!0,i.length<n.length)for(var s=i.length;s<n.length;s++)a[s]=!1;else for(var f=n.length;f<i.length;f++)a[f]=!0;for(var c=0;c<i.length;c++)void 0===a[c]&&e(i[c])}}else Object.keys(i).forEach(function(r){void 0!==n[r]||l(n,r)?a[r]||e(i[r]):(a[r]=!0,w(t))}),Object.keys(n).forEach(function(e){void 0!==i[e]||l(i,e)||(a[e]=!1,w(t))})}}}(e.drafts[0]),z(e.drafts))},createProxy:b});function k(e,r){var t=r?r.scope:h.current,n={scope:t,modified:!1,finalized:!1,assigned:{},parent:r,base:e,draft:null,drafts:{},copy:null,revoke:null},o=Array.isArray(e)?Proxy.revocable([n],F):Proxy.revocable(n,x),i=o.revoke,a=o.proxy;return n.draft=a,n.revoke=i,t.drafts.push(a),a}var x={get:function(e,r){if(r===o)return e;var t=e.drafts;if(!e.modified&&l(t,r))return t[r];var n=R(e)[r];if(e.finalized||!a(n))return n;if(e.modified){if(n!==e.base[r])return n;t=e.copy}return t[r]=k(n,e)},has:function(e,r){return r in R(e)},ownKeys:function(e){return Reflect.ownKeys(R(e))},set:function(e,r,t){if(!e.modified){var n=t?d(e.base[r],t)||t===e.drafts[r]:d(e.base[r],t)&&r in e.base;if(n)return!0;I(e)}return e.assigned[r]=!0,e.copy[r]=t,!0},deleteProperty:function(e,r){(void 0!==e.base[r]||r in e.base)&&(e.assigned[r]=!1,I(e));e.copy&&delete e.copy[r];return!0},getOwnPropertyDescriptor:function(e,r){var t=R(e),n=Reflect.getOwnPropertyDescriptor(t,r);n&&(n.writable=!0,n.configurable=!Array.isArray(t)||"length"!==r);return n},defineProperty:function(){throw new Error("Object.defineProperty() cannot be used on an Immer draft")},getPrototypeOf:function(e){return Object.getPrototypeOf(e.base)},setPrototypeOf:function(){throw new Error("Object.setPrototypeOf() cannot be used on an Immer draft")}},F={};function R(e){return e.copy||e.base}function I(e){e.modified||(e.modified=!0,e.copy=s(c(e.base),e.drafts),e.drafts=null,e.parent&&I(e.parent))}u(x,function(e,r){F[e]=function(){return arguments[0]=arguments[0][0],r.apply(this,arguments)}}),F.deleteProperty=function(e,r){if(isNaN(parseInt(r)))throw new Error("Immer only supports deleting array indices");return x.deleteProperty.call(this,e[0],r)},F.set=function(e,r,t){if("length"!==r&&isNaN(parseInt(r)))throw new Error("Immer only supports setting array indices and the 'length' property");return x.set.call(this,e[0],r,t)};var N=Object.freeze({willFinalize:function(){},createProxy:k});function S(e,r,t,n){Array.isArray(e.base)?function(e,r,t,n){var o,i,a=e.base,s=e.copy,f=e.assigned;s.length<a.length&&(a=(o=[s,a])[0],s=o[1],t=(i=[n,t])[0],n=i[1]);var c=s.length-a.length,u=0;for(;a[u]===s[u]&&u<a.length;)++u;var p=a.length;for(;p>u&&a[p-1]===s[p+c-1];)--p;for(var l=u;l<p;++l)if(f[l]&&s[l]!==a[l]){var d=r.concat([l]);t.push({op:"replace",path:d,value:s[l]}),n.push({op:"replace",path:d,value:a[l]})}for(var h=p!=a.length,y=t.length,v=p+c-1;v>=p;--v){var b=r.concat([v]);t[y+v-p]={op:"add",path:b,value:s[v]},h&&n.push({op:"remove",path:b})}h||n.push({op:"replace",path:r.concat(["length"]),value:a.length})}(e,r,t,n):function(e,r,t,n){var o=e.base,i=e.copy;u(e.assigned,function(e,a){var s=o[e],f=i[e],c=a?e in o?"replace":"add":"remove";if(s!==f||"replace"!==c){var u=r.concat(e);t.push("remove"===c?{op:c,path:u}:{op:c,path:u,value:f}),n.push("add"===c?{op:"remove",path:u}:"remove"===c?{op:"add",path:u,value:s}:{op:"replace",path:u,value:s})}})}(e,r,t,n)}function _(e,r){for(var t=0;t<r.length;t++){var n=r[t],o=n.path;if(0===o.length&&"replace"===n.op)e=n.value;else{for(var i=e,a=0;a<o.length-1;a++)if(!(i=i[o[a]])||"object"!=typeof i)throw new Error("Cannot apply patch, path doesn't resolve: "+o.join("/"));var s=o[o.length-1];switch(n.op){case"replace":i[s]=n.value;break;case"add":Array.isArray(i)?i.splice(s,0,n.value):i[s]=n.value;break;case"remove":Array.isArray(i)?i.splice(s,1):delete i[s];break;default:throw new Error("Unsupported patch operation: "+n.op)}}}return e}var T={useProxies:"undefined"!=typeof Proxy&&"undefined"!=typeof Reflect,autoFreeze:"undefined"!=typeof process?"production"!==process.env.NODE_ENV:"verifyMinified"===function(){}.name,onAssign:null,onDelete:null,onCopy:null},C=function(e){s(this,T,e),this.setUseProxies(this.useProxies),this.produce=this.produce.bind(this)};C.prototype.produce=function(e,r,n){var o,i=this;if("function"==typeof e&&"function"!=typeof r){var s=r;return r=e,function(e){void 0===e&&(e=s);for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];return i.produce(e,function(e){return r.call.apply(r,[e,e].concat(t))})}}if("function"!=typeof r)throw new Error("The first or second argument to `produce` must be a function");if(void 0!==n&&"function"!=typeof n)throw new Error("The third argument to `produce` must be a function or undefined");if(a(e)){var f=h.enter(),c=this.createProxy(e),u=!0;try{o=r.call(c,c),u=!1}finally{u?f.revoke():f.leave()}return o instanceof Promise?o.then(function(e){return f.usePatches(n),i.processResult(e,f)},function(e){throw f.revoke(),e}):(f.usePatches(n),this.processResult(o,f))}return void 0===(o=r(e))?e:o!==t?o:void 0},C.prototype.createDraft=function(e){if(!a(e))throw new Error("First argument to `createDraft` must be a plain object, an array, or an immerable object");var r=h.enter(),t=this.createProxy(e);return t[o].isManual=!0,r.leave(),t},C.prototype.finishDraft=function(e,r){var t=e&&e[o];if(!t||!t.isManual)throw new Error("First argument to `finishDraft` must be a draft returned by `createDraft`");if(t.finalized)throw new Error("The given draft is already finalized");var n=t.scope;return n.usePatches(r),this.processResult(void 0,n)},C.prototype.setAutoFreeze=function(e){this.autoFreeze=e},C.prototype.setUseProxies=function(e){this.useProxies=e,s(this,e?N:D)},C.prototype.applyPatches=function(e,r){return i(e)?_(e,r):this.produce(e,function(e){return _(e,r)})},C.prototype.processResult=function(e,r){var n=r.drafts[0],i=void 0!==e&&e!==n;if(this.willFinalize(r,e,i),i){if(n[o].modified)throw r.revoke(),new Error("An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.");a(e)&&(e=this.finalize(e,null,r)),r.patches&&(r.patches.push({op:"replace",path:[],value:e}),r.inversePatches.push({op:"replace",path:[],value:n[o].base}))}else e=this.finalize(n,[],r);return r.revoke(),r.patches&&r.patchListener(r.patches,r.inversePatches),e!==t?e:void 0},C.prototype.finalize=function(e,r,t){var n=this,i=e[o];if(!i)return Object.isFrozen(e)?e:this.finalizeTree(e,null,t);if(i.scope!==t)return e;if(!i.modified)return i.base;if(!i.finalized){if(i.finalized=!0,this.finalizeTree(i.draft,r,t),this.onDelete)if(this.useProxies){var a=i.assigned;for(var s in a)a[s]||this.onDelete(i,s)}else{var f=i.base,c=i.copy;u(f,function(e){l(c,e)||n.onDelete(i,e)})}this.onCopy&&this.onCopy(i),this.autoFreeze&&t.canAutoFreeze&&Object.freeze(i.copy),r&&t.patches&&S(i,r,t.patches,t.inversePatches)}return i.copy},C.prototype.finalizeTree=function(e,r,t){var n=this,s=e[o];s&&(this.useProxies||(s.finalizing=!0,s.copy=c(s.draft,!0),s.finalizing=!1),e=s.copy);var f=!!r&&!!t.patches,l=function(o,c,h){if(c===h)throw Error("Immer forbids circular references");var y=!!s&&h===e;if(i(c)){var v=y&&f&&!s.assigned[o]?r.concat(o):null;if(i(c=n.finalize(c,v,t))&&(t.canAutoFreeze=!1),Array.isArray(h)||p(h,o)?h[o]=c:Object.defineProperty(h,o,{value:c}),y&&c===s.base[o])return}else{if(y&&d(c,s.base[o]))return;a(c)&&!Object.isFrozen(c)&&u(c,l)}y&&n.onAssign&&n.onAssign(s,o,c)};return u(e,l),e};var U=new C,K=U.produce,M=U.setAutoFreeze.bind(U),L=U.setUseProxies.bind(U),$=U.applyPatches.bind(U),J=U.createDraft.bind(U),V=U.finishDraft.bind(U);e.produce=K,e.default=K,e.setAutoFreeze=M,e.setUseProxies=L,e.applyPatches=$,e.createDraft=J,e.finishDraft=V,e.Immer=C,e.original=function(e){if(e&&e[o])return e[o].base},e.isDraft=i,e.isDraftable=a,e.nothing=t,e.immerable=n,Object.defineProperty(e,"__esModule",{value:!0})});
//# sourceMappingURL=immer.umd.js.map
{
"name": "immer",
"version": "2.1.1",
"version": "2.1.2",
"description": "Create your next immutable state by mutating the current one",
"main": "dist/immer.js",
"umd:main": "dist/immer.umd.js",
"module": "dist/immer.module.js",
"jsnext:main": "dist/immer.module.js",
"react-native": "dist/immer.module.js",
"module": "dist/immer.mjs",
"jsnext:main": "dist/immer.mjs",
"react-native": "dist/immer.mjs",
"types": "./dist/immer.d.ts",

@@ -18,4 +18,3 @@ "scripts": {

"coveralls": "jest --coverage && cat ./coverage/lcov.info | ./node_modules/.bin/coveralls && rm -rf ./coverage",
"build": "rimraf dist/ && yarn-or-npm rollup && yarn-or-npm typed",
"rollup": "cross-env NODE_ENV=production rollup -c",
"build": "rimraf dist/ && yarn-or-npm bili && yarn-or-npm typed",
"typed": "cpx 'src/immer.{d.ts,js.flow}' dist -v"

@@ -47,10 +46,11 @@ },

"devDependencies": {
"@types/jest": "^22.2.3",
"babel-cli": "^6.26.0",
"babel-core": "^6.26.0",
"babel-jest": "^22.0.4",
"babel-plugin-external-helpers": "^6.22.0",
"babel-preset-env": "^1.6.1",
"babel-preset-es2015": "^6.24.1",
"babel-preset-modern-browsers": "^10.0.1",
"@babel/cli": "^7.2.3",
"@babel/core": "^7.3.4",
"@babel/node": "^7.2.2",
"@babel/plugin-external-helpers": "^7.2.0",
"@babel/preset-env": "^7.3.4",
"@types/jest": "^24.0.11",
"babel-jest": "^24.4.0",
"babel-preset-modern-browsers": "^13.1.0",
"bili": "^4.2.5",
"coveralls": "^3.0.0",

@@ -63,3 +63,3 @@ "cpx": "^1.5.0",

"immutable": "^3.8.2",
"jest": "^22.0.4",
"jest": "^24.4.0",
"lodash": "^4.17.4",

@@ -71,14 +71,10 @@ "lodash.clonedeep": "^4.5.0",

"rimraf": "^2.6.2",
"rollup": "^0.54.0",
"rollup-plugin-babel": "^3.0.3",
"rollup-plugin-commonjs": "^8.2.6",
"rollup-plugin-filesize": "^1.5.0",
"rollup-plugin-node-resolve": "^3.0.2",
"rollup-plugin-uglify": "^2.0.1",
"seamless-immutable": "^7.1.3",
"typescript": "3.1.1",
"uglify-es": "^3.3.6",
"yarn-or-npm": "^2.0.4"
},
"jest": {
"moduleFileExtensions": [
"js"
],
"testURL": "http://localhost",

@@ -85,0 +81,0 @@ "transform": {

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc