@kood/claude-code 0.1.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.
Files changed (78) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.js +297 -0
  3. package/package.json +47 -0
  4. package/templates/hono/CLAUDE.md +376 -0
  5. package/templates/hono/docs/deployment/cloudflare.md +328 -0
  6. package/templates/hono/docs/deployment/index.md +291 -0
  7. package/templates/hono/docs/git/index.md +180 -0
  8. package/templates/hono/docs/library/hono/error-handling.md +400 -0
  9. package/templates/hono/docs/library/hono/index.md +241 -0
  10. package/templates/hono/docs/library/hono/middleware.md +334 -0
  11. package/templates/hono/docs/library/hono/rpc.md +454 -0
  12. package/templates/hono/docs/library/hono/validation.md +328 -0
  13. package/templates/hono/docs/library/prisma/index.md +427 -0
  14. package/templates/hono/docs/library/zod/index.md +413 -0
  15. package/templates/hono/docs/mcp/context7.md +106 -0
  16. package/templates/hono/docs/mcp/index.md +94 -0
  17. package/templates/hono/docs/mcp/sequential-thinking.md +101 -0
  18. package/templates/hono/docs/mcp/sgrep.md +105 -0
  19. package/templates/hono/docs/skills/gemini-review/SKILL.md +220 -0
  20. package/templates/hono/docs/skills/gemini-review/references/checklists.md +136 -0
  21. package/templates/hono/docs/skills/gemini-review/references/prompt-templates.md +303 -0
  22. package/templates/tanstack-start/CLAUDE.md +279 -0
  23. package/templates/tanstack-start/docs/architecture/architecture.md +547 -0
  24. package/templates/tanstack-start/docs/deployment/cloudflare.md +346 -0
  25. package/templates/tanstack-start/docs/deployment/index.md +102 -0
  26. package/templates/tanstack-start/docs/deployment/nitro.md +211 -0
  27. package/templates/tanstack-start/docs/deployment/railway.md +364 -0
  28. package/templates/tanstack-start/docs/deployment/vercel.md +287 -0
  29. package/templates/tanstack-start/docs/design/accessibility.md +433 -0
  30. package/templates/tanstack-start/docs/design/color.md +235 -0
  31. package/templates/tanstack-start/docs/design/components.md +409 -0
  32. package/templates/tanstack-start/docs/design/index.md +107 -0
  33. package/templates/tanstack-start/docs/design/safe-area.md +317 -0
  34. package/templates/tanstack-start/docs/design/spacing.md +341 -0
  35. package/templates/tanstack-start/docs/design/tailwind-setup.md +470 -0
  36. package/templates/tanstack-start/docs/design/typography.md +324 -0
  37. package/templates/tanstack-start/docs/git/index.md +203 -0
  38. package/templates/tanstack-start/docs/guides/best-practices.md +753 -0
  39. package/templates/tanstack-start/docs/guides/getting-started.md +304 -0
  40. package/templates/tanstack-start/docs/guides/husky-lint-staged.md +303 -0
  41. package/templates/tanstack-start/docs/guides/prettier.md +189 -0
  42. package/templates/tanstack-start/docs/guides/project-templates.md +710 -0
  43. package/templates/tanstack-start/docs/library/better-auth/2fa.md +136 -0
  44. package/templates/tanstack-start/docs/library/better-auth/advanced.md +138 -0
  45. package/templates/tanstack-start/docs/library/better-auth/index.md +83 -0
  46. package/templates/tanstack-start/docs/library/better-auth/plugins.md +111 -0
  47. package/templates/tanstack-start/docs/library/better-auth/session.md +127 -0
  48. package/templates/tanstack-start/docs/library/better-auth/setup.md +123 -0
  49. package/templates/tanstack-start/docs/library/prisma/crud.md +218 -0
  50. package/templates/tanstack-start/docs/library/prisma/index.md +165 -0
  51. package/templates/tanstack-start/docs/library/prisma/relations.md +191 -0
  52. package/templates/tanstack-start/docs/library/prisma/schema.md +177 -0
  53. package/templates/tanstack-start/docs/library/prisma/setup.md +156 -0
  54. package/templates/tanstack-start/docs/library/prisma/transactions.md +140 -0
  55. package/templates/tanstack-start/docs/library/tanstack-query/index.md +146 -0
  56. package/templates/tanstack-start/docs/library/tanstack-query/invalidation.md +146 -0
  57. package/templates/tanstack-start/docs/library/tanstack-query/optimistic-updates.md +196 -0
  58. package/templates/tanstack-start/docs/library/tanstack-query/setup.md +110 -0
  59. package/templates/tanstack-start/docs/library/tanstack-query/use-mutation.md +170 -0
  60. package/templates/tanstack-start/docs/library/tanstack-query/use-query.md +173 -0
  61. package/templates/tanstack-start/docs/library/tanstack-start/auth-patterns.md +171 -0
  62. package/templates/tanstack-start/docs/library/tanstack-start/index.md +114 -0
  63. package/templates/tanstack-start/docs/library/tanstack-start/middleware.md +142 -0
  64. package/templates/tanstack-start/docs/library/tanstack-start/routing.md +163 -0
  65. package/templates/tanstack-start/docs/library/tanstack-start/server-functions.md +128 -0
  66. package/templates/tanstack-start/docs/library/tanstack-start/setup.md +85 -0
  67. package/templates/tanstack-start/docs/library/zod/basic-types.md +186 -0
  68. package/templates/tanstack-start/docs/library/zod/complex-types.md +204 -0
  69. package/templates/tanstack-start/docs/library/zod/index.md +186 -0
  70. package/templates/tanstack-start/docs/library/zod/transforms.md +174 -0
  71. package/templates/tanstack-start/docs/library/zod/validation.md +208 -0
  72. package/templates/tanstack-start/docs/mcp/context7.md +204 -0
  73. package/templates/tanstack-start/docs/mcp/index.md +116 -0
  74. package/templates/tanstack-start/docs/mcp/sequential-thinking.md +180 -0
  75. package/templates/tanstack-start/docs/mcp/sgrep.md +174 -0
  76. package/templates/tanstack-start/docs/skills/gemini-review/SKILL.md +220 -0
  77. package/templates/tanstack-start/docs/skills/gemini-review/references/checklists.md +150 -0
  78. package/templates/tanstack-start/docs/skills/gemini-review/references/prompt-templates.md +293 -0
