@omegup/msync 0.0.28 → 0.0.31

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 (89) hide show
  1. package/index.d.ts +6 -0
  2. package/index.esm.js +18 -17
  3. package/index.js +18 -17
  4. package/lib/accumulators/index.d.ts +10 -0
  5. package/lib/aggregate/$merge.d.ts +10 -0
  6. package/lib/aggregate/$upsert.d.ts +11 -0
  7. package/lib/aggregate/group/$group-merge.d.ts +12 -0
  8. package/lib/aggregate/group/index.d.ts +2 -0
  9. package/lib/aggregate/group/utils/sub-group.d.ts +6 -0
  10. package/lib/aggregate/group/utils/sub-merge.d.ts +15 -0
  11. package/lib/aggregate/index.d.ts +8 -0
  12. package/lib/aggregate/lookup/$lookup-delta.d.ts +10 -0
  13. package/lib/aggregate/lookup/$lookup-raw.d.ts +9 -0
  14. package/lib/aggregate/lookup/index.d.ts +11 -0
  15. package/lib/aggregate/match/$match-delta.d.ts +3 -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 +34 -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 +12 -0
  23. package/lib/aggregate/set/$set-delta.d.ts +5 -0
  24. package/lib/aggregate/set/$set.d.ts +6 -0
  25. package/lib/aggregate/set/index.d.ts +1 -0
  26. package/lib/aggregate/unwind/$unwind-delta.d.ts +5 -0
  27. package/lib/aggregate/unwind/index.d.ts +5 -0
  28. package/lib/boot/boot-simpl.d.ts +14 -0
  29. package/lib/boot/boot.d.ts +36 -0
  30. package/lib/boot/index.d.ts +2 -0
  31. package/lib/expression/arith.d.ts +26 -0
  32. package/lib/expression/array.d.ts +25 -0
  33. package/lib/expression/concat.d.ts +30 -0
  34. package/lib/expression/date.d.ts +17 -0
  35. package/lib/expression/expr-base.d.ts +5 -0
  36. package/lib/expression/index.d.ts +7 -0
  37. package/lib/expression/logic.d.ts +22 -0
  38. package/lib/expression/range.d.ts +6 -0
  39. package/lib/expression/val.d.ts +25 -0
  40. package/lib/field/field.d.ts +25 -0
  41. package/lib/field/index.d.ts +1 -0
  42. package/lib/machine.d.ts +9 -0
  43. package/lib/predicate/$eq.d.ts +13 -0
  44. package/lib/predicate/$expr.d.ts +3 -0
  45. package/lib/predicate/$in.d.ts +2 -0
  46. package/lib/predicate/index.d.ts +3 -0
  47. package/lib/predicate/utils.d.ts +5 -0
  48. package/lib/query/index.d.ts +1 -0
  49. package/lib/query/logic.d.ts +11 -0
  50. package/lib/stream/aggregate.d.ts +7 -0
  51. package/lib/types/accumulator.d.ts +30 -0
  52. package/lib/types/aggregate.d.ts +9 -0
  53. package/lib/types/expr.d.ts +27 -0
  54. package/lib/types/extern.d.ts +3 -0
  55. package/lib/types/index.d.ts +8 -0
  56. package/lib/types/lookup.d.ts +19 -0
  57. package/lib/types/machine.d.ts +17 -0
  58. package/lib/types/predicate.d.ts +14 -0
  59. package/lib/types/query.d.ts +12 -0
  60. package/lib/types/stream.d.ts +67 -0
  61. package/lib/update/index.d.ts +1 -0
  62. package/lib/update/updater.d.ts +19 -0
  63. package/lib/utils/before.d.ts +3 -0
  64. package/lib/utils/coll.d.ts +5 -0
  65. package/lib/utils/db-indexes.d.ts +4 -0
  66. package/lib/utils/guard.d.ts +18 -0
  67. package/lib/utils/index.d.ts +3 -0
  68. package/lib/utils/json.d.ts +9 -0
  69. package/lib/utils/log.d.ts +1 -0
  70. package/lib/utils/map-object.d.ts +41 -0
  71. package/lib/utils/merge/combiners.d.ts +6 -0
  72. package/lib/utils/merge/index.d.ts +2 -0
  73. package/lib/utils/merge/merge.d.ts +7 -0
  74. package/lib/utils/merge/next-winner.d.ts +3 -0
  75. package/lib/utils/merge/types.d.ts +19 -0
  76. package/lib/utils/merge/utils.d.ts +5 -0
  77. package/lib/utils/tear-down.d.ts +2 -0
  78. package/lib/watch.d.ts +15 -0
  79. package/package.json +1 -1
  80. package/test/mongodb.d.ts +9 -0
  81. package/test/uri.d.ts +1 -0
  82. package/types/class.d.ts +1 -0
  83. package/types/extern.d.ts +3 -0
  84. package/types/global.d.ts +50 -0
  85. package/types/hkt.d.ts +56 -0
  86. package/types/index.d.ts +6 -0
  87. package/types/json.d.ts +54 -0
  88. package/types/mongo.d.ts +24 -0
  89. package/types/view.d.ts +35 -0
