@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
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Route Structure
|
|
2
2
|
|
|
3
|
-
> TanStack Start
|
|
3
|
+
> TanStack Start File-Based Routing
|
|
4
4
|
|
|
5
5
|
<instructions>
|
|
6
6
|
@../library/tanstack-router/index.md
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
<route_structure>
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## Route Folder Structure
|
|
14
14
|
|
|
15
15
|
```
|
|
16
16
|
routes/
|
|
@@ -19,28 +19,28 @@ routes/
|
|
|
19
19
|
├── users/
|
|
20
20
|
│ ├── index.tsx # /users (List)
|
|
21
21
|
│ ├── $id.tsx # /users/:id (Detail)
|
|
22
|
-
│ ├── -components/ #
|
|
23
|
-
│ ├── -hooks/ #
|
|
24
|
-
│ ├── -functions/ #
|
|
25
|
-
│ └── -sections/ #
|
|
22
|
+
│ ├── -components/ # Page-specific components (required)
|
|
23
|
+
│ ├── -hooks/ # Page-specific Hooks (required)
|
|
24
|
+
│ ├── -functions/ # Page-specific Server Functions (required)
|
|
25
|
+
│ └── -sections/ # Section separation (optional, complex pages only)
|
|
26
26
|
└── posts/
|
|
27
27
|
├── index.tsx
|
|
28
28
|
├── $slug.tsx
|
|
29
|
-
├── -components/ #
|
|
30
|
-
├── -hooks/ #
|
|
31
|
-
└── -functions/ #
|
|
29
|
+
├── -components/ # Required
|
|
30
|
+
├── -hooks/ # Required
|
|
31
|
+
└── -functions/ # Required
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
|
|
|
35
|
-
|
|
36
|
-
| `-` |
|
|
37
|
-
| `$` |
|
|
38
|
-
| `_` | Pathless Layout | ✅
|
|
34
|
+
| Prefix | Purpose | Route Generation |
|
|
35
|
+
|--------|---------|------------------|
|
|
36
|
+
| `-` | Exclude from routes | ❌ Excluded |
|
|
37
|
+
| `$` | Dynamic parameters | ✅ Generated |
|
|
38
|
+
| `_` | Pathless Layout | ✅ Generated (no path) |
|
|
39
39
|
|
|
40
|
-
**⚠️
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
- `-sections
|
|
40
|
+
**⚠️ Required Rules:**
|
|
41
|
+
- All pages must have `-components/`, `-hooks/`, `-functions/` folders
|
|
42
|
+
- Custom Hooks must always be separated into `-hooks/` folder regardless of page size
|
|
43
|
+
- `-sections/` is optional, use only for complex pages (200+ lines)
|
|
44
44
|
|
|
45
45
|
</route_structure>
|
|
46
46
|
|
|
@@ -48,17 +48,17 @@ routes/
|
|
|
48
48
|
|
|
49
49
|
<file_naming>
|
|
50
50
|
|
|
51
|
-
##
|
|
51
|
+
## Route File Naming Rules
|
|
52
52
|
|
|
53
|
-
|
|
|
54
|
-
|
|
55
|
-
| `/` | `index.tsx` |
|
|
56
|
-
| `/users` | `users/index.tsx` |
|
|
57
|
-
| `/users/:id` | `users/$id.tsx` |
|
|
58
|
-
| `/posts/:slug` | `posts/$slug.tsx` | URL
|
|
59
|
-
| `/dashboard/*` | `dashboard/$.tsx` | Catch-all
|
|
60
|
-
| Layout | `__root.tsx` | Root
|
|
61
|
-
| Pathless | `_layout.tsx` |
|
|
53
|
+
| Path | Filename | Description |
|
|
54
|
+
|------|----------|-------------|
|
|
55
|
+
| `/` | `index.tsx` | Index route |
|
|
56
|
+
| `/users` | `users/index.tsx` | List page |
|
|
57
|
+
| `/users/:id` | `users/$id.tsx` | Dynamic parameter |
|
|
58
|
+
| `/posts/:slug` | `posts/$slug.tsx` | URL parameter |
|
|
59
|
+
| `/dashboard/*` | `dashboard/$.tsx` | Catch-all route |
|
|
60
|
+
| Layout | `__root.tsx` | Root layout |
|
|
61
|
+
| Pathless | `_layout.tsx` | Pathless layout |
|
|
62
62
|
|
|
63
63
|
</file_naming>
|
|
64
64
|
|
|
@@ -66,7 +66,7 @@ routes/
|
|
|
66
66
|
|
|
67
67
|
<patterns>
|
|
68
68
|
|
|
69
|
-
##
|
|
69
|
+
## Basic Route Pattern
|
|
70
70
|
|
|
71
71
|
```tsx
|
|
72
72
|
// routes/users/index.tsx
|
|
@@ -89,7 +89,7 @@ const UsersPage = (): JSX.Element => {
|
|
|
89
89
|
}
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
-
##
|
|
92
|
+
## Dynamic Route + Loader
|
|
93
93
|
|
|
94
94
|
```tsx
|
|
95
95
|
// routes/users/$id.tsx
|
|
@@ -188,7 +188,7 @@ const DashboardPage = (): JSX.Element => {
|
|
|
188
188
|
}
|
|
189
189
|
```
|
|
190
190
|
|
|
191
|
-
## Section
|
|
191
|
+
## Section Pattern
|
|
192
192
|
|
|
193
193
|
```tsx
|
|
194
194
|
// routes/users/-sections/user-list-section.tsx
|
|
@@ -217,7 +217,7 @@ export const UserListSection = (): JSX.Element => {
|
|
|
217
217
|
}
|
|
218
218
|
```
|
|
219
219
|
|
|
220
|
-
##
|
|
220
|
+
## Component Pattern
|
|
221
221
|
|
|
222
222
|
```tsx
|
|
223
223
|
// routes/users/-components/user-card.tsx
|
|
@@ -268,21 +268,21 @@ export const UserCard = ({
|
|
|
268
268
|
|
|
269
269
|
<folder_structure_rules>
|
|
270
270
|
|
|
271
|
-
##
|
|
271
|
+
## Folder Structure Rules
|
|
272
272
|
|
|
273
|
-
**⚠️
|
|
274
|
-
- `-components/`:
|
|
275
|
-
- `-hooks/`:
|
|
276
|
-
- `-functions/`:
|
|
273
|
+
**⚠️ Required for All Pages:**
|
|
274
|
+
- `-components/`: Page-specific components
|
|
275
|
+
- `-hooks/`: Page-specific Custom Hooks (regardless of line count)
|
|
276
|
+
- `-functions/`: Page-specific Server Functions
|
|
277
277
|
|
|
278
|
-
|
|
279
|
-
- `-sections/`:
|
|
278
|
+
**Optional:**
|
|
279
|
+
- `-sections/`: Use only for complex pages (200+ lines)
|
|
280
280
|
|
|
281
|
-
|
|
|
282
|
-
|
|
283
|
-
| ~100
|
|
284
|
-
| 100-200
|
|
285
|
-
| 200
|
|
281
|
+
| Page Size | Required | Optional |
|
|
282
|
+
|-----------|----------|----------|
|
|
283
|
+
| ~100 lines | `-components/`, `-hooks/`, `-functions/` | - |
|
|
284
|
+
| 100-200 lines | `-components/`, `-hooks/`, `-functions/` | - |
|
|
285
|
+
| 200+ lines | `-components/`, `-hooks/`, `-functions/` | `-sections/` |
|
|
286
286
|
|
|
287
287
|
</folder_structure_rules>
|
|
288
288
|
|
|
@@ -290,23 +290,23 @@ export const UserCard = ({
|
|
|
290
290
|
|
|
291
291
|
<loader_execution>
|
|
292
292
|
|
|
293
|
-
## Loader
|
|
293
|
+
## Loader Execution Order
|
|
294
294
|
|
|
295
|
-
|
|
|
296
|
-
|
|
297
|
-
| 1. `beforeLoad` |
|
|
298
|
-
| 2. `loader` |
|
|
295
|
+
| Step | Execution | Description |
|
|
296
|
+
|------|-----------|-------------|
|
|
297
|
+
| 1. `beforeLoad` | Sequential (outermost → innermost) | Auth check, context setup |
|
|
298
|
+
| 2. `loader` | Parallel (all loaders simultaneously) | Data fetching |
|
|
299
299
|
|
|
300
300
|
```tsx
|
|
301
301
|
// Parent Route
|
|
302
302
|
export const Route = createFileRoute('/dashboard')({
|
|
303
303
|
beforeLoad: async () => {
|
|
304
|
-
// 1.
|
|
304
|
+
// 1. Runs first (sequential)
|
|
305
305
|
const auth = await checkAuth()
|
|
306
306
|
return { auth }
|
|
307
307
|
},
|
|
308
308
|
loader: async () => {
|
|
309
|
-
// 2.
|
|
309
|
+
// 2. Runs later (parallel)
|
|
310
310
|
return getDashboardData()
|
|
311
311
|
},
|
|
312
312
|
})
|
|
@@ -314,11 +314,11 @@ export const Route = createFileRoute('/dashboard')({
|
|
|
314
314
|
// Child Route
|
|
315
315
|
export const Route = createFileRoute('/dashboard/users')({
|
|
316
316
|
beforeLoad: async () => {
|
|
317
|
-
// 1. Parent beforeLoad
|
|
317
|
+
// 1. Runs after Parent beforeLoad
|
|
318
318
|
return {}
|
|
319
319
|
},
|
|
320
320
|
loader: async () => {
|
|
321
|
-
// 2. Parent loader
|
|
321
|
+
// 2. Runs in parallel with Parent loader
|
|
322
322
|
return getUsers()
|
|
323
323
|
},
|
|
324
324
|
})
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Server Functions
|
|
2
2
|
|
|
3
|
-
> TanStack Start
|
|
3
|
+
> TanStack Start Data Layer (Server Functions)
|
|
4
4
|
|
|
5
5
|
<instructions>
|
|
6
6
|
@../library/tanstack-start/index.md
|
|
@@ -10,15 +10,15 @@
|
|
|
10
10
|
|
|
11
11
|
<api_naming>
|
|
12
12
|
|
|
13
|
-
## API
|
|
13
|
+
## API Names (Important)
|
|
14
14
|
|
|
15
|
-
| ✅
|
|
16
|
-
|
|
17
|
-
| `.inputValidator()` | ~~`.validator()`~~ | TanStack Start
|
|
18
|
-
| `.middleware()` | - | Middleware
|
|
19
|
-
| `.handler()` | - |
|
|
15
|
+
| ✅ Correct API | ❌ Incorrect API | Description |
|
|
16
|
+
|----------------|------------------|-------------|
|
|
17
|
+
| `.inputValidator()` | ~~`.validator()`~~ | TanStack Start only supports `inputValidator` |
|
|
18
|
+
| `.middleware()` | - | Middleware chaining |
|
|
19
|
+
| `.handler()` | - | Final handler function |
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
**Note:** `validator` does not exist. Always use `inputValidator`.
|
|
22
22
|
|
|
23
23
|
</api_naming>
|
|
24
24
|
|
|
@@ -26,15 +26,15 @@
|
|
|
26
26
|
|
|
27
27
|
<folder_structure>
|
|
28
28
|
|
|
29
|
-
##
|
|
29
|
+
## Service Folder Structure
|
|
30
30
|
|
|
31
31
|
```
|
|
32
32
|
services/
|
|
33
33
|
├── user/
|
|
34
|
-
│ ├── index.ts #
|
|
35
|
-
│ ├── schemas.ts # Zod
|
|
36
|
-
│ ├── queries.ts # GET (
|
|
37
|
-
│ └── mutations.ts # POST (
|
|
34
|
+
│ ├── index.ts # Entry point (re-export)
|
|
35
|
+
│ ├── schemas.ts # Zod schemas
|
|
36
|
+
│ ├── queries.ts # GET (read)
|
|
37
|
+
│ └── mutations.ts # POST (write)
|
|
38
38
|
├── auth/
|
|
39
39
|
│ ├── index.ts
|
|
40
40
|
│ ├── schemas.ts
|
|
@@ -47,12 +47,12 @@ services/
|
|
|
47
47
|
└── mutations.ts
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
-
|
|
|
51
|
-
|
|
52
|
-
| `index.ts` |
|
|
53
|
-
| `schemas.ts` | Zod
|
|
54
|
-
| `queries.ts` | GET
|
|
55
|
-
| `mutations.ts` | POST/PUT/DELETE (
|
|
50
|
+
| File | Purpose |
|
|
51
|
+
|------|---------|
|
|
52
|
+
| `index.ts` | Re-export all functions |
|
|
53
|
+
| `schemas.ts` | Zod validation schemas |
|
|
54
|
+
| `queries.ts` | GET requests (read) |
|
|
55
|
+
| `mutations.ts` | POST/PUT/DELETE (write) |
|
|
56
56
|
|
|
57
57
|
</folder_structure>
|
|
58
58
|
|
|
@@ -60,7 +60,7 @@ services/
|
|
|
60
60
|
|
|
61
61
|
<patterns>
|
|
62
62
|
|
|
63
|
-
## Schemas
|
|
63
|
+
## Schemas File
|
|
64
64
|
|
|
65
65
|
```typescript
|
|
66
66
|
// services/user/schemas.ts
|
|
@@ -81,7 +81,7 @@ export type CreateUserInput = z.infer<typeof createUserSchema>
|
|
|
81
81
|
export type UpdateUserInput = z.infer<typeof updateUserSchema>
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
-
## Queries
|
|
84
|
+
## Queries File (GET)
|
|
85
85
|
|
|
86
86
|
```typescript
|
|
87
87
|
// services/user/queries.ts
|
|
@@ -108,7 +108,7 @@ export const getUserByEmail = createServerFn({ method: 'GET' })
|
|
|
108
108
|
})
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
-
## Mutations
|
|
111
|
+
## Mutations File (POST)
|
|
112
112
|
|
|
113
113
|
```typescript
|
|
114
114
|
// services/user/mutations.ts
|
|
@@ -135,7 +135,7 @@ export const deleteUser = createServerFn({ method: 'POST' })
|
|
|
135
135
|
})
|
|
136
136
|
```
|
|
137
137
|
|
|
138
|
-
##
|
|
138
|
+
## Entry Point File
|
|
139
139
|
|
|
140
140
|
```typescript
|
|
141
141
|
// services/user/index.ts
|
|
@@ -144,7 +144,7 @@ export * from './queries'
|
|
|
144
144
|
export * from './mutations'
|
|
145
145
|
```
|
|
146
146
|
|
|
147
|
-
## Database
|
|
147
|
+
## Database File
|
|
148
148
|
|
|
149
149
|
```typescript
|
|
150
150
|
// database/prisma.ts
|
|
@@ -171,7 +171,7 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
171
171
|
|
|
172
172
|
<middleware>
|
|
173
173
|
|
|
174
|
-
## Middleware
|
|
174
|
+
## Middleware Pattern
|
|
175
175
|
|
|
176
176
|
```typescript
|
|
177
177
|
// middleware/auth.ts
|
|
@@ -234,7 +234,7 @@ export const deleteUser = createServerFn({ method: 'POST' })
|
|
|
234
234
|
|
|
235
235
|
<usage>
|
|
236
236
|
|
|
237
|
-
## TanStack Query
|
|
237
|
+
## TanStack Query Integration
|
|
238
238
|
|
|
239
239
|
```typescript
|
|
240
240
|
// routes/users/-hooks/use-users.ts
|
|
@@ -274,7 +274,7 @@ export const useUsers = () => {
|
|
|
274
274
|
}
|
|
275
275
|
```
|
|
276
276
|
|
|
277
|
-
## Form
|
|
277
|
+
## Form Integration
|
|
278
278
|
|
|
279
279
|
```tsx
|
|
280
280
|
// routes/users/-components/create-user-form.tsx
|
|
@@ -331,23 +331,23 @@ export const CreateUserForm = (): JSX.Element => {
|
|
|
331
331
|
|
|
332
332
|
<method_chaining>
|
|
333
333
|
|
|
334
|
-
## Method Chaining
|
|
334
|
+
## Method Chaining Order
|
|
335
335
|
|
|
336
336
|
```typescript
|
|
337
|
-
// ✅
|
|
337
|
+
// ✅ Correct order
|
|
338
338
|
createServerFn({ method: 'POST' })
|
|
339
|
-
.middleware([authMiddleware]) // 1. middleware (
|
|
340
|
-
.inputValidator(createUserSchema) // 2. inputValidator (
|
|
341
|
-
.handler(async ({ data }) => {}) // 3. handler (
|
|
339
|
+
.middleware([authMiddleware]) // 1. middleware (optional)
|
|
340
|
+
.inputValidator(createUserSchema) // 2. inputValidator (optional)
|
|
341
|
+
.handler(async ({ data }) => {}) // 3. handler (required)
|
|
342
342
|
|
|
343
|
-
// ❌
|
|
343
|
+
// ❌ Wrong order (TypeScript error)
|
|
344
344
|
createServerFn({ method: 'POST' })
|
|
345
|
-
.handler(async () => {}) // ❌ handler
|
|
346
|
-
.inputValidator(schema) // ❌ inputValidator
|
|
345
|
+
.handler(async () => {}) // ❌ handler first
|
|
346
|
+
.inputValidator(schema) // ❌ inputValidator after
|
|
347
347
|
|
|
348
|
-
// ❌
|
|
348
|
+
// ❌ Wrong API name (does not exist)
|
|
349
349
|
createServerFn({ method: 'POST' })
|
|
350
|
-
.validator(schema) // ❌ validator
|
|
350
|
+
.validator(schema) // ❌ validator doesn't exist! Use inputValidator
|
|
351
351
|
.handler(async ({ data }) => {})
|
|
352
352
|
```
|
|
353
353
|
|
|
@@ -357,14 +357,14 @@ createServerFn({ method: 'POST' })
|
|
|
357
357
|
|
|
358
358
|
<best_practices>
|
|
359
359
|
|
|
360
|
-
|
|
|
361
|
-
|
|
362
|
-
|
|
|
363
|
-
|
|
|
364
|
-
| **Validation** | POST/PUT/DELETE
|
|
365
|
-
| **Middleware** |
|
|
366
|
-
| **TanStack Query** |
|
|
367
|
-
|
|
|
360
|
+
| Principle | Description |
|
|
361
|
+
|-----------|-------------|
|
|
362
|
+
| **File Separation** | Separate schemas, queries, mutations required |
|
|
363
|
+
| **Entry Point** | Re-export all functions in index.ts |
|
|
364
|
+
| **Validation** | inputValidator required for POST/PUT/DELETE |
|
|
365
|
+
| **Middleware** | Use middleware for auth/permissions |
|
|
366
|
+
| **TanStack Query** | Never call directly from client, use Query/Mutation |
|
|
367
|
+
| **Error Handling** | Throw clear error messages |
|
|
368
368
|
|
|
369
369
|
</best_practices>
|
|
370
370
|
|