diff --git a/packages/plugin-rsc/CONTRIBUTING.md b/packages/plugin-rsc/CONTRIBUTING.md index 74f5bdf1a..7de848fb2 100644 --- a/packages/plugin-rsc/CONTRIBUTING.md +++ b/packages/plugin-rsc/CONTRIBUTING.md @@ -36,6 +36,9 @@ Best for testing specific edge cases or isolated features. See `e2e/ssr-thenable # Build packages pnpm dev # pnpm -C packages/plugin-rsc dev +# Type check +pnpm -C packages/plugin-rsc tsc-dev + # Run examples pnpm -C packages/plugin-rsc/examples/basic dev # build / preview pnpm -C packages/plugin-rsc/examples/starter dev # build / preview diff --git a/packages/plugin-rsc/e2e/fixture.ts b/packages/plugin-rsc/e2e/fixture.ts index ac1d7385d..f5b883246 100644 --- a/packages/plugin-rsc/e2e/fixture.ts +++ b/packages/plugin-rsc/e2e/fixture.ts @@ -200,7 +200,7 @@ function editFileJson(filepath: string, edit: (s: string) => string) { export async function setupInlineFixture(options: { src: string dest: string - files?: Record + files?: Record }) { fs.rmSync(options.dest, { recursive: true, force: true }) fs.mkdirSync(options.dest, { recursive: true }) @@ -214,16 +214,24 @@ export async function setupInlineFixture(options: { // write additional files if (options.files) { for (let [filename, contents] of Object.entries(options.files)) { - let filepath = path.join(options.dest, filename) - fs.mkdirSync(path.dirname(filepath), { recursive: true }) - // strip indent + const destFile = path.join(options.dest, filename) + fs.mkdirSync(path.dirname(destFile), { recursive: true }) + + // custom command + if (typeof contents === 'object' && 'cp' in contents) { + const srcFile = path.join(options.dest, contents.cp) + fs.copyFileSync(srcFile, destFile) + continue + } + + // write a new file contents = contents.replace(/^\n*/, '').replace(/\s*$/, '\n') const indent = contents.match(/^\s*/)?.[0] ?? '' const strippedContents = contents .split('\n') .map((line) => line.replace(new RegExp(`^${indent}`), '')) .join('\n') - fs.writeFileSync(filepath, strippedContents) + fs.writeFileSync(destFile, strippedContents) } } } diff --git a/packages/plugin-rsc/e2e/starter.test.ts b/packages/plugin-rsc/e2e/starter.test.ts index 86752aa64..6d80bc986 100644 --- a/packages/plugin-rsc/e2e/starter.test.ts +++ b/packages/plugin-rsc/e2e/starter.test.ts @@ -92,12 +92,16 @@ test.describe(() => { src: 'examples/starter', dest: root, files: { + 'vite.config.base.ts': { cp: 'vite.config.ts' }, 'vite.config.ts': /* js */ ` import rsc from '@vitejs/plugin-rsc' import react from '@vitejs/plugin-react' - import { defineConfig } from 'vite' + import { defineConfig, mergeConfig } from 'vite' + import baseConfig from './vite.config.base.ts' + + delete baseConfig.plugins - export default defineConfig({ + const overrideConfig = defineConfig({ plugins: [ react({ babel: { plugins: ['babel-plugin-react-compiler'] }, @@ -105,15 +109,11 @@ test.describe(() => { ...p, applyToEnvironment: (e) => e.name === 'client', })), - rsc({ - entries: { - client: './src/framework/entry.browser.tsx', - ssr: './src/framework/entry.ssr.tsx', - rsc: './src/framework/entry.rsc.tsx', - } - }), + rsc(), ], }) + + export default mergeConfig(baseConfig, overrideConfig) `, }, }) @@ -145,24 +145,16 @@ test.describe(() => { src: 'examples/starter', dest: root, files: { + 'vite.config.base.ts': { cp: 'vite.config.ts' }, 'vite.config.ts': /* js */ ` - import rsc from '@vitejs/plugin-rsc' - import react from '@vitejs/plugin-react' - import { defineConfig } from 'vite' + import { defineConfig, mergeConfig } from 'vite' + import baseConfig from './vite.config.base.ts' - export default defineConfig({ + const overrideConfig = defineConfig({ base: '/custom-base/', - plugins: [ - react(), - rsc({ - entries: { - client: './src/framework/entry.browser.tsx', - ssr: './src/framework/entry.ssr.tsx', - rsc: './src/framework/entry.rsc.tsx', - } - }), - ], }) + + export default mergeConfig(baseConfig, overrideConfig) `, }, }) @@ -193,22 +185,12 @@ test.describe(() => { src: 'examples/starter', dest: root, files: { + 'vite.config.base.ts': { cp: 'vite.config.ts' }, 'vite.config.ts': /* js */ ` - import rsc from '@vitejs/plugin-rsc' - import react from '@vitejs/plugin-react' - import { defineConfig, createRunnableDevEnvironment } from 'vite' + import { defineConfig, mergeConfig, createRunnableDevEnvironment } from 'vite' + import baseConfig from './vite.config.base.ts' - export default defineConfig({ - plugins: [ - react(), - rsc({ - entries: { - client: './src/framework/entry.browser.tsx', - ssr: './src/framework/entry.ssr.tsx', - rsc: './src/framework/entry.rsc.tsx', - } - }), - ], + const overrideConfig = defineConfig({ environments: { ssr: { dev: { @@ -234,6 +216,8 @@ test.describe(() => { }, }, }) + + export default mergeConfig(baseConfig, overrideConfig) `, }, })