@thisisagile/easy-mongo 17.25.2 → 17.25.3

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.
@@ -1,157 +0,0 @@
1
- import {
2
- toMongoType
3
- } from "./chunk-MZE7UWQC.mjs";
4
-
5
- // src/MongoProvider.ts
6
- import {
7
- asJson,
8
- asNumber,
9
- asString,
10
- choose,
11
- entries,
12
- Exception,
13
- ifTrue,
14
- isArray,
15
- isDefined,
16
- isField,
17
- isSortCondition,
18
- json,
19
- toArray,
20
- toPageList,
21
- tuple2,
22
- tuple3,
23
- use,
24
- when
25
- } from "@thisisagile/easy";
26
- import {
27
- MongoClient
28
- } from "mongodb";
29
- var omitId = (j) => json.delete(j, "_id");
30
- function omitOptions(obj) {
31
- const { maxTimeMS, ...rest } = obj ?? {};
32
- return rest;
33
- }
34
- var MongoProvider = class _MongoProvider {
35
- constructor(coll) {
36
- this.coll = coll;
37
- }
38
- static clients = {};
39
- static destroyAll() {
40
- return Promise.all(entries(_MongoProvider.clients).map(([u, c]) => c.then((c2) => c2.close()).then(() => delete _MongoProvider.clients[u]))).then(
41
- () => void 0
42
- );
43
- }
44
- static connect(u, db) {
45
- return MongoClient.connect(u, {
46
- auth: {
47
- username: asString(db.options?.user),
48
- password: asString(db.options?.password)
49
- },
50
- ...db.options?.maxPoolSize && { maxPoolSize: db.options?.maxPoolSize },
51
- ...db.options?.minPoolSize && { minPoolSize: db.options?.minPoolSize },
52
- ...db.options?.maxIdleTimeMS && { maxIdleTimeMS: db.options?.maxIdleTimeMS },
53
- ...db.options?.socketTimeoutMS && { socketTimeoutMS: db.options?.socketTimeoutMS }
54
- }).then((c) => {
55
- c.on("error", () => delete _MongoProvider.clients[u]);
56
- c.on("close", () => delete _MongoProvider.clients[u]);
57
- return c;
58
- }).catch((err) => {
59
- delete _MongoProvider.clients[u];
60
- return Promise.reject(err);
61
- });
62
- }
63
- cluster() {
64
- return use(
65
- this.coll.db,
66
- (db) => when(db.options?.cluster).not.isDefined.reject(Exception.IsNotValid.because("Missing cluster in database options.")).then((c) => _MongoProvider.clients[c] ?? (_MongoProvider.clients[c] = _MongoProvider.connect(c, db)))
67
- );
68
- }
69
- collection() {
70
- return this.cluster().then((c) => c.db(this.coll.db.name)).then((db) => db.collection(asString(this.coll)));
71
- }
72
- toMongoJson(query) {
73
- return toMongoType(asJson(query));
74
- }
75
- withTimeout(options) {
76
- return { ...options, maxTimeMS: options?.maxTimeMS ?? this.coll.db?.options?.queryTimeoutMS ?? 3e4 };
77
- }
78
- find(query, options) {
79
- return tuple3(this.collection(), this.toMongoJson(query), this.toFindOptions(options)).then(
80
- ([c, q, o]) => tuple2(
81
- c.find(q, o),
82
- ifTrue(o.total, () => c.countDocuments(q, { maxTimeMS: this.withTimeout(options).maxTimeMS }))
83
- )
84
- ).then(([res, total]) => this.toArray(res, { ...omitOptions(options), total }));
85
- }
86
- all(options) {
87
- return this.find({}, options);
88
- }
89
- byId(id, options) {
90
- return this.collection().then((c) => c.findOne(this.toMongoJson({ id }), this.toFindOptions(options)));
91
- }
92
- by(key, value, options) {
93
- return this.find({ [key]: value }, options);
94
- }
95
- group(qs, options) {
96
- return this.aggregate(qs, options);
97
- }
98
- aggregate(qs, options) {
99
- return this.collection().then(
100
- (c) => c.aggregate(
101
- qs.map((q) => this.toMongoJson(q)),
102
- this.withTimeout(options)
103
- )
104
- ).then((res) => this.toArray(res));
105
- }
106
- add(item) {
107
- return this.collection().then((c) => c.insertOne(omitId(item))).then(() => omitId(item));
108
- }
109
- update(item) {
110
- return this.collection().then((c) => c.updateOne(this.toMongoJson({ id: item.id }), { $set: omitId(item) })).then(() => this.byId(item.id));
111
- }
112
- remove(id) {
113
- return this.collection().then((c) => c.deleteOne(this.toMongoJson({ id }))).then((d) => d.acknowledged);
114
- }
115
- count(query, options) {
116
- return this.collection().then((c) => c.countDocuments(this.toMongoJson(query ?? {}), this.withTimeout(options)));
117
- }
118
- createIndex(indexes, options) {
119
- return this.collection().then((c) => c.createIndex(this.toIndexSpecification(indexes), this.toCreateIndexesOptions(options)));
120
- }
121
- createPartialIndex(indexes, filter, options) {
122
- return this.createIndex(indexes, { ...options, filter });
123
- }
124
- createTextIndex(indexes, options) {
125
- const ii = toArray(indexes).reduce((i, f) => ({ ...i, [asString(f)]: "text" }), {});
126
- return this.createIndex(ii, { unique: false, ...options });
127
- }
128
- toFindOptions(options) {
129
- return {
130
- limit: asNumber(options?.take ?? 250),
131
- ...options?.skip && { skip: asNumber(options?.skip) },
132
- ...options?.sorts && { sort: options?.sorts } || options?.sort && { sort: this.coll.sort(...options?.sort ?? []) },
133
- total: isDefined(options?.skip) || isDefined(options?.take),
134
- projection: options?.projection ?? { _id: 0 },
135
- maxTimeMS: this.withTimeout(options).maxTimeMS
136
- };
137
- }
138
- toIndexSpecification(index) {
139
- return choose(index).type(isField, (f) => f.property).type(isSortCondition, (s) => s.toJSON()).type(isArray, (aa) => aa.map((a) => this.toIndexSpecification(a))).else((i) => i);
140
- }
141
- toCreateIndexesOptions(options) {
142
- return {
143
- unique: options?.unique ?? true,
144
- ...options?.languageOverride && { language_override: options.languageOverride },
145
- ...options?.languageDefault && { default_language: options.languageDefault },
146
- ...options?.filter && { partialFilterExpression: toMongoType(asJson(options.filter)) }
147
- };
148
- }
149
- toArray(cursor, options) {
150
- return cursor.toArray().then((r) => toPageList(r, options));
151
- }
152
- };
153
-
154
- export {
155
- MongoProvider
156
- };
157
- //# sourceMappingURL=chunk-P372VCR6.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/MongoProvider.ts"],"sourcesContent":["import {\n asJson,\n asNumber,\n asString,\n choose,\n Condition,\n Database,\n entries,\n Exception,\n FetchOptions,\n Field,\n Id,\n ifTrue,\n isArray,\n isDefined,\n isField,\n isSortCondition,\n json,\n Json,\n JsonValue,\n LogicalCondition,\n OneOrMore,\n PageList,\n Sort,\n toArray,\n toPageList,\n tuple2,\n tuple3,\n use,\n when,\n} from '@thisisagile/easy';\nimport {\n AggregationCursor,\n Collection as MongoCollection,\n CreateIndexesOptions,\n Document,\n FindCursor,\n FindOptions as MongoFindOptions,\n IndexSpecification,\n MongoClient,\n StrictFilter as MongoFilter,\n} from 'mongodb';\nimport { Collection } from './Collection';\nimport { toMongoType } from './Utils';\n\nconst omitId = (j: Json): Json => json.delete(j, '_id');\n\nexport type Projection = Record<string, 0 | 1>;\nexport type FindOptions = FetchOptions & { projection?: Projection };\nexport type Filter<T = unknown> = MongoFilter<T>;\nexport type Query = Condition | LogicalCondition | Filter<any>;\n\nexport type IndexOptions = {\n unique?: boolean;\n filter?: Query;\n languageOverride?: string;\n languageDefault?: string;\n};\n\nexport type Indexes = OneOrMore<string | Field | Sort | Record<string, 1 | -1>>;\n\nexport type Options = { maxTimeMS?: number };\n\nfunction omitOptions(obj?: FindOptions & Options): Omit<FindOptions & Options, keyof Options> {\n const { maxTimeMS, ...rest } = obj ?? ({} as Options);\n return rest;\n}\n\nexport class MongoProvider {\n protected static readonly clients: { [key: string]: Promise<MongoClient> } = {};\n\n constructor(readonly coll: Collection) {}\n\n static destroyAll(): Promise<void> {\n return Promise.all(entries(MongoProvider.clients).map(([u, c]) => c.then(c => c.close()).then(() => delete MongoProvider.clients[u]))).then(\n () => undefined\n );\n }\n\n private static connect(u: string, db: Database) {\n return MongoClient.connect(u, {\n auth: {\n username: asString(db.options?.user),\n password: asString(db.options?.password),\n },\n ...(db.options?.maxPoolSize && { maxPoolSize: db.options?.maxPoolSize }),\n ...(db.options?.minPoolSize && { minPoolSize: db.options?.minPoolSize }),\n ...(db.options?.maxIdleTimeMS && { maxIdleTimeMS: db.options?.maxIdleTimeMS }),\n ...(db.options?.socketTimeoutMS && { socketTimeoutMS: db.options?.socketTimeoutMS }),\n })\n .then(c => {\n c.on('error', () => delete MongoProvider.clients[u]);\n c.on('close', () => delete MongoProvider.clients[u]);\n return c;\n })\n .catch(err => {\n delete MongoProvider.clients[u];\n return Promise.reject(err);\n });\n }\n\n cluster(): Promise<MongoClient> {\n return use(this.coll.db, db =>\n when(db.options?.cluster)\n .not.isDefined.reject(Exception.IsNotValid.because('Missing cluster in database options.'))\n .then(c => MongoProvider.clients[c] ?? (MongoProvider.clients[c] = MongoProvider.connect(c, db)))\n );\n }\n\n collection<T extends Document = Document>(): Promise<MongoCollection<T>> {\n return this.cluster()\n .then(c => c.db(this.coll.db.name))\n .then(db => db.collection<T>(asString(this.coll)));\n }\n\n toMongoJson(query: Query): Json {\n return toMongoType(asJson(query));\n }\n\n withTimeout(options?: Partial<FindOptions & Options>): Partial<FindOptions> & Options {\n return { ...options, maxTimeMS: options?.maxTimeMS ?? this.coll.db?.options?.queryTimeoutMS ?? 30000 };\n }\n\n find(query: Query, options?: FindOptions & Options): Promise<PageList<Json>> {\n return tuple3(this.collection(), this.toMongoJson(query), this.toFindOptions(options))\n .then(([c, q, o]) =>\n tuple2(\n c.find(q, o),\n ifTrue(o.total, () => c.countDocuments(q, { maxTimeMS: this.withTimeout(options).maxTimeMS }))\n )\n )\n .then(([res, total]) => this.toArray(res, { ...omitOptions(options), total }));\n }\n\n all(options?: FindOptions): Promise<PageList<Json>> {\n return this.find({}, options);\n }\n\n byId(id: Id, options?: FindOptions): Promise<Json> {\n return this.collection().then(c => c.findOne(this.toMongoJson({ id: id }), this.toFindOptions(options)) as Promise<Json>);\n }\n\n by(key: string, value: JsonValue, options?: FindOptions): Promise<PageList<Json>> {\n return this.find({ [key]: value }, options);\n }\n\n group(qs: Filter<any>[], options?: Options): Promise<PageList<Json>> {\n return this.aggregate(qs, options);\n }\n\n aggregate(qs: Filter<any>[], options?: Options): Promise<PageList<Json>> {\n return this.collection()\n .then(c =>\n c.aggregate(\n qs.map(q => this.toMongoJson(q)),\n this.withTimeout(options)\n )\n )\n .then(res => this.toArray(res));\n }\n\n add(item: Json): Promise<Json> {\n return this.collection()\n .then(c => c.insertOne(omitId(item)))\n .then(() => omitId(item));\n }\n\n update(item: Json): Promise<Json> {\n return this.collection()\n .then(c => c.updateOne(this.toMongoJson({ id: item.id }), { $set: omitId(item) }))\n .then(() => this.byId(item.id as Id));\n }\n\n remove(id: Id): Promise<boolean> {\n return this.collection()\n .then(c => c.deleteOne(this.toMongoJson({ id })))\n .then(d => d.acknowledged);\n }\n\n count(query?: Query, options?: Options): Promise<number> {\n return this.collection().then(c => c.countDocuments(this.toMongoJson(query ?? {}), this.withTimeout(options)));\n }\n\n createIndex(indexes: Indexes, options?: IndexOptions): Promise<string> {\n return this.collection().then(c => c.createIndex(this.toIndexSpecification(indexes), this.toCreateIndexesOptions(options)));\n }\n\n createPartialIndex(indexes: Indexes, filter: Query, options?: Omit<IndexOptions, 'filter'>): Promise<string> {\n return this.createIndex(indexes, { ...options, filter });\n }\n\n createTextIndex(indexes: OneOrMore<Field | string>, options?: IndexOptions): Promise<string> {\n const ii = toArray(indexes).reduce((i, f) => ({ ...i, [asString(f)]: 'text' }), {});\n return this.createIndex(ii, { unique: false, ...options });\n }\n\n protected toFindOptions(options?: FindOptions): MongoFindOptions & { total: boolean } {\n return {\n limit: asNumber(options?.take ?? 250),\n ...(options?.skip && { skip: asNumber(options?.skip) }),\n ...((options?.sorts && { sort: options?.sorts }) || (options?.sort && { sort: this.coll.sort(...(options?.sort ?? [])) })),\n total: isDefined(options?.skip) || isDefined(options?.take),\n projection: options?.projection ?? { _id: 0 },\n maxTimeMS: this.withTimeout(options).maxTimeMS,\n };\n }\n\n protected toIndexSpecification(index: Indexes): IndexSpecification {\n return choose(index)\n .type(isField, f => f.property as IndexSpecification)\n .type(isSortCondition, s => s.toJSON() as IndexSpecification)\n .type(isArray, aa => aa.map(a => this.toIndexSpecification(a)) as IndexSpecification)\n .else(i => i as IndexSpecification);\n }\n\n protected toCreateIndexesOptions(options?: IndexOptions): CreateIndexesOptions {\n return {\n unique: options?.unique ?? true,\n ...(options?.languageOverride && { language_override: options.languageOverride }),\n ...(options?.languageDefault && { default_language: options.languageDefault }),\n ...(options?.filter && { partialFilterExpression: toMongoType(asJson(options.filter)) }),\n };\n }\n\n protected toArray(\n cursor: FindCursor<Document> | AggregationCursor<Document>,\n options?: { take?: number; skip?: number; total?: number }\n ): Promise<PageList<Json>> {\n return cursor.toArray().then(r => toPageList<Json>(r, options));\n }\n}\n"],"mappings":"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","names":["c"]}
@@ -1,155 +0,0 @@
1
- import {
2
- toMongoType
3
- } from "./chunk-MZE7UWQC.mjs";
4
-
5
- // src/Stages.ts
6
- import {
7
- asNumber,
8
- asString,
9
- ifDefined,
10
- ifNotEmpty,
11
- isDefined,
12
- isPresent,
13
- isPrimitive,
14
- isString,
15
- meta,
16
- ofGet,
17
- on,
18
- toArray,
19
- use
20
- } from "@thisisagile/easy";
21
- var asc = 1;
22
- var desc = -1;
23
- var FilterBuilder = class {
24
- constructor(filters) {
25
- this.filters = filters;
26
- }
27
- from = (q = {}) => stages.match.match(
28
- meta(q).entries().reduce((acc, [key, value]) => ({ ...acc, ...ifDefined(this.filters[key], (f) => f(value)) }), {})
29
- );
30
- };
31
- var SortBuilder = class {
32
- constructor(sorts) {
33
- this.sorts = sorts;
34
- }
35
- get keys() {
36
- return Object.keys(this.sorts);
37
- }
38
- from = (s = {}, alt) => stages.sort.sort(this.sorts[s?.s ?? ""] ?? this.sorts[alt ?? ""]);
39
- };
40
- var IncludeBuilder = class {
41
- constructor(includes) {
42
- this.includes = includes;
43
- }
44
- get keys() {
45
- return Object.keys(this.includes);
46
- }
47
- from = (i = {}, alt) => stages.project.include(...this.includes[i?.i ?? ""] ?? this.includes[alt ?? ""] ?? []);
48
- };
49
- var escapeRegex = (s) => s.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
50
- var stages = {
51
- root: "$$ROOT",
52
- current: "$$CURRENT",
53
- id: "_id",
54
- decode: {
55
- object: (f) => use(Object.entries(f)[0], ([k, v]) => ofGet(v, k)),
56
- fields: (f) => Object.entries(f).reduce((res, [k, v]) => on(res, (r) => ifDefined(ofGet(v, k), (nv) => r[k] = nv)), {}),
57
- fieldsArrays: (f) => Object.entries(f).reduce((res, [k, v]) => on(res, (r) => r[k] = use(toArray(v), (vs) => vs.map((v2) => ofGet(v2, k)))), {}),
58
- id: (f) => isString(f) ? `$${asString(f)}` : isPrimitive(f) ? f : Object.entries(f).map(([k, v]) => ofGet(v, k))[0]
59
- },
60
- match: {
61
- match: (f) => ({ $match: stages.decode.fields(f) }),
62
- filter: (filters) => new FilterBuilder(filters),
63
- or: (...filters) => ({ $or: toArray(filters).map((f) => stages.decode.object(f)) }),
64
- gt: (value) => ({ $gt: value }),
65
- gte: (value) => ({ $gte: value }),
66
- lt: (value) => ({ $lt: value }),
67
- lte: (value) => ({ $lte: value }),
68
- isIn: (value, separator = ",") => ({ $in: isString(value) ? value.split(separator) : value }),
69
- notIn: (value, separator = ",") => ({ $nin: isString(value) ? value.split(separator) : value }),
70
- after: (date) => stages.match.gte(toMongoType(date)),
71
- before: (date) => stages.match.lt(toMongoType(date)),
72
- anywhere: (q) => ({ $regex: escapeRegex(q), $options: "i" }),
73
- money: (currency, value) => (key) => ({
74
- [`${key}.currency`]: currency.id,
75
- ...stages.decode.fields({ [`${key}.value`]: value })
76
- })
77
- },
78
- sort: {
79
- sort: ($sort) => isPresent($sort) ? { $sort } : void 0,
80
- sorter: (sorts) => new SortBuilder(sorts),
81
- asc: (key) => stages.sort.sort({ [key]: asc }),
82
- desc: (key) => stages.sort.sort({ [key]: desc })
83
- },
84
- group: {
85
- group: (fields) => ({
86
- by: (by) => ({ $group: Object.assign({ _id: stages.decode.id(by) }, stages.decode.fields(fields)) })
87
- }),
88
- date: (format = "%Y-%m-%d") => (key) => ({ $dateToString: { date: `$${key}`, format } }),
89
- count: () => ({ $count: {} }),
90
- sum: (from) => isDefined(from) ? { $sum: `$${from}` } : { $sum: 1 },
91
- avg: (from) => ({ $avg: `$${from}` }),
92
- multiply: (...multiply) => ({ $multiply: multiply.map((m) => `$${m}`) }),
93
- first: (from) => ({ $first: `$${from}` }),
94
- last: (from) => ({ $last: `$${from}` }),
95
- min: (from) => ({ $min: `$${from}` }),
96
- max: (from) => ({ $max: `$${from}` }),
97
- addToSet: (from) => ({ $addToSet: `$${from}` }),
98
- push: (from = "$ROOT") => ({ $push: `$${from}` }),
99
- size: (from) => ({ $size: `$${from}` })
100
- },
101
- search: {
102
- search: (f) => ifDefined(stages.decode.id(f), ($search) => ({ $search })),
103
- auto: (value) => (key) => ifDefined(value, (v) => ({ autocomplete: { path: key, query: [v] } })),
104
- fuzzy: (value, maxEdits = 1) => (key) => ifDefined(value, (v) => ({
105
- text: {
106
- query: v,
107
- path: key === "wildcard" ? { wildcard: "*" } : key,
108
- fuzzy: { maxEdits }
109
- }
110
- }))
111
- },
112
- set: {
113
- set: (f) => ({ $set: stages.decode.fields(f) }),
114
- score: () => ({ $meta: "searchScore" })
115
- },
116
- skip: {
117
- skip: (o = {}) => ifDefined(o.skip, { $skip: asNumber(o.skip) }),
118
- take: (o = {}) => ifDefined(o.take, { $limit: asNumber(o.take) })
119
- },
120
- project: {
121
- include: (...includes) => ifNotEmpty(includes, (es) => ({ $project: es.reduce((a, b) => ({ ...a, ...isString(b) ? { [b]: 1 } : b }), {}) })),
122
- exclude: (...excludes) => ifNotEmpty(excludes, (es) => ({ $project: es.reduce((a, b) => ({ ...a, ...isString(b) ? { [b]: 0 } : b }), {}) })),
123
- includes: (includes) => new IncludeBuilder(includes),
124
- project: (project) => ifDefined(project, ($project) => ({ $project })),
125
- date: (key, format) => ({ $toDate: `$${key}`, ...ifDefined(format, { format }) }),
126
- duration: (from, to) => ({ $divide: [{ $subtract: [stages.project.date(from), stages.project.date(to)] }, 1e3] })
127
- },
128
- replaceWith: {
129
- replaceWith: (f) => ifDefined(f, { $replaceWith: f }),
130
- merge: (...objects) => ifNotEmpty(objects, (os) => ({ $mergeObjects: os })),
131
- rootAnd: (...objects) => stages.replaceWith.merge(stages.root, ...objects),
132
- currentAnd: (...objects) => stages.replaceWith.merge(stages.current, ...objects),
133
- reroot: (prop) => ({ $replaceRoot: { newRoot: `$${prop}` } }),
134
- concat: (...props) => ifNotEmpty(props, (ps) => ({ $concatArrays: ps.map((p) => `$${p}`) }))
135
- },
136
- facet: {
137
- facet: (f) => ({ $facet: stages.decode.fieldsArrays(f) }),
138
- unwind: (from) => (f) => ({ $unwind: `$${from ?? f}` }),
139
- count: (from) => (f) => ({ $sortByCount: `$${from ?? f}` }),
140
- data: () => []
141
- },
142
- unwind: {
143
- unwind: (prop) => ({ $unwind: `$${prop}` })
144
- }
145
- };
146
-
147
- export {
148
- asc,
149
- desc,
150
- FilterBuilder,
151
- SortBuilder,
152
- IncludeBuilder,
153
- stages
154
- };
155
- //# sourceMappingURL=chunk-WEJO6T5Q.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/Stages.ts"],"sourcesContent":["import { Filter, FindOptions } from './MongoProvider';\nimport {\n asNumber,\n asString,\n Currency,\n Get,\n Id,\n ifDefined,\n ifNotEmpty,\n isDefined,\n isPresent,\n isPrimitive,\n isString,\n meta,\n ofGet,\n on,\n OneOrMore,\n Optional,\n PartialRecord,\n toArray,\n use,\n} from '@thisisagile/easy';\nimport { toMongoType } from './Utils';\n\nexport const asc = 1;\nexport const desc = -1;\nexport type Accumulators = '$sum' | '$count' | '$multiply' | '$avg' | '$first' | '$last' | '$min' | '$max' | '$push' | '$addToSet' | '$size';\nexport type Accumulator = PartialRecord<Accumulators, Filter>;\n\nexport class FilterBuilder<Options> {\n constructor(private filters: { [K in keyof Options]: (v: Options[K]) => Filter }) {}\n\n from = (q: Partial<Options> = {}): Filter =>\n stages.match.match(\n meta(q)\n .entries()\n .reduce((acc, [key, value]) => ({ ...acc, ...ifDefined(this.filters[key as keyof Options], f => f(value as Options[keyof Options])) }), {})\n );\n}\n\ntype Sort = Record<string, typeof asc | typeof desc>;\n\nexport class SortBuilder {\n constructor(private sorts: Record<string, Sort>) {}\n\n get keys(): string[] {\n return Object.keys(this.sorts);\n }\n\n from = (\n s: {\n s?: string;\n } = {},\n alt?: string\n ): Optional<Filter> => stages.sort.sort(this.sorts[s?.s ?? ''] ?? this.sorts[alt ?? '']);\n}\n\nexport class IncludeBuilder {\n constructor(private includes: Record<string, (string | Record<string, 1>)[]>) {}\n\n get keys(): string[] {\n return Object.keys(this.includes);\n }\n\n from = (\n i: {\n i?: string;\n } = {},\n alt?: string\n ): Optional<Filter> => stages.project.include(...(this.includes[i?.i ?? ''] ?? this.includes[alt ?? ''] ?? []));\n}\n\nconst escapeRegex = (s: string) => s.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d');\n\nexport const stages = {\n root: '$$ROOT',\n current: '$$CURRENT',\n id: '_id',\n decode: {\n object: (f: Filter) => use(Object.entries(f)[0], ([k, v]) => ofGet(v, k)),\n fields: (f: Filter) => Object.entries(f).reduce((res, [k, v]) => on(res, r => ifDefined(ofGet(v, k), nv => (r[k] = nv))), {} as any),\n fieldsArrays: (f: Filter) => Object.entries(f).reduce((res, [k, v]) => on(res, r => (r[k] = use(toArray(v), vs => vs.map(v => ofGet(v, k))))), {} as any),\n id: (f: Filter | string) => (isString(f) ? `$${asString(f)}` : isPrimitive(f) ? f : Object.entries(f).map(([k, v]) => ofGet(v, k))[0]),\n },\n match: {\n match: (f: Record<string, Get<Optional<Filter>, string>>) => ({ $match: stages.decode.fields(f) }),\n filter: <Options>(filters: { [K in keyof Options]: (v: Options[K]) => Filter }) => new FilterBuilder<Options>(filters),\n or: (...filters: Filter[]) => ({ $or: toArray(filters).map(f => stages.decode.object(f)) }),\n gt: (value: Filter) => ({ $gt: value }),\n gte: (value: Filter) => ({ $gte: value }),\n lt: (value: Filter) => ({ $lt: value }),\n lte: (value: Filter) => ({ $lte: value }),\n isIn: (value: OneOrMore<unknown>, separator = ',') => ({ $in: isString(value) ? value.split(separator) : value }),\n notIn: (value: OneOrMore<unknown>, separator = ',') => ({ $nin: isString(value) ? value.split(separator) : value }),\n after: (date: unknown) => stages.match.gte(toMongoType(date)),\n before: (date: unknown) => stages.match.lt(toMongoType(date)),\n anywhere: (q: string) => ({ $regex: escapeRegex(q), $options: 'i' }),\n money: (currency: Currency, value: Filter) => (key: string) => ({\n [`${key}.currency`]: currency.id,\n ...stages.decode.fields({ [`${key}.value`]: value }),\n }),\n },\n sort: {\n sort: ($sort: Sort) => (isPresent($sort) ? { $sort } : undefined),\n sorter: (sorts: Record<string, Sort>) => new SortBuilder(sorts),\n asc: (key: string) => stages.sort.sort({ [key]: asc }),\n desc: (key: string) => stages.sort.sort({ [key]: desc }),\n },\n group: {\n group: (fields: Record<string, Accumulator>) => ({\n by: (by: Filter) => ({ $group: Object.assign({ _id: stages.decode.id(by) }, stages.decode.fields(fields)) }),\n }),\n date:\n (format = '%Y-%m-%d') =>\n (key: string) => ({ $dateToString: { date: `$${key}`, format } }),\n count: (): Accumulator => ({ $count: {} }),\n sum: (from?: string): Accumulator => (isDefined(from) ? { $sum: `$${from}` } : { $sum: 1 }),\n avg: (from?: string) => ({ $avg: `$${from}` }),\n multiply: (...multiply: string[]) => ({ $multiply: multiply.map(m => `$${m}`) }),\n first: (from?: string): Accumulator => ({ $first: `$${from}` }),\n last: (from?: string): Accumulator => ({ $last: `$${from}` }),\n min: (from?: string): Accumulator => ({ $min: `$${from}` }),\n max: (from?: string): Accumulator => ({ $max: `$${from}` }),\n addToSet: (from?: string): Accumulator => ({ $addToSet: `$${from}` }),\n push: (from = '$ROOT'): Accumulator => ({ $push: `$${from}` }),\n size: (from?: string): Accumulator => ({ $size: `$${from}` }),\n },\n search: {\n search: (f: Record<string, Get<Filter, string>>) => ifDefined(stages.decode.id(f), $search => ({ $search })),\n auto: (value?: Id) => (key: string) => ifDefined(value, v => ({ autocomplete: { path: key, query: [v] } })),\n fuzzy:\n (value?: string, maxEdits = 1) =>\n (key?: string) =>\n ifDefined(value, v => ({\n text: {\n query: v,\n path: key === 'wildcard' ? { wildcard: '*' } : key,\n fuzzy: { maxEdits },\n },\n })),\n },\n set: {\n set: (f: Record<string, Get<Filter, string>>) => ({ $set: stages.decode.fields(f) }),\n score: () => ({ $meta: 'searchScore' }),\n },\n skip: {\n skip: (o: FindOptions = {}): Optional<Filter> => ifDefined(o.skip, { $skip: asNumber(o.skip) }),\n take: (o: FindOptions = {}): Optional<Filter> => ifDefined(o.take, { $limit: asNumber(o.take) }),\n },\n project: {\n include: (...includes: (string | Record<string, 1 | string>)[]): Optional<Filter> =>\n ifNotEmpty(includes, es => ({ $project: es.reduce((a: Filter, b: Filter) => ({ ...a, ...(isString(b) ? { [b]: 1 } : b) }), {}) })),\n exclude: (...excludes: (string | Record<string, 0>)[]): Optional<Filter> =>\n ifNotEmpty(excludes, es => ({ $project: es.reduce((a: Filter, b: Filter) => ({ ...a, ...(isString(b) ? { [b]: 0 } : b) }), {}) })),\n includes: (includes: Record<string, (string | Record<string, 1>)[]>) => new IncludeBuilder(includes),\n project: (project?: Filter) => ifDefined(project, $project => ({ $project })),\n date: (key: string, format?: string) => ({ $toDate: `$${key}`, ...ifDefined(format, { format }) }),\n duration: (from: string, to: string) => ({ $divide: [{ $subtract: [stages.project.date(from), stages.project.date(to)] }, 1000] }),\n },\n replaceWith: {\n replaceWith: (f?: Filter): Optional<Filter> => ifDefined(f, { $replaceWith: f }),\n merge: (...objects: Filter[]): Optional<Filter> => ifNotEmpty(objects, os => ({ $mergeObjects: os })),\n rootAnd: (...objects: Filter[]): Optional<Filter> => stages.replaceWith.merge(stages.root, ...objects),\n currentAnd: (...objects: Filter[]): Optional<Filter> => stages.replaceWith.merge(stages.current, ...objects),\n reroot: (prop: string): Filter => ({ $replaceRoot: { newRoot: `$${prop}` } }),\n concat: (...props: string[]): Optional<Filter> => ifNotEmpty(props, ps => ({ $concatArrays: ps.map(p => `$${p}`) })),\n },\n facet: {\n facet: (f: Record<string, OneOrMore<Get<Optional<Filter>, string>>>) => ({ $facet: stages.decode.fieldsArrays(f) }),\n unwind: (from?: string) => (f?: string) => ({ $unwind: `$${from ?? f}` }),\n count: (from?: string) => (f?: string) => ({ $sortByCount: `$${from ?? f}` }),\n data: () => [],\n },\n unwind: {\n unwind: (prop?: string) => ({ $unwind: `$${prop}` }),\n },\n};\n"],"mappings":"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","names":["v"]}