Skip to content

Commit 66e3ef9

Browse files
serhalppiehmrstork
authored
fix: support post-nitro TanStack Start versions (#6669)
Co-authored-by: Michal Piechowiak <[email protected]> Co-authored-by: Mateusz Bocian <[email protected]>
1 parent aef9f7d commit 66e3ef9

File tree

2 files changed

+125
-8
lines changed

2 files changed

+125
-8
lines changed

packages/build-info/src/frameworks/tanstack-start.test.ts

Lines changed: 118 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ beforeEach((ctx) => {
88
ctx.fs = new NodeFS()
99
})
1010

11-
test('detects a TanStack Start React site (v1.121.0+)', async ({ fs }) => {
11+
test('detects a TanStack Start React site (v1.132.0+)', async ({ fs }) => {
1212
const cwd = mockFileSystem({
1313
'package.json': JSON.stringify({
1414
scripts: {
@@ -19,9 +19,46 @@ test('detects a TanStack Start React site (v1.121.0+)', async ({ fs }) => {
1919
test: 'vitest run',
2020
},
2121
dependencies: {
22-
'@tanstack/react-router': '^1.121.2',
23-
'@tanstack/react-router-devtools': '^1.121.2',
24-
'@tanstack/start': '^1.121.2',
22+
'@tanstack/react-router': '^1.132.0',
23+
'@tanstack/react-router-devtools': '^1.132.0',
24+
'@tanstack/react-start': '^1.132.0',
25+
react: '^19.0.0',
26+
'react-dom': '^19.0.0',
27+
},
28+
devDependencies: {
29+
'@vitejs/plugin-react': '^4.3.4',
30+
vite: '^7.0.0',
31+
},
32+
}),
33+
})
34+
const detected = await new Project(fs, cwd).detectFrameworks()
35+
36+
const detectedFrameworks = (detected ?? []).map((framework) => framework.id)
37+
expect(detectedFrameworks).not.toContain('vinxi')
38+
expect(detectedFrameworks).not.toContain('vite')
39+
expect(detectedFrameworks).not.toContain('tanstack-router')
40+
41+
expect(detected?.[0]?.id).toBe('tanstack-start')
42+
expect(detected?.[0]?.build?.command).toBe('vite build')
43+
expect(detected?.[0]?.build?.directory).toBe('dist/client')
44+
expect(detected?.[0]?.dev?.command).toBe('vite dev')
45+
expect(detected?.[0]?.dev?.port).toBe(3000)
46+
})
47+
48+
test('sets build dir to `dist` for a pre-v1.132.0 TanStack Start React site', async ({ fs }) => {
49+
const cwd = mockFileSystem({
50+
'package.json': JSON.stringify({
51+
scripts: {
52+
dev: 'vite --port 3000',
53+
start: 'vite --port 3000',
54+
build: 'vite build',
55+
serve: 'vite preview',
56+
test: 'vitest run',
57+
},
58+
dependencies: {
59+
'@tanstack/react-router': '^1.131.0',
60+
'@tanstack/react-router-devtools': '^1.131.0',
61+
'@tanstack/react-start': '^1.131.0',
2562
react: '^19.0.0',
2663
'react-dom': '^19.0.0',
2764
},
@@ -45,7 +82,7 @@ test('detects a TanStack Start React site (v1.121.0+)', async ({ fs }) => {
4582
expect(detected?.[0]?.dev?.port).toBe(3000)
4683
})
4784

48-
test('detects a pre-v1.121.0 TanStack Start React site', async ({ fs }) => {
85+
test('sets `vinxi` build/dev commands for a pre-v1.121.0 TanStack Start React site', async ({ fs }) => {
4986
const cwd = mockFileSystem({
5087
'package.json': JSON.stringify({
5188
scripts: {
@@ -79,7 +116,81 @@ test('detects a pre-v1.121.0 TanStack Start React site', async ({ fs }) => {
79116
expect(detected?.[0]?.dev?.port).toBe(3000)
80117
})
81118

82-
test('detects a TanStack Start Solid site', async ({ fs }) => {
119+
test('detects a TanStack Start Solid site (v1.132.0+)', async ({ fs }) => {
120+
const cwd = mockFileSystem({
121+
'package.json': JSON.stringify({
122+
scripts: {
123+
dev: 'vite --port 3000',
124+
start: 'vite --port 3000',
125+
build: 'vite build',
126+
serve: 'vite preview',
127+
test: 'vitest run',
128+
},
129+
dependencies: {
130+
'@tanstack/solid-router': '^1.132.0',
131+
'@tanstack/solid-router-devtools': '^1.132.0',
132+
'@tanstack/solid-start': '^1.132.0',
133+
'solid-js': '^1.9.5',
134+
},
135+
devDependencies: {
136+
'@vitejs/plugin-solid': '^4.3.4',
137+
vite: '^7.0.0',
138+
},
139+
}),
140+
})
141+
const detected = await new Project(fs, cwd).detectFrameworks()
142+
143+
const detectedFrameworks = (detected ?? []).map((framework) => framework.id)
144+
expect(detectedFrameworks).not.toContain('vinxi')
145+
expect(detectedFrameworks).not.toContain('vite')
146+
expect(detectedFrameworks).not.toContain('tanstack-router')
147+
expect(detectedFrameworks).not.toContain('solid-js')
148+
149+
expect(detected?.[0]?.id).toBe('tanstack-start')
150+
expect(detected?.[0]?.build?.command).toBe('vite build')
151+
expect(detected?.[0]?.build?.directory).toBe('dist/client')
152+
expect(detected?.[0]?.dev?.command).toBe('vite dev')
153+
expect(detected?.[0]?.dev?.port).toBe(3000)
154+
})
155+
156+
test('sets build dir to `dist` for a pre-v1.132.0 TanStack Start Solid site', async ({ fs }) => {
157+
const cwd = mockFileSystem({
158+
'package.json': JSON.stringify({
159+
scripts: {
160+
dev: 'vite --port 3000',
161+
start: 'vite --port 3000',
162+
build: 'vite build',
163+
serve: 'vite preview',
164+
test: 'vitest run',
165+
},
166+
dependencies: {
167+
'@tanstack/solid-router': '^1.131.0',
168+
'@tanstack/solid-router-devtools': '^1.131.0',
169+
'@tanstack/solid-start': '^1.131.0',
170+
'solid-js': '^1.9.5',
171+
},
172+
devDependencies: {
173+
'@vitejs/plugin-solid': '^4.3.4',
174+
vite: '^6.1.0',
175+
},
176+
}),
177+
})
178+
const detected = await new Project(fs, cwd).detectFrameworks()
179+
180+
const detectedFrameworks = (detected ?? []).map((framework) => framework.id)
181+
expect(detectedFrameworks).not.toContain('vinxi')
182+
expect(detectedFrameworks).not.toContain('vite')
183+
expect(detectedFrameworks).not.toContain('tanstack-router')
184+
expect(detectedFrameworks).not.toContain('solid-js')
185+
186+
expect(detected?.[0]?.id).toBe('tanstack-start')
187+
expect(detected?.[0]?.build?.command).toBe('vite build')
188+
expect(detected?.[0]?.build?.directory).toBe('dist')
189+
expect(detected?.[0]?.dev?.command).toBe('vite dev')
190+
expect(detected?.[0]?.dev?.port).toBe(3000)
191+
})
192+
193+
test('sets `vinxi` build/dev commands for a pre-v1.121.0 TanStack Start Solid site', async ({ fs }) => {
83194
const cwd = mockFileSystem({
84195
'package.json': JSON.stringify({
85196
scripts: {
@@ -113,7 +224,7 @@ test('detects a TanStack Start Solid site', async ({ fs }) => {
113224
expect(detected?.[0]?.dev?.port).toBe(3000)
114225
})
115226

116-
test('detects a pre-v1.111.10 TanStack Start site', async ({ fs }) => {
227+
test('detects a pre-v1.111.10 (pre-package-rename) TanStack Start site', async ({ fs }) => {
117228
const cwd = mockFileSystem({
118229
'package.json': JSON.stringify({
119230
scripts: {

packages/build-info/src/frameworks/tanstack-start.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export class TanStackStart extends BaseFramework implements Framework {
2121

2222
build = {
2323
command: 'vite build',
24-
directory: 'dist',
24+
directory: 'dist/client',
2525
}
2626

2727
logo = {
@@ -39,6 +39,12 @@ export class TanStackStart extends BaseFramework implements Framework {
3939
this.dev.command = 'vinxi dev'
4040
this.build.command = 'vinxi build'
4141
}
42+
43+
// TanStack Start changed build directory from 'dist' to 'dist/client' in v1.132.0
44+
if (this.version && lt(this.version, '1.132.0')) {
45+
this.build.directory = 'dist'
46+
}
47+
4248
return this as DetectedFramework
4349
}
4450
}

0 commit comments

Comments
 (0)