create-better-t-stack 2.49.1 → 2.50.0-canary.5b25d7db

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 (111) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/index.d.ts +2 -2
  3. package/dist/index.js +1 -1
  4. package/dist/{src-CKCxH6aF.js → src-Vtq3I-LI.js} +684 -372
  5. package/package.json +2 -1
  6. package/templates/api/orpc/fullstack/next/src/app/api/rpc/[[...rest]]/route.ts.hbs +50 -0
  7. package/templates/api/orpc/server/_gitignore +34 -0
  8. package/templates/api/orpc/server/package.json.hbs +24 -0
  9. package/templates/api/orpc/server/{base/src/lib → src}/context.ts.hbs +6 -6
  10. package/templates/{backend/server/server-base → api/orpc/server}/src/routers/index.ts.hbs +2 -2
  11. package/templates/api/orpc/server/tsconfig.json.hbs +10 -0
  12. package/templates/api/orpc/server/tsdown.config.ts.hbs +7 -0
  13. package/templates/api/orpc/web/nuxt/app/plugins/orpc.ts.hbs +1 -1
  14. package/templates/api/orpc/web/react/base/src/utils/orpc.ts.hbs +4 -2
  15. package/templates/api/orpc/web/solid/src/utils/orpc.ts.hbs +1 -1
  16. package/templates/api/orpc/web/svelte/src/lib/orpc.ts.hbs +1 -1
  17. package/templates/api/trpc/fullstack/next/src/app/api/trpc/[trpc]/route.ts.hbs +14 -0
  18. package/templates/api/trpc/server/_gitignore +34 -0
  19. package/templates/api/trpc/server/package.json.hbs +23 -0
  20. package/templates/api/trpc/server/{base/src/lib → src}/context.ts.hbs +6 -6
  21. package/templates/api/trpc/server/src/routers/index.ts.hbs +55 -0
  22. package/templates/api/trpc/server/tsconfig.json.hbs +13 -0
  23. package/templates/api/trpc/server/tsdown.config.ts.hbs +7 -0
  24. package/templates/api/trpc/web/react/base/src/utils/trpc.ts.hbs +6 -4
  25. package/templates/auth/better-auth/{server/next/src/app/api/auth/[...all]/route.ts → fullstack/next/src/app/api/auth/[...all]/route.ts.hbs} +1 -1
  26. package/templates/auth/better-auth/server/base/_gitignore +34 -0
  27. package/templates/auth/better-auth/server/base/package.json.hbs +24 -0
  28. package/templates/auth/better-auth/server/base/src/{lib/auth.ts.hbs → index.ts.hbs} +12 -12
  29. package/templates/auth/better-auth/server/base/tsconfig.json.hbs +13 -0
  30. package/templates/auth/better-auth/server/base/tsdown.config.ts.hbs +7 -0
  31. package/templates/auth/better-auth/web/react/base/src/lib/auth-client.ts.hbs +2 -0
  32. package/templates/auth/better-auth/web/react/next/src/app/dashboard/page.tsx.hbs +31 -0
  33. package/templates/auth/clerk/convex/web/react/tanstack-start/src/server.ts.hbs +1 -0
  34. package/templates/backend/server/{server-base → base}/package.json.hbs +0 -1
  35. package/templates/backend/server/{server-base → base}/tsconfig.json.hbs +5 -10
  36. package/templates/backend/server/base/tsdown.config.ts.hbs +14 -0
  37. package/templates/backend/server/elysia/src/index.ts.hbs +6 -6
  38. package/templates/backend/server/express/src/index.ts.hbs +6 -6
  39. package/templates/backend/server/fastify/src/index.ts.hbs +6 -6
  40. package/templates/backend/server/hono/src/index.ts.hbs +7 -7
  41. package/templates/base/_gitignore +47 -1
  42. package/templates/base/package.json.hbs +1 -3
  43. package/templates/base/tsconfig.base.json +23 -0
  44. package/templates/db/base/_gitignore +34 -0
  45. package/templates/db/base/package.json.hbs +23 -0
  46. package/templates/db/base/tsconfig.json.hbs +13 -0
  47. package/templates/db/base/tsdown.config.ts.hbs +7 -0
  48. package/templates/db/drizzle/mysql/drizzle.config.ts.hbs +11 -2
  49. package/templates/db/drizzle/mysql/src/{db/index.ts.hbs → index.ts.hbs} +1 -1
  50. package/templates/db/drizzle/postgres/drizzle.config.ts.hbs +11 -2
  51. package/templates/db/drizzle/postgres/src/{db/index.ts.hbs → index.ts.hbs} +1 -1
  52. package/templates/db/drizzle/sqlite/drizzle.config.ts.hbs +11 -2
  53. package/templates/db/drizzle/sqlite/src/{db/index.ts.hbs → index.ts.hbs} +1 -1
  54. package/templates/db/prisma/mongodb/prisma.config.ts.hbs +9 -1
  55. package/templates/db/prisma/mongodb/src/index.ts.hbs +5 -0
  56. package/templates/db/prisma/mysql/prisma.config.ts.hbs +9 -1
  57. package/templates/db/prisma/mysql/src/{db/index.ts.hbs → index.ts.hbs} +1 -1
  58. package/templates/db/prisma/postgres/prisma.config.ts.hbs +11 -3
  59. package/templates/db/prisma/postgres/src/{db/index.ts.hbs → index.ts.hbs} +1 -1
  60. package/templates/db/prisma/sqlite/prisma.config.ts.hbs +9 -1
  61. package/templates/db/prisma/sqlite/src/{db/index.ts.hbs → index.ts.hbs} +3 -3
  62. package/templates/deploy/wrangler/web/react/tanstack-start/wrangler.jsonc.hbs +1 -1
  63. package/templates/examples/ai/fullstack/next/src/app/api/ai/route.ts.hbs +15 -0
  64. package/templates/examples/todo/server/drizzle/base/src/routers/todo.ts.hbs +7 -7
  65. package/templates/examples/todo/server/mongoose/base/src/routers/todo.ts.hbs +4 -4
  66. package/templates/examples/todo/server/prisma/base/src/routers/todo.ts.hbs +4 -4
  67. package/templates/frontend/native/nativewind/tsconfig.json.hbs +1 -6
  68. package/templates/frontend/native/unistyles/tsconfig.json.hbs +1 -6
  69. package/templates/frontend/nuxt/tsconfig.json.hbs +0 -4
  70. package/templates/frontend/react/next/package.json.hbs +1 -1
  71. package/templates/frontend/react/next/tsconfig.json.hbs +0 -7
  72. package/templates/frontend/react/react-router/tsconfig.json.hbs +1 -6
  73. package/templates/frontend/react/tanstack-router/src/routes/__root.tsx.hbs +1 -1
  74. package/templates/frontend/react/tanstack-router/tsconfig.json.hbs +1 -6
  75. package/templates/frontend/react/tanstack-start/package.json.hbs +7 -7
  76. package/templates/frontend/react/tanstack-start/src/routes/__root.tsx.hbs +5 -5
  77. package/templates/frontend/react/tanstack-start/tsconfig.json.hbs +1 -6
  78. package/templates/frontend/react/tanstack-start/vite.config.ts.hbs +1 -1
  79. package/templates/frontend/solid/tsconfig.json.hbs +1 -6
  80. package/templates/frontend/svelte/tsconfig.json.hbs +1 -6
  81. package/templates/api/orpc/server/next/src/app/rpc/[...all]/route.ts.hbs +0 -52
  82. package/templates/api/trpc/server/next/src/app/trpc/[trpc]/route.ts +0 -14
  83. package/templates/backend/server/next/next-env.d.ts +0 -5
  84. package/templates/backend/server/next/next.config.ts +0 -7
  85. package/templates/backend/server/next/package.json.hbs +0 -27
  86. package/templates/backend/server/next/src/app/route.ts +0 -5
  87. package/templates/backend/server/next/src/middleware.ts +0 -19
  88. package/templates/backend/server/next/tsconfig.json.hbs +0 -33
  89. package/templates/db/prisma/mongodb/src/db/index.ts.hbs +0 -5
  90. package/templates/examples/ai/server/next/src/app/ai/route.ts.hbs +0 -15
  91. /package/templates/api/orpc/server/{base/src/lib/orpc.ts.hbs → src/index.ts.hbs} +0 -0
  92. /package/templates/api/trpc/server/{base/src/lib/trpc.ts.hbs → src/index.ts.hbs} +0 -0
  93. /package/templates/auth/better-auth/server/db/drizzle/mysql/src/{db/schema/auth.ts → schema/auth.ts.hbs} +0 -0
  94. /package/templates/auth/better-auth/server/db/drizzle/postgres/src/{db/schema/auth.ts → schema/auth.ts.hbs} +0 -0
  95. /package/templates/auth/better-auth/server/db/drizzle/sqlite/src/{db/schema/auth.ts → schema/auth.ts.hbs} +0 -0
  96. /package/templates/auth/better-auth/server/db/mongoose/mongodb/src/{db/models/auth.model.ts → models/auth.model.ts.hbs} +0 -0
  97. /package/templates/auth/better-auth/server/db/prisma/mongodb/prisma/schema/{auth.prisma → auth.prisma.hbs} +0 -0
  98. /package/templates/auth/better-auth/server/db/prisma/mysql/prisma/schema/{auth.prisma → auth.prisma.hbs} +0 -0
  99. /package/templates/auth/better-auth/server/db/prisma/postgres/prisma/schema/{auth.prisma → auth.prisma.hbs} +0 -0
  100. /package/templates/auth/better-auth/server/db/prisma/sqlite/prisma/schema/{auth.prisma → auth.prisma.hbs} +0 -0
  101. /package/templates/auth/better-auth/web/nuxt/app/middleware/{auth.ts → auth.ts.hbs} +0 -0
  102. /package/templates/backend/server/{server-base → base}/_gitignore +0 -0
  103. /package/templates/db/mongoose/mongodb/src/{db/index.ts.hbs → index.ts.hbs} +0 -0
  104. /package/templates/examples/todo/server/drizzle/mysql/src/{db/schema → schema}/todo.ts +0 -0
  105. /package/templates/examples/todo/server/drizzle/postgres/src/{db/schema → schema}/todo.ts +0 -0
  106. /package/templates/examples/todo/server/drizzle/sqlite/src/{db/schema → schema}/todo.ts +0 -0
  107. /package/templates/examples/todo/server/mongoose/mongodb/src/{db/models/todo.model.ts → models/todo.model.ts.hbs} +0 -0
  108. /package/templates/examples/todo/server/prisma/mongodb/prisma/schema/{todo.prisma → todo.prisma.hbs} +0 -0
  109. /package/templates/examples/todo/server/prisma/mysql/prisma/schema/{todo.prisma → todo.prisma.hbs} +0 -0
  110. /package/templates/examples/todo/server/prisma/postgres/prisma/schema/{todo.prisma → todo.prisma.hbs} +0 -0
  111. /package/templates/examples/todo/server/prisma/sqlite/prisma/schema/{todo.prisma → todo.prisma.hbs} +0 -0
