@beignet/cli 0.0.50 → 0.0.52

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 (105) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +64 -22
  3. package/dist/analysis/layers.d.ts.map +1 -1
  4. package/dist/analysis/layers.js +4 -2
  5. package/dist/analysis/layers.js.map +1 -1
  6. package/dist/analysis/port-wiring.d.ts.map +1 -1
  7. package/dist/analysis/port-wiring.js +2 -1
  8. package/dist/analysis/port-wiring.js.map +1 -1
  9. package/dist/analysis/source-files.d.ts +15 -0
  10. package/dist/analysis/source-files.d.ts.map +1 -0
  11. package/dist/analysis/source-files.js +52 -0
  12. package/dist/analysis/source-files.js.map +1 -0
  13. package/dist/analysis/workspace.d.ts.map +1 -1
  14. package/dist/analysis/workspace.js +21 -25
  15. package/dist/analysis/workspace.js.map +1 -1
  16. package/dist/app-map-changes.d.ts.map +1 -1
  17. package/dist/app-map-changes.js +5 -7
  18. package/dist/app-map-changes.js.map +1 -1
  19. package/dist/app-map.d.ts.map +1 -1
  20. package/dist/app-map.js +33 -30
  21. package/dist/app-map.js.map +1 -1
  22. package/dist/check.d.ts +12 -0
  23. package/dist/check.d.ts.map +1 -1
  24. package/dist/check.js +92 -25
  25. package/dist/check.js.map +1 -1
  26. package/dist/git-changes.d.ts +17 -1
  27. package/dist/git-changes.d.ts.map +1 -1
  28. package/dist/git-changes.js +118 -84
  29. package/dist/git-changes.js.map +1 -1
  30. package/dist/index.d.ts +2 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +35 -6
  33. package/dist/index.js.map +1 -1
  34. package/dist/inspect.d.ts.map +1 -1
  35. package/dist/inspect.js +436 -112
  36. package/dist/inspect.js.map +1 -1
  37. package/dist/lint.d.ts.map +1 -1
  38. package/dist/lint.js +3 -6
  39. package/dist/lint.js.map +1 -1
  40. package/dist/make.d.ts.map +1 -1
  41. package/dist/make.js +0 -2
  42. package/dist/make.js.map +1 -1
  43. package/dist/mcp.d.ts.map +1 -1
  44. package/dist/mcp.js +23 -5
  45. package/dist/mcp.js.map +1 -1
  46. package/dist/operational-process.d.ts +1 -0
  47. package/dist/operational-process.d.ts.map +1 -1
  48. package/dist/operational-process.js.map +1 -1
  49. package/dist/operational-runner.js +1 -0
  50. package/dist/operational-runner.js.map +1 -1
  51. package/dist/outbox.d.ts +1 -0
  52. package/dist/outbox.d.ts.map +1 -1
  53. package/dist/outbox.js +58 -12
  54. package/dist/outbox.js.map +1 -1
  55. package/dist/templates/agents.d.ts.map +1 -1
  56. package/dist/templates/agents.js +43 -15
  57. package/dist/templates/agents.js.map +1 -1
  58. package/dist/templates/base.js +5 -5
  59. package/dist/templates/db/mysql.d.ts.map +1 -1
  60. package/dist/templates/db/mysql.js +51 -22
  61. package/dist/templates/db/mysql.js.map +1 -1
  62. package/dist/templates/db/postgres.d.ts.map +1 -1
  63. package/dist/templates/db/postgres.js +60 -20
  64. package/dist/templates/db/postgres.js.map +1 -1
  65. package/dist/templates/db/sqlite.d.ts.map +1 -1
  66. package/dist/templates/db/sqlite.js +51 -23
  67. package/dist/templates/db/sqlite.js.map +1 -1
  68. package/dist/templates/shadcn.js +1 -1
  69. package/dist/templates/shadcn.js.map +1 -1
  70. package/dist/templates/shared.js +4 -4
  71. package/dist/templates/shared.js.map +1 -1
  72. package/dist/templates/testing.d.ts.map +1 -1
  73. package/dist/templates/testing.js +7 -19
  74. package/dist/templates/testing.js.map +1 -1
  75. package/dist/test-discovery.d.ts +9 -0
  76. package/dist/test-discovery.d.ts.map +1 -0
  77. package/dist/test-discovery.js +40 -0
  78. package/dist/test-discovery.js.map +1 -0
  79. package/package.json +7 -5
  80. package/skills/app-structure/SKILL.md +37 -10
  81. package/src/analysis/layers.ts +4 -2
  82. package/src/analysis/port-wiring.ts +2 -1
  83. package/src/analysis/source-files.ts +61 -0
  84. package/src/analysis/workspace.ts +27 -31
  85. package/src/app-map-changes.ts +10 -8
  86. package/src/app-map.ts +43 -32
  87. package/src/check.ts +115 -25
  88. package/src/git-changes.ts +218 -86
  89. package/src/index.ts +53 -8
  90. package/src/inspect.ts +627 -146
  91. package/src/lint.ts +6 -5
  92. package/src/make.ts +0 -2
  93. package/src/mcp.ts +34 -11
  94. package/src/operational-process.ts +1 -0
  95. package/src/operational-runner.ts +1 -0
  96. package/src/outbox.ts +63 -12
  97. package/src/templates/agents.ts +43 -15
  98. package/src/templates/base.ts +5 -5
  99. package/src/templates/db/mysql.ts +51 -22
  100. package/src/templates/db/postgres.ts +60 -20
  101. package/src/templates/db/sqlite.ts +51 -23
  102. package/src/templates/shadcn.ts +1 -1
  103. package/src/templates/shared.ts +4 -4
  104. package/src/templates/testing.ts +12 -19
  105. package/src/test-discovery.ts +53 -0
@@ -35,8 +35,8 @@ https://beignetjs.com (agent-friendly index at https://beignetjs.com/llms.txt).
35
35
  README.md covers setup and the app map; this file covers what is not
36
36
  discoverable from the code.
37
37
 
38
- This app requires Node.js 22.12 or newer. Bun 1.3.14 or newer is supported for
39
- Beignet commands.
38
+ This app requires Node.js 22.12 or newer. Bun is optional; npm, pnpm, Yarn, and
39
+ Bun can run Beignet commands.
40
40
 
