create-better-t-stack 3.11.0-pr750.6c25d46 → 3.11.1

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 (118) hide show
  1. package/dist/cli.d.mts +1 -0
  2. package/dist/cli.mjs +8 -0
  3. package/dist/index.d.mts +351 -0
  4. package/dist/index.mjs +4 -0
  5. package/dist/src-Dc2OdxbP.mjs +7248 -0
  6. package/package.json +25 -35
  7. package/templates/addons/turborepo/turbo.json.hbs +5 -0
  8. package/templates/auth/better-auth/convex/backend/convex/auth.ts.hbs +3 -5
  9. package/templates/auth/better-auth/convex/backend/convex/privateData.ts.hbs +13 -12
  10. package/templates/auth/better-auth/convex/web/react/next/src/lib/auth-client.ts.hbs +2 -2
  11. package/templates/auth/better-auth/convex/web/react/next/src/lib/auth-server.ts.hbs +1 -0
  12. package/templates/deploy/alchemy/alchemy.run.ts.hbs +2 -2
  13. package/templates/frontend/react/tanstack-start/src/router.tsx.hbs +17 -29
  14. package/templates/frontend/react/tanstack-start/src/routes/__root.tsx.hbs +2 -4
  15. package/bin/create-better-t-stack +0 -98
  16. package/src/api.ts +0 -203
  17. package/src/cli.ts +0 -185
  18. package/src/constants.ts +0 -270
  19. package/src/helpers/addons/addons-setup.ts +0 -201
  20. package/src/helpers/addons/examples-setup.ts +0 -137
  21. package/src/helpers/addons/fumadocs-setup.ts +0 -99
  22. package/src/helpers/addons/oxlint-setup.ts +0 -36
  23. package/src/helpers/addons/ruler-setup.ts +0 -135
  24. package/src/helpers/addons/starlight-setup.ts +0 -45
  25. package/src/helpers/addons/tauri-setup.ts +0 -90
  26. package/src/helpers/addons/tui-setup.ts +0 -64
  27. package/src/helpers/addons/ultracite-setup.ts +0 -228
  28. package/src/helpers/addons/vite-pwa-setup.ts +0 -59
  29. package/src/helpers/addons/wxt-setup.ts +0 -86
  30. package/src/helpers/core/add-addons.ts +0 -85
  31. package/src/helpers/core/add-deployment.ts +0 -102
  32. package/src/helpers/core/api-setup.ts +0 -280
  33. package/src/helpers/core/auth-setup.ts +0 -203
  34. package/src/helpers/core/backend-setup.ts +0 -69
  35. package/src/helpers/core/command-handlers.ts +0 -354
  36. package/src/helpers/core/convex-codegen.ts +0 -14
  37. package/src/helpers/core/create-project.ts +0 -134
  38. package/src/helpers/core/create-readme.ts +0 -694
  39. package/src/helpers/core/db-setup.ts +0 -184
  40. package/src/helpers/core/detect-project-config.ts +0 -41
  41. package/src/helpers/core/env-setup.ts +0 -481
  42. package/src/helpers/core/git.ts +0 -23
  43. package/src/helpers/core/install-dependencies.ts +0 -29
  44. package/src/helpers/core/payments-setup.ts +0 -48
  45. package/src/helpers/core/post-installation.ts +0 -403
  46. package/src/helpers/core/project-config.ts +0 -250
  47. package/src/helpers/core/runtime-setup.ts +0 -76
  48. package/src/helpers/core/template-manager.ts +0 -917
  49. package/src/helpers/core/workspace-setup.ts +0 -184
  50. package/src/helpers/database-providers/d1-setup.ts +0 -28
  51. package/src/helpers/database-providers/docker-compose-setup.ts +0 -50
  52. package/src/helpers/database-providers/mongodb-atlas-setup.ts +0 -182
  53. package/src/helpers/database-providers/neon-setup.ts +0 -240
  54. package/src/helpers/database-providers/planetscale-setup.ts +0 -78
  55. package/src/helpers/database-providers/prisma-postgres-setup.ts +0 -193
  56. package/src/helpers/database-providers/supabase-setup.ts +0 -196
  57. package/src/helpers/database-providers/turso-setup.ts +0 -309
  58. package/src/helpers/deployment/alchemy/alchemy-combined-setup.ts +0 -80
  59. package/src/helpers/deployment/alchemy/alchemy-next-setup.ts +0 -52
  60. package/src/helpers/deployment/alchemy/alchemy-nuxt-setup.ts +0 -105
  61. package/src/helpers/deployment/alchemy/alchemy-react-router-setup.ts +0 -33
  62. package/src/helpers/deployment/alchemy/alchemy-solid-setup.ts +0 -33
  63. package/src/helpers/deployment/alchemy/alchemy-svelte-setup.ts +0 -99
  64. package/src/helpers/deployment/alchemy/alchemy-tanstack-router-setup.ts +0 -34
  65. package/src/helpers/deployment/alchemy/alchemy-tanstack-start-setup.ts +0 -99
  66. package/src/helpers/deployment/alchemy/env-dts-setup.ts +0 -76
  67. package/src/helpers/deployment/alchemy/index.ts +0 -7
  68. package/src/helpers/deployment/server-deploy-setup.ts +0 -55
  69. package/src/helpers/deployment/web-deploy-setup.ts +0 -58
  70. package/src/index.ts +0 -51
  71. package/src/prompts/addons.ts +0 -200
  72. package/src/prompts/api.ts +0 -49
  73. package/src/prompts/auth.ts +0 -84
  74. package/src/prompts/backend.ts +0 -83
  75. package/src/prompts/config-prompts.ts +0 -138
  76. package/src/prompts/database-setup.ts +0 -112
  77. package/src/prompts/database.ts +0 -57
  78. package/src/prompts/examples.ts +0 -60
  79. package/src/prompts/frontend.ts +0 -118
  80. package/src/prompts/git.ts +0 -16
  81. package/src/prompts/install.ts +0 -16
  82. package/src/prompts/orm.ts +0 -53
  83. package/src/prompts/package-manager.ts +0 -32
  84. package/src/prompts/payments.ts +0 -50
  85. package/src/prompts/project-name.ts +0 -86
  86. package/src/prompts/runtime.ts +0 -47
  87. package/src/prompts/server-deploy.ts +0 -91
  88. package/src/prompts/web-deploy.ts +0 -107
  89. package/src/tui/app.tsx +0 -1062
  90. package/src/types.ts +0 -70
  91. package/src/utils/add-package-deps.ts +0 -57
  92. package/src/utils/analytics.ts +0 -39
  93. package/src/utils/better-auth-plugin-setup.ts +0 -71
  94. package/src/utils/bts-config.ts +0 -122
  95. package/src/utils/command-exists.ts +0 -16
  96. package/src/utils/compatibility-rules.ts +0 -337
  97. package/src/utils/compatibility.ts +0 -11
  98. package/src/utils/config-processing.ts +0 -130
  99. package/src/utils/config-validation.ts +0 -470
  100. package/src/utils/display-config.ts +0 -96
  101. package/src/utils/docker-utils.ts +0 -70
  102. package/src/utils/errors.ts +0 -30
  103. package/src/utils/file-formatter.ts +0 -11
  104. package/src/utils/generate-reproducible-command.ts +0 -53
  105. package/src/utils/get-latest-cli-version.ts +0 -27
  106. package/src/utils/get-package-manager.ts +0 -13
  107. package/src/utils/open-url.ts +0 -18
  108. package/src/utils/package-runner.ts +0 -23
  109. package/src/utils/project-directory.ts +0 -102
  110. package/src/utils/project-name-validation.ts +0 -43
  111. package/src/utils/render-title.ts +0 -48
  112. package/src/utils/setup-catalogs.ts +0 -192
  113. package/src/utils/sponsors.ts +0 -101
  114. package/src/utils/telemetry.ts +0 -19
  115. package/src/utils/template-processor.ts +0 -64
  116. package/src/utils/templates.ts +0 -94
  117. package/src/utils/ts-morph.ts +0 -26
  118. package/src/validation.ts +0 -117
