@omegup/msync 0.1.54 → 0.1.55

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 (93) hide show
  1. package/index.d.ts +5 -2
  2. package/index.esm.js +3 -1
  3. package/index.js +3 -1
  4. package/lib/accumulators/index.d.ts +28 -0
  5. package/lib/aggregate/$merge.d.ts +37 -0
  6. package/lib/aggregate/$upsert.d.ts +19 -0
  7. package/lib/aggregate/group/$group-merge.d.ts +18 -0
  8. package/lib/aggregate/group/index.d.ts +3 -0
  9. package/lib/aggregate/group/utils/sub-group.d.ts +6 -0
  10. package/lib/aggregate/group/utils/sub-merge.d.ts +20 -0
  11. package/lib/aggregate/index.d.ts +10 -0
  12. package/lib/aggregate/lookup/$lookup-delta.d.ts +11 -0
  13. package/lib/aggregate/lookup/$lookup-raw.d.ts +10 -0
  14. package/lib/aggregate/lookup/index.d.ts +20 -0
  15. package/lib/aggregate/match/$match-delta.d.ts +4 -0
  16. package/lib/aggregate/match/$match.d.ts +3 -0
  17. package/lib/aggregate/match/index.d.ts +2 -0
  18. package/lib/aggregate/mongo-stages.d.ts +13 -0
  19. package/lib/aggregate/out.d.ts +37 -0
  20. package/lib/aggregate/prefix.d.ts +33 -0
  21. package/lib/aggregate/raws.d.ts +17 -0
  22. package/lib/aggregate/set/$replace-with-each.d.ts +13 -0
  23. package/lib/aggregate/set/$set-delta.d.ts +5 -0
  24. package/lib/aggregate/set/$set.d.ts +9 -0
  25. package/lib/aggregate/set/index.d.ts +1 -0
  26. package/lib/aggregate/unwind/$unwind-delta.d.ts +7 -0
  27. package/lib/aggregate/unwind/index.d.ts +6 -0
  28. package/lib/boot/boot-simpl.d.ts +14 -0
  29. package/lib/boot/boot-utils.d.ts +27 -0
  30. package/lib/boot/boot.d.ts +16 -0
  31. package/lib/boot/first-stages.d.ts +13 -0
  32. package/lib/boot/index.d.ts +3 -0
  33. package/lib/boot/single.d.ts +11 -0
  34. package/lib/expression/arith.d.ts +33 -0
  35. package/lib/expression/array.d.ts +30 -0
  36. package/lib/expression/concat.d.ts +35 -0
  37. package/lib/expression/date.d.ts +22 -0
  38. package/lib/expression/expr-base.d.ts +5 -0
  39. package/lib/expression/index.d.ts +7 -0
  40. package/lib/expression/logic.d.ts +26 -0
  41. package/lib/expression/range.d.ts +11 -0
  42. package/lib/expression/val.d.ts +18 -0
  43. package/lib/field/field.d.ts +25 -0
  44. package/lib/field/index.d.ts +1 -0
  45. package/lib/machine.d.ts +9 -0
  46. package/lib/predicate/$eq.d.ts +24 -0
  47. package/lib/predicate/$expr.d.ts +3 -0
  48. package/lib/predicate/$in.d.ts +2 -0
  49. package/lib/predicate/index.d.ts +3 -0
  50. package/lib/predicate/utils.d.ts +5 -0
  51. package/lib/query/index.d.ts +1 -0
  52. package/lib/query/logic.d.ts +11 -0
  53. package/lib/stream/aggregate.d.ts +7 -0
  54. package/lib/types/accumulator.d.ts +32 -0
  55. package/lib/types/aggregate.d.ts +9 -0
  56. package/lib/types/expr.d.ts +27 -0
  57. package/lib/types/extern.d.ts +4 -0
  58. package/lib/types/index.d.ts +8 -0
  59. package/lib/types/lookup.d.ts +19 -0
  60. package/lib/types/machine.d.ts +17 -0
  61. package/lib/types/predicate.d.ts +11 -0
  62. package/lib/types/query.d.ts +12 -0
  63. package/lib/types/stream.d.ts +82 -0
  64. package/lib/update/index.d.ts +1 -0
  65. package/lib/update/updater.d.ts +23 -0
  66. package/lib/utils/before.d.ts +3 -0
  67. package/lib/utils/coll.d.ts +5 -0
  68. package/lib/utils/db-indexes.d.ts +7 -0
  69. package/lib/utils/guard.d.ts +21 -0
  70. package/lib/utils/index.d.ts +5 -0
  71. package/lib/utils/json.d.ts +9 -0
  72. package/lib/utils/log.d.ts +1 -0
  73. package/lib/utils/map-object.d.ts +41 -0
  74. package/lib/utils/merge/combiners.d.ts +6 -0
  75. package/lib/utils/merge/index.d.ts +2 -0
  76. package/lib/utils/merge/merge.d.ts +10 -0
  77. package/lib/utils/merge/next-winner.d.ts +3 -0
  78. package/lib/utils/merge/types.d.ts +19 -0
  79. package/lib/utils/merge/utils.d.ts +4 -0
  80. package/lib/utils/tear-down.d.ts +2 -0
  81. package/lib/watch.d.ts +30 -0
  82. package/package.json +1 -1
  83. package/test/mongodb.d.ts +9 -0
  84. package/test/uri.d.ts +1 -0
  85. package/types/class.d.ts +1 -0
  86. package/types/extern.d.ts +5 -0
  87. package/types/global-aug.d.ts +48 -0
  88. package/types/global.d.ts +2 -0
  89. package/types/hkt.d.ts +56 -0
  90. package/types/index.d.ts +6 -0
  91. package/types/json.d.ts +54 -0
  92. package/types/mongo.d.ts +24 -0
  93. package/types/view.d.ts +35 -0
package/index.d.ts CHANGED
@@ -544,7 +544,7 @@ type Params<As extends string, LQ extends O, RQ extends O, RE extends RQ, S exte
544
544
  as: AsLiteral<As>;
