UNPKG

immer

Version:

Create your next immutable state by mutating the current one

3 lines (2 loc) 19 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).immer={})}(this,function(e){"use strict";var t,r,n,o="undefined"!=typeof Symbol,a="undefined"!=typeof Map,i="undefined"!=typeof Set,c=o?Symbol("immer-nothing"):((t={})["immer-nothing"]=!0,t),s=o?Symbol("immer-draftable"):"__$immer_draftable",u=o?Symbol("immer-state"):"__$immer_state",f=o?Symbol.iterator:"@@iterator",p=function(e,t){return(p=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)};function d(e,t){function r(){this.constructor=e}p(e,t),e.prototype=(r.prototype=t.prototype,new r)}function h(e){return!!e&&!!e[u]}function l(e){return!!e&&(function(e){if(!e||"object"!=typeof e)return!1;var t=Object.getPrototypeOf(e);return!t||t===Object.prototype}(e)||Array.isArray(e)||!!e[s]||!!e.constructor[s]||w(e)||O(e))}!function(e){e[e.Object=0]="Object",e[e.Array=1]="Array",e[e.Map=2]="Map",e[e.Set=3]="Set"}(r||(r={})),function(e){e[e.ProxyObject=0]="ProxyObject",e[e.ProxyArray=1]="ProxyArray",e[e.ES5Object=2]="ES5Object",e[e.ES5Array=3]="ES5Array",e[e.Map=4]="Map",e[e.Set=5]="Set"}(n||(n={}));var y="undefined"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames;function v(e,t){b(e)===r.Object?y(e).forEach(function(r){return t(r,e[r],e)}):e.forEach(function(r,n){return t(n,r,e)})}function b(e){if(e||S(),e[u])switch(e[u].type){case n.ES5Object:case n.ProxyObject:return r.Object;case n.ES5Array:case n.ProxyArray:return r.Array;case n.Map:return r.Map;case n.Set:return r.Set}return Array.isArray(e)?r.Array:w(e)?r.Map:O(e)?r.Set:r.Object}function m(e,t){return b(e)===r.Map?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function g(e,t){return b(e)===r.Map?e.get(t):e[t]}function P(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}function w(e){return a&&e instanceof Map}function O(e){return i&&e instanceof Set}function j(e){return e.copy||e.base}function E(e,t){if(void 0===t&&(t=!1),Array.isArray(e))return e.slice();var r=Object.create(Object.getPrototypeOf(e));return y(e).forEach(function(n){if(n!==u){var o=Object.getOwnPropertyDescriptor(e,n),a=o.value;if(o.get){if(!t)throw new Error("Immer drafts cannot have computed properties");a=o.get.call(e)}o.enumerable?r[n]=a:Object.defineProperty(r,n,{value:a,writable:!0,configurable:!0})}}),r}function x(e,t){if(l(e)&&!h(e)&&!Object.isFrozen(e)){var n=b(e);n===r.Set?e.add=e.clear=e.delete=A:n===r.Map&&(e.set=e.clear=e.delete=A),Object.freeze(e),t&&v(e,function(e,t){return x(t,!0)})}}function A(){throw new Error("This object has been frozen and should not be mutated")}function S(){throw new Error("Illegal state, please file a bug")}var z=function(){function e(e,t){this.drafts=[],this.parent=e,this.immer=t,this.canAutoFreeze=!0}return e.prototype.usePatches=function(e){e&&(this.patches=[],this.inversePatches=[],this.patchListener=e)},e.prototype.revoke=function(){this.leave(),this.drafts.forEach(k),this.drafts=null},e.prototype.leave=function(){this===e.current&&(e.current=this.parent)},e.enter=function(t){var r=new e(e.current,t);return e.current=r,r},e}();function k(e){var t=e[u];t.type===n.ProxyObject||t.type===n.ProxyArray?t.revoke():t.revoked=!0}function M(e,t,r){var n=r.drafts[0],o=void 0!==t&&t!==n;if(e.willFinalize(r,t,o),o){if(n[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(t)&&_(e,t=D(e,t,r)),r.patches&&(r.patches.push({op:"replace",path:[],value:t}),r.inversePatches.push({op:"replace",path:[],value:n[u].base}))}else t=D(e,n,r,[]);return r.revoke(),r.patches&&r.patchListener(r.patches,r.inversePatches),t!==c?t:void 0}function D(e,t,r,o){var a=t[u];if(!a)return Object.isFrozen(t)?t:F(e,t,r);if(a.scope!==r)return t;if(!a.modified)return _(e,a.base,!0),a.base;if(!a.finalized){if(a.finalized=!0,F(e,a.draft,r,o),e.onDelete&&a.type!==n.Set)if(e.useProxies){v(a.assigned,function(t,r){r||e.onDelete(a,t)})}else{var i=a.base,c=a.copy;v(i,function(t){m(c,t)||e.onDelete(a,t)})}e.onCopy&&e.onCopy(a),e.autoFreeze&&r.canAutoFreeze&&x(a.copy,!1),o&&r.patches&&function(e,t,r,o){switch(e.type){case n.ProxyObject:case n.ES5Object:case n.Map:return function(e,t,r,n){var o=e.base,a=e.copy;v(e.assigned,function(e,i){var c=g(o,e),s=g(a,e),u=i?m(o,e)?"replace":"add":"remove";if(c!==s||"replace"!==u){var f=t.concat(e);r.push("remove"===u?{op:u,path:f}:{op:u,path:f,value:s}),n.push("add"===u?{op:"remove",path:f}:"remove"===u?{op:"add",path:f,value:c}:{op:"replace",path:f,value:c})}})}(e,t,r,o);case n.ES5Array:case n.ProxyArray:return function(e,t,r,n){var o,a,i=e.base,c=e.assigned,s=e.copy;s||S();s.length<i.length&&(i=(o=[s,i])[0],s=o[1],r=(a=[n,r])[0],n=a[1]);var u=s.length-i.length,f=0;for(;i[f]===s[f]&&f<i.length;)++f;var p=i.length;for(;p>f&&i[p-1]===s[p+u-1];)--p;for(var d=f;d<p;++d)if(c[d]&&s[d]!==i[d]){var h=t.concat([d]);r.push({op:"replace",path:h,value:s[d]}),n.push({op:"replace",path:h,value:i[d]})}for(var l=r.length,d=p+u-1;d>=p;--d){var h=t.concat([d]);r[l+d-p]={op:"add",path:h,value:s[d]},n.push({op:"remove",path:h})}}(e,t,r,o);case n.Set:(function(e,t,r,n){var o=e.base,a=e.copy,i=0;o.forEach(function(e){if(!a.has(e)){var o=t.concat([i]);r.push({op:"remove",path:o,value:e}),n.unshift({op:"add",path:o,value:e})}i++}),i=0,a.forEach(function(e){if(!o.has(e)){var a=t.concat([i]);r.push({op:"add",path:a,value:e}),n.unshift({op:"remove",path:a,value:e})}i++})})(e,t,r,o)}}(a,o,r.patches,r.inversePatches)}return a.copy}function F(e,t,o,a){var i=t[u];return i&&(i.type!==n.ES5Object&&i.type!==n.ES5Array||(i.copy=E(i.draft,!0)),t=i.copy),v(t,function(n,c){return function e(t,n,o,a,i,c,s,u){if(s===i)throw Error("Immer forbids circular references");var f=!!a&&i===o;var p=O(i);if(h(s)){var d=u&&f&&!p&&!m(a.assigned,c)?u.concat(c):void 0;s=D(t,s,n,d),function(e,t,n){switch(b(e)){case r.Map:e.set(t,n);break;case r.Set:e.delete(t),e.add(n);break;default:e[t]=n}}(i,c,s),h(s)&&(n.canAutoFreeze=!1)}else{if(f&&P(s,g(a.base,c)))return;l(s)&&!Object.isFrozen(s)&&(v(s,function(r,i){return e(t,n,o,a,s,r,i,u)}),_(t,s))}f&&t.onAssign&&!p&&t.onAssign(a,c,s)}(e,o,t,i,t,n,c,a)}),t}function _(e,t,r){void 0===r&&(r=!1),e.autoFreeze&&!h(t)&&x(t,r)}var C={get:function(e,t){if(t===u)return e;var r=e.drafts;if(!e.modified&&m(r,t))return r[t];var n=j(e)[t];if(e.finalized||!l(n))return n;if(e.modified){if(n!==N(e.base,t))return n;r=e.copy}return r[t]=e.scope.immer.createProxy(n,e)},has:function(e,t){return t in j(e)},ownKeys:function(e){return Reflect.ownKeys(j(e))},set:function(e,t,r){if(!e.modified){var n=N(e.base,t);if(r?P(n,r)||r===e.drafts[t]:P(n,r)&&t in e.base)return!0;W(e),R(e)}return e.assigned[t]=!0,e.copy[t]=r,!0},deleteProperty:function(e,t){return void 0!==N(e.base,t)||t in e.base?(e.assigned[t]=!1,W(e),R(e)):e.assigned[t]&&delete e.assigned[t],e.copy&&delete e.copy[t],!0},getOwnPropertyDescriptor:function(e,t){var r=j(e),o=Reflect.getOwnPropertyDescriptor(r,t);return o&&(o.writable=!0,o.configurable=e.type!==n.ProxyArray||"length"!==t),o},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")}},I={};function N(e,t){var r=e[u],n=Reflect.getOwnPropertyDescriptor(r?j(r):e,t);return n&&n.value}function R(e){if(!e.modified){if(e.modified=!0,e.type===n.ProxyObject||e.type===n.ProxyArray){var t=e.copy=E(e.base);v(e.drafts,function(e,r){t[e]=r}),e.drafts=void 0}e.parent&&R(e.parent)}}function W(e){e.copy||(e.copy=E(e.base))}function U(e,t,r){e.drafts.forEach(function(e){e[u].finalizing=!0}),r?h(t)&&t[u].scope===e&&B(e.drafts):(e.patches&&function e(t){if(!t||"object"!=typeof t)return;var r=t[u];if(!r)return;var o=r.base,a=r.draft,i=r.assigned,c=r.type;if(c===n.ES5Object)v(a,function(t){t!==u&&(void 0!==o[t]||m(o,t)?i[t]||e(a[t]):(i[t]=!0,L(r)))}),v(o,function(e){void 0!==a[e]||m(a,e)||(i[e]=!1,L(r))});else if(c===n.ES5Array&&H(r)){if(L(r),i.length=!0,a.length<o.length)for(var s=a.length;s<o.length;s++)i[s]=!1;else for(var s=o.length;s<a.length;s++)i[s]=!0;for(var s=0;s<a.length;s++)void 0===i[s]&&e(a[s])}}(e.drafts[0]),B(e.drafts))}function K(e,t){var r=Array.isArray(e),o=J(e);v(o,function(t){!function(e,t,r){var n=V[t];n?n.enumerable=r:V[t]=n={configurable:!0,enumerable:r,get:function(){return function(e,t){q(e);var r=T(j(e),t);if(e.finalizing)return r;if(r===T(e.base,t)&&l(r))return $(e),e.copy[t]=e.scope.immer.createProxy(r,e);return r}(this[u],t)},set:function(e){!function(e,t,r){if(q(e),e.assigned[t]=!0,!e.modified){if(P(r,T(j(e),t)))return;L(e),$(e)}e.copy[t]=r}(this[u],t,e)}};Object.defineProperty(e,t,n)}(o,t,r||function(e,t){var r=Object.getOwnPropertyDescriptor(e,t);return!(!r||!r.enumerable)}(e,t))});var a,i,c,s={type:r?n.ES5Array:n.ES5Object,scope:t?t.scope:z.current,modified:!1,finalizing:!1,finalized:!1,assigned:{},parent:t,base:e,draft:o,copy:null,revoked:!1,isManual:!1};return a=o,i=u,c=s,Object.defineProperty(a,i,{value:c,enumerable:!1,writable:!0}),o}function T(e,t){var r=e[u];if(r&&!r.finalizing){r.finalizing=!0;var n=e[t];return r.finalizing=!1,n}return e[t]}function L(e){e.modified||(e.modified=!0,e.parent&&L(e.parent))}function $(e){e.copy||(e.copy=J(e.base))}function J(e){var t=e&&e[u];if(t){t.finalizing=!0;var r=E(t.draft,!0);return t.finalizing=!1,r}return E(e)}v(C,function(e,t){I[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}}),I.deleteProperty=function(e,t){if(isNaN(parseInt(t)))throw new Error("Immer only supports deleting array indices");return C.deleteProperty.call(this,e[0],t)},I.set=function(e,t,r){if("length"!==t&&isNaN(parseInt(t)))throw new Error("Immer only supports setting array indices and the 'length' property");return C.set.call(this,e[0],t,r,e[0])};var V={};function q(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(j(e)))}function B(e){for(var t=e.length-1;t>=0;t--){var r=e[t][u];if(!r.modified)switch(r.type){case n.ES5Array:H(r)&&L(r);break;case n.ES5Object:G(r)&&L(r)}}}function G(e){for(var t=e.base,r=e.draft,n=Object.keys(r),o=n.length-1;o>=0;o--){var a=n[o],i=t[a];if(void 0===i&&!m(t,a))return!0;var c=r[a],s=c&&c[u];if(s?s.base!==i:!P(c,i))return!0}return n.length!==Object.keys(t).length}function H(e){var t=e.draft;if(t.length!==e.base.length)return!0;var r=Object.getOwnPropertyDescriptor(t,t.length-1);return!(!r||r.get)}var Q=function(e){if(!e)throw new Error("Map is not polyfilled");function t(e,t){return this[u]={type:n.Map,parent:t,scope:t?t.scope:z.current,modified:!1,finalized:!1,copy:void 0,assigned:void 0,base:e,draft:this,isManual:!1,revoked:!1},this}d(t,e);var r=t.prototype;return Object.defineProperty(r,"size",{get:function(){return j(this[u]).size},enumerable:!0,configurable:!0}),r.has=function(e){return j(this[u]).has(e)},r.set=function(e,t){var r=this[u];return q(r),j(r).get(e)!==t&&(X(r),r.scope.immer.markChanged(r),r.assigned.set(e,!0),r.copy.set(e,t),r.assigned.set(e,!0)),this},r.delete=function(e){if(!this.has(e))return!1;var t=this[u];return q(t),X(t),t.scope.immer.markChanged(t),t.assigned.set(e,!1),t.copy.delete(e),!0},r.clear=function(){var e=this[u];return q(e),X(e),e.scope.immer.markChanged(e),e.assigned=new Map,e.copy.clear()},r.forEach=function(e,t){var r=this;j(this[u]).forEach(function(n,o,a){e.call(t,r.get(o),o,r)})},r.get=function(e){var t=this[u];q(t);var r=j(t).get(e);if(t.finalized||!l(r))return r;if(r!==t.base.get(e))return r;var n=t.scope.immer.createProxy(r,t);return X(t),t.copy.set(e,n),n},r.keys=function(){return j(this[u]).keys()},r.values=function(){var e,t=this,r=this.keys();return(e={})[f]=function(){return t.values()},e.next=function(){var e=r.next();return e.done?e:{done:!1,value:t.get(e.value)}},e},r.entries=function(){var e,t=this,r=this.keys();return(e={})[f]=function(){return t.entries()},e.next=function(){var e=r.next();if(e.done)return e;var n=t.get(e.value);return{done:!1,value:[e.value,n]}},e},r[f]=function(){return this.entries()},t}(Map);function X(e){e.copy||(e.assigned=new Map,e.copy=new Map(e.base))}var Y=function(e){if(!e)throw new Error("Set is not polyfilled");function t(e,t){return this[u]={type:n.Set,parent:t,scope:t?t.scope:z.current,modified:!1,finalized:!1,copy:void 0,base:e,draft:this,drafts:new Map,revoked:!1,isManual:!1},this}d(t,e);var r=t.prototype;return Object.defineProperty(r,"size",{get:function(){return j(this[u]).size},enumerable:!0,configurable:!0}),r.has=function(e){var t=this[u];return q(t),t.copy?!!t.copy.has(e)||!(!t.drafts.has(e)||!t.copy.has(t.drafts.get(e))):t.base.has(e)},r.add=function(e){var t=this[u];return q(t),t.copy?t.copy.add(e):t.base.has(e)||(Z(t),t.scope.immer.markChanged(t),t.copy.add(e)),this},r.delete=function(e){if(!this.has(e))return!1;var t=this[u];return q(t),Z(t),t.scope.immer.markChanged(t),t.copy.delete(e)||!!t.drafts.has(e)&&t.copy.delete(t.drafts.get(e))},r.clear=function(){var e=this[u];return q(e),Z(e),e.scope.immer.markChanged(e),e.copy.clear()},r.values=function(){var e=this[u];return q(e),Z(e),e.copy.values()},r.entries=function(){var e=this[u];return q(e),Z(e),e.copy.entries()},r.keys=function(){return this.values()},r[f]=function(){return this.values()},r.forEach=function(e,t){for(var r=this.values(),n=r.next();!n.done;)e.call(t,n.value,n.value,this),n=r.next()},t}(Set);function Z(e){e.copy||(e.copy=new Set,e.base.forEach(function(t){if(l(t)){var r=e.scope.immer.createProxy(t,e);e.drafts.set(t,r),e.copy.add(r)}else e.copy.add(t)}))}function ee(e,t){return t.forEach(function(t){var n=t.path,o=t.op;n.length||S();for(var a=e,i=0;i<n.length-1;i++)if(!(a=g(a,n[i]))||"object"!=typeof a)throw new Error("Cannot apply patch, path doesn't resolve: "+n.join("/"));var c=b(a),s=te(t.value),u=n[n.length-1];switch(o){case"replace":switch(c){case r.Map:return a.set(u,s);case r.Set:throw new Error('Sets cannot have "replace" patches.');default:return a[u]=s}case"add":switch(c){case r.Array:return a.splice(u,0,s);case r.Map:return a.set(u,s);case r.Set:return a.add(s);default:return a[u]=s}case"remove":switch(c){case r.Array:return a.splice(u,1);case r.Map:return a.delete(u);case r.Set:return a.delete(t.value);default:return delete a[u]}default:throw new Error("Unsupported patch operation: "+o)}}),e}function te(e){if(!e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map(te);if(w(e))return new Map(Array.from(e.entries()).map(function(e){return[e[0],te(e[1])]}));var t=Object.create(Object.getPrototypeOf(e));for(var r in e)t[r]=te(e[r]);return t}function re(){for(var e=0,t=0,r=arguments.length;t<r;t++)e+=arguments[t].length;var n=Array(e),o=0;for(t=0;t<r;t++)for(var a=arguments[t],i=0,c=a.length;i<c;i++,o++)n[o]=a[i];return n}var ne={useProxies:"undefined"!=typeof Proxy&&void 0!==Proxy.revocable&&"undefined"!=typeof Reflect,autoFreeze:"undefined"!=typeof process?"production"!==process.env.NODE_ENV:"verifyMinified"===function(){}.name,onAssign:null,onDelete:null,onCopy:null},oe=function(){function e(e){var t=this;this.useProxies=!1,this.autoFreeze=!1,v(ne,function(r,n){var o,a;t[r]=null!=(a=null===(o=e)||void 0===o?void 0:o[r])?a:n}),this.setUseProxies(this.useProxies),this.produce=this.produce.bind(this),this.produceWithPatches=this.produceWithPatches.bind(this)}return e.prototype.produce=function(e,t,r){var n,o=this;if("function"==typeof e&&"function"!=typeof t){var a=t;t=e;var i=this;return function(e){var r=arguments,n=this;void 0===e&&(e=a);for(var o=[],c=1;c<arguments.length;c++)o[c-1]=r[c];return i.produce(e,function(e){return t.call.apply(t,re([n,e],o))})}}if("function"!=typeof t)throw new Error("The first or second argument to `produce` must be a function");if(void 0!==r&&"function"!=typeof r)throw new Error("The third argument to `produce` must be a function or undefined");if(l(e)){var s=z.enter(this),u=this.createProxy(e,void 0),f=!0;try{n=t(u),f=!1}finally{f?s.revoke():s.leave()}return"undefined"!=typeof Promise&&n instanceof Promise?n.then(function(e){return s.usePatches(r),M(o,e,s)},function(e){throw s.revoke(),e}):(s.usePatches(r),M(this,n,s))}if((n=t(e))!==c)return void 0===n&&(n=e),_(this,n,!0),n},e.prototype.produceWithPatches=function(e,t,r){var n,o,a=this;return"function"==typeof e?function(t){for(var r=arguments,n=[],o=1;o<arguments.length;o++)n[o-1]=r[o];return a.produceWithPatches(t,function(t){return e.apply(void 0,re([t],n))})}:(r&&S(),[this.produce(e,t,function(e,t){n=e,o=t}),n,o])},e.prototype.createDraft=function(e){if(!l(e))throw new Error("First argument to `createDraft` must be a plain object, an array, or an immerable object");var t=z.enter(this),r=this.createProxy(e,void 0);return r[u].isManual=!0,t.leave(),r},e.prototype.finishDraft=function(e,t){var r=e&&e[u];if(!r||!r.isManual)throw new Error("First argument to `finishDraft` must be a draft returned by `createDraft`");if(r.finalized)throw new Error("The given draft is already finalized");var n=r.scope;return n.usePatches(t),M(this,void 0,n)},e.prototype.setAutoFreeze=function(e){this.autoFreeze=e},e.prototype.setUseProxies=function(e){this.useProxies=e},e.prototype.applyPatches=function(e,t){var r;for(r=t.length-1;r>=0;r--){var n=t[r];if(0===n.path.length&&"replace"===n.op){e=n.value;break}}return h(e)?ee(e,t):this.produce(e,function(e){return ee(e,t.slice(r+1))})},e.prototype.createProxy=function(e,t){var r=w(e)?function(e,t){return new Q(e,t)}(e,t):O(e)?function(e,t){return new Y(e,t)}(e,t):this.useProxies?function(e,t){var r=Array.isArray(e),o={type:r?n.ProxyArray:n.ProxyObject,scope:t?t.scope:z.current,modified:!1,finalized:!1,assigned:{},parent:t,base:e,draft:null,drafts:{},copy:null,revoke:null,isManual:!1},a=o,i=C;r&&(a=[o],i=I);var c=Proxy.revocable(a,i),s=c.revoke,u=c.proxy;return o.draft=u,o.revoke=s,u}(e,t):K(e,t);return(t?t.scope:z.current).drafts.push(r),r},e.prototype.willFinalize=function(e,t,r){this.useProxies||U(e,t,r)},e.prototype.markChanged=function(e){this.useProxies?R(e):L(e)},e}(),ae=new oe,ie=ae.produce,ce=ae.produceWithPatches.bind(ae),se=ae.setAutoFreeze.bind(ae),ue=ae.setUseProxies.bind(ae),fe=ae.applyPatches.bind(ae),pe=ae.createDraft.bind(ae),de=ae.finishDraft.bind(ae);e.Immer=oe,e.applyPatches=fe,e.castDraft=function(e){return e},e.castImmutable=function(e){return e},e.createDraft=pe,e.default=ie,e.finishDraft=de,e.immerable=s,e.isDraft=h,e.isDraftable=l,e.nothing=c,e.original=function(e){if(e&&e[u])return e[u].base},e.produce=ie,e.produceWithPatches=ce,e.setAutoFreeze=se,e.setUseProxies=ue,Object.defineProperty(e,"__esModule",{value:!0})}); //# sourceMappingURL=immer.umd.js.map