@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.1");
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kood/claude-code",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "Claude Code documentation installer for projects",
5
5
  "type": "module",
6
6
  "bin": "./dist/index.js",
@@ -18,7 +18,7 @@
18
18
  | **API** | `/api` 라우터 생성 (Server Functions 사용) |
19
19
  | **레이어** | Service Layer 건너뛰기, Routes에서 직접 DB 접근 |
20
20
  | **검증** | Handler 내부 수동 검증, 인증 로직 분산 |
21
- | **Server Fn** | `createServerFn` 사용 (명시 요청 없으면 `createServerOnlyFn`) |
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** | `createServerOnlyFn` 기본 사용 |
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 = createServerOnlyFn()
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 = createServerOnlyFn({ method: 'POST' })
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
- | **createServerOnlyFn** | 서버 | DB 접근, 비밀키 (기본) |
331
- | createServerFn | 서버 (RPC) | 일반 서버 로직 |
347
+ | **createServerFn** | 서버 | DB 접근, 비밀키, 서버 로직 (기본) |
332
348
  | createClientOnlyFn | 클라이언트 | localStorage, window |
333
349
  | createIsomorphicFn | 양쪽 | 환경별 구현 |
334
350
 
335
- **기본 규칙**: 별도 요청 없으면 `createServerOnlyFn` 사용
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 = createServerOnlyFn({ method: 'POST' })
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 (파일은 kebab) | `UserCard` in `user-card.tsx` |
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