package/index.d.ts CHANGED
@@ -316,6 +316,12 @@ declare global {
316
316
  race<T extends readonly unknown[] | []>(values: T): Promise<Awaited<T[number]>>;
317
317
  }
318
318
  }
319
+ declare module 'synchronous-promise' {
320
+ interface SynchronousPromiseConstructor {
321
+ any<T extends readonly unknown[] | [], _ extends 0 = 0>(values: AppMap<PromiseHKT, T>): SynchronousPromise<T[number]>;
322
+ any<T extends readonly unknown[] | []>(values: T): SynchronousPromise<Awaited<T[number]>>;
323
+ }
324
+ }
319
325
 
320
326
  declare const RawStage: unique symbol;
321
327
  declare module 'mongodb' {
package/index.esm.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { SynchronousPromise } from 'synchronous-promise';
1
2
  import { UUID, MongoClient } from 'mongodb';
2
3
  import crypto$1 from 'crypto';
3
4
  import { writeFile } from 'fs/promises';
@@ -576,13 +577,11 @@ const subMerge = (args, out, gid, extra, idPrefix, first) => {
576
577
  .with($merge_({
577
578
  ...out,
578
579
  on: root().of(gid),
579
- ...{
580
- vars: { new: ['new', root().expr()] },
581
- stages: 'ctx',
582
- whenMatched: link()
583
- .with(mergeAggregates)
584
- .with(doubleReplace($set_(updater))).stages,
585
- },
580
+ vars: { new: ['new', root().expr()] },
581
+ stages: 'ctx',
582
+ whenMatched: link()
583
+ .with(mergeAggregates)
584
+ .with(doubleReplace($set_(updater))).stages,
586
585
  })).stages);
587
586
  };
588
587
 
@@ -850,18 +849,20 @@ const patch = (x, k, v) => ({ ...x, [k]: v });
850
849
  const restart = (sources) => {
851
850
  return map(sources, x => x.stop());
852
851
  };
