Compare commits

..

3 Commits

Author SHA1 Message Date
0938cf1ccf add AGENTS.md 2026-02-12 19:32:41 +08:00
ec3cbe7a19 update README.md 2026-02-12 14:45:38 +08:00
c07daa6e86 remove pnpm-workspace.yaml 2026-02-07 17:06:00 +08:00
5 changed files with 206 additions and 82 deletions

159
AGENTS.md Normal file
View File

@@ -0,0 +1,159 @@
# AGENTS.md - Coding Guidelines for Trace Backend
## Build, Lint, and Test Commands
### Essential Commands
- `pnpm run build` - Build the NestJS application to dist/
- `pnpm run lint` - Run ESLint and auto-fix issues
- `pnpm run format` - Format code with Prettier
- `pnpm run test` - Run all Jest tests
- `pnpm run test:watch` - Run tests in watch mode
- `pnpm run test:cov` - Run tests with coverage report
- `pnpm run start:dev` - Start development server with hot reload
- `pnpm run init-db` - Initialize database (run scripts/init-db.ts)
### Running Single Tests
- `jest path/to/test.spec.ts` - Run a specific test file
- `jest -t "test name"` - Run tests matching a pattern
## Project Overview
This is a NestJS backend for the Trace (贝凡溯源) management platform with:
- **Framework**: NestJS 11.x with TypeScript
- **Database**: SQLite via Prisma ORM with better-sqlite3 adapter
- **Validation**: Zod schemas with nestjs-zod global pipe
- **Auth**: JWT-based authentication with Passport
- **Package Manager**: pnpm 10.x
## Code Style Guidelines
### Imports and Organization
- Use double quotes for all imports: `import { X } from "package"`
- Group external framework imports first, then internal imports
- Use relative imports with `../` or `./` notation
- Example:
```typescript
import { Injectable, UnauthorizedException } from "@nestjs/common";
import { JwtService } from "@nestjs/jwt";
import * as bcrypt from "bcryptjs";
import { DatabaseService } from "../database/database.service";
import { User, AuthUser } from "../types";
```
### Naming Conventions
- **Classes**: PascalCase - `AuthService`, `AuthGuard`, `SerialsService`
- **Methods/Functions**: camelCase - `validateUser`, `login`, `getProfile`
- **Variables**: camelCase - `const prisma = ...`
- **Interfaces/Types**: PascalCase - `User`, `AuthUser`, `JWTPayload`
- **DTOs**: PascalCase with "Dto" suffix - `LoginDto`, `ChangePasswordDto`
- **Models**: PascalCase - `User`, `Company`, `Serial` (Prisma models)
### Module Structure
Each feature follows the NestJS pattern:
- `module-name/`
- `module-name.module.ts` - Module definition with imports/providers
- `module-name.controller.ts` - HTTP request handlers
- `module-name.service.ts` - Business logic and database operations
- `dto/` - Zod validation schemas
- `module-name.guard.ts` - Guards (if needed)
### Controllers
- Use appropriate decorators: `@Controller`, `@Get`, `@Post`, `@Patch`, `@Delete`
- Apply guards: `@UseGuards(AuthGuard)` or `@UseGuards(AuthGuard, AdminGuard)`
- Set status codes explicitly: `@HttpCode(HttpStatus.OK)`
- Extract params/query with decorators: `@Param`, `@Query`, `@Body`, `@Req`
- Validate DTOs: `@Body(LoginDto) loginDto: any`
- Return structured responses (see Response Format below)
Example:
```typescript
@Controller("auth")
export class AuthController {
constructor(private authService: AuthService) {}
@Post("login")
@HttpCode(HttpStatus.OK)
async login(@Body(LoginDto) loginDto: any) {
const user = await this.authService.validateUser(loginDto.username, loginDto.password);
return this.authService.login(user);
}
}
```
### Services
- Mark with `@Injectable()` decorator
- Inject dependencies via constructor
- Use `DatabaseService.getPrisma()` to get Prisma client
- Throw `Error` for business logic failures (guards handle auth)
- Use transactions with `prisma.$transaction()` for multi-step operations
### Validation (DTOs)
- Use Zod schemas in `dto/index.ts` files
- Define validation rules with Chinese error messages
- Export from `dto/index.ts` barrel file
Example:
```typescript
export const LoginDto = z.object({
username: z.string().min(1, "用户名不能为空"),
password: z.string().min(1, "密码不能为空"),
});
```
### Error Handling
- Throw NestJS exceptions in controllers/guards:
- `UnauthorizedException` - Auth failures
- `NotFoundException` - Resource not found
- Throw `Error` in services for business logic errors
- Provide Chinese error messages: `throw new Error("用户名或密码错误")`
### Response Format
API responses follow this structure:
```typescript
{
message: "操作描述(中文)",
data?: any,
pagination?: {
page: number,
limit: number,
total: number,
totalPages: number
}
}
```
### Database (Prisma)
- Access Prisma client via `DatabaseService.getPrisma()`
- Use `select` to limit returned fields for security
- Use `include` for relations (user, company)
- Serial numbers should be uppercase: `serialNumber.toUpperCase()`
### Authentication
- Use `@UseGuards(AuthGuard)` for authenticated routes
- Use `@UseGuards(AuthGuard, AdminGuard)` for admin-only routes
- Access user via `@Req() req: Request` and cast: `(req as any).user`
- User object contains: `id`, `username`, `name`, `role`
### TypeScript Configuration
- Target: ES2021
- Strict mode disabled (per tsconfig.json)
- Experimental decorators enabled
- Module: commonjs
### Database Schema
Located in `prisma/schema.prisma`:
- Models: User, Company, Serial
- Relations: User -> Serial, Company -> Serial
- After schema changes: `npx prisma migrate dev` then `npx prisma generate`
### Static Files
- Production: serves from `frontend/dist/`
- Development: serves from `frontend/public/`
- Static assets served via `@nestjs/serve-static`
## Development Notes
- Global API prefix: `/api`
- CORS enabled
- QR code color: dark="#165DFF", light="#ffffff"
- Default serial prefix: "BF" + current year (e.g., "BF26")

