UNPKG

mutative

Version:

A JavaScript library for efficient immutable updates

3 lines (2 loc) 20.6 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Mutative={})}(this,(function(e){"use strict";const t={Remove:"remove",Replace:"replace",Add:"add"},n=Symbol.for("__MUTATIVE_PROXY_DRAFT__"),r=Symbol("__MUTATIVE_RAW_RETURN_SYMBOL__"),o=Symbol.iterator,i={mutable:"mutable",immutable:"immutable"},a={};function s(e,t){return e instanceof Map?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function c(e,t){if(t in e){let n=Reflect.getPrototypeOf(e);for(;n;){const e=Reflect.getOwnPropertyDescriptor(n,t);if(e)return e;n=Reflect.getPrototypeOf(n)}}}function l(e){return Object.getPrototypeOf(e)===Set.prototype}function u(e){return Object.getPrototypeOf(e)===Map.prototype}function p(e){var t;return null!==(t=e.copy)&&void 0!==t?t:e.original}function f(e){return!!d(e)}function d(e){return"object"!=typeof e?null:null==e?void 0:e[n]}function y(e){var t;const n=d(e);return n?null!==(t=n.copy)&&void 0!==t?t:n.original:e}function h(e,t){if(!e||"object"!=typeof e)return!1;let n;return Object.getPrototypeOf(e)===Object.prototype||Array.isArray(e)||e instanceof Map||e instanceof Set||!!(null==t?void 0:t.mark)&&((n=t.mark(e,i))===i.immutable||"function"==typeof n)}function g(e,t=[]){if(Object.hasOwnProperty.call(e,"key")){const n=e.parent.copy,r=d(b(n,e.key));if(null!==r&&(null==r?void 0:r.original)!==e.original)return null;const o=3===e.parent.type,i=o?Array.from(e.parent.setMap.keys()).indexOf(e.key):e.key;if(!(o&&n.size>i||s(n,i)))return null;t.push(i)}if(e.parent)return g(e.parent,t);t.reverse();try{!function(e,t){for(let n=0;n<t.length-1;n+=1){const r=t[n];if("object"!=typeof(e=b(3===v(e)?Array.from(e):e,r)))throw new Error(`Cannot resolve patch at '${t.join("/")}'.`)}}(e.copy,t)}catch(e){return null}return t}function v(e){return Array.isArray(e)?1:e instanceof Map?2:e instanceof Set?3:0}function b(e,t){return 2===v(e)?e.get(t):e[t]}function w(e,t,n){2===v(e)?e.set(t,n):e[t]=n}function m(e,t){const n=d(e);return(n?p(n):e)[t]}function O(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}function M(e){if(e)for(;e.finalities.revoke.length>0;){e.finalities.revoke.pop()()}}function j(e,t){return t?e:[""].concat(e).map((e=>{const t=`${e}`;return-1===t.indexOf("/")&&-1===t.indexOf("~")?t:t.replace(/~/g,"~0").replace(/\//g,"~1")})).join("/")}const k=Object.prototype.propertyIsEnumerable;function S(e,t){let n;if(Array.isArray(e))return Array.prototype.concat.call(e);if(e instanceof Set){if(!l(e)){return new(0,Object.getPrototypeOf(e).constructor)(e.values())}return Set.prototype.difference?Set.prototype.difference.call(e,new Set):new Set(e.values())}if(e instanceof Map){if(!u(e)){return new(0,Object.getPrototypeOf(e).constructor)(e)}return new Map(e)}if((null==t?void 0:t.mark)&&(n=t.mark(e,i),void 0!==n)&&n!==i.mutable){if(n===i.immutable)return function(e){const t=Object.create(Object.getPrototypeOf(e));return Reflect.ownKeys(e).forEach((n=>{let r=Reflect.getOwnPropertyDescriptor(e,n);r.enumerable&&r.configurable&&r.writable?t[n]=e[n]:(r.writable||(r.writable=!0,r.configurable=!0),(r.get||r.set)&&(r={configurable:!0,writable:!0,enumerable:r.enumerable,value:e[n]}),Reflect.defineProperty(t,n,r))})),t}(e);if("function"==typeof n)return n();throw new Error(`Unsupported mark result: ${n}`)}if("object"==typeof e&&Object.getPrototypeOf(e)===Object.prototype){const t={};return Object.keys(e).forEach((n=>{t[n]=e[n]})),Object.getOwnPropertySymbols(e).forEach((n=>{k.call(e,n)&&(t[n]=e[n])})),t}throw new Error("Please check mark() to ensure that it is a stable marker draftable function.")}function R(e){e.copy||(e.copy=S(e.original,e.options))}function P(e){if(!h(e))return y(e);if(Array.isArray(e))return e.map(P);if(e instanceof Map){const t=Array.from(e.entries()).map((([e,t])=>[e,P(t)]));if(!u(e)){return new(0,Object.getPrototypeOf(e).constructor)(t)}return new Map(t)}if(e instanceof Set){const t=Array.from(e).map(P);if(!l(e)){return new(0,Object.getPrototypeOf(e).constructor)(t)}return new Set(t)}const t=Object.create(Object.getPrototypeOf(e));for(const n in e)t[n]=P(e[n]);return t}function E(e){return f(e)?P(e):e}function A(e){var t;e.assignedMap=null!==(t=e.assignedMap)&&void 0!==t?t:new Map,e.operated||(e.operated=!0,e.parent&&A(e.parent))}function z(){throw new Error("Cannot modify frozen object")}function x(e){return e&&"object"==typeof e&&!Object.isFrozen(e)}function D(e,t,n,r,o){if(Object.isFrozen(e)||f(e))return;switch(v(e)){case 2:for(const[t,n]of e)x(t)&&D(t),x(n)&&D(n);e.set=e.clear=e.delete=z;break;case 3:for(const t of e)x(t)&&D(t);e.add=e.clear=e.delete=z;break;case 1:Object.freeze(e);for(const t of e)x(t)&&D(t);break;default:Object.freeze(e),Object.keys(e).forEach((t=>{const n=e[t];x(n)&&D(n)}))}}function _(e,t){const n=v(e);if(0===n)Reflect.ownKeys(e).forEach((n=>{t(n,e[n],e)}));else if(1===n){let n=0;for(const r of e)t(n,r,e),n+=1}else e.forEach(((n,r)=>t(r,n,e)))}function C(e,t,n){if(f(e)||!h(e,n)||t.has(e)||Object.isFrozen(e))return;const r=e instanceof Set,o=r?new Map:void 0;if(t.add(e),_(e,((i,a)=>{var s;if(f(a)){const t=d(a);R(t);const n=(null===(s=t.assignedMap)||void 0===s?void 0:s.size)||t.operated?t.copy:t.original;w(r?o:e,i,n)}else C(a,t,n)})),o){const t=e,n=Array.from(t);t.clear(),n.forEach((e=>{t.add(o.has(e)?o.get(e):e)}))}}function F(e,t){const n=3===e.type?e.setMap:e.copy;e.finalities.revoke.length>1&&e.assignedMap.get(t)&&n&&C(b(n,t),e.finalities.handledSet,e.options)}function I(e){3===e.type&&e.copy&&(e.copy.clear(),e.setMap.forEach((t=>{e.copy.add(y(t))})))}function T(e,t,n,r){if(e.operated&&e.assignedMap&&e.assignedMap.size>0&&!e.finalized){if(n&&r){const o=g(e);o&&t(e,o,n,r)}e.finalized=!0}}function $(e,t,n,r){const o=d(n);o&&(o.callbacks||(o.callbacks=[]),o.callbacks.push(((i,a)=>{const s=3===e.type?e.setMap:e.copy;if(O(b(s,t),n)){let n=o.original;o.copy&&(n=o.copy),I(e),T(e,r,i,a),w(s,t,n)}})),e.options.enableAutoFreeze&&o.finalities!==e.finalities&&(e.options.enableAutoFreeze=!1)),h(n,e.options)&&e.finalities.draft.push((()=>{O(b(3===e.type?e.setMap:e.copy,t),n)&&F(e,t)}))}function K(e,n,r,o){const{pathAsArray:i=!0}=e.options.enablePatches;switch(e.type){case 0:case 2:return function({original:e,copy:n,assignedMap:r},o,i,a,c){r.forEach(((r,l)=>{const u=b(e,l),p=E(b(n,l)),f=r?s(e,l)?t.Replace:t.Add:t.Remove;if(O(u,p)&&f===t.Replace)return;const d=j(o.concat(l),c);i.push(f===t.Remove?{op:f,path:d}:{op:f,path:d,value:p}),a.push(f===t.Add?{op:t.Remove,path:d}:f===t.Remove?{op:t.Add,path:d,value:u}:{op:t.Replace,path:d,value:u})}))}(e,n,r,o,i);case 1:return function(e,n,r,o,i){let{original:a,assignedMap:s,options:c}=e,l=e.copy;l.length<a.length&&([a,l]=[l,a],[r,o]=[o,r]);for(let e=0;e<a.length;e+=1)if(s.get(e.toString())&&l[e]!==a[e]){const s=j(n.concat([e]),i);r.push({op:t.Replace,path:s,value:E(l[e])}),o.push({op:t.Replace,path:s,value:E(a[e])})}for(let e=a.length;e<l.length;e+=1){const o=j(n.concat([e]),i);r.push({op:t.Add,path:o,value:E(l[e])})}if(a.length<l.length){const{arrayLengthAssignment:e=!0}=c.enablePatches;if(e){const e=j(n.concat(["length"]),i);o.push({op:t.Replace,path:e,value:a.length})}else for(let e=l.length;a.length<e;e-=1){const r=j(n.concat([e-1]),i);o.push({op:t.Remove,path:r})}}}(e,n,r,o,i);case 3:return function({original:e,copy:n},r,o,i,a){let s=0;e.forEach((e=>{if(!n.has(e)){const n=j(r.concat([s]),a);o.push({op:t.Remove,path:n,value:e}),i.unshift({op:t.Add,path:n,value:e})}s+=1})),s=0,n.forEach((n=>{if(!e.has(n)){const e=j(r.concat([s]),a);o.push({op:t.Add,path:e,value:n}),i.unshift({op:t.Remove,path:e,value:n})}s+=1}))}(e,n,r,o,i)}}let V=!1;const U=(e,t,n=!1)=>{if("object"==typeof e&&null!==e&&(!h(e,t)||n)&&!V)throw new Error("Strict mode: Mutable data cannot be accessed directly, please use 'unsafe(callback)' wrap.")};const N={get size(){return p(d(this)).size},has(e){return p(d(this)).has(e)},set(e,t){const n=d(this),r=p(n);return r.has(e)&&O(r.get(e),t)||(R(n),A(n),n.assignedMap.set(e,!0),n.copy.set(e,t),$(n,e,t,K)),this},delete(e){if(!this.has(e))return!1;const t=d(this);return R(t),A(t),t.original.has(e)?t.assignedMap.set(e,!1):t.assignedMap.delete(e),t.copy.delete(e),!0},clear(){const e=d(this);if(this.size){R(e),A(e),e.assignedMap=new Map;for(const[t]of e.original)e.assignedMap.set(t,!1);e.copy.clear()}},forEach(e,t){p(d(this)).forEach(((n,r)=>{e.call(t,this.get(r),r,this)}))},get(e){var t,n;const r=d(this),o=p(r).get(e),s=(null===(n=(t=r.options).mark)||void 0===n?void 0:n.call(t,o,i))===i.mutable;if(r.options.strict&&U(o,r.options,s),s)return o;if(r.finalized||!h(o,r.options))return o;if(o!==r.original.get(e))return o;const c=a.createDraft({original:o,parentDraft:r,key:e,finalities:r.finalities,options:r.options});return R(r),r.copy.set(e,c),c},keys(){return p(d(this)).keys()},values(){const e=this.keys();return{[o]:()=>this.values(),next:()=>{const t=e.next();if(t.done)return t;return{done:!1,value:this.get(t.value)}}}},entries(){const e=this.keys();return{[o]:()=>this.entries(),next:()=>{const t=e.next();if(t.done)return t;const n=this.get(t.value);return{done:!1,value:[t.value,n]}}}},[o](){return this.entries()}},W=Reflect.ownKeys(N),L=(e,t,{isValuesIterator:n})=>()=>{var r,o;const s=t.next();if(s.done)return s;const c=s.value;let l=e.setMap.get(c);const u=d(l),p=(null===(o=(r=e.options).mark)||void 0===o?void 0:o.call(r,l,i))===i.mutable;if(e.options.strict&&U(c,e.options,p),p||u||!h(c,e.options)||e.finalized||!e.original.has(c))u&&(l=u.proxy);else{const t=a.createDraft({original:c,parentDraft:e,key:c,finalities:e.finalities,options:e.options});e.setMap.set(c,t),l=t}return{done:!1,value:n?l:[l,l]}},Y={get size(){return d(this).setMap.size},has(e){const t=d(this);if(t.setMap.has(e))return!0;R(t);const n=d(e);return!(!n||!t.setMap.has(n.original))},add(e){const t=d(this);return this.has(e)||(R(t),A(t),t.assignedMap.set(e,!0),t.setMap.set(e,e),$(t,e,e,K)),this},delete(e){if(!this.has(e))return!1;const t=d(this);R(t),A(t);const n=d(e);return n&&t.setMap.has(n.original)?(t.assignedMap.set(n.original,!1),t.setMap.delete(n.original)):(!n&&t.setMap.has(e)?t.assignedMap.set(e,!1):t.assignedMap.delete(e),t.setMap.delete(e))},clear(){if(!this.size)return;const e=d(this);R(e),A(e);for(const t of e.original)e.assignedMap.set(t,!1);e.setMap.clear()},values(){const e=d(this);R(e);const t=e.setMap.keys();return{[Symbol.iterator]:()=>this.values(),next:L(e,t,{isValuesIterator:!0})}},entries(){const e=d(this);R(e);const t=e.setMap.keys();return{[Symbol.iterator]:()=>this.entries(),next:L(e,t,{isValuesIterator:!1})}},keys(){return this.values()},[o](){return this.values()},forEach(e,t){const n=this.values();let r=n.next();for(;!r.done;)e.call(t,r.value,r.value,this),r=n.next()}};Set.prototype.difference&&Object.assign(Y,{intersection(e){return Set.prototype.intersection.call(new Set(this.values()),e)},union(e){return Set.prototype.union.call(new Set(this.values()),e)},difference(e){return Set.prototype.difference.call(new Set(this.values()),e)},symmetricDifference(e){return Set.prototype.symmetricDifference.call(new Set(this.values()),e)},isSubsetOf(e){return Set.prototype.isSubsetOf.call(new Set(this.values()),e)},isSupersetOf(e){return Set.prototype.isSupersetOf.call(new Set(this.values()),e)},isDisjointFrom(e){return Set.prototype.isDisjointFrom.call(new Set(this.values()),e)}});const B=Reflect.ownKeys(Y),X={get(e,t,r){var o,a;const l=null===(o=e.copy)||void 0===o?void 0:o[t];if(l&&e.finalities.draftsCache.has(l))return l;if(t===n)return e;let u;if(e.options.mark){const n="size"===t&&(e.original instanceof Map||e.original instanceof Set)?Reflect.get(e.original,t):Reflect.get(e.original,t,r);if(u=e.options.mark(n,i),u===i.mutable)return e.options.strict&&U(n,e.options,!0),n}const y=p(e);if(y instanceof Map&&W.includes(t)){if("size"===t)return Object.getOwnPropertyDescriptor(N,"size").get.call(e.proxy);return N[t].bind(e.proxy)}if(y instanceof Set&&B.includes(t)){if("size"===t)return Object.getOwnPropertyDescriptor(Y,"size").get.call(e.proxy);return Y[t].bind(e.proxy)}if(!s(y,t)){const n=c(y,t);return n?"value"in n?n.value:null===(a=n.get)||void 0===a?void 0:a.call(e.proxy):void 0}const g=y[t];if(e.options.strict&&U(g,e.options),e.finalized||!h(g,e.options))return g;if(g===m(e.original,t)){if(R(e),e.copy[t]=q({original:e.original[t],parentDraft:e,key:1===e.type?Number(t):t,finalities:e.finalities,options:e.options}),"function"==typeof u){const n=d(e.copy[t]);return R(n),A(n),n.copy}return e.copy[t]}return f(g)&&e.finalities.draftsCache.add(g),g},set(e,t,n){var r;if(3===e.type||2===e.type)throw new Error("Map/Set draft does not support any property assignment.");let o;if(1===e.type&&"length"!==t&&(!(Number.isInteger(o=Number(t))&&o>=0)||0!==t&&0!==o&&String(o)!==String(t)))throw new Error("Only supports setting array indices and the 'length' property.");const i=c(p(e),t);if(null==i?void 0:i.set)return i.set.call(e.proxy,n),!0;const a=m(p(e),t),l=d(a);return l&&O(l.original,n)?(e.copy[t]=n,e.assignedMap=null!==(r=e.assignedMap)&&void 0!==r?r:new Map,e.assignedMap.set(t,!1),!0):(O(n,a)&&(void 0!==n||s(e.original,t))||(R(e),A(e),s(e.original,t)&&O(n,e.original[t])?e.assignedMap.delete(t):e.assignedMap.set(t,!0),e.copy[t]=n,$(e,t,n,K)),!0)},has:(e,t)=>t in p(e),ownKeys:e=>Reflect.ownKeys(p(e)),getOwnPropertyDescriptor(e,t){const n=p(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r?{writable:!0,configurable:1!==e.type||"length"!==t,enumerable:r.enumerable,value:n[t]}:r},getPrototypeOf:e=>Reflect.getPrototypeOf(e.original),setPrototypeOf(){throw new Error("Cannot call 'setPrototypeOf()' on drafts")},defineProperty(){throw new Error("Cannot call 'defineProperty()' on drafts")},deleteProperty(e,t){var n;return 1===e.type?X.set.call(this,e,t,void 0,e.proxy):(void 0!==m(e.original,t)||t in e.original?(R(e),A(e),e.assignedMap.set(t,!1)):(e.assignedMap=null!==(n=e.assignedMap)&&void 0!==n?n:new Map,e.assignedMap.delete(t)),e.copy&&delete e.copy[t],!0)}};function q(e){const{original:t,parentDraft:n,key:r,finalities:o,options:i}=e,a=v(t),s={type:a,finalized:!1,parent:n,original:t,copy:null,proxy:null,finalities:o,options:i,setMap:3===a?new Map(t.entries()):void 0};(r||"key"in e)&&(s.key=r);const{proxy:c,revoke:l}=Proxy.revocable(1===a?Object.assign([],s):s,X);if(o.revoke.push(l),s.proxy=c,n){const e=n;e.finalities.draft.push(((t,n)=>{var o;const i=d(c);let a=3===e.type?e.setMap:e.copy;const s=b(a,r),l=d(s);if(l){let e=l.original;l.operated&&(e=y(s)),I(l),T(l,K,t,n),w(a,r,e)}null===(o=i.callbacks)||void 0===o||o.forEach((e=>{e(t,n)}))}))}else{const e=d(c);e.finalities.draft.push(((t,n)=>{I(e),T(e,K,t,n)}))}return c}function G(e,n,r,o,i){var a;const s=d(e),c=null!==(a=null==s?void 0:s.original)&&void 0!==a?a:e,l=!!n.length;if(null==s?void 0:s.operated)for(;s.finalities.draft.length>0;){s.finalities.draft.pop()(r,o)}const u=l?n[0]:s?s.operated?s.copy:s.original:e;return s&&M(s),i&&D(u,0,null==s||s.options.updatedValues),[u,r&&l?[{op:t.Replace,path:[],value:n[0]}]:r,o&&l?[{op:t.Replace,path:[],value:c}]:o]}function H(e){const{rootDraft:t,value:n,useRawReturn:r=!1,isRoot:o=!0}=e;_(n,((n,r,o)=>{const i=d(r);if(i&&t&&i.finalities===t.finalities){e.isContainDraft=!0;const t=i.original;if(o instanceof Set){const e=Array.from(o);o.clear(),e.forEach((e=>o.add(n===e?t:e)))}else w(o,n,t)}else"object"==typeof r&&null!==r&&(e.value=r,e.isRoot=!1,H(e))}))}function J(e){var t;const n=d(e);if(!h(e,null==n?void 0:n.options))return e;const r=v(e);if(n&&!n.operated)return n.original;let o;function i(){o=2===r?u(e)?new Map(e):new(Object.getPrototypeOf(e).constructor)(e):3===r?Array.from(n.setMap.values()):S(e,null==n?void 0:n.options)}if(n){n.finalized=!0;try{i()}finally{n.finalized=!1}}else o=e;if(_(o,((t,r)=>{if(n&&O(b(n.original,t),r))return;const a=J(r);a!==r&&(o===e&&i(),w(o,t,a))})),3===r){const e=null!==(t=null==n?void 0:n.original)&&void 0!==t?t:o;return l(e)?new Set(o):new(Object.getPrototypeOf(e).constructor)(o)}return o}function Q(e){if(!f(e))throw new Error(`current() is only used for Draft, parameter: ${e}`);return J(e)}a.createDraft=q;const Z=e=>function t(n,o,a){var s,c,l;if("function"==typeof n&&"function"!=typeof o)return function(e,...r){return t(e,(e=>n.call(this,e,...r)),o)};const u=n,p=o;let y=a;"function"!=typeof o&&(y=o),y=Object.assign(Object.assign({},e),y);const g=f(u)?Q(u):u,v=Array.isArray(y.mark)?(e,t)=>{for(const n of y.mark){const r=n(e,t);if(r)return r}}:y.mark,b=null!==(s=y.enablePatches)&&void 0!==s&&s,w=null!==(c=y.strict)&&void 0!==c&&c,m={enableAutoFreeze:null!==(l=y.enableAutoFreeze)&&void 0!==l&&l,mark:v,strict:w,enablePatches:b};if(!h(g,m)&&"object"==typeof g&&null!==g)throw new Error("Invalid base state: create() only supports plain objects, arrays, Set, Map or using mark() to mark the state as immutable.");const[j,k]=function(e,t){var n;const r={draft:[],revoke:[],handledSet:new WeakSet,draftsCache:new WeakSet};let o,a;t.enablePatches&&(o=[],a=[]);const s=(null===(n=t.mark)||void 0===n?void 0:n.call(t,e,i))!==i.mutable&&h(e,t)?q({original:e,parentDraft:null,finalities:r,options:t}):e;return[s,(e=[])=>{const[n,r,i]=G(s,e,o,a,t.enableAutoFreeze);return t.enablePatches?[n,r,i]:n}]}(g,m);if("function"!=typeof o){if(!h(g,m))throw new Error("Invalid base state: create() only supports plain objects, arrays, Set, Map or using mark() to mark the state as immutable.");return[j,k]}let S;try{S=p(j)}catch(e){throw M(d(j)),e}const R=e=>{const t=d(j);if(!f(e)){if(void 0!==e&&!O(e,j)&&(null==t?void 0:t.operated))throw new Error("Either the value is returned as a new non-draft value, or only the draft is modified without returning any value.");const n=null==e?void 0:e[r];if(n){const r=n[0];return m.strict&&"object"==typeof e&&null!==e&&H({rootDraft:t,value:e,useRawReturn:!0}),k([r])}if(void 0!==e)return"object"==typeof e&&null!==e&&H({rootDraft:t,value:e}),k([e])}if(e===j||void 0===e)return k([]);const n=d(e);if(m===n.options){if(n.operated)throw new Error("Cannot return a modified child draft.");return k([Q(e)])}return k([e])};return S instanceof Promise?S.then(R,(e=>{throw M(d(j)),e})):R(S)},ee=Z();const te=Object.prototype.constructor.toString();e.apply=function(e,n,r){let o;for(o=n.length-1;o>=0;o-=1){const{value:r,op:i,path:a}=n[o];if(!a.length&&i===t.Replace||""===a&&i===t.Add){e=r;break}}o>-1&&(n=n.slice(o+1));const i=e=>{n.forEach((n=>{const{path:r,op:o}=n,i=function(e){return Array.isArray(e)?e:e.split("/").map((e=>e.replace(/~1/g,"/").replace(/~0/g,"~"))).slice(1)}(r);let a=e;for(let e=0;e<i.length-1;e+=1){const t=v(a);let n=i[e];if("string"!=typeof n&&"number"!=typeof n&&(n=String(n)),(0===t||1===t)&&("__proto__"===n||"constructor"===n)||"function"==typeof a&&"prototype"===n)throw new Error("Patching reserved attributes like __proto__ and constructor is not allowed.");if(a=b(3===t?Array.from(a):a,n),"object"!=typeof a)throw new Error(`Cannot apply patch at '${i.join("/")}'.`)}const s=v(a),c=P(n.value),l=i[i.length-1];switch(o){case t.Replace:switch(s){case 2:return a.set(l,c);case 3:throw new Error("Cannot apply replace patch to set.");default:return a[l]=c}case t.Add:switch(s){case 1:return"-"===l?a.push(c):a.splice(l,0,c);case 2:return a.set(l,c);case 3:return a.add(c);default:return a[l]=c}case t.Remove:switch(s){case 1:return a.splice(l,1);case 2:return a.delete(l);case 3:return a.delete(n.value);default:return delete a[l]}default:throw new Error(`Unsupported patch operation: ${o}.`)}}))};if(!(null==r?void 0:r.mutable)){if(f(e)){if(void 0!==r)throw new Error("Cannot apply patches with options to a draft.");return i(e),e}return ee(e,i,Object.assign(Object.assign({},r),{enablePatches:!1}))}i(e)},e.castDraft=function(e){return e},e.castImmutable=function(e){return e},e.castMutable=function(e){return e},e.create=ee,e.current=Q,e.isDraft=f,e.isDraftable=h,e.makeCreator=Z,e.markSimpleObject=e=>{if((e=>{if(!e||"object"!=typeof e)return!1;const t=Object.getPrototypeOf(e);if(null===t)return!0;const n=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return n===Object||"function"==typeof n&&Function.toString.call(n)===te})(e))return i.immutable},e.original=function(e){const t=d(e);if(!t)throw new Error(`original() is only used for a draft, parameter: ${e}`);return t.original},e.rawReturn=function(e){if(0===arguments.length)throw new Error("rawReturn() must be called with a value.");if(arguments.length>1)throw new Error("rawReturn() must be called with one argument.");return{[r]:[e]}},e.unsafe=function(e){let t;V=!0;try{t=e()}finally{V=!1}return t}})); //# sourceMappingURL=mutative.umd.production.min.js.map