@kood/claude-code 0.1.6 → 0.1.9

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.
Files changed (107) hide show
  1. package/dist/index.js +109 -216
  2. package/package.json +8 -2
  3. package/templates/hono/CLAUDE.md +59 -328
  4. package/templates/hono/docs/architecture/architecture.md +93 -747
  5. package/templates/hono/docs/deployment/cloudflare.md +59 -513
  6. package/templates/hono/docs/deployment/docker.md +41 -356
  7. package/templates/hono/docs/deployment/index.md +54 -190
  8. package/templates/hono/docs/deployment/railway.md +36 -306
  9. package/templates/hono/docs/deployment/vercel.md +49 -434
  10. package/templates/hono/docs/library/ai-sdk/index.md +53 -290
  11. package/templates/hono/docs/library/ai-sdk/openrouter.md +19 -387
  12. package/templates/hono/docs/library/ai-sdk/providers.md +28 -394
  13. package/templates/hono/docs/library/ai-sdk/streaming.md +52 -353
  14. package/templates/hono/docs/library/ai-sdk/structured-output.md +63 -395
  15. package/templates/hono/docs/library/ai-sdk/tools.md +62 -431
  16. package/templates/hono/docs/library/hono/env-setup.md +24 -313
  17. package/templates/hono/docs/library/hono/error-handling.md +34 -295
  18. package/templates/hono/docs/library/hono/index.md +29 -121
  19. package/templates/hono/docs/library/hono/middleware.md +21 -188
  20. package/templates/hono/docs/library/hono/rpc.md +40 -341
  21. package/templates/hono/docs/library/hono/validation.md +35 -195
  22. package/templates/hono/docs/library/pino/index.md +42 -333
  23. package/templates/hono/docs/library/prisma/cloudflare-d1.md +64 -367
  24. package/templates/hono/docs/library/prisma/config.md +19 -260
  25. package/templates/hono/docs/library/prisma/index.md +67 -320
  26. package/templates/hono/docs/library/zod/index.md +53 -257
  27. package/templates/npx/CLAUDE.md +62 -274
  28. package/templates/npx/docs/references/patterns.md +160 -0
  29. package/templates/tanstack-start/CLAUDE.md +100 -256
  30. package/templates/tanstack-start/docs/architecture/architecture.md +44 -589
  31. package/templates/tanstack-start/docs/deployment/cloudflare.md +37 -424
  32. package/templates/tanstack-start/docs/deployment/index.md +57 -286
  33. package/templates/tanstack-start/docs/deployment/nitro.md +36 -318
  34. package/templates/tanstack-start/docs/deployment/railway.md +40 -409
  35. package/templates/tanstack-start/docs/deployment/vercel.md +43 -465
  36. package/templates/tanstack-start/docs/design/components.md +77 -311
  37. package/templates/tanstack-start/docs/design/index.md +113 -69
  38. package/templates/tanstack-start/docs/design/safe-area.md +51 -250
  39. package/templates/tanstack-start/docs/design/tailwind-setup.md +45 -359
  40. package/templates/tanstack-start/docs/guides/conventions.md +103 -0
  41. package/templates/tanstack-start/docs/guides/env-setup.md +34 -340
  42. package/templates/tanstack-start/docs/guides/getting-started.md +22 -209
  43. package/templates/tanstack-start/docs/guides/hooks.md +166 -0
  44. package/templates/tanstack-start/docs/guides/routes.md +166 -0
  45. package/templates/tanstack-start/docs/guides/services.md +143 -0
  46. package/templates/tanstack-start/docs/library/better-auth/2fa.md +27 -115
  47. package/templates/tanstack-start/docs/library/better-auth/advanced.md +22 -105
  48. package/templates/tanstack-start/docs/library/better-auth/index.md +17 -66
  49. package/templates/tanstack-start/docs/library/better-auth/plugins.md +11 -88
  50. package/templates/tanstack-start/docs/library/better-auth/session.md +12 -92
  51. package/templates/tanstack-start/docs/library/better-auth/setup.md +9 -91
  52. package/templates/tanstack-start/docs/library/prisma/cloudflare-d1.md +30 -358
  53. package/templates/tanstack-start/docs/library/prisma/config.md +27 -327
  54. package/templates/tanstack-start/docs/library/prisma/crud.md +46 -174
  55. package/templates/tanstack-start/docs/library/prisma/index.md +23 -113
  56. package/templates/tanstack-start/docs/library/prisma/relations.md +31 -153
  57. package/templates/tanstack-start/docs/library/prisma/schema.md +40 -217
  58. package/templates/tanstack-start/docs/library/prisma/setup.md +12 -112
  59. package/templates/tanstack-start/docs/library/prisma/transactions.md +20 -110
  60. package/templates/tanstack-start/docs/library/tanstack-query/index.md +26 -97
  61. package/templates/tanstack-start/docs/library/tanstack-query/invalidation.md +28 -107
  62. package/templates/tanstack-start/docs/library/tanstack-query/optimistic-updates.md +44 -146
  63. package/templates/tanstack-start/docs/library/tanstack-query/use-mutation.md +33 -127
  64. package/templates/tanstack-start/docs/library/tanstack-query/use-query.md +49 -149
  65. package/templates/tanstack-start/docs/library/tanstack-start/auth-patterns.md +19 -112
  66. package/templates/tanstack-start/docs/library/tanstack-start/index.md +33 -80
  67. package/templates/tanstack-start/docs/library/tanstack-start/middleware.md +28 -106
  68. package/templates/tanstack-start/docs/library/tanstack-start/routing.md +21 -118
  69. package/templates/tanstack-start/docs/library/tanstack-start/server-functions.md +34 -246
  70. package/templates/tanstack-start/docs/library/tanstack-start/setup.md +6 -39
  71. package/templates/tanstack-start/docs/library/zod/complex-types.md +32 -156
  72. package/templates/tanstack-start/docs/library/zod/index.md +31 -144
  73. package/templates/tanstack-start/docs/library/zod/transforms.md +20 -129
  74. package/templates/tanstack-start/docs/library/zod/validation.md +39 -155
  75. package/templates/hono/docs/commands/git.md +0 -145
  76. package/templates/hono/docs/mcp/context7.md +0 -106
  77. package/templates/hono/docs/mcp/index.md +0 -176
  78. package/templates/hono/docs/mcp/sequential-thinking.md +0 -101
  79. package/templates/hono/docs/mcp/serena.md +0 -269
  80. package/templates/hono/docs/mcp/sgrep.md +0 -105
  81. package/templates/hono/docs/skills/gemini-review/SKILL.md +0 -220
  82. package/templates/hono/docs/skills/gemini-review/references/checklists.md +0 -136
  83. package/templates/hono/docs/skills/gemini-review/references/prompt-templates.md +0 -303
  84. package/templates/npx/docs/commands/git.md +0 -145
  85. package/templates/npx/docs/mcp/index.md +0 -60
  86. package/templates/npx/docs/skills/gemini-review/SKILL.md +0 -220
  87. package/templates/npx/docs/skills/gemini-review/references/checklists.md +0 -134
  88. package/templates/npx/docs/skills/gemini-review/references/prompt-templates.md +0 -301
  89. package/templates/tanstack-start/docs/commands/git.md +0 -145
  90. package/templates/tanstack-start/docs/design/accessibility.md +0 -433
  91. package/templates/tanstack-start/docs/design/color.md +0 -235
  92. package/templates/tanstack-start/docs/design/spacing.md +0 -341
  93. package/templates/tanstack-start/docs/design/typography.md +0 -324
  94. package/templates/tanstack-start/docs/guides/best-practices.md +0 -950
  95. package/templates/tanstack-start/docs/guides/husky-lint-staged.md +0 -303
  96. package/templates/tanstack-start/docs/guides/prettier.md +0 -189
  97. package/templates/tanstack-start/docs/guides/project-templates.md +0 -710
  98. package/templates/tanstack-start/docs/library/tanstack-query/setup.md +0 -107
  99. package/templates/tanstack-start/docs/library/zod/basic-types.md +0 -186
  100. package/templates/tanstack-start/docs/mcp/context7.md +0 -204
  101. package/templates/tanstack-start/docs/mcp/index.md +0 -177
  102. package/templates/tanstack-start/docs/mcp/sequential-thinking.md +0 -180
  103. package/templates/tanstack-start/docs/mcp/serena.md +0 -269
  104. package/templates/tanstack-start/docs/mcp/sgrep.md +0 -174
  105. package/templates/tanstack-start/docs/skills/gemini-review/SKILL.md +0 -220
  106. package/templates/tanstack-start/docs/skills/gemini-review/references/checklists.md +0 -144
  107. package/templates/tanstack-start/docs/skills/gemini-review/references/prompt-templates.md +0 -292
