@villedemontreal/mongo 6.7.0 → 6.7.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/scripts/index.d.ts +6 -0
- package/dist/scripts/index.js +16 -0
- package/dist/scripts/index.js.map +1 -0
- package/dist/scripts/lint.d.ts +6 -0
- package/dist/scripts/lint.js +18 -0
- package/dist/scripts/lint.js.map +1 -0
- package/dist/scripts/lintFix.d.ts +6 -0
- package/dist/scripts/lintFix.js +21 -0
- package/dist/scripts/lintFix.js.map +1 -0
- package/dist/scripts/showCoverage.d.ts +13 -0
- package/dist/scripts/showCoverage.js +40 -0
- package/dist/scripts/showCoverage.js.map +1 -0
- package/dist/scripts/test.d.ts +13 -0
- package/dist/scripts/test.js +29 -0
- package/dist/scripts/test.js.map +1 -0
- package/dist/scripts/testUnits.d.ts +15 -0
- package/dist/scripts/testUnits.js +95 -0
- package/dist/scripts/testUnits.js.map +1 -0
- package/dist/scripts/watch.d.ts +14 -0
- package/dist/scripts/watch.js +96 -0
- package/dist/scripts/watch.js.map +1 -0
- package/dist/src/config/configs.d.ts +4 -1
- package/dist/src/config/configs.js +6 -0
- package/dist/src/config/configs.js.map +1 -1
- package/dist/src/config/constants.d.ts +1 -1
- package/dist/src/config/constants.js +12 -12
- package/dist/src/config/constants.js.map +1 -1
- package/dist/src/config/init.js.map +1 -1
- package/dist/src/config/mongooseConfigs.js +8 -6
- package/dist/src/config/mongooseConfigs.js.map +1 -1
- package/dist/src/index.js +6 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mongoClient.js +64 -59
- package/dist/src/mongoClient.js.map +1 -1
- package/dist/src/mongoUpdater.js +30 -27
- package/dist/src/mongoUpdater.js.map +1 -1
- package/dist/src/mongoUpdater.test.js +11 -11
- package/dist/src/mongoUpdater.test.js.map +1 -1
- package/dist/src/mongoUtils.d.ts +1 -1
- package/dist/src/mongoUtils.js +15 -12
- package/dist/src/mongoUtils.js.map +1 -1
- package/dist/src/mongoUtils.test.d.ts +0 -1
- package/dist/src/mongoUtils.test.js +21 -22
- package/dist/src/mongoUtils.test.js.map +1 -1
- package/dist/src/plugins/pagination/index.js +9 -12
- package/dist/src/plugins/pagination/index.js.map +1 -1
- package/dist/src/plugins/pagination/index.test.js +20 -12
- package/dist/src/plugins/pagination/index.test.js.map +1 -1
- package/dist/src/utils/logger.js +1 -1
- package/dist/src/utils/logger.js.map +1 -1
- package/dist/src/utils/testingConfigurations.js +1 -1
- package/dist/src/utils/testingConfigurations.js.map +1 -1
- package/dist/tests/testingMongoUpdates/1.0.0.js +3 -3
- package/dist/tests/testingMongoUpdates/1.0.1.js +4 -4
- package/dist/tests/testingMongoUpdates/1.0.1.js.map +1 -1
- package/package.json +20 -15
- package/src/config/configs.ts +10 -1
- package/src/config/constants.ts +13 -13
- package/src/config/init.ts +1 -1
- package/src/config/mongooseConfigs.ts +30 -12
- package/src/mongoClient.ts +80 -63
- package/src/mongoUpdater.test.ts +29 -17
- package/src/mongoUpdater.ts +47 -32
- package/src/mongoUtils.test.ts +21 -21
- package/src/mongoUtils.ts +20 -14
- package/src/plugins/pagination/index.test.ts +38 -27
- package/src/plugins/pagination/index.ts +19 -14
- package/src/utils/logger.ts +8 -1
|
@@ -18,34 +18,37 @@ const bookSchema = new mongoose.Schema({
|
|
|
18
18
|
date: Date,
|
|
19
19
|
author: {
|
|
20
20
|
type: String,
|
|
21
|
-
ref: 'Author'
|
|
22
|
-
}
|
|
21
|
+
ref: 'Author',
|
|
22
|
+
},
|
|
23
23
|
});
|
|
24
24
|
|
|
25
25
|
bookSchema.plugin(mongoosePaginate);
|
|
26
26
|
const bookModel: any = mongoose.model('Book', bookSchema);
|
|
27
27
|
|
|
28
28
|
describe('plugin pagination', () => {
|
|
29
|
-
before(async function() {
|
|
29
|
+
before(async function () {
|
|
30
30
|
this.timeout(120000);
|
|
31
31
|
|
|
32
32
|
// Makes sure Mongoose is mocked, but not in Jenkins as we will start a dedicated mongodb container.
|
|
33
|
-
const mockedDb = await mongoUtils.mockMongoose(
|
|
33
|
+
const mockedDb = await mongoUtils.mockMongoose(
|
|
34
|
+
this,
|
|
35
|
+
constants.testsConfig.mockServer.serverVersion
|
|
36
|
+
);
|
|
34
37
|
const connString = mockedDb.getUri();
|
|
35
38
|
await mongoose.connect(connString, { useNewUrlParser: true });
|
|
36
39
|
});
|
|
37
40
|
|
|
38
|
-
before(async function() {
|
|
41
|
+
before(async function () {
|
|
39
42
|
this.timeout(10000);
|
|
40
43
|
let book;
|
|
41
44
|
const books: any = [];
|
|
42
45
|
const date = new Date();
|
|
43
|
-
return authorModel.create({ name: 'Arthur Conan Doyle' }).then(author => {
|
|
46
|
+
return authorModel.create({ name: 'Arthur Conan Doyle' }).then((author) => {
|
|
44
47
|
for (let i = 1; i <= 100; i++) {
|
|
45
48
|
book = new bookModel({
|
|
46
|
-
title:
|
|
49
|
+
title: `Book #${i}`,
|
|
47
50
|
date: new Date(date.getTime() + i),
|
|
48
|
-
author: author._id
|
|
51
|
+
author: author._id,
|
|
49
52
|
});
|
|
50
53
|
books.push(book);
|
|
51
54
|
}
|
|
@@ -58,7 +61,7 @@ describe('plugin pagination', () => {
|
|
|
58
61
|
expect(promise.then).to.be.an.instanceof(Function);
|
|
59
62
|
});
|
|
60
63
|
|
|
61
|
-
it('calls callback', done => {
|
|
64
|
+
it('calls callback', (done) => {
|
|
62
65
|
bookModel.paginate({}, {}, (err: Error, result: IPaginatedResult<any>) => {
|
|
63
66
|
expect(err).to.be.null;
|
|
64
67
|
expect(result).to.be.an.instanceOf(Object);
|
|
@@ -83,12 +86,14 @@ describe('plugin pagination', () => {
|
|
|
83
86
|
});
|
|
84
87
|
});
|
|
85
88
|
it('with offset and limit', () => {
|
|
86
|
-
return bookModel
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
return bookModel
|
|
90
|
+
.paginate({}, { offset: 30, limit: 20 })
|
|
91
|
+
.then((result: IPaginatedResult<any>) => {
|
|
92
|
+
expect(result.items).to.have.length(20);
|
|
93
|
+
expect(result.paging.totalCount).to.equal(100);
|
|
94
|
+
expect(result.paging.limit).to.equal(20);
|
|
95
|
+
expect(result.paging.offset).to.equal(30);
|
|
96
|
+
});
|
|
92
97
|
});
|
|
93
98
|
it('with zero limit', () => {
|
|
94
99
|
return bookModel.paginate({}, { page: 1, limit: 0 }).then((result: IPaginatedResult<any>) => {
|
|
@@ -104,14 +109,18 @@ describe('plugin pagination', () => {
|
|
|
104
109
|
});
|
|
105
110
|
});
|
|
106
111
|
it('with sort', () => {
|
|
107
|
-
return bookModel
|
|
108
|
-
|
|
109
|
-
|
|
112
|
+
return bookModel
|
|
113
|
+
.paginate({}, { sort: { date: -1 } })
|
|
114
|
+
.then((result: IPaginatedResult<any>) => {
|
|
115
|
+
expect(result.items[0].title).to.equal('Book #100');
|
|
116
|
+
});
|
|
110
117
|
});
|
|
111
118
|
it('with populate', () => {
|
|
112
|
-
return bookModel
|
|
113
|
-
|
|
114
|
-
|
|
119
|
+
return bookModel
|
|
120
|
+
.paginate({}, { populate: 'author' })
|
|
121
|
+
.then((result: IPaginatedResult<any>) => {
|
|
122
|
+
expect(result.items[0].author.name).to.equal('Arthur Conan Doyle');
|
|
123
|
+
});
|
|
115
124
|
});
|
|
116
125
|
describe('with lean', () => {
|
|
117
126
|
it('with default leanWithId=true', () => {
|
|
@@ -122,19 +131,21 @@ describe('plugin pagination', () => {
|
|
|
122
131
|
});
|
|
123
132
|
});
|
|
124
133
|
it('with leanWithId=false', () => {
|
|
125
|
-
return bookModel
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
134
|
+
return bookModel
|
|
135
|
+
.paginate({}, { lean: true, leanWithId: false })
|
|
136
|
+
.then((result: IPaginatedResult<any>) => {
|
|
137
|
+
expect(result.items[0]).to.not.be.an.instanceof((mongoose as any).Document);
|
|
138
|
+
expect(result.items[0]).to.not.have.property('id');
|
|
139
|
+
});
|
|
129
140
|
});
|
|
130
141
|
});
|
|
131
142
|
});
|
|
132
143
|
|
|
133
|
-
after(done => {
|
|
144
|
+
after((done) => {
|
|
134
145
|
mongoose.connection.db.dropDatabase(done);
|
|
135
146
|
});
|
|
136
147
|
|
|
137
|
-
after(done => {
|
|
148
|
+
after((done) => {
|
|
138
149
|
mongoose.disconnect(done);
|
|
139
150
|
});
|
|
140
151
|
});
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { IPaginateOptions } from './specs/IPaginateOptions';
|
|
2
2
|
|
|
3
|
-
function paginate(
|
|
3
|
+
function paginate(
|
|
4
|
+
q: any,
|
|
5
|
+
options: IPaginateOptions,
|
|
6
|
+
callback: (error: Error, result: any) => void
|
|
7
|
+
) {
|
|
4
8
|
const optionsClean = PaginateBuilder.getOptions((paginate as any).options, options);
|
|
5
9
|
|
|
6
10
|
const query = q || {};
|
|
@@ -22,14 +26,18 @@ export class PaginateBuilder {
|
|
|
22
26
|
lean: false,
|
|
23
27
|
leanWithId: true,
|
|
24
28
|
limit: 10,
|
|
25
|
-
offset: 0
|
|
29
|
+
offset: 0,
|
|
26
30
|
});
|
|
27
31
|
|
|
28
32
|
public static getOptions(...options: IPaginateOptions[]): IPaginateOptions {
|
|
29
33
|
return Object.assign({}, PaginateBuilder.defaultOptions, ...options);
|
|
30
34
|
}
|
|
31
35
|
|
|
32
|
-
public static executeQueries(
|
|
36
|
+
public static executeQueries(
|
|
37
|
+
model: any,
|
|
38
|
+
query: any,
|
|
39
|
+
options: IPaginateOptions
|
|
40
|
+
): [Promise<any[]>, Promise<number>] {
|
|
33
41
|
const { select, sort, populate, lean, leanWithId, limit, offset } = options;
|
|
34
42
|
let itemsQuery: any;
|
|
35
43
|
|
|
@@ -38,20 +46,17 @@ export class PaginateBuilder {
|
|
|
38
46
|
}
|
|
39
47
|
|
|
40
48
|
if (limit > 0) {
|
|
41
|
-
itemsQuery = model
|
|
42
|
-
.find(query)
|
|
43
|
-
.select(select)
|
|
44
|
-
.sort(sort)
|
|
45
|
-
.skip(offset)
|
|
46
|
-
.limit(limit)
|
|
47
|
-
.lean(lean);
|
|
49
|
+
itemsQuery = model.find(query).select(select).sort(sort).skip(offset).limit(limit).lean(lean);
|
|
48
50
|
|
|
49
51
|
if (populate) {
|
|
50
|
-
[].concat(populate).forEach(item => itemsQuery.populate(item));
|
|
52
|
+
[].concat(populate).forEach((item) => itemsQuery.populate(item));
|
|
51
53
|
}
|
|
52
54
|
}
|
|
53
55
|
|
|
54
|
-
return [
|
|
56
|
+
return [
|
|
57
|
+
itemsQuery && limit > 0 ? itemsQuery.exec() : Promise.resolve([]),
|
|
58
|
+
model.countDocuments(query).exec(),
|
|
59
|
+
];
|
|
55
60
|
}
|
|
56
61
|
|
|
57
62
|
public static processResult(
|
|
@@ -62,7 +67,7 @@ export class PaginateBuilder {
|
|
|
62
67
|
const { lean, leanWithId, limit, offset } = options;
|
|
63
68
|
return new Promise((resolve, reject) => {
|
|
64
69
|
Promise.all(promises).then(
|
|
65
|
-
data => {
|
|
70
|
+
(data) => {
|
|
66
71
|
const items = data[0] as any[];
|
|
67
72
|
const count = data[1] as number;
|
|
68
73
|
const result: any = { paging: { limit, offset, totalCount: count } };
|
|
@@ -84,7 +89,7 @@ export class PaginateBuilder {
|
|
|
84
89
|
|
|
85
90
|
resolve(result);
|
|
86
91
|
},
|
|
87
|
-
error => {
|
|
92
|
+
(error) => {
|
|
88
93
|
if (typeof callback === 'function') {
|
|
89
94
|
return callback(error, null);
|
|
90
95
|
}
|
package/src/utils/logger.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ILogger,
|
|
3
|
+
initLogger,
|
|
4
|
+
LazyLogger,
|
|
5
|
+
Logger,
|
|
6
|
+
LoggerConfigs,
|
|
7
|
+
LogLevel,
|
|
8
|
+
} from '@villedemontreal/logger';
|
|
2
9
|
import { configs } from '../config/configs';
|
|
3
10
|
|
|
4
11
|
let testingLoggerLibInitialised = false;
|