@thisisagile/easy-mongo 10.13.0 → 10.14.2

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,16 +1,16 @@
1
- import { MongoProvider } from './MongoProvider';
2
- import { Condition, Gateway, Id, Json, JsonValue, List, LogicalCondition, PageList, PageOptions } from '@thisisagile/easy';
1
+ import { FindOptions, MongoProvider } from './MongoProvider';
2
+ import { Condition, Gateway, Id, Json, JsonValue, List, LogicalCondition, PageList } from '@thisisagile/easy';
3
3
  import { Collection } from './Collection';
4
4
  export declare class MongoGateway implements Gateway {
5
5
  readonly collection: Collection;
6
6
  readonly provider: MongoProvider;
7
7
  constructor(collection: Collection, provider?: MongoProvider);
8
- all(options?: PageOptions): Promise<PageList<Json>>;
8
+ all(options?: FindOptions): Promise<PageList<Json>>;
9
9
  byId(id: Id): Promise<Json | undefined>;
10
- by(key: string, value: JsonValue, options?: PageOptions): Promise<PageList<Json>>;
10
+ by(key: string, value: JsonValue, options?: FindOptions): Promise<PageList<Json>>;
11
11
  byIds(...ids: Id[]): Promise<List<Json>>;
12
- find(q: JsonValue | Condition | LogicalCondition, options?: PageOptions): Promise<PageList<Json>>;
13
- search(q: JsonValue, options?: PageOptions): Promise<PageList<Json>>;
12
+ find(q: JsonValue | Condition | LogicalCondition, options?: FindOptions): Promise<PageList<Json>>;
13
+ search(q: JsonValue, options?: FindOptions): Promise<PageList<Json>>;
14
14
  exists(id: Id): Promise<boolean>;
15
15
  add(item: Json): Promise<Json>;
16
16
  update(item: Json): Promise<Json>;
@@ -1 +1 @@
1
- {"version":3,"file":"MongoGateway.js","sourceRoot":"","sources":["../src/MongoGateway.ts"],"names":[],"mappings":";;;AACA,4CAe2B;AAG3B,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,EAAE,CAAC,EAAE,CAAC,IAAA,iBAAU,EAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3F,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,EAAE,CAAC,EAAE,CAAC,IAAA,iBAAU,EAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACtG,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,EAAE,CAAC,EAAE,CAAC,IAAA,iBAAU,EAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACvG,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"}
1
+ {"version":3,"file":"MongoGateway.js","sourceRoot":"","sources":["../src/MongoGateway.ts"],"names":[],"mappings":";;;AACA,4CAA+J;AAG/J,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,EAAE,CAAC,EAAE,CAAC,IAAA,iBAAU,EAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3F,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,EAAE,CAAC,EAAE,CAAC,IAAA,iBAAU,EAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACtG,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,EAAE,CAAC,EAAE,CAAC,IAAA,iBAAU,EAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACvG,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"}
@@ -1,6 +1,10 @@
1
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 Projection = Record<string, 0 | 1>;
5
+ export declare type FindOptions = PageOptions & {
6
+ projection?: Projection;
7
+ };
4
8
  export declare type Filter<T> = MongoFilter<T>;
5
9
  export declare class MongoProvider {
6
10
  readonly coll: Collection;
@@ -10,10 +14,10 @@ export declare class MongoProvider {
10
14
  static client(db: Database): Promise<MongoClient>;
11
15
  cluster(): Promise<MongoClient>;
12
16
  toMongoJson(query: Condition | LogicalCondition | Filter<any>): Json;
13
- find(query: Condition | LogicalCondition | Filter<any>, options?: PageOptions): Promise<PageList<Json>>;
14
- all(options?: PageOptions): Promise<PageList<Json>>;
15
- byId(id: Id): Promise<Json>;
16
- by(key: string, value: JsonValue, options?: PageOptions): Promise<PageList<Json>>;
17
+ find(query: Condition | LogicalCondition | Filter<any>, options?: FindOptions): Promise<PageList<Json>>;
18
+ all(options?: FindOptions): Promise<PageList<Json>>;
19
+ byId(id: Id, options?: FindOptions): Promise<Json>;
20
+ by(key: string, value: JsonValue, options?: FindOptions): Promise<PageList<Json>>;
17
21
  group(qs: Filter<any>[]): Promise<PageList<Json>>;
18
22
  add(item: Json): Promise<Json>;
19
23
  update(item: Json): Promise<Json>;
@@ -5,11 +5,12 @@ const easy_1 = require("@thisisagile/easy");
5
5
  const mongodb_1 = require("mongodb");
6
6
  const Utils_1 = require("./Utils");
7
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),
8
+ const toFindOptions = (coll, options) => ({
9
+ limit: options?.take ?? 250,
10
+ skip: options?.skip,
11
+ sort: coll.sort(...(options?.sort ?? [])),
12
+ total: (0, easy_1.isDefined)(options?.skip) || (0, easy_1.isDefined)(options?.take),
13
+ projection: { _id: 0, ...options?.projection },
13
14
  });
14
15
  class MongoProvider {
15
16
  constructor(coll, client) {
@@ -42,16 +43,13 @@ class MongoProvider {
42
43
  return (0, easy_1.tuple3)(this.collection(), this.toMongoJson(query), toFindOptions(this.coll, options))
43
44
  .then(([c, q, o]) => (0, easy_1.tuple2)(c.find(q, o), (0, easy_1.ifTrue)(o.total, () => c.count(q))))
44
45
  .then(([res, total]) => (0, easy_1.tuple2)(res.toArray(), total))
45
- .then(([res, total]) => (0, easy_1.tuple2)(res.map(i => omitId(i)), total))
46
46
  .then(([res, total]) => (0, easy_1.toPageList)(res, options && { total }));
47
47
  }
48
48
  all(options) {
49
49
  return this.find({}, options);
50
50
  }
51
- byId(id) {
52
- return this.collection()
53
- .then(c => c.findOne(this.toMongoJson({ id: (0, easy_1.asString)(id) })))
54
- .then(i => omitId(i));
51
+ byId(id, options) {
52
+ return this.collection().then(c => c.findOne(this.toMongoJson({ id: (0, easy_1.asString)(id) }), toFindOptions(this.coll, options)));
55
53
  }
56
54
  by(key, value, options) {
57
55
  return this.find({ [key]: (0, easy_1.asString)(value) }, options);
@@ -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.13.0",
3
+ "version": "10.14.2",
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.13.0"
34
+ "@thisisagile/easy-test": "10.14.2"
35
35
  },
36
36
  "dependencies": {
37
- "@thisisagile/easy": "10.13.0",
37
+ "@thisisagile/easy": "10.14.2",
38
38
  "mongodb": "^4.6.0"
39
39
  }
40
40
  }
@@ -1,26 +1,11 @@
1
- import { MongoProvider } from './MongoProvider';
2
- import {
3
- asJson,
4
- asPageList,
5
- Condition,
6
- Field,
7
- Gateway,
8
- Id,
9
- ifDefined,
10
- isDefined,
11
- Json,
12
- JsonValue,
13
- List,
14
- LogicalCondition,
15
- PageList,
16
- PageOptions,
17
- } from '@thisisagile/easy';
1
+ import { FindOptions, MongoProvider } from './MongoProvider';
2
+ import { asJson, asPageList, Condition, Field, Gateway, Id, ifDefined, isDefined, Json, JsonValue, List, LogicalCondition, PageList } from '@thisisagile/easy';
18
3
  import { Collection } from './Collection';
19
4
 
20
5
  export class MongoGateway implements Gateway {
21
6
  constructor(readonly collection: Collection, readonly provider: MongoProvider = collection.provider) {}
22
7
 
23
- all(options?: PageOptions): Promise<PageList<Json>> {
8
+ all(options?: FindOptions): Promise<PageList<Json>> {
24
9
  return this.provider.all(options).then(js => asPageList(j => this.collection.in(j), js));
25
10
  }
26
11
 
@@ -28,7 +13,7 @@ export class MongoGateway implements Gateway {
28
13
  return this.provider.byId(id).then(j => ifDefined(j, this.collection.in(j)));
29
14
  }
30
15
 
31
- by(key: string, value: JsonValue, options?: PageOptions): Promise<PageList<Json>> {
16
+ by(key: string, value: JsonValue, options?: FindOptions): Promise<PageList<Json>> {
32
17
  return this.provider.by(key, value, options).then(js => asPageList(j => this.collection.in(j), js));
33
18
  }
34
19
 
@@ -36,11 +21,11 @@ export class MongoGateway implements Gateway {
36
21
  return this.find((this.collection.id as Field).isIn(...ids));
37
22
  }
38
23
 
39
- find(q: JsonValue | Condition | LogicalCondition, options?: PageOptions): Promise<PageList<Json>> {
24
+ find(q: JsonValue | Condition | LogicalCondition, options?: FindOptions): Promise<PageList<Json>> {
40
25
  return this.provider.find(asJson(q), options).then(js => asPageList(j => this.collection.in(j), js));
41
26
  }
42
27
 
43
- search(q: JsonValue, options?: PageOptions): Promise<PageList<Json>> {
28
+ search(q: JsonValue, options?: FindOptions): Promise<PageList<Json>> {
44
29
  return this.find(this.collection.google(q), options);
45
30
  }
46
31
 
@@ -20,17 +20,21 @@ import {
20
20
  tuple3,
21
21
  when,
22
22
  } from '@thisisagile/easy';
23
- import { Collection as MongoCollection, Filter as MongoFilter, FindOptions, MongoClient } from 'mongodb';
23
+ import { Collection as MongoCollection, Filter as MongoFilter, FindOptions as MongoFindOptions, MongoClient } from 'mongodb';
24
24
  import { Collection } from './Collection';
25
25
  import { toMongoType } from './Utils';
26
26
 
27
27
  const omitId = (j: Json): Json => json.delete(j, '_id');
28
28
 
29
- const toFindOptions = (coll: Collection, po?: PageOptions): FindOptions & { total: boolean } => ({
30
- limit: po?.take ?? 250,
31
- skip: po?.skip,
32
- sort: coll.sort(...(po?.sort ?? [])) as any,
33
- total: isDefined(po?.skip) || isDefined(po?.take),
29
+ export type Projection = Record<string, 0 | 1>;
30
+ export type FindOptions = PageOptions & { projection?: Projection };
31
+
32
+ const toFindOptions = (coll: Collection, options?: FindOptions): MongoFindOptions & { total: boolean } => ({
33
+ limit: options?.take ?? 250,
34
+ skip: options?.skip,
35
+ sort: coll.sort(...(options?.sort ?? [])) as any,
36
+ total: isDefined(options?.skip) || isDefined(options?.take),
37
+ projection: { _id: 0, ...options?.projection },
34
38
  });
35
39
 
36
40
  export type Filter<T> = MongoFilter<T>;
@@ -67,7 +71,7 @@ export class MongoProvider {
67
71
  return toMongoType(asJson(query));
68
72
  }
69
73
 
70
- find(query: Condition | LogicalCondition | Filter<any>, options?: PageOptions): Promise<PageList<Json>> {
74
+ find(query: Condition | LogicalCondition | Filter<any>, options?: FindOptions): Promise<PageList<Json>> {
71
75
  return tuple3(this.collection(), this.toMongoJson(query), toFindOptions(this.coll, options))
72
76
  .then(([c, q, o]) =>
73
77
  tuple2(
@@ -76,26 +80,18 @@ export class MongoProvider {
76
80
  )
77
81
  )
78
82
  .then(([res, total]) => tuple2(res.toArray(), total))
79
- .then(([res, total]) =>
80
- tuple2(
81
- res.map(i => omitId(i)),
82
- total
83
- )
84
- )
85
- .then(([res, total]) => toPageList(res, options && { total }));
83
+ .then(([res, total]) => toPageList(res as Json[], options && { total }));
86
84
  }
87
85
 
88
- all(options?: PageOptions): Promise<PageList<Json>> {
86
+ all(options?: FindOptions): Promise<PageList<Json>> {
89
87
  return this.find({}, options);
90
88
  }
91
89
 
92
- byId(id: Id): Promise<Json> {
93
- return this.collection()
94
- .then(c => c.findOne(this.toMongoJson({ id: asString(id) })))
95
- .then(i => omitId(i as Json));
90
+ byId(id: Id, options?: FindOptions): Promise<Json> {
91
+ return this.collection().then(c => c.findOne(this.toMongoJson({ id: asString(id) }), toFindOptions(this.coll, options)) as Promise<Json>);
96
92
  }
97
93
 
98
- by(key: string, value: JsonValue, options?: PageOptions): Promise<PageList<Json>> {
94
+ by(key: string, value: JsonValue, options?: FindOptions): Promise<PageList<Json>> {
99
95
  return this.find({ [key]: asString(value) }, options);
100
96
  }
101
97