From da8538039f212f28bf7af83b926f6732f498dc67 Mon Sep 17 00:00:00 2001 From: gs0428 Date: Thu, 25 Jun 2026 22:18:43 +0900 Subject: [PATCH 1/3] fix: use shared router factory in router-only entrypoints --- .../react/project/base/src/main.tsx.ejs | 16 +++------------- .../solid/project/base/src/main.tsx.ejs | 17 +++-------------- 2 files changed, 6 insertions(+), 27 deletions(-) diff --git a/packages/create/src/frameworks/react/project/base/src/main.tsx.ejs b/packages/create/src/frameworks/react/project/base/src/main.tsx.ejs index 8fe6efb0..ee27e041 100644 --- a/packages/create/src/frameworks/react/project/base/src/main.tsx.ejs +++ b/packages/create/src/frameworks/react/project/base/src/main.tsx.ejs @@ -1,19 +1,9 @@ <% if (!routerOnly) { ignoreFile() } %> import ReactDOM from 'react-dom/client' -import { RouterProvider, createRouter } from '@tanstack/react-router' -import { routeTree } from './routeTree.gen' +import { RouterProvider } from '@tanstack/react-router' +import { getRouter } from './router' -const router = createRouter({ - routeTree, - defaultPreload: 'intent', - scrollRestoration: true, -}) - -declare module '@tanstack/react-router' { - interface Register { - router: typeof router - } -} +const router = getRouter() const rootElement = document.getElementById('app')! diff --git a/packages/create/src/frameworks/solid/project/base/src/main.tsx.ejs b/packages/create/src/frameworks/solid/project/base/src/main.tsx.ejs index 15612bbf..16353ea5 100644 --- a/packages/create/src/frameworks/solid/project/base/src/main.tsx.ejs +++ b/packages/create/src/frameworks/solid/project/base/src/main.tsx.ejs @@ -1,20 +1,9 @@ <% if (!routerOnly) { ignoreFile() } %> import { render } from 'solid-js/web' -import { RouterProvider, createRouter } from '@tanstack/solid-router' -import { routeTree } from './routeTree.gen' +import { RouterProvider } from '@tanstack/solid-router' +import { getRouter } from './router' -const router = createRouter({ - routeTree, - defaultPreload: 'intent', - defaultPreloadStaleTime: 0, - scrollRestoration: true, -}) - -declare module '@tanstack/solid-router' { - interface Register { - router: typeof router - } -} +const router = getRouter() const rootElement = document.getElementById('app')! From 58370320bc6747fd91f5c25b09dd79e5166545e8 Mon Sep 17 00:00:00 2001 From: gs0428 Date: Thu, 25 Jun 2026 22:20:33 +0900 Subject: [PATCH 2/3] test: cover router-only shared router templates --- .../create/tests/framework-template.test.ts | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/packages/create/tests/framework-template.test.ts b/packages/create/tests/framework-template.test.ts index 3f79f1e7..8a741e89 100644 --- a/packages/create/tests/framework-template.test.ts +++ b/packages/create/tests/framework-template.test.ts @@ -1,7 +1,45 @@ import { describe, expect, it } from 'vitest' +import { createMemoryEnvironment } from '../src/environment.js' import { createFrameworkDefinition as createReactFrameworkDefinition } from '../src/frameworks/react/index.js' import { createFrameworkDefinition as createSolidFrameworkDefinition } from '../src/frameworks/solid/index.js' +import { createTemplateFile } from '../src/template-file.js' + +import type { FrameworkDefinition, Options } from '../src/types.js' + +const routerOnlyTemplateOptions = { + projectName: 'test', + targetDir: '/test', + framework: { + id: 'test', + name: 'Test', + }, + chosenAddOns: [], + addOnOptions: {}, + packageManager: 'pnpm', + typescript: true, + tailwind: true, + mode: 'file-router', + routerOnly: true, +} as unknown as Options + +async function renderRouterOnlyEntries(framework: FrameworkDefinition) { + const { environment, output } = createMemoryEnvironment() + const templateFile = createTemplateFile( + environment, + routerOnlyTemplateOptions, + ) + + environment.startRun() + await templateFile('src/main.tsx.ejs', framework.base['src/main.tsx.ejs']) + await templateFile('src/router.tsx.ejs', framework.base['src/router.tsx.ejs']) + environment.finishRun() + + return { + main: output.files['/test/src/main.tsx'], + router: output.files['/test/src/router.tsx'], + } +} describe('framework templates', () => { it.each([ @@ -31,4 +69,33 @@ describe('framework templates', () => { framework.optionalPackages['file-router'].devDependencies, ).toHaveProperty('@tanstack/router-cli') }) + + it.each([ + [ + 'React', + createReactFrameworkDefinition, + '@tanstack/react-router', + "import { getRouter } from './router'", + ], + [ + 'Solid', + createSolidFrameworkDefinition, + '@tanstack/solid-router', + "import { getRouter } from './router'", + ], + ])( + '%s router-only main uses the shared router factory', + async (_, createDefinition, routerPackage, getRouterImport) => { + const { main, router } = await renderRouterOnlyEntries(createDefinition()) + + expect(main).toContain(getRouterImport) + expect(main).toContain('const router = getRouter()') + expect(main).toContain(``) + expect(main).not.toContain('createRouter') + expect(main).not.toContain(`declare module '${routerPackage}'`) + expect(router).toContain('export function getRouter()') + expect(router).toContain(`declare module '${routerPackage}'`) + expect(router).toContain('router: ReturnType') + }, + ) }) From a858053ea3d819cfe865db5f57a89468230e6536 Mon Sep 17 00:00:00 2001 From: gs0428 Date: Thu, 25 Jun 2026 22:40:19 +0900 Subject: [PATCH 3/3] test: assert router provider import in router-only templates --- packages/create/tests/framework-template.test.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/create/tests/framework-template.test.ts b/packages/create/tests/framework-template.test.ts index 8a741e89..7be4415f 100644 --- a/packages/create/tests/framework-template.test.ts +++ b/packages/create/tests/framework-template.test.ts @@ -89,6 +89,9 @@ describe('framework templates', () => { const { main, router } = await renderRouterOnlyEntries(createDefinition()) expect(main).toContain(getRouterImport) + expect(main).toContain( + `import { RouterProvider } from '${routerPackage}'`, + ) expect(main).toContain('const router = getRouter()') expect(main).toContain(``) expect(main).not.toContain('createRouter')