@resolveio/server-lib 20.9.3 → 20.9.5

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.
@@ -0,0 +1,644 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __values = (this && this.__values) || function(o) {
39
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
40
+ if (m) return m.call(o);
41
+ if (o && typeof o.length === "number") return {
42
+ next: function () {
43
+ if (o && i >= o.length) o = void 0;
44
+ return { value: o && o[i++], done: !o };
45
+ }
46
+ };
47
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
48
+ };
49
+ var __read = (this && this.__read) || function (o, n) {
50
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
51
+ if (!m) return o;
52
+ var i = m.call(o), r, ar = [], e;
53
+ try {
54
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
55
+ }
56
+ catch (error) { e = { error: error }; }
57
+ finally {
58
+ try {
59
+ if (r && !r.done && (m = i["return"])) m.call(i);
60
+ }
61
+ finally { if (e) throw e.error; }
62
+ }
63
+ return ar;
64
+ };
65
+ Object.defineProperty(exports, "__esModule", { value: true });
66
+ exports.recordAggregateDependencies = exports.recordDependencyResult = exports.withDependencyTracking = void 0;
67
+ var async_hooks_1 = require("async_hooks");
68
+ var common_1 = require("./common");
69
+ var dependencyStorage = new async_hooks_1.AsyncLocalStorage();
70
+ function withDependencyTracking(fn) {
71
+ return __awaiter(this, void 0, void 0, function () {
72
+ var context, result;
73
+ var _this = this;
74
+ return __generator(this, function (_a) {
75
+ switch (_a.label) {
76
+ case 0:
77
+ context = {
78
+ dependencies: new Map(),
79
+ filters: new Map(),
80
+ watchAllCollections: new Set()
81
+ };
82
+ return [4 /*yield*/, dependencyStorage.run(context, function () { return __awaiter(_this, void 0, void 0, function () {
83
+ return __generator(this, function (_a) {
84
+ switch (_a.label) {
85
+ case 0: return [4 /*yield*/, fn()];
86
+ case 1:
87
+ result = _a.sent();
88
+ return [2 /*return*/];
89
+ }
90
+ });
91
+ }); })];
92
+ case 1:
93
+ _a.sent();
94
+ return [2 /*return*/, {
95
+ result: result,
96
+ snapshot: {
97
+ dependencies: cloneDependencyMap(context.dependencies),
98
+ filters: cloneFilterMap(context.filters),
99
+ watchAllCollections: new Set(context.watchAllCollections)
100
+ }
101
+ }];
102
+ }
103
+ });
104
+ });
105
+ }
106
+ exports.withDependencyTracking = withDependencyTracking;
107
+ function recordDependencyResult(collection, result, options) {
108
+ var e_1, _a;
109
+ var context = dependencyStorage.getStore();
110
+ if (!context) {
111
+ return;
112
+ }
113
+ if (options === null || options === void 0 ? void 0 : options.filter) {
114
+ var filterList = context.filters.get(collection);
115
+ if (!filterList) {
116
+ filterList = [];
117
+ context.filters.set(collection, filterList);
118
+ }
119
+ filterList.push((0, common_1.deepCopy)(options.filter));
120
+ }
121
+ var ids = new Set();
122
+ collectIdsFromResult(result, ids);
123
+ if (!ids.size && (options === null || options === void 0 ? void 0 : options.filter)) {
124
+ collectIdsFromFilter(options.filter, ids);
125
+ }
126
+ if (ids.size) {
127
+ var existing = context.dependencies.get(collection);
128
+ if (!existing) {
129
+ existing = new Set();
130
+ context.dependencies.set(collection, existing);
131
+ }
132
+ try {
133
+ for (var ids_1 = __values(ids), ids_1_1 = ids_1.next(); !ids_1_1.done; ids_1_1 = ids_1.next()) {
134
+ var id = ids_1_1.value;
135
+ existing.add(id);
136
+ }
137
+ }
138
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
139
+ finally {
140
+ try {
141
+ if (ids_1_1 && !ids_1_1.done && (_a = ids_1.return)) _a.call(ids_1);
142
+ }
143
+ finally { if (e_1) throw e_1.error; }
144
+ }
145
+ }
146
+ else if (!(options === null || options === void 0 ? void 0 : options.filter)) {
147
+ context.watchAllCollections.add(collection);
148
+ }
149
+ }
150
+ exports.recordDependencyResult = recordDependencyResult;
151
+ function recordAggregateDependencies(collection, pipeline, result) {
152
+ var e_2, _a;
153
+ var context = dependencyStorage.getStore();
154
+ if (!context) {
155
+ return;
156
+ }
157
+ recordDependencyResult(collection, result);
158
+ var lookupTargets = extractLookupTargets(pipeline);
159
+ if (!lookupTargets.length) {
160
+ return;
161
+ }
162
+ try {
163
+ for (var lookupTargets_1 = __values(lookupTargets), lookupTargets_1_1 = lookupTargets_1.next(); !lookupTargets_1_1.done; lookupTargets_1_1 = lookupTargets_1.next()) {
164
+ var target = lookupTargets_1_1.value;
165
+ var nestedValues = [];
166
+ collectLookupValues(result, target.as, nestedValues);
167
+ var filter = buildLookupFilter(result, target.localField, target.foreignField);
168
+ if (nestedValues.length || filter) {
169
+ recordDependencyResult(target.from, nestedValues, filter ? { filter: filter } : undefined);
170
+ }
171
+ else {
172
+ context.watchAllCollections.add(target.from);
173
+ }
174
+ }
175
+ }
176
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
177
+ finally {
178
+ try {
179
+ if (lookupTargets_1_1 && !lookupTargets_1_1.done && (_a = lookupTargets_1.return)) _a.call(lookupTargets_1);
180
+ }
181
+ finally { if (e_2) throw e_2.error; }
182
+ }
183
+ }
184
+ exports.recordAggregateDependencies = recordAggregateDependencies;
185
+ function extractLookupTargets(pipeline) {
186
+ var e_3, _a;
187
+ var lookups = [];
188
+ if (!Array.isArray(pipeline)) {
189
+ return lookups;
190
+ }
191
+ try {
192
+ for (var pipeline_1 = __values(pipeline), pipeline_1_1 = pipeline_1.next(); !pipeline_1_1.done; pipeline_1_1 = pipeline_1.next()) {
193
+ var stage = pipeline_1_1.value;
194
+ if (stage && stage.$lookup && typeof stage.$lookup === 'object') {
195
+ var lookup = stage.$lookup;
196
+ if (typeof lookup.from === 'string' && typeof lookup.as === 'string') {
197
+ lookups.push({
198
+ from: lookup.from,
199
+ as: lookup.as,
200
+ localField: typeof lookup.localField === 'string' ? lookup.localField : undefined,
201
+ foreignField: typeof lookup.foreignField === 'string' ? lookup.foreignField : undefined
202
+ });
203
+ }
204
+ }
205
+ }
206
+ }
207
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
208
+ finally {
209
+ try {
210
+ if (pipeline_1_1 && !pipeline_1_1.done && (_a = pipeline_1.return)) _a.call(pipeline_1);
211
+ }
212
+ finally { if (e_3) throw e_3.error; }
213
+ }
214
+ return lookups;
215
+ }
216
+ function collectLookupValues(source, path, output) {
217
+ var e_4, _a;
218
+ if (!source) {
219
+ return;
220
+ }
221
+ if (Array.isArray(source)) {
222
+ try {
223
+ for (var source_1 = __values(source), source_1_1 = source_1.next(); !source_1_1.done; source_1_1 = source_1.next()) {
224
+ var item = source_1_1.value;
225
+ collectLookupValues(item, path, output);
226
+ }
227
+ }
228
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
229
+ finally {
230
+ try {
231
+ if (source_1_1 && !source_1_1.done && (_a = source_1.return)) _a.call(source_1);
232
+ }
233
+ finally { if (e_4) throw e_4.error; }
234
+ }
235
+ return;
236
+ }
237
+ if (typeof source !== 'object') {
238
+ return;
239
+ }
240
+ var pathSegments = path.split('.');
241
+ collectLookupPathValues(source, pathSegments, 0, output);
242
+ }
243
+ function collectLookupPathValues(value, path, index, output) {
244
+ var e_5, _a;
245
+ if (!value) {
246
+ return;
247
+ }
248
+ var current = value[path[index]];
249
+ if (current === undefined) {
250
+ return;
251
+ }
252
+ if (index === path.length - 1) {
253
+ output.push(current);
254
+ return;
255
+ }
256
+ if (Array.isArray(current)) {
257
+ try {
258
+ for (var current_1 = __values(current), current_1_1 = current_1.next(); !current_1_1.done; current_1_1 = current_1.next()) {
259
+ var item = current_1_1.value;
260
+ if (item && typeof item === 'object') {
261
+ collectLookupPathValues(item, path, index + 1, output);
262
+ }
263
+ }
264
+ }
265
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
266
+ finally {
267
+ try {
268
+ if (current_1_1 && !current_1_1.done && (_a = current_1.return)) _a.call(current_1);
269
+ }
270
+ finally { if (e_5) throw e_5.error; }
271
+ }
272
+ }
273
+ else if (current && typeof current === 'object') {
274
+ collectLookupPathValues(current, path, index + 1, output);
275
+ }
276
+ }
277
+ function buildLookupFilter(result, localField, foreignField) {
278
+ var _a;
279
+ if (!localField || !foreignField) {
280
+ return null;
281
+ }
282
+ var values = [];
283
+ var segments = localField.split('.');
284
+ collectFieldValues(result, segments, 0, values);
285
+ var uniqueValues = dedupeFilterValues(values);
286
+ if (!uniqueValues.length) {
287
+ return null;
288
+ }
289
+ return _a = {},
290
+ _a[foreignField] = {
291
+ $in: uniqueValues
292
+ },
293
+ _a;
294
+ }
295
+ function collectFieldValues(source, path, index, output) {
296
+ var e_6, _a, e_7, _b;
297
+ if (!source) {
298
+ return;
299
+ }
300
+ if (Array.isArray(source)) {
301
+ try {
302
+ for (var source_2 = __values(source), source_2_1 = source_2.next(); !source_2_1.done; source_2_1 = source_2.next()) {
303
+ var item = source_2_1.value;
304
+ collectFieldValues(item, path, index, output);
305
+ }
306
+ }
307
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
308
+ finally {
309
+ try {
310
+ if (source_2_1 && !source_2_1.done && (_a = source_2.return)) _a.call(source_2);
311
+ }
312
+ finally { if (e_6) throw e_6.error; }
313
+ }
314
+ return;
315
+ }
316
+ if (typeof source !== 'object') {
317
+ return;
318
+ }
319
+ var obj = source;
320
+ var key = path[index];
321
+ var current = obj[key];
322
+ if (current === undefined) {
323
+ return;
324
+ }
325
+ if (index === path.length - 1) {
326
+ appendFilterValue(output, current);
327
+ return;
328
+ }
329
+ if (Array.isArray(current)) {
330
+ try {
331
+ for (var current_2 = __values(current), current_2_1 = current_2.next(); !current_2_1.done; current_2_1 = current_2.next()) {
332
+ var item = current_2_1.value;
333
+ collectFieldValues(item, path, index + 1, output);
334
+ }
335
+ }
336
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
337
+ finally {
338
+ try {
339
+ if (current_2_1 && !current_2_1.done && (_b = current_2.return)) _b.call(current_2);
340
+ }
341
+ finally { if (e_7) throw e_7.error; }
342
+ }
343
+ }
344
+ else {
345
+ collectFieldValues(current, path, index + 1, output);
346
+ }
347
+ }
348
+ function appendFilterValue(output, value) {
349
+ var e_8, _a;
350
+ if (value === undefined || value === null) {
351
+ return;
352
+ }
353
+ if (Array.isArray(value)) {
354
+ try {
355
+ for (var value_1 = __values(value), value_1_1 = value_1.next(); !value_1_1.done; value_1_1 = value_1.next()) {
356
+ var item = value_1_1.value;
357
+ appendFilterValue(output, item);
358
+ }
359
+ }
360
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
361
+ finally {
362
+ try {
363
+ if (value_1_1 && !value_1_1.done && (_a = value_1.return)) _a.call(value_1);
364
+ }
365
+ finally { if (e_8) throw e_8.error; }
366
+ }
367
+ return;
368
+ }
369
+ output.push(value);
370
+ }
371
+ function dedupeFilterValues(values) {
372
+ var e_9, _a;
373
+ var unique = new Map();
374
+ try {
375
+ for (var values_1 = __values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {
376
+ var value = values_1_1.value;
377
+ var key = serializeFilterValue(value);
378
+ if (!unique.has(key)) {
379
+ unique.set(key, value);
380
+ }
381
+ }
382
+ }
383
+ catch (e_9_1) { e_9 = { error: e_9_1 }; }
384
+ finally {
385
+ try {
386
+ if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);
387
+ }
388
+ finally { if (e_9) throw e_9.error; }
389
+ }
390
+ return Array.from(unique.values());
391
+ }
392
+ function serializeFilterValue(value) {
393
+ if (value === null || value === undefined) {
394
+ return 'null';
395
+ }
396
+ if (typeof value === 'object') {
397
+ if (typeof value.toHexString === 'function') {
398
+ return value.toHexString();
399
+ }
400
+ if (value instanceof Date) {
401
+ return value.toISOString();
402
+ }
403
+ if (typeof value.toString === 'function' && value.toString !== Object.prototype.toString) {
404
+ return value.toString();
405
+ }
406
+ try {
407
+ return JSON.stringify(value);
408
+ }
409
+ catch (_a) {
410
+ return '[object]';
411
+ }
412
+ }
413
+ return String(value);
414
+ }
415
+ function collectIdsFromResult(source, ids, visited) {
416
+ var e_10, _a, e_11, _b;
417
+ if (visited === void 0) { visited = new WeakSet(); }
418
+ if (!source) {
419
+ return;
420
+ }
421
+ if (Array.isArray(source)) {
422
+ try {
423
+ for (var source_3 = __values(source), source_3_1 = source_3.next(); !source_3_1.done; source_3_1 = source_3.next()) {
424
+ var item = source_3_1.value;
425
+ collectIdsFromResult(item, ids, visited);
426
+ }
427
+ }
428
+ catch (e_10_1) { e_10 = { error: e_10_1 }; }
429
+ finally {
430
+ try {
431
+ if (source_3_1 && !source_3_1.done && (_a = source_3.return)) _a.call(source_3);
432
+ }
433
+ finally { if (e_10) throw e_10.error; }
434
+ }
435
+ return;
436
+ }
437
+ if (typeof source !== 'object') {
438
+ return;
439
+ }
440
+ var objectSource = source;
441
+ if (visited.has(objectSource)) {
442
+ return;
443
+ }
444
+ visited.add(objectSource);
445
+ var normalizedId = normalizeId(objectSource._id);
446
+ if (normalizedId) {
447
+ ids.add(normalizedId);
448
+ }
449
+ try {
450
+ for (var _c = __values(Object.values(objectSource)), _d = _c.next(); !_d.done; _d = _c.next()) {
451
+ var value = _d.value;
452
+ if (value && (typeof value === 'object' || Array.isArray(value))) {
453
+ collectIdsFromResult(value, ids, visited);
454
+ }
455
+ }
456
+ }
457
+ catch (e_11_1) { e_11 = { error: e_11_1 }; }
458
+ finally {
459
+ try {
460
+ if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
461
+ }
462
+ finally { if (e_11) throw e_11.error; }
463
+ }
464
+ }
465
+ function collectIdsFromFilter(filter, ids) {
466
+ var e_12, _a, e_13, _b, e_14, _c;
467
+ if (!filter) {
468
+ return;
469
+ }
470
+ if (Array.isArray(filter)) {
471
+ try {
472
+ for (var filter_1 = __values(filter), filter_1_1 = filter_1.next(); !filter_1_1.done; filter_1_1 = filter_1.next()) {
473
+ var item = filter_1_1.value;
474
+ collectIdsFromFilter(item, ids);
475
+ }
476
+ }
477
+ catch (e_12_1) { e_12 = { error: e_12_1 }; }
478
+ finally {
479
+ try {
480
+ if (filter_1_1 && !filter_1_1.done && (_a = filter_1.return)) _a.call(filter_1);
481
+ }
482
+ finally { if (e_12) throw e_12.error; }
483
+ }
484
+ return;
485
+ }
486
+ if (typeof filter !== 'object') {
487
+ return;
488
+ }
489
+ var filterObject = filter;
490
+ if (filterObject._id !== undefined) {
491
+ collectIdsFromFilterValue(filterObject._id, ids);
492
+ }
493
+ try {
494
+ for (var _d = __values(Object.entries(filterObject)), _e = _d.next(); !_e.done; _e = _d.next()) {
495
+ var _f = __read(_e.value, 2), key = _f[0], value = _f[1];
496
+ if (key === '$or' || key === '$and' || key === '$nor') {
497
+ if (Array.isArray(value)) {
498
+ try {
499
+ for (var value_2 = (e_14 = void 0, __values(value)), value_2_1 = value_2.next(); !value_2_1.done; value_2_1 = value_2.next()) {
500
+ var item = value_2_1.value;
501
+ collectIdsFromFilter(item, ids);
502
+ }
503
+ }
504
+ catch (e_14_1) { e_14 = { error: e_14_1 }; }
505
+ finally {
506
+ try {
507
+ if (value_2_1 && !value_2_1.done && (_c = value_2.return)) _c.call(value_2);
508
+ }
509
+ finally { if (e_14) throw e_14.error; }
510
+ }
511
+ }
512
+ }
513
+ else if (key !== '_id' && value && typeof value === 'object') {
514
+ collectIdsFromFilter(value, ids);
515
+ }
516
+ }
517
+ }
518
+ catch (e_13_1) { e_13 = { error: e_13_1 }; }
519
+ finally {
520
+ try {
521
+ if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
522
+ }
523
+ finally { if (e_13) throw e_13.error; }
524
+ }
525
+ }
526
+ function collectIdsFromFilterValue(value, ids) {
527
+ var e_15, _a, e_16, _b;
528
+ if (value === null || value === undefined) {
529
+ return;
530
+ }
531
+ if (Array.isArray(value)) {
532
+ try {
533
+ for (var value_3 = __values(value), value_3_1 = value_3.next(); !value_3_1.done; value_3_1 = value_3.next()) {
534
+ var item = value_3_1.value;
535
+ collectIdsFromFilterValue(item, ids);
536
+ }
537
+ }
538
+ catch (e_15_1) { e_15 = { error: e_15_1 }; }
539
+ finally {
540
+ try {
541
+ if (value_3_1 && !value_3_1.done && (_a = value_3.return)) _a.call(value_3);
542
+ }
543
+ finally { if (e_15) throw e_15.error; }
544
+ }
545
+ return;
546
+ }
547
+ if (typeof value === 'object') {
548
+ try {
549
+ for (var _c = __values(Object.entries(value)), _d = _c.next(); !_d.done; _d = _c.next()) {
550
+ var _e = __read(_d.value, 2), key = _e[0], inner = _e[1];
551
+ if (key === '$in' || key === '$nin' || key === '$all') {
552
+ collectIdsFromFilterValue(inner, ids);
553
+ }
554
+ else if (key === '$eq' || key === '$ne') {
555
+ collectIdsFromFilterValue(inner, ids);
556
+ }
557
+ else if (key === '$or' || key === '$and' || key === '$nor') {
558
+ collectIdsFromFilterValue(inner, ids);
559
+ }
560
+ else {
561
+ collectIdsFromFilterValue(inner, ids);
562
+ }
563
+ }
564
+ }
565
+ catch (e_16_1) { e_16 = { error: e_16_1 }; }
566
+ finally {
567
+ try {
568
+ if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
569
+ }
570
+ finally { if (e_16) throw e_16.error; }
571
+ }
572
+ return;
573
+ }
574
+ var normalized = normalizeId(value);
575
+ if (normalized) {
576
+ ids.add(normalized);
577
+ }
578
+ }
579
+ function normalizeId(value) {
580
+ if (value === null || value === undefined) {
581
+ return null;
582
+ }
583
+ if (typeof value === 'string') {
584
+ var trimmed = value.trim();
585
+ return trimmed.length ? trimmed : null;
586
+ }
587
+ if (typeof value === 'number' || typeof value === 'bigint') {
588
+ return value.toString();
589
+ }
590
+ if (typeof value === 'object') {
591
+ var objValue = value;
592
+ if (typeof objValue.toHexString === 'function') {
593
+ return objValue.toHexString();
594
+ }
595
+ if (value instanceof Date) {
596
+ return value.toISOString();
597
+ }
598
+ if (typeof objValue.toString === 'function') {
599
+ var str = objValue.toString();
600
+ if (str && str !== '[object Object]') {
601
+ return str;
602
+ }
603
+ }
604
+ }
605
+ return null;
606
+ }
607
+ function cloneDependencyMap(original) {
608
+ var e_17, _a;
609
+ var cloned = new Map();
610
+ try {
611
+ for (var _b = __values(original.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
612
+ var _d = __read(_c.value, 2), collection = _d[0], ids = _d[1];
613
+ cloned.set(collection, new Set(ids));
614
+ }
615
+ }
616
+ catch (e_17_1) { e_17 = { error: e_17_1 }; }
617
+ finally {
618
+ try {
619
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
620
+ }
621
+ finally { if (e_17) throw e_17.error; }
622
+ }
623
+ return cloned;
624
+ }
625
+ function cloneFilterMap(original) {
626
+ var e_18, _a;
627
+ var cloned = new Map();
628
+ try {
629
+ for (var _b = __values(original.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
630
+ var _d = __read(_c.value, 2), collection = _d[0], filters = _d[1];
631
+ cloned.set(collection, filters.map(function (filter) { return (0, common_1.deepCopy)(filter); }));
632
+ }
633
+ }
634
+ catch (e_18_1) { e_18 = { error: e_18_1 }; }
635
+ finally {
636
+ try {
637
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
638
+ }
639
+ finally { if (e_18) throw e_18.error; }
640
+ }
641
+ return cloned;
642
+ }
643
+
644
+ //# sourceMappingURL=subscription-dependency-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/util/subscription-dependency-context.ts"],"names":[],"mappings":"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","file":"subscription-dependency-context.js","sourcesContent":["import { AsyncLocalStorage } from 'async_hooks';\nimport { deepCopy } from './common';\n\nexport interface DependencyContextSnapshot {\n\tdependencies: Map<string, Set<string>>;\n\tfilters: Map<string, any[]>;\n\twatchAllCollections: Set<string>;\n}\n\ninterface LookupTarget {\n\tfrom: string;\n\tas: string;\n\tlocalField?: string;\n\tforeignField?: string;\n}\n\ninterface DependencyContext extends DependencyContextSnapshot {}\n\nconst dependencyStorage = new AsyncLocalStorage<DependencyContext>();\n\nexport async function withDependencyTracking<T>(fn: () => Promise<T>): Promise<{ result: T; snapshot: DependencyContextSnapshot }> {\n\tconst context: DependencyContext = {\n\t\tdependencies: new Map(),\n\t\tfilters: new Map(),\n\t\twatchAllCollections: new Set()\n\t};\n\n\tlet result: T;\n\n\tawait dependencyStorage.run(context, async () => {\n\t\tresult = await fn();\n\t});\n\n\treturn {\n\t\tresult,\n\t\tsnapshot: {\n\t\t\tdependencies: cloneDependencyMap(context.dependencies),\n\t\t\tfilters: cloneFilterMap(context.filters),\n\t\t\twatchAllCollections: new Set(context.watchAllCollections)\n\t\t}\n\t};\n}\n\nexport function recordDependencyResult(collection: string, result: unknown, options?: { filter?: any }) {\n\tconst context = dependencyStorage.getStore();\n\n\tif (!context) {\n\t\treturn;\n\t}\n\n\tif (options?.filter) {\n\t\tlet filterList = context.filters.get(collection);\n\n\t\tif (!filterList) {\n\t\t\tfilterList = [];\n\t\t\tcontext.filters.set(collection, filterList);\n\t\t}\n\n\t\tfilterList.push(deepCopy(options.filter));\n\t}\n\n\tconst ids = new Set<string>();\n\tcollectIdsFromResult(result, ids);\n\n\tif (!ids.size && options?.filter) {\n\t\tcollectIdsFromFilter(options.filter, ids);\n\t}\n\n\tif (ids.size) {\n\t\tlet existing = context.dependencies.get(collection);\n\n\t\tif (!existing) {\n\t\t\texisting = new Set();\n\t\t\tcontext.dependencies.set(collection, existing);\n\t\t}\n\n\t\tfor (const id of ids) {\n\t\t\texisting.add(id);\n\t\t}\n\t}\n\telse if (!options?.filter) {\n\t\tcontext.watchAllCollections.add(collection);\n\t}\n}\n\nexport function recordAggregateDependencies(collection: string, pipeline: any[], result: unknown) {\n\tconst context = dependencyStorage.getStore();\n\n\tif (!context) {\n\t\treturn;\n\t}\n\n\trecordDependencyResult(collection, result);\n\n\tconst lookupTargets = extractLookupTargets(pipeline);\n\n\tif (!lookupTargets.length) {\n\t\treturn;\n\t}\n\n\tfor (const target of lookupTargets) {\n\t\tconst nestedValues: unknown[] = [];\n\t\tcollectLookupValues(result, target.as, nestedValues);\n\n\t\tconst filter = buildLookupFilter(result, target.localField, target.foreignField);\n\n\t\tif (nestedValues.length || filter) {\n\t\t\trecordDependencyResult(target.from, nestedValues, filter ? { filter } : undefined);\n\t\t}\n\t\telse {\n\t\t\tcontext.watchAllCollections.add(target.from);\n\t\t}\n\t}\n}\n\nfunction extractLookupTargets(pipeline: any[]): LookupTarget[] {\n\tconst lookups: LookupTarget[] = [];\n\n\tif (!Array.isArray(pipeline)) {\n\t\treturn lookups;\n\t}\n\n\tfor (const stage of pipeline) {\n\t\tif (stage && stage.$lookup && typeof stage.$lookup === 'object') {\n\t\t\tconst lookup = stage.$lookup;\n\t\t\tif (typeof lookup.from === 'string' && typeof lookup.as === 'string') {\n\t\t\t\tlookups.push({\n\t\t\t\t\tfrom: lookup.from,\n\t\t\t\t\tas: lookup.as,\n\t\t\t\t\tlocalField: typeof lookup.localField === 'string' ? lookup.localField : undefined,\n\t\t\t\t\tforeignField: typeof lookup.foreignField === 'string' ? lookup.foreignField : undefined\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lookups;\n}\n\nfunction collectLookupValues(source: unknown, path: string, output: unknown[]) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectLookupValues(item, path, output);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst pathSegments = path.split('.');\n\tcollectLookupPathValues(source as Record<string, unknown>, pathSegments, 0, output);\n}\n\nfunction collectLookupPathValues(value: Record<string, unknown>, path: string[], index: number, output: unknown[]) {\n\tif (!value) {\n\t\treturn;\n\t}\n\n\tconst current = value[path[index]];\n\n\tif (current === undefined) {\n\t\treturn;\n\t}\n\n\tif (index === path.length - 1) {\n\t\toutput.push(current);\n\t\treturn;\n\t}\n\n\tif (Array.isArray(current)) {\n\t\tfor (const item of current) {\n\t\t\tif (item && typeof item === 'object') {\n\t\t\t\tcollectLookupPathValues(item as Record<string, unknown>, path, index + 1, output);\n\t\t\t}\n\t\t}\n\t}\n\telse if (current && typeof current === 'object') {\n\t\tcollectLookupPathValues(current as Record<string, unknown>, path, index + 1, output);\n\t}\n}\n\nfunction buildLookupFilter(result: unknown, localField?: string, foreignField?: string) {\n\tif (!localField || !foreignField) {\n\t\treturn null;\n\t}\n\n\tconst values: any[] = [];\n\tconst segments = localField.split('.');\n\tcollectFieldValues(result, segments, 0, values);\n\n\tconst uniqueValues = dedupeFilterValues(values);\n\n\tif (!uniqueValues.length) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\t[foreignField]: {\n\t\t\t$in: uniqueValues\n\t\t}\n\t};\n}\n\nfunction collectFieldValues(source: unknown, path: string[], index: number, output: any[]) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectFieldValues(item, path, index, output);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst obj = source as Record<string, unknown>;\n\tconst key = path[index];\n\tconst current = obj[key];\n\n\tif (current === undefined) {\n\t\treturn;\n\t}\n\n\tif (index === path.length - 1) {\n\t\tappendFilterValue(output, current);\n\t\treturn;\n\t}\n\n\tif (Array.isArray(current)) {\n\t\tfor (const item of current) {\n\t\t\tcollectFieldValues(item, path, index + 1, output);\n\t\t}\n\t}\n\telse {\n\t\tcollectFieldValues(current, path, index + 1, output);\n\t}\n}\n\nfunction appendFilterValue(output: any[], value: any) {\n\tif (value === undefined || value === null) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) {\n\t\t\tappendFilterValue(output, item);\n\t\t}\n\t\treturn;\n\t}\n\n\toutput.push(value);\n}\n\nfunction dedupeFilterValues(values: any[]): any[] {\n\tconst unique = new Map<string, any>();\n\n\tfor (const value of values) {\n\t\tconst key = serializeFilterValue(value);\n\t\tif (!unique.has(key)) {\n\t\t\tunique.set(key, value);\n\t\t}\n\t}\n\n\treturn Array.from(unique.values());\n}\n\nfunction serializeFilterValue(value: any): string {\n\tif (value === null || value === undefined) {\n\t\treturn 'null';\n\t}\n\n\tif (typeof value === 'object') {\n\t\tif (typeof value.toHexString === 'function') {\n\t\t\treturn value.toHexString();\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString();\n\t\t}\n\n\t\tif (typeof value.toString === 'function' && value.toString !== Object.prototype.toString) {\n\t\t\treturn value.toString();\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.stringify(value);\n\t\t}\n\t\tcatch {\n\t\t\treturn '[object]';\n\t\t}\n\t}\n\n\treturn String(value);\n}\n\nfunction collectIdsFromResult(source: unknown, ids: Set<string>, visited = new WeakSet<object>()) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectIdsFromResult(item, ids, visited);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst objectSource = source as Record<string, unknown>;\n\n\tif (visited.has(objectSource)) {\n\t\treturn;\n\t}\n\n\tvisited.add(objectSource);\n\n\tconst normalizedId = normalizeId(objectSource._id);\n\n\tif (normalizedId) {\n\t\tids.add(normalizedId);\n\t}\n\n\tfor (const value of Object.values(objectSource)) {\n\t\tif (value && (typeof value === 'object' || Array.isArray(value))) {\n\t\t\tcollectIdsFromResult(value, ids, visited);\n\t\t}\n\t}\n}\n\nfunction collectIdsFromFilter(filter: unknown, ids: Set<string>) {\n\tif (!filter) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(filter)) {\n\t\tfor (const item of filter) {\n\t\t\tcollectIdsFromFilter(item, ids);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof filter !== 'object') {\n\t\treturn;\n\t}\n\n\tconst filterObject = filter as Record<string, unknown>;\n\n\tif (filterObject._id !== undefined) {\n\t\tcollectIdsFromFilterValue(filterObject._id, ids);\n\t}\n\n\tfor (const [key, value] of Object.entries(filterObject)) {\n\t\tif (key === '$or' || key === '$and' || key === '$nor') {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tfor (const item of value) {\n\t\t\t\t\tcollectIdsFromFilter(item, ids);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (key !== '_id' && value && typeof value === 'object') {\n\t\t\tcollectIdsFromFilter(value, ids);\n\t\t}\n\t}\n}\n\nfunction collectIdsFromFilterValue(value: unknown, ids: Set<string>) {\n\tif (value === null || value === undefined) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) {\n\t\t\tcollectIdsFromFilterValue(item, ids);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof value === 'object') {\n\t\tfor (const [key, inner] of Object.entries(value as Record<string, unknown>)) {\n\t\t\tif (key === '$in' || key === '$nin' || key === '$all') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse if (key === '$eq' || key === '$ne') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse if (key === '$or' || key === '$and' || key === '$nor') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\n\tconst normalized = normalizeId(value);\n\n\tif (normalized) {\n\t\tids.add(normalized);\n\t}\n}\n\nfunction normalizeId(value: unknown): string {\n\tif (value === null || value === undefined) {\n\t\treturn null;\n\t}\n\n\tif (typeof value === 'string') {\n\t\tconst trimmed = value.trim();\n\t\treturn trimmed.length ? trimmed : null;\n\t}\n\n\tif (typeof value === 'number' || typeof value === 'bigint') {\n\t\treturn value.toString();\n\t}\n\n\tif (typeof value === 'object') {\n\t\tconst objValue = value as { toHexString?: () => string, toString?: () => string };\n\n\t\tif (typeof objValue.toHexString === 'function') {\n\t\t\treturn objValue.toHexString();\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString();\n\t\t}\n\n\t\tif (typeof objValue.toString === 'function') {\n\t\t\tconst str = objValue.toString();\n\t\t\tif (str && str !== '[object Object]') {\n\t\t\t\treturn str;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction cloneDependencyMap(original: Map<string, Set<string>>): Map<string, Set<string>> {\n\tconst cloned = new Map<string, Set<string>>();\n\n\tfor (const [collection, ids] of original.entries()) {\n\t\tcloned.set(collection, new Set(ids));\n\t}\n\n\treturn cloned;\n}\n\nfunction cloneFilterMap(original: Map<string, any[]>): Map<string, any[]> {\n\tconst cloned = new Map<string, any[]>();\n\n\tfor (const [collection, filters] of original.entries()) {\n\t\tcloned.set(collection, filters.map(filter => deepCopy(filter)));\n\t}\n\n\treturn cloned;\n}\n"]}