@beignet/cli 0.0.8 → 0.0.10

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 (70) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +68 -67
  3. package/dist/choices.d.ts +32 -3
  4. package/dist/choices.d.ts.map +1 -1
  5. package/dist/choices.js +54 -3
  6. package/dist/choices.js.map +1 -1
  7. package/dist/create-prompts.d.ts +5 -4
  8. package/dist/create-prompts.d.ts.map +1 -1
  9. package/dist/create-prompts.js +22 -4
  10. package/dist/create-prompts.js.map +1 -1
  11. package/dist/create.d.ts +7 -1
  12. package/dist/create.d.ts.map +1 -1
  13. package/dist/create.js +14 -4
  14. package/dist/create.js.map +1 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +25 -6
  17. package/dist/index.js.map +1 -1
  18. package/dist/inspect.js +78 -12
  19. package/dist/inspect.js.map +1 -1
  20. package/dist/make.d.ts +21 -1
  21. package/dist/make.d.ts.map +1 -1
  22. package/dist/make.js +210 -37
  23. package/dist/make.js.map +1 -1
  24. package/dist/templates/base.d.ts.map +1 -1
  25. package/dist/templates/base.js +80 -10
  26. package/dist/templates/base.js.map +1 -1
  27. package/dist/templates/db/index.d.ts +21 -0
  28. package/dist/templates/db/index.d.ts.map +1 -0
  29. package/dist/templates/db/index.js +14 -0
  30. package/dist/templates/db/index.js.map +1 -0
  31. package/dist/templates/db/mysql.d.ts +4 -0
  32. package/dist/templates/db/mysql.d.ts.map +1 -0
  33. package/dist/templates/db/mysql.js +972 -0
  34. package/dist/templates/db/mysql.js.map +1 -0
  35. package/dist/templates/db/postgres.d.ts +4 -0
  36. package/dist/templates/db/postgres.d.ts.map +1 -0
  37. package/dist/templates/db/postgres.js +863 -0
  38. package/dist/templates/db/postgres.js.map +1 -0
  39. package/dist/templates/db/sqlite.d.ts +3 -0
  40. package/dist/templates/db/sqlite.d.ts.map +1 -0
  41. package/dist/templates/db/sqlite.js +878 -0
  42. package/dist/templates/db/sqlite.js.map +1 -0
  43. package/dist/templates/db.js +16 -16
  44. package/dist/templates/index.d.ts +5 -5
  45. package/dist/templates/index.d.ts.map +1 -1
  46. package/dist/templates/index.js +21 -20
  47. package/dist/templates/index.js.map +1 -1
  48. package/dist/templates/server.d.ts +3 -3
  49. package/dist/templates/server.d.ts.map +1 -1
  50. package/dist/templates/server.js +149 -97
  51. package/dist/templates/server.js.map +1 -1
  52. package/dist/templates/shared.d.ts +34 -1
  53. package/dist/templates/shared.d.ts.map +1 -1
  54. package/dist/templates/shared.js +45 -0
  55. package/dist/templates/shared.js.map +1 -1
  56. package/package.json +2 -2
  57. package/src/choices.ts +70 -3
  58. package/src/create-prompts.ts +25 -3
  59. package/src/create.ts +25 -3
  60. package/src/index.ts +29 -5
  61. package/src/inspect.ts +137 -19
  62. package/src/make.ts +265 -34
  63. package/src/templates/base.ts +96 -10
  64. package/src/templates/db/index.ts +34 -0
  65. package/src/templates/db/mysql.ts +976 -0
  66. package/src/templates/db/postgres.ts +867 -0
  67. package/src/templates/{db.ts → db/sqlite.ts} +47 -168
  68. package/src/templates/index.ts +24 -19
  69. package/src/templates/server.ts +161 -97
  70. package/src/templates/shared.ts +90 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/templates/db/sqlite.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,sEAAsE;AACtE,uEAAuE;AACvE,EAAE;AACF,2DAA2D;AAC3D,0EAA0E;AAC1E,+EAA+E;AAC/E,gFAAgF;AAChF,0EAA0E;AAC1E,iEAAiE;AACjE,yEAAyE;AACzE,0EAA0E;AAC1E,yEAAyE;AAIzE,MAAM,KAAK,GAAG;IACZ,aAAa,EAAE;;;;;;;;;CAShB;IACC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2EX;IACC,qBAAqB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsFxB;IACC,cAAc,EAAE;;;;;;;;;;;;CAYjB;IACC,aAAa,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwChB;IACC,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDb;IACC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CV;IACC,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCjB;IACC,oEAAoE;IACpE,kEAAkE;IAClE,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2EtB;IACC,uBAAuB,EAAE;;;;;;;;;;;;EAYzB;IACA,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyZ1B;CACD,CAAC;AAEF,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -14,8 +14,8 @@ const files = {
14
14
  out: "./drizzle",
15
15
  dialect: "sqlite",
16
16
  dbCredentials: {
17
- url: process.env.TURSO_DB_URL ?? "file:local.db",
18
- authToken: process.env.TURSO_DB_AUTH_TOKEN,
17
+ url: process.env.SQLITE_DB_URL ?? "file:local.db",
18
+ authToken: process.env.SQLITE_DB_AUTH_TOKEN,
19
19
  },
20
20
  };
