insite-subscriptions-server 2.3.3 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2024 Eugene Nesvetaev
3
+ Copyright (c) 2026 Eugene Nesvetaev
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,13 +1,287 @@
1
- # inSite subscriptions server side
1
+ # insite-subscriptions-server
2
+
3
+ Server-side pub/sub layer for inSite. Defines publications (named data sources), subscription handles, and WebSocket integration for real-time updates.
4
+
5
+ Part of [inSite](../../README.md) — wires to [insite-ws](../ws/README.md) and [insite-users-server-ws](../users-server-ws/README.md); uses [insite-db](../db/README.md).
2
6
 
3
7
  ## Installation
4
8
 
5
9
  ```sh
6
- $ npm install insite-subscriptions-server
10
+ npm install insite-subscriptions-server
7
11
  ```
8
12
 
9
- Or
13
+ Or:
10
14
 
11
15
  ```sh
12
- $ bun add insite-subscriptions-server
16
+ bun add insite-subscriptions-server
17
+ ```
18
+
19
+ ## Overview
20
+
21
+ The package provides two data modes:
22
+
23
+ - **object** — arbitrary data via custom `fetch`; you call `changed()` to push updates
24
+ - **map** — MongoDB collection with query, projection, sort; reacts to Change Streams and sends diff updates
25
+
26
+ Two entry points:
27
+
28
+ - **Main** (`insite-subscriptions-server`) — low-level API: `Publication`, `SubscriptionHandle`, `CollectionMapPublication`, `CollectionMapSubscriptionHandle`
29
+ - **WS** (`insite-subscriptions-server/ws`) — wires subscription protocol to [insite-ws](../ws/README.md) and [insite-users-server-ws](../users-server-ws/README.md); adds `SubscriptionHandler` and `wss.publish()`
30
+
31
+ ## Core Concepts
32
+
33
+ **Publication** — Named data source. Holds subscribers, invokes `fetch` or queries MongoDB, notifies on changes.
34
+
35
+ **SubscriptionHandle** — Subscription to a publication. Calls `handler(fetched, reason)` when data changes.
36
+
37
+ **CollectionMapPublication** — Publication backed by a `WatchedCollection`. Supports query, projection, sort. Listens to Change Streams and emits incremental updates.
38
+
39
+ **CollectionMapSubscriptionHandle** — Subscription to a map publication. Receives diff updates: `["i", items, sort?]`, `["c", doc]`, `["u", doc, fields?]`, `["d", _id]`.
40
+
41
+ ## Public API
42
+
43
+ ### Main Entry (`insite-subscriptions-server`)
44
+
45
+ | Export | Description |
46
+ |--------|-------------|
47
+ | `publications` | `Map<string, Publication>` — global registry |
48
+ | `Publication` | Class |
49
+ | `SubscriptionHandle` | Class |
50
+ | `CollectionMapPublication` | Class |
51
+ | `CollectionMapSubscriptionHandle` | Class |
52
+ | `skippedChangeStreamDocuments` | `WeakSet<ChangeStreamDocument>` — documents to skip in Change Stream handling |
53
+ | `Projection` | type |
54
+
55
+ ---
56
+
57
+ ### Publication
58
+
59
+ ```ts
60
+ class Publication<SA extends SubscriptionArgs = SubscriptionArgs>
61
+ ```
62
+
63
+ | Property | Type | Description |
64
+ |----------|------|-------------|
65
+ | `name` | `string` | Publication name (readonly) |
66
+ | `type` | `string` | `"object"` (default) |
67
+ | `subscriptions` | `Set<SubscriptionHandle<SA>>` | Active subscribers |
68
+ | `onSubscribe` | `(subscription) => void` | Optional callback on subscribe |
69
+ | `onUnsubscribe` | `(subscription) => void` | Optional callback on unsubscribe |
70
+ | `fetch` | `(...args: SA) => unknown` | Optional; called to fetch data |
71
+
72
+ | Method | Description |
73
+ |--------|-------------|
74
+ | `constructor(name, props?)` | Registers in `publications` |
75
+ | `subscribe(subscription)` | Adds subscriber, calls `onSubscribe` |
76
+ | `unsubscribe(subscription)` | Removes subscriber, calls `onUnsubscribe` |
77
+ | `changed(reason?)` | Notifies all subscribers |
78
+ | `fetchSubscription(subscription, reason?)` | Fetches for one subscriber; defaults to `fetch(...subscription.args)` |
79
+
80
+ ---
81
+
82
+ ### SubscriptionHandle
83
+
84
+ ```ts
85
+ class SubscriptionHandle<SA extends SubscriptionArgs>
86
+ ```
87
+
88
+ | Property | Type | Description |
89
+ |----------|------|-------------|
90
+ | `publication` | `Publication<SA>` | The publication |
91
+ | `args` | `SA` | Arguments passed to `fetch` |
92
+ | `handler` | `SubscriptionHandler` | `(fetched, reason?) => void` |
93
+
94
+ | Method | Description |
95
+ |--------|-------------|
96
+ | `constructor(publicationName, args, handler, immediately?, prevent?)` | Subscribes if publication exists; `immediately` triggers initial fetch; `prevent` skips auto-subscribe |
97
+ | `changed(reason?)` | Fetches and calls `handler` |
98
+ | `cancel()` | Unsubscribes |
99
+ | `renew()` | Unsubscribes, resubscribes, fetches |
100
+
101
+ ---
102
+
103
+ ### CollectionMapPublication
104
+
105
+ ```ts
106
+ class CollectionMapPublication<D extends Document, SA extends SubscriptionArgs> extends Publication<SA>
107
+ ```
108
+
109
+ | Property | Type | Description |
110
+ |----------|------|-------------|
111
+ | `collection` | `WatchedCollection<D>` | MongoDB collection with Change Stream |
112
+ | `queryProps` | `((...args: SA) => QueryProps<D> \| false \| null \| void) \| QueryProps<D> \| false \| null` | Query config per subscription |
113
+ | `transform` | `(doc: TransformableDoc<D>, args: SA) => void` | Optional doc transform before send |
114
+ | `type` | `string` | `"map"` |
115
+
116
+ | Method | Description |
117
+ |--------|-------------|
118
+ | `constructor(collection, name, queryProps?, transform?)` | |
119
+ | `skip(next)` | Adds `next` to `skippedChangeStreamDocuments` |
120
+ | `makeQueryProps(args)` | Returns `{ query, projection, isProjectionInclusive, fields, sort, args }` |
121
+ | `flushInitial()` | Fetches for all subscribers, sends as single batch |
122
+ | `changed(reason)` | `Promise` — notifies all subscribers |
123
+
124
+ `onSubscribe` / `onUnsubscribe` are set internally to manage Change Stream listeners.
125
+
126
+ **QueryProps:**
127
+
128
+ | Field | Type | Description |
129
+ |-------|------|-------------|
130
+ | `query` | `Filter<D>` | MongoDB filter |
131
+ | `projection` | `Projection` | Field selection |
132
+ | `sort` | `Sort` | Sort spec |
133
+ | `triggers` | `string[]` | Fields that affect projection (for update filtering) |
134
+
135
+ ---
136
+
137
+ ### CollectionMapSubscriptionHandle
138
+
139
+ ```ts
140
+ class CollectionMapSubscriptionHandle<D extends Document, SA extends SubscriptionArgs> extends SubscriptionHandle<SA>
13
141
  ```
