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