insite-subscriptions-client 2.4.0 → 2.6.0
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 +2 -0
- package/dist/SubscriptionMap.d.ts +0 -3
- package/dist/SubscriptionMap.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +3 -3
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# insite-subscriptions-client
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/insite-subscriptions-client)
|
|
4
|
+
|
|
3
5
|
Client-side library for subscribing to inSite publications over WebSocket. Provides reactive containers for three data shapes — object, array, and map — that apply server updates and notify your handlers.
|
|
4
6
|
|
|
5
7
|
Part of [inSite](../../README.md) — requires [insite-ws](../ws/README.md). Pairs with [insite-subscriptions-server](../subscriptions-server/README.md).
|
|
@@ -27,9 +27,6 @@ export type Updates<I extends Item = Item> = ([
|
|
|
27
27
|
isAtomicOrUpdatedFields: string[] | true
|
|
28
28
|
] | null)[] | null;
|
|
29
29
|
export type UpdateHandler<I extends Item = Item> = (map: SubscriptionMap<I>, updated: Updated<I>, updates: Updates<I>) => void;
|
|
30
|
-
declare global {
|
|
31
|
-
var __insite_subscription_map_sort_function: ((a: Item, b: Item) => -1 | 0 | 1) | undefined;
|
|
32
|
-
}
|
|
33
30
|
export declare class SubscriptionMap<I extends Item = Item> extends Map<string, I> {
|
|
34
31
|
#private;
|
|
35
32
|
constructor(updates?: Updates<I>, onUpdate?: UpdateHandler<I>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionMap.d.ts","sourceRoot":"","sources":["../src/SubscriptionMap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACN,WAAW,EACX,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,WAAW,EACX,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,MAAM,WAAW,CAAC;AAGnB,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,KAAK,IAAI,GAAG,WAAW,GAAG,mBAAmB,CAAC;AAE9C,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,GAAG;IAClD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,CAAC,EAAE,CAAC;CACX,CAAC;AAEF,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvC,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,IACxC,CACC;IAAE,GAAG;IAAc,IAAI,EAAE,CAAC;CAAE,GAC5B;IAAE,GAAG;IAAc,GAAG,EAAE,MAAM;CAAE,GAChC;IAAE,GAAG;IAAe,KAAK,EAAE,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI;CAAE,GAC5D;IAAE,GAAG;IAAc,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;IAAE,uBAAuB,EAAE,MAAM,EAAE,GAAG,IAAI;CAAE,GACxG,IAAI,CACJ,EAAE,GACH,IAAI,CAAC;AAEN,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"SubscriptionMap.d.ts","sourceRoot":"","sources":["../src/SubscriptionMap.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Mt=Object.defineProperty;var ft=o=>{throw TypeError(o)};var Nt=(o,s,t)=>s in o?Mt(o,s,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[s]=t;var i=(o,s,t)=>Nt(o,typeof s!="symbol"?s+"":s,t),dt=(o,s,t)=>s.has(o)||ft("Cannot "+t);var n=(o,s,t)=>(dt(o,s,"read from private field"),t?t.call(o):s.get(o)),c=(o,s,t)=>s.has(o)?ft("Cannot add the same private member more than once"):s instanceof WeakSet?s.add(o):s.set(o,t),l=(o,s,t,e)=>(dt(o,s,"write to private field"),e?e.call(o,t):s.set(o,t),t),S=(o,s,t)=>(dt(o,s,"access private method"),t);var St,Q,P,R=class{constructor(s,t,e=[],r,a=!0){i(this,"i");i(this,"type");i(this,"publicationName");i(this,"args");i(this,"handler");i(this,"immediately");i(this,"isActive");i(this,"start",()=>{P.sendMessage("s-s",this.type,this.publicationName,this.i,this.args,this.immediately),this.immediately=!0});if(!P)throw new Error("Subscription is not binded to WS. Do Subscription.bindTo(ws) first");this.i=St++,this.type=s,this.publicationName=t,this.args=e,this.handler=r,this.immediately=a&&!globalThis.__initials,Q.set(this.i,this),P.on("open",this.start),P.isOpen&&this.start(),globalThis.__initials?(this.isActive=!0,this.handler(globalThis.__initials.splice(0,1)[0])):this.isActive=!1}cancel(){Q.delete(this.i),P.off("open",this.start),P.sendMessage("s-u",this.i)}static bindTo(s){P=s,St=0,Q=new Map,P.on("message:s-c",(t,e)=>{let r=Q.get(t);r&&(r.isActive=!0,r.handler(e))}),P.on("close",()=>{for(let t of Q.values())t.isActive=!1}),P.on("server-change",()=>{for(let t of Q.values())t.handler(null)})}};import{removeOne as $t}from"@nesvet/n";var x=Symbol("update"),D=Symbol("getHandleUpdate"),y=Symbol("setHandleUpdate"),H=Symbol("getAsUpdates"),A=Symbol("getAsInitialUpdated"),G=Symbol("clear"),f=Symbol("subscribe"),g=Symbol("unsubscribe"),L=Symbol("renew"),j=Symbol("getSubscription"),Wt=Symbol("getHandleSubscription"),Ct=Symbol("setHandleSubscription");var Vt=(o,s)=>o>s?1:o<s?-1:0,Et=(o,s)=>o>s?-1:o<s?1:0,yt,gt,Ut,It,O=class extends Array{constructor(t,e){super();i(this,"sorted",[]);i(this,"handleUpdate");i(this,"sortDirection",0);i(this,"sortCompareFunction",null);i(this,It,this.update);i(this,Ut,this.getAsUpdates);i(this,gt,this.getAsInitialUpdated);i(this,yt,this.clear);e&&(this.handleUpdate=e),Array.isArray(t)&&this.update(t)}[D](){return this.handleUpdate}[y](t){return this.handleUpdate=t}update(t){let e=Object.assign([],{deleted:[],added:[]});if(t){let r=!1;for(let a of t)switch(a?.[0]){case"i":{let[,u,b]=a;b?(this.sortDirection=b,this.sortCompareFunction=b>0?Vt:Et,r=!0):(this.sortDirection=0,this.sortCompareFunction=null),this.length=0;for(let p of u)this.push(p),e.push(p),e.added.push(p);break}case"a":{let[,u]=a;this.includes(u)||(this.push(u),this.sortDirection&&(r=!0),e.push(u),e.added.push(u));break}case"d":{let[,u]=a;$t(this,u)&&e.deleted.push(u);break}default:this.clear()}r&&this.sortCompareFunction&&this.sort(this.sortCompareFunction)}else this.clear();return this.handleUpdate?.(this,e,t?.[0]?t:null),this}getAsUpdates(){return this.length||this.sortDirection?[["i",[...this],this.sortDirection]]:null}getAsInitialUpdated(){return Object.assign([...this.sorted],{added:[...this.sorted],deleted:[]})}clear(){this.length=0,this.sortDirection=0,this.sortCompareFunction=null}valueOf(){return this}get[(It=x,Ut=H,gt=A,yt=G,Symbol.toStringTag)](){return"SubscriptionArray"}};i(O,"updateSymbol",x),i(O,"getHandleUpdateSymbol",D),i(O,"setHandleUpdateSymbol",y),i(O,"getAsUpdatesSymbol",H),i(O,"getAsInitialUpdatedSymbol",A),i(O,"clearSymbol",G),i(O,"WithSubscription");var k=class extends O{constructor(t,e,r,a=!0){super(null,r);i(this,"publicationName");i(this,"params");i(this,"subscription",null);this.publicationName=t,this.params=e,a&&this.subscribe()}subscribe(){this.subscription||(this.subscription=new R("array",this.publicationName,this.params,t=>this.update(t)))}get[f](){return this.subscribe}unsubscribe(){this.subscription&&(this.subscription.cancel(),this.subscription=null)}get[g](){return this.unsubscribe}renew(t,e){this.subscription&&(this.unsubscribe(),t&&(Array.isArray(t)?e=t:this.publicationName=t),e&&(this.params=e),this.subscribe())}get[L](){return this.renew}[j](){return this.subscription}get[Symbol.toStringTag](){return"SubscriptionArrayWithSubscription"}};i(k,"subscribeSymbol",f),i(k,"unsubscribeSymbol",g),i(k,"renewSymbol",L),i(k,"getSubscriptionSymbol",j);O.WithSubscription=k;import Qt from"eventemitter3";import{debounce as Xt,StatefulPromise as ot}from"@nesvet/n";var U={};import qt from"eventemitter3";import{debounce as Kt,removeOne as At,StatefulPromise as nt}from"@nesvet/n";import{removeOne as Rt,unique as zt}from"@nesvet/n";function Jt(o){let s=document.createElement("script");s.textContent=`window.__insite_subscription_map_sort_function = function sort(a, b) { return ${Object.entries(o).map(([e,r])=>(e.includes(".")&&(e=e.replaceAll(".","?.")),r>0?`a.${e} > b.${e} ? 1 : a.${e} < b.${e} ? -1 :`:`a.${e} < b.${e} ? 1 : a.${e} > b.${e} ? -1 :`)).concat("0").join(" ")};}`,document.head.append(s);let t=globalThis.__insite_subscription_map_sort_function;return s.remove(),delete globalThis.__insite_subscription_map_sort_function,t}var vt,Tt,wt,xt,X,q,Y,I=class extends Map{constructor(t,e){super();i(this,"handleUpdate");c(this,X,new Map);i(this,"sortList",null);i(this,"sortCompareFunction",null);c(this,q,[]);i(this,"sorted",[]);c(this,Y);i(this,xt,this.update);i(this,wt,this.getAsUpdates);i(this,Tt,this.getAsInitialUpdated);i(this,vt,this.clear);e&&(this.handleUpdate=e),t&&this.update(t)}sort(){this.sortCompareFunction&&this.sorted.sort(this.sortCompareFunction)}[D](){return this.handleUpdate}[y](t){return this.handleUpdate=t}set Item(t){if(l(this,Y,t),this.size)for(let[e,r]of this)this.set(e,new t(this,r))}get Item(){return n(this,Y)}update(t){let e=Object.assign([],{added:[],deleted:[]});if(t){let r=!1,a=n(this,Y),u=n(this,X);for(let b of t)switch(b?.[0]){case"i":{let[,p,h]=b;if(h?(this.sortList=h,this.sortCompareFunction=Jt(h),l(this,q,zt(Object.keys(h).map(m=>m.replace(/\..+/,"")))),r=!0):(this.sortList=null,this.sortCompareFunction=null,l(this,q,[])),this.size){let m=new Map;for(let d of p)m.set(d._id,d);for(let[d,T]of this){let w=m.get(d);if(w){let Bt=u.get(d);if(a)T.update(w);else{for(let Ft in Bt)delete T[Ft];Object.assign(T,w)}u.set(d,w),e.push(T),m.delete(d)}else a?T.delete():this.delete(d),u.delete(d),e.deleted.push(d)}for(let[d,T]of m){let w=a?new a(this,T):{...T};this.set(d,w),u.set(d,T),e.push(w),e.added.push(w)}this.sortList&&(this.sorted=p.map(d=>this.get(d._id)))}else for(let m of p){let d=a?new a(this,m):{...m};this.set(d._id,d),this.sorted.push(d),u.set(d._id,m),e.push(d),e.added.push(d)}break}case"c":case"u":{let[,p]=b,h=this.get(p._id);if(h){let m=b[2]===!0,d=m?Object.keys(p):b[2],T=u.get(h._id);if(a)h.update(p);else{if(!m)for(let w in T)delete h[w];Object.assign(h,p)}m&&(p=Object.assign(T,p)),this.sortList&&!r&&(!d||d.some(w=>n(this,q).includes(w)))&&(r=!0)}else h=a?new a(this,p):{...p},this.set(h._id,h),this.sorted.push(h),this.sortList&&(r=!0),e.added.push(h);u.set(h._id,p),e.push(h);break}case"d":{let[,p]=b,h=this.get(p);h&&(a?h.delete():this.delete(p),u.delete(p),Rt(this.sorted,h),e.deleted.push(p));break}default:this.clear()}r&&this.sort()}else this.clear();return this.handleUpdate?.(this,e,t?.[0]?t:null),this}getAsUpdates(){return this.size||this.sortList?[["i",[...n(this,X).values()],this.sortList]]:null}getAsInitialUpdated(){return Object.assign([...this.sorted],{added:[...this.sorted],deleted:[]})}clear(){super.clear(),n(this,X).clear(),this.sorted=[],this.sortList=null,this.sortCompareFunction=null,l(this,q,[])}valueOf(){return this.sorted}get[(xt=x,wt=H,Tt=A,vt=G,Symbol.toStringTag)](){return"SubscriptionMap"}};X=new WeakMap,q=new WeakMap,Y=new WeakMap,i(I,"updateSymbol",x),i(I,"getHandleUpdateSymbol",D),i(I,"setHandleUpdateSymbol",y),i(I,"getAsUpdatesSymbol",H),i(I,"getAsInitialUpdatedSymbol",A),i(I,"clearSymbol",G),i(I,"WithSubscription"),i(I,"Item");var B=class extends I{constructor(t,e,r,a=!0){super(null,r);i(this,"publicationName");i(this,"params");i(this,"subscription",null);this.publicationName=t,this.params=e,a&&this.subscribe()}subscribe(){this.subscription||(this.subscription=new R("map",this.publicationName,this.params,t=>this.update(t)))}get[f](){return this.subscribe}unsubscribe(){this.subscription&&(this.subscription.cancel(),this.subscription=null)}get[g](){return this.unsubscribe}renew(t,e){this.subscription&&(this.unsubscribe(),t&&(Array.isArray(t)?e=t:this.publicationName=t),e&&(this.params=e),this.subscribe())}get[L](){return this.renew}[j](){return this.subscription}get[Symbol.toStringTag](){return"SubscriptionMapWithSubscription"}};i(B,"subscribeSymbol",f),i(B,"unsubscribeSymbol",g),i(B,"renewSymbol",L),i(B,"getSubscriptionSymbol",j);I.WithSubscription=B;var st,lt=class{constructor(s,t){i(this,"_id");c(this,st);l(this,st,s),this.update(t)}update(s){Object.assign(this,s)}delete(){n(this,st).delete(this._id)}};st=new WeakMap;I.Item=lt;var rt=Symbol("handleUpdate"),z=Symbol("updates"),Dt,Ht,_=class{constructor(s,t){i(this,Ht);i(this,Dt,null);t&&(this[rt]=t),s&&this[x](s)}[(Ht=rt,Dt=z,D)](){return this[rt]}[y](s){return this[rt]=s}[x](s){if(s){for(let t in this[z])delete this[t];for(let t in s)this[t]=s[t];this[z]=s}else this[G]();return this[rt]?.(this,this,this[z]),this}[H](){return this[z]&&{...this[z]}}[A](){return this.valueOf()}[G](){for(let s in this)delete this[s];this[z]=null}valueOf(){return this[z]&&this}get[Symbol.toStringTag](){return"SubscriptionObject"}};i(_,"updateSymbol",x),i(_,"getHandleUpdateSymbol",D),i(_,"setHandleUpdateSymbol",y),i(_,"getAsUpdatesSymbol",H),i(_,"getAsInitialUpdatedSymbol",A),i(_,"clearSymbol",G),i(_,"WithSubscription");var Z,tt,F,M=class extends _{constructor(t,e,r,a=!0){super(null,r);c(this,Z);c(this,tt);c(this,F,null);l(this,Z,t),l(this,tt,e),a&&this[f]()}[f](){n(this,F)||l(this,F,new R("object",n(this,Z),n(this,tt),t=>this[x](t)))}[g](){n(this,F)&&(n(this,F).cancel(),l(this,F,null))}[L](t,e){n(this,F)&&(this[g](),t&&(Array.isArray(t)?e=t:l(this,Z,t)),e&&l(this,tt,e),this[f]())}[j](){return n(this,F)}get[Symbol.toStringTag](){return"SubscriptionObjectWithSubscription"}};Z=new WeakMap,tt=new WeakMap,F=new WeakMap,i(M,"subscribeSymbol",f),i(M,"unsubscribeSymbol",g),i(M,"renewSymbol",L),i(M,"getSubscriptionSymbol",j);_.WithSubscription=M;function Lt(o){return Array.isArray(o)}var N,J,W,v,ht,Ot,E,et,_t,Gt,ct,pt=class pt extends qt{constructor(t,e){super();c(this,v);i(this,"name");i(this,"group");i(this,"value");i(this,"type");i(this,"publicationName");i(this,"params");i(this,"handle");i(this,"onBeforeInit");i(this,"preventBind");i(this,"emitUpdate");i(this,"isLoaded",!1);i(this,"isInited",!1);c(this,N);c(this,J);c(this,W);c(this,E,null);c(this,et,(t,e,r)=>{if(r)if(this.group.isLoaded){if(this.handle)switch(this.type){case"array":this.handle.call(this.group,e,this.group);break;case"map":this.handle.call(this.group,e,this.group);break;default:this.handle.call(this.group,e,this.group)}this.emitUpdate(e)}else l(this,E,e),this.isLoaded=!0,U.groupLoad(this.group);else this.isLoaded&&(this.isLoaded=!1,U.groupUnload(this.group));this.isInited||(this.isInited=!0,U.groupInit(this.group))});this.name=t.name,this.define(t,e)}define(t,e=this.group){if(!e)throw new Error("group is undefined");let{value:r,type:a="object",publicationName:u,params:b,handle:p,onBeforeInit:h,debounce:m=pt.debounceLimit,preventBind:d}=t;if(this.group){if((!r||this.value===r)&&this.type===a&&this.publicationName===u&&JSON.stringify(this.params)===JSON.stringify(b)&&this.handle===p&&this.onBeforeInit===h)return S(this,v,ht).call(this,{debounceLimit:m,preventBind:d});this.detach(),delete this.value,delete this.publicationName,delete this.params}this.type=a,this.handle=p,this.onBeforeInit=h,r?this.value=r:(this.publicationName=u??this.name,this.params=b??[]),S(this,v,ht).call(this,{debounceLimit:m,preventBind:d}),S(this,v,Ot).call(this,e)}detach(){this.group&&(this.value?.[g](),this.isLoaded=!1,S(this,v,ct).call(this),delete this.group.values[this.name],At(this.group.values,this.value),delete this.group.items[this.name],At(this.group.items,this),delete this.group)}loaded(){return n(this,N)}inited(){return n(this,J)}unloaded(){return n(this,W)}subscribe(){if(this.value){if(this.value[f])return this.value[f]();{let t=this.value[D]();if(t){let e=this.value[A](),r=this.value[H]();switch(this.type){case"array":return t(this.value,e,r);case"map":return t(this.value,e,r);default:return t(this.value,e,r)}}}}}unsubscribe(){return this.value?.[g]?.()}renew(t,e){return this.value?.[L]?.(t,e)}valueOf(){return this.value}};N=new WeakMap,J=new WeakMap,W=new WeakMap,v=new WeakSet,ht=function({debounceLimit:t,preventBind:e}){let r=a=>{this.emit("update",this.value,a),this.group?.emit(`update.${this.name}`,this.value,a),this.group?.emitUpdate()};if(typeof t=="number"){let a,u,b=Kt(()=>{let p=!this.group;p&&(this.group=u),r(a),p&&delete this.group,a=void 0},t);this.emitUpdate=p=>{if(p!==void 0)if(Lt(p))if(Lt(a))for(let h of p)a.push(h);else a=Object.assign([...p],{added:[...p.added],deleted:[...p.deleted]});else typeof p=="object"?a?Object.assign(a,p):a={...p}:a=p;return u=this.group,b()}}else this.emitUpdate=r;this.preventBind===void 0?delete this.preventBind:this.preventBind=e},Ot=function(t){if(!this.group){switch(this.group=t,this.group.items.push(this),this.group.items[this.name]=this,(!n(this,N)||n(this,N).isFulfilled)&&l(this,N,new nt),(!n(this,J)||n(this,J).isFulfilled)&&l(this,J,new nt),(!n(this,W)||n(this,W).isFulfilled)&&l(this,W,new nt),this.type){case"array":{let e=n(this,et);this.value?this.value[y](e):this.value=new k(this.publicationName,this.params,e,!1);break}case"map":{let e=n(this,et);this.value?this.value[y](e):this.value=new B(this.publicationName,this.params,e,!1);break}default:{let e=n(this,et);this.value?this.value[y](e):this.value=new M(this.publicationName,this.params,e,!1)}}if(this.group.values.push(this.value),this.group.values[this.name]=this.value,this.onBeforeInit)switch(this.type){case"array":this.onBeforeInit.call(this.group,this.value);break;case"map":this.onBeforeInit.call(this.group,this.value);break;default:this.onBeforeInit.call(this.group,this.value)}}},E=new WeakMap,et=new WeakMap,_t=function(){if(n(this,E)){if(this.handle)switch(this.type){case"array":this.handle.call(this.group,n(this,E),this.group);break;case"map":this.handle.call(this.group,n(this,E),this.group);break;default:this.handle.call(this.group,n(this,E),this.group)}l(this,E,null),this.emit("load",this.value),n(this,N).resolve(this),n(this,W).isFulfilled&&l(this,W,new nt)}},Gt=function(){this.emit("init",this.value),n(this,J).resolve(this)},ct=function(){if(this.handle)switch(this.type){case"array":this.handle.call(this.group,null,this.group);break;case"map":this.handle.call(this.group,null,this.group);break;default:this.handle.call(this.group,null,this.group)}this.emit("unload",this.value),n(this,W).resolve(this),n(this,N).isFulfilled&&l(this,N,new nt)},i(pt,"debounceLimit",4),U.itemLoad=t=>{var e;return S(e=t,v,_t).call(e)},U.itemInit=t=>{var e;return S(e=t,v,Gt).call(e)},U.itemUnload=t=>{var e;return S(e=t,v,ct).call(e)};var at=pt;function Yt(o){return Array.isArray(o)}function Pt(o){if(Yt(o)){let s=o.slice(),t={};if(t.name=s.shift(),typeof s[0]=="object"&&!Array.isArray(s[0])){if(t.value=s.shift(),t.type=t.value.toString().match(/Subscription(Object|Array|Map)/)?.[1].toLowerCase(),!t.type)throw new Error("Unknown value type")}else typeof s[0]=="string"&&(t.type=s.shift()),typeof s[0]=="string"&&(t.publicationName=s.shift()),Array.isArray(s[0])&&(t.params=s.shift());return typeof s[0]=="function"&&(t.handle=s.shift()),typeof s[0]=="function"&&(t.onBeforeInit=s.shift()),typeof s[0]=="number"&&(t.debounce=s.shift()),typeof s[0]=="boolean"&&(t.preventBind=s.shift()),t}return o.type??(o.type="object"),o}var C,it,$,K,V,bt,kt,mt,ut=class ut extends Qt{constructor(t,{target:e,debounce:r=ut.debounceLimit,immediately:a}={}){super();c(this,V);i(this,"target");i(this,"emitUpdate");i(this,"items",[]);i(this,"values",[]);i(this,"isLoaded",!1);i(this,"isInited",!1);c(this,C);c(this,it);c(this,$);c(this,K,null);this.applyOptions({target:e,debounceLimit:r}),l(this,it,new ot),this.attach(t,!1,a)}applyOptions({target:t,debounceLimit:e}){if(this.target!==t){if(this.target)for(let r of this.items)r.isLoaded&&!r.preventBind&&delete this.target[r.name];if(this.target=t,this.target)for(let r of this.items)r.isLoaded&&!r.preventBind&&(this.target[r.name]=r.value)}if(n(this,K)!==e)if(l(this,K,e),typeof n(this,K)=="number"){let r=Xt(()=>this.emit("update",this.values),n(this,K));this.emitUpdate=()=>r()}else this.emitUpdate=()=>this.emit("update",this.values)}attach(t,e=this.isLoaded,r=!0){return e&&(this.isLoaded=!1),(!n(this,C)||n(this,C).isFulfilled)&&l(this,C,new ot),(!n(this,$)||n(this,$).isFulfilled)&&l(this,$,new ot),Promise.all(t.map(a=>new at(Pt(a),this)).map(a=>(r&&a.subscribe(),a.loaded())))}detach(t,e=!0){for(let r of t)this.items[r]?.detach();e&&(S(this,V,mt).call(this),S(this,V,bt).call(this))}redefine(t){let e=new Map(this.items.map(u=>[u.name,u])),r=[],a=[];for(let u of t)u=Pt(u),e.delete(u.name)?r.push(u):a.push(u);return this.isLoaded=!1,this.detach([...e.keys()],!1),Promise.all([...r.map(u=>{let b=this.items[u.name];return b.define(u),b.subscribe(),b.loaded()}),...a.length?[this.attach(a,!1)]:[]])}subscribe(){return this.items.map(t=>t.subscribe())}unsubscribe(){return this.items.map(t=>t.unsubscribe())}loaded(){return n(this,C)}inited(){return n(this,it)}unloaded(){return n(this,$)}valueOf(){return this.values}[Symbol.iterator](){return this.values[Symbol.iterator]()}};C=new WeakMap,it=new WeakMap,$=new WeakMap,K=new WeakMap,V=new WeakSet,bt=function(){if(!this.isLoaded&&this.items.every(t=>t.isLoaded)){if(this.target)for(let t of this.items)t.preventBind||(this.target[t.name]=t.value);this.isLoaded=!0;for(let t of this.items)U.itemLoad(t);if(this.emit("load",this.values),this.isInited)if(this.items.length)for(let t of this.items)t.emitUpdate();else this.emitUpdate();n(this,C).resolve(this),n(this,$).isFulfilled&&l(this,$,new ot)}},kt=function(){if(!this.isInited&&this.items.every(t=>t.isInited)){if(this.isInited=!0,this.isLoaded)if(this.items.length)for(let t of this.items)t.emitUpdate();else this.emitUpdate();for(let t of this.items)U.itemInit(t);this.emit("init",this.values),n(this,it).resolve(this)}},mt=function(){if(this.isLoaded&&this.items.every(t=>!t.isLoaded)){if(this.target)for(let t of this.items)t.preventBind||delete this.target[t.name];this.isLoaded=!1;for(let t of this.items)U.itemUnload(t);if(this.emit("unload",this.values),this.items.length)for(let t of this.items)t.emitUpdate();else this.emitUpdate();n(this,$).resolve(this),n(this,C).isFulfilled&&l(this,C,new ot)}},i(ut,"debounceLimit",8),U.groupLoad=t=>{var e;return S(e=t,V,bt).call(e)},U.groupInit=t=>{var e;return S(e=t,V,kt).call(e)},U.groupUnload=t=>{var e;return S(e=t,V,mt).call(e)};var jt=ut;export{R as Subscription,O as SubscriptionArray,k as SubscriptionArrayWithSubscription,jt as SubscriptionGroup,I as SubscriptionMap,B as SubscriptionMapWithSubscription,_ as SubscriptionObject,M as SubscriptionObjectWithSubscription,G as clearSymbol,A as getAsInitialUpdatedSymbol,H as getAsUpdatesSymbol,Wt as getHandleSubscriptionSymbol,D as getHandleUpdateSymbol,j as getSubscriptionSymbol,L as renewSymbol,Ct as setHandleSubscriptionSymbol,y as setHandleUpdateSymbol,f as subscribeSymbol,g as unsubscribeSymbol,x as updateSymbol};
|
|
1
|
+
var N,D,T,A=class{constructor(t,i,e=[],s,n=!0){if(!T)throw new Error("Subscription is not binded to WS. Do Subscription.bindTo(ws) first");this.i=N++,this.type=t,this.publicationName=i,this.args=e,this.handler=s,this.immediately=n&&!globalThis.__initials,D.set(this.i,this),T.on("open",this.start),T.isOpen&&this.start(),globalThis.__initials?(this.isActive=!0,this.handler(globalThis.__initials.splice(0,1)[0])):this.isActive=!1}i;type;publicationName;args;handler;immediately;isActive;start=()=>{T.sendMessage("s-s",this.type,this.publicationName,this.i,this.args,this.immediately),this.immediately=!0};cancel(){D.delete(this.i),T.off("open",this.start),T.sendMessage("s-u",this.i)}static bindTo(t){T=t,N=0,D=new Map,T.on("message:s-c",(i,e)=>{let s=D.get(i);s&&(s.isActive=!0,s.handler(e))}),T.on("close",()=>{for(let i of D.values())i.isActive=!1}),T.on("server-change",()=>{for(let i of D.values())i.handler(null)})}};import{removeOne as Q}from"@nesvet/n";var S=Symbol("update"),y=Symbol("getHandleUpdate"),c=Symbol("setHandleUpdate"),g=Symbol("getAsUpdates"),U=Symbol("getAsInitialUpdated"),v=Symbol("clear"),l=Symbol("subscribe"),h=Symbol("unsubscribe"),I=Symbol("renew"),w=Symbol("getSubscription"),$=Symbol("getHandleSubscription"),K=Symbol("setHandleSubscription");var X=(o,t)=>o>t?1:o<t?-1:0,Y=(o,t)=>o>t?-1:o<t?1:0,L=class extends Array{constructor(t,i){super(),i&&(this.handleUpdate=i),Array.isArray(t)&&this.update(t)}sorted=[];handleUpdate;sortDirection=0;sortCompareFunction=null;[y](){return this.handleUpdate}[c](t){return this.handleUpdate=t}update(t){let i=Object.assign([],{deleted:[],added:[]});if(t){let e=!1;for(let s of t)switch(s?.[0]){case"i":{let[,n,u]=s;u?(this.sortDirection=u,this.sortCompareFunction=u>0?X:Y,e=!0):(this.sortDirection=0,this.sortCompareFunction=null),this.length=0;for(let r of n)this.push(r),i.push(r),i.added.push(r);break}case"a":{let[,n]=s;this.includes(n)||(this.push(n),this.sortDirection&&(e=!0),i.push(n),i.added.push(n));break}case"d":{let[,n]=s;Q(this,n)&&i.deleted.push(n);break}default:this.clear()}e&&this.sortCompareFunction&&this.sort(this.sortCompareFunction)}else this.clear();return this.handleUpdate?.(this,i,t?.[0]?t:null),this}[S]=this.update;getAsUpdates(){return this.length||this.sortDirection?[["i",[...this],this.sortDirection]]:null}[g]=this.getAsUpdates;getAsInitialUpdated(){return Object.assign([...this.sorted],{added:[...this.sorted],deleted:[]})}[U]=this.getAsInitialUpdated;clear(){this.length=0,this.sortDirection=0,this.sortCompareFunction=null}[v]=this.clear;valueOf(){return this}get[Symbol.toStringTag](){return"SubscriptionArray"}static updateSymbol=S;static getHandleUpdateSymbol=y;static setHandleUpdateSymbol=c;static getAsUpdatesSymbol=g;static getAsInitialUpdatedSymbol=U;static clearSymbol=v;static WithSubscription},H=class extends L{constructor(t,i,e,s=!0){super(null,e),this.publicationName=t,this.params=i,s&&this.subscribe()}publicationName;params;subscription=null;subscribe(){this.subscription||(this.subscription=new A("array",this.publicationName,this.params,t=>this.update(t)))}get[l](){return this.subscribe}unsubscribe(){this.subscription&&(this.subscription.cancel(),this.subscription=null)}get[h](){return this.unsubscribe}renew(t,i){this.subscription&&(this.unsubscribe(),t&&(Array.isArray(t)?i=t:this.publicationName=t),i&&(this.params=i),this.subscribe())}get[I](){return this.renew}[w](){return this.subscription}get[Symbol.toStringTag](){return"SubscriptionArrayWithSubscription"}static subscribeSymbol=l;static unsubscribeSymbol=h;static renewSymbol=I;static getSubscriptionSymbol=w};L.WithSubscription=H;import rt from"eventemitter3";import{debounce as nt,StatefulPromise as B}from"@nesvet/n";var b={};import et from"eventemitter3";import{debounce as st,removeOne as V,StatefulPromise as M}from"@nesvet/n";import{removeOne as Z,unique as tt}from"@nesvet/n";function C(o,t){let i=o;for(let e of t.split(".")){if(i==null)return;i=i[e]}return i}function W(o,t){return o>t}function it(o){let t=Object.entries(o);return(i,e)=>{for(let[s,n]of t){let u=C(i,s),r=C(e,s);if(n>0){if(W(u,r))return 1;if(W(r,u))return-1}else{if(W(r,u))return 1;if(W(u,r))return-1}}return 0}}var O=class extends Map{constructor(t,i){super(),i&&(this.handleUpdate=i),t&&this.update(t)}handleUpdate;#i=new Map;sortList=null;sortCompareFunction=null;#e=[];sorted=[];sort(){this.sortCompareFunction&&this.sorted.sort(this.sortCompareFunction)}[y](){return this.handleUpdate}[c](t){return this.handleUpdate=t}#t;set Item(t){if(this.#t=t,this.size)for(let[i,e]of this)this.set(i,new t(this,e))}get Item(){return this.#t}update(t){let i=Object.assign([],{added:[],deleted:[]});if(t){let e=!1,s=this.#t,n=this.#i;for(let u of t)switch(u?.[0]){case"i":{let[,r,p]=u;if(p?(this.sortList=p,this.sortCompareFunction=it(p),this.#e=tt(Object.keys(p).map(d=>d.replace(/\..+/,""))),e=!0):(this.sortList=null,this.sortCompareFunction=null,this.#e=[]),this.size){let d=new Map;for(let a of r)d.set(a._id,a);for(let[a,m]of this){let f=d.get(a);if(f){let J=n.get(a);if(s)m.update(f);else{for(let q in J)delete m[q];Object.assign(m,f)}n.set(a,f),i.push(m),d.delete(a)}else s?m.delete():this.delete(a),n.delete(a),i.deleted.push(a)}for(let[a,m]of d){let f=s?new s(this,m):{...m};this.set(a,f),n.set(a,m),i.push(f),i.added.push(f)}this.sortList&&(this.sorted=r.map(a=>this.get(a._id)))}else for(let d of r){let a=s?new s(this,d):{...d};this.set(a._id,a),this.sorted.push(a),n.set(a._id,d),i.push(a),i.added.push(a)}break}case"c":case"u":{let[,r]=u,p=this.get(r._id);if(p){let d=u[2]===!0,a=d?Object.keys(r):u[2],m=n.get(p._id);if(s)p.update(r);else{if(!d)for(let f in m)delete p[f];Object.assign(p,r)}d&&(r=Object.assign(m,r)),this.sortList&&!e&&(!a||a.some(f=>this.#e.includes(f)))&&(e=!0)}else p=s?new s(this,r):{...r},this.set(p._id,p),this.sorted.push(p),this.sortList&&(e=!0),i.added.push(p);n.set(p._id,r),i.push(p);break}case"d":{let[,r]=u,p=this.get(r);p&&(s?p.delete():this.delete(r),n.delete(r),Z(this.sorted,p),i.deleted.push(r));break}default:this.clear()}e&&this.sort()}else this.clear();return this.handleUpdate?.(this,i,t?.[0]?t:null),this}[S]=this.update;getAsUpdates(){return this.size||this.sortList?[["i",[...this.#i.values()],this.sortList]]:null}[g]=this.getAsUpdates;getAsInitialUpdated(){return Object.assign([...this.sorted],{added:[...this.sorted],deleted:[]})}[U]=this.getAsInitialUpdated;clear(){super.clear(),this.#i.clear(),this.sorted=[],this.sortList=null,this.sortCompareFunction=null,this.#e=[]}[v]=this.clear;valueOf(){return this.sorted}get[Symbol.toStringTag](){return"SubscriptionMap"}static updateSymbol=S;static getHandleUpdateSymbol=y;static setHandleUpdateSymbol=c;static getAsUpdatesSymbol=g;static getAsInitialUpdatedSymbol=U;static clearSymbol=v;static WithSubscription;static Item},k=class extends O{constructor(t,i,e,s=!0){super(null,e),this.publicationName=t,this.params=i,s&&this.subscribe()}publicationName;params;subscription=null;subscribe(){this.subscription||(this.subscription=new A("map",this.publicationName,this.params,t=>this.update(t)))}get[l](){return this.subscribe}unsubscribe(){this.subscription&&(this.subscription.cancel(),this.subscription=null)}get[h](){return this.unsubscribe}renew(t,i){this.subscription&&(this.unsubscribe(),t&&(Array.isArray(t)?i=t:this.publicationName=t),i&&(this.params=i),this.subscribe())}get[I](){return this.renew}[w](){return this.subscription}get[Symbol.toStringTag](){return"SubscriptionMapWithSubscription"}static subscribeSymbol=l;static unsubscribeSymbol=h;static renewSymbol=I;static getSubscriptionSymbol=w};O.WithSubscription=k;var F=class{constructor(t,i){this.#i=t,this.update(i)}_id;#i;update(t){Object.assign(this,t)}delete(){this.#i.delete(this._id)}};O.Item=F;var j=Symbol("handleUpdate"),x=Symbol("updates"),P=class{constructor(t,i){i&&(this[j]=i),t&&this[S](t)}[j];[x]=null;[y](){return this[j]}[c](t){return this[j]=t}[S](t){if(t){for(let i in this[x])delete this[i];for(let i in t)this[i]=t[i];this[x]=t}else this[v]();return this[j]?.(this,this,this[x]),this}[g](){return this[x]&&{...this[x]}}[U](){return this.valueOf()}[v](){for(let t in this)delete this[t];this[x]=null}valueOf(){return this[x]&&this}get[Symbol.toStringTag](){return"SubscriptionObject"}static updateSymbol=S;static getHandleUpdateSymbol=y;static setHandleUpdateSymbol=c;static getAsUpdatesSymbol=g;static getAsInitialUpdatedSymbol=U;static clearSymbol=v;static WithSubscription},G=class extends P{constructor(t,i,e,s=!0){super(null,e),this.#i=t,this.#e=i,s&&this[l]()}#i;#e;#t=null;[l](){this.#t||(this.#t=new A("object",this.#i,this.#e,t=>this[S](t)))}[h](){this.#t&&(this.#t.cancel(),this.#t=null)}[I](t,i){this.#t&&(this[h](),t&&(Array.isArray(t)?i=t:this.#i=t),i&&(this.#e=i),this[l]())}[w](){return this.#t}get[Symbol.toStringTag](){return"SubscriptionObjectWithSubscription"}static subscribeSymbol=l;static unsubscribeSymbol=h;static renewSymbol=I;static getSubscriptionSymbol=w};P.WithSubscription=G;function E(o){return Array.isArray(o)}var _=class o extends et{constructor(t,i){super(),this.name=t.name,this.define(t,i)}name;group;value;type;publicationName;params;handle;onBeforeInit;preventBind;emitUpdate;isLoaded=!1;isInited=!1;#i;#e;#t;define(t,i=this.group){if(!i)throw new Error("group is undefined");let{value:e,type:s="object",publicationName:n,params:u,handle:r,onBeforeInit:p,debounce:d=o.debounceLimit,preventBind:a}=t;if(this.group){if((!e||this.value===e)&&this.type===s&&this.publicationName===n&&JSON.stringify(this.params)===JSON.stringify(u)&&this.handle===r&&this.onBeforeInit===p)return this.#r({debounceLimit:d,preventBind:a});this.detach(),delete this.value,delete this.publicationName,delete this.params}this.type=s,this.handle=r,this.onBeforeInit=p,e?this.value=e:(this.publicationName=n??this.name,this.params=u??[]),this.#r({debounceLimit:d,preventBind:a}),this.#o(i)}#r({debounceLimit:t,preventBind:i}){let e=s=>{this.emit("update",this.value,s),this.group?.emit(`update.${this.name}`,this.value,s),this.group?.emitUpdate()};if(typeof t=="number"){let s,n,u=st(()=>{let r=!this.group;r&&(this.group=n),e(s),r&&delete this.group,s=void 0},t);this.emitUpdate=r=>{if(r!==void 0)if(E(r))if(E(s))for(let p of r)s.push(p);else s=Object.assign([...r],{added:[...r.added],deleted:[...r.deleted]});else typeof r=="object"?s?Object.assign(s,r):s={...r}:s=r;return n=this.group,u()}}else this.emitUpdate=e;this.preventBind===void 0?delete this.preventBind:this.preventBind=i}#o(t){if(!this.group){switch(this.group=t,this.group.items.push(this),this.group.items[this.name]=this,(!this.#i||this.#i.isFulfilled)&&(this.#i=new M),(!this.#e||this.#e.isFulfilled)&&(this.#e=new M),(!this.#t||this.#t.isFulfilled)&&(this.#t=new M),this.type){case"array":{let i=this.#n;this.value?this.value[c](i):this.value=new H(this.publicationName,this.params,i,!1);break}case"map":{let i=this.#n;this.value?this.value[c](i):this.value=new k(this.publicationName,this.params,i,!1);break}default:{let i=this.#n;this.value?this.value[c](i):this.value=new G(this.publicationName,this.params,i,!1)}}if(this.group.values.push(this.value),this.group.values[this.name]=this.value,this.onBeforeInit)switch(this.type){case"array":this.onBeforeInit.call(this.group,this.value);break;case"map":this.onBeforeInit.call(this.group,this.value);break;default:this.onBeforeInit.call(this.group,this.value)}}}detach(){this.group&&(this.value?.[h](),this.isLoaded=!1,this.#a(),delete this.group.values[this.name],V(this.group.values,this.value),delete this.group.items[this.name],V(this.group.items,this),delete this.group)}#s=null;#n=(t,i,e)=>{if(e)if(this.group.isLoaded){if(this.handle)switch(this.type){case"array":this.handle.call(this.group,i,this.group);break;case"map":this.handle.call(this.group,i,this.group);break;default:this.handle.call(this.group,i,this.group)}this.emitUpdate(i)}else this.#s=i,this.isLoaded=!0,b.groupLoad(this.group);else this.isLoaded&&(this.isLoaded=!1,b.groupUnload(this.group));this.isInited||(this.isInited=!0,b.groupInit(this.group))};#p(){if(this.#s){if(this.handle)switch(this.type){case"array":this.handle.call(this.group,this.#s,this.group);break;case"map":this.handle.call(this.group,this.#s,this.group);break;default:this.handle.call(this.group,this.#s,this.group)}this.#s=null,this.emit("load",this.value),this.#i.resolve(this),this.#t.isFulfilled&&(this.#t=new M)}}#u(){this.emit("init",this.value),this.#e.resolve(this)}#a(){if(this.handle)switch(this.type){case"array":this.handle.call(this.group,null,this.group);break;case"map":this.handle.call(this.group,null,this.group);break;default:this.handle.call(this.group,null,this.group)}this.emit("unload",this.value),this.#t.resolve(this),this.#i.isFulfilled&&(this.#i=new M)}loaded(){return this.#i}inited(){return this.#e}unloaded(){return this.#t}subscribe(){if(this.value){if(this.value[l])return this.value[l]();{let t=this.value[y]();if(t){let i=this.value[U](),e=this.value[g]();switch(this.type){case"array":return t(this.value,i,e);case"map":return t(this.value,i,e);default:return t(this.value,i,e)}}}}}unsubscribe(){return this.value?.[h]?.()}renew(t,i){return this.value?.[I]?.(t,i)}valueOf(){return this.value}static debounceLimit=4;static{b.itemLoad=t=>t.#p(),b.itemInit=t=>t.#u(),b.itemUnload=t=>t.#a()}};function ot(o){return Array.isArray(o)}function R(o){if(ot(o)){let t=o.slice(),i={};if(i.name=t.shift(),typeof t[0]=="object"&&!Array.isArray(t[0])){if(i.value=t.shift(),i.type=i.value.toString().match(/Subscription(Object|Array|Map)/)?.[1].toLowerCase(),!i.type)throw new Error("Unknown value type")}else typeof t[0]=="string"&&(i.type=t.shift()),typeof t[0]=="string"&&(i.publicationName=t.shift()),Array.isArray(t[0])&&(i.params=t.shift());return typeof t[0]=="function"&&(i.handle=t.shift()),typeof t[0]=="function"&&(i.onBeforeInit=t.shift()),typeof t[0]=="number"&&(i.debounce=t.shift()),typeof t[0]=="boolean"&&(i.preventBind=t.shift()),i}return o.type??="object",o}var z=class o extends rt{constructor(t,{target:i,debounce:e=o.debounceLimit,immediately:s}={}){super(),this.applyOptions({target:i,debounceLimit:e}),this.#e=new B,this.attach(t,!1,s)}target;emitUpdate;items=[];values=[];isLoaded=!1;isInited=!1;#i;#e;#t;#r=null;applyOptions({target:t,debounceLimit:i}){if(this.target!==t){if(this.target)for(let e of this.items)e.isLoaded&&!e.preventBind&&delete this.target[e.name];if(this.target=t,this.target)for(let e of this.items)e.isLoaded&&!e.preventBind&&(this.target[e.name]=e.value)}if(this.#r!==i)if(this.#r=i,typeof this.#r=="number"){let e=nt(()=>this.emit("update",this.values),this.#r);this.emitUpdate=()=>e()}else this.emitUpdate=()=>this.emit("update",this.values)}attach(t,i=this.isLoaded,e=!0){return i&&(this.isLoaded=!1),(!this.#i||this.#i.isFulfilled)&&(this.#i=new B),(!this.#t||this.#t.isFulfilled)&&(this.#t=new B),Promise.all(t.map(s=>new _(R(s),this)).map(s=>(e&&s.subscribe(),s.loaded())))}detach(t,i=!0){for(let e of t)this.items[e]?.detach();i&&(this.#n(),this.#o())}redefine(t){let i=new Map(this.items.map(n=>[n.name,n])),e=[],s=[];for(let n of t)n=R(n),i.delete(n.name)?e.push(n):s.push(n);return this.isLoaded=!1,this.detach([...i.keys()],!1),Promise.all([...e.map(n=>{let u=this.items[n.name];return u.define(n),u.subscribe(),u.loaded()}),...s.length?[this.attach(s,!1)]:[]])}subscribe(){return this.items.map(t=>t.subscribe())}unsubscribe(){return this.items.map(t=>t.unsubscribe())}#o(){if(!this.isLoaded&&this.items.every(t=>t.isLoaded)){if(this.target)for(let t of this.items)t.preventBind||(this.target[t.name]=t.value);this.isLoaded=!0;for(let t of this.items)b.itemLoad(t);if(this.emit("load",this.values),this.isInited)if(this.items.length)for(let t of this.items)t.emitUpdate();else this.emitUpdate();this.#i.resolve(this),this.#t.isFulfilled&&(this.#t=new B)}}#s(){if(!this.isInited&&this.items.every(t=>t.isInited)){if(this.isInited=!0,this.isLoaded)if(this.items.length)for(let t of this.items)t.emitUpdate();else this.emitUpdate();for(let t of this.items)b.itemInit(t);this.emit("init",this.values),this.#e.resolve(this)}}#n(){if(this.isLoaded&&this.items.every(t=>!t.isLoaded)){if(this.target)for(let t of this.items)t.preventBind||delete this.target[t.name];this.isLoaded=!1;for(let t of this.items)b.itemUnload(t);if(this.emit("unload",this.values),this.items.length)for(let t of this.items)t.emitUpdate();else this.emitUpdate();this.#t.resolve(this),this.#i.isFulfilled&&(this.#i=new B)}}loaded(){return this.#i}inited(){return this.#e}unloaded(){return this.#t}valueOf(){return this.values}[Symbol.iterator](){return this.values[Symbol.iterator]()}static debounceLimit=8;static{b.groupLoad=t=>t.#o(),b.groupInit=t=>t.#s(),b.groupUnload=t=>t.#n()}};export{A as Subscription,L as SubscriptionArray,H as SubscriptionArrayWithSubscription,z as SubscriptionGroup,O as SubscriptionMap,k as SubscriptionMapWithSubscription,P as SubscriptionObject,G as SubscriptionObjectWithSubscription,v as clearSymbol,U as getAsInitialUpdatedSymbol,g as getAsUpdatesSymbol,$ as getHandleSubscriptionSymbol,y as getHandleUpdateSymbol,w as getSubscriptionSymbol,I as renewSymbol,K as setHandleSubscriptionSymbol,c as setHandleUpdateSymbol,l as subscribeSymbol,h as unsubscribeSymbol,S as updateSymbol};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/Subscription.ts", "../src/SubscriptionArray.ts", "../src/symbols.ts", "../src/SubscriptionGroup/SubscriptionGroup.ts", "../src/SubscriptionGroup/common.ts", "../src/SubscriptionGroup/SubscriptionGroupItem.ts", "../src/SubscriptionMap.ts", "../src/SubscriptionObject.ts"],
|
|
4
|
-
"sourcesContent": ["import type { WS } from \"insite-ws/client\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\ndeclare global {\n\tvar __initials: unknown[] | undefined;\n}\n\n\nlet i: number;\nlet subscriptions: Map<number, Subscription>;\nlet ws: WS;\n\n\nexport class Subscription {\n\tconstructor(type: \"array\" | \"map\" | \"object\", publicationName: string, args: unknown[] = [], handler: (updates: any) => void, immediately = true) {\n\t\t\n\t\tif (!ws)\n\t\t\tthrow new Error(\"Subscription is not binded to WS. Do Subscription.bindTo(ws) first\");\n\t\t\n\t\tthis.i = i++;\n\t\tthis.type = type;\n\t\tthis.publicationName = publicationName;\n\t\tthis.args = args;\n\t\tthis.handler = handler;\n\t\tthis.immediately = immediately && !globalThis.__initials;\n\t\t\n\t\tsubscriptions.set(this.i, this);\n\t\t\n\t\tws.on(\"open\", this.start);\n\t\t\n\t\tif (ws.isOpen)\n\t\t\tthis.start();\n\t\t\n\t\tif (globalThis.__initials) {\n\t\t\tthis.isActive = true;\n\t\t\tthis.handler(globalThis.__initials.splice(0, 1)[0]);\n\t\t} else\n\t\t\tthis.isActive = false;\n\t\t\n\t}\n\t\n\ti;\n\ttype;\n\tpublicationName;\n\targs;\n\thandler;\n\timmediately;\n\tisActive;\n\t\n\tstart = () => {\n\t\t\n\t\tws.sendMessage(\"s-s\"/* subscription subscribe */, this.type, this.publicationName, this.i, this.args, this.immediately);\n\t\t\n\t\tthis.immediately = true;\n\t\t\n\t};\n\t\n\tcancel() {\n\t\t\n\t\tsubscriptions.delete(this.i);\n\t\t\n\t\tws.off(\"open\", this.start);\n\t\t\n\t\tws.sendMessage(\"s-u\"/* subscription unsubscribe */, this.i);\n\t\t\n\t}\n\t\n\t\n\tstatic bindTo(_ws: WS) {\n\t\tws = _ws;\n\t\t\n\t\ti = 0;\n\t\t\n\t\tsubscriptions = new Map();\n\t\t\n\t\tws.on(\"message:s-c\"/* subscription changed */, (si: number, updates: any) => {\n\t\t\tconst subscription = subscriptions.get(si);\n\t\t\tif (subscription) {\n\t\t\t\tsubscription.isActive = true;\n\t\t\t\tsubscription.handler(updates);\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\t\tws.on(\"close\", () => {\n\t\t\t\n\t\t\tfor (const subscription of subscriptions.values())\n\t\t\t\tsubscription.isActive = false;\n\t\t\t\n\t\t});\n\t\t\n\t\tws.on(\"server-change\", () => {\n\t\t\t\n\t\t\tfor (const subscription of subscriptions.values())\n\t\t\t\tsubscription.handler(null);\n\t\t\t\n\t\t});\n\t\t\n\t}\n\t\n}\n", "import { removeOne } from \"@nesvet/n\";\nimport { Subscription } from \"./Subscription\";\nimport {\n\tclearSymbol,\n\tgetAsInitialUpdatedSymbol,\n\tgetAsUpdatesSymbol,\n\tgetHandleUpdateSymbol,\n\tgetSubscriptionSymbol,\n\trenewSymbol,\n\tsetHandleUpdateSymbol,\n\tsubscribeSymbol,\n\tunsubscribeSymbol,\n\tupdateSymbol\n} from \"./symbols\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\ntype Item = unknown;\n\nexport type Updated<I extends Item = Item> = I[] & {\n\tdeleted: I[];\n\tadded: I[];\n};\n\nexport type Updates<I extends Item = Item> =\n\t(\n\t\t[ \"a\"/* add */, newItem: I ] |\n\t\t[ \"d\"/* delete */, itemToDelete: I ] |\n\t\t[ \"i\"/* initial */, items: I[], sort?: -1 | 0 | 1 ] |\n\t\tnull\n\t)[] |\n\tnull;\n\nexport type UpdateHandler<I extends Item = Item> = (array: SubscriptionArray<I>, updated: Updated<I>, updates: Updates<I>) => void;\n\nconst ascSort = (a: any, b: any) => a > b ? 1 : a < b ? -1 : 0;\nconst descSort = (a: any, b: any) => a > b ? -1 : a < b ? 1 : 0;\n\n\nexport class SubscriptionArray<I extends Item = Item> extends Array<I> {\n\tconstructor(updates?: Updates<I>, onUpdate?: UpdateHandler<I>) {\n\t\tsuper();\n\t\t\n\t\tif (onUpdate)\n\t\t\tthis.handleUpdate = onUpdate;\n\t\t\n\t\tif (Array.isArray(updates))\n\t\t\tthis.update(updates);\n\t\t\n\t}\n\t\n\tsorted: I[] = [];\n\t\n\thandleUpdate;\n\t\n\tsortDirection: -1 | 0 | 1 = 0;\n\t\n\tsortCompareFunction: typeof ascSort | typeof descSort | null = null;\n\t\n\t[getHandleUpdateSymbol]() {\n\t\treturn this.handleUpdate;\n\t}\n\t\n\t[setHandleUpdateSymbol](handleUpdate: UpdateHandler<I>) {\n\t\treturn (this.handleUpdate = handleUpdate);\n\t}\n\t\n\tupdate(updates: Updates<I>) {\n\t\t\n\t\tconst updated: Updated<I> = Object.assign([], {\n\t\t\tdeleted: [],\n\t\t\tadded: []\n\t\t});\n\t\t\n\t\tif (updates) {\n\t\t\tlet shouldSort = false;\n\t\t\t\n\t\t\tfor (const update of updates)\n\t\t\t\tswitch (update?.[0]) {\n\t\t\t\t\tcase \"i\"/* initial */: {\n\t\t\t\t\t\tconst [ , array, sort ] = update;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (sort) {\n\t\t\t\t\t\t\tthis.sortDirection = sort;\n\t\t\t\t\t\t\tthis.sortCompareFunction = sort > 0 ? ascSort : descSort;\n\t\t\t\t\t\t\tshouldSort = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.sortDirection = 0;\n\t\t\t\t\t\t\tthis.sortCompareFunction = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.length = 0;\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (const newItem of array) {\n\t\t\t\t\t\t\tthis.push(newItem);\n\t\t\t\t\t\t\tupdated.push(newItem);\n\t\t\t\t\t\t\tupdated.added.push(newItem);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcase \"a\"/* add */: {\n\t\t\t\t\t\tconst [ , newItem ] = update;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (!this.includes(newItem)) {\n\t\t\t\t\t\t\tthis.push(newItem);\n\t\t\t\t\t\t\tif (this.sortDirection)\n\t\t\t\t\t\t\t\tshouldSort = true;\n\t\t\t\t\t\t\tupdated.push(newItem);\n\t\t\t\t\t\t\tupdated.added.push(newItem);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcase \"d\"/* delete */: {\n\t\t\t\t\t\tconst [ , itemToDelete ] = update;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (removeOne(this, itemToDelete))\n\t\t\t\t\t\t\tupdated.deleted.push(itemToDelete);\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.clear();\n\t\t\t\t}\n\t\t\t\n\t\t\tif (shouldSort && this.sortCompareFunction)\n\t\t\t\tthis.sort(this.sortCompareFunction);\n\t\t\t\n\t\t} else\n\t\t\tthis.clear();\n\t\t\n\t\tthis.handleUpdate?.(this, updated, updates?.[0] ? updates : null);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t[updateSymbol] = this.update;\n\t\n\tgetAsUpdates(): Updates<I> {\n\t\treturn (\n\t\t\t(this.length || this.sortDirection) ?\n\t\t\t\t[ [ \"i\"/* initial */, [ ...this ], this.sortDirection ] ] :\n\t\t\t\tnull\n\t\t);\n\t}\n\t\n\t[getAsUpdatesSymbol] = this.getAsUpdates;\n\t\n\tgetAsInitialUpdated(): Updated<I> {\n\t\treturn Object.assign([ ...this.sorted ], {\n\t\t\tadded: [ ...this.sorted ],\n\t\t\tdeleted: []\n\t\t});\n\t}\n\t\n\t[getAsInitialUpdatedSymbol] = this.getAsInitialUpdated;\n\t\n\tclear() {\n\t\t\n\t\tthis.length = 0;\n\t\tthis.sortDirection = 0;\n\t\tthis.sortCompareFunction = null;\n\t\t\n\t}\n\t\n\t[clearSymbol] = this.clear;\n\t\n\tvalueOf() {\n\t\treturn this;\n\t}\n\t\n\tget [Symbol.toStringTag]() {\n\t\treturn \"SubscriptionArray\";\n\t}\n\t\n\t\n\tstatic updateSymbol = updateSymbol;\n\tstatic getHandleUpdateSymbol = getHandleUpdateSymbol;\n\tstatic setHandleUpdateSymbol = setHandleUpdateSymbol;\n\tstatic getAsUpdatesSymbol = getAsUpdatesSymbol;\n\tstatic getAsInitialUpdatedSymbol = getAsInitialUpdatedSymbol;\n\tstatic clearSymbol = clearSymbol;\n\tstatic WithSubscription: typeof SubscriptionArrayWithSubscription;\n\t\n}\n\n\nexport class SubscriptionArrayWithSubscription<I extends Item = Item> extends SubscriptionArray<I> {\n\tconstructor(publicationName: string, params: unknown[], onUpdate: UpdateHandler<I>, immediately = true) {\n\t\tsuper(null, onUpdate);\n\t\t\n\t\tthis.publicationName = publicationName;\n\t\tthis.params = params;\n\t\t\n\t\tif (immediately)\n\t\t\tthis.subscribe();\n\t\t\n\t}\n\t\n\tpublicationName;\n\tparams;\n\tsubscription: Subscription | null = null;\n\t\n\tsubscribe() {\n\t\t\n\t\tif (!this.subscription)\n\t\t\tthis.subscription = new Subscription(\"array\", this.publicationName, this.params, updates => this.update(updates as Updates<I>));\n\t\t\n\t}\n\t\n\tget [subscribeSymbol]() {\n\t\treturn this.subscribe;\n\t}\n\t\n\tunsubscribe() {\n\t\t\n\t\tif (this.subscription) {\n\t\t\tthis.subscription.cancel();\n\t\t\tthis.subscription = null;\n\t\t}\n\t\t\n\t}\n\t\n\tget [unsubscribeSymbol]() {\n\t\treturn this.unsubscribe;\n\t}\n\t\n\trenew(publicationName?: string, params?: unknown[]) {\n\t\t\n\t\tif (this.subscription) {\n\t\t\tthis.unsubscribe();\n\t\t\t\n\t\t\tif (publicationName)\n\t\t\t\tif (Array.isArray(publicationName))\n\t\t\t\t\tparams = publicationName;\n\t\t\t\telse\n\t\t\t\t\tthis.publicationName = publicationName;\n\t\t\t\n\t\t\tif (params)\n\t\t\t\tthis.params = params;\n\t\t\t\n\t\t\tthis.subscribe();\n\t\t}\n\t\t\n\t}\n\t\n\tget [renewSymbol]() {\n\t\treturn this.renew;\n\t}\n\t\n\t[getSubscriptionSymbol]() {\n\t\treturn this.subscription;\n\t}\n\t\n\tget [Symbol.toStringTag]() {\n\t\treturn \"SubscriptionArrayWithSubscription\";\n\t}\n\t\n\t\n\tstatic subscribeSymbol = subscribeSymbol;\n\tstatic unsubscribeSymbol = unsubscribeSymbol;\n\tstatic renewSymbol = renewSymbol;\n\tstatic getSubscriptionSymbol = getSubscriptionSymbol;\n\t\n}\n\nSubscriptionArray.WithSubscription = SubscriptionArrayWithSubscription;\n", "export const updateSymbol = Symbol(\"update\");\nexport const getHandleUpdateSymbol = Symbol(\"getHandleUpdate\");\nexport const setHandleUpdateSymbol = Symbol(\"setHandleUpdate\");\nexport const getAsUpdatesSymbol = Symbol(\"getAsUpdates\");\nexport const getAsInitialUpdatedSymbol = Symbol(\"getAsInitialUpdated\");\nexport const clearSymbol = Symbol(\"clear\");\nexport const subscribeSymbol = Symbol(\"subscribe\");\nexport const unsubscribeSymbol = Symbol(\"unsubscribe\");\nexport const renewSymbol = Symbol(\"renew\");\nexport const getSubscriptionSymbol = Symbol(\"getSubscription\");\nexport const getHandleSubscriptionSymbol = Symbol(\"getHandleSubscription\");\nexport const setHandleSubscriptionSymbol = Symbol(\"setHandleSubscription\");\n", "import EventEmitter from \"eventemitter3\";\nimport { debounce, StatefulPromise } from \"@nesvet/n\";\nimport { privates } from \"./common\";\nimport { SubscriptionGroupItem } from \"./SubscriptionGroupItem\";\nimport {\n\tDefinition,\n\tParseValues,\n\tSubscriptionHandle,\n\tSubscriptionOnBeforeInit,\n\tSubscriptionType,\n\tTupleDefinition,\n\tUnparsedDefinition\n} from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nfunction isTupleDefinition<T extends SubscriptionType>(definition: UnparsedDefinition<T>): definition is TupleDefinition {\n\treturn Array.isArray(definition);\n}\n\ntype Target = any;\n\ntype Options = {\n\ttarget?: Target;\n\tdebounce?: number;\n\timmediately?: boolean;\n};\n\n\nfunction parseDefinition<T extends SubscriptionType>(definition: UnparsedDefinition<T>) {\n\tif (isTupleDefinition(definition)) {\n\t\tconst args = definition.slice();\n\t\t\n\t\tconst parsed: Partial<Definition<T>> = {};\n\t\t\n\t\tparsed.name = args.shift() as Definition<T>[\"name\"];\n\t\tif (typeof args[0] == \"object\" && !Array.isArray(args[0])) {\n\t\t\tparsed.value = args.shift() as Definition<T>[\"value\"];\n\t\t\tparsed.type = parsed.value!.toString().match(/Subscription(Object|Array|Map)/)?.[1].toLowerCase() as Definition<T>[\"type\"];\n\t\t\tif (!parsed.type)\n\t\t\t\tthrow new Error(\"Unknown value type\");\n\t\t} else {\n\t\t\tif (typeof args[0] == \"string\")\n\t\t\t\tparsed.type = args.shift() as Definition<T>[\"type\"];\n\t\t\tif (typeof args[0] == \"string\")\n\t\t\t\tparsed.publicationName = args.shift() as Definition<T>[\"publicationName\"];\n\t\t\tif (Array.isArray(args[0]))\n\t\t\t\tparsed.params = args.shift() as Definition<T>[\"params\"];\n\t\t}\n\t\t\n\t\tif (typeof args[0] == \"function\")\n\t\t\tparsed.handle = args.shift() as SubscriptionHandle<T>;\n\t\tif (typeof args[0] == \"function\")\n\t\t\tparsed.onBeforeInit = args.shift() as SubscriptionOnBeforeInit<T>;\n\t\tif (typeof args[0] == \"number\")\n\t\t\tparsed.debounce = args.shift() as Definition<T>[\"debounce\"];\n\t\tif (typeof args[0] == \"boolean\")\n\t\t\tparsed.preventBind = args.shift() as Definition<T>[\"preventBind\"];\n\t\t\n\t\treturn parsed as Definition<T>;\n\t}\n\t\n\tdefinition.type ??= \"object\" as T;\n\t\n\treturn definition;\n}\n\nexport class SubscriptionGroup<DS extends UnparsedDefinition[] = any[]> extends EventEmitter {\n\tconstructor(\n\t\tdefinitions: DS,\n\t\t{\n\t\t\ttarget,\n\t\t\tdebounce: debounceLimit = SubscriptionGroup.debounceLimit,\n\t\t\timmediately\n\t\t}: Options = {}\n\t) {\n\t\tsuper();\n\t\t\n\t\tthis.applyOptions({ target, debounceLimit });\n\t\t\n\t\tthis.#initPromise = new StatefulPromise();\n\t\t\n\t\tvoid this.attach(definitions, false, immediately);\n\t\t\n\t}\n\t\n\ttarget?: Target;\n\temitUpdate!: () => void;\n\t\n\titems = [] as unknown as Record<string, SubscriptionGroupItem> & SubscriptionGroupItem[];\n\tvalues = [] as DS extends any ? (any[] & Record<string, any>) : ParseValues<DS>;\n\t\n\tisLoaded = false;\n\tisInited = false;\n\t\n\t#loadPromise!: StatefulPromise<SubscriptionGroup>;\n\t#initPromise: StatefulPromise<SubscriptionGroup>;\n\t#unloadPromise!: StatefulPromise<SubscriptionGroup>;\n\t\n\t#debounceLimit?: number | null = null;\n\t\n\tapplyOptions({ target, debounceLimit }: { target?: Target; debounceLimit?: number }) {\n\t\t\n\t\tif (this.target !== target) {\n\t\t\tif (this.target)\n\t\t\t\tfor (const item of this.items)\n\t\t\t\t\tif (item.isLoaded && !item.preventBind)\n\t\t\t\t\t\tdelete this.target[item.name];\n\t\t\t\n\t\t\tthis.target = target;\n\t\t\t\n\t\t\tif (this.target)\n\t\t\t\tfor (const item of this.items)\n\t\t\t\t\tif (item.isLoaded && !item.preventBind)\n\t\t\t\t\t\tthis.target[item.name] = item.value;\n\t\t}\n\t\t\n\t\tif (this.#debounceLimit !== debounceLimit) {\n\t\t\tthis.#debounceLimit = debounceLimit;\n\t\t\tif (typeof this.#debounceLimit == \"number\") {\n\t\t\t\tconst emitUpdateDebounced = debounce(() => this.emit(\"update\", this.values), this.#debounceLimit);\n\t\t\t\tthis.emitUpdate = () => emitUpdateDebounced();\n\t\t\t} else\n\t\t\t\tthis.emitUpdate = () => this.emit(\"update\", this.values);\n\t\t}\n\t\t\n\t}\n\t\n\tattach(definitions: DS, shouldReload = this.isLoaded, immediately = true) {\n\t\tif (shouldReload)\n\t\t\tthis.isLoaded = false;\n\t\t\n\t\tif (!this.#loadPromise || this.#loadPromise.isFulfilled)\n\t\t\tthis.#loadPromise = new StatefulPromise();\n\t\t\n\t\tif (!this.#unloadPromise || this.#unloadPromise.isFulfilled)\n\t\t\tthis.#unloadPromise = new StatefulPromise();\n\t\t\n\t\treturn Promise.all(definitions.map(definition =>\n\t\t\tnew SubscriptionGroupItem(parseDefinition(definition), this)\n\t\t).map(item => {\n\t\t\t\n\t\t\tif (immediately)\n\t\t\t\titem.subscribe();\n\t\t\t\n\t\t\treturn item.loaded();\n\t\t}));\n\t}\n\t\n\tdetach(names: string[], shouldUpdate = true) {\n\t\t\n\t\tfor (const name of names)\n\t\t\tthis.items[name]?.detach();\n\t\t\n\t\tif (shouldUpdate) {\n\t\t\tthis.#unload();\n\t\t\tthis.#load();\n\t\t}\n\t\t\n\t}\n\t\n\tredefine(definitions: DS) {\n\t\t\n\t\tconst itemsToDetach = new Map(this.items.map(item => [ item.name, item ]));\n\t\tconst definitionsToRedefine = [];\n\t\tconst definitionsToAttach = [] as unknown as DS;\n\t\t\n\t\tfor (let definition of definitions) {\n\t\t\tdefinition = parseDefinition(definition);\n\t\t\tif (itemsToDetach.delete(definition.name))\n\t\t\t\tdefinitionsToRedefine.push(definition);\n\t\t\telse\n\t\t\t\tdefinitionsToAttach.push(definition);\n\t\t}\n\t\t\n\t\tthis.isLoaded = false;\n\t\t\n\t\tthis.detach([ ...itemsToDetach.keys() ], false);\n\t\t\n\t\treturn Promise.all([\n\t\t\t...definitionsToRedefine.map(definition => {\n\t\t\t\tconst item = this.items[definition.name];\n\t\t\t\titem.define(definition);\n\t\t\t\t\n\t\t\t\titem.subscribe();\n\t\t\t\t\n\t\t\t\treturn item.loaded();\n\t\t\t}),\n\t\t\t...definitionsToAttach.length ? [ this.attach(definitionsToAttach, false) ] : []\n\t\t]);\n\t}\n\t\n\tsubscribe() {\n\t\treturn this.items.map(item => item.subscribe());\n\t}\n\t\n\tunsubscribe() {\n\t\treturn this.items.map(item => item.unsubscribe());\n\t}\n\t\n\t#load() {\n\t\t\n\t\tif (!this.isLoaded && this.items.every(item => item.isLoaded)) {\n\t\t\tif (this.target)\n\t\t\t\tfor (const item of this.items)\n\t\t\t\t\tif (!item.preventBind)\n\t\t\t\t\t\tthis.target[item.name] = item.value;\n\t\t\t\n\t\t\tthis.isLoaded = true;\n\t\t\t\n\t\t\tfor (const item of this.items)\n\t\t\t\tprivates.itemLoad!(item);\n\t\t\t\n\t\t\tthis.emit(\"load\", this.values);\n\t\t\t\n\t\t\tif (this.isInited)\n\t\t\t\tif (this.items.length)\n\t\t\t\t\tfor (const item of this.items)\n\t\t\t\t\t\titem.emitUpdate();\n\t\t\t\telse\n\t\t\t\t\tthis.emitUpdate();\n\t\t\t\n\t\t\t\n\t\t\tthis.#loadPromise.resolve(this);\n\t\t\t\n\t\t\tif (this.#unloadPromise.isFulfilled)\n\t\t\t\tthis.#unloadPromise = new StatefulPromise();\n\t\t}\n\t\t\n\t}\n\t\n\t#init() {\n\t\t\n\t\tif (!this.isInited && this.items.every(item => item.isInited)) {\n\t\t\tthis.isInited = true;\n\t\t\t\n\t\t\tif (this.isLoaded)\n\t\t\t\tif (this.items.length)\n\t\t\t\t\tfor (const item of this.items)\n\t\t\t\t\t\titem.emitUpdate();\n\t\t\t\telse\n\t\t\t\t\tthis.emitUpdate();\n\t\t\t\n\t\t\t\n\t\t\tfor (const item of this.items)\n\t\t\t\tprivates.itemInit!(item);\n\t\t\t\n\t\t\tthis.emit(\"init\", this.values);\n\t\t\t\n\t\t\tthis.#initPromise.resolve(this);\n\t\t}\n\t\t\n\t}\n\t\n\t#unload() {\n\t\t\n\t\tif (this.isLoaded && this.items.every(item => !item.isLoaded)) {\n\t\t\tif (this.target)\n\t\t\t\tfor (const item of this.items)\n\t\t\t\t\tif (!item.preventBind)\n\t\t\t\t\t\tdelete this.target[item.name];\n\t\t\t\n\t\t\tthis.isLoaded = false;\n\t\t\t\n\t\t\tfor (const item of this.items)\n\t\t\t\tprivates.itemUnload!(item);\n\t\t\t\n\t\t\tthis.emit(\"unload\", this.values);\n\t\t\t\n\t\t\tif (this.items.length)\n\t\t\t\tfor (const item of this.items)\n\t\t\t\t\titem.emitUpdate();\n\t\t\telse\n\t\t\t\tthis.emitUpdate();\n\t\t\t\n\t\t\tthis.#unloadPromise.resolve(this);\n\t\t\t\n\t\t\tif (this.#loadPromise.isFulfilled)\n\t\t\t\tthis.#loadPromise = new StatefulPromise();\n\t\t}\n\t\t\n\t}\n\t\n\tloaded() {\n\t\treturn this.#loadPromise;\n\t}\n\t\n\tinited() {\n\t\treturn this.#initPromise;\n\t}\n\t\n\tunloaded() {\n\t\treturn this.#unloadPromise;\n\t}\n\t\n\tvalueOf() {\n\t\treturn this.values;\n\t}\n\t\n\t[Symbol.iterator]() {\n\t\treturn this.values[Symbol.iterator]();\n\t}\n\t\n\t\n\tstatic debounceLimit = 8;\n\t\n\tstatic {\n\t\t\n\t\tprivates.groupLoad = (group: SubscriptionGroup) => group.#load();\n\t\tprivates.groupInit = (group: SubscriptionGroup) => group.#init();\n\t\tprivates.groupUnload = (group: SubscriptionGroup) => group.#unload();\n\t\t\n\t}\n\t\n}\n\nexport { Options as SubscriptionGroupOptions, Target as SubscriptionGroupTarget };\n", "import type { SubscriptionGroup } from \"./SubscriptionGroup\";\nimport type { SubscriptionGroupItem } from \"./SubscriptionGroupItem\";\nimport type { SubscriptionType } from \"./types\";\n\n\nexport const privates: {\n\tgroupLoad?: (group: SubscriptionGroup) => void;\n\tgroupInit?: (group: SubscriptionGroup) => void;\n\tgroupUnload?: (group: SubscriptionGroup) => void;\n\titemLoad?: <T extends SubscriptionType>(item: SubscriptionGroupItem<T>) => void;\n\titemInit?: <T extends SubscriptionType>(item: SubscriptionGroupItem<T>) => void;\n\titemUnload?: <T extends SubscriptionType>(item: SubscriptionGroupItem<T>) => void;\n} = {};\n", "import EventEmitter from \"eventemitter3\";\nimport { debounce, removeOne, StatefulPromise } from \"@nesvet/n\";\nimport {\n\tSubscriptionArrayWithSubscription,\n\ttype Updated as SubscriptionArrayUpdated,\n\ttype UpdateHandler as SubscriptionArrayUpdateHandler,\n\ttype Updates as SubscriptionArrayUpdates\n} from \"../SubscriptionArray\";\nimport {\n\tSubscriptionMapWithSubscription,\n\ttype Updated as SubscriptionMapUpdated,\n\ttype UpdateHandler as SubscriptionMapUpdateHandler,\n\ttype Updates as SubscriptionMapUpdates\n} from \"../SubscriptionMap\";\nimport {\n\tSubscriptionObjectWithSubscription,\n\ttype Updated as SubscriptionObjectUpdated,\n\ttype UpdateHandler as SubscriptionObjectUpdateHandler,\n\ttype Updates as SubscriptionObjectUpdates\n} from \"../SubscriptionObject\";\nimport {\n\tgetAsInitialUpdatedSymbol,\n\tgetAsUpdatesSymbol,\n\tgetHandleUpdateSymbol,\n\trenewSymbol,\n\tsetHandleUpdateSymbol,\n\tsubscribeSymbol,\n\tunsubscribeSymbol\n} from \"../symbols\";\nimport { privates } from \"./common\";\nimport type { SubscriptionGroup } from \"./SubscriptionGroup\";\nimport type {\n\tDefinition,\n\tSubscriptionHandle,\n\tSubscriptionOnBeforeInit,\n\tSubscriptionType,\n\tSubscriptionUpdated,\n\tSubscriptionUpdates,\n\tSubscriptionValue\n} from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\ntype HandleSubscription<T> = (_: any, updated: SubscriptionUpdated<T>, updates: SubscriptionUpdates<T>) => void;\n\nfunction isUpdatedMapOrArray(updated: SubscriptionUpdated<SubscriptionType>): updated is SubscriptionArrayUpdated | SubscriptionMapUpdated {\n\treturn Array.isArray(updated);\n}\n\n\nexport class SubscriptionGroupItem<T extends SubscriptionType = SubscriptionType, D extends Definition<T> = Definition<T>> extends EventEmitter {\n\tconstructor(definition: D, group: SubscriptionGroup) {\n\t\tsuper();\n\t\t\n\t\tthis.name = definition.name;\n\t\t\n\t\tthis.define(definition, group);\n\t\t\n\t}\n\t\n\tname;\n\tgroup?: SubscriptionGroup;\n\tvalue?: SubscriptionValue<T>;\n\ttype!: T | \"object\";\n\tpublicationName!: Definition<T>[\"publicationName\"];\n\tparams!: Definition<T>[\"params\"];\n\thandle!: Definition<T>[\"handle\"];\n\tonBeforeInit!: Definition<T>[\"onBeforeInit\"];\n\tpreventBind!: Definition<T>[\"preventBind\"];\n\t\n\temitUpdate!: (updated?: SubscriptionUpdated<T>) => void;\n\t\n\tisLoaded = false;\n\tisInited = false;\n\t\n\t#loadPromise!: StatefulPromise<SubscriptionGroupItem<T, D>>;\n\t#initPromise!: StatefulPromise<SubscriptionGroupItem<T, D>>;\n\t#unloadPromise!: StatefulPromise<SubscriptionGroupItem<T, D>>;\n\t\n\tdefine(definition: Definition<T>, group: SubscriptionGroup | undefined = this.group) {\n\t\tif (!group)\n\t\t\tthrow new Error(\"group is undefined\");\n\t\t\n\t\tconst {\n\t\t\tvalue,\n\t\t\ttype = \"object\",\n\t\t\tpublicationName,\n\t\t\tparams,\n\t\t\thandle,\n\t\t\tonBeforeInit,\n\t\t\tdebounce: debounceLimit = SubscriptionGroupItem.debounceLimit,\n\t\t\tpreventBind\n\t\t} = definition;\n\t\t\n\t\tif (this.group) {\n\t\t\tif (\n\t\t\t\t(!value || this.value === value) &&\n\t\t\t\tthis.type === type &&\n\t\t\t\tthis.publicationName === publicationName &&\n\t\t\t\tJSON.stringify(this.params) === JSON.stringify(params) &&\n\t\t\t\tthis.handle === handle &&\n\t\t\t\tthis.onBeforeInit === onBeforeInit\n\t\t\t)\n\t\t\t\treturn this.#applyOptions({ debounceLimit, preventBind });\n\t\t\t\n\t\t\tthis.detach();\n\t\t\tdelete this.value;\n\t\t\tdelete this.publicationName;\n\t\t\tdelete this.params;\n\t\t}\n\t\t\n\t\tthis.type = type;\n\t\tthis.handle = handle;\n\t\tthis.onBeforeInit = onBeforeInit;\n\t\tif (value)\n\t\t\tthis.value = value;\n\t\telse {\n\t\t\tthis.publicationName = publicationName ?? this.name;\n\t\t\tthis.params = params ?? [];\n\t\t}\n\t\t\n\t\tthis.#applyOptions({ debounceLimit, preventBind });\n\t\t\n\t\tthis.#attachTo(group);\n\t\t\n\t}\n\t\n\t#applyOptions({ debounceLimit, preventBind }: { debounceLimit?: number; preventBind?: boolean }) {\n\t\t\n\t\tconst emitUpdate: typeof this.emitUpdate = updated => {\n\t\t\tthis.emit(\"update\", this.value, updated);\n\t\t\tthis.group?.emit(`update.${this.name}`, this.value, updated);\n\t\t\tthis.group?.emitUpdate();\n\t\t\t\n\t\t};\n\t\t\n\t\tif (typeof debounceLimit == \"number\") {\n\t\t\tlet debouncedUpdated: SubscriptionUpdated<T> | undefined;\n\t\t\tlet group: SubscriptionGroup;\n\t\t\t\n\t\t\tconst emitUpdateDebounced = debounce(() => {\n\t\t\t\t\n\t\t\t\tconst isDetached = !this.group;\n\t\t\t\t\n\t\t\t\tif (isDetached)\n\t\t\t\t\tthis.group = group;\n\t\t\t\t\n\t\t\t\temitUpdate(debouncedUpdated);\n\t\t\t\t\n\t\t\t\tif (isDetached)\n\t\t\t\t\tdelete this.group;\n\t\t\t\t\n\t\t\t\tdebouncedUpdated = undefined;\n\t\t\t\t\n\t\t\t}, debounceLimit);\n\t\t\t\n\t\t\tthis.emitUpdate = updated => {\n\t\t\t\tif (updated !== undefined)\n\t\t\t\t\tif (isUpdatedMapOrArray(updated))\n\t\t\t\t\t\tif (isUpdatedMapOrArray(debouncedUpdated!))\n\t\t\t\t\t\t\tfor (const item of updated)\n\t\t\t\t\t\t\t\tdebouncedUpdated.push(item);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tdebouncedUpdated = Object.assign([ ...updated ], {\n\t\t\t\t\t\t\t\tadded: [ ...updated.added ],\n\t\t\t\t\t\t\t\tdeleted: [ ...updated.deleted ]\n\t\t\t\t\t\t\t}) as SubscriptionUpdated<T>;\n\t\t\t\t\telse if (typeof updated == \"object\")\n\t\t\t\t\t\tif (debouncedUpdated)\n\t\t\t\t\t\t\tObject.assign(debouncedUpdated, updated);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tdebouncedUpdated = { ...updated };\n\t\t\t\t\telse\n\t\t\t\t\t\tdebouncedUpdated = updated;\n\t\t\t\t\n\t\t\t\tgroup = this.group!;\n\t\t\t\t\n\t\t\t\treturn emitUpdateDebounced();\n\t\t\t};\n\t\t} else\n\t\t\tthis.emitUpdate = emitUpdate;\n\t\t\n\t\tif (this.preventBind === undefined)\n\t\t\tdelete this.preventBind;\n\t\telse\n\t\t\tthis.preventBind = preventBind;\n\t\t\n\t}\n\t\n\t#attachTo(group: SubscriptionGroup) {\n\t\tif (!this.group) {\n\t\t\tthis.group = group;\n\t\t\t\n\t\t\tthis.group.items.push(this as SubscriptionGroupItem<any>);\n\t\t\tthis.group.items[this.name] = this as SubscriptionGroupItem<any>;\n\t\t\t\n\t\t\tif (!this.#loadPromise || this.#loadPromise.isFulfilled)\n\t\t\t\tthis.#loadPromise = new StatefulPromise();\n\t\t\t\n\t\t\tif (!this.#initPromise || this.#initPromise.isFulfilled)\n\t\t\t\tthis.#initPromise = new StatefulPromise();\n\t\t\t\n\t\t\tif (!this.#unloadPromise || this.#unloadPromise.isFulfilled)\n\t\t\t\tthis.#unloadPromise = new StatefulPromise();\n\t\t\t\n\t\t\tswitch (this.type) {\n\t\t\t\tcase \"array\": {\n\t\t\t\t\tconst handleSubscription = this.#handleSubscription as HandleSubscription<\"array\">;\n\t\t\t\t\tif (this.value)\n\t\t\t\t\t\t(this.value as SubscriptionArrayWithSubscription)[setHandleUpdateSymbol](handleSubscription);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.value = new SubscriptionArrayWithSubscription(this.publicationName!, this.params!, handleSubscription, false) as SubscriptionValue<T>;\n\t\t\t\t\tbreak;\n\t\t\t\t} case \"map\": {\n\t\t\t\t\tconst handleSubscription = this.#handleSubscription as HandleSubscription<\"map\">;\n\t\t\t\t\tif (this.value)\n\t\t\t\t\t\t(this.value as SubscriptionMapWithSubscription)[setHandleUpdateSymbol](handleSubscription);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.value = new SubscriptionMapWithSubscription(this.publicationName!, this.params!, handleSubscription, false) as SubscriptionValue<T>;\n\t\t\t\t\tbreak;\n\t\t\t\t} default: {\n\t\t\t\t\tconst handleSubscription = this.#handleSubscription as HandleSubscription<\"object\">;\n\t\t\t\t\tif (this.value)\n\t\t\t\t\t\t(this.value as SubscriptionObjectWithSubscription)[setHandleUpdateSymbol](handleSubscription);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.value = new SubscriptionObjectWithSubscription(this.publicationName!, this.params!, handleSubscription, false) as SubscriptionValue<T>;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.group.values.push(this.value);\n\t\t\tthis.group.values[this.name] = this.value;\n\t\t\t\n\t\t\tif (this.onBeforeInit)\n\t\t\t\tswitch (this.type) {\n\t\t\t\t\tcase \"array\":\n\t\t\t\t\t\t(this.onBeforeInit as SubscriptionOnBeforeInit<\"array\">).call(this.group, this.value as SubscriptionArrayWithSubscription);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"map\":\n\t\t\t\t\t\t(this.onBeforeInit as SubscriptionOnBeforeInit<\"map\">).call(this.group, this.value as SubscriptionMapWithSubscription);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t(this.onBeforeInit as SubscriptionOnBeforeInit<\"object\">).call(this.group, this.value as SubscriptionObjectWithSubscription);\n\t\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\tdetach() {\n\t\t\n\t\tif (this.group) {\n\t\t\tthis.value?.[unsubscribeSymbol]();\n\t\t\t\n\t\t\tthis.isLoaded = false;\n\t\t\tthis.#unload();\n\t\t\t\n\t\t\tdelete this.group.values[this.name];// eslint-disable-line @typescript-eslint/no-array-delete\n\t\t\tremoveOne(this.group.values, this.value);\n\t\t\tdelete this.group.items[this.name];// eslint-disable-line @typescript-eslint/no-array-delete\n\t\t\tremoveOne(this.group.items, this as SubscriptionGroupItem<any>);\n\t\t\t\n\t\t\tdelete this.group;\n\t\t}\n\t\t\n\t}\n\t\n\t#loadUpdated: SubscriptionUpdated<T> | null = null;\n\t\n\t#handleSubscription: HandleSubscription<T> = (_, updated, updates) => {\n\t\tif (updates)\n\t\t\tif (this.group!.isLoaded) {\n\t\t\t\tif (this.handle)\n\t\t\t\t\tswitch (this.type) {\n\t\t\t\t\t\tcase \"array\":\n\t\t\t\t\t\t\t(this.handle as SubscriptionHandle<\"array\">).call(this.group!, updated as SubscriptionArrayUpdated, this.group!);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"map\":\n\t\t\t\t\t\t\t(this.handle as SubscriptionHandle<\"map\">).call(this.group!, updated as SubscriptionMapUpdated, this.group!);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t(this.handle as SubscriptionHandle<\"object\">).call(this.group!, updated as SubscriptionObjectUpdated, this.group!);\n\t\t\t\t\t}\n\t\t\t\tthis.emitUpdate(updated);\n\t\t\t} else {\n\t\t\t\tthis.#loadUpdated = updated;\n\t\t\t\tthis.isLoaded = true;\n\t\t\t\tprivates.groupLoad!(this.group!);\n\t\t\t}\n\t\telse if (this.isLoaded) {\n\t\t\tthis.isLoaded = false;\n\t\t\tprivates.groupUnload!(this.group!);\n\t\t}\n\t\t\n\t\tif (!this.isInited) {\n\t\t\tthis.isInited = true;\n\t\t\tprivates.groupInit!(this.group!);\n\t\t}\n\t\t\n\t};\n\t\n\t#load() {\n\t\t\n\t\tif (this.#loadUpdated) {\n\t\t\tif (this.handle)\n\t\t\t\tswitch (this.type) {\n\t\t\t\t\tcase \"array\":\n\t\t\t\t\t\t(this.handle as SubscriptionHandle<\"array\">).call(this.group!, this.#loadUpdated as SubscriptionArrayUpdated, this.group!);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"map\":\n\t\t\t\t\t\t(this.handle as SubscriptionHandle<\"map\">).call(this.group!, this.#loadUpdated as SubscriptionMapUpdated, this.group!);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t(this.handle as SubscriptionHandle<\"object\">).call(this.group!, this.#loadUpdated as SubscriptionObjectUpdated, this.group!);\n\t\t\t\t}\n\t\t\t\n\t\t\tthis.#loadUpdated = null;\n\t\t\t\n\t\t\tthis.emit(\"load\", this.value);\n\t\t\t\n\t\t\tthis.#loadPromise.resolve(this);\n\t\t\t\n\t\t\tif (this.#unloadPromise.isFulfilled)\n\t\t\t\tthis.#unloadPromise = new StatefulPromise();\n\t\t}\n\t\t\n\t}\n\t\n\t#init() {\n\t\t\n\t\tthis.emit(\"init\", this.value);\n\t\t\n\t\tthis.#initPromise.resolve(this);\n\t\t\n\t}\n\t\n\t#unload() {\n\t\t\n\t\tif (this.handle)\n\t\t\tswitch (this.type) {\n\t\t\t\tcase \"array\":\n\t\t\t\t\t(this.handle as SubscriptionHandle<\"array\">).call(this.group!, null, this.group!);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"map\":\n\t\t\t\t\t(this.handle as SubscriptionHandle<\"map\">).call(this.group!, null, this.group!);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t(this.handle as SubscriptionHandle<\"object\">).call(this.group!, null, this.group!);\n\t\t\t}\n\t\t\n\t\tthis.emit(\"unload\", this.value);\n\t\t\n\t\tthis.#unloadPromise.resolve(this);\n\t\t\n\t\tif (this.#loadPromise.isFulfilled)\n\t\t\tthis.#loadPromise = new StatefulPromise();\n\t\t\n\t}\n\t\n\tloaded() {\n\t\treturn this.#loadPromise;\n\t}\n\t\n\tinited() {\n\t\treturn this.#initPromise;\n\t}\n\t\n\tunloaded() {\n\t\treturn this.#unloadPromise;\n\t}\n\t\n\tsubscribe() {\n\t\t\n\t\tif (this.value)\n\t\t\tif (this.value[subscribeSymbol])\n\t\t\t\treturn this.value[subscribeSymbol]();\n\t\t\telse {\n\t\t\t\tconst handleUpdate = this.value[getHandleUpdateSymbol]();\n\t\t\t\t\n\t\t\t\tif (handleUpdate) {\n\t\t\t\t\tconst initialUpdated = this.value[getAsInitialUpdatedSymbol]();\n\t\t\t\t\tconst updates = this.value[getAsUpdatesSymbol]();\n\t\t\t\t\t\n\t\t\t\t\tswitch (this.type) {\n\t\t\t\t\t\tcase \"array\":\n\t\t\t\t\t\t\treturn (handleUpdate as SubscriptionArrayUpdateHandler)(this.value as SubscriptionArrayWithSubscription, initialUpdated as SubscriptionArrayUpdated, updates as SubscriptionArrayUpdates);\n\t\t\t\t\t\t\n\t\t\t\t\t\tcase \"map\":\n\t\t\t\t\t\t\treturn (handleUpdate as SubscriptionMapUpdateHandler)(this.value as SubscriptionMapWithSubscription, initialUpdated as SubscriptionMapUpdated, updates as SubscriptionMapUpdates);\n\t\t\t\t\t\t\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn (handleUpdate as SubscriptionObjectUpdateHandler)(this.value as SubscriptionObjectWithSubscription, initialUpdated as SubscriptionObjectUpdated, updates as SubscriptionObjectUpdates);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t}\n\t\n\tunsubscribe() {\n\t\treturn this.value?.[unsubscribeSymbol]?.();\n\t}\n\t\n\trenew(publicationName: Definition<T>[\"publicationName\"], params: Definition<T>[\"params\"]) {\n\t\treturn this.value?.[renewSymbol]?.(publicationName, params);\n\t}\n\t\n\tvalueOf() {\n\t\treturn this.value;\n\t}\n\t\n\t\n\tstatic debounceLimit = 4;\n\t\n\tstatic {\n\t\t\n\t\tprivates.itemLoad = <\n\t\t\tDP extends Definition<TP>,\n\t\t\tTP extends SubscriptionType\n\t\t>(item: SubscriptionGroupItem<TP, DP>) => item.#load();\n\t\tprivates.itemInit = <\n\t\t\tDP extends Definition<TP>,\n\t\t\tTP extends SubscriptionType\n\t\t>(item: SubscriptionGroupItem<TP, DP>) => item.#init();\n\t\tprivates.itemUnload = <\n\t\t\tDP extends Definition<TP>,\n\t\t\tTP extends SubscriptionType\n\t\t>(item: SubscriptionGroupItem<TP, DP>) => item.#unload();\n\t\t\n\t}\n\t\n}\n", "import { removeOne, unique } from \"@nesvet/n\";\nimport { Subscription } from \"./Subscription\";\nimport {\n\tclearSymbol,\n\tgetAsInitialUpdatedSymbol,\n\tgetAsUpdatesSymbol,\n\tgetHandleUpdateSymbol,\n\tgetSubscriptionSymbol,\n\trenewSymbol,\n\tsetHandleUpdateSymbol,\n\tsubscribeSymbol,\n\tunsubscribeSymbol,\n\tupdateSymbol\n} from \"./symbols\";\n\n\ntype GenericItem = Record<string, any> & { _id: string };// eslint-disable-line @typescript-eslint/no-explicit-any\n\ntype Item = GenericItem | SubscriptionMapItem;\n\nexport type Updated<I extends Item = Item> = I[] & {\n\tdeleted: string[];\n\tadded: I[];\n};\n\ntype SortList = Record<string, -1 | 1>;\n\nexport type Updates<I extends Item = Item> =\n\t(\n\t\t[ \"c\"/* create */, item: I ] |\n\t\t[ \"d\"/* delete */, _id: string ] |\n\t\t[ \"i\"/* initial */, items: I[], sortList?: SortList | null ] |\n\t\t[ \"u\"/* update */, itemUpdates: Partial<I> & { _id: string }, isAtomicOrUpdatedFields: string[] | true ] |\n\t\tnull\n\t)[] |\n\tnull;\n\nexport type UpdateHandler<I extends Item = Item> = (map: SubscriptionMap<I>, updated: Updated<I>, updates: Updates<I>) => void;\n\ndeclare global {\n\tvar __insite_subscription_map_sort_function: ((a: Item, b: Item) => -1 | 0 | 1) | undefined;// eslint-disable-line camelcase, @typescript-eslint/naming-convention\n}\n\nfunction createSortFunction(sortList: SortList) {\n\t\n\tconst tempScript = document.createElement(\"script\");\n\t\n\ttempScript.textContent = `window.__insite_subscription_map_sort_function = function sort(a, b) { return ${\n\t\tObject.entries(sortList)\n\t\t\t.map(([ key, value ]) => {\n\t\t\t\tif (key.includes(\".\"))\n\t\t\t\t\tkey = key.replaceAll(\".\", \"?.\");\n\t\t\t\t\n\t\t\t\treturn value > 0 ? `a.${key} > b.${key} ? 1 : a.${key} < b.${key} ? -1 :` : `a.${key} < b.${key} ? 1 : a.${key} > b.${key} ? -1 :`;\n\t\t\t})\n\t\t\t.concat(\"0\")\n\t\t\t.join(\" \")\n\t};}`;\n\t\n\tdocument.head.append(tempScript);\n\t\n\tconst sortFunction = globalThis.__insite_subscription_map_sort_function!;\n\t\n\ttempScript.remove();\n\tdelete globalThis.__insite_subscription_map_sort_function;\n\t\n\treturn sortFunction;\n}\n\n// function createSortFunction(sortList: SortList) {\n// return new Function(// eslint-disable-line no-new-func\n// \t\t\"a\"/* Item */,\n// \t\t\"b\"/* Item */,\n// \t\t`return ${\n// \t\t\tObject.entries(sortList)\n// \t\t\t\t.map(([ key, value ]) => value > 0 ? `a.${key} > b.${key} ? 1 : a.${key} < b.${key} ? -1 :` : `a.${key} < b.${key} ? 1 : a.${key} > b.${key} ? -1 :`)\n// \t\t\t\t.concat(\"0\")\n// \t\t\t\t.join(\" \")\n// \t\t}`\n// \t) as (a: Item, b: Item) => -1 | 0 | 1;\n// }\n\n\nexport class SubscriptionMap<I extends Item = Item> extends Map<string, I> {\n\tconstructor(updates?: Updates<I>, onUpdate?: UpdateHandler<I>) {\n\t\tsuper();\n\t\t\n\t\tif (onUpdate)\n\t\t\tthis.handleUpdate = onUpdate;\n\t\t\n\t\tif (updates)\n\t\t\tthis.update(updates);\n\t\t\n\t}\n\t\n\thandleUpdate;\n\t\n\t#updates = new Map<string, I>();\n\t\n\tsortList: SortList | null = null;\n\t\n\tsortCompareFunction: ((a: I, b: I) => number) | null = null;\n\t\n\t#fieldsToSort: string[] = [];\n\t\n\tsorted: I[] = [];\n\t\n\tsort() {\n\t\t\n\t\tif (this.sortCompareFunction)\n\t\t\tthis.sorted.sort(this.sortCompareFunction);\n\t\t\n\t}\n\t\n\t[getHandleUpdateSymbol]() {\n\t\treturn this.handleUpdate;\n\t}\n\t\n\t[setHandleUpdateSymbol](handleUpdate: UpdateHandler<I>) {\n\t\treturn (this.handleUpdate = handleUpdate);\n\t}\n\t\n\t#Item!: { new (map: SubscriptionMap<I>, updates: GenericItem): I };\n\t\n\tset Item(TheItem: { new (map: SubscriptionMap<I>, updates: GenericItem): I }) { // eslint-disable-line @typescript-eslint/naming-convention\n\t\tthis.#Item = TheItem;\n\t\t\n\t\tif (this.size)\n\t\t\tfor (const [ _id, item ] of this)\n\t\t\t\tthis.set(_id, new TheItem(this, item));\n\t\t\n\t}\n\t\n\tget Item() {\n\t\treturn this.#Item;\n\t}\n\t\n\tupdate(updates: Updates<I>) {\n\t\t\n\t\tconst updated: Updated<I> = Object.assign([], {\n\t\t\tadded: [],\n\t\t\tdeleted: []\n\t\t});\n\t\t\n\t\tif (updates) {\n\t\t\tlet shouldSort = false;\n\t\t\t\n\t\t\tconst TheItem = this.#Item;// eslint-disable-line @typescript-eslint/naming-convention\n\t\t\tconst prevUpdates = this.#updates;\n\t\t\t\n\t\t\tfor (const update of updates)\n\t\t\t\tswitch (update?.[0]) {\n\t\t\t\t\tcase \"i\"/* initial */: {\n\t\t\t\t\t\tconst [ , array, sortList ] = update;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (sortList) {\n\t\t\t\t\t\t\tthis.sortList = sortList;\n\t\t\t\t\t\t\tthis.sortCompareFunction = createSortFunction(sortList);\n\t\t\t\t\t\t\tthis.#fieldsToSort = unique(Object.keys(sortList).map(key => key.replace(/\\..+/, \"\")));\n\t\t\t\t\t\t\tshouldSort = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.sortList = null;\n\t\t\t\t\t\t\tthis.sortCompareFunction = null;\n\t\t\t\t\t\t\tthis.#fieldsToSort = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (this.size) {\n\t\t\t\t\t\t\tconst updatesMap = new Map<string, I>();\n\t\t\t\t\t\t\tfor (const itemUpdates of array)\n\t\t\t\t\t\t\t\tupdatesMap.set(itemUpdates._id, itemUpdates);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfor (const [ _id, item ] of this) {\n\t\t\t\t\t\t\t\tconst itemUpdates = updatesMap.get(_id);\n\t\t\t\t\t\t\t\tif (itemUpdates) {\n\t\t\t\t\t\t\t\t\tconst prevItemUpdates = prevUpdates.get(_id);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (TheItem)\n\t\t\t\t\t\t\t\t\t\titem.update(itemUpdates);\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tfor (const key in prevItemUpdates)// eslint-disable-line guard-for-in\n\t\t\t\t\t\t\t\t\t\t\tdelete item[key as keyof typeof item];\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tObject.assign(item, itemUpdates);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tprevUpdates.set(_id, itemUpdates);\n\t\t\t\t\t\t\t\t\tupdated.push(item);\n\t\t\t\t\t\t\t\t\tupdatesMap.delete(_id);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (TheItem)\n\t\t\t\t\t\t\t\t\t\titem.delete();\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tthis.delete(_id);\n\t\t\t\t\t\t\t\t\tprevUpdates.delete(_id);\n\t\t\t\t\t\t\t\t\tupdated.deleted.push(_id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfor (const [ _id, itemUpdates ] of updatesMap) {\n\t\t\t\t\t\t\t\tconst item = TheItem ? new TheItem(this, itemUpdates) : { ...itemUpdates };\n\t\t\t\t\t\t\t\tthis.set(_id, item);\n\t\t\t\t\t\t\t\tprevUpdates.set(_id, itemUpdates);\n\t\t\t\t\t\t\t\tupdated.push(item);\n\t\t\t\t\t\t\t\tupdated.added.push(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (this.sortList)\n\t\t\t\t\t\t\t\tthis.sorted = array.map(newItem => this.get(newItem._id)!);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tfor (const itemUpdates of array) {\n\t\t\t\t\t\t\t\tconst item = (TheItem ? new TheItem(this, itemUpdates) : { ...itemUpdates });\n\t\t\t\t\t\t\t\tthis.set(item._id, item);\n\t\t\t\t\t\t\t\tthis.sorted.push(item);\n\t\t\t\t\t\t\t\tprevUpdates.set(item._id, itemUpdates);\n\t\t\t\t\t\t\t\tupdated.push(item);\n\t\t\t\t\t\t\t\tupdated.added.push(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcase \"c\"/* create */:\n\t\t\t\t\tcase \"u\"/* update */: {\n\t\t\t\t\t\tlet [ , itemUpdates ] = update;\n\t\t\t\t\t\tlet item = this.get(itemUpdates._id);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (item) {\n\t\t\t\t\t\t\tconst isAtomic = update[2] === true;\n\t\t\t\t\t\t\tconst updatedFields = isAtomic ? Object.keys(itemUpdates) : update[2] as string[];\n\t\t\t\t\t\t\tconst prevItemUpdates = prevUpdates.get(item._id)!;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (TheItem)\n\t\t\t\t\t\t\t\titem.update(itemUpdates);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif (!isAtomic)\n\t\t\t\t\t\t\t\t\tfor (const key in prevItemUpdates)// eslint-disable-line guard-for-in\n\t\t\t\t\t\t\t\t\t\tdelete item[key as keyof typeof item];\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tObject.assign(item, itemUpdates);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (isAtomic)\n\t\t\t\t\t\t\t\titemUpdates = Object.assign(prevItemUpdates, itemUpdates);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (this.sortList && !shouldSort && (!updatedFields || updatedFields.some(fieldName => this.#fieldsToSort.includes(fieldName))))\n\t\t\t\t\t\t\t\tshouldSort = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem = (TheItem ? new TheItem(this, itemUpdates) : { ...itemUpdates }) as I;\n\t\t\t\t\t\t\tthis.set(item._id, item);\n\t\t\t\t\t\t\tthis.sorted.push(item);\n\t\t\t\t\t\t\tif (this.sortList)\n\t\t\t\t\t\t\t\tshouldSort = true;\n\t\t\t\t\t\t\tupdated.added.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tprevUpdates.set(item._id, itemUpdates as I);\n\t\t\t\t\t\tupdated.push(item);\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcase \"d\"/* delete */: {\n\t\t\t\t\t\tconst [ , _id ] = update;\n\t\t\t\t\t\tconst itemToDelete = this.get(_id);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (itemToDelete) {\n\t\t\t\t\t\t\tif (TheItem)\n\t\t\t\t\t\t\t\titemToDelete.delete();\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tthis.delete(_id);\n\t\t\t\t\t\t\tprevUpdates.delete(_id);\n\t\t\t\t\t\t\tremoveOne(this.sorted, itemToDelete);\n\t\t\t\t\t\t\tupdated.deleted.push(_id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.clear();\n\t\t\t\t}\n\t\t\t\n\t\t\tif (shouldSort)\n\t\t\t\tthis.sort();\n\t\t\t\n\t\t} else\n\t\t\tthis.clear();\n\t\t\n\t\tthis.handleUpdate?.(this, updated, updates?.[0] ? updates : null);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t[updateSymbol] = this.update;\n\t\n\tgetAsUpdates(): Updates<I> {\n\t\treturn (\n\t\t\t(this.size || this.sortList) ?\n\t\t\t\t[ [ \"i\"/* initial */, [ ...this.#updates.values() ], this.sortList ] ] :\n\t\t\t\tnull\n\t\t);\n\t}\n\t\n\t[getAsUpdatesSymbol] = this.getAsUpdates;\n\t\n\tgetAsInitialUpdated(): Updated<I> {\n\t\treturn Object.assign([ ...this.sorted ], {\n\t\t\tadded: [ ...this.sorted ],\n\t\t\tdeleted: []\n\t\t});\n\t}\n\t\n\t[getAsInitialUpdatedSymbol] = this.getAsInitialUpdated;\n\t\n\tclear() {\n\t\t\n\t\tsuper.clear();\n\t\tthis.#updates.clear();\n\t\tthis.sorted = [];\n\t\tthis.sortList = null;\n\t\tthis.sortCompareFunction = null;\n\t\tthis.#fieldsToSort = [];\n\t\t\n\t}\n\t\n\t[clearSymbol] = this.clear;\n\t\n\tvalueOf() {\n\t\treturn this.sorted;\n\t}\n\t\n\tget [Symbol.toStringTag]() {\n\t\treturn \"SubscriptionMap\";\n\t}\n\t\n\t\n\tstatic updateSymbol = updateSymbol;\n\tstatic getHandleUpdateSymbol = getHandleUpdateSymbol;\n\tstatic setHandleUpdateSymbol = setHandleUpdateSymbol;\n\tstatic getAsUpdatesSymbol = getAsUpdatesSymbol;\n\tstatic getAsInitialUpdatedSymbol = getAsInitialUpdatedSymbol;\n\tstatic clearSymbol = clearSymbol;\n\tstatic WithSubscription: typeof SubscriptionMapWithSubscription;\n\tstatic Item: typeof SubscriptionMapItem;\n\t\n}\n\n\nexport class SubscriptionMapWithSubscription<I extends Item = Item> extends SubscriptionMap<I> {\n\tconstructor(publicationName: string, params: unknown[], onUpdate: UpdateHandler<I>, immediately = true) {\n\t\tsuper(null, onUpdate);\n\t\t\n\t\tthis.publicationName = publicationName;\n\t\tthis.params = params;\n\t\t\n\t\tif (immediately)\n\t\t\tthis.subscribe();\n\t\t\n\t}\n\t\n\tpublicationName;\n\tparams;\n\t\n\tsubscription: Subscription | null = null;\n\t\n\tsubscribe() {\n\t\t\n\t\tif (!this.subscription)\n\t\t\tthis.subscription = new Subscription(\"map\", this.publicationName, this.params, updates => this.update(updates as Updates<I>));\n\t\t\n\t}\n\t\n\tget [subscribeSymbol]() {\n\t\treturn this.subscribe;\n\t}\n\t\n\tunsubscribe() {\n\t\t\n\t\tif (this.subscription) {\n\t\t\tthis.subscription.cancel();\n\t\t\tthis.subscription = null;\n\t\t}\n\t\t\n\t}\n\t\n\tget [unsubscribeSymbol]() {\n\t\treturn this.unsubscribe;\n\t}\n\t\n\trenew(publicationName?: string, params?: unknown[]) {\n\t\t\n\t\tif (this.subscription) {\n\t\t\tthis.unsubscribe();\n\t\t\t\n\t\t\tif (publicationName)\n\t\t\t\tif (Array.isArray(publicationName))\n\t\t\t\t\tparams = publicationName;\n\t\t\t\telse\n\t\t\t\t\tthis.publicationName = publicationName;\n\t\t\t\n\t\t\tif (params)\n\t\t\t\tthis.params = params;\n\t\t\t\n\t\t\tthis.subscribe();\n\t\t}\n\t\t\n\t}\n\t\n\tget [renewSymbol]() {\n\t\treturn this.renew;\n\t}\n\t\n\t[getSubscriptionSymbol]() {\n\t\treturn this.subscription;\n\t}\n\t\n\tget [Symbol.toStringTag]() {\n\t\treturn \"SubscriptionMapWithSubscription\";\n\t}\n\t\n\t\n\tstatic subscribeSymbol = subscribeSymbol;\n\tstatic unsubscribeSymbol = unsubscribeSymbol;\n\tstatic renewSymbol = renewSymbol;\n\tstatic getSubscriptionSymbol = getSubscriptionSymbol;\n\t\n}\n\nSubscriptionMap.WithSubscription = SubscriptionMapWithSubscription;\n\n\nexport class SubscriptionMapItem {\n\tconstructor(map: SubscriptionMap, updates: GenericItem) {\n\t\tthis.#map = map;\n\t\t\n\t\tthis.update(updates);\n\t\t\n\t}\n\t\n\t_id!: string;\n\t\n\t#map;\n\t\n\tupdate(updates: GenericItem) {\n\t\tObject.assign(this, updates);\n\t\t\n\t}\n\t\n\tdelete() {\n\t\t\n\t\tthis.#map.delete(this._id);\n\t\t\n\t}\n\t\n}\n\nSubscriptionMap.Item = SubscriptionMapItem;\n", "import { Subscription } from \"./Subscription\";\nimport {\n\tclearSymbol,\n\tgetAsInitialUpdatedSymbol,\n\tgetAsUpdatesSymbol,\n\tgetHandleUpdateSymbol,\n\tgetSubscriptionSymbol,\n\trenewSymbol,\n\tsetHandleUpdateSymbol,\n\tsubscribeSymbol,\n\tunsubscribeSymbol,\n\tupdateSymbol\n} from \"./symbols\";\n\n\nconst handleUpdateSymbol = Symbol(\"handleUpdate\");\nconst updatesSymbol = Symbol(\"updates\");\n\nexport type Updated = Record<string, unknown>;\nexport type Updates = Record<string, unknown> | null;\nexport type UpdateHandler = (object: SubscriptionObject, updated: Updated, updates: Updates) => void;\n\n\nexport class SubscriptionObject {\n\tconstructor(updates?: Updates, onUpdate?: UpdateHandler) {\n\t\tif (onUpdate)\n\t\t\tthis[handleUpdateSymbol] = onUpdate;\n\t\t\n\t\tif (updates)\n\t\t\tthis[updateSymbol](updates);\n\t\t\n\t}\n\t\n\t[handleUpdateSymbol]?: UpdateHandler;\n\t\n\t[updatesSymbol]: Updates = null;\n\t\n\t[getHandleUpdateSymbol]() {\n\t\treturn this[handleUpdateSymbol];\n\t}\n\t\n\t[setHandleUpdateSymbol](handleUpdate: UpdateHandler) {\n\t\treturn (this[handleUpdateSymbol] = handleUpdate);\n\t}\n\t\n\t[updateSymbol](updates: Updates) {\n\t\tif (updates) {\n\t\t\tfor (const key in this[updatesSymbol])// eslint-disable-line guard-for-in\n\t\t\t\tdelete this[key];\n\t\t\tfor (const key in updates)// eslint-disable-line guard-for-in\n\t\t\t\tthis[key] = updates[key];\n\t\t\tthis[updatesSymbol] = updates;\n\t\t} else\n\t\t\tthis[clearSymbol]();\n\t\t\n\t\tthis[handleUpdateSymbol]?.(this, this, this[updatesSymbol]);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t[getAsUpdatesSymbol](): Updates {\n\t\treturn this[updatesSymbol] && { ...this[updatesSymbol] };\n\t}\n\t\n\t[getAsInitialUpdatedSymbol](): Updated {\n\t\treturn this.valueOf()!;\n\t}\n\t\n\t[clearSymbol]() {\n\t\t\n\t\tfor (const key in this)// eslint-disable-line guard-for-in\n\t\t\tdelete this[key];\n\t\tthis[updatesSymbol] = null;\n\t\t\n\t}\n\t\n\tvalueOf() {\n\t\treturn this[updatesSymbol] && this;\n\t}\n\t\n\tget [Symbol.toStringTag]() {\n\t\treturn \"SubscriptionObject\";\n\t}\n\t\n\t[key: string]: unknown;\n\t\n\t\n\tstatic updateSymbol = updateSymbol;\n\tstatic getHandleUpdateSymbol = getHandleUpdateSymbol;\n\tstatic setHandleUpdateSymbol = setHandleUpdateSymbol;\n\tstatic getAsUpdatesSymbol = getAsUpdatesSymbol;\n\tstatic getAsInitialUpdatedSymbol = getAsInitialUpdatedSymbol;\n\tstatic clearSymbol = clearSymbol;\n\tstatic WithSubscription: typeof SubscriptionObjectWithSubscription;\n\t\n}\n\n\nexport class SubscriptionObjectWithSubscription extends SubscriptionObject {\n\tconstructor(publicationName: string, params: unknown[], onUpdate: UpdateHandler, immediately = true) {\n\t\tsuper(null, onUpdate);\n\t\t\n\t\tthis.#publicationName = publicationName;\n\t\tthis.#params = params;\n\t\t\n\t\tif (immediately)\n\t\t\tthis[subscribeSymbol]();\n\t\t\n\t}\n\t\n\t#publicationName;\n\t#params;\n\t#subscription: Subscription | null = null;\n\t\n\t[subscribeSymbol]() {\n\t\t\n\t\tif (!this.#subscription)\n\t\t\tthis.#subscription = new Subscription(\"object\", this.#publicationName, this.#params, updates => this[updateSymbol](updates as Updates));\n\t\t\n\t}\n\t\n\t[unsubscribeSymbol]() {\n\t\t\n\t\tif (this.#subscription) {\n\t\t\tthis.#subscription.cancel();\n\t\t\tthis.#subscription = null;\n\t\t}\n\t\t\n\t}\n\t\n\t[renewSymbol](publicationName?: string, params?: unknown[]) {\n\t\t\n\t\tif (this.#subscription) {\n\t\t\tthis[unsubscribeSymbol]();\n\t\t\t\n\t\t\tif (publicationName)\n\t\t\t\tif (Array.isArray(publicationName))\n\t\t\t\t\tparams = publicationName;\n\t\t\t\telse\n\t\t\t\t\tthis.#publicationName = publicationName;\n\t\t\t\n\t\t\tif (params)\n\t\t\t\tthis.#params = params;\n\t\t\t\n\t\t\tthis[subscribeSymbol]();\n\t\t}\n\t\t\n\t}\n\t\n\t[getSubscriptionSymbol]() {\n\t\treturn this.#subscription;\n\t}\n\t\n\tget [Symbol.toStringTag]() {\n\t\treturn \"SubscriptionObjectWithSubscription\";\n\t}\n\t\n\t\n\tstatic subscribeSymbol = subscribeSymbol;\n\tstatic unsubscribeSymbol = unsubscribeSymbol;\n\tstatic renewSymbol = renewSymbol;\n\tstatic getSubscriptionSymbol = getSubscriptionSymbol;\n\t\n}\n\nSubscriptionObject.WithSubscription = SubscriptionObjectWithSubscription;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["i", "subscriptions", "ws", "Subscription", "type", "publicationName", "args", "handler", "immediately", "
|
|
4
|
+
"sourcesContent": ["import type { WS } from \"insite-ws/client\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\ndeclare global {\n\tvar __initials: unknown[] | undefined;\n}\n\n\nlet i: number;\nlet subscriptions: Map<number, Subscription>;\nlet ws: WS;\n\n\nexport class Subscription {\n\tconstructor(type: \"array\" | \"map\" | \"object\", publicationName: string, args: unknown[] = [], handler: (updates: any) => void, immediately = true) {\n\t\t\n\t\tif (!ws)\n\t\t\tthrow new Error(\"Subscription is not binded to WS. Do Subscription.bindTo(ws) first\");\n\t\t\n\t\tthis.i = i++;\n\t\tthis.type = type;\n\t\tthis.publicationName = publicationName;\n\t\tthis.args = args;\n\t\tthis.handler = handler;\n\t\tthis.immediately = immediately && !globalThis.__initials;\n\t\t\n\t\tsubscriptions.set(this.i, this);\n\t\t\n\t\tws.on(\"open\", this.start);\n\t\t\n\t\tif (ws.isOpen)\n\t\t\tthis.start();\n\t\t\n\t\tif (globalThis.__initials) {\n\t\t\tthis.isActive = true;\n\t\t\tthis.handler(globalThis.__initials.splice(0, 1)[0]);\n\t\t} else\n\t\t\tthis.isActive = false;\n\t\t\n\t}\n\t\n\ti;\n\ttype;\n\tpublicationName;\n\targs;\n\thandler;\n\timmediately;\n\tisActive;\n\t\n\tstart = () => {\n\t\t\n\t\tws.sendMessage(\"s-s\"/* subscription subscribe */, this.type, this.publicationName, this.i, this.args, this.immediately);\n\t\t\n\t\tthis.immediately = true;\n\t\t\n\t};\n\t\n\tcancel() {\n\t\t\n\t\tsubscriptions.delete(this.i);\n\t\t\n\t\tws.off(\"open\", this.start);\n\t\t\n\t\tws.sendMessage(\"s-u\"/* subscription unsubscribe */, this.i);\n\t\t\n\t}\n\t\n\t\n\tstatic bindTo(_ws: WS) {\n\t\tws = _ws;\n\t\t\n\t\ti = 0;\n\t\t\n\t\tsubscriptions = new Map();\n\t\t\n\t\tws.on(\"message:s-c\"/* subscription changed */, (si: number, updates: any) => {\n\t\t\tconst subscription = subscriptions.get(si);\n\t\t\tif (subscription) {\n\t\t\t\tsubscription.isActive = true;\n\t\t\t\tsubscription.handler(updates);\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\t\tws.on(\"close\", () => {\n\t\t\t\n\t\t\tfor (const subscription of subscriptions.values())\n\t\t\t\tsubscription.isActive = false;\n\t\t\t\n\t\t});\n\t\t\n\t\tws.on(\"server-change\", () => {\n\t\t\t\n\t\t\tfor (const subscription of subscriptions.values())\n\t\t\t\tsubscription.handler(null);\n\t\t\t\n\t\t});\n\t\t\n\t}\n\t\n}\n", "import { removeOne } from \"@nesvet/n\";\nimport { Subscription } from \"./Subscription\";\nimport {\n\tclearSymbol,\n\tgetAsInitialUpdatedSymbol,\n\tgetAsUpdatesSymbol,\n\tgetHandleUpdateSymbol,\n\tgetSubscriptionSymbol,\n\trenewSymbol,\n\tsetHandleUpdateSymbol,\n\tsubscribeSymbol,\n\tunsubscribeSymbol,\n\tupdateSymbol\n} from \"./symbols\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\ntype Item = unknown;\n\nexport type Updated<I extends Item = Item> = I[] & {\n\tdeleted: I[];\n\tadded: I[];\n};\n\nexport type Updates<I extends Item = Item> =\n\t(\n\t\t[ \"a\"/* add */, newItem: I ] |\n\t\t[ \"d\"/* delete */, itemToDelete: I ] |\n\t\t[ \"i\"/* initial */, items: I[], sort?: -1 | 0 | 1 ] |\n\t\tnull\n\t)[] |\n\tnull;\n\nexport type UpdateHandler<I extends Item = Item> = (array: SubscriptionArray<I>, updated: Updated<I>, updates: Updates<I>) => void;\n\nconst ascSort = (a: any, b: any) => a > b ? 1 : a < b ? -1 : 0;\nconst descSort = (a: any, b: any) => a > b ? -1 : a < b ? 1 : 0;\n\n\nexport class SubscriptionArray<I extends Item = Item> extends Array<I> {\n\tconstructor(updates?: Updates<I>, onUpdate?: UpdateHandler<I>) {\n\t\tsuper();\n\t\t\n\t\tif (onUpdate)\n\t\t\tthis.handleUpdate = onUpdate;\n\t\t\n\t\tif (Array.isArray(updates))\n\t\t\tthis.update(updates);\n\t\t\n\t}\n\t\n\tsorted: I[] = [];\n\t\n\thandleUpdate;\n\t\n\tsortDirection: -1 | 0 | 1 = 0;\n\t\n\tsortCompareFunction: typeof ascSort | typeof descSort | null = null;\n\t\n\t[getHandleUpdateSymbol]() {\n\t\treturn this.handleUpdate;\n\t}\n\t\n\t[setHandleUpdateSymbol](handleUpdate: UpdateHandler<I>) {\n\t\treturn (this.handleUpdate = handleUpdate);\n\t}\n\t\n\tupdate(updates: Updates<I>) {\n\t\t\n\t\tconst updated: Updated<I> = Object.assign([], {\n\t\t\tdeleted: [],\n\t\t\tadded: []\n\t\t});\n\t\t\n\t\tif (updates) {\n\t\t\tlet shouldSort = false;\n\t\t\t\n\t\t\tfor (const update of updates)\n\t\t\t\tswitch (update?.[0]) {\n\t\t\t\t\tcase \"i\"/* initial */: {\n\t\t\t\t\t\tconst [ , array, sort ] = update;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (sort) {\n\t\t\t\t\t\t\tthis.sortDirection = sort;\n\t\t\t\t\t\t\tthis.sortCompareFunction = sort > 0 ? ascSort : descSort;\n\t\t\t\t\t\t\tshouldSort = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.sortDirection = 0;\n\t\t\t\t\t\t\tthis.sortCompareFunction = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.length = 0;\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (const newItem of array) {\n\t\t\t\t\t\t\tthis.push(newItem);\n\t\t\t\t\t\t\tupdated.push(newItem);\n\t\t\t\t\t\t\tupdated.added.push(newItem);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcase \"a\"/* add */: {\n\t\t\t\t\t\tconst [ , newItem ] = update;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (!this.includes(newItem)) {\n\t\t\t\t\t\t\tthis.push(newItem);\n\t\t\t\t\t\t\tif (this.sortDirection)\n\t\t\t\t\t\t\t\tshouldSort = true;\n\t\t\t\t\t\t\tupdated.push(newItem);\n\t\t\t\t\t\t\tupdated.added.push(newItem);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcase \"d\"/* delete */: {\n\t\t\t\t\t\tconst [ , itemToDelete ] = update;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (removeOne(this, itemToDelete))\n\t\t\t\t\t\t\tupdated.deleted.push(itemToDelete);\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.clear();\n\t\t\t\t}\n\t\t\t\n\t\t\tif (shouldSort && this.sortCompareFunction)\n\t\t\t\tthis.sort(this.sortCompareFunction);\n\t\t\t\n\t\t} else\n\t\t\tthis.clear();\n\t\t\n\t\tthis.handleUpdate?.(this, updated, updates?.[0] ? updates : null);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t[updateSymbol] = this.update;\n\t\n\tgetAsUpdates(): Updates<I> {\n\t\treturn (\n\t\t\t(this.length || this.sortDirection) ?\n\t\t\t\t[ [ \"i\"/* initial */, [ ...this ], this.sortDirection ] ] :\n\t\t\t\tnull\n\t\t);\n\t}\n\t\n\t[getAsUpdatesSymbol] = this.getAsUpdates;\n\t\n\tgetAsInitialUpdated(): Updated<I> {\n\t\treturn Object.assign([ ...this.sorted ], {\n\t\t\tadded: [ ...this.sorted ],\n\t\t\tdeleted: []\n\t\t});\n\t}\n\t\n\t[getAsInitialUpdatedSymbol] = this.getAsInitialUpdated;\n\t\n\tclear() {\n\t\t\n\t\tthis.length = 0;\n\t\tthis.sortDirection = 0;\n\t\tthis.sortCompareFunction = null;\n\t\t\n\t}\n\t\n\t[clearSymbol] = this.clear;\n\t\n\tvalueOf() {\n\t\treturn this;\n\t}\n\t\n\tget [Symbol.toStringTag]() {\n\t\treturn \"SubscriptionArray\";\n\t}\n\t\n\t\n\tstatic updateSymbol = updateSymbol;\n\tstatic getHandleUpdateSymbol = getHandleUpdateSymbol;\n\tstatic setHandleUpdateSymbol = setHandleUpdateSymbol;\n\tstatic getAsUpdatesSymbol = getAsUpdatesSymbol;\n\tstatic getAsInitialUpdatedSymbol = getAsInitialUpdatedSymbol;\n\tstatic clearSymbol = clearSymbol;\n\tstatic WithSubscription: typeof SubscriptionArrayWithSubscription;\n\t\n}\n\n\nexport class SubscriptionArrayWithSubscription<I extends Item = Item> extends SubscriptionArray<I> {\n\tconstructor(publicationName: string, params: unknown[], onUpdate: UpdateHandler<I>, immediately = true) {\n\t\tsuper(null, onUpdate);\n\t\t\n\t\tthis.publicationName = publicationName;\n\t\tthis.params = params;\n\t\t\n\t\tif (immediately)\n\t\t\tthis.subscribe();\n\t\t\n\t}\n\t\n\tpublicationName;\n\tparams;\n\tsubscription: Subscription | null = null;\n\t\n\tsubscribe() {\n\t\t\n\t\tif (!this.subscription)\n\t\t\tthis.subscription = new Subscription(\"array\", this.publicationName, this.params, updates => this.update(updates as Updates<I>));\n\t\t\n\t}\n\t\n\tget [subscribeSymbol]() {\n\t\treturn this.subscribe;\n\t}\n\t\n\tunsubscribe() {\n\t\t\n\t\tif (this.subscription) {\n\t\t\tthis.subscription.cancel();\n\t\t\tthis.subscription = null;\n\t\t}\n\t\t\n\t}\n\t\n\tget [unsubscribeSymbol]() {\n\t\treturn this.unsubscribe;\n\t}\n\t\n\trenew(publicationName?: string, params?: unknown[]) {\n\t\t\n\t\tif (this.subscription) {\n\t\t\tthis.unsubscribe();\n\t\t\t\n\t\t\tif (publicationName)\n\t\t\t\tif (Array.isArray(publicationName))\n\t\t\t\t\tparams = publicationName;\n\t\t\t\telse\n\t\t\t\t\tthis.publicationName = publicationName;\n\t\t\t\n\t\t\tif (params)\n\t\t\t\tthis.params = params;\n\t\t\t\n\t\t\tthis.subscribe();\n\t\t}\n\t\t\n\t}\n\t\n\tget [renewSymbol]() {\n\t\treturn this.renew;\n\t}\n\t\n\t[getSubscriptionSymbol]() {\n\t\treturn this.subscription;\n\t}\n\t\n\tget [Symbol.toStringTag]() {\n\t\treturn \"SubscriptionArrayWithSubscription\";\n\t}\n\t\n\t\n\tstatic subscribeSymbol = subscribeSymbol;\n\tstatic unsubscribeSymbol = unsubscribeSymbol;\n\tstatic renewSymbol = renewSymbol;\n\tstatic getSubscriptionSymbol = getSubscriptionSymbol;\n\t\n}\n\nSubscriptionArray.WithSubscription = SubscriptionArrayWithSubscription;\n", "export const updateSymbol = Symbol(\"update\");\nexport const getHandleUpdateSymbol = Symbol(\"getHandleUpdate\");\nexport const setHandleUpdateSymbol = Symbol(\"setHandleUpdate\");\nexport const getAsUpdatesSymbol = Symbol(\"getAsUpdates\");\nexport const getAsInitialUpdatedSymbol = Symbol(\"getAsInitialUpdated\");\nexport const clearSymbol = Symbol(\"clear\");\nexport const subscribeSymbol = Symbol(\"subscribe\");\nexport const unsubscribeSymbol = Symbol(\"unsubscribe\");\nexport const renewSymbol = Symbol(\"renew\");\nexport const getSubscriptionSymbol = Symbol(\"getSubscription\");\nexport const getHandleSubscriptionSymbol = Symbol(\"getHandleSubscription\");\nexport const setHandleSubscriptionSymbol = Symbol(\"setHandleSubscription\");\n", "import EventEmitter from \"eventemitter3\";\nimport { debounce, StatefulPromise } from \"@nesvet/n\";\nimport { privates } from \"./common\";\nimport { SubscriptionGroupItem } from \"./SubscriptionGroupItem\";\nimport {\n\tDefinition,\n\tParseValues,\n\tSubscriptionHandle,\n\tSubscriptionOnBeforeInit,\n\tSubscriptionType,\n\tTupleDefinition,\n\tUnparsedDefinition\n} from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nfunction isTupleDefinition<T extends SubscriptionType>(definition: UnparsedDefinition<T>): definition is TupleDefinition {\n\treturn Array.isArray(definition);\n}\n\ntype Target = any;\n\ntype Options = {\n\ttarget?: Target;\n\tdebounce?: number;\n\timmediately?: boolean;\n};\n\n\nfunction parseDefinition<T extends SubscriptionType>(definition: UnparsedDefinition<T>) {\n\tif (isTupleDefinition(definition)) {\n\t\tconst args = definition.slice();\n\t\t\n\t\tconst parsed: Partial<Definition<T>> = {};\n\t\t\n\t\tparsed.name = args.shift() as Definition<T>[\"name\"];\n\t\tif (typeof args[0] == \"object\" && !Array.isArray(args[0])) {\n\t\t\tparsed.value = args.shift() as Definition<T>[\"value\"];\n\t\t\tparsed.type = parsed.value!.toString().match(/Subscription(Object|Array|Map)/)?.[1].toLowerCase() as Definition<T>[\"type\"];\n\t\t\tif (!parsed.type)\n\t\t\t\tthrow new Error(\"Unknown value type\");\n\t\t} else {\n\t\t\tif (typeof args[0] == \"string\")\n\t\t\t\tparsed.type = args.shift() as Definition<T>[\"type\"];\n\t\t\tif (typeof args[0] == \"string\")\n\t\t\t\tparsed.publicationName = args.shift() as Definition<T>[\"publicationName\"];\n\t\t\tif (Array.isArray(args[0]))\n\t\t\t\tparsed.params = args.shift() as Definition<T>[\"params\"];\n\t\t}\n\t\t\n\t\tif (typeof args[0] == \"function\")\n\t\t\tparsed.handle = args.shift() as SubscriptionHandle<T>;\n\t\tif (typeof args[0] == \"function\")\n\t\t\tparsed.onBeforeInit = args.shift() as SubscriptionOnBeforeInit<T>;\n\t\tif (typeof args[0] == \"number\")\n\t\t\tparsed.debounce = args.shift() as Definition<T>[\"debounce\"];\n\t\tif (typeof args[0] == \"boolean\")\n\t\t\tparsed.preventBind = args.shift() as Definition<T>[\"preventBind\"];\n\t\t\n\t\treturn parsed as Definition<T>;\n\t}\n\t\n\tdefinition.type ??= \"object\" as T;\n\t\n\treturn definition;\n}\n\nexport class SubscriptionGroup<DS extends UnparsedDefinition[] = any[]> extends EventEmitter {\n\tconstructor(\n\t\tdefinitions: DS,\n\t\t{\n\t\t\ttarget,\n\t\t\tdebounce: debounceLimit = SubscriptionGroup.debounceLimit,\n\t\t\timmediately\n\t\t}: Options = {}\n\t) {\n\t\tsuper();\n\t\t\n\t\tthis.applyOptions({ target, debounceLimit });\n\t\t\n\t\tthis.#initPromise = new StatefulPromise();\n\t\t\n\t\tvoid this.attach(definitions, false, immediately);\n\t\t\n\t}\n\t\n\ttarget?: Target;\n\temitUpdate!: () => void;\n\t\n\titems = [] as unknown as Record<string, SubscriptionGroupItem> & SubscriptionGroupItem[];\n\tvalues = [] as DS extends any ? (any[] & Record<string, any>) : ParseValues<DS>;\n\t\n\tisLoaded = false;\n\tisInited = false;\n\t\n\t#loadPromise!: StatefulPromise<SubscriptionGroup>;\n\t#initPromise: StatefulPromise<SubscriptionGroup>;\n\t#unloadPromise!: StatefulPromise<SubscriptionGroup>;\n\t\n\t#debounceLimit?: number | null = null;\n\t\n\tapplyOptions({ target, debounceLimit }: { target?: Target; debounceLimit?: number }) {\n\t\t\n\t\tif (this.target !== target) {\n\t\t\tif (this.target)\n\t\t\t\tfor (const item of this.items)\n\t\t\t\t\tif (item.isLoaded && !item.preventBind)\n\t\t\t\t\t\tdelete this.target[item.name];\n\t\t\t\n\t\t\tthis.target = target;\n\t\t\t\n\t\t\tif (this.target)\n\t\t\t\tfor (const item of this.items)\n\t\t\t\t\tif (item.isLoaded && !item.preventBind)\n\t\t\t\t\t\tthis.target[item.name] = item.value;\n\t\t}\n\t\t\n\t\tif (this.#debounceLimit !== debounceLimit) {\n\t\t\tthis.#debounceLimit = debounceLimit;\n\t\t\tif (typeof this.#debounceLimit == \"number\") {\n\t\t\t\tconst emitUpdateDebounced = debounce(() => this.emit(\"update\", this.values), this.#debounceLimit);\n\t\t\t\tthis.emitUpdate = () => emitUpdateDebounced();\n\t\t\t} else\n\t\t\t\tthis.emitUpdate = () => this.emit(\"update\", this.values);\n\t\t}\n\t\t\n\t}\n\t\n\tattach(definitions: DS, shouldReload = this.isLoaded, immediately = true) {\n\t\tif (shouldReload)\n\t\t\tthis.isLoaded = false;\n\t\t\n\t\tif (!this.#loadPromise || this.#loadPromise.isFulfilled)\n\t\t\tthis.#loadPromise = new StatefulPromise();\n\t\t\n\t\tif (!this.#unloadPromise || this.#unloadPromise.isFulfilled)\n\t\t\tthis.#unloadPromise = new StatefulPromise();\n\t\t\n\t\treturn Promise.all(definitions.map(definition =>\n\t\t\tnew SubscriptionGroupItem(parseDefinition(definition), this)\n\t\t).map(item => {\n\t\t\t\n\t\t\tif (immediately)\n\t\t\t\titem.subscribe();\n\t\t\t\n\t\t\treturn item.loaded();\n\t\t}));\n\t}\n\t\n\tdetach(names: string[], shouldUpdate = true) {\n\t\t\n\t\tfor (const name of names)\n\t\t\tthis.items[name]?.detach();\n\t\t\n\t\tif (shouldUpdate) {\n\t\t\tthis.#unload();\n\t\t\tthis.#load();\n\t\t}\n\t\t\n\t}\n\t\n\tredefine(definitions: DS) {\n\t\t\n\t\tconst itemsToDetach = new Map(this.items.map(item => [ item.name, item ]));\n\t\tconst definitionsToRedefine = [];\n\t\tconst definitionsToAttach = [] as unknown as DS;\n\t\t\n\t\tfor (let definition of definitions) {\n\t\t\tdefinition = parseDefinition(definition);\n\t\t\tif (itemsToDetach.delete(definition.name))\n\t\t\t\tdefinitionsToRedefine.push(definition);\n\t\t\telse\n\t\t\t\tdefinitionsToAttach.push(definition);\n\t\t}\n\t\t\n\t\tthis.isLoaded = false;\n\t\t\n\t\tthis.detach([ ...itemsToDetach.keys() ], false);\n\t\t\n\t\treturn Promise.all([\n\t\t\t...definitionsToRedefine.map(definition => {\n\t\t\t\tconst item = this.items[definition.name];\n\t\t\t\titem.define(definition);\n\t\t\t\t\n\t\t\t\titem.subscribe();\n\t\t\t\t\n\t\t\t\treturn item.loaded();\n\t\t\t}),\n\t\t\t...definitionsToAttach.length ? [ this.attach(definitionsToAttach, false) ] : []\n\t\t]);\n\t}\n\t\n\tsubscribe() {\n\t\treturn this.items.map(item => item.subscribe());\n\t}\n\t\n\tunsubscribe() {\n\t\treturn this.items.map(item => item.unsubscribe());\n\t}\n\t\n\t#load() {\n\t\t\n\t\tif (!this.isLoaded && this.items.every(item => item.isLoaded)) {\n\t\t\tif (this.target)\n\t\t\t\tfor (const item of this.items)\n\t\t\t\t\tif (!item.preventBind)\n\t\t\t\t\t\tthis.target[item.name] = item.value;\n\t\t\t\n\t\t\tthis.isLoaded = true;\n\t\t\t\n\t\t\tfor (const item of this.items)\n\t\t\t\tprivates.itemLoad!(item);\n\t\t\t\n\t\t\tthis.emit(\"load\", this.values);\n\t\t\t\n\t\t\tif (this.isInited)\n\t\t\t\tif (this.items.length)\n\t\t\t\t\tfor (const item of this.items)\n\t\t\t\t\t\titem.emitUpdate();\n\t\t\t\telse\n\t\t\t\t\tthis.emitUpdate();\n\t\t\t\n\t\t\t\n\t\t\tthis.#loadPromise.resolve(this);\n\t\t\t\n\t\t\tif (this.#unloadPromise.isFulfilled)\n\t\t\t\tthis.#unloadPromise = new StatefulPromise();\n\t\t}\n\t\t\n\t}\n\t\n\t#init() {\n\t\t\n\t\tif (!this.isInited && this.items.every(item => item.isInited)) {\n\t\t\tthis.isInited = true;\n\t\t\t\n\t\t\tif (this.isLoaded)\n\t\t\t\tif (this.items.length)\n\t\t\t\t\tfor (const item of this.items)\n\t\t\t\t\t\titem.emitUpdate();\n\t\t\t\telse\n\t\t\t\t\tthis.emitUpdate();\n\t\t\t\n\t\t\t\n\t\t\tfor (const item of this.items)\n\t\t\t\tprivates.itemInit!(item);\n\t\t\t\n\t\t\tthis.emit(\"init\", this.values);\n\t\t\t\n\t\t\tthis.#initPromise.resolve(this);\n\t\t}\n\t\t\n\t}\n\t\n\t#unload() {\n\t\t\n\t\tif (this.isLoaded && this.items.every(item => !item.isLoaded)) {\n\t\t\tif (this.target)\n\t\t\t\tfor (const item of this.items)\n\t\t\t\t\tif (!item.preventBind)\n\t\t\t\t\t\tdelete this.target[item.name];\n\t\t\t\n\t\t\tthis.isLoaded = false;\n\t\t\t\n\t\t\tfor (const item of this.items)\n\t\t\t\tprivates.itemUnload!(item);\n\t\t\t\n\t\t\tthis.emit(\"unload\", this.values);\n\t\t\t\n\t\t\tif (this.items.length)\n\t\t\t\tfor (const item of this.items)\n\t\t\t\t\titem.emitUpdate();\n\t\t\telse\n\t\t\t\tthis.emitUpdate();\n\t\t\t\n\t\t\tthis.#unloadPromise.resolve(this);\n\t\t\t\n\t\t\tif (this.#loadPromise.isFulfilled)\n\t\t\t\tthis.#loadPromise = new StatefulPromise();\n\t\t}\n\t\t\n\t}\n\t\n\tloaded() {\n\t\treturn this.#loadPromise;\n\t}\n\t\n\tinited() {\n\t\treturn this.#initPromise;\n\t}\n\t\n\tunloaded() {\n\t\treturn this.#unloadPromise;\n\t}\n\t\n\tvalueOf() {\n\t\treturn this.values;\n\t}\n\t\n\t[Symbol.iterator]() {\n\t\treturn this.values[Symbol.iterator]();\n\t}\n\t\n\t\n\tstatic debounceLimit = 8;\n\t\n\tstatic {\n\t\t\n\t\tprivates.groupLoad = (group: SubscriptionGroup) => group.#load();\n\t\tprivates.groupInit = (group: SubscriptionGroup) => group.#init();\n\t\tprivates.groupUnload = (group: SubscriptionGroup) => group.#unload();\n\t\t\n\t}\n\t\n}\n\nexport { Options as SubscriptionGroupOptions, Target as SubscriptionGroupTarget };\n", "import type { SubscriptionGroup } from \"./SubscriptionGroup\";\nimport type { SubscriptionGroupItem } from \"./SubscriptionGroupItem\";\nimport type { SubscriptionType } from \"./types\";\n\n\nexport const privates: {\n\tgroupLoad?: (group: SubscriptionGroup) => void;\n\tgroupInit?: (group: SubscriptionGroup) => void;\n\tgroupUnload?: (group: SubscriptionGroup) => void;\n\titemLoad?: <T extends SubscriptionType>(item: SubscriptionGroupItem<T>) => void;\n\titemInit?: <T extends SubscriptionType>(item: SubscriptionGroupItem<T>) => void;\n\titemUnload?: <T extends SubscriptionType>(item: SubscriptionGroupItem<T>) => void;\n} = {};\n", "import EventEmitter from \"eventemitter3\";\nimport { debounce, removeOne, StatefulPromise } from \"@nesvet/n\";\nimport {\n\tSubscriptionArrayWithSubscription,\n\ttype Updated as SubscriptionArrayUpdated,\n\ttype UpdateHandler as SubscriptionArrayUpdateHandler,\n\ttype Updates as SubscriptionArrayUpdates\n} from \"../SubscriptionArray\";\nimport {\n\tSubscriptionMapWithSubscription,\n\ttype Updated as SubscriptionMapUpdated,\n\ttype UpdateHandler as SubscriptionMapUpdateHandler,\n\ttype Updates as SubscriptionMapUpdates\n} from \"../SubscriptionMap\";\nimport {\n\tSubscriptionObjectWithSubscription,\n\ttype Updated as SubscriptionObjectUpdated,\n\ttype UpdateHandler as SubscriptionObjectUpdateHandler,\n\ttype Updates as SubscriptionObjectUpdates\n} from \"../SubscriptionObject\";\nimport {\n\tgetAsInitialUpdatedSymbol,\n\tgetAsUpdatesSymbol,\n\tgetHandleUpdateSymbol,\n\trenewSymbol,\n\tsetHandleUpdateSymbol,\n\tsubscribeSymbol,\n\tunsubscribeSymbol\n} from \"../symbols\";\nimport { privates } from \"./common\";\nimport type { SubscriptionGroup } from \"./SubscriptionGroup\";\nimport type {\n\tDefinition,\n\tSubscriptionHandle,\n\tSubscriptionOnBeforeInit,\n\tSubscriptionType,\n\tSubscriptionUpdated,\n\tSubscriptionUpdates,\n\tSubscriptionValue\n} from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\ntype HandleSubscription<T> = (_: any, updated: SubscriptionUpdated<T>, updates: SubscriptionUpdates<T>) => void;\n\nfunction isUpdatedMapOrArray(updated: SubscriptionUpdated<SubscriptionType>): updated is SubscriptionArrayUpdated | SubscriptionMapUpdated {\n\treturn Array.isArray(updated);\n}\n\n\nexport class SubscriptionGroupItem<T extends SubscriptionType = SubscriptionType, D extends Definition<T> = Definition<T>> extends EventEmitter {\n\tconstructor(definition: D, group: SubscriptionGroup) {\n\t\tsuper();\n\t\t\n\t\tthis.name = definition.name;\n\t\t\n\t\tthis.define(definition, group);\n\t\t\n\t}\n\t\n\tname;\n\tgroup?: SubscriptionGroup;\n\tvalue?: SubscriptionValue<T>;\n\ttype!: T | \"object\";\n\tpublicationName!: Definition<T>[\"publicationName\"];\n\tparams!: Definition<T>[\"params\"];\n\thandle!: Definition<T>[\"handle\"];\n\tonBeforeInit!: Definition<T>[\"onBeforeInit\"];\n\tpreventBind!: Definition<T>[\"preventBind\"];\n\t\n\temitUpdate!: (updated?: SubscriptionUpdated<T>) => void;\n\t\n\tisLoaded = false;\n\tisInited = false;\n\t\n\t#loadPromise!: StatefulPromise<SubscriptionGroupItem<T, D>>;\n\t#initPromise!: StatefulPromise<SubscriptionGroupItem<T, D>>;\n\t#unloadPromise!: StatefulPromise<SubscriptionGroupItem<T, D>>;\n\t\n\tdefine(definition: Definition<T>, group: SubscriptionGroup | undefined = this.group) {\n\t\tif (!group)\n\t\t\tthrow new Error(\"group is undefined\");\n\t\t\n\t\tconst {\n\t\t\tvalue,\n\t\t\ttype = \"object\",\n\t\t\tpublicationName,\n\t\t\tparams,\n\t\t\thandle,\n\t\t\tonBeforeInit,\n\t\t\tdebounce: debounceLimit = SubscriptionGroupItem.debounceLimit,\n\t\t\tpreventBind\n\t\t} = definition;\n\t\t\n\t\tif (this.group) {\n\t\t\tif (\n\t\t\t\t(!value || this.value === value) &&\n\t\t\t\tthis.type === type &&\n\t\t\t\tthis.publicationName === publicationName &&\n\t\t\t\tJSON.stringify(this.params) === JSON.stringify(params) &&\n\t\t\t\tthis.handle === handle &&\n\t\t\t\tthis.onBeforeInit === onBeforeInit\n\t\t\t)\n\t\t\t\treturn this.#applyOptions({ debounceLimit, preventBind });\n\t\t\t\n\t\t\tthis.detach();\n\t\t\tdelete this.value;\n\t\t\tdelete this.publicationName;\n\t\t\tdelete this.params;\n\t\t}\n\t\t\n\t\tthis.type = type;\n\t\tthis.handle = handle;\n\t\tthis.onBeforeInit = onBeforeInit;\n\t\tif (value)\n\t\t\tthis.value = value;\n\t\telse {\n\t\t\tthis.publicationName = publicationName ?? this.name;\n\t\t\tthis.params = params ?? [];\n\t\t}\n\t\t\n\t\tthis.#applyOptions({ debounceLimit, preventBind });\n\t\t\n\t\tthis.#attachTo(group);\n\t\t\n\t}\n\t\n\t#applyOptions({ debounceLimit, preventBind }: { debounceLimit?: number; preventBind?: boolean }) {\n\t\t\n\t\tconst emitUpdate: typeof this.emitUpdate = updated => {\n\t\t\tthis.emit(\"update\", this.value, updated);\n\t\t\tthis.group?.emit(`update.${this.name}`, this.value, updated);\n\t\t\tthis.group?.emitUpdate();\n\t\t\t\n\t\t};\n\t\t\n\t\tif (typeof debounceLimit == \"number\") {\n\t\t\tlet debouncedUpdated: SubscriptionUpdated<T> | undefined;\n\t\t\tlet group: SubscriptionGroup;\n\t\t\t\n\t\t\tconst emitUpdateDebounced = debounce(() => {\n\t\t\t\t\n\t\t\t\tconst isDetached = !this.group;\n\t\t\t\t\n\t\t\t\tif (isDetached)\n\t\t\t\t\tthis.group = group;\n\t\t\t\t\n\t\t\t\temitUpdate(debouncedUpdated);\n\t\t\t\t\n\t\t\t\tif (isDetached)\n\t\t\t\t\tdelete this.group;\n\t\t\t\t\n\t\t\t\tdebouncedUpdated = undefined;\n\t\t\t\t\n\t\t\t}, debounceLimit);\n\t\t\t\n\t\t\tthis.emitUpdate = updated => {\n\t\t\t\tif (updated !== undefined)\n\t\t\t\t\tif (isUpdatedMapOrArray(updated))\n\t\t\t\t\t\tif (isUpdatedMapOrArray(debouncedUpdated!))\n\t\t\t\t\t\t\tfor (const item of updated)\n\t\t\t\t\t\t\t\tdebouncedUpdated.push(item);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tdebouncedUpdated = Object.assign([ ...updated ], {\n\t\t\t\t\t\t\t\tadded: [ ...updated.added ],\n\t\t\t\t\t\t\t\tdeleted: [ ...updated.deleted ]\n\t\t\t\t\t\t\t}) as SubscriptionUpdated<T>;\n\t\t\t\t\telse if (typeof updated == \"object\")\n\t\t\t\t\t\tif (debouncedUpdated)\n\t\t\t\t\t\t\tObject.assign(debouncedUpdated, updated);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tdebouncedUpdated = { ...updated };\n\t\t\t\t\telse\n\t\t\t\t\t\tdebouncedUpdated = updated;\n\t\t\t\t\n\t\t\t\tgroup = this.group!;\n\t\t\t\t\n\t\t\t\treturn emitUpdateDebounced();\n\t\t\t};\n\t\t} else\n\t\t\tthis.emitUpdate = emitUpdate;\n\t\t\n\t\tif (this.preventBind === undefined)\n\t\t\tdelete this.preventBind;\n\t\telse\n\t\t\tthis.preventBind = preventBind;\n\t\t\n\t}\n\t\n\t#attachTo(group: SubscriptionGroup) {\n\t\tif (!this.group) {\n\t\t\tthis.group = group;\n\t\t\t\n\t\t\tthis.group.items.push(this as SubscriptionGroupItem<any>);\n\t\t\tthis.group.items[this.name] = this as SubscriptionGroupItem<any>;\n\t\t\t\n\t\t\tif (!this.#loadPromise || this.#loadPromise.isFulfilled)\n\t\t\t\tthis.#loadPromise = new StatefulPromise();\n\t\t\t\n\t\t\tif (!this.#initPromise || this.#initPromise.isFulfilled)\n\t\t\t\tthis.#initPromise = new StatefulPromise();\n\t\t\t\n\t\t\tif (!this.#unloadPromise || this.#unloadPromise.isFulfilled)\n\t\t\t\tthis.#unloadPromise = new StatefulPromise();\n\t\t\t\n\t\t\tswitch (this.type) {\n\t\t\t\tcase \"array\": {\n\t\t\t\t\tconst handleSubscription = this.#handleSubscription as HandleSubscription<\"array\">;\n\t\t\t\t\tif (this.value)\n\t\t\t\t\t\t(this.value as SubscriptionArrayWithSubscription)[setHandleUpdateSymbol](handleSubscription);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.value = new SubscriptionArrayWithSubscription(this.publicationName!, this.params!, handleSubscription, false) as SubscriptionValue<T>;\n\t\t\t\t\tbreak;\n\t\t\t\t} case \"map\": {\n\t\t\t\t\tconst handleSubscription = this.#handleSubscription as HandleSubscription<\"map\">;\n\t\t\t\t\tif (this.value)\n\t\t\t\t\t\t(this.value as SubscriptionMapWithSubscription)[setHandleUpdateSymbol](handleSubscription);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.value = new SubscriptionMapWithSubscription(this.publicationName!, this.params!, handleSubscription, false) as SubscriptionValue<T>;\n\t\t\t\t\tbreak;\n\t\t\t\t} default: {\n\t\t\t\t\tconst handleSubscription = this.#handleSubscription as HandleSubscription<\"object\">;\n\t\t\t\t\tif (this.value)\n\t\t\t\t\t\t(this.value as SubscriptionObjectWithSubscription)[setHandleUpdateSymbol](handleSubscription);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.value = new SubscriptionObjectWithSubscription(this.publicationName!, this.params!, handleSubscription, false) as SubscriptionValue<T>;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.group.values.push(this.value);\n\t\t\tthis.group.values[this.name] = this.value;\n\t\t\t\n\t\t\tif (this.onBeforeInit)\n\t\t\t\tswitch (this.type) {\n\t\t\t\t\tcase \"array\":\n\t\t\t\t\t\t(this.onBeforeInit as SubscriptionOnBeforeInit<\"array\">).call(this.group, this.value as SubscriptionArrayWithSubscription);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"map\":\n\t\t\t\t\t\t(this.onBeforeInit as SubscriptionOnBeforeInit<\"map\">).call(this.group, this.value as SubscriptionMapWithSubscription);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t(this.onBeforeInit as SubscriptionOnBeforeInit<\"object\">).call(this.group, this.value as SubscriptionObjectWithSubscription);\n\t\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\tdetach() {\n\t\t\n\t\tif (this.group) {\n\t\t\tthis.value?.[unsubscribeSymbol]();\n\t\t\t\n\t\t\tthis.isLoaded = false;\n\t\t\tthis.#unload();\n\t\t\t\n\t\t\tdelete this.group.values[this.name];// eslint-disable-line @typescript-eslint/no-array-delete\n\t\t\tremoveOne(this.group.values, this.value);\n\t\t\tdelete this.group.items[this.name];// eslint-disable-line @typescript-eslint/no-array-delete\n\t\t\tremoveOne(this.group.items, this as SubscriptionGroupItem<any>);\n\t\t\t\n\t\t\tdelete this.group;\n\t\t}\n\t\t\n\t}\n\t\n\t#loadUpdated: SubscriptionUpdated<T> | null = null;\n\t\n\t#handleSubscription: HandleSubscription<T> = (_, updated, updates) => {\n\t\tif (updates)\n\t\t\tif (this.group!.isLoaded) {\n\t\t\t\tif (this.handle)\n\t\t\t\t\tswitch (this.type) {\n\t\t\t\t\t\tcase \"array\":\n\t\t\t\t\t\t\t(this.handle as SubscriptionHandle<\"array\">).call(this.group!, updated as SubscriptionArrayUpdated, this.group!);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"map\":\n\t\t\t\t\t\t\t(this.handle as SubscriptionHandle<\"map\">).call(this.group!, updated as SubscriptionMapUpdated, this.group!);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t(this.handle as SubscriptionHandle<\"object\">).call(this.group!, updated as SubscriptionObjectUpdated, this.group!);\n\t\t\t\t\t}\n\t\t\t\tthis.emitUpdate(updated);\n\t\t\t} else {\n\t\t\t\tthis.#loadUpdated = updated;\n\t\t\t\tthis.isLoaded = true;\n\t\t\t\tprivates.groupLoad!(this.group!);\n\t\t\t}\n\t\telse if (this.isLoaded) {\n\t\t\tthis.isLoaded = false;\n\t\t\tprivates.groupUnload!(this.group!);\n\t\t}\n\t\t\n\t\tif (!this.isInited) {\n\t\t\tthis.isInited = true;\n\t\t\tprivates.groupInit!(this.group!);\n\t\t}\n\t\t\n\t};\n\t\n\t#load() {\n\t\t\n\t\tif (this.#loadUpdated) {\n\t\t\tif (this.handle)\n\t\t\t\tswitch (this.type) {\n\t\t\t\t\tcase \"array\":\n\t\t\t\t\t\t(this.handle as SubscriptionHandle<\"array\">).call(this.group!, this.#loadUpdated as SubscriptionArrayUpdated, this.group!);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"map\":\n\t\t\t\t\t\t(this.handle as SubscriptionHandle<\"map\">).call(this.group!, this.#loadUpdated as SubscriptionMapUpdated, this.group!);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t(this.handle as SubscriptionHandle<\"object\">).call(this.group!, this.#loadUpdated as SubscriptionObjectUpdated, this.group!);\n\t\t\t\t}\n\t\t\t\n\t\t\tthis.#loadUpdated = null;\n\t\t\t\n\t\t\tthis.emit(\"load\", this.value);\n\t\t\t\n\t\t\tthis.#loadPromise.resolve(this);\n\t\t\t\n\t\t\tif (this.#unloadPromise.isFulfilled)\n\t\t\t\tthis.#unloadPromise = new StatefulPromise();\n\t\t}\n\t\t\n\t}\n\t\n\t#init() {\n\t\t\n\t\tthis.emit(\"init\", this.value);\n\t\t\n\t\tthis.#initPromise.resolve(this);\n\t\t\n\t}\n\t\n\t#unload() {\n\t\t\n\t\tif (this.handle)\n\t\t\tswitch (this.type) {\n\t\t\t\tcase \"array\":\n\t\t\t\t\t(this.handle as SubscriptionHandle<\"array\">).call(this.group!, null, this.group!);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"map\":\n\t\t\t\t\t(this.handle as SubscriptionHandle<\"map\">).call(this.group!, null, this.group!);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t(this.handle as SubscriptionHandle<\"object\">).call(this.group!, null, this.group!);\n\t\t\t}\n\t\t\n\t\tthis.emit(\"unload\", this.value);\n\t\t\n\t\tthis.#unloadPromise.resolve(this);\n\t\t\n\t\tif (this.#loadPromise.isFulfilled)\n\t\t\tthis.#loadPromise = new StatefulPromise();\n\t\t\n\t}\n\t\n\tloaded() {\n\t\treturn this.#loadPromise;\n\t}\n\t\n\tinited() {\n\t\treturn this.#initPromise;\n\t}\n\t\n\tunloaded() {\n\t\treturn this.#unloadPromise;\n\t}\n\t\n\tsubscribe() {\n\t\t\n\t\tif (this.value)\n\t\t\tif (this.value[subscribeSymbol])\n\t\t\t\treturn this.value[subscribeSymbol]();\n\t\t\telse {\n\t\t\t\tconst handleUpdate = this.value[getHandleUpdateSymbol]();\n\t\t\t\t\n\t\t\t\tif (handleUpdate) {\n\t\t\t\t\tconst initialUpdated = this.value[getAsInitialUpdatedSymbol]();\n\t\t\t\t\tconst updates = this.value[getAsUpdatesSymbol]();\n\t\t\t\t\t\n\t\t\t\t\tswitch (this.type) {\n\t\t\t\t\t\tcase \"array\":\n\t\t\t\t\t\t\treturn (handleUpdate as SubscriptionArrayUpdateHandler)(this.value as SubscriptionArrayWithSubscription, initialUpdated as SubscriptionArrayUpdated, updates as SubscriptionArrayUpdates);\n\t\t\t\t\t\t\n\t\t\t\t\t\tcase \"map\":\n\t\t\t\t\t\t\treturn (handleUpdate as SubscriptionMapUpdateHandler)(this.value as SubscriptionMapWithSubscription, initialUpdated as SubscriptionMapUpdated, updates as SubscriptionMapUpdates);\n\t\t\t\t\t\t\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn (handleUpdate as SubscriptionObjectUpdateHandler)(this.value as SubscriptionObjectWithSubscription, initialUpdated as SubscriptionObjectUpdated, updates as SubscriptionObjectUpdates);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t}\n\t\n\tunsubscribe() {\n\t\treturn this.value?.[unsubscribeSymbol]?.();\n\t}\n\t\n\trenew(publicationName: Definition<T>[\"publicationName\"], params: Definition<T>[\"params\"]) {\n\t\treturn this.value?.[renewSymbol]?.(publicationName, params);\n\t}\n\t\n\tvalueOf() {\n\t\treturn this.value;\n\t}\n\t\n\t\n\tstatic debounceLimit = 4;\n\t\n\tstatic {\n\t\t\n\t\tprivates.itemLoad = <\n\t\t\tDP extends Definition<TP>,\n\t\t\tTP extends SubscriptionType\n\t\t>(item: SubscriptionGroupItem<TP, DP>) => item.#load();\n\t\tprivates.itemInit = <\n\t\t\tDP extends Definition<TP>,\n\t\t\tTP extends SubscriptionType\n\t\t>(item: SubscriptionGroupItem<TP, DP>) => item.#init();\n\t\tprivates.itemUnload = <\n\t\t\tDP extends Definition<TP>,\n\t\t\tTP extends SubscriptionType\n\t\t>(item: SubscriptionGroupItem<TP, DP>) => item.#unload();\n\t\t\n\t}\n\t\n}\n", "import { removeOne, unique } from \"@nesvet/n\";\nimport { Subscription } from \"./Subscription\";\nimport {\n\tclearSymbol,\n\tgetAsInitialUpdatedSymbol,\n\tgetAsUpdatesSymbol,\n\tgetHandleUpdateSymbol,\n\tgetSubscriptionSymbol,\n\trenewSymbol,\n\tsetHandleUpdateSymbol,\n\tsubscribeSymbol,\n\tunsubscribeSymbol,\n\tupdateSymbol\n} from \"./symbols\";\n\n\ntype GenericItem = Record<string, any> & { _id: string };// eslint-disable-line @typescript-eslint/no-explicit-any\n\ntype Item = GenericItem | SubscriptionMapItem;\n\nexport type Updated<I extends Item = Item> = I[] & {\n\tdeleted: string[];\n\tadded: I[];\n};\n\ntype SortList = Record<string, -1 | 1>;\n\nexport type Updates<I extends Item = Item> =\n\t(\n\t\t[ \"c\"/* create */, item: I ] |\n\t\t[ \"d\"/* delete */, _id: string ] |\n\t\t[ \"i\"/* initial */, items: I[], sortList?: SortList | null ] |\n\t\t[ \"u\"/* update */, itemUpdates: Partial<I> & { _id: string }, isAtomicOrUpdatedFields: string[] | true ] |\n\t\tnull\n\t)[] |\n\tnull;\n\nexport type UpdateHandler<I extends Item = Item> = (map: SubscriptionMap<I>, updated: Updated<I>, updates: Updates<I>) => void;\n\nfunction valueAt(item: Item, key: string) {\n\tlet value: unknown = item;\n\t\n\tfor (const part of key.split(\".\")) {\n\t\tif (value === null || value === undefined)\n\t\t\treturn;\n\t\t\n\t\tvalue = (value as Record<string, unknown>)[part];\n\t}\n\t\n\treturn value;\n}\n\nfunction isGreater(left: unknown, right: unknown) {\n\treturn (left as number) > (right as number);\n}\n\nfunction createSortFunction(sortList: SortList) {\n\tconst sortEntries = Object.entries(sortList);\n\t\n\treturn (a: Item, b: Item) => {\n\t\tfor (const [ key, direction ] of sortEntries) {\n\t\t\tconst aValue = valueAt(a, key);\n\t\t\tconst bValue = valueAt(b, key);\n\t\t\t\n\t\t\tif (direction > 0) {\n\t\t\t\tif (isGreater(aValue, bValue))\n\t\t\t\t\treturn 1;\n\t\t\t\t\n\t\t\t\tif (isGreater(bValue, aValue))\n\t\t\t\t\treturn -1;\n\t\t\t} else if (isGreater(bValue, aValue))\n\t\t\t\treturn 1;\n\t\t\telse if (isGreater(aValue, bValue))\n\t\t\t\treturn -1;\n\t\t}\n\t\t\n\t\treturn 0;\n\t};\n}\n\n\nexport class SubscriptionMap<I extends Item = Item> extends Map<string, I> {\n\tconstructor(updates?: Updates<I>, onUpdate?: UpdateHandler<I>) {\n\t\tsuper();\n\t\t\n\t\tif (onUpdate)\n\t\t\tthis.handleUpdate = onUpdate;\n\t\t\n\t\tif (updates)\n\t\t\tthis.update(updates);\n\t\t\n\t}\n\t\n\thandleUpdate;\n\t\n\t#updates = new Map<string, I>();\n\t\n\tsortList: SortList | null = null;\n\t\n\tsortCompareFunction: ((a: I, b: I) => number) | null = null;\n\t\n\t#fieldsToSort: string[] = [];\n\t\n\tsorted: I[] = [];\n\t\n\tsort() {\n\t\t\n\t\tif (this.sortCompareFunction)\n\t\t\tthis.sorted.sort(this.sortCompareFunction);\n\t\t\n\t}\n\t\n\t[getHandleUpdateSymbol]() {\n\t\treturn this.handleUpdate;\n\t}\n\t\n\t[setHandleUpdateSymbol](handleUpdate: UpdateHandler<I>) {\n\t\treturn (this.handleUpdate = handleUpdate);\n\t}\n\t\n\t#Item!: { new (map: SubscriptionMap<I>, updates: GenericItem): I };\n\t\n\tset Item(TheItem: { new (map: SubscriptionMap<I>, updates: GenericItem): I }) { // eslint-disable-line @typescript-eslint/naming-convention\n\t\tthis.#Item = TheItem;\n\t\t\n\t\tif (this.size)\n\t\t\tfor (const [ _id, item ] of this)\n\t\t\t\tthis.set(_id, new TheItem(this, item));\n\t\t\n\t}\n\t\n\tget Item() {\n\t\treturn this.#Item;\n\t}\n\t\n\tupdate(updates: Updates<I>) {\n\t\t\n\t\tconst updated: Updated<I> = Object.assign([], {\n\t\t\tadded: [],\n\t\t\tdeleted: []\n\t\t});\n\t\t\n\t\tif (updates) {\n\t\t\tlet shouldSort = false;\n\t\t\t\n\t\t\tconst TheItem = this.#Item;// eslint-disable-line @typescript-eslint/naming-convention\n\t\t\tconst prevUpdates = this.#updates;\n\t\t\t\n\t\t\tfor (const update of updates)\n\t\t\t\tswitch (update?.[0]) {\n\t\t\t\t\tcase \"i\"/* initial */: {\n\t\t\t\t\t\tconst [ , array, sortList ] = update;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (sortList) {\n\t\t\t\t\t\t\tthis.sortList = sortList;\n\t\t\t\t\t\t\tthis.sortCompareFunction = createSortFunction(sortList);\n\t\t\t\t\t\t\tthis.#fieldsToSort = unique(Object.keys(sortList).map(key => key.replace(/\\..+/, \"\")));\n\t\t\t\t\t\t\tshouldSort = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.sortList = null;\n\t\t\t\t\t\t\tthis.sortCompareFunction = null;\n\t\t\t\t\t\t\tthis.#fieldsToSort = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (this.size) {\n\t\t\t\t\t\t\tconst updatesMap = new Map<string, I>();\n\t\t\t\t\t\t\tfor (const itemUpdates of array)\n\t\t\t\t\t\t\t\tupdatesMap.set(itemUpdates._id, itemUpdates);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfor (const [ _id, item ] of this) {\n\t\t\t\t\t\t\t\tconst itemUpdates = updatesMap.get(_id);\n\t\t\t\t\t\t\t\tif (itemUpdates) {\n\t\t\t\t\t\t\t\t\tconst prevItemUpdates = prevUpdates.get(_id);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (TheItem)\n\t\t\t\t\t\t\t\t\t\titem.update(itemUpdates);\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tfor (const key in prevItemUpdates)// eslint-disable-line guard-for-in\n\t\t\t\t\t\t\t\t\t\t\tdelete item[key as keyof typeof item];\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tObject.assign(item, itemUpdates);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tprevUpdates.set(_id, itemUpdates);\n\t\t\t\t\t\t\t\t\tupdated.push(item);\n\t\t\t\t\t\t\t\t\tupdatesMap.delete(_id);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (TheItem)\n\t\t\t\t\t\t\t\t\t\titem.delete();\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tthis.delete(_id);\n\t\t\t\t\t\t\t\t\tprevUpdates.delete(_id);\n\t\t\t\t\t\t\t\t\tupdated.deleted.push(_id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfor (const [ _id, itemUpdates ] of updatesMap) {\n\t\t\t\t\t\t\t\tconst item = TheItem ? new TheItem(this, itemUpdates) : { ...itemUpdates };\n\t\t\t\t\t\t\t\tthis.set(_id, item);\n\t\t\t\t\t\t\t\tprevUpdates.set(_id, itemUpdates);\n\t\t\t\t\t\t\t\tupdated.push(item);\n\t\t\t\t\t\t\t\tupdated.added.push(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (this.sortList)\n\t\t\t\t\t\t\t\tthis.sorted = array.map(newItem => this.get(newItem._id)!);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tfor (const itemUpdates of array) {\n\t\t\t\t\t\t\t\tconst item = (TheItem ? new TheItem(this, itemUpdates) : { ...itemUpdates });\n\t\t\t\t\t\t\t\tthis.set(item._id, item);\n\t\t\t\t\t\t\t\tthis.sorted.push(item);\n\t\t\t\t\t\t\t\tprevUpdates.set(item._id, itemUpdates);\n\t\t\t\t\t\t\t\tupdated.push(item);\n\t\t\t\t\t\t\t\tupdated.added.push(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcase \"c\"/* create */:\n\t\t\t\t\tcase \"u\"/* update */: {\n\t\t\t\t\t\tlet [ , itemUpdates ] = update;\n\t\t\t\t\t\tlet item = this.get(itemUpdates._id);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (item) {\n\t\t\t\t\t\t\tconst isAtomic = update[2] === true;\n\t\t\t\t\t\t\tconst updatedFields = isAtomic ? Object.keys(itemUpdates) : update[2] as string[];\n\t\t\t\t\t\t\tconst prevItemUpdates = prevUpdates.get(item._id)!;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (TheItem)\n\t\t\t\t\t\t\t\titem.update(itemUpdates);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif (!isAtomic)\n\t\t\t\t\t\t\t\t\tfor (const key in prevItemUpdates)// eslint-disable-line guard-for-in\n\t\t\t\t\t\t\t\t\t\tdelete item[key as keyof typeof item];\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tObject.assign(item, itemUpdates);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (isAtomic)\n\t\t\t\t\t\t\t\titemUpdates = Object.assign(prevItemUpdates, itemUpdates);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (this.sortList && !shouldSort && (!updatedFields || updatedFields.some(fieldName => this.#fieldsToSort.includes(fieldName))))\n\t\t\t\t\t\t\t\tshouldSort = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem = (TheItem ? new TheItem(this, itemUpdates) : { ...itemUpdates }) as I;\n\t\t\t\t\t\t\tthis.set(item._id, item);\n\t\t\t\t\t\t\tthis.sorted.push(item);\n\t\t\t\t\t\t\tif (this.sortList)\n\t\t\t\t\t\t\t\tshouldSort = true;\n\t\t\t\t\t\t\tupdated.added.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tprevUpdates.set(item._id, itemUpdates as I);\n\t\t\t\t\t\tupdated.push(item);\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcase \"d\"/* delete */: {\n\t\t\t\t\t\tconst [ , _id ] = update;\n\t\t\t\t\t\tconst itemToDelete = this.get(_id);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (itemToDelete) {\n\t\t\t\t\t\t\tif (TheItem)\n\t\t\t\t\t\t\t\titemToDelete.delete();\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tthis.delete(_id);\n\t\t\t\t\t\t\tprevUpdates.delete(_id);\n\t\t\t\t\t\t\tremoveOne(this.sorted, itemToDelete);\n\t\t\t\t\t\t\tupdated.deleted.push(_id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.clear();\n\t\t\t\t}\n\t\t\t\n\t\t\tif (shouldSort)\n\t\t\t\tthis.sort();\n\t\t\t\n\t\t} else\n\t\t\tthis.clear();\n\t\t\n\t\tthis.handleUpdate?.(this, updated, updates?.[0] ? updates : null);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t[updateSymbol] = this.update;\n\t\n\tgetAsUpdates(): Updates<I> {\n\t\treturn (\n\t\t\t(this.size || this.sortList) ?\n\t\t\t\t[ [ \"i\"/* initial */, [ ...this.#updates.values() ], this.sortList ] ] :\n\t\t\t\tnull\n\t\t);\n\t}\n\t\n\t[getAsUpdatesSymbol] = this.getAsUpdates;\n\t\n\tgetAsInitialUpdated(): Updated<I> {\n\t\treturn Object.assign([ ...this.sorted ], {\n\t\t\tadded: [ ...this.sorted ],\n\t\t\tdeleted: []\n\t\t});\n\t}\n\t\n\t[getAsInitialUpdatedSymbol] = this.getAsInitialUpdated;\n\t\n\tclear() {\n\t\t\n\t\tsuper.clear();\n\t\tthis.#updates.clear();\n\t\tthis.sorted = [];\n\t\tthis.sortList = null;\n\t\tthis.sortCompareFunction = null;\n\t\tthis.#fieldsToSort = [];\n\t\t\n\t}\n\t\n\t[clearSymbol] = this.clear;\n\t\n\tvalueOf() {\n\t\treturn this.sorted;\n\t}\n\t\n\tget [Symbol.toStringTag]() {\n\t\treturn \"SubscriptionMap\";\n\t}\n\t\n\t\n\tstatic updateSymbol = updateSymbol;\n\tstatic getHandleUpdateSymbol = getHandleUpdateSymbol;\n\tstatic setHandleUpdateSymbol = setHandleUpdateSymbol;\n\tstatic getAsUpdatesSymbol = getAsUpdatesSymbol;\n\tstatic getAsInitialUpdatedSymbol = getAsInitialUpdatedSymbol;\n\tstatic clearSymbol = clearSymbol;\n\tstatic WithSubscription: typeof SubscriptionMapWithSubscription;\n\tstatic Item: typeof SubscriptionMapItem;\n\t\n}\n\n\nexport class SubscriptionMapWithSubscription<I extends Item = Item> extends SubscriptionMap<I> {\n\tconstructor(publicationName: string, params: unknown[], onUpdate: UpdateHandler<I>, immediately = true) {\n\t\tsuper(null, onUpdate);\n\t\t\n\t\tthis.publicationName = publicationName;\n\t\tthis.params = params;\n\t\t\n\t\tif (immediately)\n\t\t\tthis.subscribe();\n\t\t\n\t}\n\t\n\tpublicationName;\n\tparams;\n\t\n\tsubscription: Subscription | null = null;\n\t\n\tsubscribe() {\n\t\t\n\t\tif (!this.subscription)\n\t\t\tthis.subscription = new Subscription(\"map\", this.publicationName, this.params, updates => this.update(updates as Updates<I>));\n\t\t\n\t}\n\t\n\tget [subscribeSymbol]() {\n\t\treturn this.subscribe;\n\t}\n\t\n\tunsubscribe() {\n\t\t\n\t\tif (this.subscription) {\n\t\t\tthis.subscription.cancel();\n\t\t\tthis.subscription = null;\n\t\t}\n\t\t\n\t}\n\t\n\tget [unsubscribeSymbol]() {\n\t\treturn this.unsubscribe;\n\t}\n\t\n\trenew(publicationName?: string, params?: unknown[]) {\n\t\t\n\t\tif (this.subscription) {\n\t\t\tthis.unsubscribe();\n\t\t\t\n\t\t\tif (publicationName)\n\t\t\t\tif (Array.isArray(publicationName))\n\t\t\t\t\tparams = publicationName;\n\t\t\t\telse\n\t\t\t\t\tthis.publicationName = publicationName;\n\t\t\t\n\t\t\tif (params)\n\t\t\t\tthis.params = params;\n\t\t\t\n\t\t\tthis.subscribe();\n\t\t}\n\t\t\n\t}\n\t\n\tget [renewSymbol]() {\n\t\treturn this.renew;\n\t}\n\t\n\t[getSubscriptionSymbol]() {\n\t\treturn this.subscription;\n\t}\n\t\n\tget [Symbol.toStringTag]() {\n\t\treturn \"SubscriptionMapWithSubscription\";\n\t}\n\t\n\t\n\tstatic subscribeSymbol = subscribeSymbol;\n\tstatic unsubscribeSymbol = unsubscribeSymbol;\n\tstatic renewSymbol = renewSymbol;\n\tstatic getSubscriptionSymbol = getSubscriptionSymbol;\n\t\n}\n\nSubscriptionMap.WithSubscription = SubscriptionMapWithSubscription;\n\n\nexport class SubscriptionMapItem {\n\tconstructor(map: SubscriptionMap, updates: GenericItem) {\n\t\tthis.#map = map;\n\t\t\n\t\tthis.update(updates);\n\t\t\n\t}\n\t\n\t_id!: string;\n\t\n\t#map;\n\t\n\tupdate(updates: GenericItem) {\n\t\tObject.assign(this, updates);\n\t\t\n\t}\n\t\n\tdelete() {\n\t\t\n\t\tthis.#map.delete(this._id);\n\t\t\n\t}\n\t\n}\n\nSubscriptionMap.Item = SubscriptionMapItem;\n", "import { Subscription } from \"./Subscription\";\nimport {\n\tclearSymbol,\n\tgetAsInitialUpdatedSymbol,\n\tgetAsUpdatesSymbol,\n\tgetHandleUpdateSymbol,\n\tgetSubscriptionSymbol,\n\trenewSymbol,\n\tsetHandleUpdateSymbol,\n\tsubscribeSymbol,\n\tunsubscribeSymbol,\n\tupdateSymbol\n} from \"./symbols\";\n\n\nconst handleUpdateSymbol = Symbol(\"handleUpdate\");\nconst updatesSymbol = Symbol(\"updates\");\n\nexport type Updated = Record<string, unknown>;\nexport type Updates = Record<string, unknown> | null;\nexport type UpdateHandler = (object: SubscriptionObject, updated: Updated, updates: Updates) => void;\n\n\nexport class SubscriptionObject {\n\tconstructor(updates?: Updates, onUpdate?: UpdateHandler) {\n\t\tif (onUpdate)\n\t\t\tthis[handleUpdateSymbol] = onUpdate;\n\t\t\n\t\tif (updates)\n\t\t\tthis[updateSymbol](updates);\n\t\t\n\t}\n\t\n\t[handleUpdateSymbol]?: UpdateHandler;\n\t\n\t[updatesSymbol]: Updates = null;\n\t\n\t[getHandleUpdateSymbol]() {\n\t\treturn this[handleUpdateSymbol];\n\t}\n\t\n\t[setHandleUpdateSymbol](handleUpdate: UpdateHandler) {\n\t\treturn (this[handleUpdateSymbol] = handleUpdate);\n\t}\n\t\n\t[updateSymbol](updates: Updates) {\n\t\tif (updates) {\n\t\t\tfor (const key in this[updatesSymbol])// eslint-disable-line guard-for-in\n\t\t\t\tdelete this[key];\n\t\t\tfor (const key in updates)// eslint-disable-line guard-for-in\n\t\t\t\tthis[key] = updates[key];\n\t\t\tthis[updatesSymbol] = updates;\n\t\t} else\n\t\t\tthis[clearSymbol]();\n\t\t\n\t\tthis[handleUpdateSymbol]?.(this, this, this[updatesSymbol]);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t[getAsUpdatesSymbol](): Updates {\n\t\treturn this[updatesSymbol] && { ...this[updatesSymbol] };\n\t}\n\t\n\t[getAsInitialUpdatedSymbol](): Updated {\n\t\treturn this.valueOf()!;\n\t}\n\t\n\t[clearSymbol]() {\n\t\t\n\t\tfor (const key in this)// eslint-disable-line guard-for-in\n\t\t\tdelete this[key];\n\t\tthis[updatesSymbol] = null;\n\t\t\n\t}\n\t\n\tvalueOf() {\n\t\treturn this[updatesSymbol] && this;\n\t}\n\t\n\tget [Symbol.toStringTag]() {\n\t\treturn \"SubscriptionObject\";\n\t}\n\t\n\t[key: string]: unknown;\n\t\n\t\n\tstatic updateSymbol = updateSymbol;\n\tstatic getHandleUpdateSymbol = getHandleUpdateSymbol;\n\tstatic setHandleUpdateSymbol = setHandleUpdateSymbol;\n\tstatic getAsUpdatesSymbol = getAsUpdatesSymbol;\n\tstatic getAsInitialUpdatedSymbol = getAsInitialUpdatedSymbol;\n\tstatic clearSymbol = clearSymbol;\n\tstatic WithSubscription: typeof SubscriptionObjectWithSubscription;\n\t\n}\n\n\nexport class SubscriptionObjectWithSubscription extends SubscriptionObject {\n\tconstructor(publicationName: string, params: unknown[], onUpdate: UpdateHandler, immediately = true) {\n\t\tsuper(null, onUpdate);\n\t\t\n\t\tthis.#publicationName = publicationName;\n\t\tthis.#params = params;\n\t\t\n\t\tif (immediately)\n\t\t\tthis[subscribeSymbol]();\n\t\t\n\t}\n\t\n\t#publicationName;\n\t#params;\n\t#subscription: Subscription | null = null;\n\t\n\t[subscribeSymbol]() {\n\t\t\n\t\tif (!this.#subscription)\n\t\t\tthis.#subscription = new Subscription(\"object\", this.#publicationName, this.#params, updates => this[updateSymbol](updates as Updates));\n\t\t\n\t}\n\t\n\t[unsubscribeSymbol]() {\n\t\t\n\t\tif (this.#subscription) {\n\t\t\tthis.#subscription.cancel();\n\t\t\tthis.#subscription = null;\n\t\t}\n\t\t\n\t}\n\t\n\t[renewSymbol](publicationName?: string, params?: unknown[]) {\n\t\t\n\t\tif (this.#subscription) {\n\t\t\tthis[unsubscribeSymbol]();\n\t\t\t\n\t\t\tif (publicationName)\n\t\t\t\tif (Array.isArray(publicationName))\n\t\t\t\t\tparams = publicationName;\n\t\t\t\telse\n\t\t\t\t\tthis.#publicationName = publicationName;\n\t\t\t\n\t\t\tif (params)\n\t\t\t\tthis.#params = params;\n\t\t\t\n\t\t\tthis[subscribeSymbol]();\n\t\t}\n\t\t\n\t}\n\t\n\t[getSubscriptionSymbol]() {\n\t\treturn this.#subscription;\n\t}\n\t\n\tget [Symbol.toStringTag]() {\n\t\treturn \"SubscriptionObjectWithSubscription\";\n\t}\n\t\n\t\n\tstatic subscribeSymbol = subscribeSymbol;\n\tstatic unsubscribeSymbol = unsubscribeSymbol;\n\tstatic renewSymbol = renewSymbol;\n\tstatic getSubscriptionSymbol = getSubscriptionSymbol;\n\t\n}\n\nSubscriptionObject.WithSubscription = SubscriptionObjectWithSubscription;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["i", "subscriptions", "ws", "Subscription", "type", "publicationName", "args", "handler", "immediately", "_ws", "si", "updates", "subscription", "removeOne", "updateSymbol", "getHandleUpdateSymbol", "setHandleUpdateSymbol", "getAsUpdatesSymbol", "getAsInitialUpdatedSymbol", "clearSymbol", "subscribeSymbol", "unsubscribeSymbol", "renewSymbol", "getSubscriptionSymbol", "getHandleSubscriptionSymbol", "setHandleSubscriptionSymbol", "ascSort", "a", "b", "descSort", "SubscriptionArray", "updates", "onUpdate", "getHandleUpdateSymbol", "setHandleUpdateSymbol", "handleUpdate", "updated", "shouldSort", "update", "array", "sort", "newItem", "itemToDelete", "removeOne", "updateSymbol", "getAsUpdatesSymbol", "getAsInitialUpdatedSymbol", "clearSymbol", "SubscriptionArrayWithSubscription", "publicationName", "params", "immediately", "Subscription", "subscribeSymbol", "unsubscribeSymbol", "renewSymbol", "getSubscriptionSymbol", "EventEmitter", "debounce", "StatefulPromise", "privates", "EventEmitter", "debounce", "removeOne", "StatefulPromise", "removeOne", "unique", "valueAt", "item", "key", "value", "part", "isGreater", "left", "right", "createSortFunction", "sortList", "sortEntries", "a", "b", "direction", "aValue", "bValue", "SubscriptionMap", "updates", "onUpdate", "#updates", "#fieldsToSort", "getHandleUpdateSymbol", "setHandleUpdateSymbol", "handleUpdate", "#Item", "TheItem", "_id", "updated", "shouldSort", "prevUpdates", "update", "array", "unique", "updatesMap", "itemUpdates", "prevItemUpdates", "newItem", "isAtomic", "updatedFields", "fieldName", "itemToDelete", "removeOne", "updateSymbol", "getAsUpdatesSymbol", "getAsInitialUpdatedSymbol", "clearSymbol", "SubscriptionMapWithSubscription", "publicationName", "params", "immediately", "Subscription", "subscribeSymbol", "unsubscribeSymbol", "renewSymbol", "getSubscriptionSymbol", "SubscriptionMapItem", "map", "#map", "handleUpdateSymbol", "updatesSymbol", "SubscriptionObject", "updates", "onUpdate", "updateSymbol", "getHandleUpdateSymbol", "setHandleUpdateSymbol", "handleUpdate", "key", "clearSymbol", "getAsUpdatesSymbol", "getAsInitialUpdatedSymbol", "SubscriptionObjectWithSubscription", "publicationName", "params", "immediately", "#publicationName", "#params", "subscribeSymbol", "#subscription", "Subscription", "unsubscribeSymbol", "renewSymbol", "getSubscriptionSymbol", "isUpdatedMapOrArray", "updated", "SubscriptionGroupItem", "_SubscriptionGroupItem", "EventEmitter", "definition", "group", "#loadPromise", "#initPromise", "#unloadPromise", "value", "type", "publicationName", "params", "handle", "onBeforeInit", "debounceLimit", "preventBind", "#applyOptions", "#attachTo", "emitUpdate", "debouncedUpdated", "emitUpdateDebounced", "debounce", "isDetached", "item", "StatefulPromise", "handleSubscription", "#handleSubscription", "setHandleUpdateSymbol", "SubscriptionArrayWithSubscription", "SubscriptionMapWithSubscription", "SubscriptionObjectWithSubscription", "unsubscribeSymbol", "#unload", "removeOne", "#loadUpdated", "_", "updates", "privates", "#load", "#init", "subscribeSymbol", "handleUpdate", "getHandleUpdateSymbol", "initialUpdated", "getAsInitialUpdatedSymbol", "getAsUpdatesSymbol", "renewSymbol", "isTupleDefinition", "definition", "parseDefinition", "args", "parsed", "SubscriptionGroup", "_SubscriptionGroup", "EventEmitter", "definitions", "target", "debounceLimit", "immediately", "#initPromise", "StatefulPromise", "#loadPromise", "#unloadPromise", "#debounceLimit", "item", "emitUpdateDebounced", "debounce", "shouldReload", "SubscriptionGroupItem", "names", "shouldUpdate", "name", "#unload", "#load", "itemsToDetach", "definitionsToRedefine", "definitionsToAttach", "privates", "#init", "group"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "insite-subscriptions-client",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "Client-side subscriptions/publications for inSite",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"insite",
|
|
@@ -41,10 +41,10 @@
|
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@nesvet/n": "^1.2.1",
|
|
43
43
|
"eventemitter3": "^5.0.4",
|
|
44
|
-
"insite-ws": "^2.
|
|
44
|
+
"insite-ws": "^2.6.0"
|
|
45
45
|
},
|
|
46
|
-
"packageManager": "bun@1.3.9",
|
|
47
46
|
"engines": {
|
|
48
|
-
"
|
|
47
|
+
"bun": ">=1.4.4",
|
|
48
|
+
"node": ">=22.0.0"
|
|
49
49
|
}
|
|
50
50
|
}
|