@thisisagile/easy-mongo 10.5.25 → 10.6.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/Collection.d.ts +2 -2
- package/dist/Collection.js.map +1 -1
- package/dist/MongoGateway.js.map +1 -1
- package/dist/MongoProvider.d.ts +6 -9
- package/dist/MongoProvider.js +12 -12
- package/dist/MongoProvider.js.map +1 -1
- package/dist/Utils.js +3 -1
- package/dist/Utils.js.map +1 -1
- package/package.json +3 -3
- package/src/Collection.ts +4 -4
- package/src/MongoGateway.ts +2 -14
- package/src/MongoProvider.ts +42 -35
- package/src/Utils.ts +11 -5
package/dist/Collection.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Condition, Database, Field, Get, Json, LogicalCondition, MapOptions, Mapper, Mapping, PropertyOptions,
|
|
1
|
+
import { Condition, Database, Field, Get, Json, LogicalCondition, MapOptions, Mapper, Mapping, PropertyOptions, Sort, Text } from '@thisisagile/easy';
|
|
2
2
|
import { MongoProvider } from './MongoProvider';
|
|
3
3
|
export declare class Collection extends Mapper {
|
|
4
4
|
protected readonly map: {
|
|
@@ -22,6 +22,6 @@ export declare class Collection extends Mapper {
|
|
|
22
22
|
group: (...conditions: Get<Condition, this>[]) => Json;
|
|
23
23
|
google: (value: unknown) => Condition;
|
|
24
24
|
search: (key: Text) => Field;
|
|
25
|
-
sort: (...conditions:
|
|
25
|
+
sort: (...conditions: Sort[]) => Json;
|
|
26
26
|
out(to?: Json): Json;
|
|
27
27
|
}
|
package/dist/Collection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Collection.js","sourceRoot":"","sources":["../src/Collection.ts"],"names":[],"mappings":";;;AAAA,4CAkB2B;AAC3B,mCAAsC;AACtC,mDAAgD;AAEhD,MAAa,UAAW,SAAQ,aAAM;IAOpC,YAAY,UAAsB,EAAE,SAAS,EAAE,QAAQ,EAAE;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QAPE,QAAG,GAAG;YACvB,GAAG,eAAQ;YACX,KAAK,EAAE,CAAc,IAAY,EAAE,OAA4B,EAAS,EAAE,CAAC,IAAI,YAAK,CAAC,IAAI,EAAE,OAAO,CAAC;SACpG,CAAC;QACO,OAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,aAAM,EAAE,CAAY,CAAC;QAchE,UAAK,GAAG,CAAC,GAAG,UAAkC,EAAQ,EAAE,CACtD,IAAI,uBAAgB,CAClB,KAAK,EACL,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,YAAK,EAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CACpC,CAAC,MAAM,EAAE,CAAC;QAEb,UAAK,GAAG,CAAC,SAAkD,EAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAA,YAAK,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAEpH,UAAK,GAAG,CAAC,GAAG,UAAkC,EAAQ,EAAE,CACtD,IAAI,uBAAgB,CAClB,OAAO,EACP,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,YAAK,EAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CACpC,CAAC,MAAM,EAAE,CAAC;QAEb,WAAM,GAAG,CAAC,KAAc,EAAa,EAAE,CAAC,IAAA,kBAAW,EAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE9E,WAAM,GAAG,CAAC,GAAS,EAAS,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAA,eAAQ,EAAC,GAAG,CAAC,CAAC,CAAC;QAE7D,SAAI,GAAG,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"Collection.js","sourceRoot":"","sources":["../src/Collection.ts"],"names":[],"mappings":";;;AAAA,4CAkB2B;AAC3B,mCAAsC;AACtC,mDAAgD;AAEhD,MAAa,UAAW,SAAQ,aAAM;IAOpC,YAAY,UAAsB,EAAE,SAAS,EAAE,QAAQ,EAAE;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QAPE,QAAG,GAAG;YACvB,GAAG,eAAQ;YACX,KAAK,EAAE,CAAc,IAAY,EAAE,OAA4B,EAAS,EAAE,CAAC,IAAI,YAAK,CAAC,IAAI,EAAE,OAAO,CAAC;SACpG,CAAC;QACO,OAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,aAAM,EAAE,CAAY,CAAC;QAchE,UAAK,GAAG,CAAC,GAAG,UAAkC,EAAQ,EAAE,CACtD,IAAI,uBAAgB,CAClB,KAAK,EACL,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,YAAK,EAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CACpC,CAAC,MAAM,EAAE,CAAC;QAEb,UAAK,GAAG,CAAC,SAAkD,EAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAA,YAAK,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAEpH,UAAK,GAAG,CAAC,GAAG,UAAkC,EAAQ,EAAE,CACtD,IAAI,uBAAgB,CAClB,OAAO,EACP,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,YAAK,EAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CACpC,CAAC,MAAM,EAAE,CAAC;QAEb,WAAM,GAAG,CAAC,KAAc,EAAa,EAAE,CAAC,IAAA,kBAAW,EAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE9E,WAAM,GAAG,CAAC,GAAS,EAAS,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAA,eAAQ,EAAC,GAAG,CAAC,CAAC,CAAC;QAE7D,SAAI,GAAG,CAAC,GAAG,UAAkB,EAAQ,EAAE,CACrC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAO,EAAE,CAAC,EAAE,EAAE;YAC/B,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YACpB,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;IAhCT,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,eAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,6BAAa,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IA0BD,GAAG,CAAC,KAAW,EAAE;QACf,OAAO,IAAA,mBAAW,EAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;CACF;AA9CD,gCA8CC"}
|
package/dist/MongoGateway.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoGateway.js","sourceRoot":"","sources":["../src/MongoGateway.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"MongoGateway.js","sourceRoot":"","sources":["../src/MongoGateway.ts"],"names":[],"mappings":";;;AACA,4CAA0J;AAG1J,MAAa,YAAY;IACvB,YAAqB,UAAsB,EAAW,WAA0B,UAAU,CAAC,QAAQ;QAA9E,eAAU,GAAV,UAAU,CAAY;QAAW,aAAQ,GAAR,QAAQ,CAAqC;IAAG,CAAC;IAEvG,GAAG,CAAC,OAAqB;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,CAAC,EAAM;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,gBAAS,EAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,EAAE,CAAC,GAAW,EAAE,KAAgB,EAAE,OAAqB;QACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,KAAK,CAAC,GAAG,GAAS;QAChB,OAAO,IAAI,CAAC,IAAI,CAAE,IAAI,CAAC,UAAU,CAAC,EAAY,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC,CAA2C,EAAE,OAAqB;QACrE,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAA,aAAM,EAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,CAAC,CAAY,EAAE,OAAqB;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,EAAM;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,gBAAS,EAAC,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,GAAG,CAAC,IAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,CAAC,IAAU;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,CAAC,EAAM;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;CACF;AA1CD,oCA0CC"}
|
package/dist/MongoProvider.d.ts
CHANGED
|
@@ -1,23 +1,20 @@
|
|
|
1
|
-
import { Condition, Database, Field, Id, Json, JsonValue, LogicalCondition, PageList, PageOptions
|
|
1
|
+
import { Condition, Database, Field, Id, Json, JsonValue, LogicalCondition, PageList, PageOptions } from '@thisisagile/easy';
|
|
2
2
|
import { Collection as MongoCollection, Filter as MongoFilter, MongoClient } from 'mongodb';
|
|
3
3
|
import { Collection } from './Collection';
|
|
4
|
-
export declare type FindOptions = PageOptions & {
|
|
5
|
-
sort?: SortCondition[];
|
|
6
|
-
};
|
|
7
4
|
export declare type Filter<T> = MongoFilter<T>;
|
|
8
5
|
export declare class MongoProvider {
|
|
9
6
|
readonly coll: Collection;
|
|
10
7
|
private client?;
|
|
8
|
+
aggregate: (qs: Filter<any>[]) => Promise<PageList<Json>>;
|
|
11
9
|
constructor(coll: Collection, client?: Promise<MongoClient> | undefined);
|
|
12
10
|
static client(db: Database): Promise<MongoClient>;
|
|
13
11
|
cluster(): Promise<MongoClient>;
|
|
14
12
|
toMongoJson(query: Condition | LogicalCondition | Filter<any>): Json;
|
|
15
|
-
find(query: Condition | LogicalCondition | Filter<any>, options?:
|
|
16
|
-
all(options?:
|
|
13
|
+
find(query: Condition | LogicalCondition | Filter<any>, options?: PageOptions): Promise<PageList<Json>>;
|
|
14
|
+
all(options?: PageOptions): Promise<PageList<Json>>;
|
|
17
15
|
byId(id: Id): Promise<Json>;
|
|
18
|
-
by(key: string, value: JsonValue, options?:
|
|
19
|
-
group(qs: Filter<any>[]): Promise<Json
|
|
20
|
-
aggregate: (qs: Filter<any>[]) => Promise<Json[]>;
|
|
16
|
+
by(key: string, value: JsonValue, options?: PageOptions): Promise<PageList<Json>>;
|
|
17
|
+
group(qs: Filter<any>[]): Promise<PageList<Json>>;
|
|
21
18
|
add(item: Json): Promise<Json>;
|
|
22
19
|
update(item: Json): Promise<Json>;
|
|
23
20
|
remove(id: Id): Promise<boolean>;
|
package/dist/MongoProvider.js
CHANGED
|
@@ -4,11 +4,13 @@ exports.MongoProvider = void 0;
|
|
|
4
4
|
const easy_1 = require("@thisisagile/easy");
|
|
5
5
|
const mongodb_1 = require("mongodb");
|
|
6
6
|
const Utils_1 = require("./Utils");
|
|
7
|
-
const omitId = (j) =>
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
const omitId = (j) => easy_1.json.delete(j, '_id');
|
|
8
|
+
const toFindOptions = (coll, po) => ({
|
|
9
|
+
limit: po?.take ?? 250,
|
|
10
|
+
skip: po?.skip,
|
|
11
|
+
sort: coll.sort(...(po?.sort ?? [])),
|
|
12
|
+
total: (0, easy_1.isDefined)(po?.skip) || (0, easy_1.isDefined)(po?.take),
|
|
13
|
+
});
|
|
12
14
|
class MongoProvider {
|
|
13
15
|
constructor(coll, client) {
|
|
14
16
|
this.coll = coll;
|
|
@@ -37,14 +39,11 @@ class MongoProvider {
|
|
|
37
39
|
return (0, Utils_1.toMongoType)((0, easy_1.asJson)(query));
|
|
38
40
|
}
|
|
39
41
|
find(query, options) {
|
|
40
|
-
return
|
|
41
|
-
.then(
|
|
42
|
-
.then(o => easy_1.json.omit(o, 'take'))
|
|
43
|
-
.then(o => (0, easy_1.tuple2)(this.collection(), o))
|
|
44
|
-
.then(([c, o]) => c.find(this.toMongoJson(query), o))
|
|
42
|
+
return this.collection()
|
|
43
|
+
.then(c => c.find(this.toMongoJson(query), toFindOptions(this.coll, options)))
|
|
45
44
|
.then(res => res.toArray())
|
|
46
45
|
.then(res => res.map(i => omitId(i)))
|
|
47
|
-
.then(res => (0, easy_1.
|
|
46
|
+
.then(res => (0, easy_1.toPageList)(res, options));
|
|
48
47
|
}
|
|
49
48
|
all(options) {
|
|
50
49
|
return this.find({}, options);
|
|
@@ -60,7 +59,8 @@ class MongoProvider {
|
|
|
60
59
|
group(qs) {
|
|
61
60
|
return this.collection()
|
|
62
61
|
.then(c => c.aggregate(qs.map(q => this.toMongoJson(q))))
|
|
63
|
-
.then(res => res.toArray())
|
|
62
|
+
.then(res => res.toArray())
|
|
63
|
+
.then(res => (0, easy_1.toPageList)(res));
|
|
64
64
|
}
|
|
65
65
|
add(item) {
|
|
66
66
|
return this.collection()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoProvider.js","sourceRoot":"","sources":["../src/MongoProvider.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"MongoProvider.js","sourceRoot":"","sources":["../src/MongoProvider.ts"],"names":[],"mappings":"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"}
|
package/dist/Utils.js
CHANGED
|
@@ -6,7 +6,9 @@ const toMongoType = (input) => (0, easy_1.choose)(input)
|
|
|
6
6
|
.type(easy_1.isIsoDateString, i => new easy_1.DateTime(i).toDate())
|
|
7
7
|
.type(easy_1.isArray, a => a.map((i) => (0, exports.toMongoType)(i)))
|
|
8
8
|
.type(easy_1.isDate, d => d)
|
|
9
|
-
.type(easy_1.isObject, o => Object.fromEntries((0, easy_1.meta)(o)
|
|
9
|
+
.type(easy_1.isObject, o => Object.fromEntries((0, easy_1.meta)(o)
|
|
10
|
+
.entries()
|
|
11
|
+
.map(([k, i]) => [k, (0, exports.toMongoType)(i)])))
|
|
10
12
|
.else(input);
|
|
11
13
|
exports.toMongoType = toMongoType;
|
|
12
14
|
//# sourceMappingURL=Utils.js.map
|
package/dist/Utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../src/Utils.ts"],"names":[],"mappings":";;;AAAA,4CAA6G;AAEtG,MAAM,WAAW,GAAG,CAAC,KAAc,EAAQ,EAAE,CAClD,IAAA,aAAM,EAAC,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../src/Utils.ts"],"names":[],"mappings":";;;AAAA,4CAA6G;AAEtG,MAAM,WAAW,GAAG,CAAC,KAAc,EAAQ,EAAE,CAClD,IAAA,aAAM,EAAC,KAAK,CAAC;KACV,IAAI,CAAC,sBAAe,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,eAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAS,CAAC;KAC3D,IAAI,CAAC,cAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,IAAA,mBAAW,EAAC,CAAC,CAAC,CAAC,CAAC;KACrD,IAAI,CAAC,aAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACpB,IAAI,CAAC,eAAQ,EAAE,CAAC,CAAC,EAAE,CAClB,MAAM,CAAC,WAAW,CAChB,IAAA,WAAI,EAAC,CAAC,CAAC;KACJ,OAAO,EAAE;KACT,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAA,mBAAW,EAAC,CAAC,CAAC,CAAC,CAAC,CACxC,CACF;KACA,IAAI,CAAC,KAAK,CAAC,CAAC;AAZJ,QAAA,WAAW,eAYP"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thisisagile/easy-mongo",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.6.3",
|
|
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": "10.
|
|
34
|
+
"@thisisagile/easy-test": "10.6.3"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@thisisagile/easy": "10.
|
|
37
|
+
"@thisisagile/easy": "10.6.3",
|
|
38
38
|
"mongodb": "^4.5.0"
|
|
39
39
|
}
|
|
40
40
|
}
|
package/src/Collection.ts
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
mappings,
|
|
13
13
|
ofGet,
|
|
14
14
|
PropertyOptions,
|
|
15
|
-
|
|
15
|
+
Sort,
|
|
16
16
|
Text,
|
|
17
17
|
toCondition,
|
|
18
18
|
toUuid,
|
|
@@ -42,7 +42,7 @@ export class Collection extends Mapper {
|
|
|
42
42
|
where = (...conditions: Get<Condition, this>[]): Json =>
|
|
43
43
|
new LogicalCondition(
|
|
44
44
|
'and',
|
|
45
|
-
conditions.map(c => ofGet(c, this))
|
|
45
|
+
conditions.map(c => ofGet(c, this)),
|
|
46
46
|
).toJSON();
|
|
47
47
|
|
|
48
48
|
match = (condition: Get<Condition | LogicalCondition, this>): Json => ({ $match: ofGet(condition, this).toJSON() });
|
|
@@ -50,14 +50,14 @@ export class Collection extends Mapper {
|
|
|
50
50
|
group = (...conditions: Get<Condition, this>[]): Json =>
|
|
51
51
|
new LogicalCondition(
|
|
52
52
|
'group',
|
|
53
|
-
conditions.map(c => ofGet(c, this))
|
|
53
|
+
conditions.map(c => ofGet(c, this)),
|
|
54
54
|
).toJSON();
|
|
55
55
|
|
|
56
56
|
google = (value: unknown): Condition => toCondition('$text', 'search', value);
|
|
57
57
|
|
|
58
58
|
search = (key: Text): Field => this.map.field(asString(key));
|
|
59
59
|
|
|
60
|
-
sort = (...conditions:
|
|
60
|
+
sort = (...conditions: Sort[]): Json =>
|
|
61
61
|
conditions.reduce((cs: any, c) => {
|
|
62
62
|
cs[c.key] = c.value;
|
|
63
63
|
return cs;
|
package/src/MongoGateway.ts
CHANGED
|
@@ -1,21 +1,9 @@
|
|
|
1
1
|
import { MongoProvider } from './MongoProvider';
|
|
2
|
-
import {
|
|
3
|
-
asJson,
|
|
4
|
-
Condition,
|
|
5
|
-
Field,
|
|
6
|
-
Gateway,
|
|
7
|
-
Id,
|
|
8
|
-
ifDefined,
|
|
9
|
-
isDefined,
|
|
10
|
-
Json,
|
|
11
|
-
JsonValue,
|
|
12
|
-
LogicalCondition, PageList, PageOptions,
|
|
13
|
-
} from '@thisisagile/easy';
|
|
2
|
+
import { asJson, Condition, Field, Gateway, Id, ifDefined, isDefined, Json, JsonValue, LogicalCondition, PageList, PageOptions } from '@thisisagile/easy';
|
|
14
3
|
import { Collection } from './Collection';
|
|
15
4
|
|
|
16
5
|
export class MongoGateway implements Gateway {
|
|
17
|
-
constructor(readonly collection: Collection, readonly provider: MongoProvider = collection.provider) {
|
|
18
|
-
}
|
|
6
|
+
constructor(readonly collection: Collection, readonly provider: MongoProvider = collection.provider) {}
|
|
19
7
|
|
|
20
8
|
all(options?: PageOptions): Promise<PageList<Json>> {
|
|
21
9
|
return this.provider.all(options).then(l => l.map(j => this.collection.in(j)));
|
package/src/MongoProvider.ts
CHANGED
|
@@ -6,45 +6,54 @@ import {
|
|
|
6
6
|
Exception,
|
|
7
7
|
Field,
|
|
8
8
|
Id,
|
|
9
|
-
isDefined,
|
|
10
|
-
json,
|
|
9
|
+
isDefined, json,
|
|
11
10
|
Json,
|
|
12
11
|
JsonValue,
|
|
13
12
|
LogicalCondition,
|
|
14
13
|
PageList,
|
|
15
14
|
PageOptions,
|
|
16
15
|
reject,
|
|
17
|
-
|
|
18
|
-
SortCondition,
|
|
19
|
-
toList, tuple2,
|
|
16
|
+
toPageList,
|
|
20
17
|
when,
|
|
21
18
|
} from '@thisisagile/easy';
|
|
22
|
-
import { Collection as MongoCollection, Filter as MongoFilter, MongoClient } from 'mongodb';
|
|
19
|
+
import { Collection as MongoCollection, Filter as MongoFilter, FindOptions, MongoClient } from 'mongodb';
|
|
23
20
|
import { Collection } from './Collection';
|
|
24
21
|
import { toMongoType } from './Utils';
|
|
25
22
|
|
|
26
|
-
const omitId = (j: Json): Json =>
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
23
|
+
const omitId = (j: Json): Json => json.delete(j, '_id');
|
|
24
|
+
//
|
|
25
|
+
// {
|
|
26
|
+
// if (isDefined(j)) delete j._id;
|
|
27
|
+
// return j;
|
|
28
|
+
// };
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
const toFindOptions = (coll: Collection, po?: PageOptions): FindOptions & { total: boolean } => ({
|
|
31
|
+
limit: po?.take ?? 250,
|
|
32
|
+
skip: po?.skip,
|
|
33
|
+
sort: coll.sort(...(po?.sort ?? [])) as any,
|
|
34
|
+
total: isDefined(po?.skip) || isDefined(po?.take),
|
|
35
|
+
});
|
|
32
36
|
|
|
33
37
|
export type Filter<T> = MongoFilter<T>;
|
|
34
38
|
|
|
35
39
|
export class MongoProvider {
|
|
40
|
+
aggregate = this.group;
|
|
41
|
+
|
|
36
42
|
constructor(readonly coll: Collection, private client?: Promise<MongoClient>) {
|
|
37
43
|
}
|
|
38
44
|
|
|
39
45
|
static client(db: Database): Promise<MongoClient> {
|
|
40
46
|
return when(db.options?.cluster)
|
|
41
47
|
.not.isDefined.reject(Exception.IsNotValid.because('Missing cluster in database options.'))
|
|
42
|
-
.then(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
.then(
|
|
49
|
+
u =>
|
|
50
|
+
new MongoClient(u, {
|
|
51
|
+
auth: {
|
|
52
|
+
username: asString(db.options?.user),
|
|
53
|
+
password: asString(db.options?.password),
|
|
54
|
+
},
|
|
55
|
+
}),
|
|
56
|
+
);
|
|
48
57
|
}
|
|
49
58
|
|
|
50
59
|
cluster(): Promise<MongoClient> {
|
|
@@ -60,18 +69,15 @@ export class MongoProvider {
|
|
|
60
69
|
return toMongoType(asJson(query));
|
|
61
70
|
}
|
|
62
71
|
|
|
63
|
-
find(query: Condition | LogicalCondition | Filter<any>, options?:
|
|
64
|
-
return
|
|
65
|
-
.then(
|
|
66
|
-
.then(o => json.omit(o, 'take'))
|
|
67
|
-
.then(o => tuple2(this.collection(), o))
|
|
68
|
-
.then(([c, o]) => c.find(this.toMongoJson(query), o))
|
|
72
|
+
find(query: Condition | LogicalCondition | Filter<any>, options?: PageOptions): Promise<PageList<Json>> {
|
|
73
|
+
return this.collection()
|
|
74
|
+
.then(c => c.find(this.toMongoJson(query), toFindOptions(this.coll, options)))
|
|
69
75
|
.then(res => res.toArray())
|
|
70
76
|
.then(res => res.map(i => omitId(i)))
|
|
71
|
-
.then(res =>
|
|
77
|
+
.then(res => toPageList(res, options));
|
|
72
78
|
}
|
|
73
79
|
|
|
74
|
-
all(options?:
|
|
80
|
+
all(options?: PageOptions): Promise<PageList<Json>> {
|
|
75
81
|
return this.find({}, options);
|
|
76
82
|
}
|
|
77
83
|
|
|
@@ -81,18 +87,17 @@ export class MongoProvider {
|
|
|
81
87
|
.then(i => omitId(i as Json));
|
|
82
88
|
}
|
|
83
89
|
|
|
84
|
-
by(key: string, value: JsonValue, options?:
|
|
90
|
+
by(key: string, value: JsonValue, options?: PageOptions): Promise<PageList<Json>> {
|
|
85
91
|
return this.find({ [key]: asString(value) }, options);
|
|
86
92
|
}
|
|
87
93
|
|
|
88
|
-
group(qs: Filter<any>[]): Promise<Json
|
|
94
|
+
group(qs: Filter<any>[]): Promise<PageList<Json>> {
|
|
89
95
|
return this.collection()
|
|
90
96
|
.then(c => c.aggregate(qs.map(q => this.toMongoJson(q))))
|
|
91
|
-
.then(res => res.toArray())
|
|
97
|
+
.then(res => res.toArray())
|
|
98
|
+
.then(res => toPageList( res ));
|
|
92
99
|
}
|
|
93
100
|
|
|
94
|
-
aggregate = this.group;
|
|
95
|
-
|
|
96
101
|
add(item: Json): Promise<Json> {
|
|
97
102
|
return this.collection()
|
|
98
103
|
.then(c => c.insertOne(omitId(item)))
|
|
@@ -120,11 +125,13 @@ export class MongoProvider {
|
|
|
120
125
|
}
|
|
121
126
|
|
|
122
127
|
createPartialIndex(field: string | any, filter: Condition | LogicalCondition | Filter<any>, unique = true): Promise<string> {
|
|
123
|
-
return this.collection().then(c =>
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
+
return this.collection().then(c =>
|
|
129
|
+
c.createIndex(field, {
|
|
130
|
+
partialFilterExpression: toMongoType(asJson(filter)),
|
|
131
|
+
unique,
|
|
132
|
+
writeConcern: { w: 1 },
|
|
133
|
+
}),
|
|
134
|
+
);
|
|
128
135
|
}
|
|
129
136
|
|
|
130
137
|
createTextIndexes(...fields: Field[]): Promise<string> {
|
package/src/Utils.ts
CHANGED
|
@@ -2,8 +2,14 @@ import { choose, DateTime, isArray, isDate, isIsoDateString, isObject, Json, met
|
|
|
2
2
|
|
|
3
3
|
export const toMongoType = (input: unknown): Json =>
|
|
4
4
|
choose(input)
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
.type(isIsoDateString, i => new DateTime(i).toDate() as any)
|
|
6
|
+
.type(isArray, a => a.map((i: any) => toMongoType(i)))
|
|
7
|
+
.type(isDate, d => d)
|
|
8
|
+
.type(isObject, o =>
|
|
9
|
+
Object.fromEntries(
|
|
10
|
+
meta(o)
|
|
11
|
+
.entries()
|
|
12
|
+
.map(([k, i]) => [k, toMongoType(i)])
|
|
13
|
+
)
|
|
14
|
+
)
|
|
15
|
+
.else(input);
|