@omegup/msync 0.0.31 → 0.0.32-test2
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/index.d.ts +4 -3
- package/index.esm.js +149 -116
- package/index.js +149 -115
- package/package.json +1 -1
- package/lib/accumulators/index.d.ts +0 -10
- package/lib/aggregate/$merge.d.ts +0 -10
- package/lib/aggregate/$upsert.d.ts +0 -11
- package/lib/aggregate/group/$group-merge.d.ts +0 -12
- package/lib/aggregate/group/index.d.ts +0 -2
- package/lib/aggregate/group/utils/sub-group.d.ts +0 -6
- package/lib/aggregate/group/utils/sub-merge.d.ts +0 -15
- package/lib/aggregate/index.d.ts +0 -8
- package/lib/aggregate/lookup/$lookup-delta.d.ts +0 -10
- package/lib/aggregate/lookup/$lookup-raw.d.ts +0 -9
- package/lib/aggregate/lookup/index.d.ts +0 -11
- package/lib/aggregate/match/$match-delta.d.ts +0 -3
- package/lib/aggregate/match/$match.d.ts +0 -3
- package/lib/aggregate/match/index.d.ts +0 -2
- package/lib/aggregate/mongo-stages.d.ts +0 -13
- package/lib/aggregate/out.d.ts +0 -34
- package/lib/aggregate/prefix.d.ts +0 -33
- package/lib/aggregate/raws.d.ts +0 -17
- package/lib/aggregate/set/$replace-with-each.d.ts +0 -12
- package/lib/aggregate/set/$set-delta.d.ts +0 -5
- package/lib/aggregate/set/$set.d.ts +0 -6
- package/lib/aggregate/set/index.d.ts +0 -1
- package/lib/aggregate/unwind/$unwind-delta.d.ts +0 -5
- package/lib/aggregate/unwind/index.d.ts +0 -5
- package/lib/boot/boot-simpl.d.ts +0 -14
- package/lib/boot/boot.d.ts +0 -36
- package/lib/boot/index.d.ts +0 -2
- package/lib/expression/arith.d.ts +0 -26
- package/lib/expression/array.d.ts +0 -25
- package/lib/expression/concat.d.ts +0 -30
- package/lib/expression/date.d.ts +0 -17
- package/lib/expression/expr-base.d.ts +0 -5
- package/lib/expression/index.d.ts +0 -7
- package/lib/expression/logic.d.ts +0 -22
- package/lib/expression/range.d.ts +0 -6
- package/lib/expression/val.d.ts +0 -25
- package/lib/field/field.d.ts +0 -25
- package/lib/field/index.d.ts +0 -1
- package/lib/machine.d.ts +0 -9
- package/lib/predicate/$eq.d.ts +0 -13
- package/lib/predicate/$expr.d.ts +0 -3
- package/lib/predicate/$in.d.ts +0 -2
- package/lib/predicate/index.d.ts +0 -3
- package/lib/predicate/utils.d.ts +0 -5
- package/lib/query/index.d.ts +0 -1
- package/lib/query/logic.d.ts +0 -11
- package/lib/stream/aggregate.d.ts +0 -7
- package/lib/types/accumulator.d.ts +0 -30
- package/lib/types/aggregate.d.ts +0 -9
- package/lib/types/expr.d.ts +0 -27
- package/lib/types/extern.d.ts +0 -3
- package/lib/types/index.d.ts +0 -8
- package/lib/types/lookup.d.ts +0 -19
- package/lib/types/machine.d.ts +0 -17
- package/lib/types/predicate.d.ts +0 -14
- package/lib/types/query.d.ts +0 -12
- package/lib/types/stream.d.ts +0 -67
- package/lib/update/index.d.ts +0 -1
- package/lib/update/updater.d.ts +0 -19
- package/lib/utils/before.d.ts +0 -3
- package/lib/utils/coll.d.ts +0 -5
- package/lib/utils/db-indexes.d.ts +0 -4
- package/lib/utils/guard.d.ts +0 -18
- package/lib/utils/index.d.ts +0 -3
- package/lib/utils/json.d.ts +0 -9
- package/lib/utils/log.d.ts +0 -1
- package/lib/utils/map-object.d.ts +0 -41
- package/lib/utils/merge/combiners.d.ts +0 -6
- package/lib/utils/merge/index.d.ts +0 -2
- package/lib/utils/merge/merge.d.ts +0 -7
- package/lib/utils/merge/next-winner.d.ts +0 -3
- package/lib/utils/merge/types.d.ts +0 -19
- package/lib/utils/merge/utils.d.ts +0 -5
- package/lib/utils/tear-down.d.ts +0 -2
- package/lib/watch.d.ts +0 -15
- package/test/mongodb.d.ts +0 -9
- package/test/uri.d.ts +0 -1
- package/types/class.d.ts +0 -1
- package/types/extern.d.ts +0 -3
- package/types/global.d.ts +0 -50
- package/types/hkt.d.ts +0 -56
- package/types/index.d.ts +0 -6
- package/types/json.d.ts +0 -54
- package/types/mongo.d.ts +0 -24
- package/types/view.d.ts +0 -35
package/index.d.ts
CHANGED
|
@@ -55,7 +55,7 @@ declare const root: <T extends O>() => Field<T, T, unknown>;
|
|
|
55
55
|
declare const ctx: <T>() => <K extends string>(k: K) => Field<unknown, T, RORec<K, T>>;
|
|
56
56
|
|
|
57
57
|
declare const QueryRaw: unique symbol;
|
|
58
|
-
type QueryRaw<T, C> = RawObj & {
|
|
58
|
+
type QueryRaw<T, C = unknown> = RawObj & {
|
|
59
59
|
[Type]?(x: typeof QueryRaw, y: T, c: C): void;
|
|
60
60
|
};
|
|
61
61
|
declare const Query: unique symbol;
|
|
@@ -457,6 +457,7 @@ type Params<As extends string, LQ extends O, RQ extends O, RE extends RQ, S exte
|
|
|
457
457
|
as: AsLiteral<As>;
|
|
458
458
|
};
|
|
459
459
|
declare const $lookup: <As extends string, LQ extends doc, RQ extends O, RE extends RQ & doc, S extends notArr>(p: Params<As, LQ, RQ, RE, S>) => <LE extends LQ>(l: SnapshotStream<LQ, LE>) => SnapshotStream<LQ, LE & RORec<As, RE>>;
|
|
460
|
+
declare const $outerLookup: <As extends string, LQ extends doc, RQ extends O, RE extends RQ & doc, S extends notArr>(p: Params<As, LQ, RQ, RE, S>) => <LE extends LQ>(l: SnapshotStream<LQ, LE>) => SnapshotStream<LQ, LE & RORec<As, RE | null>>;
|
|
460
461
|
|
|
461
462
|
declare const $matchDelta: <T extends doc>(query: Expr<boolean, T>) => RawStages<unknown, Delta<T>, Delta<T>, unknown, number>;
|
|
462
463
|
|
|
@@ -478,7 +479,7 @@ declare const $set: <V extends O>() => <R extends O, C = unknown>(fields: MapO<V
|
|
|
478
479
|
declare const $replaceWith: <T extends O, V extends O>(expr: Expr<V, T>) => DeltaStages<O, T, V> & LinStages<O, T, V>;
|
|
479
480
|
|
|
480
481
|
type s$1 = string;
|
|
481
|
-
declare const $unwindDelta: <K1 extends s$1, T extends doc, K2 extends s$1, U extends doc>(k1: AsLiteral<K1>, k2: AsLiteral<K2>, k: K1 | K2 | false) => RawStages<Delta<Rec<K1, T>>, Delta<Rec<K1, T> & Rec<K2, Arr<U>>>, Delta<Rec<K1, T> & Rec<K2, U> & ID>>;
|
|
482
|
+
declare const $unwindDelta: <K1 extends s$1, T extends doc, K2 extends s$1, U extends doc, Null extends null = never>(k1: AsLiteral<K1>, k2: AsLiteral<K2>, k: K1 | K2 | false, includeNull?: Null) => RawStages<Delta<Rec<K1, T>>, Delta<Rec<K1, T> & Rec<K2, Arr<U>>>, Delta<Rec<K1, T> & Rec<K2, U | Null> & ID>>;
|
|
482
483
|
|
|
483
484
|
type s = string;
|
|
484
485
|
declare const $unwind: <T extends doc, K extends s, U extends doc>(k: AsLiteral<K>, dict: RORec<K, "key">) => DeltaStages<O, T & Rec<K, Arr<U>>, T & Rec<K, U>>;
|
|
@@ -662,4 +663,4 @@ declare const enablePreAndPostImages: <T extends doc>(coll: Collection<T>) => Pr
|
|
|
662
663
|
declare const prepare: (testName?: string) => Promise<MongoClient$1>;
|
|
663
664
|
declare const makeCol: <T extends ID>(docs: readonly OptionalUnlessRequiredId<T>[], database: Db, name?: string) => Promise<Collection<T>>;
|
|
664
665
|
|
|
665
|
-
export { $accumulator, $and, $countDict, $entries, $eq, $expr, $getField, $group, $groupId, $groupMerge, $gt, $gtTs, $gte, $gteTs, $ifNull, $in, $insert, $insertX, $keys, $let, $lookup, $lt, $lte, $map, $map1, $match, $matchDelta, $merge, $merge_, $ne, $nin, $nor, $or, $pushDict, $rand, $replaceWith, $set, $simpleInsert, $simpleMerge, $sum, $unwind, $unwindDelta, type Accumulators, type Arr, type AsLiteral, type Delta, type DeltaAccumulator, type DeltaAccumulators, Expr, type ExprHKT, type Exprs, type ExprsExact, type ExprsExactHKT, type ExprsPart, Field, type ID, type Loose, Machine, type Merge, type MergeArgs, type MergeInto, type MergeMapOArgs, type Model, type N, type NoRaw, type O, type OPick, type OPickD, type RONoRaw, type RORec, type RawStages, type Rec, type Replace, type SnapshotStreamExecutionResult, type StrKey, type Strict, type TS, Type, type WriteonlyCollection, add, and, array, ceil, comp, concat, concatArray, createIndex, ctx, current, dateAdd, dateDiff, dateLt, datePart, dayAndMonthPart, divide, type doc, enablePreAndPostImages, eq, eqTyped, except, exprMapVal, field, fieldF, fieldM, filter, filterDefined, first, firstSure, floor, from, func, gt, gte, inArray, isArray, ite, last, log, lt, lte, makeCol, map1, mapVal, max, maxDate, mergeExact, mergeExact0, mergeExpr, mergeObjects, minDate, monthPart, multiply, ne, nil, noop, type notArr, notNull, now, or, pair, prepare, rand, range, root, set, setField, size, slice, sortArray, staging, startOf, str, sub, subtract, to, toInt, val, weekPart, wrap, year };
|
|
666
|
+
export { $accumulator, $and, $countDict, $entries, $eq, $expr, $getField, $group, $groupId, $groupMerge, $gt, $gtTs, $gte, $gteTs, $ifNull, $in, $insert, $insertX, $keys, $let, $lookup, $lt, $lte, $map, $map1, $match, $matchDelta, $merge, $merge_, $ne, $nin, $nor, $or, $outerLookup, $pushDict, $rand, $replaceWith, $set, $simpleInsert, $simpleMerge, $sum, $unwind, $unwindDelta, type Accumulators, type Arr, type AsLiteral, type Delta, type DeltaAccumulator, type DeltaAccumulators, Expr, type ExprHKT, type Exprs, type ExprsExact, type ExprsExactHKT, type ExprsPart, Field, type ID, type Loose, Machine, type Merge, type MergeArgs, type MergeInto, type MergeMapOArgs, type Model, type N, type NoRaw, type O, type OPick, type OPickD, type RONoRaw, type RORec, type RawStages, type Rec, type Replace, type SnapshotStreamExecutionResult, type StrKey, type Strict, type TS, Type, type WriteonlyCollection, add, and, array, ceil, comp, concat, concatArray, createIndex, ctx, current, dateAdd, dateDiff, dateLt, datePart, dayAndMonthPart, divide, type doc, enablePreAndPostImages, eq, eqTyped, except, exprMapVal, field, fieldF, fieldM, filter, filterDefined, first, firstSure, floor, from, func, gt, gte, inArray, isArray, ite, last, log, lt, lte, makeCol, map1, mapVal, max, maxDate, mergeExact, mergeExact0, mergeExpr, mergeObjects, minDate, monthPart, multiply, ne, nil, noop, type notArr, notNull, now, or, pair, prepare, rand, range, root, set, setField, size, slice, sortArray, staging, startOf, str, sub, subtract, to, toInt, val, weekPart, wrap, year };
|
package/index.esm.js
CHANGED
|
@@ -465,7 +465,12 @@ const $replaceWith1 = (expr) => f => {
|
|
|
465
465
|
{ $replaceWith: parts.reduce((v, k) => ({ [k]: v }), expr.raw(f()).get()) },
|
|
466
466
|
]);
|
|
467
467
|
};
|
|
468
|
-
const $unwind1 = (k) => f =>
|
|
468
|
+
const $unwind1 = (k, includeNull) => f => {
|
|
469
|
+
const path = `$${f().of(k).str()}`;
|
|
470
|
+
return asStages([
|
|
471
|
+
{ $unwind: path },
|
|
472
|
+
]);
|
|
473
|
+
};
|
|
469
474
|
const $group1 = (id, args) => (f) => asStages([
|
|
470
475
|
{
|
|
471
476
|
$group: {
|
|
@@ -496,7 +501,7 @@ const $simpleLookup1 = (args) => f => {
|
|
|
496
501
|
const $match_ = (query) => $match1(query)(root);
|
|
497
502
|
const $set_ = (updater) => $set1(updater)(root);
|
|
498
503
|
const $replaceWith_ = (expr) => $replaceWith1(expr)(root);
|
|
499
|
-
const $unwind_ = (k) => $unwind1(k)(root);
|
|
504
|
+
const $unwind_ = (k, includeNull) => $unwind1(k)(root);
|
|
500
505
|
const $group_ = () => (id, args) => $group1(id, args)(root);
|
|
501
506
|
const $project_ = $project1;
|
|
502
507
|
const $simpleLookup_ = (args) => $simpleLookup1(args)(root);
|
|
@@ -612,29 +617,6 @@ const $groupMerge = (id, args, out, gid, extra, idPrefix = '') => ({
|
|
|
612
617
|
const $groupId = (id, args, out, extra) => $groupMerge(id, args, { into: out, whenNotMatched: 'fail' }, '_id', extra);
|
|
613
618
|
const $group = (id, args, out, extra, idPrefix = '') => $groupMerge(id, args, { into: out, whenNotMatched: 'insert' }, '_grp', extra, idPrefix);
|
|
614
619
|
|
|
615
|
-
const $expr = (expr) => ({
|
|
616
|
-
raw: f => ({ $expr: expr.raw(f).get() }),
|
|
617
|
-
});
|
|
618
|
-
|
|
619
|
-
const $lookupRaw = ({ field1, field2 }, { coll, exec, input }, k2, k) => (f) => {
|
|
620
|
-
root().of('_id').expr();
|
|
621
|
-
root().of(k2).of('_id').expr();
|
|
622
|
-
return link()
|
|
623
|
-
.with($simpleLookup1({
|
|
624
|
-
coll,
|
|
625
|
-
k: k2,
|
|
626
|
-
vars: map1('local', root().with(field1).expr()),
|
|
627
|
-
pipeline: link()
|
|
628
|
-
.with(input)
|
|
629
|
-
.with($match_($expr(eq(ctx()('local').expr())(root().of('before').with(field2).expr()))))
|
|
630
|
-
.with(exec)
|
|
631
|
-
.with($replaceWith_(root().of('before').expr())).stages,
|
|
632
|
-
})(f))
|
|
633
|
-
.with($unwind1(k2)(f))
|
|
634
|
-
.with(link().stages
|
|
635
|
-
).stages;
|
|
636
|
-
};
|
|
637
|
-
|
|
638
620
|
const deltaExpr = (expr) => (field) => {
|
|
639
621
|
return ite(eqTyped($ifNull(root().of(field).expr(), nil), nil), nil, expr(field));
|
|
640
622
|
};
|
|
@@ -664,7 +646,82 @@ const $setDelta = (updater) => {
|
|
|
664
646
|
.with($setEach(k => to(nil), dict)).stages;
|
|
665
647
|
};
|
|
666
648
|
|
|
667
|
-
const $unwindDelta = (k1, k2, k) => {
|
|
649
|
+
const $unwindDelta = (k1, k2, k, includeNull) => {
|
|
650
|
+
const outer = includeNull === null;
|
|
651
|
+
const newItems = {
|
|
652
|
+
$filter: {
|
|
653
|
+
input: { $ifNull: [`$after.${k2}`, []] },
|
|
654
|
+
as: 'a',
|
|
655
|
+
cond: {
|
|
656
|
+
$not: {
|
|
657
|
+
$in: [
|
|
658
|
+
'$$a._id',
|
|
659
|
+
{
|
|
660
|
+
$map: {
|
|
661
|
+
input: { $ifNull: [`$before.${k2}`, []] },
|
|
662
|
+
as: 'b',
|
|
663
|
+
in: '$$b._id',
|
|
664
|
+
},
|
|
665
|
+
},
|
|
666
|
+
],
|
|
667
|
+
},
|
|
668
|
+
},
|
|
669
|
+
},
|
|
670
|
+
};
|
|
671
|
+
const oldItems = {
|
|
672
|
+
$filter: {
|
|
673
|
+
input: {
|
|
674
|
+
$map: {
|
|
675
|
+
input: { $ifNull: [`$before.${k2}`, []] },
|
|
676
|
+
as: 'b',
|
|
677
|
+
in: {
|
|
678
|
+
before: '$$b',
|
|
679
|
+
after: {
|
|
680
|
+
$ifNull: [
|
|
681
|
+
{
|
|
682
|
+
$first: {
|
|
683
|
+
$filter: {
|
|
684
|
+
input: `$after.${k2}`,
|
|
685
|
+
as: 'a',
|
|
686
|
+
cond: { $eq: ['$$a._id', '$$b._id'] },
|
|
687
|
+
},
|
|
688
|
+
},
|
|
689
|
+
},
|
|
690
|
+
null,
|
|
691
|
+
],
|
|
692
|
+
},
|
|
693
|
+
},
|
|
694
|
+
},
|
|
695
|
+
},
|
|
696
|
+
as: 'a',
|
|
697
|
+
cond: { $ne: ['$$a.before', '$$a.after'] },
|
|
698
|
+
},
|
|
699
|
+
};
|
|
700
|
+
const ifNull = (k, part, str = `$${[k1, k2].sort()[0]}.${part}._id`) => outer && k == k2 ? { $ifNull: [str, 'null'] } : str;
|
|
701
|
+
const interDot = ([a, b]) => [a, '.', b];
|
|
702
|
+
const partReplace = (part) => ({
|
|
703
|
+
$cond: {
|
|
704
|
+
if: { $or: [{ $eq: [`$${k1}.${part}`, null] }, { $eq: [`$${k2}.${part}`, null] }] },
|
|
705
|
+
then: null,
|
|
706
|
+
else: {
|
|
707
|
+
_id: k
|
|
708
|
+
? `$${k}.${part}._id`
|
|
709
|
+
: {
|
|
710
|
+
$concat: interDot([k1, k2].sort().map(k => ifNull(k, part))),
|
|
711
|
+
},
|
|
712
|
+
[k1]: `$${k1}.${part}`,
|
|
713
|
+
[k2]: outer
|
|
714
|
+
? {
|
|
715
|
+
$cond: {
|
|
716
|
+
if: `$${k2}.${part}._id`,
|
|
717
|
+
then: `$${k2}.${part}`,
|
|
718
|
+
else: null,
|
|
719
|
+
},
|
|
720
|
+
}
|
|
721
|
+
: `$${k2}.${part}`,
|
|
722
|
+
},
|
|
723
|
+
},
|
|
724
|
+
});
|
|
668
725
|
const stages = link()
|
|
669
726
|
.with(asStages([
|
|
670
727
|
{
|
|
@@ -675,51 +732,34 @@ const $unwindDelta = (k1, k2, k) => {
|
|
|
675
732
|
},
|
|
676
733
|
[k2]: {
|
|
677
734
|
$concatArrays: [
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
{
|
|
687
|
-
|
|
688
|
-
$filter: {
|
|
689
|
-
input: `$after.${k2}`,
|
|
690
|
-
as: 'a',
|
|
691
|
-
cond: { $eq: ['$$a._id', '$$b._id'] },
|
|
692
|
-
},
|
|
693
|
-
},
|
|
694
|
-
},
|
|
695
|
-
null,
|
|
696
|
-
],
|
|
735
|
+
outer
|
|
736
|
+
? {
|
|
737
|
+
$cond: {
|
|
738
|
+
if: { $eq: [`$before.${k2}`, []] },
|
|
739
|
+
then: {
|
|
740
|
+
$cond: {
|
|
741
|
+
if: { $eq: [`$after.${k2}`, []] },
|
|
742
|
+
then: [],
|
|
743
|
+
else: [{ before: {}, after: null }],
|
|
744
|
+
},
|
|
697
745
|
},
|
|
746
|
+
else: oldItems,
|
|
698
747
|
},
|
|
699
|
-
}
|
|
700
|
-
|
|
748
|
+
}
|
|
749
|
+
: oldItems,
|
|
701
750
|
{
|
|
702
751
|
$map: {
|
|
703
|
-
input:
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
$not: {
|
|
709
|
-
$in: [
|
|
710
|
-
'$$a._id',
|
|
711
|
-
{
|
|
712
|
-
$map: {
|
|
713
|
-
input: { $ifNull: [`$before.${k2}`, []] },
|
|
714
|
-
as: 'b',
|
|
715
|
-
in: '$$b._id',
|
|
716
|
-
},
|
|
717
|
-
},
|
|
718
|
-
],
|
|
752
|
+
input: outer
|
|
753
|
+
? {
|
|
754
|
+
$cond: {
|
|
755
|
+
if: {
|
|
756
|
+
$and: [{ $ne: [`$before.${k2}`, []] }, { $eq: [`$after.${k2}`, []] }],
|
|
719
757
|
},
|
|
758
|
+
then: [{}],
|
|
759
|
+
else: newItems,
|
|
720
760
|
},
|
|
721
|
-
}
|
|
722
|
-
|
|
761
|
+
}
|
|
762
|
+
: newItems,
|
|
723
763
|
as: 'a',
|
|
724
764
|
in: { before: null, after: '$$a' },
|
|
725
765
|
},
|
|
@@ -733,45 +773,9 @@ const $unwindDelta = (k1, k2, k) => {
|
|
|
733
773
|
.with(asStages([
|
|
734
774
|
{
|
|
735
775
|
$replaceWith: {
|
|
736
|
-
_id:
|
|
737
|
-
before:
|
|
738
|
-
|
|
739
|
-
if: { $or: [{ $eq: [`$${k1}.before`, null] }, { $eq: [`$${k2}.before`, null] }] },
|
|
740
|
-
then: null,
|
|
741
|
-
else: {
|
|
742
|
-
_id: {
|
|
743
|
-
$concat: k
|
|
744
|
-
? `$${k}.before._id`
|
|
745
|
-
: [
|
|
746
|
-
`$${[k1, k2].sort()[0]}.before._id`,
|
|
747
|
-
'.',
|
|
748
|
-
`$${[k1, k2].sort()[1]}.before._id`,
|
|
749
|
-
],
|
|
750
|
-
},
|
|
751
|
-
[k1]: `$${k1}.before`,
|
|
752
|
-
[k2]: `$${k2}.before`,
|
|
753
|
-
},
|
|
754
|
-
},
|
|
755
|
-
},
|
|
756
|
-
after: {
|
|
757
|
-
$cond: {
|
|
758
|
-
if: { $or: [{ $eq: [`$${k1}.after`, null] }, { $eq: [`$${k2}.after`, null] }] },
|
|
759
|
-
then: null,
|
|
760
|
-
else: {
|
|
761
|
-
_id: {
|
|
762
|
-
$concat: k
|
|
763
|
-
? `$${k}.after._id`
|
|
764
|
-
: [
|
|
765
|
-
`$${[k1, k2].sort()[0]}.after._id`,
|
|
766
|
-
'.',
|
|
767
|
-
`$${[k1, k2].sort()[1]}.after._id`,
|
|
768
|
-
],
|
|
769
|
-
},
|
|
770
|
-
[k1]: `$${k1}.after`,
|
|
771
|
-
[k2]: `$${k2}.after`,
|
|
772
|
-
},
|
|
773
|
-
},
|
|
774
|
-
},
|
|
776
|
+
_id: '$_id',
|
|
777
|
+
before: partReplace('before'),
|
|
778
|
+
after: partReplace('after'),
|
|
775
779
|
},
|
|
776
780
|
},
|
|
777
781
|
])).stages;
|
|
@@ -791,7 +795,7 @@ const $unwind = (k, dict) => ({
|
|
|
791
795
|
raw: $unwind1(k),
|
|
792
796
|
});
|
|
793
797
|
|
|
794
|
-
const $lookupDelta = ({ field1, field2 }, { coll, exec, input }, k1, k2, k) => {
|
|
798
|
+
const $lookupDelta = ({ field1, field2 }, { coll, exec, input }, k1, k2, k, includeNull) => {
|
|
795
799
|
return link()
|
|
796
800
|
.with($replaceWithDelta(field(map1(k1, root().expr()))))
|
|
797
801
|
.with($simpleLookup_({
|
|
@@ -820,8 +824,30 @@ const $lookupDelta = ({ field1, field2 }, { coll, exec, input }, k1, k2, k) => {
|
|
|
820
824
|
const a = root().of(f1).of('before').expr();
|
|
821
825
|
const part = root().of(f);
|
|
822
826
|
return ite(eq(root().of(f).expr())(nil), nil, field(omit.backward(mergeExpr(omit.forward(map1(k2, a)), map1(k1, part.of(k1).expr())))));
|
|
823
|
-
}))
|
|
824
|
-
|
|
827
|
+
})).with($unwindDelta(k1, k2, k, includeNull)).stages;
|
|
828
|
+
};
|
|
829
|
+
|
|
830
|
+
const $expr = (expr) => ({
|
|
831
|
+
raw: f => ({ $expr: expr.raw(f).get() }),
|
|
832
|
+
});
|
|
833
|
+
|
|
834
|
+
const $lookupRaw = ({ field1, field2 }, { coll, exec, input }, k2, k) => (f) => {
|
|
835
|
+
root().of('_id').expr();
|
|
836
|
+
root().of(k2).of('_id').expr();
|
|
837
|
+
return link()
|
|
838
|
+
.with($simpleLookup1({
|
|
839
|
+
coll,
|
|
840
|
+
k: k2,
|
|
841
|
+
vars: map1('local', root().with(field1).expr()),
|
|
842
|
+
pipeline: link()
|
|
843
|
+
.with(input)
|
|
844
|
+
.with($match_($expr(eq(ctx()('local').expr())(root().of('before').with(field2).expr()))))
|
|
845
|
+
.with(exec)
|
|
846
|
+
.with($replaceWith_(root().of('before').expr())).stages,
|
|
847
|
+
})(f))
|
|
848
|
+
.with($unwind1(k2)(f))
|
|
849
|
+
.with(link().stages
|
|
850
|
+
).stages;
|
|
825
851
|
};
|
|
826
852
|
|
|
827
853
|
const asBefore = (f) => f(() => root().of('before'));
|
|
@@ -937,9 +963,9 @@ const runCont = async ({ next }, cb) => {
|
|
|
937
963
|
};
|
|
938
964
|
|
|
939
965
|
const merge = ({ lsource: L, rsource: R, }) => mergeIterators({ sources: { L, R } });
|
|
940
|
-
const join = ({ lField, rField, left, right, as }, leftSnapshot, rightSnapshot, stagesUntilNextLookup) => {
|
|
941
|
-
createIndex(leftSnapshot.coll, { [lField.str()]: 1 }).catch(e => e.code == 86 || Promise.reject(e));
|
|
942
|
-
createIndex(rightSnapshot.coll, { [rField.str()]: 1 }).catch(e => e.code == 86 || Promise.reject(e));
|
|
966
|
+
const join = ({ lField, rField, left, right, as }, leftSnapshot, rightSnapshot, stagesUntilNextLookup, includeNull) => {
|
|
967
|
+
createIndex(leftSnapshot.coll, { [`before.${lField.str()}`]: 1 }).catch(e => e.code == 86 || Promise.reject(e));
|
|
968
|
+
createIndex(rightSnapshot.coll, { [`before.${rField.str()}`]: 1 }).catch(e => e.code == 86 || Promise.reject(e));
|
|
943
969
|
const rightJoinField = { field1: lField, field2: rField };
|
|
944
970
|
const joinId = 'left';
|
|
945
971
|
const joinR_Snapshot = asBefore($lookupRaw(rightJoinField, rightSnapshot, as));
|
|
@@ -952,7 +978,7 @@ const join = ({ lField, rField, left, right, as }, leftSnapshot, rightSnapshot,
|
|
|
952
978
|
out: (finalInput) => {
|
|
953
979
|
const leftJoinField = { field1: rField, field2: lField };
|
|
954
980
|
const joinL_Delta = $lookupDelta(leftJoinField, leftSnapshot, 'right', 'left', joinId);
|
|
955
|
-
const joinR_Delta = $lookupDelta(rightJoinField, rightSnapshot, 'left', 'right', joinId);
|
|
981
|
+
const joinR_Delta = $lookupDelta(rightJoinField, rightSnapshot, 'left', 'right', joinId, includeNull);
|
|
956
982
|
const mergeForeignIntoDoc = concatStages($replaceWithDelta(mergeObjects(root().of('left').expr(), fieldM({ a: root().of('right').expr(), b: root().of('_id').expr() }, dictId))), stagesUntilNextLookup.delta);
|
|
957
983
|
const lRunnerInput = concatStages(joinR_Delta, mergeForeignIntoDoc);
|
|
958
984
|
const rRunnerInput = concatStages(joinL_Delta, mergeForeignIntoDoc);
|
|
@@ -966,7 +992,7 @@ const join = ({ lField, rField, left, right, as }, leftSnapshot, rightSnapshot,
|
|
|
966
992
|
},
|
|
967
993
|
};
|
|
968
994
|
};
|
|
969
|
-
const $lookup1 = (p) => (input) => p.left.stages((lStages) => p.right.stages((rStages) => join(p, lStages, rStages, input)));
|
|
995
|
+
const $lookup1 = (p, includeNull) => (input) => p.left.stages((lStages) => p.right.stages((rStages) => join(p, lStages, rStages, input, includeNull)));
|
|
970
996
|
const $lookup = (p) => (l) => $lookup1({
|
|
971
997
|
right: p.from,
|
|
972
998
|
as: p.as,
|
|
@@ -974,6 +1000,13 @@ const $lookup = (p) => (l) => $lookup1({
|
|
|
974
1000
|
rField: p.foreignField,
|
|
975
1001
|
left: l(emptyDelta()),
|
|
976
1002
|
});
|
|
1003
|
+
const $outerLookup = (p) => (l) => $lookup1({
|
|
1004
|
+
right: p.from,
|
|
1005
|
+
as: p.as,
|
|
1006
|
+
lField: p.localField,
|
|
1007
|
+
rField: p.foreignField,
|
|
1008
|
+
left: l(emptyDelta()),
|
|
1009
|
+
}, null);
|
|
977
1010
|
|
|
978
1011
|
const operator = () => (op) => (operand) => {
|
|
979
1012
|
return {
|
|
@@ -1186,7 +1219,7 @@ const makeWatchStream = (db, { collection, projection: p, hardMatch: m }, startA
|
|
|
1186
1219
|
};
|
|
1187
1220
|
|
|
1188
1221
|
const actions = {
|
|
1189
|
-
updateMany: (c, args) => [c.updateMany(...args), [`db['${c.collectionName}'].updateMany(
|
|
1222
|
+
updateMany: (c, args) => [c.updateMany(...args), [`db['${c.collectionName}'].updateMany(...`, args, ')']],
|
|
1190
1223
|
};
|
|
1191
1224
|
const streamNames = {};
|
|
1192
1225
|
const executes$1 = (view, input, streamName) => {
|
|
@@ -1266,9 +1299,9 @@ const executes$1 = (view, input, streamName) => {
|
|
|
1266
1299
|
params: p,
|
|
1267
1300
|
};
|
|
1268
1301
|
const [action, out] = actions[method](collection, params);
|
|
1269
|
-
log('teardown', `db
|
|
1302
|
+
log('teardown', `db['${snapshotCollection.collectionName}'].drop()`, ...out);
|
|
1270
1303
|
await Promise.all([snapshotCollection.drop(), action]);
|
|
1271
|
-
log('teardown done', `db
|
|
1304
|
+
log('teardown done', `db['${snapshotCollection.collectionName}'].drop()`, ...out);
|
|
1272
1305
|
};
|
|
1273
1306
|
if (exists && !same)
|
|
1274
1307
|
await handleTeardown(exists);
|
|
@@ -1745,4 +1778,4 @@ const makeCol = async (docs, database, name) => {
|
|
|
1745
1778
|
}
|
|
1746
1779
|
};
|
|
1747
1780
|
|
|
1748
|
-
export { $accumulator, $and, $countDict, $entries, $eq, $expr, $getField, $group, $groupId, $groupMerge, $gt, $gtTs, $gte, $gteTs, $ifNull, $in, $insert, $insertX, $keys, $let, $lookup, $lt, $lte, $map, $map1, $match, $matchDelta, $merge, $merge_, $ne, $nin, $nor, $or, $pushDict, $rand, $replaceWith, $set, $simpleInsert, $simpleMerge, $sum, $unwind, $unwindDelta, Field, Machine, add, and, array, ceil, comp, concat$1 as concat, concatArray, createIndex, ctx, current, dateAdd, dateDiff, dateLt, datePart, dayAndMonthPart, divide, enablePreAndPostImages, eq, eqTyped, except, exprMapVal, field, fieldF, fieldM, filter, filterDefined, first$1 as first, firstSure, floor, from, func, gt, gte, inArray, isArray, ite, last, log, lt, lte, makeCol, map1, mapVal, max, maxDate, mergeExact, mergeExact0, mergeExpr, mergeObjects, minDate, monthPart, multiply, ne, nil, noop, notNull, now, or, pair, prepare, rand, range, root, set, setField, size, slice, sortArray, staging, startOf, str, sub, subtract, to, toInt, val, weekPart, wrap, year };
|
|
1781
|
+
export { $accumulator, $and, $countDict, $entries, $eq, $expr, $getField, $group, $groupId, $groupMerge, $gt, $gtTs, $gte, $gteTs, $ifNull, $in, $insert, $insertX, $keys, $let, $lookup, $lt, $lte, $map, $map1, $match, $matchDelta, $merge, $merge_, $ne, $nin, $nor, $or, $outerLookup, $pushDict, $rand, $replaceWith, $set, $simpleInsert, $simpleMerge, $sum, $unwind, $unwindDelta, Field, Machine, add, and, array, ceil, comp, concat$1 as concat, concatArray, createIndex, ctx, current, dateAdd, dateDiff, dateLt, datePart, dayAndMonthPart, divide, enablePreAndPostImages, eq, eqTyped, except, exprMapVal, field, fieldF, fieldM, filter, filterDefined, first$1 as first, firstSure, floor, from, func, gt, gte, inArray, isArray, ite, last, log, lt, lte, makeCol, map1, mapVal, max, maxDate, mergeExact, mergeExact0, mergeExpr, mergeObjects, minDate, monthPart, multiply, ne, nil, noop, notNull, now, or, pair, prepare, rand, range, root, set, setField, size, slice, sortArray, staging, startOf, str, sub, subtract, to, toInt, val, weekPart, wrap, year };
|