142
+
143
+ | Property | Type | Description |
144
+ |----------|------|-------------|
145
+ | `ids` | `Set<string>` | Document ids in current result set |
146
+ | `query` | `Filter<D> \| null` | Set by `onSubscribe` |
147
+ | `projection` | `Projection \| null` | Set by `onSubscribe` |
148
+ | `isProjectionInclusive` | `boolean` | Set by `onSubscribe` |
149
+ | `fields` | `Set<string> \| null` | Set by `onSubscribe` |
150
+ | `sort` | `Sort \| null` | Set by `onSubscribe` |
151
+ | `match` | `(doc: D) => boolean` | Sift matcher for query |
152
+ | `updates` | `unknown[]` | Pending updates (batched) |
153
+ | `flushUpdates` | `() => void` | Sends `updates` to handler and clears |
154
+ | `collectionChangeListener` | `(next: ChangeStreamDocument<D>) => Promise<void>` | Change Stream handler |
155
+
156
+ | Method | Description |
157
+ |--------|-------------|
158
+ | `constructor(publicationName, args, handler, immediately?)` | Subscribes and optionally fetches initial data |
159
+ | `changed(next?)` | Fetches and calls `handler([result])` |
160
+
161
+ **Map update format** (passed to `handler` as array of tuples):
162
+
163
+ | Tuple | Description |
164
+ |-------|-------------|
165
+ | `["i", items[], sort?]` | Initial load |
166
+ | `["c", doc]` | Create |
167
+ | `["u", doc, fields?]` | Update; `fields` is `string[]`, `true`, or `undefined` |
168
+ | `["d", _id]` | Delete |
169
+
170
+ ---
171
+
172
+ ### Types
173
+
174
+ | Type | Description |
175
+ |------|-------------|
176
+ | `PublicationProps<SA>` | `{ type?, fetch?, fetchSubscription?, onSubscribe?, onUnsubscribe? }` |
177
+ | `Projection` | `{ [key: string]: Projection \| boolean \| number }` — MongoDB-style projection |
178
+ | `PartialWithId<D>` | `Partial<D> & { _id: string }` |
179
+ | `TransformableDoc<D>` | `PartialWithId<D> & { [key: string]: any }` |
180
+ | `SubscriptionArgs` | `unknown[]` |
181
+ | `SubscriptionHandler` | `(fetched: unknown, reason?: unknown) => void` |
182
+
183
+ ---
184
+
185
+ ### WS Entry (`insite-subscriptions-server/ws`)
186
+
187
+ | Export | Description |
188
+ |--------|-------------|
189
+ | `SubscriptionHandler` | Wires subscription protocol to `WSServer` |
190
+ | `Publication` | Publication with `WSSubscriptionArgs` (first arg is `WSSCWithUser`) |
191
+ | `SubscriptionHandle` | Subscription handle for WS context |
192
+ | `CollectionMapPublication` | Map publication for WS context |
193
+ | `CollectionMapSubscriptionHandle` | Map subscription handle for WS context |
194
+ | `Subscriptions` | `Map<number \| string, SubscriptionHandle>` — per-client subscriptions |
195
+ | `WithPublish<T, AS>` | Type: `T & { publish(...) }` |
196
+ | `WithPublishCollection<T, AS>` | Type: `T & WithPublish & { publish(...) }` for collections |
197
+ | `isPublicationCollectionMap(publication)` | Type guard |
198
+ | `isCollectionMapPublicationArgs(args)` | Type guard |
199
+
200
+ ---
201
+
202
+ ### SubscriptionHandler
203
+
204
+ ```ts
205
+ class SubscriptionHandler<AS extends AbilitiesSchema>
206
+ ```
207
+
208
+ | Method | Description |
209
+ |--------|-------------|
210
+ | `constructor(wss: WSServer, withCollections?)` | Listens to `client-connect`, `client-session`, `client-message:s-s`, `client-message:s-u`, `client-close`, `should-renew-subscriptions`. When `withCollections` is true, adds `wss.publish()` for both object and map publications |
211
+ | `renewSubscriptionsFor(webSockets)` | Renews subscriptions for given clients |
212
+
213
+ **Protocol messages:**
214
+
215
+ | Message | Direction | Description |
216
+ |--------|-----------|-------------|
217
+ | `s-s` | client → server | Subscribe: `(type, publicationName, id, ...restArgs, immediately?)` |
218
+ | `s-u` | client → server | Unsubscribe: `(id)` |
219
+ | `s-c` | server → client | Changed: `(id, data)` |
220
+
221
+ ---
222
+
223
+ ## Usage
224
+
225
+ **Object publication (standalone):**
226
+
227
+ ```ts
228
+ import {
229
+ publications,
230
+ Publication,
231
+ SubscriptionHandle
232
+ } from "insite-subscriptions-server";
233
+
234
+ const pub = new Publication("items", {
235
+ type: "object",
236
+ fetch: () => ({ items: [1, 2, 3] })
237
+ });
238
+
239
+ const handle = new SubscriptionHandle("items", [], (data) => {
240
+ console.log(data);
241
+ }, true);
242
+
243
+ pub.changed(); // pushes update to all subscribers
244
+ handle.cancel();
245
+ ```
246
+
247
+ **Map publication (MongoDB):**
248
+
249
+ ```ts
250
+ import { CollectionMapPublication, CollectionMapSubscriptionHandle } from "insite-subscriptions-server";
251
+
252
+ const pub = new CollectionMapPublication(
253
+ collection,
254
+ "items",
255
+ (userId) => ({ query: { userId }, projection: { name: 1 } }),
256
+ (doc, args) => { doc.extra = "computed"; }
257
+ );
258
+
259
+ const handle = new CollectionMapSubscriptionHandle("items", [userId], (updates) => {
260
+ // updates: [["i", items, sort], ["c", doc], ["u", doc, fields], ["d", id]]
261
+ }, true);
262
+ ```
263
+
264
+ **WebSocket integration:**
265
+
266
+ ```ts
267
+ import { SubscriptionHandler } from "insite-subscriptions-server/ws";
268
+ import type { WSServer } from "insite-ws/server";
269
+
270
+ const wss: WSServer = /* ... */;
271
+ new SubscriptionHandler(wss, true);
272
+
273
+ // With withCollections: true, wss gets publish()
274
+ const pub = wss.publish(collection, "items", (wssc, userId) => ({
275
+ query: { userId },
276
+ projection: { name: 1 }
277
+ }));
278
+ ```
279
+
280
+ ## Related
281
+
282
+ - [insite-ws](../ws/README.md), [insite-users-server-ws](../users-server-ws/README.md), [insite-db](../db/README.md)
283
+ - [insite-subscriptions-client](../subscriptions-client/README.md) — client counterpart
284
+
285
+ ## License
286
+
287
+ MIT
@@ -26,7 +26,7 @@ export declare class CollectionMapPublication<D extends Document = Document, SA
26
26
  sort: Sort | null;
27
27
  args: SA;
28
28
  };
29
- fetchSubscription(subscription: SubscriptionHandle<SA>, next: ChangeStreamDocument<D> | null): Promise<(string | false | string[] | Partial<D> | undefined)[] | (Sort | PartialWithId<D>[] | null)[] | null>;
29
+ fetchSubscription(subscription: SubscriptionHandle<SA>, next: ChangeStreamDocument<D> | null): Promise<(string | boolean | string[] | Partial<D> | undefined)[] | (Sort | PartialWithId<D>[] | null)[] | null>;
30
30
  changed(reason: ChangeStreamDocument<D> | null): Promise<void[]>;
31
31
  onSubscribe: (subscription: SubscriptionHandle<SA>) => void;
32
32
  flushInitial(): Promise<void[]>;
