From d4c65340455ec1362f3482f35769648c870f17bd Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 15:12:29 +0000 Subject: [PATCH 1/4] Initial plan From e10aa9d337d6d6ef8f64bd42f700cb15017c644d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 15:17:44 +0000 Subject: [PATCH 2/4] Make +sentry async with getGlobalContext() Co-authored-by: brillout <1005638+brillout@users.noreply.github.com> --- packages/vike-react-sentry/README.md | 19 ++++++++++++------- .../src/integration/+config.ts | 4 ++-- .../onCreateGlobalContext.client.ts | 13 +++++++------ .../onCreateGlobalContext.server.ts | 13 +++++++------ 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/packages/vike-react-sentry/README.md b/packages/vike-react-sentry/README.md index 24fe9dfd..19c266da 100644 --- a/packages/vike-react-sentry/README.md +++ b/packages/vike-react-sentry/README.md @@ -81,13 +81,18 @@ Sentry SDK configuration options. // pages/+sentry.js // Environment: client, server +import { getGlobalContext } from 'vike/server' // or 'vike/client' + // Shared configuration (client & server) -export default (globalContext) => ({ - tracesSampleRate: 1.0, // Capture 100% of transactions for tracing - debug: true, // Enable debug mode during development - environment: globalContext.isProduction ? 'production' : 'development', -}) +export default async () => { + const globalContext = await getGlobalContext() + return { + tracesSampleRate: 1.0, // Capture 100% of transactions for tracing + debug: true, // Enable debug mode during development + environment: globalContext.isProduction ? 'production' : 'development', + } +} ``` ```js @@ -96,7 +101,7 @@ export default (globalContext) => ({ // Client-only configuration -export default (globalContext) => ({ +export default async () => ({ integrations: [ // Add custom browser integrations here ], @@ -109,7 +114,7 @@ export default (globalContext) => ({ // Server-only configuration -export default (globalContext) => ({ +export default async () => ({ integrations: [ // Add custom Node.js integrations here ], diff --git a/packages/vike-react-sentry/src/integration/+config.ts b/packages/vike-react-sentry/src/integration/+config.ts index 2badb928..e61add91 100644 --- a/packages/vike-react-sentry/src/integration/+config.ts +++ b/packages/vike-react-sentry/src/integration/+config.ts @@ -48,12 +48,12 @@ const config = { declare global { namespace Vike { interface Config { - sentry?: SentryOptions | ((globalContext: GlobalContext) => SentryOptions) + sentry?: SentryOptions | (() => SentryOptions | Promise) sentryVite?: SentryVitePluginOptions } interface ConfigResolved { - sentry?: (SentryOptions | ((globalContext: GlobalContext) => SentryOptions))[] + sentry?: (SentryOptions | (() => SentryOptions | Promise))[] sentryVite?: SentryVitePluginOptions } } diff --git a/packages/vike-react-sentry/src/integration/onCreateGlobalContext.client.ts b/packages/vike-react-sentry/src/integration/onCreateGlobalContext.client.ts index d90d2c10..b607ef13 100644 --- a/packages/vike-react-sentry/src/integration/onCreateGlobalContext.client.ts +++ b/packages/vike-react-sentry/src/integration/onCreateGlobalContext.client.ts @@ -8,12 +8,13 @@ import { resolveDsn } from '../utils/resolveDsn.js' import { TRACE_DEFAULT_SAMPLE_RATE } from './constants.js' async function onCreateGlobalContext(globalContext: GlobalContextClient): Promise { - const clientConfig = (globalContext.config.sentry || []).reverse().reduce((acc, curr) => { - if (typeof curr === 'function') { - curr = curr(globalContext) - } - return { ...acc, ...curr } - }, {}) as SentryOptions + const sentryConfigs = globalContext.config.sentry || [] + + const clientConfig: SentryOptions = {} + for (const curr of sentryConfigs.reverse()) { + const resolvedConfig = typeof curr === 'function' ? await curr() : curr + Object.assign(clientConfig, resolvedConfig) + } if (!SentryReact.getClient()) { SentryReact.init(resolveSentryClientSettings(clientConfig)) diff --git a/packages/vike-react-sentry/src/integration/onCreateGlobalContext.server.ts b/packages/vike-react-sentry/src/integration/onCreateGlobalContext.server.ts index 851d982d..f6af23b0 100644 --- a/packages/vike-react-sentry/src/integration/onCreateGlobalContext.server.ts +++ b/packages/vike-react-sentry/src/integration/onCreateGlobalContext.server.ts @@ -8,12 +8,13 @@ import { resolveDsn } from '../utils/resolveDsn.js' import { TRACE_DEFAULT_SAMPLE_RATE } from './constants.js' async function onCreateGlobalContext(globalContext: GlobalContextServer): Promise { - const serverConfig = (globalContext.config.sentry || []).reverse().reduce((acc, curr) => { - if (typeof curr === 'function') { - curr = curr(globalContext) - } - return { ...acc, ...curr } - }, {}) as SentryOptions + const sentryConfigs = globalContext.config.sentry || [] + + const serverConfig: SentryOptions = {} + for (const curr of sentryConfigs.reverse()) { + const resolvedConfig = typeof curr === 'function' ? await curr() : curr + Object.assign(serverConfig, resolvedConfig) + } if (!SentryNode.getClient()) { SentryNode.init(resolveSentryServerSettings(serverConfig)) From 0d736779d9d1b79ddb3ed82ae88c5c09c7a7fd45 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 15:19:14 +0000 Subject: [PATCH 3/4] Improve README examples based on code review Co-authored-by: brillout <1005638+brillout@users.noreply.github.com> --- packages/vike-react-sentry/README.md | 38 +++++++++++++++++++--------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/packages/vike-react-sentry/README.md b/packages/vike-react-sentry/README.md index 19c266da..ff48c63a 100644 --- a/packages/vike-react-sentry/README.md +++ b/packages/vike-react-sentry/README.md @@ -77,13 +77,13 @@ See [examples/sentry](https://github.com/vikejs/vike-react/tree/main/examples/se Sentry SDK configuration options. -```js -// pages/+sentry.js -// Environment: client, server +**Example 1: Using `getGlobalContext()` for dynamic configuration** -import { getGlobalContext } from 'vike/server' // or 'vike/client' +```js +// pages/+sentry.server.js +// Environment: server -// Shared configuration (client & server) +import { getGlobalContext } from 'vike/server' export default async () => { const globalContext = await getGlobalContext() @@ -99,26 +99,40 @@ export default async () => { // pages/+sentry.client.js // Environment: client -// Client-only configuration +import { getGlobalContext } from 'vike/client' + +export default async () => { + const globalContext = await getGlobalContext() + return { + tracesSampleRate: 1.0, + debug: true, + environment: globalContext.isProduction ? 'production' : 'development', + } +} +``` + +**Example 2: Static configuration** + +```js +// pages/+sentry.client.js +// Environment: client -export default async () => ({ +export default { integrations: [ // Add custom browser integrations here ], -}) +} ``` ```js // pages/+sentry.server.js // Environment: server -// Server-only configuration - -export default async () => ({ +export default { integrations: [ // Add custom Node.js integrations here ], -}) +} ``` > [!NOTE] From 330dcef1e96f517f1c5fe2e02bcbcf5293e1a8ac Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 15:20:15 +0000 Subject: [PATCH 4/4] Fix array mutation in onCreateGlobalContext Co-authored-by: brillout <1005638+brillout@users.noreply.github.com> --- .../src/integration/onCreateGlobalContext.client.ts | 2 +- .../src/integration/onCreateGlobalContext.server.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vike-react-sentry/src/integration/onCreateGlobalContext.client.ts b/packages/vike-react-sentry/src/integration/onCreateGlobalContext.client.ts index b607ef13..f4530fbb 100644 --- a/packages/vike-react-sentry/src/integration/onCreateGlobalContext.client.ts +++ b/packages/vike-react-sentry/src/integration/onCreateGlobalContext.client.ts @@ -11,7 +11,7 @@ async function onCreateGlobalContext(globalContext: GlobalContextClient): Promis const sentryConfigs = globalContext.config.sentry || [] const clientConfig: SentryOptions = {} - for (const curr of sentryConfigs.reverse()) { + for (const curr of [...sentryConfigs].reverse()) { const resolvedConfig = typeof curr === 'function' ? await curr() : curr Object.assign(clientConfig, resolvedConfig) } diff --git a/packages/vike-react-sentry/src/integration/onCreateGlobalContext.server.ts b/packages/vike-react-sentry/src/integration/onCreateGlobalContext.server.ts index f6af23b0..e8d14c92 100644 --- a/packages/vike-react-sentry/src/integration/onCreateGlobalContext.server.ts +++ b/packages/vike-react-sentry/src/integration/onCreateGlobalContext.server.ts @@ -11,7 +11,7 @@ async function onCreateGlobalContext(globalContext: GlobalContextServer): Promis const sentryConfigs = globalContext.config.sentry || [] const serverConfig: SentryOptions = {} - for (const curr of sentryConfigs.reverse()) { + for (const curr of [...sentryConfigs].reverse()) { const resolvedConfig = typeof curr === 'function' ? await curr() : curr Object.assign(serverConfig, resolvedConfig) }