41
41
  ## Registration is explicit
42
42
 
@@ -65,6 +65,12 @@ is a silent failure — the file exists but never runs:
65
65
  - Apps using runtime integrity must list workflow registries in
66
66
  \`defineRuntimeManifest({...})\`.
67
67
 
68
+ Event schemas must output canonical JSON transport data. Use null, strings,
69
+ finite numbers, booleans, arrays, and plain objects. Keep validation
70
+ deterministic and side-effect-free, keep transforms idempotent, and represent
71
+ timestamps as strings or numbers rather than \`Date\` objects.
72
+ Beignet rejects payloads that would change when decoded and validated again.
73
+
68
74
  The starter ships no workflow registries — generators create them on first
69
75
  use, so their absence is fine. \`${cli} make event\`, \`${cli} make job\`,
70
76
  \`${cli} make listener\`, \`${cli} make schedule\`, \`${cli} make task\`,
@@ -101,7 +107,9 @@ re-exports and \`db\` for \`generate\`, \`migrate\`, \`seed\`, or \`reset\`
101
107
  instead of falling back to a shell. Use the read-only \`db_status\` tool before
102
108
  deploying. Use \`task_run\`, \`schedule_run\`,
103
109
  \`outbox_inspect\`, and \`outbox_run\` for registered operational workflows
104
- and outbox recovery.
110
+ and outbox recovery. Treat a drain with nonzero \`settlementFailed\` or
111
+ \`leaseLost\` as an operational failure. Parallel delivery is opt-in and does
112
+ not preserve message order.
105
113
 
106
114
  ## The framework already solves these
107
115
 
@@ -138,20 +146,37 @@ formatting. The individual commands (\`${lint}\`, \`${cli} lint\`,
138
146
  \`${cli} doctor --strict\`, \`${test}\`, \`${typecheck}\`) still work when you
139
147
  need one check alone.
140
148
 
141
- Beignet's architecture lint parses TypeScript imports and re-exports,
142
- \`require()\`, import assignments, and literal dynamic imports, then follows
143
- local value imports through feature-root helpers. When lint cannot verify a
144
- computed module reference inside a constrained layer, use a string-literal
145
- specifier or move runtime loading behind an allowed boundary. Move near-miss
146
- feature layers to the canonical path named in the diagnostic.
149
+ Inside a Git worktree, \`${cli} check\` fingerprints HEAD, the index, the
150
+ worktree, and non-ignored untracked files before and after validation. If the
151
+ ending fingerprint differs from the baseline, the result is stale and
152
+ unsuccessful even when every step passed; rerun the check against the resulting
153
+ source. Outside Git, the same validation runs with source provenance marked
154
+ unavailable; report that limitation instead of describing the result as
155
+ source-current.
156
+
157
+ Beignet's architecture lint parses JavaScript and TypeScript imports and
158
+ re-exports, \`require()\`, import assignments, and literal dynamic imports, then
159
+ follows local value imports through feature-root helpers. This includes JSX
160
+ and the \`.mts\`, \`.cts\`, \`.mjs\`, and \`.cjs\` module variants. When lint
161
+ cannot verify a computed module reference inside a constrained layer, use a
162
+ string-literal specifier or move runtime loading behind an allowed boundary.
163
+ Move near-miss feature layers to the canonical path named in the diagnostic.
147
164
 
148
165
  Before exploring unfamiliar code, run \`${cli} map\` for the human inventory
149
166
  or \`${cli} map --json --feature <name>\` for an evidence-backed graph scoped
150
- to one feature. The graph honors the app's complete TypeScript \`baseUrl\` and
151
- \`paths\` configuration. Fix \`local_import_unresolved\` and
152
- \`contract_declaration_unresolved\` entries rather than treating their missing
153
- edges as proof that no relationship exists. Registration diagnostics expose
154
- the declaration as \`subject.file\` and \`subject.exportName\`.
167
+ to one feature. The graph analyzes JavaScript and TypeScript source and honors
168
+ the app's complete \`baseUrl\` and \`paths\` configuration from
169
+ \`tsconfig.json\`, or \`jsconfig.json\` when no TypeScript config exists. Fix
170
+ \`local_import_unresolved\` and \`contract_declaration_unresolved\` entries
171
+ rather than treating their missing edges as proof that no relationship exists.
172
+ Registration diagnostics expose the declaration as \`subject.file\` and
173
+ \`subject.exportName\`.
174
+
175
+ The graph includes JavaScript and TypeScript test/spec files under canonical
176
+ and configured app test roots. Feature tests retain feature ownership;
177
+ adjacent app, infra, server, and top-level tests remain app-level nodes and can
178
+ appear as reverse-import consumers in changed mode. Treat that as impact
179
+ evidence, not proof of behavioral coverage.
155
180
 
156
181
  After editing in a Git worktree, run \`${cli} map --changed\` before the full
157
182
  check. It reports direct changes, reverse imports, one-hop semantic consumers,
@@ -236,7 +261,10 @@ and reports the script without executing it; it does not simulate SQL or data
236
261
  changes. Use \`task_run\` and \`schedule_run\` for registered operational
237
262
  workflows, \`outbox_inspect\` for read-only \`list\` and \`show\`, and
238
263
  \`outbox_run\` for \`drain\`, \`requeue\`, \`purge\`, or \`prune\`; purge and
239
- prune support \`dryRun\`. Operational commands run in isolated process trees
264
+ prune support \`dryRun\`. A drain with nonzero \`settlementFailed\` or
265
+ \`leaseLost\` remains a complete JSON report but is an error result; inspect
266
+ storage health and clock synchronization before retrying. Operational commands
267
+ run in isolated process trees
240
268
  with bounded results, cancellation, and timeouts. Optional \`module\` overrides
241
269
  must remain inside the app root where the MCP server started. Cancellation and
242
270
  timeouts cannot roll back side effects that already completed. Inspect app
@@ -1 +1 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/templates/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;AAExE;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAoB;IAC3C,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,IAAI,GACR,GAAG,CAAC,cAAc,KAAK,KAAK;QAC1B,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,WAAW,CAAC;IACvC,MAAM,IAAI,GACR,GAAG,CAAC,cAAc,KAAK,KAAK;QAC1B,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,WAAW,CAAC;IACvC,MAAM,MAAM,GACV,GAAG,CAAC,cAAc,KAAK,KAAK;QAC1B,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,aAAa,CAAC;IACzC,MAAM,SAAS,GACb,GAAG,CAAC,cAAc,KAAK,KAAK;QAC1B,CAAC,CAAC,mBAAmB;QACrB,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,gBAAgB,CAAC;IAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,mBAAmB,GAAG,GAAG,CAAC,GAAG;QACjC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,yQAAyQ;YACzQ,6TAA6T;YAC7T,+SAA+S,CAAC;IACpT,MAAM,cAAc,GAAG,GAAG,CAAC,GAAG;QAC5B,CAAC,CAAC,uOAAuO;QACzO,CAAC,CAAC,wSAAwS,CAAC;IAE7S,OAAO,KAAK,GAAG,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;sDAwBgC,GAAG;;;;;;;;;;;;;;mCActB,GAAG,oBAAoB,GAAG;IACzD,GAAG,uBAAuB,GAAG,uBAAuB,GAAG;IACvD,GAAG,uBAAuB,GAAG;;;;;IAK7B,GAAG;SACE,GAAG;IACR,GAAG;sCAC+B,GAAG;;;;;YAK7B,GAAG;uCACwB,GAAG;IACtC,GAAG,yBAAyB,GAAG;;;;;;IAM/B,GAAG;kDAC2C,GAAG;uBAC9B,GAAG;;;8BAGI,GAAG,qBAAqB,GAAG;IACrD,GAAG;;;;;;;;;;;;;;eAcQ,mBAAmB;;;;;;;;;;;;;;;;;;EAkBhC,GAAG;;;YAGO,GAAG;IACX,GAAG;;gDAEyC,MAAM;yCACb,IAAI,SAAS,GAAG;IACrD,GAAG,yBAAyB,IAAI,SAAS,SAAS;;;;;;;;;;0CAUZ,GAAG;OACtC,GAAG;;;;;;;yCAO+B,GAAG;;;;;;;;;;;;;;;EAe1C,MAAM;EACN,MAAM;;;kEAG0D,cAAc;QACxE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4CV,GAAG;;;;;IAKH,GAAG;;;;;;;;;;;;;;;;;;;;sBAoBe,GAAG;CACxB,CAAC;AACF,CAAC;AAED,SAAS,YAAY,CAAC,GAAoB;IACxC,QAAQ,GAAG,CAAC,cAAc,EAAE,CAAC;QAC3B,KAAK,KAAK;YACR,OAAO,6BAA6B,CAAC;QACvC,KAAK,MAAM;YACT,OAAO,kCAAkC,CAAC;QAC5C,KAAK,MAAM;YACT,OAAO,kCAAkC,CAAC;QAC5C;YACE,OAAO,8BAA8B,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,IAAqB;IAC3C,OAAO,IAAI,CAAC;QACV,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,OAAO,EAAE,6BAA6B;gBACtC,IAAI,EAAE,CAAC,KAAK,CAAC;aACd;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/templates/agents.ts"],"names":[],"mappings":"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"}
@@ -207,8 +207,8 @@ route groups such as \`app/(app)\` are not part of the URL.
207
207
 
208
208
  Beignet app scaffolded with \`@beignet/cli\`.
209
209
 
210
- Node.js 22.12 or newer is required. Bun 1.3.14 or newer is supported for
211
- Beignet commands.
210
+ Node.js 22.12 or newer is required. Bun is optional; npm, pnpm, Yarn, and Bun
211
+ can run Beignet commands.
212
212
 
213
213
  ## Getting started
214
214
 
@@ -248,9 +248,9 @@ use cases, workflows, ports, providers, and tests connect. \`check\` runs the
248
248
  whole validation loop in one pass: \`${cli} lint\` (dependency direction),
249
249
  \`${cli} doctor --strict\` (route, OpenAPI, and resource drift), and the
250
250
  \`lint\`, \`typecheck\`, and \`test\` package scripts. Use \`${format}\` to
251
- apply Biome formatting. Beignet lint uses the TypeScript import graph, follows
252
- feature-root helpers, and reports unverifiable computed module references in
253
- constrained layers.
251
+ apply Biome formatting. Beignet lint analyzes JavaScript and TypeScript import
252
+ graphs, follows feature-root helpers, and reports unverifiable computed module
253
+ references in constrained layers.
254
254
  ${testingNotes}
255
255
  ## Coding agents
256
256
 
@@ -1 +1 @@
1
- {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../../src/templates/db/mysql.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,wBAAgB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CA0blE"}
1
+ {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../../src/templates/db/mysql.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,wBAAgB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CAqclE"}
@@ -15,7 +15,7 @@
15
15
  // lives outside the app schema, so `db generate` never diffs against it.
16
16
  //
17
17
  // The Better Auth tables were generated with
18
- // `bunx @better-auth/cli generate` against a scratch app configured with
18
+ // `bunx auth generate` against a scratch app configured with
19
19
  // drizzleAdapter(db, { provider: "mysql" }), then normalized to the starter's
20
20
  // conventions (tabs, no relations, no extra indexes, no column defaults).
21
21
  // MySQL cannot put UNIQUE constraints on bare text columns, so identity
@@ -56,6 +56,7 @@ export function closeDatabaseClient(): Promise<void> {
56
56
  mysqlTable,
57
57
  text,
58
58
  timestamp,
59
+ uniqueIndex,
59
60
  varchar,
60
61
  } from "drizzle-orm/mysql-core";
61
62
 
@@ -82,23 +83,33 @@ export const session = mysqlTable("session", {
82
83
  .references(() => user.id, { onDelete: "cascade" }),
83
84
  });
84
85
 
85
- export const account = mysqlTable("account", {
86
- id: varchar("id", { length: 36 }).primaryKey(),
87
- accountId: text("account_id").notNull(),
88
- providerId: text("provider_id").notNull(),
89
- userId: varchar("user_id", { length: 36 })
90
- .notNull()
91
- .references(() => user.id, { onDelete: "cascade" }),
92
- accessToken: text("access_token"),
93
- refreshToken: text("refresh_token"),
94
- idToken: text("id_token"),
95
- accessTokenExpiresAt: timestamp("access_token_expires_at", { fsp: 3 }),
96
- refreshTokenExpiresAt: timestamp("refresh_token_expires_at", { fsp: 3 }),
97
- scope: text("scope"),
98
- password: text("password"),
99
- createdAt: timestamp("created_at", { fsp: 3 }).notNull(),
100
- updatedAt: timestamp("updated_at", { fsp: 3 }).notNull(),
101
- });
86
+ export const account = mysqlTable(
87
+ "account",
88
+ {
89
+ id: varchar("id", { length: 36 }).primaryKey(),
90
+ issuer: varchar("issuer", { length: 255 }).notNull(),
91
+ accountId: varchar("account_id", { length: 255 }).notNull(),
92
+ providerId: text("provider_id").notNull(),
93
+ userId: varchar("user_id", { length: 36 })
94
+ .notNull()
95
+ .references(() => user.id, { onDelete: "cascade" }),
96
+ accessToken: text("access_token"),
97
+ refreshToken: text("refresh_token"),
98
+ idToken: text("id_token"),
99
+ accessTokenExpiresAt: timestamp("access_token_expires_at", { fsp: 3 }),
100
+ refreshTokenExpiresAt: timestamp("refresh_token_expires_at", { fsp: 3 }),
101
+ scope: text("scope"),
102
+ password: text("password"),
103
+ createdAt: timestamp("created_at", { fsp: 3 }).notNull(),
104
+ updatedAt: timestamp("updated_at", { fsp: 3 }).notNull(),
105
+ },
106
+ (table) => [
107
+ uniqueIndex("account_issuer_accountId_uidx").on(
108
+ table.issuer,
109
+ table.accountId,
110
+ ),
111
+ ],
112
+ );
102
113
 
103
114
  export const verification = mysqlTable("verification", {
104
115
  id: varchar("id", { length: 36 }).primaryKey(),
@@ -471,7 +482,8 @@ const mysqlStarterMigration = {
471
482
  // above, with the provider idempotency setup statements appended.
472
483
  starterMigrationSql: `CREATE TABLE \`account\` (
473
484
  \`id\` varchar(36) NOT NULL,
474
- \`account_id\` text NOT NULL,
485
+ \`issuer\` varchar(255) NOT NULL,
486
+ \`account_id\` varchar(255) NOT NULL,
475
487
  \`provider_id\` text NOT NULL,
476
488
  \`user_id\` varchar(36) NOT NULL,
477
489
  \`access_token\` text,
@@ -483,7 +495,8 @@ const mysqlStarterMigration = {
483
495
  \`password\` text,
484
496
  \`created_at\` timestamp(3) NOT NULL,
485
497
  \`updated_at\` timestamp(3) NOT NULL,
486
- CONSTRAINT \`account_id\` PRIMARY KEY(\`id\`)
498
+ CONSTRAINT \`account_id\` PRIMARY KEY(\`id\`),
499
+ CONSTRAINT \`account_issuer_accountId_uidx\` UNIQUE(\`issuer\`,\`account_id\`)
487
500
  );
488
501
  --> statement-breakpoint
489
502
  CREATE TABLE \`session\` (
@@ -580,9 +593,16 @@ CREATE TABLE IF NOT EXISTS \`idempotency_records\` (
580
593
  "notNull": true,
581
594
  "autoincrement": false
582
595
  },
596
+ "issuer": {
597
+ "name": "issuer",
598
+ "type": "varchar(255)",
599
+ "primaryKey": false,
600
+ "notNull": true,
601
+ "autoincrement": false
602
+ },
583
603
  "account_id": {
584
604
  "name": "account_id",
585
- "type": "text",
605
+ "type": "varchar(255)",
586
606
  "primaryKey": false,
587
607
  "notNull": true,
588
608
  "autoincrement": false
@@ -665,7 +685,16 @@ CREATE TABLE IF NOT EXISTS \`idempotency_records\` (
665
685
  "autoincrement": false
666
686
  }
667
687
  },
668
- "indexes": {},
688
+ "indexes": {
689
+ "account_issuer_accountId_uidx": {
690
+ "name": "account_issuer_accountId_uidx",
691
+ "columns": [
692
+ "issuer",
693
+ "account_id"
694
+ ],
695
+ "isUnique": true
696
+ }
697
+ },
669
698
  "foreignKeys": {
670
699
  "account_user_id_user_id_fk": {
671
700
  "name": "account_user_id_user_id_fk",
@@ -1 +1 @@
1
- {"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../../src/templates/db/mysql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../../src/templates/db/mysql.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/templates/db/postgres.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CA8XrE"}
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/templates/db/postgres.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CAwYrE"}
@@ -15,7 +15,7 @@
15
15
  // lives outside the app schema, so `db generate` never diffs against it.
16
16
  //
17
17
  // The Better Auth tables were generated with
18
- // `bunx @better-auth/cli generate` against a scratch app configured with
18
+ // `bunx auth generate` against a scratch app configured with
19
19
  // drizzleAdapter(db, { provider: "pg" }), then normalized to the starter's
20
20
  // conventions (tabs, no relations, no extra indexes, no column defaults).
21
21
  import { databaseLocalUrl } from "../../choices.js";
@@ -47,7 +47,7 @@ export function closeDatabaseClient(): Promise<void> {
47
47
  return closePromise;
48
48
  }
49
49
  `,
