@thisisagile/easy-mongo 11.8.9 → 12.0.0
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/MongoProvider.d.ts +14 -5
- package/dist/MongoProvider.js +23 -11
- package/dist/MongoProvider.js.map +1 -1
- package/package.json +3 -3
- package/src/MongoProvider.ts +43 -13
package/dist/MongoProvider.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Condition, Database, Field, Id, Json, JsonValue, LogicalCondition, PageList, PageOptions } from '@thisisagile/easy';
|
|
2
|
-
import { AggregationCursor, Collection as MongoCollection, Document, Filter as MongoFilter, FindCursor, FindOptions as MongoFindOptions, MongoClient } from 'mongodb';
|
|
1
|
+
import { Condition, Database, Field, Id, Json, JsonValue, LogicalCondition, OneOrMore, PageList, PageOptions, Sort } from '@thisisagile/easy';
|
|
2
|
+
import { AggregationCursor, Collection as MongoCollection, CreateIndexesOptions, Document, Filter as MongoFilter, FindCursor, FindOptions as MongoFindOptions, IndexSpecification, MongoClient } from 'mongodb';
|
|
3
3
|
import { Collection } from './Collection';
|
|
4
4
|
export declare type Projection = Record<string, 0 | 1>;
|
|
5
5
|
export declare type FindOptions = PageOptions & {
|
|
@@ -7,6 +7,13 @@ export declare type FindOptions = PageOptions & {
|
|
|
7
7
|
};
|
|
8
8
|
export declare type Filter<T> = MongoFilter<T>;
|
|
9
9
|
export declare type Query = Condition | LogicalCondition | Filter<any>;
|
|
10
|
+
export declare type IndexOptions = {
|
|
11
|
+
unique?: boolean;
|
|
12
|
+
filter?: Query;
|
|
13
|
+
languageOverride?: string;
|
|
14
|
+
languageDefault?: string;
|
|
15
|
+
};
|
|
16
|
+
export declare type Indexes = OneOrMore<string | Field | Sort | Record<string, 1 | -1>>;
|
|
10
17
|
export declare class MongoProvider {
|
|
11
18
|
readonly coll: Collection;
|
|
12
19
|
private client?;
|
|
@@ -18,6 +25,8 @@ export declare class MongoProvider {
|
|
|
18
25
|
protected toFindOptions(options?: FindOptions): MongoFindOptions & {
|
|
19
26
|
total: boolean;
|
|
20
27
|
};
|
|
28
|
+
protected toIndexSpecification(index: Indexes): IndexSpecification;
|
|
29
|
+
protected toCreateIndexesOptions(options?: IndexOptions): CreateIndexesOptions;
|
|
21
30
|
protected toArray(cursor: FindCursor<Document> | AggregationCursor<Document>, options?: {
|
|
22
31
|
take?: number;
|
|
23
32
|
skip?: number;
|
|
@@ -32,8 +41,8 @@ export declare class MongoProvider {
|
|
|
32
41
|
update(item: Json): Promise<Json>;
|
|
33
42
|
remove(id: Id): Promise<boolean>;
|
|
34
43
|
count(query?: Query): Promise<number>;
|
|
35
|
-
createIndex(
|
|
36
|
-
createPartialIndex(
|
|
37
|
-
|
|
44
|
+
createIndex(indexes: Indexes, options?: IndexOptions): Promise<string>;
|
|
45
|
+
createPartialIndex(indexes: Indexes, filter: Query, options?: Omit<IndexOptions, 'filter'>): Promise<string>;
|
|
46
|
+
createTextIndex(indexes: OneOrMore<Field | string>, options?: IndexOptions): Promise<string>;
|
|
38
47
|
collection(): Promise<MongoCollection>;
|
|
39
48
|
}
|
package/dist/MongoProvider.js
CHANGED
|
@@ -41,6 +41,22 @@ class MongoProvider {
|
|
|
41
41
|
projection: { _id: 0, ...options?.projection },
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
|
+
toIndexSpecification(index) {
|
|
45
|
+
return (0, easy_1.choose)(index)
|
|
46
|
+
.type(easy_1.isField, f => f.property)
|
|
47
|
+
.type(easy_1.isSortCondition, s => s.toJSON())
|
|
48
|
+
.type(easy_1.isArray, aa => aa.map(a => this.toIndexSpecification(a)))
|
|
49
|
+
.else(i => i);
|
|
50
|
+
}
|
|
51
|
+
toCreateIndexesOptions(options) {
|
|
52
|
+
return {
|
|
53
|
+
unique: options?.unique ?? true,
|
|
54
|
+
language_override: options?.languageOverride,
|
|
55
|
+
default_language: options?.languageDefault,
|
|
56
|
+
partialFilterExpression: options?.filter ? (0, Utils_1.toMongoType)((0, easy_1.asJson)(options?.filter)) : undefined,
|
|
57
|
+
writeConcern: { w: 1 },
|
|
58
|
+
};
|
|
59
|
+
}
|
|
44
60
|
toArray(cursor, options) {
|
|
45
61
|
return cursor.toArray().then(r => (0, easy_1.toPageList)(r, options));
|
|
46
62
|
}
|
|
@@ -81,19 +97,15 @@ class MongoProvider {
|
|
|
81
97
|
count(query) {
|
|
82
98
|
return this.collection().then(c => c.countDocuments(this.toMongoJson(query ?? {})));
|
|
83
99
|
}
|
|
84
|
-
createIndex(
|
|
85
|
-
return this.collection().then(c => c.createIndex(
|
|
100
|
+
createIndex(indexes, options) {
|
|
101
|
+
return this.collection().then(c => c.createIndex(this.toIndexSpecification(indexes), this.toCreateIndexesOptions(options)));
|
|
86
102
|
}
|
|
87
|
-
createPartialIndex(
|
|
88
|
-
return this.
|
|
89
|
-
partialFilterExpression: (0, Utils_1.toMongoType)((0, easy_1.asJson)(filter)),
|
|
90
|
-
unique,
|
|
91
|
-
writeConcern: { w: 1 },
|
|
92
|
-
}));
|
|
103
|
+
createPartialIndex(indexes, filter, options) {
|
|
104
|
+
return this.createIndex(indexes, { ...options, filter });
|
|
93
105
|
}
|
|
94
|
-
|
|
95
|
-
const
|
|
96
|
-
return this.
|
|
106
|
+
createTextIndex(indexes, options) {
|
|
107
|
+
const ii = (0, easy_1.toArray)(indexes).reduce((i, f) => ({ ...i, [(0, easy_1.asString)(f)]: 'text' }), {});
|
|
108
|
+
return this.createIndex(ii, options);
|
|
97
109
|
}
|
|
98
110
|
collection() {
|
|
99
111
|
return this.cluster()
|
|
@@ -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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thisisagile/easy-mongo",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "12.0.0",
|
|
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": "
|
|
34
|
+
"@thisisagile/easy-test": "12.0.0"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@thisisagile/easy": "^
|
|
37
|
+
"@thisisagile/easy": "^12.0.0",
|
|
38
38
|
"mongodb": "^4.7.0"
|
|
39
39
|
}
|
|
40
40
|
}
|
package/src/MongoProvider.ts
CHANGED
|
@@ -1,20 +1,27 @@
|
|
|
1
1
|
import {
|
|
2
2
|
asJson,
|
|
3
3
|
asString,
|
|
4
|
+
choose,
|
|
4
5
|
Condition,
|
|
5
6
|
Database,
|
|
6
7
|
Exception,
|
|
7
8
|
Field,
|
|
8
9
|
Id,
|
|
9
10
|
ifTrue,
|
|
11
|
+
isArray,
|
|
10
12
|
isDefined,
|
|
13
|
+
isField,
|
|
14
|
+
isSortCondition,
|
|
11
15
|
json,
|
|
12
16
|
Json,
|
|
13
17
|
JsonValue,
|
|
14
18
|
LogicalCondition,
|
|
19
|
+
OneOrMore,
|
|
15
20
|
PageList,
|
|
16
21
|
PageOptions,
|
|
17
22
|
reject,
|
|
23
|
+
Sort,
|
|
24
|
+
toArray,
|
|
18
25
|
toPageList,
|
|
19
26
|
tuple2,
|
|
20
27
|
tuple3,
|
|
@@ -23,10 +30,12 @@ import {
|
|
|
23
30
|
import {
|
|
24
31
|
AggregationCursor,
|
|
25
32
|
Collection as MongoCollection,
|
|
33
|
+
CreateIndexesOptions,
|
|
26
34
|
Document,
|
|
27
35
|
Filter as MongoFilter,
|
|
28
36
|
FindCursor,
|
|
29
37
|
FindOptions as MongoFindOptions,
|
|
38
|
+
IndexSpecification,
|
|
30
39
|
MongoClient,
|
|
31
40
|
} from 'mongodb';
|
|
32
41
|
import { Collection } from './Collection';
|
|
@@ -39,6 +48,15 @@ export type FindOptions = PageOptions & { projection?: Projection };
|
|
|
39
48
|
export type Filter<T> = MongoFilter<T>;
|
|
40
49
|
export type Query = Condition | LogicalCondition | Filter<any>;
|
|
41
50
|
|
|
51
|
+
export type IndexOptions = {
|
|
52
|
+
unique?: boolean;
|
|
53
|
+
filter?: Query;
|
|
54
|
+
languageOverride?: string;
|
|
55
|
+
languageDefault?: string;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export type Indexes = OneOrMore<string | Field | Sort | Record<string, 1 | -1>>;
|
|
59
|
+
|
|
42
60
|
export class MongoProvider {
|
|
43
61
|
aggregate = this.group;
|
|
44
62
|
|
|
@@ -81,6 +99,24 @@ export class MongoProvider {
|
|
|
81
99
|
};
|
|
82
100
|
}
|
|
83
101
|
|
|
102
|
+
protected toIndexSpecification(index: Indexes): IndexSpecification {
|
|
103
|
+
return choose(index)
|
|
104
|
+
.type(isField, f => f.property as IndexSpecification)
|
|
105
|
+
.type(isSortCondition, s => s.toJSON() as IndexSpecification)
|
|
106
|
+
.type(isArray, aa => aa.map(a => this.toIndexSpecification(a)) as IndexSpecification)
|
|
107
|
+
.else(i => i as IndexSpecification);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
protected toCreateIndexesOptions(options?: IndexOptions): CreateIndexesOptions {
|
|
111
|
+
return {
|
|
112
|
+
unique: options?.unique ?? true,
|
|
113
|
+
language_override: options?.languageOverride,
|
|
114
|
+
default_language: options?.languageDefault,
|
|
115
|
+
partialFilterExpression: options?.filter ? toMongoType(asJson(options?.filter)) : undefined,
|
|
116
|
+
writeConcern: { w: 1 },
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
84
120
|
protected toArray(
|
|
85
121
|
cursor: FindCursor<Document> | AggregationCursor<Document>,
|
|
86
122
|
options?: { take?: number; skip?: number; total?: number }
|
|
@@ -139,23 +175,17 @@ export class MongoProvider {
|
|
|
139
175
|
return this.collection().then(c => c.countDocuments(this.toMongoJson(query ?? {})));
|
|
140
176
|
}
|
|
141
177
|
|
|
142
|
-
createIndex(
|
|
143
|
-
return this.collection().then(c => c.createIndex(
|
|
178
|
+
createIndex(indexes: Indexes, options?: IndexOptions): Promise<string> {
|
|
179
|
+
return this.collection().then(c => c.createIndex(this.toIndexSpecification(indexes), this.toCreateIndexesOptions(options)));
|
|
144
180
|
}
|
|
145
181
|
|
|
146
|
-
createPartialIndex(
|
|
147
|
-
return this.
|
|
148
|
-
c.createIndex(field, {
|
|
149
|
-
partialFilterExpression: toMongoType(asJson(filter)),
|
|
150
|
-
unique,
|
|
151
|
-
writeConcern: { w: 1 },
|
|
152
|
-
})
|
|
153
|
-
);
|
|
182
|
+
createPartialIndex(indexes: Indexes, filter: Query, options?: Omit<IndexOptions, 'filter'>): Promise<string> {
|
|
183
|
+
return this.createIndex(indexes, { ...options, filter });
|
|
154
184
|
}
|
|
155
185
|
|
|
156
|
-
|
|
157
|
-
const
|
|
158
|
-
return this.
|
|
186
|
+
createTextIndex(indexes: OneOrMore<Field | string>, options?: IndexOptions): Promise<string> {
|
|
187
|
+
const ii = toArray(indexes).reduce((i, f) => ({ ...i, [asString(f)]: 'text' }), {});
|
|
188
|
+
return this.createIndex(ii, options);
|
|
159
189
|
}
|
|
160
190
|
|
|
161
191
|
collection(): Promise<MongoCollection> {
|