@resolveio/server-lib 20.9.6 → 20.9.8

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.
@@ -77,7 +77,8 @@ function withDependencyTracking(fn) {
77
77
  context = {
78
78
  dependencies: new Map(),
79
79
  filters: new Map(),
80
- watchAllCollections: new Set()
80
+ watchAllCollections: new Set(),
81
+ queryMetadata: new Map()
81
82
  };
82
83
  return [4 /*yield*/, dependencyStorage.run(context, function () { return __awaiter(_this, void 0, void 0, function () {
83
84
  return __generator(this, function (_a) {
@@ -96,7 +97,8 @@ function withDependencyTracking(fn) {
96
97
  snapshot: {
97
98
  dependencies: cloneDependencyMap(context.dependencies),
98
99
  filters: cloneFilterMap(context.filters),
99
- watchAllCollections: new Set(context.watchAllCollections)
100
+ watchAllCollections: new Set(context.watchAllCollections),
101
+ queryMetadata: cloneQueryMetaMap(context.queryMetadata)
100
102
  }
101
103
  }];
102
104
  }
@@ -118,6 +120,14 @@ function recordDependencyResult(collection, result, options) {
118
120
  }
119
121
  filterList.push((0, common_1.deepCopy)(options.filter));
120
122
  }
123
+ if (options === null || options === void 0 ? void 0 : options.meta) {
124
+ var metaList = context.queryMetadata.get(collection);
125
+ if (!metaList) {
126
+ metaList = [];
127
+ context.queryMetadata.set(collection, metaList);
128
+ }
129
+ metaList.push((0, common_1.deepCopy)(options.meta));
130
+ }
121
131
  var ids = new Set();
122
132
  collectIdsFromResult(result, ids);
123
133
  if (!ids.size && (options === null || options === void 0 ? void 0 : options.filter)) {
@@ -155,7 +165,11 @@ function recordAggregateDependencies(collection, pipeline, result) {
155
165
  return;
156
166
  }
157
167
  var matchFilter = extractMatchFilter(pipeline);
158
- recordDependencyResult(collection, result, matchFilter ? { filter: matchFilter } : undefined);
168
+ var meta = extractAggregateMeta(pipeline);
169
+ recordDependencyResult(collection, result, {
170
+ filter: matchFilter,
171
+ meta: meta
172
+ });
159
173
  var lookupTargets = extractLookupTargets(pipeline);
160
174
  if (!lookupTargets.length) {
161
175
  return;
@@ -243,8 +257,49 @@ function extractMatchFilter(pipeline) {
243
257
  }
244
258
  return { $and: filters };
245
259
  }
246
- function collectLookupValues(source, path, output) {
260
+ function extractAggregateMeta(pipeline) {
247
261
  var e_5, _a;
262
+ if (!Array.isArray(pipeline)) {
263
+ return null;
264
+ }
265
+ var limit = undefined;
266
+ var skip = undefined;
267
+ var sort = null;
268
+ try {
269
+ for (var pipeline_3 = __values(pipeline), pipeline_3_1 = pipeline_3.next(); !pipeline_3_1.done; pipeline_3_1 = pipeline_3.next()) {
270
+ var stage = pipeline_3_1.value;
271
+ if ((stage === null || stage === void 0 ? void 0 : stage.$limit) !== undefined && typeof stage.$limit === 'number') {
272
+ limit = stage.$limit;
273
+ }
274
+ else if ((stage === null || stage === void 0 ? void 0 : stage.$skip) !== undefined && typeof stage.$skip === 'number') {
275
+ skip = stage.$skip;
276
+ }
277
+ else if ((stage === null || stage === void 0 ? void 0 : stage.$sort) && typeof stage.$sort === 'object') {
278
+ sort = (0, common_1.deepCopy)(stage.$sort);
279
+ }
280
+ }
281
+ }
282
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
283
+ finally {
284
+ try {
285
+ if (pipeline_3_1 && !pipeline_3_1.done && (_a = pipeline_3.return)) _a.call(pipeline_3);
286
+ }
287
+ finally { if (e_5) throw e_5.error; }
288
+ }
289
+ var meta = {};
290
+ if (limit !== undefined) {
291
+ meta.limit = limit;
292
+ }
293
+ if (skip !== undefined) {
294
+ meta.skip = skip;
295
+ }
296
+ if (sort) {
297
+ meta.sort = sort;
298
+ }
299
+ return Object.keys(meta).length ? meta : null;
300
+ }
301
+ function collectLookupValues(source, path, output) {
302
+ var e_6, _a;
248
303
  if (!source) {
249
304
  return;
250
305
  }
@@ -255,12 +310,12 @@ function collectLookupValues(source, path, output) {
255
310
  collectLookupValues(item, path, output);
256
311
  }
257
312
  }
258
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
313
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
259
314
  finally {
260
315
  try {
261
316
  if (source_1_1 && !source_1_1.done && (_a = source_1.return)) _a.call(source_1);
262
317
  }
263
- finally { if (e_5) throw e_5.error; }
318
+ finally { if (e_6) throw e_6.error; }
264
319
  }
265
320
  return;
266
321
  }
@@ -271,7 +326,7 @@ function collectLookupValues(source, path, output) {
271
326
  collectLookupPathValues(source, pathSegments, 0, output);
272
327
  }
273
328
  function collectLookupPathValues(value, path, index, output) {
274
- var e_6, _a;
329
+ var e_7, _a;
275
330
  if (!value) {
276
331
  return;
277
332
  }
@@ -292,12 +347,12 @@ function collectLookupPathValues(value, path, index, output) {
292
347
  }
293
348
  }
294
349
  }
295
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
350
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
296
351
  finally {
297
352
  try {
298
353
  if (current_1_1 && !current_1_1.done && (_a = current_1.return)) _a.call(current_1);
299
354
  }
300
- finally { if (e_6) throw e_6.error; }
355
+ finally { if (e_7) throw e_7.error; }
301
356
  }
302
357
  }
303
358
  else if (current && typeof current === 'object') {
@@ -323,7 +378,7 @@ function buildLookupFilter(result, localField, foreignField) {
323
378
  _a;
324
379
  }
325
380
  function collectFieldValues(source, path, index, output) {
326
- var e_7, _a, e_8, _b;
381
+ var e_8, _a, e_9, _b;
327
382
  if (!source) {
328
383
  return;
329
384
  }
@@ -334,12 +389,12 @@ function collectFieldValues(source, path, index, output) {
334
389
  collectFieldValues(item, path, index, output);
335
390
  }
336
391
  }
337
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
392
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
338
393
  finally {
339
394
  try {
340
395
  if (source_2_1 && !source_2_1.done && (_a = source_2.return)) _a.call(source_2);
341
396
  }
342
- finally { if (e_7) throw e_7.error; }
397
+ finally { if (e_8) throw e_8.error; }
343
398
  }
344
399
  return;
345
400
  }
@@ -363,12 +418,12 @@ function collectFieldValues(source, path, index, output) {
363
418
  collectFieldValues(item, path, index + 1, output);
364
419
  }
365
420
  }
366
- catch (e_8_1) { e_8 = { error: e_8_1 }; }
421
+ catch (e_9_1) { e_9 = { error: e_9_1 }; }
367
422
  finally {
368
423
  try {
369
424
  if (current_2_1 && !current_2_1.done && (_b = current_2.return)) _b.call(current_2);
370
425
  }
371
- finally { if (e_8) throw e_8.error; }
426
+ finally { if (e_9) throw e_9.error; }
372
427
  }
373
428
  }
374
429
  else {
@@ -376,7 +431,7 @@ function collectFieldValues(source, path, index, output) {
376
431
  }
377
432
  }
378
433
  function appendFilterValue(output, value) {
379
- var e_9, _a;
434
+ var e_10, _a;
380
435
  if (value === undefined || value === null) {
381
436
  return;
382
437
  }
@@ -387,19 +442,19 @@ function appendFilterValue(output, value) {
387
442
  appendFilterValue(output, item);
388
443
  }
389
444
  }
390
- catch (e_9_1) { e_9 = { error: e_9_1 }; }
445
+ catch (e_10_1) { e_10 = { error: e_10_1 }; }
391
446
  finally {
392
447
  try {
393
448
  if (value_1_1 && !value_1_1.done && (_a = value_1.return)) _a.call(value_1);
394
449
  }
395
- finally { if (e_9) throw e_9.error; }
450
+ finally { if (e_10) throw e_10.error; }
396
451
  }
397
452
  return;
398
453
  }
399
454
  output.push(value);
400
455
  }
