insite-subscriptions-server 2.1.3 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import type { ChangeStreamDocument, Document, Filter, WatchedCollection, Sort } from "insite-db";
1
+ import type { ChangeStreamDocument, Document, Filter, Sort, WatchedCollection } from "insite-db";
2
2
  import { CollectionMapSubscriptionHandle } from "./CollectionMapSubscriptionHandle";
3
3
  import { Publication } from "./Publication";
4
4
  import { SubscriptionHandle } from "./SubscriptionHandle";
@@ -11,11 +11,11 @@ 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: WatchedCollection<D>, name: string, queryProps?: ((...args: SA) => false | null | QueryProps<D> | void) | false | null | QueryProps<D>, transform?: (doc: TransformableDoc<D>, args: SA) => void);
14
+ constructor(collection: WatchedCollection<D>, name: string, queryProps?: ((...args: SA) => QueryProps<D> | false | null | void) | QueryProps<D> | false | null, transform?: (doc: TransformableDoc<D>, args: SA) => void);
15
15
  type: string;
16
16
  collection: WatchedCollection<D>;
17
17
  subscriptions: Set<CollectionMapSubscriptionHandle<D, SA>>;
18
- queryProps: false | ((...args: SA) => false | null | QueryProps<D> | void) | QueryProps<D> | null | undefined;
18
+ queryProps: false | ((...args: SA) => QueryProps<D> | false | null | void) | QueryProps<D> | null | undefined;
19
19
  transform: ((doc: TransformableDoc<D>, args: SA) => void) | undefined;
20
20
  skip(next: ChangeStreamDocument<D>): void;
