@kood/claude-code 0.3.1 → 0.3.3
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
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.3");
|
|
413
413
|
program.option(
|
|
414
414
|
"-t, --template <names>",
|
|
415
415
|
"template names (comma-separated: tanstack-start,hono)"
|
package/package.json
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
| **API** | `/api` 라우터 생성 (Server Functions 사용) |
|
|
19
19
|
| **레이어** | Service Layer 건너뛰기, Routes에서 직접 DB 접근 |
|
|
20
20
|
| **검증** | Handler 내부 수동 검증, 인증 로직 분산 |
|
|
21
|
-
| **
|
|
21
|
+
| **Barrel Export** | `functions/index.ts` 생성 (Tree Shaking 실패, 서버 라이브러리 Client 오염) |
|
|
22
22
|
|
|
23
23
|
</forbidden>
|
|
24
24
|
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
| **페이지 분리** | 100줄+ → `-components`, 200줄+ → `-sections` |
|
|
34
34
|
| **beforeLoad** | 인증 체크, Context 전달, 리다이렉트 |
|
|
35
35
|
| **loader** | 데이터 로딩 (beforeLoad 완료 후 병렬 실행) |
|
|
36
|
-
| **Server Fn** | `
|
|
36
|
+
| **Server Fn** | `createServerFn` 기본 사용 |
|
|
37
37
|
| **검증** | `inputValidator` (POST/PUT/PATCH), Zod 스키마 |
|
|
38
38
|
| **인증** | `middleware` (authMiddleware) |
|
|
39
39
|
| **에러 처리** | `errorComponent` (라우트), `notFoundComponent` (404) |
|
|
@@ -144,7 +144,6 @@ services/<domain>/
|
|
|
144
144
|
|
|
145
145
|
```
|
|
146
146
|
functions/ # 글로벌 (재사용)
|
|
147
|
-
├── index.ts
|
|
148
147
|
├── <function-name>.ts # 파일당 하나
|
|
149
148
|
└── middlewares/
|
|
150
149
|
└── <middleware-name>.ts
|
|
@@ -153,6 +152,24 @@ routes/<route>/-functions/ # 페이지 전용
|
|
|
153
152
|
└── <function-name>.ts
|
|
154
153
|
```
|
|
155
154
|
|
|
155
|
+
> ⚠️ **`functions/index.ts` 생성 금지**
|
|
156
|
+
>
|
|
157
|
+
> `functions/` 폴더에 `index.ts` (barrel export) 파일을 만들지 마세요.
|
|
158
|
+
>
|
|
159
|
+
> **문제점:**
|
|
160
|
+
> 1. **Tree Shaking 실패** - 번들러가 사용하지 않는 함수도 포함
|
|
161
|
+
> 2. **Client 번들 오염** - `pg`, `prisma` 등 서버 전용 라이브러리가 클라이언트에 import되어 빌드 에러 발생
|
|
162
|
+
>
|
|
163
|
+
> ```typescript
|
|
164
|
+
> // ❌ functions/index.ts 만들지 말 것
|
|
165
|
+
> export * from './get-users'
|
|
166
|
+
> export * from './create-post' // pg import → 클라이언트 빌드 실패
|
|
167
|
+
>
|
|
168
|
+
> // ✅ 개별 파일에서 직접 import
|
|
169
|
+
> import { getUsers } from '@/functions/get-users'
|
|
170
|
+
> import { createPost } from '@/functions/create-post'
|
|
171
|
+
> ```
|
|
172
|
+
|
|
156
173
|
### 4. Database Layer
|
|
157
174
|
|
|
158
175
|
```typescript
|
|
@@ -282,7 +299,7 @@ const { data } = useQuery({
|
|
|
282
299
|
})
|
|
283
300
|
|
|
284
301
|
// Server Function
|
|
285
|
-
export const getUsers =
|
|
302
|
+
export const getUsers = createServerFn()
|
|
286
303
|
.middleware([authMiddleware])
|
|
287
304
|
.handler(async () => prisma.user.findMany())
|
|
288
305
|
```
|
|
@@ -309,7 +326,7 @@ const mutation = useMutation({
|
|
|
309
326
|
})
|
|
310
327
|
|
|
311
328
|
// Server Function
|
|
312
|
-
export const createUser =
|
|
329
|
+
export const createUser = createServerFn({ method: 'POST' })
|
|
313
330
|
.middleware([authMiddleware])
|
|
314
331
|
.inputValidator(createUserSchema)
|
|
315
332
|
.handler(async ({ data }) => prisma.user.create({ data }))
|
|
@@ -327,12 +344,11 @@ export const createUser = createServerOnlyFn({ method: 'POST' })
|
|
|
327
344
|
|
|
328
345
|
| 타입 | 실행 위치 | 사용 시나리오 |
|
|
329
346
|
|------|----------|-------------|
|
|
330
|
-
| **
|
|
331
|
-
| createServerFn | 서버 (RPC) | 일반 서버 로직 |
|
|
347
|
+
| **createServerFn** | 서버 | DB 접근, 비밀키, 서버 로직 (기본) |
|
|
332
348
|
| createClientOnlyFn | 클라이언트 | localStorage, window |
|
|
333
349
|
| createIsomorphicFn | 양쪽 | 환경별 구현 |
|
|
334
350
|
|
|
335
|
-
**기본 규칙**: 별도 요청 없으면 `
|
|
351
|
+
**기본 규칙**: 별도 요청 없으면 `createServerFn` 사용
|
|
336
352
|
|
|
337
353
|
### Middleware 패턴
|
|
338
354
|
|
|
@@ -346,7 +362,7 @@ export const authMiddleware = createMiddleware()
|
|
|
346
362
|
})
|
|
347
363
|
|
|
348
364
|
// 2. 사용
|
|
349
|
-
export const createPost =
|
|
365
|
+
export const createPost = createServerFn({ method: 'POST' })
|
|
350
366
|
.middleware([authMiddleware])
|
|
351
367
|
.inputValidator(createPostSchema)
|
|
352
368
|
.handler(async ({ data, context }) => {
|
|
@@ -8,12 +8,20 @@
|
|
|
8
8
|
|
|
9
9
|
## 파일 네이밍
|
|
10
10
|
|
|
11
|
+
> ⚠️ **camelCase 파일명 금지** - 모든 파일명은 **kebab-case** 사용
|
|
12
|
+
|
|
11
13
|
| 타입 | 규칙 | 예시 |
|
|
12
14
|
|------|------|------|
|
|
13
15
|
| **일반 파일** | kebab-case | `user-profile.tsx`, `auth-service.ts` |
|
|
14
16
|
| **Route 파일** | TanStack Router 규칙 | `__root.tsx`, `index.tsx`, `$id.tsx` |
|
|
15
|
-
| **Hook 파일** | `use-` 접두사 | `use-user-filter.ts`, `use-auth.ts` |
|
|
16
|
-
| **Component** | PascalCase
|
|
17
|
+
| **Hook 파일** | `use-` 접두사 + kebab-case | `use-user-filter.ts`, `use-auth.ts` |
|
|
18
|
+
| **Component** | PascalCase 컴포넌트, kebab-case 파일 | `UserCard` in `user-card.tsx` |
|
|
19
|
+
| **Server Function** | kebab-case | `get-users.ts`, `create-post.ts` |
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
❌ camelCase 금지: getUserById.ts, authService.ts, useUserFilter.ts
|
|
23
|
+
✅ kebab-case 필수: get-user-by-id.ts, auth-service.ts, use-user-filter.ts
|
|
24
|
+
```
|
|
17
25
|
|
|
18
26
|
</naming>
|
|
19
27
|
|