21
21
  `,
@@ -122,7 +122,7 @@ export const idempotencyRecords = sqliteTable(
122
122
  `,
123
123
  drizzleTodoRepository: `import type { beignetServerOnly } from "@beignet/core/server-only";
124
124
  import { offsetPageResult } from "@beignet/core/pagination";
125
- import type { DrizzleTursoDatabase } from "@beignet/provider-drizzle-turso";
125
+ import type { DrizzleSqliteDatabase } from "@beignet/provider-db-drizzle/sqlite";
126
126
  import { count, desc, eq } from "drizzle-orm";
127
127
  import type {
128
128
  NewTodo,
@@ -145,7 +145,7 @@ function toTodo(row: TodoRow): Todo {
145
145
  }
146
146
 
147
147
  export function createDrizzleTodoRepository(
148
- db: DrizzleTursoDatabase<typeof schema>,
148
+ db: DrizzleSqliteDatabase<typeof schema>,
149
149
  ): TodoRepository {
150
150
  return {
151
151
  async list(userId, page) {
@@ -207,13 +207,13 @@ export function createDrizzleTodoRepository(
207
207
  };
208
208
  }
209
209
  `,
210
- dbRepositories: `import type { DrizzleTursoDatabase } from "@beignet/provider-drizzle-turso";
210
+ dbRepositories: `import type { DrizzleSqliteDatabase } from "@beignet/provider-db-drizzle/sqlite";
211
211
  import { createDrizzleTodoRepository } from "@/infra/todos/drizzle-todo-repository";
212
212
  import type { AppTransactionPorts } from "@/ports";
213
213
  import * as schema from "./schema";
214
214
 