@@ -1,37 +1,30 @@
1
1
  # Hono + Zod 검증
2
2
 
3
- > @hono/zod-validator 사용한 타입 안전 요청 검증
3
+ > @hono/zod-validator 타입 안전 요청 검증
4
4
 
5
5
  ---
6
6
 
7
7
  ## 설치
8
8
 
9
9
  ```bash
10
- # Zod
11
- npm install zod
12
-
13
- # Zod Validator Middleware
14
- npm install @hono/zod-validator
10
+ npm install zod @hono/zod-validator
15
11
  ```
16
12
 
17
13
  ---
18
14
 
19
15
  ## 기본 사용법
20
16
 
21
- ### JSON Body 검증
17
+ ### JSON Body
22
18
 
23
19
  ```typescript
24
- import { Hono } from 'hono'
25
20
  import { zValidator } from '@hono/zod-validator'
26
21
  import { z } from 'zod'
27
22
 
28
- const app = new Hono()
29
-
30
23
  // ✅ Zod v4 문법
31
24
  const createUserSchema = z.object({
32
- email: z.email(), // v4
25
+ email: z.email(), // v4
33
26
  name: z.string().min(1).trim(),
34
- website: z.url().optional(), // v4
27
+ website: z.url().optional(), // v4
35
28
  })
36
29
 
37
30
  app.post('/users', zValidator('json', createUserSchema), (c) => {
@@ -40,7 +33,7 @@ app.post('/users', zValidator('json', createUserSchema), (c) => {
40
33
  })
41
34
  ```
