@beignet/cli 0.0.3 → 0.0.5

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.
Files changed (138) hide show
  1. package/CHANGELOG.md +219 -0
  2. package/README.md +379 -61
  3. package/dist/ansi.d.ts +10 -0
  4. package/dist/ansi.d.ts.map +1 -0
  5. package/dist/ansi.js +20 -0
  6. package/dist/ansi.js.map +1 -0
  7. package/dist/choices.d.ts +49 -0
  8. package/dist/choices.d.ts.map +1 -0
  9. package/dist/choices.js +53 -0
  10. package/dist/choices.js.map +1 -0
  11. package/dist/completion.d.ts +47 -0
  12. package/dist/completion.d.ts.map +1 -0
  13. package/dist/completion.js +123 -0
  14. package/dist/completion.js.map +1 -0
  15. package/dist/config.d.ts +8 -0
  16. package/dist/config.d.ts.map +1 -1
  17. package/dist/config.js +8 -0
  18. package/dist/config.js.map +1 -1
  19. package/dist/create-prompts.d.ts +41 -0
  20. package/dist/create-prompts.d.ts.map +1 -0
  21. package/dist/create-prompts.js +78 -0
  22. package/dist/create-prompts.js.map +1 -0
  23. package/dist/create.d.ts +10 -5
  24. package/dist/create.d.ts.map +1 -1
  25. package/dist/create.js +28 -47
  26. package/dist/create.js.map +1 -1
  27. package/dist/db.d.ts +1 -0
  28. package/dist/db.d.ts.map +1 -1
  29. package/dist/db.js +37 -2
  30. package/dist/db.js.map +1 -1
  31. package/dist/github-annotations.d.ts +18 -0
  32. package/dist/github-annotations.d.ts.map +1 -0
  33. package/dist/github-annotations.js +22 -0
  34. package/dist/github-annotations.js.map +1 -0
  35. package/dist/index.d.ts +1 -9
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +665 -603
  38. package/dist/index.js.map +1 -1
  39. package/dist/inspect.d.ts +21 -2
  40. package/dist/inspect.d.ts.map +1 -1
  41. package/dist/inspect.js +1938 -131
  42. package/dist/inspect.js.map +1 -1
  43. package/dist/lib.d.ts +20 -0
  44. package/dist/lib.d.ts.map +1 -0
  45. package/dist/lib.js +17 -0
  46. package/dist/lib.js.map +1 -0
  47. package/dist/lint.d.ts +10 -1
  48. package/dist/lint.d.ts.map +1 -1
  49. package/dist/lint.js +340 -33
  50. package/dist/lint.js.map +1 -1
  51. package/dist/make.d.ts +20 -3
  52. package/dist/make.d.ts.map +1 -1
  53. package/dist/make.js +1896 -382
  54. package/dist/make.js.map +1 -1
  55. package/dist/outbox.d.ts +24 -0
  56. package/dist/outbox.d.ts.map +1 -0
  57. package/dist/outbox.js +138 -0
  58. package/dist/outbox.js.map +1 -0
  59. package/dist/schedule.d.ts +36 -0
  60. package/dist/schedule.d.ts.map +1 -0
  61. package/dist/schedule.js +155 -0
  62. package/dist/schedule.js.map +1 -0
  63. package/dist/task.d.ts +26 -0
  64. package/dist/task.d.ts.map +1 -0
  65. package/dist/task.js +106 -0
  66. package/dist/task.js.map +1 -0
  67. package/dist/templates/base.d.ts +13 -0
  68. package/dist/templates/base.d.ts.map +1 -0
  69. package/dist/templates/base.js +300 -0
  70. package/dist/templates/base.js.map +1 -0
  71. package/dist/templates/db.d.ts +14 -0
  72. package/dist/templates/db.d.ts.map +1 -0
  73. package/dist/templates/db.js +962 -0
  74. package/dist/templates/db.js.map +1 -0
  75. package/dist/templates/index.d.ts +14 -0
  76. package/dist/templates/index.d.ts.map +1 -0
  77. package/dist/templates/index.js +123 -0
  78. package/dist/templates/index.js.map +1 -0
  79. package/dist/templates/server.d.ts +26 -0
  80. package/dist/templates/server.d.ts.map +1 -0
  81. package/dist/templates/server.js +520 -0
  82. package/dist/templates/server.js.map +1 -0
  83. package/dist/templates/shadcn.d.ts +5 -0
  84. package/dist/templates/shadcn.d.ts.map +1 -0
  85. package/dist/templates/shadcn.js +555 -0
  86. package/dist/templates/shadcn.js.map +1 -0
  87. package/dist/templates/shared.d.ts +49 -0
  88. package/dist/templates/shared.d.ts.map +1 -0
  89. package/dist/templates/shared.js +57 -0
  90. package/dist/templates/shared.js.map +1 -0
  91. package/dist/templates/shell.d.ts +5 -0
  92. package/dist/templates/shell.d.ts.map +1 -0
  93. package/dist/templates/shell.js +1190 -0
  94. package/dist/templates/shell.js.map +1 -0
  95. package/dist/templates/todos.d.ts +17 -0
  96. package/dist/templates/todos.d.ts.map +1 -0
  97. package/dist/templates/todos.js +607 -0
  98. package/dist/templates/todos.js.map +1 -0
  99. package/dist/version.d.ts +8 -0
  100. package/dist/version.d.ts.map +1 -0
  101. package/dist/version.js +18 -0
  102. package/dist/version.js.map +1 -0
  103. package/package.json +9 -8
  104. package/src/ansi.ts +30 -0
  105. package/src/choices.ts +83 -0
  106. package/src/completion.ts +169 -0
  107. package/src/config.ts +16 -0
  108. package/src/create-prompts.ts +114 -0
  109. package/src/create.ts +40 -64
  110. package/src/db.ts +60 -4
  111. package/src/github-annotations.ts +37 -0
  112. package/src/index.ts +1075 -817
  113. package/src/inspect.ts +2859 -115
  114. package/src/lib.ts +45 -0
  115. package/src/lint.ts +493 -39
  116. package/src/make.ts +2389 -406
  117. package/src/outbox.ts +249 -0
  118. package/src/schedule.ts +272 -0
  119. package/src/task.ts +169 -0
  120. package/src/templates/base.ts +377 -0
  121. package/src/templates/db.ts +963 -0
  122. package/src/templates/index.ts +148 -0
  123. package/src/templates/server.ts +528 -0
  124. package/src/templates/shadcn.ts +570 -0
  125. package/src/templates/shared.ts +90 -0
  126. package/src/templates/shell.ts +1219 -0
  127. package/src/templates/todos.ts +607 -0
  128. package/src/version.ts +20 -0
  129. package/dist/create-bin.d.ts +0 -3
  130. package/dist/create-bin.d.ts.map +0 -1
  131. package/dist/create-bin.js +0 -9
  132. package/dist/create-bin.js.map +0 -1
  133. package/dist/templates.d.ts +0 -55
  134. package/dist/templates.d.ts.map +0 -1
  135. package/dist/templates.js +0 -3520
  136. package/dist/templates.js.map +0 -1
  137. package/src/create-bin.ts +0 -11
  138. package/src/templates.ts +0 -3774