215
215
  export function createRepositories(
216
- db: DrizzleTursoDatabase<typeof schema>,
216
+ db: DrizzleSqliteDatabase<typeof schema>,
217
217
  ): Omit<AppTransactionPorts, "idempotency"> {
218
218
  return {
219
219
  todos: createDrizzleTodoRepository(db),
@@ -264,10 +264,10 @@ async function prepare(client: Client): Promise<void> {
264
264
  dbProvider: `import type { beignetServerOnly } from "@beignet/core/server-only";
265
265
  import { createProvider } from "@beignet/core/providers";
266
266
  import {
267
- createDrizzleTursoIdempotencyPort,
268
- createDrizzleTursoUnitOfWork,
267
+ createDrizzleSqliteIdempotencyPort,
268
+ createDrizzleSqliteUnitOfWork,
269
269
  type DbPort,
270
- } from "@beignet/provider-drizzle-turso";
270
+ } from "@beignet/provider-db-drizzle/sqlite";
271
271
  import type { AppPorts } from "@/ports";
272
272
  import { ensureDatabaseReady } from "./database-ready";
273
273
  import { createRepositories } from "./repositories";
@@ -282,21 +282,21 @@ export const starterDatabaseProvider = createProvider<{
282
282
  const dbPort = ports.db;
283
283
  if (!dbPort) {
284
284
  throw new Error(
285
- "starterDatabaseProvider requires a db port. Register createDrizzleTursoProvider({ schema }) before it.",
285
+ "starterDatabaseProvider requires a db port. Register createDrizzleSqliteProvider({ schema }) before it.",
286
286
  );
287
287
  }
288
288
 
289
289
  const repositories = createRepositories(dbPort.db);
290
- const idempotency = createDrizzleTursoIdempotencyPort(dbPort.db);
290
+ const idempotency = createDrizzleSqliteIdempotencyPort(dbPort.db);
291
291
 
292
292
  const providedPorts: Pick<AppPorts, "idempotency" | "todos" | "uow"> = {
293
293
  ...repositories,
294
294
  idempotency,
295
- uow: createDrizzleTursoUnitOfWork({
295
+ uow: createDrizzleSqliteUnitOfWork({
296
296
  db: dbPort.db,
297
297
  createTransactionPorts: (tx) => ({
298
298
  ...createRepositories(tx),
299
- idempotency: createDrizzleTursoIdempotencyPort(tx),
299
+ idempotency: createDrizzleSqliteIdempotencyPort(tx),
300
300
  }),
301
301
  }),
302
302
  };
@@ -316,7 +316,7 @@ import { migrate } from "drizzle-orm/libsql/migrator";
316
316
  import { env } from "@/lib/env";
317
317
 
318
318
  if (
319
- !env.TURSO_DB_URL.startsWith("file:") &&
319
+ !env.SQLITE_DB_URL.startsWith("file:") &&
320
320
  process.env.BEIGNET_ALLOW_DATABASE_RESET !== "true"
321
321
  ) {
322
322
  throw new Error(
@@ -335,8 +335,8 @@ const tables = [
335
335
  ] as const;
336
336
 
337
337
  const client = createClient({
338
- url: env.TURSO_DB_URL,
339
- authToken: env.TURSO_DB_AUTH_TOKEN,
338
+ url: env.SQLITE_DB_URL,
339
+ authToken: env.SQLITE_DB_AUTH_TOKEN,
340
340
  });
341
341
 
342
342
  try {
@@ -1,14 +1,14 @@
1
- export type { IntegrationName, PackageManager, TemplateName, } from "../choices.js";
2
- export { integrationChoices } from "../choices.js";
1
+ export type { DatabaseName, IntegrationName, PackageManager, TemplateName, } from "../choices.js";
2
+ export { databaseChoices, integrationChoices } from "../choices.js";
3
3
  export type { TemplateContext, TemplateFile } from "./shared.js";
4
4
  import type { TemplateContext, TemplateFile } from "./shared.js";
5
5
  /**
6
6
  * Render all template files for a new Beignet app.
7
7
  *
8
8
  * There is one starter: a full-stack app with a typed API, Better Auth,
9
- * Drizzle/libSQL persistence, pino logging, devtools, and a shadcn UI shell.
10
- * `ctx.api` swaps the UI shell for a minimal API landing page and a reduced
11
- * typed client.
9
+ * Drizzle persistence (SQLite, Postgres, or MySQL via `ctx.database`), pino
10
+ * logging, devtools, and a shadcn UI shell. `ctx.api` swaps the UI shell for
11
+ * a minimal API landing page and a reduced typed client.
12
12
  */
13
13
  export declare function getTemplateFiles(ctx: TemplateContext): TemplateFile[];
14
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,eAAe,EACf,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiBjE,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIjE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,YAAY,EAAE,CAiHrE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACpE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAoBjE,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIjE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,YAAY,EAAE,CAkHrE"}
@@ -1,7 +1,7 @@
1
- export { integrationChoices } from "../choices.js";
1
+ export { databaseChoices, integrationChoices } from "../choices.js";
2
2
  import { baseFiles, envExample, integrationsDoc, packageJson, readme, } from "./base.js";
3
- import { dbFiles } from "./db.js";
4
- import { infrastructurePorts, ports, serverFiles, serverProviders, } from "./server.js";
3
+ import { dbFiles } from "./db/index.js";
4
+ import { betterAuth, env, infrastructurePorts, ports, server, serverFiles, serverProviders, } from "./server.js";
5
5
  import { shadcnTemplateFiles } from "./shadcn.js";
6
6
  import { shellTemplateFiles } from "./shell.js";
7
7
  import { todosFiles } from "./todos.js";
@@ -9,11 +9,12 @@ import { todosFiles } from "./todos.js";
9
9
  * Render all template files for a new Beignet app.
10
10
  *
11
11
  * There is one starter: a full-stack app with a typed API, Better Auth,
12
- * Drizzle/libSQL persistence, pino logging, devtools, and a shadcn UI shell.
13
- * `ctx.api` swaps the UI shell for a minimal API landing page and a reduced
14
- * typed client.
12
+ * Drizzle persistence (SQLite, Postgres, or MySQL via `ctx.database`), pino
13
+ * logging, devtools, and a shadcn UI shell. `ctx.api` swaps the UI shell for
14
+ * a minimal API landing page and a reduced typed client.
15
15
  */
16
16
  export function getTemplateFiles(ctx) {
17
+ const db = dbFiles(ctx);
17
18
  const templateFiles = [
18
19
  { path: "package.json", content: packageJson(ctx) },
19
20
  { path: "README.md", content: readme(ctx) },
@@ -78,31 +79,31 @@ export function getTemplateFiles(ctx) {
78
79
  { path: "ports/index.ts", content: ports(ctx) },
79
80
  { path: "ports/auth.ts", content: serverFiles.authPort },
80
81
  { path: "infra/app-ports.ts", content: infrastructurePorts(ctx) },
81
- { path: "infra/db/database-ready.ts", content: dbFiles.databaseReady },
82
- { path: "infra/db/provider.ts", content: dbFiles.dbProvider },
83
- { path: "infra/db/repositories.ts", content: dbFiles.dbRepositories },
84
- { path: "infra/db/reset.ts", content: dbFiles.dbReset },
85
- { path: "infra/db/test-database.ts", content: dbFiles.dbTestDatabase },
86
- { path: "infra/db/schema/index.ts", content: dbFiles.dbSchema },
82
+ { path: "infra/db/database-ready.ts", content: db.databaseReady },
83
+ { path: "infra/db/provider.ts", content: db.dbProvider },
84
+ { path: "infra/db/repositories.ts", content: db.dbRepositories },
85
+ { path: "infra/db/reset.ts", content: db.dbReset },
86
+ { path: "infra/db/test-database.ts", content: db.dbTestDatabase },
87
+ { path: "infra/db/schema/index.ts", content: db.dbSchema },
87
88
  {
88
89
  path: "infra/todos/drizzle-todo-repository.ts",
89
- content: dbFiles.drizzleTodoRepository,
90
+ content: db.drizzleTodoRepository,
90
91
  },
91
- { path: "drizzle.config.ts", content: dbFiles.drizzleConfig },
92
- { path: "drizzle/0000_starter.sql", content: dbFiles.starterMigrationSql },
92
+ { path: "drizzle.config.ts", content: db.drizzleConfig },
93
+ { path: "drizzle/0000_starter.sql", content: db.starterMigrationSql },
93
94
  {
94
95
  path: "drizzle/meta/_journal.json",
95
- content: dbFiles.starterMigrationJournal,
96
+ content: db.starterMigrationJournal,
96
97
  },
97
98
  {
98
99
  path: "drizzle/meta/0000_snapshot.json",
99
- content: dbFiles.starterMigrationSnapshot,
100
+ content: db.starterMigrationSnapshot,
100
101
  },
101
- { path: "lib/env.ts", content: serverFiles.env },
102
+ { path: "lib/env.ts", content: env(ctx) },
102
103
  { path: "lib/auth.ts", content: serverFiles.authHelpers },
103
- { path: "lib/better-auth.ts", content: serverFiles.betterAuth },
104
+ { path: "lib/better-auth.ts", content: betterAuth(ctx) },
104
105
  { path: "lib/use-case.ts", content: serverFiles.useCaseBuilder },
105
- { path: "server/index.ts", content: serverFiles.server },
106
+ { path: "server/index.ts", content: server(ctx) },
106
107
  { path: "server/context.ts", content: serverFiles.serverContext },
107
108
  { path: "server/routes.ts", content: serverFiles.serverRoutes },
108
109
  { path: "server/providers.ts", content: serverProviders(ctx) },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,EACL,SAAS,EACT,UAAU,EACV,eAAe,EACf,WAAW,EACX,MAAM,GACP,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EACL,mBAAmB,EACnB,KAAK,EACL,WAAW,EACX,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAoB;IACnD,MAAM,aAAa,GAAmB;QACpC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE;QACnD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE;QAC3C,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC,SAAS,EAAE;QACpD,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE;QAClD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE;QACrD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,CAAC,UAAU,EAAE;QACzD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE;QACtD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,CAAC,UAAU,EAAE;QAC3D;YACE,IAAI,EAAE,8BAA8B;YACpC,OAAO,EAAE,WAAW,CAAC,gBAAgB;SACtC;QACD,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,WAAW,CAAC,WAAW,EAAE;QACrE;YACE,IAAI,EAAE,uCAAuC;YAC7C,OAAO,EAAE,WAAW,CAAC,aAAa;SACnC;QACD,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,WAAW,CAAC,YAAY,EAAE;QACvE;YACE,IAAI,EAAE,gCAAgC;YACtC,OAAO,EAAE,WAAW,CAAC,SAAS;SAC/B;QACD,EAAE,IAAI,EAAE,2BAA2B,EAAE,OAAO,EAAE,WAAW,CAAC,YAAY,EAAE;QACxE,EAAE,IAAI,EAAE,6BAA6B,EAAE,OAAO,EAAE,UAAU,CAAC,SAAS,EAAE;QACtE,EAAE,IAAI,EAAE,2BAA2B,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE;QAClE,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE;QAChE,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE;QAChE,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE;QAC9D;YACE,IAAI,EAAE,yCAAyC;YAC/C,OAAO,EAAE,UAAU,CAAC,iBAAiB;SACtC;QACD;YACE,IAAI,EAAE,yCAAyC;YAC/C,OAAO,EAAE,UAAU,CAAC,iBAAiB;SACtC;QACD;YACE,IAAI,EAAE,wCAAwC;YAC9C,OAAO,EAAE,UAAU,CAAC,gBAAgB;SACrC;QACD;YACE,IAAI,EAAE,yCAAyC;YAC/C,OAAO,EAAE,UAAU,CAAC,iBAAiB;SACtC;QACD;YACE,IAAI,EAAE,mCAAmC;YACzC,OAAO,EAAE,UAAU,CAAC,aAAa;SAClC;QACD;YACE,IAAI,EAAE,iCAAiC;YACvC,OAAO,EAAE,UAAU,CAAC,WAAW;SAChC;QACD;YACE,IAAI,EAAE,oCAAoC;YAC1C,OAAO,EAAE,UAAU,CAAC,WAAW;SAChC;QACD;YACE,IAAI,EAAE,qCAAqC;YAC3C,OAAO,EAAE,UAAU,CAAC,UAAU;SAC/B;QACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;QAC/C,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE;QACxD,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE;QACjE,EAAE,IAAI,EAAE,4BAA4B,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE;QACtE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;QAC7D,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE;QACrE,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE;QACvD,EAAE,IAAI,EAAE,2BAA2B,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE;QACtE,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE;QAC/D;YACE,IAAI,EAAE,wCAAwC;YAC9C,OAAO,EAAE,OAAO,CAAC,qBAAqB;SACvC;QACD,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE;QAC7D,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,OAAO,CAAC,mBAAmB,EAAE;QAC1E;YACE,IAAI,EAAE,4BAA4B;YAClC,OAAO,EAAE,OAAO,CAAC,uBAAuB;SACzC;QACD;YACE,IAAI,EAAE,iCAAiC;YACvC,OAAO,EAAE,OAAO,CAAC,wBAAwB;SAC1C;QACD,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE;QAChD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,WAAW,EAAE;QACzD,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,WAAW,CAAC,UAAU,EAAE;QAC/D,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,CAAC,cAAc,EAAE;QAChE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE;QACxD,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,WAAW,CAAC,aAAa,EAAE;QACjE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,WAAW,CAAC,YAAY,EAAE;QAC/D,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE;KAC/D,CAAC;IAEF,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,aAAa,CAAC,IAAI,CAChB,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,CAAC,SAAS,EAAE,EAC1D,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,EACtD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,CAAC,cAAc,EAAE,CACjE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,IAAI,CAAC,GAAG,mBAAmB,EAAE,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,aAAa,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,10 @@ import { type TemplateContext } from "./shared.js";
2
2
  export declare function serverProviders(ctx: TemplateContext): string;
3
3
  export declare function ports(ctx: TemplateContext): string;
4
4
  export declare function infrastructurePorts(ctx: TemplateContext): string;
5
+ export declare function env(ctx: TemplateContext): string;
6
+ export declare function betterAuth(ctx: TemplateContext): string;
7
+ export declare function server(ctx: TemplateContext): string;
5
8
  declare const files: {
6
- env: string;
7
9
  appContext: string;
8
10
  sharedErrors: string;
9
11
  useCaseBuilder: string;
@@ -11,13 +13,11 @@ declare const files: {
11
13
  authPort: string;
12
14
  serverRoutes: string;
13
15
  serverContext: string;
14
- server: string;
15
16
  apiCatchAllRoute: string;
16
17
  healthRoute: string;
17
18
  devtoolsRoute: string;
18
19
  openApiRoute: string;
19
20
  authRoute: string;
20
- betterAuth: string;
21
21
  apiLayout: string;
22
22
  apiPage: string;
23
23
  apiClientIndex: string;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnE,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA2C5D;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAwClD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA2ChE;AAED,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;CA4YV,CAAC;AAEF,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAErB,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA4C5D;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAwClD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA2ChE;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA0ChD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAmFvD;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAiDnD;AAED,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;CAkRV,CAAC;AAEF,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,CAAC"}
@@ -1,10 +1,12 @@
1
- import { hasIntegration } from "./shared.js";
1
+ import { databaseLocalUrl } from "../choices.js";
2
+ import { databaseDescriptor, hasIntegration, } from "./shared.js";
2
3
  export function serverProviders(ctx) {
4
+ const db = databaseDescriptor(ctx);
3
5
  const imports = [
4
6
  'import type { beignetServerOnly } from "@beignet/core/server-only";',
5
7
  'import { createDevtoolsProvider } from "@beignet/devtools";',
6
8
  'import { createAuthBetterAuthProvider } from "@beignet/provider-auth-better-auth";',
7
- 'import { createDrizzleTursoProvider } from "@beignet/provider-drizzle-turso";',
9
+ `import { ${db.providerFactory} } from "@beignet/provider-db-drizzle/${db.subpath}";`,
8
10
  hasIntegration(ctx, "inngest")
9
11
  ? 'import { inngestProvider } from "@beignet/provider-inngest";'
10
12
  : undefined,
@@ -24,7 +26,7 @@ export function serverProviders(ctx) {
24
26
  "\tcreateDevtoolsProvider(),",
25
27
  "\tcreateAuthBetterAuthProvider<AuthUser, AuthSessionMetadata>(auth),",
26
28
  "\tloggerPinoProvider,",
27
- "\tdrizzleTursoProvider,",
29
+ `\t${db.providerInstance},`,
28
30
  "\tstarterDatabaseProvider,",
29
31
  hasIntegration(ctx, "inngest") ? "\tinngestProvider," : undefined,
30
32
  hasIntegration(ctx, "resend") ? "\tmailResendProvider," : undefined,
@@ -34,7 +36,7 @@ export function serverProviders(ctx) {
34
36
  ].filter((entry) => Boolean(entry));
35
37
  return `${imports.join("\n")}
36
38
 
37
- const drizzleTursoProvider = createDrizzleTursoProvider({ schema });
39
+ const ${db.providerInstance} = ${db.providerFactory}({ schema });
38
40
 
39
41
  export const providers = [
40
42
  ${entries.join("\n")}
@@ -124,8 +126,14 @@ ${deferred.join("\n")}
124
126
  });
125
127
  `;
126
128
  }
127
- const files = {
128
- env: `import { createEnv } from "@beignet/core/config";
129
+ export function env(ctx) {
130
+ const databaseEnvLines = ctx.database === "sqlite"
131
+ ? `\t\tSQLITE_DB_URL: z.string().default("file:local.db"),
132
+ \t\tSQLITE_DB_AUTH_TOKEN: z.string().optional(),`
133
+ : `\t\t${databaseDescriptor(ctx).urlEnvVar}: z
134
+ \t\t\t.string()
135
+ \t\t\t.default("${databaseLocalUrl(ctx.database, ctx.name)}"),`;
136
+ return `import { createEnv } from "@beignet/core/config";
129
137
  import { z } from "zod";
130
138
 
131
139
  const BooleanEnv = z.enum(["true", "false"]).transform((value) => value === "true");
@@ -143,8 +151,7 @@ export const env = createEnv({
143
151
  .default("local-dev-better-auth-secret-change-me"),
144
152
  BETTER_AUTH_URL: z.string().url().default("http://localhost:3000"),
145
153
  BETTER_AUTH_TRUSTED_ORIGINS: z.string().optional(),
146
- TURSO_DB_URL: z.string().default("file:local.db"),
147
- TURSO_DB_AUTH_TOKEN: z.string().optional(),
154
+ ${databaseEnvLines}
148
155
  LOG_LEVEL: z
149
156
  .enum(["trace", "debug", "info", "warn", "error", "fatal"])
150
157
  .default("info"),
@@ -158,7 +165,140 @@ export const isProduction = env.NODE_ENV === "production";
158
165
 
159
166
  export const isDevtoolsEnabled =
160
167
  env.DEVTOOLS_ENABLED ?? process.env.NODE_ENV !== "production";
161
- `,
168
+ `;
169
+ }
170
+ export function betterAuth(ctx) {
171
+ const connectionByDatabase = {
172
+ sqlite: `import { createClient } from "@libsql/client";
173
+ import { betterAuth } from "better-auth";
174
+ import { drizzleAdapter } from "better-auth/adapters/drizzle";
175
+ import { drizzle } from "drizzle-orm/libsql";
176
+ import { ensureDatabaseReady } from "@/infra/db/database-ready";
177
+ import * as schema from "@/infra/db/schema";
178
+ import { env } from "@/lib/env";
179
+
180
+ const client = createClient({
181
+ url: env.SQLITE_DB_URL,
182
+ authToken: env.SQLITE_DB_AUTH_TOKEN,
183
+ });
184
+
185
+ // Auth routes can be the first thing to touch the database, before any
186
+ // Beignet provider boots, so readiness is enforced here too.
187
+ await ensureDatabaseReady(client);
188
+
189
+ const db = drizzle(client, { schema });`,
190
+ postgres: `import { betterAuth } from "better-auth";
191
+ import { drizzleAdapter } from "better-auth/adapters/drizzle";
192
+ import { drizzle } from "drizzle-orm/node-postgres";
193
+ import pg from "pg";
194
+ import { ensureDatabaseReady } from "@/infra/db/database-ready";
195
+ import * as schema from "@/infra/db/schema";
196
+ import { env } from "@/lib/env";
197
+
198
+ const pool = new pg.Pool({ connectionString: env.POSTGRES_DB_URL });
199
+
200
+ // Auth routes can be the first thing to touch the database, before any
201
+ // Beignet provider boots, so readiness is enforced here too.
202
+ await ensureDatabaseReady(pool);
203
+
204
+ const db = drizzle(pool, { schema });`,
205
+ mysql: `import { betterAuth } from "better-auth";
206
+ import { drizzleAdapter } from "better-auth/adapters/drizzle";
207
+ import { drizzle } from "drizzle-orm/mysql2";
208
+ import mysql from "mysql2/promise";
209
+ import { ensureDatabaseReady } from "@/infra/db/database-ready";
210
+ import * as schema from "@/infra/db/schema";
211
+ import { env } from "@/lib/env";
212
+
213
+ const pool = mysql.createPool({ uri: env.MYSQL_DB_URL });
214
+
215
+ // Auth routes can be the first thing to touch the database, before any
216
+ // Beignet provider boots, so readiness is enforced here too.
217
+ await ensureDatabaseReady(pool);
218
+
219
+ const db = drizzle(pool, { schema, mode: "default" });`,
220
+ };
221
+ return `${connectionByDatabase[ctx.database]}
222
+
223
+ const trustedOrigins = [
224
+ env.APP_URL,
225
+ env.BETTER_AUTH_URL,
226
+ ...(env.BETTER_AUTH_TRUSTED_ORIGINS?.split(",")
227
+ .map((origin) => origin.trim())
228
+ .filter(Boolean) ?? []),
229
+ ];
230
+
231
+ export const auth = betterAuth({
232
+ baseURL: env.BETTER_AUTH_URL,
233
+ secret: env.BETTER_AUTH_SECRET,
234
+ trustedOrigins: [...new Set(trustedOrigins)],
235
+ database: drizzleAdapter(db, {
236
+ provider: "${databaseDescriptor(ctx).betterAuthProvider}",
237
+ schema,
238
+ }),
239
+ emailAndPassword: {
240
+ enabled: true,
241
+ },
242
+ user: {
243
+ changeEmail: {
244
+ enabled: true,
245
+ },
246
+ deleteUser: {
247
+ enabled: true,
248
+ },
249
+ },
250
+ });
251
+ `;
252
+ }
253
+ export function server(ctx) {
254
+ const db = databaseDescriptor(ctx);
255
+ const providerConfigEntries = ctx.database === "sqlite"
256
+ ? `\t\t"drizzle-sqlite": {
257
+ \t\t\tDB_URL: env.SQLITE_DB_URL,
258
+ \t\t\tDB_AUTH_TOKEN: env.SQLITE_DB_AUTH_TOKEN,
259
+ \t\t},`
260
+ : `\t\t"${db.providerName}": {
261
+ \t\t\tDB_URL: env.${db.urlEnvVar},
262
+ \t\t},`;
263
+ return `import type { beignetServerOnly } from "@beignet/core/server-only";
264
+ import { createNextServer } from "@beignet/next";
265
+ import { createIdempotencyHooks } from "@beignet/core/server";
266
+ import type { AppContext } from "@/app-context";
267
+ import { appPorts } from "@/infra/app-ports";
268
+ import { env } from "@/lib/env";
269
+ import { appContext } from "./context";
270
+ import { providers } from "./providers";
271
+ import { routes } from "./routes";
272
+
273
+ export const server = await createNextServer({
274
+ ports: appPorts,
275
+ providers,
276
+ providerConfig: {
277
+ ${providerConfigEntries}
278
+ },
279
+ hooks: [createIdempotencyHooks<AppContext>()],
280
+ context: appContext,
281
+ routes,
282
+ mapUnhandledError: ({ err, ctx }) => {
283
+ ctx?.ports.logger.error("Unhandled API error", {
284
+ error: err,
285
+ requestId: ctx?.requestId,
286
+ environment: env.NODE_ENV,
287
+ });
288
+
289
+ return {
290
+ status: 500,
291
+ body: {
292
+ code: "INTERNAL_SERVER_ERROR",
293
+ message: "Internal server error",
294
+ requestId: ctx?.requestId,
295
+ },
296
+ };
297
+ },
298
+ });
299
+ `;
300
+ }
301
+ const files = {
162
302
  appContext: `import type { ActivityActor, ActivityTenant } from "@beignet/core/ports";
163
303
  import type { InferProviderPorts } from "@beignet/core/providers";
164
304
  import type { TraceContext } from "@beignet/core/tracing";
@@ -321,46 +461,6 @@ export const appContext = defineServerContext<AppContext, AppRuntimePorts>()({
321
461
  tenant: createTenant(input?.tenantId ?? "tenant_default"),
322
462
  }),
323
463
  });
324
- `,
325
- server: `import type { beignetServerOnly } from "@beignet/core/server-only";
326
- import { createNextServer } from "@beignet/next";
327
- import { createIdempotencyHooks } from "@beignet/core/server";
328
- import type { AppContext } from "@/app-context";
329
- import { appPorts } from "@/infra/app-ports";
330
- import { env } from "@/lib/env";
331
- import { appContext } from "./context";
332
- import { providers } from "./providers";
333
- import { routes } from "./routes";
334
-
335
- export const server = await createNextServer({
336
- ports: appPorts,
337
- providers,
338
- providerConfig: {
339
- "drizzle-turso": {
340
- DB_URL: env.TURSO_DB_URL,
341
- DB_AUTH_TOKEN: env.TURSO_DB_AUTH_TOKEN,
342
- },
343
- },
344
- hooks: [createIdempotencyHooks<AppContext>()],
345
- context: appContext,
346
- routes,
347
- mapUnhandledError: ({ err, ctx }) => {
348
- ctx?.ports.logger.error("Unhandled API error", {
349
- error: err,
350
- requestId: ctx?.requestId,
351
- environment: env.NODE_ENV,
352
- });
353
-
354
- return {
355
- status: 500,
356
- body: {
357
- code: "INTERNAL_SERVER_ERROR",
358
- message: "Internal server error",
359
- requestId: ctx?.requestId,
360
- },
361
- };
362
- },
363
- });
364
464
  `,
365
465
  apiCatchAllRoute: `import { server } from "@/server";
366
466
 
@@ -410,54 +510,6 @@ export const GET = createOpenAPIHandler(server.contracts, {
410
510
  import { auth } from "@/lib/better-auth";
411
511
 
412
512
  export const { GET, POST } = toNextJsHandler(auth);
413
- `,
414
- betterAuth: `import { createClient } from "@libsql/client";
415
- import { betterAuth } from "better-auth";
416
- import { drizzleAdapter } from "better-auth/adapters/drizzle";
417
- import { drizzle } from "drizzle-orm/libsql";
418
- import { ensureDatabaseReady } from "@/infra/db/database-ready";
419
- import * as schema from "@/infra/db/schema";
420
- import { env } from "@/lib/env";
421
-
422
- const client = createClient({
423
- url: env.TURSO_DB_URL,
424
- authToken: env.TURSO_DB_AUTH_TOKEN,
425
- });
426
-
427
- // Auth routes can be the first thing to touch the database, before any
428
- // Beignet provider boots, so readiness is enforced here too.
429
- await ensureDatabaseReady(client);
430
-
431
- const db = drizzle(client, { schema });
432
-
433
- const trustedOrigins = [
434
- env.APP_URL,
435
- env.BETTER_AUTH_URL,
436
- ...(env.BETTER_AUTH_TRUSTED_ORIGINS?.split(",")
437
- .map((origin) => origin.trim())
438
- .filter(Boolean) ?? []),
439
- ];
440
-
441
- export const auth = betterAuth({
442
- baseURL: env.BETTER_AUTH_URL,
443
- secret: env.BETTER_AUTH_SECRET,
444
- trustedOrigins: [...new Set(trustedOrigins)],
445
- database: drizzleAdapter(db, {
446
- provider: "sqlite",
447
- schema,
448
- }),
449
- emailAndPassword: {
450
- enabled: true,
451
- },
452
- user: {
453
- changeEmail: {
454
- enabled: true,
455
- },
456
- deleteUser: {
457
- enabled: true,
458
- },
459
- },
460
- });
461
513
  `,
462
514
  // API-only scaffold frontend: a minimal layout and landing page that point
463
515
  // at the contract-backed API surface, plus a typed client without React
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/templates/server.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { IntegrationName, PackageManager } from "../choices.js";
1
+ import type { DatabaseName, IntegrationName, PackageManager } from "../choices.js";
2
2
  /**
3
3
  * One generated file emitted by the template generator.
4
4
  */
@@ -18,6 +18,10 @@ export type TemplateContext = {
18
18
  */
19
19
  api: boolean;
20
20
  integrations: IntegrationName[];
21
+ /**
22
+ * Database backing the starter's Drizzle persistence layer.
23
+ */
24
+ database: DatabaseName;
21
25
  };
22
26
  export declare const externalVersions: {
23
27
  next: string;
@@ -37,11 +41,40 @@ export declare const externalVersions: {
37
41
  drizzleOrm: string;
38
42
  inngest: string;
39
43
  libsqlClient: string;
44
+ mysql2: string;
45
+ pg: string;
46
+ pglite: string;
40
47
  pino: string;
41
48
  resend: string;
49
+ typesPg: string;
42
50
  upstashRateLimit: string;
43
51
  upstashRedis: string;
44
52
  };
53
+ /**
54
+ * Dialect-specific names used when rendering database-aware templates.
55
+ */
56
+ export type DatabaseDescriptor = {
57
+ name: DatabaseName;
58
+ /** `@beignet/provider-db-drizzle` subpath for this dialect. */
59
+ subpath: "sqlite" | "postgres" | "mysql";
60
+ /** Pascal-case dialect token in provider API names, e.g. `createDrizzle${apiToken}UnitOfWork`. */
61
+ apiToken: "Sqlite" | "Postgres" | "Mysql";
62
+ /** Drizzle database seam type exported from the provider subpath. */
63
+ databaseType: "DrizzleSqliteDatabase" | "DrizzlePostgresDatabase" | "DrizzleMysqlDatabase";
64
+ /** Provider factory exported from the provider subpath. */
65
+ providerFactory: "createDrizzleSqliteProvider" | "createDrizzlePostgresProvider" | "createDrizzleMysqlProvider";
66
+ /** Provider instance const wired in `server/providers.ts`. */
67
+ providerInstance: "drizzleSqliteProvider" | "drizzlePostgresProvider" | "drizzleMysqlProvider";
68
+ /** Runtime provider name used as the `providerConfig` key. */
69
+ providerName: "drizzle-sqlite" | "drizzle-postgres" | "drizzle-mysql";
70
+ /** Connection URL env var read by the provider and app env schema. */
71
+ urlEnvVar: "SQLITE_DB_URL" | "POSTGRES_DB_URL" | "MYSQL_DB_URL";
72
+ /** `drizzle.config.ts` dialect string. */
73
+ drizzleKitDialect: "sqlite" | "postgresql" | "mysql";
74
+ /** Better Auth drizzle adapter provider string. */
75
+ betterAuthProvider: "sqlite" | "pg" | "mysql";
76
+ };
77
+ export declare function databaseDescriptor(ctx: TemplateContext): DatabaseDescriptor;
45
78
  export declare function packageRunner(ctx: TemplateContext): string;
46
79
  export declare const integrationDeps: Record<IntegrationName, Record<string, string>>;
47
80
  export declare function hasIntegration(ctx: TemplateContext, integration: IntegrationName): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,GAAG,EAAE,OAAO,CAAC;IACb,YAAY,EAAE,eAAe,EAAE,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;CAsB5B,CAAC;AAEF,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAW1D;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAClC,eAAe,EACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAevB,CAAC;AAEF,wBAAgB,cAAc,CAC5B,GAAG,EAAE,eAAe,EACpB,WAAW,EAAE,eAAe,GAC3B,OAAO,CAET;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE3C"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACf,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,GAAG,EAAE,OAAO,CAAC;IACb,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,+DAA+D;IAC/D,OAAO,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACzC,kGAAkG;IAClG,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IAC1C,qEAAqE;IACrE,YAAY,EACR,uBAAuB,GACvB,yBAAyB,GACzB,sBAAsB,CAAC;IAC3B,2DAA2D;IAC3D,eAAe,EACX,6BAA6B,GAC7B,+BAA+B,GAC/B,4BAA4B,CAAC;IACjC,8DAA8D;IAC9D,gBAAgB,EACZ,uBAAuB,GACvB,yBAAyB,GACzB,sBAAsB,CAAC;IAC3B,8DAA8D;IAC9D,YAAY,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,eAAe,CAAC;IACtE,sEAAsE;IACtE,SAAS,EAAE,eAAe,GAAG,iBAAiB,GAAG,cAAc,CAAC;IAChE,0CAA0C;IAC1C,iBAAiB,EAAE,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;IACrD,mDAAmD;IACnD,kBAAkB,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC;CAC/C,CAAC;AAyCF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,kBAAkB,CAE3E;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAW1D;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAClC,eAAe,EACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAevB,CAAC;AAEF,wBAAgB,cAAc,CAC5B,GAAG,EAAE,eAAe,EACpB,WAAW,EAAE,eAAe,GAC3B,OAAO,CAET;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE3C"}