@thisisagile/easy-mongo 15.0.6 → 15.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Stages.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { Filter, FindOptions } from './MongoProvider';
2
- import { Get, Id, OneOrMore, Optional, PartialRecord } from '@thisisagile/easy';
1
+ import { Filter, FindOptions } from "./MongoProvider";
2
+ import { Get, Id, OneOrMore, Optional, PartialRecord } from "@thisisagile/easy";
3
3
  export declare const asc = 1;
4
4
  export declare const desc = -1;
5
- export type Accumulators = '$sum' | '$count' | '$avg' | '$first' | '$last' | '$min' | '$max' | '$push';
5
+ export type Accumulators = "$sum" | "$count" | "$avg" | "$first" | "$last" | "$min" | "$max" | "$push";
6
6
  export type Accumulator = PartialRecord<Accumulators, Filter>;
7
7
  declare class FilterBuilder<Options> {
8
8
  private filters;
@@ -78,18 +78,18 @@ export declare const stages: {
78
78
  push: () => Accumulator;
79
79
  };
80
80
  search: {
81
- search: (f: Record<string, Get<Filter, string>>) => {
81
+ search: (f: Record<string, Get<Filter, string>>) => Optional<{
82
82
  $search: any;
83
- };
84
- auto: (value?: Id) => (key: string) => {
83
+ }>;
84
+ auto: (value?: Id) => (key: string) => Optional<{
85
85
  autocomplete: {
86
86
  path: string;
87
- query: (Id | undefined)[];
87
+ query: NonNullable<string | number>[];
88
88
  };
89
- };
90
- fuzzy: (value?: string, maxEdits?: number) => (key?: string) => {
89
+ }>;
90
+ fuzzy: (value?: string, maxEdits?: number) => (key?: string) => Optional<{
91
91
  text: {
92
- query: string | undefined;
92
+ query: string;
93
93
  path: string | {
94
94
  wildcard: string;
95
95
  } | undefined;
@@ -97,7 +97,7 @@ export declare const stages: {
97
97
  maxEdits: number;
98
98
  };
99
99
  };
100
- };
100
+ }>;
101
101
  };
102
102
  set: {
103
103
  set: (f: Record<string, Get<Filter, string>>) => {
package/dist/Stages.js CHANGED
@@ -13,15 +13,15 @@ class FilterBuilder {
13
13
  .reduce((acc, [key, value]) => ({ ...acc, ...(0, easy_1.ifDefined)(this.filters[key], f => f(value)) }), {}));
14
14
  }
15
15
  }
16
- const escapeRegex = (s) => s.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d');
16
+ const escapeRegex = (s) => s.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
17
17
  exports.stages = {
18
- root: '$$ROOT',
19
- current: '$$CURRENT',
20
- id: '_id',
18
+ root: "$$ROOT",
19
+ current: "$$CURRENT",
20
+ id: "_id",
21
21
  decode: {
22
22
  fields: (f) => Object.entries(f).reduce((res, [k, v]) => (0, easy_1.on)(res, r => (0, easy_1.ifDefined)((0, easy_1.isFunction)(v) ? v(k) : v, nv => (r[k] = nv))), {}),
23
23
  fieldsArrays: (f) => Object.entries(f).reduce((res, [k, v]) => (0, easy_1.on)(res, r => (r[k] = (0, easy_1.use)((0, easy_1.toArray)(v), vs => vs.map(v => ((0, easy_1.isFunction)(v) ? v(k) : v))))), {}),
24
- id: (f) => ((0, easy_1.isString)(f) ? `$${(0, easy_1.asString)(f)}` : (0, easy_1.isPrimitive)(f) ? f : Object.entries(f).map(([k, v]) => ((0, easy_1.isFunction)(v) ? v(k) : v))[0]),
24
+ id: (f) => ((0, easy_1.isString)(f) ? `$${(0, easy_1.asString)(f)}` : (0, easy_1.isPrimitive)(f) ? f : Object.entries(f).map(([k, v]) => ((0, easy_1.isFunction)(v) ? v(k) : v))[0])
25
25
  },
26
26
  match: {
27
27
  match: (f) => ({ $match: exports.stages.decode.fields(f) }),
@@ -30,21 +30,21 @@ exports.stages = {
30
30
  gte: (value) => ({ $gte: value }),
31
31
  lt: (value) => ({ $lt: value }),
32
32
  lte: (value) => ({ $lte: value }),
33
- isIn: (value, separator = ',') => ({ $in: (0, easy_1.isString)(value) ? value.split(separator) : value }),
33
+ isIn: (value, separator = ",") => ({ $in: (0, easy_1.isString)(value) ? value.split(separator) : value }),
34
34
  after: (date) => exports.stages.match.gte((0, Utils_1.toMongoType)(date)),
35
35
  before: (date) => exports.stages.match.lt((0, Utils_1.toMongoType)(date)),
36
- anywhere: (q) => ({ $regex: escapeRegex(q), $options: 'i' }),
36
+ anywhere: (q) => ({ $regex: escapeRegex(q), $options: "i" })
37
37
  },
38
38
  sort: {
39
39
  sort: ($sort) => ((0, easy_1.isPresent)($sort) ? { $sort } : undefined),
40
40
  asc: (key) => exports.stages.sort.sort({ [key]: exports.asc }),
41
- desc: (key) => exports.stages.sort.sort({ [key]: exports.desc }),
41
+ desc: (key) => exports.stages.sort.sort({ [key]: exports.desc })
42
42
  },
43
43
  group: {
44
44
  group: (fields) => ({
45
- by: (by) => ({ $group: Object.assign({ _id: exports.stages.decode.id(by) }, exports.stages.decode.fields(fields)) }),
45
+ by: (by) => ({ $group: Object.assign({ _id: exports.stages.decode.id(by) }, exports.stages.decode.fields(fields)) })
46
46
  }),
47
- date: (format = '%Y-%m-%d') => (key) => ({ $dateToString: { date: `$${key}`, format } }),
47
+ date: (format = "%Y-%m-%d") => (key) => ({ $dateToString: { date: `$${key}`, format } }),
48
48
  count: () => ({ $count: {} }),
49
49
  sum: (from) => ({ $sum: `$${from}` }),
50
50
  avg: (from) => ({ $avg: `$${from}` }),
@@ -52,42 +52,42 @@ exports.stages = {
52
52
  last: (from) => ({ $last: `$${from}` }),
53
53
  min: (from) => ({ $min: `$${from}` }),
54
54
  max: (from) => ({ $max: `$${from}` }),
55
- push: () => ({ $push: '$$ROOT' }),
55
+ push: () => ({ $push: "$$ROOT" })
56
56
  },
57
57
  search: {
58
- search: (f) => ({ $search: exports.stages.decode.id(f) }),
59
- auto: (value) => (key) => ({ autocomplete: { path: key, query: [value] } }),
60
- fuzzy: (value, maxEdits = 1) => (key) => ({
58
+ search: (f) => (0, easy_1.ifDefined)(exports.stages.decode.id(f), $search => ({ $search })),
59
+ auto: (value) => (key) => (0, easy_1.ifDefined)(value, v => ({ autocomplete: { path: key, query: [v] } })),
60
+ fuzzy: (value, maxEdits = 1) => (key) => (0, easy_1.ifDefined)(value, v => ({
61
61
  text: {
62
- query: value,
62
+ query: v,
63
63
  path: key === "wildcard" ? { wildcard: "*" } : key,
64
64
  fuzzy: { maxEdits }
65
65
  }
66
- })
66
+ }))
67
67
  },
68
68
  set: {
69
69
  set: (f) => ({ $set: exports.stages.decode.fields(f) }),
70
- score: () => ({ $meta: 'searchScore' }),
70
+ score: () => ({ $meta: "searchScore" })
71
71
  },
72
72
  skip: {
73
73
  skip: (o = {}) => (0, easy_1.ifDefined)(o.skip, { $skip: (0, easy_1.asNumber)(o.skip) }),
74
- take: (o = {}) => (0, easy_1.ifDefined)(o.take, { $limit: (0, easy_1.asNumber)(o.take) }),
74
+ take: (o = {}) => (0, easy_1.ifDefined)(o.take, { $limit: (0, easy_1.asNumber)(o.take) })
75
75
  },
76
76
  project: {
77
77
  include: (...includes) => (0, easy_1.ifNotEmpty)(includes, es => ({ $project: es.reduce((a, b) => ({ ...a, ...((0, easy_1.isString)(b) ? { [b]: 1 } : b) }), {}) })),
78
- exclude: (...excludes) => (0, easy_1.ifNotEmpty)(excludes, es => ({ $project: es.reduce((a, b) => ({ ...a, ...((0, easy_1.isString)(b) ? { [b]: 0 } : b) }), {}) })),
78
+ exclude: (...excludes) => (0, easy_1.ifNotEmpty)(excludes, es => ({ $project: es.reduce((a, b) => ({ ...a, ...((0, easy_1.isString)(b) ? { [b]: 0 } : b) }), {}) }))
79
79
  },
80
80
  replaceWith: {
81
81
  replaceWith: (f) => (0, easy_1.ifDefined)(f, { $replaceWith: f }),
82
82
  merge: (...objects) => (0, easy_1.ifNotEmpty)(objects, os => ({ $mergeObjects: os })),
83
83
  rootAnd: (...objects) => exports.stages.replaceWith.merge(exports.stages.root, ...objects),
84
- currentAnd: (...objects) => exports.stages.replaceWith.merge(exports.stages.current, ...objects),
84
+ currentAnd: (...objects) => exports.stages.replaceWith.merge(exports.stages.current, ...objects)
85
85
  },
86
86
  facet: {
87
87
  facet: (f) => ({ $facet: exports.stages.decode.fieldsArrays(f) }),
88
88
  unwind: (from) => (f) => ({ $unwind: `$${from ?? f}` }),
89
89
  count: (from) => (f) => ({ $sortByCount: `$${from ?? f}` }),
90
- data: () => [],
91
- },
90
+ data: () => []
91
+ }
92
92
  };
93
93
  //# sourceMappingURL=Stages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Stages.js","sourceRoot":"","sources":["../src/Stages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Stages.js","sourceRoot":"","sources":["../src/Stages.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thisisagile/easy-mongo",
3
- "version": "15.0.6",
3
+ "version": "15.0.7",
4
4
  "description": "Add support for MongoDB",
5
5
  "author": "Sander Hoogendoorn",
6
6
  "license": "MIT",
@@ -31,10 +31,10 @@
31
31
  "access": "public"
32
32
  },
33
33
  "devDependencies": {
34
- "@thisisagile/easy-test": "15.0.6"
34
+ "@thisisagile/easy-test": "15.0.7"
35
35
  },
36
36
  "dependencies": {
37
- "@thisisagile/easy": "^15.0.6",
37
+ "@thisisagile/easy": "^15.0.7",
38
38
  "mongodb": "^5.6.0"
39
39
  }
40
40
  }