@@ -0,0 +1,334 @@
1
+ # Hono 미들웨어
2
+
3
+ > 요청/응답 처리 파이프라인
4
+
5
+ ---
6
+
7
+ ## 미들웨어 기본
8
+
9
+ ### 미들웨어 등록
10
+
11
+ ```typescript
12
+ import { Hono } from 'hono'
13
+ import { logger } from 'hono/logger'
14
+ import { cors } from 'hono/cors'
15
+
16
+ const app = new Hono()
17
+
18
+ // 모든 라우트에 적용
19
+ app.use(logger())
20
+ app.use(cors())
21
+
22
+ // 특정 경로에 적용
23
+ app.use('/api/*', cors())
24
+
25
+ // 특정 메서드 + 경로
26
+ app.post('/api/*', someMiddleware())
27
+ ```
28
+
29
+ ### 실행 순서
30
+
31
+ ```typescript
32
+ app.use(async (c, next) => {
33
+ console.log('1. 요청 전')
34
+ await next()
35
+ console.log('4. 응답 후')
36
+ })
37
+
38
+ app.use(async (c, next) => {
39
+ console.log('2. 요청 전')
40
+ await next()
41
+ console.log('3. 응답 후')
42
+ })
43
+
44
+ // 출력: 1 → 2 → handler → 3 → 4
45
+ ```
46
+
47
+ ---
48
+
49
+ ## 커스텀 미들웨어 작성
50
+
51
+ ### createMiddleware 사용
52
+
53
+ ```typescript
54
+ import { createMiddleware } from 'hono/factory'
55
+ import { HTTPException } from 'hono/http-exception'
56
+
57
+ type Env = {
58
+ Variables: {
59
+ userId: string
60
+ }
61
+ }
62
+
63
+ export const authMiddleware = createMiddleware<Env>(async (c, next) => {
64
+ const token = c.req.header('Authorization')?.replace('Bearer ', '')
65
+
66
+ if (!token) {
67
+ throw new HTTPException(401, { message: 'Unauthorized' })
68
+ }
69
+
70
+ // 토큰 검증 (예시)
71
+ const payload = await verifyJWT(token)
72
+ c.set('userId', payload.sub)
73
+
74
+ await next()
75
+ })
76
+ ```
77
+
78
+ ### 사용
79
+
80
+ ```typescript
81
+ // 특정 라우트에 적용
82
+ app.get('/me', authMiddleware, (c) => {
83
+ const userId = c.get('userId')
84
+ return c.json({ userId })
85
+ })
86
+
87
+ // 그룹에 적용
88
+ const api = new Hono()
89
+ api.use(authMiddleware)
90
+ api.get('/profile', (c) => c.json({ id: c.get('userId') }))
91
+
92
+ app.route('/api', api)
93
+ ```
94
+
95
+ ---
96
+
97
+ ## 내장 미들웨어
98
+
99
+ ### Logger
100
+
101
+ ```typescript
102
+ import { logger } from 'hono/logger'
103
+
104
+ app.use(logger())
105
+
106
+ // 커스텀 로거
107
+ app.use(logger((message, ...rest) => {
108
+ console.log(message, ...rest)
109
+ }))
110
+ ```
111
+
112
+ ### CORS
113
+
114
+ ```typescript
115
+ import { cors } from 'hono/cors'
116
+
117
+ // 기본
118
+ app.use('/api/*', cors())
119
+
120
+ // 설정
121
+ app.use('/api/*', cors({
122
+ origin: 'https://example.com',
123
+ allowMethods: ['GET', 'POST', 'PUT', 'DELETE'],
124
+ allowHeaders: ['Content-Type', 'Authorization'],
125
+ credentials: true,
126
+ maxAge: 86400,
127
+ }))
128
+
129
+ // 여러 origin
130
+ app.use('/api/*', cors({
131
+ origin: ['https://example.com', 'https://app.example.com'],
132
+ }))
133
+ ```
134
+
135
+ ### Basic Auth
136
+
137
+ ```typescript
138
+ import { basicAuth } from 'hono/basic-auth'
139
+
140
+ app.use(
141
+ '/admin/*',
142
+ basicAuth({
143
+ username: 'admin',
144
+ password: 'secret',
145
+ })
146
+ )
147
+
148
+ // 여러 사용자
149
+ app.use(
150
+ '/admin/*',
151
+ basicAuth({
152
+ username: 'admin1',
153
+ password: 'secret1',
154
+ }, {
155
+ username: 'admin2',
156
+ password: 'secret2',
157
+ })
158
+ )
159
+
160
+ // 커스텀 검증
161
+ app.use(
162
+ '/admin/*',
163
+ basicAuth({
164
+ verifyUser: async (username, password, c) => {
165
+ return username === 'admin' && password === 'secret'
166
+ },
167
+ })
168
+ )
169
+ ```
170
+
171
+ ### Bearer Auth
172
+
173
+ ```typescript
174
+ import { bearerAuth } from 'hono/bearer-auth'
175
+
176
+ app.use(
177
+ '/api/*',
178
+ bearerAuth({
179
+ token: 'my-secret-token',
180
+ })
181
+ )
182
+
183
+ // 커스텀 검증
184
+ app.use(
185
+ '/api/*',
186
+ bearerAuth({
187
+ verifyToken: async (token, c) => {
188
+ return token === 'valid-token'
189
+ },
190
+ })
191
+ )
192
+ ```
193
+
194
+ ### ETag
195
+
196
+ ```typescript
197
+ import { etag } from 'hono/etag'
198
+
199
+ app.use('/static/*', etag())
200
+ ```
201
+
202
+ ### Compress
203
+
204
+ ```typescript
205
+ import { compress } from 'hono/compress'
206
+
207
+ app.use(compress())
208
+ ```
209
+
210
+ ### Secure Headers
211
+
212
+ ```typescript
213
+ import { secureHeaders } from 'hono/secure-headers'
214
+
215
+ app.use(secureHeaders())
216
+
217
+ // 설정
218
+ app.use(secureHeaders({
219
+ xFrameOptions: 'DENY',
220
+ xXssProtection: '1',
221
+ }))
222
+ ```
223
+
224
+ ### Request ID
225
+
226
+ ```typescript
227
+ import { requestId } from 'hono/request-id'
228
+
229
+ app.use('*', requestId())
230
+
231
+ app.get('/', (c) => {
232
+ const id = c.get('requestId')
233
+ return c.text(`Request ID: ${id}`)
234
+ })
235
+ ```
236
+
237
+ ### Timing
238
+
239
+ ```typescript
240
+ import { timing, startTime, endTime } from 'hono/timing'
241
+
242
+ app.use(timing())
243
+
244
+ app.get('/', async (c) => {
245
+ startTime(c, 'db')
246
+ await db.query()
247
+ endTime(c, 'db')
248
+
249
+ return c.json({ data: [] })
250
+ })
251
+ ```
252
+
253
+ ---
254
+
255
+ ## 미들웨어 조합
256
+
257
+ ```typescript
258
+ import { Hono } from 'hono'
259
+ import { logger } from 'hono/logger'
260
+ import { cors } from 'hono/cors'
261
+ import { secureHeaders } from 'hono/secure-headers'
262
+ import { requestId } from 'hono/request-id'
263
+
264
+ const app = new Hono()
265
+
266
+ // 공통 미들웨어
267
+ app.use(logger())
268
+ app.use(requestId())
269
+ app.use(secureHeaders())
270
+
271
+ // API 전용
272
+ app.use('/api/*', cors())
273
+
274
+ // 인증 필요
275
+ app.use('/api/protected/*', authMiddleware)
276
+
277
+ // 라우트
278
+ app.get('/api/public', (c) => c.json({ public: true }))
279
+ app.get('/api/protected/data', (c) => c.json({ secret: 'data' }))
280
+ ```
281
+
282
+ ---
283
+
284
+ ## 타입 안전 미들웨어
285
+
286
+ ```typescript
287
+ import { Hono } from 'hono'
288
+ import { createMiddleware } from 'hono/factory'
289
+
290
+ // 환경 타입 정의
291
+ type Env = {
292
+ Bindings: {
293
+ DATABASE_URL: string
294
+ }
295
+ Variables: {
296
+ db: Database
297
+ user: User | null
298
+ }
299
+ }
300
+
301
+ // 타입 안전 미들웨어
302
+ const dbMiddleware = createMiddleware<Env>(async (c, next) => {
303
+ const db = new Database(c.env.DATABASE_URL)
304
+ c.set('db', db)
305
+ await next()
306
+ })
307
+
308
+ const authMiddleware = createMiddleware<Env>(async (c, next) => {
309
+ const token = c.req.header('Authorization')
310
+ const user = token ? await verifyToken(token) : null
311
+ c.set('user', user)
312
+ await next()
313
+ })
314
+
315
+ // App에서 사용
316
+ const app = new Hono<Env>()
317
+
318
+ app.use(dbMiddleware)
319
+ app.use(authMiddleware)
320
+
321
+ app.get('/users', (c) => {
322
+ const db = c.get('db') // Database 타입
323
+ const user = c.get('user') // User | null 타입
324
+ return c.json({ users: [] })
325
+ })
326
+ ```
327
+
328
+ ---
329
+
330
+ ## 관련 문서
331
+
332
+ - [기본 사용법](./index.md)
333
+ - [Zod 검증](./validation.md)
334
+ - [에러 처리](./error-handling.md)