View File

@@ -1,4 +1,4 @@
# 溯源管理平台 - 后端服务 # 溯源管理平台 - 后端服务Node.js 版本)
浙江贝凡溯源管理平台的后端服务,基于 NestJS + TypeScript + SQLite。 浙江贝凡溯源管理平台的后端服务,基于 NestJS + TypeScript + SQLite。

View File

@@ -5,6 +5,7 @@
"author": "", "author": "",
"private": true, "private": true,
"license": "MIT", "license": "MIT",
"packageManager": "pnpm@10.27.0",
"scripts": { "scripts": {
"build": "nest build", "build": "nest build",
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
@@ -63,6 +64,15 @@
"tsx": "^4.21.0", "tsx": "^4.21.0",
"typescript": "^5.9.3" "typescript": "^5.9.3"
}, },
"pnpm": {
"onlyBuiltDependencies": [
"@nestjs/core",
"@prisma/engines",
"better-sqlite3",
"esbuild",
"unrs-resolver"
]
},
"jest": { "jest": {
"moduleFileExtensions": [ "moduleFileExtensions": [
"js", "js",
@@ -79,6 +89,5 @@
], ],
"coverageDirectory": "../coverage", "coverageDirectory": "../coverage",
"testEnvironment": "node" "testEnvironment": "node"
}, }
"packageManager": "pnpm@10.27.0"
} }

108
pnpm-lock.yaml generated
View File

