tracked-instance 1.0.5 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
-
1
+ <a href="https://www.npmjs.com/package/tracked-instance"><img src="https://img.shields.io/npm/v/tracked-instance.svg?sanitize=true" alt="Version"></a>
2
2
 
3
3
  # 🚀 Features
4
4
  - 🕶 Track what changed in your form
package/dist/index.js CHANGED
@@ -1,3 +1,48 @@
1
- export { useTrackedInstance } from './tracked-instance';
2
- export { useCollection } from './collection';
3
- //# sourceMappingURL=index.js.map
1
+ "use strict";(()=>{var Ir=typeof global=="object"&&global&&global.Object===Object&&global,nt=Ir;var kr=typeof self=="object"&&self&&self.Object===Object&&self,$r=nt||kr||Function("return this")(),L=$r;var Mr=L.Symbol,y=Mr;var ot=Object.prototype,Fr=ot.hasOwnProperty,Lr=ot.toString,ee=y?y.toStringTag:void 0;function Hr(e){var t=Fr.call(e,ee),r=e[ee];try{e[ee]=void 0;var n=!0}catch{}var o=Lr.call(e);return n&&(t?e[ee]=r:delete e[ee]),o}var st=Hr;var Ur=Object.prototype,jr=Ur.toString;function Br(e){return jr.call(e)}var it=Br;var Kr="[object Null]",Wr="[object Undefined]",at=y?y.toStringTag:void 0;function zr(e){return e==null?e===void 0?Wr:Kr:at&&at in Object(e)?st(e):it(e)}var H=zr;function Gr(e){return e!=null&&typeof e=="object"}var U=Gr;var Yr="[object Symbol]";function qr(e){return typeof e=="symbol"||U(e)&&H(e)==Yr}var j=qr;function Jr(e,t){for(var r=-1,n=e==null?0:e.length,o=Array(n);++r<n;)o[r]=t(e[r],r,e);return o}var lt=Jr;var Xr=Array.isArray,O=Xr;var Zr=1/0,ct=y?y.prototype:void 0,ft=ct?ct.toString:void 0;function ut(e){if(typeof e=="string")return e;if(O(e))return lt(e,ut)+"";if(j(e))return ft?ft.call(e):"";var t=e+"";return t=="0"&&1/e==-Zr?"-0":t}var pt=ut;function Qr(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var S=Qr;var en="[object AsyncFunction]",tn="[object Function]",rn="[object GeneratorFunction]",nn="[object Proxy]";function on(e){if(!S(e))return!1;var t=H(e);return t==tn||t==rn||t==en||t==nn}var dt=on;var sn=L["__core-js_shared__"],ae=sn;var ht=function(){var e=/[^.]+$/.exec(ae&&ae.keys&&ae.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function an(e){return!!ht&&ht in e}var mt=an;var ln=Function.prototype,cn=ln.toString;function fn(e){if(e!=null){try{return cn.call(e)}catch{}try{return e+""}catch{}}return""}var gt=fn;var un=/[\\^$.*+?()[\]{}|]/g,pn=/^\[object .+?Constructor\]$/,dn=Function.prototype,hn=Object.prototype,mn=dn.toString,gn=hn.hasOwnProperty,_n=RegExp("^"+mn.call(gn).replace(un,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function yn(e){if(!S(e)||mt(e))return!1;var t=dt(e)?_n:pn;return t.test(gt(e))}var _t=yn;function En(e,t){return e?.[t]}var yt=En;function xn(e,t){var r=yt(e,t);return _t(r)?r:void 0}var B=xn;var vn=function(){try{var e=B(Object,"defineProperty");return e({},"",{}),e}catch{}}(),Re=vn;var Nn=9007199254740991,On=/^(?:0|[1-9]\d*)$/;function bn(e,t){var r=typeof e;return t=t??Nn,!!t&&(r=="number"||r!="symbol"&&On.test(e))&&e>-1&&e%1==0&&e<t}var le=bn;function wn(e,t,r){t=="__proto__"&&Re?Re(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var Et=wn;function Dn(e,t){return e===t||e!==e&&t!==t}var ce=Dn;var Tn=Object.prototype,Vn=Tn.hasOwnProperty;function Cn(e,t,r){var n=e[t];(!(Vn.call(e,t)&&ce(n,r))||r===void 0&&!(t in e))&&Et(e,t,r)}var xt=Cn;var An=9007199254740991;function Sn(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=An}var vt=Sn;var Rn="[object Arguments]";function Pn(e){return U(e)&&H(e)==Rn}var Pe=Pn;var Nt=Object.prototype,In=Nt.hasOwnProperty,kn=Nt.propertyIsEnumerable,$n=Pe(function(){return arguments}())?Pe:function(e){return U(e)&&In.call(e,"callee")&&!kn.call(e,"callee")},Ot=$n;var Mn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Fn=/^\w*$/;function Ln(e,t){if(O(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||j(e)?!0:Fn.test(e)||!Mn.test(e)||t!=null&&e in Object(t)}var bt=Ln;var Hn=B(Object,"create"),E=Hn;function Un(){this.__data__=E?E(null):{},this.size=0}var wt=Un;function jn(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var Dt=jn;var Bn="__lodash_hash_undefined__",Kn=Object.prototype,Wn=Kn.hasOwnProperty;function zn(e){var t=this.__data__;if(E){var r=t[e];return r===Bn?void 0:r}return Wn.call(t,e)?t[e]:void 0}var Tt=zn;var Gn=Object.prototype,Yn=Gn.hasOwnProperty;function qn(e){var t=this.__data__;return E?t[e]!==void 0:Yn.call(t,e)}var Vt=qn;var Jn="__lodash_hash_undefined__";function Xn(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=E&&t===void 0?Jn:t,this}var Ct=Xn;function K(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}K.prototype.clear=wt;K.prototype.delete=Dt;K.prototype.get=Tt;K.prototype.has=Vt;K.prototype.set=Ct;var Ie=K;function Zn(){this.__data__=[],this.size=0}var At=Zn;function Qn(e,t){for(var r=e.length;r--;)if(ce(e[r][0],t))return r;return-1}var b=Qn;var eo=Array.prototype,to=eo.splice;function ro(e){var t=this.__data__,r=b(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():to.call(t,r,1),--this.size,!0}var St=ro;function no(e){var t=this.__data__,r=b(t,e);return r<0?void 0:t[r][1]}var Rt=no;function oo(e){return b(this.__data__,e)>-1}var Pt=oo;function so(e,t){var r=this.__data__,n=b(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var It=so;function W(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}W.prototype.clear=At;W.prototype.delete=St;W.prototype.get=Rt;W.prototype.has=Pt;W.prototype.set=It;var kt=W;var io=B(L,"Map"),$t=io;function ao(){this.size=0,this.__data__={hash:new Ie,map:new($t||kt),string:new Ie}}var Mt=ao;function lo(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var Ft=lo;function co(e,t){var r=e.__data__;return Ft(t)?r[typeof t=="string"?"string":"hash"]:r.map}var w=co;function fo(e){var t=w(this,e).delete(e);return this.size-=t?1:0,t}var Lt=fo;function uo(e){return w(this,e).get(e)}var Ht=uo;function po(e){return w(this,e).has(e)}var Ut=po;function ho(e,t){var r=w(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}var jt=ho;function z(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}z.prototype.clear=Mt;z.prototype.delete=Lt;z.prototype.get=Ht;z.prototype.has=Ut;z.prototype.set=jt;var ke=z;var mo="Expected a function";function $e(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(mo);var r=function(){var n=arguments,o=t?t.apply(this,n):n[0],s=r.cache;if(s.has(o))return s.get(o);var a=e.apply(this,n);return r.cache=s.set(o,a)||s,a};return r.cache=new($e.Cache||ke),r}$e.Cache=ke;var Bt=$e;var go=500;function _o(e){var t=Bt(e,function(n){return r.size===go&&r.clear(),n}),r=t.cache;return t}var Kt=_o;var yo=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Eo=/\\(\\)?/g,xo=Kt(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(yo,function(r,n,o,s){t.push(o?s.replace(Eo,"$1"):n||r)}),t}),Wt=xo;function vo(e){return e==null?"":pt(e)}var zt=vo;function No(e,t){return O(e)?e:bt(e,t)?[e]:Wt(zt(e))}var D=No;var Oo=1/0;function bo(e){if(typeof e=="string"||j(e))return e;var t=e+"";return t=="0"&&1/e==-Oo?"-0":t}var T=bo;function wo(e,t){t=D(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[T(t[r++])];return r&&r==n?e:void 0}var fe=wo;function Do(e,t,r){var n=e==null?void 0:fe(e,t);return n===void 0?r:n}var G=Do;function To(e,t,r){var n=-1,o=e.length;t<0&&(t=-t>o?0:o+t),r=r>o?o:r,r<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var s=Array(o);++n<o;)s[n]=e[n+t];return s}var Gt=To;function Vo(e,t,r){t=D(t,e);for(var n=-1,o=t.length,s=!1;++n<o;){var a=T(t[n]);if(!(s=e!=null&&r(e,a)))break;e=e[a]}return s||++n!=o?s:(o=e==null?0:e.length,!!o&&vt(o)&&le(a,o)&&(O(e)||Ot(e)))}var Yt=Vo;function Co(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}var qt=Co;var Ao=Object.prototype,So=Ao.hasOwnProperty;function Ro(e,t){return e!=null&&So.call(e,t)}var Jt=Ro;function Po(e,t){return e!=null&&Yt(e,t,Jt)}var Me=Po;function Io(e,t){return t.length<2?e:fe(e,Gt(t,0,-1))}var Xt=Io;function ko(e,t){return t=D(t,e),e=Xt(e,t),e==null||delete e[T(qt(t))]}var Zt=ko;function $o(e,t,r,n){if(!S(e))return e;t=D(t,e);for(var o=-1,s=t.length,a=s-1,i=e;i!=null&&++o<s;){var c=T(t[o]),l=r;if(c==="__proto__"||c==="constructor"||c==="prototype")return e;if(o!=a){var f=i[c];l=n?n(f,c,i):void 0,l===void 0&&(l=S(f)?f:le(t[o+1])?[]:{})}xt(i,c,l),i=i[c]}return e}var Qt=$o;function Mo(e,t,r){return e==null?e:Qt(e,t,r)}var te=Mo;function Fo(e,t){return e==null?!0:Zt(e,t)}var ue=Fo;function pe(e,t){let r=new Set(e.split(","));return t?n=>r.has(n.toLowerCase()):n=>r.has(n)}var Fe=()=>{},tr=()=>!1;var Lo=Object.prototype.hasOwnProperty,Y=(e,t)=>Lo.call(e,t),x=Array.isArray,q=e=>or(e)==="[object Map]";var R=e=>typeof e=="function",rr=e=>typeof e=="string",re=e=>typeof e=="symbol",P=e=>e!==null&&typeof e=="object",nr=e=>(P(e)||R(e))&&R(e.then)&&R(e.catch),Ho=Object.prototype.toString,or=e=>Ho.call(e),Le=e=>or(e).slice(8,-1);var de=e=>rr(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e;var he=e=>{let t=Object.create(null);return r=>t[r]||(t[r]=e(r))},Uo=/-(\w)/g,jo=he(e=>e.replace(Uo,(t,r)=>r?r.toUpperCase():"")),Bo=/\B([A-Z])/g,Ko=he(e=>e.replace(Bo,"-$1").toLowerCase()),sr=he(e=>e.charAt(0).toUpperCase()+e.slice(1)),Wo=he(e=>e?`on${sr(e)}`:""),V=(e,t)=>!Object.is(e,t);var er,ir=()=>er||(er=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});var zo="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly";var Go=pe(zo+",async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected");var Jo;function Xo(e,t=Jo){t&&t.active&&t.effects.push(e)}var I,ne=class{constructor(t,r,n,o){this.fn=t,this.trigger=r,this.scheduler=n,this.active=!0,this.deps=[],this._dirtyLevel=4,this._trackId=0,this._runnings=0,this._shouldSchedule=!1,this._depsLength=0,Xo(this,o)}get dirty(){if(this._dirtyLevel===2||this._dirtyLevel===3){this._dirtyLevel=1,Ne();for(let t=0;t<this._depsLength;t++){let r=this.deps[t];if(r.computed&&(Zo(r.computed),this._dirtyLevel>=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),Oe()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=A,r=I;try{return A=!0,I=this,this._runnings++,ar(this),this.fn()}finally{lr(this),this._runnings--,I=r,A=t}}stop(){var t;this.active&&(ar(this),lr(this),(t=this.onStop)==null||t.call(this),this.active=!1)}};function Zo(e){return e.value}function ar(e){e._trackId++,e._depsLength=0}function lr(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t<e.deps.length;t++)hr(e.deps[t],e);e.deps.length=e._depsLength}}function hr(e,t){let r=e.get(t);r!==void 0&&t._trackId!==r&&(e.delete(t),e.size===0&&e.cleanup())}var A=!0,He=0,mr=[];function Ne(){mr.push(A),A=!1}function Oe(){let e=mr.pop();A=e===void 0?!0:e}function Ye(){He++}function qe(){for(He--;!He&&Ue.length;)Ue.shift()()}function gr(e,t,r){var n;if(t.get(e)!==e._trackId){t.set(e,e._trackId);let o=e.deps[e._depsLength];o!==t?(o&&hr(o,e),e.deps[e._depsLength++]=t):e._depsLength++}}var Ue=[];function _r(e,t,r){var n;Ye();for(let o of e.keys()){let s;o._dirtyLevel<t&&(s??(s=e.get(o)===o._trackId))&&(o._shouldSchedule||(o._shouldSchedule=o._dirtyLevel===0),o._dirtyLevel=t),o._shouldSchedule&&(s??(s=e.get(o)===o._trackId))&&(o.trigger(),(!o._runnings||o.allowRecurse)&&o._dirtyLevel!==2&&(o._shouldSchedule=!1,o.scheduler&&Ue.push(o.scheduler)))}qe()}var yr=(e,t)=>{let r=new Map;return r.cleanup=e,r.computed=t,r},je=new WeakMap,k=Symbol(""),Be=Symbol("");function h(e,t,r){if(A&&I){let n=je.get(e);n||je.set(e,n=new Map);let o=n.get(r);o||n.set(r,o=yr(()=>n.delete(r))),gr(I,o,void 0)}}function v(e,t,r,n,o,s){let a=je.get(e);if(!a)return;let i=[];if(t==="clear")i=[...a.values()];else if(r==="length"&&x(e)){let c=Number(n);a.forEach((l,f)=>{(f==="length"||!re(f)&&f>=c)&&i.push(l)})}else switch(r!==void 0&&i.push(a.get(r)),t){case"add":x(e)?de(r)&&i.push(a.get("length")):(i.push(a.get(k)),q(e)&&i.push(a.get(Be)));break;case"delete":x(e)||(i.push(a.get(k)),q(e)&&i.push(a.get(Be)));break;case"set":q(e)&&i.push(a.get(k));break}Ye();for(let c of i)c&&_r(c,4,void 0);qe()}var Qo=pe("__proto__,__v_isRef,__isVue"),Er=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(re)),cr=es();function es(){let e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...r){let n=d(this);for(let s=0,a=this.length;s<a;s++)h(n,"get",s+"");let o=n[t](...r);return o===-1||o===!1?n[t](...r.map(d)):o}}),["push","pop","shift","unshift","splice"].forEach(t=>{e[t]=function(...r){Ne(),Ye();let n=d(this)[t].apply(this,r);return qe(),Oe(),n}}),e}function ts(e){let t=d(this);return h(t,"has",e),t.hasOwnProperty(e)}var xe=class{constructor(t=!1,r=!1){this._isReadonly=t,this._shallow=r}get(t,r,n){let o=this._isReadonly,s=this._shallow;if(r==="__v_isReactive")return!o;if(r==="__v_isReadonly")return o;if(r==="__v_isShallow")return s;if(r==="__v_raw")return n===(o?s?ps:Nr:s?us:vr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;let a=x(t);if(!o){if(a&&Y(cr,r))return Reflect.get(cr,r,n);if(r==="hasOwnProperty")return ts}let i=Reflect.get(t,r,n);return(re(r)?Er.has(r):Qo(r))||(o||h(t,"get",r),s)?i:Z(i)?a&&de(r)?i:i.value:P(i)?o?Xe(i):we(i):i}},Ke=class extends xe{constructor(t=!1){super(!1,t)}set(t,r,n,o){let s=t[r];if(!this._shallow){let c=X(s);if(!De(n)&&!X(n)&&(s=d(s),n=d(n)),!x(t)&&Z(s)&&!Z(n))return c?!1:(s.value=n,!0)}let a=x(t)&&de(r)?Number(r)<t.length:Y(t,r),i=Reflect.set(t,r,n,o);return t===d(o)&&(a?V(n,s)&&v(t,"set",r,n,s):v(t,"add",r,n)),i}deleteProperty(t,r){let n=Y(t,r),o=t[r],s=Reflect.deleteProperty(t,r);return s&&n&&v(t,"delete",r,void 0,o),s}has(t,r){let n=Reflect.has(t,r);return(!re(r)||!Er.has(r))&&h(t,"has",r),n}ownKeys(t){return h(t,"iterate",x(t)?"length":k),Reflect.ownKeys(t)}},We=class extends xe{constructor(t=!1){super(!0,t)}set(t,r){return!0}deleteProperty(t,r){return!0}},rs=new Ke,ns=new We;var Je=e=>e,be=e=>Reflect.getPrototypeOf(e);function me(e,t,r=!1,n=!1){e=e.__v_raw;let o=d(e),s=d(t);r||(V(t,s)&&h(o,"get",t),h(o,"get",s));let{has:a}=be(o),i=n?Je:r?Ze:oe;if(a.call(o,t))return i(e.get(t));if(a.call(o,s))return i(e.get(s));e!==o&&e.get(t)}function ge(e,t=!1){let r=this.__v_raw,n=d(r),o=d(e);return t||(V(e,o)&&h(n,"has",e),h(n,"has",o)),e===o?r.has(e):r.has(e)||r.has(o)}function _e(e,t=!1){return e=e.__v_raw,!t&&h(d(e),"iterate",k),Reflect.get(e,"size",e)}function fr(e){e=d(e);let t=d(this);return be(t).has.call(t,e)||(t.add(e),v(t,"add",e,e)),this}function ur(e,t){t=d(t);let r=d(this),{has:n,get:o}=be(r),s=n.call(r,e);s||(e=d(e),s=n.call(r,e));let a=o.call(r,e);return r.set(e,t),s?V(t,a)&&v(r,"set",e,t,a):v(r,"add",e,t),this}function pr(e){let t=d(this),{has:r,get:n}=be(t),o=r.call(t,e);o||(e=d(e),o=r.call(t,e));let s=n?n.call(t,e):void 0,a=t.delete(e);return o&&v(t,"delete",e,void 0,s),a}function dr(){let e=d(this),t=e.size!==0,r=void 0,n=e.clear();return t&&v(e,"clear",void 0,void 0,r),n}function ye(e,t){return function(n,o){let s=this,a=s.__v_raw,i=d(a),c=t?Je:e?Ze:oe;return!e&&h(i,"iterate",k),a.forEach((l,f)=>n.call(o,c(l),c(f),s))}}function Ee(e,t,r){return function(...n){let o=this.__v_raw,s=d(o),a=q(s),i=e==="entries"||e===Symbol.iterator&&a,c=e==="keys"&&a,l=o[e](...n),f=r?Je:t?Ze:oe;return!t&&h(s,"iterate",c?Be:k),{next(){let{value:u,done:p}=l.next();return p?{value:u,done:p}:{value:i?[f(u[0]),f(u[1])]:f(u),done:p}},[Symbol.iterator](){return this}}}}function C(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function os(){let e={get(s){return me(this,s)},get size(){return _e(this)},has:ge,add:fr,set:ur,delete:pr,clear:dr,forEach:ye(!1,!1)},t={get(s){return me(this,s,!1,!0)},get size(){return _e(this)},has:ge,add:fr,set:ur,delete:pr,clear:dr,forEach:ye(!1,!0)},r={get(s){return me(this,s,!0)},get size(){return _e(this,!0)},has(s){return ge.call(this,s,!0)},add:C("add"),set:C("set"),delete:C("delete"),clear:C("clear"),forEach:ye(!0,!1)},n={get(s){return me(this,s,!0,!0)},get size(){return _e(this,!0)},has(s){return ge.call(this,s,!0)},add:C("add"),set:C("set"),delete:C("delete"),clear:C("clear"),forEach:ye(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(s=>{e[s]=Ee(s,!1,!1),r[s]=Ee(s,!0,!1),t[s]=Ee(s,!1,!0),n[s]=Ee(s,!0,!0)}),[e,r,t,n]}var[ss,is,as,ls]=os();function xr(e,t){let r=t?e?ls:as:e?is:ss;return(n,o,s)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?n:Reflect.get(Y(r,o)&&o in n?r:n,o,s)}var cs={get:xr(!1,!1)};var fs={get:xr(!0,!1)};var vr=new WeakMap,us=new WeakMap,Nr=new WeakMap,ps=new WeakMap;function ds(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function hs(e){return e.__v_skip||!Object.isExtensible(e)?0:ds(Le(e))}function we(e){return X(e)?e:Or(e,!1,rs,cs,vr)}function Xe(e){return Or(e,!0,ns,fs,Nr)}function Or(e,t,r,n,o){if(!P(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;let s=o.get(e);if(s)return s;let a=hs(e);if(a===0)return e;let i=new Proxy(e,a===2?n:r);return o.set(e,i),i}function X(e){return!!(e&&e.__v_isReadonly)}function De(e){return!!(e&&e.__v_isShallow)}function d(e){let t=e&&e.__v_raw;return t?d(t):e}var oe=e=>P(e)?we(e):e,Ze=e=>P(e)?Xe(e):e;var ve=class{constructor(t,r,n,o){this._setter=r,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new ne(()=>t(this._value),()=>J(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=n}get value(){let t=d(this);return(!t._cacheable||t.effect.dirty)&&V(t._value,t._value=t.effect.run())&&J(t,4),Qe(t),t.effect._dirtyLevel>=2&&J(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}};function br(e,t,r=!1){let n,o,s=R(e);return s?(n=e,o=Fe):(n=e.get,o=e.set),new ve(n,o,s||!o,r)}function Qe(e){var t;A&&I&&(e=d(e),gr(I,(t=e.dep)!=null?t:e.dep=yr(()=>e.dep=void 0,e instanceof ve?e:void 0),void 0))}function J(e,t=4,r){e=d(e);let n=e.dep;n&&_r(n,t,void 0)}function Z(e){return!!(e&&e.__v_isRef===!0)}function $(e){return wr(e,!1)}function et(e){return wr(e,!0)}function wr(e,t){return Z(e)?e:new ze(e,t)}var ze=class{constructor(t,r){this.__v_isShallow=r,this.dep=void 0,this.__v_isRef=!0,this._rawValue=r?t:d(t),this._value=r?t:oe(t)}get value(){return Qe(this),this._value}set value(t){let r=this.__v_isShallow||De(t)||X(t);t=r?t:d(t),V(t,this._rawValue)&&(this._rawValue=t,this._value=r?t:oe(t),J(this,4,t))}};function Q(e){J(e,4,void 0)}var Ge=class{constructor(t){this.dep=void 0,this.__v_isRef=!0;let{get:r,set:n}=t(()=>Qe(this),()=>J(this));this._get=r,this._set=n}get value(){return this._get()}set value(t){this._set(t)}};function Te(e){return new Ge(e)}function Dr(e,t,r,n){try{return n?e(...n):e()}catch(o){Vr(o,t,r)}}function Tr(e,t,r,n){if(R(e)){let s=Dr(e,t,r,n);return s&&nr(s)&&s.catch(a=>{Vr(a,t,r)}),s}let o=[];for(let s=0;s<e.length;s++)o.push(Tr(e[s],t,r,n));return o}function Vr(e,t,r,n=!0){let o=t?t.vnode:null;if(t){let s=t.parent,a=t.proxy,i=`https://vuejs.org/error-reference/#runtime-${r}`;for(;s;){let l=s.ec;if(l){for(let f=0;f<l.length;f++)if(l[f](e,a,i)===!1)return}s=s.parent}let c=t.appContext.config.errorHandler;if(c){Dr(c,null,10,[e,a,i]);return}}Ns(e,r,o,n)}function Ns(e,t,r,n=!0){console.error(e)}var Dc=Symbol.for("v-ndc");var Tc=Symbol.for("v-scx");var Vc=Symbol("_leaveCb"),Cc=Symbol("_enterCb");function Os(e,t,r=Ve,n=!1){if(r){let o=r[e]||(r[e]=[]),s=t.__weh||(t.__weh=(...a)=>{if(r.isUnmounted)return;Ne();let i=Ds(r),c=Tr(t,r,e,a);return i(),Oe(),c});return n?o.unshift(s):o.push(s),s}}var N=e=>(t,r=Ve)=>(!rt||e==="sp")&&Os(e,(...n)=>t(...n),r),Ac=N("bm"),Sc=N("m"),Rc=N("bu"),Pc=N("u"),Ic=N("bum"),kc=N("um"),$c=N("sp"),Mc=N("rtg"),Fc=N("rtc");function bs(){return{app:null,config:{isNativeTag:tr,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}var Lc=Symbol.for("v-fgt"),Hc=Symbol.for("v-txt"),Uc=Symbol.for("v-cmt"),jc=Symbol.for("v-stc");var Bc=bs();var Ve=null;var tt,ws;{let e=ir(),t=(r,n)=>{let o;return(o=e[r])||(o=e[r]=[]),o.push(n),s=>{o.length>1?o.forEach(a=>a(s)):o[0](s)}};tt=t("__VUE_INSTANCE_SETTERS__",r=>Ve=r),ws=t("__VUE_SSR_SETTERS__",r=>rt=r)}var Ds=e=>{let t=Ve;return tt(e),e.scope.on(),()=>{e.scope.off(),tt(t)}};var rt=!1;var M=(e,t)=>br(e,t,rt);var g=e=>typeof e=="object"&&e!==null&&!Array.isArray(e)&&!(e instanceof Date)&&!(e instanceof File)&&!(e instanceof Map)&&!(e instanceof Set),Ts=e=>Object.keys(e).length===0,Cr=function*(e,t={}){let{goDeepCondition:r=(s,a)=>g(a),includeParent:n=!1}=t,o=function*(s,a){for(let[i,c]of Object.entries(a)){let l=s.concat(i);r(l,c)?(n&&(yield[l,c]),yield*o(l,c)):yield[l,c]}};yield*o([],e)},Ar=(e,t)=>Te((r,n)=>{let o=(a,i=[])=>{let c=t(i);return new Proxy(a,{...c,get(l,f,u){r();let p=c.get?c.get(l,f,u):Reflect.get(l,f,u);return g(p)||Array.isArray(p)?o(p,i.concat({target:l,property:f,receiver:u})):p},set(l,f,u,p){let m=c.set?c.set(l,f,u,p):Reflect.set(l,f,u,p);return n(),m},deleteProperty(l,f){let u=c.deleteProperty?c.deleteProperty(l,f):Reflect.deleteProperty(l,f);return n(),u}})},s=o(e);return{get(){return r(),s},set(a){s=o(a),n()}}}),F=class{length;constructor(t){this.length=t,Object.defineProperty(this,"length",{enumerable:!1,value:t})}},Sr=(e,t)=>{let r=e;for(let{target:o,property:s}of t.slice(0,-1))if(s in r)if(g(r[s])||r[s]instanceof F)r=r[s];else return;else Array.isArray(o[s])?r=r[s]=new F(o[s].length):g(o[s])&&(r=r[s]={});let n=t.at(-1);r[n.property]=n.target[n.property]},Ce=(e,t,r)=>{let n=t.map(c=>c.property),o=G(e,n),s=(c,l)=>{let f=new Set;if(c)for(let p of Object.keys(c))f.add(p);if(l)for(let p of Object.keys(l))f.add(p);let u=Array.from(f).filter(p=>!Object.keys(r).includes(p));for(let p of u)Ce(e,t.concat({target:l||r,property:p}),void 0)},a=t.at(-1),i=a.target[a.property];if(g(r)&&(g(o)||g(i))){s(o,i);for(let c of Object.keys(r))Ce(e,t.concat({target:i||r,property:c}),r[c])}else if(Array.isArray(r)&&(o instanceof F||Array.isArray(i))){s(o,i);for(let c of r.keys())Ce(e,t.concat({target:i||r,property:c.toString()}),r[c])}else Me(e,n)?o===r&&ue(e,n):i!==r&&Sr(e,t)},Ae=e=>{let t=Ar({},l=>({deleteProperty(f,u){let p=Reflect.deleteProperty(f,u);if(l.length){let m=l.at(-1);Ts(f)&&delete m.receiver[m.property]}return p}})),r=Ar({root:e},l=>({set(f,u,p,m){let se=l.concat({target:f,property:u,receiver:m}),Se=f[u],Rr=()=>{let Pr=G(t.value,se.map(_=>_.property)),{length:ie}=Pr||Se;if(p<ie)for(let _=p;_<ie;_++)delete m[_];else if(ie<p)for(let _=ie;_<p;_++)m[_]=void 0};return Array.isArray(f)&&u==="length"?p!==Se&&Rr():Ce(t.value,se,p),Reflect.set(f,u,p,m)},deleteProperty(f,u){return Sr(t.value,l.concat({target:f,property:u})),Reflect.deleteProperty(f,u)}})),n=M({get:()=>r.value.root,set:l=>r.value.root=l}),o=M(()=>Object.keys(t.value).length>0),s=M(()=>{let l={},f=Cr(t.value,{goDeepCondition:(u,p)=>{let m=G(r.value,u),se=p instanceof F&&Array.isArray(m);return g(p)&&g(m)||se}});for(let[u]of f){let p=G(r.value,u);te(l,u,p)}return l}),a=M(()=>s.value.root);return{data:n,changedData:a,isDirty:o,loadData:l=>{r.value={root:l},t.value={}},reset:()=>{let l=JSON.parse(JSON.stringify(r.value));for(let[f,u]of Cr(t.value,{includeParent:!0}))u instanceof F?te(l,f.concat("length"),u.length):g(u)||(u===void 0?ue(l,f):te(l,f,u));r.value=l,t.value={}}}};var Vs=(e=()=>({}))=>{let t=et([]),r=M(()=>t.value.some(({instance:i,isRemoved:c,isNew:l})=>i.isDirty.value||l.value||c.value));return{items:t,isDirty:r,add:(i,c=t.value.length)=>{let l=Ae(i),f={isRemoved:$(!1),isNew:$(!0),instance:l,meta:e(l)};return t.value.splice(c,0,f),Q(t),f},remove:(i,c=!1)=>{t.value[i].isNew.value||c?(t.value.splice(i,1),Q(t)):t.value[i].isRemoved.value=!0},loadData:i=>{t.value=i.map(c=>{let l=Ae(c);return{isNew:$(!1),isRemoved:$(!1),instance:l,meta:e(l)}}),Q(t)},reset:()=>{t.value=t.value.filter(({isNew:i})=>!i.value);for(let i of t.value)i.isRemoved.value=!1,i.instance.reset();Q(t)}}};})();
2
+ /*! Bundled license information:
3
+
4
+ lodash-es/lodash.js:
5
+ (**
6
+ * @license
7
+ * Lodash (Custom Build) <https://lodash.com/>
8
+ * Build: `lodash modularize exports="es" -o ./`
9
+ * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
10
+ * Released under MIT license <https://lodash.com/license>
11
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
12
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
13
+ *)
14
+
15
+ @vue/shared/dist/shared.esm-bundler.js:
16
+ (**
17
+ * @vue/shared v3.4.19
18
+ * (c) 2018-present Yuxi (Evan) You and Vue contributors
19
+ * @license MIT
20
+ **)
21
+
22
+ @vue/reactivity/dist/reactivity.esm-bundler.js:
23
+ (**
24
+ * @vue/reactivity v3.4.19
25
+ * (c) 2018-present Yuxi (Evan) You and Vue contributors
26
+ * @license MIT
27
+ **)
28
+
29
+ @vue/runtime-core/dist/runtime-core.esm-bundler.js:
30
+ (**
31
+ * @vue/runtime-core v3.4.19
32
+ * (c) 2018-present Yuxi (Evan) You and Vue contributors
33
+ * @license MIT
34
+ **)
35
+
36
+ @vue/runtime-core/dist/runtime-core.esm-bundler.js:
37
+ (*! #__NO_SIDE_EFFECTS__ *)
38
+
39
+ @vue/runtime-core/dist/runtime-core.esm-bundler.js:
40
+ (*! #__NO_SIDE_EFFECTS__ *)
41
+
42
+ vue/dist/vue.runtime.esm-bundler.js:
43
+ (**
44
+ * vue v3.4.19
45
+ * (c) 2018-present Yuxi (Evan) You and Vue contributors
46
+ * @license MIT
47
+ **)
48
+ */
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "tracked-instance",
3
+ "version": "1.0.8",
3
4
  "description": "Build large forms and track all changes",
4
5
  "type": "module",
5
6
  "scripts": {
6
- "build": "tsc",
7
+ "build": "tsc && esbuild ./dist/build/index.js --bundle --minify --outfile=./dist/index.js && rm -rf ./dist/build",
7
8
  "test": "vitest run"
8
9
  },
9
10
  "main": "./dist/index.js",
10
- "types": "./dist/index.d.ts",
11
+ "types": "./dist/types/index.d.ts",
11
12
  "files": [
12
- "dist",
13
- "src"
13
+ "dist"
14
14
  ],
15
15
  "devDependencies": {
16
16
  "@types/lodash-es": "^4.17.12",
@@ -40,6 +40,5 @@
40
40
  "collection",
41
41
  "useTrackedInstance",
42
42
  "useCollection"
43
- ],
44
- "version": "1.0.5"
43
+ ]
45
44
  }
@@ -1,57 +0,0 @@
1
- import { computed, shallowRef, triggerRef, ref } from 'vue';
2
- import { useTrackedInstance } from './tracked-instance';
3
- export const useCollection = (createItemMeta = () => ({})) => {
4
- const items = shallowRef([]);
5
- const isDirty = computed(() => items.value.some(({ instance, isRemoved, isNew }) => instance.isDirty.value || isNew.value || isRemoved.value));
6
- const add = (item, index = items.value.length) => {
7
- const instance = useTrackedInstance(item);
8
- const newItem = {
9
- isRemoved: ref(false),
10
- isNew: ref(true),
11
- instance,
12
- meta: createItemMeta(instance)
13
- };
14
- items.value.splice(index, 0, newItem);
15
- triggerRef(items);
16
- return newItem;
17
- };
18
- const remove = (index, isHardRemove = false) => {
19
- const item = items.value[index];
20
- if (item.isNew.value || isHardRemove) {
21
- items.value.splice(index, 1);
22
- triggerRef(items);
23
- }
24
- else {
25
- items.value[index].isRemoved.value = true;
26
- }
27
- };
28
- const loadData = (loadedItems) => {
29
- items.value = loadedItems.map((item) => {
30
- const instance = useTrackedInstance(item);
31
- return {
32
- isNew: ref(false),
33
- isRemoved: ref(false),
34
- instance,
35
- meta: createItemMeta(instance)
36
- };
37
- });
38
- triggerRef(items);
39
- };
40
- const reset = () => {
41
- items.value = items.value.filter(({ isNew }) => !isNew.value);
42
- for (const item of items.value) {
43
- item.isRemoved.value = false;
44
- item.instance.reset();
45
- }
46
- triggerRef(items);
47
- };
48
- return {
49
- items,
50
- isDirty,
51
- add,
52
- remove,
53
- loadData,
54
- reset
55
- };
56
- };
57
- //# sourceMappingURL=collection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAA"}
@@ -1,266 +0,0 @@
1
- import { get, has, set, unset } from 'lodash-es';
2
- import { computed, customRef } from 'vue';
3
- const isObject = (value) => typeof value === 'object' &&
4
- value !== null &&
5
- !Array.isArray(value) &&
6
- !(value instanceof Date) &&
7
- !(value instanceof File) &&
8
- !(value instanceof Map) &&
9
- !(value instanceof Set);
10
- const isEmpty = (value) => Object.keys(value).length === 0;
11
- const iterateObject = function* (source, params = {}) {
12
- const { goDeepCondition = (_, value) => isObject(value), includeParent = false } = params;
13
- const iterateObjectDeep = function* (path, obj) {
14
- for (const [key, value] of Object.entries(obj)) {
15
- const currentPath = path.concat(key);
16
- if (goDeepCondition(currentPath, value)) {
17
- if (includeParent) {
18
- yield [currentPath, value];
19
- }
20
- yield* iterateObjectDeep(currentPath, value);
21
- }
22
- else {
23
- yield [currentPath, value];
24
- }
25
- }
26
- };
27
- yield* iterateObjectDeep([], source);
28
- };
29
- const createNestedRef = (source, handler) => customRef((track, trigger) => {
30
- // make nested objects and arrays is reactive
31
- const createProxy = (source, path = []) => {
32
- const currentProxyHandler = handler(path);
33
- return new Proxy(source, {
34
- ...currentProxyHandler,
35
- get(target, property, receiver) {
36
- track();
37
- const result = currentProxyHandler.get
38
- ? currentProxyHandler.get(target, property, receiver)
39
- : Reflect.get(target, property, receiver);
40
- if (isObject(result) || Array.isArray(result)) {
41
- return createProxy(result, path.concat({ target, property, receiver }));
42
- }
43
- return result;
44
- },
45
- set(target, property, value, receiver) {
46
- const result = currentProxyHandler.set
47
- ? currentProxyHandler.set(target, property, value, receiver)
48
- : Reflect.set(target, property, value, receiver);
49
- trigger();
50
- return result;
51
- },
52
- deleteProperty(target, property) {
53
- const result = currentProxyHandler.deleteProperty
54
- ? currentProxyHandler.deleteProperty(target, property)
55
- : Reflect.deleteProperty(target, property);
56
- trigger();
57
- return result;
58
- }
59
- });
60
- };
61
- let value = createProxy(source);
62
- return {
63
- get() {
64
- track();
65
- return value;
66
- },
67
- set(newValue) {
68
- value = createProxy(newValue);
69
- trigger();
70
- }
71
- };
72
- });
73
- // array values in originalData should store in default object to avoid removing items on change length
74
- class ArrayInOriginalData {
75
- length;
76
- constructor(length) {
77
- this.length = length;
78
- // length should not include in iterations
79
- Object.defineProperty(this, 'length', {
80
- enumerable: false,
81
- value: length
82
- });
83
- }
84
- }
85
- const setOriginalDataValue = (originalData, path) => {
86
- let originalDataTarget = originalData;
87
- for (const { target: oldValueParent, property } of path.slice(0, -1)) {
88
- if (property in originalDataTarget) {
89
- if (isObject(originalDataTarget[property]) || originalDataTarget[property] instanceof ArrayInOriginalData) {
90
- originalDataTarget = originalDataTarget[property];
91
- }
92
- else {
93
- // cancel set originalData value because in this case we try to replace primitive value by object or array value
94
- return;
95
- }
96
- }
97
- else {
98
- if (Array.isArray(oldValueParent[property])) {
99
- originalDataTarget = originalDataTarget[property] = new ArrayInOriginalData(oldValueParent[property].length);
100
- }
101
- else if (isObject(oldValueParent[property])) {
102
- originalDataTarget = originalDataTarget[property] = {};
103
- }
104
- }
105
- }
106
- const lastItem = path.at(-1);
107
- originalDataTarget[lastItem.property] = lastItem.target[lastItem.property];
108
- };
109
- const snapshotValueToOriginalData = (originalData, path, value) => {
110
- const pathAsString = path.map((i) => i.property);
111
- const valueInOriginalData = get(originalData, pathAsString);
112
- const markRemovedFieldsAsUndefined = (valueInOriginalData, oldValue) => {
113
- const keysSet = new Set();
114
- if (valueInOriginalData) {
115
- for (const key of Object.keys(valueInOriginalData)) {
116
- keysSet.add(key);
117
- }
118
- }
119
- if (oldValue) {
120
- for (const key of Object.keys(oldValue)) {
121
- keysSet.add(key);
122
- }
123
- }
124
- const keys = Array.from(keysSet).filter((key) => !Object.keys(value).includes(key));
125
- for (const key of keys) {
126
- snapshotValueToOriginalData(originalData, path.concat({ target: oldValue || value, property: key }), undefined);
127
- }
128
- };
129
- const lastPathItem = path.at(-1);
130
- const oldValue = lastPathItem.target[lastPathItem.property];
131
- if (isObject(value) && (isObject(valueInOriginalData) || isObject(oldValue))) {
132
- // if value includes in oldValue or originalData need mark removed fields as undefined and recursively run nested objects
133
- markRemovedFieldsAsUndefined(valueInOriginalData, oldValue);
134
- for (const key of Object.keys(value)) {
135
- snapshotValueToOriginalData(originalData, path.concat({ target: oldValue || value, property: key }), value[key]);
136
- }
137
- }
138
- else if (Array.isArray(value) && (valueInOriginalData instanceof ArrayInOriginalData || Array.isArray(oldValue))) {
139
- // do same for arrays
140
- markRemovedFieldsAsUndefined(valueInOriginalData, oldValue);
141
- for (const key of value.keys()) {
142
- snapshotValueToOriginalData(originalData, path.concat({ target: oldValue || value, property: key.toString() }), value[key]);
143
- }
144
- }
145
- else {
146
- // in case value is plain then store it into originalData
147
- if (!has(originalData, pathAsString)) {
148
- if (oldValue !== value) {
149
- setOriginalDataValue(originalData, path);
150
- }
151
- }
152
- else if (valueInOriginalData === value) {
153
- unset(originalData, pathAsString);
154
- }
155
- }
156
- };
157
- export const useTrackedInstance = (initialData) => {
158
- const _originalData = createNestedRef({}, (path) => ({
159
- deleteProperty(target, property) {
160
- const result = Reflect.deleteProperty(target, property);
161
- if (path.length) {
162
- const parent = path.at(-1);
163
- if (isEmpty(target)) {
164
- delete parent.receiver[parent.property];
165
- }
166
- }
167
- return result;
168
- }
169
- }));
170
- const _data = createNestedRef({ root: initialData }, (parentThree) => ({
171
- set(target, property, value, receiver) {
172
- const path = parentThree.concat({ target, property, receiver });
173
- const oldValue = target[property];
174
- const triggerChangingArrayItems = () => {
175
- // in case length in array has changed then emit changing of value by index
176
- const originalDataValue = get(_originalData.value, path.map((i) => i.property));
177
- const { length: originalDataLength } = originalDataValue || oldValue;
178
- if (value < originalDataLength) {
179
- // when removed new value
180
- for (let i = value; i < originalDataLength; i++) {
181
- delete receiver[i];
182
- }
183
- }
184
- else if (originalDataLength < value) {
185
- // store all removed values as "undefined" when this array values was in data before do some change
186
- for (let i = originalDataLength; i < value; i++) {
187
- receiver[i] = undefined;
188
- }
189
- }
190
- };
191
- if (Array.isArray(target) && property === 'length') {
192
- if (value !== oldValue) {
193
- triggerChangingArrayItems();
194
- }
195
- }
196
- else {
197
- snapshotValueToOriginalData(_originalData.value, path, value);
198
- }
199
- return Reflect.set(target, property, value, receiver);
200
- },
201
- deleteProperty(target, property) {
202
- setOriginalDataValue(_originalData.value, parentThree.concat({ target, property }));
203
- return Reflect.deleteProperty(target, property);
204
- }
205
- }));
206
- const data = computed({
207
- get: () => _data.value.root,
208
- set: (value) => (_data.value.root = value)
209
- });
210
- const isDirty = computed(() => Object.keys(_originalData.value).length > 0);
211
- const _changedData = computed(() => {
212
- const changedData = {};
213
- const originalDataIterator = iterateObject(_originalData.value, {
214
- goDeepCondition: (path, value) => {
215
- /*
216
- * iterate over originalData
217
- * but avoid going deep in case
218
- * when value in data have different data type
219
- * of same value in originalData
220
- */
221
- const valueInData = get(_data.value, path);
222
- const isBothValuesAsArray = value instanceof ArrayInOriginalData && Array.isArray(valueInData);
223
- const isBothValuesAsObject = isObject(value) && isObject(valueInData);
224
- return isBothValuesAsObject || isBothValuesAsArray;
225
- }
226
- });
227
- for (const [path] of originalDataIterator) {
228
- const valueInData = get(_data.value, path);
229
- set(changedData, path, valueInData);
230
- }
231
- return changedData;
232
- });
233
- const changedData = computed(() => _changedData.value.root);
234
- const loadData = (newData) => {
235
- _data.value = { root: newData };
236
- _originalData.value = {};
237
- };
238
- const reset = () => {
239
- const updatedData = JSON.parse(JSON.stringify(_data.value));
240
- // iterate over originalData including objects to check array values
241
- for (const [path, value] of iterateObject(_originalData.value, { includeParent: true })) {
242
- if (value instanceof ArrayInOriginalData) {
243
- // reset array length in data to remove new items
244
- set(updatedData, path.concat('length'), value.length);
245
- }
246
- else if (!isObject(value)) {
247
- if (value === undefined) {
248
- unset(updatedData, path);
249
- }
250
- else {
251
- set(updatedData, path, value);
252
- }
253
- }
254
- }
255
- _data.value = updatedData;
256
- _originalData.value = {};
257
- };
258
- return {
259
- data,
260
- changedData,
261
- isDirty,
262
- loadData,
263
- reset
264
- };
265
- };
266
- //# sourceMappingURL=tracked-instance.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tracked-instance.js","sourceRoot":"","sources":["../src/tracked-instance.ts"],"names":[],"mappings":"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"}
package/src/collection.ts DELETED
@@ -1,82 +0,0 @@
1
- import {computed, shallowRef, triggerRef, ShallowRef, ComputedRef, ref, Ref} from 'vue'
2
- import {TrackedInstance, useTrackedInstance} from './tracked-instance'
3
-
4
- export interface CollectionItem<Item extends Record<string, any>, Meta = Record<string, any>> {
5
- instance: TrackedInstance<Item>
6
- meta: Meta
7
- isRemoved: Ref<boolean>
8
- isNew: Ref<boolean>
9
- }
10
-
11
- export interface Collection<Item extends Record<string, any>, Meta = Record<string, any>> {
12
- items: ShallowRef<CollectionItem<Item, Meta>[]>
13
- isDirty: ComputedRef<boolean>
14
- add: (item: Partial<Item>, afterIndex?: number) => CollectionItem<Item, Meta>
15
- remove: (index: number, isHardRemove?: boolean) => void
16
- loadData: (items: Item[]) => void
17
- reset: () => void
18
- }
19
-
20
- export const useCollection = <Item extends Record<string, any>, Meta = Record<string, any>>(
21
- createItemMeta: (instance: TrackedInstance<Item>) => Meta = () => ({}) as Meta
22
- ): Collection<Item, Meta> => {
23
- const items = shallowRef<CollectionItem<Item, Meta>[]>([])
24
-
25
- const isDirty = computed(() =>
26
- items.value.some(({instance, isRemoved, isNew}) => instance.isDirty.value || isNew.value || isRemoved.value)
27
- )
28
-
29
- const add = (item: Partial<Item>, index: number = items.value.length) => {
30
- const instance = useTrackedInstance<Item>(item)
31
- const newItem = {
32
- isRemoved: ref(false),
33
- isNew: ref(true),
34
- instance,
35
- meta: createItemMeta(instance)
36
- } as CollectionItem<Item, Meta>
37
- items.value.splice(index, 0, newItem)
38
- triggerRef(items)
39
- return newItem
40
- }
41
-
42
- const remove = (index: number, isHardRemove = false) => {
43
- const item = items.value[index]
44
- if (item.isNew.value || isHardRemove) {
45
- items.value.splice(index, 1)
46
- triggerRef(items)
47
- } else {
48
- items.value[index].isRemoved.value = true
49
- }
50
- }
51
-
52
- const loadData = (loadedItems: Item[]) => {
53
- items.value = loadedItems.map((item) => {
54
- const instance = useTrackedInstance<Item>(item)
55
- return {
56
- isNew: ref(false),
57
- isRemoved: ref(false),
58
- instance,
59
- meta: createItemMeta(instance)
60
- } as CollectionItem<Item, Meta>
61
- })
62
- triggerRef(items)
63
- }
64
-
65
- const reset = () => {
66
- items.value = items.value.filter(({isNew}) => !isNew.value)
67
- for (const item of items.value) {
68
- item.isRemoved.value = false
69
- item.instance.reset()
70
- }
71
- triggerRef(items)
72
- }
73
-
74
- return {
75
- items,
76
- isDirty,
77
- add,
78
- remove,
79
- loadData,
80
- reset
81
- }
82
- }
package/src/index.ts DELETED
@@ -1,5 +0,0 @@
1
- export type {TrackedInstance} from './tracked-instance'
2
- export type {Collection, CollectionItem} from './collection'
3
-
4
- export {useTrackedInstance} from './tracked-instance'
5
- export {useCollection} from './collection'
@@ -1,335 +0,0 @@
1
- import {get, has, set, unset} from 'lodash-es'
2
- import {computed, customRef, Ref} from 'vue'
3
-
4
- type DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]> } : T
5
-
6
- export interface TrackedInstance<Data extends Record<string, any>> {
7
- data: Ref<Data>
8
- isDirty: Ref<boolean>
9
- changedData: Ref<DeepPartial<Data>>
10
- loadData: (newData: DeepPartial<Data>) => void
11
- reset: () => void
12
- }
13
-
14
- interface NestedProxyPathItem {
15
- target: Record<string, any>
16
- property: string
17
- receiver?: Record<string, any>
18
- }
19
-
20
- const isObject = (value: unknown) =>
21
- typeof value === 'object' &&
22
- value !== null &&
23
- !Array.isArray(value) &&
24
- !(value instanceof Date) &&
25
- !(value instanceof File) &&
26
- !(value instanceof Map) &&
27
- !(value instanceof Set)
28
-
29
- const isEmpty = (value: object) => Object.keys(value).length === 0
30
-
31
- const iterateObject = function* (
32
- source: Record<string, any>,
33
- params: {
34
- // define condition when need to go deep
35
- goDeepCondition?: (path: string[], value: any) => boolean
36
- // include parent into separate step when we go deep
37
- includeParent?: boolean
38
- } = {}
39
- ) {
40
- const {goDeepCondition = (_, value) => isObject(value), includeParent = false} = params
41
- const iterateObjectDeep = function* (path: string[], obj: Record<string, any>): Generator<[string[], any]> {
42
- for (const [key, value] of Object.entries(obj)) {
43
- const currentPath = path.concat(key)
44
- if (goDeepCondition(currentPath, value)) {
45
- if (includeParent) {
46
- yield [currentPath, value]
47
- }
48
- yield* iterateObjectDeep(currentPath, value)
49
- } else {
50
- yield [currentPath, value]
51
- }
52
- }
53
- }
54
-
55
- yield* iterateObjectDeep([], source)
56
- }
57
-
58
- const createNestedRef = <Source extends Record<string, any>>(
59
- source: Source,
60
- handler: (path: NestedProxyPathItem[]) => ProxyHandler<Source>
61
- ) =>
62
- customRef<Source>((track, trigger) => {
63
- // make nested objects and arrays is reactive
64
- const createProxy = <InnerSource extends Record<string, any>>(
65
- source: InnerSource,
66
- path: NestedProxyPathItem[] = []
67
- ): InnerSource => {
68
- const currentProxyHandler = handler(path) as unknown as ProxyHandler<InnerSource>
69
- return new Proxy(source, {
70
- ...currentProxyHandler,
71
- get(target, property: string, receiver) {
72
- track()
73
- const result = currentProxyHandler.get
74
- ? currentProxyHandler.get(target, property, receiver)
75
- : Reflect.get(target, property, receiver)
76
-
77
- if (isObject(result) || Array.isArray(result)) {
78
- return createProxy(result, path.concat({target, property, receiver}))
79
- }
80
- return result
81
- },
82
- set(target, property, value, receiver) {
83
- const result = currentProxyHandler.set
84
- ? currentProxyHandler.set(target, property, value, receiver)
85
- : Reflect.set(target, property, value, receiver)
86
- trigger()
87
- return result
88
- },
89
- deleteProperty(target, property) {
90
- const result = currentProxyHandler.deleteProperty
91
- ? currentProxyHandler.deleteProperty(target, property)
92
- : Reflect.deleteProperty(target, property)
93
- trigger()
94
- return result
95
- }
96
- } as ProxyHandler<InnerSource>)
97
- }
98
-
99
- let value = createProxy(source)
100
-
101
- return {
102
- get() {
103
- track()
104
- return value
105
- },
106
- set(newValue: Source) {
107
- value = createProxy(newValue)
108
- trigger()
109
- }
110
- }
111
- })
112
-
113
- // array values in originalData should store in default object to avoid removing items on change length
114
- class ArrayInOriginalData {
115
- length: number
116
-
117
- constructor(length: number) {
118
- this.length = length
119
- // length should not include in iterations
120
- Object.defineProperty(this, 'length', {
121
- enumerable: false,
122
- value: length
123
- })
124
- }
125
- }
126
-
127
- const setOriginalDataValue = (originalData: Record<string, any>, path: Omit<NestedProxyPathItem, 'receiver'>[]) => {
128
- let originalDataTarget = originalData
129
- for (const {target: oldValueParent, property} of path.slice(0, -1)) {
130
- if (property in originalDataTarget) {
131
- if (isObject(originalDataTarget[property]) || originalDataTarget[property] instanceof ArrayInOriginalData) {
132
- originalDataTarget = originalDataTarget[property]
133
- } else {
134
- // cancel set originalData value because in this case we try to replace primitive value by object or array value
135
- return
136
- }
137
- } else {
138
- if (Array.isArray(oldValueParent[property])) {
139
- originalDataTarget = originalDataTarget[property] = new ArrayInOriginalData(oldValueParent[property].length)
140
- } else if (isObject(oldValueParent[property])) {
141
- originalDataTarget = originalDataTarget[property] = {}
142
- }
143
- }
144
- }
145
-
146
- const lastItem = path.at(-1)!
147
- originalDataTarget[lastItem.property] = lastItem.target[lastItem.property]
148
- }
149
-
150
- const snapshotValueToOriginalData = (
151
- originalData: Record<string, any>,
152
- path: Omit<NestedProxyPathItem, 'receiver'>[],
153
- value: any
154
- ) => {
155
- const pathAsString = path.map((i) => i.property)
156
- const valueInOriginalData = get(originalData, pathAsString)
157
-
158
- const markRemovedFieldsAsUndefined = (valueInOriginalData?: Record<string, any>, oldValue?: Record<string, any>) => {
159
- const keysSet = new Set<string>()
160
- if (valueInOriginalData) {
161
- for (const key of Object.keys(valueInOriginalData)) {
162
- keysSet.add(key)
163
- }
164
- }
165
- if (oldValue) {
166
- for (const key of Object.keys(oldValue)) {
167
- keysSet.add(key)
168
- }
169
- }
170
- const keys = Array.from(keysSet).filter((key) => !Object.keys(value).includes(key))
171
- for (const key of keys) {
172
- snapshotValueToOriginalData(
173
- originalData,
174
- path.concat({target: oldValue || value, property: key} as Omit<NestedProxyPathItem, 'receiver'>),
175
- undefined
176
- )
177
- }
178
- }
179
-
180
- const lastPathItem = path.at(-1)!
181
- const oldValue = lastPathItem.target[lastPathItem.property]
182
- if (isObject(value) && (isObject(valueInOriginalData) || isObject(oldValue))) {
183
- // if value includes in oldValue or originalData need mark removed fields as undefined and recursively run nested objects
184
- markRemovedFieldsAsUndefined(valueInOriginalData, oldValue)
185
- for (const key of Object.keys(value)) {
186
- snapshotValueToOriginalData(originalData, path.concat({target: oldValue || value, property: key}), value[key])
187
- }
188
- } else if (Array.isArray(value) && (valueInOriginalData instanceof ArrayInOriginalData || Array.isArray(oldValue))) {
189
- // do same for arrays
190
- markRemovedFieldsAsUndefined(valueInOriginalData, oldValue)
191
- for (const key of value.keys()) {
192
- snapshotValueToOriginalData(
193
- originalData,
194
- path.concat({target: oldValue || value, property: key.toString()}),
195
- value[key]
196
- )
197
- }
198
- } else {
199
- // in case value is plain then store it into originalData
200
- if (!has(originalData, pathAsString)) {
201
- if (oldValue !== value) {
202
- setOriginalDataValue(originalData, path)
203
- }
204
- } else if (valueInOriginalData === value) {
205
- unset(originalData, pathAsString)
206
- }
207
- }
208
- }
209
-
210
- export const useTrackedInstance = <Data extends Record<string, any>>(
211
- initialData: Partial<Data>
212
- ): TrackedInstance<Data> => {
213
- type InternalData = { root: Data }
214
- const _originalData = createNestedRef<DeepPartial<InternalData>>({}, (path) => ({
215
- deleteProperty(target, property) {
216
- const result = Reflect.deleteProperty(target, property)
217
- if (path.length) {
218
- const parent = path.at(-1)!
219
- if (isEmpty(target)) {
220
- delete parent.receiver![parent.property]
221
- }
222
- }
223
- return result
224
- }
225
- }))
226
-
227
- const _data = createNestedRef<InternalData>({root: initialData} as InternalData, (parentThree) => ({
228
- set(target, property: string, value, receiver) {
229
- const path = parentThree.concat({target, property, receiver})
230
- const oldValue = target[property as keyof typeof target]
231
-
232
- const triggerChangingArrayItems = () => {
233
- // in case length in array has changed then emit changing of value by index
234
- const originalDataValue = get(
235
- _originalData.value,
236
- path.map((i) => i.property)
237
- ) as ArrayInOriginalData | undefined
238
-
239
- const {length: originalDataLength} = originalDataValue || oldValue
240
-
241
- if (value < originalDataLength) {
242
- // when removed new value
243
- for (let i = value; i < originalDataLength; i++) {
244
- delete receiver[i]
245
- }
246
- } else if (originalDataLength < value) {
247
- // store all removed values as "undefined" when this array values was in data before do some change
248
- for (let i = originalDataLength; i < value; i++) {
249
- receiver[i] = undefined
250
- }
251
- }
252
- }
253
-
254
- if (Array.isArray(target) && property === 'length') {
255
- if (value !== oldValue) {
256
- triggerChangingArrayItems()
257
- }
258
- } else {
259
- snapshotValueToOriginalData(_originalData.value, path, value)
260
- }
261
-
262
- return Reflect.set(target, property, value, receiver)
263
- },
264
- deleteProperty(target, property: keyof typeof target) {
265
- setOriginalDataValue(_originalData.value, parentThree.concat({target, property} as NestedProxyPathItem))
266
- return Reflect.deleteProperty(target, property)
267
- }
268
- }))
269
-
270
- const data = computed<Data>({
271
- get: () => _data.value.root,
272
- set: (value) => (_data.value.root = value)
273
- })
274
-
275
- const isDirty = computed<boolean>(() => Object.keys(_originalData.value).length > 0)
276
-
277
- const _changedData = computed<DeepPartial<InternalData>>(() => {
278
- const changedData = {} as DeepPartial<InternalData>
279
- const originalDataIterator = iterateObject(_originalData.value, {
280
- goDeepCondition: (path, value) => {
281
- /*
282
- * iterate over originalData
283
- * but avoid going deep in case
284
- * when value in data have different data type
285
- * of same value in originalData
286
- */
287
- const valueInData = get(_data.value, path)
288
- const isBothValuesAsArray = value instanceof ArrayInOriginalData && Array.isArray(valueInData)
289
- const isBothValuesAsObject = isObject(value) && isObject(valueInData)
290
- return isBothValuesAsObject || isBothValuesAsArray
291
- }
292
- })
293
- for (const [path] of originalDataIterator) {
294
- const valueInData = get(_data.value, path)
295
- set(changedData, path, valueInData)
296
- }
297
- return changedData
298
- })
299
-
300
- const changedData = computed(() => _changedData.value.root as DeepPartial<Data>)
301
-
302
- const loadData = (newData: DeepPartial<Data>) => {
303
- _data.value = {root: newData} as InternalData
304
- _originalData.value = {}
305
- }
306
-
307
- const reset = () => {
308
- const updatedData = JSON.parse(JSON.stringify(_data.value))
309
-
310
- // iterate over originalData including objects to check array values
311
- for (const [path, value] of iterateObject(_originalData.value, {includeParent: true})) {
312
- if (value instanceof ArrayInOriginalData) {
313
- // reset array length in data to remove new items
314
- set(updatedData, path.concat('length'), value.length)
315
- } else if (!isObject(value)) {
316
- if (value === undefined) {
317
- unset(updatedData, path)
318
- } else {
319
- set(updatedData, path, value)
320
- }
321
- }
322
- }
323
-
324
- _data.value = updatedData
325
- _originalData.value = {}
326
- }
327
-
328
- return {
329
- data,
330
- changedData,
331
- isDirty,
332
- loadData,
333
- reset
334
- }
335
- }
File without changes
File without changes