@beignet/cli 0.0.47 → 0.0.48

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 (92) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +50 -21
  3. package/dist/check.d.ts +8 -1
  4. package/dist/check.d.ts.map +1 -1
  5. package/dist/check.js +18 -6
  6. package/dist/check.js.map +1 -1
  7. package/dist/db.d.ts +38 -0
  8. package/dist/db.d.ts.map +1 -1
  9. package/dist/db.js +52 -0
  10. package/dist/db.js.map +1 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +73 -6
  13. package/dist/index.js.map +1 -1
  14. package/dist/inspect.d.ts.map +1 -1
  15. package/dist/inspect.js +39 -2
  16. package/dist/inspect.js.map +1 -1
  17. package/dist/lib.d.ts +2 -2
  18. package/dist/lib.d.ts.map +1 -1
  19. package/dist/lib.js +1 -1
  20. package/dist/lib.js.map +1 -1
  21. package/dist/make/inbox.js +1 -1
  22. package/dist/make/inbox.js.map +1 -1
  23. package/dist/make/payments.js +1 -1
  24. package/dist/make/payments.js.map +1 -1
  25. package/dist/make/tenancy.js +1 -1
  26. package/dist/make/tenancy.js.map +1 -1
  27. package/dist/mcp.d.ts.map +1 -1
  28. package/dist/mcp.js +39 -2
  29. package/dist/mcp.js.map +1 -1
  30. package/dist/preflight.d.ts +11 -3
  31. package/dist/preflight.d.ts.map +1 -1
  32. package/dist/preflight.js +139 -16
  33. package/dist/preflight.js.map +1 -1
  34. package/dist/provider-add.d.ts.map +1 -1
  35. package/dist/provider-add.js +7 -2
  36. package/dist/provider-add.js.map +1 -1
  37. package/dist/provider-audit.d.ts +13 -0
  38. package/dist/provider-audit.d.ts.map +1 -1
  39. package/dist/provider-audit.js +122 -8
  40. package/dist/provider-audit.js.map +1 -1
  41. package/dist/templates/agents.d.ts.map +1 -1
  42. package/dist/templates/agents.js +13 -7
  43. package/dist/templates/agents.js.map +1 -1
  44. package/dist/templates/base.d.ts +1 -0
  45. package/dist/templates/base.d.ts.map +1 -1
  46. package/dist/templates/base.js +11 -5
  47. package/dist/templates/base.js.map +1 -1
  48. package/dist/templates/db/index.d.ts +1 -0
  49. package/dist/templates/db/index.d.ts.map +1 -1
  50. package/dist/templates/db/index.js.map +1 -1
  51. package/dist/templates/db/migration-status.d.ts +9 -0
  52. package/dist/templates/db/migration-status.d.ts.map +1 -0
  53. package/dist/templates/db/migration-status.js +117 -0
  54. package/dist/templates/db/migration-status.js.map +1 -0
  55. package/dist/templates/db/mysql.d.ts.map +1 -1
  56. package/dist/templates/db/mysql.js +23 -0
  57. package/dist/templates/db/mysql.js.map +1 -1
  58. package/dist/templates/db/postgres.d.ts.map +1 -1
  59. package/dist/templates/db/postgres.js +21 -0
  60. package/dist/templates/db/postgres.js.map +1 -1
  61. package/dist/templates/db/sqlite.d.ts.map +1 -1
  62. package/dist/templates/db/sqlite.js +53 -0
  63. package/dist/templates/db/sqlite.js.map +1 -1
  64. package/dist/templates/index.d.ts.map +1 -1
  65. package/dist/templates/index.js +5 -0
  66. package/dist/templates/index.js.map +1 -1
  67. package/dist/templates/shared.d.ts.map +1 -1
  68. package/dist/templates/shared.js +1 -0
  69. package/dist/templates/shared.js.map +1 -1
  70. package/package.json +2 -2
  71. package/skills/app-structure/SKILL.md +11 -7
  72. package/src/check.ts +35 -7
  73. package/src/db.ts +97 -0
  74. package/src/index.ts +108 -7
  75. package/src/inspect.ts +76 -1
  76. package/src/lib.ts +9 -1
  77. package/src/make/inbox.ts +1 -1
  78. package/src/make/payments.ts +1 -1
  79. package/src/make/tenancy.ts +1 -1
  80. package/src/mcp.ts +56 -1
  81. package/src/preflight.ts +195 -16
  82. package/src/provider-add.ts +7 -2
  83. package/src/provider-audit.ts +210 -18
  84. package/src/templates/agents.ts +13 -7
  85. package/src/templates/base.ts +12 -3
  86. package/src/templates/db/index.ts +1 -0
  87. package/src/templates/db/migration-status.ts +126 -0
  88. package/src/templates/db/mysql.ts +23 -0
  89. package/src/templates/db/postgres.ts +21 -0
  90. package/src/templates/db/sqlite.ts +53 -0
  91. package/src/templates/index.ts +5 -0
  92. package/src/templates/shared.ts +1 -0