package/src/Stages.ts CHANGED
@@ -1,120 +1,120 @@
1
- import {Filter, FindOptions} from './MongoProvider';
1
+ import { Filter, FindOptions } from "./MongoProvider";
2
2
  import {
3
- asNumber,
4
- asString,
5
- Get,
6
- Id,
7
- ifDefined,
8
- ifNotEmpty,
9
- isFunction,
10
- isPresent,
11
- isPrimitive,
12
- isString,
13
- meta,
14
- on,
15
- OneOrMore,
16
- Optional,
17
- PartialRecord,
18
- toArray,
19
- use,
20
- } from '@thisisagile/easy';
21
- import {toMongoType} from './Utils';
3
+ asNumber,
4
+ asString,
5
+ Get,
6
+ Id,
7
+ ifDefined,
8
+ ifNotEmpty,
9
+ isFunction,
10
+ isPresent,
11
+ isPrimitive,
12
+ isString,
13
+ meta,
14
+ on,
15
+ OneOrMore,
16
+ Optional,
17
+ PartialRecord,
18
+ toArray,
19
+ use
20
+ } from "@thisisagile/easy";
21
+ import { toMongoType } from "./Utils";
22
22
 
23
23
  export const asc = 1;
24
24
  export const desc = -1;
25
- export type Accumulators = '$sum' | '$count' | '$avg' | '$first' | '$last' | '$min' | '$max' | '$push';
25
+ export type Accumulators = "$sum" | "$count" | "$avg" | "$first" | "$last" | "$min" | "$max" | "$push";
26
26
  export type Accumulator = PartialRecord<Accumulators, Filter>;
