Skip to content

feat(nuxt): Conditionally use plugins based on Nitro version (v2/v3)#19955

Merged
s1gr1d merged 5 commits intodevelopfrom
sig/nuxt-5-e2e-test
Mar 25, 2026
Merged

feat(nuxt): Conditionally use plugins based on Nitro version (v2/v3)#19955
s1gr1d merged 5 commits intodevelopfrom
sig/nuxt-5-e2e-test

Conversation

@s1gr1d
Copy link
Member

@s1gr1d s1gr1d commented Mar 24, 2026

Conditionally uses plugins for storage and database based on the Nitro version.

Also adds a Nuxt 5 E2E test app, which skips the middleware tests (and some others) for now to be implemented in another PR. Or regarding Pinia, we need to wait until they support that.

The E2E test app is mostly the same as the Nuxt 4 app (just migrated to Nitro v3)

  • explicit nitro imports instead of #import
  • defineHandler instead of defineEventHandler
  • event.res?.headers.get() instead of getHeader()

Closes #19275

@s1gr1d s1gr1d requested review from Lms24 and logaretm March 24, 2026 14:39
@github-actions
Copy link
Contributor

github-actions bot commented Mar 24, 2026

Semver Impact of This PR

🟡 Minor (new features)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

Deps

  • Bump mongodb-memory-server-global from 10.1.4 to 11.0.1 by dependabot in #19888
  • Bump stacktrace-parser from 0.1.10 to 0.1.11 by dependabot in #19887

Other

  • (nuxt) Conditionally use plugins based on Nitro version (v2/v3) by s1gr1d in #19955

Bug Fixes 🐛

Cloudflare

  • Send correct events in local development by JPeer264 in #19900
  • Forward ctx argument to Workflow.do user callback by Lms24 in #19891

Core

  • Preserve .withResponse() on Anthropic instrumentation by nicohrubec in #19935
  • Truncate content array format in Vercel by nicohrubec in #19911
  • Send internal_error as span status for Vercel error spans by nicohrubec in #19921
  • Do not overwrite user provided conversation id in Vercel by nicohrubec in #19903
  • Return same value from startSpan as callback returns by s1gr1d in #19300

Deps

  • Update lockfile to resolve h3@1.15.10 by chargome in #19933
  • Bump fast-xml-parser to 5.5.8 in @azure/core-xml chain by chargome in #19918
  • Bump next to 15.5.14 in nextjs-15 and nextjs-15-intl E2E test apps by chargome in #19917
  • Bump socket.io-parser to 4.2.6 to fix CVE-2026-33151 by chargome in #19880

Other

  • (craft) Add missing mainDocsUrl for @sentry/effect SDK by bc-sentry in #19860
  • (nestjs) Add node to nest metadata by chargome in #19875
  • (serverless) Add node to metadata by nicohrubec in #19878

Internal Changes 🔧

Deps Dev

  • Bump effect from 3.19.19 to 3.20.0 by dependabot in #19926
  • Bump qunit-dom from 3.2.1 to 3.5.0 by dependabot in #19546
  • Bump @react-router/node from 7.13.0 to 7.13.1 by dependabot in #19544

Nuxt

  • Extract core logic for storage/database to prepare for Nuxt v5 by s1gr1d in #19920
  • Extract handler patching to extra plugin for Nitro v2/v3 by s1gr1d in #19915

Other

  • (astro) Re-enable server island tracing e2e test in Astro 6 by Lms24 in #19872
  • (ci) Fix "Gatbsy" typo in issue package label workflow by chargome in #19905
  • (claude) Enable Claude Code Intelligence (LSP) by s1gr1d in #19930
  • (lint) Resolve oxlint warnings by isaacs in #19893
  • (node-integration-tests) Remove unnecessary file-type dependency by Lms24 in #19824
  • (remix) Replace glob with native recursive fs walk by roli-lpci in #19531
  • (sveltekit) Replace recast + @babel/parser with acorn by roli-lpci in #19533
  • Add external contributor to CHANGELOG.md by javascript-sdk-gitflow in #19925
  • Add external contributor to CHANGELOG.md by javascript-sdk-gitflow in #19909