401
456
  function dedupeFilterValues(values) {
402
- var e_10, _a;
457
+ var e_11, _a;
403
458
  var unique = new Map();
404
459
  try {
405
460
  for (var values_1 = __values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {
@@ -410,12 +465,12 @@ function dedupeFilterValues(values) {
410
465
  }
411
466
  }
412
467
  }
413
- catch (e_10_1) { e_10 = { error: e_10_1 }; }
468
+ catch (e_11_1) { e_11 = { error: e_11_1 }; }
414
469
  finally {
415
470
  try {
416
471
  if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);
417
472
  }
418
- finally { if (e_10) throw e_10.error; }
473
+ finally { if (e_11) throw e_11.error; }
419
474
  }
420
475
  return Array.from(unique.values());
421
476
  }
@@ -443,7 +498,7 @@ function serializeFilterValue(value) {
443
498
  return String(value);
444
499
  }
445
500
  function collectIdsFromResult(source, ids, visited) {
446
- var e_11, _a, e_12, _b;
501
+ var e_12, _a, e_13, _b;
447
502
  if (visited === void 0) { visited = new WeakSet(); }
448
503
  if (!source) {
449
504
  return;
@@ -455,12 +510,12 @@ function collectIdsFromResult(source, ids, visited) {
455
510
  collectIdsFromResult(item, ids, visited);
456
511
  }
457
512
  }
458
- catch (e_11_1) { e_11 = { error: e_11_1 }; }
513
+ catch (e_12_1) { e_12 = { error: e_12_1 }; }
459
514
  finally {
460
515
  try {
461
516
  if (source_3_1 && !source_3_1.done && (_a = source_3.return)) _a.call(source_3);
462
517
  }
463
- finally { if (e_11) throw e_11.error; }
518
+ finally { if (e_12) throw e_12.error; }
464
519
  }
465
520
  return;
466
521
  }
