From f5598c9e6f9e9a6c4e08f065a75026c329651934 Mon Sep 17 00:00:00 2001 From: Aman Varshney Date: Sun, 11 May 2025 08:48:23 +0530 Subject: [PATCH] add tauri option for nextjs --- .changeset/chubby-coins-greet.md | 5 ++ apps/cli/src/helpers/addons-setup.ts | 4 +- apps/cli/src/helpers/tauri-setup.ts | 9 ++- apps/cli/src/index.ts | 5 +- apps/cli/src/prompts/addons.ts | 3 +- .../app/(home)/_components/StackArchitech.tsx | 15 +++-- bun.lock | 64 +++++++++---------- 7 files changed, 63 insertions(+), 42 deletions(-) create mode 100644 .changeset/chubby-coins-greet.md diff --git a/.changeset/chubby-coins-greet.md b/.changeset/chubby-coins-greet.md new file mode 100644 index 0000000..e7c512a --- /dev/null +++ b/.changeset/chubby-coins-greet.md @@ -0,0 +1,5 @@ +--- +"create-better-t-stack": patch +--- + +add tauri option for nextjs diff --git a/apps/cli/src/helpers/addons-setup.ts b/apps/cli/src/helpers/addons-setup.ts index 4205003..c57d417 100644 --- a/apps/cli/src/helpers/addons-setup.ts +++ b/apps/cli/src/helpers/addons-setup.ts @@ -14,6 +14,7 @@ export async function setupAddons(config: ProjectConfig) { const hasNuxtFrontend = frontend.includes("nuxt"); const hasSvelteFrontend = frontend.includes("svelte"); const hasSolidFrontend = frontend.includes("solid"); + const hasNextFrontend = frontend.includes("next"); if (addons.includes("turborepo")) { await addPackageDependency({ @@ -30,7 +31,8 @@ export async function setupAddons(config: ProjectConfig) { (hasReactWebFrontend || hasNuxtFrontend || hasSvelteFrontend || - hasSolidFrontend) + hasSolidFrontend || + hasNextFrontend) ) { await setupTauri(config); } diff --git a/apps/cli/src/helpers/tauri-setup.ts b/apps/cli/src/helpers/tauri-setup.ts index edcb3ba..2a291cb 100644 --- a/apps/cli/src/helpers/tauri-setup.ts +++ b/apps/cli/src/helpers/tauri-setup.ts @@ -45,17 +45,22 @@ export async function setupTauri(config: ProjectConfig): Promise { const hasNuxt = frontend.includes("nuxt"); const hasSvelte = frontend.includes("svelte"); const hasSolid = frontend.includes("solid"); + const hasNext = frontend.includes("next"); const devUrl = hasReactRouter || hasSvelte ? "http://localhost:5173" - : "http://localhost:3001"; + : hasNext + ? "http://localhost:3001" + : "http://localhost:3001"; const frontendDist = hasNuxt ? "../.output/public" : hasSvelte ? "../build" - : "../dist"; + : hasNext + ? "../.next" + : "../dist"; const tauriArgs = [ "init", diff --git a/apps/cli/src/index.ts b/apps/cli/src/index.ts index 562af77..add84fb 100644 --- a/apps/cli/src/index.ts +++ b/apps/cli/src/index.ts @@ -795,7 +795,8 @@ function processAndValidateFlags( f === "react-router" || f === "nuxt" || f === "svelte" || - f === "solid"; + f === "solid" || + f === "next"; if ( config.addons?.includes("pwa") && @@ -820,7 +821,7 @@ function processAndValidateFlags( } if (config.addons.includes("tauri")) { incompatibleReason = - "Tauri requires tanstack-router, react-router, nuxt, svelte, or solid."; + "Tauri requires tanstack-router, react-router, nuxt, svelte, solid, or next."; } consola.fatal( `Incompatible addon/frontend combination: ${incompatibleReason}`, diff --git a/apps/cli/src/prompts/addons.ts b/apps/cli/src/prompts/addons.ts index a951faf..0c56608 100644 --- a/apps/cli/src/prompts/addons.ts +++ b/apps/cli/src/prompts/addons.ts @@ -25,7 +25,8 @@ export async function getAddonsChoice( frontends?.includes("tanstack-router") || frontends?.includes("nuxt") || frontends?.includes("svelte") || - frontends?.includes("solid"); + frontends?.includes("solid") || + frontends?.includes("next"); const allPossibleOptions: AddonOption[] = [ { diff --git a/apps/web/src/app/(home)/_components/StackArchitech.tsx b/apps/web/src/app/(home)/_components/StackArchitech.tsx index c1cd1fb..b3243b3 100644 --- a/apps/web/src/app/(home)/_components/StackArchitech.tsx +++ b/apps/web/src/app/(home)/_components/StackArchitech.tsx @@ -105,7 +105,14 @@ const hasPWACompatibleFrontend = (frontend: string[]) => const hasTauriCompatibleFrontend = (frontend: string[]) => frontend.some((f) => - ["tanstack-router", "react-router", "nuxt", "svelte", "solid"].includes(f), + [ + "tanstack-router", + "react-router", + "nuxt", + "svelte", + "solid", + "next", + ].includes(f), ); const getBadgeColors = (category: string): string => { @@ -545,10 +552,10 @@ const analyzeStackCompatibility = (stack: StackState): CompatibilityResult => { if (!isTauriCompat && nextStack.addons.includes("tauri")) { incompatibleAddons.push("tauri"); notes.frontend.notes.push( - "Tauri addon requires TanStack/React Router, Nuxt, Svelte or Solid. Addon will be removed.", + "Tauri addon requires TanStack/React Router, Nuxt, Svelte, Solid, or Next.js. Addon will be removed.", ); notes.addons.notes.push( - "Tauri requires TanStack/React Router/Nuxt/Svelte/Solid. It will be removed.", + "Tauri requires TanStack/React Router/Nuxt/Svelte/Solid/Next.js. It will be removed.", ); notes.frontend.hasIssue = true; notes.addons.hasIssue = true; @@ -1213,7 +1220,7 @@ const StackArchitect = () => { addRule( category, techId, - "Disabled: Tauri addon requires a compatible frontend (e.g., TanStack Router, Nuxt, Svelte, Solid).", + "Disabled: Tauri addon requires a compatible frontend (e.g., TanStack Router, Nuxt, Svelte, Solid, Next.js).", ); } } diff --git a/bun.lock b/bun.lock index 89ff594..058ef80 100644 --- a/bun.lock +++ b/bun.lock @@ -14,7 +14,7 @@ }, "apps/cli": { "name": "create-better-t-stack", - "version": "2.9.3", + "version": "2.9.5", "bin": { "create-better-t-stack": "dist/index.js", }, @@ -42,39 +42,39 @@ "name": "web", "version": "0.0.0", "dependencies": { - "@radix-ui/react-dialog": "latest", - "@radix-ui/react-scroll-area": "latest", - "@radix-ui/react-switch": "latest", - "@radix-ui/react-tooltip": "latest", - "babel-plugin-react-compiler": "latest", - "class-variance-authority": "latest", - "clsx": "latest", - "fumadocs-core": "latest", - "fumadocs-mdx": "latest", - "fumadocs-ui": "latest", - "lucide-react": "latest", - "motion": "latest", - "next": "latest", - "next-themes": "latest", - "nuqs": "latest", - "react": "latest", - "react-dom": "latest", - "react-tweet": "latest", - "sonner": "latest", - "tailwind-merge": "latest", + "@radix-ui/react-dialog": "^1.1.13", + "@radix-ui/react-scroll-area": "^1.2.8", + "@radix-ui/react-switch": "^1.2.4", + "@radix-ui/react-tooltip": "^1.2.6", + "babel-plugin-react-compiler": "^19.1.0-rc.1", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "fumadocs-core": "15.3.0", + "fumadocs-mdx": "11.6.3", + "fumadocs-ui": "15.3.0", + "lucide-react": "^0.509.0", + "motion": "^12.10.5", + "next": "15.3.2", + "next-themes": "^0.4.6", + "nuqs": "^2.4.3", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-tweet": "^3.2.2", + "sonner": "^2.0.3", + "tailwind-merge": "^3.2.0", }, "devDependencies": { - "@tailwindcss/postcss": "latest", - "@types/mdx": "latest", - "@types/node": "latest", - "@types/react": "latest", - "@types/react-dom": "latest", - "eslint": "latest", - "eslint-config-next": "latest", - "postcss": "latest", - "tailwindcss": "latest", - "tw-animate-css": "latest", - "typescript": "latest", + "@tailwindcss/postcss": "^4.1.6", + "@types/mdx": "^2.0.13", + "@types/node": "22.15.17", + "@types/react": "^19.1.3", + "@types/react-dom": "^19.1.3", + "eslint": "^9.26.0", + "eslint-config-next": "15.3.2", + "postcss": "^8.5.3", + "tailwindcss": "^4.1.6", + "tw-animate-css": "^1.2.9", + "typescript": "^5.8.3", }, }, },