@@ -4,12 +4,14 @@ import { polarClient } from "@polar-sh/better-auth";
4
4
  {{/if}}
5
5
 
6
6
  export const authClient = createAuthClient({
7
+ {{#unless (eq backend "self")}}
7
8
  baseURL:
8
9
  {{#if (includes frontend "next")}}
9
10
  process.env.NEXT_PUBLIC_SERVER_URL,
10
11
  {{else}}
11
12
  import.meta.env.VITE_SERVER_URL,
12
13
  {{/if}}
14
+ {{/unless}}
13
15
  {{#if (eq payments "polar")}}
14
16
  plugins: [polarClient()]
15
17
  {{/if}}
@@ -1,3 +1,33 @@
1
+ {{#if (eq backend "self")}}
2
+ import { redirect } from "next/navigation";
3
+ import Dashboard from "./dashboard";
4
+ import { headers } from "next/headers";
5
+ import { auth } from "@{{projectName}}/auth";
6
+
7
+ export default async function DashboardPage() {
8
+ const session = await auth.api.getSession({
9
+ headers: await headers(),
10
+ });
11
+
12
+ if (!session?.user) {
13
+ redirect("/login");
14
+ }
15
+
16
+ {{#if (eq payments "polar")}}
17
+ const { data: customerState } = await auth.api.customer.state({
18
+ headers: await headers(),
19
+ });
20
+ {{/if}}
21
+
22
+ return (
23
+ <div>
24
+ <h1>Dashboard</h1>
25
+ <p>Welcome {session.user.name}</p>
26
+ <Dashboard session={session} {{#if (eq payments "polar")}}customerState={customerState}{{/if}} />
27
+ </div>
28
+ );
29
+ }
30
+ {{else}}
1
31
  import { authClient } from "@/lib/auth-client";
2
32
  import { redirect } from "next/navigation";
3
33
  import Dashboard from "./dashboard";
@@ -35,3 +65,4 @@ export default async function DashboardPage() {
35
65
  </div>
36
66
  );
37
67
  }
68
+ {{/if}}
@@ -6,6 +6,7 @@ import {
6
6
  } from "@tanstack/react-start/server";
7
7
  import { createRouter } from "./router";
8
8
 
9
+ // this is broken right now, waiting for a fix
9
10
  const handlerFactory = createClerkHandler(
10
11
  createStartHandler({
11
12
  createRouter,
@@ -17,7 +17,6 @@
17
17
  ],
18
18
  {{/if}}
19
19
  "devDependencies": {
20
- "tsdown": "^0.15.1",
21
20
  "typescript": "^5.8.2"
22
21
  }
23
22
  }
@@ -1,17 +1,13 @@
1
1
  {
2
+ "extends": "../../tsconfig.base.json",
2
3
  "compilerOptions": {
3
- "target": "ESNext",
4
- "module": "ESNext",
5
- "moduleResolution": "bundler",
6
- "verbatimModuleSyntax": true,
7
- "strict": true,
8
- "skipLibCheck": true,
9
- "baseUrl": "./",
4
+ "composite": true,
5
+ "outDir": "dist",
6
+ "baseUrl": ".",
10
7
  "paths": {
11
8
  "@/*": ["./src/*"]{{#if (eq orm "prisma")}},
12
9
  "prisma": ["node_modules/prisma"]{{/if}}
13
10
  },
14
- "outDir": "./dist",
15
11
  "types": [
16
12
  {{#if (eq runtime "node")}}
17
13
  "node"
@@ -24,8 +20,7 @@
24
20
  "bun"
25
21
  {{/if}}{{#if (eq serverDeploy "alchemy")}},
26
22
  "@cloudflare/workers-types"{{/if}}
27
- ]{{#unless (or (eq backend "convex") (eq backend "none"))}},
28
- "composite": true{{/unless}},
23
+ ],
29
24
  "jsx": "react-jsx"{{#if (eq backend "hono")}},
30
25
  "jsxImportSource": "hono/jsx"{{/if}}
31
26
  }
@@ -0,0 +1,14 @@
1
+ import { defineConfig } from 'tsdown';
2
+
3
+ export default defineConfig({
4
+ entry: './src/index.ts',
5
+ format: 'esm',
6
+ outDir: './dist',
7
+ clean: true,
8
+ noExternal: [/@{{projectName}}\/.*/],
9
+ {{#if (and (eq orm "drizzle") (eq database "sqlite") (or (eq dbSetup "turso") (eq dbSetup "none")))}}
10
+ external: [
11
+ /^@libsql\/(linux|darwin|win32).*/
12
+ ]
13
+ {{/if}}
14
+ });
@@ -9,8 +9,8 @@ import { google } from "@ai-sdk/google";
9
9
  import { convertToModelMessages, streamText } from "ai";
10
10
  {{/if}}
11
11
  {{#if (eq api "trpc")}}
12
- import { createContext } from "./lib/context";
13
- import { appRouter } from "./routers/index";
12
+ import { createContext } from "@{{projectName}}/api/context";
13
+ import { appRouter } from "@{{projectName}}/api/routers/index";
14
14
  import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
15
15
  {{/if}}
16
16
  {{#if (eq api "orpc")}}
@@ -19,11 +19,11 @@ import { OpenAPIReferencePlugin } from "@orpc/openapi/plugins";
19
19
  import { ZodToJsonSchemaConverter } from "@orpc/zod/zod4";
20
20
  import { RPCHandler } from "@orpc/server/fetch";
21
21
  import { onError } from "@orpc/server";
22
- import { appRouter } from "./routers";
23
- import { createContext } from "./lib/context";
22
+ import { appRouter } from "@{{projectName}}/api/routers/index";
23
+ import { createContext } from "@{{projectName}}/api/context";
24
24
  {{/if}}
25
25
  {{#if (eq auth "better-auth")}}
26
- import { auth } from "./lib/auth";
26
+ import { auth } from "@{{projectName}}/auth";
27
27
  {{/if}}
28
28
 
29
29
  {{#if (eq api "orpc")}}
@@ -104,7 +104,7 @@ const app = new Elysia()
104
104
  const body = await context.request.json();
105
105
  const uiMessages = body.messages || [];
106
106
  const result = streamText({
107
- model: google("gemini-2.0-flash"),
107
+ model: google("gemini-2.5-flash"),
108
108
  messages: convertToModelMessages(uiMessages)
109
109
  });
110
110
 
@@ -1,8 +1,8 @@
1
1
  import "dotenv/config";
2
2
  {{#if (eq api "trpc")}}
3
3
  import { createExpressMiddleware } from "@trpc/server/adapters/express";
4
- import { createContext } from "./lib/context";
5
- import { appRouter } from "./routers/index";
4
+ import { createContext } from "@{{projectName}}/api/context";
5
+ import { appRouter } from "@{{projectName}}/api/routers/index";
6
6
  {{/if}}
7
7
  {{#if (eq api "orpc")}}
8
8
  import { OpenAPIHandler } from "@orpc/openapi/node";
@@ -10,9 +10,9 @@ import { OpenAPIReferencePlugin } from "@orpc/openapi/plugins";
10
10
  import { ZodToJsonSchemaConverter } from "@orpc/zod/zod4";
11
11
  import { RPCHandler } from "@orpc/server/node";
12
12
  import { onError } from "@orpc/server";
13
- import { appRouter } from "./routers";
13
+ import { appRouter } from "@{{projectName}}/api/routers/index";
14
14
  {{#if (eq auth "better-auth")}}
15
- import { createContext } from "./lib/context";
15
+ import { createContext } from "@{{projectName}}/api/context";
16
16
  {{/if}}
17
17
  {{/if}}
18
18
  import cors from "cors";
@@ -22,7 +22,7 @@ import { streamText, type UIMessage, convertToModelMessages } from "ai";
22
22
  import { google } from "@ai-sdk/google";
23
23
  {{/if}}
24
24
  {{#if (eq auth "better-auth")}}
25
- import { auth } from "./lib/auth";
25
+ import { auth } from "@{{projectName}}/auth";
26
26
  import { toNodeHandler } from "better-auth/node";
27
27
  {{/if}}
28
28
 
@@ -105,7 +105,7 @@ app.use(express.json());
105
105
  app.post("/ai", async (req, res) => {
106
106
  const { messages = [] } = (req.body || {}) as { messages: UIMessage[] };
107
107
  const result = streamText({
108
- model: google("gemini-1.5-flash"),
108
+ model: google("gemini-2.5-flash"),
109
109
  messages: convertToModelMessages(messages),
110
110
  });
111
111
  result.pipeUIMessageStreamToResponse(res);
@@ -4,8 +4,8 @@ import fastifyCors from "@fastify/cors";
4
4
 
5
5
  {{#if (eq api "trpc")}}
6
6
  import { fastifyTRPCPlugin, type FastifyTRPCPluginOptions } from "@trpc/server/adapters/fastify";
7
- import { createContext } from "./lib/context";
8
- import { appRouter, type AppRouter } from "./routers/index";
7
+ import { createContext } from "@{{projectName}}/api/context";
8
+ import { appRouter, type AppRouter } from "@{{projectName}}/api/routers/index";
9
9
  {{/if}}
10
10
 
11
11
  {{#if (eq api "orpc")}}
@@ -15,10 +15,10 @@ import { ZodToJsonSchemaConverter } from "@orpc/zod/zod4";
15
15
  import { RPCHandler } from "@orpc/server/node";
16
16
  import { CORSPlugin } from "@orpc/server/plugins";
17
17
  import { onError } from "@orpc/server";
18
- import { appRouter } from "./routers/index";
18
+ import { appRouter } from "@{{projectName}}/api/routers/index";
19
19
  import { createServer } from "node:http";
20
20
  {{#if (eq auth "better-auth")}}
21
- import { createContext } from "./lib/context";
21
+ import { createContext } from "@{{projectName}}/api/context";
22
22
  {{/if}}
23
23
  {{/if}}
24
24
 
@@ -28,7 +28,7 @@ import { google } from "@ai-sdk/google";
28
28
  {{/if}}
29
29
 
30
30
  {{#if (eq auth "better-auth")}}
31
- import { auth } from "./lib/auth";
31
+ import { auth } from "@{{projectName}}/auth";
32
32
  {{/if}}
33
33
 
34
34
  const baseCorsConfig = {
@@ -161,7 +161,7 @@ interface AiRequestBody {
161
161
  fastify.post('/ai', async function (request) {
162
162
  const { messages } = request.body as AiRequestBody;
163
163
  const result = streamText({
164
- model: google('gemini-1.5-flash'),
164
+ model: google('gemini-2.5-flash'),
165
165
  messages: convertToModelMessages(messages),
166
166
  });
167
167
 
@@ -10,16 +10,16 @@ import { OpenAPIReferencePlugin } from "@orpc/openapi/plugins";
10
10
  import { ZodToJsonSchemaConverter } from "@orpc/zod/zod4";
11
11
  import { RPCHandler } from "@orpc/server/fetch";
12
12
  import { onError } from "@orpc/server";
13
- import { createContext } from "./lib/context";
14
- import { appRouter } from "./routers/index";
13
+ import { createContext } from "@{{projectName}}/api/context";
14
+ import { appRouter } from "@{{projectName}}/api/routers/index";
15
15
  {{/if}}
16
16
  {{#if (eq api "trpc")}}
17
17
  import { trpcServer } from "@hono/trpc-server";
18
- import { createContext } from "./lib/context";
19
- import { appRouter } from "./routers/index";
18
+ import { createContext } from "@{{projectName}}/api/context";
19
+ import { appRouter } from "@{{projectName}}/api/routers/index";
20
20
  {{/if}}
21
21
  {{#if (eq auth "better-auth")}}
22
- import { auth } from "./lib/auth";
22
+ import { auth } from "@{{projectName}}/auth";
23
23
  {{/if}}
24
24
  import { Hono } from "hono";
25
25
  import { cors } from "hono/cors";
@@ -121,7 +121,7 @@ app.post("/ai", async (c) => {
121
121
  const body = await c.req.json();
122
122
  const uiMessages = body.messages || [];
123
123
  const result = streamText({
124
- model: google("gemini-1.5-flash"),
124
+ model: google("gemini-2.5-flash"),
125
125
  messages: convertToModelMessages(uiMessages),
126
126
  });
127
127
 
@@ -137,7 +137,7 @@ app.post("/ai", async (c) => {
137
137
  apiKey: env.GOOGLE_GENERATIVE_AI_API_KEY,
138
138
  });
139
139
  const result = streamText({
140
- model: google("gemini-1.5-flash"),
140
+ model: google("gemini-2.5-flash"),
141
141
  messages: convertToModelMessages(uiMessages),
142
142
  });
143
143
 
@@ -1,4 +1,50 @@
1
+ # Dependencies
1
2
  node_modules
3
+ .pnp
4
+ .pnp.js
5
+
6
+ # Build outputs
7
+ dist
8
+ build
9
+ *.tsbuildinfo
10
+
11
+ # Environment variables
12
+ .env
13
+ .env*.local
14
+
15
+ # IDEs and editors
16
+ .vscode/*
17
+ !.vscode/settings.json
18
+ !.vscode/tasks.json
19
+ !.vscode/launch.json
20
+ !.vscode/extensions.json
21
+ .idea
22
+ *.swp
23
+ *.swo
24
+ *~
25
+ .DS_Store
26
+
27
+ # Logs
28
+ logs
29
+ *.log
30
+ npm-debug.log*
31
+ yarn-debug.log*
32
+ yarn-error.log*
33
+ lerna-debug.log*
34
+ .pnpm-debug.log*
35
+
36
+ # Turbo
2
37
  .turbo
38
+
39
+ # Better-T-Stack
3
40
  .alchemy
4
- .env
41
+
42
+ # Testing
43
+ coverage
44
+ .nyc_output
45
+
46
+ # Misc
47
+ *.tgz
48
+ .cache
49
+ tmp
50
+ temp
@@ -6,7 +6,5 @@
6
6
  "apps/*",
7
7
  "packages/*"
8
8
  ],
9
- "scripts": {
10
-
11
- }
9
+ "scripts": {}
12
10
  }
@@ -0,0 +1,23 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/tsconfig",
3
+ "compilerOptions": {
4
+ "target": "ESNext",
5
+ "module": "ESNext",
6
+ "moduleResolution": "bundler",
7
+ "lib": [
8
+ "ESNext"
9
+ ],
10
+ "verbatimModuleSyntax": true,
11
+ "strict": true,
12
+ "skipLibCheck": true,
13
+ "resolveJsonModule": true,
14
+ "allowSyntheticDefaultImports": true,
15
+ "esModuleInterop": true,
16
+ "forceConsistentCasingInFileNames": true,
17
+ "isolatedModules": true,
18
+ "noUncheckedIndexedAccess": true,
19
+ "noUnusedLocals": true,
20
+ "noUnusedParameters": true,
21
+ "noFallthroughCasesInSwitch": true
22
+ }
23
+ }
@@ -0,0 +1,34 @@
1
+ # dependencies (bun install)
2
+ node_modules
3
+
4
+ # output
5
+ out
6
+ dist
7
+ *.tgz
8
+
9
+ # code coverage
10
+ coverage
11
+ *.lcov
12
+
13
+ # logs
14
+ logs
15
+ _.log
16
+ report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
17
+
18
+ # dotenv environment variable files
19
+ .env
20
+ .env.development.local
21
+ .env.test.local
22
+ .env.production.local
23
+ .env.local
24
+
25
+ # caches
26
+ .eslintcache
27
+ .cache
28
+ *.tsbuildinfo
29
+
30
+ # IntelliJ based IDEs
31
+ .idea
32
+
33
+ # Finder (MacOS) folder config
34
+ .DS_Store
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@{{projectName}}/db",
3
+ "type": "module",
4
+ "exports": {
5
+ ".": {
6
+ "types": "./dist/index.d.ts",
7
+ "default": "./src/index.ts"
8
+ },
9
+ "./*": {
10
+ "types": "./dist/*.d.ts",
11
+ "default": "./src/*.ts"
12
+ }
13
+ },
14
+ "scripts": {
15
+ "build": "tsdown"
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "^24.5.2"
19
+ },
20
+ "peerDependencies": {
21
+ "typescript": "^5"
22
+ }
23
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "declaration": true,
5
+ "declarationMap": true,
6
+ "sourceMap": true,
7
+ "outDir": "dist",
8
+ "composite": true,
9
+ "types": [
10
+ "bun"
11
+ ]
12
+ }
13
+ }
@@ -0,0 +1,7 @@
1
+ import { defineConfig } from "tsdown";
2
+
3
+ export default defineConfig({
4
+ entry: 'src/**/*.ts',
5
+ sourcemap: true,
6
+ dts: true,
7
+ });
@@ -1,8 +1,17 @@
1
1
  import { defineConfig } from "drizzle-kit";
2
+ import dotenv from "dotenv";
3
+
4
+ dotenv.config({
5
+ {{#if (eq backend "self")}}
6
+ path: "../../apps/web/.env",
7
+ {{else}}
8
+ path: "../../apps/server/.env",
9
+ {{/if}}
10
+ });
2
11
 
3
12
  export default defineConfig({
4
- schema: "./src/db/schema",
5
- out: "./src/db/migrations",
13
+ schema: "./src/schema",
14
+ out: "./src/migrations",
6
15
  dialect: "mysql",
7
16
  dbCredentials: {
8
17
  url: process.env.DATABASE_URL || "",
@@ -1,4 +1,4 @@
1
- {{#if (or (eq runtime "bun") (eq runtime "node"))}}
1
+ {{#if (or (eq runtime "bun") (eq runtime "node") (eq runtime "none"))}}
2
2
  {{#if (eq dbSetup "planetscale")}}
3
3
  import { drizzle } from "drizzle-orm/planetscale-serverless";
4
4
 
@@ -1,8 +1,17 @@
1
1
  import { defineConfig } from "drizzle-kit";
2
+ import dotenv from "dotenv";
3
+
4
+ dotenv.config({
5
+ {{#if (eq backend "self")}}
6
+ path: "../../apps/web/.env",
7
+ {{else}}
8
+ path: "../../apps/server/.env",
9
+ {{/if}}
10
+ });
2
11
 
3
12
  export default defineConfig({
4
- schema: "./src/db/schema",
5
- out: "./src/db/migrations",
13
+ schema: "./src/schema",
14
+ out: "./src/migrations",
6
15
  dialect: "postgresql",
7
16
  dbCredentials: {
8
17
  url: process.env.DATABASE_URL || "",
@@ -1,4 +1,4 @@
1
- {{#if (or (eq runtime "bun") (eq runtime "node"))}}
1
+ {{#if (or (eq runtime "bun") (eq runtime "node") (eq runtime "none"))}}
2
2
  {{#if (eq dbSetup "neon")}}
3
3
  import { neon, neonConfig } from '@neondatabase/serverless';
4
4
  import { drizzle } from 'drizzle-orm/neon-http';
@@ -1,8 +1,17 @@
1
1
  import { defineConfig } from "drizzle-kit";
2
+ import dotenv from "dotenv";
3
+
4
+ dotenv.config({
5
+ {{#if (eq backend "self")}}
6
+ path: "../../apps/web/.env",
7
+ {{else}}
8
+ path: "../../apps/server/.env",
9
+ {{/if}}
10
+ });
2
11
 
3
12
  export default defineConfig({
4
- schema: "./src/db/schema",
5
- out: "./src/db/migrations",
13
+ schema: "./src/schema",
14
+ out: "./src/migrations",
6
15
  {{#if (eq dbSetup "d1")}}
7
16
  // DOCS: https://orm.drizzle.team/docs/guides/d1-http-with-drizzle-kit
8
17
  dialect: "sqlite",
@@ -1,4 +1,4 @@
1
- {{#if (or (eq runtime "bun") (eq runtime "node"))}}
1
+ {{#if (or (eq runtime "bun") (eq runtime "node") (eq runtime "none"))}}
2
2
  import { drizzle } from "drizzle-orm/libsql";
3
3
  import { createClient } from "@libsql/client";
4
4
 
@@ -1,6 +1,14 @@
1
- import "dotenv/config";
2
1
  import path from "node:path";
3
2
  import type { PrismaConfig } from "prisma";
3
+ import dotenv from "dotenv";
4
+
5
+ dotenv.config({
6
+ {{#if (eq backend "self")}}
7
+ path: "../../apps/web/.env",
8
+ {{else}}
9
+ path: "../../apps/server/.env",
10
+ {{/if}}
11
+ });
4
12
 
5
13
  export default {
6
14
  schema: path.join("prisma", "schema"),
@@ -0,0 +1,5 @@
1
+ import { PrismaClient } from "../prisma/generated/client";
2
+
3
+ const prisma = new PrismaClient();
4
+
5
+ export default prisma;
@@ -1,6 +1,14 @@
1
- import "dotenv/config";
2
1
  import path from "node:path";
3
2
  import type { PrismaConfig } from "prisma";
3
+ import dotenv from "dotenv";
4
+
5
+ dotenv.config({
6
+ {{#if (eq backend "self")}}
7
+ path: "../../apps/web/.env",
8
+ {{else}}
9
+ path: "../../apps/server/.env",
10
+ {{/if}}
11
+ });
4
12
 
5
13
  export default {
6
14
  schema: path.join("prisma", "schema"),
@@ -1,4 +1,4 @@
1
- import { PrismaClient } from "../../prisma/generated/client";
1
+ import { PrismaClient } from "../prisma/generated/client";
2
2
  {{#if (eq dbSetup "planetscale")}}
3
3
  import { PrismaPlanetScale } from '@prisma/adapter-planetscale'
4
4
 
@@ -1,8 +1,16 @@
1
- {{#unless (eq dbSetup "prisma-postgres")}}
2
- import "dotenv/config";
3
- {{/unless}}
4
1
  import path from "node:path";
5
2
  import type { PrismaConfig } from "prisma";
3
+ {{#unless (eq dbSetup "prisma-postgres")}}
4
+ import dotenv from "dotenv";
5
+
6
+ dotenv.config({
7
+ {{#if (eq backend "self")}}
8
+ path: "../../apps/web/.env",
9
+ {{else}}
10
+ path: "../../apps/server/.env",
11
+ {{/if}}
12
+ });
13
+ {{/unless}}
6
14
 
7
15
  export default {
8
16
  schema: path.join("prisma", "schema"),
@@ -1,4 +1,4 @@
1
- import { PrismaClient } from "../../prisma/generated/client";
1
+ import { PrismaClient } from "../prisma/generated/client";
2
2
  {{#if (and (eq dbSetup "prisma-postgres") (eq orm "prisma"))}}
3
3
  import { withAccelerate } from "@prisma/extension-accelerate";
4
4
 
@@ -1,6 +1,14 @@
1
- import "dotenv/config";
2
1
  import path from "node:path";
3
2
  import type { PrismaConfig } from "prisma";
3
+ import dotenv from "dotenv";
4
+
5
+ dotenv.config({
6
+ {{#if (eq backend "self")}}
7
+ path: "../../apps/web/.env",
8
+ {{else}}
9
+ path: "../../apps/server/.env",
10
+ {{/if}}
11
+ });
4
12
 
5
13
  export default {
6
14
  schema: path.join("prisma", "schema"),
@@ -1,7 +1,7 @@
1
1
  {{#if (eq dbSetup "d1")}}
2
2
  import { env } from "cloudflare:workers";
3
3
  import { PrismaD1 } from "@prisma/adapter-d1";
4
- import { PrismaClient } from "../../prisma/generated/client";
4
+ import { PrismaClient } from "../prisma/generated/client";
5
5
 
6
6
  const adapter = new PrismaD1(env.DB);
7
7
  const prisma = new PrismaClient({ adapter });
@@ -9,7 +9,7 @@ const prisma = new PrismaClient({ adapter });
9
9
  export default prisma;
10
10
  {{else if (eq dbSetup "turso")}}
11
11
  import { PrismaLibSQL } from "@prisma/adapter-libsql";
12
- import { PrismaClient } from "../../prisma/generated/client";
12
+ import { PrismaClient } from "../prisma/generated/client";
13
13
 
14
14
  const adapter = new PrismaLibSQL({
15
15
  url: process.env.DATABASE_URL || "",
@@ -20,7 +20,7 @@ const prisma = new PrismaClient({ adapter });
20
20
 
21
21
  export default prisma;
22
22
  {{else}}
23
- import { PrismaClient } from "../../prisma/generated/client";
23
+ import { PrismaClient } from "../prisma/generated/client";
24
24
 
25
25
  const prisma = new PrismaClient();
26
26
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "./node_modules/wrangler/config-schema.json",
3
3
  "name": "{{projectName}}",
4
- "main": ".output/server/index.mjs",
4
+ "main": "@tanstack/react-start/server-entry",
5
5
  "compatibility_date": "2025-07-05",
6
6
  "compatibility_flags": ["nodejs_compat"],
7
7
  "assets": {