@@ -10,25 +10,25 @@ importers:
dependencies: dependencies:
'@nestjs/common': '@nestjs/common':
specifier: ^11.1.13 specifier: ^11.1.13
version: 11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) version: 11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nestjs/config': '@nestjs/config':
specifier: ^4.0.3 specifier: ^4.0.3
version: 4.0.3(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2) version: 4.0.3(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2)
'@nestjs/core': '@nestjs/core':
specifier: ^11.1.13 specifier: ^11.1.13
version: 11.1.13(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2) version: 11.1.13(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nestjs/jwt': '@nestjs/jwt':
specifier: ^11.0.2 specifier: ^11.0.2
version: 11.0.2(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)) version: 11.0.2(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))
'@nestjs/passport': '@nestjs/passport':
specifier: ^11.0.5 specifier: ^11.0.5
version: 11.0.5(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(passport@0.7.0) version: 11.0.5(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(passport@0.7.0)
'@nestjs/platform-express': '@nestjs/platform-express':
specifier: ^11.1.13 specifier: ^11.1.13
version: 11.1.13(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13) version: 11.1.13(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)
'@nestjs/serve-static': '@nestjs/serve-static':
specifier: ^5.0.4 specifier: ^5.0.4
version: 5.0.4(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(express@5.2.1) version: 5.0.4(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(express@5.2.1)
'@prisma/adapter-better-sqlite3': '@prisma/adapter-better-sqlite3':
specifier: ^7.3.0 specifier: ^7.3.0
version: 7.3.0 version: 7.3.0
@@ -46,7 +46,7 @@ importers:
version: 17.2.4 version: 17.2.4
nestjs-zod: nestjs-zod:
specifier: ^5.1.1 specifier: ^5.1.1
version: 5.1.1(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2)(zod@4.3.6) version: 5.1.1(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2)(zod@4.3.6)
passport: passport:
specifier: ^0.7.0 specifier: ^0.7.0
version: 0.7.0 version: 0.7.0
@@ -77,7 +77,7 @@ importers:
version: 11.0.9(chokidar@4.0.3)(typescript@5.9.3) version: 11.0.9(chokidar@4.0.3)(typescript@5.9.3)
'@nestjs/testing': '@nestjs/testing':
specifier: ^11.1.13 specifier: ^11.1.13
version: 11.1.13(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(@nestjs/platform-express@11.1.13) version: 11.1.13(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(@nestjs/platform-express@11.1.13)
'@types/express': '@types/express':
specifier: ^5.0.6 specifier: ^5.0.6
version: 5.0.6 version: 5.0.6
@@ -1126,9 +1126,6 @@ packages:
'@types/supertest@6.0.3': '@types/supertest@6.0.3':
resolution: {integrity: sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==} resolution: {integrity: sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==}
'@types/validator@13.15.10':
resolution: {integrity: sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==}
'@types/yargs-parser@21.0.3': '@types/yargs-parser@21.0.3':
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
@@ -1557,12 +1554,6 @@ packages:
cjs-module-lexer@2.2.0: cjs-module-lexer@2.2.0:
resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==} resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==}
class-transformer@0.5.1:
resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==}
class-validator@0.14.3:
resolution: {integrity: sha512-rXXekcjofVN1LTOSw+u4u9WXVEUvNBVjORW154q/IdmYWy1nMbOU9aNtZB0t8m+FJQ9q91jlr2f9CwwUFdFMRA==}
cli-cursor@3.1.0: cli-cursor@3.1.0:
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
engines: {node: '>=8'} engines: {node: '>=8'}
@@ -1742,8 +1733,8 @@ packages:
destr@2.0.5: destr@2.0.5:
resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
detect-libc@2.0.2: detect-libc@2.1.2:
resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
detect-newline@3.1.0: detect-newline@3.1.0:
@@ -2387,9 +2378,6 @@ packages:
resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
engines: {node: '>=6'} engines: {node: '>=6'}
libphonenumber-js@1.12.36:
resolution: {integrity: sha512-woWhKMAVx1fzzUnMCyOzglgSgf6/AFHLASdOBcchYCyvWSGWt12imw3iu2hdI5d4dGZRsNWAmWiz37sDKUPaRQ==}
lilconfig@2.1.0: lilconfig@2.1.0:
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
engines: {node: '>=10'} engines: {node: '>=10'}
@@ -3333,10 +3321,6 @@ packages:
typescript: typescript:
optional: true optional: true
validator@13.15.26:
resolution: {integrity: sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA==}
engines: {node: '>= 0.10'}
vary@1.1.2: vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
@@ -4237,7 +4221,7 @@ snapshots:
- uglify-js - uglify-js
- webpack-cli - webpack-cli
'@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)': '@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2)':
dependencies: dependencies:
file-type: 21.3.0 file-type: 21.3.0
iterare: 1.2.1 iterare: 1.2.1
@@ -4246,23 +4230,20 @@ snapshots:
rxjs: 7.8.2 rxjs: 7.8.2
tslib: 2.8.1 tslib: 2.8.1
uid: 2.0.2 uid: 2.0.2
optionalDependencies:
class-transformer: 0.5.1
class-validator: 0.14.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@nestjs/config@4.0.3(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2)': '@nestjs/config@4.0.3(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2)':
dependencies: dependencies:
'@nestjs/common': 11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/common': 11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2)
dotenv: 17.2.3 dotenv: 17.2.3
dotenv-expand: 12.0.3 dotenv-expand: 12.0.3
lodash: 4.17.23 lodash: 4.17.23
rxjs: 7.8.2 rxjs: 7.8.2
'@nestjs/core@11.1.13(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)': '@nestjs/core@11.1.13(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)':
dependencies: dependencies:
'@nestjs/common': 11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/common': 11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nuxt/opencollective': 0.4.1 '@nuxt/opencollective': 0.4.1
fast-safe-stringify: 2.1.1 fast-safe-stringify: 2.1.1
iterare: 1.2.1 iterare: 1.2.1
@@ -4272,23 +4253,23 @@ snapshots:
tslib: 2.8.1 tslib: 2.8.1
uid: 2.0.2 uid: 2.0.2
optionalDependencies: optionalDependencies:
'@nestjs/platform-express': 11.1.13(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13) '@nestjs/platform-express': 11.1.13(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)
'@nestjs/jwt@11.0.2(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))': '@nestjs/jwt@11.0.2(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))':
dependencies: dependencies:
'@nestjs/common': 11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/common': 11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@types/jsonwebtoken': 9.0.10 '@types/jsonwebtoken': 9.0.10
jsonwebtoken: 9.0.3 jsonwebtoken: 9.0.3
'@nestjs/passport@11.0.5(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(passport@0.7.0)': '@nestjs/passport@11.0.5(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(passport@0.7.0)':
dependencies: dependencies:
'@nestjs/common': 11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/common': 11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2)
passport: 0.7.0 passport: 0.7.0
'@nestjs/platform-express@11.1.13(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)': '@nestjs/platform-express@11.1.13(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)':
dependencies: dependencies:
'@nestjs/common': 11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/common': 11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nestjs/core': 11.1.13(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.13(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
cors: 2.8.6 cors: 2.8.6
express: 5.2.1 express: 5.2.1
multer: 2.0.2 multer: 2.0.2
@@ -4308,21 +4289,21 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- chokidar - chokidar
'@nestjs/serve-static@5.0.4(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(express@5.2.1)': '@nestjs/serve-static@5.0.4(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(express@5.2.1)':
dependencies: dependencies:
'@nestjs/common': 11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/common': 11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nestjs/core': 11.1.13(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.13(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
path-to-regexp: 8.3.0 path-to-regexp: 8.3.0
optionalDependencies: optionalDependencies:
express: 5.2.1 express: 5.2.1
'@nestjs/testing@11.1.13(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(@nestjs/platform-express@11.1.13)': '@nestjs/testing@11.1.13(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)(@nestjs/platform-express@11.1.13)':
dependencies: dependencies:
'@nestjs/common': 11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/common': 11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nestjs/core': 11.1.13(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.13(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
tslib: 2.8.1 tslib: 2.8.1
optionalDependencies: optionalDependencies:
'@nestjs/platform-express': 11.1.13(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13) '@nestjs/platform-express': 11.1.13(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.13)
'@noble/hashes@1.8.0': {} '@noble/hashes@1.8.0': {}
@@ -4595,9 +4576,6 @@ snapshots:
'@types/methods': 1.1.4 '@types/methods': 1.1.4
'@types/superagent': 8.1.9 '@types/superagent': 8.1.9
'@types/validator@13.15.10':
optional: true
'@types/yargs-parser@21.0.3': {} '@types/yargs-parser@21.0.3': {}
'@types/yargs@17.0.35': '@types/yargs@17.0.35':
@@ -5036,16 +5014,6 @@ snapshots:
cjs-module-lexer@2.2.0: {} cjs-module-lexer@2.2.0: {}
class-transformer@0.5.1:
optional: true
class-validator@0.14.3:
dependencies:
'@types/validator': 13.15.10
libphonenumber-js: 1.12.36
validator: 13.15.26
optional: true
cli-cursor@3.1.0: cli-cursor@3.1.0:
dependencies: dependencies:
restore-cursor: 3.1.0 restore-cursor: 3.1.0
@@ -5183,7 +5151,7 @@ snapshots:
destr@2.0.5: {} destr@2.0.5: {}
detect-libc@2.0.2: {} detect-libc@2.1.2: {}
detect-newline@3.1.0: {} detect-newline@3.1.0: {}
@@ -6066,9 +6034,6 @@ snapshots:
leven@3.1.0: {} leven@3.1.0: {}
libphonenumber-js@1.12.36:
optional: true
lilconfig@2.1.0: {} lilconfig@2.1.0: {}
lines-and-columns@1.2.4: {} lines-and-columns@1.2.4: {}
@@ -6233,9 +6198,9 @@ snapshots:
neo-async@2.6.2: {} neo-async@2.6.2: {}
nestjs-zod@5.1.1(@nestjs/common@11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2)(zod@4.3.6): nestjs-zod@5.1.1(@nestjs/common@11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2)(zod@4.3.6):
dependencies: dependencies:
'@nestjs/common': 11.1.13(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/common': 11.1.13(reflect-metadata@0.2.2)(rxjs@7.8.2)
deepmerge: 4.3.1 deepmerge: 4.3.1
rxjs: 7.8.2 rxjs: 7.8.2
zod: 4.3.6 zod: 4.3.6
@@ -6394,7 +6359,7 @@ snapshots:
prebuild-install@7.1.3: prebuild-install@7.1.3:
dependencies: dependencies:
detect-libc: 2.0.2 detect-libc: 2.1.2
expand-template: 2.0.3 expand-template: 2.0.3
github-from-package: 0.0.0 github-from-package: 0.0.0
minimist: 1.2.8 minimist: 1.2.8
@@ -6983,9 +6948,6 @@ snapshots:
optionalDependencies: optionalDependencies:
typescript: 5.9.3 typescript: 5.9.3
validator@13.15.26:
optional: true
vary@1.1.2: {} vary@1.1.2: {}
walker@1.0.8: walker@1.0.8:

View File

@@ -1,6 +0,0 @@
pnpm:
onlyBuiltDependencies:
- better-sqlite3
- esbuild
- "@nestjs/core"
- unrs-resolver