@lenne.tech/nest-server 11.29.1 → 11.30.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.
@@ -0,0 +1,98 @@
1
+ # Migration Guide: 11.29.x → 11.30.x
2
+
3
+ ## Overview
4
+
5
+ | Category | Details |
6
+ |----------|---------|
7
+ | **Breaking Changes** | None in nest-server's own API. Two transitive changes may affect projects: `@nestjs/websockets` removed from dependencies; `@nestjs/swagger` 11.4.6 blocks deep imports |
8
+ | **New Features** | None (dependency maintenance release) |
9
+ | **Bugfixes** | Dependency updates incl. security-relevant `ws` 8.21.1 override; 6 obsolete pnpm overrides removed |
10
+ | **Migration Effort** | Very Low (~5 minutes) — most projects need no changes |
11
+
12
+ ---
13
+
14
+ ## Quick Migration
15
+
16
+ ```bash
17
+ # Update package
18
+ npm install @lenne.tech/nest-server@11.30.x
19
+
20
+ # Verify build
21
+ npm run build
22
+
23
+ # Run tests
24
+ npm test
25
+ ```
26
+
27
+ Most projects need no code changes. Read the two notes below only if your
28
+ project uses `@WebSocketGateway` or deep-imports from `@nestjs/swagger`.
29
+
30
+ ---
31
+
32
+ ## What Changed in 11.30.x
33
+
34
+ Dependency maintenance across the board (all checks green, 2157 tests, 0 audit
35
+ findings):
36
+
37
+ - **dependencies:** `@getbrevo/brevo` 3.0.4, `@nestjs/swagger` 11.4.6,
38
+ `jose` 6.2.3, `ws` 8.21.1, `graphql-ws` 6.1.0, `ejs` 6.0.1,
39
+ `ts-morph` 28.0.0
40
+ - **removed:** `@nestjs/websockets` (unused by the framework itself — see below)
41
+ - **devDependencies:** `@nestjs/cli` 11.0.24, `vite` 8.1.5, `oxfmt` 0.59.0,
42
+ `@compodoc/compodoc` 2.0.0, `@types/node` 26.1.1
43
+ - **pnpm overrides:** 6 obsolete entries removed (`ajv`, `picomatch`,
44
+ `js-yaml`, `uuid`, `@babel/core`, `websocket-driver` — all resolved
45
+ upstream); the `ws` override stays (load-bearing against
46
+ GHSA-96hv-2xvq-fx4p)
47
+
48
+ ---
49
+
50
+ ## Notes for Consuming Projects
51
+
52
+ ### 1. `@nestjs/websockets` is no longer a nest-server dependency
53
+
54
+ The framework itself never used it. If your project uses `@WebSocketGateway`
55
+ (or anything else from `@nestjs/websockets`) it previously worked only as a
56
+ phantom dependency — add it explicitly now:
57
+
58
+ ```bash
59
+ npm install @nestjs/websockets@^11.1.28
60
+ ```
61
+
62
+ GraphQL subscriptions are NOT affected (`@nestjs/graphql` uses
63
+ `graphql-ws`/`ws` directly).
64
+
65
+ ### 2. `@nestjs/swagger` 11.4.6 ships an `exports` map — deep imports fail at runtime
66
+
67
+ **Before:**
68
+ ```typescript
69
+ import { DECORATORS } from '@nestjs/swagger/dist/constants';
70
+ ```
71
+
72
+ **After:**
73
+ ```typescript
74
+ import { DECORATORS } from '@nestjs/swagger';
75
+ ```
76
+
77
+ Deep imports like `@nestjs/swagger/dist/*` now throw
78
+ `ERR_PACKAGE_PATH_NOT_EXPORTED` at runtime (type-only imports still compile).
79
+ Everything you need is available from the root export.
80
+
81
+ ### 3. `ejs` 5 → 6 (framework-internal)
82
+
83
+ The framework's own template rendering (`ejs.compile`) is unchanged and fully
84
+ tested. Only if your project passes removed legacy ejs options to its own
85
+ templates would you be affected — unlikely; check the ejs 6 changelog if you
86
+ use custom ejs options.
87
+
88
+ ---
89
+
90
+ ## Detailed Migration Steps
91
+
92
+ 1. Update the package (`npm install @lenne.tech/nest-server@11.30.x` or
93
+ `pnpm run update` in starter-based projects).
94
+ 2. Search your project for `@nestjs/swagger/dist` deep imports and replace
95
+ them with root imports.
96
+ 3. If you use `@WebSocketGateway`: add `@nestjs/websockets` to your own
97
+ dependencies.
98
+ 4. `npm run build` + `npm test` — both should pass without further changes.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lenne.tech/nest-server",
3
- "version": "11.29.1",
3
+ "version": "11.30.0",
4
4
  "description": "Modern, fast, powerful Node.js web framework in TypeScript based on Nest with a GraphQL API and a connection to MongoDB (or other databases).",
