@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.
Files changed (4) hide show
  1. package/index.d.ts +27 -19
  2. package/index.esm.js +49 -26
  3. package/index.js +49 -26
  4. 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>>> = MapOPart<T, F> & {
210
- readonly [P: string]: readonly [StrKey<T>, unknown];
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<StrKey<T>>, K extends keyof T = StrKey<T>> = {
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
- localField: Field<LQ, S>;
446
- toMany?: never;
445
+ to: 'one';
446
+ localField: Field<LQ, string>;
447
+ foreignField?: never;
448
+ middle?: never;
447
449
  } | {
448
- localField: Field<LQ, Arr<S>>;
449
- toMany: true;
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 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>>;
452
- 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>>;
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 HKT<StrKey<V>> {
466
- readonly out: Updater<R, Get<Old, I<StrKey<V>, this>, K>, V2[I<StrKey<V>, this>], C>;
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
- declare const $set: <V extends O>() => <R extends O, C = unknown>(fields: MapO<V, UpdaterHKT<R, R, V, C>>) => DeltaStages<O, R, Replace<R, V>, C> & LinStages<O, R, Replace<R, V>, C>;
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: f => {
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 = ({ lField, rField, left, right, as, toMany }, leftSnapshot, rightSnapshot, stagesUntilNextLookup, outerLeft, middle = '.') => {
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 = rField.str() === '_id' && toMany !== true
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) => $lookup1({
1674
- right: p.from,
1675
- as: p.as,
1676
- lField: p.localField,
1677
- rField: p.foreignField,
1678
- left: l(emptyDelta()),
1679
- toMany: p.toMany,
1680
- });
1681
- const $outerLookup = (p) => (l) => $lookup1({
1682
- right: p.from,
1683
- as: p.as,
1684
- lField: p.localField,
1685
- rField: p.foreignField,
1686
- left: l(emptyDelta()),
1687
- toMany: p.toMany,
1688
- }, null);
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: f => {
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 = ({ lField, rField, left, right, as, toMany }, leftSnapshot, rightSnapshot, stagesUntilNextLookup, outerLeft, middle = '.') => {
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 = rField.str() === '_id' && toMany !== true
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) => $lookup1({
1676
- right: p.from,
1677
- as: p.as,
1678
- lField: p.localField,
1679
- rField: p.foreignField,
1680
- left: l(emptyDelta()),
1681
- toMany: p.toMany,
1682
- });
1683
- const $outerLookup = (p) => (l) => $lookup1({
1684
- right: p.from,
1685
- as: p.as,
1686
- lField: p.localField,
1687
- rField: p.foreignField,
1688
- left: l(emptyDelta()),
1689
- toMany: p.toMany,
1690
- }, null);
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),
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "module": "index.esm.js",
4
4
  "typings": "index.d.ts",
5
5
  "name": "@omegup/msync",
6
- "version": "0.1.46",
6
+ "version": "0.1.48",
7
7
  "dependencies": {
8
8
  "dayjs": "^1.11.9",
9
9
  "dotenv": "^16.3.1",