appflare 0.2.24 → 0.2.26
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/Documentation.md +758 -758
- package/cli/commands/index.ts +238 -238
- package/cli/generate.ts +178 -178
- package/cli/index.ts +120 -120
- package/cli/load-config.ts +184 -184
- package/cli/schema-compiler.ts +1183 -1183
- package/cli/templates/auth/README.md +156 -156
- package/cli/templates/auth/config.ts +61 -61
- package/cli/templates/auth/route-config.ts +1 -1
- package/cli/templates/auth/route-handler.ts +1 -1
- package/cli/templates/auth/route-request-utils.ts +5 -5
- package/cli/templates/auth/route.config.ts +18 -18
- package/cli/templates/auth/route.handler.ts +18 -18
- package/cli/templates/auth/route.request-utils.ts +55 -55
- package/cli/templates/auth/route.ts +14 -14
- package/cli/templates/core/README.md +266 -266
- package/cli/templates/core/app-creation.ts +19 -19
- package/cli/templates/core/client/appflare.ts +112 -112
- package/cli/templates/core/client/handlers/index.ts +748 -749
- package/cli/templates/core/client/handlers.ts +1 -1
- package/cli/templates/core/client/index.ts +7 -7
- package/cli/templates/core/client/storage.ts +180 -180
- package/cli/templates/core/client/types.ts +184 -184
- package/cli/templates/core/client-modules/appflare.ts +1 -1
- package/cli/templates/core/client-modules/handlers.ts +1 -1
- package/cli/templates/core/client-modules/index.ts +1 -1
- package/cli/templates/core/client-modules/storage.ts +1 -1
- package/cli/templates/core/client-modules/types.ts +1 -1
- package/cli/templates/core/client.artifacts.ts +39 -39
- package/cli/templates/core/client.ts +4 -4
- package/cli/templates/core/drizzle.ts +15 -15
- package/cli/templates/core/export.ts +14 -14
- package/cli/templates/core/handlers.route.ts +24 -24
- package/cli/templates/core/handlers.ts +1 -1
- package/cli/templates/core/imports.ts +9 -9
- package/cli/templates/core/server.ts +38 -38
- package/cli/templates/core/types.ts +6 -6
- package/cli/templates/core/wrangler.ts +109 -109
- package/cli/templates/dashboard/builders/functions/index.ts +17 -17
- package/cli/templates/dashboard/builders/functions/render-page/header.ts +20 -20
- package/cli/templates/dashboard/builders/functions/render-page/index.ts +33 -33
- package/cli/templates/dashboard/builders/functions/render-page/request-panel.ts +171 -171
- package/cli/templates/dashboard/builders/functions/render-page/result-panel.ts +85 -85
- package/cli/templates/dashboard/builders/functions/render-page/scripts.ts +554 -554
- package/cli/templates/dashboard/builders/navigation.ts +122 -122
- package/cli/templates/dashboard/builders/storage/index.ts +13 -13
- package/cli/templates/dashboard/builders/storage/routes/create-directory-route.ts +29 -29
- package/cli/templates/dashboard/builders/storage/routes/delete-route.ts +18 -18
- package/cli/templates/dashboard/builders/storage/routes/download-route.ts +23 -23
- package/cli/templates/dashboard/builders/storage/routes/index.ts +22 -22
- package/cli/templates/dashboard/builders/storage/routes/list-route.ts +25 -25
- package/cli/templates/dashboard/builders/storage/routes/preview-route.ts +21 -21
- package/cli/templates/dashboard/builders/storage/routes/upload-route.ts +21 -21
- package/cli/templates/dashboard/builders/storage/runtime/helpers.ts +72 -72
- package/cli/templates/dashboard/builders/storage/runtime/storage-page.ts +130 -130
- package/cli/templates/dashboard/builders/table-routes/common/drawer-panel.ts +27 -27
- package/cli/templates/dashboard/builders/table-routes/common/pagination.ts +30 -30
- package/cli/templates/dashboard/builders/table-routes/common/search-bar.ts +23 -23
- package/cli/templates/dashboard/builders/table-routes/fragments.ts +217 -217
- package/cli/templates/dashboard/builders/table-routes/helpers.ts +45 -45
- package/cli/templates/dashboard/builders/table-routes/index.ts +8 -8
- package/cli/templates/dashboard/builders/table-routes/table/actions-cell.ts +71 -71
- package/cli/templates/dashboard/builders/table-routes/table/get-route.ts +291 -291
- package/cli/templates/dashboard/builders/table-routes/table/index.ts +80 -80
- package/cli/templates/dashboard/builders/table-routes/table/post-routes.ts +163 -163
- package/cli/templates/dashboard/builders/table-routes/table-route.ts +7 -7
- package/cli/templates/dashboard/builders/table-routes/users/get-route.ts +69 -69
- package/cli/templates/dashboard/builders/table-routes/users/html/modals.ts +57 -57
- package/cli/templates/dashboard/builders/table-routes/users/html/page.ts +27 -27
- package/cli/templates/dashboard/builders/table-routes/users/html/table.ts +128 -128
- package/cli/templates/dashboard/builders/table-routes/users/index.ts +32 -32
- package/cli/templates/dashboard/builders/table-routes/users/post-routes.ts +150 -150
- package/cli/templates/dashboard/builders/table-routes/users/redirect.ts +14 -14
- package/cli/templates/dashboard/builders/table-routes/users-route.ts +10 -10
- package/cli/templates/dashboard/components/dashboard-home.ts +23 -23
- package/cli/templates/dashboard/components/layout.ts +388 -388
- package/cli/templates/dashboard/components/login-page.ts +65 -65
- package/cli/templates/dashboard/index.ts +61 -61
- package/cli/templates/dashboard/types.ts +9 -9
- package/cli/templates/handlers/README.md +353 -353
- package/cli/templates/handlers/auth.ts +37 -37
- package/cli/templates/handlers/execution.ts +42 -42
- package/cli/templates/handlers/generators/context/context-creation.ts +101 -101
- package/cli/templates/handlers/generators/context/error-helpers.ts +11 -11
- package/cli/templates/handlers/generators/context/scheduler.ts +24 -24
- package/cli/templates/handlers/generators/context/storage-api.ts +134 -112
- package/cli/templates/handlers/generators/context/storage-helpers.ts +59 -59
- package/cli/templates/handlers/generators/context/types.ts +18 -18
- package/cli/templates/handlers/generators/context.ts +43 -43
- package/cli/templates/handlers/generators/execution.ts +15 -15
- package/cli/templates/handlers/generators/handlers.ts +13 -13
- package/cli/templates/handlers/generators/registration/modules/cron.ts +26 -26
- package/cli/templates/handlers/generators/registration/modules/realtime/auth.ts +75 -75
- package/cli/templates/handlers/generators/registration/modules/realtime/durable-object.ts +144 -144
- package/cli/templates/handlers/generators/registration/modules/realtime/index.ts +14 -14
- package/cli/templates/handlers/generators/registration/modules/realtime/publisher.ts +102 -102
- package/cli/templates/handlers/generators/registration/modules/realtime/routes.ts +164 -164
- package/cli/templates/handlers/generators/registration/modules/realtime/types.ts +30 -30
- package/cli/templates/handlers/generators/registration/modules/realtime/utils.ts +516 -516
- package/cli/templates/handlers/generators/registration/modules/scheduler.ts +56 -56
- package/cli/templates/handlers/generators/registration/modules/storage.ts +196 -194
- package/cli/templates/handlers/generators/registration/sections.ts +210 -210
- package/cli/templates/handlers/generators/types/context.ts +68 -66
- package/cli/templates/handlers/generators/types/core.ts +106 -106
- package/cli/templates/handlers/generators/types/operations.ts +135 -135
- package/cli/templates/handlers/generators/types/query-definitions/filter-and-where-types.ts +259 -259
- package/cli/templates/handlers/generators/types/query-definitions/query-api-types.ts +135 -135
- package/cli/templates/handlers/generators/types/query-definitions/query-helper-functions.ts +1031 -1031
- package/cli/templates/handlers/generators/types/query-definitions/schema-and-table-types.ts +246 -246
- package/cli/templates/handlers/generators/types/query-definitions.ts +13 -13
- package/cli/templates/handlers/generators/types/query-runtime/handled-error.ts +13 -13
- package/cli/templates/handlers/generators/types/query-runtime/runtime-aggregate-and-footer.ts +174 -174
- package/cli/templates/handlers/generators/types/query-runtime/runtime-read.ts +121 -121
- package/cli/templates/handlers/generators/types/query-runtime/runtime-setup.ts +45 -45
- package/cli/templates/handlers/generators/types/query-runtime/runtime-write.ts +676 -676
- package/cli/templates/handlers/generators/types/query-runtime.ts +15 -15
- package/cli/templates/handlers/index.ts +43 -43
- package/cli/templates/handlers/operations.ts +116 -116
- package/cli/templates/handlers/registration.ts +91 -83
- package/cli/templates/handlers/types.ts +15 -15
- package/cli/templates/handlers/utils.ts +48 -48
- package/cli/types.ts +110 -110
- package/cli/utils/handler-discovery.ts +466 -466
- package/cli/utils/json-utils.ts +24 -24
- package/cli/utils/path-utils.ts +19 -19
- package/cli/utils/schema-discovery.ts +399 -399
- package/dist/cli/index.js +61 -28
- package/dist/cli/index.mjs +61 -28
- package/index.ts +18 -18
- package/package.json +58 -58
- package/react/index.ts +5 -5
- package/react/use-infinite-query.ts +252 -252
- package/react/use-mutation.ts +89 -89
- package/react/use-query.ts +207 -207
- package/schema.ts +415 -415
- package/test-better-auth-hash.ts +2 -2
- package/tsconfig.json +6 -6
- package/tsup.config.ts +82 -82
|
@@ -1,266 +1,266 @@
|
|
|
1
|
-
# Core Template Generators
|
|
2
|
-
|
|
3
|
-
This directory contains **code generators** used by the Appflare CLI to produce the backend runtime scaffolding for Cloudflare Workers + Hono + Better Auth.
|
|
4
|
-
|
|
5
|
-
Instead of shipping static template files, each module returns source code strings (or JSON objects) assembled by higher-level generation flows.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## What this folder does
|
|
10
|
-
|
|
11
|
-
The core template modules are responsible for generating:
|
|
12
|
-
|
|
13
|
-
1. **Worker server source** (`src/index.ts` style output)
|
|
14
|
-
2. **Cloudflare Wrangler config** (`wrangler.json` shape)
|
|
15
|
-
3. **Drizzle config source** (`drizzle.config.ts`)
|
|
16
|
-
4. **Typed Appflare client source** (Better Auth client wrapper)
|
|
17
|
-
5. **Generated handlers integration** (registering auto-generated route handlers)
|
|
18
|
-
|
|
19
|
-
In short: this folder is the backbone that wires auth, handlers, CORS, DB/KV bindings, and deployment configuration together.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Generation flow
|
|
24
|
-
|
|
25
|
-
The main composition entry is:
|
|
26
|
-
|
|
27
|
-
- `generateServerSource()` in `server.ts`
|
|
28
|
-
|
|
29
|
-
It assembles output in this order:
|
|
30
|
-
|
|
31
|
-
1. `generateImports()`
|
|
32
|
-
2. `generateTypes()`
|
|
33
|
-
3. `generateAppCreation()`
|
|
34
|
-
4. `generateHandlersRoute()`
|
|
35
|
-
5. `generateAuthRoute()` (from `../auth/route`)
|
|
36
|
-
6. `generateExport()`
|
|
37
|
-
|
|
38
|
-
This produces one server entry file that:
|
|
39
|
-
|
|
40
|
-
- Creates a Hono app
|
|
41
|
-
- Adds CORS middleware
|
|
42
|
-
- Registers generated handlers
|
|
43
|
-
- Adds auth routes
|
|
44
|
-
- Exports a Worker-compatible `fetch` handler
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
## File-by-file documentation
|
|
49
|
-
|
|
50
|
-
### `app-creation.ts`
|
|
51
|
-
|
|
52
|
-
Provides `generateAppCreation()`.
|
|
53
|
-
|
|
54
|
-
Generated behavior:
|
|
55
|
-
|
|
56
|
-
- Creates `const app = new Hono<WorkerEnv>()`
|
|
57
|
-
- Installs `cors()` middleware for all routes (`app.use('*', ...)`)
|
|
58
|
-
- Implements dynamic origin allow-list logic based on `c.env.ALLOWED_DOMAINS`
|
|
59
|
-
|
|
60
|
-
CORS behavior details:
|
|
61
|
-
|
|
62
|
-
- If `ALLOWED_DOMAINS` is missing, all origins are allowed
|
|
63
|
-
- If `ALLOWED_DOMAINS` contains `*`, all origins are allowed
|
|
64
|
-
- Otherwise only exact origin matches are allowed
|
|
65
|
-
- `credentials: true` is enabled
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
### `client.artifacts.ts`
|
|
70
|
-
|
|
71
|
-
Provides `generateClientArtifacts(configPathImport)`.
|
|
72
|
-
|
|
73
|
-
Generates modular typed client artifacts under a `client/` directory:
|
|
74
|
-
|
|
75
|
-
- `client/types.ts` for shared client/auth/storage types
|
|
76
|
-
- `client/storage.ts` for storage API methods
|
|
77
|
-
- `client/appflare.ts` for `Appflare` and `createAppflare()`
|
|
78
|
-
- `client/index.ts` as barrel export
|
|
79
|
-
- a root `client.ts` barrel (`export * from "./client"`)
|
|
80
|
-
|
|
81
|
-
Runtime behavior:
|
|
82
|
-
|
|
83
|
-
- Normalizes `endpoint` by removing trailing slash
|
|
84
|
-
- Builds auth base URL as:
|
|
85
|
-
- `${endpoint}${authPath ?? "/api/auth"}`
|
|
86
|
-
- Uses provided `fetch` override or global `fetch`
|
|
87
|
-
|
|
88
|
-
This gives app consumers a stable, strongly typed client API.
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
### `drizzle.ts`
|
|
93
|
-
|
|
94
|
-
Provides `generateDrizzleConfigSource(schema)`.
|
|
95
|
-
|
|
96
|
-
Generates a `drizzle-kit` config with:
|
|
97
|
-
|
|
98
|
-
- `dialect: "sqlite"`
|
|
99
|
-
- `driver: "d1-http"`
|
|
100
|
-
- provided `schema` paths
|
|
101
|
-
- placeholder `dbCredentials` values (`accountId`, `databaseId`, `token`)
|
|
102
|
-
|
|
103
|
-
Purpose: bootstrap Drizzle migrations/introspection for Cloudflare D1-backed projects.
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
### `export.ts`
|
|
108
|
-
|
|
109
|
-
Provides `generateExport()`.
|
|
110
|
-
|
|
111
|
-
Generates the Worker export:
|
|
112
|
-
|
|
113
|
-
```ts
|
|
114
|
-
export default {
|
|
115
|
-
fetch: app.fetch,
|
|
116
|
-
};
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
This is the standard Cloudflare Worker module format.
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
### `handlers.route.ts`
|
|
124
|
-
|
|
125
|
-
Provides `generateHandlersRoute(databaseBinding, kvBinding?)`.
|
|
126
|
-
|
|
127
|
-
Generates a call to `registerGeneratedHandlers(app, { ... })` with:
|
|
128
|
-
|
|
129
|
-
- required `databaseBinding`
|
|
130
|
-
- optional `kvBinding`
|
|
131
|
-
|
|
132
|
-
This bridges generated handler artifacts into the live Hono router.
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
### `handlers.ts`
|
|
137
|
-
|
|
138
|
-
Re-exports `generateHandlersArtifacts` from `../handlers/index`.
|
|
139
|
-
|
|
140
|
-
Role:
|
|
141
|
-
|
|
142
|
-
- Keeps core template entrypoints centralized
|
|
143
|
-
- Lets higher-level orchestration import handler generation through core exports
|
|
144
|
-
|
|
145
|
-
---
|
|
146
|
-
|
|
147
|
-
### `imports.ts`
|
|
148
|
-
|
|
149
|
-
Provides `generateImports()`.
|
|
150
|
-
|
|
151
|
-
Generates import statements used by server source:
|
|
152
|
-
|
|
153
|
-
- `createAuth` from `./auth.config`
|
|
154
|
-
- `registerGeneratedHandlers` from `./handlers.routes`
|
|
155
|
-
- `Hono` from `hono`
|
|
156
|
-
- `cors` from `hono/cors`
|
|
157
|
-
- Worker-related types from `@cloudflare/workers-types`
|
|
158
|
-
|
|
159
|
-
This keeps import assembly in one place so server template composition stays simple.
|
|
160
|
-
|
|
161
|
-
---
|
|
162
|
-
|
|
163
|
-
### `server.ts`
|
|
164
|
-
|
|
165
|
-
Provides `generateServerSource(authBasePath, databaseBinding, kvBinding?)`.
|
|
166
|
-
|
|
167
|
-
This is the **composition root** for server template output. It concatenates string fragments from all generator modules (including auth route generator from the auth template area).
|
|
168
|
-
|
|
169
|
-
Inputs:
|
|
170
|
-
|
|
171
|
-
- `authBasePath`: mount path for auth route generation
|
|
172
|
-
- `databaseBinding`: D1 binding key used by handlers/auth wiring
|
|
173
|
-
- `kvBinding` (optional): KV namespace binding key
|
|
174
|
-
|
|
175
|
-
Output:
|
|
176
|
-
|
|
177
|
-
- Full Worker/Hono server source file text
|
|
178
|
-
|
|
179
|
-
---
|
|
180
|
-
|
|
181
|
-
### `types.ts`
|
|
182
|
-
|
|
183
|
-
Provides `generateTypes()`.
|
|
184
|
-
|
|
185
|
-
Generates:
|
|
186
|
-
|
|
187
|
-
```ts
|
|
188
|
-
type WorkerEnv = {
|
|
189
|
-
Bindings: Record<string, unknown>;
|
|
190
|
-
};
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
This gives the Hono app a generic Worker env shape and avoids hard-coding concrete bindings in this template fragment.
|
|
194
|
-
|
|
195
|
-
---
|
|
196
|
-
|
|
197
|
-
### `wrangler.ts`
|
|
198
|
-
|
|
199
|
-
Provides `generateWranglerJson(config)`.
|
|
200
|
-
|
|
201
|
-
Builds a base Wrangler JSON object from loaded Appflare config:
|
|
202
|
-
|
|
203
|
-
- `name: "appflare-worker"`
|
|
204
|
-
- `main: "./src/index.ts"`
|
|
205
|
-
- maps `database` definitions -> `d1_databases`
|
|
206
|
-
- maps `kv` definitions -> `kv_namespaces`
|
|
207
|
-
|
|
208
|
-
Additional behavior:
|
|
209
|
-
|
|
210
|
-
- Adds `migrations_dir` only when present
|
|
211
|
-
- Adds KV `preview_id` only when present
|
|
212
|
-
- If `wranglerOverrides` exists, merges it into base output via `deepMergeJson()`
|
|
213
|
-
|
|
214
|
-
This lets generated defaults stay predictable while still supporting user overrides.
|
|
215
|
-
|
|
216
|
-
---
|
|
217
|
-
|
|
218
|
-
## Design patterns used
|
|
219
|
-
|
|
220
|
-
1. **String-template generators**
|
|
221
|
-
- Each module returns source text with minimal side effects
|
|
222
|
-
2. **Composable assembly**
|
|
223
|
-
- `server.ts` composes focused fragments in deterministic order
|
|
224
|
-
3. **Config-driven output**
|
|
225
|
-
- Wrangler generation maps structured config into deploy-ready shape
|
|
226
|
-
4. **Type inference for SDK ergonomics**
|
|
227
|
-
- Client generator infers auth options from config types
|
|
228
|
-
5. **Optional feature toggles via args**
|
|
229
|
-
- KV-related code paths are included only when KV binding is provided
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
## Typical usage in CLI pipeline
|
|
234
|
-
|
|
235
|
-
At a high level, CLI code can:
|
|
236
|
-
|
|
237
|
-
1. Load and validate Appflare config
|
|
238
|
-
2. Generate server source and write to `_generated/server.ts` (or similar)
|
|
239
|
-
3. Generate handler/auth artifacts
|
|
240
|
-
4. Generate wrangler JSON with merged overrides
|
|
241
|
-
5. Generate client source for application consumption
|
|
242
|
-
|
|
243
|
-
This folder specifically owns the **core primitives** used in steps 2, 4, and part of 5.
|
|
244
|
-
|
|
245
|
-
---
|
|
246
|
-
|
|
247
|
-
## Maintenance notes
|
|
248
|
-
|
|
249
|
-
- Keep generator outputs deterministic for stable diffs.
|
|
250
|
-
- When changing generated code contracts, update both:
|
|
251
|
-
- template generators
|
|
252
|
-
- consuming runtime code expecting those contracts
|
|
253
|
-
- Prefer extending via optional args/config (as done with `kvBinding`) instead of branching per project type.
|
|
254
|
-
- If new Worker bindings are added, update both:
|
|
255
|
-
- route registration generation
|
|
256
|
-
- wrangler JSON generation
|
|
257
|
-
|
|
258
|
-
---
|
|
259
|
-
|
|
260
|
-
## Quick reference
|
|
261
|
-
|
|
262
|
-
- Server composition: `generateServerSource()`
|
|
263
|
-
- Client generation: `generateClientArtifacts()`
|
|
264
|
-
- Wrangler config generation: `generateWranglerJson()`
|
|
265
|
-
- Drizzle config generation: `generateDrizzleConfigSource()`
|
|
266
|
-
- Handlers artifacts export: `generateHandlersArtifacts` (re-exported)
|
|
1
|
+
# Core Template Generators
|
|
2
|
+
|
|
3
|
+
This directory contains **code generators** used by the Appflare CLI to produce the backend runtime scaffolding for Cloudflare Workers + Hono + Better Auth.
|
|
4
|
+
|
|
5
|
+
Instead of shipping static template files, each module returns source code strings (or JSON objects) assembled by higher-level generation flows.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## What this folder does
|
|
10
|
+
|
|
11
|
+
The core template modules are responsible for generating:
|
|
12
|
+
|
|
13
|
+
1. **Worker server source** (`src/index.ts` style output)
|
|
14
|
+
2. **Cloudflare Wrangler config** (`wrangler.json` shape)
|
|
15
|
+
3. **Drizzle config source** (`drizzle.config.ts`)
|
|
16
|
+
4. **Typed Appflare client source** (Better Auth client wrapper)
|
|
17
|
+
5. **Generated handlers integration** (registering auto-generated route handlers)
|
|
18
|
+
|
|
19
|
+
In short: this folder is the backbone that wires auth, handlers, CORS, DB/KV bindings, and deployment configuration together.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Generation flow
|
|
24
|
+
|
|
25
|
+
The main composition entry is:
|
|
26
|
+
|
|
27
|
+
- `generateServerSource()` in `server.ts`
|
|
28
|
+
|
|
29
|
+
It assembles output in this order:
|
|
30
|
+
|
|
31
|
+
1. `generateImports()`
|
|
32
|
+
2. `generateTypes()`
|
|
33
|
+
3. `generateAppCreation()`
|
|
34
|
+
4. `generateHandlersRoute()`
|
|
35
|
+
5. `generateAuthRoute()` (from `../auth/route`)
|
|
36
|
+
6. `generateExport()`
|
|
37
|
+
|
|
38
|
+
This produces one server entry file that:
|
|
39
|
+
|
|
40
|
+
- Creates a Hono app
|
|
41
|
+
- Adds CORS middleware
|
|
42
|
+
- Registers generated handlers
|
|
43
|
+
- Adds auth routes
|
|
44
|
+
- Exports a Worker-compatible `fetch` handler
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## File-by-file documentation
|
|
49
|
+
|
|
50
|
+
### `app-creation.ts`
|
|
51
|
+
|
|
52
|
+
Provides `generateAppCreation()`.
|
|
53
|
+
|
|
54
|
+
Generated behavior:
|
|
55
|
+
|
|
56
|
+
- Creates `const app = new Hono<WorkerEnv>()`
|
|
57
|
+
- Installs `cors()` middleware for all routes (`app.use('*', ...)`)
|
|
58
|
+
- Implements dynamic origin allow-list logic based on `c.env.ALLOWED_DOMAINS`
|
|
59
|
+
|
|
60
|
+
CORS behavior details:
|
|
61
|
+
|
|
62
|
+
- If `ALLOWED_DOMAINS` is missing, all origins are allowed
|
|
63
|
+
- If `ALLOWED_DOMAINS` contains `*`, all origins are allowed
|
|
64
|
+
- Otherwise only exact origin matches are allowed
|
|
65
|
+
- `credentials: true` is enabled
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
### `client.artifacts.ts`
|
|
70
|
+
|
|
71
|
+
Provides `generateClientArtifacts(configPathImport)`.
|
|
72
|
+
|
|
73
|
+
Generates modular typed client artifacts under a `client/` directory:
|
|
74
|
+
|
|
75
|
+
- `client/types.ts` for shared client/auth/storage types
|
|
76
|
+
- `client/storage.ts` for storage API methods
|
|
77
|
+
- `client/appflare.ts` for `Appflare` and `createAppflare()`
|
|
78
|
+
- `client/index.ts` as barrel export
|
|
79
|
+
- a root `client.ts` barrel (`export * from "./client"`)
|
|
80
|
+
|
|
81
|
+
Runtime behavior:
|
|
82
|
+
|
|
83
|
+
- Normalizes `endpoint` by removing trailing slash
|
|
84
|
+
- Builds auth base URL as:
|
|
85
|
+
- `${endpoint}${authPath ?? "/api/auth"}`
|
|
86
|
+
- Uses provided `fetch` override or global `fetch`
|
|
87
|
+
|
|
88
|
+
This gives app consumers a stable, strongly typed client API.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
### `drizzle.ts`
|
|
93
|
+
|
|
94
|
+
Provides `generateDrizzleConfigSource(schema)`.
|
|
95
|
+
|
|
96
|
+
Generates a `drizzle-kit` config with:
|
|
97
|
+
|
|
98
|
+
- `dialect: "sqlite"`
|
|
99
|
+
- `driver: "d1-http"`
|
|
100
|
+
- provided `schema` paths
|
|
101
|
+
- placeholder `dbCredentials` values (`accountId`, `databaseId`, `token`)
|
|
102
|
+
|
|
103
|
+
Purpose: bootstrap Drizzle migrations/introspection for Cloudflare D1-backed projects.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### `export.ts`
|
|
108
|
+
|
|
109
|
+
Provides `generateExport()`.
|
|
110
|
+
|
|
111
|
+
Generates the Worker export:
|
|
112
|
+
|
|
113
|
+
```ts
|
|
114
|
+
export default {
|
|
115
|
+
fetch: app.fetch,
|
|
116
|
+
};
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
This is the standard Cloudflare Worker module format.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
### `handlers.route.ts`
|
|
124
|
+
|
|
125
|
+
Provides `generateHandlersRoute(databaseBinding, kvBinding?)`.
|
|
126
|
+
|
|
127
|
+
Generates a call to `registerGeneratedHandlers(app, { ... })` with:
|
|
128
|
+
|
|
129
|
+
- required `databaseBinding`
|
|
130
|
+
- optional `kvBinding`
|
|
131
|
+
|
|
132
|
+
This bridges generated handler artifacts into the live Hono router.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
### `handlers.ts`
|
|
137
|
+
|
|
138
|
+
Re-exports `generateHandlersArtifacts` from `../handlers/index`.
|
|
139
|
+
|
|
140
|
+
Role:
|
|
141
|
+
|
|
142
|
+
- Keeps core template entrypoints centralized
|
|
143
|
+
- Lets higher-level orchestration import handler generation through core exports
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
### `imports.ts`
|
|
148
|
+
|
|
149
|
+
Provides `generateImports()`.
|
|
150
|
+
|
|
151
|
+
Generates import statements used by server source:
|
|
152
|
+
|
|
153
|
+
- `createAuth` from `./auth.config`
|
|
154
|
+
- `registerGeneratedHandlers` from `./handlers.routes`
|
|
155
|
+
- `Hono` from `hono`
|
|
156
|
+
- `cors` from `hono/cors`
|
|
157
|
+
- Worker-related types from `@cloudflare/workers-types`
|
|
158
|
+
|
|
159
|
+
This keeps import assembly in one place so server template composition stays simple.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
### `server.ts`
|
|
164
|
+
|
|
165
|
+
Provides `generateServerSource(authBasePath, databaseBinding, kvBinding?)`.
|
|
166
|
+
|
|
167
|
+
This is the **composition root** for server template output. It concatenates string fragments from all generator modules (including auth route generator from the auth template area).
|
|
168
|
+
|
|
169
|
+
Inputs:
|
|
170
|
+
|
|
171
|
+
- `authBasePath`: mount path for auth route generation
|
|
172
|
+
- `databaseBinding`: D1 binding key used by handlers/auth wiring
|
|
173
|
+
- `kvBinding` (optional): KV namespace binding key
|
|
174
|
+
|
|
175
|
+
Output:
|
|
176
|
+
|
|
177
|
+
- Full Worker/Hono server source file text
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
### `types.ts`
|
|
182
|
+
|
|
183
|
+
Provides `generateTypes()`.
|
|
184
|
+
|
|
185
|
+
Generates:
|
|
186
|
+
|
|
187
|
+
```ts
|
|
188
|
+
type WorkerEnv = {
|
|
189
|
+
Bindings: Record<string, unknown>;
|
|
190
|
+
};
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
This gives the Hono app a generic Worker env shape and avoids hard-coding concrete bindings in this template fragment.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
### `wrangler.ts`
|
|
198
|
+
|
|
199
|
+
Provides `generateWranglerJson(config)`.
|
|
200
|
+
|
|
201
|
+
Builds a base Wrangler JSON object from loaded Appflare config:
|
|
202
|
+
|
|
203
|
+
- `name: "appflare-worker"`
|
|
204
|
+
- `main: "./src/index.ts"`
|
|
205
|
+
- maps `database` definitions -> `d1_databases`
|
|
206
|
+
- maps `kv` definitions -> `kv_namespaces`
|
|
207
|
+
|
|
208
|
+
Additional behavior:
|
|
209
|
+
|
|
210
|
+
- Adds `migrations_dir` only when present
|
|
211
|
+
- Adds KV `preview_id` only when present
|
|
212
|
+
- If `wranglerOverrides` exists, merges it into base output via `deepMergeJson()`
|
|
213
|
+
|
|
214
|
+
This lets generated defaults stay predictable while still supporting user overrides.
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Design patterns used
|
|
219
|
+
|
|
220
|
+
1. **String-template generators**
|
|
221
|
+
- Each module returns source text with minimal side effects
|
|
222
|
+
2. **Composable assembly**
|
|
223
|
+
- `server.ts` composes focused fragments in deterministic order
|
|
224
|
+
3. **Config-driven output**
|
|
225
|
+
- Wrangler generation maps structured config into deploy-ready shape
|
|
226
|
+
4. **Type inference for SDK ergonomics**
|
|
227
|
+
- Client generator infers auth options from config types
|
|
228
|
+
5. **Optional feature toggles via args**
|
|
229
|
+
- KV-related code paths are included only when KV binding is provided
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Typical usage in CLI pipeline
|
|
234
|
+
|
|
235
|
+
At a high level, CLI code can:
|
|
236
|
+
|
|
237
|
+
1. Load and validate Appflare config
|
|
238
|
+
2. Generate server source and write to `_generated/server.ts` (or similar)
|
|
239
|
+
3. Generate handler/auth artifacts
|
|
240
|
+
4. Generate wrangler JSON with merged overrides
|
|
241
|
+
5. Generate client source for application consumption
|
|
242
|
+
|
|
243
|
+
This folder specifically owns the **core primitives** used in steps 2, 4, and part of 5.
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Maintenance notes
|
|
248
|
+
|
|
249
|
+
- Keep generator outputs deterministic for stable diffs.
|
|
250
|
+
- When changing generated code contracts, update both:
|
|
251
|
+
- template generators
|
|
252
|
+
- consuming runtime code expecting those contracts
|
|
253
|
+
- Prefer extending via optional args/config (as done with `kvBinding`) instead of branching per project type.
|
|
254
|
+
- If new Worker bindings are added, update both:
|
|
255
|
+
- route registration generation
|
|
256
|
+
- wrangler JSON generation
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Quick reference
|
|
261
|
+
|
|
262
|
+
- Server composition: `generateServerSource()`
|
|
263
|
+
- Client generation: `generateClientArtifacts()`
|
|
264
|
+
- Wrangler config generation: `generateWranglerJson()`
|
|
265
|
+
- Drizzle config generation: `generateDrizzleConfigSource()`
|
|
266
|
+
- Handlers artifacts export: `generateHandlersArtifacts` (re-exported)
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
export function generateAppCreation(): string {
|
|
2
|
-
return `const app = new Hono<WorkerEnv>();
|
|
3
|
-
|
|
4
|
-
app.use('*', cors({
|
|
5
|
-
origin: (origin, c) => {
|
|
6
|
-
const allowedDomains = c.env.ALLOWED_DOMAINS;
|
|
7
|
-
if (!allowedDomains) {
|
|
8
|
-
return origin; // Allow everything if not set
|
|
9
|
-
}
|
|
10
|
-
const allowed = allowedDomains.split(',').map(d => d.trim());
|
|
11
|
-
if (allowed.includes('*')) {
|
|
12
|
-
return origin;
|
|
13
|
-
}
|
|
14
|
-
return allowed.includes(origin) ? origin : null;
|
|
15
|
-
},
|
|
16
|
-
credentials: true
|
|
17
|
-
}));
|
|
18
|
-
`;
|
|
19
|
-
}
|
|
1
|
+
export function generateAppCreation(): string {
|
|
2
|
+
return `const app = new Hono<WorkerEnv>();
|
|
3
|
+
|
|
4
|
+
app.use('*', cors({
|
|
5
|
+
origin: (origin, c) => {
|
|
6
|
+
const allowedDomains = c.env.ALLOWED_DOMAINS;
|
|
7
|
+
if (!allowedDomains) {
|
|
8
|
+
return origin; // Allow everything if not set
|
|
9
|
+
}
|
|
10
|
+
const allowed = allowedDomains.split(',').map((d: string) => d.trim());
|
|
11
|
+
if (allowed.includes('*')) {
|
|
12
|
+
return origin;
|
|
13
|
+
}
|
|
14
|
+
return allowed.includes(origin) ? origin : null;
|
|
15
|
+
},
|
|
16
|
+
credentials: true
|
|
17
|
+
}));
|
|
18
|
+
`;
|
|
19
|
+
}
|