Skip to content

Commit 18d7aa4

Browse files
authored
feat: nest v11 support, latest testing tooling (#457)
1 parent 03e55e9 commit 18d7aa4

136 files changed

Lines changed: 6203 additions & 5672 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.eslintrc.js

Lines changed: 0 additions & 92 deletions
This file was deleted.

.github/workflows/ci-merge.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
runs-on: ubuntu-latest
1010
strategy:
1111
matrix:
12-
node-version: [18.x]
12+
node-version: [20.x]
1313
steps:
1414
- uses: actions/checkout@v2
1515
- name: Enable Corepack

.github/workflows/ci-pr-test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010

1111
strategy:
1212
matrix:
13-
node-version: [18.x]
13+
node-version: [20.x]
1414

1515
steps:
1616
- uses: actions/checkout@v2

.prettierrc.js

Lines changed: 0 additions & 3 deletions
This file was deleted.

.prettierrc.mjs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import config from '@concepta/prettier-config/node';
2+
3+
export default config;

eslint.config.mjs

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
// @ts-check
2+
import conceptaConfig from '@concepta/eslint-config/nest';
3+
import tseslint from 'typescript-eslint';
4+
import importPlugin from 'eslint-plugin-import';
5+
import tsdocPlugin from 'eslint-plugin-tsdoc';
6+
import jsdocPlugin from 'eslint-plugin-jsdoc';
7+
8+
export default tseslint.config(
9+
// Ignore patterns
10+
{
11+
ignores: [
12+
'packages/*/dist/**',
13+
'**/node_modules/**',
14+
'**/.eslintrc.js',
15+
'**/.eslintrc.spec.js',
16+
'**/tsconfig.json',
17+
'**/tsconfig.eslint.json',
18+
'**/commitlint.config.js',
19+
],
20+
},
21+
22+
// Extend @concepta/eslint-config/nest (filter out undefined configs)
23+
...conceptaConfig.filter(config => config !== undefined),
24+
25+
// JSDoc recommended config
26+
jsdocPlugin.configs['flat/recommended-typescript'],
27+
28+
// Project-specific overrides
29+
{
30+
languageOptions: {
31+
parserOptions: {
32+
project: './tsconfig.eslint.json',
33+
tsconfigRootDir: import.meta.dirname,
34+
},
35+
},
36+
plugins: {
37+
import: importPlugin,
38+
tsdoc: tsdocPlugin,
39+
},
40+
settings: {
41+
jsdoc: {
42+
mode: 'typescript',
43+
},
44+
},
45+
rules: {
46+
// Import rules
47+
'import/no-duplicates': 'error',
48+
'import/no-extraneous-dependencies': 'error',
49+
// Project-specific import order with @nestjs and @concepta path groups
50+
'import/order': [
51+
'error',
52+
{
53+
pathGroups: [
54+
{
55+
pattern: '@nestjs/**',
56+
group: 'external',
57+
position: 'after',
58+
},
59+
{
60+
pattern: '@concepta/**',
61+
group: 'external',
62+
position: 'after',
63+
},
64+
{
65+
pattern: '{./__fixtures__/**,../__fixtures__/**}',
66+
group: 'sibling',
67+
position: 'after',
68+
},
69+
],
70+
alphabetize: {
71+
order: 'asc',
72+
caseInsensitive: false,
73+
},
74+
pathGroupsExcludedImportTypes: ['builtin', 'object'],
75+
'newlines-between': 'always',
76+
},
77+
],
78+
79+
// NestJS typed rules
80+
'@darraghor/nestjs-typed/param-decorator-name-matches-route-param': 'off',
81+
'@darraghor/nestjs-typed/injectable-should-be-provided': 'off',
82+
83+
// JSDoc/TSDoc rules
84+
'jsdoc/tag-lines': ['error', 'any', { startLines: 1 }],
85+
'tsdoc/syntax': 'error',
86+
},
87+
},
88+
89+
// TypeScript files override
90+
{
91+
files: ['**/*.ts'],
92+
rules: {
93+
'jsdoc/require-jsdoc': 'off',
94+
'jsdoc/require-param': 'off',
95+
'jsdoc/require-returns': 'off',
96+
},
97+
},
98+
99+
// Spec and fixture files override
100+
{
101+
files: ['**/*.spec.ts', '**/*.fixture.ts'],
102+
rules: {
103+
'@darraghor/nestjs-typed/controllers-should-supply-api-tags': 'off',
104+
'@darraghor/nestjs-typed/api-method-should-specify-api-response': 'off',
105+
'jsdoc/tag-lines': 'off',
106+
'tsdoc/syntax': 'off',
107+
},
108+
},
109+
);

jest.config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"tsconfig": "tsconfig.jest.json"
66
}
77
},
8-
"setupFilesAfterEnv": ["jest-extended/all"],
8+
"setupFilesAfterEnv": ["<rootDir>/jest.setup.js", "jest-extended/all"],
99
"coverageThreshold": {
1010
"global": {
1111
"branches": 0,

jest.setup.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// Make Node.js crypto module available globally for tests
2+
// This is needed for @nestjs/typeorm v11 which expects crypto to be global
3+
global.crypto = require('crypto');

package.json

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,57 +3,61 @@
33
"version": "7.0.0-alpha.9",
44
"license": "BSD-3-Clause",
55
"private": true,
6+
"engines": {
7+
"node": ">=20.0.0",
8+
"yarn": ">=4.0.0"
9+
},
610
"workspaces": {
711
"packages": [
812
"packages/*"
913
]
1014
},
1115
"devDependencies": {
12-
"@commitlint/cli": "^19.4.0",
13-
"@commitlint/config-conventional": "^19.2.2",
14-
"@concepta/eslint-config": "^1.1.4",
15-
"@concepta/prettier-config": "^1.1.4",
16-
"@darraghor/eslint-plugin-nestjs-typed": "^3.22.6",
17-
"@nestjs/cli": "^10.4.4",
18-
"@nestjs/schematics": "^10.1.3",
19-
"@nestjs/testing": "^10.4.1",
16+
"@commitlint/cli": "^19.8.1",
17+
"@commitlint/config-conventional": "^19.8.1",
18+
"@concepta/eslint-config": "2.0.0-alpha.4",
19+
"@concepta/prettier-config": "2.0.0-alpha.4",
20+
"@darraghor/eslint-plugin-nestjs-typed": "^6.9.3",
21+
"@eslint/js": "^9.39.1",
22+
"@nestjs/cli": "^11.0.10",
23+
"@nestjs/schematics": "^11.0.9",
24+
"@nestjs/testing": "^11.1.9",
2025
"@types/express": "^4.17.21",
2126
"@types/jest": "^27.5.2",
22-
"@types/node": "^18.19.44",
27+
"@types/node": "^20.19.25",
2328
"@types/nodemailer": "^6.4.15",
24-
"@types/supertest": "^2.0.16",
25-
"@typescript-eslint/eslint-plugin": "^5.62.0",
26-
"@typescript-eslint/parser": "^5.62.0",
29+
"@types/supertest": "^6.0.3",
2730
"class-transformer": "^0.5.1",
2831
"class-validator": "^0.14.1",
29-
"eslint": "^8.57.0",
30-
"eslint-config-prettier": "^8.10.0",
31-
"eslint-plugin-import": "^2.31.0",
32-
"eslint-plugin-jsdoc": "^48.11.0",
33-
"eslint-plugin-node": "^11.1.0",
34-
"eslint-plugin-prettier": "^4.2.1",
35-
"eslint-plugin-tsdoc": "^0.3.0",
32+
"eslint": "^9.39.1",
33+
"eslint-config-prettier": "^10.1.8",
34+
"eslint-plugin-import": "^2.32.0",
35+
"eslint-plugin-jsdoc": "^61.2.1",
36+
"eslint-plugin-prettier": "^5.5.4",
37+
"eslint-plugin-tsdoc": "^0.5.0",
38+
"globals": "^16.5.0",
3639
"husky": "^7.0.4",
37-
"jest": "27.5.1",
40+
"jest": "30.2.0",
3841
"jest-junit": "^13.2.0",
39-
"jest-mock-extended": "^2.0.9",
40-
"jsonc-eslint-parser": "^2.4.0",
42+
"jest-mock-extended": "^4.0.0",
43+
"jsonc-eslint-parser": "^2.4.1",
4144
"lerna": "^3.22.1",
4245
"markdownlint-cli": "^0.41.0",
43-
"prettier": "^2.8.8",
46+
"prettier": "^3.6.2",
4447
"reflect-metadata": "^0.1.14",
4548
"rimraf": "^3.0.2",
4649
"rxjs": "^7.8.1",
4750
"standard-version": "^9.5.0",
4851
"supertest": "^6.3.4",
49-
"ts-jest": "^27.1.5",
50-
"ts-loader": "^9.5.1",
52+
"ts-jest": "^29.4.5",
53+
"ts-loader": "^9.5.4",
5154
"ts-node": "^10.9.2",
5255
"tsconfig-paths": "^3.15.0",
5356
"typedoc": "^0.25.13",
5457
"typedoc-plugin-coverage": "^3.3.0",
55-
"typeorm": "^0.3.20",
56-
"typescript": "^4.9.5"
58+
"typeorm": "^0.3.27",
59+
"typescript": "^4.9.5",
60+
"typescript-eslint": "^8.46.4"
5761
},
5862
"scripts": {
5963
"postinstall": "husky install",
@@ -80,5 +84,5 @@
8084
"changelog:patch": "standard-version --release-as patch",
8185
"changelog:major": "standard-version --release-as major"
8286
},
83-
"packageManager": "yarn@4.4.0"
87+
"packageManager": "yarn@4.11.0"
8488
}

packages/nestjs-access-control/package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,17 @@
1313
],
1414
"dependencies": {
1515
"@concepta/nestjs-common": "^7.0.0-alpha.9",
16-
"@nestjs/common": "^10.4.1",
17-
"@nestjs/config": "^3.2.3",
18-
"@nestjs/core": "^10.4.1",
16+
"@nestjs/common": "^11.1.9",
17+
"@nestjs/config": "^4.0.2",
18+
"@nestjs/core": "^11.1.9",
1919
"accesscontrol": "^2.2.1",
2020
"rxjs": "^7.8.1"
2121
},
2222
"devDependencies": {
23-
"@nestjs/swagger": "^7.4.0",
24-
"@nestjs/testing": "^10.4.1",
25-
"@types/supertest": "^2.0.16",
26-
"jest-mock-extended": "^2.0.9",
23+
"@nestjs/swagger": "^11.2.2",
24+
"@nestjs/testing": "^11.1.9",
25+
"@types/supertest": "^6.0.3",
26+
"jest-mock-extended": "^4.0.0",
2727
"supertest": "^6.3.4"
2828
}
2929
}

0 commit comments

Comments
 (0)