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) => (