@omegup/msync 0.1.46 → 0.1.48
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 +27 -19
- package/index.esm.js +49 -26
- package/index.js +49 -26
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ interface RawObj {
|
|
|
39
39
|
type raw = readonly rawItem[] | RawObj;
|
|
40
40
|
type StrKey<T> = string & keyof T;
|
|
41
41
|
type Replace<R, V> = Omit<R, StrKey<V>> & V & O;
|
|
42
|
+
type ReplaceQ<R extends Q, VV, Q extends O> = Omit<R, StrKey<VV>> & Omit<VV, StrKey<Q>> & Q;
|
|
42
43
|
type AsLiteral<T extends keyof any | boolean | N, V = NoUnion<T>> = T extends keyof any ? {} extends {
|
|
43
44
|
[K in T]: 1;
|
|
44
45
|
} ? never : V : V;
|
|
@@ -206,10 +207,10 @@ type BoolExpr<in D1, in D2, in Ctx = unknown> = {
|
|
|
206
207
|
|
|
207
208
|
type ExactPart<T, F extends HKT<T[StrKey<T>]>> = MapOPart<T, MappedHKT<T, F>>;
|
|
208
209
|
type ExactKeys<K extends string> = Exact<RORec<K, 1>, IdHKT>;
|
|
209
|
-
type MapO<T, F extends HKT<StrKey<T
|
|
210
|
-
readonly [P: string]: readonly [
|
|
210
|
+
type MapO<T, F extends HKT<K>, K extends StrKey<T> = StrKey<T>> = MapOPart<T, F, K> & {
|
|
211
|
+
readonly [P: string]: readonly [K, unknown];
|
|
211
212
|
};
|
|
212
|
-
type MapOPart<T, F extends HKT<
|
|
213
|
+
type MapOPart<T, F extends HKT<K>, K extends keyof T = StrKey<T>> = {
|
|
213
214
|
readonly [P in K]: readonly [P, App<F, P & string>];
|
|
214
215
|
};
|
|
215
216
|
type Exact<T, F extends HKT<T[StrKey<T>]>> = MapO<T, MappedHKT<T, F>>;
|
|
@@ -419,17 +420,17 @@ declare const $merge2: <T extends O, Out extends O = T, Ctx = unknown, In extend
|
|
|
419
420
|
|
|
420
421
|
type GI$1<GG> = Exclude<GG, keyof TS>;
|
|
421
422
|
type IdAndTsKeys = keyof (TS & ID);
|
|
422
|
-
type V<VV, GG extends string> = Omit<VV, IdAndTsKeys | GI$1<GG>>;
|
|
423
|
+
type V$1<VV, GG extends string> = Omit<VV, IdAndTsKeys | GI$1<GG>>;
|
|
423
424
|
type Prepare<Grp, GG extends string> = TS & ID & Rec<GI$1<GG>, Grp>;
|
|
424
425
|
type Par<T> = {
|
|
425
426
|
[P in keyof T]?: T[P] | null;
|
|
426
427
|
};
|
|
427
|
-
type Loose<Grp, VV, GG extends string> = Prepare<Grp, GG> & Par<V<VV, GG>>;
|
|
428
|
-
type Strict<Grp, VV, GG extends string, EE> = Prepare<Grp, GG> & V<VV, GG> & Omit<EE, IdAndTsKeys | GI$1<GG> | keyof V<VV, GG>>;
|
|
429
|
-
type V_Grp<VV, GG extends string, Grp> = Rec<GI$1<GG>, Grp> & V<VV, GG>;
|
|
430
|
-
type Extra<EE, VV, GG extends string> = Omit<EE, IdAndTsKeys | GI$1<GG> | keyof V<VV, GG>>;
|
|
428
|
+
type Loose<Grp, VV, GG extends string> = Prepare<Grp, GG> & Par<V$1<VV, GG>>;
|
|
429
|
+
type Strict<Grp, VV, GG extends string, EE> = Prepare<Grp, GG> & V$1<VV, GG> & Omit<EE, IdAndTsKeys | GI$1<GG> | keyof V$1<VV, GG>>;
|
|
430
|
+
type V_Grp<VV, GG extends string, Grp> = Rec<GI$1<GG>, Grp> & V$1<VV, GG>;
|
|
431
|
+
type Extra<EE, VV, GG extends string> = Omit<EE, IdAndTsKeys | GI$1<GG> | keyof V$1<VV, GG>>;
|
|
431
432
|
type OrReplace<T, V> = T | Replace<T, V>;
|
|
432
|
-
type MergedInput<Out, VV, Grp, GG extends string, EE> = OrReplace<Replace<Replace<Out, V<VV, GG>>, Extra<EE, VV, GG>> & Model, TS & ID & V_Grp<VV, GG, Grp> & Extra<EE, VV, GG>>;
|
|
433
|
+
type MergedInput<Out, VV, Grp, GG extends string, EE> = OrReplace<Replace<Replace<Out, V$1<VV, GG>>, Extra<EE, VV, GG>> & Model, TS & ID & V_Grp<VV, GG, Grp> & Extra<EE, VV, GG>>;
|
|
433
434
|
|
|
434
435
|
type Denied<GID = never> = keyof (TS & ID) | GID;
|
|
435
436
|
type GI<GG> = Exclude<GG, keyof TS>;
|
|
@@ -438,18 +439,21 @@ declare const $groupId: <T extends O, V extends O, EE = {}, Out extends Loose<st
|
|
|
438
439
|
declare const $group: <T extends O, Grp extends notArr, V extends O, EE = {}, Out extends Loose<Grp, V, "_grp"> = Loose<Grp, V, "_grp">>(id: Expr<Grp, T>, args: DeltaAccumulators<T, O & Omit<V, Denied<"_grp">>>, out: RWCollection<MergedInput<Out, V, Grp, "_grp", EE> | Strict<Grp, V, "_grp", EE>, Out>, extra: ExprsExact<Omit<EE, IdAndTsKeys | "_grp" | Exclude<keyof V, IdAndTsKeys | "_grp">>, Rec<"_grp", Grp> & Omit<V, IdAndTsKeys | "_grp">>, idPrefix?: string) => StreamRunnerParam<Delta<T>, "out">;
|
|
439
440
|
|
|
440
441
|
type Params<As extends string, LQ extends O, RQ extends O, RE extends RQ, S extends notArr> = {
|
|
441
|
-
foreignField: Field<RQ, S | Arr<S>>;
|
|
442
442
|
from: SnapshotStreamExecutionResult<RQ, RE>;
|
|
443
443
|
as: AsLiteral<As>;
|
|
444
444
|
} & ({
|
|
445
|
-
|
|
446
|
-
|
|
445
|
+
to: 'one';
|
|
446
|
+
localField: Field<LQ, string>;
|
|
447
|
+
foreignField?: never;
|
|
448
|
+
middle?: never;
|
|
447
449
|
} | {
|
|
448
|
-
|
|
449
|
-
|
|
450
|
+
to: 'many';
|
|
451
|
+
middle: string;
|
|
452
|
+
localField: Field<LQ, S | Arr<S>>;
|
|
453
|
+
foreignField: Field<RQ, S | Arr<S>>;
|
|
450
454
|
});
|
|
451
|
-
declare const $lookup: <As extends string, LQ extends doc, RQ extends
|
|
452
|
-
declare const $outerLookup: <As extends string, LQ extends doc, RQ extends
|
|
455
|
+
declare const $lookup: <As extends string, LQ extends doc, RQ extends doc, 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>>;
|
|
456
|
+
declare const $outerLookup: <As extends string, LQ extends doc, RQ extends doc, 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>>;
|
|
453
457
|
|
|
454
458
|
declare const $matchDelta: <T extends doc>(query: Expr<boolean, T>) => RawStages<unknown, Delta<T>, Delta<T>, unknown, number>;
|
|
455
459
|
declare const matchDelta: <D>() => RawStages<unknown, Delta<D | null>, Delta<D>>;
|
|
@@ -462,14 +466,18 @@ type Updater<in R, in T, out V, in C = unknown> = {
|
|
|
462
466
|
[Type]?(x: typeof Updater, r: R, t: T, c: C): V;
|
|
463
467
|
readonly raw: <D extends O>(f: Field<D, R | N>) => readonly (readonly [string, rawItem])[];
|
|
464
468
|
};
|
|
465
|
-
interface UpdaterHKT<R, Old, V, C, K extends keyof Old = keyof Old, V2 extends V = V> extends
|
|
466
|
-
|
|
469
|
+
interface UpdaterHKT<R, Old, V, C, K extends keyof Old = keyof Old, V2 extends V = V> extends UpdaterQHKT<R, Old, V2, StrKey<V>, C, K> {
|
|
470
|
+
}
|
|
471
|
+
interface UpdaterQHKT<R, Old, V, KV extends StrKey<V>, C, K extends keyof Old = keyof Old> extends HKT<KV> {
|
|
472
|
+
readonly out: Updater<R, Get<Old, I<KV, this>, K>, V[I<KV, this>], C>;
|
|
467
473
|
}
|
|
468
474
|
type Get<T, P extends string, K extends keyof T = never> = P extends K ? T[P] : P extends keyof T ? T[P] : undefined;
|
|
469
475
|
declare const set: <V>() => <R, Old extends notArr, C = unknown, K extends keyof Old = never>(fields: MapO<V, UpdaterHKT<R, Old, V, C, K>>) => Updater<R, Old, O & Omit$1<Old, StrKey<V>> & V, C> & Updater<R, Arr<Old>, Arr<Omit$1<Old, StrKey<V>> & V>, C>;
|
|
470
476
|
declare const to: <R, V, C = unknown, T = unknown>(expr: Expr<V, R, C>) => Updater<R, T, V, C>;
|
|
471
477
|
|
|
472
|
-
|
|
478
|
+
type V<VV, Q> = Exclude<StrKey<VV>, StrKey<Q>>;
|
|
479
|
+
type $Set<VV extends O, Q extends O> = <R extends Q, C = unknown>(fields: MapO<Omit<VV, StrKey<Q>>, UpdaterQHKT<R, R, VV, V<VV, Q>, C>, V<VV, Q>>) => DeltaStages<Q, R, Q & ReplaceQ<R, VV, Q>, C> & LinStages<Q, R, Q & ReplaceQ<R, VV, Q>, C>;
|
|
480
|
+
declare const $set: <VV extends O, Q extends O = O>() => $Set<VV, Q>;
|
|
473
481
|
declare const $replaceWith: <T extends O, V extends O>(expr: Expr<V, T>) => DeltaStages<O, T, V> & LinStages<O, T, V>;
|
|
474
482
|
|
|
475
483
|
type s$1 = string;
|
package/index.esm.js
CHANGED
|
@@ -864,11 +864,17 @@ const $map1 = (ex, map) => $map0({ input: ex, as: 'item', expr: map(ctx()('item'
|
|
|
864
864
|
const $map = (ex, map) => $map1(ex, i => map(i.expr()));
|
|
865
865
|
|
|
866
866
|
const subUpdater = (a, f) => ({ raw: (g) => a.raw(g.with(f)) });
|
|
867
|
+
const rawSet = (fields) => (f) => {
|
|
868
|
+
return Object.entries(mapExactToObject0(fields, v => v)).flatMap(([k, v]) => v.raw(f).map(([l, v]) => [`.${k}${l}`, v]));
|
|
869
|
+
};
|
|
867
870
|
const set = () => (fields) => ({
|
|
868
|
-
raw:
|
|
869
|
-
return Object.entries(mapExactToObject0(fields, v => v)).flatMap(([k, v]) => v.raw(f).map(([l, v]) => [`.${k}${l}`, v]));
|
|
870
|
-
},
|
|
871
|
+
raw: rawSet(fields),
|
|
871
872
|
});
|
|
873
|
+
const setQ = () => {
|
|
874
|
+
return (fields) => ({
|
|
875
|
+
raw: rawSet(fields),
|
|
876
|
+
});
|
|
877
|
+
};
|
|
872
878
|
const weaken = (updater) => ({ raw: f => updater.raw(f) });
|
|
873
879
|
const to = (expr) => ({
|
|
874
880
|
raw: f => [['', expr.raw(f).get()]],
|
|
@@ -1628,11 +1634,10 @@ const runCont = async (it, cb) => {
|
|
|
1628
1634
|
};
|
|
1629
1635
|
|
|
1630
1636
|
const merge = ({ lsource: L, rsource: R, }) => mergeIterators({ sources: { L, R } });
|
|
1631
|
-
const join = (
|
|
1637
|
+
const join = (params, leftSnapshot, rightSnapshot, stagesUntilNextLookup, outerLeft) => {
|
|
1638
|
+
const { lField, rField, left, right, as } = params;
|
|
1632
1639
|
const rightJoinField = { field1: lField, field2: rField };
|
|
1633
|
-
const joinId =
|
|
1634
|
-
? 'left'
|
|
1635
|
-
: ['left', middle, 'right'];
|
|
1640
|
+
const joinId = params.to === 'one' ? 'left' : ['left', params.middle, 'right'];
|
|
1636
1641
|
const joinR_Snapshot = asBefore($lookupRaw(rightJoinField, rightSnapshot, as, joinId, outerLeft));
|
|
1637
1642
|
const resultingSnapshot = concatTStages(leftSnapshot, joinR_Snapshot);
|
|
1638
1643
|
const dict = { [as]: 'a' };
|
|
@@ -1670,31 +1675,49 @@ const join = ({ lField, rField, left, right, as, toMany }, leftSnapshot, rightSn
|
|
|
1670
1675
|
};
|
|
1671
1676
|
};
|
|
1672
1677
|
const $lookup1 = (p, outerLeft) => (input) => p.left.stages((lStages) => p.right.stages((rStages) => join(p, lStages, rStages, input, outerLeft)));
|
|
1673
|
-
const $lookup = (p) => (l) =>
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1678
|
+
const $lookup = (p) => (l) => p.to === 'one'
|
|
1679
|
+
? $lookup1({
|
|
1680
|
+
right: p.from,
|
|
1681
|
+
as: p.as,
|
|
1682
|
+
lField: p.localField,
|
|
1683
|
+
rField: root().of('_id'),
|
|
1684
|
+
left: l(emptyDelta()),
|
|
1685
|
+
to: 'one',
|
|
1686
|
+
})
|
|
1687
|
+
: $lookup1({
|
|
1688
|
+
to: 'many',
|
|
1689
|
+
right: p.from,
|
|
1690
|
+
as: p.as,
|
|
1691
|
+
lField: p.localField,
|
|
1692
|
+
rField: p.foreignField,
|
|
1693
|
+
left: l(emptyDelta()),
|
|
1694
|
+
middle: p.middle,
|
|
1695
|
+
});
|
|
1696
|
+
const $outerLookup = (p) => (l) => p.to === 'one'
|
|
1697
|
+
? $lookup1({
|
|
1698
|
+
right: p.from,
|
|
1699
|
+
as: p.as,
|
|
1700
|
+
lField: p.localField,
|
|
1701
|
+
rField: root().of('_id'),
|
|
1702
|
+
left: l(emptyDelta()),
|
|
1703
|
+
to: 'one',
|
|
1704
|
+
}, null)
|
|
1705
|
+
: $lookup1({
|
|
1706
|
+
to: 'many',
|
|
1707
|
+
right: p.from,
|
|
1708
|
+
as: p.as,
|
|
1709
|
+
lField: p.localField,
|
|
1710
|
+
rField: p.foreignField,
|
|
1711
|
+
left: l(emptyDelta()),
|
|
1712
|
+
middle: p.middle,
|
|
1713
|
+
}, null);
|
|
1689
1714
|
|
|
1690
1715
|
const $setCore = (updater) => ({
|
|
1691
1716
|
delta: $setDelta(updater),
|
|
1692
1717
|
raw: $set1(updater),
|
|
1693
1718
|
lin: $set_(updater),
|
|
1694
1719
|
});
|
|
1695
|
-
const $set = () => (fields) =>
|
|
1696
|
-
return $setCore(set()(fields));
|
|
1697
|
-
};
|
|
1720
|
+
const $set = () => (fields) => $setCore(setQ()(fields));
|
|
1698
1721
|
const $replaceWith = (expr) => ({
|
|
1699
1722
|
delta: $replaceWithDelta(expr),
|
|
1700
1723
|
raw: $replaceWith1(expr),
|
package/index.js
CHANGED
|
@@ -866,11 +866,17 @@ const $map1 = (ex, map) => $map0({ input: ex, as: 'item', expr: map(ctx()('item'
|
|
|
866
866
|
const $map = (ex, map) => $map1(ex, i => map(i.expr()));
|
|
867
867
|
|
|
868
868
|
const subUpdater = (a, f) => ({ raw: (g) => a.raw(g.with(f)) });
|
|
869
|
+
const rawSet = (fields) => (f) => {
|
|
870
|
+
return Object.entries(mapExactToObject0(fields, v => v)).flatMap(([k, v]) => v.raw(f).map(([l, v]) => [`.${k}${l}`, v]));
|
|
871
|
+
};
|
|
869
872
|
const set = () => (fields) => ({
|
|
870
|
-
raw:
|
|
871
|
-
return Object.entries(mapExactToObject0(fields, v => v)).flatMap(([k, v]) => v.raw(f).map(([l, v]) => [`.${k}${l}`, v]));
|
|
872
|
-
},
|
|
873
|
+
raw: rawSet(fields),
|
|
873
874
|
});
|
|
875
|
+
const setQ = () => {
|
|
876
|
+
return (fields) => ({
|
|
877
|
+
raw: rawSet(fields),
|
|
878
|
+
});
|
|
879
|
+
};
|
|
874
880
|
const weaken = (updater) => ({ raw: f => updater.raw(f) });
|
|
875
881
|
const to = (expr) => ({
|
|
876
882
|
raw: f => [['', expr.raw(f).get()]],
|
|
@@ -1630,11 +1636,10 @@ const runCont = async (it, cb) => {
|
|
|
1630
1636
|
};
|
|
1631
1637
|
|
|
1632
1638
|
const merge = ({ lsource: L, rsource: R, }) => mergeIterators({ sources: { L, R } });
|
|
1633
|
-
const join = (
|
|
1639
|
+
const join = (params, leftSnapshot, rightSnapshot, stagesUntilNextLookup, outerLeft) => {
|
|
1640
|
+
const { lField, rField, left, right, as } = params;
|
|
1634
1641
|
const rightJoinField = { field1: lField, field2: rField };
|
|
1635
|
-
const joinId =
|
|
1636
|
-
? 'left'
|
|
1637
|
-
: ['left', middle, 'right'];
|
|
1642
|
+
const joinId = params.to === 'one' ? 'left' : ['left', params.middle, 'right'];
|
|
1638
1643
|
const joinR_Snapshot = asBefore($lookupRaw(rightJoinField, rightSnapshot, as, joinId, outerLeft));
|
|
1639
1644
|
const resultingSnapshot = concatTStages(leftSnapshot, joinR_Snapshot);
|
|
1640
1645
|
const dict = { [as]: 'a' };
|
|
@@ -1672,31 +1677,49 @@ const join = ({ lField, rField, left, right, as, toMany }, leftSnapshot, rightSn
|
|
|
1672
1677
|
};
|
|
1673
1678
|
};
|
|
1674
1679
|
const $lookup1 = (p, outerLeft) => (input) => p.left.stages((lStages) => p.right.stages((rStages) => join(p, lStages, rStages, input, outerLeft)));
|
|
1675
|
-
const $lookup = (p) => (l) =>
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1680
|
+
const $lookup = (p) => (l) => p.to === 'one'
|
|
1681
|
+
? $lookup1({
|
|
1682
|
+
right: p.from,
|
|
1683
|
+
as: p.as,
|
|
1684
|
+
lField: p.localField,
|
|
1685
|
+
rField: root().of('_id'),
|
|
1686
|
+
left: l(emptyDelta()),
|
|
1687
|
+
to: 'one',
|
|
1688
|
+
})
|
|
1689
|
+
: $lookup1({
|
|
1690
|
+
to: 'many',
|
|
1691
|
+
right: p.from,
|
|
1692
|
+
as: p.as,
|
|
1693
|
+
lField: p.localField,
|
|
1694
|
+
rField: p.foreignField,
|
|
1695
|
+
left: l(emptyDelta()),
|
|
1696
|
+
middle: p.middle,
|
|
1697
|
+
});
|
|
1698
|
+
const $outerLookup = (p) => (l) => p.to === 'one'
|
|
1699
|
+
? $lookup1({
|
|
1700
|
+
right: p.from,
|
|
1701
|
+
as: p.as,
|
|
1702
|
+
lField: p.localField,
|
|
1703
|
+
rField: root().of('_id'),
|
|
1704
|
+
left: l(emptyDelta()),
|
|
1705
|
+
to: 'one',
|
|
1706
|
+
}, null)
|
|
1707
|
+
: $lookup1({
|
|
1708
|
+
to: 'many',
|
|
1709
|
+
right: p.from,
|
|
1710
|
+
as: p.as,
|
|
1711
|
+
lField: p.localField,
|
|
1712
|
+
rField: p.foreignField,
|
|
1713
|
+
left: l(emptyDelta()),
|
|
1714
|
+
middle: p.middle,
|
|
1715
|
+
}, null);
|
|
1691
1716
|
|
|
1692
1717
|
const $setCore = (updater) => ({
|
|
1693
1718
|
delta: $setDelta(updater),
|
|
1694
1719
|
raw: $set1(updater),
|
|
1695
1720
|
lin: $set_(updater),
|
|
1696
1721
|
});
|
|
1697
|
-
const $set = () => (fields) =>
|
|
1698
|
-
return $setCore(set()(fields));
|
|
1699
|
-
};
|
|
1722
|
+
const $set = () => (fields) => $setCore(setQ()(fields));
|
|
1700
1723
|
const $replaceWith = (expr) => ({
|
|
1701
1724
|
delta: $replaceWithDelta(expr),
|
|
1702
1725
|
raw: $replaceWith1(expr),
|