🤖 This preview updates automatically when you update the PR.

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix prepared a fix for the issue found in the latest run.

  • ✅ Fixed: Tests use conditionals instead of separate test paths
    • Replaced per-test if (isDevMode) branching with a single expectedEnvironment constant so each assertion is unconditional and clearer.

Create PR

Or push these changes by commenting:

@cursor push 83eb248526
Preview (83eb248526)
diff --git a/dev-packages/e2e-tests/test-applications/nuxt-5/tests/environment.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-5/tests/environment.test.ts
--- a/dev-packages/e2e-tests/test-applications/nuxt-5/tests/environment.test.ts
+++ b/dev-packages/e2e-tests/test-applications/nuxt-5/tests/environment.test.ts
@@ -3,6 +3,8 @@
 import { isDevMode } from './isDevMode';
 
 test.describe('environment detection', async () => {
+  const expectedEnvironment = isDevMode ? 'development' : 'production';
+
   test('sets correct environment for client-side errors', async ({ page }) => {
     const errorPromise = waitForError('nuxt-5', async errorEvent => {
       return errorEvent?.exception?.values?.[0]?.value === 'Error thrown from nuxt-5 E2E test app';
@@ -14,11 +16,7 @@
 
     const error = await errorPromise;
 
-    if (isDevMode) {
-      expect(error.environment).toBe('development');
-    } else {
-      expect(error.environment).toBe('production');
-    }
+    expect(error.environment).toBe(expectedEnvironment);
   });
 
   test('sets correct environment for client-side transactions', async ({ page }) => {
@@ -30,11 +28,7 @@
 
     const transaction = await transactionPromise;
 
-    if (isDevMode) {
-      expect(transaction.environment).toBe('development');
-    } else {
-      expect(transaction.environment).toBe('production');
-    }
+    expect(transaction.environment).toBe(expectedEnvironment);
   });
 
   test('sets correct environment for server-side errors', async ({ page }) => {
@@ -49,11 +43,7 @@
 
     expect(error.transaction).toBe('GET /api/server-error');
 
-    if (isDevMode) {
-      expect(error.environment).toBe('development');
-    } else {
-      expect(error.environment).toBe('production');
-    }
+    expect(error.environment).toBe(expectedEnvironment);
   });
 
   test('sets correct environment for server-side transactions', async ({ page }) => {
@@ -68,10 +58,6 @@
 
     expect(transaction.contexts.trace.op).toBe('http.server');
 
-    if (isDevMode) {
-      expect(transaction.environment).toBe('development');
-    } else {
-      expect(transaction.environment).toBe('production');
-    }
+    expect(transaction.environment).toBe(expectedEnvironment);
   });
 });

This Bugbot Autofix run was free. To enable autofix for future PRs, go to the Cursor dashboard.

expect(error.environment).toBe('development');
} else {
expect(error.environment).toBe('production');
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tests use conditionals instead of separate test paths

Low Severity

Multiple tests in environment.test.ts use if (isDevMode) / else conditionals to assert different expected values. The review rules specify flagging conditionals inside a single test and recommending splitting the test for different paths.

Additional Locations (2)
Fix in Cursor Fix in Web

Triggered by project rule: PR Review Guidelines for Cursor Bot

@github-actions
Copy link
Contributor

github-actions bot commented Mar 24, 2026

size-limit report 📦

⚠️ Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

Path Size % Change Change
@sentry/browser 25.69 kB +0.2% +49 B 🔺
@sentry/browser - with treeshaking flags 24.17 kB +0.14% +33 B 🔺
@sentry/browser (incl. Tracing) 42.67 kB +0.13% +54 B 🔺
@sentry/browser (incl. Tracing, Profiling) 47.33 kB +0.12% +55 B 🔺
@sentry/browser (incl. Tracing, Replay) 81.48 kB +0.08% +57 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 71.06 kB +0.1% +69 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas) 86.17 kB +0.06% +50 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback) 98.41 kB +0.04% +36 B 🔺
@sentry/browser (incl. Feedback) 42.48 kB +0.08% +30 B 🔺
@sentry/browser (incl. sendFeedback) 30.35 kB +0.15% +43 B 🔺
@sentry/browser (incl. FeedbackAsync) 35.4 kB +0.12% +39 B 🔺
@sentry/browser (incl. Metrics) 26.96 kB +0.15% +38 B 🔺
@sentry/browser (incl. Logs) 27.1 kB +0.12% +32 B 🔺
@sentry/browser (incl. Metrics & Logs) 27.78 kB +0.15% +39 B 🔺
@sentry/react 27.45 kB +0.22% +58 B 🔺
@sentry/react (incl. Tracing) 45.01 kB +0.14% +60 B 🔺
@sentry/vue 30.13 kB +0.16% +46 B 🔺
@sentry/vue (incl. Tracing) 44.52 kB +0.09% +39 B 🔺
@sentry/svelte 25.7 kB +0.16% +40 B 🔺
CDN Bundle 28.35 kB +0.27% +75 B 🔺
CDN Bundle (incl. Tracing) 43.57 kB +0.15% +62 B 🔺
CDN Bundle (incl. Logs, Metrics) 29.22 kB +0.27% +77 B 🔺
CDN Bundle (incl. Tracing, Logs, Metrics) 44.43 kB +0.17% +75 B 🔺
CDN Bundle (incl. Replay, Logs, Metrics) 68.29 kB +0.13% +85 B 🔺
CDN Bundle (incl. Tracing, Replay) 80.41 kB +0.1% +73 B 🔺
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) 81.31 kB +0.1% +76 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) 85.97 kB +0.12% +103 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) 86.86 kB +0.1% +86 B 🔺
CDN Bundle - uncompressed 82.7 kB +0.1% +77 B 🔺
CDN Bundle (incl. Tracing) - uncompressed 128.62 kB +0.05% +64 B 🔺
CDN Bundle (incl. Logs, Metrics) - uncompressed 85.57 kB +0.1% +77 B 🔺
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed 131.49 kB +0.05% +64 B 🔺
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed 209.22 kB +0.05% +102 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed 245.5 kB +0.04% +89 B 🔺
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed 248.35 kB +0.04% +89 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 258.41 kB +0.04% +89 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed 261.26 kB +0.04% +89 B 🔺
@sentry/nextjs (client) 47.4 kB +0.08% +37 B 🔺
@sentry/sveltekit (client) 43.12 kB +0.12% +51 B 🔺
@sentry/node-core 56.42 kB +0.13% +73 B 🔺
@sentry/node 173.53 kB +0.22% +368 B 🔺
@sentry/node - without tracing 96.43 kB +0.1% +87 B 🔺
@sentry/aws-serverless 113.44 kB +0.09% +100 B 🔺

View base workflow run

Copy link
Member

@logaretm logaretm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

@s1gr1d s1gr1d enabled auto-merge (squash) March 24, 2026 17:22
@github-actions
Copy link
Contributor

node-overhead report 🧳

Note: This is a synthetic benchmark with a minimal express app and does not necessarily reflect the real-world performance impact in an application.

Scenario Requests/s % of Baseline Prev. Requests/s Change %
GET Baseline 9,196 - 8,837 +4%
GET With Sentry 1,710 19% 1,581 +8%
GET With Sentry (error only) 6,037 66% 5,836 +3%
POST Baseline 1,195 - 1,170 +2%
POST With Sentry 594 50% 561 +6%
POST With Sentry (error only) 1,063 89% 1,019 +4%
MYSQL Baseline 3,264 - 3,195 +2%
MYSQL With Sentry 427 13% 406 +5%
MYSQL With Sentry (error only) 2,659 81% 2,586 +3%

View base workflow run

@s1gr1d s1gr1d merged commit 0156846 into develop Mar 25, 2026
460 of 465 checks passed
@s1gr1d s1gr1d deleted the sig/nuxt-5-e2e-test branch March 25, 2026 08:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Nuxt] Add nuxt-5 E2E test

2 participants