@@ -484,16 +539,16 @@ function collectIdsFromResult(source, ids, visited) {
484
539
  }
485
540
  }
486
541
  }
487
- catch (e_12_1) { e_12 = { error: e_12_1 }; }
542
+ catch (e_13_1) { e_13 = { error: e_13_1 }; }
488
543
  finally {
489
544
  try {
490
545
  if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
491
546
  }
492
- finally { if (e_12) throw e_12.error; }
547
+ finally { if (e_13) throw e_13.error; }
493
548
  }
494
549
  }
495
550
  function collectIdsFromFilter(filter, ids) {
496
- var e_13, _a, e_14, _b, e_15, _c;
551
+ var e_14, _a, e_15, _b, e_16, _c;
497
552
  if (!filter) {
498
553
  return;
499
554
  }
@@ -504,12 +559,12 @@ function collectIdsFromFilter(filter, ids) {
504
559
  collectIdsFromFilter(item, ids);
505
560
  }
506
561
  }
507
- catch (e_13_1) { e_13 = { error: e_13_1 }; }
562
+ catch (e_14_1) { e_14 = { error: e_14_1 }; }
508
563
  finally {
509
564
  try {
510
565
  if (filter_1_1 && !filter_1_1.done && (_a = filter_1.return)) _a.call(filter_1);
511
566
  }
512
- finally { if (e_13) throw e_13.error; }
567
+ finally { if (e_14) throw e_14.error; }
513
568
  }
514
569
  return;
515
570
  }
@@ -526,17 +581,17 @@ function collectIdsFromFilter(filter, ids) {
526
581
  if (key === '$or' || key === '$and' || key === '$nor') {
527
582
  if (Array.isArray(value)) {
528
583
  try {
529
- for (var value_2 = (e_15 = void 0, __values(value)), value_2_1 = value_2.next(); !value_2_1.done; value_2_1 = value_2.next()) {
584
+ for (var value_2 = (e_16 = void 0, __values(value)), value_2_1 = value_2.next(); !value_2_1.done; value_2_1 = value_2.next()) {
530
585
  var item = value_2_1.value;
531
586
  collectIdsFromFilter(item, ids);
532
587
  }
533
588
  }
534
- catch (e_15_1) { e_15 = { error: e_15_1 }; }
589
+ catch (e_16_1) { e_16 = { error: e_16_1 }; }
535
590
  finally {
536
591
  try {
537
592
  if (value_2_1 && !value_2_1.done && (_c = value_2.return)) _c.call(value_2);
538
593
  }
539
- finally { if (e_15) throw e_15.error; }
594
+ finally { if (e_16) throw e_16.error; }
540
595
  }
541
596
  }
542
597
  }
@@ -545,16 +600,16 @@ function collectIdsFromFilter(filter, ids) {
545
600
  }
546
601
  }
547
602
  }
548
- catch (e_14_1) { e_14 = { error: e_14_1 }; }
603
+ catch (e_15_1) { e_15 = { error: e_15_1 }; }
549
604
  finally {
550
605
  try {
551
606
  if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
552
607
  }
553
- finally { if (e_14) throw e_14.error; }
608
+ finally { if (e_15) throw e_15.error; }
554
609
  }
555
610
  }
556
611
  function collectIdsFromFilterValue(value, ids) {
557
- var e_16, _a, e_17, _b;
612
+ var e_17, _a, e_18, _b;
558
613
  if (value === null || value === undefined) {
559
614
  return;
560
615
  }
@@ -565,12 +620,12 @@ function collectIdsFromFilterValue(value, ids) {
565
620
  collectIdsFromFilterValue(item, ids);
566
621
  }
567
622
  }
