@thisisagile/easy-mongo 10.5.20 → 10.5.25

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.
@@ -8,22 +8,22 @@ class MongoGateway {
8
8
  this.provider = provider;
9
9
  }
10
10
  all(options) {
11
- return this.provider.all().then(l => l.map(j => this.collection.in(j)));
11
+ return this.provider.all(options).then(l => l.map(j => this.collection.in(j)));
12
12
  }
13
13
  byId(id) {
14
14
  return this.provider.byId(id).then(j => (0, easy_1.ifDefined)(j, this.collection.in(j)));
15
15
  }
16
16
  by(key, value, options) {
17
- return this.provider.by(key, value).then(l => l.map(j => this.collection.in(j)));
17
+ return this.provider.by(key, value, options).then(l => l.map(j => this.collection.in(j)));
18
18
  }
19
19
  byIds(...ids) {
20
20
  return this.find(this.collection.id.isIn(...ids));
21
21
  }
22
22
  find(q, options) {
23
- return this.provider.find((0, easy_1.asJson)(q)).then(l => l.map(j => this.collection.in(j)));
23
+ return this.provider.find((0, easy_1.asJson)(q), options).then(l => l.map(j => this.collection.in(j)));
24
24
  }
25
25
  search(q, options) {
26
- return this.find(this.collection.google(q));
26
+ return this.find(this.collection.google(q), options);
27
27
  }