853
- const race = async (sources) => {
852
+ const race = (sources) => {
854
853
  const promises = Object.values(map(sources, ({ next }, key) => next.then(frame => ({ key, sources, frame }))));
855
- return Promise.race(promises);
854
+ return SynchronousPromise.any(promises);
856
855
  };
857
856
 
858
- const nextWinner = async (previousWinner, previousWinnerNextFrame, sources, interrupt) => {
857
+ const nextWinner = (previousWinner, previousWinnerNextFrame, sources, interrupt) => {
859
858
  const { frame: previousFrame, key } = previousWinner;
860
859
  if (!interrupt?.(key) && previousFrame.info.job) {
861
- const previousFrameSuccessor = await previousWinnerNextFrame;
862
- if (previousFrame.info.job === previousFrameSuccessor.info.job) {
863
- return { frame: previousFrameSuccessor, key };
864
- }
860
+ return previousWinnerNextFrame.then((previousFrameSuccessor) => {
861
+ if (previousFrameSuccessor.info.job) {
862
+ return { frame: previousFrameSuccessor, key };
863
+ }
864
+ return race(sources);
865
+ });
865
866
  }
866
867
  return race(sources);
867
868
  };
@@ -923,7 +924,7 @@ class Machine {
923
924
  return runCont(run(), cb);
924
925
  }
925
926
  }
926
- const wrap = (root) => new Machine(root.runner());
927
+ const wrap = (root) => root;
927
928
  const runCont = async ({ next }, cb) => {
928
929
  const { cont, info } = await next;
929
930
  const stopped = cb?.(info);
@@ -1244,7 +1245,7 @@ const executes$1 = (view, input, streamName) => {
1244
1245
  params: x.params,
1245
1246
  })),
1246
1247
  };
1247
- const step0 = () => Promise.resolve(next(step1, 'empty new collection'));
1248
+ const step0 = () => SynchronousPromise.resolve(next(step1, 'empty new collection'));
1248
1249
  const stop = withStop(step0);
1249
1250
  const step1 = async () => {
1250
1251
  await snapshotCollection.updateMany({ updated: true }, { $set: { updated: false, after: null } });
@@ -1407,7 +1408,7 @@ const executes = (view, input, streamName) => {
1407
1408
  params: x.params,
1408
1409
  })),
1409
1410
  };
1410
- const step0 = () => Promise.resolve(next(step1, 'get last update'));
1411
+ const step0 = () => SynchronousPromise.resolve(next(step1, 'get last update'));
1411
1412
  const stop = withStop(step0);
1412
1413
  const step1 = () => Promise.all([
1413
1414
  last.findOne({ _id: streamName, data }),
package/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var synchronousPromise = require('synchronous-promise');
3
4
  var mongodb = require('mongodb');
4
5
  var crypto$1 = require('crypto');
5
6
  var promises = require('fs/promises');
@@ -578,13 +579,11 @@ const subMerge = (args, out, gid, extra, idPrefix, first) => {
578
579
  .with($merge_({
579
580
  ...out,
580
581
  on: root().of(gid),
581
- ...{
582
- vars: { new: ['new', root().expr()] },
583
- stages: 'ctx',
584
- whenMatched: link()
585
- .with(mergeAggregates)
586
- .with(doubleReplace($set_(updater))).stages,
587
- },
582
+ vars: { new: ['new', root().expr()] },
583
+ stages: 'ctx',
584
+ whenMatched: link()
585
+ .with(mergeAggregates)
586
+ .with(doubleReplace($set_(updater))).stages,
588
587
  })).stages);
589
588
  };
590
589
 
@@ -852,18 +851,20 @@ const patch = (x, k, v) => ({ ...x, [k]: v });
852
851
  const restart = (sources) => {
853
852
  return map(sources, x => x.stop());
854
853
  };
855
- const race = async (sources) => {
854
+ const race = (sources) => {
856
855
  const promises = Object.values(map(sources, ({ next }, key) => next.then(frame => ({ key, sources, frame }))));
857
- return Promise.race(promises);
856
+ return synchronousPromise.SynchronousPromise.any(promises);
858
857
  };
859
858
 
860
- const nextWinner = async (previousWinner, previousWinnerNextFrame, sources, interrupt) => {
859
+ const nextWinner = (previousWinner, previousWinnerNextFrame, sources, interrupt) => {
861
860
  const { frame: previousFrame, key } = previousWinner;
862
861
  if (!interrupt?.(key) && previousFrame.info.job) {
863
- const previousFrameSuccessor = await previousWinnerNextFrame;
864
- if (previousFrame.info.job === previousFrameSuccessor.info.job) {
865
- return { frame: previousFrameSuccessor, key };
866
- }
862
+ return previousWinnerNextFrame.then((previousFrameSuccessor) => {
863
+ if (previousFrameSuccessor.info.job) {
864
+ return { frame: previousFrameSuccessor, key };
865
+ }
866
+ return race(sources);
867
+ });
867
868
  }
868
869
  return race(sources);
869
870
  };
@@ -925,7 +926,7 @@ class Machine {
925
926
  return runCont(run(), cb);
926
927
  }
927
928
  }
928
- const wrap = (root) => new Machine(root.runner());
929
+ const wrap = (root) => root;
929
930
  const runCont = async ({ next }, cb) => {
930
931
  const { cont, info } = await next;
931
932
  const stopped = cb?.(info);
@@ -1246,7 +1247,7 @@ const executes$1 = (view, input, streamName) => {
1246
1247
  params: x.params,
1247
1248
  })),
1248
1249
  };
