create-better-t-stack 3.2.23 → 3.4.0
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.
- package/README.md +2 -2
- package/dist/cli.js +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +1 -1
- package/dist/{src-Cx7HDf0b.js → src-oHcpd_LW.js} +98 -57
- package/package.json +1 -1
- package/templates/addons/biome/biome.json.hbs +5 -0
- package/templates/api/orpc/server/tsconfig.json.hbs +1 -1
- package/templates/api/trpc/server/tsconfig.json.hbs +1 -1
- package/templates/auth/better-auth/convex/backend/convex/auth.ts.hbs +5 -5
- package/templates/auth/better-auth/convex/backend/convex/http.ts.hbs +1 -1
- package/templates/auth/better-auth/convex/native/bare/components/sign-in.tsx.hbs +127 -0
- package/templates/auth/better-auth/convex/native/bare/components/sign-up.tsx.hbs +138 -0
- package/templates/auth/better-auth/convex/native/uniwind/components/sign-in.tsx.hbs +91 -0
- package/templates/auth/better-auth/convex/native/uniwind/components/sign-up.tsx.hbs +102 -0
- package/templates/auth/better-auth/native/bare/app/(drawer)/index.tsx.hbs +186 -0
- package/templates/auth/better-auth/native/bare/components/sign-in.tsx.hbs +131 -0
- package/templates/auth/better-auth/native/bare/components/sign-up.tsx.hbs +150 -0
- package/templates/auth/better-auth/native/unistyles/app/(drawer)/index.tsx.hbs +9 -1
- package/templates/auth/better-auth/native/unistyles/components/sign-in.tsx.hbs +5 -0
- package/templates/auth/better-auth/native/unistyles/components/sign-up.tsx.hbs +5 -0
- package/templates/auth/better-auth/native/uniwind/app/(drawer)/index.tsx.hbs +123 -0
- package/templates/auth/better-auth/native/uniwind/components/sign-in.tsx.hbs +90 -0
- package/templates/auth/better-auth/native/uniwind/components/sign-up.tsx.hbs +116 -0
- package/templates/auth/better-auth/server/base/src/index.ts.hbs +5 -5
- package/templates/auth/better-auth/server/base/tsconfig.json.hbs +1 -1
- package/templates/backend/server/base/tsconfig.json.hbs +1 -1
- package/templates/db/base/tsconfig.json.hbs +1 -1
- package/templates/examples/ai/native/bare/app/(drawer)/ai.tsx.hbs +287 -0
- package/templates/examples/ai/native/{nativewind → bare}/polyfills.js +1 -0
- package/templates/examples/ai/native/{nativewind → uniwind}/app/(drawer)/ai.tsx.hbs +52 -51
- package/templates/examples/ai/native/uniwind/polyfills.js +26 -0
- package/templates/examples/todo/native/bare/app/(drawer)/todos.tsx.hbs +521 -0
- package/templates/examples/todo/native/uniwind/app/(drawer)/todos.tsx.hbs +295 -0
- package/templates/extras/bunfig.toml.hbs +3 -3
- package/templates/frontend/native/bare/_gitignore +18 -0
- package/templates/frontend/native/{nativewind → bare}/app/(drawer)/(tabs)/_layout.tsx.hbs +7 -12
- package/templates/frontend/native/bare/app/(drawer)/(tabs)/index.tsx.hbs +43 -0
- package/templates/frontend/native/bare/app/(drawer)/(tabs)/two.tsx.hbs +43 -0
- package/templates/frontend/native/{nativewind → bare}/app/(drawer)/_layout.tsx.hbs +24 -1
- package/templates/frontend/native/bare/app/(drawer)/index.tsx.hbs +234 -0
- package/templates/frontend/native/bare/app/+not-found.tsx.hbs +65 -0
- package/templates/frontend/native/bare/app/_layout.tsx.hbs +163 -0
- package/templates/frontend/native/bare/app/modal.tsx.hbs +34 -0
- package/templates/frontend/native/{nativewind → bare}/app.json.hbs +1 -0
- package/templates/frontend/native/bare/components/container.tsx.hbs +25 -0
- package/templates/frontend/native/bare/components/header-button.tsx.hbs +47 -0
- package/templates/frontend/native/{nativewind → bare}/components/tabbar-icon.tsx.hbs +1 -0
- package/templates/frontend/native/{nativewind → bare}/lib/android-navigation-bar.tsx.hbs +1 -0
- package/templates/frontend/native/{nativewind → bare}/lib/constants.ts.hbs +1 -0
- package/templates/frontend/native/bare/lib/use-color-scheme.ts.hbs +20 -0
- package/templates/frontend/native/bare/metro.config.js.hbs +9 -0
- package/templates/frontend/native/{nativewind → bare}/package.json.hbs +1 -2
- package/templates/frontend/native/bare/tsconfig.json.hbs +11 -0
- package/templates/frontend/native/{nativewind → uniwind}/_gitignore +4 -8
- package/templates/frontend/native/uniwind/app/(drawer)/(tabs)/_layout.tsx.hbs +46 -0
- package/templates/frontend/native/uniwind/app/(drawer)/(tabs)/index.tsx.hbs +15 -0
- package/templates/frontend/native/uniwind/app/(drawer)/(tabs)/two.tsx.hbs +15 -0
- package/templates/frontend/native/uniwind/app/(drawer)/_layout.tsx.hbs +83 -0
- package/templates/frontend/native/uniwind/app/(drawer)/index.tsx.hbs +151 -0
- package/templates/frontend/native/uniwind/app/+not-found.tsx.hbs +32 -0
- package/templates/frontend/native/uniwind/app/_layout.tsx.hbs +131 -0
- package/templates/frontend/native/uniwind/app/modal.tsx.hbs +53 -0
- package/templates/frontend/native/uniwind/app.json.hbs +19 -0
- package/templates/frontend/native/uniwind/components/container.tsx.hbs +33 -0
- package/templates/frontend/native/uniwind/components/theme-toggle.tsx.hbs +35 -0
- package/templates/frontend/native/uniwind/contexts/app-theme-context.tsx.hbs +62 -0
- package/templates/frontend/native/uniwind/global.css +5 -0
- package/templates/frontend/native/uniwind/metro.config.js.hbs +13 -0
- package/templates/frontend/native/uniwind/package.json.hbs +54 -0
- package/templates/frontend/native/{nativewind → uniwind}/tsconfig.json.hbs +4 -8
- package/templates/packages/config/package.json.hbs +5 -0
- package/templates/auth/better-auth/convex/native/nativewind/components/sign-in.tsx.hbs +0 -86
- package/templates/auth/better-auth/convex/native/nativewind/components/sign-up.tsx.hbs +0 -97
- package/templates/auth/better-auth/native/nativewind/app/(drawer)/index.tsx.hbs +0 -95
- package/templates/auth/better-auth/native/nativewind/components/sign-in.tsx.hbs +0 -93
- package/templates/auth/better-auth/native/nativewind/components/sign-up.tsx.hbs +0 -104
- package/templates/base/tsconfig.json.hbs +0 -3
- package/templates/examples/todo/native/nativewind/app/(drawer)/todos.tsx.hbs +0 -295
- package/templates/frontend/native/nativewind/app/(drawer)/(tabs)/index.tsx.hbs +0 -19
- package/templates/frontend/native/nativewind/app/(drawer)/(tabs)/two.tsx.hbs +0 -19
- package/templates/frontend/native/nativewind/app/(drawer)/index.tsx.hbs +0 -178
- package/templates/frontend/native/nativewind/app/+not-found.tsx.hbs +0 -29
- package/templates/frontend/native/nativewind/app/_layout.tsx.hbs +0 -175
- package/templates/frontend/native/nativewind/app/modal.tsx.hbs +0 -14
- package/templates/frontend/native/nativewind/babel.config.js.hbs +0 -14
- package/templates/frontend/native/nativewind/components/container.tsx.hbs +0 -8
- package/templates/frontend/native/nativewind/components/header-button.tsx.hbs +0 -26
- package/templates/frontend/native/nativewind/global.css +0 -50
- package/templates/frontend/native/nativewind/lib/use-color-scheme.ts.hbs +0 -12
- package/templates/frontend/native/nativewind/metro.config.js.hbs +0 -12
- package/templates/frontend/native/nativewind/tailwind.config.js.hbs +0 -59
- /package/templates/auth/clerk/convex/native/base/app/(auth)/{sign-out.tsx.hbs → sign-up.tsx.hbs} +0 -0
- /package/templates/{base → packages/config}/tsconfig.base.json.hbs +0 -0
package/README.md
CHANGED
|
@@ -57,7 +57,7 @@ Options:
|
|
|
57
57
|
--orm <type> ORM type (none, drizzle, prisma, mongoose)
|
|
58
58
|
--auth Include authentication
|
|
59
59
|
--no-auth Exclude authentication
|
|
60
|
-
--frontend <types...> Frontend types (tanstack-router, react-router, tanstack-start, next, nuxt, svelte, solid, native-
|
|
60
|
+
--frontend <types...> Frontend types (tanstack-router, react-router, tanstack-start, next, nuxt, svelte, solid, native-bare, native-uniwind, native-unistyles, none)
|
|
61
61
|
--addons <types...> Additional addons (pwa, tauri, starlight, biome, husky, turborepo, fumadocs, ultracite, oxlint, none)
|
|
62
62
|
--examples <types...> Examples to include (todo, ai, none)
|
|
63
63
|
--git Initialize git repository
|
|
@@ -119,7 +119,7 @@ npx create-better-t-stack my-app --backend elysia --runtime node
|
|
|
119
119
|
Create a project with multiple frontend options (one web + one native):
|
|
120
120
|
|
|
121
121
|
```bash
|
|
122
|
-
npx create-better-t-stack my-app --frontend tanstack-router native-
|
|
122
|
+
npx create-better-t-stack my-app --frontend tanstack-router native-bare
|
|
123
123
|
```
|
|
124
124
|
|
|
125
125
|
Create a project with examples:
|
package/dist/cli.js
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -43,7 +43,8 @@ declare const FrontendSchema: z.ZodEnum<{
|
|
|
43
43
|
"tanstack-start": "tanstack-start";
|
|
44
44
|
next: "next";
|
|
45
45
|
nuxt: "nuxt";
|
|
46
|
-
"native-
|
|
46
|
+
"native-bare": "native-bare";
|
|
47
|
+
"native-uniwind": "native-uniwind";
|
|
47
48
|
"native-unistyles": "native-unistyles";
|
|
48
49
|
svelte: "svelte";
|
|
49
50
|
solid: "solid";
|
|
@@ -242,7 +243,8 @@ declare const router: {
|
|
|
242
243
|
"tanstack-start": "tanstack-start";
|
|
243
244
|
next: "next";
|
|
244
245
|
nuxt: "nuxt";
|
|
245
|
-
"native-
|
|
246
|
+
"native-bare": "native-bare";
|
|
247
|
+
"native-uniwind": "native-uniwind";
|
|
246
248
|
"native-unistyles": "native-unistyles";
|
|
247
249
|
svelte: "svelte";
|
|
248
250
|
solid: "solid";
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { a as router, i as init, n as createBtsCli, o as sponsors, r as docs, t as builder } from "./src-
|
|
2
|
+
import { a as router, i as init, n as createBtsCli, o as sponsors, r as docs, t as builder } from "./src-oHcpd_LW.js";
|
|
3
3
|
|
|
4
4
|
export { builder, createBtsCli, docs, init, router, sponsors };
|
|
@@ -146,7 +146,7 @@ const dependencyVersionMap = {
|
|
|
146
146
|
"nitro-cloudflare-dev": "^0.2.2",
|
|
147
147
|
"@sveltejs/adapter-cloudflare": "^7.2.1",
|
|
148
148
|
"@cloudflare/workers-types": "^4.20250822.0",
|
|
149
|
-
alchemy: "^0.
|
|
149
|
+
alchemy: "^0.77.0",
|
|
150
150
|
dotenv: "^17.2.2",
|
|
151
151
|
tsdown: "^0.15.5",
|
|
152
152
|
zod: "^4.1.11",
|
|
@@ -216,7 +216,8 @@ const FrontendSchema = z.enum([
|
|
|
216
216
|
"tanstack-start",
|
|
217
217
|
"next",
|
|
218
218
|
"nuxt",
|
|
219
|
-
"native-
|
|
219
|
+
"native-bare",
|
|
220
|
+
"native-uniwind",
|
|
220
221
|
"native-unistyles",
|
|
221
222
|
"svelte",
|
|
222
223
|
"solid",
|
|
@@ -337,13 +338,13 @@ function isWebFrontend(value) {
|
|
|
337
338
|
function splitFrontends(values = []) {
|
|
338
339
|
return {
|
|
339
340
|
web: values.filter((f) => isWebFrontend(f)),
|
|
340
|
-
native: values.filter((f) => f === "native-
|
|
341
|
+
native: values.filter((f) => f === "native-bare" || f === "native-uniwind" || f === "native-unistyles")
|
|
341
342
|
};
|
|
342
343
|
}
|
|
343
344
|
function ensureSingleWebAndNative(frontends) {
|
|
344
345
|
const { web, native } = splitFrontends(frontends);
|
|
345
346
|
if (web.length > 1) exitWithError("Cannot select multiple web frameworks. Choose only one of: tanstack-router, tanstack-start, react-router, next, nuxt, svelte, solid");
|
|
346
|
-
if (native.length > 1) exitWithError("Cannot select multiple native frameworks. Choose only one of: native-
|
|
347
|
+
if (native.length > 1) exitWithError("Cannot select multiple native frameworks. Choose only one of: native-bare, native-uniwind, native-unistyles");
|
|
347
348
|
}
|
|
348
349
|
const FULLSTACK_FRONTENDS$1 = ["next", "tanstack-start"];
|
|
349
350
|
function validateSelfBackendCompatibility(providedFlags, options, config) {
|
|
@@ -352,7 +353,7 @@ function validateSelfBackendCompatibility(providedFlags, options, config) {
|
|
|
352
353
|
if (backend === "self") {
|
|
353
354
|
const { web, native } = splitFrontends(frontends);
|
|
354
355
|
if (!(web.length === 1 && FULLSTACK_FRONTENDS$1.includes(web[0]))) exitWithError("Backend 'self' (fullstack) currently only supports Next.js and TanStack Start frontends. Please use --frontend next or --frontend tanstack-start. Support for Nuxt and SvelteKit will be added in a future update.");
|
|
355
|
-
if (native.length > 1) exitWithError("Cannot select multiple native frameworks. Choose only one of: native-
|
|
356
|
+
if (native.length > 1) exitWithError("Cannot select multiple native frameworks. Choose only one of: native-bare, native-uniwind, native-unistyles");
|
|
356
357
|
}
|
|
357
358
|
const hasFullstackFrontend = frontends.some((f) => FULLSTACK_FRONTENDS$1.includes(f));
|
|
358
359
|
if (providedFlags.has("backend") && !hasFullstackFrontend && backend === "self") exitWithError("Backend 'self' (fullstack) currently only supports Next.js and TanStack Start frontends. Please use --frontend next or --frontend tanstack-start or choose a different backend. Support for Nuxt and SvelteKit will be added in a future update.");
|
|
@@ -622,7 +623,8 @@ async function getAuthChoice(auth, backend, frontend) {
|
|
|
622
623
|
"tanstack-router",
|
|
623
624
|
"tanstack-start",
|
|
624
625
|
"next",
|
|
625
|
-
"native-
|
|
626
|
+
"native-bare",
|
|
627
|
+
"native-uniwind",
|
|
626
628
|
"native-unistyles"
|
|
627
629
|
].includes(f));
|
|
628
630
|
const hasClerkCompatibleFrontends = frontend?.some((f) => [
|
|
@@ -630,7 +632,8 @@ async function getAuthChoice(auth, backend, frontend) {
|
|
|
630
632
|
"tanstack-router",
|
|
631
633
|
"tanstack-start",
|
|
632
634
|
"next",
|
|
633
|
-
"native-
|
|
635
|
+
"native-bare",
|
|
636
|
+
"native-uniwind",
|
|
634
637
|
"native-unistyles"
|
|
635
638
|
].includes(f));
|
|
636
639
|
const options = [];
|
|
@@ -965,16 +968,24 @@ async function getFrontendChoice(frontendOptions, backend, auth) {
|
|
|
965
968
|
if (frontendTypes.includes("native")) {
|
|
966
969
|
const nativeFramework = await select({
|
|
967
970
|
message: "Choose native",
|
|
968
|
-
options: [
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
971
|
+
options: [
|
|
972
|
+
{
|
|
973
|
+
value: "native-bare",
|
|
974
|
+
label: "Bare",
|
|
975
|
+
hint: "Bare Expo without styling library"
|
|
976
|
+
},
|
|
977
|
+
{
|
|
978
|
+
value: "native-uniwind",
|
|
979
|
+
label: "Uniwind",
|
|
980
|
+
hint: "Use Tailwind CSS for React Native"
|
|
981
|
+
},
|
|
982
|
+
{
|
|
983
|
+
value: "native-unistyles",
|
|
984
|
+
label: "Unistyles",
|
|
985
|
+
hint: "Consistent styling for React Native"
|
|
986
|
+
}
|
|
987
|
+
],
|
|
988
|
+
initialValue: "native-bare"
|
|
978
989
|
});
|
|
979
990
|
if (isCancel(nativeFramework)) return exitCancelled("Operation cancelled");
|
|
980
991
|
result.push(nativeFramework);
|
|
@@ -1733,7 +1744,8 @@ function validateConvexConstraints(config, providedFlags) {
|
|
|
1733
1744
|
"tanstack-router",
|
|
1734
1745
|
"tanstack-start",
|
|
1735
1746
|
"next",
|
|
1736
|
-
"native-
|
|
1747
|
+
"native-bare",
|
|
1748
|
+
"native-uniwind",
|
|
1737
1749
|
"native-unistyles"
|
|
1738
1750
|
];
|
|
1739
1751
|
if (!config.frontend?.some((f) => supportedFrontends.includes(f))) exitWithError("Better-Auth with Convex backend requires a supported frontend (TanStack Router, TanStack Start, Next.js, or Native).");
|
|
@@ -2306,7 +2318,8 @@ function getFrameworksFromFrontend(frontend) {
|
|
|
2306
2318
|
"tanstack-start": "react",
|
|
2307
2319
|
next: "next",
|
|
2308
2320
|
nuxt: "vue",
|
|
2309
|
-
"native-
|
|
2321
|
+
"native-bare": "react",
|
|
2322
|
+
"native-uniwind": "react",
|
|
2310
2323
|
"native-unistyles": "react",
|
|
2311
2324
|
svelte: "svelte",
|
|
2312
2325
|
solid: "solid"
|
|
@@ -2759,7 +2772,8 @@ async function setupFrontendTemplates(projectDir, context) {
|
|
|
2759
2772
|
const hasNuxtWeb = context.frontend.includes("nuxt");
|
|
2760
2773
|
const hasSvelteWeb = context.frontend.includes("svelte");
|
|
2761
2774
|
const hasSolidWeb = context.frontend.includes("solid");
|
|
2762
|
-
const
|
|
2775
|
+
const hasNativeBare = context.frontend.includes("native-bare");
|
|
2776
|
+
const hasNativeUniwind = context.frontend.includes("native-uniwind");
|
|
2763
2777
|
const hasUnistyles = context.frontend.includes("native-unistyles");
|
|
2764
2778
|
const isConvex = context.backend === "convex";
|
|
2765
2779
|
if (hasReactWeb || hasNuxtWeb || hasSvelteWeb || hasSolidWeb) {
|
|
@@ -2809,13 +2823,14 @@ async function setupFrontendTemplates(projectDir, context) {
|
|
|
2809
2823
|
}
|
|
2810
2824
|
}
|
|
2811
2825
|
}
|
|
2812
|
-
if (
|
|
2826
|
+
if (hasNativeBare || hasNativeUniwind || hasUnistyles) {
|
|
2813
2827
|
const nativeAppDir = path.join(projectDir, "apps/native");
|
|
2814
2828
|
await fs.ensureDir(nativeAppDir);
|
|
2815
2829
|
const nativeBaseCommonDir = path.join(PKG_ROOT, "templates/frontend/native/base");
|
|
2816
2830
|
if (await fs.pathExists(nativeBaseCommonDir)) await processAndCopyFiles("**/*", nativeBaseCommonDir, nativeAppDir, context);
|
|
2817
2831
|
let nativeFrameworkPath = "";
|
|
2818
|
-
if (
|
|
2832
|
+
if (hasNativeBare) nativeFrameworkPath = "bare";
|
|
2833
|
+
else if (hasNativeUniwind) nativeFrameworkPath = "uniwind";
|
|
2819
2834
|
else if (hasUnistyles) nativeFrameworkPath = "unistyles";
|
|
2820
2835
|
const nativeSpecificDir = path.join(PKG_ROOT, `templates/frontend/native/${nativeFrameworkPath}`);
|
|
2821
2836
|
if (await fs.pathExists(nativeSpecificDir)) await processAndCopyFiles("**/*", nativeSpecificDir, nativeAppDir, context, true);
|
|
@@ -2832,6 +2847,12 @@ async function setupApiPackage(projectDir, context) {
|
|
|
2832
2847
|
const apiServerDir = path.join(PKG_ROOT, `templates/api/${context.api}/server`);
|
|
2833
2848
|
if (await fs.pathExists(apiServerDir)) await processAndCopyFiles("**/*", apiServerDir, apiPackageDir, context);
|
|
2834
2849
|
}
|
|
2850
|
+
async function setupConfigPackage(projectDir, context) {
|
|
2851
|
+
const configPackageDir = path.join(projectDir, "packages/config");
|
|
2852
|
+
await fs.ensureDir(configPackageDir);
|
|
2853
|
+
const configBaseDir = path.join(PKG_ROOT, "templates/packages/config");
|
|
2854
|
+
if (await fs.pathExists(configBaseDir)) await processAndCopyFiles("**/*", configBaseDir, configPackageDir, context);
|
|
2855
|
+
}
|
|
2835
2856
|
async function setupDbPackage(projectDir, context) {
|
|
2836
2857
|
if (context.database === "none" || context.orm === "none") return;
|
|
2837
2858
|
const dbPackageDir = path.join(projectDir, "packages/db");
|
|
@@ -2858,6 +2879,7 @@ async function setupServerApp(projectDir, context) {
|
|
|
2858
2879
|
if (await fs.pathExists(frameworkSrcDir)) await processAndCopyFiles("**/*", frameworkSrcDir, serverAppDir, context, true);
|
|
2859
2880
|
}
|
|
2860
2881
|
async function setupBackendFramework(projectDir, context) {
|
|
2882
|
+
await setupConfigPackage(projectDir, context);
|
|
2861
2883
|
if (context.backend === "none") return;
|
|
2862
2884
|
if (context.backend === "convex") {
|
|
2863
2885
|
await setupConvexBackend(projectDir, context);
|
|
@@ -2889,9 +2911,10 @@ async function setupAuthTemplate(projectDir, context) {
|
|
|
2889
2911
|
const hasNuxtWeb = context.frontend.includes("nuxt");
|
|
2890
2912
|
const hasSvelteWeb = context.frontend.includes("svelte");
|
|
2891
2913
|
const hasSolidWeb = context.frontend.includes("solid");
|
|
2892
|
-
const
|
|
2914
|
+
const hasNativeBare = context.frontend.includes("native-bare");
|
|
2915
|
+
const hasUniwind = context.frontend.includes("native-uniwind");
|
|
2893
2916
|
const hasUnistyles = context.frontend.includes("native-unistyles");
|
|
2894
|
-
const hasNative =
|
|
2917
|
+
const hasNative = hasNativeBare || hasUniwind || hasUnistyles;
|
|
2895
2918
|
const authProvider = context.auth;
|
|
2896
2919
|
if (context.backend === "convex" && authProvider === "clerk") {
|
|
2897
2920
|
const convexBackendDestDir = path.join(projectDir, "packages/backend");
|
|
@@ -2915,11 +2938,10 @@ async function setupAuthTemplate(projectDir, context) {
|
|
|
2915
2938
|
if (nativeAppDirExists) {
|
|
2916
2939
|
const convexClerkNativeBaseSrc = path.join(PKG_ROOT, "templates/auth/clerk/convex/native/base");
|
|
2917
2940
|
if (await fs.pathExists(convexClerkNativeBaseSrc)) await processAndCopyFiles("**/*", convexClerkNativeBaseSrc, nativeAppDir, context);
|
|
2918
|
-
const hasNativeWind$1 = context.frontend.includes("native-nativewind");
|
|
2919
|
-
const hasUnistyles$1 = context.frontend.includes("native-unistyles");
|
|
2920
2941
|
let nativeFrameworkPath = "";
|
|
2921
|
-
if (
|
|
2922
|
-
else if (
|
|
2942
|
+
if (hasNativeBare) nativeFrameworkPath = "bare";
|
|
2943
|
+
else if (hasUniwind) nativeFrameworkPath = "uniwind";
|
|
2944
|
+
else if (hasUnistyles) nativeFrameworkPath = "unistyles";
|
|
2923
2945
|
if (nativeFrameworkPath) {
|
|
2924
2946
|
const convexClerkNativeFrameworkSrc = path.join(PKG_ROOT, `templates/auth/clerk/convex/native/${nativeFrameworkPath}`);
|
|
2925
2947
|
if (await fs.pathExists(convexClerkNativeFrameworkSrc)) await processAndCopyFiles("**/*", convexClerkNativeFrameworkSrc, nativeAppDir, context);
|
|
@@ -2952,7 +2974,8 @@ async function setupAuthTemplate(projectDir, context) {
|
|
|
2952
2974
|
const convexBetterAuthNativeBaseSrc = path.join(PKG_ROOT, "templates/auth/better-auth/convex/native/base");
|
|
2953
2975
|
if (await fs.pathExists(convexBetterAuthNativeBaseSrc)) await processAndCopyFiles("**/*", convexBetterAuthNativeBaseSrc, nativeAppDir, context);
|
|
2954
2976
|
let nativeFrameworkPath = "";
|
|
2955
|
-
if (
|
|
2977
|
+
if (hasNativeBare) nativeFrameworkPath = "bare";
|
|
2978
|
+
else if (hasUniwind) nativeFrameworkPath = "uniwind";
|
|
2956
2979
|
else if (hasUnistyles) nativeFrameworkPath = "unistyles";
|
|
2957
2980
|
if (nativeFrameworkPath) {
|
|
2958
2981
|
const convexBetterAuthNativeFrameworkSrc = path.join(PKG_ROOT, `templates/auth/better-auth/convex/native/${nativeFrameworkPath}`);
|
|
@@ -3011,7 +3034,8 @@ async function setupAuthTemplate(projectDir, context) {
|
|
|
3011
3034
|
const authNativeBaseSrc = path.join(PKG_ROOT, `templates/auth/${authProvider}/native/base`);
|
|
3012
3035
|
if (await fs.pathExists(authNativeBaseSrc)) await processAndCopyFiles("**/*", authNativeBaseSrc, nativeAppDir, context);
|
|
3013
3036
|
let nativeFrameworkAuthPath = "";
|
|
3014
|
-
if (
|
|
3037
|
+
if (hasNativeBare) nativeFrameworkAuthPath = "bare";
|
|
3038
|
+
else if (hasUniwind) nativeFrameworkAuthPath = "uniwind";
|
|
3015
3039
|
else if (hasUnistyles) nativeFrameworkAuthPath = "unistyles";
|
|
3016
3040
|
if (nativeFrameworkAuthPath) {
|
|
3017
3041
|
const authNativeFrameworkSrc = path.join(PKG_ROOT, `templates/auth/${authProvider}/native/${nativeFrameworkAuthPath}`);
|
|
@@ -3155,11 +3179,13 @@ async function setupExamplesTemplate(projectDir, context) {
|
|
|
3155
3179
|
}
|
|
3156
3180
|
}
|
|
3157
3181
|
if (nativeAppDirExists) {
|
|
3158
|
-
const
|
|
3182
|
+
const hasNativeBare = context.frontend.includes("native-bare");
|
|
3183
|
+
const hasUniwind = context.frontend.includes("native-uniwind");
|
|
3159
3184
|
const hasUnistyles = context.frontend.includes("native-unistyles");
|
|
3160
|
-
if (
|
|
3185
|
+
if (hasNativeBare || hasUniwind || hasUnistyles) {
|
|
3161
3186
|
let nativeFramework = "";
|
|
3162
|
-
if (
|
|
3187
|
+
if (hasNativeBare) nativeFramework = "bare";
|
|
3188
|
+
else if (hasUniwind) nativeFramework = "uniwind";
|
|
3163
3189
|
else if (hasUnistyles) nativeFramework = "unistyles";
|
|
3164
3190
|
const exampleNativeSrc = path.join(exampleBaseDir, `native/${nativeFramework}`);
|
|
3165
3191
|
if (await fs.pathExists(exampleNativeSrc)) await processAndCopyFiles("**/*", exampleNativeSrc, nativeAppDir, context, false);
|
|
@@ -3169,9 +3195,10 @@ async function setupExamplesTemplate(projectDir, context) {
|
|
|
3169
3195
|
}
|
|
3170
3196
|
async function handleExtras(projectDir, context) {
|
|
3171
3197
|
const extrasDir = path.join(PKG_ROOT, "templates/extras");
|
|
3172
|
-
const
|
|
3198
|
+
const hasNativeBare = context.frontend.includes("native-bare");
|
|
3199
|
+
const hasUniwind = context.frontend.includes("native-uniwind");
|
|
3173
3200
|
const hasUnistyles = context.frontend.includes("native-unistyles");
|
|
3174
|
-
const hasNative =
|
|
3201
|
+
const hasNative = hasNativeBare || hasUniwind || hasUnistyles;
|
|
3175
3202
|
if (context.packageManager === "pnpm") {
|
|
3176
3203
|
const pnpmWorkspaceSrc = path.join(extrasDir, "pnpm-workspace.yaml");
|
|
3177
3204
|
const pnpmWorkspaceDest = path.join(projectDir, "pnpm-workspace.yaml");
|
|
@@ -4162,7 +4189,7 @@ async function setupExamples(config) {
|
|
|
4162
4189
|
const hasSvelte = frontend.includes("svelte");
|
|
4163
4190
|
const hasReactWeb = frontend.includes("react-router") || frontend.includes("tanstack-router") || frontend.includes("next") || frontend.includes("tanstack-start");
|
|
4164
4191
|
const hasNext = frontend.includes("next");
|
|
4165
|
-
const hasReactNative = frontend.includes("native-
|
|
4192
|
+
const hasReactNative = frontend.includes("native-bare") || frontend.includes("native-uniwind") || frontend.includes("native-unistyles");
|
|
4166
4193
|
if (webClientDirExists) {
|
|
4167
4194
|
const dependencies = ["ai"];
|
|
4168
4195
|
if (hasNuxt) dependencies.push("@ai-sdk/vue");
|
|
@@ -4207,7 +4234,11 @@ function getFrontendType(frontend) {
|
|
|
4207
4234
|
"tanstack-start",
|
|
4208
4235
|
"next"
|
|
4209
4236
|
];
|
|
4210
|
-
const nativeFrontends = [
|
|
4237
|
+
const nativeFrontends = [
|
|
4238
|
+
"native-bare",
|
|
4239
|
+
"native-uniwind",
|
|
4240
|
+
"native-unistyles"
|
|
4241
|
+
];
|
|
4211
4242
|
return {
|
|
4212
4243
|
hasReactWeb: frontend.some((f) => reactBasedFrontends.includes(f)),
|
|
4213
4244
|
hasNuxtWeb: frontend.includes("nuxt"),
|
|
@@ -4282,13 +4313,14 @@ function getQueryDependencies(frontend) {
|
|
|
4282
4313
|
"tanstack-router",
|
|
4283
4314
|
"tanstack-start",
|
|
4284
4315
|
"next",
|
|
4285
|
-
"native-
|
|
4316
|
+
"native-bare",
|
|
4317
|
+
"native-uniwind",
|
|
4286
4318
|
"native-unistyles"
|
|
4287
4319
|
];
|
|
4288
4320
|
const deps = {};
|
|
4289
4321
|
if (frontend.some((f) => reactBasedFrontends.includes(f))) {
|
|
4290
|
-
const hasReactWeb = frontend.some((f) => f !== "native-
|
|
4291
|
-
const hasNative = frontend.includes("native-
|
|
4322
|
+
const hasReactWeb = frontend.some((f) => f !== "native-bare" && f !== "native-uniwind" && f !== "native-unistyles" && reactBasedFrontends.includes(f));
|
|
4323
|
+
const hasNative = frontend.includes("native-bare") || frontend.includes("native-uniwind") || frontend.includes("native-unistyles");
|
|
4292
4324
|
if (hasReactWeb) deps.web = {
|
|
4293
4325
|
dependencies: ["@tanstack/react-query"],
|
|
4294
4326
|
devDependencies: ["@tanstack/react-query-devtools"]
|
|
@@ -4440,7 +4472,7 @@ async function setupBetterAuthPlugins(projectDir, config) {
|
|
|
4440
4472
|
pluginsToAdd.push("nextCookies()");
|
|
4441
4473
|
importsToAdd.push("import { nextCookies } from \"better-auth/next-js\";");
|
|
4442
4474
|
}
|
|
4443
|
-
if (config.frontend?.includes("native-
|
|
4475
|
+
if (config.frontend?.includes("native-bare") || config.frontend?.includes("native-uniwind") || config.frontend?.includes("native-unistyles")) {
|
|
4444
4476
|
pluginsToAdd.push("expo()");
|
|
4445
4477
|
importsToAdd.push("import { expo } from \"@better-auth/expo\";");
|
|
4446
4478
|
}
|
|
@@ -4497,7 +4529,7 @@ async function setupAuth(config) {
|
|
|
4497
4529
|
if (auth === "better-auth") {
|
|
4498
4530
|
const convexBackendDir = path.join(projectDir, "packages/backend");
|
|
4499
4531
|
const convexBackendDirExists = await fs.pathExists(convexBackendDir);
|
|
4500
|
-
const hasNativeForBA = frontend.includes("native-
|
|
4532
|
+
const hasNativeForBA = frontend.includes("native-bare") || frontend.includes("native-uniwind") || frontend.includes("native-unistyles");
|
|
4501
4533
|
if (convexBackendDirExists) {
|
|
4502
4534
|
await addPackageDependency({
|
|
4503
4535
|
dependencies: ["better-auth", "@convex-dev/better-auth"],
|
|
@@ -4530,9 +4562,10 @@ async function setupAuth(config) {
|
|
|
4530
4562
|
projectDir: clientDir
|
|
4531
4563
|
});
|
|
4532
4564
|
}
|
|
4533
|
-
const
|
|
4565
|
+
const hasNativeBare$1 = frontend.includes("native-bare");
|
|
4566
|
+
const hasNativeUniwind$1 = frontend.includes("native-uniwind");
|
|
4534
4567
|
const hasUnistyles$1 = frontend.includes("native-unistyles");
|
|
4535
|
-
if (nativeDirExists && (
|
|
4568
|
+
if (nativeDirExists && (hasNativeBare$1 || hasNativeUniwind$1 || hasUnistyles$1)) await addPackageDependency({
|
|
4536
4569
|
dependencies: [
|
|
4537
4570
|
"better-auth",
|
|
4538
4571
|
"@better-auth/expo",
|
|
@@ -4545,9 +4578,10 @@ async function setupAuth(config) {
|
|
|
4545
4578
|
projectDir: nativeDir
|
|
4546
4579
|
});
|
|
4547
4580
|
}
|
|
4548
|
-
const
|
|
4581
|
+
const hasNativeBare = frontend.includes("native-bare");
|
|
4582
|
+
const hasNativeUniwind = frontend.includes("native-uniwind");
|
|
4549
4583
|
const hasUnistyles = frontend.includes("native-unistyles");
|
|
4550
|
-
if (auth === "clerk" && nativeDirExists && (
|
|
4584
|
+
if (auth === "clerk" && nativeDirExists && (hasNativeBare || hasNativeUniwind || hasUnistyles)) await addPackageDependency({
|
|
4551
4585
|
dependencies: ["@clerk/clerk-expo"],
|
|
4552
4586
|
projectDir: nativeDir
|
|
4553
4587
|
});
|
|
@@ -4573,7 +4607,7 @@ async function setupAuth(config) {
|
|
|
4573
4607
|
projectDir: clientDir
|
|
4574
4608
|
});
|
|
4575
4609
|
}
|
|
4576
|
-
if ((frontend.includes("native-
|
|
4610
|
+
if ((frontend.includes("native-bare") || frontend.includes("native-uniwind") || frontend.includes("native-unistyles")) && nativeDirExists) {
|
|
4577
4611
|
if (auth === "better-auth") {
|
|
4578
4612
|
await addPackageDependency({
|
|
4579
4613
|
dependencies: ["better-auth", "@better-auth/expo"],
|
|
@@ -4740,7 +4774,7 @@ async function setupEnvironmentVariables(config) {
|
|
|
4740
4774
|
await addEnvVariablesToFile(path.join(clientDir, ".env"), clientVars);
|
|
4741
4775
|
}
|
|
4742
4776
|
}
|
|
4743
|
-
if (frontend.includes("native-
|
|
4777
|
+
if (frontend.includes("native-bare") || frontend.includes("native-uniwind") || frontend.includes("native-unistyles")) {
|
|
4744
4778
|
const nativeDir = path.join(projectDir, "apps/native");
|
|
4745
4779
|
if (await fs.pathExists(nativeDir)) {
|
|
4746
4780
|
let envVarName = "EXPO_PUBLIC_SERVER_URL";
|
|
@@ -4773,7 +4807,7 @@ async function setupEnvironmentVariables(config) {
|
|
|
4773
4807
|
const convexBackendDir = path.join(projectDir, "packages/backend");
|
|
4774
4808
|
if (await fs.pathExists(convexBackendDir)) {
|
|
4775
4809
|
const envLocalPath = path.join(convexBackendDir, ".env.local");
|
|
4776
|
-
const hasNative = frontend.includes("native-
|
|
4810
|
+
const hasNative = frontend.includes("native-bare") || frontend.includes("native-uniwind") || frontend.includes("native-unistyles");
|
|
4777
4811
|
const hasWeb = hasWebFrontend$1;
|
|
4778
4812
|
if (!await fs.pathExists(envLocalPath) || !(await fs.readFile(envLocalPath, "utf8")).includes("npx convex env set")) {
|
|
4779
4813
|
const convexCommands = `# Set Convex environment variables
|
|
@@ -6082,7 +6116,7 @@ function generateReadmeContent(options) {
|
|
|
6082
6116
|
const { projectName, packageManager, database, auth, addons = [], orm = "drizzle", runtime = "bun", frontend = ["tanstack-router"], backend = "hono", api = "trpc", webDeploy, serverDeploy } = options;
|
|
6083
6117
|
const isConvex = backend === "convex";
|
|
6084
6118
|
const hasReactRouter = frontend.includes("react-router");
|
|
6085
|
-
const hasNative = frontend.includes("native-
|
|
6119
|
+
const hasNative = frontend.includes("native-bare") || frontend.includes("native-uniwind") || frontend.includes("native-unistyles");
|
|
6086
6120
|
const hasSvelte = frontend.includes("svelte");
|
|
6087
6121
|
const packageManagerRunCmd = `${packageManager} run`;
|
|
6088
6122
|
let webPort = "3001";
|
|
@@ -6208,7 +6242,7 @@ function generateProjectStructure(projectName, frontend, backend, addons, isConv
|
|
|
6208
6242
|
else structure.push(`│ ├── web/ # Frontend application (${frontendType})`);
|
|
6209
6243
|
}
|
|
6210
6244
|
}
|
|
6211
|
-
if (frontend.includes("native-
|
|
6245
|
+
if (frontend.includes("native-bare") || frontend.includes("native-uniwind") || frontend.includes("native-unistyles")) if (isBackendSelf) structure.push("│ ├── native/ # Mobile application (React Native, Expo)");
|
|
6212
6246
|
else structure.push("│ ├── native/ # Mobile application (React Native, Expo)");
|
|
6213
6247
|
if (addons.includes("starlight")) if (isBackendSelf) structure.push("│ ├── docs/ # Documentation site (Astro Starlight)");
|
|
6214
6248
|
else structure.push("│ ├── docs/ # Documentation site (Astro Starlight)");
|
|
@@ -6237,7 +6271,7 @@ function generateFeaturesList(database, auth, addons, orm, runtime, frontend, ba
|
|
|
6237
6271
|
const isBackendNone = backend === "none";
|
|
6238
6272
|
const hasTanstackRouter = frontend.includes("tanstack-router");
|
|
6239
6273
|
const hasReactRouter = frontend.includes("react-router");
|
|
6240
|
-
const hasNative = frontend.includes("native-
|
|
6274
|
+
const hasNative = frontend.includes("native-bare") || frontend.includes("native-uniwind") || frontend.includes("native-unistyles");
|
|
6241
6275
|
const hasNext = frontend.includes("next");
|
|
6242
6276
|
const hasTanstackStart = frontend.includes("tanstack-start");
|
|
6243
6277
|
const hasSvelte = frontend.includes("svelte");
|
|
@@ -6516,7 +6550,7 @@ async function displayPostInstallInstructions(config) {
|
|
|
6516
6550
|
const databaseInstructions = !isConvex && database !== "none" ? await getDatabaseInstructions(database, orm, runCmd, runtime, dbSetup, serverDeploy, backend) : "";
|
|
6517
6551
|
const tauriInstructions = addons?.includes("tauri") ? getTauriInstructions(runCmd) : "";
|
|
6518
6552
|
const lintingInstructions = hasHuskyOrBiome ? getLintingInstructions(runCmd) : "";
|
|
6519
|
-
const nativeInstructions = frontend?.includes("native-
|
|
6553
|
+
const nativeInstructions = frontend?.includes("native-bare") || frontend?.includes("native-uniwind") || frontend?.includes("native-unistyles") ? getNativeInstructions(isConvex, isBackendSelf, frontend || []) : "";
|
|
6520
6554
|
const pwaInstructions = addons?.includes("pwa") && frontend?.includes("react-router") ? getPwaInstructions() : "";
|
|
6521
6555
|
const starlightInstructions = addons?.includes("starlight") ? getStarlightInstructions(runCmd) : "";
|
|
6522
6556
|
const clerkInstructions = isConvex && config.auth === "clerk" ? getClerkInstructions() : "";
|
|
@@ -6532,13 +6566,12 @@ async function displayPostInstallInstructions(config) {
|
|
|
6532
6566
|
"svelte",
|
|
6533
6567
|
"solid"
|
|
6534
6568
|
].includes(f));
|
|
6535
|
-
const hasNative = frontend?.includes("native-
|
|
6569
|
+
const hasNative = frontend?.includes("native-bare") || frontend?.includes("native-uniwind") || frontend?.includes("native-unistyles");
|
|
6536
6570
|
const bunWebNativeWarning = packageManager === "bun" && hasNative && hasWeb ? getBunWebNativeWarning() : "";
|
|
6537
6571
|
const noOrmWarning = !isConvex && database !== "none" && orm === "none" ? getNoOrmWarning() : "";
|
|
6538
6572
|
const hasReactRouter = frontend?.includes("react-router");
|
|
6539
6573
|
const hasSvelte = frontend?.includes("svelte");
|
|
6540
6574
|
const webPort = hasReactRouter || hasSvelte ? "5173" : "3001";
|
|
6541
|
-
const tazeCommand = getPackageExecutionCommand(packageManager, "taze -r");
|
|
6542
6575
|
let output = `${pc.bold("Next steps")}\n${pc.cyan("1.")} ${cdCmd}\n`;
|
|
6543
6576
|
let stepCounter = 2;
|
|
6544
6577
|
if (!depsInstalled) output += `${pc.cyan(`${stepCounter++}.`)} ${packageManager} install\n`;
|
|
@@ -6578,8 +6611,7 @@ async function displayPostInstallInstructions(config) {
|
|
|
6578
6611
|
if (polarInstructions) output += `\n${polarInstructions.trim()}\n`;
|
|
6579
6612
|
if (noOrmWarning) output += `\n${noOrmWarning.trim()}\n`;
|
|
6580
6613
|
if (bunWebNativeWarning) output += `\n${bunWebNativeWarning.trim()}\n`;
|
|
6581
|
-
output += `\n${pc.bold("
|
|
6582
|
-
output += `${pc.bold("Like Better-T-Stack?")} Please consider giving us a star\n on GitHub:\n`;
|
|
6614
|
+
output += `\n${pc.bold("Like Better-T-Stack?")} Please consider giving us a star\n on GitHub:\n`;
|
|
6583
6615
|
output += pc.cyan("https://github.com/AmanVarshney01/create-better-t-stack");
|
|
6584
6616
|
consola$1.box(output);
|
|
6585
6617
|
}
|
|
@@ -6687,10 +6719,14 @@ async function setupWorkspaceDependencies(projectDir, options) {
|
|
|
6687
6719
|
const workspaceVersion = options.packageManager === "npm" ? "*" : "workspace:*";
|
|
6688
6720
|
const commonDeps = ["dotenv", "zod"];
|
|
6689
6721
|
const commonDevDeps = ["tsdown"];
|
|
6722
|
+
const configPackageDir = path.join(projectDir, "packages/config");
|
|
6723
|
+
const configDep = {};
|
|
6724
|
+
if (await fs.pathExists(configPackageDir)) configDep[`@${projectName}/config`] = workspaceVersion;
|
|
6690
6725
|
const dbPackageDir = path.join(projectDir, "packages/db");
|
|
6691
6726
|
if (await fs.pathExists(dbPackageDir)) await addPackageDependency({
|
|
6692
6727
|
dependencies: commonDeps,
|
|
6693
6728
|
devDependencies: commonDevDeps,
|
|
6729
|
+
customDevDependencies: configDep,
|
|
6694
6730
|
projectDir: dbPackageDir
|
|
6695
6731
|
});
|
|
6696
6732
|
const authPackageDir = path.join(projectDir, "packages/auth");
|
|
@@ -6701,6 +6737,7 @@ async function setupWorkspaceDependencies(projectDir, options) {
|
|
|
6701
6737
|
dependencies: commonDeps,
|
|
6702
6738
|
devDependencies: commonDevDeps,
|
|
6703
6739
|
customDependencies: authDeps,
|
|
6740
|
+
customDevDependencies: configDep,
|
|
6704
6741
|
projectDir: authPackageDir
|
|
6705
6742
|
});
|
|
6706
6743
|
}
|
|
@@ -6713,6 +6750,7 @@ async function setupWorkspaceDependencies(projectDir, options) {
|
|
|
6713
6750
|
dependencies: commonDeps,
|
|
6714
6751
|
devDependencies: commonDevDeps,
|
|
6715
6752
|
customDependencies: apiDeps,
|
|
6753
|
+
customDevDependencies: configDep,
|
|
6716
6754
|
projectDir: apiPackageDir
|
|
6717
6755
|
});
|
|
6718
6756
|
}
|
|
@@ -6726,6 +6764,7 @@ async function setupWorkspaceDependencies(projectDir, options) {
|
|
|
6726
6764
|
dependencies: commonDeps,
|
|
6727
6765
|
devDependencies: commonDevDeps,
|
|
6728
6766
|
customDependencies: serverDeps,
|
|
6767
|
+
customDevDependencies: configDep,
|
|
6729
6768
|
projectDir: serverPackageDir
|
|
6730
6769
|
});
|
|
6731
6770
|
}
|
|
@@ -6736,6 +6775,7 @@ async function setupWorkspaceDependencies(projectDir, options) {
|
|
|
6736
6775
|
if (options.auth !== "none" && await fs.pathExists(authPackageDir)) webDeps[`@${projectName}/auth`] = workspaceVersion;
|
|
6737
6776
|
if (Object.keys(webDeps).length > 0) await addPackageDependency({
|
|
6738
6777
|
customDependencies: webDeps,
|
|
6778
|
+
customDevDependencies: configDep,
|
|
6739
6779
|
projectDir: webPackageDir
|
|
6740
6780
|
});
|
|
6741
6781
|
}
|
|
@@ -6745,6 +6785,7 @@ async function setupWorkspaceDependencies(projectDir, options) {
|
|
|
6745
6785
|
if (options.api !== "none" && await fs.pathExists(apiPackageDir)) nativeDeps[`@${projectName}/api`] = workspaceVersion;
|
|
6746
6786
|
if (Object.keys(nativeDeps).length > 0) await addPackageDependency({
|
|
6747
6787
|
customDependencies: nativeDeps,
|
|
6788
|
+
customDevDependencies: configDep,
|
|
6748
6789
|
projectDir: nativePackageDir
|
|
6749
6790
|
});
|
|
6750
6791
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-better-t-stack",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"description": "A modern CLI tool for scaffolding end-to-end type-safe TypeScript projects with best practices and customizable configurations",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createClient, type GenericCtx } from "@convex-dev/better-auth";
|
|
2
|
-
{{#if (or (includes frontend "native-
|
|
2
|
+
{{#if (or (includes frontend "native-bare") (includes frontend "native-uniwind") (includes frontend "native-unistyles"))}}
|
|
3
3
|
import { convex } from "@convex-dev/better-auth/plugins";
|
|
4
4
|
import { expo } from "@better-auth/expo";
|
|
5
5
|
{{else}}
|
|
@@ -17,7 +17,7 @@ import { v } from "convex/values";
|
|
|
17
17
|
{{#if (or (includes frontend "tanstack-start") (includes frontend "next") (includes frontend "tanstack-router") (includes frontend "react-router") (includes frontend "nuxt") (includes frontend "svelte") (includes frontend "solid"))}}
|
|
18
18
|
const siteUrl = process.env.SITE_URL!;
|
|
19
19
|
{{/if}}
|
|
20
|
-
{{#if (or (includes frontend "native-
|
|
20
|
+
{{#if (or (includes frontend "native-bare") (includes frontend "native-uniwind") (includes frontend "native-unistyles"))}}
|
|
21
21
|
const nativeAppUrl = process.env.NATIVE_APP_URL || "mybettertapp://";
|
|
22
22
|
{{/if}}
|
|
23
23
|
|
|
@@ -31,10 +31,10 @@ function createAuth(
|
|
|
31
31
|
logger: {
|
|
32
32
|
disabled: optionsOnly,
|
|
33
33
|
},
|
|
34
|
-
{{#if (and (or (includes frontend "native-
|
|
34
|
+
{{#if (and (or (includes frontend "native-bare") (includes frontend "native-uniwind") (includes frontend "native-unistyles")) (or (includes frontend "tanstack-start") (includes frontend "next")))}}
|
|
35
35
|
baseURL: siteUrl,
|
|
36
36
|
trustedOrigins: [siteUrl, nativeAppUrl],
|
|
37
|
-
{{else if (or (includes frontend "native-
|
|
37
|
+
{{else if (or (includes frontend "native-bare") (includes frontend "native-uniwind") (includes frontend "native-unistyles"))}}
|
|
38
38
|
trustedOrigins: [nativeAppUrl],
|
|
39
39
|
{{else if (or (includes frontend "tanstack-start") (includes frontend "next"))}}
|
|
40
40
|
baseURL: siteUrl,
|
|
@@ -48,7 +48,7 @@ function createAuth(
|
|
|
48
48
|
requireEmailVerification: false,
|
|
49
49
|
},
|
|
50
50
|
plugins: [
|
|
51
|
-
{{#if (or (includes frontend "native-
|
|
51
|
+
{{#if (or (includes frontend "native-bare") (includes frontend "native-uniwind") (includes frontend "native-unistyles"))}}
|
|
52
52
|
expo(),
|
|
53
53
|
{{/if}}
|
|
54
54
|
{{#if (or (includes frontend "tanstack-router") (includes frontend "react-router") (includes frontend "nuxt") (includes frontend "svelte") (includes frontend "solid"))}}
|
|
@@ -3,7 +3,7 @@ import { authComponent, createAuth } from "./auth";
|
|
|
3
3
|
|
|
4
4
|
const http = httpRouter();
|
|
5
5
|
|
|
6
|
-
{{#if (or (includes frontend "tanstack-start") (includes frontend "next") (includes frontend "native-
|
|
6
|
+
{{#if (or (includes frontend "tanstack-start") (includes frontend "next") (includes frontend "native-bare") (includes frontend "native-uniwind") (includes frontend "native-unistyles"))}}
|
|
7
7
|
authComponent.registerRoutes(http, createAuth);
|
|
8
8
|
{{else}}
|
|
9
9
|
authComponent.registerRoutes(http, createAuth, { cors: true });
|