From 5850f2a173d357f65ff4b70f310e58c41b32c3d5 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Thu, 10 Oct 2024 08:15:14 +0000 Subject: [PATCH 1/2] fix(nextjs): Fix resolution of request storage shim fallback --- packages/nextjs/package.json | 8 ++++++++ packages/nextjs/src/config/loaders/wrappingLoader.ts | 2 +- .../src/config/templates/requestAsyncStorageShim.ts | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index 0e5906f92908..d992a8c46f8e 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -46,6 +46,14 @@ "node": "./build/cjs/index.server.js", "import": "./build/esm/index.server.js" }, + "./async-storage-shim": { + "import": { + "default": "./build/esm/config/templates/requestAsyncStorageShim.js" + }, + "require": { + "default": "./build/cjs/config/templates/requestAsyncStorageShim.js" + } + }, "./import": { "import": { "default": "./build/import-hook.mjs" diff --git a/packages/nextjs/src/config/loaders/wrappingLoader.ts b/packages/nextjs/src/config/loaders/wrappingLoader.ts index ea7828497f95..d3c1d62c9330 100644 --- a/packages/nextjs/src/config/loaders/wrappingLoader.ts +++ b/packages/nextjs/src/config/loaders/wrappingLoader.ts @@ -174,7 +174,7 @@ export default function wrappingLoader( } templateCode = templateCode.replace( /__SENTRY_NEXTJS_REQUEST_ASYNC_STORAGE_SHIM__/g, - '@sentry/nextjs/esm/config/templates/requestAsyncStorageShim.js', + '@sentry/nextjs/async-storage-shim', ); } diff --git a/packages/nextjs/src/config/templates/requestAsyncStorageShim.ts b/packages/nextjs/src/config/templates/requestAsyncStorageShim.ts index 4acb61e78444..ca841c867988 100644 --- a/packages/nextjs/src/config/templates/requestAsyncStorageShim.ts +++ b/packages/nextjs/src/config/templates/requestAsyncStorageShim.ts @@ -7,3 +7,5 @@ export interface RequestAsyncStorage { } | undefined; } + +export {}; From b9dc460fa40c8e117ef2f9c8da234b43309393b4 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Thu, 10 Oct 2024 08:45:57 +0000 Subject: [PATCH 2/2] export stuff --- .../nextjs/src/config/templates/requestAsyncStorageShim.ts | 3 ++- .../nextjs/src/config/templates/routeHandlerWrapperTemplate.ts | 2 +- .../src/config/templates/serverComponentWrapperTemplate.ts | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/nextjs/src/config/templates/requestAsyncStorageShim.ts b/packages/nextjs/src/config/templates/requestAsyncStorageShim.ts index ca841c867988..483d00341312 100644 --- a/packages/nextjs/src/config/templates/requestAsyncStorageShim.ts +++ b/packages/nextjs/src/config/templates/requestAsyncStorageShim.ts @@ -8,4 +8,5 @@ export interface RequestAsyncStorage { | undefined; } -export {}; +export const requestAsyncStorage = undefined; +export const workUnitAsyncStorage = undefined; diff --git a/packages/nextjs/src/config/templates/routeHandlerWrapperTemplate.ts b/packages/nextjs/src/config/templates/routeHandlerWrapperTemplate.ts index 346b2c29a784..1cf6e9003c6c 100644 --- a/packages/nextjs/src/config/templates/routeHandlerWrapperTemplate.ts +++ b/packages/nextjs/src/config/templates/routeHandlerWrapperTemplate.ts @@ -28,7 +28,7 @@ function wrapHandler(handler: T, method: 'GET' | 'POST' | 'PUT' | 'PATCH' | ' // We try-catch here just in case the API around `requestAsyncStorage` changes unexpectedly since it is not public API try { // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - const requestAsyncStore = requestAsyncStorage.getStore() as ReturnType; + const requestAsyncStore = requestAsyncStorage?.getStore() as ReturnType; sentryTraceHeader = requestAsyncStore?.headers.get('sentry-trace') ?? undefined; baggageHeader = requestAsyncStore?.headers.get('baggage') ?? undefined; headers = requestAsyncStore?.headers; diff --git a/packages/nextjs/src/config/templates/serverComponentWrapperTemplate.ts b/packages/nextjs/src/config/templates/serverComponentWrapperTemplate.ts index 717826e3a081..fb19383cd899 100644 --- a/packages/nextjs/src/config/templates/serverComponentWrapperTemplate.ts +++ b/packages/nextjs/src/config/templates/serverComponentWrapperTemplate.ts @@ -34,7 +34,7 @@ if (typeof serverComponent === 'function') { // We try-catch here just in `requestAsyncStorage` is undefined since it may not be defined try { - const requestAsyncStore = requestAsyncStorage.getStore(); + const requestAsyncStore = requestAsyncStorage?.getStore(); sentryTraceHeader = requestAsyncStore?.headers.get('sentry-trace') ?? undefined; baggageHeader = requestAsyncStore?.headers.get('baggage') ?? undefined; headers = requestAsyncStore?.headers;