@@ -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,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;IAmDlG,OAAO,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IAI9C,WAAW,GAAI,cAAc,kBAAkB,CAAC,EAAE,CAAC,UAUjD;IAEF,YAAY;IASZ,aAAa,GAAI,cAAc,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;AA+CjB,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;IAyDlG,OAAO,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IAI9C,WAAW,GAAI,cAAc,kBAAkB,CAAC,EAAE,CAAC,UAUjD;IAEF,YAAY;IASZ,aAAa,GAAI,cAAc,kBAAkB,CAAC,EAAE,CAAC,UAInD;CAEF"}
@@ -1 +1 @@
1
- {"version":3,"file":"CollectionMapSubscriptionHandle.d.ts","sourceRoot":"","sources":["../src/CollectionMapSubscriptionHandle.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oBAAoB,EACpB,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG5D,qBAAa,+BAA+B,CAC3C,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,EAAE,SAAS,gBAAgB,GAAG,gBAAgB,CAC7C,SAAQ,kBAAkB,CAAC,EAAE,CAAC;;gBAE9B,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,EAAE,EACR,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,EACnC,WAAW,CAAC,EAAE,OAAO;IAatB,GAAG,cAAqB;IAExB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAQ;IAC/B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAQ;IACrC,qBAAqB,UAAS;IAC9B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAQ;IAClC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAQ;IAEzB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;IAEtB,OAAO,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IAKlD,OAAO,EAAE,OAAO,EAAE,CAAM;IAGxB,YAAY,aAOV;IAEF,wBAAwB,GAAU,MAAM,oBAAoB,CAAC,CAAC,CAAC,mBAwB7D;CAGF"}
1
+ {"version":3,"file":"CollectionMapSubscriptionHandle.d.ts","sourceRoot":"","sources":["../src/CollectionMapSubscriptionHandle.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oBAAoB,EACpB,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG5D,qBAAa,+BAA+B,CAC3C,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,EAAE,SAAS,gBAAgB,GAAG,gBAAgB,CAC7C,SAAQ,kBAAkB,CAAC,EAAE,CAAC;;gBAE9B,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,EAAE,EACR,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,EACnC,WAAW,CAAC,EAAE,OAAO;IAatB,GAAG,cAAqB;IAExB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAQ;IAC/B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAQ;IACrC,qBAAqB,UAAS;IAC9B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAQ;IAClC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAQ;IAEzB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;IAEtB,OAAO,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IAKlD,OAAO,EAAE,OAAO,EAAE,CAAM;IAGxB,YAAY,aAOV;IAEF,wBAAwB,GAAU,MAAM,oBAAoB,CAAC,CAAC,CAAC,mBAwD7D;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.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};
1
+ import b from"sift";var d=globalThis.__insite_publications??=new Map,p=class{constructor(e,t){this.name=e,t&&Object.assign(this,t),d.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=d};var f=class{constructor(e,t,n,s,i){let o=d.get(e);o?(this.publication=o,this.args=t,this.handler=n,i||(this.publication.subscribe(this),s&&this.changed(null))):process.env.NODE_ENV==="development"&&console.error("Unknown publication",e)}publication;args;handler;async changed(e){this.handler(await this.publication.fetchSubscription(this,e),e)}cancel(){this.publication?.unsubscribe(this)}renew(){return this.publication?.unsubscribe(this),this.publication?.subscribe(this),this.changed(null)}};var c=class extends f{constructor(e,t,n,s){super(e,t,n,s,!0),this.publication&&(this.publication.subscribe(this),s&&this.changed(null))}ids=new Set;query=null;projection=null;isProjectionInclusive=!1;fields=null;sort=null;match;async changed(e){this.handler([await this.publication.fetchSubscription(this,e)])}updates=[];#e;flushUpdates=()=>{this.updates.length&&(this.handler(this.updates),this.updates=[])};collectionChangeListener=async e=>{if(!(h.has(e)||!("documentKey"in e))){if(this.ids.has(e.documentKey._id)){if(e.operationType==="update"&&this.fields){let{fields:t}=this,n=!1,{updatedFields:s}=e.updateDescription;if(s)for(let o in s){if(t.has(o)){n=!0;break}let r=o.indexOf(".");if(r!==-1&&t.has(o.slice(0,r))){n=!0;break}}let{removedFields:i}=e.updateDescription;if(!n&&i?.length)for(let o of i){if(t.has(o)){n=!0;break}let r=o.indexOf(".");if(r!==-1&&t.has(o.slice(0,r))){n=!0;break}}if(!n)return}}else if(!("fullDocument"in e)||!this.match(e.fullDocument))return;clearTimeout(this.#e),this.updates.push(await this.publication.fetchSubscription(this,e)),this.#e=setTimeout(this.flushUpdates,1)}}};function l(a,e,t=!0,n=!0){if(e)if(t){let s={};for(let i in e){let o=e[i],r=a[i];s[i]=r&&typeof o=="object"&&typeof r=="object"?Array.isArray(r)?r.map(u=>l(u,o,!0,!1)):l(r,o,!0,!1):r}return n&&e._id===0&&delete s._id,s}else{let s={...a};for(let i in e){let o=e[i];typeof o=="object"?s[i]=Array.isArray(a[i])?a[i].map(r=>l(r,o,!1,!1)):l(a[i],o,!1,!1):delete s[i]}return s}return a}var h=new WeakSet,m=class extends p{constructor(e,t,n,s){super(t),this.collection=e,this.queryProps=n,this.transform=s}type="map";collection;queryProps;transform;skip(e){h.add(e)}makeQueryProps(e){let{query:t=null,projection:n=null,sort:s=null,triggers:i}=(typeof this.queryProps=="function"?this.queryProps(...e):this.queryProps)||{},o=!1,r=null;if(n){for(let u in n)if(o=!!n[u],u!=="_id")break;o&&(r=new Set([...Object.keys(t??{}),...Object.keys(n),...i??[]]),r.delete("_id"),n._id!==0&&(n._id=1))}return{query:t,projection:n,isProjectionInclusive:o,fields:r,sort:s,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 o=l(t.fullDocument,e.projection,e.isProjectionInclusive);if(this.transform?.(o,e.args),e.ids.has(i)){let r="updateDescription"in t?[...Object.keys(t.updateDescription.updatedFields??{}),...t.updateDescription.removedFields??[]]:null;return["u",o,r?r.length?r:!0:void 0]}return e.ids.add(i),["c",o]}return e.ids.delete(i),["d",i]}let n=this.collection.find(e.query);e.projection&&n.project(e.projection),e.sort&&n.sort(e.sort);let s=await n.toArray();if(e.ids)if(e.ids.clear(),this.transform)for(let i of s)e.ids.add(i._id),this.transform(i,e.args);else for(let i of s)e.ids.add(i._id);else if(this.transform)for(let i of s)this.transform(i,e.args);return["i",s,e.sort]}return null}changed(e){return Promise.all([...this.subscriptions].map(t=>t.changed(e)))}onSubscribe=e=>{e instanceof 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,f as SubscriptionHandle,d 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\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}\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, @typescript-eslint/naming-convention\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>, _reason?: any) { // eslint-disable-line @typescript-eslint/no-explicit-any\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\tvoid subscription.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\tvoid this.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\tvoid this.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: Projection | null = null;\n\tisProjectionInclusive = false;\n\tfields: Set<string> | null = null;\n\tsort: Sort | null = 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?: ReturnType<typeof setTimeout>;\n\t\n\tflushUpdates = () => {\n\t\t\n\t\tif (this.updates.length) {\n\t\t\tthis.handler(this.updates);\n\t\t\tthis.updates = [];\n\t\t}\n\t\t\n\t};\n\t\n\tcollectionChangeListener = async (next: ChangeStreamDocument<D>) => {\n\t\t\n\t\tif (\n\t\t\t!skippedChangeStreamDocuments.has(next) &&\n\t\t\t\"documentKey\" in next &&\n\t\t\t(this.ids.has(next.documentKey._id as unknown as string) ? (\n\t\t\t\tnext.operationType !== \"update\" ||\n\t\t\t\t!this.fields ||\n\t\t\t\t(\n\t\t\t\t\tnext.updateDescription.updatedFields &&\n\t\t\t\t\tObject.keys(next.updateDescription.updatedFields).some(field => this.fields!.has(field))\n\t\t\t\t)\n\t\t\t) : (\n\t\t\t\t\"fullDocument\" in next &&\n\t\t\t\tthis.match!(next.fullDocument!)\n\t\t\t))\n\t\t) {\n\t\t\tclearTimeout(this.#flushTimeout);\n\t\t\t\n\t\t\tthis.updates.push(await this.publication.fetchSubscription(this, next));\n\t\t\t\n\t\t\tthis.#flushTimeout = setTimeout(this.flushUpdates, 1);\n\t\t}\n\t\t\n\t};\n\t\n\t\n}\n"],
5
- "mappings": "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",
6
- "names": ["sift", "publications", "Publication", "name", "props", "subscription", "_reason", "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"]
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\t\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\tconst subdocument = document[key];\n\t\t\t\t\n\t\t\t\tprojected[key] =\n\t\t\t\t\tsubdocument &&\n\t\t\t\t\t(typeof subprojection == \"object\" && typeof subdocument == \"object\") ?\n\t\t\t\t\t\tArray.isArray(subdocument) ?\n\t\t\t\t\t\t\tsubdocument.map((item: Document) => projectDocument(item, subprojection, true, false)) :\n\t\t\t\t\t\t\tprojectDocument(subdocument, subprojection, true, false) :\n\t\t\t\t\t\tsubdocument;\n\t\t\t}\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\tconst updatedFields = \"updateDescription\" in next ? [\n\t\t\t\t\t\t\t...Object.keys(next.updateDescription.updatedFields ?? {}),\n\t\t\t\t\t\t\t...next.updateDescription.removedFields ?? []\n\t\t\t\t\t\t] : null;\n\t\t\t\t\t\t\n\t\t\t\t\t\treturn [ \"u\"/* update */, doc, updatedFields ? (updatedFields.length ? updatedFields : true) : undefined ];\n\t\t\t\t\t}\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}\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 @typescript-eslint/naming-convention, camelcase\n}\n\nexport const publications =\n\tglobalThis.__insite_publications ??=// eslint-disable-line camelcase\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>, _reason?: any) { // eslint-disable-line @typescript-eslint/no-explicit-any\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\tvoid subscription.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\tvoid this.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\tvoid this.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: Projection | null = null;\n\tisProjectionInclusive = false;\n\tfields: Set<string> | null = null;\n\tsort: Sort | null = 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?: ReturnType<typeof setTimeout>;\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\tif (skippedChangeStreamDocuments.has(next) || !(\"documentKey\" in next))\n\t\t\treturn;\n\t\t\n\t\tif (this.ids.has(next.documentKey._id as unknown as string)) {\n\t\t\tif (next.operationType === \"update\" && this.fields) {\n\t\t\t\tconst { fields } = this;\n\t\t\t\t\n\t\t\t\tlet isRelevantUpdate = false;\n\t\t\t\t\n\t\t\t\tconst { updatedFields } = next.updateDescription;\n\t\t\t\t\n\t\t\t\tif (updatedFields)\n\t\t\t\t\tfor (const updatedField in updatedFields) { // eslint-disable-line guard-for-in\n\t\t\t\t\t\tif (fields.has(updatedField)) {\n\t\t\t\t\t\t\tisRelevantUpdate = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst dotIndex = updatedField.indexOf(\".\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (dotIndex !== -1 && fields.has(updatedField.slice(0, dotIndex))) {\n\t\t\t\t\t\t\tisRelevantUpdate = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst { removedFields } = next.updateDescription;\n\t\t\t\t\n\t\t\t\tif (!isRelevantUpdate && removedFields?.length)\n\t\t\t\t\tfor (const removedField of removedFields) {\n\t\t\t\t\t\tif (fields.has(removedField)) {\n\t\t\t\t\t\t\tisRelevantUpdate = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst dotIndex = removedField.indexOf(\".\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (dotIndex !== -1 && fields.has(removedField.slice(0, dotIndex))) {\n\t\t\t\t\t\t\tisRelevantUpdate = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!isRelevantUpdate)\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (!(\"fullDocument\" in next) || !this.match!(next.fullDocument!))\n\t\t\treturn;\n\t\t\n\t\tclearTimeout(this.#flushTimeout);\n\t\t\n\t\tthis.updates.push(await this.publication.fetchSubscription(this, next));\n\t\t\n\t\tthis.#flushTimeout = setTimeout(this.flushUpdates, 1);\n\t\t\n\t};\n\t\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["sift", "publications", "Publication", "name", "props", "subscription", "_reason", "reason", "SubscriptionHandle", "publicationName", "args", "handler", "immediately", "prevent", "publication", "publications", "reason", "CollectionMapSubscriptionHandle", "SubscriptionHandle", "publicationName", "args", "handler", "immediately", "next", "#flushTimeout", "skippedChangeStreamDocuments", "fields", "isRelevantUpdate", "updatedFields", "updatedField", "dotIndex", "removedFields", "removedField", "projectDocument", "document", "projection", "isInclusive", "isTop", "projected", "key", "subprojection", "subdocument", "item", "skippedChangeStreamDocuments", "CollectionMapPublication", "Publication", "collection", "name", "queryProps", "transform", "next", "args", "query", "sort", "triggers", "isProjectionInclusive", "fields", "subscription", "CollectionMapSubscriptionHandle", "_id", "doc", "updatedFields", "cursor", "array", "reason", "sift", "fetched"]
7
7
  }
@@ -2,9 +2,9 @@ import type { AbilitiesSchema } from "insite-common";
2
2
  import type { Document, WatchedCollection } from "insite-db";
3
3
  import { CollectionMapPublication as GenericCollectionMapPublication } from "../CollectionMapPublication";
4
4
  import type { WSSubscriptionArgs } from "./types";
5
- type RestArgs<AS extends AbilitiesSchema = AbilitiesSchema, D extends Document = Document, RA extends any[] = any[], T extends abstract new (...args: any) => any = typeof GenericCollectionMapPublication<D, WSSubscriptionArgs<AS, RA>>> = T extends abstract new (first: any, ...rest: infer R) => any ? R : never;
6
- export declare class CollectionMapPublication<AS extends AbilitiesSchema = AbilitiesSchema, D extends Document = Document, RA extends any[] = any[]> extends GenericCollectionMapPublication<D, WSSubscriptionArgs<AS, RA>> {
7
- constructor(collection: WatchedCollection<D>, ...restArgs: RestArgs<AS, D, RA>);
5
+ type RestArgs<AS extends AbilitiesSchema = AbilitiesSchema, D extends Document = Document, RA extends any[] = any[], U = unknown, S = unknown, T extends abstract new (...args: any) => any = typeof GenericCollectionMapPublication<D, WSSubscriptionArgs<AS, RA, U, S>>> = T extends abstract new (first: any, ...rest: infer R) => any ? R : never;
6
+ export declare class CollectionMapPublication<AS extends AbilitiesSchema = AbilitiesSchema, D extends Document = Document, RA extends any[] = any[], U = unknown, S = unknown> extends GenericCollectionMapPublication<D, WSSubscriptionArgs<AS, RA, U, S>> {
7
+ constructor(collection: WatchedCollection<D>, ...restArgs: RestArgs<AS, D, RA, U, S>);
8
8
  }
9
9
  export {};
10
10
  //# sourceMappingURL=CollectionMapPublication.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CollectionMapPublication.d.ts","sourceRoot":"","sources":["../../src/ws/CollectionMapPublication.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,wBAAwB,IAAI,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC1G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAMlD,KAAK,QAAQ,CACZ,EAAE,SAAS,eAAe,GAAG,eAAe,EAC5C,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EACxB,CAAC,SAAS,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,OAAO,+BAA+B,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IACjH,CAAC,SAAS,QAAQ,MAAM,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;AAG7E,qBAAa,wBAAwB,CACpC,EAAE,SAAS,eAAe,GAAG,eAAe,EAC5C,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,CACvB,SAAQ,+BAA+B,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3D,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;CAG9E"}
1
+ {"version":3,"file":"CollectionMapPublication.d.ts","sourceRoot":"","sources":["../../src/ws/CollectionMapPublication.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,wBAAwB,IAAI,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC1G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAMlD,KAAK,QAAQ,CACZ,EAAE,SAAS,eAAe,GAAG,eAAe,EAC5C,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EACxB,CAAC,GAAG,OAAO,EACX,CAAC,GAAG,OAAO,EACX,CAAC,SAAS,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,OAAO,+BAA+B,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IACvH,CAAC,SAAS,QAAQ,MAAM,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;AAG7E,qBAAa,wBAAwB,CACpC,EAAE,SAAS,eAAe,GAAG,eAAe,EAC5C,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EACxB,CAAC,GAAG,OAAO,EACX,CAAC,GAAG,OAAO,CACV,SAAQ,+BAA+B,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjE,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;CAGpF"}
@@ -2,7 +2,7 @@ import type { AbilitiesSchema } from "insite-common";
2
2
  import type { Document } from "insite-db";
3
3
  import { CollectionMapSubscriptionHandle as GenericCollectionMapSubscriptionHandle } from "../CollectionMapSubscriptionHandle";
4
4
  import type { WSSubscriptionArgs } from "./types";
5
- export declare class CollectionMapSubscriptionHandle<AS extends AbilitiesSchema = AbilitiesSchema, D extends Document = Document, RA extends any[] = any[]> extends GenericCollectionMapSubscriptionHandle<D, WSSubscriptionArgs<AS, RA>> {
6
- constructor(...args: ConstructorParameters<typeof GenericCollectionMapSubscriptionHandle<D, WSSubscriptionArgs<AS, RA>>>);
5
+ export declare class CollectionMapSubscriptionHandle<AS extends AbilitiesSchema = AbilitiesSchema, D extends Document = Document, RA extends any[] = any[], U = unknown, S = unknown> extends GenericCollectionMapSubscriptionHandle<D, WSSubscriptionArgs<AS, RA, U, S>> {
6
+ constructor(...args: ConstructorParameters<typeof GenericCollectionMapSubscriptionHandle<D, WSSubscriptionArgs<AS, RA, U, S>>>);
7
7
  }
8
8
  //# sourceMappingURL=CollectionMapSubscriptionHandle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CollectionMapSubscriptionHandle.d.ts","sourceRoot":"","sources":["../../src/ws/CollectionMapSubscriptionHandle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACN,+BAA+B,IAAI,sCAAsC,EACzE,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAMlD,qBAAa,+BAA+B,CAC3C,EAAE,SAAS,eAAe,GAAG,eAAe,EAC5C,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,CACvB,SAAQ,sCAAsC,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAClE,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,sCAAsC,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;CAGxH"}
1
+ {"version":3,"file":"CollectionMapSubscriptionHandle.d.ts","sourceRoot":"","sources":["../../src/ws/CollectionMapSubscriptionHandle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACN,+BAA+B,IAAI,sCAAsC,EACzE,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAMlD,qBAAa,+BAA+B,CAC3C,EAAE,SAAS,eAAe,GAAG,eAAe,EAC5C,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAC7B,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EACxB,CAAC,GAAG,OAAO,EACX,CAAC,GAAG,OAAO,CACV,SAAQ,sCAAsC,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxE,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,sCAAsC,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAG9H"}
@@ -1,7 +1,7 @@
1
1
  import type { AbilitiesSchema } from "insite-common";
2
2
  import { Publication as GenericPublication } from "../Publication";
3
3
  import type { WSSubscriptionArgs } from "./types";
4
- export declare class Publication<AS extends AbilitiesSchema = AbilitiesSchema, RA extends any[] = any[]> extends GenericPublication<WSSubscriptionArgs<AS, RA>> {
5
- constructor(...args: ConstructorParameters<typeof GenericPublication<WSSubscriptionArgs<AS, RA>>>);
4
+ export declare class Publication<AS extends AbilitiesSchema = AbilitiesSchema, RA extends any[] = any[], U = unknown, S = unknown> extends GenericPublication<WSSubscriptionArgs<AS, RA, U, S>> {
5
+ constructor(...args: ConstructorParameters<typeof GenericPublication<WSSubscriptionArgs<AS, RA, U, S>>>);
6
6
  }
7
7
  //# sourceMappingURL=Publication.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Publication.d.ts","sourceRoot":"","sources":["../../src/ws/Publication.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAMlD,qBAAa,WAAW,CACvB,EAAE,SAAS,eAAe,GAAG,eAAe,EAC5C,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,CACvB,SAAQ,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3C,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;CAGjG"}
1
+ {"version":3,"file":"Publication.d.ts","sourceRoot":"","sources":["../../src/ws/Publication.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAMlD,qBAAa,WAAW,CACvB,EAAE,SAAS,eAAe,GAAG,eAAe,EAC5C,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EACxB,CAAC,GAAG,OAAO,EACX,CAAC,GAAG,OAAO,CACV,SAAQ,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjD,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAGvG"}
@@ -1,7 +1,7 @@
1
1
  import type { AbilitiesSchema } from "insite-common";
2
2
  import { SubscriptionHandle as GenericSubscriptionHandle } from "../SubscriptionHandle";
3
3
  import type { WSSubscriptionArgs } from "./types";
4
- export declare class SubscriptionHandle<AS extends AbilitiesSchema = AbilitiesSchema, RA extends any[] = any[]> extends GenericSubscriptionHandle<WSSubscriptionArgs<AS, RA>> {
5
- constructor(...args: ConstructorParameters<typeof GenericSubscriptionHandle<WSSubscriptionArgs<AS, RA>>>);
4
+ export declare class SubscriptionHandle<AS extends AbilitiesSchema = AbilitiesSchema, RA extends any[] = any[], U = unknown, S = unknown> extends GenericSubscriptionHandle<WSSubscriptionArgs<AS, RA, U, S>> {
5
+ constructor(...args: ConstructorParameters<typeof GenericSubscriptionHandle<WSSubscriptionArgs<AS, RA, U, S>>>);
6
6
  }
7
7
  //# sourceMappingURL=SubscriptionHandle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SubscriptionHandle.d.ts","sourceRoot":"","sources":["../../src/ws/SubscriptionHandle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,IAAI,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAMlD,qBAAa,kBAAkB,CAC9B,EAAE,SAAS,eAAe,GAAG,eAAe,EAC5C,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,CACvB,SAAQ,yBAAyB,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAClD,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,yBAAyB,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;CAGxG"}
1
+ {"version":3,"file":"SubscriptionHandle.d.ts","sourceRoot":"","sources":["../../src/ws/SubscriptionHandle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,IAAI,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAMlD,qBAAa,kBAAkB,CAC9B,EAAE,SAAS,eAAe,GAAG,eAAe,EAC5C,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EACxB,CAAC,GAAG,OAAO,EACX,CAAC,GAAG,OAAO,CACV,SAAQ,yBAAyB,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxD,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,yBAAyB,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAG9G"}
@@ -1,9 +1,9 @@
1
1
  import type { AbilitiesSchema } from "insite-common";
2
- import type { WSSCWithUser } from "insite-users-server-ws";
3
- import type { WSServer } from "insite-ws/server";
2
+ import type { Session, User } from "insite-users-server";
3
+ import type { WSSCWithUser, WSServer } from "insite-ws/server";
4
4
  export declare class SubscriptionHandler<AS extends AbilitiesSchema> {
5
5
  #private;
6
6
  constructor(wss: WSServer, withCollections?: boolean);
7
- renewSubscriptionsFor: (webSockets: WSSCWithUser<AS>[]) => void;
7
+ renewSubscriptionsFor: (webSockets: WSSCWithUser<AS, User<AS>, Session<AS>>[]) => void;
8
8
  }
9
9
  //# sourceMappingURL=SubscriptionHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SubscriptionHandler.d.ts","sourceRoot":"","sources":["../../src/ws/SubscriptionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAsBjD,qBAAa,mBAAmB,CAAC,EAAE,SAAS,eAAe;;gBAC9C,GAAG,EAAE,QAAQ,EAAE,eAAe,CAAC,EAAE,OAAO;IA0BpD,qBAAqB,GAAI,YAAY,YAAY,CAAC,EAAE,CAAC,EAAE,UAIrD;CAiDF"}
1
+ {"version":3,"file":"SubscriptionHandler.d.ts","sourceRoot":"","sources":["../../src/ws/SubscriptionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAsB/D,qBAAa,mBAAmB,CAAC,EAAE,SAAS,eAAe;;gBAC9C,GAAG,EAAE,QAAQ,EAAE,eAAe,CAAC,EAAE,OAAO;IA0BpD,qBAAqB,GAAI,YAAY,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAI5E;CAiDF"}
@@ -1,8 +1,9 @@
1
1
  import type { AbilitiesSchema } from "insite-common";
2
+ import type { Document } from "insite-db";
2
3
  import type { CollectionMapSubscriptionHandle } from "./CollectionMapSubscriptionHandle";
3
4
  import type { SubscriptionHandle } from "./SubscriptionHandle";
4
- export declare class Subscriptions<AS extends AbilitiesSchema> extends Map<number | string, CollectionMapSubscriptionHandle<AS> | SubscriptionHandle<AS>> {
5
- subscribe: (key: string | number, value: CollectionMapSubscriptionHandle<AS, import("bson").Document, any[]> | SubscriptionHandle<AS, any[]>) => this;
5
+ export declare class Subscriptions<AS extends AbilitiesSchema> extends Map<number | string, CollectionMapSubscriptionHandle<AS, Document, any[], any, any> | SubscriptionHandle<AS, any[], any, any>> {
6
+ subscribe: (key: string | number, value: CollectionMapSubscriptionHandle<AS, Document, any[], any, any> | SubscriptionHandle<AS, any[], any, any>) => this;
6
7
  renew(): Promise<void[]>;
7
8
  cancel(key: number | string): void;
8
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Subscriptions.d.ts","sourceRoot":"","sources":["../../src/ws/Subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,qBAAa,aAAa,CAAC,EAAE,SAAS,eAAe,CAAE,SAAQ,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,+BAA+B,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAEhJ,SAAS,6IAAY;IAErB,KAAK;IAIL,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAM3B"}
1
+ {"version":3,"file":"Subscriptions.d.ts","sourceRoot":"","sources":["../../src/ws/Subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAM/D,qBAAa,aAAa,CAAC,EAAE,SAAS,eAAe,CAAE,SAAQ,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,+BAA+B,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,kBAAkB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAE5L,SAAS,kJAAY;IAErB,KAAK;IAIL,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAM3B"}
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 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};
1
+ import C from"sift";var u=globalThis.__insite_publications??=new Map,S=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 p=class{constructor(e,t,n,s,i){let o=u.get(e);o?(this.publication=o,this.args=t,this.handler=n,i||(this.publication.subscribe(this),s&&this.changed(null))):process.env.NODE_ENV==="development"&&console.error("Unknown publication",e)}publication;args;handler;async changed(e){this.handler(await this.publication.fetchSubscription(this,e),e)}cancel(){this.publication?.unsubscribe(this)}renew(){return this.publication?.unsubscribe(this),this.publication?.subscribe(this),this.changed(null)}};var a=class extends p{constructor(e,t,n,s){super(e,t,n,s,!0),this.publication&&(this.publication.subscribe(this),s&&this.changed(null))}ids=new Set;query=null;projection=null;isProjectionInclusive=!1;fields=null;sort=null;match;async changed(e){this.handler([await this.publication.fetchSubscription(this,e)])}updates=[];#e;flushUpdates=()=>{this.updates.length&&(this.handler(this.updates),this.updates=[])};collectionChangeListener=async e=>{if(!(g.has(e)||!("documentKey"in e))){if(this.ids.has(e.documentKey._id)){if(e.operationType==="update"&&this.fields){let{fields:t}=this,n=!1,{updatedFields:s}=e.updateDescription;if(s)for(let o in s){if(t.has(o)){n=!0;break}let r=o.indexOf(".");if(r!==-1&&t.has(o.slice(0,r))){n=!0;break}}let{removedFields:i}=e.updateDescription;if(!n&&i?.length)for(let o of i){if(t.has(o)){n=!0;break}let r=o.indexOf(".");if(r!==-1&&t.has(o.slice(0,r))){n=!0;break}}if(!n)return}}else if(!("fullDocument"in e)||!this.match(e.fullDocument))return;clearTimeout(this.#e),this.updates.push(await this.publication.fetchSubscription(this,e)),this.#e=setTimeout(this.flushUpdates,1)}}};function m(c,e,t=!0,n=!0){if(e)if(t){let s={};for(let i in e){let o=e[i],r=c[i];s[i]=r&&typeof o=="object"&&typeof r=="object"?Array.isArray(r)?r.map(l=>m(l,o,!0,!1)):m(r,o,!0,!1):r}return n&&e._id===0&&delete s._id,s}else{let s={...c};for(let i in e){let o=e[i];typeof o=="object"?s[i]=Array.isArray(c[i])?c[i].map(r=>m(r,o,!1,!1)):m(c[i],o,!1,!1):delete s[i]}return s}return c}var g=new WeakSet,d=class extends S{constructor(e,t,n,s){super(t),this.collection=e,this.queryProps=n,this.transform=s}type="map";collection;queryProps;transform;skip(e){g.add(e)}makeQueryProps(e){let{query:t=null,projection:n=null,sort:s=null,triggers:i}=(typeof this.queryProps=="function"?this.queryProps(...e):this.queryProps)||{},o=!1,r=null;if(n){for(let l in n)if(o=!!n[l],l!=="_id")break;o&&(r=new Set([...Object.keys(t??{}),...Object.keys(n),...i??[]]),r.delete("_id"),n._id!==0&&(n._id=1))}return{query:t,projection:n,isProjectionInclusive:o,fields:r,sort:s,args:e}}async fetchSubscription(e,t){if(e instanceof a&&e.query){if(t&&"documentKey"in t){let i=t.documentKey._id;if(t.operationType==="insert"||t.operationType!=="delete"&&e.match(t.fullDocument)){let o=m(t.fullDocument,e.projection,e.isProjectionInclusive);if(this.transform?.(o,e.args),e.ids.has(i)){let r="updateDescription"in t?[...Object.keys(t.updateDescription.updatedFields??{}),...t.updateDescription.removedFields??[]]:null;return["u",o,r?r.length?r:!0:void 0]}return e.ids.add(i),["c",o]}return e.ids.delete(i),["d",i]}let n=this.collection.find(e.query);e.projection&&n.project(e.projection),e.sort&&n.sort(e.sort);let s=await n.toArray();if(e.ids)if(e.ids.clear(),this.transform)for(let i of s)e.ids.add(i._id),this.transform(i,e.args);else for(let i of s)e.ids.add(i._id);else if(this.transform)for(let i of s)this.transform(i,e.args);return["i",s,e.sort]}return null}changed(e){return Promise.all([...this.subscriptions].map(t=>t.changed(e)))}onSubscribe=e=>{e instanceof a&&(Object.assign(e,this.makeQueryProps(e.args)),e.query&&(e.match=C(e.query),this.collection.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 b=class extends d{constructor(e,...t){super(e,...t)}};var h=class extends a{constructor(...e){super(...e)}};var A=class extends S{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 w}from"insite-db";function D(c){return c.type==="map"}function P(c){return c[0]instanceof w}var W=["object","map"],U=class{constructor(e,t){e.on("client-connect",this.#t),e.on("client-session",this.#n),e.on("client-message:s-s",this.#i),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 b(...n):new A(...n)}}:{publish(...n){return new A(...n)}})}#e=new WeakMap;renewSubscriptionsFor=e=>{for(let t of e)this.#e.get(t)?.renew()};#t=e=>this.#e.set(e,new y);#n=e=>this.#e.get(e)?.renew();#i=(e,t,n,s,i,o)=>{if(W.includes(t)){let r=u.get(n);if(r?.type===t){let l=[n,[e,...i],x=>e.sendMessage("s-c",s,x),o];this.#e.get(e)?.subscribe(s,D(r)?new h(...l):new f(...l))}}};#o=(e,t)=>this.#e.get(e)?.cancel(t);#s=e=>{for(let t of this.#e.get(e)?.values()??[])t.cancel()}};export{b as CollectionMapPublication,h as CollectionMapSubscriptionHandle,A as Publication,f as SubscriptionHandle,U 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\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}\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, @typescript-eslint/naming-convention\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>, _reason?: any) { // eslint-disable-line @typescript-eslint/no-explicit-any\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\tvoid subscription.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\tvoid this.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\tvoid this.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: Projection | null = null;\n\tisProjectionInclusive = false;\n\tfields: Set<string> | null = null;\n\tsort: Sort | null = 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?: ReturnType<typeof setTimeout>;\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\tisCollectionMapPublicationArgs,\n\tisPublicationCollectionMap,\n\ttype CollectionMapPublicationArgs,\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\tvoid this.#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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",
6
- "names": ["sift", "publications", "Publication", "name", "props", "subscription", "_reason", "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"]
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\t\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\tconst subdocument = document[key];\n\t\t\t\t\n\t\t\t\tprojected[key] =\n\t\t\t\t\tsubdocument &&\n\t\t\t\t\t(typeof subprojection == \"object\" && typeof subdocument == \"object\") ?\n\t\t\t\t\t\tArray.isArray(subdocument) ?\n\t\t\t\t\t\t\tsubdocument.map((item: Document) => projectDocument(item, subprojection, true, false)) :\n\t\t\t\t\t\t\tprojectDocument(subdocument, subprojection, true, false) :\n\t\t\t\t\t\tsubdocument;\n\t\t\t}\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\tconst updatedFields = \"updateDescription\" in next ? [\n\t\t\t\t\t\t\t...Object.keys(next.updateDescription.updatedFields ?? {}),\n\t\t\t\t\t\t\t...next.updateDescription.removedFields ?? []\n\t\t\t\t\t\t] : null;\n\t\t\t\t\t\t\n\t\t\t\t\t\treturn [ \"u\"/* update */, doc, updatedFields ? (updatedFields.length ? updatedFields : true) : undefined ];\n\t\t\t\t\t}\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}\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 @typescript-eslint/naming-convention, camelcase\n}\n\nexport const publications =\n\tglobalThis.__insite_publications ??=// eslint-disable-line camelcase\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>, _reason?: any) { // eslint-disable-line @typescript-eslint/no-explicit-any\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\tvoid subscription.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\tvoid this.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\tvoid this.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: Projection | null = null;\n\tisProjectionInclusive = false;\n\tfields: Set<string> | null = null;\n\tsort: Sort | null = 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?: ReturnType<typeof setTimeout>;\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\tif (skippedChangeStreamDocuments.has(next) || !(\"documentKey\" in next))\n\t\t\treturn;\n\t\t\n\t\tif (this.ids.has(next.documentKey._id as unknown as string)) {\n\t\t\tif (next.operationType === \"update\" && this.fields) {\n\t\t\t\tconst { fields } = this;\n\t\t\t\t\n\t\t\t\tlet isRelevantUpdate = false;\n\t\t\t\t\n\t\t\t\tconst { updatedFields } = next.updateDescription;\n\t\t\t\t\n\t\t\t\tif (updatedFields)\n\t\t\t\t\tfor (const updatedField in updatedFields) { // eslint-disable-line guard-for-in\n\t\t\t\t\t\tif (fields.has(updatedField)) {\n\t\t\t\t\t\t\tisRelevantUpdate = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst dotIndex = updatedField.indexOf(\".\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (dotIndex !== -1 && fields.has(updatedField.slice(0, dotIndex))) {\n\t\t\t\t\t\t\tisRelevantUpdate = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst { removedFields } = next.updateDescription;\n\t\t\t\t\n\t\t\t\tif (!isRelevantUpdate && removedFields?.length)\n\t\t\t\t\tfor (const removedField of removedFields) {\n\t\t\t\t\t\tif (fields.has(removedField)) {\n\t\t\t\t\t\t\tisRelevantUpdate = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst dotIndex = removedField.indexOf(\".\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (dotIndex !== -1 && fields.has(removedField.slice(0, dotIndex))) {\n\t\t\t\t\t\t\tisRelevantUpdate = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!isRelevantUpdate)\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (!(\"fullDocument\" in next) || !this.match!(next.fullDocument!))\n\t\t\treturn;\n\t\t\n\t\tclearTimeout(this.#flushTimeout);\n\t\t\n\t\tthis.updates.push(await this.publication.fetchSubscription(this, next));\n\t\t\n\t\tthis.#flushTimeout = setTimeout(this.flushUpdates, 1);\n\t\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\tU = unknown,\n\tS = unknown,\n\tT extends abstract new (...args: any) => any = typeof GenericCollectionMapPublication<D, WSSubscriptionArgs<AS, RA, U, S>>\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\tU = unknown,\n\tS = unknown\n> extends GenericCollectionMapPublication<D, WSSubscriptionArgs<AS, RA, U, S>> {\n\tconstructor(collection: WatchedCollection<D>, ...restArgs: RestArgs<AS, D, RA, U, S>) {\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\tU = unknown,\n\tS = unknown\n> extends GenericCollectionMapSubscriptionHandle<D, WSSubscriptionArgs<AS, RA, U, S>> {\n\tconstructor(...args: ConstructorParameters<typeof GenericCollectionMapSubscriptionHandle<D, WSSubscriptionArgs<AS, RA, U, S>>>) {\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\tU = unknown,\n\tS = unknown\n> extends GenericPublication<WSSubscriptionArgs<AS, RA, U, S>> {\n\tconstructor(...args: ConstructorParameters<typeof GenericPublication<WSSubscriptionArgs<AS, RA, U, S>>>) {\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\tU = unknown,\n\tS = unknown\n> extends GenericSubscriptionHandle<WSSubscriptionArgs<AS, RA, U, S>> {\n\tconstructor(...args: ConstructorParameters<typeof GenericSubscriptionHandle<WSSubscriptionArgs<AS, RA, U, S>>>) {\n\t\tsuper(...args);\n\t}\n}\n", "import type { AbilitiesSchema } from \"insite-common\";\nimport type { Document } from \"insite-db\";\nimport type { CollectionMapSubscriptionHandle } from \"./CollectionMapSubscriptionHandle\";\nimport type { SubscriptionHandle } from \"./SubscriptionHandle\";\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nexport class Subscriptions<AS extends AbilitiesSchema> extends Map<number | string, CollectionMapSubscriptionHandle<AS, Document, any[], any, any> | SubscriptionHandle<AS, any[], any, any>> {\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 Sort,\n\ttype WatchedCollection\n} from \"insite-db\";\nimport type { WSSCWithUser } from \"insite-ws/server\";\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\tU = unknown,\n\tS = unknown\n> = [ WSSCWithUser<AS, U, S>, ...RA ];\n\n\nexport type PublicationArgs<\n\tAS extends AbilitiesSchema,\n\tRA extends any[] = any[],\n\tU = unknown,\n\tS = unknown\n> = [\n\tname: string,\n\tprops?: PublicationProps<WSSubscriptionArgs<AS, RA, U, S>>\n];\n\nexport type WithPublish<T, AS extends AbilitiesSchema> = T & {\n\tpublish<RA extends any[], U = unknown, S = unknown>(...args: PublicationArgs<AS, RA, U, S>): Publication<AS, RA, U, S>;\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\tU = unknown,\n\tS = unknown\n> = [\n\tcollection: WatchedCollection<D>,\n\tname: string,\n\tqueryProps?: ((...args: WSSubscriptionArgs<AS, RA, U, S>) => QueryProps<D> | false | null | void) | QueryProps<D> | false | null,\n\ttransform?: (doc: TransformableDoc<D>, args: WSSubscriptionArgs<AS, RA, U, S>) => void\n];\n\nexport type WithPublishCollection<T, AS extends AbilitiesSchema> = T & WithPublish<T, AS> & {\n\tpublish<RA extends any[], D extends Document, U = unknown, S = unknown>(...args: CollectionMapPublicationArgs<AS, D, RA, U, S>): CollectionMapPublication<AS, D, RA, U, S>;\n};\n\n\nexport function isPublicationCollectionMap<\n\tAS extends AbilitiesSchema,\n\tD extends Document,\n\tRA extends any[] = any[],\n\tU = unknown,\n\tS = unknown\n>(\n\tpublication: CollectionMapPublication<AS, D, RA, U, S> | Publication<AS, RA, U, S>\n): publication is CollectionMapPublication<AS, D, RA, U, S> {\n\treturn publication.type === \"map\";\n}\n\nexport function isCollectionMapPublicationArgs<\n\tAS extends AbilitiesSchema,\n\tD extends Document,\n\tRA extends any[] = any[],\n\tU = unknown,\n\tS = unknown\n>(args: CollectionMapPublicationArgs<AS, D, RA, U, S> | PublicationArgs<AS, RA, U, S>): args is CollectionMapPublicationArgs<AS, D, RA, U, S> {\n\treturn args[0] instanceof Collection;\n}\n", "import type { AbilitiesSchema } from \"insite-common\";\nimport type { Document } from \"insite-db\";\nimport type { Session, User } from \"insite-users-server\";\nimport type { WSSCWithUser, 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\tisCollectionMapPublicationArgs,\n\tisPublicationCollectionMap,\n\ttype CollectionMapPublicationArgs,\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, User<AS>, Session<AS>> | PublicationArgs<AS, RA, User<AS>, Session<AS>>) {\n\t\t\t\treturn isCollectionMapPublicationArgs(args) ?\n\t\t\t\t\tnew CollectionMapPublication<AS, D, RA, User<AS>, Session<AS>>(...args) :\n\t\t\t\t\tnew Publication<AS, RA, User<AS>, Session<AS>>(...args);\n\t\t\t}\n\t\t} : {\n\t\t\tpublish<RA extends any[]>(...args: PublicationArgs<AS, RA, User<AS>, Session<AS>>) {\n\t\t\t\treturn new Publication<AS, RA, User<AS>, Session<AS>>(...args);\n\t\t\t}\n\t\t});\n\t\t\n\t}\n\t\n\t#wsSubscriptionMap = new WeakMap<WSSCWithUser<AS, User<AS>, Session<AS>>, Subscriptions<AS>>();\n\t\n\trenewSubscriptionsFor = (webSockets: WSSCWithUser<AS, User<AS>, Session<AS>>[]) => {\n\t\tfor (const wssc of webSockets)\n\t\t\tvoid this.#wsSubscriptionMap.get(wssc)?.renew();\n\t\t\n\t};\n\t\n\t#handleClientConnect = (wssc: WSSCWithUser<AS, User<AS>, Session<AS>>) =>\n\t\tthis.#wsSubscriptionMap.set(wssc, new Subscriptions());\n\t\n\t#handleClientSession = (wssc: WSSCWithUser<AS, User<AS>, Session<AS>>) =>\n\t\tthis.#wsSubscriptionMap.get(wssc)?.renew();\n\t\n\t#handleClientSubscribe = (\n\t\twssc: WSSCWithUser<AS, User<AS>, Session<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, Document, any[], User<AS>, Session<AS>> | Publication<AS, any[], User<AS>, Session<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, any[], User<AS>, Session<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, Document, any[], User<AS>, Session<AS>>(...subscriptionHandleArgs) :\n\t\t\t\t\t\t\tnew SubscriptionHandle<AS, any[], User<AS>, Session<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, User<AS>, Session<AS>>, i: number | string) =>\n\t\tthis.#wsSubscriptionMap.get(wssc)?.cancel(i);\n\t\n\t#handleClientClose = (wssc: WSSCWithUser<AS, User<AS>, Session<AS>>) => {\n\t\tfor (const subscription of this.#wsSubscriptionMap.get(wssc)?.values() ?? [])\n\t\t\tsubscription.cancel();\n\t\t\n\t};\n\t\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["sift", "publications", "Publication", "name", "props", "subscription", "_reason", "reason", "SubscriptionHandle", "publicationName", "args", "handler", "immediately", "prevent", "publication", "publications", "reason", "CollectionMapSubscriptionHandle", "SubscriptionHandle", "publicationName", "args", "handler", "immediately", "next", "#flushTimeout", "skippedChangeStreamDocuments", "fields", "isRelevantUpdate", "updatedFields", "updatedField", "dotIndex", "removedFields", "removedField", "projectDocument", "document", "projection", "isInclusive", "isTop", "projected", "key", "subprojection", "subdocument", "item", "skippedChangeStreamDocuments", "CollectionMapPublication", "Publication", "collection", "name", "queryProps", "transform", "next", "args", "query", "sort", "triggers", "isProjectionInclusive", "fields", "subscription", "CollectionMapSubscriptionHandle", "_id", "doc", "updatedFields", "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
  }
@@ -1,16 +1,16 @@
1
1
  import type { AbilitiesSchema } from "insite-common";
2
- import { type Document, type Filter, type WatchedCollection, type Sort } from "insite-db";
3
- import type { WSSCWithUser } from "insite-users-server-ws";
2
+ import { type Document, type Filter, type Sort, type WatchedCollection } from "insite-db";
3
+ import type { WSSCWithUser } from "insite-ws/server";
4
4
  import type { Projection, PublicationProps, TransformableDoc } from "../types";
5
5
  import type { CollectionMapPublication } from "./CollectionMapPublication";
6
6
  import type { Publication } from "./Publication";
7
- export type WSSubscriptionArgs<AS extends AbilitiesSchema, RA extends any[] = any[]> = [WSSCWithUser<AS>, ...RA];
8
- export type PublicationArgs<AS extends AbilitiesSchema, RA extends any[] = any[]> = [
7
+ export type WSSubscriptionArgs<AS extends AbilitiesSchema, RA extends any[] = any[], U = unknown, S = unknown> = [WSSCWithUser<AS, U, S>, ...RA];
8
+ export type PublicationArgs<AS extends AbilitiesSchema, RA extends any[] = any[], U = unknown, S = unknown> = [
9
9
  name: string,
10
- props?: PublicationProps<WSSubscriptionArgs<AS, RA>>
10
+ props?: PublicationProps<WSSubscriptionArgs<AS, RA, U, S>>
11
11
  ];
12
12
  export type WithPublish<T, AS extends AbilitiesSchema> = T & {
13
- publish<RA extends any[]>(...args: PublicationArgs<AS, RA>): Publication<AS, RA>;
13
+ publish<RA extends any[], U = unknown, S = unknown>(...args: PublicationArgs<AS, RA, U, S>): Publication<AS, RA, U, S>;
14
14
  };
15
15
  type QueryProps<D extends Document> = {
16
16
  query?: Filter<D>;
@@ -18,16 +18,16 @@ type QueryProps<D extends Document> = {
18
18
  sort?: Sort;
19
19
  triggers?: string[];
20
20
  };
21
- export type CollectionMapPublicationArgs<AS extends AbilitiesSchema, D extends Document, RA extends any[] = any[]> = [
21
+ export type CollectionMapPublicationArgs<AS extends AbilitiesSchema, D extends Document, RA extends any[] = any[], U = unknown, S = unknown> = [
22
22
  collection: WatchedCollection<D>,
23
23
  name: string,
24
- queryProps?: ((...args: WSSubscriptionArgs<AS, RA>) => false | null | QueryProps<D> | void) | false | null | QueryProps<D>,
25
- transform?: (doc: TransformableDoc<D>, args: WSSubscriptionArgs<AS, RA>) => void
24
+ queryProps?: ((...args: WSSubscriptionArgs<AS, RA, U, S>) => QueryProps<D> | false | null | void) | QueryProps<D> | false | null,
25
+ transform?: (doc: TransformableDoc<D>, args: WSSubscriptionArgs<AS, RA, U, S>) => void
26
26
  ];
27
27
  export type WithPublishCollection<T, AS extends AbilitiesSchema> = T & WithPublish<T, AS> & {
28
- publish<RA extends any[], D extends Document>(...args: CollectionMapPublicationArgs<AS, D, RA>): CollectionMapPublication<AS, D, RA>;
28
+ publish<RA extends any[], D extends Document, U = unknown, S = unknown>(...args: CollectionMapPublicationArgs<AS, D, RA, U, S>): CollectionMapPublication<AS, D, RA, U, S>;
29
29
  };
30
- export declare function isPublicationCollectionMap<AS extends AbilitiesSchema, D extends Document>(publication: CollectionMapPublication<AS, D> | Publication<AS>): publication is CollectionMapPublication<AS, D>;
31
- export declare function isCollectionMapPublicationArgs<AS extends AbilitiesSchema, D extends Document, RA extends any[] = any[]>(args: CollectionMapPublicationArgs<AS, D, RA> | PublicationArgs<AS, RA>): args is CollectionMapPublicationArgs<AS, D, RA>;
30
+ export declare function isPublicationCollectionMap<AS extends AbilitiesSchema, D extends Document, RA extends any[] = any[], U = unknown, S = unknown>(publication: CollectionMapPublication<AS, D, RA, U, S> | Publication<AS, RA, U, S>): publication is CollectionMapPublication<AS, D, RA, U, S>;
31
+ export declare function isCollectionMapPublicationArgs<AS extends AbilitiesSchema, D extends Document, RA extends any[] = any[], U = unknown, S = unknown>(args: CollectionMapPublicationArgs<AS, D, RA, U, S> | PublicationArgs<AS, RA, U, S>): args is CollectionMapPublicationArgs<AS, D, RA, U, S>;
32
32
  export {};
33
33
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ws/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ws/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,43 +1,56 @@
1
1
  {
2
- "name": "insite-subscriptions-server",
3
- "version": "2.3.3",
4
- "description": "inSite subscriptions server side",
5
- "type": "module",
6
- "main": "./dist/index.js",
7
- "module": "./dist/index.js",
8
- "exports": {
9
- ".": "./dist/index.js",
10
- "./ws": "./dist/ws/index.js"
11
- },
12
- "packageManager": "bun@1.2.18",
13
- "scripts": {
14
- "test": "echo \"Error: no test specified\" && exit 1",
15
- "build": "bun .conveyer.js",
16
- "postbuild": "tsc -p ."
17
- },
18
- "repository": {
19
- "type": "git",
20
- "url": "git+https://github.com/nesvet/insite-subscriptions-server.git"
21
- },
22
- "keywords": [
23
- "insite",
24
- "subscriptions",
25
- "server"
26
- ],
27
- "author": "Eugene Nesvetaev <dev@nesvet.dev> (https://nesvet.dev/)",
28
- "license": "MIT",
29
- "dependencies": {
30
- "insite-common": "^2.3.3",
31
- "insite-db": "^2.3.3",
32
- "insite-users-server-ws": "^2.3.3",
33
- "insite-ws": "^2.3.3",
34
- "sift": "^16.0.1"
35
- },
36
- "devDependencies": {
37
- "@nesvet/conveyer": "^2.6.1",
38
- "@nesvet/eslint-config": "^2.1.2",
39
- "@types/node": "^24.0.13",
40
- "@types/ws": "^8.18.1",
41
- "typescript": "^5.8.3"
42
- }
2
+ "name": "insite-subscriptions-server",
3
+ "version": "2.4.0",
4
+ "description": "Server-side subscriptions/publications for inSite",
5
+ "keywords": [
6
+ "insite",
7
+ "subscriptions",
8
+ "publications",
9
+ "server"
10
+ ],
11
+ "homepage": "https://github.com/nesvet/insite#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/nesvet/insite/issues"
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/nesvet/insite.git",
18
+ "directory": "packages/subscriptions-server"
19
+ },
20
+ "funding": {
21
+ "type": "patreon",
22
+ "url": "https://www.patreon.com/nesvet"
23
+ },
24
+ "license": "MIT",
25
+ "author": "Eugene Nesvetaev <dev@nesvet.dev> (https://nesvet.dev/)",
26
+ "type": "module",
27
+ "exports": {
28
+ ".": "./dist/index.js",
29
+ "./ws": "./dist/ws/index.js"
30
+ },
31
+ "main": "./dist/index.js",
32
+ "module": "./dist/index.js",
33
+ "files": [
34
+ "dist",
35
+ "README.md",
36
+ "LICENSE"
37
+ ],
38
+ "scripts": {
39
+ "build": "bun .conveyer.js",
40
+ "postbuild": "tsc -p .",
41
+ "clean": "rm -rf dist",
42
+ "test": "echo \"Error: no test specified\" && exit 1",
43
+ "typecheck": "tsc --noEmit"
44
+ },
45
+ "dependencies": {
46
+ "insite-common": "^2.4.0",
47
+ "insite-db": "^2.4.0",
48
+ "insite-users-server": "^2.4.0",
49
+ "insite-ws": "^2.4.0",
50
+ "sift": "^17.1.3"
51
+ },
52
+ "packageManager": "bun@1.3.9",
53
+ "engines": {
54
+ "node": ">=20.0.0"
55
+ }
43
56
  }