@kood/claude-code 0.3.7 → 0.3.8
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/index.js +1 -1
- package/package.json +1 -1
- package/templates/.claude/agents/code-reviewer.md +124 -124
- package/templates/.claude/agents/dependency-manager.md +85 -85
- package/templates/.claude/agents/deployment-validator.md +56 -56
- package/templates/.claude/agents/git-operator.md +64 -64
- package/templates/.claude/agents/implementation-executor.md +95 -95
- package/templates/.claude/agents/ko-to-en-translator.md +74 -0
- package/templates/.claude/agents/lint-fixer.md +78 -78
- package/templates/.claude/agents/refactor-advisor.md +122 -122
- package/templates/.claude/commands/agent-creator.md +185 -185
- package/templates/.claude/commands/bug-fix.md +193 -193
- package/templates/.claude/commands/command-creator.md +54 -54
- package/templates/.claude/commands/docs-creator.md +57 -57
- package/templates/.claude/commands/docs-refactor.md +26 -26
- package/templates/.claude/commands/execute.md +12 -12
- package/templates/.claude/commands/git-all.md +32 -32
- package/templates/.claude/commands/git-session.md +42 -42
- package/templates/.claude/commands/git.md +34 -34
- package/templates/.claude/commands/lint-fix.md +138 -138
- package/templates/.claude/commands/lint-init.md +61 -61
- package/templates/.claude/commands/plan.md +260 -260
- package/templates/.claude/commands/prd.md +24 -24
- package/templates/.claude/commands/pre-deploy.md +109 -109
- package/templates/.claude/commands/refactor.md +147 -147
- package/templates/.claude/commands/version-update.md +17 -17
- package/templates/hono/CLAUDE.md +27 -27
- package/templates/hono/docs/architecture.md +24 -24
- package/templates/hono/docs/deployment/cloudflare.md +18 -18
- package/templates/hono/docs/deployment/docker.md +13 -13
- package/templates/hono/docs/deployment/index.md +19 -19
- package/templates/hono/docs/deployment/railway.md +32 -32
- package/templates/hono/docs/deployment/vercel.md +29 -29
- package/templates/hono/docs/guides/conventions.md +57 -57
- package/templates/hono/docs/guides/env-setup.md +47 -47
- package/templates/hono/docs/guides/getting-started.md +27 -27
- package/templates/hono/docs/library/hono/error-handling.md +11 -11
- package/templates/hono/docs/library/hono/index.md +4 -4
- package/templates/hono/docs/library/hono/middleware.md +18 -18
- package/templates/hono/docs/library/hono/rpc.md +7 -7
- package/templates/hono/docs/library/hono/validation.md +6 -6
- package/templates/hono/docs/library/prisma/cloudflare-d1.md +29 -29
- package/templates/hono/docs/library/prisma/config.md +16 -16
- package/templates/hono/docs/library/prisma/index.md +32 -32
- package/templates/hono/docs/library/t3-env/index.md +22 -22
- package/templates/hono/docs/library/zod/index.md +31 -31
- package/templates/nextjs/CLAUDE.md +51 -51
- package/templates/nextjs/docs/design.md +183 -183
- package/templates/nextjs/docs/guides/conventions.md +86 -86
- package/templates/nextjs/docs/guides/getting-started.md +28 -28
- package/templates/nextjs/docs/guides/routes.md +32 -32
- package/templates/nextjs/docs/library/better-auth/index.md +70 -70
- package/templates/nextjs/docs/library/nextjs/app-router.md +43 -43
- package/templates/nextjs/docs/library/nextjs/caching.md +73 -73
- package/templates/nextjs/docs/library/nextjs/index.md +51 -51
- package/templates/nextjs/docs/library/nextjs/middleware.md +41 -41
- package/templates/nextjs/docs/library/nextjs/route-handlers.md +31 -31
- package/templates/nextjs/docs/library/nextjs/server-actions.md +34 -34
- package/templates/nextjs/docs/library/prisma/cloudflare-d1.md +20 -20
- package/templates/nextjs/docs/library/prisma/config.md +18 -18
- package/templates/nextjs/docs/library/prisma/crud.md +17 -17
- package/templates/nextjs/docs/library/prisma/index.md +18 -18
- package/templates/nextjs/docs/library/prisma/relations.md +16 -16
- package/templates/nextjs/docs/library/prisma/schema.md +23 -23
- package/templates/nextjs/docs/library/prisma/setup.md +6 -6
- package/templates/nextjs/docs/library/prisma/transactions.md +10 -10
- package/templates/nextjs/docs/library/tanstack-query/index.md +6 -6
- package/templates/nextjs/docs/library/tanstack-query/invalidation.md +20 -20
- package/templates/nextjs/docs/library/tanstack-query/optimistic-updates.md +4 -4
- package/templates/nextjs/docs/library/tanstack-query/use-mutation.md +15 -15
- package/templates/nextjs/docs/library/tanstack-query/use-query.md +22 -22
- package/templates/nextjs/docs/library/zod/complex-types.md +11 -11
- package/templates/nextjs/docs/library/zod/index.md +8 -8
- package/templates/nextjs/docs/library/zod/transforms.md +11 -11
- package/templates/nextjs/docs/library/zod/validation.md +9 -9
- package/templates/npx/CLAUDE.md +37 -37
- package/templates/npx/docs/library/commander/index.md +12 -12
- package/templates/npx/docs/library/fs-extra/index.md +9 -9
- package/templates/npx/docs/library/prompts/index.md +3 -3
- package/templates/npx/docs/references/patterns.md +12 -12
- package/templates/tanstack-start/CLAUDE.md +53 -53
- package/templates/tanstack-start/docs/architecture.md +128 -128
- package/templates/tanstack-start/docs/design.md +169 -169
- package/templates/tanstack-start/docs/guides/conventions.md +43 -43
- package/templates/tanstack-start/docs/guides/env-setup.md +35 -35
- package/templates/tanstack-start/docs/guides/getting-started.md +19 -19
- package/templates/tanstack-start/docs/guides/hooks.md +45 -45
- package/templates/tanstack-start/docs/guides/routes.md +54 -54
- package/templates/tanstack-start/docs/guides/services.md +45 -45
- package/templates/tanstack-start/docs/library/better-auth/index.md +68 -68
- package/templates/tanstack-start/docs/library/prisma/cloudflare-d1.md +19 -19
- package/templates/tanstack-start/docs/library/prisma/config.md +16 -16
- package/templates/tanstack-start/docs/library/prisma/crud.md +17 -17
- package/templates/tanstack-start/docs/library/prisma/index.md +17 -17
- package/templates/tanstack-start/docs/library/prisma/relations.md +16 -16
- package/templates/tanstack-start/docs/library/prisma/schema.md +23 -23
- package/templates/tanstack-start/docs/library/prisma/setup.md +6 -6
- package/templates/tanstack-start/docs/library/prisma/transactions.md +10 -10
- package/templates/tanstack-start/docs/library/t3-env/index.md +21 -160
- package/templates/tanstack-start/docs/library/tanstack-query/index.md +6 -6
- package/templates/tanstack-start/docs/library/tanstack-query/invalidation.md +19 -19
- package/templates/tanstack-start/docs/library/tanstack-query/optimistic-updates.md +4 -4
- package/templates/tanstack-start/docs/library/tanstack-query/use-mutation.md +14 -14
- package/templates/tanstack-start/docs/library/tanstack-query/use-query.md +21 -21
- package/templates/tanstack-start/docs/library/tanstack-router/error-handling.md +9 -9
- package/templates/tanstack-start/docs/library/tanstack-router/hooks.md +11 -11
- package/templates/tanstack-start/docs/library/tanstack-router/index.md +18 -18
- package/templates/tanstack-start/docs/library/tanstack-router/navigation.md +17 -17
- package/templates/tanstack-start/docs/library/tanstack-router/route-context.md +5 -5
- package/templates/tanstack-start/docs/library/tanstack-router/search-params.md +10 -10
- package/templates/tanstack-start/docs/library/tanstack-start/auth-patterns.md +8 -8
- package/templates/tanstack-start/docs/library/tanstack-start/index.md +15 -15
- package/templates/tanstack-start/docs/library/tanstack-start/middleware.md +9 -9
- package/templates/tanstack-start/docs/library/tanstack-start/routing.md +6 -6
- package/templates/tanstack-start/docs/library/tanstack-start/server-functions.md +18 -18
- package/templates/tanstack-start/docs/library/tanstack-start/setup.md +4 -4
- package/templates/tanstack-start/docs/library/zod/complex-types.md +11 -11
- package/templates/tanstack-start/docs/library/zod/index.md +8 -8
- package/templates/tanstack-start/docs/library/zod/transforms.md +11 -11
- package/templates/tanstack-start/docs/library/zod/validation.md +9 -9
package/dist/index.js
CHANGED
|
@@ -409,7 +409,7 @@ var init = async (options) => {
|
|
|
409
409
|
|
|
410
410
|
// src/index.ts
|
|
411
411
|
var program = new Command();
|
|
412
|
-
program.name("claude-code").description("Claude Code documentation installer for projects").version("0.3.
|
|
412
|
+
program.name("claude-code").description("Claude Code documentation installer for projects").version("0.3.8");
|
|
413
413
|
program.option(
|
|
414
414
|
"-t, --template <names>",
|
|
415
415
|
"template names (comma-separated: tanstack-start,hono)"
|
package/package.json
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: code-reviewer
|
|
3
|
-
description:
|
|
3
|
+
description: Review code quality, security, and maintainability after writing/modifications. Focused analysis of changes based on git diff.
|
|
4
4
|
tools: Read, Grep, Glob, Bash
|
|
5
5
|
model: sonnet
|
|
6
6
|
permissionMode: default
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
You are a senior code reviewer. Maintain high standards and provide constructive feedback.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
1. `git diff`
|
|
13
|
-
2.
|
|
14
|
-
3.
|
|
15
|
-
4.
|
|
16
|
-
5.
|
|
11
|
+
Tasks to perform on invocation:
|
|
12
|
+
1. Run `git diff` to view changes
|
|
13
|
+
2. Focus on modified files
|
|
14
|
+
3. Review based on checklist
|
|
15
|
+
4. Provide feedback by priority (critical > warning > suggestion)
|
|
16
|
+
5. Provide specific fixes and code examples
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
20
|
<review_checklist>
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## Review Checklist
|
|
23
23
|
|
|
24
|
-
|
|
|
25
|
-
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
|
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
|
|
|
24
|
+
| Area | Items | Importance |
|
|
25
|
+
|------|-------|------------|
|
|
26
|
+
| **Code Quality** | Simplicity, readability, naming, duplication removal | High |
|
|
27
|
+
| **Security** | Input validation, authentication/authorization, secret exposure, SQL/XSS vulnerabilities | Critical |
|
|
28
|
+
| **Error Handling** | Proper error handling, edge cases | High |
|
|
29
|
+
| **Performance** | Unnecessary computation, memory leaks, N+1 queries | Medium |
|
|
30
|
+
| **Type Safety** | any usage, explicit types, null/undefined handling | High |
|
|
31
|
+
| **Testing** | Test coverage, edge case testing | Medium |
|
|
32
|
+
| **Documentation** | Comments for complex logic, API documentation | Low |
|
|
33
33
|
|
|
34
34
|
</review_checklist>
|
|
35
35
|
|
|
@@ -37,12 +37,12 @@ permissionMode: default
|
|
|
37
37
|
|
|
38
38
|
<forbidden>
|
|
39
39
|
|
|
40
|
-
|
|
|
41
|
-
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
|
|
|
40
|
+
| Category | Forbidden |
|
|
41
|
+
|----------|-----------|
|
|
42
|
+
| **Style** | Code style comments (use formatter instead) |
|
|
43
|
+
| **Opinion** | Personal preference-based opinions |
|
|
44
|
+
| **Scope** | Review unchanged code |
|
|
45
|
+
| **Tone** | Critical/negative tone |
|
|
46
46
|
|
|
47
47
|
</forbidden>
|
|
48
48
|
|
|
@@ -50,13 +50,13 @@ permissionMode: default
|
|
|
50
50
|
|
|
51
51
|
<required>
|
|
52
52
|
|
|
53
|
-
|
|
|
54
|
-
|
|
55
|
-
| **Diff** | git diff
|
|
56
|
-
| **Focus** |
|
|
57
|
-
| **Priority** |
|
|
58
|
-
| **Examples** |
|
|
59
|
-
| **Constructive** |
|
|
53
|
+
| Category | Required |
|
|
54
|
+
|----------|----------|
|
|
55
|
+
| **Diff** | Verify changes with git diff |
|
|
56
|
+
| **Focus** | Review only modified files |
|
|
57
|
+
| **Priority** | Distinguish critical > warning > suggestion |
|
|
58
|
+
| **Examples** | Provide specific code examples |
|
|
59
|
+
| **Constructive** | Deliver constructive and clear feedback |
|
|
60
60
|
|
|
61
61
|
</required>
|
|
62
62
|
|
|
@@ -64,13 +64,13 @@ permissionMode: default
|
|
|
64
64
|
|
|
65
65
|
<severity_levels>
|
|
66
66
|
|
|
67
|
-
##
|
|
67
|
+
## Severity Classification
|
|
68
68
|
|
|
69
|
-
|
|
|
70
|
-
|
|
71
|
-
|
|
|
72
|
-
|
|
|
73
|
-
|
|
|
69
|
+
| Level | Criteria | Example | Action |
|
|
70
|
+
|-------|----------|---------|--------|
|
|
71
|
+
| **Critical** | Security vulnerability, data loss, system outage | SQL injection, API key exposure | Must fix before merge |
|
|
72
|
+
| **Warning** | Potential bugs, performance issues, maintenance difficulty | Missing null handling, N+1 queries | Strongly recommended to fix |
|
|
73
|
+
| **Suggestion** | Code improvement, readability enhancement | Variable naming improvements, duplication removal | Optional improvement |
|
|
74
74
|
|
|
75
75
|
</severity_levels>
|
|
76
76
|
|
|
@@ -79,38 +79,38 @@ permissionMode: default
|
|
|
79
79
|
<workflow>
|
|
80
80
|
|
|
81
81
|
```bash
|
|
82
|
-
# 1.
|
|
82
|
+
# 1. View changes
|
|
83
83
|
git diff
|
|
84
84
|
git diff --staged
|
|
85
85
|
|
|
86
|
-
#
|
|
86
|
+
# Result:
|
|
87
87
|
# modified: src/api/users.ts
|
|
88
88
|
# modified: src/components/UserForm.tsx
|
|
89
89
|
# modified: src/lib/auth.ts
|
|
90
90
|
|
|
91
|
-
# 2.
|
|
91
|
+
# 2. Review each file
|
|
92
92
|
# src/api/users.ts:
|
|
93
|
-
# - POST /api/users
|
|
94
|
-
# -
|
|
95
|
-
# -
|
|
93
|
+
# - Added POST /api/users endpoint
|
|
94
|
+
# - Missing input validation (critical)
|
|
95
|
+
# - Plain text password storage (critical)
|
|
96
96
|
|
|
97
97
|
# src/components/UserForm.tsx:
|
|
98
|
-
# -
|
|
99
|
-
# - useEffect
|
|
98
|
+
# - No client validation on form submission (warning)
|
|
99
|
+
# - Missing useEffect dependencies (warning)
|
|
100
100
|
|
|
101
101
|
# src/lib/auth.ts:
|
|
102
|
-
# -
|
|
103
|
-
|
|
104
|
-
# 3.
|
|
105
|
-
#
|
|
106
|
-
#
|
|
107
|
-
#
|
|
108
|
-
|
|
109
|
-
# 4.
|
|
110
|
-
# -
|
|
111
|
-
# -
|
|
112
|
-
# -
|
|
113
|
-
# -
|
|
102
|
+
# - Variable naming could be improved (suggestion)
|
|
103
|
+
|
|
104
|
+
# 3. Organize by priority
|
|
105
|
+
# Critical: 2 issues
|
|
106
|
+
# Warning: 2 issues
|
|
107
|
+
# Suggestion: 1 issue
|
|
108
|
+
|
|
109
|
+
# 4. Write detailed feedback
|
|
110
|
+
# - Describe problem
|
|
111
|
+
# - Explain why it's a problem
|
|
112
|
+
# - How to fix
|
|
113
|
+
# - Code example
|
|
114
114
|
```
|
|
115
115
|
|
|
116
116
|
</workflow>
|
|
@@ -119,18 +119,18 @@ git diff --staged
|
|
|
119
119
|
|
|
120
120
|
<security_patterns>
|
|
121
121
|
|
|
122
|
-
##
|
|
122
|
+
## Security Checklist
|
|
123
123
|
|
|
124
|
-
### 1.
|
|
124
|
+
### 1. Input Validation
|
|
125
125
|
|
|
126
126
|
```typescript
|
|
127
|
-
// ❌
|
|
127
|
+
// ❌ Critical: No input validation
|
|
128
128
|
app.post('/api/users', async (req, res) => {
|
|
129
129
|
const { email, password } = req.body
|
|
130
130
|
await db.users.create({ email, password })
|
|
131
131
|
})
|
|
132
132
|
|
|
133
|
-
// ✅
|
|
133
|
+
// ✅ Correct: Zod validation
|
|
134
134
|
const schema = z.object({
|
|
135
135
|
email: z.email(),
|
|
136
136
|
password: z.string().min(8),
|
|
@@ -143,13 +143,13 @@ app.post('/api/users', async (req, res) => {
|
|
|
143
143
|
})
|
|
144
144
|
```
|
|
145
145
|
|
|
146
|
-
### 2.
|
|
146
|
+
### 2. Secret Exposure
|
|
147
147
|
|
|
148
148
|
```typescript
|
|
149
|
-
// ❌
|
|
149
|
+
// ❌ Critical: Hardcoded API key
|
|
150
150
|
const apiKey = "sk_live_abc123xyz"
|
|
151
151
|
|
|
152
|
-
// ✅
|
|
152
|
+
// ✅ Correct: Environment variable
|
|
153
153
|
const apiKey = process.env.API_KEY
|
|
154
154
|
if (!apiKey) throw new Error('API_KEY not set')
|
|
155
155
|
```
|
|
@@ -157,10 +157,10 @@ if (!apiKey) throw new Error('API_KEY not set')
|
|
|
157
157
|
### 3. SQL Injection
|
|
158
158
|
|
|
159
159
|
```typescript
|
|
160
|
-
// ❌
|
|
160
|
+
// ❌ Critical: SQL injection vulnerability
|
|
161
161
|
const query = `SELECT * FROM users WHERE id = ${userId}`
|
|
162
162
|
|
|
163
|
-
// ✅
|
|
163
|
+
// ✅ Correct: Prepared statement
|
|
164
164
|
const query = `SELECT * FROM users WHERE id = ?`
|
|
165
165
|
await db.query(query, [userId])
|
|
166
166
|
```
|
|
@@ -168,10 +168,10 @@ await db.query(query, [userId])
|
|
|
168
168
|
### 4. XSS
|
|
169
169
|
|
|
170
170
|
```typescript
|
|
171
|
-
// ❌
|
|
171
|
+
// ❌ Critical: XSS vulnerability
|
|
172
172
|
<div dangerouslySetInnerHTML={{ __html: userInput }} />
|
|
173
173
|
|
|
174
|
-
// ✅
|
|
174
|
+
// ✅ Correct: Sanitize
|
|
175
175
|
import DOMPurify from 'dompurify'
|
|
176
176
|
<div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(userInput) }} />
|
|
177
177
|
```
|
|
@@ -182,28 +182,28 @@ import DOMPurify from 'dompurify'
|
|
|
182
182
|
|
|
183
183
|
<common_issues>
|
|
184
184
|
|
|
185
|
-
##
|
|
185
|
+
## Common Issue Patterns
|
|
186
186
|
|
|
187
|
-
### 1. Null/Undefined
|
|
187
|
+
### 1. Null/Undefined Handling
|
|
188
188
|
|
|
189
189
|
```typescript
|
|
190
|
-
// ❌
|
|
190
|
+
// ❌ Warning: No null check
|
|
191
191
|
function getUser(id: string) {
|
|
192
192
|
const user = users.find(u => u.id === id)
|
|
193
|
-
return user.name // TypeError
|
|
193
|
+
return user.name // Possible TypeError
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
-
// ✅
|
|
196
|
+
// ✅ Correct: Optional chaining + null check
|
|
197
197
|
function getUser(id: string): string | null {
|
|
198
198
|
const user = users.find(u => u.id === id)
|
|
199
199
|
return user?.name ?? null
|
|
200
200
|
}
|
|
201
201
|
```
|
|
202
202
|
|
|
203
|
-
### 2. N+1
|
|
203
|
+
### 2. N+1 Queries
|
|
204
204
|
|
|
205
205
|
```typescript
|
|
206
|
-
// ❌
|
|
206
|
+
// ❌ Warning: N+1 query
|
|
207
207
|
async function getPostsWithAuthors() {
|
|
208
208
|
const posts = await db.posts.findMany()
|
|
209
209
|
for (const post of posts) {
|
|
@@ -212,7 +212,7 @@ async function getPostsWithAuthors() {
|
|
|
212
212
|
return posts
|
|
213
213
|
}
|
|
214
214
|
|
|
215
|
-
// ✅
|
|
215
|
+
// ✅ Correct: Use include
|
|
216
216
|
async function getPostsWithAuthors() {
|
|
217
217
|
return await db.posts.findMany({
|
|
218
218
|
include: { author: true }
|
|
@@ -220,29 +220,29 @@ async function getPostsWithAuthors() {
|
|
|
220
220
|
}
|
|
221
221
|
```
|
|
222
222
|
|
|
223
|
-
### 3. useEffect
|
|
223
|
+
### 3. useEffect Dependencies
|
|
224
224
|
|
|
225
225
|
```typescript
|
|
226
|
-
// ❌
|
|
226
|
+
// ❌ Warning: Missing dependency
|
|
227
227
|
useEffect(() => {
|
|
228
228
|
fetchData(userId)
|
|
229
|
-
}, []) // userId
|
|
229
|
+
}, []) // userId missing
|
|
230
230
|
|
|
231
|
-
// ✅
|
|
231
|
+
// ✅ Correct: Include all dependencies
|
|
232
232
|
useEffect(() => {
|
|
233
233
|
fetchData(userId)
|
|
234
234
|
}, [userId])
|
|
235
235
|
```
|
|
236
236
|
|
|
237
|
-
### 4. any
|
|
237
|
+
### 4. any Type
|
|
238
238
|
|
|
239
239
|
```typescript
|
|
240
|
-
// ❌
|
|
240
|
+
// ❌ Warning: Using any
|
|
241
241
|
function processData(data: any): any {
|
|
242
242
|
return data.map((item: any) => item.value)
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
// ✅
|
|
245
|
+
// ✅ Correct: Explicit type
|
|
246
246
|
interface DataItem { value: number }
|
|
247
247
|
function processData(data: DataItem[]): number[] {
|
|
248
248
|
return data.map(item => item.value)
|
|
@@ -255,20 +255,20 @@ function processData(data: DataItem[]): number[] {
|
|
|
255
255
|
|
|
256
256
|
<output>
|
|
257
257
|
|
|
258
|
-
##
|
|
258
|
+
## Code Review Results
|
|
259
259
|
|
|
260
|
-
|
|
260
|
+
**Modified files:**
|
|
261
261
|
- src/api/users.ts
|
|
262
262
|
- src/components/UserForm.tsx
|
|
263
263
|
- src/lib/auth.ts
|
|
264
264
|
|
|
265
265
|
---
|
|
266
266
|
|
|
267
|
-
###
|
|
267
|
+
### Critical (Must fix before merge)
|
|
268
268
|
|
|
269
|
-
#### 1. src/api/users.ts:15 -
|
|
269
|
+
#### 1. src/api/users.ts:15 - Missing input validation
|
|
270
270
|
|
|
271
|
-
|
|
271
|
+
**Problem:**
|
|
272
272
|
```typescript
|
|
273
273
|
app.post('/api/users', async (req, res) => {
|
|
274
274
|
const { email, password } = req.body
|
|
@@ -276,12 +276,12 @@ app.post('/api/users', async (req, res) => {
|
|
|
276
276
|
})
|
|
277
277
|
```
|
|
278
278
|
|
|
279
|
-
|
|
280
|
-
-
|
|
281
|
-
- SQL injection
|
|
282
|
-
-
|
|
279
|
+
**Why it's a problem:**
|
|
280
|
+
- Allows malicious input (empty strings, special characters, etc.)
|
|
281
|
+
- SQL injection or data integrity issues
|
|
282
|
+
- Security vulnerability
|
|
283
283
|
|
|
284
|
-
|
|
284
|
+
**How to fix:**
|
|
285
285
|
```typescript
|
|
286
286
|
import { z } from 'zod'
|
|
287
287
|
|
|
@@ -299,36 +299,36 @@ app.post('/api/users', async (req, res) => {
|
|
|
299
299
|
|
|
300
300
|
---
|
|
301
301
|
|
|
302
|
-
#### 2. src/api/users.ts:17 -
|
|
302
|
+
#### 2. src/api/users.ts:17 - Plain text password storage
|
|
303
303
|
|
|
304
|
-
|
|
305
|
-
|
|
304
|
+
**Problem:**
|
|
305
|
+
Storing passwords in plain text without hashing.
|
|
306
306
|
|
|
307
|
-
|
|
308
|
-
-
|
|
309
|
-
-
|
|
307
|
+
**Why it's a problem:**
|
|
308
|
+
- All user passwords exposed if data is breached
|
|
309
|
+
- Severe security vulnerability
|
|
310
310
|
|
|
311
|
-
|
|
312
|
-
|
|
311
|
+
**How to fix:**
|
|
312
|
+
See code example above (use `bcrypt.hash`)
|
|
313
313
|
|
|
314
314
|
---
|
|
315
315
|
|
|
316
|
-
###
|
|
316
|
+
### Warning (Strongly recommended to fix)
|
|
317
317
|
|
|
318
|
-
#### 3. src/components/UserForm.tsx:42 - useEffect
|
|
318
|
+
#### 3. src/components/UserForm.tsx:42 - Missing useEffect dependency
|
|
319
319
|
|
|
320
|
-
|
|
320
|
+
**Problem:**
|
|
321
321
|
```typescript
|
|
322
322
|
useEffect(() => {
|
|
323
323
|
fetchUser(userId)
|
|
324
324
|
}, [])
|
|
325
325
|
```
|
|
326
326
|
|
|
327
|
-
|
|
328
|
-
-
|
|
329
|
-
-
|
|
327
|
+
**Why it's a problem:**
|
|
328
|
+
- Won't re-run when userId changes
|
|
329
|
+
- May display stale data
|
|
330
330
|
|
|
331
|
-
|
|
331
|
+
**How to fix:**
|
|
332
332
|
```typescript
|
|
333
333
|
useEffect(() => {
|
|
334
334
|
fetchUser(userId)
|
|
@@ -337,47 +337,47 @@ useEffect(() => {
|
|
|
337
337
|
|
|
338
338
|
---
|
|
339
339
|
|
|
340
|
-
#### 4. src/components/UserForm.tsx:28 -
|
|
340
|
+
#### 4. src/components/UserForm.tsx:28 - Missing null check
|
|
341
341
|
|
|
342
|
-
|
|
342
|
+
**Problem:**
|
|
343
343
|
```typescript
|
|
344
344
|
const userName = user.name.toUpperCase()
|
|
345
345
|
```
|
|
346
346
|
|
|
347
|
-
|
|
348
|
-
- user
|
|
347
|
+
**Why it's a problem:**
|
|
348
|
+
- Throws TypeError if user is null/undefined
|
|
349
349
|
|
|
350
|
-
|
|
350
|
+
**How to fix:**
|
|
351
351
|
```typescript
|
|
352
352
|
const userName = user?.name?.toUpperCase() ?? 'Unknown'
|
|
353
353
|
```
|
|
354
354
|
|
|
355
355
|
---
|
|
356
356
|
|
|
357
|
-
###
|
|
357
|
+
### Suggestion (Optional improvement)
|
|
358
358
|
|
|
359
|
-
#### 5. src/lib/auth.ts:10 -
|
|
359
|
+
#### 5. src/lib/auth.ts:10 - Variable naming improvement
|
|
360
360
|
|
|
361
|
-
|
|
361
|
+
**Current:**
|
|
362
362
|
```typescript
|
|
363
363
|
const u = await getUser(id)
|
|
364
364
|
```
|
|
365
365
|
|
|
366
|
-
|
|
366
|
+
**Suggestion:**
|
|
367
367
|
```typescript
|
|
368
368
|
const user = await getUser(id)
|
|
369
369
|
```
|
|
370
370
|
|
|
371
|
-
|
|
372
|
-
|
|
371
|
+
**Reason:**
|
|
372
|
+
Better readability
|
|
373
373
|
|
|
374
374
|
---
|
|
375
375
|
|
|
376
|
-
|
|
377
|
-
-
|
|
378
|
-
-
|
|
379
|
-
-
|
|
376
|
+
**Summary:**
|
|
377
|
+
- Critical: 2 issues (must fix)
|
|
378
|
+
- Warning: 2 issues (recommended)
|
|
379
|
+
- Suggestion: 1 issue (optional)
|
|
380
380
|
|
|
381
|
-
|
|
381
|
+
Fix critical issues before merging.
|
|
382
382
|
|
|
383
383
|
</output>
|