@@ -13,6 +13,7 @@
13
13
  // lives outside the app schema, so `db generate` never diffs against it.
14
14
 
15
15
  import type { DbTemplateFiles } from "./index.js";
16
+ import { migrationStatusTemplate } from "./migration-status.js";
16
17
 
17
18
  const files = {
18
19
  drizzleConfig: `export default {
@@ -264,6 +265,58 @@ async function prepare(client: Client): Promise<void> {
264
265
  await migrate(drizzle(client), { migrationsFolder: "drizzle" });
265
266
  }
266
267
  `,
268
+ dbMigrationStatus: migrationStatusTemplate({
269
+ imports: `import { statSync } from "node:fs";
270
+ import path from "node:path";
271
+ import { fileURLToPath } from "node:url";
272
+ import { createClient } from "@libsql/client";
273
+ import { env } from "@/lib/env";`,
274
+ open: `const databaseFile = sqliteDatabaseFile(env.SQLITE_DB_URL);
275
+ const client =
276
+ databaseFile !== undefined && !databaseFileExists(databaseFile)
277
+ ? undefined
278
+ : createClient({
279
+ url: env.SQLITE_DB_URL,
280
+ authToken: env.SQLITE_DB_AUTH_TOKEN,
281
+ });
282
+
283
+ function sqliteDatabaseFile(url: string): string | undefined {
284
+ if (!url.startsWith("file:")) return undefined;
285
+ const rawPath = url.slice("file:".length).split(/[?#]/, 1)[0];
286
+ if (!rawPath || rawPath === ":memory:") return undefined;
287
+ return rawPath.startsWith("//")
288
+ ? fileURLToPath(url)
289
+ : path.resolve(decodeURIComponent(rawPath));
290
+ }
291
+
292
+ function databaseFileExists(file: string): boolean {
293
+ try {
294
+ statSync(file);
295
+ return true;
296
+ } catch (error) {
297
+ if ((error as NodeJS.ErrnoException).code === "ENOENT") return false;
298
+ throw error;
299
+ }
300
+ }`,
301
+ loadApplied: `let applied: AppliedMigration[] = [];
302
+ if (client !== undefined) {
303
+ const table = await client.execute(
304
+ "SELECT name FROM sqlite_master WHERE type = 'table' AND name = '__drizzle_migrations' LIMIT 1",
305
+ );
306
+ applied =
307
+ table.rows.length === 0
308
+ ? []
309
+ : (
310
+ await client.execute(
311
+ "SELECT hash, created_at FROM __drizzle_migrations ORDER BY created_at",
312
+ )
313
+ ).rows.map((row) => ({
314
+ hash: String(row.hash),
315
+ createdAt: Number(row.created_at),
316
+ }));
317
+ }`,
318
+ close: "client?.close();",
319
+ }),
267
320
  dbProvider: `import "@beignet/core/server-only";
268
321
  import { createProvider } from "@beignet/core/providers";
269
322
  import {
@@ -53,6 +53,7 @@ export function getTemplateFiles(ctx: TemplateContext): TemplateFile[] {
53
53
  { path: "AGENTS.md", content: agentsMd(ctx) },
54
54
  { path: "CLAUDE.md", content: agentsMd(ctx) },
55
55
  { path: ".mcp.json", content: mcpJson(ctx) },
56
+ { path: ".gitattributes", content: baseFiles.gitattributes },
56
57
  { path: ".gitignore", content: baseFiles.gitignore },
57
58
  { path: ".env.example", content: envExample(ctx) },
58
59
  { path: "next-env.d.ts", content: baseFiles.nextEnv },
@@ -118,6 +119,10 @@ export function getTemplateFiles(ctx: TemplateContext): TemplateFile[] {
118
119
  { path: "infra/port-wiring.ts", content: portWiring(ctx) },
119
120
  { path: "infra/db/client.ts", content: db.dbClient },
120
121
  { path: "infra/db/database-ready.ts", content: db.databaseReady },
122
+ {
123
+ path: "infra/db/migration-status.ts",
124
+ content: db.dbMigrationStatus,
125
+ },
121
126
  { path: "infra/db/provider.ts", content: db.dbProvider },
122
127
  { path: "infra/db/repositories.ts", content: db.dbRepositories },
123
128
  { path: "infra/db/reset.ts", content: db.dbReset },
@@ -77,6 +77,7 @@ export const legacyGeneratedPackageScripts: Record<string, readonly string[]> =
77
77
  export const currentGeneratedPackageScripts: Record<string, string> = {
78
78
  "db:reset": "tsx infra/db/reset.ts",
79
79
  "db:seed": "tsx server/seed.ts",
80
+ "db:status": "tsx infra/db/migration-status.ts",
80
81
  test: "node --import tsx lib/beignet-test-runner.ts",
81
82
  };
82
83