@@ -1,280 +0,0 @@
1
- import path from "node:path";
2
- import fs from "fs-extra";
3
- import type { AvailableDependencies } from "../../constants";
4
- import type { API, Backend, Frontend, ProjectConfig } from "../../types";
5
- import { addPackageDependency } from "../../utils/add-package-deps";
6
-
7
- function getFrontendType(frontend: Frontend[]): {
8
- hasReactWeb: boolean;
9
- hasNuxtWeb: boolean;
10
- hasSvelteWeb: boolean;
11
- hasSolidWeb: boolean;
12
- hasNative: boolean;
13
- } {
14
- const reactBasedFrontends = ["tanstack-router", "react-router", "tanstack-start", "next"];
15
- const nativeFrontends = ["native-bare", "native-uniwind", "native-unistyles"];
16
-
17
- return {
18
- hasReactWeb: frontend.some((f) => reactBasedFrontends.includes(f)),
19
- hasNuxtWeb: frontend.includes("nuxt"),
20
- hasSvelteWeb: frontend.includes("svelte"),
21
- hasSolidWeb: frontend.includes("solid"),
22
- hasNative: frontend.some((f) => nativeFrontends.includes(f)),
23
- };
24
- }
25
-
26
- function getApiDependencies(
27
- api: API,
28
- frontendType: ReturnType<typeof getFrontendType>,
29
- backend: Backend,
30
- ) {
31
- const deps: Record<string, { dependencies: string[]; devDependencies?: string[] }> = {};
32
-
33
- if (api === "orpc") {
34
- deps.server = {
35
- dependencies: ["@orpc/server", "@orpc/client", "@orpc/openapi", "@orpc/zod"],
36
- };
37
- } else if (api === "trpc") {
38
- deps.server = { dependencies: ["@trpc/server", "@trpc/client"] };
39
- }
40
-
41
- if (backend !== "self" && backend !== "convex" && backend !== "none") {
42
- if (!deps.server) {
43
- deps.server = { dependencies: [] };
44
- }
45
-
46
- if (backend === "hono") {
47
- deps.server.dependencies.push("hono");
48
- } else if (backend === "elysia") {
49
- deps.server.dependencies.push("elysia");
50
- }
51
- }
52
-
53
- if (frontendType.hasReactWeb) {
54
- if (api === "orpc") {
55
- deps.web = {
56
- dependencies: ["@orpc/tanstack-query", "@orpc/client", "@orpc/server"],
57
- };
58
- } else if (api === "trpc") {
59
- deps.web = {
60
- dependencies: ["@trpc/tanstack-react-query", "@trpc/client", "@trpc/server"],
61
- };
62
- }
63
- } else if (frontendType.hasNuxtWeb && api === "orpc") {
64
- deps.web = {
65
- dependencies: ["@tanstack/vue-query", "@orpc/tanstack-query", "@orpc/client", "@orpc/server"],
66
- devDependencies: ["@tanstack/vue-query-devtools"],
67
- };
68
- } else if (frontendType.hasSvelteWeb && api === "orpc") {
69
- deps.web = {
70
- dependencies: [
71
- "@orpc/tanstack-query",
72
- "@orpc/client",
73
- "@orpc/server",
74
- "@tanstack/svelte-query",
75
- ],
76
- devDependencies: ["@tanstack/svelte-query-devtools"],
77
- };
78
- } else if (frontendType.hasSolidWeb && api === "orpc") {
79
- deps.web = {
80
- dependencies: [
81
- "@orpc/tanstack-query",
82
- "@orpc/client",
83
- "@orpc/server",
84
- "@tanstack/solid-query",
85
- ],
86
- devDependencies: ["@tanstack/solid-query-devtools", "@tanstack/solid-router-devtools"],
87
- };
88
- }
89
-
90
- if (api === "trpc") {
91
- deps.native = {
92
- dependencies: ["@trpc/tanstack-react-query", "@trpc/client", "@trpc/server"],
93
- };
94
- } else if (api === "orpc") {
95
- deps.native = { dependencies: ["@orpc/tanstack-query", "@orpc/client"] };
96
- }
97
-
98
- return deps;
99
- }
100
-
101
- function getQueryDependencies(frontend: Frontend[]) {
102
- const reactBasedFrontends: Frontend[] = [
103
- "react-router",
104
- "tanstack-router",
105
- "tanstack-start",
106
- "next",
107
- "native-bare",
108
- "native-uniwind",
109
- "native-unistyles",
110
- ];
111
-
112
- const deps: Record<string, { dependencies: string[]; devDependencies?: string[] }> = {};
113
-
114
- const needsReactQuery = frontend.some((f) => reactBasedFrontends.includes(f));
115
- if (needsReactQuery) {
116
- const hasReactWeb = frontend.some(
117
- (f) =>
118
- f !== "native-bare" &&
119
- f !== "native-uniwind" &&
120
- f !== "native-unistyles" &&
121
- reactBasedFrontends.includes(f),
122
- );
123
- const hasNative =
124
- frontend.includes("native-bare") ||
125
- frontend.includes("native-uniwind") ||
126
- frontend.includes("native-unistyles");
127
-
128
- if (hasReactWeb) {
129
- deps.web = {
130
- dependencies: ["@tanstack/react-query"],
131
- devDependencies: ["@tanstack/react-query-devtools"],
132
- };
133
- }
134
- if (hasNative) {
135
- deps.native = { dependencies: ["@tanstack/react-query"] };
136
- }
137
- }
138
-
139
- if (frontend.includes("solid")) {
140
- deps.web = {
141
- dependencies: ["@tanstack/solid-query"],
142
- devDependencies: ["@tanstack/solid-query-devtools", "@tanstack/solid-router-devtools"],
143
- };
144
- }
145
-
146
- return deps;
147
- }
148
-
149
- function getConvexDependencies(frontend: Frontend[]) {
150
- const deps: Record<string, { dependencies: string[] }> = {
151
- web: { dependencies: ["convex"] },
152
- native: { dependencies: ["convex"] },
153
- };
154
-
155
- if (frontend.includes("tanstack-start")) {
156
- deps.web.dependencies.push("@convex-dev/react-query");
157
- }
158
- if (frontend.includes("svelte")) {
159
- deps.web.dependencies.push("convex-svelte");
160
- }
161
- if (frontend.includes("nuxt")) {
162
- deps.web.dependencies.push("convex-nuxt", "convex-vue");
163
- }
164
-
165
- return deps;
166
- }
167
-
168
- export async function setupApi(config: ProjectConfig) {
169
- const { api, frontend, backend, projectDir } = config;
170
- const isConvex = backend === "convex";
171
-
172
- const webDir = path.join(projectDir, "apps/web");
173
- const nativeDir = path.join(projectDir, "apps/native");
174
- const serverDir = path.join(projectDir, "apps/server");
175
-
176
- const webDirExists = await fs.pathExists(webDir);
177
- const nativeDirExists = await fs.pathExists(nativeDir);
178
- const _serverDirExists = await fs.pathExists(serverDir);
179
-
180
- const frontendType = getFrontendType(frontend);
181
-
182
- if (!isConvex && api !== "none") {
183
- const apiDeps = getApiDependencies(api, frontendType, backend);
184
- const apiPackageDir = path.join(projectDir, "packages/api");
185
-
186
- if (apiDeps.server) {
187
- await addPackageDependency({
188
- dependencies: apiDeps.server.dependencies as AvailableDependencies[],
189
- projectDir: apiPackageDir,
190
- });
191
-
192
- if (backend === "self" && webDirExists) {
193
- await addPackageDependency({
194
- dependencies: apiDeps.server.dependencies as AvailableDependencies[],
195
- projectDir: webDir,
196
- });
197
- }
198
-
199
- if (backend === "self") {
200
- const frameworkDeps: AvailableDependencies[] = [];
201
- if (frontend.includes("next")) {
202
- frameworkDeps.push("next");
203
- }
204
-
205
- if (frameworkDeps.length > 0) {
206
- await addPackageDependency({
207
- dependencies: frameworkDeps,
208
- projectDir: apiPackageDir,
209
- });
210
- }
211
- }
212
- }
213
-
214
- if (config.auth === "better-auth" && (backend === "express" || backend === "fastify")) {
215
- await addPackageDependency({
216
- dependencies: ["better-auth"],
217
- projectDir: apiPackageDir,
218
- });
219
- }
220
-
221
- if (backend === "express") {
222
- await addPackageDependency({
223
- devDependencies: ["@types/express"],
224
- projectDir: apiPackageDir,
225
- });
226
- }
227
-
228
- if (webDirExists && apiDeps.web) {
229
- await addPackageDependency({
230
- dependencies: apiDeps.web.dependencies as AvailableDependencies[],
231
- devDependencies: apiDeps.web.devDependencies as AvailableDependencies[],
232
- projectDir: webDir,
233
- });
234
- }
235
-
236
- if (nativeDirExists && apiDeps.native) {
237
- await addPackageDependency({
238
- dependencies: apiDeps.native.dependencies as AvailableDependencies[],
239
- projectDir: nativeDir,
240
- });
241
- }
242
- }
243
-
244
- if (!isConvex) {
245
- const queryDeps = getQueryDependencies(frontend);
246
-
247
- if (webDirExists && queryDeps.web) {
248
- await addPackageDependency({
249
- dependencies: queryDeps.web.dependencies as AvailableDependencies[],
250
- devDependencies: queryDeps.web.devDependencies as AvailableDependencies[],
251
- projectDir: webDir,
252
- });
253
- }
254
-
255
- if (nativeDirExists && queryDeps.native) {
256
- await addPackageDependency({
257
- dependencies: queryDeps.native.dependencies as AvailableDependencies[],
258
- projectDir: nativeDir,
259
- });
260
- }
261
- }
262
-
263
- if (isConvex) {
264
- const convexDeps = getConvexDependencies(frontend);
265
-
266
- if (webDirExists) {
267
- await addPackageDependency({
268
- dependencies: convexDeps.web.dependencies as AvailableDependencies[],
269
- projectDir: webDir,
270
- });
271
- }
272
-
273
- if (nativeDirExists) {
274
- await addPackageDependency({
275
- dependencies: convexDeps.native.dependencies as AvailableDependencies[],
276
- projectDir: nativeDir,
277
- });
278
- }
279
- }
280
- }
@@ -1,203 +0,0 @@
1
- import path from "node:path";
2
- import consola from "consola";
3
- import fs from "fs-extra";
4
- import pc from "picocolors";
5
- import type { ProjectConfig } from "../../types";
6
- import { addPackageDependency } from "../../utils/add-package-deps";
7
- import { setupBetterAuthPlugins } from "../../utils/better-auth-plugin-setup";
8
-
9
- export async function setupAuth(config: ProjectConfig) {
10
- const { auth, frontend, backend, projectDir } = config;
11
- if (!auth || auth === "none") {
12
- return;
13
- }
14
-
15
- const serverDir = path.join(projectDir, "apps/server");
16
- const clientDir = path.join(projectDir, "apps/web");
17
- const nativeDir = path.join(projectDir, "apps/native");
18
-
19
- const clientDirExists = await fs.pathExists(clientDir);
20
- const nativeDirExists = await fs.pathExists(nativeDir);
21
- const _serverDirExists = await fs.pathExists(serverDir);
22
-
23
- try {
24
- if (backend === "convex") {
25
- if (auth === "clerk" && clientDirExists) {
26
- const hasNextJs = frontend.includes("next");
27
- const hasTanStackStart = frontend.includes("tanstack-start");
28
- const hasViteReactOther = frontend.some((f) =>
29
- ["tanstack-router", "react-router"].includes(f),
30
- );
31
-
32
- if (hasNextJs) {
33
- await addPackageDependency({
34
- dependencies: ["@clerk/nextjs"],
35
- projectDir: clientDir,
36
- });
37
- } else if (hasTanStackStart) {
38
- await addPackageDependency({
39
- dependencies: ["@clerk/tanstack-react-start", "srvx"],
40
- projectDir: clientDir,
41
- });
42
- } else if (hasViteReactOther) {
43
- await addPackageDependency({
44
- dependencies: ["@clerk/clerk-react"],
45
- projectDir: clientDir,
46
- });
47
- }
48
- }
49
-
50
- if (auth === "better-auth") {
51
- const convexBackendDir = path.join(projectDir, "packages/backend");
52
- const convexBackendDirExists = await fs.pathExists(convexBackendDir);
53
-
54
- const hasNativeForBA =
55
- frontend.includes("native-bare") ||
56
- frontend.includes("native-uniwind") ||
57
- frontend.includes("native-unistyles");
58
-
59
- if (convexBackendDirExists) {
60
- await addPackageDependency({
61
- dependencies: ["better-auth", "@convex-dev/better-auth"],
62
- customDependencies: { "better-auth": "1.4.7" },
63
- projectDir: convexBackendDir,
64
- });
65
- if (hasNativeForBA) {
66
- await addPackageDependency({
67
- dependencies: ["@better-auth/expo"],
68
- customDependencies: { "@better-auth/expo": "1.4.7" },
69
- projectDir: convexBackendDir,
70
- });
71
- }
72
- }
73
-
74
- if (clientDirExists) {
75
- const hasNextJs = frontend.includes("next");
76
- const hasTanStackStart = frontend.includes("tanstack-start");
77
- const hasViteReactOther = frontend.some((f) =>
78
- ["tanstack-router", "react-router"].includes(f),
79
- );
80
-
81
- if (hasNextJs) {
82
- await addPackageDependency({
83
- dependencies: ["better-auth", "@convex-dev/better-auth"],
84
- customDependencies: { "better-auth": "1.4.7" },
85
- projectDir: clientDir,
86
- });
87
- } else if (hasTanStackStart) {
88
- await addPackageDependency({
89
- dependencies: ["better-auth", "@convex-dev/better-auth"],
90
- customDependencies: { "better-auth": "1.4.7" },
91
- projectDir: clientDir,
92
- });
93
- } else if (hasViteReactOther) {
94
- await addPackageDependency({
95
- dependencies: ["better-auth", "@convex-dev/better-auth"],
96
- customDependencies: { "better-auth": "1.4.7" },
97
- projectDir: clientDir,
98
- });
99
- }
100
- }
101
-
102
- const hasNativeBare = frontend.includes("native-bare");
103
- const hasNativeUniwind = frontend.includes("native-uniwind");
104
- const hasUnistyles = frontend.includes("native-unistyles");
105
- if (nativeDirExists && (hasNativeBare || hasNativeUniwind || hasUnistyles)) {
106
- await addPackageDependency({
107
- dependencies: ["better-auth", "@better-auth/expo", "@convex-dev/better-auth"],
108
- customDependencies: {
109
- "better-auth": "1.4.7",
110
- "@better-auth/expo": "1.4.7",
111
- },
112
- projectDir: nativeDir,
113
- });
114
- }
115
- }
116
-
117
- const hasNativeBare = frontend.includes("native-bare");
118
- const hasNativeUniwind = frontend.includes("native-uniwind");
119
- const hasUnistyles = frontend.includes("native-unistyles");
120
- if (
121
- auth === "clerk" &&
122
- nativeDirExists &&
123
- (hasNativeBare || hasNativeUniwind || hasUnistyles)
124
- ) {
125
- await addPackageDependency({
126
- dependencies: ["@clerk/clerk-expo"],
127
- projectDir: nativeDir,
128
- });
129
- }
130
- return;
131
- }
132
-
133
- const authPackageDir = path.join(projectDir, "packages/auth");
134
- const authPackageDirExists = await fs.pathExists(authPackageDir);
135
-
136
- if (authPackageDirExists && auth === "better-auth") {
137
- await addPackageDependency({
138
- dependencies: ["better-auth"],
139
- projectDir: authPackageDir,
140
- });
141
- }
142
-
143
- const hasWebFrontend = frontend.some((f) =>
144
- [
145
- "react-router",
146
- "tanstack-router",
147
- "tanstack-start",
148
- "next",
149
- "nuxt",
150
- "svelte",
151
- "solid",
152
- ].includes(f),
153
- );
154
-
155
- if (hasWebFrontend && clientDirExists) {
156
- if (auth === "better-auth") {
157
- await addPackageDependency({
158
- dependencies: ["better-auth"],
159
- projectDir: clientDir,
160
- });
161
- }
162
- }
163
-
164
- if (
165
- (frontend.includes("native-bare") ||
166
- frontend.includes("native-uniwind") ||
167
- frontend.includes("native-unistyles")) &&
168
- nativeDirExists
169
- ) {
170
- if (auth === "better-auth") {
171
- await addPackageDependency({
172
- dependencies: ["better-auth", "@better-auth/expo"],
173
- projectDir: nativeDir,
174
- });
175
- if (authPackageDirExists) {
176
- await addPackageDependency({
177
- dependencies: ["@better-auth/expo"],
178
- projectDir: authPackageDir,
179
- });
180
- }
181
- }
182
- }
183
-
184
- if (authPackageDirExists && auth === "better-auth") {
185
- await setupBetterAuthPlugins(projectDir, config);
186
- }
187
- } catch (error) {
188
- consola.error(pc.red("Failed to configure authentication dependencies"));
189
- if (error instanceof Error) {
190
- consola.error(pc.red(error.message));
191
- }
192
- }
193
- }
194
-
195
- export function generateAuthSecret(length = 32) {
196
- const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
197
- let result = "";
198
- const charactersLength = characters.length;
199
- for (let i = 0; i < length; i++) {
200
- result += characters.charAt(Math.floor(Math.random() * charactersLength));
201
- }
202
- return result;
203
- }
@@ -1,69 +0,0 @@
1
- import path from "node:path";
2
- import type { AvailableDependencies } from "../../constants";
3
- import type { ProjectConfig } from "../../types";
4
- import { addPackageDependency } from "../../utils/add-package-deps";
5
-
6
- export async function setupBackendDependencies(config: ProjectConfig) {
7
- const { backend, runtime, api, auth, projectDir } = config;
8
-
9
- if (backend === "convex") {
10
- const convexBackendDir = path.join(projectDir, "packages/backend");
11
- await addPackageDependency({
12
- dependencies: ["convex"],
13
- projectDir: convexBackendDir,
14
- });
15
- return;
16
- }
17
-
18
- const framework = backend;
19
- const serverDir = path.join(projectDir, "apps/server");
20
-
21
- const dependencies: AvailableDependencies[] = [];
22
- const devDependencies: AvailableDependencies[] = [];
23
-
24
- if (framework === "hono") {
25
- dependencies.push("hono");
26
- if (runtime === "node") {
27
- dependencies.push("@hono/node-server");
28
- }
29
- } else if (framework === "elysia") {
30
- dependencies.push("elysia", "@elysiajs/cors");
31
- if (runtime === "node") {
32
- dependencies.push("@elysiajs/node");
33
- }
34
- } else if (framework === "express") {
35
- dependencies.push("express", "cors");
36
- devDependencies.push("@types/express", "@types/cors");
37
- } else if (framework === "fastify") {
38
- dependencies.push("fastify", "@fastify/cors");
39
- }
40
-
41
- if (api === "trpc") {
42
- dependencies.push("@trpc/server");
43
- if (framework === "hono") {
44
- dependencies.push("@hono/trpc-server");
45
- } else if (framework === "elysia") {
46
- dependencies.push("@elysiajs/trpc");
47
- }
48
- } else if (api === "orpc") {
49
- dependencies.push("@orpc/server", "@orpc/openapi", "@orpc/zod");
50
- }
51
-
52
- if (auth === "better-auth") {
53
- dependencies.push("better-auth");
54
- }
55
-
56
- if (runtime === "node") {
57
- devDependencies.push("tsx", "@types/node");
58
- } else if (runtime === "bun") {
59
- devDependencies.push("@types/bun");
60
- }
61
-
62
- if (dependencies.length > 0 || devDependencies.length > 0) {
63
- await addPackageDependency({
64
- dependencies,
65
- devDependencies,
66
- projectDir: serverDir,
67
- });
68
- }
69
- }