@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.
- package/dist/index.mjs +587 -7
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/dist/AtlasSearchGateway.mjs +0 -59
- package/dist/AtlasSearchGateway.mjs.map +0 -1
- package/dist/Collection.mjs +0 -57
- package/dist/Collection.mjs.map +0 -1
- package/dist/Lucene.mjs +0 -8
- package/dist/Lucene.mjs.map +0 -1
- package/dist/MongoGateway.mjs +0 -9
- package/dist/MongoGateway.mjs.map +0 -1
- package/dist/MongoProvider.mjs +0 -8
- package/dist/MongoProvider.mjs.map +0 -1
- package/dist/Stages.mjs +0 -18
- package/dist/Stages.mjs.map +0 -1
- package/dist/Utils.mjs +0 -7
- package/dist/Utils.mjs.map +0 -1
- package/dist/chunk-GFBKWYDV.mjs +0 -65
- package/dist/chunk-GFBKWYDV.mjs.map +0 -1
- package/dist/chunk-J3OXGWPD.mjs +0 -129
- package/dist/chunk-J3OXGWPD.mjs.map +0 -1
- package/dist/chunk-MZE7UWQC.mjs +0 -13
- package/dist/chunk-MZE7UWQC.mjs.map +0 -1
- package/dist/chunk-P372VCR6.mjs +0 -157
- package/dist/chunk-P372VCR6.mjs.map +0 -1
- package/dist/chunk-WEJO6T5Q.mjs +0 -155
- package/dist/chunk-WEJO6T5Q.mjs.map +0 -1
package/dist/chunk-P372VCR6.mjs
DELETED
|
@@ -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"]}
|
package/dist/chunk-WEJO6T5Q.mjs
DELETED
|
@@ -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"]}
|