5
5
  "keywords": [
6
6
  "node",
@@ -84,7 +84,7 @@
84
84
  "@apollo/server": "5.5.1",
85
85
  "@as-integrations/express5": "1.1.2",
86
86
  "@better-auth/passkey": "1.6.23",
87
- "@getbrevo/brevo": "3.0.1",
87
+ "@getbrevo/brevo": "3.0.4",
88
88
  "@modelcontextprotocol/sdk": "1.29.0",
89
89
  "@nestjs/apollo": "13.4.2",
90
90
  "@nestjs/common": "11.1.28",
@@ -95,9 +95,8 @@
95
95
  "@nestjs/passport": "11.0.5",
96
96
  "@nestjs/platform-express": "11.1.28",
97
97
  "@nestjs/schedule": "6.1.3",
98
- "@nestjs/swagger": "11.4.2",
98
+ "@nestjs/swagger": "11.4.6",
99
99
  "@nestjs/terminus": "11.1.1",
100
- "@nestjs/websockets": "11.1.28",
101
100
  "@tus/file-store": "2.1.0",
102
101
  "@tus/server": "2.4.1",
103
102
  "@types/supertest": "7.2.1",
@@ -109,14 +108,14 @@
109
108
  "cookie-parser": "1.4.7",
110
109
  "cron": "4.4.0",
111
110
  "dotenv": "17.4.2",
112
- "ejs": "5.0.2",
111
+ "ejs": "6.0.1",
113
112
  "express": "5.2.1",
114
113
  "graphql": "16.14.0",
115
114
  "graphql-query-complexity": "1.1.1",
116
115
  "graphql-subscriptions": "3.0.0",
117
116
  "graphql-upload": "15.0.2",
118
- "graphql-ws": "6.0.8",
119
- "jose": "6.2.1",
117
+ "graphql-ws": "6.1.0",
118
+ "jose": "6.2.3",
120
119
  "js-sha256": "0.11.1",
121
120
  "json-to-graphql-query": "2.3.0",
122
121
  "lodash": "4.18.1",
@@ -131,13 +130,13 @@
131
130
  "rfdc": "1.4.1",
132
131
  "rxjs": "7.8.2",
133
132
  "supertest": "7.2.2",
134
- "ts-morph": "27.0.2",
135
- "ws": "8.21.0",
133
+ "ts-morph": "28.0.0",
134
+ "ws": "8.21.1",
136
135
  "yuml-diagram": "1.2.0"
137
136
  },
138
137
  "devDependencies": {
139
- "@compodoc/compodoc": "1.2.1",
140
- "@nestjs/cli": "11.0.21",
138
+ "@compodoc/compodoc": "2.0.0",
139
+ "@nestjs/cli": "11.0.24",
141
140
  "@nestjs/schematics": "11.1.0",
142
141
  "@nestjs/testing": "11.1.28",
143
142
  "@swc/cli": "0.8.1",
@@ -148,7 +147,7 @@
148
147
  "@types/express": "5.0.6",
149
148
  "@types/lodash": "4.17.24",
150
149
  "@types/multer": "2.2.0",
151
- "@types/node": "25.9.1",
150
+ "@types/node": "26.1.1",
152
151
  "@types/nodemailer": "8.0.1",
153
152
  "@types/passport": "1.0.17",
154
153
  "@vitest/coverage-v8": "4.1.10",
@@ -159,7 +158,7 @@
159
158
  "nodemon": "3.1.14",
160
159
  "npm-watch": "0.13.0",
161
160
  "otpauth": "9.5.1",
162
- "oxfmt": "0.51.0",
161
+ "oxfmt": "0.59.0",
163
162
  "oxlint": "1.74.0",
164
163
  "rimraf": "6.1.3",
165
164
  "ts-node": "10.9.2",
@@ -168,7 +167,7 @@
168
167
  "tus-js-client": "4.3.1",
169
168
  "typescript": "5.9.3",
170
169
  "unplugin-swc": "1.5.9",
171
- "vite": "8.1.4",
170
+ "vite": "8.1.5",
172
171
  "vite-plugin-node": "8.0.0",
173
172
  "vitest": "4.1.10"
174
173
  },
@@ -273,9 +273,7 @@ export class FindUsersAiTool extends AiTool {
273
273
  // Routes through CrudService with the caller's serviceOptions → permissions apply.
274
274
  const users = await this.userService.find(
275
275
  {
276
- filterQuery: {
277
- /* … */
278
- },
276
+ filterQuery: {/* … */},
279
277
  },
280
278
  context.serviceOptions,
281
279
  );
@@ -297,13 +297,14 @@ const localConfig = {
297
297
  - **Graceful Degradation**: If auto-detection fails (no baseUrl), Passkey is disabled with a warning - other auth methods (Email/Password, 2FA) continue to work
298
298
 
299
299
  **Auto-Detection Resolution:**
300
- | Value | Priority | Source |
301
- |-------|----------|--------|
302
- | `baseUrl` | 1. Explicit `betterAuth.baseUrl` → 2. Root-level `baseUrl` → 3. Localhost default (env: 'local') |
303
- | `appUrl` | 1. Root-level `appUrl` → 2. Derived from `baseUrl` (removes `api.` prefix) → 3. Localhost default |
304
- | `rpId` | 1. Explicit `passkey.rpId` → 2. Auto-detect from appUrl hostname |
305
- | `origin` | 1. Explicit `passkey.origin` → 2. Auto-detect from appUrl |
306
- | `trustedOrigins` | 1. Explicit `trustedOrigins` → 2. Auto-detect from appUrl |
300
+
301
+ | Value | Priority | Source |
302
+ | ---------------- | ------------------------------------------------------------------------------------------------- | ------ |
303
+ | `baseUrl` | 1. Explicit `betterAuth.baseUrl` → 2. Root-level `baseUrl` → 3. Localhost default (env: 'local') |
304
+ | `appUrl` | 1. Root-level `appUrl` → 2. Derived from `baseUrl` (removes `api.` prefix) → 3. Localhost default |
305
+ | `rpId` | 1. Explicit `passkey.rpId` → 2. Auto-detect from appUrl hostname |
306
+ | `origin` | 1. Explicit `passkey.origin` → 2. Auto-detect from appUrl |
307
+ | `trustedOrigins` | 1. Explicit `trustedOrigins` → 2. Auto-detect from appUrl |
307
308
 
308
309
  ### Explicit Passkey Configuration (Advanced)
309
310