Skip to content

Commit 32bb8e5

Browse files
authored
feat: add mongoose v8 support (@meabed, #439)
BREAKING CHANGE: drop support for mongoose v5 & v4. Node v16 is a minimal required version.
1 parent 05ccdf0 commit 32bb8e5

31 files changed

+1703
-1957
lines changed

.editorconfig

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
root = true
2+
3+
[*]
4+
charset = utf-8
5+
max_line_length = 120
6+
end_of_line = lf
7+
insert_final_newline = true
8+
trim_trailing_whitespace = true
9+
indent_style = space
10+
indent_size = 2
11+
12+
[{Makefile, makefile}]
13+
indent_style = tab
14+
15+
[*.go]
16+
indent_style = tab
17+
18+
[*.proto]
19+
indent_size = 2
20+
21+
[*.swift]
22+
indent_size = 4
23+
24+
[*.tmpl]
25+
indent_size = 2
26+
27+
[{*.js, *.ts, *.jsx, *.tsx}]
28+
indent_size = 2
29+
30+
[*.html]
31+
indent_size = 2
32+
33+
[*.bat]
34+
end_of_line = crlf
35+
36+
[*.{json, yml, yaml}]
37+
indent_size = 2
38+
39+
[.{babelrc, eslintrc}]
40+
indent_size = 2
41+
42+
[{Fastfile, .buckconfig, BUCK}]
43+
indent_size = 2
44+
45+
[*.diff]
46+
indent_size = 1
47+
48+
[*.m]
49+
indent_size = 1
50+
indent_style = space
51+
52+
[*.java]
53+
indent_size = 4
54+
indent_style = space
55+
56+
[*.md]
57+
trim_trailing_whitespace = false

.github/workflows/nodejs.yml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,17 @@ jobs:
1313
contents: write
1414
strategy:
1515
matrix:
16-
node-version: [14.x, 16.x, 18.x]
16+
node-version: [16.x, 18.x, 20.x]
1717
steps:
1818
- run: echo "🎉 The job was triggered by a ${{ github.event_name }} event."
19-
- uses: styfle/cancel-workflow-action@0.11.0
19+
- uses: styfle/cancel-workflow-action@0.12.0
2020
with:
2121
workflow_id: nodejs.yml
2222
access_token: ${{ secrets.GITHUB_TOKEN }}
2323
- uses: FranzDiebold/github-env-vars-action@v2
24-
- uses: actions/checkout@v3
24+
- uses: actions/checkout@v4
2525
- name: Use Node.js ${{ matrix.node-version }}
26-
uses: actions/setup-node@v3
26+
uses: actions/setup-node@v4
2727
with:
2828
node-version: ${{ matrix.node-version }}
2929
- name: Install node_modules
@@ -32,16 +32,16 @@ jobs:
3232
run: yarn test
3333
env:
3434
CI: true
35-
- name: Testing with previous mongoose versions 6
36-
run: yarn test-prev-vers-6
35+
- name: Testing with previous mongoose versions 7
36+
run: yarn test-prev-vers-7
3737
env:
3838
CI: true
39-
- name: Testing with previous mongoose versions 5
40-
run: yarn test-prev-vers-5
39+
- name: Testing with previous mongoose versions 6
40+
run: yarn test-prev-vers-6
4141
env:
4242
CI: true
4343
- name: Send codecov.io stats
44-
if: matrix.node-version == '14.x'
44+
if: matrix.node-version == '18.x'
4545
run: bash <(curl -s https://codecov.io/bash) || echo ''
4646

4747
publish:
@@ -52,11 +52,11 @@ jobs:
5252
packages: write
5353
contents: write
5454
steps:
55-
- uses: actions/checkout@v3
56-
- name: Use Node.js 14
57-
uses: actions/setup-node@v3
55+
- uses: actions/checkout@v4
56+
- name: Use Node.js 18
57+
uses: actions/setup-node@v4
5858
with:
59-
node-version: 14.x
59+
node-version: 18.x
6060
- name: Install node_modules
6161
run: yarn install
6262
- name: Build

jest.config.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
module.exports = {
22
preset: 'ts-jest',
33
testEnvironment: 'node',
4-
globals: {
5-
'ts-jest': {
6-
tsconfig: '<rootDir>/tsconfig.json',
7-
isolatedModules: true,
8-
diagnostics: false,
9-
},
10-
},
114
moduleFileExtensions: ['ts', 'js'],
125
transform: {
13-
'^.+\\.ts$': 'ts-jest',
6+
'^.+\\.ts$': [
7+
'ts-jest',
8+
{
9+
tsconfig: '<rootDir>/tsconfig.json',
10+
isolatedModules: true,
11+
diagnostics: false,
12+
},
13+
],
1414
'^.+\\.js$': 'babel-jest',
1515
},
1616
roots: ['<rootDir>/src'],

package.json

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,27 +30,27 @@
3030
},
3131
"peerDependencies": {
3232
"graphql-compose": "^7.21.4 || ^8.0.0 || ^9.0.0",
33-
"mongoose": "^7.0.0 || ^6.0.0 || ^5.0.0 || ^4.4.0"
33+
"mongoose": "^8.0.0 || ^7.0.0 || ^6.0.0"
3434
},
3535
"devDependencies": {
36-
"@types/jest": "28.1.8",
37-
"@typescript-eslint/eslint-plugin": "5.54.0",
38-
"@typescript-eslint/parser": "5.54.0",
39-
"eslint": "8.35.0",
36+
"@types/jest": "29.5.8",
37+
"@typescript-eslint/eslint-plugin": "6.11.0",
38+
"@typescript-eslint/parser": "6.11.0",
39+
"eslint": "8.53.0",
4040
"eslint-config-airbnb-base": "15.0.0",
41-
"eslint-config-prettier": "8.6.0",
42-
"eslint-plugin-import": "2.27.5",
43-
"eslint-plugin-prettier": "4.2.1",
44-
"graphql": "16.6.0",
41+
"eslint-config-prettier": "9.0.0",
42+
"eslint-plugin-import": "2.29.0",
43+
"eslint-plugin-prettier": "5.0.1",
44+
"graphql": "16.8.1",
4545
"graphql-compose": "9.0.10",
46-
"jest": "28.1.3",
47-
"mongodb-memory-server": "8.11.5",
48-
"mongoose": "7.0.0",
49-
"prettier": "2.8.4",
46+
"jest": "29.7.0",
47+
"mongodb-memory-server": "9.0.1",
48+
"mongoose": "8.0.0",
49+
"prettier": "3.1.0",
5050
"request": "2.88.2",
51-
"rimraf": "4.1.3",
52-
"ts-jest": "28.0.8",
53-
"typescript": "4.9.5"
51+
"rimraf": "5.0.5",
52+
"ts-jest": "29.1.1",
53+
"typescript": "5.2.2"
5454
},
5555
"scripts": {
5656
"prepare": "tsc -p ./tsconfig.build.json",
@@ -64,7 +64,10 @@
6464
"link": "yarn build && yarn link graphql-compose && yarn link graphql-compose-connection && yarn link graphql-compose-pagination && yarn link mongoose && yarn link",
6565
"unlink": "rimraf node_modules && yarn install",
6666
"semantic-release": "semantic-release",
67-
"test-prev-vers-6": "yarn add mongoose@6.1.2 --dev --ignore-scripts && yarn coverage && git checkout HEAD -- package.json yarn.lock",
68-
"test-prev-vers-5": "yarn add mongoose@5.13.8 --dev --ignore-scripts && yarn coverage && git checkout HEAD -- package.json yarn.lock"
67+
"test-prev-vers-7": "yarn add mongoose@7.6.4 --dev --ignore-scripts && yarn coverage && git checkout HEAD -- package.json yarn.lock",
68+
"test-prev-vers-6": "yarn add mongoose@6.1.2 --dev --ignore-scripts && yarn coverage && git checkout HEAD -- package.json yarn.lock"
69+
},
70+
"engines": {
71+
"node": ">=16.0.0"
6972
}
7073
}

src/__mocks__/mongooseCommon.ts

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,32 @@
22

33
import mongoose from 'mongoose';
44
import MongoMemoryServer from 'mongodb-memory-server-core';
5+
import net, { AddressInfo } from 'net';
56

67
const { Schema, Types } = mongoose;
78

89
mongoose.Promise = Promise;
910

11+
export async function getPortFree() {
12+
return new Promise<number>((res) => {
13+
const srv = net.createServer();
14+
srv.listen(0, () => {
15+
const port = (srv.address() as AddressInfo).port;
16+
srv.close(() => res(port));
17+
});
18+
});
19+
}
20+
1021
const originalConnect = mongoose.connect;
1122
mongoose.createConnection = (async () => {
12-
const mongoServer = await MongoMemoryServer.create();
23+
const mongoServer = await MongoMemoryServer.create({
24+
instance: {
25+
port: await getPortFree(),
26+
},
27+
});
1328
const mongoUri = mongoServer.getUri();
1429

15-
// originalConnect.bind(mongoose)(mongoUri, { useMongoClient: true }); // mongoose 4
16-
originalConnect.bind(mongoose)(
17-
mongoUri,
18-
{
19-
useNewUrlParser: true,
20-
useUnifiedTopology: true,
21-
} as any /* for tests compatibility with mongoose v5 & v6 */
22-
); // mongoose 5
23-
// originalConnect.bind(mongoose)(mongoUri, {}); // mongoose 6
30+
originalConnect.bind(mongoose)(mongoUri, {});
2431

2532
mongoose.connection.on('error', (e) => {
2633
if (e.message.code === 'ETIMEDOUT') {

src/__mocks__/userModel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ const UserSchema = new Schema(
139139
);
140140

141141
UserSchema.set('autoIndex', false);
142-
UserSchema.index({ name: 1, age: -1 });
142+
UserSchema.index({ n: 1, age: -1 });
143143

144144
// eslint-disable-next-line
145145
UserSchema.virtual('nameVirtual').get(function (this: any) {

src/__tests__/__snapshots__/integration-test.ts.snap

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

33
exports[`integration tests projection should request all fields to rawData field: projection from all fields 1`] = `
4-
Array [
4+
[
55
"__v",
66
"_id",
77
"age",
@@ -24,9 +24,9 @@ Array [
2424
`;
2525

2626
exports[`integration tests projection should request only fields from query: projection from query fields 1`] = `
27-
Object {
28-
"data": Object {
29-
"user": Object {
27+
{
28+
"data": {
29+
"user": {
3030
"name": "Name",
3131
},
3232
},

src/__tests__/github_issues/117-test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
import mongoose from 'mongoose';
22
import { MongoMemoryServer } from 'mongodb-memory-server';
33
import { composeWithMongoose } from '../../index';
4+
import { getPortFree } from '../../__mocks__/mongooseCommon';
45

56
let mongoServer: MongoMemoryServer;
67
beforeAll(async () => {
7-
mongoServer = await MongoMemoryServer.create();
8+
mongoServer = await MongoMemoryServer.create({
9+
instance: {
10+
port: await getPortFree(),
11+
},
12+
});
813
const mongoUri = mongoServer.getUri();
914
await mongoose.connect(
1015
mongoUri,

src/__tests__/github_issues/120-test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,15 @@
33
import mongoose from 'mongoose';
44
import { MongoMemoryServer } from 'mongodb-memory-server';
55
import { composeWithMongoose } from '../../index';
6+
import { getPortFree } from '../../__mocks__/mongooseCommon';
67

78
let mongoServer: MongoMemoryServer;
89
beforeAll(async () => {
9-
mongoServer = await MongoMemoryServer.create();
10+
mongoServer = await MongoMemoryServer.create({
11+
instance: {
12+
port: await getPortFree(),
13+
},
14+
});
1015
const mongoUri = mongoServer.getUri();
1116
await mongoose.connect(
1217
mongoUri,

src/__tests__/github_issues/128-test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,15 @@
33
import mongoose from 'mongoose';
44
import { MongoMemoryServer } from 'mongodb-memory-server';
55
import { composeWithMongoose } from '../../index';
6+
import { getPortFree } from '../../__mocks__/mongooseCommon';
67

78
let mongoServer: MongoMemoryServer;
89
beforeAll(async () => {
9-
mongoServer = await MongoMemoryServer.create();
10+
mongoServer = await MongoMemoryServer.create({
11+
instance: {
12+
port: await getPortFree(),
13+
},
14+
});
1015
const mongoUri = mongoServer.getUri();
1116
await mongoose.connect(
1217
mongoUri,

src/__tests__/github_issues/135-test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@ import mongoose from 'mongoose';
44
import { MongoMemoryServer } from 'mongodb-memory-server';
55
import { schemaComposer, graphql } from 'graphql-compose';
66
import { composeWithMongoose } from '../../index';
7+
import { getPortFree } from '../../__mocks__/mongooseCommon';
78

89
let mongoServer: MongoMemoryServer;
910
beforeAll(async () => {
10-
mongoServer = await MongoMemoryServer.create();
11+
mongoServer = await MongoMemoryServer.create({
12+
instance: {
13+
port: await getPortFree(),
14+
},
15+
});
1116
const mongoUri = mongoServer.getUri();
1217
await mongoose.connect(
1318
mongoUri,

src/__tests__/github_issues/136-test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@ import mongoose from 'mongoose';
44
import { MongoMemoryServer } from 'mongodb-memory-server';
55
import { schemaComposer, graphql } from 'graphql-compose';
66
import { composeWithMongoose } from '../../index';
7+
import { getPortFree } from '../../__mocks__/mongooseCommon';
78

89
let mongoServer: MongoMemoryServer;
910
beforeAll(async () => {
10-
mongoServer = await MongoMemoryServer.create();
11+
mongoServer = await MongoMemoryServer.create({
12+
instance: {
13+
port: await getPortFree(),
14+
},
15+
});
1116
const mongoUri = mongoServer.getUri();
1217
await mongoose.connect(
1318
mongoUri,

src/__tests__/github_issues/157-test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@ import mongoose from 'mongoose';
44
import { MongoMemoryServer } from 'mongodb-memory-server';
55
import { schemaComposer, graphql } from 'graphql-compose';
66
import { composeWithMongoose } from '../../index';
7+
import { getPortFree } from '../../__mocks__/mongooseCommon';
78

89
let mongoServer: MongoMemoryServer;
910
beforeAll(async () => {
10-
mongoServer = await MongoMemoryServer.create();
11+
mongoServer = await MongoMemoryServer.create({
12+
instance: {
13+
port: await getPortFree(),
14+
},
15+
});
1116
const mongoUri = mongoServer.getUri();
1217
await mongoose.connect(
1318
mongoUri,

src/__tests__/github_issues/194-test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@ import mongoose from 'mongoose';
44
import { MongoMemoryServer } from 'mongodb-memory-server';
55
import { schemaComposer, graphql } from 'graphql-compose';
66
import { composeWithMongoose } from '../../index';
7+
import { getPortFree } from '../../__mocks__/mongooseCommon';
78

89
let mongoServer: MongoMemoryServer;
910
beforeAll(async () => {
10-
mongoServer = await MongoMemoryServer.create();
11+
mongoServer = await MongoMemoryServer.create({
12+
instance: {
13+
port: await getPortFree(),
14+
},
15+
});
1116
const mongoUri = mongoServer.getUri();
1217
await mongoose.connect(
1318
mongoUri,

0 commit comments

Comments
 (0)