d1-kyt 0.7.1 → 0.9.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.
- package/README.md +105 -222
- package/dist/cli.js +0 -0
- package/dist/executor.d.ts +5 -4
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +10 -4
- package/dist/executor.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/schema-diff.d.ts +4 -1
- package/dist/schema-diff.d.ts.map +1 -1
- package/dist/schema-diff.js +36 -6
- package/dist/schema-diff.js.map +1 -1
- package/dist/validators.d.ts +10 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +22 -0
- package/dist/validators.js.map +1 -0
- package/package.json +11 -19
- package/skills/use-d1-kyt/SKILL.md +186 -0
package/README.md
CHANGED
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
# d1-kyt
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Type-safe [Cloudflare D1](https://developers.cloudflare.com/d1/) toolkit built on [Kysely](https://kysely.dev/) and [Valibot](https://valibot.dev/). Define your schema once in Valibot — get SQL migrations and fully-typed queries with no code generation.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
```typescript
|
|
6
|
+
import { defineTable, InferDB, createQueryBuilder } from 'd1-kyt';
|
|
7
|
+
import { queryAll, queryFirst, queryRun } from 'd1-kyt';
|
|
8
|
+
import * as v from 'valibot';
|
|
6
9
|
|
|
7
|
-
|
|
10
|
+
export const posts = defineTable('posts', {
|
|
11
|
+
title: v.string(),
|
|
12
|
+
published: v.boolean(),
|
|
13
|
+
views: v.pipe(v.number(), v.integer()),
|
|
14
|
+
categoryId: v.optional(v.pipe(v.number(), v.integer())),
|
|
15
|
+
meta: v.object({ og: v.string() }), // stored as JSON
|
|
16
|
+
}, {
|
|
17
|
+
foreignKeys: [{ columns: ['categoryId'], references: categories, onDelete: 'CASCADE' }],
|
|
18
|
+
indexes: [{ columns: ['title'], unique: true }],
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
export type DB = InferDB<{ posts: typeof posts }>;
|
|
22
|
+
export const db = createQueryBuilder<DB>();
|
|
23
|
+
|
|
24
|
+
// Type-safe queries
|
|
25
|
+
const all = await queryAll(env.DB, db.selectFrom('posts').selectAll().compile(), posts);
|
|
26
|
+
const one = await queryFirst(env.DB, db.selectFrom('posts').where('id', '=', 1).selectAll().compile(), posts);
|
|
27
|
+
const done = await queryRun(env.DB, db.deleteFrom('posts').where('id', '=', 1).compile());
|
|
28
|
+
```
|
|
8
29
|
|
|
9
30
|
## Install
|
|
10
31
|
|
|
@@ -15,81 +36,44 @@ npm install d1-kyt kysely valibot
|
|
|
15
36
|
## Workflow
|
|
16
37
|
|
|
17
38
|
```
|
|
18
|
-
schema.ts → schema:diff → .sql migration → wrangler apply →
|
|
39
|
+
schema.ts → schema:diff → .sql migration → wrangler apply → typed queries
|
|
19
40
|
```
|
|
20
41
|
|
|
21
|
-
1. Define
|
|
42
|
+
1. Define tables with Valibot types in `schema.ts`
|
|
22
43
|
2. Run `d1-kyt schema:diff <name>` — diffs against a snapshot, writes a `.sql` migration
|
|
23
44
|
3. Apply with `wrangler d1 migrations apply <db> --local`
|
|
24
|
-
4. Use `$inferSelect` / `$inferInsert` from your schema for
|
|
25
|
-
|
|
26
|
-
No code generation step required — types come directly from the schema file.
|
|
45
|
+
4. Use `$inferSelect` / `$inferInsert` from your schema for typed queries
|
|
27
46
|
|
|
28
47
|
---
|
|
29
48
|
|
|
30
49
|
## Quick start
|
|
31
50
|
|
|
32
51
|
```bash
|
|
33
|
-
#
|
|
34
|
-
d1-kyt
|
|
35
|
-
|
|
36
|
-
# Edit the generated schema file, then:
|
|
37
|
-
d1-kyt schema:diff create_users
|
|
38
|
-
|
|
39
|
-
# Apply to local D1:
|
|
40
|
-
wrangler d1 migrations apply <db-name> --local
|
|
52
|
+
d1-kyt init # scaffold config + schema in db/
|
|
53
|
+
d1-kyt schema:diff create_posts # generates db/migrations/0001_create_posts.sql
|
|
54
|
+
wrangler d1 migrations apply <db> --local
|
|
41
55
|
```
|
|
42
56
|
|
|
43
|
-
`init` auto-detects the right directory. Defaults to `db/`. If your wrangler config has a `migrations_dir` with a parent folder (e.g. `src/migrations/`), it uses that parent instead.
|
|
44
|
-
|
|
45
57
|
---
|
|
46
58
|
|
|
47
59
|
## Schema
|
|
48
60
|
|
|
49
|
-
```typescript
|
|
50
|
-
// db/schema.ts
|
|
51
|
-
import { defineTable, defineIndex, defineTrigger, type InferDB } from 'd1-kyt/schema';
|
|
52
|
-
import { createQueryBuilder } from 'd1-kyt';
|
|
53
|
-
import * as v from 'valibot';
|
|
54
|
-
|
|
55
|
-
export const users = defineTable('users', {
|
|
56
|
-
email: v.string(), // TEXT NOT NULL
|
|
57
|
-
name: v.optional(v.string()), // TEXT (nullable)
|
|
58
|
-
age: v.optional(v.pipe(v.number(), v.integer())), // INTEGER (nullable)
|
|
59
|
-
prefs: v.optional(v.object({ theme: v.string() })), // TEXT JSON (nullable)
|
|
60
|
-
role: v.optional(v.string(), 'user'), // TEXT DEFAULT 'user'
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
export const usersEmailIdx = defineIndex(users, ['email'], { unique: true });
|
|
64
|
-
|
|
65
|
-
export const auditTrigger = defineTrigger('users_audit_trg', {
|
|
66
|
-
timing: 'AFTER', event: 'INSERT', on: users,
|
|
67
|
-
body: `INSERT INTO audit (action, at) VALUES ('insert', datetime('now'));`,
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
export type DB = InferDB<{ users: typeof users }>;
|
|
71
|
-
|
|
72
|
-
// Compile-only Kysely query builder — stateless, no connection held.
|
|
73
|
-
// Use with queryAll/queryFirst/queryRun to execute against D1.
|
|
74
|
-
export const db = createQueryBuilder<DB>();
|
|
75
|
-
```
|
|
76
|
-
|
|
77
61
|
### Valibot → SQL type mapping
|
|
78
62
|
|
|
79
|
-
| Valibot
|
|
80
|
-
|
|
81
|
-
| `v.string()` | TEXT
|
|
82
|
-
| `v.number()` | REAL
|
|
83
|
-
| `v.pipe(v.number(), v.integer()
|
|
84
|
-
| `v.boolean()` | INTEGER
|
|
85
|
-
| `v.object({...})`
|
|
86
|
-
| `v.optional(X)` |
|
|
87
|
-
| `v.nullable(X)` |
|
|
88
|
-
| `v.optional(X,
|
|
63
|
+
| Valibot | SQL | Notes |
|
|
64
|
+
|---------|-----|-------|
|
|
65
|
+
| `v.string()` | TEXT NOT NULL | |
|
|
66
|
+
| `v.number()` | REAL NOT NULL | |
|
|
67
|
+
| `v.pipe(v.number(), v.integer())` | INTEGER NOT NULL | |
|
|
68
|
+
| `v.boolean()` | INTEGER NOT NULL | stored as 0/1 |
|
|
69
|
+
| `v.object({...})` / `v.array(...)` | TEXT NOT NULL | JSON serialized |
|
|
70
|
+
| `v.optional(X)` | nullable | |
|
|
71
|
+
| `v.nullable(X)` | nullable | |
|
|
72
|
+
| `v.optional(X, default)` | DEFAULT val | |
|
|
89
73
|
|
|
90
74
|
### Auto columns
|
|
91
75
|
|
|
92
|
-
Every table gets `id
|
|
76
|
+
Every table gets `id` (INTEGER PRIMARY KEY AUTOINCREMENT), `createdAt` (TEXT), and `updatedAt` (TEXT) with an `AFTER UPDATE` trigger. All configurable:
|
|
93
77
|
|
|
94
78
|
```typescript
|
|
95
79
|
// Disable everything
|
|
@@ -97,7 +81,7 @@ defineTable('events', { uuid: v.string() }, {
|
|
|
97
81
|
primaryKey: false, createdAt: false, updatedAt: false,
|
|
98
82
|
})
|
|
99
83
|
|
|
100
|
-
// Custom names
|
|
84
|
+
// Custom names
|
|
101
85
|
defineTable('users', { email: v.string() }, {
|
|
102
86
|
primaryKeyColumn: 'user_id',
|
|
103
87
|
createdAtColumn: 'created_at',
|
|
@@ -107,220 +91,119 @@ defineTable('users', { email: v.string() }, {
|
|
|
107
91
|
|
|
108
92
|
---
|
|
109
93
|
|
|
110
|
-
## CLI
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
d1-kyt init [--dir <dir>] # scaffold config + schema template
|
|
114
|
-
d1-kyt schema:diff <name> [--dir <dir>] # diff schema → write .sql migration
|
|
115
|
-
d1-kyt schema:diff <name> --schema <path> # use a custom schema file path
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
### `init`
|
|
119
|
-
|
|
120
|
-
Creates (skips if already exists):
|
|
121
|
-
- `<dir>/config.ts` — migrationsDir + namingStrategy
|
|
122
|
-
- `<dir>/schema.ts` — schema template to fill in
|
|
123
|
-
- `<dir>/schema.snapshot.jsonc` — diff baseline (**commit this to git**)
|
|
124
|
-
|
|
125
|
-
Directory resolution:
|
|
126
|
-
1. `--dir <path>` if provided
|
|
127
|
-
2. `db/` if it contains a `config.ts` (default)
|
|
128
|
-
3. `d1-kyt/` if it contains a `config.ts` (legacy)
|
|
129
|
-
4. Parent of wrangler `migrations_dir` if not the project root
|
|
130
|
-
|
|
131
|
-
### `schema:diff <name>`
|
|
132
|
-
|
|
133
|
-
Reads your `schema.ts`, diffs against `schema.snapshot.jsonc`, writes a numbered `.sql` file to your `migrationsDir`, and updates the snapshot. **Commit the `.sql` and the snapshot together** — they are the source of truth for migration history.
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
d1-kyt schema:diff create_users # generates 0001_create_users.sql
|
|
137
|
-
d1-kyt schema:diff add_email_index # generates 0002_add_email_index.sql
|
|
138
|
-
d1-kyt schema:diff --dir db add_posts # use db/config.ts, db/schema.ts
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### Config
|
|
142
|
-
|
|
143
|
-
```typescript
|
|
144
|
-
// db/config.ts (or d1-kyt/config.ts)
|
|
145
|
-
import { defineConfig } from 'd1-kyt/config';
|
|
146
|
-
|
|
147
|
-
export default defineConfig({
|
|
148
|
-
migrationsDir: 'db/migrations',
|
|
149
|
-
namingStrategy: 'sequential', // or 'timestamp'
|
|
150
|
-
});
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
---
|
|
154
|
-
|
|
155
94
|
## Type inference
|
|
156
95
|
|
|
157
|
-
Types come directly from your schema — no code generation step required:
|
|
158
|
-
|
|
159
96
|
```typescript
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
// Full row returned by SELECT
|
|
163
|
-
type UserRow = typeof users.$inferSelect;
|
|
164
|
-
// { id: number; email: string; name: string | undefined; age: number | undefined;
|
|
165
|
-
// prefs: { theme: string } | undefined; role: string | undefined;
|
|
166
|
-
// createdAt: string; updatedAt: string }
|
|
167
|
-
|
|
168
|
-
// Input for INSERT
|
|
169
|
-
type NewUser = typeof users.$inferInsert;
|
|
170
|
-
// { email: string; name?: string | undefined; age?: number | undefined; ... id?: number }
|
|
97
|
+
type PostRow = typeof posts.$inferSelect;
|
|
98
|
+
// { id: number; title: string; published: boolean; views: number; ... }
|
|
171
99
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
export type DB = InferDB<{ users: typeof users }>;
|
|
100
|
+
type NewPost = typeof posts.$inferInsert;
|
|
101
|
+
// { title: string; published: boolean; views: number; id?: number; ... }
|
|
175
102
|
```
|
|
176
103
|
|
|
177
104
|
---
|
|
178
105
|
|
|
179
|
-
##
|
|
180
|
-
|
|
181
|
-
`db` is a compile-only Kysely instance exported from your schema file. It holds no connection — it just builds typed SQL that you pass to `queryAll`/`queryFirst`/`queryRun` for execution.
|
|
106
|
+
## Foreign keys
|
|
182
107
|
|
|
183
108
|
```typescript
|
|
184
|
-
|
|
185
|
-
import { db } from './db/schema';
|
|
186
|
-
|
|
187
|
-
export const listUsers = () =>
|
|
188
|
-
db.selectFrom('users').selectAll().compile();
|
|
189
|
-
|
|
190
|
-
export const getUserByEmail = (email: string) =>
|
|
191
|
-
db.selectFrom('users').selectAll().where('email', '=', email).compile();
|
|
109
|
+
export const categories = defineTable('categories', { name: v.string() });
|
|
192
110
|
|
|
193
|
-
export const
|
|
194
|
-
|
|
111
|
+
export const posts = defineTable('posts', {
|
|
112
|
+
title: v.string(),
|
|
113
|
+
categoryId: v.pipe(v.number(), v.integer()),
|
|
114
|
+
}, {
|
|
115
|
+
foreignKeys: [{ columns: ['categoryId'], references: categories, onDelete: 'CASCADE' }],
|
|
116
|
+
});
|
|
195
117
|
```
|
|
196
118
|
|
|
197
|
-
|
|
119
|
+
`PRAGMA foreign_keys = ON` is automatically prepended to any migration that includes FK constraints.
|
|
198
120
|
|
|
199
|
-
|
|
200
|
-
// src/app.ts
|
|
201
|
-
import { Hono } from 'hono';
|
|
202
|
-
import { queryAll, queryFirst, queryRun } from 'd1-kyt';
|
|
203
|
-
import * as q from './queries';
|
|
204
|
-
|
|
205
|
-
const app = new Hono();
|
|
206
|
-
|
|
207
|
-
app.get('/users', async (c) => {
|
|
208
|
-
const users = await queryAll(c.env.DB, q.listUsers());
|
|
209
|
-
return c.json(users);
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
app.get('/users/:email', async (c) => {
|
|
213
|
-
const user = await queryFirst(c.env.DB, q.getUserByEmail(c.req.param('email')));
|
|
214
|
-
return user ? c.json(user) : c.notFound();
|
|
215
|
-
});
|
|
121
|
+
Adding a FK column to an existing table requires a nullable column (SQLite limitation):
|
|
216
122
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
const [user] = await queryAll(c.env.DB, q.insertUser(email, name));
|
|
220
|
-
return c.json(user, 201);
|
|
221
|
-
});
|
|
123
|
+
```typescript
|
|
124
|
+
deptId: v.optional(v.pipe(v.number(), v.integer())) // ✓ nullable allows inline REFERENCES
|
|
222
125
|
```
|
|
223
126
|
|
|
224
127
|
---
|
|
225
128
|
|
|
226
|
-
##
|
|
227
|
-
|
|
228
|
-
Declare foreign keys in the table options. `PRAGMA foreign_keys = ON` is automatically prepended to any migration that includes FK constraints.
|
|
229
|
-
|
|
230
|
-
```typescript
|
|
231
|
-
export const categories = defineTable('categories', { name: v.string() });
|
|
232
|
-
|
|
233
|
-
export const posts = defineTable('posts', {
|
|
234
|
-
title: v.string(),
|
|
235
|
-
categoryId: v.pipe(v.number(), v.integer()),
|
|
236
|
-
}, {
|
|
237
|
-
foreignKeys: [
|
|
238
|
-
{ columns: ['categoryId'], references: categories, onDelete: 'CASCADE' },
|
|
239
|
-
],
|
|
240
|
-
});
|
|
241
|
-
```
|
|
129
|
+
## CLI
|
|
242
130
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
131
|
+
```bash
|
|
132
|
+
d1-kyt init [--dir <dir>]
|
|
133
|
+
d1-kyt schema:diff <name> [--dir <dir>] [--schema <path>]
|
|
246
134
|
```
|
|
247
135
|
|
|
248
|
-
|
|
136
|
+
**Always commit `schema.json` alongside each `.sql` migration** — it is the diff baseline.
|
|
249
137
|
|
|
250
|
-
|
|
138
|
+
### Config
|
|
251
139
|
|
|
252
140
|
```typescript
|
|
253
|
-
//
|
|
254
|
-
|
|
255
|
-
name: v.string(),
|
|
256
|
-
deptId: v.optional(v.pipe(v.number(), v.integer())), // nullable ✓
|
|
257
|
-
}, {
|
|
258
|
-
foreignKeys: [{ columns: ['deptId'], references: departments }],
|
|
259
|
-
});
|
|
260
|
-
```
|
|
141
|
+
// db/config.ts
|
|
142
|
+
import { defineConfig } from 'd1-kyt';
|
|
261
143
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
144
|
+
export default defineConfig({
|
|
145
|
+
migrationsDir: 'db/migrations',
|
|
146
|
+
namingStrategy: 'sequential', // or 'timestamp'
|
|
147
|
+
});
|
|
265
148
|
```
|
|
266
149
|
|
|
267
|
-
|
|
150
|
+
---
|
|
268
151
|
|
|
269
|
-
|
|
152
|
+
## D1 limits
|
|
270
153
|
|
|
271
|
-
|
|
154
|
+
d1-kyt enforces D1's hard limits at runtime and emits warnings in generated migrations:
|
|
272
155
|
|
|
273
|
-
|
|
156
|
+
| Limit | Value |
|
|
157
|
+
|-------|-------|
|
|
158
|
+
| Bound parameters per query | 100 |
|
|
159
|
+
| SQL statement length | 100,000 chars |
|
|
160
|
+
| Columns per table | 100 (warning in migration) |
|
|
274
161
|
|
|
275
|
-
|
|
162
|
+
Custom validators:
|
|
276
163
|
|
|
277
164
|
```typescript
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
where: '"active" = 1', // raw SQL string
|
|
281
|
-
})
|
|
282
|
-
```
|
|
165
|
+
import { D1_VALIDATORS, runValidators } from 'd1-kyt';
|
|
166
|
+
import type { QueryValidator } from 'd1-kyt';
|
|
283
167
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
168
|
+
const noDrops: QueryValidator = (q) => {
|
|
169
|
+
if (q.sql.includes('DROP')) throw new Error('DROP not allowed');
|
|
170
|
+
};
|
|
287
171
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
- Trigger naming: `{table}_{col}_trg`
|
|
292
|
-
- `schema.snapshot.jsonc` is the diff source of truth — always commit it alongside migration SQL files
|
|
172
|
+
await queryAll(env.DB, query, posts, [...D1_VALIDATORS, noDrops]);
|
|
173
|
+
await queryAll(env.DB, query, posts, []); // disable all checks
|
|
174
|
+
```
|
|
293
175
|
|
|
294
176
|
---
|
|
295
177
|
|
|
296
178
|
## API reference
|
|
297
179
|
|
|
298
|
-
###
|
|
180
|
+
### Schema
|
|
299
181
|
|
|
300
182
|
| Export | Description |
|
|
301
|
-
|
|
183
|
+
|--------|-------------|
|
|
302
184
|
| `defineTable(name, columns, opts?)` | Define a table; returns `SchemaTable` with `$inferSelect` / `$inferInsert` |
|
|
303
|
-
| `defineIndex(table, columns, opts?)` | Define an index (columns are type-checked
|
|
304
|
-
| `defineTrigger(name, opts)` | Define a custom trigger
|
|
305
|
-
| `
|
|
306
|
-
| `TableOptions` | Options type for auto columns (re-exported) |
|
|
307
|
-
| `InferDB<Tables>` | Infer a Kysely-compatible `DB` type from a record of `SchemaTable` definitions |
|
|
185
|
+
| `defineIndex(table, columns, opts?)` | Define an index (columns are type-checked) |
|
|
186
|
+
| `defineTrigger(name, opts)` | Define a custom trigger |
|
|
187
|
+
| `InferDB<Tables>` | Infer a Kysely-compatible `DB` type |
|
|
308
188
|
|
|
309
|
-
###
|
|
189
|
+
### Execution
|
|
310
190
|
|
|
311
191
|
| Export | Description |
|
|
312
|
-
|
|
313
|
-
| `createQueryBuilder<DB>()` |
|
|
314
|
-
| `queryAll(db, query)` |
|
|
315
|
-
| `queryFirst(db, query)` |
|
|
316
|
-
| `queryRun(db, query)` |
|
|
317
|
-
| `queryBatch(db, queries)` |
|
|
192
|
+
|--------|-------------|
|
|
193
|
+
| `createQueryBuilder<DB>()` | Compile-only Kysely instance |
|
|
194
|
+
| `queryAll(db, query, table?, validators?)` | All rows |
|
|
195
|
+
| `queryFirst(db, query, table?, validators?)` | First row or null |
|
|
196
|
+
| `queryRun(db, query, validators?)` | INSERT / UPDATE / DELETE |
|
|
197
|
+
| `queryBatch(db, queries, validators?)` | Atomic batch |
|
|
318
198
|
|
|
319
|
-
###
|
|
199
|
+
### Validators
|
|
320
200
|
|
|
321
201
|
| Export | Description |
|
|
322
|
-
|
|
323
|
-
| `
|
|
202
|
+
|--------|-------------|
|
|
203
|
+
| `D1_VALIDATORS` | Default validator array |
|
|
204
|
+
| `d1MaxParams` | Enforces ≤ 100 bound parameters |
|
|
205
|
+
| `d1MaxSqlLength` | Enforces ≤ 100,000 char SQL |
|
|
206
|
+
| `runValidators(query, validators?)` | Run validators manually |
|
|
324
207
|
|
|
325
208
|
---
|
|
326
209
|
|
package/dist/cli.js
CHANGED
|
File without changes
|
package/dist/executor.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CompiledQuery } from 'kysely';
|
|
2
2
|
import type { SchemaTable } from './schema.js';
|
|
3
|
+
import type { QueryValidator } from './validators.js';
|
|
3
4
|
/**
|
|
4
5
|
* D1 query result with metadata
|
|
5
6
|
*/
|
|
@@ -48,7 +49,7 @@ interface D1Result<T = unknown> {
|
|
|
48
49
|
* const users = await queryAll(env.DB, queries.listUsers());
|
|
49
50
|
* ```
|
|
50
51
|
*/
|
|
51
|
-
export declare function queryAll<T>(db: D1Database, query: CompiledQuery<T>, table?: SchemaTable<any, any
|
|
52
|
+
export declare function queryAll<T>(db: D1Database, query: CompiledQuery<T>, table?: SchemaTable<any, any>, validators?: QueryValidator[]): Promise<T[]>;
|
|
52
53
|
/**
|
|
53
54
|
* Execute query and return first row or null
|
|
54
55
|
*
|
|
@@ -57,7 +58,7 @@ export declare function queryAll<T>(db: D1Database, query: CompiledQuery<T>, tab
|
|
|
57
58
|
* const user = await queryFirst(env.DB, queries.getUserById({ id: 1 }));
|
|
58
59
|
* ```
|
|
59
60
|
*/
|
|
60
|
-
export declare function queryFirst<T>(db: D1Database, query: CompiledQuery<T>, table?: SchemaTable<any, any
|
|
61
|
+
export declare function queryFirst<T>(db: D1Database, query: CompiledQuery<T>, table?: SchemaTable<any, any>, validators?: QueryValidator[]): Promise<T | null>;
|
|
61
62
|
/**
|
|
62
63
|
* Execute query without returning rows (INSERT/UPDATE/DELETE)
|
|
63
64
|
*
|
|
@@ -67,7 +68,7 @@ export declare function queryFirst<T>(db: D1Database, query: CompiledQuery<T>, t
|
|
|
67
68
|
* console.log(result.meta.changes);
|
|
68
69
|
* ```
|
|
69
70
|
*/
|
|
70
|
-
export declare function queryRun(db: D1Database, query: CompiledQuery<unknown
|
|
71
|
+
export declare function queryRun(db: D1Database, query: CompiledQuery<unknown>, validators?: QueryValidator[]): Promise<D1RunResult>;
|
|
71
72
|
/**
|
|
72
73
|
* Execute multiple queries in a batch (transaction-like)
|
|
73
74
|
*
|
|
@@ -79,6 +80,6 @@ export declare function queryRun(db: D1Database, query: CompiledQuery<unknown>):
|
|
|
79
80
|
* ]);
|
|
80
81
|
* ```
|
|
81
82
|
*/
|
|
82
|
-
export declare function queryBatch(db: D1Database, queries: readonly CompiledQuery<unknown>[]): Promise<D1RunResult[]>;
|
|
83
|
+
export declare function queryBatch(db: D1Database, queries: readonly CompiledQuery<unknown>[], validators?: QueryValidator[]): Promise<D1RunResult[]>;
|
|
83
84
|
export {};
|
|
84
85
|
//# sourceMappingURL=executor.d.ts.map
|
package/dist/executor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AA0BtD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC1C,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;CAC/E;AAED,UAAU,mBAAmB;IAC3B,IAAI,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC;IAChD,GAAG,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,KAAK,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACxC,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;CACnC;AAED,UAAU,QAAQ,CAAC,CAAC,GAAG,OAAO;IAC5B,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,KAAK,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,EAC7B,UAAU,CAAC,EAAE,cAAc,EAAE,GAC5B,OAAO,CAAC,CAAC,EAAE,CAAC,CAQd;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAChC,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,KAAK,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,EAC7B,UAAU,CAAC,EAAE,cAAc,EAAE,GAC5B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAQnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAC5B,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,EAC7B,UAAU,CAAC,EAAE,cAAc,EAAE,GAC5B,OAAO,CAAC,WAAW,CAAC,CAUtB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC9B,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,EAC1C,UAAU,CAAC,EAAE,cAAc,EAAE,GAC5B,OAAO,CAAC,WAAW,EAAE,CAAC,CAUxB"}
|
package/dist/executor.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { sqlTypeFromSchema } from './schema.js';
|
|
2
|
+
import { runValidators } from './validators.js';
|
|
2
3
|
/**
|
|
3
4
|
* Serialize a query parameter for D1 binding.
|
|
4
5
|
* D1 accepts: null | string | number | boolean | ArrayBuffer | ArrayBufferView.
|
|
@@ -32,7 +33,8 @@ function deserializeRow(row, table) {
|
|
|
32
33
|
* const users = await queryAll(env.DB, queries.listUsers());
|
|
33
34
|
* ```
|
|
34
35
|
*/
|
|
35
|
-
export async function queryAll(db, query, table) {
|
|
36
|
+
export async function queryAll(db, query, table, validators) {
|
|
37
|
+
runValidators(query, validators);
|
|
36
38
|
const result = await db
|
|
37
39
|
.prepare(query.sql)
|
|
38
40
|
.bind(...query.parameters.map(serializeParam))
|
|
@@ -48,7 +50,8 @@ export async function queryAll(db, query, table) {
|
|
|
48
50
|
* const user = await queryFirst(env.DB, queries.getUserById({ id: 1 }));
|
|
49
51
|
* ```
|
|
50
52
|
*/
|
|
51
|
-
export async function queryFirst(db, query, table) {
|
|
53
|
+
export async function queryFirst(db, query, table, validators) {
|
|
54
|
+
runValidators(query, validators);
|
|
52
55
|
const result = await db
|
|
53
56
|
.prepare(query.sql)
|
|
54
57
|
.bind(...query.parameters.map(serializeParam))
|
|
@@ -66,7 +69,8 @@ export async function queryFirst(db, query, table) {
|
|
|
66
69
|
* console.log(result.meta.changes);
|
|
67
70
|
* ```
|
|
68
71
|
*/
|
|
69
|
-
export async function queryRun(db, query) {
|
|
72
|
+
export async function queryRun(db, query, validators) {
|
|
73
|
+
runValidators(query, validators);
|
|
70
74
|
const result = await db
|
|
71
75
|
.prepare(query.sql)
|
|
72
76
|
.bind(...query.parameters.map(serializeParam))
|
|
@@ -87,7 +91,9 @@ export async function queryRun(db, query) {
|
|
|
87
91
|
* ]);
|
|
88
92
|
* ```
|
|
89
93
|
*/
|
|
90
|
-
export async function queryBatch(db, queries) {
|
|
94
|
+
export async function queryBatch(db, queries, validators) {
|
|
95
|
+
for (const q of queries)
|
|
96
|
+
runValidators(q, validators);
|
|
91
97
|
const statements = queries.map((q) => db.prepare(q.sql).bind(...q.parameters.map(serializeParam)));
|
|
92
98
|
const results = await db.batch(statements);
|
|
93
99
|
return results.map((r) => ({
|
package/dist/executor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
export { createQueryBuilder } from './query-builder.js';
|
|
2
2
|
export { queryAll, queryFirst, queryRun, queryBatch } from './executor.js';
|
|
3
3
|
export type { D1Database, D1RunResult } from './executor.js';
|
|
4
|
+
export { defineTable, defineIndex, defineTrigger, sqlTypeFromSchema, } from './schema.js';
|
|
5
|
+
export type { InferDB, SchemaTable, SchemaIndex, SchemaTrigger, SchemaForeignKey, ColumnTypeInfo, SqliteType, TableOptions, } from './schema.js';
|
|
6
|
+
export { defineConfig } from './config.js';
|
|
7
|
+
export type { D1KytConfig, NamingStrategy } from './config.js';
|
|
8
|
+
export { d1MaxParams, d1MaxSqlLength, D1_VALIDATORS, runValidators } from './validators.js';
|
|
9
|
+
export { D1_MAX_BOUND_PARAMETERS, D1_MAX_SQL_LENGTH, D1_MAX_COLUMNS } from './validators.js';
|
|
10
|
+
export type { QueryValidator } from './validators.js';
|
|
4
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3E,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3E,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,EACL,WAAW,EACX,WAAW,EACX,aAAa,EACb,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,OAAO,EACP,WAAW,EACX,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,YAAY,GACb,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC7F,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
1
|
export { createQueryBuilder } from './query-builder.js';
|
|
2
2
|
export { queryAll, queryFirst, queryRun, queryBatch } from './executor.js';
|
|
3
|
+
// schema
|
|
4
|
+
export { defineTable, defineIndex, defineTrigger, sqlTypeFromSchema, } from './schema.js';
|
|
5
|
+
// config
|
|
6
|
+
export { defineConfig } from './config.js';
|
|
7
|
+
// validators
|
|
8
|
+
export { d1MaxParams, d1MaxSqlLength, D1_VALIDATORS, runValidators } from './validators.js';
|
|
9
|
+
export { D1_MAX_BOUND_PARAMETERS, D1_MAX_SQL_LENGTH, D1_MAX_COLUMNS } from './validators.js';
|
|
3
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3E,SAAS;AACT,OAAO,EACL,WAAW,EACX,WAAW,EACX,aAAa,EACb,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAYrB,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,aAAa;AACb,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/schema-diff.d.ts
CHANGED
|
@@ -96,6 +96,9 @@ export declare function diffSnapshots(prev: SchemaSnapshot, next: SchemaSnapshot
|
|
|
96
96
|
* - Modified column → warning comment (SQLite cannot ALTER COLUMN)
|
|
97
97
|
* - Added/dropped index → CREATE INDEX / DROP INDEX
|
|
98
98
|
* - Added/dropped trigger → CREATE TRIGGER / DROP TRIGGER
|
|
99
|
+
*
|
|
100
|
+
* @param chunkSize Rows per INSERT chunk during table recreation (default 5000).
|
|
101
|
+
* Set to 0 to emit a single INSERT instead. Increase if you hit D1 timeouts.
|
|
99
102
|
*/
|
|
100
|
-
export declare function diffToSQL(diff: SchemaDiff): string[];
|
|
103
|
+
export declare function diffToSQL(diff: SchemaDiff, chunkSize?: number): string[];
|
|
101
104
|
//# sourceMappingURL=schema-diff.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-diff.d.ts","sourceRoot":"","sources":["../src/schema-diff.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"schema-diff.d.ts","sourceRoot":"","sources":["../src/schema-diff.ts"],"names":[],"mappings":"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"}
|
package/dist/schema-diff.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* the declarative schema workflow (schema:diff command).
|
|
4
4
|
*/
|
|
5
5
|
import { sqlTypeFromSchema } from './schema.js';
|
|
6
|
+
import { D1_MAX_COLUMNS, D1_MAX_SQL_LENGTH } from './validators.js';
|
|
6
7
|
// ----------------------------------------------------------------------------
|
|
7
8
|
// Internal Helpers
|
|
8
9
|
// ----------------------------------------------------------------------------
|
|
@@ -333,14 +334,21 @@ function tableToCreateSQL(table) {
|
|
|
333
334
|
* - Modified column → warning comment (SQLite cannot ALTER COLUMN)
|
|
334
335
|
* - Added/dropped index → CREATE INDEX / DROP INDEX
|
|
335
336
|
* - Added/dropped trigger → CREATE TRIGGER / DROP TRIGGER
|
|
337
|
+
*
|
|
338
|
+
* @param chunkSize Rows per INSERT chunk during table recreation (default 5000).
|
|
339
|
+
* Set to 0 to emit a single INSERT instead. Increase if you hit D1 timeouts.
|
|
336
340
|
*/
|
|
337
|
-
export function diffToSQL(diff) {
|
|
341
|
+
export function diffToSQL(diff, chunkSize = 5000) {
|
|
338
342
|
const statements = [];
|
|
339
343
|
let hasForeignKeys = false;
|
|
340
344
|
// New tables
|
|
341
345
|
for (const table of diff.addedTables) {
|
|
342
346
|
if (Object.keys(table.foreignKeys ?? {}).length > 0)
|
|
343
347
|
hasForeignKeys = true;
|
|
348
|
+
const colCount = Object.keys(table.columns).length;
|
|
349
|
+
if (colCount > D1_MAX_COLUMNS) {
|
|
350
|
+
statements.push(`-- WARNING: table "${table.name}" has ${colCount} columns (D1 limit: ${D1_MAX_COLUMNS})`);
|
|
351
|
+
}
|
|
344
352
|
statements.push(...tableToCreateSQL(table));
|
|
345
353
|
}
|
|
346
354
|
// Dropped tables
|
|
@@ -358,9 +366,12 @@ export function diffToSQL(diff) {
|
|
|
358
366
|
const needsRecreation = constrainedDrops.length > 0;
|
|
359
367
|
if (needsRecreation) {
|
|
360
368
|
const { nextTable, prevTable } = change;
|
|
361
|
-
//
|
|
369
|
+
// Warning + comment for each constrained drop
|
|
370
|
+
statements.push(`-- WARNING: table "${change.name}" must be recreated (constrained column drop).` +
|
|
371
|
+
` Data is copied in ${chunkSize > 0 ? `chunks of ${chunkSize} rows` : 'a single statement'}.` +
|
|
372
|
+
` Large tables may exceed D1 execution limits — increase chunk size or split manually if needed.`);
|
|
362
373
|
for (const col of constrainedDrops) {
|
|
363
|
-
statements.push(`-- Cannot DROP COLUMN "${col.name}" (
|
|
374
|
+
statements.push(`-- Cannot DROP COLUMN "${col.name}" (PRIMARY KEY or UNIQUE constraint); recreate table instead`);
|
|
364
375
|
}
|
|
365
376
|
// CREATE TABLE "<name>_new"
|
|
366
377
|
const newName = `${change.name}_new`;
|
|
@@ -370,11 +381,22 @@ export function diffToSQL(diff) {
|
|
|
370
381
|
statements.push(`CREATE TABLE "${newName}" (\n${allDefs.join(',\n')}\n);`);
|
|
371
382
|
if (Object.keys(nextTable.foreignKeys ?? {}).length > 0)
|
|
372
383
|
hasForeignKeys = true;
|
|
373
|
-
// INSERT surviving columns
|
|
384
|
+
// INSERT surviving columns — chunked by rowid range to stay within D1 limits
|
|
374
385
|
const droppedColNames = new Set(droppedCols.map((c) => c.name));
|
|
375
386
|
const survivingCols = Object.keys(prevTable.columns).filter((n) => !droppedColNames.has(n));
|
|
376
387
|
const colList = survivingCols.map((n) => `"${n}"`).join(', ');
|
|
377
|
-
|
|
388
|
+
if (chunkSize <= 0) {
|
|
389
|
+
statements.push(`INSERT INTO "${newName}" SELECT ${colList} FROM "${change.name}";`);
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
const CHUNKS = 10;
|
|
393
|
+
for (let i = 0; i < CHUNKS; i++) {
|
|
394
|
+
const lo = i * chunkSize + 1;
|
|
395
|
+
const hi = (i + 1) * chunkSize;
|
|
396
|
+
statements.push(`INSERT INTO "${newName}" SELECT ${colList} FROM "${change.name}" WHERE rowid BETWEEN ${lo} AND ${hi};`);
|
|
397
|
+
}
|
|
398
|
+
statements.push(`-- If "${change.name}" has more than ${CHUNKS * chunkSize} rows, add more INSERT statements following the same pattern (BETWEEN ${CHUNKS * chunkSize + 1} AND ${(CHUNKS + 1) * chunkSize}, etc.)`);
|
|
399
|
+
}
|
|
378
400
|
// DROP old table and rename new
|
|
379
401
|
statements.push(`DROP TABLE "${change.name}";`);
|
|
380
402
|
statements.push(`ALTER TABLE "${newName}" RENAME TO "${change.name}";`);
|
|
@@ -471,6 +493,14 @@ export function diffToSQL(diff) {
|
|
|
471
493
|
if (hasForeignKeys) {
|
|
472
494
|
statements.unshift('PRAGMA foreign_keys = ON;');
|
|
473
495
|
}
|
|
474
|
-
|
|
496
|
+
// Warn about any statement that exceeds the D1 SQL length limit
|
|
497
|
+
const result = [];
|
|
498
|
+
for (const stmt of statements) {
|
|
499
|
+
if (!stmt.startsWith('--') && stmt.length > D1_MAX_SQL_LENGTH) {
|
|
500
|
+
result.push(`-- WARNING: statement below is ${stmt.length} characters (D1 limit: ${D1_MAX_SQL_LENGTH}); apply manually or split further`);
|
|
501
|
+
}
|
|
502
|
+
result.push(stmt);
|
|
503
|
+
}
|
|
504
|
+
return result;
|
|
475
505
|
}
|
|
476
506
|
//# sourceMappingURL=schema-diff.js.map
|
package/dist/schema-diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-diff.js","sourceRoot":"","sources":["../src/schema-diff.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema-diff.js","sourceRoot":"","sources":["../src/schema-diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CompiledQuery } from 'kysely';
|
|
2
|
+
export type QueryValidator = (query: CompiledQuery<unknown>) => void;
|
|
3
|
+
export declare const D1_MAX_BOUND_PARAMETERS = 100;
|
|
4
|
+
export declare const D1_MAX_SQL_LENGTH = 100000;
|
|
5
|
+
export declare const D1_MAX_COLUMNS = 100;
|
|
6
|
+
export declare const d1MaxParams: QueryValidator;
|
|
7
|
+
export declare const d1MaxSqlLength: QueryValidator;
|
|
8
|
+
export declare const D1_VALIDATORS: QueryValidator[];
|
|
9
|
+
export declare function runValidators(query: CompiledQuery<unknown>, validators?: QueryValidator[]): void;
|
|
10
|
+
//# sourceMappingURL=validators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE5C,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;AAErE,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,iBAAiB,SAAU,CAAC;AACzC,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,eAAO,MAAM,WAAW,EAAE,cAOzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,cAO5B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,cAAc,EAAkC,CAAC;AAE7E,wBAAgB,aAAa,CAC3B,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,EAC7B,UAAU,GAAE,cAAc,EAAkB,GAC3C,IAAI,CAIN"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const D1_MAX_BOUND_PARAMETERS = 100;
|
|
2
|
+
export const D1_MAX_SQL_LENGTH = 100_000;
|
|
3
|
+
export const D1_MAX_COLUMNS = 100;
|
|
4
|
+
export const d1MaxParams = (query) => {
|
|
5
|
+
if (query.parameters.length > D1_MAX_BOUND_PARAMETERS) {
|
|
6
|
+
throw new Error(`D1 limit: query has ${query.parameters.length} bound parameters (max ${D1_MAX_BOUND_PARAMETERS}). ` +
|
|
7
|
+
`Split into multiple queries or reduce the number of columns.`);
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
export const d1MaxSqlLength = (query) => {
|
|
11
|
+
if (query.sql.length > D1_MAX_SQL_LENGTH) {
|
|
12
|
+
throw new Error(`D1 limit: SQL statement is ${query.sql.length} characters (max ${D1_MAX_SQL_LENGTH}). ` +
|
|
13
|
+
`Simplify the query or split it into smaller statements.`);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
export const D1_VALIDATORS = [d1MaxParams, d1MaxSqlLength];
|
|
17
|
+
export function runValidators(query, validators = D1_VALIDATORS) {
|
|
18
|
+
for (const validate of validators) {
|
|
19
|
+
validate(query);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAElC,MAAM,CAAC,MAAM,WAAW,GAAmB,CAAC,KAAK,EAAE,EAAE;IACnD,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CACb,uBAAuB,KAAK,CAAC,UAAU,CAAC,MAAM,0BAA0B,uBAAuB,KAAK;YAClG,8DAA8D,CACjE,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAmB,CAAC,KAAK,EAAE,EAAE;IACtD,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,8BAA8B,KAAK,CAAC,GAAG,CAAC,MAAM,oBAAoB,iBAAiB,KAAK;YACtF,yDAAyD,CAC5D,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAqB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAE7E,MAAM,UAAU,aAAa,CAC3B,KAA6B,EAC7B,aAA+B,aAAa;IAE5C,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "d1-kyt",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Opinionated Cloudflare D1 + Kysely toolkit",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,30 +13,15 @@
|
|
|
13
13
|
"types": "./dist/index.d.ts",
|
|
14
14
|
"import": "./dist/index.js"
|
|
15
15
|
},
|
|
16
|
-
"./schema": {
|
|
17
|
-
"types": "./dist/schema.d.ts",
|
|
18
|
-
"import": "./dist/schema.js"
|
|
19
|
-
},
|
|
20
16
|
"./migrate": {
|
|
21
17
|
"types": "./dist/migrate.d.ts",
|
|
22
18
|
"import": "./dist/migrate.js"
|
|
23
|
-
},
|
|
24
|
-
"./config": {
|
|
25
|
-
"types": "./dist/config.d.ts",
|
|
26
|
-
"import": "./dist/config.js"
|
|
27
19
|
}
|
|
28
20
|
},
|
|
29
21
|
"files": [
|
|
30
|
-
"dist"
|
|
22
|
+
"dist",
|
|
23
|
+
"skills"
|
|
31
24
|
],
|
|
32
|
-
"scripts": {
|
|
33
|
-
"build": "tsc",
|
|
34
|
-
"dev": "tsc --watch",
|
|
35
|
-
"test": "vitest",
|
|
36
|
-
"lint": "echo noop",
|
|
37
|
-
"typecheck": "tsc --noEmit",
|
|
38
|
-
"prepublishOnly": "pnpm build"
|
|
39
|
-
},
|
|
40
25
|
"keywords": [
|
|
41
26
|
"cloudflare",
|
|
42
27
|
"d1",
|
|
@@ -57,5 +42,12 @@
|
|
|
57
42
|
"typescript": "5.9.3",
|
|
58
43
|
"valibot": "1.2.0",
|
|
59
44
|
"vitest": "4.0.18"
|
|
45
|
+
},
|
|
46
|
+
"scripts": {
|
|
47
|
+
"build": "tsc",
|
|
48
|
+
"dev": "tsc --watch",
|
|
49
|
+
"test": "vitest",
|
|
50
|
+
"lint": "echo noop",
|
|
51
|
+
"typecheck": "tsc --noEmit"
|
|
60
52
|
}
|
|
61
|
-
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: use-d1-kyt
|
|
3
|
+
description: Use when building with d1-kyt — the Cloudflare D1 + Kysely + Valibot toolkit. Covers schema definition, migration generation, type inference, query execution, JSON column deserialization, D1 limits, and migration gotchas like NOT NULL FK constraints and table recreation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Using d1-kyt
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
d1-kyt connects three layers: **Valibot** (schema/validation) → **Kysely** (type-safe query builder) → **Cloudflare D1/SQLite** (executor). No code generation, no ORM runtime.
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
schema.ts → schema:diff → .sql migration → wrangler apply → typed queries
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## 1. Define Schema
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { defineTable } from 'd1-kyt';
|
|
20
|
+
import * as v from 'valibot';
|
|
21
|
+
|
|
22
|
+
export const posts = defineTable(
|
|
23
|
+
'posts',
|
|
24
|
+
{
|
|
25
|
+
title: v.string(), // TEXT NOT NULL
|
|
26
|
+
views: v.pipe(v.number(), v.integer()), // INTEGER NOT NULL
|
|
27
|
+
rating: v.number(), // REAL NOT NULL
|
|
28
|
+
published: v.boolean(), // INTEGER NOT NULL (0/1)
|
|
29
|
+
slug: v.optional(v.string()), // TEXT nullable
|
|
30
|
+
summary: v.optional(v.string(), 'TBD'), // TEXT DEFAULT 'TBD'
|
|
31
|
+
meta: v.object({ og: v.string() }), // TEXT (JSON) NOT NULL
|
|
32
|
+
tags: v.array(v.string()), // TEXT (JSON) NOT NULL
|
|
33
|
+
categoryId: v.pipe(v.number(), v.integer()),
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
foreignKeys: [{ columns: ['categoryId'], references: categories, onDelete: 'CASCADE' }],
|
|
37
|
+
indexes: [{ columns: ['slug'], unique: true }],
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Column type mapping:**
|
|
43
|
+
|
|
44
|
+
| Valibot | SQL | Notes |
|
|
45
|
+
|---------|-----|-------|
|
|
46
|
+
| `v.string()` | TEXT NOT NULL | |
|
|
47
|
+
| `v.pipe(v.number(), v.integer())` | INTEGER NOT NULL | |
|
|
48
|
+
| `v.number()` | REAL NOT NULL | |
|
|
49
|
+
| `v.boolean()` | INTEGER NOT NULL | stored as 0/1 |
|
|
50
|
+
| `v.object({...})` / `v.array(...)` | TEXT NOT NULL | JSON serialized |
|
|
51
|
+
| `v.optional(schema)` | nullable | no default |
|
|
52
|
+
| `v.optional(schema, val)` | DEFAULT val | |
|
|
53
|
+
| `v.nullable(schema)` | nullable | |
|
|
54
|
+
|
|
55
|
+
Auto columns added to every table: `id` (INTEGER PRIMARY KEY AUTOINCREMENT), `createdAt` (TEXT), `updatedAt` (TEXT).
|
|
56
|
+
|
|
57
|
+
## 2. Infer Types & Create Query Builder
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
import { InferDB, createQueryBuilder } from 'd1-kyt';
|
|
61
|
+
|
|
62
|
+
export type DB = InferDB<{
|
|
63
|
+
posts: typeof posts;
|
|
64
|
+
categories: typeof categories;
|
|
65
|
+
}>;
|
|
66
|
+
|
|
67
|
+
// Stateless, compile-only Kysely instance — no connection held
|
|
68
|
+
export const db = createQueryBuilder<DB>();
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## 3. Generate Migrations
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
d1-kyt schema:diff # auto-name from diff
|
|
75
|
+
d1-kyt schema:diff add_tags_column # custom name
|
|
76
|
+
d1-kyt schema:diff --schema src/schema.ts # custom schema path
|
|
77
|
+
d1-kyt schema:diff --dir db # custom directory
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Reads: `schema.ts`, `schema.json` (snapshot). Writes: numbered `.sql` migration, updated `schema.json`, and `schema.sql` (full DDL from scratch).
|
|
81
|
+
|
|
82
|
+
**Always commit `schema.json` alongside the `.sql` file** — it is the baseline for the next diff.
|
|
83
|
+
|
|
84
|
+
## 4. Execute Queries
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
import { queryAll, queryFirst, queryRun, queryBatch } from 'd1-kyt';
|
|
88
|
+
|
|
89
|
+
// All rows — pass SchemaTable as third arg to deserialize JSON columns
|
|
90
|
+
const allPosts = await queryAll(env.DB, db.selectFrom('posts').selectAll().compile(), posts);
|
|
91
|
+
|
|
92
|
+
// First row or null
|
|
93
|
+
const post = await queryFirst(
|
|
94
|
+
env.DB,
|
|
95
|
+
db.selectFrom('posts').selectAll().where('id', '=', id).compile(),
|
|
96
|
+
posts,
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
// INSERT / UPDATE / DELETE
|
|
100
|
+
const result = await queryRun(
|
|
101
|
+
env.DB,
|
|
102
|
+
db.insertInto('posts').values({ title: 'Hello', views: 0, ... }).compile(),
|
|
103
|
+
);
|
|
104
|
+
console.log(result.meta.changes); // rows affected
|
|
105
|
+
|
|
106
|
+
// Atomic batch
|
|
107
|
+
await queryBatch(env.DB, [
|
|
108
|
+
db.insertInto('posts').values({ ... }).compile(),
|
|
109
|
+
db.updateTable('posts').set({ views: 1 }).where('id', '=', 1).compile(),
|
|
110
|
+
]);
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Always pass the `SchemaTable` as the third argument** when the table has JSON columns (`v.object`, `v.array`). Without it, JSON columns return as raw strings.
|
|
114
|
+
|
|
115
|
+
## 5. D1 Limits
|
|
116
|
+
|
|
117
|
+
d1-kyt enforces these at runtime — violations throw before hitting D1:
|
|
118
|
+
|
|
119
|
+
| Limit | Value | Where enforced |
|
|
120
|
+
|-------|-------|----------------|
|
|
121
|
+
| Bound parameters per query | 100 | `queryAll/First/Run/Batch` |
|
|
122
|
+
| SQL statement length | 100,000 chars | `queryAll/First/Run/Batch` |
|
|
123
|
+
| Columns per table | 100 | warning comment in generated SQL |
|
|
124
|
+
| SQL length in migrations | 100,000 chars | warning comment in generated SQL |
|
|
125
|
+
|
|
126
|
+
To use a custom validator set (e.g. disable checks in tests, or add your own rules):
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
import { D1_VALIDATORS, runValidators } from 'd1-kyt';
|
|
130
|
+
import type { QueryValidator } from 'd1-kyt';
|
|
131
|
+
|
|
132
|
+
const noDrops: QueryValidator = (q) => {
|
|
133
|
+
if (q.sql.includes('DROP')) throw new Error('DROP not allowed');
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
// extend
|
|
137
|
+
await queryAll(env.DB, query, posts, [...D1_VALIDATORS, noDrops]);
|
|
138
|
+
|
|
139
|
+
// disable all checks
|
|
140
|
+
await queryAll(env.DB, query, posts, []);
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Wide tables and batch inserts are the most common ways to hit the 100-parameter limit. An INSERT into a 98-column table already uses 98 parameters.
|
|
144
|
+
|
|
145
|
+
## 6. Migration Gotchas
|
|
146
|
+
|
|
147
|
+
### NOT NULL column with foreign key on existing table
|
|
148
|
+
|
|
149
|
+
SQLite's `ALTER TABLE ADD COLUMN` cannot include `REFERENCES` for NOT NULL columns. d1-kyt emits a warning and omits the FK:
|
|
150
|
+
|
|
151
|
+
```sql
|
|
152
|
+
-- WARNING: cannot add NOT NULL column "categoryId" with FK to existing table "posts"; make it nullable or rebuild
|
|
153
|
+
ALTER TABLE "posts" ADD COLUMN "categoryId" INTEGER NOT NULL;
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Fix — make the column nullable so the FK can be inlined:
|
|
157
|
+
|
|
158
|
+
```typescript
|
|
159
|
+
categoryId: v.optional(v.pipe(v.number(), v.integer()))
|
|
160
|
+
// generates: ALTER TABLE "posts" ADD COLUMN "categoryId" INTEGER REFERENCES "categories"("id")
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Table recreation for constrained column drops
|
|
164
|
+
|
|
165
|
+
Dropping a column that is part of a PRIMARY KEY or UNIQUE index requires full table recreation. d1-kyt generates 10 chunked `INSERT` statements (default 5,000 rows each = 50,000 rows total):
|
|
166
|
+
|
|
167
|
+
```sql
|
|
168
|
+
-- WARNING: table "posts" must be recreated (constrained column drop). Data is copied in chunks of 5000 rows.
|
|
169
|
+
INSERT INTO "posts_new" SELECT ... FROM "posts" WHERE rowid BETWEEN 1 AND 5000;
|
|
170
|
+
-- ... 9 more chunks
|
|
171
|
+
-- If "posts" has more than 50000 rows, add more INSERT statements following the same pattern
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
If your table exceeds 50,000 rows, extend the pattern manually in the generated SQL before applying.
|
|
175
|
+
|
|
176
|
+
### Foreign keys and PRAGMA
|
|
177
|
+
|
|
178
|
+
When any FK is present, d1-kyt automatically prepends `PRAGMA foreign_keys = ON;` to the migration.
|
|
179
|
+
|
|
180
|
+
### Modified columns
|
|
181
|
+
|
|
182
|
+
SQLite cannot `ALTER COLUMN`. d1-kyt emits a warning comment — you must handle the change manually or rebuild the table:
|
|
183
|
+
|
|
184
|
+
```sql
|
|
185
|
+
-- WARNING: column "posts"."title" changed; SQLite cannot ALTER COLUMN — handle manually
|
|
186
|
+
```
|