Skip to content

Commit a20ebef

Browse files
committed
Add WeakMap
1 parent b9c9cc0 commit a20ebef

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

packages/nuxt/src/runtime/plugins/sentry-cloudflare.server.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@ function isEventType(event: unknown): event is CfEventType {
5252
);
5353
}
5454

55-
const TRACE_DATA_KEY = '__sentryTraceData';
56-
5755
/**
5856
* Sentry Cloudflare Nitro plugin for when using the "cloudflare-pages" preset in Nuxt.
5957
* This plugin automatically sets up Sentry error monitoring and performance tracking for Cloudflare Pages projects.
@@ -89,6 +87,8 @@ const TRACE_DATA_KEY = '__sentryTraceData';
8987
export const sentryCloudflareNitroPlugin =
9088
(optionsOrFn: CloudflareOptions | ((nitroApp: NitroApp) => CloudflareOptions)): NitroAppPlugin =>
9189
(nitroApp: NitroApp): void => {
90+
const traceDataMap = new WeakMap<object, ReturnType<typeof getTraceData>>();
91+
9292
nitroApp.localFetch = new Proxy(nitroApp.localFetch, {
9393
async apply(handlerTarget, handlerThisArg, handlerArgs: [string, unknown]) {
9494
setAsyncLocalStorageAsyncContextStrategy();
@@ -122,10 +122,9 @@ export const sentryCloudflareNitroPlugin =
122122

123123
const traceData = getTraceData();
124124
if (traceData && Object.keys(traceData).length > 0) {
125-
// Storing trace data in the event context for later use in HTML meta-tags (enables correct connection of parent/child span relationships)
126-
// @ts-expect-error Storing a new key in the event context
127-
event.context[TRACE_DATA_KEY] = traceData;
128-
logger.log('Stored trace data in the event context.');
125+
// Storing trace data in the WeakMap using event.context.cf as key for later use in HTML meta-tags
126+
traceDataMap.set(event.context.cf, traceData);
127+
logger.log('Stored trace data for later use in HTML meta-tags: ', traceData);
129128
}
130129

131130
logger.log(
@@ -142,10 +141,10 @@ export const sentryCloudflareNitroPlugin =
142141

143142
// @ts-expect-error - 'render:html' is a valid hook name in the Nuxt context
144143
nitroApp.hooks.hook('render:html', (html: NuxtRenderHTMLContext, { event }: { event: H3Event }) => {
145-
const storedTraceData = event.context[TRACE_DATA_KEY] as ReturnType<typeof getTraceData> | undefined;
144+
const storedTraceData = event?.context?.cf ? traceDataMap.get(event.context.cf) : undefined;
146145

147146
if (storedTraceData && Object.keys(storedTraceData).length > 0) {
148-
logger.log('Using stored trace data from event context for meta tags.');
147+
logger.log('Using stored trace data for HTML meta-tags: ', storedTraceData);
149148
addSentryTracingMetaTags(html.head, storedTraceData);
150149
} else {
151150
addSentryTracingMetaTags(html.head);

0 commit comments

Comments
 (0)