21
21
  makeQueryProps(args: SA): {
@@ -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,iBAAiB,EACjB,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,iBAAiB,CAAC,CAAC,CAAC,EAChC,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,uBAAC;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"}
1
+ {"version":3,"file":"CollectionMapPublication.d.ts","sourceRoot":"","sources":["../src/CollectionMapPublication.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,oBAAoB,EACpB,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,iBAAiB,EACjB,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,iBAAiB,CAAC,CAAC,CAAC,EAChC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,EAClG,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI;IAUzD,IAAI,SAAS;IAEb,UAAU,uBAAC;IACH,aAAa,EAAE,GAAG,CAAC,+BAA+B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnE,UAAU,qBAfe,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,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"}
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=[];#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};
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.onChange(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.removeChangeListener(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\tWatchedCollection,\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: WatchedCollection<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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",
4
+ "sourcesContent": ["import sift from \"sift\";\nimport type {\n\tChangeStreamDocument,\n\tDocument,\n\tFilter,\n\tSort,\n\tWatchedCollection\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: Projection | null, isInclusive?: boolean, isTop?: boolean): D | Partial<D>;\nfunction projectDocument<D extends Document>(document: D, projection: Projection | null, 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: WatchedCollection<D>,\n\t\tname: string,\n\t\tqueryProps?: ((...args: SA) => QueryProps<D> | false | null | void) | QueryProps<D> | false | null,\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.onChange(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.removeChangeListener(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": "AAAA,OAAOA,MAAU,OCQV,IAAMC,EACZ,WAAW,wBACV,IAAI,IAEOC,EAAN,KAAkE,CACxE,YAAYC,EAAcC,EAA8B,CACvD,KAAK,KAAOD,EAERC,GACH,OAAO,OAAO,KAAMA,CAAK,EAE1BH,EAAa,IAAIE,EAAM,IAAmB,CAE3C,CAES,KACT,YACA,cAEA,KAAO,SAEP,cAAgB,IAAI,IAIpB,kBAAkBE,KAAyCC,EAAc,CACxE,OAAO,KAAK,QAAQ,GAAGD,EAAa,IAAI,CACzC,CAEA,UAAUA,EAAsC,CAC/C,KAAK,cAAc,IAAIA,CAAY,EACnC,KAAK,cAAcA,CAAY,CAEhC,CAEA,QAAQE,EAAkB,CACzB,QAAWF,KAAgB,KAAK,cAC/BA,EAAa,QAAQE,CAAM,CAE7B,CAEA,YAAYF,EAAsC,CACjD,KAAK,gBAAgBA,CAAY,EACjC,KAAK,cAAc,OAAOA,CAAY,CAEvC,CAGA,OAAO,aAAeJ,CAEvB,ECtDO,IAAMO,EAAN,KAAsD,CAC5D,YACCC,EACAC,EACAC,EACAC,EACAC,EACC,CAED,IAAMC,EAAcC,EAAa,IAAIN,CAAe,EAEhDK,GACH,KAAK,YAAcA,EACnB,KAAK,KAAOJ,EACZ,KAAK,QAAUC,EAEVE,IACJ,KAAK,YAAY,UAAU,IAAI,EAE3BD,GACH,KAAK,QAAQ,IAAI,IAGT,QAAQ,IAAI,WAAa,eACnC,QAAQ,MAAM,sBAAuBH,CAAe,CAEtD,CAEA,YACA,KACA,QAEA,MAAM,QAAQO,EAAkB,CAC/B,KAAK,QAAQ,MAAM,KAAK,YAAY,kBAAkB,KAAMA,CAAM,EAAGA,CAAM,CAE5E,CAEA,QAAS,CAER,KAAK,aAAa,YAAY,IAAI,CAEnC,CAEA,OAAQ,CAEP,YAAK,aAAa,YAAY,IAAI,EAElC,KAAK,aAAa,UAAU,IAAI,EAEzB,KAAK,QAAQ,IAAI,CACzB,CAED,EC7CO,IAAMC,EAAN,cAGGC,CAAuB,CAChC,YACCC,EACAC,EACAC,EACAC,EACC,CACD,MAAMH,EAAiBC,EAAMC,EAASC,EAAa,EAAI,EAEnD,KAAK,cACR,KAAK,YAAY,UAAU,IAAI,EAE3BA,GACH,KAAK,QAAQ,IAAI,EAGpB,CAEA,IAAM,IAAI,IAEV,MAA0B,KAC1B,WAAgC,KAChC,sBAAwB,GACxB,OAA6B,KAC7B,KAAoB,KAEpB,MAEA,MAAM,QAAQC,EAAsC,CACnD,KAAK,QAAQ,CAAE,MAAM,KAAK,YAAY,kBAAkB,KAAMA,CAAI,CAAE,CAAC,CAEtE,CAEA,QAAqB,CAAC,EACtBC,GAEA,aAAe,IAAM,CAEhB,KAAK,QAAQ,SAChB,KAAK,QAAQ,KAAK,OAAO,EACzB,KAAK,QAAU,CAAC,EAGlB,EAEA,yBAA2B,MAAOD,GAAkC,CAGlE,CAACE,EAA6B,IAAIF,CAAI,GACtC,gBAAiBA,IAChB,KAAK,IAAI,IAAIA,EAAK,YAAY,GAAwB,EACtDA,EAAK,gBAAkB,UACvB,CAAC,KAAK,QAELA,EAAK,kBAAkB,eACvB,OAAO,KAAKA,EAAK,kBAAkB,aAAa,EAAE,KAAKG,GAAS,KAAK,OAAQ,IAAIA,CAAK,CAAC,EAGxF,iBAAkBH,GAClB,KAAK,MAAOA,EAAK,YAAa,KAG/B,aAAa,KAAKC,EAAa,EAE/B,KAAK,QAAQ,KAAK,MAAM,KAAK,YAAY,kBAAkB,KAAMD,CAAI,CAAC,EAEtE,KAAKC,GAAgB,WAAW,KAAK,aAAc,CAAC,EAGtD,CAGD,EHhEA,SAASG,EAAoCC,EAAaC,EAA+BC,EAAc,GAAMC,EAAQ,GAAM,CAC1H,GAAIF,EACH,GAAIC,EAAa,CAChB,IAAME,EAAqC,CAAC,EAC5C,QAAWC,KAAOJ,EAAY,CAC7B,IAAMK,EAAgBL,EAAWI,CAAG,EACpCD,EAAUC,CAAG,EACZ,OAAOC,GAAiB,SACvB,MAAM,QAAQN,EAASK,CAAG,CAAC,EAC1BL,EAASK,CAAG,EAAE,IAAKE,GAAmBR,EAAgBQ,EAAMD,EAAe,GAAM,EAAK,CAAC,EACvFP,EAAgBC,EAASK,CAAG,EAAGC,EAAe,GAAM,EAAK,EAC1DN,EAASK,CAAG,CACf,CACA,OAAIF,GAASF,EAAW,MAAQ,GAC/B,OAAOG,EAAU,IAEXA,CACR,KAAO,CACN,IAAMA,EAAY,CAAE,GAAGJ,CAAS,EAChC,QAAWK,KAAOJ,EAAY,CAC7B,IAAMK,EAAgBL,EAAWI,CAAG,EAChC,OAAOC,GAAiB,SAC3BF,EAAUC,CAAG,EACZ,MAAM,QAAQL,EAASK,CAAG,CAAC,EAC1BL,EAASK,CAAG,EAAE,IAAKE,GAAmBR,EAAgBQ,EAAMD,EAAe,GAAO,EAAK,CAAC,EACxFP,EAAgBC,EAASK,CAAG,EAAGC,EAAe,GAAO,EAAK,EAE5D,OAAOF,EAAUC,CAAG,CACtB,CAEA,OAAOD,CACR,CAED,OAAOJ,CACR,CAEO,IAAMQ,EAA+B,IAAI,QAUnCC,EAAN,cAGGC,CAAgB,CACzB,YACCC,EACAC,EACAC,EACAC,EACC,CACD,MAAMF,CAAI,EAEV,KAAK,WAAaD,EAClB,KAAK,WAAaE,EAClB,KAAK,UAAYC,CAElB,CAEA,KAAO,MAEP,WAEA,WACA,UAEA,KAAKC,EAA+B,CACnCP,EAA6B,IAAIO,CAAI,CAEtC,CAEA,eAAeC,EAAU,CACxB,GAAM,CACL,MAAAC,EAAQ,KACR,WAAAhB,EAAa,KACb,KAAAiB,EAAO,KACP,SAAAC,CACD,GAAK,OAAO,KAAK,YAAc,WAAa,KAAK,WAAW,GAAGH,CAAI,EAAI,KAAK,aAAe,CAAC,EAExFI,EAAwB,GACxBC,EAAS,KACb,GAAIpB,EAAY,CAEf,QAAWI,KAAOJ,EAEjB,GADAmB,EAAwB,CAAC,CAACnB,EAAWI,CAAG,EACpCA,IAAQ,MACX,MAEEe,IACHC,EAAS,IAAI,IAAI,CAAE,GAAG,OAAO,KAAKJ,GAAS,CAAC,CAAC,EAAG,GAAG,OAAO,KAAKhB,CAAU,EAAG,GAAGkB,GAAY,CAAC,CAAE,CAAC,EAC/FE,EAAO,OAAO,KAAK,EACfpB,EAAW,MAAQ,IACtBA,EAAW,IAAM,GAEpB,CAEA,MAAO,CAAE,MAAAgB,EAAO,WAAAhB,EAAY,sBAAAmB,EAAuB,OAAAC,EAAQ,KAAAH,EAAM,KAAAF,CAAK,CACvE,CAEA,MAAM,kBAAkBM,EAAsCP,EAAsC,CACnG,GAAIO,aAAwBC,GAAmCD,EAAa,MAAO,CAClF,GAAIP,GAAQ,gBAAiBA,EAAM,CAClC,IAAMS,EAAMT,EAAK,YAAY,IAE7B,GAAIA,EAAK,gBAAkB,UAAaA,EAAK,gBAAkB,UAAYO,EAAa,MAAOP,EAAK,YAAa,EAAI,CACpH,IAAMU,EAAM1B,EAAgBgB,EAAK,aAAeO,EAAa,WAAYA,EAAa,qBAAqB,EAE3G,OADA,KAAK,YAAYG,EAA4BH,EAAa,IAAI,EAC1DA,EAAa,IAAI,IAAIE,CAAG,EACpB,CAAE,IAAiBC,EAAK,sBAAuBV,GAAQA,EAAK,kBAAkB,eAAiB,OAAO,KAAKA,EAAK,kBAAkB,aAAa,CAAE,GAEzJO,EAAa,IAAI,IAAIE,CAAG,EAEjB,CAAE,IAAiBC,CAAI,EAE/B,CACA,OAAAH,EAAa,IAAI,OAAOE,CAAG,EAEpB,CAAE,IAAiBA,CAAI,CAE/B,CACA,IAAME,EAAS,KAAK,WAAW,KAAKJ,EAAa,KAAK,EAElDA,EAAa,YAChBI,EAAO,QAAQJ,EAAa,UAAU,EAEnCA,EAAa,MAChBI,EAAO,KAAKJ,EAAa,IAAI,EAE9B,IAAMK,EAAQ,MAAMD,EAAO,QAAQ,EAEnC,GAAIJ,EAAa,IAEhB,GADAA,EAAa,IAAI,MAAM,EACnB,KAAK,UACR,QAAWf,KAAQoB,EAClBL,EAAa,IAAI,IAAIf,EAAK,GAAG,EAC7B,KAAK,UAAUA,EAAMe,EAAa,IAAI,MAGvC,SAAWf,KAAQoB,EAClBL,EAAa,IAAI,IAAIf,EAAK,GAAG,UACrB,KAAK,UACf,QAAWA,KAAQoB,EAClB,KAAK,UAAUpB,EAAMe,EAAa,IAAI,EAExC,MAAO,CAAE,IAAkBK,EAAOL,EAAa,IAAK,CAErD,CAEA,OAAO,IACR,CAEA,QAAQM,EAAwC,CAC/C,OAAO,QAAQ,IAAI,CAAE,GAAG,KAAK,aAAc,EAAE,IAAIN,GAAgBA,EAAa,QAAQM,CAAM,CAAC,CAAC,CAC/F,CAEA,YAAeN,GAAyC,CACnDA,aAAwBC,IAC3B,OAAO,OAAOD,EAAc,KAAK,eAAeA,EAAa,IAAI,CAAC,EAE9DA,EAAa,QAChBA,EAAa,MAAQO,EAAKP,EAAa,KAAK,EAC5C,KAAK,WAAW,SAASA,EAAa,wBAAwB,GAIjE,EAEA,cAAe,CACd,OAAO,QAAQ,IAAI,CAAE,GAAG,KAAK,aAAc,EAAE,IAAI,MAAMA,GAAgB,CACtE,IAAMQ,EAAU,MAAM,KAAK,kBAAkBR,EAAc,IAAI,EAC/DA,EAAa,QAAS,CAAEQ,CAAQ,CAAC,EACjCR,EAAa,QAAU,CAAC,CAEzB,CAAC,CAAC,CACH,CAEA,cAAiBA,GAAyC,CACrDA,aAAwBC,GAAmCD,EAAa,OAC3E,KAAK,WAAW,qBAAqBA,EAAa,wBAAwB,CAE5E,CAED",
6
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/ws/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import W 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 m(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=>m(c,r,!0,!1)):m(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=>m(c,r,!1,!1)):m(s[i],r,!1,!1):delete o[i]}return o}return s}var g=new WeakSet,d=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 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: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=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 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=W(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 A=class extends d{constructor(e,...t){super(e,...t)}};var h=class extends a{constructor(...e){super(...e)}};var b=class extends u{constructor(...e){super(...e)}};var f=class extends p{constructor(...e){super(...e)}};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)}};import{Collection as R}from"insite-db";function D(s){return s.type==="map"}function P(s){return s[0]instanceof R}var j=["object","map"],C=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 P(n)?new A(...n):new b(...n)}}:{publish(...n){return new b(...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(j.includes(t)){let c=l.get(n);if(c?.type===t){let S=[n,[e,...i],x=>e.sendMessage("s-c",o,x),r];this.#e.get(e)?.subscribe(o,D(c)?new h(...S):new f(...S))}}};#o=(e,t)=>this.#e.get(e)?.cancel(t);#s=e=>{for(let t of this.#e.get(e)?.values()??[])t.cancel()}};export{A as CollectionMapPublication,h as CollectionMapSubscriptionHandle,b as Publication,f as SubscriptionHandle,C as SubscriptionHandler};
1
+ import W 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,d=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=W(e.query),this.collection.onChange(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.removeChangeListener(e.collectionChangeListener)}};var A=class extends d{constructor(e,...t){super(e,...t)}};var h=class extends a{constructor(...e){super(...e)}};var b=class extends u{constructor(...e){super(...e)}};var f=class extends p{constructor(...e){super(...e)}};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)}};import{Collection as R}from"insite-db";function D(s){return s.type==="map"}function P(s){return s[0]instanceof R}var j=["object","map"],C=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 P(n)?new A(...n):new b(...n)}}:{publish(...n){return new b(...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(j.includes(t)){let c=l.get(n);if(c?.type===t){let m=[n,[e,...i],x=>e.sendMessage("s-c",o,x),r];this.#e.get(e)?.subscribe(o,D(c)?new h(...m):new f(...m))}}};#o=(e,t)=>this.#e.get(e)?.cancel(t);#s=e=>{for(let t of this.#e.get(e)?.values()??[])t.cancel()}};export{A as CollectionMapPublication,h as CollectionMapSubscriptionHandle,b as Publication,f as SubscriptionHandle,C 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/Subscriptions.ts", "../../src/ws/types.ts", "../../src/ws/SubscriptionHandler.ts"],
4
- "sourcesContent": ["import sift from \"sift\";\nimport type {\n\tChangeStreamDocument,\n\tDocument,\n\tFilter,\n\tWatchedCollection,\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: WatchedCollection<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, WatchedCollection } 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: WatchedCollection<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 { 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", "import type { AbilitiesSchema } from \"insite-common\";\nimport {\n\tCollection,\n\ttype Document,\n\ttype Filter,\n\ttype WatchedCollection,\n\ttype Sort\n} from \"insite-db\";\nimport type { WSSCWithUser } from \"insite-users-server-ws\";\nimport type { Projection, PublicationProps, TransformableDoc } from \"../types\";\nimport type { CollectionMapPublication } from \"./CollectionMapPublication\";\nimport type { Publication } from \"./Publication\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nexport type WSSubscriptionArgs<\n\tAS extends AbilitiesSchema,\n\tRA extends any[] = any[]\n> = [ WSSCWithUser<AS>, ...RA ];\n\n\nexport type PublicationArgs<\n\tAS extends AbilitiesSchema,\n\tRA extends any[] = any[]\n> = [\n\tname: string,\n\tprops?: PublicationProps<WSSubscriptionArgs<AS, RA>>\n];\n\nexport type WithPublish<T, AS extends AbilitiesSchema> = T & {\n\tpublish<RA extends any[]>(...args: PublicationArgs<AS, RA>): Publication<AS, RA>;\n};\n\n\ntype QueryProps<D extends Document> = {\n\tquery?: Filter<D>;\n\tprojection?: Projection;\n\tsort?: Sort;\n\ttriggers?: string[];\n};\n\nexport type CollectionMapPublicationArgs<\n\tAS extends AbilitiesSchema,\n\tD extends Document,\n\tRA extends any[] = any[]\n> = [\n\tcollection: WatchedCollection<D>,\n\tname: string,\n\tqueryProps?: ((...args: WSSubscriptionArgs<AS, RA>) => false | null | QueryProps<D> | void) | false | null | QueryProps<D>,\n\ttransform?: (doc: TransformableDoc<D>, args: WSSubscriptionArgs<AS, RA>) => void\n];\n\nexport type WithPublishCollection<T, AS extends AbilitiesSchema> = T & WithPublish<T, AS> & {\n\tpublish<RA extends any[], D extends Document>(...args: CollectionMapPublicationArgs<AS, D, RA>): CollectionMapPublication<AS, D, RA>;\n};\n\n\nexport function 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\nexport function 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", "import type { AbilitiesSchema } from \"insite-common\";\nimport type { Document } from \"insite-db\";\nimport type { WSSCWithUser } from \"insite-users-server-ws\";\nimport type { WSServer } from \"insite-ws/server\";\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 {\n\ttype CollectionMapPublicationArgs,\n\tisCollectionMapPublicationArgs,\n\tisPublicationCollectionMap,\n\ttype PublicationArgs,\n\ttype WSSubscriptionArgs\n} from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nconst TYPES = [ \"object\", \"map\" ] as const;\n\n\nexport class SubscriptionHandler<AS extends AbilitiesSchema> {\n\tconstructor(wss: WSServer, 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"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import sift from \"sift\";\nimport type {\n\tChangeStreamDocument,\n\tDocument,\n\tFilter,\n\tSort,\n\tWatchedCollection\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: Projection | null, isInclusive?: boolean, isTop?: boolean): D | Partial<D>;\nfunction projectDocument<D extends Document>(document: D, projection: Projection | null, 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: WatchedCollection<D>,\n\t\tname: string,\n\t\tqueryProps?: ((...args: SA) => QueryProps<D> | false | null | void) | QueryProps<D> | false | null,\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.onChange(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.removeChangeListener(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, WatchedCollection } 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: WatchedCollection<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 { 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", "import type { AbilitiesSchema } from \"insite-common\";\nimport {\n\tCollection,\n\ttype Document,\n\ttype Filter,\n\ttype WatchedCollection,\n\ttype Sort\n} from \"insite-db\";\nimport type { WSSCWithUser } from \"insite-users-server-ws\";\nimport type { Projection, PublicationProps, TransformableDoc } from \"../types\";\nimport type { CollectionMapPublication } from \"./CollectionMapPublication\";\nimport type { Publication } from \"./Publication\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nexport type WSSubscriptionArgs<\n\tAS extends AbilitiesSchema,\n\tRA extends any[] = any[]\n> = [ WSSCWithUser<AS>, ...RA ];\n\n\nexport type PublicationArgs<\n\tAS extends AbilitiesSchema,\n\tRA extends any[] = any[]\n> = [\n\tname: string,\n\tprops?: PublicationProps<WSSubscriptionArgs<AS, RA>>\n];\n\nexport type WithPublish<T, AS extends AbilitiesSchema> = T & {\n\tpublish<RA extends any[]>(...args: PublicationArgs<AS, RA>): Publication<AS, RA>;\n};\n\n\ntype QueryProps<D extends Document> = {\n\tquery?: Filter<D>;\n\tprojection?: Projection;\n\tsort?: Sort;\n\ttriggers?: string[];\n};\n\nexport type CollectionMapPublicationArgs<\n\tAS extends AbilitiesSchema,\n\tD extends Document,\n\tRA extends any[] = any[]\n> = [\n\tcollection: WatchedCollection<D>,\n\tname: string,\n\tqueryProps?: ((...args: WSSubscriptionArgs<AS, RA>) => false | null | QueryProps<D> | void) | false | null | QueryProps<D>,\n\ttransform?: (doc: TransformableDoc<D>, args: WSSubscriptionArgs<AS, RA>) => void\n];\n\nexport type WithPublishCollection<T, AS extends AbilitiesSchema> = T & WithPublish<T, AS> & {\n\tpublish<RA extends any[], D extends Document>(...args: CollectionMapPublicationArgs<AS, D, RA>): CollectionMapPublication<AS, D, RA>;\n};\n\n\nexport function 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\nexport function 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", "import type { AbilitiesSchema } from \"insite-common\";\nimport type { Document } from \"insite-db\";\nimport type { WSSCWithUser } from \"insite-users-server-ws\";\nimport type { WSServer } from \"insite-ws/server\";\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 {\n\ttype CollectionMapPublicationArgs,\n\tisCollectionMapPublicationArgs,\n\tisPublicationCollectionMap,\n\ttype PublicationArgs,\n\ttype WSSubscriptionArgs\n} from \"./types\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nconst TYPES = [ \"object\", \"map\" ] as const;\n\n\nexport class SubscriptionHandler<AS extends AbilitiesSchema> {\n\tconstructor(wss: WSServer, 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"],
5
+ "mappings": "AAAA,OAAOA,MAAU,OCQV,IAAMC,EACZ,WAAW,wBACV,IAAI,IAEOC,EAAN,KAAkE,CACxE,YAAYC,EAAcC,EAA8B,CACvD,KAAK,KAAOD,EAERC,GACH,OAAO,OAAO,KAAMA,CAAK,EAE1BH,EAAa,IAAIE,EAAM,IAAmB,CAE3C,CAES,KACT,YACA,cAEA,KAAO,SAEP,cAAgB,IAAI,IAIpB,kBAAkBE,KAAyCC,EAAc,CACxE,OAAO,KAAK,QAAQ,GAAGD,EAAa,IAAI,CACzC,CAEA,UAAUA,EAAsC,CAC/C,KAAK,cAAc,IAAIA,CAAY,EACnC,KAAK,cAAcA,CAAY,CAEhC,CAEA,QAAQE,EAAkB,CACzB,QAAWF,KAAgB,KAAK,cAC/BA,EAAa,QAAQE,CAAM,CAE7B,CAEA,YAAYF,EAAsC,CACjD,KAAK,gBAAgBA,CAAY,EACjC,KAAK,cAAc,OAAOA,CAAY,CAEvC,CAGA,OAAO,aAAeJ,CAEvB,ECtDO,IAAMO,EAAN,KAAsD,CAC5D,YACCC,EACAC,EACAC,EACAC,EACAC,EACC,CAED,IAAMC,EAAcC,EAAa,IAAIN,CAAe,EAEhDK,GACH,KAAK,YAAcA,EACnB,KAAK,KAAOJ,EACZ,KAAK,QAAUC,EAEVE,IACJ,KAAK,YAAY,UAAU,IAAI,EAE3BD,GACH,KAAK,QAAQ,IAAI,IAGT,QAAQ,IAAI,WAAa,eACnC,QAAQ,MAAM,sBAAuBH,CAAe,CAEtD,CAEA,YACA,KACA,QAEA,MAAM,QAAQO,EAAkB,CAC/B,KAAK,QAAQ,MAAM,KAAK,YAAY,kBAAkB,KAAMA,CAAM,EAAGA,CAAM,CAE5E,CAEA,QAAS,CAER,KAAK,aAAa,YAAY,IAAI,CAEnC,CAEA,OAAQ,CAEP,YAAK,aAAa,YAAY,IAAI,EAElC,KAAK,aAAa,UAAU,IAAI,EAEzB,KAAK,QAAQ,IAAI,CACzB,CAED,EC7CO,IAAMC,EAAN,cAGGC,CAAuB,CAChC,YACCC,EACAC,EACAC,EACAC,EACC,CACD,MAAMH,EAAiBC,EAAMC,EAASC,EAAa,EAAI,EAEnD,KAAK,cACR,KAAK,YAAY,UAAU,IAAI,EAE3BA,GACH,KAAK,QAAQ,IAAI,EAGpB,CAEA,IAAM,IAAI,IAEV,MAA0B,KAC1B,WAAgC,KAChC,sBAAwB,GACxB,OAA6B,KAC7B,KAAoB,KAEpB,MAEA,MAAM,QAAQC,EAAsC,CACnD,KAAK,QAAQ,CAAE,MAAM,KAAK,YAAY,kBAAkB,KAAMA,CAAI,CAAE,CAAC,CAEtE,CAEA,QAAqB,CAAC,EACtBC,GAEA,aAAe,IAAM,CAEhB,KAAK,QAAQ,SAChB,KAAK,QAAQ,KAAK,OAAO,EACzB,KAAK,QAAU,CAAC,EAGlB,EAEA,yBAA2B,MAAOD,GAAkC,CAGlE,CAACE,EAA6B,IAAIF,CAAI,GACtC,gBAAiBA,IAChB,KAAK,IAAI,IAAIA,EAAK,YAAY,GAAwB,EACtDA,EAAK,gBAAkB,UACvB,CAAC,KAAK,QAELA,EAAK,kBAAkB,eACvB,OAAO,KAAKA,EAAK,kBAAkB,aAAa,EAAE,KAAKG,GAAS,KAAK,OAAQ,IAAIA,CAAK,CAAC,EAGxF,iBAAkBH,GAClB,KAAK,MAAOA,EAAK,YAAa,KAG/B,aAAa,KAAKC,EAAa,EAE/B,KAAK,QAAQ,KAAK,MAAM,KAAK,YAAY,kBAAkB,KAAMD,CAAI,CAAC,EAEtE,KAAKC,GAAgB,WAAW,KAAK,aAAc,CAAC,EAGtD,CAGD,EHhEA,SAASG,EAAoCC,EAAaC,EAA+BC,EAAc,GAAMC,EAAQ,GAAM,CAC1H,GAAIF,EACH,GAAIC,EAAa,CAChB,IAAME,EAAqC,CAAC,EAC5C,QAAWC,KAAOJ,EAAY,CAC7B,IAAMK,EAAgBL,EAAWI,CAAG,EACpCD,EAAUC,CAAG,EACZ,OAAOC,GAAiB,SACvB,MAAM,QAAQN,EAASK,CAAG,CAAC,EAC1BL,EAASK,CAAG,EAAE,IAAKE,GAAmBR,EAAgBQ,EAAMD,EAAe,GAAM,EAAK,CAAC,EACvFP,EAAgBC,EAASK,CAAG,EAAGC,EAAe,GAAM,EAAK,EAC1DN,EAASK,CAAG,CACf,CACA,OAAIF,GAASF,EAAW,MAAQ,GAC/B,OAAOG,EAAU,IAEXA,CACR,KAAO,CACN,IAAMA,EAAY,CAAE,GAAGJ,CAAS,EAChC,QAAWK,KAAOJ,EAAY,CAC7B,IAAMK,EAAgBL,EAAWI,CAAG,EAChC,OAAOC,GAAiB,SAC3BF,EAAUC,CAAG,EACZ,MAAM,QAAQL,EAASK,CAAG,CAAC,EAC1BL,EAASK,CAAG,EAAE,IAAKE,GAAmBR,EAAgBQ,EAAMD,EAAe,GAAO,EAAK,CAAC,EACxFP,EAAgBC,EAASK,CAAG,EAAGC,EAAe,GAAO,EAAK,EAE5D,OAAOF,EAAUC,CAAG,CACtB,CAEA,OAAOD,CACR,CAED,OAAOJ,CACR,CAEO,IAAMQ,EAA+B,IAAI,QAUnCC,EAAN,cAGGC,CAAgB,CACzB,YACCC,EACAC,EACAC,EACAC,EACC,CACD,MAAMF,CAAI,EAEV,KAAK,WAAaD,EAClB,KAAK,WAAaE,EAClB,KAAK,UAAYC,CAElB,CAEA,KAAO,MAEP,WAEA,WACA,UAEA,KAAKC,EAA+B,CACnCP,EAA6B,IAAIO,CAAI,CAEtC,CAEA,eAAeC,EAAU,CACxB,GAAM,CACL,MAAAC,EAAQ,KACR,WAAAhB,EAAa,KACb,KAAAiB,EAAO,KACP,SAAAC,CACD,GAAK,OAAO,KAAK,YAAc,WAAa,KAAK,WAAW,GAAGH,CAAI,EAAI,KAAK,aAAe,CAAC,EAExFI,EAAwB,GACxBC,EAAS,KACb,GAAIpB,EAAY,CAEf,QAAWI,KAAOJ,EAEjB,GADAmB,EAAwB,CAAC,CAACnB,EAAWI,CAAG,EACpCA,IAAQ,MACX,MAEEe,IACHC,EAAS,IAAI,IAAI,CAAE,GAAG,OAAO,KAAKJ,GAAS,CAAC,CAAC,EAAG,GAAG,OAAO,KAAKhB,CAAU,EAAG,GAAGkB,GAAY,CAAC,CAAE,CAAC,EAC/FE,EAAO,OAAO,KAAK,EACfpB,EAAW,MAAQ,IACtBA,EAAW,IAAM,GAEpB,CAEA,MAAO,CAAE,MAAAgB,EAAO,WAAAhB,EAAY,sBAAAmB,EAAuB,OAAAC,EAAQ,KAAAH,EAAM,KAAAF,CAAK,CACvE,CAEA,MAAM,kBAAkBM,EAAsCP,EAAsC,CACnG,GAAIO,aAAwBC,GAAmCD,EAAa,MAAO,CAClF,GAAIP,GAAQ,gBAAiBA,EAAM,CAClC,IAAMS,EAAMT,EAAK,YAAY,IAE7B,GAAIA,EAAK,gBAAkB,UAAaA,EAAK,gBAAkB,UAAYO,EAAa,MAAOP,EAAK,YAAa,EAAI,CACpH,IAAMU,EAAM1B,EAAgBgB,EAAK,aAAeO,EAAa,WAAYA,EAAa,qBAAqB,EAE3G,OADA,KAAK,YAAYG,EAA4BH,EAAa,IAAI,EAC1DA,EAAa,IAAI,IAAIE,CAAG,EACpB,CAAE,IAAiBC,EAAK,sBAAuBV,GAAQA,EAAK,kBAAkB,eAAiB,OAAO,KAAKA,EAAK,kBAAkB,aAAa,CAAE,GAEzJO,EAAa,IAAI,IAAIE,CAAG,EAEjB,CAAE,IAAiBC,CAAI,EAE/B,CACA,OAAAH,EAAa,IAAI,OAAOE,CAAG,EAEpB,CAAE,IAAiBA,CAAI,CAE/B,CACA,IAAME,EAAS,KAAK,WAAW,KAAKJ,EAAa,KAAK,EAElDA,EAAa,YAChBI,EAAO,QAAQJ,EAAa,UAAU,EAEnCA,EAAa,MAChBI,EAAO,KAAKJ,EAAa,IAAI,EAE9B,IAAMK,EAAQ,MAAMD,EAAO,QAAQ,EAEnC,GAAIJ,EAAa,IAEhB,GADAA,EAAa,IAAI,MAAM,EACnB,KAAK,UACR,QAAWf,KAAQoB,EAClBL,EAAa,IAAI,IAAIf,EAAK,GAAG,EAC7B,KAAK,UAAUA,EAAMe,EAAa,IAAI,MAGvC,SAAWf,KAAQoB,EAClBL,EAAa,IAAI,IAAIf,EAAK,GAAG,UACrB,KAAK,UACf,QAAWA,KAAQoB,EAClB,KAAK,UAAUpB,EAAMe,EAAa,IAAI,EAExC,MAAO,CAAE,IAAkBK,EAAOL,EAAa,IAAK,CAErD,CAEA,OAAO,IACR,CAEA,QAAQM,EAAwC,CAC/C,OAAO,QAAQ,IAAI,CAAE,GAAG,KAAK,aAAc,EAAE,IAAIN,GAAgBA,EAAa,QAAQM,CAAM,CAAC,CAAC,CAC/F,CAEA,YAAeN,GAAyC,CACnDA,aAAwBC,IAC3B,OAAO,OAAOD,EAAc,KAAK,eAAeA,EAAa,IAAI,CAAC,EAE9DA,EAAa,QAChBA,EAAa,MAAQO,EAAKP,EAAa,KAAK,EAC5C,KAAK,WAAW,SAASA,EAAa,wBAAwB,GAIjE,EAEA,cAAe,CACd,OAAO,QAAQ,IAAI,CAAE,GAAG,KAAK,aAAc,EAAE,IAAI,MAAMA,GAAgB,CACtE,IAAMQ,EAAU,MAAM,KAAK,kBAAkBR,EAAc,IAAI,EAC/DA,EAAa,QAAS,CAAEQ,CAAQ,CAAC,EACjCR,EAAa,QAAU,CAAC,CAEzB,CAAC,CAAC,CACH,CAEA,cAAiBA,GAAyC,CACrDA,aAAwBC,GAAmCD,EAAa,OAC3E,KAAK,WAAW,qBAAqBA,EAAa,wBAAwB,CAE5E,CAED,EIhMO,IAAMS,EAAN,cAIGA,CAA+D,CACxE,YAAYC,KAAqCC,EAA+B,CAC/E,MAAMD,EAAY,GAAGC,CAAQ,CAC9B,CACD,ECdO,IAAMC,EAAN,cAIGA,CAAsE,CAC/E,eAAeC,EAA2G,CACzH,MAAM,GAAGA,CAAI,CACd,CACD,ECXO,IAAMC,EAAN,cAGGA,CAA+C,CACxD,eAAeC,EAAoF,CAClG,MAAM,GAAGA,CAAI,CACd,CACD,ECPO,IAAMC,EAAN,cAGGA,CAAsD,CAC/D,eAAeC,EAA2F,CACzG,MAAM,GAAGA,CAAI,CACd,CACD,ECVO,IAAMC,EAAN,cAAwD,GAAmF,CAEjJ,UAAY,KAAK,IAEjB,OAAQ,CACP,OAAO,QAAQ,IAAI,CAAE,GAAG,KAAK,OAAO,CAAE,EAAE,IAAIC,GAAgBA,EAAa,MAAM,CAAC,CAAC,CAClF,CAEA,OAAOC,EAAsB,CAC5B,KAAK,IAAIA,CAAG,GAAG,OAAO,EACtB,KAAK,OAAOA,CAAG,CAEhB,CAED,EClBA,OACC,cAAAC,MAKM,YAoDA,SAASC,EAIfC,EACiD,CACjD,OAAOA,EAAY,OAAS,KAC7B,CAEO,SAASC,EAIdC,EAA0H,CAC3H,OAAOA,EAAK,CAAC,YAAaJ,CAC3B,CCpDA,IAAMK,EAAQ,CAAE,SAAU,KAAM,EAGnBC,EAAN,KAAsD,CAC5D,YAAYC,EAAeC,EAA2B,CAErDD,EAAI,GAAG,iBAAkB,KAAKE,EAAoB,EAClDF,EAAI,GAAG,iBAAkB,KAAKG,EAAoB,EAClDH,EAAI,GAAG,qBAAkD,KAAKI,EAAsB,EACpFJ,EAAI,GAAG,qBAAoD,KAAKK,EAAwB,EACxFL,EAAI,GAAG,eAAgB,KAAKM,EAAkB,EAE9CN,EAAI,GAAG,6BAA8B,KAAK,qBAAqB,EAE/D,OAAO,OAAOA,EAAKC,EAAkB,CACpC,WAAiDM,EAAyE,CACzH,OAAOC,EAA+BD,CAAI,EACzC,IAAIE,EAAoC,GAAGF,CAAI,EAC/C,IAAIG,EAAoB,GAAGH,CAAI,CACjC,CACD,EAAI,CACH,WAA6BA,EAA+B,CAC3D,OAAO,IAAIG,EAAoB,GAAGH,CAAI,CACvC,CACD,CAAC,CAEF,CAEAI,GAAqB,IAAI,QAEzB,sBAAyBC,GAAmC,CAC3D,QAAWC,KAAQD,EAClB,KAAKD,GAAmB,IAAIE,CAAI,GAAG,MAAM,CAE3C,EAEAX,GAAwBW,GACvB,KAAKF,GAAmB,IAAIE,EAAM,IAAIC,CAAe,EAEtDX,GAAwBU,GACvB,KAAKF,GAAmB,IAAIE,CAAI,GAAG,MAAM,EAE1CT,GAAyB,CACxBS,EACAE,EACAC,EACAC,EACAC,EACAC,IACI,CAEJ,GAAIrB,EAAM,SAASiB,CAAgB,EAAG,CACrC,IAAMK,EAAcC,EAAa,IAAIL,CAAe,EAEpD,GAAII,GAAa,OAASL,EAAkB,CAC3C,IAAMO,EAAyB,CAC9BN,EACA,CAAEH,EAAM,GAAGK,CAAS,EACnBK,GAAkBV,EAAK,YAAY,MAAiCI,EAAGM,CAAI,EAC5EJ,CACD,EAEA,KAAKR,GACH,IAAIE,CAAI,GACP,UAAUI,EACXO,EAA2BJ,CAAW,EACrC,IAAIK,EAAoC,GAAGH,CAAsB,EACjE,IAAII,EAAuB,GAAGJ,CAAsB,CACtD,CACF,CACD,CAED,EAEAjB,GAA2B,CAACQ,EAAwBI,IACnD,KAAKN,GAAmB,IAAIE,CAAI,GAAG,OAAOI,CAAC,EAE5CX,GAAsBO,GAA2B,CAChD,QAAWc,KAAgB,KAAKhB,GAAmB,IAAIE,CAAI,GAAG,OAAO,GAAK,CAAC,EAC1Ec,EAAa,OAAO,CAEtB,CAED",
6
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", "Subscriptions", "subscription", "key", "Collection", "isPublicationCollectionMap", "publication", "isCollectionMapPublicationArgs", "args", "TYPES", "SubscriptionHandler", "wss", "withCollections", "#handleClientConnect", "#handleClientSession", "#handleClientSubscribe", "#handleClientUnsubscribe", "#handleClientClose", "args", "isCollectionMapPublicationArgs", "CollectionMapPublication", "Publication", "#wsSubscriptionMap", "webSockets", "wssc", "Subscriptions", "subscriptionType", "publicationName", "i", "restArgs", "immediately", "publication", "publications", "subscriptionHandleArgs", "data", "isPublicationCollectionMap", "CollectionMapSubscriptionHandle", "SubscriptionHandle", "subscription"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "insite-subscriptions-server",
3
- "version": "2.1.3",
3
+ "version": "2.2.0",
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.2.2",
12
+ "packageManager": "bun@1.2.3",
13
13
  "scripts": {
14
14
  "test": "echo \"Error: no test specified\" && exit 1",
15
15
  "build": "bun .conveyer.js",
@@ -27,16 +27,16 @@
27
27
  "author": "Eugene Nesvetaev <dev@nesvet.dev> (https://nesvet.dev/)",
28
28
  "license": "MIT",
29
29
  "dependencies": {
30
- "insite-common": "^2.1.2",
31
- "insite-db": "^2.1.2",
32
- "insite-users-server-ws": "^2.1.3",
33
- "insite-ws": "^2.1.3",
30
+ "insite-common": "^2.2.0",
31
+ "insite-db": "^2.2.0",
32
+ "insite-users-server-ws": "^2.2.0",
33
+ "insite-ws": "^2.2.0",
34
34
  "sift": "^16.0.1"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@nesvet/conveyer": "^2.4.3",
38
- "@nesvet/eslint-config": "^2.0.47",
39
- "@types/node": "^22.13.4",
38
+ "@nesvet/eslint-config": "^2.0.48",
39
+ "@types/node": "^22.13.5",
40
40
  "@types/ws": "^8.5.14",
41
41
  "typescript": "^5.7.3"
42
42
  }