545
545
  } & ({
546
546
  to: 'one';
547
- localField: Field<LQ, string>;
547
+ localField: Field<LQ, string | N>;
548
548
  foreignField?: never;
549
549
  middle?: never;
550
550
  } | {
@@ -771,7 +771,10 @@ declare const sub: <T, D, Ctx, P extends O>(a: Expr<T, D, Ctx>, f: Field<P, D, C
771
771
  declare const eqTyped: <T1 extends Dom, T2 extends Dom, F extends HKT<Dom>, C = unknown, Dom = unknown>(a: Expr<T1 | T2, App<F, T1 | T2>, C>, b: Expr<T1, App<F, T1 | T2>, C>) => BoolExpr<App<F, T1>, App<F, T2>, C>;
772
772
  declare const ne: <T, D, C>(a: Expr<T, D, C>) => <K>(b: Expr<K, D, C>) => Expr<boolean, D, C>;
773
773
  declare const notNull: <T, D, C>(a: Expr<T, D, C>) => Expr<boolean, D, C>;
774
- declare const $ifNull: <R, D, C>(...expr: [...Expr<R | null | undefined, D, C>[], Expr<R, D, C>]) => Expr<R, D, C>;
774
+ declare const $ifNull: {
775
+ <R, D, C = unknown>(...expr: [...Expr<R | null | undefined, D, C>[], Expr<R, D, C>]): Expr<R, D, C>;
776
+ <R, D, C = unknown>(...expr: [Expr<R, D, C>, ...Expr<R | null | undefined, D, C>[]]): Expr<R, D, C>;
777
+ };
775
778
  declare const exprMapVal: <K extends string, T extends Partial<Record<K, rawItem>>, D, C>(expr: Expr<K, D, C>, map: { readonly [P in K]: Expr<T[P], D, C>; }, or?: Expr<T[K], D, C>) => Expr<T[K & keyof T], D, C>;
776
779
  declare const mapVal: <K extends string, T extends Partial<Record<K, rawItem>>, D, C>(expr: Expr<K, D, C>, map: T, or: T[K & keyof T]) => Expr<T[K & keyof T], D, C>;
777
780
  declare const setField: <K extends string, T, V, D, C>({ field, input, value, }: {
package/index.esm.js CHANGED
@@ -942,7 +942,9 @@ const getWhenMatched = (whenNotMatched) => {
942
942
  return link().with($replaceWith_(ite(same, root().of('old').expr(), root().of('merged').expr()))).stages;
943
943
  };
944
944
  const $mergeX = (out, keys, f, map, ext, update) => {
945
- const patch = mapExact(keys, v => sub(v, f));
945
+ const patch = mapExact(keys, (v) => {
946
+ return $ifNull(sub(v, f), nil);
947
+ });
946
948
  const filter = mapExactToObject(ext, v => ({ $eq: v }));
947
949
  const setDeleted = out.whenNotMatched === 'discard';
948
950
  const replacer = map(field(omitPick().backward(spread(patch, {
package/index.js CHANGED
@@ -944,7 +944,9 @@ const getWhenMatched = (whenNotMatched) => {
944
944
  return link().with($replaceWith_(ite(same, root().of('old').expr(), root().of('merged').expr()))).stages;
945
945
  };
946
946
  const $mergeX = (out, keys, f, map, ext, update) => {
947
- const patch = mapExact(keys, v => sub(v, f));
947
+ const patch = mapExact(keys, (v) => {
948
+ return $ifNull(sub(v, f), nil);
949
+ });
948
950
  const filter = mapExactToObject(ext, v => ({ $eq: v }));
949
951
  const setDeleted = out.whenNotMatched === 'discard';
950
952
  const replacer = map(field(omitPick().backward(spread(patch, {
@@ -0,0 +1,28 @@
1
+ import type { AppMap, N, O, PRRec } from '../../types';
2
+ import type { ExprHKT } from '../expression/concat';
3
+ import { type AddO } from '../expression/val';
4
+ import type { DeltaAccumulator, Expr, Part } from '../types';
5
+ type AddOs<A extends readonly unknown[]> = {
6
+ [K in keyof A]: AddO<A[K]>;
7
+ };
8
+ type PushSides<V> = {
9
+ 0: V[];
10
+ 1: V[];
11
+ };
12
+ type PushDict<V> = PRRec<string, PushSides<V>>;
13
+ export declare const $sum: <D extends O, C = unknown>(expr: Expr<number | N, D, C>) => DeltaAccumulator<D, number, C>;
14
+ export declare const $accumulator: <D, T, Ctx, A extends readonly unknown[]>(init: () => T, accumulateArgs: AppMap<ExprHKT<Part<D>, Ctx>, AddOs<A>>, accumulate: (a: T, ...args: A) => T, merge: (...args: [T | N, T]) => T) => DeltaAccumulator<D, AddO<T>, Ctx>;
15
+ export declare const $countDict: <D extends O, K extends string = string, C = unknown>(expr: Expr<AddO<K>, D, C>) => DeltaAccumulator<D, AddO<PRRec<K, number>>, C>;
16
+ export declare const $countDictArray: <D extends O, K extends string = string, C = unknown>(expr: Expr<AddO<K[]>, D, C>) => DeltaAccumulator<D, AddO<PRRec<K, number>>, C>;
17
+ export declare const $pushDict: <D extends O, V, C = unknown>(key: Expr<string, D, C>, value: Expr<AddO<V>, D, C>) => DeltaAccumulator<D, O<{
18
+ [x: string]: O<{
19
+ 0: import("../..").Arr<AddO<V>>;
20
+ 1: import("../..").Arr<AddO<V>>;
21
+ }> | undefined;
22
+ }>, C>;
23
+ export declare const $keys: <D extends O, K extends string = string, C = unknown>(expr: Expr<AddO<PRRec<K, number>>, D, C>) => Expr<AddO<K[]>, D, C>;
24
+ export declare const $entries: <D extends O, V, C = unknown>(expr: Expr<AddO<PushDict<V>>, D, C>) => Expr<AddO<{
25
+ k: string;
26
+ v: V;
27
+ }[]>, D, C>;
28
+ export {};
@@ -0,0 +1,37 @@
1
+ import type { IdHKT, OPick, RWCollection, Timestamp } from '../../types';
2
+ import type { doc, ID, N, O, rawItem, Rec, Replace, RORec, StrKey } from '../../types/json';
3
+ import { type ExprsExact } from '../expression/concat';
4
+ import type { Delta, Expr, IsDeleted, Model, RawStages, StreamRunnerParam, TS } from '../types';
5
+ import { type Exact } from '../utils/map-object';
6
+ type OutInputE<T, E, A = T | null> = ID & Rec<'after', A> & E;
7
+ type Allowed<K extends string> = Exclude<K, keyof (TS & ID)>;
8
+ export type Patch<V, KK extends StrKey<V> = StrKey<V>> = ((OPick<V, Allowed<KK>> & ID) | (Rec<Allowed<KK>, N> & ID)) & TS;
9
+ type TakeDoc<V, E = ID, KK extends StrKey<V> = StrKey<V>> = OPick<V, Allowed<KK>> & E;
10
+ type ND = {
11
+ readonly deletedAt?: null;
12
+ };
13
+ type SafeE<E> = Omit<E, `$${string}` | keyof ID>;
14
+ type Args<P, Out> = [added: Expr<P, unknown, {
15
+ new: P;
16
+ }>, old: Expr<Out, Out>];
17
+ type Result<P> = Expr<P, unknown, {
18
+ new: P;
19
+ }>;
20
+ type Update<P, Out> = (...args: Args<P, Out>) => Result<P>;
21
+ type UpdateF<P, Out> = <K extends keyof IsDeleted>(...args: Args<Replace<P, RORec<K, Timestamp>>, Out>) => Result<Replace<P, RORec<K, Timestamp>>>;
22
+ export declare const getWhenMatchedForMerge: <Out extends Model, P extends Model, K extends keyof IsDeleted>(whenNotMatched: "discard" | "fail" | "insert", update: Update<Replace<P, RORec<K, Timestamp>>, Out>) => RawStages<O, Out, Out | Replace<Out, P>, RORec<"new", Replace<P, RORec<K, Timestamp>>>>;
23
+ export declare const getWhenMatched: <Out extends Model, P extends Model, K extends keyof IsDeleted>(whenNotMatched: "discard" | "fail" | "insert") => RawStages<O, Rec<"old" | "merged", Out | Replace<Out, P>>, Out | Replace<Out, P>>;
24
+ type MergeCollection<V extends O, Out extends Model> = {
25
+ coll: RWCollection<Out | Replace<Out, Patch<V>> | Replace<Patch<V>, IsDeleted>, Out>;
26
+ whenNotMatched: 'discard';
27
+ } | {
28
+ coll: RWCollection<Out | Replace<Out, Patch<V>>, Out>;
29
+ whenNotMatched: 'fail';
30
+ };
31
+ type MergeUpdate<V, Out> = UpdateF<((OPick<V, Allowed<StrKey<V>>> & ID) | (Rec<Allowed<StrKey<V>>, N> & ID)) & TS, Out>;
32
+ export declare const $mergeId: <V extends O>() => <SourcePart extends doc, Out extends Model, E = unknown, EEE extends RORec<string, rawItem> = {}>(out: MergeCollection<V, Out>, keys: ExprsExact<TakeDoc<V, unknown>, SourcePart>, id: Expr<string, OutInputE<TakeDoc<V>, E, null>>, ext: Exact<Omit<SafeE<EEE>, keyof (ND & TS)>, IdHKT>, update?: MergeUpdate<V, Out>) => StreamRunnerParam<OutInputE<SourcePart, E>, "out">;
33
+ export declare const $simpleMergePart: <V extends O>() => <Source extends doc, Out extends Model, EEE extends RORec<string, rawItem>>(out: MergeCollection<V, Out>, keys: ExprsExact<TakeDoc<V, unknown>, Source>, ext: Exact<Omit<SafeE<EEE>, keyof (ND & TS)>, IdHKT>, update?: MergeUpdate<V, Out>) => StreamRunnerParam<Source, "out">;
34
+ export declare const $simpleMerge: <V extends O>() => <Source extends doc, Out extends Model>(out: RWCollection<Out | Replace<Out, Patch<V>> | Replace<Patch<V>, IsDeleted>, Out>, keys: ExprsExact<TakeDoc<V, unknown>, Source>, whenNotMatched?: "fail" | "discard", update?: MergeUpdate<V, Out>) => StreamRunnerParam<Source, "out">;
35
+ export declare const $mergePart: <V extends O>() => <Out extends Model, SourcePart extends doc, EEE extends RORec<string, rawItem>>(out: RWCollection<Out | Replace<Out, Patch<V>>, Out>, keys: ExprsExact<TakeDoc<V, unknown>, SourcePart>, ext: Exact<Omit<SafeE<EEE>, keyof (ND & TS)>, IdHKT>, update?: MergeUpdate<V, Out>) => StreamRunnerParam<Delta<SourcePart>, "out">;
36
+ export declare const $merge: <V extends O>() => <Out extends Model, SourcePart extends doc>(out: RWCollection<Out | Replace<Out, Patch<V>>, Out>, keys: ExprsExact<TakeDoc<V, unknown>, SourcePart>, update?: MergeUpdate<V, Out>) => StreamRunnerParam<Delta<SourcePart>, "out">;
37
+ export {};
@@ -0,0 +1,19 @@
1
+ import type { IdHKT, Replace, RWCollection } from '../../types';
2
+ import type { ID, O, RORec, doc, rawItem } from '../../types/json';
3
+ import { type ExprsExact } from '../expression/concat';
4
+ import type { Del, Delta, Expr, StreamRunnerParam, TS } from '../types';
5
+ import { type Exact } from '../utils/map-object';
6
+ type ND = {
7
+ readonly deletedAt?: null;
8
+ };
9
+ type SafeE<E> = Omit<E, `$${string}` | keyof ID>;
10
+ export type Merge<T extends doc, E> = Omit<SafeE<E>, keyof (ND & TS)> & ((T & ND & TS) | Del);
11
+ type ExprP<P> = Expr<P, unknown, {
12
+ new: P;
13
+ }>;
14
+ type Update<P, Out> = (added: ExprP<P>, old: Expr<Out, Out>) => ExprP<P>;
15
+ export declare const $insertX: <T extends doc, D extends O, EEE extends RORec<string, rawItem>>(out: RWCollection<Merge<T, EEE>>, expr: Expr<T, D>, map: (x: Expr<T & ND & TS & Omit<SafeE<EEE>, keyof (ND & TS)>, D>) => Expr<Merge<T, EEE>, D>, ext: Exact<Omit<SafeE<EEE>, keyof (ND & TS)>, IdHKT>, extExpr: ExprsExact<Omit<SafeE<EEE>, keyof (ND & TS)>, unknown>, update?: Update<Replace<Merge<T, EEE>, {}>, Merge<T, EEE>>) => StreamRunnerParam<D, "out">;
16
+ export declare const $simpleInsert: <T extends doc>(out: RWCollection<Merge<T, {}>>) => StreamRunnerParam<T, "out">;
17
+ export declare const $insertPart: <T extends doc, EEE extends RORec<string, rawItem>>(out: RWCollection<Merge<T, EEE>>, ext: Exact<Omit<SafeE<EEE>, keyof (ND & TS)>, IdHKT>) => StreamRunnerParam<Delta<T>, "out">;
18
+ export declare const $insert: <T extends doc>(out: RWCollection<Merge<T, {}>>) => StreamRunnerParam<Delta<T>, "out">;
19
+ export {};
@@ -0,0 +1,18 @@
1
+ import type { RWCollection, WriteonlyCollection } from '../../../types';
2
+ import type { AsLiteral, ID, O, Rec, doc, notArr } from '../../../types/json';
3
+ import { type ExprsExact } from '../../expression/concat';
4
+ import type { Delta, DeltaAccumulators, Expr, StreamRunnerParam, TS } from '../../types';
5
+ import type { MergeInto } from '../out';
6
+ import { type Extra, type IdAndTsKeys, type Loose, type MergedInput, type Strict, type V_Grp } from './utils/sub-merge';
7
+ type Denied<GID = never> = keyof (TS & ID) | GID;
8
+ type GI<GG> = Exclude<GG, keyof TS>;
9
+ export type GroupMergeOut<Grp extends notArr, V extends O, GG extends string, EE = {}, Out extends Loose<Grp, V, GG> = Loose<Grp, V, GG>> = MergeInto<Strict<Grp, V, GG, EE>, Out, WriteonlyCollection<MergedInput<Out, V, Grp, GG, EE>>>;
10
+ export type GroupMergeCollection<WhenNotMatched extends MergeInto<never, never>['whenNotMatched'], Grp extends notArr, V extends O, GG extends string, EE = {}, Out extends Loose<Grp, V, GG> = Loose<Grp, V, GG>> = (GroupMergeOut<Grp, V, GG, EE, Out> & {
11
+ whenNotMatched: WhenNotMatched;
12
+ })['into'];
13
+ export declare const $groupMerge: <T extends O, Grp extends notArr, V extends O, GG extends string, EE = {}, Out extends Loose<Grp, V, GG> = Loose<Grp, V, GG>>(id: Expr<Grp, T>, args: DeltaAccumulators<T, O & Omit<V, Denied<GI<GG>>>>, out: GroupMergeOut<Grp, V, GG, EE, Out>, gid: AsLiteral<GI<GG>>, extra: ExprsExact<Extra<EE, V, GG>, V_Grp<V, GG, Grp>>, idPrefix?: string) => StreamRunnerParam<Delta<T>, "out">;
14
+ export type GroupIdCollection<V extends O, EE = {}, Out extends Loose<string, V, '_id'> = Loose<string, V, '_id'>> = RWCollection<MergedInput<Out, V, string, '_id', EE>, Out>;
15
+ export declare const $groupId: <T extends O, V extends O, EE = {}, Out extends Loose<string, V, "_id"> = Loose<string, V, "_id">>(id: Expr<string, T>, args: DeltaAccumulators<T, O & Omit<V, Denied>>, out: GroupIdCollection<V, EE, Out>, extra: ExprsExact<Omit<EE, IdAndTsKeys | keyof Omit<V, IdAndTsKeys>>, doc & Omit<V, IdAndTsKeys>>) => StreamRunnerParam<Delta<T>, "out">;
16
+ export type GroupCollection<Grp extends notArr, V extends O, EE = {}, Out extends Loose<Grp, V, '_grp'> = Loose<Grp, V, '_grp'>> = RWCollection<MergedInput<Out, V, Grp, '_grp', EE> | Strict<Grp, V, '_grp', EE>, Out>;
17
+ export 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: GroupCollection<Grp, V, 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">;
18
+ export {};
@@ -0,0 +1,3 @@
1
+ export { $groupMerge, $groupId, $group } from './$group-merge';
2
+ export type { GroupCollection, GroupIdCollection, GroupMergeCollection } from './$group-merge';
3
+ export type { Loose, Strict, MergedInput } from './utils/sub-merge';
@@ -0,0 +1,6 @@
1
+ import type { O, RORec, Rec } from '../../../../types';
2
+ import { type ExprsExact } from '../../../expression/concat';
3
+ import type { Delta, Expr, RawStages } from '../../../types';
4
+ import type { DeltaAccumulators } from '../../../types/accumulator';
5
+ export type WithItem<V, Grp> = Rec<'_id', Grp> & Rec<'item', O<V>>;
6
+ export declare const subGroup: <T extends O, Grp, V extends O, GID extends string>(id: Expr<Grp, T>, args: DeltaAccumulators<T, V>, addGrp: <D extends Rec<"_id", Grp>>(src: ExprsExact<V, D>) => ExprsExact<RORec<GID, Grp> & V, D>) => RawStages<unknown, Delta<T>, Rec<GID, Grp> & V>;
@@ -0,0 +1,20 @@
1
+ import type { AsLiteral, ID, O, Rec, Replace, WriteonlyCollection, notArr } from '../../../../types';
2
+ import { type ExprsExact } from '../../../expression/concat';
3
+ import type { Model, RawStages, TS } from '../../../types';
4
+ import type { DeltaAccumulators } from '../../../types/accumulator';
5
+ import { type MergeInto } from '../../out';
6
+ type GI<GG> = Exclude<GG, keyof TS>;
7
+ export type IdAndTsKeys = keyof (TS & ID);
8
+ type V<VV, GG extends string> = Omit<VV, IdAndTsKeys | GI<GG>>;
9
+ export type Prepare<Grp, GG extends string> = TS & ID & Rec<GI<GG>, Grp>;
10
+ type Par<T> = {
11
+ [P in keyof T]?: T[P] | null;
12
+ };
13
+ export type Loose<Grp, VV, GG extends string> = Prepare<Grp, GG> & Par<V<VV, GG>>;
14
+ export type Strict<Grp, VV, GG extends string, EE> = Prepare<Grp, GG> & V<VV, GG> & Omit<EE, IdAndTsKeys | GI<GG> | keyof V<VV, GG>>;
15
+ export type V_Grp<VV, GG extends string, Grp> = Rec<GI<GG>, Grp> & V<VV, GG>;
16
+ export type Extra<EE, VV, GG extends string> = Omit<EE, IdAndTsKeys | GI<GG> | keyof V<VV, GG>>;
17
+ type OrReplace<T, V> = T | Replace<T, V>;
18
+ export 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>>;
19
+ export declare const subMerge: <T extends O, Grp extends notArr, VV extends O, GG extends string, EE = {}, Out extends Loose<Grp, VV, GG> = Loose<Grp, VV, GG>>(args: DeltaAccumulators<T, V<VV, GG>>, out: MergeInto<Strict<Grp, VV, GG, EE>, Out, WriteonlyCollection<MergedInput<Out, VV, Grp, GG, EE>>>, gid: AsLiteral<GI<GG>>, extra: ExprsExact<Extra<EE, VV, GG>, V_Grp<VV, GG, Grp>>, idPrefix: string, first: boolean) => RawStages<unknown, V_Grp<VV, GG, Grp>, "out">;
20
+ export {};
@@ -0,0 +1,10 @@
1
+ export { emptyDelta } from './prefix';
2
+ export * from './group';
3
+ export * from './lookup';
4
+ export * from './match';
5
+ export * from './set';
6
+ export * from './unwind';
7
+ export * from './$merge';
8
+ export * from './$upsert';
9
+ export * from './out';
10
+ export { $group_ } from './mongo-stages';
@@ -0,0 +1,11 @@
1
+ import type { Arr, AsLiteral, ID, N, O, Rec, doc, rawItem } from '../../../types';
2
+ import { Field } from '../../field';
3
+ import type { BA, Before, Delta, RawStages, TStages, UBefore } from '../../types';
4
+ import { type JoinId } from '../unwind';
5
+ type s = string;
6
+ type Both<K1 extends s, LE, KK2 extends s, RE, N1 extends null = never, N2 extends null = never> = Delta<Rec<K1, LE | N1> & Rec<Exclude<KK2, BA | K1>, RE | N2> & ID>;
7
+ export declare const $lookupDelta: <LQ extends O, LE extends LQ & doc, RQ extends O, RE extends RQ & doc, BRB extends UBefore<RQ>, RS extends UBefore<RQ>, S extends rawItem, K1 extends s, KK2 extends s, N1 extends null = never, N2 extends null = never>({ field1, field2 }: {
8
+ field1: Field<LQ, S | N | Arr<S>>;
9
+ field2: Field<RQ, S | N | Arr<S>>;
10
+ }, { coll, exec, input }: TStages<RS, UBefore<RQ>, BRB, Before<RE>>, k1: AsLiteral<K1>, k2: AsLiteral<Exclude<KK2, BA | K1>>, k: JoinId<K1, Exclude<KK2, BA | K1>>, includeNull1?: N1, includeNull2?: N2) => RawStages<unknown, Delta<LE>, Both<K1, LE, KK2, RE, N1, N2>>;
11
+ export {};
@@ -0,0 +1,10 @@
1
+ import type { App, Arr, AsLiteral, HKT, ID, O, Rec, rawItem } from '../../../types';
2
+ import { type Field } from '../../field';
3
+ import type { Before, RawStages, TStages, UBefore } from '../../types';
4
+ import { type JoinId } from '../unwind';
5
+ type s = string;
6
+ export declare const $lookupRaw: <LQ extends O, LE extends LQ & ID, RQ extends O, RE extends RQ & ID, BRB extends Before<RQ>, RS extends UBefore<RQ>, S extends rawItem, As extends s, Null extends null = never>({ field1, field2 }: {
7
+ field1: Field<LQ, S | Arr<S>>;
8
+ field2: Field<RQ, S | Arr<S>>;
9
+ }, { coll, exec, input }: TStages<RS, Before<RQ>, BRB, Before<RE>>, k2: AsLiteral<As>, k: JoinId<"left", "right">, includeNull?: Null) => <F extends HKT<O, O>>(f: <T extends O>() => Field<App<F, T>, T>) => RawStages<App<F, LQ>, App<F, LE>, App<F, LE & Rec<As, RE | Null> & ID>>;
10
+ export {};
@@ -0,0 +1,20 @@
1
+ import { type AsLiteral, type O, type RORec, type doc, type notArr, type Arr, type N } from '../../../types';
2
+ import { type Field } from '../../field';
3
+ import type { SnapshotStream, SnapshotStreamExecutionResult } from '../../types/stream';
4
+ type Params<As extends string, LQ extends O, RQ extends O, RE extends RQ, S extends notArr> = {
5
+ from: SnapshotStreamExecutionResult<RQ, RE>;
6
+ as: AsLiteral<As>;
7
+ } & ({
8
+ to: 'one';
9
+ localField: Field<LQ, string | N>;
10
+ foreignField?: never;
11
+ middle?: never;
12
+ } | {
13
+ to: 'many';
14
+ middle: string;
15
+ localField: Field<LQ, S | Arr<S>>;
16
+ foreignField: Field<RQ, S | Arr<S>>;
17
+ });
18
+ export 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>>;
19
+ export 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>>;
20
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { doc } from '../../../types';
2
+ import type { Delta, Expr, RawStages } from '../../types';
3
+ export declare const $matchDelta: <T extends doc>(query: Expr<boolean, T>) => RawStages<unknown, Delta<T>, Delta<T>, unknown, number>;
4
+ export declare const matchDelta: <D>() => RawStages<unknown, Delta<D | null>, Delta<D>>;
@@ -0,0 +1,3 @@
1
+ import type { doc } from '../../../types';
2
+ import type { DeltaStages, Expr } from '../../types';
3
+ export declare const $match: <T extends doc>(query: Expr<boolean, T>) => DeltaStages<T, T, T>;
@@ -0,0 +1,2 @@
1
+ export { $matchDelta, matchDelta } from './$match-delta';
2
+ export { $match } from './$match';
@@ -0,0 +1,13 @@
1
+ import type { Arr, O, Rec } from '../../types';
2
+ import type { Accumulators, Expr, LookupArgs, Query, RawStages } from '../types';
3
+ import type { Updater } from '../update/updater';
4
+ export * from './raws';
5
+ type s = string;
6
+ export declare const $match_: <T extends O, C = unknown>(query?: Query<T, C>) => RawStages<O<T>, T, T, C>;
7
+ export declare const $set_: <Q, T extends Q & O, V extends Q & O, C = unknown>(updater: Updater<T, T, V, C>) => RawStages<O<Q>, T, V, C, 1>;
8
+ export declare const $replaceWith_: <T extends O, V extends O, C = unknown>(expr: Expr<V, T, C>) => RawStages<O, T, V, C, 1>;
9
+ export declare const $unwind_: <T extends O, K extends s, U, Null extends null = never>(k: K, includeNull?: Null) => RawStages<O<T>, T & Rec<K, Arr<U>>, T & Rec<K, Null | U>>;
10
+ export declare const $group_: <V extends O>() => <ID, T extends O, C = unknown>(id: Expr<ID, T, C>, args: Accumulators<T, V, C>) => RawStages<O, T, Rec<"_id", ID> & V, C, 1>;
11
+ export declare const $documents_: <T extends O, C>(docs: Expr<Arr<T>, unknown, C>) => RawStages<unknown, null, T, C, 1>;
12
+ export declare const $project_: <T extends O, K extends import("../..").StrKey<T>>(projection: import("../utils").ExactKeys<K>) => RawStages<T, T, T, unknown, 1>;
13
+ export declare const $simpleLookup_: <T extends O, U extends O, R, K extends s, Ctx, C = unknown, S = string>(args: LookupArgs<T, U, R, K, Ctx, C, S>) => RawStages<O<T>, T, T & Rec<K, Arr<U>>, C, 1>;
@@ -0,0 +1,37 @@
1
+ import type { O, RWCollection, ReadonlyCollection, Replace, jsonItem } from '../../types';
2
+ import type { ExprsExact } from '../expression/concat';
3
+ import { type Field } from '../field';
4
+ import type { RawStages } from '../types';
5
+ export type MergeInto<T extends O, Out extends O, E = unknown> = {
6
+ whenNotMatched: 'insert';
7
+ into: RWCollection<T, Out> & E;
8
+ } | {
9
+ whenNotMatched: 'discard' | 'fail';
10
+ into: ReadonlyCollection<Out> & E;
11
+ };
12
+ export type MergeArgs<T extends O, Out extends O, Ctx, In extends O> = {
13
+ on: Field<T, jsonItem> & Field<Out, jsonItem>;
14
+ } & MergeInto<T, Out> & (({
15
+ stages?: never;
16
+ } & ({
17
+ whenMatched: 'keepExisting' | 'fail';
18
+ } | {
19
+ whenMatched: 'replace';
20
+ into: RWCollection<T, Out>;
21
+ } | {
22
+ whenMatched: 'merge';
23
+ into: RWCollection<Replace<Out, T>, Out>;
24
+ })) | {
25
+ stages: true;
26
+ into: RWCollection<In, Out>;
27
+ whenMatched: RawStages<unknown, Out, In, {
28
+ new: T;
29
+ }>;
30
+ } | {
31
+ stages: 'ctx';
32
+ vars: ExprsExact<Ctx, T>;
33
+ into: RWCollection<In, Out>;
34
+ whenMatched: RawStages<unknown, Out, In, Ctx>;
35
+ });
36
+ export declare const $merge_: <T extends O, Out extends O = T, Ctx = unknown, In extends O = Out>({ into, on, whenNotMatched, ...notMatched }: MergeArgs<T, Out, Ctx, In>) => RawStages<unknown, T, "out", unknown, number>;
37
+ export declare const $merge2: <T extends O, Out extends O = T, Ctx = unknown, In extends O = Out>(args: MergeArgs<T, Out, Ctx, In>) => RawStages<unknown, T, "out", unknown, number>;
@@ -0,0 +1,33 @@
1
+ import type { App, HKT, O2, O3, O, RawObj } from '../../types';
2
+ import type { Delta, DeltaStages, FRawStages, RawStages, Stream, TStages } from '../types';
3
+ import type { Equal } from '../utils/guard';
4
+ type n = number;
5
+ export declare const asStages: <Q, T extends Q, V extends Q, C = unknown, M extends n = number>(x: readonly RawObj[]) => RawStages<Q, T, V, C, M>;
6
+ export declare const same: <T extends Dom, V extends Dom, F extends HKT<Dom, Q>, Dom = unknown, Q = unknown, C = unknown, M extends n = number>(_: Equal<Dom, T, V>) => RawStages<Q, App<F, T>, App<F, V>, C, M>;
7
+ export declare const concatStages: <Q, T extends Q, V extends Q, W extends Q, C, M extends n = number>(part1: RawStages<Q, T, V, C, M>, part2: RawStages<Q, V, W, C, M>) => RawStages<Q, T, W, C, M>;
8
+ export declare const concatFStages: <Q, T extends Q & O, V extends Q & O, W extends Q & O, C, M extends n = number>(part1: FRawStages<Q, T, V, C, M>, part2: FRawStages<Q, V, W, C, M>) => FRawStages<Q, T, W, C, M>;
9
+ export declare const concatDelta: <Q extends O, T extends Q, V extends Q, W extends Q>(part1: DeltaStages<Q, T, V>, part2: DeltaStages<Q, V, W>) => DeltaStages<Q, T, W>;
10
+ export type Concat<out Q, in T extends Q, out V extends Q, in out C, in out M extends n = n> = {
11
+ with: <Q2, W extends Q2>(extra: RawStages<Q | Q2, V, W, C, M>) => Concat<Q | Q2, T, W, C, M>;
12
+ stages: RawStages<Q, T, V, C, M>;
13
+ };
14
+ type FConcat<out Q, in T extends Q & O, out V extends Q & O, in out C, in out M extends n = n> = {
15
+ with: <Q2, W extends Q2 & O>(extra: FRawStages<Q | Q2, V, W, C, M>) => FConcat<Q | Q2, T, W, C, M>;
16
+ stages: FRawStages<Q, T, V, C, M>;
17
+ };
18
+ export type DeltaPipe<Q extends O, T extends Q, F extends HKT<O2>, G extends HKT<O3>> = {
19
+ with: <Q2 extends O, V extends Q2>(map: (a: Stream<Q, T, F, G>) => Stream<Q | Q2, V, F, G>) => DeltaPipe<Q | Q2, V, F, G>;
20
+ then: <Q2 extends O, V extends Q2>(next: App<G, [Q2 | T, T, V]>) => DeltaPipe<Q | Q2, V, F, G>;
21
+ get: () => App<F, [Q, T]>;
22
+ };
23
+ export declare const pipe: <Q extends O, S extends Q, T extends Q, F extends HKT<O2>, G extends HKT<O3>>(stream: Stream<Q, S, F, G>, s: App<G, [Q, S, T]>, concat: <Q_1 extends O, T_1 extends Q_1, V extends Q_1, W extends Q_1>(part1: App<G, [Q_1, T_1, V]>, part2: App<G, [Q_1, V, W]>) => App<G, [Q_1, T_1, W]>, empty: <T_2 extends Q>() => App<G, [Q, T_2, T_2]>) => DeltaPipe<Q, T, F, G>;
24
+ type Link = <T, C = unknown, M extends n = n>() => Concat<T, T, T, C, M>;
25
+ type FLink = <T extends O, C = unknown, M extends n = n>() => FConcat<T, T, T, C, M>;
26
+ export declare const link: Link;
27
+ export declare const flink: FLink;
28
+ export declare const emptyDelta: <T extends O>() => {
29
+ delta: RawStages<Delta<T>, Delta<T>, Delta<T>, unknown, number>;
30
+ raw: <F extends HKT<O>>() => RawStages<App<F, T>, App<F, T>, App<F, T>, unknown, number>;
31
+ };
32
+ export declare const concatTStages: <S, Q, B extends Q, T extends Q, V extends Q>({ coll, exec, input }: TStages<S, Q, B, T>, stages: RawStages<Q, T, V>) => TStages<S, Q, B, V>;
33
+ export {};
@@ -0,0 +1,17 @@
1
+ import type { App, Arr, ConstHKT, HKT, O, Rec, StrKey, rawItem } from '../../types';
2
+ import type { ExprsExact } from '../expression/concat';
3
+ import { type Field } from '../field';
4
+ import type { Accumulators, Expr, FRawStages, LookupArgs, Query, RawStages } from '../types';
5
+ import type { Updater } from '../update/updater';
6
+ import { type ExactKeys } from '../utils/map-object';
7
+ type s = string;
8
+ export declare const $match1: <T extends O, C = unknown>(query?: Query<T, C>) => FRawStages<T, T, T, C>;
9
+ export declare const $set1: <Q, T extends Q & O, V extends Q & O, C = unknown>(updater: Updater<T, T, V, C>) => FRawStages<Q, T, V, C, 1>;
10
+ export declare const $project1: <T extends O, K extends StrKey<T>>(projection: ExactKeys<K>) => RawStages<T, T, T, unknown, 1>;
11
+ export declare const $replaceWith1: <T extends O, V extends O, C = unknown>(expr: Expr<V, T, C>) => FRawStages<O, T, V, C, 1>;
12
+ export declare const $unwind1: <T extends O, K extends s, R, Null extends null = never>(k: K, includeNull?: Null) => FRawStages<T, T & Rec<K, Arr<R>>, T & Rec<K, R | Null>>;
13
+ export declare const $group1: <T extends O, ID, V extends O, C>(id: Expr<ID, T, C>, args: Accumulators<T, V, C>) => <F extends HKT<O, O>>(f: <T_1 extends O>() => Field<App<F, T_1>, T_1>) => RawStages<O, App<F, T>, Rec<"_id", ID> & V, C, 1>;
14
+ export declare const $documents1: <Q extends O, T extends Q & O, C>(docs: Expr<Arr<T>, unknown, C>) => <F extends HKT<O, O>>(f: <T_1 extends O>() => Field<App<F, T_1>, T_1>) => RawStages<unknown, null, App<F, T>, C, 1>;
15
+ export declare const rawVars: <T, Ctx, C, V extends O>(vars: ExprsExact<Ctx, T, C>, f: Field<V, T, unknown>) => import("../utils").ExactPart1<Ctx, ConstHKT<rawItem, unknown>>;
16
+ export declare const $simpleLookup1: <T extends O, U extends O, R, K extends s, Ctx, C = unknown, S = string>(args: LookupArgs<T, U, R, K, Ctx, C, S>) => FRawStages<T, T, T & Rec<K, Arr<U>>, C, 1>;
17
+ export {};
@@ -0,0 +1,13 @@
1
+ import type { ConstHKT, HKT, I, N, O, RORec, Rec, jsonItem } from '../../../types';
2
+ import type { BA, Delta, Expr, FRawStages, RawStages } from '../../types';
3
+ import { type Updater } from '../../update/updater';
4
+ import { type MapK } from '../../utils/map-object';
5
+ export interface ParDeltaHKT<K extends BA, T extends jsonItem, E> extends HKT<jsonItem> {
6
+ readonly out: RORec<K, I<jsonItem, this>> & Delta<T> & E;
7
+ }
8
+ type Delta2<T extends jsonItem, BA2 extends string> = Delta<T> & Partial<RORec<BA2, T | null>>;
9
+ export declare const $setEach1: <T extends jsonItem, V extends jsonItem, BA2 extends string, E = unknown, C = unknown>(updater: (k: BA) => Updater<Delta<T> & Partial<RORec<BA2, T | null>> & E, T | N, V | null, C>, dict: MapK<BA2, ConstHKT<BA>>) => FRawStages<unknown, Delta2<T, BA2> & E, Rec<BA2, V | null> & Omit<Delta<T> & E, BA2>, C, 1>;
10
+ export declare const $setEach: <T extends O, V extends jsonItem, BA2 extends string, E = unknown, C = unknown>(updater: (k: BA) => Updater<Delta<T> & E, T | N, V | null, C>, dict: MapK<BA2, ConstHKT<BA>>) => RawStages<unknown, Delta<T> & E, Delta<T> & Rec<BA2, V | null> & Omit<E, BA2>, C, 1>;
11
+ export declare const $replaceWithEach1: <T extends O, V extends jsonItem, E = unknown>(t: <K extends BA>(field: K) => Expr<V | null, Delta<T> & E>) => RawStages<unknown, Delta<T> & E, Delta<V> & Omit<E, BA>>;
12
+ export declare const $replaceWithEach: <T extends O, V extends jsonItem, E = unknown>(expr: <K extends BA>(field: K) => Expr<V | null, Rec<K, T> & Delta<T> & E>) => RawStages<unknown, Delta<T> & E, Delta<V> & Omit<E, BA>>;
13
+ export {};
@@ -0,0 +1,5 @@
1
+ import type { O, jsonItem } from '../../../types';
2
+ import type { Delta, Expr, RawStages } from '../../types';
3
+ import { type Updater } from '../../update/updater';
4
+ export declare const $replaceWithDelta: <T extends O, V extends jsonItem>(expr: Expr<V, T>) => RawStages<unknown, Delta<T>, Delta<V>>;
5
+ export declare const $setDelta: <T extends O, V extends O, C = unknown>(updater: Updater<T, T, V, C>) => RawStages<unknown, Delta<T>, Delta<V>, C, number>;
@@ -0,0 +1,9 @@
1
+ import type { O, ReplaceQ, StrKey } from '../../../types';
2
+ import type { DeltaStages, Expr, LinStages } from '../../types';
3
+ import { type UpdaterQHKT } from '../../update/updater';
4
+ import type { MapO } from '../../utils/map-object';
5
+ type V<VV, Q> = Exclude<StrKey<VV>, StrKey<Q>>;
6
+ export 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>;
7
+ export declare const $set: <VV extends O, Q extends O = O>() => $Set<VV, Q>;
8
+ export declare const $replaceWith: <T extends O, V extends O>(expr: Expr<V, T>) => DeltaStages<O, T, V> & LinStages<O, T, V>;
9
+ export {};
@@ -0,0 +1 @@
1
+ export { $replaceWith, $set } from './$set';
@@ -0,0 +1,7 @@
1
+ import type { Arr, AsLiteral, doc, ID, Rec } from '../../../types';
2
+ import type { BA, Delta, Expr, RawStages } from '../../types';
3
+ type s = string;
4
+ export type JoinId<K1 extends s, K2 extends s> = K1 | K2 | readonly [K1, middle: s, K2] | readonly [K2, middle: s, K1];
5
+ export declare const joinIdOf: <K1 extends s, K2 extends s, D, C = unknown>(k: JoinId<K1, K2>, k1: K1, k1Id: Expr<s, D, C>, k2Id: Expr<s, D, C>) => Expr<s, D, C>;
6
+ export declare const $unwindDelta: <K1 extends s, T extends doc, KK2 extends s, U extends doc, N1 extends null = never, N2 extends null = never>(k1: AsLiteral<K1>, k2: AsLiteral<Exclude<KK2, K1 | BA>>, k: JoinId<K1, Exclude<KK2, K1 | BA>>, includeNull1?: N1, includeNull2?: N2) => RawStages<unknown, Delta<Rec<K1, T | N1> & Rec<Exclude<KK2, K1 | BA>, Arr<U>>>, Delta<Rec<K1, T | N1> & Rec<Exclude<KK2, K1 | BA>, U | N2> & ID>>;
7
+ export {};
@@ -0,0 +1,6 @@
1
+ import type { Arr, AsLiteral, doc, O, Rec, RORec } from '../../../types';
2
+ import type { DeltaStages } from '../../types';
3
+ export { $unwindDelta, joinIdOf, type JoinId } from './$unwind-delta';
4
+ type s = string;
5
+ type TOf<TT, K extends string> = doc & Omit<TT, K>;
6
+ export declare const $unwind: <TT extends O, K extends s, U extends doc>(k: AsLiteral<K>, dict: RORec<K, "key"> & RORec<"_id", "id">, middle?: string) => DeltaStages<O, TOf<TT, K> & Rec<K, Arr<U>>, TOf<TT, K> & Rec<K, U>>;
@@ -0,0 +1,14 @@
1
+ import type { O2, O3, OPickD, RORec, StrKey, View } from '../../types';
2
+ import type { HKT, I } from '../../types/hkt';
3
+ import type { RawStages } from '../types';
4
+ import type { Model, SimpleStreamExecutionResult } from '../types/stream';
5
+ type Allowed<K> = Exclude<K, 'deletedAt' | '_id'>;
6
+ type AllowedPick<V extends Model, K extends StrKey<V>> = OPickD<V, Allowed<K>>;
7
+ interface StreamRunnerHKT extends HKT<O2> {
8
+ readonly out: SimpleStreamExecutionResult<I<O2, this>[0], I<O2, this>[1]>;
9
+ }
10
+ interface StagesHKT extends HKT<O3> {
11
+ readonly out: RORec<'lin', RawStages<I<O3, this>[0], I<O3, this>[1], I<O3, this>[2], unknown, 1>>;
12
+ }
13
+ export declare const from: <V extends Model, KK extends StrKey<V>>(view: View<V, Allowed<KK>>, streamName: string, needs?: Partial<Record<KK, 0 | 1>>) => import("../aggregate/prefix").DeltaPipe<AllowedPick<V, KK>, AllowedPick<V, KK>, StreamRunnerHKT, StagesHKT>;
14
+ export {};
@@ -0,0 +1,27 @@
1
+ import { Collection, type Timestamp } from 'mongodb';
2
+ import type { BSON, OPickD, rawItem, RawObj, StrKey } from '../../types';
3
+ import type { Actions, Model } from '../types/stream';
4
+ export type AllowedPick<V extends Model, K extends StrKey<V>> = OPickD<V, Allowed<K>>;
5
+ export type Allowed<K> = Exclude<K, 'deletedAt' | '_id'>;
6
+ export type Teardown = {
7
+ collection: string;
8
+ method: string;
9
+ params: unknown[];
10
+ };
11
+ export type TsData = {
12
+ input: readonly RawObj[];
13
+ finalInput: readonly RawObj[];
14
+ finalInputFirst: readonly RawObj[];
15
+ project: rawItem;
16
+ match: rawItem;
17
+ teardown: Teardown;
18
+ };
19
+ export type Last = {
20
+ _id: string;
21
+ ts: Timestamp;
22
+ data?: TsData;
23
+ job?: 1 | null;
24
+ };
25
+ export declare const actions: {
26
+ [K in keyof Actions<unknown>]: <W extends BSON.Document>(col: Collection<W>, x: Actions<W>[K]) => [Promise<unknown>, unknown[]];
27
+ };
@@ -0,0 +1,16 @@
1
+ import type { O2, O3, StrKey, View } from '../../types';
2
+ import type { HKT, I } from '../../types/hkt';
3
+ import { type DeltaPipe } from '../aggregate/prefix';
4
+ import type { SnapshotStreamExecutionResult } from '../types';
5
+ import type { DeltaStages, Model } from '../types/stream';
6
+ import type { Allowed, AllowedPick } from './boot-utils';
7
+ export declare const streamNames: Record<string, string>;
8
+ export interface SnapshotStreamHKT extends HKT<O2> {
9
+ readonly out: SnapshotStreamExecutionResult<I<O2, this>[0], I<O2, this>[1]>;
10
+ }
11
+ export interface DeltaHKT extends HKT<O3> {
12
+ readonly out: DeltaStages<I<O3, this>[0], I<O3, this>[1], I<O3, this>[2]>;
13
+ }
14
+ export declare const staging: <V extends Model, KK extends StrKey<V>>(view: View<V, Allowed<KK>> & {
15
+ needs?: Partial<Record<KK, 0 | 1>>;
16
+ }, streamName: string, skip?: boolean, after?: () => Promise<void>) => DeltaPipe<AllowedPick<V, KK>, AllowedPick<V, KK>, SnapshotStreamHKT, DeltaHKT>;
@@ -0,0 +1,13 @@
1
+ import { Timestamp } from 'mongodb';
2
+ import type { O, StrKey, View } from '../../types';
3
+ import { type Concat } from '../aggregate/prefix';
4
+ import type { Query } from '../types';
5
+ import type { Del, Model } from '../types/stream';
6
+ import type { Allowed } from './boot-utils';
7
+ export declare const previous: (ts: Timestamp) => Timestamp;
8
+ export declare const getFirstStages: <V extends Model, KK extends StrKey<V>>(view: View<V, Allowed<KK>>, needs: Partial<Record<KK, 0 | 1>>) => {
9
+ firstStages: (lastTS: {
10
+ ts: Timestamp;
11
+ } | null, keepNulls?: boolean) => Concat<V | O | Del, Del | V, V, unknown>;
12
+ hardMatch: Query<V> | undefined;
13
+ };
@@ -0,0 +1,3 @@
1
+ export { staging } from './boot';
2
+ export { from } from './boot-simpl';
3
+ export { single } from './single';
@@ -0,0 +1,11 @@
1
+ import type { O2, StrKey, View } from '../../types';
2
+ import type { HKT, I } from '../../types/hkt';
3
+ import { type DeltaPipe } from '../aggregate/prefix';
4
+ import type { Model, RawStages, Stages } from '../types/stream';
5
+ import type { DeltaHKT } from './boot';
6
+ import type { Allowed, AllowedPick } from './boot-utils';
7
+ export type SingleResult<out Result> = <Result2>(finalInput: RawStages<unknown, Result, Result2>) => Stages<unknown, Result2, unknown>;
8
+ export interface SnapshotStreamHKT2 extends HKT<O2> {
9
+ readonly out: SingleResult<I<O2, this>[1]>;
10
+ }
11
+ export declare const single: <V extends Model, KK extends StrKey<V>>(view: View<V, Allowed<KK>>, needs?: Partial<Record<KK, 0 | 1>>) => DeltaPipe<AllowedPick<V, KK>, AllowedPick<V, KK>, SnapshotStreamHKT2, DeltaHKT>;
@@ -0,0 +1,33 @@
1
+ import type { N } from '../..';
2
+ import type { Expr } from '../types';
3
+ export declare const max: <D, C>(...expr: Expr<number, D, C>[]) => Expr<number, D, C>;
4
+ export declare const lt: {
5
+ <D, C>(...expr: [Expr<Date, D, C>, Expr<Date, D, C>]): Expr<boolean, D, C>;
6
+ <D, C>(...expr: [Expr<number, D, C>, Expr<number, D, C>]): Expr<boolean, D, C>;
7
+ };
8
+ export declare const gt: {
9
+ <D, C>(...expr: [Expr<Date, D, C>, Expr<Date, D, C>]): Expr<boolean, D, C>;
10
+ <D, C>(...expr: [Expr<number, D, C>, Expr<number, D, C>]): Expr<boolean, D, C>;
11
+ };
12
+ export declare const lte: {
13
+ <D, C>(...expr: [Expr<Date | N, D, C>, Expr<Date | N, D, C>]): Expr<boolean, D, C>;
14
+ <D, C>(...expr: [Expr<number | N, D, C>, Expr<number | N, D, C>]): Expr<boolean, D, C>;
15
+ };
16
+ export declare const gte: {
17
+ <D, C>(...expr: [Expr<Date | N, D, C>, Expr<Date | N, D, C>]): Expr<boolean, D, C>;
18
+ <D, C>(...expr: [Expr<number | N, D, C>, Expr<number | N, D, C>]): Expr<boolean, D, C>;
19
+ };
20
+ type Num = number | null | undefined;
21
+ export declare function subtract<D, C>(...expr: [Expr<number, D, C>, Expr<number, D, C>]): Expr<number, D, C>;
22
+ export declare function subtract<D, C>(...expr: [Expr<Num, D, C>, Expr<Num, D, C>]): Expr<Num, D, C>;
23
+ export declare function add<D, C>(...expr: [Expr<number, D, C>, Expr<number, D, C>]): Expr<number, D, C>;
24
+ export declare function add<D, C>(...expr: [Expr<Num, D, C>, Expr<Num, D, C>]): Expr<Num, D, C>;
25
+ export declare function divide<D, C>(...expr: [Expr<number, D, C>, Expr<number, D, C>]): Expr<number, D, C>;
26
+ export declare function divide<D, C>(...expr: [Expr<Num, D, C>, Expr<Num, D, C>]): Expr<Num, D, C>;
27
+ export declare function multiply<D, C>(...expr: [Expr<number, D, C>, Expr<number, D, C>]): Expr<number, D, C>;
28
+ export declare function multiply<D, C>(...expr: [Expr<Num, D, C>, Expr<Num, D, C>]): Expr<Num, D, C>;
29
+ export declare function floor<D, C>(expr: Expr<number, D, C>): Expr<number, D, C>;
30
+ export declare function floor<D, C>(expr: Expr<Num, D, C>): Expr<Num, D, C>;
31
+ export declare function ceil<D, C>(expr: Expr<number, D, C>): Expr<number, D, C>;
32
+ export declare function ceil<D, C>(expr: Expr<Num, D, C>): Expr<Num, D, C>;
33
+ export {};
@@ -0,0 +1,30 @@
1
+ import type { App, Arr, HKT, N, O, RORec, notArr } from '../../types';
2
+ import type { Expr } from '../types';
3
+ export declare const size: <T, D, C>(expr: Expr<Arr<T>, D, C>) => Expr<number, D, C>;
4
+ export declare const filterDefined: <T, D, C = unknown>(expr: Expr<Arr<T | N>, D, C>) => Expr<Arr<T>, D, C>;
5
+ export declare const filter: <T, D, K extends string, C = unknown>({ as, cond, expr, limit, }: {
6
+ expr: Expr<Arr<T>, D, C>;
7
+ as: K;
8
+ cond: Expr<unknown, D, C & RORec<K, T>>;
9
+ limit?: Expr<number, D, C>;
10
+ }) => Expr<Arr<T>, D, C>;
11
+ export declare const sortArray: <T, D, C, K extends keyof T>({ sortBy, expr, order, }: {
12
+ expr: Expr<Arr<T>, D, C>;
13
+ sortBy: K;
14
+ order?: 1 | -1;
15
+ }) => Expr<Arr<T>, D, C>;
16
+ export declare const isArray: <T extends notArr, D, C, F extends HKT<T | Arr<T>>>(expr: Expr<T | Arr<T>, D & (App<F, T> | App<F, Arr<T>>), C>) => import("../types").BoolExpr<D & App<F, Arr<T>>, D & App<F, T>, C>;
17
+ export declare const inArray: <T, D, C>(item: Expr<T, D, C>, expr: Expr<Arr<T>, D, C>) => Expr<boolean, D, C>;
18
+ export declare const array: <T, D, C = unknown>(...exprs: Expr<T, D, C>[]) => Expr<Arr<T>, D, C>;
19
+ export declare const concatArray: <T, D, C>(...exprs: Expr<Arr<T>, D, C>[]) => Expr<Arr<T>, D, C>;
20
+ export declare const first: <T, D, C>(expr: Expr<Arr<T>, D, C>) => Expr<T | null, D, C>;
21
+ export declare const firstSure: <T, D, C>(expr: Expr<Arr<T>, D, C>) => Expr<T, D, C>;
22
+ export declare const last: <T, D, C>(expr: Expr<Arr<T>, D, C>) => Expr<T | null, D, C>;
23
+ export type NullToOBJ<N extends null> = N extends null ? O : N;
24
+ export declare const mergeObjects: <T1, T2, D, C = unknown, N extends null = never>(...exprs: readonly [Expr<T1 | N, D, C>, ...[...Expr<T1 | T2 | N, D, C>[], Expr<T2, D, C>]]) => Expr<(T1 | NullToOBJ<N>) & T2, D, C>;
25
+ export declare const anyElementTrue: <D, C = unknown>(expr: Expr<Arr<boolean>, D, C>) => Expr<boolean, D, C>;
26
+ type Reduce<T, V> = RORec<'value', V> & RORec<'this', T>;
27
+ export declare const $reduce: <T, V, D, C>(input: Expr<Arr<T>, D, C>, initialValue: Expr<V, D, C>, inExpr: Expr<V, D, C & Reduce<T, V>>) => Expr<V, D, C>;
28
+ export declare const slice: <T, D, C>(array: Expr<Arr<T>, D, C>, start: Expr<number, D, C>, end: Expr<number, D, C>) => Expr<Arr<T>, D, C>;
29
+ export declare const except: <T, D, C>(a: Expr<Arr<T>, D, C>, b: Expr<Arr<T>, D, C>) => Expr<Arr<T>, D, C>;
30
+ export {};