42
35
 
43
- ### Query Parameter 검증
36
+ ### Query Parameter
44
37
 
45
38
  ```typescript
46
39
  const searchSchema = z.object({
@@ -51,49 +44,32 @@ const searchSchema = z.object({
51
44
 
52
45
  app.get('/search', zValidator('query', searchSchema), (c) => {
53
46
  const { q, page = 1, limit = 10 } = c.req.valid('query')
54
- return c.json({ query: q, page, limit, results: [] })
47
+ return c.json({ query: q, page, limit })
55
48
  })
56
49
  ```
57
50
 
58
- ### Path Parameter 검증
51
+ ### Path Parameter
59
52
 
60
53
  ```typescript
61
- const paramSchema = z.object({
62
- id: z.string().uuid(),
63
- })
64
-
65
- app.get('/users/:id', zValidator('param', paramSchema), (c) => {
66
- const { id } = c.req.valid('param')
67
- return c.json({ id })
68
- })
54
+ app.get('/users/:id',
55
+ zValidator('param', z.object({ id: z.string().uuid() })),
56
+ (c) => {
57
+ const { id } = c.req.valid('param')
58
+ return c.json({ id })
59
+ }
60
+ )
69
61
  ```
70
62
 
71
- ### Header 검증
63
+ ### Header
72
64
 
