From a037c4d5759525d987425b01c449e35ea5a32461 Mon Sep 17 00:00:00 2001 From: Abdullahi Mohamed <126521894+WaryaWayne@users.noreply.github.com> Date: Tue, 14 Apr 2026 18:37:44 -0400 Subject: [PATCH 1/2] fix(create): exclude demo files in lib, hooks, data, and components when demo is disabled Previously only demo route files were filtered out when the user chose no demo files. Demo files in components/, lib/, hooks/, and data/ directories would still be created. Rename isDemoRoutePath to isDemoFilePath to reflect the broader scope and extend pattern matching to cover all non-route demo file paths. --- packages/create/src/create-app.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/create/src/create-app.ts b/packages/create/src/create-app.ts index eaa93e0f..f4f77a7a 100644 --- a/packages/create/src/create-app.ts +++ b/packages/create/src/create-app.ts @@ -17,14 +17,22 @@ import { runSpecialSteps } from './special-steps/index.js' import type { Environment, FileBundleHandler, Options } from './types.js' -function isDemoRoutePath(path?: string) { +function isDemoFilePath(path?: string) { if (!path) return false const normalized = path.replace(/\\/g, '/') return ( normalized.includes('/routes/demo/') || normalized.includes('/routes/demo.') || normalized.includes('/routes/example/') || - normalized.includes('/routes/example.') + normalized.includes('/routes/example.') || + normalized.includes('/lib/demo-') || + normalized.includes('/lib/demo.') || + normalized.includes('/hooks/demo-') || + normalized.includes('/hooks/demo.') || + normalized.includes('/data/demo.') || + normalized.includes('/data/demo-') || + normalized.includes('/components/demo-') || + normalized.includes('/components/demo.') ) } @@ -38,7 +46,7 @@ function stripExamplesFromOptions(options: Options): Options { .map((addOn) => { const filteredRoutes = (addOn.routes || []).filter( (route) => - !isDemoRoutePath(route.path) && + !isDemoFilePath(route.path) && !(route.url && route.url.startsWith('/demo')), ) @@ -47,11 +55,11 @@ function stripExamplesFromOptions(options: Options): Options { routes: filteredRoutes, getFiles: async () => { const files = await addOn.getFiles() - return files.filter((file) => !isDemoRoutePath(file)) + return files.filter((file) => !isDemoFilePath(file)) }, getDeletedFiles: async () => { const deletedFiles = await addOn.getDeletedFiles() - return deletedFiles.filter((file) => !isDemoRoutePath(file)) + return deletedFiles.filter((file) => !isDemoFilePath(file)) }, } }) From 72f787e5e6436e3c3225b97e27687f7663558fe1 Mon Sep 17 00:00:00 2001 From: Abdullahi Mohamed <126521894+WaryaWayne@users.noreply.github.com> Date: Wed, 15 Apr 2026 10:10:19 -0400 Subject: [PATCH 2/2] fix(create): exclude better-auth demo integration files when demo is disabled The better-auth header-user components reference the /demo/better-auth route, which doesn't exist when users opt out of demo files. Convert these to EJS templates with conditional rendering so they return null instead of linking to a non-existent route. Also extend isDemoFilePath filtering to cover add-on integration files (previously only routes, lib, hooks, data, and components were filtered in a037c4d5). --- packages/create/src/create-app.ts | 7 ++++++- .../better-auth/{header-user.tsx => header-user.tsx.ejs} | 6 ++++++ .../better-auth/{header-user.tsx => header-user.tsx.ejs} | 4 ++++ 3 files changed, 16 insertions(+), 1 deletion(-) rename packages/create/src/frameworks/react/add-ons/better-auth/assets/src/integrations/better-auth/{header-user.tsx => header-user.tsx.ejs} (89%) rename packages/create/src/frameworks/solid/add-ons/better-auth/assets/src/integrations/better-auth/{header-user.tsx => header-user.tsx.ejs} (92%) diff --git a/packages/create/src/create-app.ts b/packages/create/src/create-app.ts index f4f77a7a..8d978c9e 100644 --- a/packages/create/src/create-app.ts +++ b/packages/create/src/create-app.ts @@ -29,8 +29,8 @@ function isDemoFilePath(path?: string) { normalized.includes('/lib/demo.') || normalized.includes('/hooks/demo-') || normalized.includes('/hooks/demo.') || - normalized.includes('/data/demo.') || normalized.includes('/data/demo-') || + normalized.includes('/data/demo.') || normalized.includes('/components/demo-') || normalized.includes('/components/demo.') ) @@ -49,10 +49,15 @@ function stripExamplesFromOptions(options: Options): Options { !isDemoFilePath(route.path) && !(route.url && route.url.startsWith('/demo')), ) + + const filteredIntegrations = (addOn.integrations || []).filter( + (integration) => !isDemoFilePath(integration.path) + ) return { ...addOn, routes: filteredRoutes, + integrations: filteredIntegrations, getFiles: async () => { const files = await addOn.getFiles() return files.filter((file) => !isDemoFilePath(file)) diff --git a/packages/create/src/frameworks/react/add-ons/better-auth/assets/src/integrations/better-auth/header-user.tsx b/packages/create/src/frameworks/react/add-ons/better-auth/assets/src/integrations/better-auth/header-user.tsx.ejs similarity index 89% rename from packages/create/src/frameworks/react/add-ons/better-auth/assets/src/integrations/better-auth/header-user.tsx rename to packages/create/src/frameworks/react/add-ons/better-auth/assets/src/integrations/better-auth/header-user.tsx.ejs index 6f07c17b..2fd3dca1 100644 --- a/packages/create/src/frameworks/react/add-ons/better-auth/assets/src/integrations/better-auth/header-user.tsx +++ b/packages/create/src/frameworks/react/add-ons/better-auth/assets/src/integrations/better-auth/header-user.tsx.ejs @@ -1,5 +1,7 @@ import { authClient } from "#/lib/auth-client"; +<%_ if (routes.some(r => r.url === '/demo/better-auth')) { _%> import { Link } from "@tanstack/react-router"; +<%_ } _%> export default function BetterAuthHeader() { const { data: session, isPending } = authClient.useSession(); @@ -34,6 +36,7 @@ export default function BetterAuthHeader() { ); } +<%_ if (routes.some(r => r.url === '/demo/better-auth')) { _%> return ( ); +<%_ } else { _%> + return null; +<%_ } _%> } diff --git a/packages/create/src/frameworks/solid/add-ons/better-auth/assets/src/integrations/better-auth/header-user.tsx b/packages/create/src/frameworks/solid/add-ons/better-auth/assets/src/integrations/better-auth/header-user.tsx.ejs similarity index 92% rename from packages/create/src/frameworks/solid/add-ons/better-auth/assets/src/integrations/better-auth/header-user.tsx rename to packages/create/src/frameworks/solid/add-ons/better-auth/assets/src/integrations/better-auth/header-user.tsx.ejs index a9aee45a..c560fcc6 100644 --- a/packages/create/src/frameworks/solid/add-ons/better-auth/assets/src/integrations/better-auth/header-user.tsx +++ b/packages/create/src/frameworks/solid/add-ons/better-auth/assets/src/integrations/better-auth/header-user.tsx.ejs @@ -1,5 +1,7 @@ import { Show } from "solid-js"; +<%_ if (routes.some(r => r.url === '/demo/better-auth')) { _%> import { Link } from "@tanstack/solid-router"; +<%_ } _%> import { authClient } from "../../lib/auth-client"; export default function BetterAuthHeader() { @@ -14,6 +16,7 @@ export default function BetterAuthHeader() { > r.url === '/demo/better-auth')) { _%> fallback={ } +<%_ } _%> > {(user) => (