Skip to content

Commit 0dcc20e

Browse files
feat(start-plugin-core): vite preview support (#5910)
* feat: add vite preview support * test: vite preview with react and solid --------- Co-authored-by: Birk Skyum <[email protected]>
1 parent eda2254 commit 0dcc20e

File tree

11 files changed

+95
-9
lines changed

11 files changed

+95
-9
lines changed

e2e/react-start/basic/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,16 @@
99
"build": "vite build && tsc --noEmit",
1010
"build:spa": "MODE=spa vite build && tsc --noEmit",
1111
"build:prerender": "MODE=prerender vite build && tsc --noEmit",
12+
"preview": "vite preview",
1213
"start": "pnpx srvx --prod -s ../client dist/server/server.js",
1314
"start:spa": "node server.js",
1415
"test:e2e:startDummyServer": "node -e 'import(\"./tests/setup/global.setup.ts\").then(m => m.default())' &",
1516
"test:e2e:stopDummyServer": "node -e 'import(\"./tests/setup/global.teardown.ts\").then(m => m.default())'",
1617
"test:e2e:spaMode": "rm -rf port*.txt; MODE=spa playwright test --project=chromium",
1718
"test:e2e:ssrMode": "rm -rf port*.txt; playwright test --project=chromium",
1819
"test:e2e:prerender": "rm -rf port*.txt; MODE=prerender playwright test --project=chromium",
19-
"test:e2e": "pnpm run test:e2e:spaMode && pnpm run test:e2e:ssrMode && pnpm run test:e2e:prerender"
20+
"test:e2e:preview": "rm -rf port*.txt; MODE=preview playwright test --project=chromium",
21+
"test:e2e": "pnpm run test:e2e:spaMode && pnpm run test:e2e:ssrMode && pnpm run test:e2e:prerender && pnpm run test:e2e:preview"
2022
},
2123
"dependencies": {
2224
"@tanstack/react-router": "workspace:^",

e2e/react-start/basic/playwright.config.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ import {
55
} from '@tanstack/router-e2e-utils'
66
import { isSpaMode } from './tests/utils/isSpaMode'
77
import { isPrerender } from './tests/utils/isPrerender'
8+
import { isPreview } from './tests/utils/isPreview'
89
import packageJson from './package.json' with { type: 'json' }
910

1011
const PORT = await getTestServerPort(
11-
`${packageJson.name}${isSpaMode ? '_spa' : ''}`,
12+
`${packageJson.name}${isSpaMode ? '_spa' : ''}${isPreview ? '_preview' : ''}`,
1213
)
1314
const START_PORT = await getTestServerPort(
1415
`${packageJson.name}${isSpaMode ? '_spa_start' : ''}`,
@@ -18,14 +19,17 @@ const baseURL = `http://localhost:${PORT}`
1819
const spaModeCommand = `pnpm build:spa && pnpm start:spa`
1920
const ssrModeCommand = `pnpm build && pnpm start`
2021
const prerenderModeCommand = `pnpm run test:e2e:startDummyServer && pnpm build:prerender && pnpm run test:e2e:stopDummyServer && pnpm start`
22+
const previewModeCommand = `pnpm build && pnpm preview --port ${PORT}`
2123

2224
const getCommand = () => {
2325
if (isSpaMode) return spaModeCommand
2426
if (isPrerender) return prerenderModeCommand
27+
if (isPreview) return previewModeCommand
2528
return ssrModeCommand
2629
}
2730
console.log('running in spa mode: ', isSpaMode.toString())
2831
console.log('running in prerender mode: ', isPrerender.toString())
32+
console.log('running in preview mode: ', isPreview.toString())
2933
/**
3034
* See https://playwright.dev/docs/test-configuration.
3135
*/

e2e/react-start/basic/tests/redirect.spec.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ import {
77
test,
88
} from '@tanstack/router-e2e-utils'
99
import { isSpaMode } from '../tests/utils/isSpaMode'
10+
import { isPreview } from '../tests/utils/isPreview'
1011
import packageJson from '../package.json' with { type: 'json' }
1112

1213
// somehow playwright does not correctly import default exports
1314
const combinate = (combinateImport as any).default as typeof combinateImport
1415

1516
const PORT = await getTestServerPort(
16-
`${packageJson.name}${isSpaMode ? '_spa' : ''}`,
17+
`${packageJson.name}${isSpaMode ? '_spa' : ''}${isPreview ? '_preview' : ''}`,
1718
)
1819

1920
const EXTERNAL_HOST_PORT = await getDummyServerPort(packageJson.name)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const isPreview: boolean = process.env.MODE === 'preview'

e2e/solid-start/basic/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,16 @@
99
"build": "vite build && tsc --noEmit",
1010
"build:spa": "MODE=spa vite build && tsc --noEmit",
1111
"build:prerender": "MODE=prerender vite build && tsc --noEmit",
12+
"preview": "vite preview",
1213
"start": "pnpx srvx --prod -s ../client dist/server/server.js",
1314
"start:spa": "node server.js",
1415
"test:e2e:startDummyServer": "node -e 'import(\"./tests/setup/global.setup.ts\").then(m => m.default())' &",
1516
"test:e2e:stopDummyServer": "node -e 'import(\"./tests/setup/global.teardown.ts\").then(m => m.default())'",
1617
"test:e2e:spaMode": "rm -rf port*.txt; MODE=spa playwright test --project=chromium",
1718
"test:e2e:ssrMode": "rm -rf port*.txt; playwright test --project=chromium",
1819
"test:e2e:prerender": "rm -rf port*.txt; MODE=prerender playwright test --project=chromium",
19-
"test:e2e": "pnpm run test:e2e:spaMode && pnpm run test:e2e:ssrMode && pnpm run test:e2e:prerender"
20+
"test:e2e:preview": "rm -rf port*.txt; MODE=preview playwright test --project=chromium",
21+
"test:e2e": "pnpm run test:e2e:spaMode && pnpm run test:e2e:ssrMode && pnpm run test:e2e:prerender && pnpm run test:e2e:preview"
2022
},
2123
"dependencies": {
2224
"@tanstack/solid-router": "workspace:^",

e2e/solid-start/basic/playwright.config.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ import {
55
} from '@tanstack/router-e2e-utils'
66
import { isSpaMode } from './tests/utils/isSpaMode'
77
import { isPrerender } from './tests/utils/isPrerender'
8+
import { isPreview } from './tests/utils/isPreview'
89
import packageJson from './package.json' with { type: 'json' }
910

1011
const PORT = await getTestServerPort(
11-
`${packageJson.name}${isSpaMode ? '_spa' : ''}`,
12+
`${packageJson.name}${isSpaMode ? '_spa' : ''}${isPreview ? '_preview' : ''}`,
1213
)
1314
const START_PORT = await getTestServerPort(
1415
`${packageJson.name}${isSpaMode ? '_spa_start' : ''}`,
@@ -18,14 +19,17 @@ const baseURL = `http://localhost:${PORT}`
1819
const spaModeCommand = `pnpm build:spa && pnpm start:spa`
1920
const ssrModeCommand = `pnpm build && pnpm start`
2021
const prerenderModeCommand = `pnpm run test:e2e:startDummyServer && pnpm build:prerender && pnpm run test:e2e:stopDummyServer && pnpm start`
22+
const previewModeCommand = `pnpm build && pnpm preview --port ${PORT}`
2123

2224
const getCommand = () => {
2325
if (isSpaMode) return spaModeCommand
2426
if (isPrerender) return prerenderModeCommand
27+
if (isPreview) return previewModeCommand
2528
return ssrModeCommand
2629
}
2730
console.log('running in spa mode: ', isSpaMode.toString())
2831
console.log('running in prerender mode: ', isPrerender.toString())
32+
console.log('running in preview mode: ', isPreview.toString())
2933
/**
3034
* See https://playwright.dev/docs/test-configuration.
3135
*/

e2e/solid-start/basic/tests/redirect.spec.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@ import {
88
} from '@tanstack/router-e2e-utils'
99
import packageJson from '../package.json' with { type: 'json' }
1010
import { isSpaMode } from '../tests/utils/isSpaMode'
11+
import { isPreview } from '../tests/utils/isPreview'
1112

1213
// somehow playwright does not correctly import default exports
1314
const combinate = (combinateImport as any).default as typeof combinateImport
1415

1516
const PORT = await getTestServerPort(
16-
`${packageJson.name}${isSpaMode ? '_spa' : ''}`,
17+
`${packageJson.name}${isSpaMode ? '_spa' : ''}${isPreview ? '_preview' : ''}`,
1718
)
1819
const EXTERNAL_HOST_PORT = await getDummyServerPort(packageJson.name)
1920

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const isPreview: boolean = process.env.MODE === 'preview'

packages/start-plugin-core/src/output-directory.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,20 @@ import { VITE_ENVIRONMENT_NAMES } from './constants'
33
import type { ViteEnvironmentNames } from './constants'
44
import type * as vite from 'vite'
55

6-
export function getClientOutputDirectory(userConfig: vite.UserConfig) {
6+
export function getClientOutputDirectory(
7+
userConfig: vite.UserConfig | vite.ResolvedConfig,
8+
) {
79
return getOutputDirectory(userConfig, VITE_ENVIRONMENT_NAMES.client, 'client')
810
}
911

10-
export function getServerOutputDirectory(userConfig: vite.UserConfig) {
12+
export function getServerOutputDirectory(
13+
userConfig: vite.UserConfig | vite.ResolvedConfig,
14+
) {
1115
return getOutputDirectory(userConfig, VITE_ENVIRONMENT_NAMES.server, 'server')
1216
}
1317

1418
function getOutputDirectory(
15-
userConfig: vite.UserConfig,
19+
userConfig: vite.UserConfig | vite.ResolvedConfig,
1620
environmentName: ViteEnvironmentNames,
1721
directoryName: string,
1822
) {

packages/start-plugin-core/src/plugin.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { ENTRY_POINTS, VITE_ENVIRONMENT_NAMES } from './constants'
1111
import { tanStackStartRouter } from './start-router-plugin/plugin'
1212
import { loadEnvPlugin } from './load-env-plugin/plugin'
1313
import { devServerPlugin } from './dev-server-plugin/plugin'
14+
import { previewServerPlugin } from './preview-server-plugin/plugin'
1415
import { parseStartConfig } from './schema'
1516
import { resolveEntry } from './resolve-entries'
1617
import {
@@ -399,6 +400,7 @@ export function TanStackStartVitePluginCore(
399400
getConfig,
400401
}),
401402
devServerPlugin({ getConfig }),
403+
previewServerPlugin(),
402404
{
403405
name: 'tanstack-start:core:capture-bundle',
404406
applyToEnvironment(e) {

0 commit comments

Comments
 (0)