50
- dbSchema: `import { boolean, index, pgTable, text, timestamp } from "drizzle-orm/pg-core";
50
+ dbSchema: `import { boolean, index, pgTable, text, timestamp, uniqueIndex } from "drizzle-orm/pg-core";
51
51
 
52
52
  export const user = pgTable("user", {
53
53
  id: text("id").primaryKey(),
@@ -72,23 +72,33 @@ export const session = pgTable("session", {
72
72
  .references(() => user.id, { onDelete: "cascade" }),
73
73
  });
74
74
 
75
- export const account = pgTable("account", {
76
- id: text("id").primaryKey(),
77
- accountId: text("account_id").notNull(),
78
- providerId: text("provider_id").notNull(),
79
- userId: text("user_id")
80
- .notNull()
81
- .references(() => user.id, { onDelete: "cascade" }),
82
- accessToken: text("access_token"),
83
- refreshToken: text("refresh_token"),
84
- idToken: text("id_token"),
85
- accessTokenExpiresAt: timestamp("access_token_expires_at"),
86
- refreshTokenExpiresAt: timestamp("refresh_token_expires_at"),
87
- scope: text("scope"),
88
- password: text("password"),
89
- createdAt: timestamp("created_at").notNull(),
90
- updatedAt: timestamp("updated_at").notNull(),
91
- });
75
+ export const account = pgTable(
76
+ "account",
77
+ {
78
+ id: text("id").primaryKey(),
79
+ issuer: text("issuer").notNull(),
80
+ accountId: text("account_id").notNull(),
81
+ providerId: text("provider_id").notNull(),
82
+ userId: text("user_id")
83
+ .notNull()
84
+ .references(() => user.id, { onDelete: "cascade" }),
85
+ accessToken: text("access_token"),
86
+ refreshToken: text("refresh_token"),
87
+ idToken: text("id_token"),
88
+ accessTokenExpiresAt: timestamp("access_token_expires_at"),
89
+ refreshTokenExpiresAt: timestamp("refresh_token_expires_at"),
90
+ scope: text("scope"),
91
+ password: text("password"),
92
+ createdAt: timestamp("created_at").notNull(),
93
+ updatedAt: timestamp("updated_at").notNull(),
94
+ },
95
+ (table) => [
96
+ uniqueIndex("account_issuer_accountId_uidx").on(
97
+ table.issuer,
98
+ table.accountId,
99
+ ),
100
+ ],
101
+ );
92
102
 
93
103
  export const verification = pgTable("verification", {
94
104
  id: text("id").primaryKey(),
@@ -408,6 +418,7 @@ const postgresStarterMigration = {
408
418
  // above, with the provider idempotency setup statements appended.
409
419
  starterMigrationSql: `CREATE TABLE "account" (
410
420
  "id" text PRIMARY KEY NOT NULL,
421
+ "issuer" text NOT NULL,
411
422
  "account_id" text NOT NULL,
412
423
  "provider_id" text NOT NULL,
413
424
  "user_id" text NOT NULL,
@@ -465,6 +476,7 @@ CREATE TABLE "verification" (
465
476
  ALTER TABLE "account" ADD CONSTRAINT "account_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
466
477
  ALTER TABLE "session" ADD CONSTRAINT "session_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
467
478
  ALTER TABLE "todos" ADD CONSTRAINT "todos_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
479
+ CREATE UNIQUE INDEX "account_issuer_accountId_uidx" ON "account" USING btree ("issuer","account_id");--> statement-breakpoint
468
480
  CREATE INDEX "todos_user_idx" ON "todos" USING btree ("user_id","created_at");
469
481
  --> statement-breakpoint
470
482
  CREATE TABLE IF NOT EXISTS "idempotency_records" (
@@ -512,6 +524,12 @@ CREATE INDEX IF NOT EXISTS "idempotency_records_expires_idx" ON "idempotency_rec
512
524
  "primaryKey": true,
513
525
  "notNull": true
514
526
  },
527
+ "issuer": {
528
+ "name": "issuer",
529
+ "type": "text",
530
+ "primaryKey": false,
531
+ "notNull": true
532
+ },
515
533
  "account_id": {
516
534
  "name": "account_id",
517
535
  "type": "text",
@@ -585,7 +603,29 @@ CREATE INDEX IF NOT EXISTS "idempotency_records_expires_idx" ON "idempotency_rec
585
603
  "notNull": true
586
604
  }
587
605
  },
588
- "indexes": {},
606
+ "indexes": {
607
+ "account_issuer_accountId_uidx": {
608
+ "name": "account_issuer_accountId_uidx",
609
+ "columns": [
610
+ {
611
+ "expression": "issuer",
612
+ "isExpression": false,
613
+ "asc": true,
614
+ "nulls": "last"
615
+ },
616
+ {
617
+ "expression": "account_id",
618
+ "isExpression": false,
619
+ "asc": true,
620
+ "nulls": "last"
621
+ }
622
+ ],
623
+ "isUnique": true,
624
+ "concurrently": false,
625
+ "method": "btree",
626
+ "with": {}
627
+ }
628
+ },
589
629
  "foreignKeys": {
590
630
  "account_user_id_user_id_fk": {
591
631
  "name": "account_user_id_user_id_fk",
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/templates/db/postgres.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,sEAAsE;AACtE,uEAAuE;AACvE,EAAE;AACF,2DAA2D;AAC3D,0EAA0E;AAC1E,+EAA+E;AAC/E,yEAAyE;AACzE,8DAA8D;AAC9D,4EAA4E;AAC5E,sCAAsC;AACtC,yDAAyD;AACzD,2EAA2E;AAC3E,0EAA0E;AAC1E,yEAAyE;AACzE,EAAE;AACF,6CAA6C;AAC7C,yEAAyE;AACzE,2EAA2E;AAC3E,0EAA0E;AAE1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,UAAU,eAAe,CAAC,GAAoB;IAClD,OAAO;QACL,aAAa,EAAE;;;;;yCAKsB,gBAAgB,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC;;;CAG9E;QACG,QAAQ,EAAE;;;;;;;;;;;;;;;CAeb;QACG,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsEb;QACG,qBAAqB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsF1B;QACG,cAAc,EAAE;;;;;;;;;;;;CAYnB;QACG,aAAa,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqClB;QACG,iBAAiB,EAAE,uBAAuB,CAAC;YACzC,OAAO,EAAE;iCACkB;YAC3B,IAAI,EAAE,sEAAsE;YAC5E,WAAW,EAAE;;;;;;;;;;;;;QAaX;YACF,KAAK,EAAE,mBAAmB;SAC3B,CAAC;QACF,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDf;QACG,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCZ;QACG,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCnB;QACG,GAAG,wBAAwB;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,wBAAwB,GAAG;IAC/B,oEAAoE;IACpE,kEAAkE;IAClE,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4EtB;IACC,uBAAuB,EAAE;;;;;;;;;;;;EAYzB;IACA,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+Y1B;CACD,CAAC"}
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/templates/db/postgres.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,sEAAsE;AACtE,uEAAuE;AACvE,EAAE;AACF,2DAA2D;AAC3D,0EAA0E;AAC1E,+EAA+E;AAC/E,yEAAyE;AACzE,8DAA8D;AAC9D,4EAA4E;AAC5E,sCAAsC;AACtC,yDAAyD;AACzD,2EAA2E;AAC3E,0EAA0E;AAC1E,yEAAyE;AACzE,EAAE;AACF,6CAA6C;AAC7C,6DAA6D;AAC7D,2EAA2E;AAC3E,0EAA0E;AAE1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,UAAU,eAAe,CAAC,GAAoB;IAClD,OAAO;QACL,aAAa,EAAE;;;;;yCAKsB,gBAAgB,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC;;;CAG9E;QACG,QAAQ,EAAE;;;;;;;;;;;;;;;CAeb;QACG,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgFb;QACG,qBAAqB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsF1B;QACG,cAAc,EAAE;;;;;;;;;;;;CAYnB;QACG,aAAa,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqClB;QACG,iBAAiB,EAAE,uBAAuB,CAAC;YACzC,OAAO,EAAE;iCACkB;YAC3B,IAAI,EAAE,sEAAsE;YAC5E,WAAW,EAAE;;;;;;;;;;;;;QAaX;YACF,KAAK,EAAE,mBAAmB;SAC3B,CAAC;QACF,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDf;QACG,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCZ;QACG,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCnB;QACG,GAAG,wBAAwB;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,wBAAwB,GAAG;IAC/B,oEAAoE;IACpE,kEAAkE;IAClE,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8EtB;IACC,uBAAuB,EAAE;;;;;;;;;;;;EAYzB;IACA,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2a1B;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/templates/db/sqlite.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA26BlD,wBAAgB,aAAa,IAAI,eAAe,CAE/C"}
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/templates/db/sqlite.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAu8BlD,wBAAgB,aAAa,IAAI,eAAe,CAE/C"}
@@ -39,7 +39,7 @@ export function closeDatabaseClient(): Promise<void> {
39
39
  return closePromise;
40
40
  }
41
41
  `,
42
- dbSchema: `import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
42
+ dbSchema: `import { index, integer, sqliteTable, text, uniqueIndex } from "drizzle-orm/sqlite-core";
43
43
 
44
44
  export const user = sqliteTable("user", {
45
45
  id: text("id").primaryKey(),
@@ -66,27 +66,37 @@ export const session = sqliteTable("session", {
66
66
  .references(() => user.id, { onDelete: "cascade" }),
67
67
  });
68
68
 
69
- export const account = sqliteTable("account", {
70
- id: text("id").primaryKey(),
71
- accountId: text("account_id").notNull(),
72
- providerId: text("provider_id").notNull(),
73
- userId: text("user_id")
74
- .notNull()
75
- .references(() => user.id, { onDelete: "cascade" }),
76
- accessToken: text("access_token"),
77
- refreshToken: text("refresh_token"),
78
- idToken: text("id_token"),
79
- accessTokenExpiresAt: integer("access_token_expires_at", {
80
- mode: "timestamp",
81
- }),
82
- refreshTokenExpiresAt: integer("refresh_token_expires_at", {
83
- mode: "timestamp",
84
- }),
85
- scope: text("scope"),
86
- password: text("password"),
87
- createdAt: integer("created_at", { mode: "timestamp" }).notNull(),
88
- updatedAt: integer("updated_at", { mode: "timestamp" }).notNull(),
89
- });
69
+ export const account = sqliteTable(
70
+ "account",
71
+ {
72
+ id: text("id").primaryKey(),
73
+ issuer: text("issuer").notNull(),
74
+ accountId: text("account_id").notNull(),
75
+ providerId: text("provider_id").notNull(),
76
+ userId: text("user_id")
77
+ .notNull()
78
+ .references(() => user.id, { onDelete: "cascade" }),
79
+ accessToken: text("access_token"),
80
+ refreshToken: text("refresh_token"),
81
+ idToken: text("id_token"),
82
+ accessTokenExpiresAt: integer("access_token_expires_at", {
83
+ mode: "timestamp",
84
+ }),
85
+ refreshTokenExpiresAt: integer("refresh_token_expires_at", {
86
+ mode: "timestamp",
87
+ }),
88
+ scope: text("scope"),
89
+ password: text("password"),
90
+ createdAt: integer("created_at", { mode: "timestamp" }).notNull(),
91
+ updatedAt: integer("updated_at", { mode: "timestamp" }).notNull(),
92
+ },
93
+ (table) => [
94
+ uniqueIndex("account_issuer_accountId_uidx").on(
95
+ table.issuer,
96
+ table.accountId,
97
+ ),
98
+ ],
99
+ );
90
100
 
91
101
  export const verification = sqliteTable("verification", {
92
102
  id: text("id").primaryKey(),
@@ -449,6 +459,7 @@ export async function createTestDatabase(): Promise<TestDatabase> {
449
459
  // above, with the provider idempotency setup statements appended.
450
460
  starterMigrationSql: `CREATE TABLE \`account\` (
451
461
  \`id\` text PRIMARY KEY NOT NULL,
462
+ \`issuer\` text NOT NULL,
452
463
  \`account_id\` text NOT NULL,
453
464
  \`provider_id\` text NOT NULL,
454
465
  \`user_id\` text NOT NULL,
@@ -464,6 +475,7 @@ export async function createTestDatabase(): Promise<TestDatabase> {
464
475
  FOREIGN KEY (\`user_id\`) REFERENCES \`user\`(\`id\`) ON UPDATE no action ON DELETE cascade
465
476
  );
466
477
  --> statement-breakpoint
478
+ CREATE UNIQUE INDEX \`account_issuer_accountId_uidx\` ON \`account\` (\`issuer\`,\`account_id\`);--> statement-breakpoint
467
479
  CREATE TABLE \`session\` (
468
480
  \`id\` text PRIMARY KEY NOT NULL,
469
481
  \`expires_at\` integer NOT NULL,
@@ -552,6 +564,13 @@ CREATE INDEX IF NOT EXISTS "idempotency_records_expires_idx" ON "idempotency_rec
552
564
  "notNull": true,
553
565
  "autoincrement": false
554
566
  },
567
+ "issuer": {
568
+ "name": "issuer",
569
+ "type": "text",
570
+ "primaryKey": false,
571
+ "notNull": true,
572
+ "autoincrement": false
573
+ },
555
574
  "account_id": {
556
575
  "name": "account_id",
557
576
  "type": "text",
@@ -637,7 +656,16 @@ CREATE INDEX IF NOT EXISTS "idempotency_records_expires_idx" ON "idempotency_rec
637
656
  "autoincrement": false
638
657
  }
639
658
  },
640
- "indexes": {},
659
+ "indexes": {
660
+ "account_issuer_accountId_uidx": {
661
+ "name": "account_issuer_accountId_uidx",
662
+ "columns": [
663
+ "issuer",
664
+ "account_id"
665
+ ],
666
+ "isUnique": true
667
+ }
668
+ },
641
669
  "foreignKeys": {
642
670
  "account_user_id_user_id_fk": {
643
671
  "name": "account_user_id_user_id_fk",
@@ -1 +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;AAGzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,KAAK,GAAG;IACZ,aAAa,EAAE;;;;;;;;;CAShB;IACC,QAAQ,EAAE;;;;;;;;;;;;;;;CAeX;IACC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2EX;IACC,qBAAqB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsFxB;IACC,cAAc,EAAE;;;;;;;;;;;;CAYjB;IACC,aAAa,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8ChB;IACC,iBAAiB,EAAE,uBAAuB,CAAC;QACzC,OAAO,EAAE;;;;iCAIoB;QAC7B,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BR;QACE,WAAW,EAAE;;;;;;;;;;;;;;;;EAgBf;QACE,KAAK,EAAE,kBAAkB;KAC1B,CAAC;IACF,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"}
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;AAGzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,KAAK,GAAG;IACZ,aAAa,EAAE;;;;;;;;;CAShB;IACC,QAAQ,EAAE;;;;;;;;;;;;;;;CAeX;IACC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqFX;IACC,qBAAqB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsFxB;IACC,cAAc,EAAE;;;;;;;;;;;;CAYjB;IACC,aAAa,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8ChB;IACC,iBAAiB,EAAE,uBAAuB,CAAC;QACzC,OAAO,EAAE;;;;iCAIoB;QAC7B,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BR;QACE,WAAW,EAAE;;;;;;;;;;;;;;;;EAgBf;QACE,KAAK,EAAE,kBAAkB;KAC1B,CAAC;IACF,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDb;IACC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CV;IACC,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCjB;IACC,oEAAoE;IACpE,kEAAkE;IAClE,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6EtB;IACC,uBAAuB,EAAE;;;;;;;;;;;;EAYzB;IACA,wBAAwB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAya1B;CACD,CAAC;AAEF,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -546,7 +546,7 @@ export const shadcnDependencies = {
546
546
  clsx: "^2.1.1",
547
547
  "lucide-react": "^1.16.0",
548
548
  "radix-ui": "^1.4.3",
549
- shadcn: "^4.7.0",
549
+ shadcn: "^4.19.0",
550
550
  "tailwind-merge": "^3.6.0",
551
551
  "tw-animate-css": "^1.4.0",
552
552
  };
@@ -1 +1 @@
1
- {"version":3,"file":"shadcn.js","sourceRoot":"","sources":["../../src/templates/shadcn.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,MAAM,aAAa,GAAG;;;;;;;CAOrB,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBtB,CAAC;AAEF,MAAM,QAAQ,GAAG;;;;;;CAMhB,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiIrB,CAAC;AAEF,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqEhB,CAAC;AAEF,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGd,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgClB,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiEtB,CAAC;AAEF,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;CAmBf,CAAC;AAEF,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBf,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BnB,CAAC;AAEF,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,aAAa,EAAE;QACtD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE;QACpD,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC3C,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,EAAE;QACnD,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,QAAQ,EAAE;QACvD,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,EAAE;QACnD,EAAE,IAAI,EAAE,4BAA4B,EAAE,OAAO,EAAE,UAAU,EAAE;QAC3D,EAAE,IAAI,EAAE,iCAAiC,EAAE,OAAO,EAAE,cAAc,EAAE;QACpE,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,OAAO,EAAE;QACrD,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,OAAO,EAAE;QACrD,EAAE,IAAI,EAAE,6BAA6B,EAAE,OAAO,EAAE,WAAW,EAAE;KAC9D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,0BAA0B,EAAE,QAAQ;IACpC,IAAI,EAAE,QAAQ;IACd,cAAc,EAAE,SAAS;IACzB,UAAU,EAAE,QAAQ;IACpB,MAAM,EAAE,QAAQ;IAChB,gBAAgB,EAAE,QAAQ;IAC1B,gBAAgB,EAAE,QAAQ;CAC3B,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,sBAAsB,EAAE,QAAQ;IAChC,WAAW,EAAE,QAAQ;CACtB,CAAC"}
1
+ {"version":3,"file":"shadcn.js","sourceRoot":"","sources":["../../src/templates/shadcn.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,MAAM,aAAa,GAAG;;;;;;;CAOrB,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBtB,CAAC;AAEF,MAAM,QAAQ,GAAG;;;;;;CAMhB,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiIrB,CAAC;AAEF,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqEhB,CAAC;AAEF,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGd,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgClB,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiEtB,CAAC;AAEF,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;CAmBf,CAAC;AAEF,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBf,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BnB,CAAC;AAEF,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,aAAa,EAAE;QACtD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE;QACpD,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC3C,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,EAAE;QACnD,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,QAAQ,EAAE;QACvD,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,EAAE;QACnD,EAAE,IAAI,EAAE,4BAA4B,EAAE,OAAO,EAAE,UAAU,EAAE;QAC3D,EAAE,IAAI,EAAE,iCAAiC,EAAE,OAAO,EAAE,cAAc,EAAE;QACpE,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,OAAO,EAAE;QACrD,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,OAAO,EAAE;QACrD,EAAE,IAAI,EAAE,6BAA6B,EAAE,OAAO,EAAE,WAAW,EAAE;KAC9D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,0BAA0B,EAAE,QAAQ;IACpC,IAAI,EAAE,QAAQ;IACd,cAAc,EAAE,SAAS;IACzB,UAAU,EAAE,QAAQ;IACpB,MAAM,EAAE,SAAS;IACjB,gBAAgB,EAAE,QAAQ;IAC1B,gBAAgB,EAAE,QAAQ;CAC3B,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,sBAAsB,EAAE,QAAQ;IAChC,WAAW,EAAE,QAAQ;CACtB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export const externalVersions = {
2
2
  biome: "^2.4.14",
3
- next: "^16.2.10",
3
+ next: "^16.3.2",
4
4
  react: "^19.2.5",
5
5
  reactDom: "^19.2.5",
6
6
  tsx: "^4.22.4",
@@ -12,13 +12,13 @@ export const externalVersions = {
12
12
  tanstackReactQuery: "^5.100.7",
13
13
  hookformResolvers: "^5.0.0",
14
14
  reactHookForm: "^7.74.0",
15
- betterAuth: "1.6.25",
15
+ betterAuth: "1.7.1",
16
16
  bullmq: "^5.0.0",
17
17
  drizzleKit: "^0.31.10",
18
18
  drizzleOrm: "^0.45.2",
19
- inngest: "^4.12.1",
19
+ inngest: "^4.18.1",
20
20
  libsqlClient: "^0.14.0",
21
- vercelBlob: "^2.5.0",
21
+ vercelBlob: "^2.8.0",
22
22
  mysql2: "^3.12.0",
23
23
  pg: "^8.13.0",
24
24
  pglite: "^0.5.2",
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"AAgCA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,SAAS;IACnB,GAAG,EAAE,SAAS;IACd,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE,SAAS;IACrB,aAAa,EAAE,SAAS;IACxB,GAAG,EAAE,QAAQ;IACb,kBAAkB,EAAE,UAAU;IAC9B,iBAAiB,EAAE,QAAQ;IAC3B,aAAa,EAAE,SAAS;IACxB,UAAU,EAAE,OAAO;IACnB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,UAAU;IACtB,UAAU,EAAE,SAAS;IACrB,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,SAAS;IACvB,UAAU,EAAE,QAAQ;IACpB,MAAM,EAAE,SAAS;IACjB,EAAE,EAAE,SAAS;IACb,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,UAAU;IACtB,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,QAAQ;IACpB,oBAAoB,EAAE,SAAS;IAC/B,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,WAAW;IACrB,gBAAgB,EAAE,UAAU;IAC5B,gBAAgB,EAAE,QAAQ;IAC1B,YAAY,EAAE,QAAQ;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GACxC;IACE,UAAU,EAAE,CAAC,uBAAuB,CAAC;IACrC,SAAS,EAAE,CAAC,oBAAoB,CAAC;IACjC,IAAI,EAAE,CAAC,UAAU,EAAE,gCAAgC,CAAC;CACrD,CAAC;AAEJ,MAAM,CAAC,MAAM,8BAA8B,GAA2B;IACpE,UAAU,EAAE,uBAAuB;IACnC,SAAS,EAAE,oBAAoB;IAC/B,WAAW,EAAE,kCAAkC;IAC/C,IAAI,EAAE,8CAA8C;CACrD,CAAC;AAEF,MAAM,UAAU,8BAA8B,CAC5C,IAAY,EACZ,OAA2B;IAE3B,OAAO,6BAA6B,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;AAC/E,CAAC;AAoCD,MAAM,mBAAmB,GAA6C;IACpE,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,uBAAuB;QACrC,eAAe,EAAE,6BAA6B;QAC9C,gBAAgB,EAAE,uBAAuB;QACzC,YAAY,EAAE,gBAAgB;QAC9B,SAAS,EAAE,eAAe;QAC1B,iBAAiB,EAAE,QAAQ;QAC3B,kBAAkB,EAAE,QAAQ;KAC7B;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,UAAU;QACnB,QAAQ,EAAE,UAAU;QACpB,YAAY,EAAE,yBAAyB;QACvC,eAAe,EAAE,+BAA+B;QAChD,gBAAgB,EAAE,yBAAyB;QAC3C,YAAY,EAAE,kBAAkB;QAChC,SAAS,EAAE,iBAAiB;QAC5B,iBAAiB,EAAE,YAAY;QAC/B,kBAAkB,EAAE,IAAI;KACzB;IACD,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,OAAO;QACjB,YAAY,EAAE,sBAAsB;QACpC,eAAe,EAAE,4BAA4B;QAC7C,gBAAgB,EAAE,sBAAsB;QACxC,YAAY,EAAE,eAAe;QAC7B,SAAS,EAAE,cAAc;QACzB,iBAAiB,EAAE,OAAO;QAC1B,kBAAkB,EAAE,OAAO;KAC5B;CACF,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,GAAoB;IACrD,OAAO,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAoB;IAChD,QAAQ,GAAG,CAAC,cAAc,EAAE,CAAC;QAC3B,KAAK,KAAK;YACR,OAAO,oBAAoB,CAAC;QAC9B,KAAK,MAAM;YACT,OAAO,cAAc,CAAC;QACxB,KAAK,MAAM;YACT,OAAO,cAAc,CAAC;QACxB;YACE,OAAO,aAAa,CAAC;IACzB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAG5B;IACF,cAAc,EAAE;QACd,gCAAgC,EAAE,EAAE;QACpC,OAAO,EAAE,gBAAgB,CAAC,OAAO;KAClC;IACD,aAAa,EAAE;QACb,+BAA+B,EAAE,EAAE;QACnC,MAAM,EAAE,gBAAgB,CAAC,MAAM;KAChC;IACD,oBAAoB,EAAE;QACpB,sCAAsC,EAAE,EAAE;QAC1C,oBAAoB,EAAE,gBAAgB,CAAC,gBAAgB;QACvD,gBAAgB,EAAE,gBAAgB,CAAC,YAAY;KAChD;CACF,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAChC,GAAoB,EACpB,QAA6B;IAE7B,OAAO,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,KAAc;IACjC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;AAClD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/templates/testing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,sBAAsB,EAAE,YA+YpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,YAqKpC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,YAAY,EAGlD,CAAC"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/templates/testing.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,sBAAsB,EAAE,YA+YpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,YAwJpC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,YAAY,EAGlD,CAAC"}