insite-subscriptions-server 2.0.13 → 2.0.19

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.
@@ -2,7 +2,7 @@ import type { ChangeStreamDocument, Document, Filter, InSiteWatchedCollection, S
2
2
  import { CollectionMapSubscriptionHandle } from "./CollectionMapSubscriptionHandle";
3
3
  import { Publication } from "./Publication";
4
4
  import { SubscriptionHandle } from "./SubscriptionHandle";
5
- import type { PartialWithId, Projection, SubscriptionArgs } from "./types";
5
+ import type { PartialWithId, Projection, SubscriptionArgs, TransformableDoc } from "./types";
6
6
  export declare const skippedChangeStreamDocuments: WeakSet<ChangeStreamDocument>;
7
7
  type QueryProps<D extends Document> = {
8
8
  query?: Filter<D>;
@@ -11,12 +11,12 @@ type QueryProps<D extends Document> = {
11
11
  triggers?: string[];
12
12
  };
13
13
  export declare class CollectionMapPublication<D extends Document = Document, SA extends SubscriptionArgs = SubscriptionArgs> extends Publication<SA> {
14
- constructor(collection: InSiteWatchedCollection<D>, name: string, queryProps?: ((...args: SA) => false | null | QueryProps<D> | void) | false | null | QueryProps<D>, transform?: (doc: PartialWithId<D>, args: SA) => void);
14
+ constructor(collection: InSiteWatchedCollection<D>, name: string, queryProps?: ((...args: SA) => false | null | QueryProps<D> | void) | false | null | QueryProps<D>, transform?: (doc: TransformableDoc<D>, args: SA) => void);
15
15
  type: string;
16
16
  collection: InSiteWatchedCollection<D>;
17
17
  subscriptions: Set<CollectionMapSubscriptionHandle<D, SA>>;
18
18
  queryProps: false | ((...args: SA) => false | null | QueryProps<D> | void) | QueryProps<D> | null | undefined;
19
- transform: ((doc: PartialWithId<D>, args: SA) => void) | undefined;
19
+ transform: ((doc: TransformableDoc<D>, args: SA) => void) | undefined;
20
20
  skip(next: ChangeStreamDocument<D>): void;
21
21
  makeQueryProps(args: SA): {
22
22
  query: Filter<D> | null;
@@ -1 +1 @@
1
- {"version":3,"file":"CollectionMapPublication.d.ts","sourceRoot":"","sources":["../src/CollectionMapPublication.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,oBAAoB,EACpB,QAAQ,EACR,MAAM,EACN,uBAAuB,EACvB,IAAI,EACJ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AA0C3E,eAAO,MAAM,4BAA4B,+BAAsC,CAAC;AAEhF,KAAK,UAAU,CAAC,CAAC,SAAS,QAAQ,IAAI;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAGF,qBAAa,wBAAwB,CACpC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,EAAE,SAAS,gBAAgB,GAAG,gBAAgB,CAC7C,SAAQ,WAAW,CAAC,EAAE,CAAC;gBAEvB,UAAU,EAAE,uBAAuB,CAAC,CAAC,CAAC,EACtC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,EAClG,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI;IAUtD,IAAI,SAAS;IAEb,UAAU,6BAAC;IACH,aAAa,EAAE,GAAG,CAAC,+BAA+B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnE,UAAU,qBAfe,EAAE,KAAK,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,qCAexD;IACX,SAAS,SAfU,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,IAAI,cAe5C;IAEV,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAKlC,cAAc,CAAC,IAAI,EAAE,EAAE;;;;;;;;IA4BjB,iBAAiB,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IAoDlG,OAAO,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IAI9C,WAAW,iBAAkB,kBAAkB,CAAC,EAAE,CAAC,UAUjD;IAEF,YAAY;IASZ,aAAa,iBAAkB,kBAAkB,CAAC,EAAE,CAAC,UAInD;CAEF"}
1
+ {"version":3,"file":"CollectionMapPublication.d.ts","sourceRoot":"","sources":["../src/CollectionMapPublication.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,oBAAoB,EACpB,QAAQ,EACR,MAAM,EACN,uBAAuB,EACvB,IAAI,EACJ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EACX,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,MAAM,SAAS,CAAC;AA0CjB,eAAO,MAAM,4BAA4B,+BAAsC,CAAC;AAEhF,KAAK,UAAU,CAAC,CAAC,SAAS,QAAQ,IAAI;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAGF,qBAAa,wBAAwB,CACpC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,EAAE,SAAS,gBAAgB,GAAG,gBAAgB,CAC7C,SAAQ,WAAW,CAAC,EAAE,CAAC;gBAEvB,UAAU,EAAE,uBAAuB,CAAC,CAAC,CAAC,EACtC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,KAAK,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,EAClG,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI;IAUzD,IAAI,SAAS;IAEb,UAAU,6BAAC;IACH,aAAa,EAAE,GAAG,CAAC,+BAA+B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnE,UAAU,qBAfe,EAAE,KAAK,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,qCAexD;IACX,SAAS,SAfU,gBAAgB,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,IAAI,cAe/C;IAEV,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAKlC,cAAc,CAAC,IAAI,EAAE,EAAE;;;;;;;;IA4BjB,iBAAiB,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IAoDlG,OAAO,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IAI9C,WAAW,iBAAkB,kBAAkB,CAAC,EAAE,CAAC,UAUjD;IAEF,YAAY;IASZ,aAAa,iBAAkB,kBAAkB,CAAC,EAAE,CAAC,UAInD;CAEF"}
@@ -2,6 +2,7 @@ import { ChangeStreamDocument, Document, Filter, Sort } from "insite-db";
2
2
  import { SubscriptionHandle } from "./SubscriptionHandle";
3
3
  import type { Projection, SubscriptionArgs } from "./types";
4
4
  export declare class CollectionMapSubscriptionHandle<D extends Document = Document, SA extends SubscriptionArgs = SubscriptionArgs> extends SubscriptionHandle<SA> {
5
+ #private;
5
6
  constructor(publicationName: string, args: SA, handler: (fetched: unknown) => void, immediately?: boolean);
6
7
  ids: Set<string>;
7
8
  query: Filter<D> | null;
@@ -12,7 +13,6 @@ export declare class CollectionMapSubscriptionHandle<D extends Document = Docume
12
13
  match?: (doc: D) => boolean;
13
14
  changed(next: ChangeStreamDocument<D> | null): Promise<void>;
14
15
  updates: unknown[];
15
- private flushTimeout?;
16
16
  flushUpdates: () => void;
17
17
  collectionChangeListener: (next: ChangeStreamDocument<D>) => Promise<void>;
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CollectionMapSubscriptionHandle.d.ts","sourceRoot":"","sources":["../src/CollectionMapSubscriptionHandle.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oBAAoB,EACpB,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG5D,qBAAa,+BAA+B,CAC3C,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,EAAE,SAAS,gBAAgB,GAAG,gBAAgB,CAC7C,SAAQ,kBAAkB,CAAC,EAAE,CAAC;gBAE9B,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,EAAE,EACR,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,EACnC,WAAW,CAAC,EAAE,OAAO;IAatB,GAAG,cAAqB;IAExB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAQ;IAC/B,UAAU,EAAE,IAAI,GAAG,UAAU,CAAQ;IACrC,qBAAqB,UAAS;IAC9B,MAAM,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAQ;IAClC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAQ;IAEzB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;IAEtB,OAAO,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IAKlD,OAAO,EAAE,OAAO,EAAE,CAAM;IACxB,OAAO,CAAC,YAAY,CAAC,CAAiB;IAEtC,YAAY,aAOV;IAEF,wBAAwB,SAAgB,oBAAoB,CAAC,CAAC,CAAC,mBAwB7D;CAGF"}
1
+ {"version":3,"file":"CollectionMapSubscriptionHandle.d.ts","sourceRoot":"","sources":["../src/CollectionMapSubscriptionHandle.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oBAAoB,EACpB,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG5D,qBAAa,+BAA+B,CAC3C,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,EAAE,SAAS,gBAAgB,GAAG,gBAAgB,CAC7C,SAAQ,kBAAkB,CAAC,EAAE,CAAC;;gBAE9B,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,EAAE,EACR,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,EACnC,WAAW,CAAC,EAAE,OAAO;IAatB,GAAG,cAAqB;IAExB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAQ;IAC/B,UAAU,EAAE,IAAI,GAAG,UAAU,CAAQ;IACrC,qBAAqB,UAAS;IAC9B,MAAM,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAQ;IAClC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAQ;IAEzB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;IAEtB,OAAO,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IAKlD,OAAO,EAAE,OAAO,EAAE,CAAM;IAGxB,YAAY,aAOV;IAEF,wBAAwB,SAAgB,oBAAoB,CAAC,CAAC,CAAC,mBAwB7D;CAGF"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import b from"sift";var u=globalThis.__insite_publications??=new Map,p=class{constructor(e,t){this.name=e,t&&Object.assign(this,t),u.set(e,this)}name;onSubscribe;onUnsubscribe;type="object";subscriptions=new Set;fetchSubscription(e,...t){return this.fetch?.(...e.args)}subscribe(e){this.subscriptions.add(e),this.onSubscribe?.(e)}changed(e){for(let t of this.subscriptions)t.changed(e)}unsubscribe(e){this.onUnsubscribe?.(e),this.subscriptions.delete(e)}static publications=u};var d=class{constructor(e,t,o,n,i){let s=u.get(e);s?(this.publication=s,this.args=t,this.handler=o,i||(this.publication.subscribe(this),n&&this.changed(null))):process.env.NODE_ENV==="development"&&console.error("Unknown publication",e)}publication;args;handler;async changed(e){this.handler(await this.publication.fetchSubscription(this,e),e)}cancel(){this.publication?.unsubscribe(this)}renew(){return this.publication?.unsubscribe(this),this.publication?.subscribe(this),this.changed(null)}};var c=class extends d{constructor(e,t,o,n){super(e,t,o,n,!0),this.publication&&(this.publication.subscribe(this),n&&this.changed(null))}ids=new Set;query=null;projection=null;isProjectionInclusive=!1;fields=null;sort=null;match;async changed(e){this.handler([await this.publication.fetchSubscription(this,e)])}updates=[];flushTimeout;flushUpdates=()=>{this.updates.length&&(this.handler(this.updates),this.updates=[])};collectionChangeListener=async e=>{!h.has(e)&&"documentKey"in e&&(this.ids.has(e.documentKey._id)?e.operationType!=="update"||!this.fields||e.updateDescription.updatedFields&&Object.keys(e.updateDescription.updatedFields).some(t=>this.fields.has(t)):"fullDocument"in e&&this.match(e.fullDocument))&&(clearTimeout(this.flushTimeout),this.updates.push(await this.publication.fetchSubscription(this,e)),this.flushTimeout=setTimeout(this.flushUpdates,1))}};function l(r,e,t=!0,o=!0){if(e)if(t){let n={};for(let i in e){let s=e[i];n[i]=typeof s=="object"?Array.isArray(r[i])?r[i].map(a=>l(a,s,!0,!1)):l(r[i],s,!0,!1):r[i]}return o&&e._id===0&&delete n._id,n}else{let n={...r};for(let i in e){let s=e[i];typeof s=="object"?n[i]=Array.isArray(r[i])?r[i].map(a=>l(a,s,!1,!1)):l(r[i],s,!1,!1):delete n[i]}return n}return r}var h=new WeakSet,m=class extends p{constructor(e,t,o,n){super(t),this.collection=e,this.queryProps=o,this.transform=n}type="map";collection;queryProps;transform;skip(e){h.add(e)}makeQueryProps(e){let{query:t=null,projection:o=null,sort:n=null,triggers:i}=(typeof this.queryProps=="function"?this.queryProps(...e):this.queryProps)||{},s=!1,a=null;if(o){for(let f in o)if(s=!!o[f],f!=="_id")break;s&&(a=new Set([...Object.keys(t??{}),...Object.keys(o),...i??[]]),a.delete("_id"),o._id!==0&&(o._id=1))}return{query:t,projection:o,isProjectionInclusive:s,fields:a,sort:n,args:e}}async fetchSubscription(e,t){if(e instanceof c&&e.query){if(t&&"documentKey"in t){let i=t.documentKey._id;if(t.operationType==="insert"||t.operationType!=="delete"&&e.match(t.fullDocument)){let s=l(t.fullDocument,e.projection,e.isProjectionInclusive);return this.transform?.(s,e.args),e.ids.has(i)?["u",s,"updateDescription"in t&&t.updateDescription.updatedFields&&Object.keys(t.updateDescription.updatedFields)]:(e.ids.add(i),["c",s])}return e.ids.delete(i),["d",i]}let o=this.collection.find(e.query);e.projection&&o.project(e.projection),e.sort&&o.sort(e.sort);let n=await o.toArray();if(e.ids)if(e.ids.clear(),this.transform)for(let i of n)e.ids.add(i._id),this.transform(i,e.args);else for(let i of n)e.ids.add(i._id);else if(this.transform)for(let i of n)this.transform(i,e.args);return["i",n,e.sort]}return null}changed(e){return Promise.all([...this.subscriptions].map(t=>t.changed(e)))}onSubscribe=e=>{e instanceof c&&(Object.assign(e,this.makeQueryProps(e.args)),e.query&&(e.match=b(e.query),this.collection.changeListeners.add(e.collectionChangeListener)))};flushInitial(){return Promise.all([...this.subscriptions].map(async e=>{let t=await this.fetchSubscription(e,null);e.handler([t]),e.updates=[]}))}onUnsubscribe=e=>{e instanceof c&&e.query&&this.collection.changeListeners.delete(e.collectionChangeListener)}};export{m as CollectionMapPublication,c as CollectionMapSubscriptionHandle,p as Publication,d as SubscriptionHandle,u as publications,h as skippedChangeStreamDocuments};
1
+ import b from"sift";var u=globalThis.__insite_publications??=new Map,p=class{constructor(e,t){this.name=e,t&&Object.assign(this,t),u.set(e,this)}name;onSubscribe;onUnsubscribe;type="object";subscriptions=new Set;fetchSubscription(e,...t){return this.fetch?.(...e.args)}subscribe(e){this.subscriptions.add(e),this.onSubscribe?.(e)}changed(e){for(let t of this.subscriptions)t.changed(e)}unsubscribe(e){this.onUnsubscribe?.(e),this.subscriptions.delete(e)}static publications=u};var d=class{constructor(e,t,o,n,i){let s=u.get(e);s?(this.publication=s,this.args=t,this.handler=o,i||(this.publication.subscribe(this),n&&this.changed(null))):process.env.NODE_ENV==="development"&&console.error("Unknown publication",e)}publication;args;handler;async changed(e){this.handler(await this.publication.fetchSubscription(this,e),e)}cancel(){this.publication?.unsubscribe(this)}renew(){return this.publication?.unsubscribe(this),this.publication?.subscribe(this),this.changed(null)}};var c=class extends d{constructor(e,t,o,n){super(e,t,o,n,!0),this.publication&&(this.publication.subscribe(this),n&&this.changed(null))}ids=new Set;query=null;projection=null;isProjectionInclusive=!1;fields=null;sort=null;match;async changed(e){this.handler([await this.publication.fetchSubscription(this,e)])}updates=[];#e;flushUpdates=()=>{this.updates.length&&(this.handler(this.updates),this.updates=[])};collectionChangeListener=async e=>{!h.has(e)&&"documentKey"in e&&(this.ids.has(e.documentKey._id)?e.operationType!=="update"||!this.fields||e.updateDescription.updatedFields&&Object.keys(e.updateDescription.updatedFields).some(t=>this.fields.has(t)):"fullDocument"in e&&this.match(e.fullDocument))&&(clearTimeout(this.#e),this.updates.push(await this.publication.fetchSubscription(this,e)),this.#e=setTimeout(this.flushUpdates,1))}};function l(r,e,t=!0,o=!0){if(e)if(t){let n={};for(let i in e){let s=e[i];n[i]=typeof s=="object"?Array.isArray(r[i])?r[i].map(a=>l(a,s,!0,!1)):l(r[i],s,!0,!1):r[i]}return o&&e._id===0&&delete n._id,n}else{let n={...r};for(let i in e){let s=e[i];typeof s=="object"?n[i]=Array.isArray(r[i])?r[i].map(a=>l(a,s,!1,!1)):l(r[i],s,!1,!1):delete n[i]}return n}return r}var h=new WeakSet,m=class extends p{constructor(e,t,o,n){super(t),this.collection=e,this.queryProps=o,this.transform=n}type="map";collection;queryProps;transform;skip(e){h.add(e)}makeQueryProps(e){let{query:t=null,projection:o=null,sort:n=null,triggers:i}=(typeof this.queryProps=="function"?this.queryProps(...e):this.queryProps)||{},s=!1,a=null;if(o){for(let f in o)if(s=!!o[f],f!=="_id")break;s&&(a=new Set([...Object.keys(t??{}),...Object.keys(o),...i??[]]),a.delete("_id"),o._id!==0&&(o._id=1))}return{query:t,projection:o,isProjectionInclusive:s,fields:a,sort:n,args:e}}async fetchSubscription(e,t){if(e instanceof c&&e.query){if(t&&"documentKey"in t){let i=t.documentKey._id;if(t.operationType==="insert"||t.operationType!=="delete"&&e.match(t.fullDocument)){let s=l(t.fullDocument,e.projection,e.isProjectionInclusive);return this.transform?.(s,e.args),e.ids.has(i)?["u",s,"updateDescription"in t&&t.updateDescription.updatedFields&&Object.keys(t.updateDescription.updatedFields)]:(e.ids.add(i),["c",s])}return e.ids.delete(i),["d",i]}let o=this.collection.find(e.query);e.projection&&o.project(e.projection),e.sort&&o.sort(e.sort);let n=await o.toArray();if(e.ids)if(e.ids.clear(),this.transform)for(let i of n)e.ids.add(i._id),this.transform(i,e.args);else for(let i of n)e.ids.add(i._id);else if(this.transform)for(let i of n)this.transform(i,e.args);return["i",n,e.sort]}return null}changed(e){return Promise.all([...this.subscriptions].map(t=>t.changed(e)))}onSubscribe=e=>{e instanceof c&&(Object.assign(e,this.makeQueryProps(e.args)),e.query&&(e.match=b(e.query),this.collection.changeListeners.add(e.collectionChangeListener)))};flushInitial(){return Promise.all([...this.subscriptions].map(async e=>{let t=await this.fetchSubscription(e,null);e.handler([t]),e.updates=[]}))}onUnsubscribe=e=>{e instanceof c&&e.query&&this.collection.changeListeners.delete(e.collectionChangeListener)}};export{m as CollectionMapPublication,c as CollectionMapSubscriptionHandle,p as Publication,d as SubscriptionHandle,u as publications,h as skippedChangeStreamDocuments};
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/CollectionMapPublication.ts", "../src/Publication.ts", "../src/SubscriptionHandle.ts", "../src/CollectionMapSubscriptionHandle.ts"],
4
- "sourcesContent": ["import sift from \"sift\";\nimport type {\n\tChangeStreamDocument,\n\tDocument,\n\tFilter,\n\tInSiteWatchedCollection,\n\tSort\n} from \"insite-db\";\nimport { CollectionMapSubscriptionHandle } from \"./CollectionMapSubscriptionHandle\";\nimport { Publication } from \"./Publication\";\nimport { SubscriptionHandle } from \"./SubscriptionHandle\";\nimport type { PartialWithId, Projection, SubscriptionArgs } from \"./types\";\n\n\nfunction projectDocument<D extends Document>(document: D, projection: null, isInclusive?: boolean, isTop?: boolean): D;\nfunction projectDocument<D extends Document>(document: D, projection: Projection, isInclusive?: boolean, isTop?: boolean): Partial<D>;\nfunction projectDocument<D extends Document>(document: D, projection: null | Projection, isInclusive?: boolean, isTop?: boolean): D | Partial<D>;\nfunction projectDocument<D extends Document>(document: D, projection: null | Projection, isInclusive = true, isTop = true) {\n\tif (projection)\n\t\tif (isInclusive) {\n\t\t\tconst projected: Record<string, unknown> = {};\n\t\t\tfor (const key in projection) { // eslint-disable-line guard-for-in\n\t\t\t\tconst subprojection = projection[key];\n\t\t\t\tprojected[key] =\n\t\t\t\t\ttypeof subprojection == \"object\" ?\n\t\t\t\t\t\tArray.isArray(document[key]) ?\n\t\t\t\t\t\t\tdocument[key].map((item: Document) => projectDocument(item, subprojection, true, false)) :\n\t\t\t\t\t\t\tprojectDocument(document[key], subprojection, true, false) :\n\t\t\t\t\t\tdocument[key];\n\t\t\t}\n\t\t\tif (isTop && projection._id === 0)\n\t\t\t\tdelete projected._id;\n\t\t\t\n\t\t\treturn projected as Partial<D>;\n\t\t} else {\n\t\t\tconst projected = { ...document } as Record<string, unknown>;\n\t\t\tfor (const key in projection) { // eslint-disable-line guard-for-in\n\t\t\t\tconst subprojection = projection[key];\n\t\t\t\tif (typeof subprojection == \"object\")\n\t\t\t\t\tprojected[key] =\n\t\t\t\t\t\tArray.isArray(document[key]) ?\n\t\t\t\t\t\t\tdocument[key].map((item: Document) => projectDocument(item, subprojection, false, false)) :\n\t\t\t\t\t\t\tprojectDocument(document[key], subprojection, false, false);\n\t\t\t\telse\n\t\t\t\t\tdelete projected[key];\n\t\t\t}\n\t\t\t\n\t\t\treturn projected as Partial<D>;\n\t\t}\n\t\n\treturn document;\n}\n\nexport const skippedChangeStreamDocuments = new WeakSet<ChangeStreamDocument>();\n\ntype QueryProps<D extends Document> = {\n\tquery?: Filter<D>;\n\tprojection?: Projection;\n\tsort?: Sort;\n\ttriggers?: string[];\n};\n\n\nexport class CollectionMapPublication<\n\tD extends Document = Document,\n\tSA extends SubscriptionArgs = SubscriptionArgs\n> extends Publication<SA> {\n\tconstructor(\n\t\tcollection: InSiteWatchedCollection<D>,\n\t\tname: string,\n\t\tqueryProps?: ((...args: SA) => false | null | QueryProps<D> | void) | false | null | QueryProps<D>,\n\t\ttransform?: (doc: PartialWithId<D>, args: SA) => void\n\t) {\n\t\tsuper(name);\n\t\t\n\t\tthis.collection = collection;\n\t\tthis.queryProps = queryProps;\n\t\tthis.transform = transform;\n\t\t\n\t}\n\t\n\ttype = \"map\";\n\t\n\tcollection;\n\tdeclare subscriptions: Set<CollectionMapSubscriptionHandle<D, SA>>;\n\tqueryProps;\n\ttransform;\n\t\n\tskip(next: ChangeStreamDocument<D>) {\n\t\tskippedChangeStreamDocuments.add(next);\n\t\t\n\t}\n\t\n\tmakeQueryProps(args: SA) {\n\t\tconst {\n\t\t\tquery = null,\n\t\t\tprojection = null,\n\t\t\tsort = null,\n\t\t\ttriggers\n\t\t} = (typeof this.queryProps == \"function\" ? this.queryProps(...args) : this.queryProps) || {};\n\t\t\n\t\tlet isProjectionInclusive = false;\n\t\tlet fields = null;\n\t\tif (projection) {\n\t\t\t// eslint-disable-next-line guard-for-in\n\t\t\tfor (const key in projection) {\n\t\t\t\tisProjectionInclusive = !!projection[key];\n\t\t\t\tif (key !== \"_id\")\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (isProjectionInclusive) {\n\t\t\t\tfields = new Set([ ...Object.keys(query ?? {}), ...Object.keys(projection), ...triggers ?? [] ]);\n\t\t\t\tfields.delete(\"_id\");\n\t\t\t\tif (projection._id !== 0)\n\t\t\t\t\tprojection._id = 1;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn { query, projection, isProjectionInclusive, fields, sort, args };\n\t}\n\t\n\tasync fetchSubscription(subscription: SubscriptionHandle<SA>, next: ChangeStreamDocument<D> | null) {\n\t\tif (subscription instanceof CollectionMapSubscriptionHandle && subscription.query) {\n\t\t\tif (next && \"documentKey\" in next) {\n\t\t\t\tconst _id = next.documentKey._id as unknown as string;\n\t\t\t\t\n\t\t\t\tif (next.operationType === \"insert\" || (next.operationType !== \"delete\" && subscription.match!(next.fullDocument!))) {\n\t\t\t\t\tconst doc = projectDocument(next.fullDocument!, subscription.projection, subscription.isProjectionInclusive);\n\t\t\t\t\tthis.transform?.(doc as PartialWithId<D>, subscription.args);\n\t\t\t\t\tif (subscription.ids.has(_id))\n\t\t\t\t\t\treturn [ \"u\"/* update */, doc, \"updateDescription\" in next && next.updateDescription.updatedFields && Object.keys(next.updateDescription.updatedFields) ];\n\t\t\t\t\t\n\t\t\t\t\tsubscription.ids.add(_id);\n\t\t\t\t\t\n\t\t\t\t\treturn [ \"c\"/* create */, doc ];\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tsubscription.ids.delete(_id);\n\t\t\t\t\n\t\t\t\treturn [ \"d\"/* delete */, _id ];\n\t\t\t\t\n\t\t\t}\n\t\t\tconst cursor = this.collection.find(subscription.query);\n\t\t\t\n\t\t\tif (subscription.projection)\n\t\t\t\tcursor.project(subscription.projection);\n\t\t\t\n\t\t\tif (subscription.sort)\n\t\t\t\tcursor.sort(subscription.sort);\n\t\t\t\n\t\t\tconst array = await cursor.toArray() as unknown as PartialWithId<D>[];\n\t\t\t\n\t\t\tif (subscription.ids) {\n\t\t\t\tsubscription.ids.clear();\n\t\t\t\tif (this.transform)\n\t\t\t\t\tfor (const item of array) {\n\t\t\t\t\t\tsubscription.ids.add(item._id);\n\t\t\t\t\t\tthis.transform(item, subscription.args);\n\t\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tfor (const item of array)\n\t\t\t\t\t\tsubscription.ids.add(item._id);\n\t\t\t} else if (this.transform)\n\t\t\t\tfor (const item of array)\n\t\t\t\t\tthis.transform(item, subscription.args);\n\t\t\t\n\t\t\treturn [ \"i\"/* initial */, array, subscription.sort ];\n\t\t\t\n\t\t}\n\t\t\n\t\treturn null;\n\t}\n\t\n\tchanged(reason: ChangeStreamDocument<D> | null) {\n\t\treturn Promise.all([ ...this.subscriptions ].map(subscription => subscription.changed(reason)));\n\t}\n\t\n\tonSubscribe = (subscription: SubscriptionHandle<SA>) => {\n\t\tif (subscription instanceof CollectionMapSubscriptionHandle) {\n\t\t\tObject.assign(subscription, this.makeQueryProps(subscription.args));\n\t\t\t\n\t\t\tif (subscription.query) {\n\t\t\t\tsubscription.match = sift(subscription.query);\n\t\t\t\tthis.collection.changeListeners.add(subscription.collectionChangeListener);\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\tflushInitial() {\n\t\treturn Promise.all([ ...this.subscriptions ].map(async subscription => {\n\t\t\tconst fetched = await this.fetchSubscription(subscription, null);\n\t\t\tsubscription.handler!([ fetched ]);\n\t\t\tsubscription.updates = [];\n\t\t\t\n\t\t}));\n\t}\n\t\n\tonUnsubscribe = (subscription: SubscriptionHandle<SA>) => {\n\t\tif (subscription instanceof CollectionMapSubscriptionHandle && subscription.query)\n\t\t\tthis.collection.changeListeners.delete(subscription.collectionChangeListener);\n\t\t\n\t};\n\t\n}\n", "import type { SubscriptionHandle } from \"./SubscriptionHandle\";\nimport type { PublicationProps, SubscriptionArgs } from \"./types\";\n\n\ndeclare global {\n\tvar __insite_publications: Map<string, Publication>;// eslint-disable-line no-var\n}\n\nexport const publications =\n\tglobalThis.__insite_publications ??=\n\t\tnew Map();\n\nexport class Publication<SA extends SubscriptionArgs = SubscriptionArgs> {\n\tconstructor(name: string, props?: PublicationProps<SA>) {\n\t\tthis.name = name;\n\t\t\n\t\tif (props)\n\t\t\tObject.assign(this, props);\n\t\t\n\t\tpublications.set(name, this as Publication);\n\t\t\n\t}\n\t\n\treadonly name;\n\tonSubscribe?: PublicationProps<SA>[\"onSubscribe\"];\n\tonUnsubscribe?: PublicationProps<SA>[\"onUnsubscribe\"];\n\t\n\ttype = \"object\";\n\t\n\tsubscriptions = new Set<SubscriptionHandle<SA>>();\n\t\n\tfetch?(...args: SA): unknown;\n\t\n\tfetchSubscription(subscription: SubscriptionHandle<SA>, ..._: unknown[]) { // eslint-disable-line @typescript-eslint/no-unused-vars\n\t\treturn this.fetch?.(...subscription.args);\n\t}\n\t\n\tsubscribe(subscription: SubscriptionHandle<SA>) {\n\t\tthis.subscriptions.add(subscription);\n\t\tthis.onSubscribe?.(subscription);\n\t\t\n\t}\n\t\n\tchanged(reason: unknown) {\n\t\tfor (const subscription of this.subscriptions)\n\t\t\tsubscription.changed(reason);\n\t\t\n\t}\n\t\n\tunsubscribe(subscription: SubscriptionHandle<SA>) {\n\t\tthis.onUnsubscribe?.(subscription);\n\t\tthis.subscriptions.delete(subscription);\n\t\t\n\t}\n\t\n\t\n\tstatic publications = publications;\n\t\n}\n", "import { Publication, publications } from \"./Publication\";\nimport type { SubscriptionArgs, SubscriptionHandler } from \"./types\";\n\n\nexport class SubscriptionHandle<SA extends SubscriptionArgs> {\n\tconstructor(\n\t\tpublicationName: string,\n\t\targs: SA,\n\t\thandler: SubscriptionHandler,\n\t\timmediately?: boolean,\n\t\tprevent?: boolean\n\t) {\n\t\t\n\t\tconst publication = publications.get(publicationName);\n\t\t\n\t\tif (publication) {\n\t\t\tthis.publication = publication as Publication<SA>;\n\t\t\tthis.args = args;\n\t\t\tthis.handler = handler;\n\t\t\t\n\t\t\tif (!prevent) {\n\t\t\t\tthis.publication.subscribe(this);\n\t\t\t\t\n\t\t\t\tif (immediately)\n\t\t\t\t\tthis.changed(null);\n\t\t\t}\n\t\t\t\n\t\t} else if (process.env.NODE_ENV === \"development\")\n\t\t\tconsole.error(\"Unknown publication\", publicationName);\n\t\t\n\t}\n\t\n\tpublication!: Publication<SA>;\n\targs!: SA;\n\thandler!: SubscriptionHandler;\n\t\n\tasync changed(reason: unknown) {\n\t\tthis.handler(await this.publication.fetchSubscription(this, reason), reason);\n\t\t\n\t}\n\t\n\tcancel() {\n\t\t\n\t\tthis.publication?.unsubscribe(this);\n\t\t\n\t}\n\t\n\trenew() {\n\t\t\n\t\tthis.publication?.unsubscribe(this);\n\t\t\n\t\tthis.publication?.subscribe(this);\n\t\t\n\t\treturn this.changed(null);\n\t}\n\t\n}\n", "import {\n\tChangeStreamDocument,\n\tDocument,\n\tFilter,\n\tSort\n} from \"insite-db\";\nimport { skippedChangeStreamDocuments } from \"./CollectionMapPublication\";\nimport { SubscriptionHandle } from \"./SubscriptionHandle\";\nimport type { Projection, SubscriptionArgs } from \"./types\";\n\n\nexport class CollectionMapSubscriptionHandle<\n\tD extends Document = Document,\n\tSA extends SubscriptionArgs = SubscriptionArgs\n> extends SubscriptionHandle<SA> {\n\tconstructor(\n\t\tpublicationName: string,\n\t\targs: SA,\n\t\thandler: (fetched: unknown) => void,\n\t\timmediately?: boolean\n\t) {\n\t\tsuper(publicationName, args, handler, immediately, true);\n\t\t\n\t\tif (this.publication) {\n\t\t\tthis.publication.subscribe(this);\n\t\t\t\n\t\t\tif (immediately)\n\t\t\t\tthis.changed(null);\n\t\t}\n\t\t\n\t}\n\t\n\tids = new Set<string>();\n\t\n\tquery: Filter<D> | null = null;\n\tprojection: null | Projection = null;\n\tisProjectionInclusive = false;\n\tfields: null | Set<string> = null;\n\tsort: null | Sort = null;\n\t\n\tmatch?: (doc: D) => boolean;\n\t\n\tasync changed(next: ChangeStreamDocument<D> | null) {\n\t\tthis.handler([ await this.publication.fetchSubscription(this, next) ]);\n\t\t\n\t}\n\t\n\tupdates: unknown[] = [];\n\tprivate flushTimeout?: NodeJS.Timeout;\n\t\n\tflushUpdates = () => {\n\t\t\n\t\tif (this.updates.length) {\n\t\t\tthis.handler(this.updates);\n\t\t\tthis.updates = [];\n\t\t}\n\t\t\n\t};\n\t\n\tcollectionChangeListener = async (next: ChangeStreamDocument<D>) => {\n\t\t\n\t\tif (\n\t\t\t!skippedChangeStreamDocuments.has(next) &&\n\t\t\t\"documentKey\" in next &&\n\t\t\t(this.ids.has(next.documentKey._id as unknown as string) ? (\n\t\t\t\tnext.operationType !== \"update\" ||\n\t\t\t\t!this.fields ||\n\t\t\t\t(\n\t\t\t\t\tnext.updateDescription.updatedFields &&\n\t\t\t\t\tObject.keys(next.updateDescription.updatedFields).some(field => this.fields!.has(field))\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t\"fullDocument\" in next &&\n\t\t\t\tthis.match!(next.fullDocument!)\n\t\t\t))\n\t\t) {\n\t\t\tclearTimeout(this.flushTimeout);\n\t\t\t\n\t\t\tthis.updates.push(await this.publication.fetchSubscription(this, next));\n\t\t\t\n\t\t\tthis.flushTimeout = setTimeout(this.flushUpdates, 1);\n\t\t}\n\t\t\n\t};\n\t\n\t\n}\n"],
5
- "mappings": "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",
6
- "names": ["sift", "publications", "Publication", "name", "props", "subscription", "_", "reason", "SubscriptionHandle", "publicationName", "args", "handler", "immediately", "prevent", "publication", "publications", "reason", "CollectionMapSubscriptionHandle", "SubscriptionHandle", "publicationName", "args", "handler", "immediately", "next", "skippedChangeStreamDocuments", "field", "projectDocument", "document", "projection", "isInclusive", "isTop", "projected", "key", "subprojection", "item", "skippedChangeStreamDocuments", "CollectionMapPublication", "Publication", "collection", "name", "queryProps", "transform", "next", "args", "query", "sort", "triggers", "isProjectionInclusive", "fields", "subscription", "CollectionMapSubscriptionHandle", "_id", "doc", "cursor", "array", "reason", "sift", "fetched"]
4
+ "sourcesContent": ["import sift from \"sift\";\nimport type {\n\tChangeStreamDocument,\n\tDocument,\n\tFilter,\n\tInSiteWatchedCollection,\n\tSort\n} from \"insite-db\";\nimport { CollectionMapSubscriptionHandle } from \"./CollectionMapSubscriptionHandle\";\nimport { Publication } from \"./Publication\";\nimport { SubscriptionHandle } from \"./SubscriptionHandle\";\nimport type {\n\tPartialWithId,\n\tProjection,\n\tSubscriptionArgs,\n\tTransformableDoc\n} from \"./types\";\n\n\nfunction projectDocument<D extends Document>(document: D, projection: null, isInclusive?: boolean, isTop?: boolean): D;\nfunction projectDocument<D extends Document>(document: D, projection: Projection, isInclusive?: boolean, isTop?: boolean): Partial<D>;\nfunction projectDocument<D extends Document>(document: D, projection: null | Projection, isInclusive?: boolean, isTop?: boolean): D | Partial<D>;\nfunction projectDocument<D extends Document>(document: D, projection: null | Projection, isInclusive = true, isTop = true) {\n\tif (projection)\n\t\tif (isInclusive) {\n\t\t\tconst projected: Record<string, unknown> = {};\n\t\t\tfor (const key in projection) { // eslint-disable-line guard-for-in\n\t\t\t\tconst subprojection = projection[key];\n\t\t\t\tprojected[key] =\n\t\t\t\t\ttypeof subprojection == \"object\" ?\n\t\t\t\t\t\tArray.isArray(document[key]) ?\n\t\t\t\t\t\t\tdocument[key].map((item: Document) => projectDocument(item, subprojection, true, false)) :\n\t\t\t\t\t\t\tprojectDocument(document[key], subprojection, true, false) :\n\t\t\t\t\t\tdocument[key];\n\t\t\t}\n\t\t\tif (isTop && projection._id === 0)\n\t\t\t\tdelete projected._id;\n\t\t\t\n\t\t\treturn projected as Partial<D>;\n\t\t} else {\n\t\t\tconst projected = { ...document } as Record<string, unknown>;\n\t\t\tfor (const key in projection) { // eslint-disable-line guard-for-in\n\t\t\t\tconst subprojection = projection[key];\n\t\t\t\tif (typeof subprojection == \"object\")\n\t\t\t\t\tprojected[key] =\n\t\t\t\t\t\tArray.isArray(document[key]) ?\n\t\t\t\t\t\t\tdocument[key].map((item: Document) => projectDocument(item, subprojection, false, false)) :\n\t\t\t\t\t\t\tprojectDocument(document[key], subprojection, false, false);\n\t\t\t\telse\n\t\t\t\t\tdelete projected[key];\n\t\t\t}\n\t\t\t\n\t\t\treturn projected as Partial<D>;\n\t\t}\n\t\n\treturn document;\n}\n\nexport const skippedChangeStreamDocuments = new WeakSet<ChangeStreamDocument>();\n\ntype QueryProps<D extends Document> = {\n\tquery?: Filter<D>;\n\tprojection?: Projection;\n\tsort?: Sort;\n\ttriggers?: string[];\n};\n\n\nexport class CollectionMapPublication<\n\tD extends Document = Document,\n\tSA extends SubscriptionArgs = SubscriptionArgs\n> extends Publication<SA> {\n\tconstructor(\n\t\tcollection: InSiteWatchedCollection<D>,\n\t\tname: string,\n\t\tqueryProps?: ((...args: SA) => false | null | QueryProps<D> | void) | false | null | QueryProps<D>,\n\t\ttransform?: (doc: TransformableDoc<D>, args: SA) => void\n\t) {\n\t\tsuper(name);\n\t\t\n\t\tthis.collection = collection;\n\t\tthis.queryProps = queryProps;\n\t\tthis.transform = transform;\n\t\t\n\t}\n\t\n\ttype = \"map\";\n\t\n\tcollection;\n\tdeclare subscriptions: Set<CollectionMapSubscriptionHandle<D, SA>>;\n\tqueryProps;\n\ttransform;\n\t\n\tskip(next: ChangeStreamDocument<D>) {\n\t\tskippedChangeStreamDocuments.add(next);\n\t\t\n\t}\n\t\n\tmakeQueryProps(args: SA) {\n\t\tconst {\n\t\t\tquery = null,\n\t\t\tprojection = null,\n\t\t\tsort = null,\n\t\t\ttriggers\n\t\t} = (typeof this.queryProps == \"function\" ? this.queryProps(...args) : this.queryProps) || {};\n\t\t\n\t\tlet isProjectionInclusive = false;\n\t\tlet fields = null;\n\t\tif (projection) {\n\t\t\t// eslint-disable-next-line guard-for-in\n\t\t\tfor (const key in projection) {\n\t\t\t\tisProjectionInclusive = !!projection[key];\n\t\t\t\tif (key !== \"_id\")\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (isProjectionInclusive) {\n\t\t\t\tfields = new Set([ ...Object.keys(query ?? {}), ...Object.keys(projection), ...triggers ?? [] ]);\n\t\t\t\tfields.delete(\"_id\");\n\t\t\t\tif (projection._id !== 0)\n\t\t\t\t\tprojection._id = 1;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn { query, projection, isProjectionInclusive, fields, sort, args };\n\t}\n\t\n\tasync fetchSubscription(subscription: SubscriptionHandle<SA>, next: ChangeStreamDocument<D> | null) {\n\t\tif (subscription instanceof CollectionMapSubscriptionHandle && subscription.query) {\n\t\t\tif (next && \"documentKey\" in next) {\n\t\t\t\tconst _id = next.documentKey._id as unknown as string;\n\t\t\t\t\n\t\t\t\tif (next.operationType === \"insert\" || (next.operationType !== \"delete\" && subscription.match!(next.fullDocument!))) {\n\t\t\t\t\tconst doc = projectDocument(next.fullDocument!, subscription.projection, subscription.isProjectionInclusive);\n\t\t\t\t\tthis.transform?.(doc as TransformableDoc<D>, subscription.args);\n\t\t\t\t\tif (subscription.ids.has(_id))\n\t\t\t\t\t\treturn [ \"u\"/* update */, doc, \"updateDescription\" in next && next.updateDescription.updatedFields && Object.keys(next.updateDescription.updatedFields) ];\n\t\t\t\t\t\n\t\t\t\t\tsubscription.ids.add(_id);\n\t\t\t\t\t\n\t\t\t\t\treturn [ \"c\"/* create */, doc ];\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tsubscription.ids.delete(_id);\n\t\t\t\t\n\t\t\t\treturn [ \"d\"/* delete */, _id ];\n\t\t\t\t\n\t\t\t}\n\t\t\tconst cursor = this.collection.find(subscription.query);\n\t\t\t\n\t\t\tif (subscription.projection)\n\t\t\t\tcursor.project(subscription.projection);\n\t\t\t\n\t\t\tif (subscription.sort)\n\t\t\t\tcursor.sort(subscription.sort);\n\t\t\t\n\t\t\tconst array = await cursor.toArray() as unknown as PartialWithId<D>[];\n\t\t\t\n\t\t\tif (subscription.ids) {\n\t\t\t\tsubscription.ids.clear();\n\t\t\t\tif (this.transform)\n\t\t\t\t\tfor (const item of array) {\n\t\t\t\t\t\tsubscription.ids.add(item._id);\n\t\t\t\t\t\tthis.transform(item, subscription.args);\n\t\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tfor (const item of array)\n\t\t\t\t\t\tsubscription.ids.add(item._id);\n\t\t\t} else if (this.transform)\n\t\t\t\tfor (const item of array)\n\t\t\t\t\tthis.transform(item, subscription.args);\n\t\t\t\n\t\t\treturn [ \"i\"/* initial */, array, subscription.sort ];\n\t\t\t\n\t\t}\n\t\t\n\t\treturn null;\n\t}\n\t\n\tchanged(reason: ChangeStreamDocument<D> | null) {\n\t\treturn Promise.all([ ...this.subscriptions ].map(subscription => subscription.changed(reason)));\n\t}\n\t\n\tonSubscribe = (subscription: SubscriptionHandle<SA>) => {\n\t\tif (subscription instanceof CollectionMapSubscriptionHandle) {\n\t\t\tObject.assign(subscription, this.makeQueryProps(subscription.args));\n\t\t\t\n\t\t\tif (subscription.query) {\n\t\t\t\tsubscription.match = sift(subscription.query);\n\t\t\t\tthis.collection.changeListeners.add(subscription.collectionChangeListener);\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\tflushInitial() {\n\t\treturn Promise.all([ ...this.subscriptions ].map(async subscription => {\n\t\t\tconst fetched = await this.fetchSubscription(subscription, null);\n\t\t\tsubscription.handler!([ fetched ]);\n\t\t\tsubscription.updates = [];\n\t\t\t\n\t\t}));\n\t}\n\t\n\tonUnsubscribe = (subscription: SubscriptionHandle<SA>) => {\n\t\tif (subscription instanceof CollectionMapSubscriptionHandle && subscription.query)\n\t\t\tthis.collection.changeListeners.delete(subscription.collectionChangeListener);\n\t\t\n\t};\n\t\n}\n", "import type { SubscriptionHandle } from \"./SubscriptionHandle\";\nimport type { PublicationProps, SubscriptionArgs } from \"./types\";\n\n\ndeclare global {\n\tvar __insite_publications: Map<string, Publication>;// eslint-disable-line no-var\n}\n\nexport const publications =\n\tglobalThis.__insite_publications ??=\n\t\tnew Map();\n\nexport class Publication<SA extends SubscriptionArgs = SubscriptionArgs> {\n\tconstructor(name: string, props?: PublicationProps<SA>) {\n\t\tthis.name = name;\n\t\t\n\t\tif (props)\n\t\t\tObject.assign(this, props);\n\t\t\n\t\tpublications.set(name, this as Publication);\n\t\t\n\t}\n\t\n\treadonly name;\n\tonSubscribe?: PublicationProps<SA>[\"onSubscribe\"];\n\tonUnsubscribe?: PublicationProps<SA>[\"onUnsubscribe\"];\n\t\n\ttype = \"object\";\n\t\n\tsubscriptions = new Set<SubscriptionHandle<SA>>();\n\t\n\tfetch?(...args: SA): unknown;\n\t\n\tfetchSubscription(subscription: SubscriptionHandle<SA>, ..._: unknown[]) { // eslint-disable-line @typescript-eslint/no-unused-vars\n\t\treturn this.fetch?.(...subscription.args);\n\t}\n\t\n\tsubscribe(subscription: SubscriptionHandle<SA>) {\n\t\tthis.subscriptions.add(subscription);\n\t\tthis.onSubscribe?.(subscription);\n\t\t\n\t}\n\t\n\tchanged(reason: unknown) {\n\t\tfor (const subscription of this.subscriptions)\n\t\t\tsubscription.changed(reason);\n\t\t\n\t}\n\t\n\tunsubscribe(subscription: SubscriptionHandle<SA>) {\n\t\tthis.onUnsubscribe?.(subscription);\n\t\tthis.subscriptions.delete(subscription);\n\t\t\n\t}\n\t\n\t\n\tstatic publications = publications;\n\t\n}\n", "import { Publication, publications } from \"./Publication\";\nimport type { SubscriptionArgs, SubscriptionHandler } from \"./types\";\n\n\nexport class SubscriptionHandle<SA extends SubscriptionArgs> {\n\tconstructor(\n\t\tpublicationName: string,\n\t\targs: SA,\n\t\thandler: SubscriptionHandler,\n\t\timmediately?: boolean,\n\t\tprevent?: boolean\n\t) {\n\t\t\n\t\tconst publication = publications.get(publicationName);\n\t\t\n\t\tif (publication) {\n\t\t\tthis.publication = publication as Publication<SA>;\n\t\t\tthis.args = args;\n\t\t\tthis.handler = handler;\n\t\t\t\n\t\t\tif (!prevent) {\n\t\t\t\tthis.publication.subscribe(this);\n\t\t\t\t\n\t\t\t\tif (immediately)\n\t\t\t\t\tthis.changed(null);\n\t\t\t}\n\t\t\t\n\t\t} else if (process.env.NODE_ENV === \"development\")\n\t\t\tconsole.error(\"Unknown publication\", publicationName);\n\t\t\n\t}\n\t\n\tpublication!: Publication<SA>;\n\targs!: SA;\n\thandler!: SubscriptionHandler;\n\t\n\tasync changed(reason: unknown) {\n\t\tthis.handler(await this.publication.fetchSubscription(this, reason), reason);\n\t\t\n\t}\n\t\n\tcancel() {\n\t\t\n\t\tthis.publication?.unsubscribe(this);\n\t\t\n\t}\n\t\n\trenew() {\n\t\t\n\t\tthis.publication?.unsubscribe(this);\n\t\t\n\t\tthis.publication?.subscribe(this);\n\t\t\n\t\treturn this.changed(null);\n\t}\n\t\n}\n", "import {\n\tChangeStreamDocument,\n\tDocument,\n\tFilter,\n\tSort\n} from \"insite-db\";\nimport { skippedChangeStreamDocuments } from \"./CollectionMapPublication\";\nimport { SubscriptionHandle } from \"./SubscriptionHandle\";\nimport type { Projection, SubscriptionArgs } from \"./types\";\n\n\nexport class CollectionMapSubscriptionHandle<\n\tD extends Document = Document,\n\tSA extends SubscriptionArgs = SubscriptionArgs\n> extends SubscriptionHandle<SA> {\n\tconstructor(\n\t\tpublicationName: string,\n\t\targs: SA,\n\t\thandler: (fetched: unknown) => void,\n\t\timmediately?: boolean\n\t) {\n\t\tsuper(publicationName, args, handler, immediately, true);\n\t\t\n\t\tif (this.publication) {\n\t\t\tthis.publication.subscribe(this);\n\t\t\t\n\t\t\tif (immediately)\n\t\t\t\tthis.changed(null);\n\t\t}\n\t\t\n\t}\n\t\n\tids = new Set<string>();\n\t\n\tquery: Filter<D> | null = null;\n\tprojection: null | Projection = null;\n\tisProjectionInclusive = false;\n\tfields: null | Set<string> = null;\n\tsort: null | Sort = null;\n\t\n\tmatch?: (doc: D) => boolean;\n\t\n\tasync changed(next: ChangeStreamDocument<D> | null) {\n\t\tthis.handler([ await this.publication.fetchSubscription(this, next) ]);\n\t\t\n\t}\n\t\n\tupdates: unknown[] = [];\n\t#flushTimeout?: NodeJS.Timeout;\n\t\n\tflushUpdates = () => {\n\t\t\n\t\tif (this.updates.length) {\n\t\t\tthis.handler(this.updates);\n\t\t\tthis.updates = [];\n\t\t}\n\t\t\n\t};\n\t\n\tcollectionChangeListener = async (next: ChangeStreamDocument<D>) => {\n\t\t\n\t\tif (\n\t\t\t!skippedChangeStreamDocuments.has(next) &&\n\t\t\t\"documentKey\" in next &&\n\t\t\t(this.ids.has(next.documentKey._id as unknown as string) ? (\n\t\t\t\tnext.operationType !== \"update\" ||\n\t\t\t\t!this.fields ||\n\t\t\t\t(\n\t\t\t\t\tnext.updateDescription.updatedFields &&\n\t\t\t\t\tObject.keys(next.updateDescription.updatedFields).some(field => this.fields!.has(field))\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t\"fullDocument\" in next &&\n\t\t\t\tthis.match!(next.fullDocument!)\n\t\t\t))\n\t\t) {\n\t\t\tclearTimeout(this.#flushTimeout);\n\t\t\t\n\t\t\tthis.updates.push(await this.publication.fetchSubscription(this, next));\n\t\t\t\n\t\t\tthis.#flushTimeout = setTimeout(this.flushUpdates, 1);\n\t\t}\n\t\t\n\t};\n\t\n\t\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["sift", "publications", "Publication", "name", "props", "subscription", "_", "reason", "SubscriptionHandle", "publicationName", "args", "handler", "immediately", "prevent", "publication", "publications", "reason", "CollectionMapSubscriptionHandle", "SubscriptionHandle", "publicationName", "args", "handler", "immediately", "next", "#flushTimeout", "skippedChangeStreamDocuments", "field", "projectDocument", "document", "projection", "isInclusive", "isTop", "projected", "key", "subprojection", "item", "skippedChangeStreamDocuments", "CollectionMapPublication", "Publication", "collection", "name", "queryProps", "transform", "next", "args", "query", "sort", "triggers", "isProjectionInclusive", "fields", "subscription", "CollectionMapSubscriptionHandle", "_id", "doc", "cursor", "array", "reason", "sift", "fetched"]
7
7
  }
package/dist/types.d.ts CHANGED
@@ -3,6 +3,9 @@ import type { SubscriptionHandle } from "./SubscriptionHandle";
3
3
  export type PartialWithId<D extends Document> = {
4
4
  _id: string;
5
5
  } & Partial<D>;
6
+ export type TransformableDoc<D extends Document> = {
7
+ [key: string]: any;
8
+ } & PartialWithId<D>;
6
9
  export type PublicationProps<SA extends SubscriptionArgs> = {
7
10
  type?: "object";
8
11
  fetch?: (...args: SA) => unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,QAAQ,IAAI;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7E,MAAM,MAAM,gBAAgB,CAAC,EAAE,SAAS,gBAAgB,IAAI;IAC3D,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,KAAK,OAAO,CAAC;IACjC,iBAAiB,CAAC,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;IACtE,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7D,aAAa,CAAC,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,OAAO,EAAE,CAAC;AAEzC,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAE/E,MAAM,MAAM,UAAU,GAAG;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;CAC7C,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAM/D,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,QAAQ,IAAI;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7E,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,QAAQ,IAAI;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AAE7F,MAAM,MAAM,gBAAgB,CAAC,EAAE,SAAS,gBAAgB,IAAI;IAC3D,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,KAAK,OAAO,CAAC;IACjC,iBAAiB,CAAC,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;IACtE,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7D,aAAa,CAAC,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,OAAO,EAAE,CAAC;AAEzC,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAE/E,MAAM,MAAM,UAAU,GAAG;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;CAC7C,CAAC"}
@@ -2,13 +2,8 @@ import type { InSiteWebSocketServer } from "insite-ws/server";
2
2
  import type { AbilitiesSchema } from "insite-common";
3
3
  import type { WSSCWithUser } from "insite-users-server-ws";
4
4
  export declare class SubscriptionHandler<AS extends AbilitiesSchema> {
5
+ #private;
5
6
  constructor(wss: InSiteWebSocketServer, withCollections?: boolean);
6
- private wsSubscriptionMap;
7
7
  renewSubscriptionsFor: (webSockets: WSSCWithUser<AS>[]) => void;
8
- private handleClientConnect;
9
- private handleClientSession;
10
- private handleClientSubscribe;
11
- private handleClientUnsubscribe;
12
- private handleClientClose;
13
8
  }
14
9
  //# sourceMappingURL=SubscriptionHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SubscriptionHandler.d.ts","sourceRoot":"","sources":["../../src/ws/SubscriptionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAkC3D,qBAAa,mBAAmB,CAAC,EAAE,SAAS,eAAe;gBAC9C,GAAG,EAAE,qBAAqB,EAAE,eAAe,CAAC,EAAE,OAAO;IAwBjE,OAAO,CAAC,iBAAiB,CAAsD;IAE/E,qBAAqB,eAAgB,YAAY,CAAC,EAAE,CAAC,EAAE,UAIrD;IAEF,OAAO,CAAC,mBAAmB,CAC4B;IAEvD,OAAO,CAAC,mBAAmB,CACgB;IAE3C,OAAO,CAAC,qBAAqB,CA8B3B;IAEF,OAAO,CAAC,uBAAuB,CACc;IAE7C,OAAO,CAAC,iBAAiB,CAIvB;CAEF"}
1
+ {"version":3,"file":"SubscriptionHandler.d.ts","sourceRoot":"","sources":["../../src/ws/SubscriptionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAkC3D,qBAAa,mBAAmB,CAAC,EAAE,SAAS,eAAe;;gBAC9C,GAAG,EAAE,qBAAqB,EAAE,eAAe,CAAC,EAAE,OAAO;IA0BjE,qBAAqB,eAAgB,YAAY,CAAC,EAAE,CAAC,EAAE,UAIrD;CAiDF"}
package/dist/ws/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import C from"sift";var l=globalThis.__insite_publications??=new Map,u=class{constructor(e,t){this.name=e,t&&Object.assign(this,t),l.set(e,this)}name;onSubscribe;onUnsubscribe;type="object";subscriptions=new Set;fetchSubscription(e,...t){return this.fetch?.(...e.args)}subscribe(e){this.subscriptions.add(e),this.onSubscribe?.(e)}changed(e){for(let t of this.subscriptions)t.changed(e)}unsubscribe(e){this.onUnsubscribe?.(e),this.subscriptions.delete(e)}static publications=l};var p=class{constructor(e,t,n,s,i){let r=l.get(e);r?(this.publication=r,this.args=t,this.handler=n,i||(this.publication.subscribe(this),s&&this.changed(null))):process.env.NODE_ENV==="development"&&console.error("Unknown publication",e)}publication;args;handler;async changed(e){this.handler(await this.publication.fetchSubscription(this,e),e)}cancel(){this.publication?.unsubscribe(this)}renew(){return this.publication?.unsubscribe(this),this.publication?.subscribe(this),this.changed(null)}};var a=class extends p{constructor(e,t,n,s){super(e,t,n,s,!0),this.publication&&(this.publication.subscribe(this),s&&this.changed(null))}ids=new Set;query=null;projection=null;isProjectionInclusive=!1;fields=null;sort=null;match;async changed(e){this.handler([await this.publication.fetchSubscription(this,e)])}updates=[];flushTimeout;flushUpdates=()=>{this.updates.length&&(this.handler(this.updates),this.updates=[])};collectionChangeListener=async e=>{!g.has(e)&&"documentKey"in e&&(this.ids.has(e.documentKey._id)?e.operationType!=="update"||!this.fields||e.updateDescription.updatedFields&&Object.keys(e.updateDescription.updatedFields).some(t=>this.fields.has(t)):"fullDocument"in e&&this.match(e.fullDocument))&&(clearTimeout(this.flushTimeout),this.updates.push(await this.publication.fetchSubscription(this,e)),this.flushTimeout=setTimeout(this.flushUpdates,1))}};function m(o,e,t=!0,n=!0){if(e)if(t){let s={};for(let i in e){let r=e[i];s[i]=typeof r=="object"?Array.isArray(o[i])?o[i].map(c=>m(c,r,!0,!1)):m(o[i],r,!0,!1):o[i]}return n&&e._id===0&&delete s._id,s}else{let s={...o};for(let i in e){let r=e[i];typeof r=="object"?s[i]=Array.isArray(o[i])?o[i].map(c=>m(c,r,!1,!1)):m(o[i],r,!1,!1):delete s[i]}return s}return o}var g=new WeakSet,b=class extends u{constructor(e,t,n,s){super(t),this.collection=e,this.queryProps=n,this.transform=s}type="map";collection;queryProps;transform;skip(e){g.add(e)}makeQueryProps(e){let{query:t=null,projection:n=null,sort:s=null,triggers:i}=(typeof this.queryProps=="function"?this.queryProps(...e):this.queryProps)||{},r=!1,c=null;if(n){for(let S in n)if(r=!!n[S],S!=="_id")break;r&&(c=new Set([...Object.keys(t??{}),...Object.keys(n),...i??[]]),c.delete("_id"),n._id!==0&&(n._id=1))}return{query:t,projection:n,isProjectionInclusive:r,fields:c,sort:s,args:e}}async fetchSubscription(e,t){if(e instanceof a&&e.query){if(t&&"documentKey"in t){let i=t.documentKey._id;if(t.operationType==="insert"||t.operationType!=="delete"&&e.match(t.fullDocument)){let r=m(t.fullDocument,e.projection,e.isProjectionInclusive);return this.transform?.(r,e.args),e.ids.has(i)?["u",r,"updateDescription"in t&&t.updateDescription.updatedFields&&Object.keys(t.updateDescription.updatedFields)]:(e.ids.add(i),["c",r])}return e.ids.delete(i),["d",i]}let n=this.collection.find(e.query);e.projection&&n.project(e.projection),e.sort&&n.sort(e.sort);let s=await n.toArray();if(e.ids)if(e.ids.clear(),this.transform)for(let i of s)e.ids.add(i._id),this.transform(i,e.args);else for(let i of s)e.ids.add(i._id);else if(this.transform)for(let i of s)this.transform(i,e.args);return["i",s,e.sort]}return null}changed(e){return Promise.all([...this.subscriptions].map(t=>t.changed(e)))}onSubscribe=e=>{e instanceof a&&(Object.assign(e,this.makeQueryProps(e.args)),e.query&&(e.match=C(e.query),this.collection.changeListeners.add(e.collectionChangeListener)))};flushInitial(){return Promise.all([...this.subscriptions].map(async e=>{let t=await this.fetchSubscription(e,null);e.handler([t]),e.updates=[]}))}onUnsubscribe=e=>{e instanceof a&&e.query&&this.collection.changeListeners.delete(e.collectionChangeListener)}};var h=class extends b{constructor(e,...t){super(e,...t)}};var f=class extends a{constructor(...e){super(...e)}};var d=class extends u{constructor(...e){super(...e)}};var A=class extends p{constructor(...e){super(...e)}};import{Collection as x}from"insite-db";var y=class extends Map{subscribe=this.set;renew(){return Promise.all([...this.values()].map(e=>e.renew()))}cancel(e){this.get(e)?.cancel(),this.delete(e)}};var W=["object","map"];function w(o){return o.type==="map"}function j(o){return o[0]instanceof x}var D=class{constructor(e,t){e.on("client-connect",this.handleClientConnect),e.on("client-session",this.handleClientSession),e.on("client-message:s-s",this.handleClientSubscribe),e.on("client-message:s-u",this.handleClientUnsubscribe),e.on("client-close",this.handleClientClose),e.on("should-renew-subscriptions",this.renewSubscriptionsFor),Object.assign(e,t?{publish(...n){return j(n)?new h(...n):new d(...n)}}:{publish(...n){return new d(...n)}})}wsSubscriptionMap=new WeakMap;renewSubscriptionsFor=e=>{for(let t of e)this.wsSubscriptionMap.get(t)?.renew()};handleClientConnect=e=>this.wsSubscriptionMap.set(e,new y);handleClientSession=e=>this.wsSubscriptionMap.get(e)?.renew();handleClientSubscribe=(e,t,n,s,i,r)=>{if(W.includes(t)){let c=l.get(n);if(c?.type===t){let S=[n,[e,...i],P=>e.sendMessage("s-c",s,P),r];this.wsSubscriptionMap.get(e)?.subscribe(s,w(c)?new f(...S):new A(...S))}}};handleClientUnsubscribe=(e,t)=>this.wsSubscriptionMap.get(e)?.cancel(t);handleClientClose=e=>{for(let t of this.wsSubscriptionMap.get(e)?.values()??[])t.cancel()}};export{h as CollectionMapPublication,f as CollectionMapSubscriptionHandle,d as Publication,A as SubscriptionHandle,D as SubscriptionHandler};
1
+ import C from"sift";var l=globalThis.__insite_publications??=new Map,u=class{constructor(e,t){this.name=e,t&&Object.assign(this,t),l.set(e,this)}name;onSubscribe;onUnsubscribe;type="object";subscriptions=new Set;fetchSubscription(e,...t){return this.fetch?.(...e.args)}subscribe(e){this.subscriptions.add(e),this.onSubscribe?.(e)}changed(e){for(let t of this.subscriptions)t.changed(e)}unsubscribe(e){this.onUnsubscribe?.(e),this.subscriptions.delete(e)}static publications=l};var p=class{constructor(e,t,n,o,i){let r=l.get(e);r?(this.publication=r,this.args=t,this.handler=n,i||(this.publication.subscribe(this),o&&this.changed(null))):process.env.NODE_ENV==="development"&&console.error("Unknown publication",e)}publication;args;handler;async changed(e){this.handler(await this.publication.fetchSubscription(this,e),e)}cancel(){this.publication?.unsubscribe(this)}renew(){return this.publication?.unsubscribe(this),this.publication?.subscribe(this),this.changed(null)}};var a=class extends p{constructor(e,t,n,o){super(e,t,n,o,!0),this.publication&&(this.publication.subscribe(this),o&&this.changed(null))}ids=new Set;query=null;projection=null;isProjectionInclusive=!1;fields=null;sort=null;match;async changed(e){this.handler([await this.publication.fetchSubscription(this,e)])}updates=[];#e;flushUpdates=()=>{this.updates.length&&(this.handler(this.updates),this.updates=[])};collectionChangeListener=async e=>{!g.has(e)&&"documentKey"in e&&(this.ids.has(e.documentKey._id)?e.operationType!=="update"||!this.fields||e.updateDescription.updatedFields&&Object.keys(e.updateDescription.updatedFields).some(t=>this.fields.has(t)):"fullDocument"in e&&this.match(e.fullDocument))&&(clearTimeout(this.#e),this.updates.push(await this.publication.fetchSubscription(this,e)),this.#e=setTimeout(this.flushUpdates,1))}};function S(s,e,t=!0,n=!0){if(e)if(t){let o={};for(let i in e){let r=e[i];o[i]=typeof r=="object"?Array.isArray(s[i])?s[i].map(c=>S(c,r,!0,!1)):S(s[i],r,!0,!1):s[i]}return n&&e._id===0&&delete o._id,o}else{let o={...s};for(let i in e){let r=e[i];typeof r=="object"?o[i]=Array.isArray(s[i])?s[i].map(c=>S(c,r,!1,!1)):S(s[i],r,!1,!1):delete o[i]}return o}return s}var g=new WeakSet,b=class extends u{constructor(e,t,n,o){super(t),this.collection=e,this.queryProps=n,this.transform=o}type="map";collection;queryProps;transform;skip(e){g.add(e)}makeQueryProps(e){let{query:t=null,projection:n=null,sort:o=null,triggers:i}=(typeof this.queryProps=="function"?this.queryProps(...e):this.queryProps)||{},r=!1,c=null;if(n){for(let m in n)if(r=!!n[m],m!=="_id")break;r&&(c=new Set([...Object.keys(t??{}),...Object.keys(n),...i??[]]),c.delete("_id"),n._id!==0&&(n._id=1))}return{query:t,projection:n,isProjectionInclusive:r,fields:c,sort:o,args:e}}async fetchSubscription(e,t){if(e instanceof a&&e.query){if(t&&"documentKey"in t){let i=t.documentKey._id;if(t.operationType==="insert"||t.operationType!=="delete"&&e.match(t.fullDocument)){let r=S(t.fullDocument,e.projection,e.isProjectionInclusive);return this.transform?.(r,e.args),e.ids.has(i)?["u",r,"updateDescription"in t&&t.updateDescription.updatedFields&&Object.keys(t.updateDescription.updatedFields)]:(e.ids.add(i),["c",r])}return e.ids.delete(i),["d",i]}let n=this.collection.find(e.query);e.projection&&n.project(e.projection),e.sort&&n.sort(e.sort);let o=await n.toArray();if(e.ids)if(e.ids.clear(),this.transform)for(let i of o)e.ids.add(i._id),this.transform(i,e.args);else for(let i of o)e.ids.add(i._id);else if(this.transform)for(let i of o)this.transform(i,e.args);return["i",o,e.sort]}return null}changed(e){return Promise.all([...this.subscriptions].map(t=>t.changed(e)))}onSubscribe=e=>{e instanceof a&&(Object.assign(e,this.makeQueryProps(e.args)),e.query&&(e.match=C(e.query),this.collection.changeListeners.add(e.collectionChangeListener)))};flushInitial(){return Promise.all([...this.subscriptions].map(async e=>{let t=await this.fetchSubscription(e,null);e.handler([t]),e.updates=[]}))}onUnsubscribe=e=>{e instanceof a&&e.query&&this.collection.changeListeners.delete(e.collectionChangeListener)}};var h=class extends b{constructor(e,...t){super(e,...t)}};var f=class extends a{constructor(...e){super(...e)}};var d=class extends u{constructor(...e){super(...e)}};var A=class extends p{constructor(...e){super(...e)}};import{Collection as x}from"insite-db";var y=class extends Map{subscribe=this.set;renew(){return Promise.all([...this.values()].map(e=>e.renew()))}cancel(e){this.get(e)?.cancel(),this.delete(e)}};var W=["object","map"];function w(s){return s.type==="map"}function j(s){return s[0]instanceof x}var D=class{constructor(e,t){e.on("client-connect",this.#t),e.on("client-session",this.#i),e.on("client-message:s-s",this.#n),e.on("client-message:s-u",this.#o),e.on("client-close",this.#s),e.on("should-renew-subscriptions",this.renewSubscriptionsFor),Object.assign(e,t?{publish(...n){return j(n)?new h(...n):new d(...n)}}:{publish(...n){return new d(...n)}})}#e=new WeakMap;renewSubscriptionsFor=e=>{for(let t of e)this.#e.get(t)?.renew()};#t=e=>this.#e.set(e,new y);#i=e=>this.#e.get(e)?.renew();#n=(e,t,n,o,i,r)=>{if(W.includes(t)){let c=l.get(n);if(c?.type===t){let m=[n,[e,...i],P=>e.sendMessage("s-c",o,P),r];this.#e.get(e)?.subscribe(o,w(c)?new f(...m):new A(...m))}}};#o=(e,t)=>this.#e.get(e)?.cancel(t);#s=e=>{for(let t of this.#e.get(e)?.values()??[])t.cancel()}};export{h as CollectionMapPublication,f as CollectionMapSubscriptionHandle,d as Publication,A as SubscriptionHandle,D as SubscriptionHandler};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/CollectionMapPublication.ts", "../../src/Publication.ts", "../../src/SubscriptionHandle.ts", "../../src/CollectionMapSubscriptionHandle.ts", "../../src/ws/CollectionMapPublication.ts", "../../src/ws/CollectionMapSubscriptionHandle.ts", "../../src/ws/Publication.ts", "../../src/ws/SubscriptionHandle.ts", "../../src/ws/SubscriptionHandler.ts", "../../src/ws/Subscriptions.ts"],
4
- "sourcesContent": ["import sift from \"sift\";\nimport type {\n\tChangeStreamDocument,\n\tDocument,\n\tFilter,\n\tInSiteWatchedCollection,\n\tSort\n} from \"insite-db\";\nimport { CollectionMapSubscriptionHandle } from \"./CollectionMapSubscriptionHandle\";\nimport { Publication } from \"./Publication\";\nimport { SubscriptionHandle } from \"./SubscriptionHandle\";\nimport type { PartialWithId, Projection, SubscriptionArgs } from \"./types\";\n\n\nfunction projectDocument<D extends Document>(document: D, projection: null, isInclusive?: boolean, isTop?: boolean): D;\nfunction projectDocument<D extends Document>(document: D, projection: Projection, isInclusive?: boolean, isTop?: boolean): Partial<D>;\nfunction projectDocument<D extends Document>(document: D, projection: null | Projection, isInclusive?: boolean, isTop?: boolean): D | Partial<D>;\nfunction projectDocument<D extends Document>(document: D, projection: null | Projection, isInclusive = true, isTop = true) {\n\tif (projection)\n\t\tif (isInclusive) {\n\t\t\tconst projected: Record<string, unknown> = {};\n\t\t\tfor (const key in projection) { // eslint-disable-line guard-for-in\n\t\t\t\tconst subprojection = projection[key];\n\t\t\t\tprojected[key] =\n\t\t\t\t\ttypeof subprojection == \"object\" ?\n\t\t\t\t\t\tArray.isArray(document[key]) ?\n\t\t\t\t\t\t\tdocument[key].map((item: Document) => projectDocument(item, subprojection, true, false)) :\n\t\t\t\t\t\t\tprojectDocument(document[key], subprojection, true, false) :\n\t\t\t\t\t\tdocument[key];\n\t\t\t}\n\t\t\tif (isTop && projection._id === 0)\n\t\t\t\tdelete projected._id;\n\t\t\t\n\t\t\treturn projected as Partial<D>;\n\t\t} else {\n\t\t\tconst projected = { ...document } as Record<string, unknown>;\n\t\t\tfor (const key in projection) { // eslint-disable-line guard-for-in\n\t\t\t\tconst subprojection = projection[key];\n\t\t\t\tif (typeof subprojection == \"object\")\n\t\t\t\t\tprojected[key] =\n\t\t\t\t\t\tArray.isArray(document[key]) ?\n\t\t\t\t\t\t\tdocument[key].map((item: Document) => projectDocument(item, subprojection, false, false)) :\n\t\t\t\t\t\t\tprojectDocument(document[key], subprojection, false, false);\n\t\t\t\telse\n\t\t\t\t\tdelete projected[key];\n\t\t\t}\n\t\t\t\n\t\t\treturn projected as Partial<D>;\n\t\t}\n\t\n\treturn document;\n}\n\nexport const skippedChangeStreamDocuments = new WeakSet<ChangeStreamDocument>();\n\ntype QueryProps<D extends Document> = {\n\tquery?: Filter<D>;\n\tprojection?: Projection;\n\tsort?: Sort;\n\ttriggers?: string[];\n};\n\n\nexport class CollectionMapPublication<\n\tD extends Document = Document,\n\tSA extends SubscriptionArgs = SubscriptionArgs\n> extends Publication<SA> {\n\tconstructor(\n\t\tcollection: InSiteWatchedCollection<D>,\n\t\tname: string,\n\t\tqueryProps?: ((...args: SA) => false | null | QueryProps<D> | void) | false | null | QueryProps<D>,\n\t\ttransform?: (doc: PartialWithId<D>, args: SA) => void\n\t) {\n\t\tsuper(name);\n\t\t\n\t\tthis.collection = collection;\n\t\tthis.queryProps = queryProps;\n\t\tthis.transform = transform;\n\t\t\n\t}\n\t\n\ttype = \"map\";\n\t\n\tcollection;\n\tdeclare subscriptions: Set<CollectionMapSubscriptionHandle<D, SA>>;\n\tqueryProps;\n\ttransform;\n\t\n\tskip(next: ChangeStreamDocument<D>) {\n\t\tskippedChangeStreamDocuments.add(next);\n\t\t\n\t}\n\t\n\tmakeQueryProps(args: SA) {\n\t\tconst {\n\t\t\tquery = null,\n\t\t\tprojection = null,\n\t\t\tsort = null,\n\t\t\ttriggers\n\t\t} = (typeof this.queryProps == \"function\" ? this.queryProps(...args) : this.queryProps) || {};\n\t\t\n\t\tlet isProjectionInclusive = false;\n\t\tlet fields = null;\n\t\tif (projection) {\n\t\t\t// eslint-disable-next-line guard-for-in\n\t\t\tfor (const key in projection) {\n\t\t\t\tisProjectionInclusive = !!projection[key];\n\t\t\t\tif (key !== \"_id\")\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (isProjectionInclusive) {\n\t\t\t\tfields = new Set([ ...Object.keys(query ?? {}), ...Object.keys(projection), ...triggers ?? [] ]);\n\t\t\t\tfields.delete(\"_id\");\n\t\t\t\tif (projection._id !== 0)\n\t\t\t\t\tprojection._id = 1;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn { query, projection, isProjectionInclusive, fields, sort, args };\n\t}\n\t\n\tasync fetchSubscription(subscription: SubscriptionHandle<SA>, next: ChangeStreamDocument<D> | null) {\n\t\tif (subscription instanceof CollectionMapSubscriptionHandle && subscription.query) {\n\t\t\tif (next && \"documentKey\" in next) {\n\t\t\t\tconst _id = next.documentKey._id as unknown as string;\n\t\t\t\t\n\t\t\t\tif (next.operationType === \"insert\" || (next.operationType !== \"delete\" && subscription.match!(next.fullDocument!))) {\n\t\t\t\t\tconst doc = projectDocument(next.fullDocument!, subscription.projection, subscription.isProjectionInclusive);\n\t\t\t\t\tthis.transform?.(doc as PartialWithId<D>, subscription.args);\n\t\t\t\t\tif (subscription.ids.has(_id))\n\t\t\t\t\t\treturn [ \"u\"/* update */, doc, \"updateDescription\" in next && next.updateDescription.updatedFields && Object.keys(next.updateDescription.updatedFields) ];\n\t\t\t\t\t\n\t\t\t\t\tsubscription.ids.add(_id);\n\t\t\t\t\t\n\t\t\t\t\treturn [ \"c\"/* create */, doc ];\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tsubscription.ids.delete(_id);\n\t\t\t\t\n\t\t\t\treturn [ \"d\"/* delete */, _id ];\n\t\t\t\t\n\t\t\t}\n\t\t\tconst cursor = this.collection.find(subscription.query);\n\t\t\t\n\t\t\tif (subscription.projection)\n\t\t\t\tcursor.project(subscription.projection);\n\t\t\t\n\t\t\tif (subscription.sort)\n\t\t\t\tcursor.sort(subscription.sort);\n\t\t\t\n\t\t\tconst array = await cursor.toArray() as unknown as PartialWithId<D>[];\n\t\t\t\n\t\t\tif (subscription.ids) {\n\t\t\t\tsubscription.ids.clear();\n\t\t\t\tif (this.transform)\n\t\t\t\t\tfor (const item of array) {\n\t\t\t\t\t\tsubscription.ids.add(item._id);\n\t\t\t\t\t\tthis.transform(item, subscription.args);\n\t\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tfor (const item of array)\n\t\t\t\t\t\tsubscription.ids.add(item._id);\n\t\t\t} else if (this.transform)\n\t\t\t\tfor (const item of array)\n\t\t\t\t\tthis.transform(item, subscription.args);\n\t\t\t\n\t\t\treturn [ \"i\"/* initial */, array, subscription.sort ];\n\t\t\t\n\t\t}\n\t\t\n\t\treturn null;\n\t}\n\t\n\tchanged(reason: ChangeStreamDocument<D> | null) {\n\t\treturn Promise.all([ ...this.subscriptions ].map(subscription => subscription.changed(reason)));\n\t}\n\t\n\tonSubscribe = (subscription: SubscriptionHandle<SA>) => {\n\t\tif (subscription instanceof CollectionMapSubscriptionHandle) {\n\t\t\tObject.assign(subscription, this.makeQueryProps(subscription.args));\n\t\t\t\n\t\t\tif (subscription.query) {\n\t\t\t\tsubscription.match = sift(subscription.query);\n\t\t\t\tthis.collection.changeListeners.add(subscription.collectionChangeListener);\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\tflushInitial() {\n\t\treturn Promise.all([ ...this.subscriptions ].map(async subscription => {\n\t\t\tconst fetched = await this.fetchSubscription(subscription, null);\n\t\t\tsubscription.handler!([ fetched ]);\n\t\t\tsubscription.updates = [];\n\t\t\t\n\t\t}));\n\t}\n\t\n\tonUnsubscribe = (subscription: SubscriptionHandle<SA>) => {\n\t\tif (subscription instanceof CollectionMapSubscriptionHandle && subscription.query)\n\t\t\tthis.collection.changeListeners.delete(subscription.collectionChangeListener);\n\t\t\n\t};\n\t\n}\n", "import type { SubscriptionHandle } from \"./SubscriptionHandle\";\nimport type { PublicationProps, SubscriptionArgs } from \"./types\";\n\n\ndeclare global {\n\tvar __insite_publications: Map<string, Publication>;// eslint-disable-line no-var\n}\n\nexport const publications =\n\tglobalThis.__insite_publications ??=\n\t\tnew Map();\n\nexport class Publication<SA extends SubscriptionArgs = SubscriptionArgs> {\n\tconstructor(name: string, props?: PublicationProps<SA>) {\n\t\tthis.name = name;\n\t\t\n\t\tif (props)\n\t\t\tObject.assign(this, props);\n\t\t\n\t\tpublications.set(name, this as Publication);\n\t\t\n\t}\n\t\n\treadonly name;\n\tonSubscribe?: PublicationProps<SA>[\"onSubscribe\"];\n\tonUnsubscribe?: PublicationProps<SA>[\"onUnsubscribe\"];\n\t\n\ttype = \"object\";\n\t\n\tsubscriptions = new Set<SubscriptionHandle<SA>>();\n\t\n\tfetch?(...args: SA): unknown;\n\t\n\tfetchSubscription(subscription: SubscriptionHandle<SA>, ..._: unknown[]) { // eslint-disable-line @typescript-eslint/no-unused-vars\n\t\treturn this.fetch?.(...subscription.args);\n\t}\n\t\n\tsubscribe(subscription: SubscriptionHandle<SA>) {\n\t\tthis.subscriptions.add(subscription);\n\t\tthis.onSubscribe?.(subscription);\n\t\t\n\t}\n\t\n\tchanged(reason: unknown) {\n\t\tfor (const subscription of this.subscriptions)\n\t\t\tsubscription.changed(reason);\n\t\t\n\t}\n\t\n\tunsubscribe(subscription: SubscriptionHandle<SA>) {\n\t\tthis.onUnsubscribe?.(subscription);\n\t\tthis.subscriptions.delete(subscription);\n\t\t\n\t}\n\t\n\t\n\tstatic publications = publications;\n\t\n}\n", "import { Publication, publications } from \"./Publication\";\nimport type { SubscriptionArgs, SubscriptionHandler } from \"./types\";\n\n\nexport class SubscriptionHandle<SA extends SubscriptionArgs> {\n\tconstructor(\n\t\tpublicationName: string,\n\t\targs: SA,\n\t\thandler: SubscriptionHandler,\n\t\timmediately?: boolean,\n\t\tprevent?: boolean\n\t) {\n\t\t\n\t\tconst publication = publications.get(publicationName);\n\t\t\n\t\tif (publication) {\n\t\t\tthis.publication = publication as Publication<SA>;\n\t\t\tthis.args = args;\n\t\t\tthis.handler = handler;\n\t\t\t\n\t\t\tif (!prevent) {\n\t\t\t\tthis.publication.subscribe(this);\n\t\t\t\t\n\t\t\t\tif (immediately)\n\t\t\t\t\tthis.changed(null);\n\t\t\t}\n\t\t\t\n\t\t} else if (process.env.NODE_ENV === \"development\")\n\t\t\tconsole.error(\"Unknown publication\", publicationName);\n\t\t\n\t}\n\t\n\tpublication!: Publication<SA>;\n\targs!: SA;\n\thandler!: SubscriptionHandler;\n\t\n\tasync changed(reason: unknown) {\n\t\tthis.handler(await this.publication.fetchSubscription(this, reason), reason);\n\t\t\n\t}\n\t\n\tcancel() {\n\t\t\n\t\tthis.publication?.unsubscribe(this);\n\t\t\n\t}\n\t\n\trenew() {\n\t\t\n\t\tthis.publication?.unsubscribe(this);\n\t\t\n\t\tthis.publication?.subscribe(this);\n\t\t\n\t\treturn this.changed(null);\n\t}\n\t\n}\n", "import {\n\tChangeStreamDocument,\n\tDocument,\n\tFilter,\n\tSort\n} from \"insite-db\";\nimport { skippedChangeStreamDocuments } from \"./CollectionMapPublication\";\nimport { SubscriptionHandle } from \"./SubscriptionHandle\";\nimport type { Projection, SubscriptionArgs } from \"./types\";\n\n\nexport class CollectionMapSubscriptionHandle<\n\tD extends Document = Document,\n\tSA extends SubscriptionArgs = SubscriptionArgs\n> extends SubscriptionHandle<SA> {\n\tconstructor(\n\t\tpublicationName: string,\n\t\targs: SA,\n\t\thandler: (fetched: unknown) => void,\n\t\timmediately?: boolean\n\t) {\n\t\tsuper(publicationName, args, handler, immediately, true);\n\t\t\n\t\tif (this.publication) {\n\t\t\tthis.publication.subscribe(this);\n\t\t\t\n\t\t\tif (immediately)\n\t\t\t\tthis.changed(null);\n\t\t}\n\t\t\n\t}\n\t\n\tids = new Set<string>();\n\t\n\tquery: Filter<D> | null = null;\n\tprojection: null | Projection = null;\n\tisProjectionInclusive = false;\n\tfields: null | Set<string> = null;\n\tsort: null | Sort = null;\n\t\n\tmatch?: (doc: D) => boolean;\n\t\n\tasync changed(next: ChangeStreamDocument<D> | null) {\n\t\tthis.handler([ await this.publication.fetchSubscription(this, next) ]);\n\t\t\n\t}\n\t\n\tupdates: unknown[] = [];\n\tprivate flushTimeout?: NodeJS.Timeout;\n\t\n\tflushUpdates = () => {\n\t\t\n\t\tif (this.updates.length) {\n\t\t\tthis.handler(this.updates);\n\t\t\tthis.updates = [];\n\t\t}\n\t\t\n\t};\n\t\n\tcollectionChangeListener = async (next: ChangeStreamDocument<D>) => {\n\t\t\n\t\tif (\n\t\t\t!skippedChangeStreamDocuments.has(next) &&\n\t\t\t\"documentKey\" in next &&\n\t\t\t(this.ids.has(next.documentKey._id as unknown as string) ? (\n\t\t\t\tnext.operationType !== \"update\" ||\n\t\t\t\t!this.fields ||\n\t\t\t\t(\n\t\t\t\t\tnext.updateDescription.updatedFields &&\n\t\t\t\t\tObject.keys(next.updateDescription.updatedFields).some(field => this.fields!.has(field))\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t\"fullDocument\" in next &&\n\t\t\t\tthis.match!(next.fullDocument!)\n\t\t\t))\n\t\t) {\n\t\t\tclearTimeout(this.flushTimeout);\n\t\t\t\n\t\t\tthis.updates.push(await this.publication.fetchSubscription(this, next));\n\t\t\t\n\t\t\tthis.flushTimeout = setTimeout(this.flushUpdates, 1);\n\t\t}\n\t\t\n\t};\n\t\n\t\n}\n", "import type { AbilitiesSchema } from \"insite-common\";\nimport type { Document, InSiteWatchedCollection } from \"insite-db\";\nimport { CollectionMapPublication as GenericCollectionMapPublication } from \"../CollectionMapPublication\";\nimport type { WSSubscriptionArgs } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any, no-useless-constructor */\n\n\ntype RestArgs<\n\tAS extends AbilitiesSchema = AbilitiesSchema,\n\tD extends Document = Document,\n\tRA extends any[] = any[],\n\tT extends abstract new (...args: any) => any = typeof GenericCollectionMapPublication<D, WSSubscriptionArgs<AS, RA>>\n> = T extends abstract new (first: any, ...rest: infer R) => any ? R : never;\n\n\nexport class CollectionMapPublication<\n\tAS extends AbilitiesSchema = AbilitiesSchema,\n\tD extends Document = Document,\n\tRA extends any[] = any[]\n> extends GenericCollectionMapPublication<D, WSSubscriptionArgs<AS, RA>> {\n\tconstructor(collection: InSiteWatchedCollection<D>, ...restArgs: RestArgs<AS, D, RA>) {\n\t\tsuper(collection, ...restArgs);\n\t}\n}\n", "import type { AbilitiesSchema } from \"insite-common\";\nimport type { Document } from \"insite-db\";\nimport {\n\tCollectionMapSubscriptionHandle as GenericCollectionMapSubscriptionHandle\n} from \"../CollectionMapSubscriptionHandle\";\nimport type { WSSubscriptionArgs } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any, no-useless-constructor */\n\n\nexport class CollectionMapSubscriptionHandle<\n\tAS extends AbilitiesSchema = AbilitiesSchema,\n\tD extends Document = Document,\n\tRA extends any[] = any[]\n> extends GenericCollectionMapSubscriptionHandle<D, WSSubscriptionArgs<AS, RA>> {\n\tconstructor(...args: ConstructorParameters<typeof GenericCollectionMapSubscriptionHandle<D, WSSubscriptionArgs<AS, RA>>>) {\n\t\tsuper(...args);\n\t}\n}\n", "import type { AbilitiesSchema } from \"insite-common\";\nimport { Publication as GenericPublication } from \"../Publication\";\nimport type { WSSubscriptionArgs } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any, no-useless-constructor */\n\n\nexport class Publication<\n\tAS extends AbilitiesSchema = AbilitiesSchema,\n\tRA extends any[] = any[]\n> extends GenericPublication<WSSubscriptionArgs<AS, RA>> {\n\tconstructor(...args: ConstructorParameters<typeof GenericPublication<WSSubscriptionArgs<AS, RA>>>) {\n\t\tsuper(...args);\n\t}\n}\n", "import type { AbilitiesSchema } from \"insite-common\";\nimport { SubscriptionHandle as GenericSubscriptionHandle } from \"../SubscriptionHandle\";\nimport type { WSSubscriptionArgs } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any, no-useless-constructor */\n\n\nexport class SubscriptionHandle<\n\tAS extends AbilitiesSchema = AbilitiesSchema,\n\tRA extends any[] = any[]\n> extends GenericSubscriptionHandle<WSSubscriptionArgs<AS, RA>> {\n\tconstructor(...args: ConstructorParameters<typeof GenericSubscriptionHandle<WSSubscriptionArgs<AS, RA>>>) {\n\t\tsuper(...args);\n\t}\n}\n", "import type { InSiteWebSocketServer } from \"insite-ws/server\";\nimport type { AbilitiesSchema } from \"insite-common\";\nimport { Collection, type Document } from \"insite-db\";\nimport type { WSSCWithUser } from \"insite-users-server-ws\";\nimport { publications } from \"../Publication\";\nimport { CollectionMapPublication } from \"./CollectionMapPublication\";\nimport { CollectionMapSubscriptionHandle } from \"./CollectionMapSubscriptionHandle\";\nimport { Publication } from \"./Publication\";\nimport { SubscriptionHandle } from \"./SubscriptionHandle\";\nimport { Subscriptions } from \"./Subscriptions\";\nimport type { CollectionMapPublicationArgs, PublicationArgs, WSSubscriptionArgs } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nconst types = [ \"object\", \"map\" ] as const;\n\n\nfunction isPublicationCollectionMap<\n\tAS extends AbilitiesSchema,\n\tD extends Document\n>(\n\tpublication: CollectionMapPublication<AS, D> | Publication<AS>\n): publication is CollectionMapPublication<AS, D> {\n\treturn publication.type === \"map\";\n}\n\nfunction isCollectionMapPublicationArgs<\n\tAS extends AbilitiesSchema,\n\tD extends Document,\n\tRA extends any[] = any[]\n>(args: CollectionMapPublicationArgs<AS, D, RA> | PublicationArgs<AS, RA>): args is CollectionMapPublicationArgs<AS, D, RA> {\n\treturn args[0] instanceof Collection;\n}\n\n\nexport class SubscriptionHandler<AS extends AbilitiesSchema> {\n\tconstructor(wss: InSiteWebSocketServer, withCollections?: boolean) {\n\t\t\n\t\twss.on(\"client-connect\", this.handleClientConnect);\n\t\twss.on(\"client-session\", this.handleClientSession);\n\t\twss.on(\"client-message:s-s\"/* subscription subscribe */, this.handleClientSubscribe);\n\t\twss.on(\"client-message:s-u\"/* subscription unsubscribe */, this.handleClientUnsubscribe);\n\t\twss.on(\"client-close\", this.handleClientClose);\n\t\t\n\t\twss.on(\"should-renew-subscriptions\", this.renewSubscriptionsFor);\n\t\t\n\t\tObject.assign(wss, withCollections ? {\n\t\t\tpublish<RA extends any[], D extends Document>(...args: CollectionMapPublicationArgs<AS, D, RA> | PublicationArgs<AS, RA>) {\n\t\t\t\treturn isCollectionMapPublicationArgs(args) ?\n\t\t\t\t\tnew CollectionMapPublication<AS, D, RA>(...args) :\n\t\t\t\t\tnew Publication<AS, RA>(...args);\n\t\t\t}\n\t\t} : {\n\t\t\tpublish<RA extends any[]>(...args: PublicationArgs<AS, RA>) {\n\t\t\t\treturn new Publication<AS, RA>(...args);\n\t\t\t}\n\t\t});\n\t\t\n\t}\n\t\n\tprivate wsSubscriptionMap = new WeakMap<WSSCWithUser<AS>, Subscriptions<AS>>();\n\t\n\trenewSubscriptionsFor = (webSockets: WSSCWithUser<AS>[]) => {\n\t\tfor (const wssc of webSockets)\n\t\t\tthis.wsSubscriptionMap.get(wssc)?.renew();\n\t\t\n\t};\n\t\n\tprivate handleClientConnect = (wssc: WSSCWithUser<AS>) =>\n\t\tthis.wsSubscriptionMap.set(wssc, new Subscriptions());\n\t\n\tprivate handleClientSession = (wssc: WSSCWithUser<AS>) =>\n\t\tthis.wsSubscriptionMap.get(wssc)?.renew();\n\t\n\tprivate handleClientSubscribe = (\n\t\twssc: WSSCWithUser<AS>,\n\t\tsubscriptionType: typeof types[number],\n\t\tpublicationName: string,\n\t\ti: number | string,\n\t\trestArgs: any[],\n\t\timmediately?: boolean\n\t) => {\n\t\t\n\t\tif (types.includes(subscriptionType)) {\n\t\t\tconst publication = publications.get(publicationName) as CollectionMapPublication<AS> | Publication<AS> | undefined;\n\t\t\t\n\t\t\tif (publication?.type === subscriptionType) {\n\t\t\t\tconst subscriptionHandleArgs = [\n\t\t\t\t\tpublicationName,\n\t\t\t\t\t[ wssc, ...restArgs ] as WSSubscriptionArgs<AS>,\n\t\t\t\t\t(data: unknown) => wssc.sendMessage(\"s-c\"/* subscription changed */, i, data),\n\t\t\t\t\timmediately\n\t\t\t\t] as const;\n\t\t\t\t\n\t\t\t\tthis.wsSubscriptionMap\n\t\t\t\t\t.get(wssc)\n\t\t\t\t\t?.subscribe(i,\n\t\t\t\t\t\tisPublicationCollectionMap(publication) ?\n\t\t\t\t\t\t\tnew CollectionMapSubscriptionHandle<AS>(...subscriptionHandleArgs) :\n\t\t\t\t\t\t\tnew SubscriptionHandle<AS>(...subscriptionHandleArgs)\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\tprivate handleClientUnsubscribe = (wssc: WSSCWithUser<AS>, i: number | string) =>\n\t\tthis.wsSubscriptionMap.get(wssc)?.cancel(i);\n\t\n\tprivate handleClientClose = (wssc: WSSCWithUser<AS>) => {\n\t\tfor (const subscription of this.wsSubscriptionMap.get(wssc)?.values() ?? [])\n\t\t\tsubscription.cancel();\n\t\t\n\t};\n\t\n}\n", "import type { AbilitiesSchema } from \"insite-common\";\nimport type { CollectionMapSubscriptionHandle } from \"./CollectionMapSubscriptionHandle\";\nimport type { SubscriptionHandle } from \"./SubscriptionHandle\";\n\n\nexport class Subscriptions<AS extends AbilitiesSchema> extends Map<number | string, CollectionMapSubscriptionHandle<AS> | SubscriptionHandle<AS>> {\n\t\n\tsubscribe = this.set;\n\t\n\trenew() {\n\t\treturn Promise.all([ ...this.values() ].map(subscription => subscription.renew()));\n\t}\n\t\n\tcancel(key: number | string) {\n\t\tthis.get(key)?.cancel();\n\t\tthis.delete(key);\n\t\t\n\t}\n\t\n}\n"],
5
- "mappings": "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",
6
- "names": ["sift", "publications", "Publication", "name", "props", "subscription", "_", "reason", "SubscriptionHandle", "publicationName", "args", "handler", "immediately", "prevent", "publication", "publications", "reason", "CollectionMapSubscriptionHandle", "SubscriptionHandle", "publicationName", "args", "handler", "immediately", "next", "skippedChangeStreamDocuments", "field", "projectDocument", "document", "projection", "isInclusive", "isTop", "projected", "key", "subprojection", "item", "skippedChangeStreamDocuments", "CollectionMapPublication", "Publication", "collection", "name", "queryProps", "transform", "next", "args", "query", "sort", "triggers", "isProjectionInclusive", "fields", "subscription", "CollectionMapSubscriptionHandle", "_id", "doc", "cursor", "array", "reason", "sift", "fetched", "CollectionMapPublication", "collection", "restArgs", "CollectionMapSubscriptionHandle", "args", "Publication", "args", "SubscriptionHandle", "args", "Collection", "Subscriptions", "subscription", "key", "types", "isPublicationCollectionMap", "publication", "isCollectionMapPublicationArgs", "args", "Collection", "SubscriptionHandler", "wss", "withCollections", "CollectionMapPublication", "Publication", "webSockets", "wssc", "Subscriptions", "subscriptionType", "publicationName", "i", "restArgs", "immediately", "publications", "subscriptionHandleArgs", "data", "CollectionMapSubscriptionHandle", "SubscriptionHandle", "subscription"]
4
+ "sourcesContent": ["import sift from \"sift\";\nimport type {\n\tChangeStreamDocument,\n\tDocument,\n\tFilter,\n\tInSiteWatchedCollection,\n\tSort\n} from \"insite-db\";\nimport { CollectionMapSubscriptionHandle } from \"./CollectionMapSubscriptionHandle\";\nimport { Publication } from \"./Publication\";\nimport { SubscriptionHandle } from \"./SubscriptionHandle\";\nimport type {\n\tPartialWithId,\n\tProjection,\n\tSubscriptionArgs,\n\tTransformableDoc\n} from \"./types\";\n\n\nfunction projectDocument<D extends Document>(document: D, projection: null, isInclusive?: boolean, isTop?: boolean): D;\nfunction projectDocument<D extends Document>(document: D, projection: Projection, isInclusive?: boolean, isTop?: boolean): Partial<D>;\nfunction projectDocument<D extends Document>(document: D, projection: null | Projection, isInclusive?: boolean, isTop?: boolean): D | Partial<D>;\nfunction projectDocument<D extends Document>(document: D, projection: null | Projection, isInclusive = true, isTop = true) {\n\tif (projection)\n\t\tif (isInclusive) {\n\t\t\tconst projected: Record<string, unknown> = {};\n\t\t\tfor (const key in projection) { // eslint-disable-line guard-for-in\n\t\t\t\tconst subprojection = projection[key];\n\t\t\t\tprojected[key] =\n\t\t\t\t\ttypeof subprojection == \"object\" ?\n\t\t\t\t\t\tArray.isArray(document[key]) ?\n\t\t\t\t\t\t\tdocument[key].map((item: Document) => projectDocument(item, subprojection, true, false)) :\n\t\t\t\t\t\t\tprojectDocument(document[key], subprojection, true, false) :\n\t\t\t\t\t\tdocument[key];\n\t\t\t}\n\t\t\tif (isTop && projection._id === 0)\n\t\t\t\tdelete projected._id;\n\t\t\t\n\t\t\treturn projected as Partial<D>;\n\t\t} else {\n\t\t\tconst projected = { ...document } as Record<string, unknown>;\n\t\t\tfor (const key in projection) { // eslint-disable-line guard-for-in\n\t\t\t\tconst subprojection = projection[key];\n\t\t\t\tif (typeof subprojection == \"object\")\n\t\t\t\t\tprojected[key] =\n\t\t\t\t\t\tArray.isArray(document[key]) ?\n\t\t\t\t\t\t\tdocument[key].map((item: Document) => projectDocument(item, subprojection, false, false)) :\n\t\t\t\t\t\t\tprojectDocument(document[key], subprojection, false, false);\n\t\t\t\telse\n\t\t\t\t\tdelete projected[key];\n\t\t\t}\n\t\t\t\n\t\t\treturn projected as Partial<D>;\n\t\t}\n\t\n\treturn document;\n}\n\nexport const skippedChangeStreamDocuments = new WeakSet<ChangeStreamDocument>();\n\ntype QueryProps<D extends Document> = {\n\tquery?: Filter<D>;\n\tprojection?: Projection;\n\tsort?: Sort;\n\ttriggers?: string[];\n};\n\n\nexport class CollectionMapPublication<\n\tD extends Document = Document,\n\tSA extends SubscriptionArgs = SubscriptionArgs\n> extends Publication<SA> {\n\tconstructor(\n\t\tcollection: InSiteWatchedCollection<D>,\n\t\tname: string,\n\t\tqueryProps?: ((...args: SA) => false | null | QueryProps<D> | void) | false | null | QueryProps<D>,\n\t\ttransform?: (doc: TransformableDoc<D>, args: SA) => void\n\t) {\n\t\tsuper(name);\n\t\t\n\t\tthis.collection = collection;\n\t\tthis.queryProps = queryProps;\n\t\tthis.transform = transform;\n\t\t\n\t}\n\t\n\ttype = \"map\";\n\t\n\tcollection;\n\tdeclare subscriptions: Set<CollectionMapSubscriptionHandle<D, SA>>;\n\tqueryProps;\n\ttransform;\n\t\n\tskip(next: ChangeStreamDocument<D>) {\n\t\tskippedChangeStreamDocuments.add(next);\n\t\t\n\t}\n\t\n\tmakeQueryProps(args: SA) {\n\t\tconst {\n\t\t\tquery = null,\n\t\t\tprojection = null,\n\t\t\tsort = null,\n\t\t\ttriggers\n\t\t} = (typeof this.queryProps == \"function\" ? this.queryProps(...args) : this.queryProps) || {};\n\t\t\n\t\tlet isProjectionInclusive = false;\n\t\tlet fields = null;\n\t\tif (projection) {\n\t\t\t// eslint-disable-next-line guard-for-in\n\t\t\tfor (const key in projection) {\n\t\t\t\tisProjectionInclusive = !!projection[key];\n\t\t\t\tif (key !== \"_id\")\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (isProjectionInclusive) {\n\t\t\t\tfields = new Set([ ...Object.keys(query ?? {}), ...Object.keys(projection), ...triggers ?? [] ]);\n\t\t\t\tfields.delete(\"_id\");\n\t\t\t\tif (projection._id !== 0)\n\t\t\t\t\tprojection._id = 1;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn { query, projection, isProjectionInclusive, fields, sort, args };\n\t}\n\t\n\tasync fetchSubscription(subscription: SubscriptionHandle<SA>, next: ChangeStreamDocument<D> | null) {\n\t\tif (subscription instanceof CollectionMapSubscriptionHandle && subscription.query) {\n\t\t\tif (next && \"documentKey\" in next) {\n\t\t\t\tconst _id = next.documentKey._id as unknown as string;\n\t\t\t\t\n\t\t\t\tif (next.operationType === \"insert\" || (next.operationType !== \"delete\" && subscription.match!(next.fullDocument!))) {\n\t\t\t\t\tconst doc = projectDocument(next.fullDocument!, subscription.projection, subscription.isProjectionInclusive);\n\t\t\t\t\tthis.transform?.(doc as TransformableDoc<D>, subscription.args);\n\t\t\t\t\tif (subscription.ids.has(_id))\n\t\t\t\t\t\treturn [ \"u\"/* update */, doc, \"updateDescription\" in next && next.updateDescription.updatedFields && Object.keys(next.updateDescription.updatedFields) ];\n\t\t\t\t\t\n\t\t\t\t\tsubscription.ids.add(_id);\n\t\t\t\t\t\n\t\t\t\t\treturn [ \"c\"/* create */, doc ];\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tsubscription.ids.delete(_id);\n\t\t\t\t\n\t\t\t\treturn [ \"d\"/* delete */, _id ];\n\t\t\t\t\n\t\t\t}\n\t\t\tconst cursor = this.collection.find(subscription.query);\n\t\t\t\n\t\t\tif (subscription.projection)\n\t\t\t\tcursor.project(subscription.projection);\n\t\t\t\n\t\t\tif (subscription.sort)\n\t\t\t\tcursor.sort(subscription.sort);\n\t\t\t\n\t\t\tconst array = await cursor.toArray() as unknown as PartialWithId<D>[];\n\t\t\t\n\t\t\tif (subscription.ids) {\n\t\t\t\tsubscription.ids.clear();\n\t\t\t\tif (this.transform)\n\t\t\t\t\tfor (const item of array) {\n\t\t\t\t\t\tsubscription.ids.add(item._id);\n\t\t\t\t\t\tthis.transform(item, subscription.args);\n\t\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tfor (const item of array)\n\t\t\t\t\t\tsubscription.ids.add(item._id);\n\t\t\t} else if (this.transform)\n\t\t\t\tfor (const item of array)\n\t\t\t\t\tthis.transform(item, subscription.args);\n\t\t\t\n\t\t\treturn [ \"i\"/* initial */, array, subscription.sort ];\n\t\t\t\n\t\t}\n\t\t\n\t\treturn null;\n\t}\n\t\n\tchanged(reason: ChangeStreamDocument<D> | null) {\n\t\treturn Promise.all([ ...this.subscriptions ].map(subscription => subscription.changed(reason)));\n\t}\n\t\n\tonSubscribe = (subscription: SubscriptionHandle<SA>) => {\n\t\tif (subscription instanceof CollectionMapSubscriptionHandle) {\n\t\t\tObject.assign(subscription, this.makeQueryProps(subscription.args));\n\t\t\t\n\t\t\tif (subscription.query) {\n\t\t\t\tsubscription.match = sift(subscription.query);\n\t\t\t\tthis.collection.changeListeners.add(subscription.collectionChangeListener);\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\tflushInitial() {\n\t\treturn Promise.all([ ...this.subscriptions ].map(async subscription => {\n\t\t\tconst fetched = await this.fetchSubscription(subscription, null);\n\t\t\tsubscription.handler!([ fetched ]);\n\t\t\tsubscription.updates = [];\n\t\t\t\n\t\t}));\n\t}\n\t\n\tonUnsubscribe = (subscription: SubscriptionHandle<SA>) => {\n\t\tif (subscription instanceof CollectionMapSubscriptionHandle && subscription.query)\n\t\t\tthis.collection.changeListeners.delete(subscription.collectionChangeListener);\n\t\t\n\t};\n\t\n}\n", "import type { SubscriptionHandle } from \"./SubscriptionHandle\";\nimport type { PublicationProps, SubscriptionArgs } from \"./types\";\n\n\ndeclare global {\n\tvar __insite_publications: Map<string, Publication>;// eslint-disable-line no-var\n}\n\nexport const publications =\n\tglobalThis.__insite_publications ??=\n\t\tnew Map();\n\nexport class Publication<SA extends SubscriptionArgs = SubscriptionArgs> {\n\tconstructor(name: string, props?: PublicationProps<SA>) {\n\t\tthis.name = name;\n\t\t\n\t\tif (props)\n\t\t\tObject.assign(this, props);\n\t\t\n\t\tpublications.set(name, this as Publication);\n\t\t\n\t}\n\t\n\treadonly name;\n\tonSubscribe?: PublicationProps<SA>[\"onSubscribe\"];\n\tonUnsubscribe?: PublicationProps<SA>[\"onUnsubscribe\"];\n\t\n\ttype = \"object\";\n\t\n\tsubscriptions = new Set<SubscriptionHandle<SA>>();\n\t\n\tfetch?(...args: SA): unknown;\n\t\n\tfetchSubscription(subscription: SubscriptionHandle<SA>, ..._: unknown[]) { // eslint-disable-line @typescript-eslint/no-unused-vars\n\t\treturn this.fetch?.(...subscription.args);\n\t}\n\t\n\tsubscribe(subscription: SubscriptionHandle<SA>) {\n\t\tthis.subscriptions.add(subscription);\n\t\tthis.onSubscribe?.(subscription);\n\t\t\n\t}\n\t\n\tchanged(reason: unknown) {\n\t\tfor (const subscription of this.subscriptions)\n\t\t\tsubscription.changed(reason);\n\t\t\n\t}\n\t\n\tunsubscribe(subscription: SubscriptionHandle<SA>) {\n\t\tthis.onUnsubscribe?.(subscription);\n\t\tthis.subscriptions.delete(subscription);\n\t\t\n\t}\n\t\n\t\n\tstatic publications = publications;\n\t\n}\n", "import { Publication, publications } from \"./Publication\";\nimport type { SubscriptionArgs, SubscriptionHandler } from \"./types\";\n\n\nexport class SubscriptionHandle<SA extends SubscriptionArgs> {\n\tconstructor(\n\t\tpublicationName: string,\n\t\targs: SA,\n\t\thandler: SubscriptionHandler,\n\t\timmediately?: boolean,\n\t\tprevent?: boolean\n\t) {\n\t\t\n\t\tconst publication = publications.get(publicationName);\n\t\t\n\t\tif (publication) {\n\t\t\tthis.publication = publication as Publication<SA>;\n\t\t\tthis.args = args;\n\t\t\tthis.handler = handler;\n\t\t\t\n\t\t\tif (!prevent) {\n\t\t\t\tthis.publication.subscribe(this);\n\t\t\t\t\n\t\t\t\tif (immediately)\n\t\t\t\t\tthis.changed(null);\n\t\t\t}\n\t\t\t\n\t\t} else if (process.env.NODE_ENV === \"development\")\n\t\t\tconsole.error(\"Unknown publication\", publicationName);\n\t\t\n\t}\n\t\n\tpublication!: Publication<SA>;\n\targs!: SA;\n\thandler!: SubscriptionHandler;\n\t\n\tasync changed(reason: unknown) {\n\t\tthis.handler(await this.publication.fetchSubscription(this, reason), reason);\n\t\t\n\t}\n\t\n\tcancel() {\n\t\t\n\t\tthis.publication?.unsubscribe(this);\n\t\t\n\t}\n\t\n\trenew() {\n\t\t\n\t\tthis.publication?.unsubscribe(this);\n\t\t\n\t\tthis.publication?.subscribe(this);\n\t\t\n\t\treturn this.changed(null);\n\t}\n\t\n}\n", "import {\n\tChangeStreamDocument,\n\tDocument,\n\tFilter,\n\tSort\n} from \"insite-db\";\nimport { skippedChangeStreamDocuments } from \"./CollectionMapPublication\";\nimport { SubscriptionHandle } from \"./SubscriptionHandle\";\nimport type { Projection, SubscriptionArgs } from \"./types\";\n\n\nexport class CollectionMapSubscriptionHandle<\n\tD extends Document = Document,\n\tSA extends SubscriptionArgs = SubscriptionArgs\n> extends SubscriptionHandle<SA> {\n\tconstructor(\n\t\tpublicationName: string,\n\t\targs: SA,\n\t\thandler: (fetched: unknown) => void,\n\t\timmediately?: boolean\n\t) {\n\t\tsuper(publicationName, args, handler, immediately, true);\n\t\t\n\t\tif (this.publication) {\n\t\t\tthis.publication.subscribe(this);\n\t\t\t\n\t\t\tif (immediately)\n\t\t\t\tthis.changed(null);\n\t\t}\n\t\t\n\t}\n\t\n\tids = new Set<string>();\n\t\n\tquery: Filter<D> | null = null;\n\tprojection: null | Projection = null;\n\tisProjectionInclusive = false;\n\tfields: null | Set<string> = null;\n\tsort: null | Sort = null;\n\t\n\tmatch?: (doc: D) => boolean;\n\t\n\tasync changed(next: ChangeStreamDocument<D> | null) {\n\t\tthis.handler([ await this.publication.fetchSubscription(this, next) ]);\n\t\t\n\t}\n\t\n\tupdates: unknown[] = [];\n\t#flushTimeout?: NodeJS.Timeout;\n\t\n\tflushUpdates = () => {\n\t\t\n\t\tif (this.updates.length) {\n\t\t\tthis.handler(this.updates);\n\t\t\tthis.updates = [];\n\t\t}\n\t\t\n\t};\n\t\n\tcollectionChangeListener = async (next: ChangeStreamDocument<D>) => {\n\t\t\n\t\tif (\n\t\t\t!skippedChangeStreamDocuments.has(next) &&\n\t\t\t\"documentKey\" in next &&\n\t\t\t(this.ids.has(next.documentKey._id as unknown as string) ? (\n\t\t\t\tnext.operationType !== \"update\" ||\n\t\t\t\t!this.fields ||\n\t\t\t\t(\n\t\t\t\t\tnext.updateDescription.updatedFields &&\n\t\t\t\t\tObject.keys(next.updateDescription.updatedFields).some(field => this.fields!.has(field))\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t\"fullDocument\" in next &&\n\t\t\t\tthis.match!(next.fullDocument!)\n\t\t\t))\n\t\t) {\n\t\t\tclearTimeout(this.#flushTimeout);\n\t\t\t\n\t\t\tthis.updates.push(await this.publication.fetchSubscription(this, next));\n\t\t\t\n\t\t\tthis.#flushTimeout = setTimeout(this.flushUpdates, 1);\n\t\t}\n\t\t\n\t};\n\t\n\t\n}\n", "import type { AbilitiesSchema } from \"insite-common\";\nimport type { Document, InSiteWatchedCollection } from \"insite-db\";\nimport { CollectionMapPublication as GenericCollectionMapPublication } from \"../CollectionMapPublication\";\nimport type { WSSubscriptionArgs } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any, no-useless-constructor */\n\n\ntype RestArgs<\n\tAS extends AbilitiesSchema = AbilitiesSchema,\n\tD extends Document = Document,\n\tRA extends any[] = any[],\n\tT extends abstract new (...args: any) => any = typeof GenericCollectionMapPublication<D, WSSubscriptionArgs<AS, RA>>\n> = T extends abstract new (first: any, ...rest: infer R) => any ? R : never;\n\n\nexport class CollectionMapPublication<\n\tAS extends AbilitiesSchema = AbilitiesSchema,\n\tD extends Document = Document,\n\tRA extends any[] = any[]\n> extends GenericCollectionMapPublication<D, WSSubscriptionArgs<AS, RA>> {\n\tconstructor(collection: InSiteWatchedCollection<D>, ...restArgs: RestArgs<AS, D, RA>) {\n\t\tsuper(collection, ...restArgs);\n\t}\n}\n", "import type { AbilitiesSchema } from \"insite-common\";\nimport type { Document } from \"insite-db\";\nimport {\n\tCollectionMapSubscriptionHandle as GenericCollectionMapSubscriptionHandle\n} from \"../CollectionMapSubscriptionHandle\";\nimport type { WSSubscriptionArgs } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any, no-useless-constructor */\n\n\nexport class CollectionMapSubscriptionHandle<\n\tAS extends AbilitiesSchema = AbilitiesSchema,\n\tD extends Document = Document,\n\tRA extends any[] = any[]\n> extends GenericCollectionMapSubscriptionHandle<D, WSSubscriptionArgs<AS, RA>> {\n\tconstructor(...args: ConstructorParameters<typeof GenericCollectionMapSubscriptionHandle<D, WSSubscriptionArgs<AS, RA>>>) {\n\t\tsuper(...args);\n\t}\n}\n", "import type { AbilitiesSchema } from \"insite-common\";\nimport { Publication as GenericPublication } from \"../Publication\";\nimport type { WSSubscriptionArgs } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any, no-useless-constructor */\n\n\nexport class Publication<\n\tAS extends AbilitiesSchema = AbilitiesSchema,\n\tRA extends any[] = any[]\n> extends GenericPublication<WSSubscriptionArgs<AS, RA>> {\n\tconstructor(...args: ConstructorParameters<typeof GenericPublication<WSSubscriptionArgs<AS, RA>>>) {\n\t\tsuper(...args);\n\t}\n}\n", "import type { AbilitiesSchema } from \"insite-common\";\nimport { SubscriptionHandle as GenericSubscriptionHandle } from \"../SubscriptionHandle\";\nimport type { WSSubscriptionArgs } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any, no-useless-constructor */\n\n\nexport class SubscriptionHandle<\n\tAS extends AbilitiesSchema = AbilitiesSchema,\n\tRA extends any[] = any[]\n> extends GenericSubscriptionHandle<WSSubscriptionArgs<AS, RA>> {\n\tconstructor(...args: ConstructorParameters<typeof GenericSubscriptionHandle<WSSubscriptionArgs<AS, RA>>>) {\n\t\tsuper(...args);\n\t}\n}\n", "import type { InSiteWebSocketServer } from \"insite-ws/server\";\nimport type { AbilitiesSchema } from \"insite-common\";\nimport { Collection, type Document } from \"insite-db\";\nimport type { WSSCWithUser } from \"insite-users-server-ws\";\nimport { publications } from \"../Publication\";\nimport { CollectionMapPublication } from \"./CollectionMapPublication\";\nimport { CollectionMapSubscriptionHandle } from \"./CollectionMapSubscriptionHandle\";\nimport { Publication } from \"./Publication\";\nimport { SubscriptionHandle } from \"./SubscriptionHandle\";\nimport { Subscriptions } from \"./Subscriptions\";\nimport type { CollectionMapPublicationArgs, PublicationArgs, WSSubscriptionArgs } from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nconst types = [ \"object\", \"map\" ] as const;\n\n\nfunction isPublicationCollectionMap<\n\tAS extends AbilitiesSchema,\n\tD extends Document\n>(\n\tpublication: CollectionMapPublication<AS, D> | Publication<AS>\n): publication is CollectionMapPublication<AS, D> {\n\treturn publication.type === \"map\";\n}\n\nfunction isCollectionMapPublicationArgs<\n\tAS extends AbilitiesSchema,\n\tD extends Document,\n\tRA extends any[] = any[]\n>(args: CollectionMapPublicationArgs<AS, D, RA> | PublicationArgs<AS, RA>): args is CollectionMapPublicationArgs<AS, D, RA> {\n\treturn args[0] instanceof Collection;\n}\n\n\nexport class SubscriptionHandler<AS extends AbilitiesSchema> {\n\tconstructor(wss: InSiteWebSocketServer, withCollections?: boolean) {\n\t\t\n\t\twss.on(\"client-connect\", this.#handleClientConnect);\n\t\twss.on(\"client-session\", this.#handleClientSession);\n\t\twss.on(\"client-message:s-s\"/* subscription subscribe */, this.#handleClientSubscribe);\n\t\twss.on(\"client-message:s-u\"/* subscription unsubscribe */, this.#handleClientUnsubscribe);\n\t\twss.on(\"client-close\", this.#handleClientClose);\n\t\t\n\t\twss.on(\"should-renew-subscriptions\", this.renewSubscriptionsFor);\n\t\t\n\t\tObject.assign(wss, withCollections ? {\n\t\t\tpublish<RA extends any[], D extends Document>(...args: CollectionMapPublicationArgs<AS, D, RA> | PublicationArgs<AS, RA>) {\n\t\t\t\treturn isCollectionMapPublicationArgs(args) ?\n\t\t\t\t\tnew CollectionMapPublication<AS, D, RA>(...args) :\n\t\t\t\t\tnew Publication<AS, RA>(...args);\n\t\t\t}\n\t\t} : {\n\t\t\tpublish<RA extends any[]>(...args: PublicationArgs<AS, RA>) {\n\t\t\t\treturn new Publication<AS, RA>(...args);\n\t\t\t}\n\t\t});\n\t\t\n\t}\n\t\n\t#wsSubscriptionMap = new WeakMap<WSSCWithUser<AS>, Subscriptions<AS>>();\n\t\n\trenewSubscriptionsFor = (webSockets: WSSCWithUser<AS>[]) => {\n\t\tfor (const wssc of webSockets)\n\t\t\tthis.#wsSubscriptionMap.get(wssc)?.renew();\n\t\t\n\t};\n\t\n\t#handleClientConnect = (wssc: WSSCWithUser<AS>) =>\n\t\tthis.#wsSubscriptionMap.set(wssc, new Subscriptions());\n\t\n\t#handleClientSession = (wssc: WSSCWithUser<AS>) =>\n\t\tthis.#wsSubscriptionMap.get(wssc)?.renew();\n\t\n\t#handleClientSubscribe = (\n\t\twssc: WSSCWithUser<AS>,\n\t\tsubscriptionType: typeof types[number],\n\t\tpublicationName: string,\n\t\ti: number | string,\n\t\trestArgs: any[],\n\t\timmediately?: boolean\n\t) => {\n\t\t\n\t\tif (types.includes(subscriptionType)) {\n\t\t\tconst publication = publications.get(publicationName) as CollectionMapPublication<AS> | Publication<AS> | undefined;\n\t\t\t\n\t\t\tif (publication?.type === subscriptionType) {\n\t\t\t\tconst subscriptionHandleArgs = [\n\t\t\t\t\tpublicationName,\n\t\t\t\t\t[ wssc, ...restArgs ] as WSSubscriptionArgs<AS>,\n\t\t\t\t\t(data: unknown) => wssc.sendMessage(\"s-c\"/* subscription changed */, i, data),\n\t\t\t\t\timmediately\n\t\t\t\t] as const;\n\t\t\t\t\n\t\t\t\tthis.#wsSubscriptionMap\n\t\t\t\t\t.get(wssc)\n\t\t\t\t\t?.subscribe(i,\n\t\t\t\t\t\tisPublicationCollectionMap(publication) ?\n\t\t\t\t\t\t\tnew CollectionMapSubscriptionHandle<AS>(...subscriptionHandleArgs) :\n\t\t\t\t\t\t\tnew SubscriptionHandle<AS>(...subscriptionHandleArgs)\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t\n\t};\n\t\n\t#handleClientUnsubscribe = (wssc: WSSCWithUser<AS>, i: number | string) =>\n\t\tthis.#wsSubscriptionMap.get(wssc)?.cancel(i);\n\t\n\t#handleClientClose = (wssc: WSSCWithUser<AS>) => {\n\t\tfor (const subscription of this.#wsSubscriptionMap.get(wssc)?.values() ?? [])\n\t\t\tsubscription.cancel();\n\t\t\n\t};\n\t\n}\n", "import type { AbilitiesSchema } from \"insite-common\";\nimport type { CollectionMapSubscriptionHandle } from \"./CollectionMapSubscriptionHandle\";\nimport type { SubscriptionHandle } from \"./SubscriptionHandle\";\n\n\nexport class Subscriptions<AS extends AbilitiesSchema> extends Map<number | string, CollectionMapSubscriptionHandle<AS> | SubscriptionHandle<AS>> {\n\t\n\tsubscribe = this.set;\n\t\n\trenew() {\n\t\treturn Promise.all([ ...this.values() ].map(subscription => subscription.renew()));\n\t}\n\t\n\tcancel(key: number | string) {\n\t\tthis.get(key)?.cancel();\n\t\tthis.delete(key);\n\t\t\n\t}\n\t\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["sift", "publications", "Publication", "name", "props", "subscription", "_", "reason", "SubscriptionHandle", "publicationName", "args", "handler", "immediately", "prevent", "publication", "publications", "reason", "CollectionMapSubscriptionHandle", "SubscriptionHandle", "publicationName", "args", "handler", "immediately", "next", "#flushTimeout", "skippedChangeStreamDocuments", "field", "projectDocument", "document", "projection", "isInclusive", "isTop", "projected", "key", "subprojection", "item", "skippedChangeStreamDocuments", "CollectionMapPublication", "Publication", "collection", "name", "queryProps", "transform", "next", "args", "query", "sort", "triggers", "isProjectionInclusive", "fields", "subscription", "CollectionMapSubscriptionHandle", "_id", "doc", "cursor", "array", "reason", "sift", "fetched", "CollectionMapPublication", "collection", "restArgs", "CollectionMapSubscriptionHandle", "args", "Publication", "args", "SubscriptionHandle", "args", "Collection", "Subscriptions", "subscription", "key", "types", "isPublicationCollectionMap", "publication", "isCollectionMapPublicationArgs", "args", "Collection", "SubscriptionHandler", "wss", "withCollections", "#handleClientConnect", "#handleClientSession", "#handleClientSubscribe", "#handleClientUnsubscribe", "#handleClientClose", "CollectionMapPublication", "Publication", "#wsSubscriptionMap", "webSockets", "wssc", "Subscriptions", "subscriptionType", "publicationName", "i", "restArgs", "immediately", "publications", "subscriptionHandleArgs", "data", "CollectionMapSubscriptionHandle", "SubscriptionHandle", "subscription"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import type { AbilitiesSchema } from "insite-common";
2
2
  import type { Document, Filter, InSiteWatchedCollection, Sort } from "insite-db";
3
3
  import type { WSSCWithUser } from "insite-users-server-ws";
4
- import type { PartialWithId, Projection, PublicationProps } from "../types";
4
+ import type { Projection, PublicationProps, TransformableDoc } from "../types";
5
5
  import type { CollectionMapPublication } from "./CollectionMapPublication";
6
6
  import type { Publication } from "./Publication";
7
7
  export type WSSubscriptionArgs<AS extends AbilitiesSchema, RA extends any[] = any[]> = [WSSCWithUser<AS>, ...RA];
@@ -13,7 +13,7 @@ export type CollectionMapPublicationArgs<AS extends AbilitiesSchema, D extends D
13
13
  collection: InSiteWatchedCollection<D>,
14
14
  name: string,
15
15
  queryProps?: ((...args: WSSubscriptionArgs<AS, RA>) => false | null | QueryProps<D> | void) | false | null | QueryProps<D>,
16
- transform?: (doc: PartialWithId<D>, args: WSSubscriptionArgs<AS, RA>) => void
16
+ transform?: (doc: TransformableDoc<D>, args: WSSubscriptionArgs<AS, RA>) => void
17
17
  ];
18
18
  type Publish<AS extends AbilitiesSchema, RA extends any[] = any[]> = {
19
19
  (...args: PublicationArgs<AS, RA>): Publication<AS, RA>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ws/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ws/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EACX,QAAQ,EACR,MAAM,EACN,uBAAuB,EACvB,IAAI,EACJ,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAMjD,MAAM,MAAM,kBAAkB,CAC7B,EAAE,SAAS,eAAe,EAC1B,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,IACrB,CAAE,YAAY,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAE,CAAC;AAGhC,MAAM,MAAM,eAAe,CAC1B,EAAE,SAAS,eAAe,EAC1B,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,IACrB;IACH,IAAI,EAAE,MAAM;IACZ,KAAK,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,4BAA4B,CACvC,EAAE,SAAS,eAAe,EAC1B,CAAC,SAAS,QAAQ,EAClB,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,IACrB;IACH,UAAU,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACtC,IAAI,EAAE,MAAM;IACZ,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC;IAC1H,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,IAAI;CAChF,CAAC;AAGF,KAAK,OAAO,CACX,EAAE,SAAS,eAAe,EAC1B,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,IACrB;IACH,CAAC,GAAG,IAAI,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;CACxD,CAAC;AAEF,KAAK,iBAAiB,CACrB,EAAE,SAAS,eAAe,EAC1B,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,IACrB;IACH,CAAC,GAAG,IAAI,EAAE,4BAA4B,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,wBAAwB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;CACxF,CAAC;AAGF,KAAK,UAAU,CAAC,CAAC,SAAS,QAAQ,IAAI;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAGF,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,EAAE,SAAS,eAAe,IAAI;IACxD,OAAO,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;CAC7E,GAAG,CAAC,CAAC;AAEN,MAAM,MAAM,qBAAqB,CAAC,CAAC,EAAE,EAAE,SAAS,eAAe,IAAI;IAClE,OAAO,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,CAAC,SAAS,QAAQ,EAAE,GAAG,IAAI,EAAE,4BAA4B,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;CAC9H,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "insite-subscriptions-server",
3
- "version": "2.0.13",
3
+ "version": "2.0.19",
4
4
  "description": "inSite subscriptions server side",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -9,7 +9,7 @@
9
9
  ".": "./dist/index.js",
10
10
  "./ws": "./dist/ws/index.js"
11
11
  },
12
- "packageManager": "bun@1.1.33",
12
+ "packageManager": "bun@1.1.36",
13
13
  "scripts": {
14
14
  "test": "echo \"Error: no test specified\" && exit 1",
15
15
  "build": "bun .conveyer.js",
@@ -29,15 +29,15 @@
29
29
  "dependencies": {
30
30
  "insite-common": "^2.0.0",
31
31
  "insite-db": "^2.0.3",
32
- "insite-users-server-ws": "^2.0.21",
33
- "insite-ws": "^2.0.17",
32
+ "insite-users-server-ws": "^2.0.27",
33
+ "insite-ws": "^2.0.18",
34
34
  "sift": "^16.0.1"
35
35
  },
36
36
  "devDependencies": {
37
- "@nesvet/conveyer": "^2.2.5",
37
+ "@nesvet/conveyer": "^2.2.7",
38
38
  "@nesvet/eslint-config": "^2.0.34",
39
- "@types/node": "^22.8.4",
40
- "@types/ws": "^8.5.12",
41
- "typescript": "^5.6.3"
39
+ "@types/node": "^22.10.2",
40
+ "@types/ws": "^8.5.13",
41
+ "typescript": "^5.7.2"
42
42
  }
43
43
  }