27
27
 
28
28
  class FilterBuilder<Options> {
29
- constructor(private filters: Partial<Record<keyof Options, (value: unknown) => Filter>>) {
30
- }
29
+ constructor(private filters: Partial<Record<keyof Options, (value: unknown) => Filter>>) {
30
+ }
31
31
 
32
- from = (q: Partial<Options> = {}): Filter =>
33
- stages.match.match(meta(q)
34
- .entries()
35
- .reduce((acc, [key, value]) => ({...acc, ...ifDefined(this.filters[key as keyof Options], f => f(value))}), {}));
32
+ from = (q: Partial<Options> = {}): Filter =>
33
+ stages.match.match(meta(q)
34
+ .entries()
35
+ .reduce((acc, [key, value]) => ({ ...acc, ...ifDefined(this.filters[key as keyof Options], f => f(value)) }), {}));
36
36
  }
37
37
 
38
- const escapeRegex = (s: string) => s.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d');
38
+ const escapeRegex = (s: string) => s.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
39
39
 
40
40
  export const stages = {
41
- root: '$$ROOT',
42
- current: '$$CURRENT',
43
- id: '_id',
44
- decode: {
45
- fields: (f: Filter) => Object.entries(f).reduce((res, [k, v]) => on(res, r => ifDefined(isFunction(v) ? v(k) : v, nv => (r[k] = nv))), {} as any),
46
- fieldsArrays: (f: Filter) =>
47
- Object.entries(f).reduce((res, [k, v]) => on(res, r => (r[k] = use(toArray(v), vs => vs.map(v => (isFunction(v) ? v(k) : v))))), {} as any),
48
- id: (f: Filter | string) => (isString(f) ? `$${asString(f)}` : isPrimitive(f) ? f : Object.entries(f).map(([k, v]) => (isFunction(v) ? v(k) : v))[0]),
49
- },
50
- match: {
51
- match: (f: Record<string, Get<Optional<Filter>, string>>) => ({$match: stages.decode.fields(f)}),
52
- filter: <Options>(filters: Partial<Record<keyof Options, (value: unknown) => Filter>>) => new FilterBuilder<Options>(filters),
53
- gt: (value: Filter) => ({$gt: value}),
54
- gte: (value: Filter) => ({$gte: value}),
55
- lt: (value: Filter) => ({$lt: value}),
56
- lte: (value: Filter) => ({$lte: value}),
57
- isIn: (value: OneOrMore<unknown>, separator = ',') => ({$in: isString(value) ? value.split(separator) : value}),
58
- after: (date: unknown) => stages.match.gte(toMongoType(date)),
59
- before: (date: unknown) => stages.match.lt(toMongoType(date)),
60
- anywhere: (q: string) => ({$regex: escapeRegex(q), $options: 'i'}),
61
- },
62
- sort: {
63
- sort: ($sort: Record<string, typeof asc | typeof desc>): Optional<Filter> => (isPresent($sort) ? {$sort} : undefined),
64
- asc: (key: string) => stages.sort.sort({[key]: asc}),
65
- desc: (key: string) => stages.sort.sort({[key]: desc}),
66
- },
67
- group: {
68
- group: (fields: Record<string, Accumulator>) => ({
69
- by: (by: Filter) => ({$group: Object.assign({_id: stages.decode.id(by)}, stages.decode.fields(fields))}),
70
- }),
71
- date:
72
- (format = '%Y-%m-%d') =>
73
- (key: string) => ({$dateToString: {date: `$${key}`, format}}),
74
- count: (): Accumulator => ({$count: {}}),
75
- sum: (from?: string): Accumulator => ({$sum: `$${from}`}),
76
- avg: (from?: string) => ({$avg: `$${from}`}),
77
- first: (from?: string): Accumulator => ({$first: `$${from}`}),
78
- last: (from?: string): Accumulator => ({$last: `$${from}`}),
79
- min: (from?: string): Accumulator => ({$min: `$${from}`}),
80
- max: (from?: string): Accumulator => ({$max: `$${from}`}),
81
- push: (): Accumulator => ({$push: '$$ROOT'}),
82
- },
83
- search: {
84
- search: (f: Record<string, Get<Filter, string>>) => ({$search: stages.decode.id(f)}),
85
- auto: (value?: Id) => (key: string) => ({autocomplete: {path: key, query: [value]}}),
86
- fuzzy: (value?: string, maxEdits = 1) => (key?: string) => ({
87
- text: {
88
- query: value,
89
- path: key === "wildcard" ? {wildcard: "*"} : key,
90
- fuzzy: {maxEdits}
91
- }
92
- })
93
- },
94
- set: {
95
- set: (f: Record<string, Get<Filter, string>>) => ({$set: stages.decode.fields(f)}),
96
- score: () => ({$meta: 'searchScore'}),
97
- },
98
- skip: {
99
- skip: (o: FindOptions = {}): Optional<Filter> => ifDefined(o.skip, {$skip: asNumber(o.skip)}),
100
- take: (o: FindOptions = {}): Optional<Filter> => ifDefined(o.take, {$limit: asNumber(o.take)}),
101
- },
102
- project: {
103
- include: (...includes: (string | Record<string, 1>)[]): Optional<Filter> =>
104
- ifNotEmpty(includes, es => ({$project: es.reduce((a: Filter, b: Filter) => ({...a, ...(isString(b) ? {[b]: 1} : b)}), {})})),
105
- exclude: (...excludes: (string | Record<string, 0>)[]): Optional<Filter> =>
106
- ifNotEmpty(excludes, es => ({$project: es.reduce((a: Filter, b: Filter) => ({...a, ...(isString(b) ? {[b]: 0} : b)}), {})})),
107
- },
108
- replaceWith: {
109
- replaceWith: (f?: Filter): Optional<Filter> => ifDefined(f, {$replaceWith: f}),
110
- merge: (...objects: Filter[]): Optional<Filter> => ifNotEmpty(objects, os => ({$mergeObjects: os})),
111
- rootAnd: (...objects: Filter[]): Optional<Filter> => stages.replaceWith.merge(stages.root, ...objects),
112
- currentAnd: (...objects: Filter[]): Optional<Filter> => stages.replaceWith.merge(stages.current, ...objects),
113
- },
114
- facet: {
115
- facet: (f: Record<string, OneOrMore<Get<Optional<Filter>, string>>>) => ({$facet: stages.decode.fieldsArrays(f)}),
116
- unwind: (from?: string) => (f?: string) => ({$unwind: `$${from ?? f}`}),
117
- count: (from?: string) => (f?: string) => ({$sortByCount: `$${from ?? f}`}),
118
- data: () => [],
119
- },
41
+ root: "$$ROOT",
42
+ current: "$$CURRENT",
43
+ id: "_id",
44
+ decode: {
45
+ fields: (f: Filter) => Object.entries(f).reduce((res, [k, v]) => on(res, r => ifDefined(isFunction(v) ? v(k) : v, nv => (r[k] = nv))), {} as any),
46
+ fieldsArrays: (f: Filter) =>
47
+ Object.entries(f).reduce((res, [k, v]) => on(res, r => (r[k] = use(toArray(v), vs => vs.map(v => (isFunction(v) ? v(k) : v))))), {} as any),
48
+ id: (f: Filter | string) => (isString(f) ? `$${asString(f)}` : isPrimitive(f) ? f : Object.entries(f).map(([k, v]) => (isFunction(v) ? v(k) : v))[0])
49
+ },
50
+ match: {
51
+ match: (f: Record<string, Get<Optional<Filter>, string>>) => ({ $match: stages.decode.fields(f) }),
52
+ filter: <Options>(filters: Partial<Record<keyof Options, (value: unknown) => Filter>>) => new FilterBuilder<Options>(filters),
53
+ gt: (value: Filter) => ({ $gt: value }),
54
+ gte: (value: Filter) => ({ $gte: value }),
55
+ lt: (value: Filter) => ({ $lt: value }),
56
+ lte: (value: Filter) => ({ $lte: value }),
57
+ isIn: (value: OneOrMore<unknown>, separator = ",") => ({ $in: isString(value) ? value.split(separator) : value }),
58
+ after: (date: unknown) => stages.match.gte(toMongoType(date)),
59
+ before: (date: unknown) => stages.match.lt(toMongoType(date)),
60
+ anywhere: (q: string) => ({ $regex: escapeRegex(q), $options: "i" })
61
+ },
62
+ sort: {
63
+ sort: ($sort: Record<string, typeof asc | typeof desc>): Optional<Filter> => (isPresent($sort) ? { $sort } : undefined),
64
+ asc: (key: string) => stages.sort.sort({ [key]: asc }),
65
+ desc: (key: string) => stages.sort.sort({ [key]: desc })
66
+ },
67
+ group: {
68
+ group: (fields: Record<string, Accumulator>) => ({
69
+ by: (by: Filter) => ({ $group: Object.assign({ _id: stages.decode.id(by) }, stages.decode.fields(fields)) })
70
+ }),
71
+ date:
72
+ (format = "%Y-%m-%d") =>
73
+ (key: string) => ({ $dateToString: { date: `$${key}`, format } }),
74
+ count: (): Accumulator => ({ $count: {} }),
75
+ sum: (from?: string): Accumulator => ({ $sum: `$${from}` }),
76
+ avg: (from?: string) => ({ $avg: `$${from}` }),
77
+ first: (from?: string): Accumulator => ({ $first: `$${from}` }),
78
+ last: (from?: string): Accumulator => ({ $last: `$${from}` }),
79
+ min: (from?: string): Accumulator => ({ $min: `$${from}` }),
80
+ max: (from?: string): Accumulator => ({ $max: `$${from}` }),
81
+ push: (): Accumulator => ({ $push: "$$ROOT" })
82
+ },
83
+ search: {
84
+ search: (f: Record<string, Get<Filter, string>>) => ifDefined(stages.decode.id(f), $search => ({ $search })),
85
+ auto: (value?: Id) => (key: string) => ifDefined(value, v => ({ autocomplete: { path: key, query: [v] } })),
86
+ fuzzy: (value?: string, maxEdits = 1) => (key?: string) => ifDefined(value, v => ({
87
+ text: {
88
+ query: v,
89
+ path: key === "wildcard" ? { wildcard: "*" } : key,
90
+ fuzzy: { maxEdits }
91
+ }
92
+ }))
93
+ },
94
+ set: {
95
+ set: (f: Record<string, Get<Filter, string>>) => ({ $set: stages.decode.fields(f) }),
96
+ score: () => ({ $meta: "searchScore" })
97
+ },
98
+ skip: {
99
+ skip: (o: FindOptions = {}): Optional<Filter> => ifDefined(o.skip, { $skip: asNumber(o.skip) }),
100
+ take: (o: FindOptions = {}): Optional<Filter> => ifDefined(o.take, { $limit: asNumber(o.take) })
101
+ },
102
+ project: {
103
+ include: (...includes: (string | Record<string, 1>)[]): Optional<Filter> =>
104
+ ifNotEmpty(includes, es => ({ $project: es.reduce((a: Filter, b: Filter) => ({ ...a, ...(isString(b) ? { [b]: 1 } : b) }), {}) })),
105
+ exclude: (...excludes: (string | Record<string, 0>)[]): Optional<Filter> =>
106
+ ifNotEmpty(excludes, es => ({ $project: es.reduce((a: Filter, b: Filter) => ({ ...a, ...(isString(b) ? { [b]: 0 } : b) }), {}) }))
107
+ },
108
+ replaceWith: {
109
+ replaceWith: (f?: Filter): Optional<Filter> => ifDefined(f, { $replaceWith: f }),
110
+ merge: (...objects: Filter[]): Optional<Filter> => ifNotEmpty(objects, os => ({ $mergeObjects: os })),
111
+ rootAnd: (...objects: Filter[]): Optional<Filter> => stages.replaceWith.merge(stages.root, ...objects),
112
+ currentAnd: (...objects: Filter[]): Optional<Filter> => stages.replaceWith.merge(stages.current, ...objects)
113
+ },
114
+ facet: {
115
+ facet: (f: Record<string, OneOrMore<Get<Optional<Filter>, string>>>) => ({ $facet: stages.decode.fieldsArrays(f) }),
116
+ unwind: (from?: string) => (f?: string) => ({ $unwind: `$${from ?? f}` }),
117
+ count: (from?: string) => (f?: string) => ({ $sortByCount: `$${from ?? f}` }),
118
+ data: () => []
119
+ }
120
120
  };