73
65
  ```typescript
74
- // ⚠️ 헤더 이름은 소문자로
66
+ // 헤더 이름은 소문자
75
67
  const headerSchema = z.object({
76
68
  'x-api-key': z.string().uuid(),
77
- 'x-request-id': z.string().optional(),
78
69
  })
79
70
 
80
71
  app.get('/api/protected', zValidator('header', headerSchema), (c) => {
81
- const headers = c.req.valid('header')
82
- return c.json({ apiKey: headers['x-api-key'] })
83
- })
84
- ```
85
-
86
- ### Form Data 검증
87
-
88
- ```typescript
89
- const formSchema = z.object({
90
- title: z.string().min(1).max(100),
91
- content: z.string().min(10),
92
- })
93
-
94
- app.post('/posts', zValidator('form', formSchema), (c) => {
95
- const data = c.req.valid('form')
96
- return c.json({ post: data }, 201)
72
+ return c.json({ apiKey: c.req.valid('header')['x-api-key'] })
97
73
  })
98
74
  ```
99
75
 
@@ -101,24 +77,16 @@ app.post('/posts', zValidator('form', formSchema), (c) => {
101
77
 
102
78
  ## 복합 검증
103
79
 
104
- ### 여러 소스 검증
105
-
106
80
  ```typescript
107
- const postSchema = z.object({
108
- title: z.string().min(1).max(100),
109
- body: z.string().min(10),
110
- })
111
-
112
81
  app.post(
113
82
  '/posts/:id',
114
83
  zValidator('param', z.object({ id: z.string().uuid() })),
115
84
  zValidator('query', z.object({ draft: z.coerce.boolean().optional() })),
116
- zValidator('json', postSchema),
85
+ zValidator('json', z.object({ title: z.string(), body: z.string() })),
117
86
  (c) => {
118
87
  const { id } = c.req.valid('param')
119
88
  const { draft } = c.req.valid('query')
120
89
  const postData = c.req.valid('json')
121
-
122
90
  return c.json({ id, draft: draft ?? false, ...postData })
123
91
  }
124
92
  )
@@ -128,45 +96,15 @@ app.post(
128
96
 
129
97
  ## 커스텀 에러 처리
130
98
 
131
- ### 기본 에러 응답
132
-
133
- ```typescript
134
- app.post(
135
- '/users',
136
- zValidator('json', createUserSchema, (result, c) => {
137
- if (!result.success) {
138
- return c.json(
139
- {
140
- error: 'Validation failed',
141
- issues: result.error.flatten(),
142
- },
143
- 400
144
- )
145
- }
146
- }),
147
- (c) => {
148
- const data = c.req.valid('json')
149
- return c.json({ user: data }, 201)
150
- }
151
- )
152
- ```
153
-
154
- ### 상세 에러 응답
155
-
156
99
  ```typescript
157
100
  app.post(
158
101
  '/users',
159
102
  zValidator('json', createUserSchema, (result, c) => {
160
103
  if (!result.success) {
161
- const errors = result.error.flatten()
162
- return c.json(
163
- {
164
- error: 'Validation failed',
165
- fieldErrors: errors.fieldErrors,
166
- formErrors: errors.formErrors,
167
- },
168
- 400
169
- )
104
+ return c.json({
105
+ error: 'Validation failed',
106
+ fieldErrors: result.error.flatten().fieldErrors,
107
+ }, 400)
170
108
  }
171
109
  }),
172
110
  (c) => {
@@ -185,7 +123,6 @@ app.post(
185
123
  ```typescript
186
124
  import { z } from 'zod'
187
125
 
188
- // ✅ Zod v4 문법
189
126
  export const createUserSchema = z.object({
190
127
  email: z.email(),
191
128
  name: z.string().min(1).max(100).trim(),
@@ -194,92 +131,27 @@ export const createUserSchema = z.object({
194
131
 
195
132
  export const updateUserSchema = createUserSchema.partial()
196
133
 
197
- export const userIdSchema = z.object({
198
- id: z.string().uuid(),
199
- })
200
-
201
134
  export type CreateUserInput = z.infer<typeof createUserSchema>
202
- export type UpdateUserInput = z.infer<typeof updateUserSchema>
203
- ```
204
-
205
- ### routes/users.ts
206
-
207
- ```typescript
208
- import { Hono } from 'hono'
209
- import { zValidator } from '@hono/zod-validator'
210
- import {
211
- createUserSchema,
212
- updateUserSchema,
213
- userIdSchema,
214
- } from '../validators/user'
215
-
216
- const users = new Hono()
217
-
218
- users.post('/', zValidator('json', createUserSchema), (c) => {
219
- const data = c.req.valid('json')
220
- return c.json({ user: data }, 201)
221
- })
222
-
223
- users.put(
224
- '/:id',
225
- zValidator('param', userIdSchema),
226
- zValidator('json', updateUserSchema),
227
- (c) => {
228
- const { id } = c.req.valid('param')
229
- const data = c.req.valid('json')
230
- return c.json({ id, ...data })
231
- }
232
- )
233
-
234
- export default users
235
135
  ```
236
136
 
237
137
  ---
238
138
 
239
- ## 고급 스키마 패턴
240
-
241
- ### Coerce (타입 변환)
139
+ ## 고급 패턴
242
140
 
243
141
  ```typescript
244
- const querySchema = z.object({
245
- // string → number 변환
246
- page: z.coerce.number().positive(),
247
- // string → boolean 변환
248
- active: z.coerce.boolean(),
249
- // string → Date 변환
250
- since: z.coerce.date(),
251
- })
252
- ```
253
-
254
- ### Enum
255
-
256
- ```typescript
257
- const statusSchema = z.object({
258
- status: z.enum(['pending', 'active', 'completed']),
259
- })
260
- ```
261
-
262
- ### Array
263
-
264
- ```typescript
265
- const tagsSchema = z.object({
266
- tags: z.array(z.string()).min(1).max(10),
267
- })
268
- ```
142
+ // Coerce (타입 변환)
143
+ z.coerce.number() // string → number
144
+ z.coerce.boolean() // 'true' → boolean
145
+ z.coerce.date() // string → Date
269
146
 
270
- ### Union
147
+ // Enum
148
+ z.enum(['pending', 'active', 'completed'])
271
149
 
272
- ```typescript
273
- const idSchema = z.union([
274
- z.string().uuid(),
275
- z.coerce.number().positive(),
276
- ])
277
- ```
278
-
279
- ### Refinement
150
+ // Transform
151
+ z.email().transform((e) => e.toLowerCase())
280
152
 
281
- ```typescript
282
- const passwordSchema = z.object({
153
+ // Refinement
154
+ z.object({
283
155
  password: z.string().min(8),
284
156
  confirmPassword: z.string(),
285
157
  }).refine((data) => data.password === data.confirmPassword, {
@@ -288,41 +160,9 @@ const passwordSchema = z.object({
288
160
  })
289
161
  ```
290
162
 
291
- ### Transform
292
-
293
- ```typescript
294
- const userSchema = z.object({
295
- email: z.email().transform((email) => email.toLowerCase()),
296
- name: z.string().transform((name) => name.trim()),
297
- })
298
- ```
299
-
300
- ---
301
-
302
- ## Standard Schema Validator
303
-
304
- Zod 외에도 다양한 검증 라이브러리 지원:
305
-
306
- ```typescript
307
- import { sValidator } from '@hono/standard-validator'
308
- import { z } from 'zod'
309
-
310
- const schema = z.object({
311
- name: z.string(),
312
- age: z.number(),
313
- })
314
-
315
- app.post('/author', sValidator('json', schema), (c) => {
316
- const data = c.req.valid('json')
317
- return c.json({ success: true, message: `${data.name} is ${data.age}` })
318
- })
319
- ```
320
-
321
163
  ---
322
164
 
323
165
  ## 관련 문서
324
166
 
325
- - [기본 사용법](./index.md)
326
- - [미들웨어](./middleware.md)
327
- - [에러 처리](./error-handling.md)
328
167
  - [Zod 가이드](../zod/index.md)
168
+ - [에러 처리](./error-handling.md)