28
28
  exists(id) {
29
29
  return this.provider.byId(id).then(i => (0, easy_1.isDefined)(i));
@@ -1 +1 @@
1
- {"version":3,"file":"MongoGateway.js","sourceRoot":"","sources":["../src/MongoGateway.ts"],"names":[],"mappings":";;;AACA,4CAW2B;AAG3B,MAAa,YAAY;IACvB,YAAqB,UAAsB,EAAW,WAA0B,UAAU,CAAC,QAAQ;QAA9E,eAAU,GAAV,UAAU,CAAY;QAAW,aAAQ,GAAR,QAAQ,CAAqC;IACnG,CAAC;IAED,GAAG,CAAC,OAAqB;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,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;IAC1E,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,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;IACnF,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,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;IACpF,CAAC;IAED,MAAM,CAAC,CAAY,EAAE,OAAqB;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,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;AA3CD,oCA2CC"}
1
+ {"version":3,"file":"MongoGateway.js","sourceRoot":"","sources":["../src/MongoGateway.ts"],"names":[],"mappings":";;;AACA,4CAW2B;AAG3B,MAAa,YAAY;IACvB,YAAqB,UAAsB,EAAW,WAA0B,UAAU,CAAC,QAAQ;QAA9E,eAAU,GAAV,UAAU,CAAY;QAAW,aAAQ,GAAR,QAAQ,CAAqC;IACnG,CAAC;IAED,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;AA3CD,oCA2CC"}
@@ -1,9 +1,7 @@
1
- import { Condition, Database, Field, Id, Json, JsonValue, List, LogicalCondition, SortCondition } from '@thisisagile/easy';
1
+ import { Condition, Database, Field, Id, Json, JsonValue, LogicalCondition, PageList, PageOptions, SortCondition } 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 = {
5
- limit?: number;
6
- skip?: number;
4
+ export declare type FindOptions = PageOptions & {
7
5
  sort?: SortCondition[];
8
6
  };
9
7
  export declare type Filter<T> = MongoFilter<T>;
@@ -14,10 +12,10 @@ export declare class MongoProvider {
14
12
  static client(db: Database): Promise<MongoClient>;
15
13
  cluster(): Promise<MongoClient>;
16
14
  toMongoJson(query: Condition | LogicalCondition | Filter<any>): Json;
17
- find(query: Condition | LogicalCondition | Filter<any>, options?: FindOptions): Promise<List<Json>>;
18
- all(options?: FindOptions): Promise<List<Json>>;
15
+ find(query: Condition | LogicalCondition | Filter<any>, options?: FindOptions): Promise<PageList<Json>>;
16
+ all(options?: FindOptions): Promise<PageList<Json>>;
19
17
  byId(id: Id): Promise<Json>;
20
- by(key: string, value: JsonValue, options?: FindOptions): Promise<List<Json>>;
18
+ by(key: string, value: JsonValue, options?: FindOptions): Promise<PageList<Json>>;
21
19
  group(qs: Filter<any>[]): Promise<Json[]>;
22
20
  aggregate: (qs: Filter<any>[]) => Promise<Json[]>;
23
21
  add(item: Json): Promise<Json>;
@@ -18,7 +18,12 @@ class MongoProvider {
18
18
  static client(db) {
19
19
  return (0, easy_1.when)(db.options?.cluster)
20
20
  .not.isDefined.reject(easy_1.Exception.IsNotValid.because('Missing cluster in database options.'))
21
- .then(u => new mongodb_1.MongoClient(u, { auth: { username: (0, easy_1.asString)(db.options?.user), password: (0, easy_1.asString)(db.options?.password) } }));
21
+ .then(u => new mongodb_1.MongoClient(u, {
22
+ auth: {
23
+ username: (0, easy_1.asString)(db.options?.user),
24
+ password: (0, easy_1.asString)(db.options?.password),
25
+ },
26
+ }));
22
27
  }
23
28
  cluster() {
24
29
  return Promise.resolve()
@@ -31,9 +36,12 @@ class MongoProvider {
31
36
  toMongoJson(query) {
32
37
  return (0, Utils_1.toMongoType)((0, easy_1.asJson)(query));
33
38
  }
34
- find(query, options = { limit: 250 }) {
35
- return this.collection()
36
- .then(c => c.find(this.toMongoJson(query), { ...options, limit: options.limit ?? 250, sort: this.coll.sort(...(options.sort ?? [])) }))
39
+ find(query, options) {
40
+ return (0, easy_1.resolve)(easy_1.json.merge({ take: 250 }, options))
41
+ .then(o => easy_1.json.merge(o, { limit: o.take, sort: this.coll.sort(...(options?.sort ?? [])) }))
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))
37
45
  .then(res => res.toArray())
38
46
  .then(res => res.map(i => omitId(i)))
39
47
  .then(res => (0, easy_1.toList)(res));
@@ -76,7 +84,11 @@ class MongoProvider {
76
84
  return this.collection().then(c => c.createIndex(field, { unique, writeConcern: { w: 1 } }));
77
85
  }
78
86
  createPartialIndex(field, filter, unique = true) {
79
- return this.collection().then(c => c.createIndex(field, { partialFilterExpression: (0, Utils_1.toMongoType)((0, easy_1.asJson)(filter)), unique, writeConcern: { w: 1 } }));
87
+ return this.collection().then(c => c.createIndex(field, {
88
+ partialFilterExpression: (0, Utils_1.toMongoType)((0, easy_1.asJson)(filter)),
89
+ unique,
90
+ writeConcern: { w: 1 },
91
+ }));
80
92
  }
81
93
  createTextIndexes(...fields) {
82
94
  const indexes = fields.reduce((i, f) => ({ ...i, [f.property]: 'text' }), {});
@@ -1 +1 @@
1
- {"version":3,"file":"MongoProvider.js","sourceRoot":"","sources":["../src/MongoProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MongoProvider.js","sourceRoot":"","sources":["../src/MongoProvider.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": "10.5.20",
3
+ "version": "10.5.25",
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.5.20"
34
+ "@thisisagile/easy-test": "10.5.25"
35
35
  },
36
36
  "dependencies": {
37
- "@thisisagile/easy": "10.5.20",
37
+ "@thisisagile/easy": "10.5.25",
38
38
  "mongodb": "^4.5.0"
39
39
  }
40
40
  }
@@ -18,7 +18,7 @@ export class MongoGateway implements Gateway {
18
18
  }
19
19
 
20
20
  all(options?: PageOptions): Promise<PageList<Json>> {
21
- return this.provider.all().then(l => l.map(j => this.collection.in(j)));
21
+ return this.provider.all(options).then(l => l.map(j => this.collection.in(j)));
22
22
  }
23
23
 
24
24
  byId(id: Id): Promise<Json | undefined> {
@@ -26,7 +26,7 @@ export class MongoGateway implements Gateway {
26
26
  }
27
27
 
28
28
  by(key: string, value: JsonValue, options?: PageOptions): Promise<PageList<Json>> {
29
- return this.provider.by(key, value).then(l => l.map(j => this.collection.in(j)));
29
+ return this.provider.by(key, value, options).then(l => l.map(j => this.collection.in(j)));
30
30
  }
31
31
 
32
32
  byIds(...ids: Id[]): Promise<PageList<Json>> {
@@ -34,11 +34,11 @@ export class MongoGateway implements Gateway {
34
34
  }
35
35
 
36
36
  find(q: JsonValue | Condition | LogicalCondition, options?: PageOptions): Promise<PageList<Json>> {
37
- return this.provider.find(asJson(q)).then(l => l.map(j => this.collection.in(j)));
37
+ return this.provider.find(asJson(q), options).then(l => l.map(j => this.collection.in(j)));
38
38
  }
39
39
 
40
40
  search(q: JsonValue, options?: PageOptions): Promise<PageList<Json>> {
41
- return this.find(this.collection.google(q));
41
+ return this.find(this.collection.google(q), options);
42
42
  }
43
43
 
44
44
  exists(id: Id): Promise<boolean> {
@@ -7,13 +7,16 @@ import {
7
7
  Field,
8
8
  Id,
9
9
  isDefined,
10
+ json,
10
11
  Json,
11
12
  JsonValue,
12
- List,
13
13
  LogicalCondition,
14
+ PageList,
15
+ PageOptions,
14
16
  reject,
17
+ resolve,
15
18
  SortCondition,
16
- toList,
19
+ toList, tuple2,
17
20
  when,
18
21
  } from '@thisisagile/easy';
19
22
  import { Collection as MongoCollection, Filter as MongoFilter, MongoClient } from 'mongodb';
@@ -25,21 +28,23 @@ const omitId = (j: Json): Json => {
25
28
  return j;
26
29
  };
27
30
 
28
- export type FindOptions = {
29
- limit?: number;
30
- skip?: number;
31
- sort?: SortCondition[];
32
- };
31
+ export type FindOptions = PageOptions & { sort?: SortCondition[] };
33
32
 
34
33
  export type Filter<T> = MongoFilter<T>;
35
34
 
36
35
  export class MongoProvider {
37
- constructor(readonly coll: Collection, private client?: Promise<MongoClient>) {}
36
+ constructor(readonly coll: Collection, private client?: Promise<MongoClient>) {
37
+ }
38
38
 
39
39
  static client(db: Database): Promise<MongoClient> {
40
40
  return when(db.options?.cluster)
41
41
  .not.isDefined.reject(Exception.IsNotValid.because('Missing cluster in database options.'))
42
- .then(u => new MongoClient(u, { auth: { username: asString(db.options?.user), password: asString(db.options?.password) } }));
42
+ .then(u => new MongoClient(u, {
43
+ auth: {
44
+ username: asString(db.options?.user),
45
+ password: asString(db.options?.password),
46
+ },
47
+ }));
43
48
  }
44
49
 
45
50
  cluster(): Promise<MongoClient> {
@@ -55,15 +60,18 @@ export class MongoProvider {
55
60
  return toMongoType(asJson(query));
56
61
  }
57
62
 
58
- find(query: Condition | LogicalCondition | Filter<any>, options: FindOptions = { limit: 250 }): Promise<List<Json>> {
59
- return this.collection()
60
- .then(c => c.find(this.toMongoJson(query), { ...options, limit: options.limit ?? 250, sort: this.coll.sort(...(options.sort ?? [])) as any }))
63
+ find(query: Condition | LogicalCondition | Filter<any>, options?: FindOptions): Promise<PageList<Json>> {
64
+ return resolve(json.merge({ take: 250 }, options))
65
+ .then(o => json.merge(o, { limit: o.take, sort: this.coll.sort(...(options?.sort ?? [])) }))
66
+ .then(o => json.omit(o, 'take'))
67
+ .then(o => tuple2(this.collection(), o))
68
+ .then(([c, o]) => c.find(this.toMongoJson(query), o))
61
69
  .then(res => res.toArray())
62
70
  .then(res => res.map(i => omitId(i)))
63
71
  .then(res => toList(res));
64
72
  }
65
73
 
66
- all(options?: FindOptions): Promise<List<Json>> {
74
+ all(options?: FindOptions): Promise<PageList<Json>> {
67
75
  return this.find({}, options);
68
76
  }
69
77
 
@@ -73,7 +81,7 @@ export class MongoProvider {
73
81
  .then(i => omitId(i as Json));
74
82
  }
75
83
 
76
- by(key: string, value: JsonValue, options?: FindOptions): Promise<List<Json>> {
84
+ by(key: string, value: JsonValue, options?: FindOptions): Promise<PageList<Json>> {
77
85
  return this.find({ [key]: asString(value) }, options);
78
86
  }
79
87
 
@@ -112,7 +120,11 @@ export class MongoProvider {
112
120
  }
113
121
 
114
122
  createPartialIndex(field: string | any, filter: Condition | LogicalCondition | Filter<any>, unique = true): Promise<string> {
115
- return this.collection().then(c => c.createIndex(field, { partialFilterExpression: toMongoType(asJson(filter)), unique, writeConcern: { w: 1 } }));
123
+ return this.collection().then(c => c.createIndex(field, {
124
+ partialFilterExpression: toMongoType(asJson(filter)),
125
+ unique,
126
+ writeConcern: { w: 1 },
127
+ }));
116
128
  }
117
129
 
118
130
  createTextIndexes(...fields: Field[]): Promise<string> {