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 CHANGED
@@ -1,10 +1,31 @@
1
1
  # d1-kyt
2
2
 
3
- Opinionated [Cloudflare D1](https://developers.cloudflare.com/d1/) + [Kysely](https://kysely.dev/) toolkit.
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
- **ky**(sely) + **t**(oolkit) = **kyt**
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
- > **Not an ORM.** Thin wrapper with helpers that relies on Kysely's type inference and Valibot schemas. No magic, no runtime overhead.
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 → types from schema
39
+ schema.ts → schema:diff → .sql migration → wrangler apply → typed queries
19
40
  ```
20
41
 
21
- 1. Define your schema with Valibot types in `schema.ts`
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 type-safe queries
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
- # In your Cloudflare Workers project:
34
- d1-kyt init
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 schema | SQL type | Nullable |
80
- |---|---|---|
81
- | `v.string()` | TEXT | NOT NULL |
82
- | `v.number()` | REAL | NOT NULL |
83
- | `v.pipe(v.number(), v.integer(), ...)` | INTEGER | NOT NULL |
84
- | `v.boolean()` | INTEGER | NOT NULL |
85
- | `v.object({...})` or `v.array(...)` | TEXT (JSON) | NOT NULL |
86
- | `v.optional(X)` | type of X | NULL |
87
- | `v.nullable(X)` | type of X | NULL |
88
- | `v.optional(X, defaultVal)` | type of X + DEFAULT | NULL |
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`, `createdAt`, `updatedAt` by default, plus an `AFTER UPDATE` trigger for `updatedAt`. Control via options:
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 (snake_case)
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
- import { users } from './db/schema';
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
- // Kysely DB type auto-columns are Generated<T> so insert doesn't require them
173
- import { type InferDB } from 'd1-kyt/schema';
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
- ## Query Builder
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
- // src/queries.ts
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 insertUser = (email: string, name?: string) =>
194
- db.insertInto('users').values({ email, name }).returning(['id']).compile();
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
- ## Execute Queries
119
+ `PRAGMA foreign_keys = ON` is automatically prepended to any migration that includes FK constraints.
198
120
 
199
- ```typescript
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
- app.post('/users', async (c) => {
218
- const { email, name } = await c.req.json();
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
- ## Foreign keys
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
- Generates in `CREATE TABLE`:
244
- ```sql
245
- FOREIGN KEY ("categoryId") REFERENCES "categories"("id") ON DELETE CASCADE
131
+ ```bash
132
+ d1-kyt init [--dir <dir>]
133
+ d1-kyt schema:diff <name> [--dir <dir>] [--schema <path>]
246
134
  ```
247
135
 
248
- ### Adding a FK column to an existing table
136
+ **Always commit `schema.json` alongside each `.sql` migration** it is the diff baseline.
249
137
 
250
- Use a nullable column — SQLite allows `ALTER TABLE ADD COLUMN ... REFERENCES` only when the column is nullable (existing rows get `NULL`):
138
+ ### Config
251
139
 
252
140
  ```typescript
253
- // v2: add optional deptId FK to existing employees table
254
- export const employees = defineTable('employees', {
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
- Generates:
263
- ```sql
264
- ALTER TABLE "employees" ADD COLUMN "deptId" INTEGER REFERENCES "departments"("id");
144
+ export default defineConfig({
145
+ migrationsDir: 'db/migrations',
146
+ namingStrategy: 'sequential', // or 'timestamp'
147
+ });
265
148
  ```
266
149
 
267
- > Adding a `NOT NULL` FK column to an existing table is not possible without a table rebuild — a warning comment is emitted instead.
150
+ ---
268
151
 
269
- ### Supported `onDelete` / `onUpdate` actions
152
+ ## D1 limits
270
153
 
271
- `CASCADE` | `SET NULL` | `RESTRICT` | `NO ACTION`
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
- ## Partial indexes
162
+ Custom validators:
276
163
 
277
164
  ```typescript
278
- defineIndex(users, ['email'], {
279
- unique: true,
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
- ## Conventions
168
+ const noDrops: QueryValidator = (q) => {
169
+ if (q.sql.includes('DROP')) throw new Error('DROP not allowed');
170
+ };
287
171
 
288
- - Auto `id INTEGER PRIMARY KEY AUTOINCREMENT`, `createdAt TEXT`, `updatedAt TEXT` on every table (all configurable/disableable)
289
- - Auto `AFTER UPDATE` trigger to keep `updatedAt` current
290
- - Index naming: `{table}_{cols}_idx` / `{table}_{cols}_uq`
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
- ### `d1-kyt/schema`
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 against the table) |
304
- | `defineTrigger(name, opts)` | Define a custom trigger attached to a table |
305
- | `sqlTypeFromSchema(schema)` | Inspect a Valibot schema → `{ type, notNull, default?, isJson }` |
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
- ### `d1-kyt` (main)
189
+ ### Execution
310
190
 
311
191
  | Export | Description |
312
- |---|---|
313
- | `createQueryBuilder<DB>()` | Kysely instance (compile-only, no execution) |
314
- | `queryAll(db, query)` | Execute query, return all rows |
315
- | `queryFirst(db, query)` | Execute query, return first row or null |
316
- | `queryRun(db, query)` | Execute mutation, return run metadata |
317
- | `queryBatch(db, queries)` | Execute multiple queries as a D1 batch |
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
- ### `d1-kyt/config`
199
+ ### Validators
320
200
 
321
201
  | Export | Description |
322
- |---|---|
323
- | `defineConfig(config)` | Define `config.ts` (typed helper) |
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
@@ -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>): Promise<T[]>;
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>): Promise<T | null>;
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>): Promise<D1RunResult>;
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
@@ -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;AA2B/C;;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,GAC5B,OAAO,CAAC,CAAC,EAAE,CAAC,CAOd;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,GAC5B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAOnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAC5B,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,GAC5B,OAAO,CAAC,WAAW,CAAC,CAStB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC9B,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,GACzC,OAAO,CAAC,WAAW,EAAE,CAAC,CASxB"}
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) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
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
@@ -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"}
@@ -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;AASH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACvC;AAMD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,aAAa,CAAC;IACzB,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,aAAa,EAAE,aAAa,EAAE,CAAC;IAC/B,aAAa,EAAE,WAAW,EAAE,CAAC;CAC9B;AA6BD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CA6HhF;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,GAAG,UAAU,CAsHpF;AAwED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CA8JpD"}
1
+ {"version":3,"file":"schema-diff.d.ts","sourceRoot":"","sources":["../src/schema-diff.ts"],"names":[],"mappings":"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"}
@@ -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
- // Comment for each constrained drop
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}" (constrained); recreate table instead`);
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
- statements.push(`INSERT INTO "${newName}" SELECT ${colList} FROM "${change.name}";`);
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
- return statements;
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
@@ -1 +1 @@
1
- {"version":3,"file":"schema-diff.js","sourceRoot":"","sources":["../src/schema-diff.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAiGhD,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,yDAAyD;AACzD,SAAS,aAAa,CAAC,GAAY;IACjC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,cAAc,IAAI,GAAG;QACpB,GAA+B,CAAC,YAAY,KAAK,IAAI,CACvD,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG;IAClB,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,gBAAgB,EAAE,IAAI;IACtB,eAAe,EAAE,WAAW;IAC5B,eAAe,EAAE,WAAW;CACpB,CAAC;AAEX,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgC;IAC9D,MAAM,MAAM,GAAkC,EAAE,CAAC;IAEjD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAAE,SAAS;QAElC,MAAM,KAAK,GAAG,GAAkB,CAAC;QACjC,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAiB,CAAC;QACvD,MAAM,IAAI,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC;QAE5C,MAAM,OAAO,GAAmC,EAAE,CAAC;QAEnD,2BAA2B;QAC3B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG;gBAC/B,IAAI,EAAE,IAAI,CAAC,gBAAgB;gBAC3B,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,IAAI;gBAChB,aAAa,EAAE,IAAI;aACpB,CAAC;QACJ,CAAC;QAED,mDAAmD;QACnD,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAC/C,KAAK,CAAC,QAA+B,CACtC,EAAE,CAAC;YACF,MAAM,IAAI,GAAmB,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC1D,MAAM,GAAG,GAAmB;gBAC1B,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC;YACF,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;gBAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC3D,OAAO,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC;QACzB,CAAC;QAED,yBAAyB;QACzB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG;gBAC9B,IAAI,EAAE,IAAI,CAAC,eAAe;gBAC1B,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,mBAAmB;aAC7B,CAAC;QACJ,CAAC;QAED,yBAAyB;QACzB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG;gBAC9B,IAAI,EAAE,IAAI,CAAC,eAAe;gBAC1B,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,mBAAmB;aAC7B,CAAC;QACJ,CAAC;QAED,UAAU;QACV,MAAM,OAAO,GAAkC,EAAE,CAAC;QAClD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,GAAkB;gBAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB,CAAC;YACF,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC3B,CAAC;QAED,eAAe;QACf,MAAM,WAAW,GAAuC,EAAE,CAAC;QAC3D,KAAK,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAuB,EAAE,CAAC;YAClE,MAAM,OAAO,GAAG,EAAE,GAAG,WAAW,EAAE,GAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAkB,EAAE,CAAC;YACxF,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;YAClF,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YACtC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,IAAI,GAAuB;gBAC/B,OAAO,EAAE,EAAE,CAAC,OAAO;gBACnB,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK;gBAC7B,UAAU;aACX,CAAC;YACF,IAAI,EAAE,CAAC,QAAQ;gBAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;YAC7C,IAAI,EAAE,CAAC,QAAQ;gBAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;YAC7C,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,mCAAmC;QACnC,MAAM,QAAQ,GAAoC,EAAE,CAAC;QACrD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAmC,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACnE,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,MAAM,CAAC;gBAC9D,QAAQ,CAAC,QAAQ,CAAC,GAAG;oBACnB,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,OAAO;oBACf,KAAK,EAAE,QAAQ;oBACf,SAAS,EAAE,KAAK,CAAC,KAAK;oBACtB,IAAI,EAAE,WAAW,KAAK,CAAC,KAAK,UAAU,IAAI,CAAC,eAAe,8BAA8B,KAAK,YAAY,KAAK,IAAI;iBACnH,CAAC;YACJ,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAClC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG;gBACnB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,IAAI,EAAE,GAAG,CAAC,IAAI;aACf,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;YACpB,IAAI,EAAE,KAAK,CAAC,KAAK;YACjB,OAAO;YACP,OAAO;YACP,QAAQ;YACR,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AAChC,CAAC;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAoB,EAAE,IAAoB;IACtE,MAAM,UAAU,GAAkC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;IACrE,MAAM,UAAU,GAAkC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;IAErE,MAAM,WAAW,GAAoB,EAAE,CAAC;IACxC,MAAM,aAAa,GAAoB,EAAE,CAAC;IAC1C,MAAM,aAAa,GAAkB,EAAE,CAAC;IAExC,eAAe;IACf,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,EAAE,CAAC;YAC1B,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,EAAE,CAAC;YAC1B,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC;YAAE,SAAS;QAEpC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAEnC,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,WAAW,GAAuB,EAAE,CAAC;QAE3C,6BAA6B;QAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,8BAA8B;QAC9B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC7C,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAED,kCAAkC;QAClC,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,IAAI,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,IAAI,EAAE,CAAC;QAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC;gBACtB,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;oBAClD,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC;gBACtB,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9F,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;AACvD,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,8DAA8D;AAC9D,SAAS,WAAW,CAAC,GAAmB;IACtC,IAAI,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;IACxC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnB,GAAG,IAAI,cAAc,CAAC;QACtB,IAAI,GAAG,CAAC,aAAa;YAAE,GAAG,IAAI,gBAAgB,CAAC;IACjD,CAAC;SAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QACvB,GAAG,IAAI,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,GAAG,IAAI,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,sFAAsF;AACtF,SAAS,UAAU,CAAC,SAAiB,EAAE,GAAkB;IACvD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,GAAG,GAAG,UAAU,MAAM,UAAU,GAAG,CAAC,IAAI,SAAS,SAAS,KAAK,IAAI,GAAG,CAAC;IAC3E,IAAI,GAAG,CAAC,KAAK;QAAE,GAAG,IAAI,UAAU,GAAG,CAAC,KAAK,EAAE,CAAC;IAC5C,OAAO,GAAG,GAAG,GAAG,CAAC;AACnB,CAAC;AAED,0FAA0F;AAC1F,SAAS,YAAY,CAAC,GAAoB;IACxC,OAAO,CACL,mBAAmB,GAAG,CAAC,IAAI,KAAK;QAChC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,SAAS,KAAK;QACpD,gBAAgB;QAChB,SAAS;QACT,KAAK,GAAG,CAAC,IAAI,IAAI;QACjB,MAAM,CACP,CAAC;AACJ,CAAC;AAED,6CAA6C;AAC7C,SAAS,uBAAuB,CAAC,EAAsB;IACrD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,GAAG,GAAG,kBAAkB,IAAI,iBAAiB,EAAE,CAAC,QAAQ,KAAK,OAAO,GAAG,CAAC;IAC5E,IAAI,EAAE,CAAC,QAAQ;QAAE,GAAG,IAAI,cAAc,EAAE,CAAC,QAAQ,EAAE,CAAC;IACpD,IAAI,EAAE,CAAC,QAAQ;QAAE,GAAG,IAAI,cAAc,EAAE,CAAC,QAAQ,EAAE,CAAC;IACpD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,qEAAqE;AACrE,SAAS,gBAAgB,CAAC,KAAoB;IAC5C,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC;IACxC,UAAU,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,IAAI,QAAQ,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE9E,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,SAAS,CAAC,IAAgB;IACxC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,aAAa;IACb,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,cAAc,GAAG,IAAI,CAAC;QAC3E,UAAU,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,iBAAiB;IACjB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,UAAU,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACjD,UAAU,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,iBAAiB;IACjB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QAExC,qFAAqF;QACrF,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,CACzC,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,CAAC,MAAO,CAAC,UAAU,KAAK,IAAI;YAC/B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC5F,CAAC;QACF,MAAM,eAAe,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;QAEpD,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;YAExC,oCAAoC;YACpC,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;gBACnC,UAAU,CAAC,IAAI,CACb,0BAA0B,GAAG,CAAC,IAAI,yCAAyC,CAC5E,CAAC;YACJ,CAAC;YAED,4BAA4B;YAC5B,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,IAAI,MAAM,CAAC;YACrC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACvF,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC;YACxC,UAAU,CAAC,IAAI,CAAC,iBAAiB,OAAO,QAAQ,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAE3E,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;gBAAE,cAAc,GAAG,IAAI,CAAC;YAE/E,2BAA2B;YAC3B,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAChE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5F,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9D,UAAU,CAAC,IAAI,CAAC,gBAAgB,OAAO,YAAY,OAAO,UAAU,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YAErF,gCAAgC;YAChC,UAAU,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YAChD,UAAU,CAAC,IAAI,CAAC,gBAAgB,OAAO,gBAAgB,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YAExE,uCAAuC;YACvC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnD,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;YAChD,CAAC;YAED,wCAAwC;YACxC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpD,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAED,UAAU;QACV,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBAC7B,yDAAyD;gBACzD,IAAI,GAAG,GAAG,gBAAgB,MAAM,CAAC,IAAI,iBAAiB,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC1F,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO;oBAAE,GAAG,IAAI,WAAW,CAAC;gBAC1C,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS;oBAAE,GAAG,IAAI,YAAY,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAE5E,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CACtC,CAAC,GAAG,EAAE,EAAE,CACN,CAAC,GAAG,CAAC,MAAM;oBACX,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;oBAC/B,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAM,CAAC,IAAI,CAC3C,CAAC;gBACF,IAAI,QAAQ,EAAE,KAAK,EAAE,CAAC;oBACpB,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;wBACtB,UAAU,CAAC,IAAI,CACb,2CAA2C,GAAG,CAAC,KAAK,CAAC,IAAI,gCAAgC,MAAM,CAAC,IAAI,0CAA0C,CAC/I,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;wBAC1B,GAAG,IAAI,gBAAgB,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;wBAC7D,IAAI,EAAE,CAAC,QAAQ;4BAAE,GAAG,IAAI,cAAc,EAAE,CAAC,QAAQ,EAAE,CAAC;wBACpD,IAAI,EAAE,CAAC,QAAQ;4BAAE,GAAG,IAAI,cAAc,EAAE,CAAC,QAAQ,EAAE,CAAC;wBACpD,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;wBAChC,cAAc,GAAG,IAAI,CAAC;oBACxB,CAAC;gBACH,CAAC;gBAED,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YAC7B,CAAC;iBAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;gBACpC,6DAA6D;gBAC7D,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrB,UAAU,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,IAAI,kBAAkB,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBACnC,yDAAyD;gBACzD,UAAU,CAAC,IAAI,CACb,uBAAuB,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,yDAAyD,CAC1G,CAAC;YACJ,CAAC;QACH,CAAC;QAED,6DAA6D;QAC7D,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBAC7B,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtD,CAAC;qBAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;oBACpC,UAAU,CAAC,IAAI,CAAC,yBAAyB,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;gBACzD,CAAC;qBAAM,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBACnC,mCAAmC;oBACnC,UAAU,CAAC,IAAI,CAAC,yBAAyB,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;oBACvD,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;QAED,+DAA+D;QAC/D,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBAC7B,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3C,CAAC;qBAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;oBACpC,UAAU,CAAC,IAAI,CAAC,2BAA2B,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;gBAC3D,CAAC;qBAAM,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBACnC,qCAAqC;oBACrC,UAAU,CAAC,IAAI,CAAC,2BAA2B,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;oBACzD,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YACzC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3D,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAE,CAAC;YACvC,UAAU,CAAC,IAAI,CACb,sBAAsB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,QAAQ,GAAG,CAAC,QAAQ,wBAAwB,MAAM,CAAC,IAAI,oCAAoC,CAC9L,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,UAAU,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
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.7.1",
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
+ ```