From 30d6b3dbf8e387cb40c9578822ed8ed79648785c Mon Sep 17 00:00:00 2001 From: Christoph Nakazawa Date: Tue, 6 Oct 2026 22:16:57 +0900 Subject: [PATCH] Fix Windows env filtering and drain React test server output --- .../test/integration/react-pages-client.test.ts | 5 ++++- packages/void/src/plugin-env-schema.ts | 4 ++-- .../test/integration/plugin-env-schema.test.ts | 17 ++++++++++++++++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/packages/react/test/integration/react-pages-client.test.ts b/packages/react/test/integration/react-pages-client.test.ts index 00643349c..2d55d05c7 100644 --- a/packages/react/test/integration/react-pages-client.test.ts +++ b/packages/react/test/integration/react-pages-client.test.ts @@ -645,7 +645,10 @@ describe('react-pages client (dev)', () => { }); const serverTimeout = process.platform === 'win32' ? 45_000 : 20_000; - await waitForServer(DEV_BASE, serverTimeout); + await waitForServer(DEV_BASE, serverTimeout, { + isAlive: () => child.exitCode === null && child.signalCode === null, + diagnostics: collectServerOutput(child), + }); const paths = ['/', '/users', '/action-error', '/router-params/alpha', '/visit-await']; coldStartResponses.push( ...(await Promise.all( diff --git a/packages/void/src/plugin-env-schema.ts b/packages/void/src/plugin-env-schema.ts index 652ec895d..9a9393de8 100644 --- a/packages/void/src/plugin-env-schema.ts +++ b/packages/void/src/plugin-env-schema.ts @@ -106,10 +106,10 @@ function stripLocalClientEnv( } } -/** Vite resolves symlinks in `root` (and so `envDir`); compare real paths. */ +/** Match Vite's canonical paths, including Windows short names and filesystem casing. */ function realDir(dir: string): string { try { - return realpathSync(dir); + return realpathSync.native(dir); } catch { return resolve(dir); } diff --git a/packages/void/test/integration/plugin-env-schema.test.ts b/packages/void/test/integration/plugin-env-schema.test.ts index 4cf0b69b1..4d376ed6e 100644 --- a/packages/void/test/integration/plugin-env-schema.test.ts +++ b/packages/void/test/integration/plugin-env-schema.test.ts @@ -1,6 +1,6 @@ import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; import { tmpdir } from 'node:os'; -import { join } from 'node:path'; +import { basename, dirname, join } from 'node:path'; import { build, createBuilder, resolveConfig, type InlineConfig } from 'vite'; import { afterEach, describe, expect, it, vi } from 'vite-plus/test'; import { envClientFoldPlugin } from '../../src/plugin-env-client-fold.ts'; @@ -247,6 +247,21 @@ describe('envSchemaPlugin auto-discovery', () => { expect(code).not.toContain('local-api'); }); + it('strips local client values when Vite canonicalizes the root casing', async (context) => { + const root = createTempRoot(); + const aliasedRoot = join(dirname(root), basename(root).toUpperCase()); + if (!existsSync(aliasedRoot)) { + context.skip(); + } + writeFileSync(join(root, '.env'), 'VITE_API=local-api\n'); + writeFileSync(join(root, 'entry.js'), 'export const api = import.meta.env.VITE_API;\n'); + vi.stubEnv('VITE_API', undefined); + + const code = await buildEntry(aliasedRoot); + + expect(code).not.toContain('local-api'); + }); + it('keeps a .env NODE_ENV out of a production client build', async () => { const root = createTempRoot(); writeFileSync(join(root, '.env'), 'NODE_ENV=local-node-env\n');