Skip to content

Preset future flags are completely ignored #14368

@juanpprieto

Description

@juanpprieto

Description

Preset-defined future flags are completely ignored during configuration resolution. The bug prevents presets from enabling experimental features, which is critical functionality for third-party integrations and hosting providers.

Current Behavior

When a preset defines future flags in its reactRouterConfig hook, these flags are ignored and always resolve to false, regardless of the preset's configuration.

Expected Behavior

Presets should be able to set future flags that are properly merged with user configuration, following the documented preset merging order where user config takes precedence over preset config.

Repro

https://stackblitz.com/edit/github-9jrvk31k?file=react-router.config.ts

Failing Test

pnpm test:integration --grep="presets"

  16 failed
    [chromium] › vite-presets-test.ts:159:5 › Vite / presets › Vite 5
    [chromium] › vite-presets-test.ts:159:5 › Vite / presets › Vite 6
    ...

Error: Expected: {
  v8_middleware: true,
  unstable_optimizeDeps: true,
  unstable_splitRouteModules: false,
  unstable_subResourceIntegrity: false,
  unstable_viteEnvironmentApi: false
}

Received: {
  v8_middleware: false,
  unstable_optimizeDeps: false,
  unstable_splitRouteModules: false,
  unstable_subResourceIntegrity: false,
  unstable_viteEnvironmentApi: false
}

  245 |       expect(buildEndArgsMeta.futureFlags).toEqual({
  246 |         v8_middleware: true,
  247 |         unstable_optimizeDeps: true,
  248 |         unstable_splitRouteModules: false,
      at /Users/juanp.prieto/github.com/Shopify/react-router/integration/vite-presets-test.ts:245:44

Failing Test Case

// Preset that sets future flags
{
  name: "test-preset",
  reactRouterConfig: async () => ({
    future: {
      v8_middleware: true,
      unstable_optimizeDeps: true,
    },
  }),
},

// Test assertion
expect(buildEndArgsMeta.futureFlags).toEqual({
  v8_middleware: true,
  unstable_optimizeDeps: true,
  unstable_splitRouteModules: false,
  unstable_subResourceIntegrity: false,
  unstable_viteEnvironmentApi: false,
});

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions