From 9c9528e315360ac5ec14a11e924dc4a770d44391 Mon Sep 17 00:00:00 2001 From: s1gr1d <32902192+s1gr1d@users.noreply.github.com> Date: Fri, 20 Mar 2026 14:04:34 +0100 Subject: [PATCH 1/4] ref(nuxt): Move handler patching to extra plugin --- packages/nuxt/package.json | 1 + packages/nuxt/src/module.ts | 1 + .../runtime/plugins/handler-legacy.server.ts | 7 + .../src/runtime/plugins/handler.server.ts | 13 + .../src/runtime/utils/patchEventHandler.ts | 35 +++ packages/nuxt/tsconfig.json | 3 +- yarn.lock | 228 +++++++++++++++++- 7 files changed, 278 insertions(+), 10 deletions(-) create mode 100644 packages/nuxt/src/runtime/plugins/handler-legacy.server.ts create mode 100644 packages/nuxt/src/runtime/plugins/handler.server.ts create mode 100644 packages/nuxt/src/runtime/utils/patchEventHandler.ts diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index ff1ac4d757d1..19f3e597b220 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -61,6 +61,7 @@ "devDependencies": { "@nuxt/module-builder": "^0.8.4", "@nuxt/nitro-server": "^3.21.1", + "nitro": "^3.0.260311-beta", "nuxi": "^3.25.1", "nuxt": "3.17.7", "vite": "^5.4.11" diff --git a/packages/nuxt/src/module.ts b/packages/nuxt/src/module.ts index 55656e103738..490fde751473 100644 --- a/packages/nuxt/src/module.ts +++ b/packages/nuxt/src/module.ts @@ -80,6 +80,7 @@ export default defineNuxtModule({ const serverConfigFile = findDefaultSdkInitFile('server', nuxt); if (serverConfigFile) { + addServerPlugin(moduleDirResolver.resolve('./runtime/plugins/handler-legacy.server')); addServerPlugin(moduleDirResolver.resolve('./runtime/plugins/sentry.server')); addPlugin({ diff --git a/packages/nuxt/src/runtime/plugins/handler-legacy.server.ts b/packages/nuxt/src/runtime/plugins/handler-legacy.server.ts new file mode 100644 index 000000000000..3cfa5ad0e13a --- /dev/null +++ b/packages/nuxt/src/runtime/plugins/handler-legacy.server.ts @@ -0,0 +1,7 @@ +import type { EventHandler } from 'h3'; +import type { NitroAppPlugin } from 'nitropack'; +import { patchEventHandler } from '../utils/patchEventHandler'; + +export default (nitroApp => { + nitroApp.h3App.handler = patchEventHandler(nitroApp.h3App.handler); +}) satisfies NitroAppPlugin; diff --git a/packages/nuxt/src/runtime/plugins/handler.server.ts b/packages/nuxt/src/runtime/plugins/handler.server.ts new file mode 100644 index 000000000000..e874ed7ca3a3 --- /dev/null +++ b/packages/nuxt/src/runtime/plugins/handler.server.ts @@ -0,0 +1,13 @@ +import type { EventHandler } from 'nitro/h3'; +import type { NitroAppPlugin, NitroApp } from 'nitro/types'; +import { patchEventHandler } from '../utils/patchEventHandler'; + +/** + * This plugin patches the h3 event handler for Nuxt v5+ (Nitro v3+). + */ +export default ((nitroApp: NitroApp) => { + if (nitroApp?.h3?.handler) { + // eslint-disable-next-line @typescript-eslint/unbound-method + nitroApp.h3.handler = patchEventHandler(nitroApp.h3.handler); + } +}) satisfies NitroAppPlugin; diff --git a/packages/nuxt/src/runtime/utils/patchEventHandler.ts b/packages/nuxt/src/runtime/utils/patchEventHandler.ts new file mode 100644 index 000000000000..41625012c10c --- /dev/null +++ b/packages/nuxt/src/runtime/utils/patchEventHandler.ts @@ -0,0 +1,35 @@ +import { + debug, + flushIfServerless, + getDefaultIsolationScope, + getIsolationScope, + withIsolationScope, +} from '@sentry/core'; + +/** + * Patches the H3 event handler of Nitro. + * + * Uses a TypeScript generic type to ensure the returned handler type fits different versions of Nitro. + */ +export function patchEventHandler(handler: H3EventHandler): H3EventHandler { + return new Proxy(handler, { + async apply(handlerTarget, handlerThisArg, handlerArgs: unknown) { + const isolationScope = getIsolationScope(); + const newIsolationScope = isolationScope === getDefaultIsolationScope() ? isolationScope.clone() : isolationScope; + + debug.log( + `Patched h3 event handler. ${ + isolationScope === newIsolationScope ? 'Using existing' : 'Created new' + } isolation scope.`, + ); + + return withIsolationScope(newIsolationScope, async () => { + try { + return await handlerTarget.apply(handlerThisArg, handlerArgs); + } finally { + await flushIfServerless(); + } + }); + }, + }); +} diff --git a/packages/nuxt/tsconfig.json b/packages/nuxt/tsconfig.json index de9c931f2cd1..5766b891dd95 100644 --- a/packages/nuxt/tsconfig.json +++ b/packages/nuxt/tsconfig.json @@ -5,6 +5,7 @@ "compilerOptions": { // package-specific options - "module": "esnext" + "module": "esnext", + "moduleResolution": "bundler" } } diff --git a/yarn.lock b/yarn.lock index c2d577870a7d..65a65f8096c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3375,6 +3375,14 @@ "@emnapi/wasi-threads" "1.1.0" tslib "^2.4.0" +"@emnapi/core@^1.7.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.9.1.tgz#2143069c744ca2442074f8078462e51edd63c7bd" + integrity sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA== + dependencies: + "@emnapi/wasi-threads" "1.2.0" + tslib "^2.4.0" + "@emnapi/runtime@^1.1.0", "@emnapi/runtime@^1.4.3", "@emnapi/runtime@^1.7.0": version "1.8.1" resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.8.1.tgz#550fa7e3c0d49c5fb175a116e8cd70614f9a22a5" @@ -3382,6 +3390,13 @@ dependencies: tslib "^2.4.0" +"@emnapi/runtime@^1.7.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.9.1.tgz#115ff2a0d589865be6bd8e9d701e499c473f2a8d" + integrity sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA== + dependencies: + tslib "^2.4.0" + "@emnapi/wasi-threads@1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz#60b2102fddc9ccb78607e4a3cf8403ea69be41bf" @@ -3389,6 +3404,13 @@ dependencies: tslib "^2.4.0" +"@emnapi/wasi-threads@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz#a19d9772cc3d195370bf6e2a805eec40aa75e18e" + integrity sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg== + dependencies: + tslib "^2.4.0" + "@es-joy/jsdoccomment@~0.50.2": version "0.50.2" resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.50.2.tgz#707768f0cb62abe0703d51aa9086986d230a5d5c" @@ -5368,6 +5390,15 @@ "@emnapi/runtime" "^1.4.3" "@tybys/wasm-util" "^0.10.0" +"@napi-rs/wasm-runtime@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz#c3705ab549d176b8dc5172723d6156c3dc426af2" + integrity sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A== + dependencies: + "@emnapi/core" "^1.7.1" + "@emnapi/runtime" "^1.7.1" + "@tybys/wasm-util" "^0.10.1" + "@nestjs/common@^10.0.0": version "10.4.15" resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-10.4.15.tgz#27c291466d9100eb86fdbe6f7bbb4d1a6ad55f70" @@ -6562,6 +6593,11 @@ resolved "https://registry.yarnpkg.com/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.76.0.tgz#3dbef82283f871c9cb59325c9daf4f740d11a6e9" integrity sha512-0jLzzmnu8/mqNhKBnNS2lFUbPEzRdj5ReiZwHGHpjma0+ullmmwP2AqSEqx3ssHDK9CpcEMdKOK2LsbCfhHKIA== +"@oxc-project/types@=0.120.0": + version "0.120.0" + resolved "https://registry.yarnpkg.com/@oxc-project/types/-/types-0.120.0.tgz#af521b0e689dd0eaa04fe4feef9b68d98b74783d" + integrity sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg== + "@oxc-project/types@^0.76.0": version "0.76.0" resolved "https://registry.yarnpkg.com/@oxc-project/types/-/types-0.76.0.tgz#89ae800d774ccb344278fc17ab6c15348da8b995" @@ -7265,6 +7301,88 @@ dependencies: web-streams-polyfill "^3.1.1" +"@rolldown/binding-android-arm64@1.0.0-rc.10": + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.10.tgz#0bbd3380f49a6d0dc96c9b32fb7dad26ae0dfaa7" + integrity sha512-jOHxwXhxmFKuXztiu1ORieJeTbx5vrTkcOkkkn2d35726+iwhrY1w/+nYY/AGgF12thg33qC3R1LMBF5tHTZHg== + +"@rolldown/binding-darwin-arm64@1.0.0-rc.10": + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.10.tgz#a30b051784fbb13635e652ba4041c6ce7a4ce7ab" + integrity sha512-gED05Teg/vtTZbIJBc4VNMAxAFDUPkuO/rAIyyxZjTj1a1/s6z5TII/5yMGZ0uLRCifEtwUQn8OlYzuYc0m70w== + +"@rolldown/binding-darwin-x64@1.0.0-rc.10": + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.10.tgz#2d9dea982d5be90b95b6d8836ff26a4b0959d94b" + integrity sha512-rI15NcM1mA48lqrIxVkHfAqcyFLcQwyXWThy+BQ5+mkKKPvSO26ir+ZDp36AgYoYVkqvMcdS8zOE6SeBsR9e8A== + +"@rolldown/binding-freebsd-x64@1.0.0-rc.10": + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.10.tgz#4efc3aca43ae4dfb90729eeca6e84ef6e6b38c4a" + integrity sha512-XZRXHdTa+4ME1MuDVp021+doQ+z6Ei4CCFmNc5/sKbqb8YmkiJdj8QKlV3rCI0AJtAeSB5n0WGPuJWNL9p/L2w== + +"@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.10": + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.10.tgz#4a19a5d24537e925b25e9583b6cd575b2ad9fa27" + integrity sha512-R0SQMRluISSLzFE20sPWYHVmJdDQnRyc/FzSCN72BqQmh2SOZUFG+N3/vBZpR4C6WpEUVYJLrYUXaj43sJsNLA== + +"@rolldown/binding-linux-arm64-gnu@1.0.0-rc.10": + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.10.tgz#01a41e5e905838353ae9a3da10dc8242dcd61453" + integrity sha512-Y1reMrV/o+cwpduYhJuOE3OMKx32RMYCidf14y+HssARRmhDuWXJ4yVguDg2R/8SyyGNo+auzz64LnPK9Hq6jg== + +"@rolldown/binding-linux-arm64-musl@1.0.0-rc.10": + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.10.tgz#bd059e5f83471de29ce35b0ba254995d8091ca40" + integrity sha512-vELN+HNb2IzuzSBUOD4NHmP9yrGwl1DVM29wlQvx1OLSclL0NgVWnVDKl/8tEks79EFek/kebQKnNJkIAA4W2g== + +"@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.10": + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.10.tgz#fe726a540631015f269a989c0cfb299283190390" + integrity sha512-ZqrufYTgzxbHwpqOjzSsb0UV/aV2TFIY5rP8HdsiPTv/CuAgCRjM6s9cYFwQ4CNH+hf9Y4erHW1GjZuZ7WoI7w== + +"@rolldown/binding-linux-s390x-gnu@1.0.0-rc.10": + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.10.tgz#825ced028bad3f1fa9ce83b1f3dac76e0424367f" + integrity sha512-gSlmVS1FZJSRicA6IyjoRoKAFK7IIHBs7xJuHRSmjImqk3mPPWbR7RhbnfH2G6bcmMEllCt2vQ/7u9e6bBnByg== + +"@rolldown/binding-linux-x64-gnu@1.0.0-rc.10": + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.10.tgz#b700dae69274aa3d54a16ca5e00e30f47a089119" + integrity sha512-eOCKUpluKgfObT2pHjztnaWEIbUabWzk3qPZ5PuacuPmr4+JtQG4k2vGTY0H15edaTnicgU428XW/IH6AimcQw== + +"@rolldown/binding-linux-x64-musl@1.0.0-rc.10": + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.10.tgz#eb875660ad68a2348acab36a7005699e87f6e9dd" + integrity sha512-Xdf2jQbfQowJnLcgYfD/m0Uu0Qj5OdxKallD78/IPPfzaiaI4KRAwZzHcKQ4ig1gtg1SuzC7jovNiM2TzQsBXA== + +"@rolldown/binding-openharmony-arm64@1.0.0-rc.10": + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.10.tgz#72aa24b412f83025087bcf83ce09634b2bd93c5c" + integrity sha512-o1hYe8hLi1EY6jgPFyxQgQ1wcycX+qz8eEbVmot2hFkgUzPxy9+kF0u0NIQBeDq+Mko47AkaFFaChcvZa9UX9Q== + +"@rolldown/binding-wasm32-wasi@1.0.0-rc.10": + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.10.tgz#7f3303a96c5dc01d1f4c539b1dcbc16392c6f17d" + integrity sha512-Ugv9o7qYJudqQO5Y5y2N2SOo6S4WiqiNOpuQyoPInnhVzCY+wi/GHltcLHypG9DEUYMB0iTB/huJrpadiAcNcA== + dependencies: + "@napi-rs/wasm-runtime" "^1.1.1" + +"@rolldown/binding-win32-arm64-msvc@1.0.0-rc.10": + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.10.tgz#3419144a04ad12c69c48536b01fc21ac9d87ecf4" + integrity sha512-7UODQb4fQUNT/vmgDZBl3XOBAIOutP5R3O/rkxg0aLfEGQ4opbCgU5vOw/scPe4xOqBwL9fw7/RP1vAMZ6QlAQ== + +"@rolldown/binding-win32-x64-msvc@1.0.0-rc.10": + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.10.tgz#09bee46e6a32c6086beeabc3da12e67be714f882" + integrity sha512-PYxKHMVHOb5NJuDL53vBUl1VwUjymDcYI6rzpIni0C9+9mTiJedvUxSk7/RPp7OOAm3v+EjgMu9bIy3N6b408w== + +"@rolldown/pluginutils@1.0.0-rc.10": + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.10.tgz#eed997f37f928a3300bbe2161f42687d8a3ae759" + integrity sha512-UkVDEFk1w3mveXeKgaTuYfKWtPbvgck1dT8TUG3bnccrH0XtLTuAyfCoks4Q/M5ZGToSVJTIQYCzy2g/atAOeg== + "@rolldown/pluginutils@^1.0.0-beta.9": version "1.0.0-rc.4" resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.4.tgz#267b477af268a082861c861e47f6a787dff59cc4" @@ -8644,12 +8762,7 @@ "@supabase/realtime-js" "2.11.2" "@supabase/storage-js" "2.7.1" -"@sveltejs/acorn-typescript@^1.0.5": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.9.tgz#ac0bde368d6623727b0e0bc568cf6b4e5d5c4baa" - integrity sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA== - -"@sveltejs/acorn-typescript@^1.0.9": +"@sveltejs/acorn-typescript@^1.0.5", "@sveltejs/acorn-typescript@^1.0.9": version "1.0.9" resolved "https://registry.yarnpkg.com/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.9.tgz#ac0bde368d6623727b0e0bc568cf6b4e5d5c4baa" integrity sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA== @@ -9024,7 +9137,7 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== -"@tybys/wasm-util@^0.10.0": +"@tybys/wasm-util@^0.10.0", "@tybys/wasm-util@^0.10.1": version "0.10.1" resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414" integrity sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg== @@ -14073,6 +14186,11 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: dependencies: uncrypto "^0.1.3" +crossws@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/crossws/-/crossws-0.4.4.tgz#d62574bcc6de75f0e45fe08b5133d9ba8436a30c" + integrity sha512-w6c4OdpRNnudVmcgr7brb/+/HmYjMQvYToO/oTrprTwxRUiom3LYWU1PMWuD006okbUWpII1Ea9/+kwpUfmyRg== + crypto-random-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" @@ -15720,6 +15838,15 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== +env-runner@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/env-runner/-/env-runner-0.1.6.tgz#b2acc95c00bc9a00457d7ad5220f10bd75595b2d" + integrity sha512-fSb7X1zdda8k6611a6/SdSQpDe7a/bqMz2UWdbHjk9YWzpUR4/fn9YtE/hqgGQ2nhvVN0zUtcL1SRMKwIsDbAA== + dependencies: + crossws "^0.4.4" + httpxy "^0.3.1" + srvx "^0.11.9" + err-code@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" @@ -18392,6 +18519,14 @@ h3@^1.10.0, h3@^1.12.0, h3@^1.15.3, h3@^1.15.5: ufo "^1.6.3" uncrypto "^0.1.3" +h3@^2.0.1-rc.16: + version "2.0.1-rc.17" + resolved "https://registry.yarnpkg.com/h3/-/h3-2.0.1-rc.17.tgz#86fb5a5261a38f59e0fb3384581e345285be3b61" + integrity sha512-9rPJs68qMj7HJH78z7uSIAw6rl3EElLdVSirTeAf6B5ogwiFVIr9AKMMS4u00Gp8DYIPnnjtw3ZWN7EkYcPBrQ== + dependencies: + rou3 "^0.8.1" + srvx "^0.11.12" + handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" @@ -18991,6 +19126,11 @@ httpxy@^0.1.7: resolved "https://registry.yarnpkg.com/httpxy/-/httpxy-0.1.7.tgz#02d02e57eda10e8b5c0e3f9f10860e3d7a5991a4" integrity sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ== +httpxy@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/httpxy/-/httpxy-0.3.1.tgz#da1bb1a4a26cb44d7835a9297c845a0e06372083" + integrity sha512-XjG/CEoofEisMrnFr0D6U6xOZ4mRfnwcYQ9qvvnT4lvnX8BoeA3x3WofB75D+vZwpaobFVkBIHrZzoK40w8XSw== + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -22641,6 +22781,11 @@ next@14.2.35: "@next/swc-win32-ia32-msvc" "14.2.33" "@next/swc-win32-x64-msvc" "14.2.33" +nf3@^0.3.11: + version "0.3.13" + resolved "https://registry.yarnpkg.com/nf3/-/nf3-0.3.13.tgz#9dfbc08158c9f12583ebf82bd89c97dc362b7df1" + integrity sha512-drDt0yl4d/yUhlpD0GzzqahSpA5eUNeIfFq0/aoZb0UlPY0ZwP4u1EfREVvZrYdEnJ3OU9Le9TrzbvWgEkkeKw== + ng-packagr@^14.2.2: version "14.3.0" resolved "https://registry.yarnpkg.com/ng-packagr/-/ng-packagr-14.3.0.tgz#517a7c343aa125a7d631097fede16941949fb503" @@ -22686,6 +22831,26 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +nitro@^3.0.260311-beta: + version "3.0.260311-beta" + resolved "https://registry.yarnpkg.com/nitro/-/nitro-3.0.260311-beta.tgz#46860d42e6a412c7ea361fae525427c01b6ded3d" + integrity sha512-0o0fJ9LUh4WKUqJNX012jyieUOtMCnadkNDWr0mHzdraoHpJP/1CGNefjRyZyMXSpoJfwoWdNEZu2iGf35TUvQ== + dependencies: + consola "^3.4.2" + crossws "^0.4.4" + db0 "^0.3.4" + env-runner "^0.1.6" + h3 "^2.0.1-rc.16" + hookable "^6.0.1" + nf3 "^0.3.11" + ocache "^0.1.2" + ofetch "^2.0.0-alpha.3" + ohash "^2.0.11" + rolldown "^1.0.0-rc.8" + srvx "^0.11.9" + unenv "^2.0.0-rc.24" + unstorage "^2.0.0-alpha.6" + nitropack@^2.11.10, nitropack@^2.11.13, nitropack@^2.13.1: version "2.13.1" resolved "https://registry.yarnpkg.com/nitropack/-/nitropack-2.13.1.tgz#70be1b14eb0d2fed9c670fe7cfff3741c384ecf2" @@ -23424,6 +23589,13 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== +ocache@^0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/ocache/-/ocache-0.1.4.tgz#d4a71be84ceaeb5685cc0128c197d44713dda9a7" + integrity sha512-e7geNdWjxSnvsSgvLuPvgKgu7ubM10ZmTPOgpr7mz2BXYtvjMKTiLhjFi/gWU8chkuP6hNkZBsa9LzOusyaqkQ== + dependencies: + ohash "^2.0.11" + ofetch@^1.4.1, ofetch@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/ofetch/-/ofetch-1.5.1.tgz#5c43cc56e03398b273014957060344254505c5c7" @@ -26514,6 +26686,30 @@ roarr@^7.0.4: safe-stable-stringify "^2.4.1" semver-compare "^1.0.0" +rolldown@^1.0.0-rc.8: + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/rolldown/-/rolldown-1.0.0-rc.10.tgz#41c55e52d833c52c90131973047250548e35f2bf" + integrity sha512-q7j6vvarRFmKpgJUT8HCAUljkgzEp4LAhPlJUvQhA5LA1SUL36s5QCysMutErzL3EbNOZOkoziSx9iZC4FddKA== + dependencies: + "@oxc-project/types" "=0.120.0" + "@rolldown/pluginutils" "1.0.0-rc.10" + optionalDependencies: + "@rolldown/binding-android-arm64" "1.0.0-rc.10" + "@rolldown/binding-darwin-arm64" "1.0.0-rc.10" + "@rolldown/binding-darwin-x64" "1.0.0-rc.10" + "@rolldown/binding-freebsd-x64" "1.0.0-rc.10" + "@rolldown/binding-linux-arm-gnueabihf" "1.0.0-rc.10" + "@rolldown/binding-linux-arm64-gnu" "1.0.0-rc.10" + "@rolldown/binding-linux-arm64-musl" "1.0.0-rc.10" + "@rolldown/binding-linux-ppc64-gnu" "1.0.0-rc.10" + "@rolldown/binding-linux-s390x-gnu" "1.0.0-rc.10" + "@rolldown/binding-linux-x64-gnu" "1.0.0-rc.10" + "@rolldown/binding-linux-x64-musl" "1.0.0-rc.10" + "@rolldown/binding-openharmony-arm64" "1.0.0-rc.10" + "@rolldown/binding-wasm32-wasi" "1.0.0-rc.10" + "@rolldown/binding-win32-arm64-msvc" "1.0.0-rc.10" + "@rolldown/binding-win32-x64-msvc" "1.0.0-rc.10" + rollup-plugin-cleanup@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/rollup-plugin-cleanup/-/rollup-plugin-cleanup-3.2.1.tgz#8cbc92ecf58babd7c210051929797f137bbf777c" @@ -26624,6 +26820,11 @@ rou3@^0.7.12: resolved "https://registry.yarnpkg.com/rou3/-/rou3-0.7.12.tgz#cac17425c04abddba854a42385cabfe0b971a179" integrity sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg== +rou3@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/rou3/-/rou3-0.8.1.tgz#d18c9dae42bdd9cd4fffa77bc6731d5cfe92129a" + integrity sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA== + router@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef" @@ -27483,7 +27684,7 @@ socket.io-parser@~4.2.4: integrity sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg== dependencies: "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.1" + debug "~4.4.1" socket.io@^4.5.4: version "4.8.1" @@ -27826,6 +28027,11 @@ sqlstring@2.3.1: resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40" integrity sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A= +srvx@^0.11.12, srvx@^0.11.9: + version "0.11.12" + resolved "https://registry.yarnpkg.com/srvx/-/srvx-0.11.12.tgz#ed59866cd0cec580b119e161ead3fecd2a546fee" + integrity sha512-AQfrGqntqVPXgP03pvBDN1KyevHC+KmYVqb8vVf4N+aomQqdhaZxjvoVp+AOm4u6x+GgNQY3MVzAUIn+TqwkOA== + srvx@^0.11.2: version "0.11.4" resolved "https://registry.yarnpkg.com/srvx/-/srvx-0.11.4.tgz#0d1dd962c2320f84fc7872f2500b21c84c3d1b97" @@ -28286,7 +28492,6 @@ stylus@0.59.0, stylus@^0.59.0: sucrase@^3.27.0, sucrase@^3.35.0, sucrase@getsentry/sucrase#es2020-polyfills: version "3.36.0" - uid fd682f6129e507c00bb4e6319cc5d6b767e36061 resolved "https://codeload.github.com/getsentry/sucrase/tar.gz/fd682f6129e507c00bb4e6319cc5d6b767e36061" dependencies: "@jridgewell/gen-mapping" "^0.3.2" @@ -29757,6 +29962,11 @@ unstorage@^1.16.0, unstorage@^1.17.4: ofetch "^1.5.1" ufo "^1.6.3" +unstorage@^2.0.0-alpha.6: + version "2.0.0-alpha.7" + resolved "https://registry.yarnpkg.com/unstorage/-/unstorage-2.0.0-alpha.7.tgz#803ea90176683bf2175bb01065cb07df6d65280a" + integrity sha512-ELPztchk2zgFJnakyodVY3vJWGW9jy//keJ32IOJVGUMyaPydwcA1FtVvWqT0TNRch9H+cMNEGllfVFfScImog== + untildify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-2.1.0.tgz#17eb2807987f76952e9c0485fc311d06a826a2e0" From 8b1c6ff6fb89dfe05287d50e426d47ccd5aa4fe4 Mon Sep 17 00:00:00 2001 From: s1gr1d <32902192+s1gr1d@users.noreply.github.com> Date: Fri, 20 Mar 2026 14:32:43 +0100 Subject: [PATCH 2/4] add nitro as optional peer dependency --- packages/nuxt/package.json | 8 +++++++- packages/nuxt/src/runtime/utils.ts | 4 ++-- yarn.lock | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index 19f3e597b220..1ec523450789 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -45,7 +45,13 @@ "access": "public" }, "peerDependencies": { - "nuxt": ">=3.7.0 || 4.x" + "nuxt": ">=3.7.0 || 4.x", + "nitro": "3.x" + }, + "peerDependenciesMeta": { + "nitro": { + "optional": true + } }, "dependencies": { "@nuxt/kit": "^3.13.2", diff --git a/packages/nuxt/src/runtime/utils.ts b/packages/nuxt/src/runtime/utils.ts index 2c3526b951c9..5a8e9c3db701 100644 --- a/packages/nuxt/src/runtime/utils.ts +++ b/packages/nuxt/src/runtime/utils.ts @@ -1,6 +1,5 @@ import type { ClientOptions, Context, SerializedTraceData } from '@sentry/core'; import { captureException, debug, getClient, getTraceMetaTags } from '@sentry/core'; -import type { VueOptions } from '@sentry/vue/src/types'; import type { CapturedErrorContext } from 'nitropack/types'; import type { NuxtRenderHTMLContext } from 'nuxt/app'; import type { ComponentPublicInstance } from 'vue'; @@ -69,7 +68,8 @@ export function reportNuxtError(options: { if (instance?.$props) { const sentryClient = getClient(); - const sentryOptions = sentryClient ? (sentryClient.getOptions() as ClientOptions & VueOptions) : null; + // `attachProps` is defined in the Vue integration options, but the type is not exported from @sentry/vue, as it's only used internally. + const sentryOptions = sentryClient ? (sentryClient.getOptions() as ClientOptions & { attachProps: boolean }) : null; // `attachProps` is enabled by default and props should only not be attached if explicitly disabled (see DEFAULT_CONFIG in `vueIntegration`). // oxlint-disable-next-line typescript/no-unsafe-member-access diff --git a/yarn.lock b/yarn.lock index 65a65f8096c6..52b039b45249 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14475,7 +14475,7 @@ debug@2, debug@2.6.9, debug@^2.1.0, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, de dependencies: ms "2.0.0" -debug@4, debug@4.x, debug@^4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.1, debug@^4.4.3: +debug@4, debug@4.x, debug@^4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.1, debug@^4.4.3, debug@~4.4.1: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== From f41aa0e600f111681ffd3a38f6b27ea1c12062c3 Mon Sep 17 00:00:00 2001 From: s1gr1d <32902192+s1gr1d@users.noreply.github.com> Date: Fri, 20 Mar 2026 14:34:35 +0100 Subject: [PATCH 3/4] remove previous handler --- .../nuxt/src/runtime/plugins/sentry.server.ts | 35 ++----------------- 1 file changed, 2 insertions(+), 33 deletions(-) diff --git a/packages/nuxt/src/runtime/plugins/sentry.server.ts b/packages/nuxt/src/runtime/plugins/sentry.server.ts index 5625c2f571b2..e3bf7854e673 100644 --- a/packages/nuxt/src/runtime/plugins/sentry.server.ts +++ b/packages/nuxt/src/runtime/plugins/sentry.server.ts @@ -1,11 +1,5 @@ -import { - debug, - flushIfServerless, - getDefaultIsolationScope, - getIsolationScope, - withIsolationScope, -} from '@sentry/core'; -import type { EventHandler, H3Event } from 'h3'; +import { debug } from '@sentry/core'; +import type { H3Event } from 'h3'; import type { NitroAppPlugin } from 'nitropack'; import type { NuxtRenderHTMLContext } from 'nuxt/app'; import { sentryCaptureErrorHook } from '../hooks/captureErrorHook'; @@ -13,8 +7,6 @@ import { updateRouteBeforeResponse } from '../hooks/updateRouteBeforeResponse'; import { addSentryTracingMetaTags } from '../utils'; export default (nitroApp => { - nitroApp.h3App.handler = patchEventHandler(nitroApp.h3App.handler); - nitroApp.hooks.hook('beforeResponse', updateRouteBeforeResponse); nitroApp.hooks.hook('error', sentryCaptureErrorHook); @@ -37,26 +29,3 @@ export default (nitroApp => { } }); }) satisfies NitroAppPlugin; - -function patchEventHandler(handler: EventHandler): EventHandler { - return new Proxy(handler, { - async apply(handlerTarget, handlerThisArg, handlerArgs: Parameters) { - const isolationScope = getIsolationScope(); - const newIsolationScope = isolationScope === getDefaultIsolationScope() ? isolationScope.clone() : isolationScope; - - debug.log( - `Patched h3 event handler. ${ - isolationScope === newIsolationScope ? 'Using existing' : 'Created new' - } isolation scope.`, - ); - - return withIsolationScope(newIsolationScope, async () => { - try { - return await handlerTarget.apply(handlerThisArg, handlerArgs); - } finally { - await flushIfServerless(); - } - }); - }, - }); -} From c55fac92d69d7364cbaa04d359e436ec8894f0d1 Mon Sep 17 00:00:00 2001 From: s1gr1d <32902192+s1gr1d@users.noreply.github.com> Date: Fri, 20 Mar 2026 15:19:03 +0100 Subject: [PATCH 4/4] change to oxlint --- packages/nuxt/src/runtime/plugins/handler.server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nuxt/src/runtime/plugins/handler.server.ts b/packages/nuxt/src/runtime/plugins/handler.server.ts index e874ed7ca3a3..a919786e39c7 100644 --- a/packages/nuxt/src/runtime/plugins/handler.server.ts +++ b/packages/nuxt/src/runtime/plugins/handler.server.ts @@ -7,7 +7,7 @@ import { patchEventHandler } from '../utils/patchEventHandler'; */ export default ((nitroApp: NitroApp) => { if (nitroApp?.h3?.handler) { - // eslint-disable-next-line @typescript-eslint/unbound-method + // oxlint-disable-next-line @typescript-eslint/unbound-method nitroApp.h3.handler = patchEventHandler(nitroApp.h3.handler); } }) satisfies NitroAppPlugin;