insite-subscriptions-server 1.0.240 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bun.lockb CHANGED
Binary file
@@ -0,0 +1,36 @@
1
+ import type { ChangeStreamDocument, Document, Filter, InSiteWatchedCollection, Sort } from "insite-db";
2
+ import { CollectionMapSubscriptionHandle } from "./CollectionMapSubscriptionHandle";
3
+ import { Publication } from "./Publication";
4
+ import { SubscriptionHandle } from "./SubscriptionHandle";
5
+ import type { PartialWithId, Projection, SubscriptionArgs } from "./types";
6
+ export declare const skippedChangeStreamDocuments: WeakSet<ChangeStreamDocument>;
7
+ type QueryProps<D extends Document> = {
8
+ query?: Filter<D>;
9
+ projection?: Projection;
10
+ sort?: Sort;
11
+ triggers?: string[];
12
+ };
13
+ export declare class CollectionMapPublication<D extends Document = Document, SA extends SubscriptionArgs = SubscriptionArgs> extends Publication<SA> {
14
+ constructor(name: string, collection: InSiteWatchedCollection<D>, queryProps?: ((...args: SA) => false | null | QueryProps<D> | void) | false | null | QueryProps<D>, transform?: (doc: PartialWithId<D>, args: SA) => void);
15
+ type: string;
16
+ collection: InSiteWatchedCollection<D>;
17
+ subscriptions: Set<CollectionMapSubscriptionHandle<D, SA>>;
18
+ queryProps: false | ((...args: SA) => false | null | QueryProps<D> | void) | QueryProps<D> | null | undefined;
19
+ transform: ((doc: PartialWithId<D>, args: SA) => void) | undefined;
20
+ skip(next: ChangeStreamDocument<D>): void;
21
+ makeQueryProps(args: SA): {
22
+ query: Filter<D> | null;
23
+ projection: Projection | null;
24
+ isProjectionInclusive: boolean;
25
+ fields: Set<string> | null;
26
+ sort: Sort | null;
27
+ args: SA;
28
+ };
29
+ fetchSubscription(subscription: SubscriptionHandle<SA>, next: ChangeStreamDocument<D> | null): Promise<(string | false | string[] | Partial<D> | undefined)[] | (Sort | PartialWithId<D>[] | null)[] | null>;
30
+ changed(reason: ChangeStreamDocument<D> | null): Promise<void[]>;
31
+ onSubscribe: (subscription: SubscriptionHandle<SA>) => void;
32
+ flushInitial(): Promise<void[]>;
33
+ onUnsubscribe: (subscription: SubscriptionHandle<SA>) => void;
34
+ }
35
+ export {};
36
+ //# sourceMappingURL=CollectionMapPublication.d.ts.map
@@ -0,0 +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,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,uBAAuB,CAAC,CAAC,CAAC,EACtC,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"}
@@ -0,0 +1,19 @@
1
+ import { ChangeStreamDocument, Document, Filter, Sort } from "insite-db";
2
+ import { SubscriptionHandle } from "./SubscriptionHandle";
3
+ import type { Projection, SubscriptionArgs } from "./types";
4
+ export declare class CollectionMapSubscriptionHandle<D extends Document = Document, SA extends SubscriptionArgs = SubscriptionArgs> extends SubscriptionHandle<SA> {
5
+ #private;
6
+ constructor(publicationName: string, args: SA, handler: (fetched: unknown) => void, immediately?: boolean);
7
+ ids: Set<string>;
8
+ query: Filter<D> | null;
9
+ projection: null | Projection;
10
+ isProjectionInclusive: boolean;
11
+ fields: null | Set<string>;
12
+ sort: null | Sort;
13
+ match?: (doc: D) => boolean;
14
+ changed(next: ChangeStreamDocument<D> | null): Promise<void>;
15
+ updates: unknown[];
16
+ flushUpdates: () => void;
17
+ collectionChangeListener: (next: ChangeStreamDocument<D>) => Promise<void>;
18
+ }
19
+ //# sourceMappingURL=CollectionMapSubscriptionHandle.d.ts.map
@@ -0,0 +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;IAGxB,YAAY,aAOV;IAEF,wBAAwB,SAAgB,oBAAoB,CAAC,CAAC,CAAC,mBAwB7D;CAGF"}
@@ -0,0 +1,21 @@
1
+ import type { SubscriptionHandle } from "./SubscriptionHandle";
2
+ import type { PublicationProps, SubscriptionArgs } from "./types";
3
+ declare global {
4
+ var __insite_publications: Map<string, Publication>;
5
+ }
6
+ export declare const publications: Map<string, Publication<SubscriptionArgs>>;
7
+ export declare class Publication<SA extends SubscriptionArgs = SubscriptionArgs> {
8
+ constructor(name: string, props?: PublicationProps<SA>);
9
+ readonly name: string;
10
+ onSubscribe?: PublicationProps<SA>["onSubscribe"];
11
+ onUnsubscribe?: PublicationProps<SA>["onUnsubscribe"];
12
+ type: string;
13
+ subscriptions: Set<SubscriptionHandle<SA>>;
14
+ fetch?(...args: SA): unknown;
15
+ fetchSubscription(subscription: SubscriptionHandle<SA>, ..._: unknown[]): unknown;
16
+ subscribe(subscription: SubscriptionHandle<SA>): void;
17
+ changed(reason: unknown): void;
18
+ unsubscribe(subscription: SubscriptionHandle<SA>): void;
19
+ static publications: Map<string, Publication<SubscriptionArgs>>;
20
+ }
21
+ //# sourceMappingURL=Publication.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Publication.d.ts","sourceRoot":"","sources":["../src/Publication.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGlE,OAAO,CAAC,MAAM,CAAC;IACd,IAAI,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACpD;AAED,eAAO,MAAM,YAAY,4CAEd,CAAC;AAEZ,qBAAa,WAAW,CAAC,EAAE,SAAS,gBAAgB,GAAG,gBAAgB;gBAC1D,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,gBAAgB,CAAC,EAAE,CAAC;IAUtD,QAAQ,CAAC,IAAI,SAAC;IACd,WAAW,CAAC,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;IAClD,aAAa,CAAC,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;IAEtD,IAAI,SAAY;IAEhB,aAAa,8BAAqC;IAElD,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,OAAO;IAE5B,iBAAiB,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE;IAIvE,SAAS,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAE,CAAC;IAM9C,OAAO,CAAC,MAAM,EAAE,OAAO;IAMvB,WAAW,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAE,CAAC;IAOhD,MAAM,CAAC,YAAY,6CAAgB;CAEnC"}
@@ -0,0 +1,12 @@
1
+ import { Publication } from "./Publication";
2
+ import type { SubscriptionArgs, SubscriptionHandler } from "./types";
3
+ export declare class SubscriptionHandle<SA extends SubscriptionArgs> {
4
+ constructor(publicationName: string, args: SA, handler: SubscriptionHandler, immediately?: boolean, prevent?: boolean);
5
+ publication: Publication<SA>;
6
+ args: SA;
7
+ handler: SubscriptionHandler;
8
+ changed(reason: unknown): Promise<void>;
9
+ cancel(): void;
10
+ renew(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=SubscriptionHandle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubscriptionHandle.d.ts","sourceRoot":"","sources":["../src/SubscriptionHandle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAgB,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAGrE,qBAAa,kBAAkB,CAAC,EAAE,SAAS,gBAAgB;gBAEzD,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,EAAE,EACR,OAAO,EAAE,mBAAmB,EAC5B,WAAW,CAAC,EAAE,OAAO,EACrB,OAAO,CAAC,EAAE,OAAO;IAsBlB,WAAW,EAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAC9B,IAAI,EAAG,EAAE,CAAC;IACV,OAAO,EAAG,mBAAmB,CAAC;IAExB,OAAO,CAAC,MAAM,EAAE,OAAO;IAK7B,MAAM;IAMN,KAAK;CASL"}
@@ -0,0 +1,6 @@
1
+ export * from "./CollectionMapPublication";
2
+ export * from "./CollectionMapSubscriptionHandle";
3
+ export * from "./Publication";
4
+ export * from "./SubscriptionHandle";
5
+ export type { Projection } from "./types";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import g from"sift";var l=globalThis.__insite_publications??=new Map,f=class{constructor(e,s){this.name=e,Object.assign(this,s),l.set(e,this)}type="object";subscriptions=new Set;fetch(){}fetchSubscription(e){return this.fetch(...e.args)}subscribe(e){this.subscriptions.add(e),this.onSubscribe?.(e)}changed(e){for(let s of this.subscriptions)s.changed(e)}unsubscribe(e){this.onUnsubscribe?.(e),this.subscriptions.delete(e)}};function h(r,e,s=!0,i=!0){if(e)if(s){let n={};for(let t in e){let o=e[t];n[t]=typeof o=="object"?Array.isArray(r[t])?r[t].map(a=>h(a,o,!0,!1)):h(r[t],o,!0,!1):r[t]}return i&&e._id===0&&delete n._id,n}else{let n={...r};for(let t in e){let o=e[t];typeof o=="object"?n[t]=Array.isArray(r[t])?r[t].map(a=>h(a,o,!1,!1)):h(r[t],o,!1,!1):delete n[t]}return n}return r}var b=class extends f{constructor(e,s,i,n){super(e,{collection:s,queryProps:i,transform:n})}type="map";skipSymbol=Symbol("skip");skip(e){e[this.skipSymbol]=!0}makeQueryProps(e){let{query:s=null,projection:i=null,sort:n=null,triggers:t}=(typeof this.queryProps=="function"?this.queryProps(...e):this.queryProps)||{},o=null,a=null;if(i){for(let u in i)if(o=!!i[u],u!=="_id")break;o&&(a=new Set([...Object.keys(s),...Object.keys(i),...t??[]]),a.delete("_id"),i._id!==0&&(i._id=1))}return{query:s,projection:i,isProjectionInclusive:o,fields:a,sort:n,args:e}}async fetchSubscription(e,s){if(e.query){if(s){let{_id:t}=s.documentKey;if(s.operationType==="insert"||s.operationType!="delete"&&e.match(s.fullDocument)){let o=h(s.fullDocument,e.projection,e.isProjectionInclusive);return this.transform?.(o,e.args),e.ids.has(t)?["u",o,s.updateDescription&&Object.keys(s.updateDescription.updatedFields)]:(e.ids.add(t),["c",o])}return e.ids.delete(t),["d",t]}let i=this.collection.find(e.query);e.projection&&i.project(e.projection),e.sort&&i.sort(e.sort);let n=await i.toArray();if(e.ids)if(e.ids.clear(),this.transform)for(let t of n)e.ids.add(t._id),this.transform(t,e.args);else for(let t of n)e.ids.add(t._id);else if(this.transform)for(let t of n)this.transform(t,e.args);return["i",n,e.sort]}return null}async fetch(...e){return[await this.fetchSubscription(this.makeQueryProps(e),null)]}changed(e){return Promise.all(this.subscriptions.map(s=>s.changed(e)))}onSubscribe(e){Object.assign(e,this.makeQueryProps(e.args)),e.query&&(e.match=g(e.query),this.collection.changeListeners.add(e.collectionChangeListener))}flushInitial(){return Promise.all(this.subscriptions.map(async e=>{e.handler([await this.fetchSubscription(e)]),e.updates=[]}))}onUnsubscribe(e){e.query&&this.collection.changeListeners.delete(e.collectionChangeListener)}};var c=class{constructor(e,s,i,n,t){this.publication=l.get(e),this.publication?(this.args=s,this.handler=i,t||(this.publication.subscribe(this),n&&this.changed(null))):process.env.NODE_ENV==="development"&&console.error("Unknown publication",e)}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 d=class extends c{constructor(e,s,i,n){super(e,s,i,n,!0),this.publication&&(this.publication.subscribe(this),this.skipSymbol=this.publication.skipSymbol,n&&this.changed(null))}ids=new Set;async changed(e){this.handler([await this.publication.fetchSubscription(this,e)])}updates=[];flushTimeout=null;handleUpdatedFieldsSome=e=>this.fields.has(e);flushUpdates=()=>{this.updates.length&&(this.handler(this.updates),this.updates=[])};collectionChangeListener=async e=>{!e[this.skipSymbol]&&(this.ids.has(e.documentKey._id)?e.operationType!=="update"||!this.fields||Object.keys(e.updateDescription.updatedFields).some(this.handleUpdatedFieldsSome):this.match(e.fullDocument))&&(clearTimeout(this.flushTimeout),this.updates.push(await this.publication.fetchSubscription(this,e)),this.flushTimeout=setTimeout(this.flushUpdates,1))}};var p=class extends Map{subscribe=this.set;renew(){return Promise.all(this.mapValues(e=>e.renew()))}cancel(e){this.get(e)?.cancel(),this.delete(e)}};var S={object:c,map:d},m=class r{constructor(e,s={}){let{users:i}=s;i&&i.on("user-permissions-change",r.handleUserPermissionsChange),e.on("client-connect",r.handleClientConnect),e.on("client-session",r.handleClientSession),e.on("client-message:s-s",r.handleClientSubscribe),e.on("client-message:s-u",r.handleClientUnsubscribe),e.on("client-close",r.handleClientClose)}static handleUserPermissionsChange(e){if(e.webSockets)for(let s of e.webSockets)s.subscriptions.renew()}static handleClientConnect(e){e.subscriptions=new p}static handleClientSession(e){e.subscriptions.renew()}static handleClientSubscribe(e,s,i,n,t,o){let a=S[s];if(a&&l.get(i)?.type===s){let u=y=>e.sendMessage("s-c",n,y);e.subscriptions.subscribe(n,new a(i,[e,...t],u,o))}}static handleClientUnsubscribe(e,s){e.subscriptions.cancel(s)}static handleClientClose(e){for(let s of e.subscriptions.values())s.cancel()}};export{b as CollectionMapPublication,f as Publication,c as SubscriptionHandle,m as SubscriptionHandler,l as publications};
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(e),this.collection=t,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
- "sources": ["../src/CollectionMapPublication.js", "../src/Publication.js", "../src/SubscriptionHandle.js", "../src/CollectionMapSubscriptionHandle.js", "../src/ws/Subscriptions.js", "../src/ws/SubscriptionHandler.js"],
4
- "sourcesContent": ["import sift from \"sift\";\nimport { Publication } from \"./Publication\";\n\n\nfunction projectDocument(document, projection, isInclusive = true, isTop = true) {\n\tif (projection)\n\t\tif (isInclusive) {\n\t\t\tconst projected = {};\n\t\t\tfor (const key in projection) {\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 => 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;\n\t\t} else {\n\t\t\tconst projected = { ...document };\n\t\t\tfor (const key in projection) {\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 => projectDocument(item, subprojection, false, false)) :\n\t\t\t\t\t\t\tprojectDocument(document[key], subprojection, false, false);\n\t\t\t\t else\n\t\t\t\t\tdelete projected[key];\n\t\t\t}\n\t\t\t\n\t\t\treturn projected;\n\t\t}\n\t\n\treturn document;\n}\n\n\nexport class CollectionMapPublication extends Publication {\n\tconstructor(name, collection, queryProps, transform) {\n\t\tsuper(name, { collection, queryProps, transform });\n\t\t\n\t}\n\t\n\ttype = \"map\";\n\t\n\tskipSymbol = Symbol(\"skip\");\n\t\n\tskip(next) {\n\t\tnext[this.skipSymbol] = true;\n\t\t\n\t}\n\t\n\tmakeQueryProps(args) {\n\t\tconst { query = null, projection = null, sort = null, triggers } = (typeof this.queryProps == \"function\" ? this.queryProps(...args) : this.queryProps) || {};\n\t\t\n\t\tlet isProjectionInclusive = null;\n\t\tlet fields = null;\n\t\tif (projection) {\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, next) {\n\t\tif (subscription.query) {\n\t\t\tif (next) {\n\t\t\t\tconst { _id } = next.documentKey;\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, subscription.args);\n\t\t\t\t\tif (subscription.ids.has(_id))\n\t\t\t\t\t\treturn [ \"u\"/* update */, doc, next.updateDescription && 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();\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\tasync fetch(...args) {\n\t\treturn [ await this.fetchSubscription(this.makeQueryProps(args), null) ];\n\t}\n\t\n\tchanged(changed) {\n\t\treturn Promise.all(this.subscriptions.map(subscription => subscription.changed(changed)));\n\t}\n\t\n\tonSubscribe(subscription) {\n\t\tObject.assign(subscription, this.makeQueryProps(subscription.args));\n\t\t\n\t\tif (subscription.query) {\n\t\t\tsubscription.match = sift(subscription.query);\n\t\t\tthis.collection.changeListeners.add(subscription.collectionChangeListener);\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\tsubscription.handler([ await this.fetchSubscription(subscription) ]);\n\t\t\tsubscription.updates = [];\n\t\t\t\n\t\t}));\n\t}\n\t\n\tonUnsubscribe(subscription) {\n\t\tif (subscription.query)\n\t\t\tthis.collection.changeListeners.delete(subscription.collectionChangeListener);\n\t\t\n\t}\n\t\n}\n", "export const publications =\n\tglobalThis.__insite_publications ??=\n\t\tnew Map();\n\nexport class Publication {\n\tconstructor(name, props) {\n\t\tthis.name = name;\n\t\tObject.assign(this, props);\n\t\t\n\t\tpublications.set(name, this);\n\t\t\n\t}\n\t\n\ttype = \"object\";\n\t\n\tsubscriptions = new Set();\n\t\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tfetch() {}\n\t\n\tfetchSubscription(subscription) {\n\t\treturn this.fetch(...subscription.args);\n\t}\n\t\n\tsubscribe(subscription) {\n\t\tthis.subscriptions.add(subscription);\n\t\tthis.onSubscribe?.(subscription);\n\t\t\n\t}\n\t\n\tchanged(changed) {\n\t\tfor (const subscription of this.subscriptions)\n\t\t\tsubscription.changed(changed);\n\t\t\n\t}\n\t\n\tunsubscribe(subscription) {\n\t\tthis.onUnsubscribe?.(subscription);\n\t\tthis.subscriptions.delete(subscription);\n\t\t\n\t}\n\t\n}\n", "import { publications } from \"./Publication\";\n\n\nexport class SubscriptionHandle {\n\tconstructor(publicationName, args, handler, immediately, prevent) {\n\t\tthis.publication = publications.get(publicationName);\n\t\t\n\t\tif (this.publication) {\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\tasync changed(changed) {\n\t\tthis.handler(await this.publication.fetchSubscription(this, changed), changed);\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 { SubscriptionHandle } from \"./SubscriptionHandle\";\n\n\nexport class CollectionMapSubscriptionHandle extends SubscriptionHandle {\n\tconstructor(publicationName, args, handler, immediately) {\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\tthis.skipSymbol = this.publication.skipSymbol;\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();\n\t\n\tasync changed(next) {\n\t\tthis.handler([ await this.publication.fetchSubscription(this, next) ]);\n\t\t\n\t}\n\t\n\tupdates = [];\n\tflushTimeout = null;\n\t\n\thandleUpdatedFieldsSome = field => this.fields.has(field);\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 => {\n\t\t\n\t\tif (\n\t\t\t!next[this.skipSymbol] &&\n\t\t\t(this.ids.has(next.documentKey._id) ? (\n\t\t\t\tnext.operationType !== \"update\" ||\n\t\t\t\t!this.fields ||\n\t\t\t\tObject.keys(next.updateDescription.updatedFields).some(this.handleUpdatedFieldsSome)\n\t\t\t) : this.match(next.fullDocument))\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", "export class Subscriptions extends Map {\n\t\n\tsubscribe = this.set;\n\t\n\trenew() {\n\t\treturn Promise.all(this.mapValues(subscription => subscription.renew()));\n\t}\n\t\n\tcancel(key) {\n\t\tthis.get(key)?.cancel();\n\t\tthis.delete(key);\n\t\t\n\t}\n\t\n}\n", "import { CollectionMapSubscriptionHandle } from \"../CollectionMapSubscriptionHandle\";\nimport { publications } from \"../Publication\";\nimport { SubscriptionHandle } from \"../SubscriptionHandle\";\nimport { Subscriptions } from \"./Subscriptions\";\n\n\nconst handlesByType = {\n\tobject: SubscriptionHandle,\n\tmap: CollectionMapSubscriptionHandle\n};\n\n\nexport class SubscriptionHandler {\n\tconstructor(wss, options = {}) {\n\t\t\n\t\tconst {\n\t\t\tusers\n\t\t} = options;\n\t\t\n\t\tif (users)\n\t\t\tusers.on(\"user-permissions-change\", SubscriptionHandler.handleUserPermissionsChange);\n\t\t\n\t\twss.on(\"client-connect\", SubscriptionHandler.handleClientConnect);\n\t\twss.on(\"client-session\", SubscriptionHandler.handleClientSession);\n\t\twss.on(\"client-message:s-s\"/* subscription subscribe */, SubscriptionHandler.handleClientSubscribe);\n\t\twss.on(\"client-message:s-u\"/* subscription unsubscribe */, SubscriptionHandler.handleClientUnsubscribe);\n\t\twss.on(\"client-close\", SubscriptionHandler.handleClientClose);\n\t\t\n\t}\n\t\n\t\n\tstatic handleUserPermissionsChange(user) {\n\t\tif (user.webSockets)\n\t\t\tfor (const ws of user.webSockets)\n\t\t\t\tws.subscriptions.renew();\n\t\t\n\t}\n\t\n\tstatic handleClientConnect(ws) {\n\t\tws.subscriptions = new Subscriptions();\n\t\t\n\t}\n\t\n\tstatic handleClientSession(ws) {\n\t\tws.subscriptions.renew();\n\t\t\n\t}\n\t\n\tstatic handleClientSubscribe(ws, subscriptionType, publicationName, i, args, immediately) {\n\t\tconst Handle = handlesByType[subscriptionType];\n\t\t\n\t\tif (Handle && publications.get(publicationName)?.type === subscriptionType) {\n\t\t\tconst handler = data => ws.sendMessage(\"s-c\"/* subscription changed */, i, data);\n\t\t\tws.subscriptions.subscribe(i, new Handle(publicationName, [ ws, ...args ], handler, immediately));\n\t\t}\n\t\t\n\t}\n\t\n\tstatic handleClientUnsubscribe(ws, i) {\n\t\tws.subscriptions.cancel(i);\n\t\t\n\t}\n\t\n\tstatic handleClientClose(ws) {\n\t\tfor (const subscription of ws.subscriptions.values())\n\t\t\tsubscription.cancel();\n\t\t\n\t}\n\t\n}\n"],
5
- "mappings": "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",
6
- "names": ["sift", "publications", "Publication", "name", "props", "subscription", "changed", "projectDocument", "document", "projection", "isInclusive", "isTop", "projected", "key", "subprojection", "item", "CollectionMapPublication", "Publication", "name", "collection", "queryProps", "transform", "next", "args", "query", "sort", "triggers", "isProjectionInclusive", "fields", "subscription", "_id", "doc", "cursor", "array", "changed", "sift", "SubscriptionHandle", "publicationName", "args", "handler", "immediately", "prevent", "publications", "changed", "CollectionMapSubscriptionHandle", "SubscriptionHandle", "publicationName", "args", "handler", "immediately", "next", "field", "Subscriptions", "subscription", "key", "handlesByType", "SubscriptionHandle", "CollectionMapSubscriptionHandle", "SubscriptionHandler", "_SubscriptionHandler", "wss", "options", "users", "user", "ws", "Subscriptions", "subscriptionType", "publicationName", "i", "args", "immediately", "Handle", "publications", "handler", "data", "subscription"]
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\tname: string,\n\t\tcollection: InSiteWatchedCollection<D>,\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\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", "name", "collection", "queryProps", "transform", "next", "args", "query", "sort", "triggers", "isProjectionInclusive", "fields", "subscription", "CollectionMapSubscriptionHandle", "_id", "doc", "cursor", "array", "reason", "sift", "fetched"]
7
7
  }
@@ -0,0 +1,16 @@
1
+ import type { Document } from "insite-db";
2
+ import type { SubscriptionHandle } from "./SubscriptionHandle";
3
+ export type PartialWithId<D extends Document> = {
4
+ _id: string;
5
+ } & Partial<D>;
6
+ export type PublicationProps<SA extends SubscriptionArgs> = {
7
+ type?: "object";
8
+ fetch?: (...args: SA) => unknown;
9
+ fetchSubscription?: (subscription: SubscriptionHandle<SA>) => unknown;
10
+ onSubscribe?: (subscription: SubscriptionHandle<SA>) => void;
11
+ onUnsubscribe?: (subscription: SubscriptionHandle<SA>) => void;
12
+ };
13
+ export type SubscriptionArgs = unknown[];
14
+ export type SubscriptionHandler = (fetched: unknown, reason?: unknown) => void;
15
+ export type Projection = Record<string, boolean | number>;
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +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,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Document } from "insite-db";
2
+ import type { AbilitiesSchema } from "insite-users-server";
3
+ import { CollectionMapPublication as GenericCollectionMapPublication } from "../CollectionMapPublication";
4
+ import { SubscriptionArgs } from "./types";
5
+ export declare class CollectionMapPublication<D extends Document = Document, AS extends AbilitiesSchema = AbilitiesSchema, RA extends unknown[] = unknown[]> extends GenericCollectionMapPublication<D, SubscriptionArgs<AS, RA>> {
6
+ constructor(...args: ConstructorParameters<typeof GenericCollectionMapPublication<D, SubscriptionArgs<AS, RA>>>);
7
+ }
8
+ //# sourceMappingURL=CollectionMapPublication.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectionMapPublication.d.ts","sourceRoot":"","sources":["../../src/ws/CollectionMapPublication.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,IAAI,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC1G,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG3C,qBAAa,wBAAwB,CACpC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,EAAE,SAAS,eAAe,GAAG,eAAe,EAC5C,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,CAC/B,SAAQ,+BAA+B,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAEzD,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,+BAA+B,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;CAG/G"}
@@ -0,0 +1,8 @@
1
+ import type { Document } from "insite-db";
2
+ import type { AbilitiesSchema } from "insite-users-server";
3
+ import { CollectionMapSubscriptionHandle as GenericCollectionMapSubscriptionHandle } from "../CollectionMapSubscriptionHandle";
4
+ import { SubscriptionArgs } from "./types";
5
+ export declare class CollectionMapSubscriptionHandle<D extends Document = Document, AS extends AbilitiesSchema = AbilitiesSchema, RA extends unknown[] = unknown[]> extends GenericCollectionMapSubscriptionHandle<D, SubscriptionArgs<AS, RA>> {
6
+ constructor(...args: ConstructorParameters<typeof GenericCollectionMapSubscriptionHandle<D, SubscriptionArgs<AS, RA>>>);
7
+ }
8
+ //# sourceMappingURL=CollectionMapSubscriptionHandle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectionMapSubscriptionHandle.d.ts","sourceRoot":"","sources":["../../src/ws/CollectionMapSubscriptionHandle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACN,+BAA+B,IAAI,sCAAsC,EACzE,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG3C,qBAAa,+BAA+B,CAC3C,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,EAAE,SAAS,eAAe,GAAG,eAAe,EAC5C,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,CAC/B,SAAQ,sCAAsC,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAEhE,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,sCAAsC,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;CAGtH"}
@@ -0,0 +1,7 @@
1
+ import type { AbilitiesSchema } from "insite-users-server";
2
+ import { Publication as GenericPublication } from "../Publication";
3
+ import { SubscriptionArgs } from "./types";
4
+ export declare class Publication<AS extends AbilitiesSchema = AbilitiesSchema, RA extends unknown[] = unknown[]> extends GenericPublication<SubscriptionArgs<AS, RA>> {
5
+ constructor(...args: ConstructorParameters<typeof GenericPublication<SubscriptionArgs<AS, RA>>>);
6
+ }
7
+ //# sourceMappingURL=Publication.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Publication.d.ts","sourceRoot":"","sources":["../../src/ws/Publication.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG3C,qBAAa,WAAW,CACvB,EAAE,SAAS,eAAe,GAAG,eAAe,EAC5C,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,CAC/B,SAAQ,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAEzC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;CAG/F"}
@@ -0,0 +1,7 @@
1
+ import type { AbilitiesSchema } from "insite-users-server";
2
+ import { SubscriptionHandle as GenericSubscriptionHandle } from "../SubscriptionHandle";
3
+ import { SubscriptionArgs } from "./types";
4
+ export declare class SubscriptionHandle<AS extends AbilitiesSchema = AbilitiesSchema, RA extends unknown[] = unknown[]> extends GenericSubscriptionHandle<SubscriptionArgs<AS, RA>> {
5
+ constructor(...args: ConstructorParameters<typeof GenericSubscriptionHandle<SubscriptionArgs<AS, RA>>>);
6
+ }
7
+ //# sourceMappingURL=SubscriptionHandle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubscriptionHandle.d.ts","sourceRoot":"","sources":["../../src/ws/SubscriptionHandle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,IAAI,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG3C,qBAAa,kBAAkB,CAC9B,EAAE,SAAS,eAAe,GAAG,eAAe,EAC5C,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,CAC/B,SAAQ,yBAAyB,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAEhD,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,yBAAyB,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;CAGtG"}
@@ -0,0 +1,9 @@
1
+ import type { InSiteWebSocketServer, InSiteWebSocketServerClient } from "insite-ws/server";
2
+ import { AbilitiesSchema } from "insite-users-server";
3
+ import { WithUser } from "./types";
4
+ export declare class SubscriptionHandler<AS extends AbilitiesSchema> {
5
+ #private;
6
+ constructor(wss: InSiteWebSocketServer);
7
+ renewSubscriptionsFor(webSockets: WithUser<InSiteWebSocketServerClient, AS>[]): void;
8
+ }
9
+ //# sourceMappingURL=SubscriptionHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubscriptionHandler.d.ts","sourceRoot":"","sources":["../../src/ws/SubscriptionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKtD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMnC,qBAAa,mBAAmB,CAAC,EAAE,SAAS,eAAe;;gBAC9C,GAAG,EAAE,qBAAqB;IActC,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC,2BAA2B,EAAE,EAAE,CAAC,EAAE;CAiD7E"}
@@ -0,0 +1,9 @@
1
+ import type { AbilitiesSchema } from "insite-users-server";
2
+ import { CollectionMapSubscriptionHandle } from "./CollectionMapSubscriptionHandle";
3
+ import { SubscriptionHandle } from "./SubscriptionHandle";
4
+ export declare class Subscriptions<AS extends AbilitiesSchema> extends Map<number | string, CollectionMapSubscriptionHandle<AS> | SubscriptionHandle<AS>> {
5
+ subscribe: (key: string | number, value: CollectionMapSubscriptionHandle<AS, AbilitiesSchema, unknown[]> | SubscriptionHandle<AS, unknown[]>) => this;
6
+ renew(): Promise<void[]>;
7
+ cancel(key: number | string): void;
8
+ }
9
+ //# sourceMappingURL=Subscriptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Subscriptions.d.ts","sourceRoot":"","sources":["../../src/ws/Subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,qBAAa,aAAa,CAAC,EAAE,SAAS,eAAe,CAAE,SAAQ,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,+BAA+B,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAEhJ,SAAS,6IAAY;IAErB,KAAK;IAIL,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAM3B"}
@@ -0,0 +1,8 @@
1
+ export { Projection } from "../types";
2
+ export * from "./CollectionMapPublication";
3
+ export * from "./CollectionMapSubscriptionHandle";
4
+ export * from "./Publication";
5
+ export * from "./SubscriptionHandle";
6
+ export * from "./SubscriptionHandler";
7
+ export { WithUser } from "./types";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ws/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ import P 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,s,n,i){let r=l.get(e);r?(this.publication=r,this.args=t,this.handler=s,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 a=class extends p{constructor(e,t,s,n){super(e,t,s,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=>{!A.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 m(o,e,t=!0,s=!0){if(e)if(t){let n={};for(let i in e){let r=e[i];n[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 s&&e._id===0&&delete n._id,n}else{let n={...o};for(let i in e){let r=e[i];typeof r=="object"?n[i]=Array.isArray(o[i])?o[i].map(c=>m(c,r,!1,!1)):m(o[i],r,!1,!1):delete n[i]}return n}return o}var A=new WeakSet,d=class extends u{constructor(e,t,s,n){super(e),this.collection=t,this.queryProps=s,this.transform=n}type="map";collection;queryProps;transform;skip(e){A.add(e)}makeQueryProps(e){let{query:t=null,projection:s=null,sort:n=null,triggers:i}=(typeof this.queryProps=="function"?this.queryProps(...e):this.queryProps)||{},r=!1,c=null;if(s){for(let S in s)if(r=!!s[S],S!=="_id")break;r&&(c=new Set([...Object.keys(t??{}),...Object.keys(s),...i??[]]),c.delete("_id"),s._id!==0&&(s._id=1))}return{query:t,projection:s,isProjectionInclusive:r,fields:c,sort:n,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 s=this.collection.find(e.query);e.projection&&s.project(e.projection),e.sort&&s.sort(e.sort);let n=await s.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 a&&(Object.assign(e,this.makeQueryProps(e.args)),e.query&&(e.match=P(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 g=class extends d{constructor(...e){super(...e)}};var h=class extends a{constructor(...e){super(...e)}};var D=class extends u{constructor(...e){super(...e)}};var b=class extends p{constructor(...e){super(...e)}};var f=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 k=["object","map"],y=class{constructor(e){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.#s),e.on("client-close",this.#r),e.on("should-renew-subscriptions",this.renewSubscriptionsFor)}#e=new WeakMap;renewSubscriptionsFor(e){for(let t of e)this.#e.get(t)?.renew()}#t(e){this.#e.set(e,new f)}#i(e){this.#e.get(e)?.renew()}#n(e,t,s,n,i,r){if(k.includes(t)&&l.get(s)?.type===t){let c=S=>e.sendMessage("s-c",n,S);this.#e.get(e)?.subscribe(n,t==="map"?new h(s,[e,...i],c,r):new b(s,[e,...i],c,r))}}#s(e,t){this.#e.get(e)?.cancel(t)}#r(e){for(let t of this.#e.get(e)?.values()??[])t.cancel()}};export{g as CollectionMapPublication,h as CollectionMapSubscriptionHandle,D as Publication,b as SubscriptionHandle,y as SubscriptionHandler};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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/Subscriptions.ts", "../../src/ws/SubscriptionHandler.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\tname: string,\n\t\tcollection: InSiteWatchedCollection<D>,\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\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 { Document } from \"insite-db\";\nimport type { AbilitiesSchema } from \"insite-users-server\";\nimport { CollectionMapPublication as GenericCollectionMapPublication } from \"../CollectionMapPublication\";\nimport { SubscriptionArgs } from \"./types\";\n\n\nexport class CollectionMapPublication<\n\tD extends Document = Document,\n\tAS extends AbilitiesSchema = AbilitiesSchema,\n\tRA extends unknown[] = unknown[]\n> extends GenericCollectionMapPublication<D, SubscriptionArgs<AS, RA>> {\n\t// eslint-disable-next-line no-useless-constructor\n\tconstructor(...args: ConstructorParameters<typeof GenericCollectionMapPublication<D, SubscriptionArgs<AS, RA>>>) {\n\t\tsuper(...args);\n\t}\n}\n", "import type { Document } from \"insite-db\";\nimport type { AbilitiesSchema } from \"insite-users-server\";\nimport {\n\tCollectionMapSubscriptionHandle as GenericCollectionMapSubscriptionHandle\n} from \"../CollectionMapSubscriptionHandle\";\nimport { SubscriptionArgs } from \"./types\";\n\n\nexport class CollectionMapSubscriptionHandle<\n\tD extends Document = Document,\n\tAS extends AbilitiesSchema = AbilitiesSchema,\n\tRA extends unknown[] = unknown[]\n> extends GenericCollectionMapSubscriptionHandle<D, SubscriptionArgs<AS, RA>> {\n\t// eslint-disable-next-line no-useless-constructor\n\tconstructor(...args: ConstructorParameters<typeof GenericCollectionMapSubscriptionHandle<D, SubscriptionArgs<AS, RA>>>) {\n\t\tsuper(...args);\n\t}\n}\n", "import type { AbilitiesSchema } from \"insite-users-server\";\nimport { Publication as GenericPublication } from \"../Publication\";\nimport { SubscriptionArgs } from \"./types\";\n\n\nexport class Publication<\n\tAS extends AbilitiesSchema = AbilitiesSchema,\n\tRA extends unknown[] = unknown[]\n> extends GenericPublication<SubscriptionArgs<AS, RA>> {\n\t// eslint-disable-next-line no-useless-constructor\n\tconstructor(...args: ConstructorParameters<typeof GenericPublication<SubscriptionArgs<AS, RA>>>) {\n\t\tsuper(...args);\n\t}\n}\n", "import type { AbilitiesSchema } from \"insite-users-server\";\nimport { SubscriptionHandle as GenericSubscriptionHandle } from \"../SubscriptionHandle\";\nimport { SubscriptionArgs } from \"./types\";\n\n\nexport class SubscriptionHandle<\n\tAS extends AbilitiesSchema = AbilitiesSchema,\n\tRA extends unknown[] = unknown[]\n> extends GenericSubscriptionHandle<SubscriptionArgs<AS, RA>> {\n\t// eslint-disable-next-line no-useless-constructor\n\tconstructor(...args: ConstructorParameters<typeof GenericSubscriptionHandle<SubscriptionArgs<AS, RA>>>) {\n\t\tsuper(...args);\n\t}\n}\n", "import type { AbilitiesSchema } from \"insite-users-server\";\nimport { CollectionMapSubscriptionHandle } from \"./CollectionMapSubscriptionHandle\";\nimport { 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", "import type { InSiteWebSocketServer, InSiteWebSocketServerClient } from \"insite-ws/server\";\nimport { AbilitiesSchema } from \"insite-users-server\";\nimport { publications } from \"../Publication\";\nimport { CollectionMapSubscriptionHandle } from \"./CollectionMapSubscriptionHandle\";\nimport { SubscriptionHandle } from \"./SubscriptionHandle\";\nimport { Subscriptions } from \"./Subscriptions\";\nimport { WithUser } from \"./types\";\n\n\nconst types = [ \"object\", \"map\" ] as const;\n\n\nexport class SubscriptionHandler<AS extends AbilitiesSchema> {\n\tconstructor(wss: InSiteWebSocketServer) {\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}\n\t\n\t#wsSubscriptionMap = new WeakMap<WithUser<InSiteWebSocketServerClient, AS>, Subscriptions<AS>>();\n\t\n\trenewSubscriptionsFor(webSockets: WithUser<InSiteWebSocketServerClient, 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: WithUser<InSiteWebSocketServerClient, AS>) {\n\t\tthis.#wsSubscriptionMap.set(wssc, new Subscriptions());\n\t\t\n\t}\n\t\n\t#handleClientSession(wssc: WithUser<InSiteWebSocketServerClient, AS>) {\n\t\tthis.#wsSubscriptionMap.get(wssc)?.renew();\n\t\t\n\t}\n\t\n\t#handleClientSubscribe(\n\t\twssc: WithUser<InSiteWebSocketServerClient, AS>,\n\t\tsubscriptionType: typeof types[number],\n\t\tpublicationName: string,\n\t\ti: number | string,\n\t\targs: unknown[],\n\t\timmediately?: boolean\n\t) {\n\t\t\n\t\tif (types.includes(subscriptionType) && publications.get(publicationName)?.type === subscriptionType) {\n\t\t\tconst handler = (data: unknown) => wssc.sendMessage(\"s-c\"/* subscription changed */, i, data);\n\t\t\t\n\t\t\tthis.#wsSubscriptionMap.get(wssc)?.subscribe(\n\t\t\t\ti,\n\t\t\t\tsubscriptionType === \"map\" ?\n\t\t\t\t\tnew CollectionMapSubscriptionHandle(publicationName, [ wssc, ...args ], handler, immediately) :\n\t\t\t\t\tnew SubscriptionHandle(publicationName, [ wssc, ...args ], handler, immediately)\n\t\t\t);\n\t\t}\n\t\t\n\t}\n\t\n\t#handleClientUnsubscribe(wssc: WithUser<InSiteWebSocketServerClient, AS>, i: number | string) {\n\t\tthis.#wsSubscriptionMap.get(wssc)?.cancel(i);\n\t\t\n\t}\n\t\n\t#handleClientClose(wssc: WithUser<InSiteWebSocketServerClient, 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"],
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", "name", "collection", "queryProps", "transform", "next", "args", "query", "sort", "triggers", "isProjectionInclusive", "fields", "subscription", "CollectionMapSubscriptionHandle", "_id", "doc", "cursor", "array", "reason", "sift", "fetched", "CollectionMapPublication", "args", "CollectionMapSubscriptionHandle", "args", "Publication", "args", "SubscriptionHandle", "args", "Subscriptions", "subscription", "key", "types", "SubscriptionHandler", "wss", "#handleClientConnect", "#handleClientSession", "#handleClientSubscribe", "#handleClientUnsubscribe", "#handleClientClose", "#wsSubscriptionMap", "webSockets", "wssc", "Subscriptions", "subscriptionType", "publicationName", "i", "args", "immediately", "publications", "handler", "data", "CollectionMapSubscriptionHandle", "SubscriptionHandle", "subscription"]
7
+ }
@@ -0,0 +1,9 @@
1
+ import type { InSiteWebSocketServerClient } from "insite-ws/server";
2
+ import type { AbilitiesSchema, Session, User } from "insite-users-server";
3
+ export type WithUser<T, AS extends AbilitiesSchema = AbilitiesSchema> = {
4
+ user?: User<AS>;
5
+ lastUserId?: string;
6
+ session?: Session<AS>;
7
+ } & T;
8
+ export type SubscriptionArgs<AS extends AbilitiesSchema = AbilitiesSchema, RA extends unknown[] = unknown[]> = [WithUser<InSiteWebSocketServerClient, AS>, ...RA];
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ws/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAG1E,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,EAAE,SAAS,eAAe,GAAG,eAAe,IAAI;IACvE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;CACtB,GAAG,CAAC,CAAC;AAEN,MAAM,MAAM,gBAAgB,CAC3B,EAAE,SAAS,eAAe,GAAG,eAAe,EAC5C,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,IAC7B,CAAE,QAAQ,CAAC,2BAA2B,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAE,CAAC"}
package/package.json CHANGED
@@ -1,14 +1,19 @@
1
1
  {
2
2
  "name": "insite-subscriptions-server",
3
- "version": "1.0.240",
3
+ "version": "2.0.1",
4
4
  "description": "inSite subscriptions server side",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.js",
8
- "packageManager": "bun@1.1.12",
8
+ "exports": {
9
+ ".": "./dist/index.js",
10
+ "./ws": "./dist/ws/index.js"
11
+ },
12
+ "packageManager": "bun@1.1.21",
9
13
  "scripts": {
10
14
  "test": "echo \"Error: no test specified\" && exit 1",
11
- "build": "bun .conveyer.js"
15
+ "build": "bun .conveyer.js",
16
+ "postbuild": "tsc -p ."
12
17
  },
13
18
  "repository": {
14
19
  "type": "git",
@@ -22,11 +27,16 @@
22
27
  "author": "Eugene Nesvetaev <dev@nesvet.dev> (https://nesvet.dev/)",
23
28
  "license": "MIT",
24
29
  "dependencies": {
25
- "insite-ws": "^1",
26
- "sift": "^16"
30
+ "sift": "^16.0.1"
27
31
  },
28
32
  "devDependencies": {
29
- "@nesvet/conveyer": "^2",
30
- "@nesvet/eslint-config": "^1"
33
+ "@nesvet/conveyer": "^2.2.1",
34
+ "@nesvet/eslint-config": "^2.0.24",
35
+ "@types/node": "^20.14.13",
36
+ "@types/ws": "^8.5.12",
37
+ "insite-db": "^2.0.0",
38
+ "insite-users-server": "^2.0.0",
39
+ "insite-ws": "^2.0.8",
40
+ "typescript": "^5.5.4"
31
41
  }
32
42
  }