1249
- const step0 = () => Promise.resolve(next(step1, 'empty new collection'));
1250
+ const step0 = () => synchronousPromise.SynchronousPromise.resolve(next(step1, 'empty new collection'));
1250
1251
  const stop = withStop(step0);
1251
1252
  const step1 = async () => {
1252
1253
  await snapshotCollection.updateMany({ updated: true }, { $set: { updated: false, after: null } });
@@ -1409,7 +1410,7 @@ const executes = (view, input, streamName) => {
1409
1410
  params: x.params,
1410
1411
  })),
1411
1412
  };
1412
- const step0 = () => Promise.resolve(next(step1, 'get last update'));
1413
+ const step0 = () => synchronousPromise.SynchronousPromise.resolve(next(step1, 'get last update'));
1413
1414
  const stop = withStop(step0);
1414
1415
  const step1 = () => Promise.all([
1415
1416
  last.findOne({ _id: streamName, data }),
@@ -0,0 +1,10 @@
1
+ import type { AppMap, Arr, N, O, Rec } from '../../types';
2
+ import type { ExprHKT } from '../expression/concat';
3
+ import { type NoRaw } from '../expression/val';
4
+ import type { DeltaAccumulator, Expr, Part } from '../types';
5
+ export declare const $sum: <D extends O, C = unknown>(expr: Expr<number | N, D, C>) => DeltaAccumulator<D, number, C>;
6
+ export declare const $accumulator: <D, T, Ctx, A extends readonly unknown[]>(init: () => NoRaw<T>, accumulateArgs: AppMap<ExprHKT<Part<D>, Ctx>, A>, accumulate: (a: NoRaw<T>, ...args: NoRaw<A>) => NoRaw<T>, merge: (...args: NoRaw<[T | N, T]>) => NoRaw<T>) => DeltaAccumulator<D, T, Ctx>;
7
+ export declare const $countDict: <D extends O, C = unknown>(expr: Expr<string, D, C>) => DeltaAccumulator<D, Rec<string, number>, C>;
8
+ export declare const $pushDict: <D extends O, V, C = unknown>(key: Expr<string, D, C>, value: Expr<V, D, C>) => DeltaAccumulator<D, Rec<string, Rec<"0" | "1", Arr<V>>>, C>;
9
+ export declare const $keys: <D extends O, C = unknown>(expr: Expr<Rec<string, number>, D, C>) => Expr<Arr<string>, D, C>;
10
+ export declare const $entries: <D extends O, V, C = unknown>(expr: Expr<Rec<string, Rec<"1" | "0", Arr<V>>>, D, C>) => Expr<Arr<Rec<"k", string> & Rec<"v", V>>, D, C>;
@@ -0,0 +1,10 @@
1
+ import type { OPick, RWCollection } from '../../types';
2
+ import type { ID, N, O, Rec, Replace, StrKey, doc } from '../../types/json';
3
+ import { type ExprsExact } from '../expression/concat';
4
+ import type { Delta, StreamRunnerParam, TS } from '../types';
5
+ type Allowed<K extends string> = Exclude<K, keyof (TS & ID)>;
6
+ type Patch<V, KK extends StrKey<V> = StrKey<V>> = ((OPick<V, Allowed<KK>> & ID) | (Rec<Allowed<KK>, N> & ID)) & TS;
7
+ type TakeDoc<V, E = ID, KK extends StrKey<V> = StrKey<V>> = OPick<V, Allowed<KK>> & E;
8
+ export declare const $simpleMerge: <V extends O>() => <Source extends doc, Out extends doc>(out: RWCollection<Out | Replace<Out, Patch<V>>, Out>, keys: ExprsExact<TakeDoc<V, unknown>, Source>) => StreamRunnerParam<Source, "out">;
9
+ export declare const $merge: <V extends O>() => <Out extends doc, SourcePart extends doc>(out: RWCollection<Out | Replace<Out, Patch<V>>, Out>, keys: ExprsExact<TakeDoc<V, unknown>, SourcePart>) => StreamRunnerParam<Delta<SourcePart>, "out">;
10
+ export {};
@@ -0,0 +1,11 @@
1
+ import type { RWCollection } from '../../types';
2
+ import type { ID, O, doc } from '../../types/json';
3
+ import type { Del, Delta, Expr, StreamRunnerParam, TS } from '../types';
4
+ type ND = {
5
+ readonly deletedAt?: null;
6
+ };
7
+ export type Merge<T extends ID> = (T & ND & TS) | Del;
8
+ export declare const $insertX: <T extends doc, D extends O>(out: RWCollection<Merge<T>>, expr: Expr<T, D>, map: (x: Expr<T & ND & TS, D>) => Expr<Merge<T>, D>) => StreamRunnerParam<D, "out">;
9
+ export declare const $simpleInsert: <T extends doc>(out: RWCollection<Merge<T>>) => StreamRunnerParam<T, "out">;
10
+ export declare const $insert: <T extends doc>(out: RWCollection<Merge<T>>) => StreamRunnerParam<Delta<T>, "out">;
11
+ export {};
@@ -0,0 +1,12 @@
1
+ import type { RWCollection, WriteonlyCollection } from '../../../types';
2
+ import type { AsLiteral, ID, O, Rec, Replace, 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 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 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: MergeInto<Strict<Grp, V, GG, EE>, Out, WriteonlyCollection<Replace<Out, Strict<Grp, V, GG, EE>>>>, gid: AsLiteral<GI<GG>>, extra: ExprsExact<Extra<EE, V, GG>, V_Grp<V, GG, Grp>>, idPrefix?: string) => StreamRunnerParam<Delta<T>, "out">;
10
+ 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: RWCollection<Replace<Out, Strict<string, V, "_id", EE>>, Out>, extra: ExprsExact<Omit<EE, IdAndTsKeys | keyof Omit<V, IdAndTsKeys>>, doc & Omit<V, IdAndTsKeys>>) => StreamRunnerParam<Delta<T>, "out">;
11
+ 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: RWCollection<Strict<Grp, V, "_grp", EE>, Out>, extra: ExprsExact<Omit<EE, IdAndTsKeys | "_grp" | keyof Omit<V, IdAndTsKeys | "_grp">>, Rec<"_grp", Grp> & Omit<V, IdAndTsKeys | "_grp">>, idPrefix?: string) => StreamRunnerParam<Delta<T>, "out">;
12
+ export {};
@@ -0,0 +1,2 @@
1
+ export { $groupMerge, $groupId, $group } from './$group-merge';
2
+ export type { Loose, Strict } 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,15 @@
1
+ import type { AsLiteral, ID, O, Rec, Replace, WriteonlyCollection, notArr } from '../../../../types';
2
+ import { type ExprsExact } from '../../../expression/concat';
3
+ import type { 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
+ export type Loose<Grp, VV, GG extends string> = Prepare<Grp, GG> & Partial<V<VV, GG>>;
11
+ export type Strict<Grp, VV, GG extends string, EE> = Prepare<Grp, GG> & V<VV, GG> & Omit<EE, IdAndTsKeys | GI<GG> | keyof V<VV, GG>>;
12
+ export type V_Grp<VV, GG extends string, Grp> = Rec<GI<GG>, Grp> & V<VV, GG>;
13
+ export type Extra<EE, VV, GG extends string> = Omit<EE, IdAndTsKeys | GI<GG> | keyof V<VV, GG>>;
14
+ 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<Replace<Out, Strict<Grp, VV, 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">;
15
+ export {};
@@ -0,0 +1,8 @@
1
+ export * from './group';
2
+ export * from './lookup';
3
+ export * from './match';
4
+ export * from './set';
5
+ export * from './unwind';
6
+ export * from './$merge';
7
+ export * from './$upsert';
8
+ export * from './out';
@@ -0,0 +1,10 @@
1
+ import type { AsLiteral, ID, N, O, Rec } from '../../../types';
2
+ import { Field } from '../../field';
3
+ import type { BA, Before, Delta, RawStages, TStages, UBefore } from '../../types';
4
+ type s = string;
5
+ type Both<K1 extends s, LE, KK2 extends s, RE> = Delta<Rec<K1, LE> & Rec<Exclude<KK2, BA | K1>, RE> & ID>;
6
+ export declare const $lookupDelta: <LQ extends O, LE extends LQ & O, RQ extends O, RE extends RQ, BRB extends UBefore<RQ>, RS extends UBefore<RQ>, S, K1 extends s, KK2 extends s>({ field1, field2 }: {
7
+ field1: Field<LQ, S | N>;
8
+ field2: Field<RQ, S | N>;
9
+ }, { coll, exec, input }: TStages<RS, UBefore<RQ>, BRB, Before<RE>>, k1: AsLiteral<K1>, k2: AsLiteral<Exclude<KK2, BA | K1>>, k: K1 | Exclude<KK2, BA | K1> | false) => RawStages<unknown, Delta<LE>, Both<K1, LE, KK2, RE>>;
10
+ export {};
@@ -0,0 +1,9 @@
1
+ import type { App, AsLiteral, HKT, ID, O, Rec } from '../../../types';
2
+ import { type Field } from '../../field';
3
+ import type { Before, RawStages, TStages } from '../../types';
4
+ type s = string;
5
+ export declare const $lookupRaw: <LQ extends O, LE extends LQ & ID, RQ extends O, RE extends RQ & ID, BRB extends Before<RQ>, RS, S, As extends s>({ field1, field2 }: {
6
+ field1: Field<LQ, S>;
7
+ field2: Field<RQ, S>;
8
+ }, { coll, exec, input }: TStages<RS, Before<RQ>, BRB, Before<RE>>, k2: AsLiteral<As>, k: "left" | "right" | false) => <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> & ID>>;
9
+ export {};
@@ -0,0 +1,11 @@
1
+ import type { AsLiteral, O, RORec, doc, notArr } 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
+ localField: Field<LQ, S>;
6
+ foreignField: Field<RQ, S>;
7
+ from: SnapshotStreamExecutionResult<RQ, RE>;
8
+ as: AsLiteral<As>;
9
+ };
10
+ export 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>>;
11
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { doc } from '../../../types';
2
+ import type { Delta, Expr } from '../../types';
3
+ export declare const $matchDelta: <T extends doc>(query: Expr<boolean, T>) => import("../../types").RawStages<unknown, Delta<T>, Delta<T>, unknown, number>;
@@ -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 } 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_: <Q, T extends Q & 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>(k: K) => RawStages<O<T>, T & Rec<K, Arr<U>>, T & Rec<K, 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/map-object").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,34 @@
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>;
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?: undefined;
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
+ } | {
29
+ stages: 'ctx';
30
+ vars: ExprsExact<Ctx, T>;
31
+ into: RWCollection<In, Out>;
32
+ whenMatched: RawStages<unknown, Out, In, Ctx>;
33
+ });
34
+ 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>;
@@ -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
+ 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>(k: K) => FRawStages<T, T & Rec<K, Arr<R>>, T & Rec<K, R>>;
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/map-object").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,12 @@
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, Delta2<T, BA2> & E, Rec<BA2, V | null> & Omit<Delta<T> & E, BA2>, C, 1>;
11
+ 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>>;
12
+ 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,6 @@
1
+ import type { O, Replace } from '../../../types';
2
+ import type { DeltaStages, Expr, LinStages } from '../../types';
3
+ import { type UpdaterHKT } from '../../update/updater';
4
+ import type { MapO } from '../../utils/map-object';
5
+ export 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>;
6
+ export declare const $replaceWith: <T extends O, V extends O>(expr: Expr<V, T>) => DeltaStages<O, T, V> & LinStages<O, T, V>;
@@ -0,0 +1 @@
1
+ export { $replaceWith, $set } from './$set';
@@ -0,0 +1,5 @@
1
+ import type { Arr, AsLiteral, ID, Rec, doc } from '../../../types';
2
+ import type { Delta, RawStages } from '../../types';
3
+ type s = string;
4
+ export declare const $unwindDelta: <K1 extends s, T extends doc, K2 extends s, 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>>;
5
+ export {};
@@ -0,0 +1,5 @@
1
+ import type { Arr, AsLiteral, doc, O, Rec, RORec } from '../../../types';
2
+ import type { DeltaStages } from '../../types';
3
+ export { $unwindDelta } from './$unwind-delta';
4
+ type s = string;
5
+ export 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>>;
@@ -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) => import("../aggregate/prefix").DeltaPipe<AllowedPick<V, KK>, AllowedPick<V, KK>, StreamRunnerHKT, StagesHKT>;
14
+ export {};
@@ -0,0 +1,36 @@
1
+ import { Collection, type Timestamp } from 'mongodb';
2
+ import type { BSON, O2, O3, OPickD, RawObj, StrKey, View } from '../../types';
3
+ import type { HKT, I } from '../../types/hkt';
4
+ import { type DeltaPipe } from '../aggregate/prefix';
5
+ import type { SnapshotStreamExecutionResult } from '../types';
6
+ import type { Actions, DeltaStages, Model } from '../types/stream';
7
+ type Allowed<K> = Exclude<K, 'deletedAt' | '_id'>;
8
+ type AllowedPick<V extends Model, K extends StrKey<V>> = OPickD<V, Allowed<K>>;
9
+ export type Teardown = {
10
+ collection: string;
11
+ method: string;
12
+ params: unknown[];
13
+ };
14
+ export type TsData = {
15
+ input: readonly RawObj[];
16
+ finalInput: readonly RawObj[];
17
+ finalInputFirst: readonly RawObj[];
18
+ teardown: Teardown;
19
+ };
20
+ export type Last = {
21
+ _id: string;
22
+ ts: Timestamp;
23
+ data?: TsData;
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
+ };
28
+ export declare const streamNames: Record<string, string>;
29
+ export interface SnapshotStreamHKT extends HKT<O2> {
30
+ readonly out: SnapshotStreamExecutionResult<I<O2, this>[0], I<O2, this>[1]>;
31
+ }
32
+ export interface DeltaHKT extends HKT<O3> {
33
+ readonly out: DeltaStages<I<O3, this>[0], I<O3, this>[1], I<O3, this>[2]>;
34
+ }
35
+ export declare const staging: <V extends Model, KK extends StrKey<V>>(view: View<V, Allowed<KK>>, streamName: string) => DeltaPipe<AllowedPick<V, KK>, AllowedPick<V, KK>, SnapshotStreamHKT, DeltaHKT>;
36
+ export {};
@@ -0,0 +1,2 @@
1
+ export { staging } from './boot';
2
+ export { from } from './boot-simpl';
@@ -0,0 +1,26 @@
1
+ import type { Expr } from '../types';
2
+ export declare const max: <D, C>(...expr: Expr<number, D, C>[]) => Expr<number, D, C>;
3
+ export declare const lt: <D, C>(expr_0: Expr<number, D, C>, expr_1: Expr<number, D, C>) => Expr<boolean, D, C>;
4
+ export declare const gt: <D, C>(expr_0: Expr<number, D, C>, expr_1: Expr<number, D, C>) => Expr<boolean, D, C>;
5
+ export declare const lte: {
6
+ <D, C>(...expr: [Expr<Date, D, C>, Expr<Date, D, C>]): Expr<boolean, D, C>;
7
+ <D, C>(...expr: [Expr<number, D, C>, Expr<number, D, C>]): Expr<boolean, D, C>;
8
+ };
9
+ export declare const gte: {
10
+ <D, C>(...expr: [Expr<Date, D, C>, Expr<Date, D, C>]): Expr<boolean, D, C>;
11
+ <D, C>(...expr: [Expr<number, D, C>, Expr<number, D, C>]): Expr<boolean, D, C>;
12
+ };
13
+ type Num = number | null | undefined;
14
+ export declare function subtract<D, C>(...expr: [Expr<number, D, C>, Expr<number, D, C>]): Expr<number, D, C>;
15
+ export declare function subtract<D, C>(...expr: [Expr<Num, D, C>, Expr<Num, D, C>]): Expr<Num, D, C>;
16
+ export declare function add<D, C>(...expr: [Expr<number, D, C>, Expr<number, D, C>]): Expr<number, D, C>;
17
+ export declare function add<D, C>(...expr: [Expr<Num, D, C>, Expr<Num, D, C>]): Expr<Num, D, C>;
18
+ export declare function divide<D, C>(...expr: [Expr<number, D, C>, Expr<number, D, C>]): Expr<number, D, C>;
19
+ export declare function divide<D, C>(...expr: [Expr<Num, D, C>, Expr<Num, D, C>]): Expr<Num, D, C>;
20
+ export declare function multiply<D, C>(...expr: [Expr<number, D, C>, Expr<number, D, C>]): Expr<number, D, C>;
21
+ export declare function multiply<D, C>(...expr: [Expr<Num, D, C>, Expr<Num, D, C>]): Expr<Num, D, C>;
22
+ export declare function floor<D, C>(expr: Expr<number, D, C>): Expr<number, D, C>;
23
+ export declare function floor<D, C>(expr: Expr<Num, D, C>): Expr<Num, D, C>;
24
+ export declare function ceil<D, C>(expr: Expr<number, D, C>): Expr<number, D, C>;
25
+ export declare function ceil<D, C>(expr: Expr<Num, D, C>): Expr<Num, D, C>;
26
+ export {};
@@ -0,0 +1,25 @@
1
+ import type { App, Arr, HKT, N, 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 array: <T, D, C = unknown>(...exprs: Expr<T, D, C>[]) => Expr<Arr<T>, D, C>;
18
+ export declare const concatArray: <T, D, C>(...exprs: Expr<Arr<T>, D, C>[]) => Expr<Arr<T>, D, C>;
19
+ export declare const first: <T, D, C>(expr: Expr<Arr<T>, D, C>) => Expr<T | null, D, C>;
20
+ export declare const firstSure: <T, D, C>(expr: Expr<Arr<T>, D, C>) => Expr<T, D, C>;
21
+ export declare const last: <T, D, C>(expr: Expr<Arr<T>, D, C>) => Expr<T | null, D, C>;
22
+ export declare const mergeObjects: <T1, T2, D, C = unknown>(exprs_0: Expr<T1, D, C>, exprs_1: Expr<T2, D, C>) => Expr<T1 & T2, D, C>;
23
+ export declare const inArray: <T, D, C = unknown>(exprs_0: Expr<T, D, C>, exprs_1: Expr<Arr<T>, D, C>) => Expr<boolean, D, C>;
24
+ 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>;
25
+ export declare const except: <T, D, C>(a: Expr<Arr<T>, D, C>, b: Expr<Arr<T>, D, C>) => Expr<Arr<T>, D, C>;