568
- catch (e_16_1) { e_16 = { error: e_16_1 }; }
623
+ catch (e_17_1) { e_17 = { error: e_17_1 }; }
569
624
  finally {
570
625
  try {
571
626
  if (value_3_1 && !value_3_1.done && (_a = value_3.return)) _a.call(value_3);
572
627
  }
573
- finally { if (e_16) throw e_16.error; }
628
+ finally { if (e_17) throw e_17.error; }
574
629
  }
575
630
  return;
576
631
  }
@@ -592,12 +647,12 @@ function collectIdsFromFilterValue(value, ids) {
592
647
  }
593
648
  }
594
649
  }
595
- catch (e_17_1) { e_17 = { error: e_17_1 }; }
650
+ catch (e_18_1) { e_18 = { error: e_18_1 }; }
596
651
  finally {
597
652
  try {
598
653
  if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
599
654
  }
600
- finally { if (e_17) throw e_17.error; }
655
+ finally { if (e_18) throw e_18.error; }
601
656
  }
602
657
  return;
603
658
  }
@@ -635,7 +690,7 @@ function normalizeId(value) {
635
690
  return null;
636
691
  }
637
692
  function cloneDependencyMap(original) {
638
- var e_18, _a;
693
+ var e_19, _a;
639
694
  var cloned = new Map();
640
695
  try {
641
696
  for (var _b = __values(original.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
@@ -643,17 +698,17 @@ function cloneDependencyMap(original) {
643
698
  cloned.set(collection, new Set(ids));
644
699
  }
645
700
  }
646
- catch (e_18_1) { e_18 = { error: e_18_1 }; }
701
+ catch (e_19_1) { e_19 = { error: e_19_1 }; }
647
702
  finally {
648
703
  try {
649
704
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
650
705
  }
651
- finally { if (e_18) throw e_18.error; }
706
+ finally { if (e_19) throw e_19.error; }
652
707
  }
653
708
  return cloned;
654
709
  }
655
710
  function cloneFilterMap(original) {
656
- var e_19, _a;
711
+ var e_20, _a;
657
712
  var cloned = new Map();
658
713
  try {
659
714
  for (var _b = __values(original.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
@@ -661,12 +716,30 @@ function cloneFilterMap(original) {
661
716
  cloned.set(collection, filters.map(function (filter) { return (0, common_1.deepCopy)(filter); }));
662
717
  }
663
718
  }
664
- catch (e_19_1) { e_19 = { error: e_19_1 }; }
719
+ catch (e_20_1) { e_20 = { error: e_20_1 }; }
665
720
  finally {
666
721
  try {
667
722
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
668
723
  }
669
- finally { if (e_19) throw e_19.error; }
724
+ finally { if (e_20) throw e_20.error; }
725
+ }
726
+ return cloned;
727
+ }
728
+ function cloneQueryMetaMap(original) {
729
+ var e_21, _a;
730
+ var cloned = new Map();
731
+ try {
732
+ for (var _b = __values(original.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
733
+ var _d = __read(_c.value, 2), collection = _d[0], metaList = _d[1];
734
+ cloned.set(collection, metaList.map(function (meta) { return (0, common_1.deepCopy)(meta); }));
735
+ }
736
+ }
737
+ catch (e_21_1) { e_21 = { error: e_21_1 }; }
738
+ finally {
739
+ try {
740
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
741
+ }
742
+ finally { if (e_21) throw e_21.error; }
670
743
  }
671
744
  return cloned;
672
745
  }
@@ -1 +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\tconst matchFilter = extractMatchFilter(pipeline);\n\n\trecordDependencyResult(collection, result, matchFilter ? { filter: matchFilter } : undefined);\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 extractMatchFilter(pipeline: any[]): any {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tconst filters: any[] = [];\n\n\tfor (const stage of pipeline) {\n\t\tif (stage && stage.$match && typeof stage.$match === 'object') {\n\t\t\tfilters.push(deepCopy(stage.$match));\n\t\t}\n\t}\n\n\tif (!filters.length) {\n\t\treturn null;\n\t}\n\n\tif (filters.length === 1) {\n\t\treturn filters[0];\n\t}\n\n\treturn { $and: filters };\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"]}
1
+ {"version":3,"sources":["../../src/util/subscription-dependency-context.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAgD;AAChD,mCAAoC;AAwBpC,IAAM,iBAAiB,GAAG,IAAI,+BAAiB,EAAqB,CAAC;AAErE,SAAsB,sBAAsB,CAAI,EAAoB;;;;;;;oBAC7D,OAAO,GAAsB;wBAClC,YAAY,EAAE,IAAI,GAAG,EAAE;wBACvB,OAAO,EAAE,IAAI,GAAG,EAAE;wBAClB,mBAAmB,EAAE,IAAI,GAAG,EAAE;wBAC9B,aAAa,EAAE,IAAI,GAAG,EAAE;qBACxB,CAAC;oBAIF,qBAAM,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE;;;4CAC3B,qBAAM,EAAE,EAAE,EAAA;;wCAAnB,MAAM,GAAG,SAAU,CAAC;;;;6BACpB,CAAC,EAAA;;oBAFF,SAEE,CAAC;oBAEH,sBAAO;4BACN,MAAM,QAAA;4BACN,QAAQ,EAAE;gCACT,YAAY,EAAE,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC;gCACtD,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;gCACxC,mBAAmB,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC;gCACzD,aAAa,EAAE,iBAAiB,CAAC,OAAO,CAAC,aAAa,CAAC;6BACvD;yBACD,EAAC;;;;CACF;AAvBD,wDAuBC;AAED,SAAgB,sBAAsB,CAAC,UAAkB,EAAE,MAAe,EAAE,OAA4C;;IACvH,IAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE;QACb,OAAO;KACP;IAED,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE;QACpB,IAAI,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEjD,IAAI,CAAC,UAAU,EAAE;YAChB,UAAU,GAAG,EAAE,CAAC;YAChB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;SAC5C;QAED,UAAU,CAAC,IAAI,CAAC,IAAA,iBAAQ,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;KAC1C;IAED,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE;QAClB,IAAI,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAErD,IAAI,CAAC,QAAQ,EAAE;YACd,QAAQ,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;SAChD;QAED,QAAQ,CAAC,IAAI,CAAC,IAAA,iBAAQ,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;KACtC;IAED,IAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAElC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAA,EAAE;QACjC,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC1C;IAED,IAAI,GAAG,CAAC,IAAI,EAAE;QACb,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEpD,IAAI,CAAC,QAAQ,EAAE;YACd,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;YACrB,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;SAC/C;;YAED,KAAiB,IAAA,QAAA,SAAA,GAAG,CAAA,wBAAA,yCAAE;gBAAjB,IAAM,EAAE,gBAAA;gBACZ,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aACjB;;;;;;;;;KACD;SACI,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAA,EAAE;QAC1B,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KAC5C;AACF,CAAC;AAnDD,wDAmDC;AAED,SAAgB,2BAA2B,CAAC,UAAkB,EAAE,QAAe,EAAE,MAAe;;IAC/F,IAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE;QACb,OAAO;KACP;IAED,IAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAM,IAAI,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC5C,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE;QAC1C,MAAM,EAAE,WAAW;QACnB,IAAI,MAAA;KACJ,CAAC,CAAC;IAEH,IAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAErD,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;QAC1B,OAAO;KACP;;QAED,KAAqB,IAAA,kBAAA,SAAA,aAAa,CAAA,4CAAA,uEAAE;YAA/B,IAAM,MAAM,0BAAA;YAChB,IAAM,YAAY,GAAc,EAAE,CAAC;YACnC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YAErD,IAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAEjF,IAAI,YAAY,CAAC,MAAM,IAAI,MAAM,EAAE;gBAClC,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,QAAA,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;aACnF;iBACI;gBACJ,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aAC7C;SACD;;;;;;;;;AACF,CAAC;AAjCD,kEAiCC;AAED,SAAS,oBAAoB,CAAC,QAAe;;IAC5C,IAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC7B,OAAO,OAAO,CAAC;KACf;;QAED,KAAoB,IAAA,aAAA,SAAA,QAAQ,CAAA,kCAAA,wDAAE;YAAzB,IAAM,KAAK,qBAAA;YACf,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;gBAChE,IAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC7B,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,EAAE;oBACrE,OAAO,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,EAAE,EAAE,MAAM,CAAC,EAAE;wBACb,UAAU,EAAE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;wBACjF,YAAY,EAAE,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;qBACvF,CAAC,CAAC;iBACH;aACD;SACD;;;;;;;;;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAe;;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC7B,OAAO,IAAI,CAAC;KACZ;IAED,IAAM,OAAO,GAAU,EAAE,CAAC;;QAE1B,KAAoB,IAAA,aAAA,SAAA,QAAQ,CAAA,kCAAA,wDAAE;YAAzB,IAAM,KAAK,qBAAA;YACf,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE;gBAC9D,OAAO,CAAC,IAAI,CAAC,IAAA,iBAAQ,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;aACrC;SACD;;;;;;;;;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACpB,OAAO,IAAI,CAAC;KACZ;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACzB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;KAClB;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAe;;IAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC7B,OAAO,IAAI,CAAC;KACZ;IAED,IAAI,KAAK,GAAG,SAAS,CAAC;IACtB,IAAI,IAAI,GAAG,SAAS,CAAC;IACrB,IAAI,IAAI,GAAG,IAAI,CAAC;;QAEhB,KAAoB,IAAA,aAAA,SAAA,QAAQ,CAAA,kCAAA,wDAAE;YAAzB,IAAM,KAAK,qBAAA;YACf,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,MAAK,SAAS,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE;gBACpE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;aACrB;iBACI,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,MAAK,SAAS,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;gBACvE,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;aACnB;iBACI,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,KAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;gBACzD,IAAI,GAAG,IAAA,iBAAQ,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aAC7B;SACD;;;;;;;;;IAED,IAAM,IAAI,GAAc,EAAE,CAAC;IAE3B,IAAI,KAAK,KAAK,SAAS,EAAE;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACnB;IAED,IAAI,IAAI,KAAK,SAAS,EAAE;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KACjB;IAED,IAAI,IAAI,EAAE;QACT,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KACjB;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAe,EAAE,IAAY,EAAE,MAAiB;;IAC5E,IAAI,CAAC,MAAM,EAAE;QACZ,OAAO;KACP;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;;YAC1B,KAAmB,IAAA,WAAA,SAAA,MAAM,CAAA,8BAAA,kDAAE;gBAAtB,IAAM,IAAI,mBAAA;gBACd,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;aACxC;;;;;;;;;QACD,OAAO;KACP;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC/B,OAAO;KACP;IAED,IAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,uBAAuB,CAAC,MAAiC,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,uBAAuB,CAAC,KAA8B,EAAE,IAAc,EAAE,KAAa,EAAE,MAAiB;;IAChH,IAAI,CAAC,KAAK,EAAE;QACX,OAAO;KACP;IAED,IAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAEnC,IAAI,OAAO,KAAK,SAAS,EAAE;QAC1B,OAAO;KACP;IAED,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO;KACP;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;;YAC3B,KAAmB,IAAA,YAAA,SAAA,OAAO,CAAA,gCAAA,qDAAE;gBAAvB,IAAM,IAAI,oBAAA;gBACd,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBACrC,uBAAuB,CAAC,IAA+B,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;iBAClF;aACD;;;;;;;;;KACD;SACI,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAChD,uBAAuB,CAAC,OAAkC,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;KACrF;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAe,EAAE,UAAmB,EAAE,YAAqB;;IACrF,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,EAAE;QACjC,OAAO,IAAI,CAAC;KACZ;IAED,IAAM,MAAM,GAAU,EAAE,CAAC;IACzB,IAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAEhD,IAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAEhD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACzB,OAAO,IAAI,CAAC;KACZ;IAED;QACC,GAAC,YAAY,IAAG;YACf,GAAG,EAAE,YAAY;SACjB;WACA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAe,EAAE,IAAc,EAAE,KAAa,EAAE,MAAa;;IACxF,IAAI,CAAC,MAAM,EAAE;QACZ,OAAO;KACP;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;;YAC1B,KAAmB,IAAA,WAAA,SAAA,MAAM,CAAA,8BAAA,kDAAE;gBAAtB,IAAM,IAAI,mBAAA;gBACd,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;aAC9C;;;;;;;;;QACD,OAAO;KACP;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC/B,OAAO;KACP;IAED,IAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,IAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,IAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAEzB,IAAI,OAAO,KAAK,SAAS,EAAE;QAC1B,OAAO;KACP;IAED,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QAC9B,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,OAAO;KACP;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;;YAC3B,KAAmB,IAAA,YAAA,SAAA,OAAO,CAAA,gCAAA,qDAAE;gBAAvB,IAAM,IAAI,oBAAA;gBACd,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;aAClD;;;;;;;;;KACD;SACI;QACJ,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;KACrD;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAa,EAAE,KAAU;;IACnD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;QAC1C,OAAO;KACP;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;YACzB,KAAmB,IAAA,UAAA,SAAA,KAAK,CAAA,4BAAA,+CAAE;gBAArB,IAAM,IAAI,kBAAA;gBACd,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;aAChC;;;;;;;;;QACD,OAAO;KACP;IAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAa;;IACxC,IAAM,MAAM,GAAG,IAAI,GAAG,EAAe,CAAC;;QAEtC,KAAoB,IAAA,WAAA,SAAA,MAAM,CAAA,8BAAA,kDAAE;YAAvB,IAAM,KAAK,mBAAA;YACf,IAAM,GAAG,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACrB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;aACvB;SACD;;;;;;;;;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAU;IACvC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QAC1C,OAAO,MAAM,CAAC;KACd;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC9B,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,UAAU,EAAE;YAC5C,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;SAC3B;QAED,IAAI,KAAK,YAAY,IAAI,EAAE;YAC1B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;SAC3B;QAED,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;YACzF,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;SACxB;QAED,IAAI;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAC7B;QACD,WAAM;YACL,OAAO,UAAU,CAAC;SAClB;KACD;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAe,EAAE,GAAgB,EAAE,OAA+B;;IAA/B,wBAAA,EAAA,cAAc,OAAO,EAAU;IAC/F,IAAI,CAAC,MAAM,EAAE;QACZ,OAAO;KACP;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;;YAC1B,KAAmB,IAAA,WAAA,SAAA,MAAM,CAAA,8BAAA,kDAAE;gBAAtB,IAAM,IAAI,mBAAA;gBACd,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;aACzC;;;;;;;;;QACD,OAAO;KACP;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC/B,OAAO;KACP;IAED,IAAM,YAAY,GAAG,MAAiC,CAAC;IAEvD,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;QAC9B,OAAO;KACP;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAE1B,IAAM,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAEnD,IAAI,YAAY,EAAE;QACjB,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;KACtB;;QAED,KAAoB,IAAA,KAAA,SAAA,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA,gBAAA,4BAAE;YAA5C,IAAM,KAAK,WAAA;YACf,IAAI,KAAK,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;gBACjE,oBAAoB,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;aAC1C;SACD;;;;;;;;;AACF,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAe,EAAE,GAAgB;;IAC9D,IAAI,CAAC,MAAM,EAAE;QACZ,OAAO;KACP;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;;YAC1B,KAAmB,IAAA,WAAA,SAAA,MAAM,CAAA,8BAAA,kDAAE;gBAAtB,IAAM,IAAI,mBAAA;gBACd,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aAChC;;;;;;;;;QACD,OAAO;KACP;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC/B,OAAO;KACP;IAED,IAAM,YAAY,GAAG,MAAiC,CAAC;IAEvD,IAAI,YAAY,CAAC,GAAG,KAAK,SAAS,EAAE;QACnC,yBAAyB,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KACjD;;QAED,KAA2B,IAAA,KAAA,SAAA,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA,gBAAA,4BAAE;YAA9C,IAAA,KAAA,mBAAY,EAAX,GAAG,QAAA,EAAE,KAAK,QAAA;YACrB,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE;gBACtD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;wBACzB,KAAmB,IAAA,0BAAA,SAAA,KAAK,CAAA,CAAA,4BAAA,+CAAE;4BAArB,IAAM,IAAI,kBAAA;4BACd,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;yBAChC;;;;;;;;;iBACD;aACD;iBACI,IAAI,GAAG,KAAK,KAAK,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7D,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;aACjC;SACD;;;;;;;;;AACF,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc,EAAE,GAAgB;;IAClE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QAC1C,OAAO;KACP;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;YACzB,KAAmB,IAAA,UAAA,SAAA,KAAK,CAAA,4BAAA,+CAAE;gBAArB,IAAM,IAAI,kBAAA;gBACd,yBAAyB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aACrC;;;;;;;;;QACD,OAAO;KACP;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;;YAC9B,KAA2B,IAAA,KAAA,SAAA,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAA,gBAAA,4BAAE;gBAAlE,IAAA,KAAA,mBAAY,EAAX,GAAG,QAAA,EAAE,KAAK,QAAA;gBACrB,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE;oBACtD,yBAAyB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;iBACtC;qBACI,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,EAAE;oBACxC,yBAAyB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;iBACtC;qBACI,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE;oBAC3D,yBAAyB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;iBACtC;qBACI;oBACJ,yBAAyB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;iBACtC;aACD;;;;;;;;;QACD,OAAO;KACP;IAED,IAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEtC,IAAI,UAAU,EAAE;QACf,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KACpB;AACF,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QAC1C,OAAO,IAAI,CAAC;KACZ;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC9B,IAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;KACvC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC3D,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;KACxB;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC9B,IAAM,QAAQ,GAAG,KAAgE,CAAC;QAElF,IAAI,OAAO,QAAQ,CAAC,WAAW,KAAK,UAAU,EAAE;YAC/C,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC;SAC9B;QAED,IAAI,KAAK,YAAY,IAAI,EAAE;YAC1B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;SAC3B;QAED,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,UAAU,EAAE;YAC5C,IAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,GAAG,IAAI,GAAG,KAAK,iBAAiB,EAAE;gBACrC,OAAO,GAAG,CAAC;aACX;SACD;KACD;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAkC;;IAC7D,IAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;;QAE9C,KAAgC,IAAA,KAAA,SAAA,QAAQ,CAAC,OAAO,EAAE,CAAA,gBAAA,4BAAE;YAAzC,IAAA,KAAA,mBAAiB,EAAhB,UAAU,QAAA,EAAE,GAAG,QAAA;YAC1B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SACrC;;;;;;;;;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,QAA4B;;IACnD,IAAM,MAAM,GAAG,IAAI,GAAG,EAAiB,CAAC;;QAExC,KAAoC,IAAA,KAAA,SAAA,QAAQ,CAAC,OAAO,EAAE,CAAA,gBAAA,4BAAE;YAA7C,IAAA,KAAA,mBAAqB,EAApB,UAAU,QAAA,EAAE,OAAO,QAAA;YAC9B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,IAAA,iBAAQ,EAAC,MAAM,CAAC,EAAhB,CAAgB,CAAC,CAAC,CAAC;SAChE;;;;;;;;;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAkC;;IAC5D,IAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;;QAE9C,KAAqC,IAAA,KAAA,SAAA,QAAQ,CAAC,OAAO,EAAE,CAAA,gBAAA,4BAAE;YAA9C,IAAA,KAAA,mBAAsB,EAArB,UAAU,QAAA,EAAE,QAAQ,QAAA;YAC/B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAA,iBAAQ,EAAC,IAAI,CAAC,EAAd,CAAc,CAAC,CAAC,CAAC;SAC7D;;;;;;;;;IAED,OAAO,MAAM,CAAC;AACf,CAAC","file":"subscription-dependency-context.js","sourcesContent":["import { AsyncLocalStorage } from 'async_hooks';\nimport { deepCopy } from './common';\n\nexport interface QueryMeta {\n\tlimit?: number;\n\tskip?: number;\n\tsort?: any;\n}\n\nexport interface DependencyContextSnapshot {\n\tdependencies: Map<string, Set<string>>;\n\tfilters: Map<string, any[]>;\n\twatchAllCollections: Set<string>;\n\tqueryMetadata: Map<string, QueryMeta[]>;\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\tqueryMetadata: new Map()\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\tqueryMetadata: cloneQueryMetaMap(context.queryMetadata)\n\t\t}\n\t};\n}\n\nexport function recordDependencyResult(collection: string, result: unknown, options?: { filter?: any, meta?: QueryMeta }) {\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\tif (options?.meta) {\n\t\tlet metaList = context.queryMetadata.get(collection);\n\n\t\tif (!metaList) {\n\t\t\tmetaList = [];\n\t\t\tcontext.queryMetadata.set(collection, metaList);\n\t\t}\n\n\t\tmetaList.push(deepCopy(options.meta));\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\tconst matchFilter = extractMatchFilter(pipeline);\n\tconst meta = extractAggregateMeta(pipeline);\n\trecordDependencyResult(collection, result, {\n\t\tfilter: matchFilter,\n\t\tmeta\n\t});\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 extractMatchFilter(pipeline: any[]): any {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tconst filters: any[] = [];\n\n\tfor (const stage of pipeline) {\n\t\tif (stage && stage.$match && typeof stage.$match === 'object') {\n\t\t\tfilters.push(deepCopy(stage.$match));\n\t\t}\n\t}\n\n\tif (!filters.length) {\n\t\treturn null;\n\t}\n\n\tif (filters.length === 1) {\n\t\treturn filters[0];\n\t}\n\n\treturn { $and: filters };\n}\n\nfunction extractAggregateMeta(pipeline: any[]): QueryMeta {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tlet limit = undefined;\n\tlet skip = undefined;\n\tlet sort = null;\n\n\tfor (const stage of pipeline) {\n\t\tif (stage?.$limit !== undefined && typeof stage.$limit === 'number') {\n\t\t\tlimit = stage.$limit;\n\t\t}\n\t\telse if (stage?.$skip !== undefined && typeof stage.$skip === 'number') {\n\t\t\tskip = stage.$skip;\n\t\t}\n\t\telse if (stage?.$sort && typeof stage.$sort === 'object') {\n\t\t\tsort = deepCopy(stage.$sort);\n\t\t}\n\t}\n\n\tconst meta: QueryMeta = {};\n\n\tif (limit !== undefined) {\n\t\tmeta.limit = limit;\n\t}\n\n\tif (skip !== undefined) {\n\t\tmeta.skip = skip;\n\t}\n\n\tif (sort) {\n\t\tmeta.sort = sort;\n\t}\n\n\treturn Object.keys(meta).length ? meta : null;\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\nfunction cloneQueryMetaMap(original: Map<string, QueryMeta[]>): Map<string, QueryMeta[]> {\n\tconst cloned = new Map<string, QueryMeta[]>();\n\n\tfor (const [collection, metaList] of original.entries()) {\n\t\tcloned.set(collection, metaList.map(meta => deepCopy(meta)));\n\t}\n\n\treturn cloned;\n}\n"]}