@@ -0,0 +1,962 @@
1
+ // The starter ships its initial Drizzle migration inside the template so the
2
+ // first run is `db migrate` with no generate step. `dbSchema` and the
3
+ // `starterMigration*` files below pair together — regenerate together.
4
+ //
5
+ // To regenerate: scaffold a scratch app with `dbSchema` as
6
+ // infra/db/schema/index.ts plus `drizzleConfig` as drizzle.config.ts, run
7
+ // `drizzle-kit generate --name starter` with the drizzle-kit version pinned in
8
+ // externalVersions, then paste drizzle/0000_starter.sql,
9
+ // drizzle/meta/_journal.json, and drizzle/meta/0000_snapshot.json back here
10
+ // verbatim.
11
+ const files = {
12
+ drizzleConfig: `export default {
13
+ schema: "./infra/db/schema/index.ts",
14
+ out: "./drizzle",
15
+ dialect: "sqlite",
16
+ dbCredentials: {
17
+ url: process.env.TURSO_DB_URL ?? "file:local.db",
18
+ authToken: process.env.TURSO_DB_AUTH_TOKEN,
19
+ },
20
+ };
21
+ `,
22
+ dbSchema: `import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
23
+
24
+ export const user = sqliteTable("user", {
25
+ id: text("id").primaryKey(),
26
+ name: text("name").notNull(),
27
+ email: text("email").notNull().unique(),
28
+ emailVerified: integer("email_verified", { mode: "boolean" })
29
+ .notNull()
30
+ .default(false),
31
+ image: text("image"),
32
+ createdAt: integer("created_at", { mode: "timestamp" }).notNull(),
33
+ updatedAt: integer("updated_at", { mode: "timestamp" }).notNull(),
34
+ });
35
+
36
+ export const session = sqliteTable("session", {
37
+ id: text("id").primaryKey(),
38
+ expiresAt: integer("expires_at", { mode: "timestamp" }).notNull(),
39
+ token: text("token").notNull().unique(),
40
+ createdAt: integer("created_at", { mode: "timestamp" }).notNull(),
41
+ updatedAt: integer("updated_at", { mode: "timestamp" }).notNull(),
42
+ ipAddress: text("ip_address"),
43
+ userAgent: text("user_agent"),
44
+ userId: text("user_id")
45
+ .notNull()
46
+ .references(() => user.id, { onDelete: "cascade" }),
47
+ });
48
+
49
+ export const account = sqliteTable("account", {
50
+ id: text("id").primaryKey(),
51
+ accountId: text("account_id").notNull(),
52
+ providerId: text("provider_id").notNull(),
53
+ userId: text("user_id")
54
+ .notNull()
55
+ .references(() => user.id, { onDelete: "cascade" }),
56
+ accessToken: text("access_token"),
57
+ refreshToken: text("refresh_token"),
58
+ idToken: text("id_token"),
59
+ accessTokenExpiresAt: integer("access_token_expires_at", {
60
+ mode: "timestamp",
61
+ }),
62
+ refreshTokenExpiresAt: integer("refresh_token_expires_at", {
63
+ mode: "timestamp",
64
+ }),
65
+ scope: text("scope"),
66
+ password: text("password"),
67
+ createdAt: integer("created_at", { mode: "timestamp" }).notNull(),
68
+ updatedAt: integer("updated_at", { mode: "timestamp" }).notNull(),
69
+ });
70
+
71
+ export const verification = sqliteTable("verification", {
72
+ id: text("id").primaryKey(),
73
+ identifier: text("identifier").notNull(),
74
+ value: text("value").notNull(),
75
+ expiresAt: integer("expires_at", { mode: "timestamp" }).notNull(),
76
+ createdAt: integer("created_at", { mode: "timestamp" }),
77
+ updatedAt: integer("updated_at", { mode: "timestamp" }),
78
+ });
79
+
80
+ export const todos = sqliteTable(
81
+ "todos",
82
+ {
83
+ id: text("id").primaryKey(),
84
+ userId: text("user_id")
85
+ .notNull()
86
+ .references(() => user.id, { onDelete: "cascade" }),
87
+ title: text("title").notNull(),
88
+ completed: integer("completed", { mode: "boolean" })
89
+ .notNull()
90
+ .default(false),
91
+ createdAt: text("created_at").notNull(),
92
+ },
93
+ (table) => ({
94
+ userIdx: index("todos_user_idx").on(table.userId, table.createdAt),
95
+ }),
96
+ );
97
+
98
+ export const idempotencyRecords = sqliteTable(
99
+ "idempotency_records",
100
+ {
101
+ storageKey: text("storage_key").primaryKey(),
102
+ namespace: text("namespace").notNull(),
103
+ idempotencyKey: text("idempotency_key").notNull(),
104
+ scopeKey: text("scope_key").notNull(),
105
+ fingerprint: text("fingerprint").notNull(),
106
+ status: text("status", { enum: ["in-progress", "completed"] }).notNull(),
107
+ resultJson: text("result_json"),
108
+ reservedAt: text("reserved_at").notNull(),
109
+ completedAt: text("completed_at"),
110
+ expiresAt: text("expires_at"),
111
+ updatedAt: text("updated_at").notNull(),
112
+ },
113
+ (table) => ({
114
+ lookupIdx: index("idempotency_records_lookup_idx").on(
115
+ table.namespace,
116
+ table.scopeKey,
117
+ table.idempotencyKey,
118
+ ),
119
+ expiresIdx: index("idempotency_records_expires_idx").on(table.expiresAt),
120
+ }),
121
+ );
122
+ `,
123
+ drizzleTodoRepository: `import type { beignetServerOnly } from "@beignet/core/server-only";
124
+ import { offsetPageResult } from "@beignet/core/pagination";
125
+ import type { DrizzleTursoDatabase } from "@beignet/provider-drizzle-turso";
126
+ import { count, desc, eq } from "drizzle-orm";
127
+ import type {
128
+ NewTodo,
129
+ TodoRepository,
130
+ UpdateTodoData,
131
+ } from "@/features/todos/ports";
132
+ import type { Todo } from "@/features/todos/schemas";
133
+ import * as schema from "@/infra/db/schema";
134
+
135
+ type TodoRow = typeof schema.todos.$inferSelect;
136
+
137
+ function toTodo(row: TodoRow): Todo {
138
+ return {
139
+ id: row.id,
140
+ userId: row.userId,
141
+ title: row.title,
142
+ completed: row.completed,
143
+ createdAt: row.createdAt,
144
+ };
145
+ }
146
+
147
+ export function createDrizzleTodoRepository(
148
+ db: DrizzleTursoDatabase<typeof schema>,
149
+ ): TodoRepository {
150
+ return {
151
+ async list(userId, page) {
152
+ const rows = await db
153
+ .select()
154
+ .from(schema.todos)
155
+ .where(eq(schema.todos.userId, userId))
156
+ .orderBy(desc(schema.todos.createdAt))
157
+ .limit(page.limit)
158
+ .offset(page.offset);
159
+ const [{ total }] = await db
160
+ .select({ total: count() })
161
+ .from(schema.todos)
162
+ .where(eq(schema.todos.userId, userId));
163
+
164
+ return offsetPageResult(rows.map(toTodo), page, total);
165
+ },
166
+ async findById(id: string) {
167
+ const [row] = await db
168
+ .select()
169
+ .from(schema.todos)
170
+ .where(eq(schema.todos.id, id))
171
+ .limit(1);
172
+
173
+ return row ? toTodo(row) : null;
174
+ },
175
+ async create(input: NewTodo) {
176
+ const todo = {
177
+ id: crypto.randomUUID(),
178
+ userId: input.userId,
179
+ title: input.title,
180
+ completed: false,
181
+ createdAt: new Date().toISOString(),
182
+ };
183
+ const [row] = await db.insert(schema.todos).values(todo).returning();
184
+
185
+ if (!row) {
186
+ throw new Error("Failed to create todo");
187
+ }
188
+
189
+ return toTodo(row);
190
+ },
191
+ async update(id: string, input: UpdateTodoData) {
192
+ const [row] = await db
193
+ .update(schema.todos)
194
+ .set({ completed: input.completed })
195
+ .where(eq(schema.todos.id, id))
196
+ .returning();
197
+
198
+ if (!row) {
199
+ throw new Error(\`Failed to update todo \${id}\`);
200
+ }
201
+
202
+ return toTodo(row);
203
+ },
204
+ async delete(id: string) {
205
+ await db.delete(schema.todos).where(eq(schema.todos.id, id));
206
+ },
207
+ };
208
+ }
209
+ `,
210
+ dbRepositories: `import type { DrizzleTursoDatabase } from "@beignet/provider-drizzle-turso";
211
+ import { createDrizzleTodoRepository } from "@/infra/todos/drizzle-todo-repository";
212
+ import type { AppTransactionPorts } from "@/ports";
213
+ import * as schema from "./schema";
214
+
215
+ export function createRepositories(
216
+ db: DrizzleTursoDatabase<typeof schema>,
217
+ ): Omit<AppTransactionPorts, "idempotency"> {
218
+ return {
219
+ todos: createDrizzleTodoRepository(db),
220
+ };
221
+ }
222
+ `,
223
+ dbProvider: `import type { beignetServerOnly } from "@beignet/core/server-only";
224
+ import { createProvider } from "@beignet/core/providers";
225
+ import {
226
+ createDrizzleTursoIdempotencyPort,
227
+ createDrizzleTursoUnitOfWork,
228
+ type DbPort,
229
+ } from "@beignet/provider-drizzle-turso";
230
+ import type { AppPorts } from "@/ports";
231
+ import { createRepositories } from "./repositories";
232
+ import type * as schema from "./schema";
233
+
234
+ export const starterDatabaseProvider = createProvider<{
235
+ db: DbPort<typeof schema>;
236
+ }>()({
237
+ name: "starter-database",
238
+
239
+ async setup({ ports }) {
240
+ const dbPort = ports.db;
241
+ if (!dbPort) {
242
+ throw new Error(
243
+ "starterDatabaseProvider requires a db port. Register createDrizzleTursoProvider({ schema }) before it.",
244
+ );
245
+ }
246
+
247
+ const repositories = createRepositories(dbPort.db);
248
+ const idempotency = createDrizzleTursoIdempotencyPort(dbPort.db);
249
+
250
+ const providedPorts: Pick<AppPorts, "idempotency" | "todos" | "uow"> = {
251
+ ...repositories,
252
+ idempotency,
253
+ uow: createDrizzleTursoUnitOfWork({
254
+ db: dbPort.db,
255
+ createTransactionPorts: (tx) => ({
256
+ ...createRepositories(tx),
257
+ idempotency: createDrizzleTursoIdempotencyPort(tx),
258
+ }),
259
+ }),
260
+ };
261
+
262
+ return {
263
+ ports: providedPorts,
264
+ async start() {
265
+ // Next.js collects page data in parallel workers that all boot this
266
+ // provider; wait for SQLite locks instead of failing with
267
+ // SQLITE_BUSY.
268
+ await dbPort.client.execute("PRAGMA busy_timeout = 5000");
269
+ },
270
+ };
271
+ },
272
+ });
273
+ `,
274
+ dbReset: `import { createClient } from "@libsql/client";
275
+ import { drizzle } from "drizzle-orm/libsql";
276
+ import { migrate } from "drizzle-orm/libsql/migrator";
277
+ import { env } from "@/lib/env";
278
+
279
+ if (
280
+ !env.TURSO_DB_URL.startsWith("file:") &&
281
+ process.env.BEIGNET_ALLOW_DATABASE_RESET !== "true"
282
+ ) {
283
+ throw new Error(
284
+ "Refusing to reset a non-local database. Set BEIGNET_ALLOW_DATABASE_RESET=true if this is intentional.",
285
+ );
286
+ }
287
+
288
+ const tables = [
289
+ "verification",
290
+ "account",
291
+ "session",
292
+ "todos",
293
+ "user",
294
+ "idempotency_records",
295
+ "__drizzle_migrations",
296
+ ] as const;
297
+
298
+ const client = createClient({
299
+ url: env.TURSO_DB_URL,
300
+ authToken: env.TURSO_DB_AUTH_TOKEN,
301
+ });
302
+
303
+ try {
304
+ await client.execute("PRAGMA foreign_keys = OFF");
305
+ try {
306
+ for (const table of tables) {
307
+ await client.execute(\`DROP TABLE IF EXISTS \${table}\`);
308
+ }
309
+ } finally {
310
+ await client.execute("PRAGMA foreign_keys = ON");
311
+ }
312
+
313
+ await migrate(drizzle(client), { migrationsFolder: "drizzle" });
314
+ console.log("Database reset.");
315
+ } finally {
316
+ client.close();
317
+ }
318
+ `,
319
+ dbTestDatabase: `import { existsSync, unlinkSync } from "node:fs";
320
+ import { tmpdir } from "node:os";
321
+ import { join } from "node:path";
322
+ import { type Client, createClient } from "@libsql/client";
323
+ import { drizzle, type LibSQLDatabase } from "drizzle-orm/libsql";
324
+ import { migrate } from "drizzle-orm/libsql/migrator";
325
+ import { createRepositories } from "./repositories";
326
+ import * as schema from "./schema";
327
+
328
+ export type TestDatabase = {
329
+ client: Client;
330
+ db: LibSQLDatabase<typeof schema>;
331
+ repositories: ReturnType<typeof createRepositories>;
332
+ path: string;
333
+ close(): Promise<void>;
334
+ };
335
+
336
+ export async function createTestDatabase(): Promise<TestDatabase> {
337
+ const path = join(tmpdir(), "beignet-test-" + crypto.randomUUID() + ".db");
338
+ const client = createClient({ url: "file:" + path });
339
+ const db = drizzle(client, { schema });
340
+ await migrate(db, { migrationsFolder: "drizzle" });
341
+
342
+ return {
343
+ client,
344
+ db,
345
+ repositories: createRepositories(db),
346
+ path,
347
+ close: async () => {
348
+ client.close();
349
+ if (existsSync(path)) {
350
+ unlinkSync(path);
351
+ }
352
+ },
353
+ };
354
+ }
355
+ `,
356
+ // Generated by drizzle-kit generate --name starter against dbSchema above.
357
+ starterMigrationSql: `CREATE TABLE \`account\` (
358
+ \`id\` text PRIMARY KEY NOT NULL,
359
+ \`account_id\` text NOT NULL,
360
+ \`provider_id\` text NOT NULL,
361
+ \`user_id\` text NOT NULL,
362
+ \`access_token\` text,
363
+ \`refresh_token\` text,
364
+ \`id_token\` text,
365
+ \`access_token_expires_at\` integer,
366
+ \`refresh_token_expires_at\` integer,
367
+ \`scope\` text,
368
+ \`password\` text,
369
+ \`created_at\` integer NOT NULL,
370
+ \`updated_at\` integer NOT NULL,
371
+ FOREIGN KEY (\`user_id\`) REFERENCES \`user\`(\`id\`) ON UPDATE no action ON DELETE cascade
372
+ );
373
+ --> statement-breakpoint
374
+ CREATE TABLE \`idempotency_records\` (
375
+ \`storage_key\` text PRIMARY KEY NOT NULL,
376
+ \`namespace\` text NOT NULL,
377
+ \`idempotency_key\` text NOT NULL,
378
+ \`scope_key\` text NOT NULL,
379
+ \`fingerprint\` text NOT NULL,
380
+ \`status\` text NOT NULL,
381
+ \`result_json\` text,
382
+ \`reserved_at\` text NOT NULL,
383
+ \`completed_at\` text,
384
+ \`expires_at\` text,
385
+ \`updated_at\` text NOT NULL
386
+ );
387
+ --> statement-breakpoint
388
+ CREATE INDEX \`idempotency_records_lookup_idx\` ON \`idempotency_records\` (\`namespace\`,\`scope_key\`,\`idempotency_key\`);--> statement-breakpoint
389
+ CREATE INDEX \`idempotency_records_expires_idx\` ON \`idempotency_records\` (\`expires_at\`);--> statement-breakpoint
390
+ CREATE TABLE \`session\` (
391
+ \`id\` text PRIMARY KEY NOT NULL,
392
+ \`expires_at\` integer NOT NULL,
393
+ \`token\` text NOT NULL,
394
+ \`created_at\` integer NOT NULL,
395
+ \`updated_at\` integer NOT NULL,
396
+ \`ip_address\` text,
397
+ \`user_agent\` text,
398
+ \`user_id\` text NOT NULL,
399
+ FOREIGN KEY (\`user_id\`) REFERENCES \`user\`(\`id\`) ON UPDATE no action ON DELETE cascade
400
+ );
401
+ --> statement-breakpoint
402
+ CREATE UNIQUE INDEX \`session_token_unique\` ON \`session\` (\`token\`);--> statement-breakpoint
403
+ CREATE TABLE \`todos\` (
404
+ \`id\` text PRIMARY KEY NOT NULL,
405
+ \`user_id\` text NOT NULL,
406
+ \`title\` text NOT NULL,
407
+ \`completed\` integer DEFAULT false NOT NULL,
408
+ \`created_at\` text NOT NULL,
409
+ FOREIGN KEY (\`user_id\`) REFERENCES \`user\`(\`id\`) ON UPDATE no action ON DELETE cascade
410
+ );
411
+ --> statement-breakpoint
412
+ CREATE INDEX \`todos_user_idx\` ON \`todos\` (\`user_id\`,\`created_at\`);--> statement-breakpoint
413
+ CREATE TABLE \`user\` (
414
+ \`id\` text PRIMARY KEY NOT NULL,
415
+ \`name\` text NOT NULL,
416
+ \`email\` text NOT NULL,
417
+ \`email_verified\` integer DEFAULT false NOT NULL,
418
+ \`image\` text,
419
+ \`created_at\` integer NOT NULL,
420
+ \`updated_at\` integer NOT NULL
421
+ );
422
+ --> statement-breakpoint
423
+ CREATE UNIQUE INDEX \`user_email_unique\` ON \`user\` (\`email\`);--> statement-breakpoint
424
+ CREATE TABLE \`verification\` (
425
+ \`id\` text PRIMARY KEY NOT NULL,
426
+ \`identifier\` text NOT NULL,
427
+ \`value\` text NOT NULL,
428
+ \`expires_at\` integer NOT NULL,
429
+ \`created_at\` integer,
430
+ \`updated_at\` integer
431
+ );
432
+ `,
433
+ starterMigrationJournal: `{
434
+ "version": "7",
435
+ "dialect": "sqlite",
436
+ "entries": [
437
+ {
438
+ "idx": 0,
439
+ "version": "6",
440
+ "when": 1781185557868,
441
+ "tag": "0000_starter",
442
+ "breakpoints": true
443
+ }
444
+ ]
445
+ }`,
446
+ starterMigrationSnapshot: `{
447
+ "version": "6",
448
+ "dialect": "sqlite",
449
+ "id": "5131bbf1-cff0-42de-a5f4-298187fdafd1",
450
+ "prevId": "00000000-0000-0000-0000-000000000000",
451
+ "tables": {
452
+ "account": {
453
+ "name": "account",
454
+ "columns": {
455
+ "id": {
456
+ "name": "id",
457
+ "type": "text",
458
+ "primaryKey": true,
459
+ "notNull": true,
460
+ "autoincrement": false
461
+ },
462
+ "account_id": {
463
+ "name": "account_id",
464
+ "type": "text",
465
+ "primaryKey": false,
466
+ "notNull": true,
467
+ "autoincrement": false
468
+ },
469
+ "provider_id": {
470
+ "name": "provider_id",
471
+ "type": "text",
472
+ "primaryKey": false,
473
+ "notNull": true,
474
+ "autoincrement": false
475
+ },
476
+ "user_id": {
477
+ "name": "user_id",
478
+ "type": "text",
479
+ "primaryKey": false,
480
+ "notNull": true,
481
+ "autoincrement": false
482
+ },
483
+ "access_token": {
484
+ "name": "access_token",
485
+ "type": "text",
486
+ "primaryKey": false,
487
+ "notNull": false,
488
+ "autoincrement": false
489
+ },
490
+ "refresh_token": {
491
+ "name": "refresh_token",
492
+ "type": "text",
493
+ "primaryKey": false,
494
+ "notNull": false,
495
+ "autoincrement": false
496
+ },
497
+ "id_token": {
498
+ "name": "id_token",
499
+ "type": "text",
500
+ "primaryKey": false,
501
+ "notNull": false,
502
+ "autoincrement": false
503
+ },
504
+ "access_token_expires_at": {
505
+ "name": "access_token_expires_at",
506
+ "type": "integer",
507
+ "primaryKey": false,
508
+ "notNull": false,
509
+ "autoincrement": false
510
+ },
511
+ "refresh_token_expires_at": {
512
+ "name": "refresh_token_expires_at",
513
+ "type": "integer",
514
+ "primaryKey": false,
515
+ "notNull": false,
516
+ "autoincrement": false
517
+ },
518
+ "scope": {
519
+ "name": "scope",
520
+ "type": "text",
521
+ "primaryKey": false,
522
+ "notNull": false,
523
+ "autoincrement": false
524
+ },
525
+ "password": {
526
+ "name": "password",
527
+ "type": "text",
528
+ "primaryKey": false,
529
+ "notNull": false,
530
+ "autoincrement": false
531
+ },
532
+ "created_at": {
533
+ "name": "created_at",
534
+ "type": "integer",
535
+ "primaryKey": false,
536
+ "notNull": true,
537
+ "autoincrement": false
538
+ },
539
+ "updated_at": {
540
+ "name": "updated_at",
541
+ "type": "integer",
542
+ "primaryKey": false,
543
+ "notNull": true,
544
+ "autoincrement": false
545
+ }
546
+ },
547
+ "indexes": {},
548
+ "foreignKeys": {
549
+ "account_user_id_user_id_fk": {
550
+ "name": "account_user_id_user_id_fk",
551
+ "tableFrom": "account",
552
+ "tableTo": "user",
553
+ "columnsFrom": [
554
+ "user_id"
555
+ ],
556
+ "columnsTo": [
557
+ "id"
558
+ ],
559
+ "onDelete": "cascade",
560
+ "onUpdate": "no action"
561
+ }
562
+ },
563
+ "compositePrimaryKeys": {},
564
+ "uniqueConstraints": {},
565
+ "checkConstraints": {}
566
+ },
567
+ "idempotency_records": {
568
+ "name": "idempotency_records",
569
+ "columns": {
570
+ "storage_key": {
571
+ "name": "storage_key",
572
+ "type": "text",
573
+ "primaryKey": true,
574
+ "notNull": true,
575
+ "autoincrement": false
576
+ },
577
+ "namespace": {
578
+ "name": "namespace",
579
+ "type": "text",
580
+ "primaryKey": false,
581
+ "notNull": true,
582
+ "autoincrement": false
583
+ },
584
+ "idempotency_key": {
585
+ "name": "idempotency_key",
586
+ "type": "text",
587
+ "primaryKey": false,
588
+ "notNull": true,
589
+ "autoincrement": false
590
+ },
591
+ "scope_key": {
592
+ "name": "scope_key",
593
+ "type": "text",
594
+ "primaryKey": false,
595
+ "notNull": true,
596
+ "autoincrement": false
597
+ },
598
+ "fingerprint": {
599
+ "name": "fingerprint",
600
+ "type": "text",
601
+ "primaryKey": false,
602
+ "notNull": true,
603
+ "autoincrement": false
604
+ },
605
+ "status": {
606
+ "name": "status",
607
+ "type": "text",
608
+ "primaryKey": false,
609
+ "notNull": true,
610
+ "autoincrement": false
611
+ },
612
+ "result_json": {
613
+ "name": "result_json",
614
+ "type": "text",
615
+ "primaryKey": false,
616
+ "notNull": false,
617
+ "autoincrement": false
618
+ },
619
+ "reserved_at": {
620
+ "name": "reserved_at",
621
+ "type": "text",
622
+ "primaryKey": false,
623
+ "notNull": true,
624
+ "autoincrement": false
625
+ },
626
+ "completed_at": {
627
+ "name": "completed_at",
628
+ "type": "text",
629
+ "primaryKey": false,
630
+ "notNull": false,
631
+ "autoincrement": false
632
+ },
633
+ "expires_at": {
634
+ "name": "expires_at",
635
+ "type": "text",
636
+ "primaryKey": false,
637
+ "notNull": false,
638
+ "autoincrement": false
639
+ },
640
+ "updated_at": {
641
+ "name": "updated_at",
642
+ "type": "text",
643
+ "primaryKey": false,
644
+ "notNull": true,
645
+ "autoincrement": false
646
+ }
647
+ },
648
+ "indexes": {
649
+ "idempotency_records_lookup_idx": {
650
+ "name": "idempotency_records_lookup_idx",
651
+ "columns": [
652
+ "namespace",
653
+ "scope_key",
654
+ "idempotency_key"
655
+ ],
656
+ "isUnique": false
657
+ },
658
+ "idempotency_records_expires_idx": {
659
+ "name": "idempotency_records_expires_idx",
660
+ "columns": [
661
+ "expires_at"
662
+ ],
663
+ "isUnique": false
664
+ }
665
+ },
666
+ "foreignKeys": {},
667
+ "compositePrimaryKeys": {},
668
+ "uniqueConstraints": {},
669
+ "checkConstraints": {}
670
+ },
671
+ "session": {
672
+ "name": "session",
673
+ "columns": {
674
+ "id": {
675
+ "name": "id",
676
+ "type": "text",
677
+ "primaryKey": true,
678
+ "notNull": true,
679
+ "autoincrement": false
680
+ },
681
+ "expires_at": {
682
+ "name": "expires_at",
683
+ "type": "integer",
684
+ "primaryKey": false,
685
+ "notNull": true,
686
+ "autoincrement": false
687
+ },
688
+ "token": {
689
+ "name": "token",
690
+ "type": "text",
691
+ "primaryKey": false,
692
+ "notNull": true,
693
+ "autoincrement": false
694
+ },
695
+ "created_at": {
696
+ "name": "created_at",
697
+ "type": "integer",
698
+ "primaryKey": false,
699
+ "notNull": true,
700
+ "autoincrement": false
701
+ },
702
+ "updated_at": {
703
+ "name": "updated_at",
704
+ "type": "integer",
705
+ "primaryKey": false,
706
+ "notNull": true,
707
+ "autoincrement": false
708
+ },
709
+ "ip_address": {
710
+ "name": "ip_address",
711
+ "type": "text",
712
+ "primaryKey": false,
713
+ "notNull": false,
714
+ "autoincrement": false
715
+ },
716
+ "user_agent": {
717
+ "name": "user_agent",
718
+ "type": "text",
719
+ "primaryKey": false,
720
+ "notNull": false,
721
+ "autoincrement": false
722
+ },
723
+ "user_id": {
724
+ "name": "user_id",
725
+ "type": "text",
726
+ "primaryKey": false,
727
+ "notNull": true,
728
+ "autoincrement": false
729
+ }
730
+ },
731
+ "indexes": {
732
+ "session_token_unique": {
733
+ "name": "session_token_unique",
734
+ "columns": [
735
+ "token"
736
+ ],
737
+ "isUnique": true
738
+ }
739
+ },
740
+ "foreignKeys": {
741
+ "session_user_id_user_id_fk": {
742
+ "name": "session_user_id_user_id_fk",
743
+ "tableFrom": "session",
744
+ "tableTo": "user",
745
+ "columnsFrom": [
746
+ "user_id"
747
+ ],
748
+ "columnsTo": [
749
+ "id"
750
+ ],
751
+ "onDelete": "cascade",
752
+ "onUpdate": "no action"
753
+ }
754
+ },
755
+ "compositePrimaryKeys": {},
756
+ "uniqueConstraints": {},
757
+ "checkConstraints": {}
758
+ },
759
+ "todos": {
760
+ "name": "todos",
761
+ "columns": {
762
+ "id": {
763
+ "name": "id",
764
+ "type": "text",
765
+ "primaryKey": true,
766
+ "notNull": true,
767
+ "autoincrement": false
768
+ },
769
+ "user_id": {
770
+ "name": "user_id",
771
+ "type": "text",
772
+ "primaryKey": false,
773
+ "notNull": true,
774
+ "autoincrement": false
775
+ },
776
+ "title": {
777
+ "name": "title",
778
+ "type": "text",
779
+ "primaryKey": false,
780
+ "notNull": true,
781
+ "autoincrement": false
782
+ },
783
+ "completed": {
784
+ "name": "completed",
785
+ "type": "integer",
786
+ "primaryKey": false,
787
+ "notNull": true,
788
+ "autoincrement": false,
789
+ "default": false
790
+ },
791
+ "created_at": {
792
+ "name": "created_at",
793
+ "type": "text",
794
+ "primaryKey": false,
795
+ "notNull": true,
796
+ "autoincrement": false
797
+ }
798
+ },
799
+ "indexes": {
800
+ "todos_user_idx": {
801
+ "name": "todos_user_idx",
802
+ "columns": [
803
+ "user_id",
804
+ "created_at"
805
+ ],
806
+ "isUnique": false
807
+ }
808
+ },
809
+ "foreignKeys": {
810
+ "todos_user_id_user_id_fk": {
811
+ "name": "todos_user_id_user_id_fk",
812
+ "tableFrom": "todos",
813
+ "tableTo": "user",
814
+ "columnsFrom": [
815
+ "user_id"
816
+ ],
817
+ "columnsTo": [
818
+ "id"
819
+ ],
820
+ "onDelete": "cascade",
821
+ "onUpdate": "no action"
822
+ }
823
+ },
824
+ "compositePrimaryKeys": {},
825
+ "uniqueConstraints": {},
826
+ "checkConstraints": {}
827
+ },
828
+ "user": {
829
+ "name": "user",
830
+ "columns": {
831
+ "id": {
832
+ "name": "id",
833
+ "type": "text",
834
+ "primaryKey": true,
835
+ "notNull": true,
836
+ "autoincrement": false
837
+ },
838
+ "name": {
839
+ "name": "name",
840
+ "type": "text",
841
+ "primaryKey": false,
842
+ "notNull": true,
843
+ "autoincrement": false
844
+ },
845
+ "email": {
846
+ "name": "email",
847
+ "type": "text",
848
+ "primaryKey": false,
849
+ "notNull": true,
850
+ "autoincrement": false
851
+ },
852
+ "email_verified": {
853
+ "name": "email_verified",
854
+ "type": "integer",
855
+ "primaryKey": false,
856
+ "notNull": true,
857
+ "autoincrement": false,
858
+ "default": false
859
+ },
860
+ "image": {
861
+ "name": "image",
862
+ "type": "text",
863
+ "primaryKey": false,
864
+ "notNull": false,
865
+ "autoincrement": false
866
+ },
867
+ "created_at": {
868
+ "name": "created_at",
869
+ "type": "integer",
870
+ "primaryKey": false,
871
+ "notNull": true,
872
+ "autoincrement": false
873
+ },
874
+ "updated_at": {
875
+ "name": "updated_at",
876
+ "type": "integer",
877
+ "primaryKey": false,
878
+ "notNull": true,
879
+ "autoincrement": false
880
+ }
881
+ },
882
+ "indexes": {
883
+ "user_email_unique": {
884
+ "name": "user_email_unique",
885
+ "columns": [
886
+ "email"
887
+ ],
888
+ "isUnique": true
889
+ }
890
+ },
891
+ "foreignKeys": {},
892
+ "compositePrimaryKeys": {},
893
+ "uniqueConstraints": {},
894
+ "checkConstraints": {}
895
+ },
896
+ "verification": {
897
+ "name": "verification",
898
+ "columns": {
899
+ "id": {
900
+ "name": "id",
901
+ "type": "text",
902
+ "primaryKey": true,
903
+ "notNull": true,
904
+ "autoincrement": false
905
+ },
906
+ "identifier": {
907
+ "name": "identifier",
908
+ "type": "text",
909
+ "primaryKey": false,
910
+ "notNull": true,
911
+ "autoincrement": false
912
+ },
913
+ "value": {
914
+ "name": "value",
915
+ "type": "text",
916
+ "primaryKey": false,
917
+ "notNull": true,
918
+ "autoincrement": false
919
+ },
920
+ "expires_at": {
921
+ "name": "expires_at",
922
+ "type": "integer",
923
+ "primaryKey": false,
924
+ "notNull": true,
925
+ "autoincrement": false
926
+ },
927
+ "created_at": {
928
+ "name": "created_at",
929
+ "type": "integer",
930
+ "primaryKey": false,
931
+ "notNull": false,
932
+ "autoincrement": false
933
+ },
934
+ "updated_at": {
935
+ "name": "updated_at",
936
+ "type": "integer",
937
+ "primaryKey": false,
938
+ "notNull": false,
939
+ "autoincrement": false
940
+ }
941
+ },
942
+ "indexes": {},
943
+ "foreignKeys": {},
944
+ "compositePrimaryKeys": {},
945
+ "uniqueConstraints": {},
946
+ "checkConstraints": {}
947
+ }
948
+ },
949
+ "views": {},
950
+ "enums": {},
951
+ "_meta": {
952
+ "schemas": {},
953
+ "tables": {},
954
+ "columns": {}
955
+ },
956
+ "internal": {
957
+ "indexes": {}
958
+ }
959
+ }`,
960
+ };
961
+ export { files as dbFiles };
962
+ //# sourceMappingURL=db.js.map