-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(deps): update dependency @sentry/node to v8.55.0 #172
base: main
Are you sure you want to change the base?
Conversation
b237d1f
to
c3e8b9f
Compare
[puLL-Merge] - getsentry/[email protected] Diffdiff --git .craft.yml .craft.yml
index ffc85c13c90b..ec096880c0d6 100644
--- .craft.yml
+++ .craft.yml
@@ -146,8 +146,7 @@ targets:
# whenever we release a new v8 version—otherwise we would overwrite the current major lambda layer.
- name: aws-lambda-layer
includeNames: /^sentry-node-serverless-\d+.\d+.\d+(-(beta|alpha|rc)\.\d+)?\.zip$/
- # TODO(v9): change to `SentryNodeServerlessSDKv8` once v9 is released
- layerName: SentryNodeServerlessSDK
+ layerName: SentryNodeServerlessSDKv8
compatibleRuntimes:
- name: node
versions:
diff --git CHANGELOG.md CHANGELOG.md
index 7e248963972f..868f05d945f3 100644
--- CHANGELOG.md
+++ CHANGELOG.md
@@ -10,6 +10,29 @@
- "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott
+## 8.55.0
+
+### Important Changes
+
+- **chore(ci/v8): Switch lambda layer name to `SentryNodeServerlessSDKv8` ([#15351](https://github.com/getsentry/sentry-javascript/pull/15351))**
+
+The `SentryNodeServerlessSDK` AWS Lambda Layer will stop receiving updates.
+If you intend to stay on `v8` and receive updates use `SentryNodeServerlessSDKv8` instead.
+
+### Other Changes
+
+- feat(flags/v8): add Statsig browser integration ([#15347](https://github.com/getsentry/sentry-javascript/pull/15347))
+- feat(v8/node): Add missing `vercelAIIntegration` export ([#15339](https://github.com/getsentry/sentry-javascript/pull/15339))
+- feat(v8/nuxt): Add `enabled` to disable Sentry module ([#15337](https://github.com/getsentry/sentry-javascript/pull/15337)) (#15381)
+- feat(v8/vue): Support Pinia v3 ([#15384](https://github.com/getsentry/sentry-javascript/pull/15384))
+- fix(astro): Add vue to `registerEsmLoaderHooks` ([#15352](https://github.com/getsentry/sentry-javascript/pull/15352))
+- fix(react/v8): Support lazy-loaded routes and components ([#15281](https://github.com/getsentry/sentry-javascript/pull/15281))
+- fix(v8/nuxt): Detect Azure Function runtime for flushing with timeout ([#15297](https://github.com/getsentry/sentry-javascript/pull/15297))
+- fix(v8/solidstart): Do not copy release-injection map file ([#15304](https://github.com/getsentry/sentry-javascript/pull/15304))
+- fix(v8/svelte): Guard component tracking `beforeUpdate` call ([#15262](https://github.com/getsentry/sentry-javascript/pull/15262))
+
+Work in this release was contributed by @aryanvdesh. Thank you for your contribution!
+
## 8.54.0
- feat(v8/deps): Upgrade all OpenTelemetry dependencies ([#15098](https://github.com/getsentry/sentry-javascript/pull/15098))
diff --git dev-packages/browser-integration-tests/package.json dev-packages/browser-integration-tests/package.json
index 5dadcfff7c6f..c171678d2653 100644
--- dev-packages/browser-integration-tests/package.json
+++ dev-packages/browser-integration-tests/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry-internal/browser-integration-tests",
- "version": "8.54.0",
+ "version": "8.55.0",
"main": "index.js",
"license": "MIT",
"engines": {
@@ -43,7 +43,7 @@
"@babel/preset-typescript": "^7.16.7",
"@playwright/test": "^1.44.1",
"@sentry-internal/rrweb": "2.31.0",
- "@sentry/browser": "8.54.0",
+ "@sentry/browser": "8.55.0",
"axios": "1.7.7",
"babel-loader": "^8.2.2",
"html-webpack-plugin": "^5.5.0",
diff --git a/dev-packages/browser-integration-tests/suites/integrations/featureFlags/constants.ts b/dev-packages/browser-integration-tests/suites/integrations/featureFlags/constants.ts
new file mode 100644
index 000000000000..680105d242e5
--- /dev/null
+++ dev-packages/browser-integration-tests/suites/integrations/featureFlags/constants.ts
@@ -0,0 +1 @@
+export const FLAG_BUFFER_SIZE = 100; // Corresponds to constant in featureFlags.ts, in browser utils.
diff --git dev-packages/browser-integration-tests/suites/integrations/featureFlags/featureFlags/basic/test.ts dev-packages/browser-integration-tests/suites/integrations/featureFlags/featureFlags/basic/test.ts
index ed909b19d1fa..5cf63a4914ed 100644
--- dev-packages/browser-integration-tests/suites/integrations/featureFlags/featureFlags/basic/test.ts
+++ dev-packages/browser-integration-tests/suites/integrations/featureFlags/featureFlags/basic/test.ts
@@ -4,7 +4,7 @@ import { sentryTest } from '../../../../../utils/fixtures';
import { envelopeRequestParser, shouldSkipFeatureFlagsTest, waitForErrorRequest } from '../../../../../utils/helpers';
-const FLAG_BUFFER_SIZE = 100; // Corresponds to constant in featureFlags.ts, in browser utils.
+import { FLAG_BUFFER_SIZE } from '../../constants';
sentryTest('Basic test with eviction, update, and no async tasks', async ({ getLocalTestUrl, page }) => {
if (shouldSkipFeatureFlagsTest()) {
diff --git dev-packages/browser-integration-tests/suites/integrations/featureFlags/launchdarkly/basic/test.ts dev-packages/browser-integration-tests/suites/integrations/featureFlags/launchdarkly/basic/test.ts
index e97cb70761ba..d0adafc3d101 100644
--- dev-packages/browser-integration-tests/suites/integrations/featureFlags/launchdarkly/basic/test.ts
+++ dev-packages/browser-integration-tests/suites/integrations/featureFlags/launchdarkly/basic/test.ts
@@ -4,7 +4,7 @@ import { sentryTest } from '../../../../../utils/fixtures';
import { envelopeRequestParser, shouldSkipFeatureFlagsTest, waitForErrorRequest } from '../../../../../utils/helpers';
-const FLAG_BUFFER_SIZE = 100; // Corresponds to constant in featureFlags.ts, in browser utils.
+import { FLAG_BUFFER_SIZE } from '../../constants';
sentryTest('Basic test with eviction, update, and no async tasks', async ({ getLocalTestUrl, page }) => {
if (shouldSkipFeatureFlagsTest()) {
diff --git dev-packages/browser-integration-tests/suites/integrations/featureFlags/openfeature/basic/test.ts dev-packages/browser-integration-tests/suites/integrations/featureFlags/openfeature/basic/test.ts
index a3de589677ea..21db2c0b7d85 100644
--- dev-packages/browser-integration-tests/suites/integrations/featureFlags/openfeature/basic/test.ts
+++ dev-packages/browser-integration-tests/suites/integrations/featureFlags/openfeature/basic/test.ts
@@ -4,7 +4,7 @@ import { sentryTest } from '../../../../../utils/fixtures';
import { envelopeRequestParser, shouldSkipFeatureFlagsTest, waitForErrorRequest } from '../../../../../utils/helpers';
-const FLAG_BUFFER_SIZE = 100; // Corresponds to constant in featureFlags.ts, in browser utils.
+import { FLAG_BUFFER_SIZE } from '../../constants';
sentryTest('Basic test with eviction, update, and no async tasks', async ({ getLocalTestUrl, page }) => {
if (shouldSkipFeatureFlagsTest()) {
diff --git dev-packages/browser-integration-tests/suites/integrations/featureFlags/openfeature/errorHook/test.ts dev-packages/browser-integration-tests/suites/integrations/featureFlags/openfeature/errorHook/test.ts
index 719782d0b0ab..bae111a5e6f5 100644
--- dev-packages/browser-integration-tests/suites/integrations/featureFlags/openfeature/errorHook/test.ts
+++ dev-packages/browser-integration-tests/suites/integrations/featureFlags/openfeature/errorHook/test.ts
@@ -4,7 +4,7 @@ import { sentryTest } from '../../../../../utils/fixtures';
import { envelopeRequestParser, shouldSkipFeatureFlagsTest, waitForErrorRequest } from '../../../../../utils/helpers';
-const FLAG_BUFFER_SIZE = 100; // Corresponds to constant in featureFlags.ts, in browser utils.
+import { FLAG_BUFFER_SIZE } from '../../constants';
sentryTest('Flag evaluation error hook', async ({ getLocalTestUrl, page }) => {
if (shouldSkipFeatureFlagsTest()) {
diff --git a/dev-packages/browser-integration-tests/suites/integrations/featureFlags/statsig/basic/test.ts b/dev-packages/browser-integration-tests/suites/integrations/featureFlags/statsig/basic/test.ts
new file mode 100644
index 000000000000..5b484b91ba22
--- /dev/null
+++ dev-packages/browser-integration-tests/suites/integrations/featureFlags/statsig/basic/test.ts
@@ -0,0 +1,51 @@
+import { expect } from '@playwright/test';
+
+import { sentryTest } from '../../../../../utils/fixtures';
+
+import { envelopeRequestParser, shouldSkipFeatureFlagsTest, waitForErrorRequest } from '../../../../../utils/helpers';
+
+import { FLAG_BUFFER_SIZE } from '../../constants';
+
+sentryTest('Basic test with eviction, update, and no async tasks', async ({ getLocalTestUrl, page }) => {
+ if (shouldSkipFeatureFlagsTest()) {
+ sentryTest.skip();
+ }
+
+ await page.route('https://dsn.ingest.sentry.io/**/*', route => {
+ return route.fulfill({
+ status: 200,
+ contentType: 'application/json',
+ body: JSON.stringify({ id: 'test-id' }),
+ });
+ });
+
+ const url = await getLocalTestUrl({ testDir: __dirname, skipDsnRouteHandler: true });
+ await page.goto(url);
+
+ await page.evaluate(bufferSize => {
+ const client = (window as any).statsigClient;
+ for (let i = 1; i <= bufferSize; i++) {
+ client.checkGate(`feat${i}`); // values default to false
+ }
+
+ client.setMockGateValue(`feat${bufferSize + 1}`, true);
+ client.checkGate(`feat${bufferSize + 1}`); // eviction
+
+ client.setMockGateValue('feat3', true);
+ client.checkGate('feat3'); // update
+ }, FLAG_BUFFER_SIZE);
+
+ const reqPromise = waitForErrorRequest(page);
+ await page.locator('#error').click();
+ const req = await reqPromise;
+ const event = envelopeRequestParser(req);
+
+ const expectedFlags = [{ flag: 'feat2', result: false }];
+ for (let i = 4; i <= FLAG_BUFFER_SIZE; i++) {
+ expectedFlags.push({ flag: `feat${i}`, result: false });
+ }
+ expectedFlags.push({ flag: `feat${FLAG_BUFFER_SIZE + 1}`, result: true });
+ expectedFlags.push({ flag: 'feat3', result: true });
+
+ expect(event.contexts?.flags?.values).toEqual(expectedFlags);
+});
diff --git a/dev-packages/browser-integration-tests/suites/integrations/featureFlags/statsig/init.js b/dev-packages/browser-integration-tests/suites/integrations/featureFlags/statsig/init.js
new file mode 100644
index 000000000000..61d00587f4c6
--- /dev/null
+++ dev-packages/browser-integration-tests/suites/integrations/featureFlags/statsig/init.js
@@ -0,0 +1,35 @@
+import * as Sentry from '@sentry/browser';
+
+class MockStatsigClient {
+ constructor() {
+ this._gateEvaluationListeners = [];
+ this._mockGateValues = {};
+ }
+
+ on(event, listener) {
+ this._gateEvaluationListeners.push(listener);
+ }
+
+ checkGate(name) {
+ const value = this._mockGateValues[name] || false; // unknown features default to false.
+ this._gateEvaluationListeners.forEach(listener => {
+ listener({ gate: { name, value } });
+ });
+ return value;
+ }
+
+ setMockGateValue(name, value) {
+ this._mockGateValues[name] = value;
+ }
+}
+
+window.statsigClient = new MockStatsigClient();
+
+window.Sentry = Sentry;
+window.sentryStatsigIntegration = Sentry.statsigIntegration({ featureFlagClient: window.statsigClient });
+
+Sentry.init({
+ dsn: 'https://[email protected]/1337',
+ sampleRate: 1.0,
+ integrations: [window.sentryStatsigIntegration],
+});
diff --git a/dev-packages/browser-integration-tests/suites/integrations/featureFlags/statsig/subject.js b/dev-packages/browser-integration-tests/suites/integrations/featureFlags/statsig/subject.js
new file mode 100644
index 000000000000..e6697408128c
--- /dev/null
+++ dev-packages/browser-integration-tests/suites/integrations/featureFlags/statsig/subject.js
@@ -0,0 +1,3 @@
+document.getElementById('error').addEventListener('click', () => {
+ throw new Error('Button triggered error');
+});
diff --git a/dev-packages/browser-integration-tests/suites/integrations/featureFlags/statsig/template.html b/dev-packages/browser-integration-tests/suites/integrations/featureFlags/statsig/template.html
new file mode 100644
index 000000000000..9330c6c679f4
--- /dev/null
+++ dev-packages/browser-integration-tests/suites/integrations/featureFlags/statsig/template.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8" />
+ </head>
+ <body>
+ <button id="error">Throw Error</button>
+ </body>
+</html>
diff --git a/dev-packages/browser-integration-tests/suites/integrations/featureFlags/statsig/withScope/test.ts b/dev-packages/browser-integration-tests/suites/integrations/featureFlags/statsig/withScope/test.ts
new file mode 100644
index 000000000000..cf41767036b6
--- /dev/null
+++ dev-packages/browser-integration-tests/suites/integrations/featureFlags/statsig/withScope/test.ts
@@ -0,0 +1,69 @@
+import { expect } from '@playwright/test';
+
+import { sentryTest } from '../../../../../utils/fixtures';
+
+import { envelopeRequestParser, shouldSkipFeatureFlagsTest, waitForErrorRequest } from '../../../../../utils/helpers';
+
+import type { Scope } from '@sentry/browser';
+
+sentryTest('Flag evaluations in forked scopes are stored separately.', async ({ getLocalTestUrl, page }) => {
+ if (shouldSkipFeatureFlagsTest()) {
+ sentryTest.skip();
+ }
+
+ await page.route('https://dsn.ingest.sentry.io/**/*', route => {
+ return route.fulfill({
+ status: 200,
+ contentType: 'application/json',
+ body: JSON.stringify({ id: 'test-id' }),
+ });
+ });
+
+ const url = await getLocalTestUrl({ testDir: __dirname, skipDsnRouteHandler: true });
+ await page.goto(url);
+
+ const forkedReqPromise = waitForErrorRequest(page, event => !!event.tags?.isForked === true);
+ const mainReqPromise = waitForErrorRequest(page, event => !!event.tags?.isForked === false);
+
+ await page.evaluate(() => {
+ const Sentry = (window as any).Sentry;
+ const errorButton = document.querySelector('#error') as HTMLButtonElement;
+ const client = (window as any).statsigClient;
+
+ client.setMockGateValue('shared', true);
+ client.setMockGateValue('main', true);
+
+ client.checkGate('shared');
+
+ Sentry.withScope((scope: Scope) => {
+ client.setMockGateValue('forked', true);
+ client.setMockGateValue('shared', false); // override the value in the parent scope.
+
+ client.checkGate('forked');
+ client.checkGate('shared');
+ scope.setTag('isForked', true);
+ errorButton.click();
+ });
+
+ client.checkGate('main');
+ Sentry.getCurrentScope().setTag('isForked', false);
+ errorButton.click();
+ return true;
+ });
+
+ const forkedReq = await forkedReqPromise;
+ const forkedEvent = envelopeRequestParser(forkedReq);
+
+ const mainReq = await mainReqPromise;
+ const mainEvent = envelopeRequestParser(mainReq);
+
+ expect(forkedEvent.contexts?.flags?.values).toEqual([
+ { flag: 'forked', result: true },
+ { flag: 'shared', result: false },
+ ]);
+
+ expect(mainEvent.contexts?.flags?.values).toEqual([
+ { flag: 'shared', result: true },
+ { flag: 'main', result: true },
+ ]);
+});
diff --git dev-packages/browser-integration-tests/suites/integrations/featureFlags/unleash/basic/test.ts dev-packages/browser-integration-tests/suites/integrations/featureFlags/unleash/basic/test.ts
index 5bb72caddd24..7e8065dc6172 100644
--- dev-packages/browser-integration-tests/suites/integrations/featureFlags/unleash/basic/test.ts
+++ dev-packages/browser-integration-tests/suites/integrations/featureFlags/unleash/basic/test.ts
@@ -4,7 +4,7 @@ import { sentryTest } from '../../../../../utils/fixtures';
import { envelopeRequestParser, shouldSkipFeatureFlagsTest, waitForErrorRequest } from '../../../../../utils/helpers';
-const FLAG_BUFFER_SIZE = 100; // Corresponds to constant in featureFlags.ts, in browser utils.
+import { FLAG_BUFFER_SIZE } from '../../constants';
sentryTest('Basic test with eviction, update, and no async tasks', async ({ getLocalTestUrl, page }) => {
if (shouldSkipFeatureFlagsTest()) {
diff --git dev-packages/bundle-analyzer-scenarios/package.json dev-packages/bundle-analyzer-scenarios/package.json
index 48c1948947b3..c6e279791991 100644
--- dev-packages/bundle-analyzer-scenarios/package.json
+++ dev-packages/bundle-analyzer-scenarios/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry-internal/bundle-analyzer-scenarios",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Scenarios to test bundle analysis with",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/dev-packages/bundle-analyzer-scenarios",
diff --git dev-packages/clear-cache-gh-action/package.json dev-packages/clear-cache-gh-action/package.json
index 1b55f71e82b3..e2b754bf395f 100644
--- dev-packages/clear-cache-gh-action/package.json
+++ dev-packages/clear-cache-gh-action/package.json
@@ -1,7 +1,7 @@
{
"name": "@sentry-internal/clear-cache-gh-action",
"description": "An internal Github Action to clear GitHub caches.",
- "version": "8.54.0",
+ "version": "8.55.0",
"license": "MIT",
"engines": {
"node": ">=18"
diff --git dev-packages/e2e-tests/package.json dev-packages/e2e-tests/package.json
index e33e4ae03cd9..afc673902ead 100644
--- dev-packages/e2e-tests/package.json
+++ dev-packages/e2e-tests/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry-internal/e2e-tests",
- "version": "8.54.0",
+ "version": "8.55.0",
"license": "MIT",
"private": true,
"scripts": {
diff --git dev-packages/e2e-tests/test-applications/react-create-browser-router/src/index.tsx dev-packages/e2e-tests/test-applications/react-create-browser-router/src/index.tsx
index 88f8cfa502ec..c7ad16eebcf7 100644
--- dev-packages/e2e-tests/test-applications/react-create-browser-router/src/index.tsx
+++ dev-packages/e2e-tests/test-applications/react-create-browser-router/src/index.tsx
@@ -1,5 +1,5 @@
import * as Sentry from '@sentry/react';
-import React from 'react';
+import React, { lazy, Suspense } from 'react';
import ReactDOM from 'react-dom/client';
import {
RouterProvider,
@@ -42,6 +42,7 @@ Sentry.init({
});
const sentryCreateBrowserRouter = Sentry.wrapCreateBrowserRouterV6(createBrowserRouter);
+const LazyLoadedUser = lazy(() => import('./pages/LazyLoadedUser'));
const router = sentryCreateBrowserRouter(
[
@@ -49,6 +50,14 @@ const router = sentryCreateBrowserRouter(
path: '/',
element: <Index />,
},
+ {
+ path: '/lazy-loaded-user/*',
+ element: (
+ <Suspense fallback={<div>Loading...</div>}>
+ <LazyLoadedUser />
+ </Suspense>
+ ),
+ },
{
path: '/user/:id',
element: <User />,
diff --git dev-packages/e2e-tests/test-applications/react-create-browser-router/src/pages/Index.tsx dev-packages/e2e-tests/test-applications/react-create-browser-router/src/pages/Index.tsx
index d6b71a1d1279..12bfb12ec3a9 100644
--- dev-packages/e2e-tests/test-applications/react-create-browser-router/src/pages/Index.tsx
+++ dev-packages/e2e-tests/test-applications/react-create-browser-router/src/pages/Index.tsx
@@ -16,6 +16,9 @@ const Index = () => {
<Link to="/user/5" id="navigation">
navigate
</Link>
+ <Link to="/lazy-loaded-user/5/foo" id="lazy-navigation">
+ lazy navigate
+ </Link>
</>
);
};
diff --git a/dev-packages/e2e-tests/test-applications/react-create-browser-router/src/pages/LazyLoadedInnerRoute.tsx b/dev-packages/e2e-tests/test-applications/react-create-browser-router/src/pages/LazyLoadedInnerRoute.tsx
new file mode 100644
index 000000000000..1410df69124b
--- /dev/null
+++ dev-packages/e2e-tests/test-applications/react-create-browser-router/src/pages/LazyLoadedInnerRoute.tsx
@@ -0,0 +1,14 @@
+import * as Sentry from '@sentry/react';
+// biome-ignore lint/nursery/noUnusedImports: Need React import for JSX
+import * as React from 'react';
+import { Route, Routes } from 'react-router-dom';
+
+const SentryRoutes = Sentry.withSentryReactRouterV6Routing(Routes);
+
+const InnerRoute = () => (
+ <SentryRoutes>
+ <Route path=":innerId" element={<p id="content">I am a lazy loaded user</p>} />
+ </SentryRoutes>
+);
+
+export default InnerRoute;
diff --git a/dev-packages/e2e-tests/test-applications/react-create-browser-router/src/pages/LazyLoadedUser.tsx b/dev-packages/e2e-tests/test-applications/react-create-browser-router/src/pages/LazyLoadedUser.tsx
new file mode 100644
index 000000000000..636f99d9c8cb
--- /dev/null
+++ dev-packages/e2e-tests/test-applications/react-create-browser-router/src/pages/LazyLoadedUser.tsx
@@ -0,0 +1,23 @@
+import * as Sentry from '@sentry/react';
+import * as React from 'react';
+import { Route, Routes } from 'react-router-dom';
+
+const SentryRoutes = Sentry.withSentryReactRouterV6Routing(Routes);
+const InnerRoute = React.lazy(() => import('./LazyLoadedInnerRoute'));
+
+const LazyLoadedUser = () => {
+ return (
+ <SentryRoutes>
+ <Route
+ path=":id/*"
+ element={
+ <React.Suspense fallback={<p>Loading...</p>}>
+ <InnerRoute />
+ </React.Suspense>
+ }
+ />
+ </SentryRoutes>
+ );
+};
+
+export default LazyLoadedUser;
diff --git dev-packages/e2e-tests/test-applications/react-create-browser-router/tests/transactions.test.ts dev-packages/e2e-tests/test-applications/react-create-browser-router/tests/transactions.test.ts
index 5ecd098daf94..c35d731915d6 100644
--- dev-packages/e2e-tests/test-applications/react-create-browser-router/tests/transactions.test.ts
+++ dev-packages/e2e-tests/test-applications/react-create-browser-router/tests/transactions.test.ts
@@ -76,3 +76,105 @@ test('Captures a navigation transaction', async ({ page }) => {
expect(transactionEvent.spans).toEqual([]);
});
+
+test('Captures a lazy pageload transaction', async ({ page }) => {
+ const transactionEventPromise = waitForTransaction('react-create-browser-router', event => {
+ return event.contexts?.trace?.op === 'pageload';
+ });
+
+ await page.goto('/lazy-loaded-user/5/foo');
+
+ const transactionEvent = await transactionEventPromise;
+ expect(transactionEvent.contexts?.trace).toEqual({
+ data: expect.objectContaining({
+ 'sentry.idle_span_finish_reason': 'idleTimeout',
+ 'sentry.op': 'pageload',
+ 'sentry.origin': 'auto.pageload.react.reactrouter_v6',
+ 'sentry.sample_rate': 1,
+ 'sentry.source': 'route',
+ }),
+ op: 'pageload',
+ span_id: expect.stringMatching(/[a-f0-9]{16}/),
+ trace_id: expect.stringMatching(/[a-f0-9]{32}/),
+ origin: 'auto.pageload.react.reactrouter_v6',
+ });
+
+ expect(transactionEvent).toEqual(
+ expect.objectContaining({
+ transaction: '/lazy-loaded-user/:id/:innerId',
+ type: 'transaction',
+ transaction_info: {
+ source: 'route',
+ },
+ }),
+ );
+
+ expect(await page.innerText('id=content')).toContain('I am a lazy loaded user');
+
+ expect(transactionEvent.spans).toEqual(
+ expect.arrayContaining([
+ // This one is the outer lazy route
+ expect.objectContaining({
+ op: 'resource.script',
+ origin: 'auto.resource.browser.metrics',
+ }),
+ // This one is the inner lazy route
+ expect.objectContaining({
+ op: 'resource.script',
+ origin: 'auto.resource.browser.metrics',
+ }),
+ ]),
+ );
+});
+
+test('Captures a lazy navigation transaction', async ({ page }) => {
+ const transactionEventPromise = waitForTransaction('react-create-browser-router', event => {
+ return event.contexts?.trace?.op === 'navigation';
+ });
+
+ await page.goto('/');
+ const linkElement = page.locator('id=lazy-navigation');
+ await linkElement.click();
+
+ const transactionEvent = await transactionEventPromise;
+ expect(transactionEvent.contexts?.trace).toEqual({
+ data: expect.objectContaining({
+ 'sentry.idle_span_finish_reason': 'idleTimeout',
+ 'sentry.op': 'navigation',
+ 'sentry.origin': 'auto.navigation.react.reactrouter_v6',
+ 'sentry.sample_rate': 1,
+ 'sentry.source': 'route',
+ }),
+ op: 'navigation',
+ span_id: expect.stringMatching(/[a-f0-9]{16}/),
+ trace_id: expect.stringMatching(/[a-f0-9]{32}/),
+ origin: 'auto.navigation.react.reactrouter_v6',
+ });
+
+ expect(transactionEvent).toEqual(
+ expect.objectContaining({
+ transaction: '/lazy-loaded-user/:id/:innerId',
+ type: 'transaction',
+ transaction_info: {
+ source: 'route',
+ },
+ }),
+ );
+
+ expect(await page.innerText('id=content')).toContain('I am a lazy loaded user');
+
+ expect(transactionEvent.spans).toEqual(
+ expect.arrayContaining([
+ // This one is the outer lazy route
+ expect.objectContaining({
+ op: 'resource.script',
+ origin: 'auto.resource.browser.metrics',
+ }),
+ // This one is the inner lazy route
+ expect.objectContaining({
+ op: 'resource.script',
+ origin: 'auto.resource.browser.metrics',
+ }),
+ ]),
+ );
+});
diff --git dev-packages/e2e-tests/test-applications/vue-3/package.json dev-packages/e2e-tests/test-applications/vue-3/package.json
index 0cfe8f31a0eb..2a507ca4a871 100644
--- dev-packages/e2e-tests/test-applications/vue-3/package.json
+++ dev-packages/e2e-tests/test-applications/vue-3/package.json
@@ -16,7 +16,7 @@
},
"dependencies": {
"@sentry/vue": "latest || *",
- "pinia": "^2.2.3",
+ "pinia": "^3.0.0",
"vue": "^3.4.15",
"vue-router": "^4.2.5"
},
diff --git dev-packages/e2e-tests/test-applications/vue-3/src/stores/cart.ts dev-packages/e2e-tests/test-applications/vue-3/src/stores/cart.ts
index 7786c7f27cd9..2f406b19b5a6 100644
--- dev-packages/e2e-tests/test-applications/vue-3/src/stores/cart.ts
+++ dev-packages/e2e-tests/test-applications/vue-3/src/stores/cart.ts
@@ -1,7 +1,6 @@
import { acceptHMRUpdate, defineStore } from 'pinia';
-export const useCartStore = defineStore({
- id: 'cart',
+export const useCartStore = defineStore('cart', {
state: () => ({
rawItems: [] as string[],
}),
diff --git dev-packages/external-contributor-gh-action/package.json dev-packages/external-contributor-gh-action/package.json
index 9c11e947160e..9a155a59314e 100644
--- dev-packages/external-contributor-gh-action/package.json
+++ dev-packages/external-contributor-gh-action/package.json
@@ -1,7 +1,7 @@
{
"name": "@sentry-internal/external-contributor-gh-action",
"description": "An internal Github Action to add external contributors to the CHANGELOG.md file.",
- "version": "8.54.0",
+ "version": "8.55.0",
"license": "MIT",
"engines": {
"node": ">=18"
diff --git dev-packages/node-integration-tests/package.json dev-packages/node-integration-tests/package.json
index 7545243c8652..9c15af7396e2 100644
--- dev-packages/node-integration-tests/package.json
+++ dev-packages/node-integration-tests/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry-internal/node-integration-tests",
- "version": "8.54.0",
+ "version": "8.55.0",
"license": "MIT",
"engines": {
"node": ">=14.18"
@@ -31,9 +31,9 @@
"@nestjs/common": "10.4.6",
"@nestjs/core": "10.4.6",
"@nestjs/platform-express": "10.4.6",
- "@sentry/aws-serverless": "8.54.0",
- "@sentry/core": "8.54.0",
- "@sentry/node": "8.54.0",
+ "@sentry/aws-serverless": "8.55.0",
+ "@sentry/core": "8.55.0",
+ "@sentry/node": "8.55.0",
"@types/mongodb": "^3.6.20",
"@types/mysql": "^2.15.21",
"@types/pg": "^8.6.5",
diff --git dev-packages/rollup-utils/package.json dev-packages/rollup-utils/package.json
index 0158d94974c4..9d38026ea9d1 100644
--- dev-packages/rollup-utils/package.json
+++ dev-packages/rollup-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry-internal/rollup-utils",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Rollup utilities used at Sentry for the Sentry JavaScript SDK",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/rollup-utils",
diff --git dev-packages/size-limit-gh-action/package.json dev-packages/size-limit-gh-action/package.json
index 5c6107f725c4..2ccca306956c 100644
--- dev-packages/size-limit-gh-action/package.json
+++ dev-packages/size-limit-gh-action/package.json
@@ -1,7 +1,7 @@
{
"name": "@sentry-internal/size-limit-gh-action",
"description": "An internal Github Action to compare the current size of a PR against the one on develop.",
- "version": "8.54.0",
+ "version": "8.55.0",
"license": "MIT",
"engines": {
"node": ">=18"
diff --git dev-packages/test-utils/package.json dev-packages/test-utils/package.json
index a1bf82222bd6..39c58294934a 100644
--- dev-packages/test-utils/package.json
+++ dev-packages/test-utils/package.json
@@ -1,6 +1,6 @@
{
"private": true,
- "version": "8.54.0",
+ "version": "8.55.0",
"name": "@sentry-internal/test-utils",
"author": "Sentry",
"license": "MIT",
@@ -45,7 +45,7 @@
},
"devDependencies": {
"@playwright/test": "^1.44.1",
- "@sentry/core": "8.54.0"
+ "@sentry/core": "8.55.0"
},
"volta": {
"extends": "../../package.json"
diff --git lerna.json lerna.json
index e2fe0e986c20..fc8dd310ef21 100644
--- lerna.json
+++ lerna.json
@@ -1,5 +1,5 @@
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
- "version": "8.54.0",
+ "version": "8.55.0",
"npmClient": "yarn"
}
diff --git packages/angular/package.json packages/angular/package.json
index 0715eae655e7..7ad4230b83e5 100644
--- packages/angular/package.json
+++ packages/angular/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/angular",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for Angular",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/angular",
@@ -12,7 +12,8 @@
"type": "module",
"module": "build/fesm2015/sentry-angular.mjs",
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"peerDependencies": {
"@angular/common": ">= 14.x <= 19.x",
@@ -21,8 +22,8 @@
"rxjs": "^6.5.5 || ^7.x"
},
"dependencies": {
- "@sentry/browser": "8.54.0",
- "@sentry/core": "8.54.0",
+ "@sentry/browser": "8.55.0",
+ "@sentry/core": "8.55.0",
"tslib": "^2.4.1"
},
"devDependencies": {
diff --git packages/astro/package.json packages/astro/package.json
index b8461f46233c..bb9436d2b15f 100644
--- packages/astro/package.json
+++ packages/astro/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/astro",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for Astro",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/astro",
@@ -50,15 +50,16 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"peerDependencies": {
"astro": ">=3.x || >=4.0.0-beta || >=5.x"
},
"dependencies": {
- "@sentry/browser": "8.54.0",
- "@sentry/core": "8.54.0",
- "@sentry/node": "8.54.0",
+ "@sentry/browser": "8.55.0",
+ "@sentry/core": "8.55.0",
+ "@sentry/node": "8.55.0",
"@sentry/vite-plugin": "^2.22.6"
},
"devDependencies": {
diff --git packages/astro/src/index.server.ts packages/astro/src/index.server.ts
index ad7481816b4d..a7daa64fb6ee 100644
--- packages/astro/src/index.server.ts
+++ packages/astro/src/index.server.ts
@@ -139,6 +139,7 @@ export {
tediousIntegration,
trpcMiddleware,
updateSpanName,
+ vercelAIIntegration,
withActiveSpan,
withIsolationScope,
withMonitor,
diff --git packages/astro/src/server/sdk.ts packages/astro/src/server/sdk.ts
index 884747dcf72a..0f18e4b003c6 100644
--- packages/astro/src/server/sdk.ts
+++ packages/astro/src/server/sdk.ts
@@ -9,9 +9,30 @@ import { init as initNodeSdk } from '@sentry/node';
export function init(options: NodeOptions): NodeClient | undefined {
const opts = {
...options,
+ registerEsmLoaderHooks: mergeRegisterEsmLoaderHooks(options),
};
applySdkMetadata(opts, 'astro', ['astro', 'node']);
return initNodeSdk(opts);
}
+
+/**
+ * Adds /vue/ to the registerEsmLoaderHooks options and merges it with the old values in the array if one is defined.
+ * If the registerEsmLoaderHooks option is already a boolean, nothing is changed.
+ *
+ * Only exported for Testing purposes.
+ */
+export function mergeRegisterEsmLoaderHooks(options: NodeOptions): NodeOptions['registerEsmLoaderHooks'] {
+ if (typeof options.registerEsmLoaderHooks === 'object' && options.registerEsmLoaderHooks !== null) {
+ return {
+ // eslint-disable-next-line deprecation/deprecation
+ exclude: Array.isArray(options.registerEsmLoaderHooks.exclude)
+ ? // eslint-disable-next-line deprecation/deprecation
+ [...options.registerEsmLoaderHooks.exclude, /vue/]
+ : // eslint-disable-next-line deprecation/deprecation
+ options.registerEsmLoaderHooks.exclude ?? [/vue/],
+ };
+ }
+ return options.registerEsmLoaderHooks ?? { exclude: [/vue/] };
+}
diff --git packages/astro/test/server/sdk.test.ts packages/astro/test/server/sdk.test.ts
index 3e571628d29f..28ba95b6ba09 100644
--- packages/astro/test/server/sdk.test.ts
+++ packages/astro/test/server/sdk.test.ts
@@ -1,8 +1,8 @@
import * as SentryNode from '@sentry/node';
-import { SDK_VERSION } from '@sentry/node';
-import { vi } from 'vitest';
+import { type NodeOptions, SDK_VERSION } from '@sentry/node';
+import { afterEach, describe, expect, it, vi } from 'vitest';
-import { init } from '../../src/server/sdk';
+import { init, mergeRegisterEsmLoaderHooks } from '../../src/server/sdk';
const nodeInit = vi.spyOn(SentryNode, 'init');
@@ -43,4 +43,42 @@ describe('Sentry server SDK', () => {
expect(init({})).not.toBeUndefined();
});
});
+
+ describe('mergeRegisterEsmLoaderHooks', () => {
+ it('merges exclude array when registerEsmLoaderHooks is an object with an exclude array', () => {
+ const options: NodeOptions = {
+ registerEsmLoaderHooks: { exclude: [/test/] },
+ };
+ const result = mergeRegisterEsmLoaderHooks(options);
+ expect(result).toEqual({ exclude: [/test/, /vue/] });
+ });
+
+ it('sets exclude array when registerEsmLoaderHooks is an object without an exclude array', () => {
+ const options: NodeOptions = {
+ registerEsmLoaderHooks: {},
+ };
+ const result = mergeRegisterEsmLoaderHooks(options);
+ expect(result).toEqual({ exclude: [/vue/] });
+ });
+
+ it('returns boolean when registerEsmLoaderHooks is a boolean', () => {
+ const options1: NodeOptions = {
+ registerEsmLoaderHooks: true,
+ };
+ const result1 = mergeRegisterEsmLoaderHooks(options1);
+ expect(result1).toBe(true);
+
+ const options2: NodeOptions = {
+ registerEsmLoaderHooks: false,
+ };
+ const result2 = mergeRegisterEsmLoaderHooks(options2);
+ expect(result2).toBe(false);
+ });
+
+ it('sets exclude array when registerEsmLoaderHooks is undefined', () => {
+ const options: NodeOptions = {};
+ const result = mergeRegisterEsmLoaderHooks(options);
+ expect(result).toEqual({ exclude: [/vue/] });
+ });
+ });
});
diff --git packages/aws-serverless/package.json packages/aws-serverless/package.json
index cbf5f36c45b5..d90cedf2c27d 100644
--- packages/aws-serverless/package.json
+++ packages/aws-serverless/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/aws-serverless",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for AWS Lambda and AWS Serverless Environments",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/serverless",
@@ -68,8 +68,8 @@
"@opentelemetry/instrumentation": "^0.56.0",
"@opentelemetry/instrumentation-aws-lambda": "0.49.0",
"@opentelemetry/instrumentation-aws-sdk": "0.48.0",
- "@sentry/core": "8.54.0",
- "@sentry/node": "8.54.0",
+ "@sentry/core": "8.55.0",
+ "@sentry/node": "8.55.0",
"@types/aws-lambda": "^8.10.62"
},
"devDependencies": {
diff --git packages/aws-serverless/src/index.ts packages/aws-serverless/src/index.ts
index 5146fe423b45..12160ae3501a 100644
--- packages/aws-serverless/src/index.ts
+++ packages/aws-serverless/src/index.ts
@@ -127,6 +127,7 @@ export {
zodErrorsIntegration,
profiler,
amqplibIntegration,
+ vercelAIIntegration,
} from '@sentry/node';
export {
diff --git packages/browser-utils/package.json packages/browser-utils/package.json
index b401a2ef538d..74ec7c1f6c3b 100644
--- packages/browser-utils/package.json
+++ packages/browser-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry-internal/browser-utils",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Browser Utilities for all Sentry JavaScript SDKs",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/browser-utils",
@@ -39,7 +39,7 @@
"access": "public"
},
"dependencies": {
- "@sentry/core": "8.54.0"
+ "@sentry/core": "8.55.0"
},
"scripts": {
"build": "run-p build:transpile build:types",
diff --git packages/browser/package.json packages/browser/package.json
index 0716fe0904d1..16e8f18b991f 100644
--- packages/browser/package.json
+++ packages/browser/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/browser",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for browsers",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/browser",
@@ -36,17 +36,18 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"dependencies": {
- "@sentry-internal/browser-utils": "8.54.0",
- "@sentry-internal/feedback": "8.54.0",
- "@sentry-internal/replay": "8.54.0",
- "@sentry-internal/replay-canvas": "8.54.0",
- "@sentry/core": "8.54.0"
+ "@sentry-internal/browser-utils": "8.55.0",
+ "@sentry-internal/feedback": "8.55.0",
+ "@sentry-internal/replay": "8.55.0",
+ "@sentry-internal/replay-canvas": "8.55.0",
+ "@sentry/core": "8.55.0"
},
"devDependencies": {
- "@sentry-internal/integration-shims": "8.54.0",
+ "@sentry-internal/integration-shims": "8.55.0",
"fake-indexeddb": "^4.0.1"
},
"scripts": {
diff --git packages/browser/src/index.ts packages/browser/src/index.ts
index e6e089cbe04c..5ee3f150d0ab 100644
--- packages/browser/src/index.ts
+++ packages/browser/src/index.ts
@@ -76,3 +76,4 @@ export {
export { launchDarklyIntegration, buildLaunchDarklyFlagUsedHandler } from './integrations/featureFlags/launchdarkly';
export { openFeatureIntegration, OpenFeatureIntegrationHook } from './integrations/featureFlags/openfeature';
export { unleashIntegration } from './integrations/featureFlags/unleash';
+export { statsigIntegration } from './integrations/featureFlags/statsig';
diff --git a/packages/browser/src/integrations/featureFlags/statsig/index.ts b/packages/browser/src/integrations/featureFlags/statsig/index.ts
new file mode 100644
index 000000000000..a208e4c7dc0e
--- /dev/null
+++ packages/browser/src/integrations/featureFlags/statsig/index.ts
@@ -0,0 +1 @@
+export { statsigIntegration } from './integration';
diff --git a/packages/browser/src/integrations/featureFlags/statsig/integration.ts b/packages/browser/src/integrations/featureFlags/statsig/integration.ts
new file mode 100644
index 000000000000..7870f1250032
--- /dev/null
+++ packages/browser/src/integrations/featureFlags/statsig/integration.ts
@@ -0,0 +1,46 @@
+import type { Client, Event, EventHint, IntegrationFn } from '@sentry/core';
+
+import { defineIntegration } from '@sentry/core';
+import { copyFlagsFromScopeToEvent, insertFlagToScope } from '../../../utils/featureFlags';
+import type { FeatureGate, StatsigClient } from './types';
+
+/**
+ * Sentry integration for capturing feature flag evaluations from the Statsig js-client SDK.
+ *
+ * See the [feature flag documentation](https://develop.sentry.dev/sdk/expected-features/#feature-flags) for more information.
+ *
+ * @example
+ * \`\`\`
+ * import { StatsigClient } from '@statsig/js-client';
+ * import * as Sentry from '@sentry/browser';
+ *
+ * const statsigClient = new StatsigClient();
+ *
+ * Sentry.init({
+ * dsn: '___PUBLIC_DSN___',
+ * integrations: [Sentry.statsigIntegration({featureFlagClient: statsigClient})],
+ * });
+ *
+ * await statsigClient.initializeAsync(); // or statsigClient.initializeSync();
+ *
+ * const result = statsigClient.checkGate('my-feature-gate');
+ * Sentry.captureException(new Error('something went wrong'));
+ * ```
+ */
+export const statsigIntegration = defineIntegration(
+ ({ featureFlagClient: statsigClient }: { featureFlagClient: StatsigClient }) => {
+ return {
+ name: 'Statsig',
+
+ processEvent(event: Event, _hint: EventHint, _client: Client): Event {
+ return copyFlagsFromScopeToEvent(event);
+ },
+
+ setup() {
+ statsigClient.on('gate_evaluation', (event: { gate: FeatureGate }) => {
+ insertFlagToScope(event.gate.name, event.gate.value);
+ });
+ },
+ };
+ },
+) satisfies IntegrationFn;
diff --git a/packages/browser/src/integrations/featureFlags/statsig/types.ts b/packages/browser/src/integrations/featureFlags/statsig/types.ts
new file mode 100644
index 000000000000..ff0ea820d31f
--- /dev/null
+++ packages/browser/src/integrations/featureFlags/statsig/types.ts
@@ -0,0 +1,15 @@
+export type FeatureGate = {
+ readonly name: string;
+ readonly value: boolean;
+};
+
+type EventNameToEventDataMap = {
+ gate_evaluation: { gate: FeatureGate };
+};
+
+export interface StatsigClient {
+ on(
+ event: keyof EventNameToEventDataMap,
+ callback: (data: EventNameToEventDataMap[keyof EventNameToEventDataMap]) => void,
+ ): void;
+}
diff --git packages/bun/package.json packages/bun/package.json
index 00d7eb8b750a..c0b6987c70fe 100644
--- packages/bun/package.json
+++ packages/bun/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/bun",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for bun",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/bun",
@@ -36,12 +36,13 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"dependencies": {
- "@sentry/core": "8.54.0",
- "@sentry/node": "8.54.0",
- "@sentry/opentelemetry": "8.54.0"
+ "@sentry/core": "8.55.0",
+ "@sentry/node": "8.55.0",
+ "@sentry/opentelemetry": "8.55.0"
},
"devDependencies": {
"bun-types": "latest"
diff --git packages/bun/src/index.ts packages/bun/src/index.ts
index dcae6e98aa8d..f55648ef2415 100644
--- packages/bun/src/index.ts
+++ packages/bun/src/index.ts
@@ -147,6 +147,7 @@ export {
zodErrorsIntegration,
profiler,
amqplibIntegration,
+ vercelAIIntegration,
} from '@sentry/node';
export {
diff --git packages/cloudflare/package.json packages/cloudflare/package.json
index b1ff74862744..1e102d377e39 100644
--- packages/cloudflare/package.json
+++ packages/cloudflare/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/cloudflare",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for Cloudflare Workers and Pages",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/cloudflare",
@@ -39,7 +39,7 @@
"access": "public"
},
"dependencies": {
- "@sentry/core": "8.54.0"
+ "@sentry/core": "8.55.0"
},
"optionalDependencies": {
"@cloudflare/workers-types": "^4.x"
diff --git packages/core/package.json packages/core/package.json
index 887649741bec..32604f37610b 100644
--- packages/core/package.json
+++ packages/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/core",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Base implementation for all Sentry JavaScript SDKs",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/core",
@@ -36,7 +36,8 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"TODO(v9):": "Remove these dependencies",
"devDependencies": {
diff --git packages/deno/package.json packages/deno/package.json
index 271620f7cff2..ffd4baeaae2b 100644
--- packages/deno/package.json
+++ packages/deno/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/deno",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for Deno",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/deno",
@@ -18,13 +18,14 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"files": [
"/build"
],
"dependencies": {
- "@sentry/core": "8.54.0"
+ "@sentry/core": "8.55.0"
},
"devDependencies": {
"@rollup/plugin-typescript": "^11.1.5",
diff --git packages/ember/package.json packages/ember/package.json
index c0fc6d4d8273..6123f69957ea 100644
--- packages/ember/package.json
+++ packages/ember/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/ember",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for Ember.js",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/ember",
@@ -10,7 +10,8 @@
"ember-addon"
],
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"directories": {
"doc": "doc",
@@ -32,8 +33,8 @@
"dependencies": {
"@babel/core": "^7.24.4",
"@embroider/macros": "^1.16.0",
- "@sentry/browser": "8.54.0",
- "@sentry/core": "8.54.0",
+ "@sentry/browser": "8.55.0",
+ "@sentry/core": "8.55.0",
"ember-auto-import": "^2.7.2",
"ember-cli-babel": "^8.2.0",
"ember-cli-htmlbars": "^6.1.1",
diff --git packages/eslint-config-sdk/package.json packages/eslint-config-sdk/package.json
index f283623524ef..dd96f87ebb15 100644
--- packages/eslint-config-sdk/package.json
+++ packages/eslint-config-sdk/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry-internal/eslint-config-sdk",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK eslint config",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/eslint-config-sdk",
@@ -19,11 +19,12 @@
],
"main": "src/index.js",
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"dependencies": {
- "@sentry-internal/eslint-plugin-sdk": "8.54.0",
- "@sentry-internal/typescript": "8.54.0",
+ "@sentry-internal/eslint-plugin-sdk": "8.55.0",
+ "@sentry-internal/typescript": "8.55.0",
"@typescript-eslint/eslint-plugin": "^5.48.0",
"@typescript-eslint/parser": "^5.48.0",
"eslint-config-prettier": "^6.11.0",
diff --git packages/eslint-plugin-sdk/package.json packages/eslint-plugin-sdk/package.json
index a640a5537b3c..0787de280243 100644
--- packages/eslint-plugin-sdk/package.json
+++ packages/eslint-plugin-sdk/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry-internal/eslint-plugin-sdk",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK eslint plugin",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/eslint-plugin-sdk",
@@ -19,7 +19,8 @@
],
"main": "src/index.js",
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"scripts": {
"clean": "yarn rimraf sentry-internal-eslint-plugin-sdk-*.tgz",
diff --git packages/feedback/package.json packages/feedback/package.json
index 3be95be4aa00..e30599974fc6 100644
--- packages/feedback/package.json
+++ packages/feedback/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry-internal/feedback",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Sentry SDK integration for user feedback",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/feedback",
@@ -36,10 +36,11 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"dependencies": {
- "@sentry/core": "8.54.0"
+ "@sentry/core": "8.55.0"
},
"devDependencies": {
"preact": "^10.19.4"
diff --git packages/gatsby/package.json packages/gatsby/package.json
index fd916898588b..75557f8d9690 100644
--- packages/gatsby/package.json
+++ packages/gatsby/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/gatsby",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for Gatsby.js",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/gatsby",
@@ -42,11 +42,12 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"dependencies": {
- "@sentry/core": "8.54.0",
- "@sentry/react": "8.54.0",
+ "@sentry/core": "8.55.0",
+ "@sentry/react": "8.55.0",
"@sentry/webpack-plugin": "2.22.7"
},
"peerDependencies": {
diff --git packages/google-cloud-serverless/package.json packages/google-cloud-serverless/package.json
index 2f6562b3e924..20512b2c2d55 100644
--- packages/google-cloud-serverless/package.json
+++ packages/google-cloud-serverless/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/google-cloud-serverless",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for Google Cloud Functions",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/google-cloud-serverless",
@@ -48,8 +48,8 @@
"access": "public"
},
"dependencies": {
- "@sentry/core": "8.54.0",
- "@sentry/node": "8.54.0",
+ "@sentry/core": "8.55.0",
+ "@sentry/node": "8.55.0",
"@types/express": "^4.17.14"
},
"devDependencies": {
diff --git packages/google-cloud-serverless/src/index.ts packages/google-cloud-serverless/src/index.ts
index 95d30ec8b072..76353d56bdc7 100644
--- packages/google-cloud-serverless/src/index.ts
+++ packages/google-cloud-serverless/src/index.ts
@@ -127,6 +127,7 @@ export {
// eslint-disable-next-line deprecation/deprecation
processThreadBreadcrumbIntegration,
childProcessIntegration,
+ vercelAIIntegration,
} from '@sentry/node';
export {
diff --git packages/integration-shims/package.json packages/integration-shims/package.json
index 8522e54ca34e..3e28b3599af7 100644
--- packages/integration-shims/package.json
+++ packages/integration-shims/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry-internal/integration-shims",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Shims for integrations in Sentry SDK.",
"main": "build/cjs/index.js",
"module": "build/esm/index.js",
@@ -55,7 +55,7 @@
"url": "https://github.com/getsentry/sentry-javascript/issues"
},
"dependencies": {
- "@sentry/core": "8.54.0"
+ "@sentry/core": "8.55.0"
},
"engines": {
"node": ">=14.18"
diff --git packages/nestjs/package.json packages/nestjs/package.json
index 7036be81047b..98a0f344f9a2 100644
--- packages/nestjs/package.json
+++ packages/nestjs/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/nestjs",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for NestJS",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/nestjs",
@@ -44,8 +44,8 @@
"access": "public"
},
"dependencies": {
- "@sentry/core": "8.54.0",
- "@sentry/node": "8.54.0"
+ "@sentry/core": "8.55.0",
+ "@sentry/node": "8.55.0"
},
"devDependencies": {
"@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0",
diff --git packages/nextjs/package.json packages/nextjs/package.json
index a749a17ec43e..d887b9bc1767 100644
--- packages/nextjs/package.json
+++ packages/nextjs/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/nextjs",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for Next.js",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/nextjs",
@@ -73,18 +73,19 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"dependencies": {
"@opentelemetry/api": "^1.9.0",
"@opentelemetry/semantic-conventions": "^1.28.0",
"@rollup/plugin-commonjs": "28.0.1",
- "@sentry-internal/browser-utils": "8.54.0",
- "@sentry/core": "8.54.0",
- "@sentry/node": "8.54.0",
- "@sentry/opentelemetry": "8.54.0",
- "@sentry/react": "8.54.0",
- "@sentry/vercel-edge": "8.54.0",
+ "@sentry-internal/browser-utils": "8.55.0",
+ "@sentry/core": "8.55.0",
+ "@sentry/node": "8.55.0",
+ "@sentry/opentelemetry": "8.55.0",
+ "@sentry/react": "8.55.0",
+ "@sentry/vercel-edge": "8.55.0",
"@sentry/webpack-plugin": "2.22.7",
"chalk": "3.0.0",
"resolve": "1.22.8",
diff --git packages/nitro-utils/package.json packages/nitro-utils/package.json
index 541fda472b7a..9499b4469b4b 100644
--- packages/nitro-utils/package.json
+++ packages/nitro-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry-internal/nitro-utils",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Utilities for all Sentry SDKs with Nitro on the server-side",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/nitro-utils",
@@ -37,7 +37,7 @@
}
},
"dependencies": {
- "@sentry/core": "8.54.0"
+ "@sentry/core": "8.55.0"
},
"devDependencies": {
"rollup": "^4.24.4"
diff --git packages/node/package.json packages/node/package.json
index f4a0c2f4bc2f..6eed34678c7a 100644
--- packages/node/package.json
+++ packages/node/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/node",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Sentry Node SDK using OpenTelemetry for performance instrumentation",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/node",
@@ -62,7 +62,8 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"dependencies": {
"@opentelemetry/api": "^1.9.0",
@@ -97,8 +98,8 @@
"@opentelemetry/sdk-trace-base": "^1.30.1",
"@opentelemetry/semantic-conventions": "^1.28.0",
"@prisma/instrumentation": "5.22.0",
- "@sentry/core": "8.54.0",
- "@sentry/opentelemetry": "8.54.0",
+ "@sentry/core": "8.55.0",
+ "@sentry/opentelemetry": "8.55.0",
"import-in-the-middle": "^1.11.2"
},
"devDependencies": {
diff --git packages/node/src/index.ts packages/node/src/index.ts
index 7f1bc6c735f3..365124aad030 100644
--- packages/node/src/index.ts
+++ packages/node/src/index.ts
@@ -36,6 +36,7 @@ export { dataloaderIntegration } from './integrations/tracing/dataloader';
export { amqplibIntegration } from './integrations/tracing/amqplib';
// eslint-disable-next-line deprecation/deprecation
export { processThreadBreadcrumbIntegration, childProcessIntegration } from './integrations/childProcess';
+export { vercelAIIntegration } from './integrations/tracing/vercelai';
export { SentryContextManager } from './otel/contextManager';
export { generateInstrumentOnce } from './otel/instrument';
diff --git packages/nuxt/package.json packages/nuxt/package.json
index 7f59381d2778..cd5e273067b7 100644
--- packages/nuxt/package.json
+++ packages/nuxt/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/nuxt",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for Nuxt (EXPERIMENTAL)",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/nuxt",
@@ -43,13 +43,13 @@
},
"dependencies": {
"@nuxt/kit": "^3.13.2",
- "@sentry/browser": "8.54.0",
- "@sentry/core": "8.54.0",
- "@sentry/node": "8.54.0",
- "@sentry/opentelemetry": "8.54.0",
+ "@sentry/browser": "8.55.0",
+ "@sentry/core": "8.55.0",
+ "@sentry/node": "8.55.0",
+ "@sentry/opentelemetry": "8.55.0",
"@sentry/rollup-plugin": "2.22.7",
"@sentry/vite-plugin": "2.22.6",
- "@sentry/vue": "8.54.0"
+ "@sentry/vue": "8.55.0"
},
"devDependencies": {
"@nuxt/module-builder": "^0.8.4",
diff --git packages/nuxt/src/common/types.ts packages/nuxt/src/common/types.ts
index 8a9a453ff7db..c772f6491f74 100644
--- packages/nuxt/src/common/types.ts
+++ packages/nuxt/src/common/types.ts
@@ -95,6 +95,13 @@ type SourceMapsOptions = {
* Build options for the Sentry module. These options are used during build-time by the Sentry SDK.
*/
export type SentryNuxtModuleOptions = {
+ /**
+ * Enable the Sentry Nuxt Module.
+ *
+ * @default true
+ */
+ enabled?: boolean;
+
/**
* Options for the Sentry Vite plugin to customize the source maps upload process.
*
diff --git packages/nuxt/src/module.ts packages/nuxt/src/module.ts
index e246430f69d6..de8050cbd158 100644
--- packages/nuxt/src/module.ts
+++ packages/nuxt/src/module.ts
@@ -18,6 +18,10 @@ export default defineNuxtModule<ModuleOptions>({
},
defaults: {},
setup(moduleOptionsParam, nuxt) {
+ if ('enabled' in moduleOptionsParam && moduleOptionsParam.enabled === false) {
+ return;
+ }
+
const moduleOptions = {
...moduleOptionsParam,
autoInjectServerSentry: moduleOptionsParam.autoInjectServerSentry,
diff --git packages/nuxt/src/runtime/plugins/sentry.server.ts packages/nuxt/src/runtime/plugins/sentry.server.ts
index b748115f5c81..15992be5d0b8 100644
--- packages/nuxt/src/runtime/plugins/sentry.server.ts
+++ packages/nuxt/src/runtime/plugins/sentry.server.ts
@@ -52,7 +52,11 @@ export default defineNitroPlugin(nitroApp => {
});
async function flushIfServerless(): Promise<void> {
- const isServerless = !!process.env.LAMBDA_TASK_ROOT || !!process.env.VERCEL || !!process.env.NETLIFY;
+ const isServerless =
+ !!process.env.FUNCTIONS_WORKER_RUNTIME || // Azure Functions
+ !!process.env.LAMBDA_TASK_ROOT || // AWS Lambda
+ !!process.env.VERCEL ||
+ !!process.env.NETLIFY;
// @ts-expect-error This is not typed
if (GLOBAL_OBJ[Symbol.for('@vercel/request-context')]) {
diff --git packages/opentelemetry/package.json packages/opentelemetry/package.json
index db8e16c2223c..3dafd54b4bb4 100644
--- packages/opentelemetry/package.json
+++ packages/opentelemetry/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/opentelemetry",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry utilities for OpenTelemetry",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/opentelemetry",
@@ -36,10 +36,11 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"dependencies": {
- "@sentry/core": "8.54.0"
+ "@sentry/core": "8.55.0"
},
"peerDependencies": {
"@opentelemetry/api": "^1.9.0",
diff --git packages/profiling-node/package.json packages/profiling-node/package.json
index 448b2d4d94d8..c6cc47f6dcf1 100644
--- packages/profiling-node/package.json
+++ packages/profiling-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/profiling-node",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for Node.js Profiling",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/profiling-node",
@@ -36,7 +36,8 @@
"node": ">=14.18"
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"files": [
"/lib",
@@ -76,8 +77,8 @@
"test": "cross-env SENTRY_PROFILER_BINARY_DIR=lib jest --config jest.config.js"
},
"dependencies": {
- "@sentry/core": "8.54.0",
- "@sentry/node": "8.54.0",
+ "@sentry/core": "8.55.0",
+ "@sentry/node": "8.55.0",
"detect-libc": "^2.0.2",
"node-abi": "^3.61.0"
},
diff --git packages/react/package.json packages/react/package.json
index 0e7ebf5c837e..d2b2117dff9b 100644
--- packages/react/package.json
+++ packages/react/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/react",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for React.js",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/react",
@@ -36,11 +36,12 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"dependencies": {
- "@sentry/browser": "8.54.0",
- "@sentry/core": "8.54.0",
+ "@sentry/browser": "8.55.0",
+ "@sentry/core": "8.55.0",
"hoist-non-react-statics": "^3.3.2"
},
"peerDependencies": {
diff --git packages/react/src/reactrouterv6-compat-utils.tsx packages/react/src/reactrouterv6-compat-utils.tsx
index d68fb5f5ee61..6e78c1bcfdbe 100644
--- packages/react/src/reactrouterv6-compat-utils.tsx
+++ packages/react/src/reactrouterv6-compat-utils.tsx
@@ -62,6 +62,9 @@ export interface ReactRouterOptions {
type V6CompatibleVersion = '6' | '7';
+// Keeping as a global variable for cross-usage in multiple functions
+const allRoutes = new Set<RouteObject>();
+
/**
* Creates a wrapCreateBrowserRouter function that can be used with all React Router v6 compatible versions.
*/
@@ -82,6 +85,10 @@ export function createV6CompatibleWrapCreateBrowserRouter<
}
return function (routes: RouteObject[], opts?: Record<string, unknown> & { basename?: string }): TRouter {
+ routes.forEach(route => {
+ allRoutes.add(route);
+ });
+
const router = createRouterFunction(routes, opts);
const basename = opts && opts.basename;
@@ -91,19 +98,40 @@ export function createV6CompatibleWrapCreateBrowserRouter<
// This is the earliest convenient time to update the transaction name.
// Callbacks to `router.subscribe` are not called for the initial load.
if (router.state.historyAction === 'POP' && activeRootSpan) {
- updatePageloadTransaction(activeRootSpan, router.state.location, routes, undefined, basename);
+ updatePageloadTransaction(
+ activeRootSpan,
+ router.state.location,
+ routes,
+ undefined,
+ basename,
+ Array.from(allRoutes),
+ );
}
router.subscribe((state: RouterState) => {
- const location = state.location;
if (state.historyAction === 'PUSH' || state.historyAction === 'POP') {
- handleNavigation({
- location,
- routes,
- navigationType: state.historyAction,
- version,
- basename,
- });
+ // Wait for the next render if loading an unsettled route
+ if (state.navigation.state !== 'idle') {
+ requestAnimationFrame(() => {
+ handleNavigation({
+ location: state.location,
+ routes,
+ navigationType: state.historyAction,
+ version,
+ basename,
+ allRoutes: Array.from(allRoutes),
+ });
+ });
+ } else {
+ handleNavigation({
+ location: state.location,
+ routes,
+ navigationType: state.historyAction,
+ version,
+ basename,
+ allRoutes: Array.from(allRoutes),
+ });
+ }
}
});
@@ -138,6 +166,10 @@ export function createV6CompatibleWrapCreateMemoryRouter<
initialIndex?: number;
},
): TRouter {
+ routes.forEach(route => {
+ allRoutes.add(route);
+ });
+
const router = createRouterFunction(routes, opts);
const basename = opts ? opts.basename : undefined;
@@ -163,7 +195,7 @@ export function createV6CompatibleWrapCreateMemoryRouter<
: router.state.location;
if (router.state.historyAction === 'POP' && activeRootSpan) {
- updatePageloadTransaction(activeRootSpan, location, routes, undefined, basename);
+ updatePageloadTransaction(activeRootSpan, location, routes, undefined, basename, Array.from(allRoutes));
}
router.subscribe((state: RouterState) => {
@@ -175,6 +207,7 @@ export function createV6CompatibleWrapCreateMemoryRouter<
navigationType: state,.historyAction,
version,
basename,
+ allRoutes: Array.from(allRoutes),
});
}
});
@@ -249,8 +282,6 @@ export function createV6CompatibleWrapUseRoutes(origUseRoutes: UseRoutes, versio
return origUseRoutes;
}
- const allRoutes: Set<RouteObject> = new Set();
-
const SentryRoutes: React.FC<{
children?: React.ReactNode;
routes: RouteObject[];
@@ -322,7 +353,6 @@ export function handleNavigation(opts: {
allRoutes?: RouteObject[];
}): void {
const { location, routes, navigationType, version, matches, basename, allRoutes } = opts;
-
const branches = Array.isArray(matches) ? matches : _matchRoutes(routes, location, basename);
const client = getClient();
@@ -558,7 +588,7 @@ function updatePageloadTransaction(
): void {
const branches = Array.isArray(matches)
? matches
- : (_matchRoutes(routes, location, basename) as unknown as RouteMatch[]);
+ : (_matchRoutes(allRoutes || routes, location, basename) as unknown as RouteMatch[]);
if (branches) {
let name,
@@ -574,7 +604,7 @@ function updatePageloadTransaction(
[name, source] = getNormalizedName(routes, location, branches, basename);
}
- getCurrentScope().setTransactionName(name);
+ getCurrentScope().setTransactionName(name || '/');
if (activeRootSpan) {
activeRootSpan.updateName(name);
@@ -597,8 +627,6 @@ export function createV6CompatibleWithSentryReactRouterRouting<P extends Record<
return Routes;
}
- const allRoutes: Set<RouteObject> = new Set();
-
const SentryRoutes: React.FC<P> = (props: P) => {
const isMountRenderPass = React.useRef(true);
diff --git packages/react/src/types.ts packages/react/src/types.ts
index 1a40ec4fce91..b29a2dbd1cad 100644
--- packages/react/src/types.ts
+++ packages/react/src/types.ts
@@ -182,10 +182,14 @@ export interface RouterInit {
hydrationData?: HydrationState;
}
+export type NavigationState = {
+ state: 'idle' | 'loading' | 'submitting';
+};
+
export type NavigationStates = {
- Idle: any;
- Loading: any;
- Submitting: any;
+ Idle: NavigationState;
+ Loading: NavigationState;
+ Submitting: NavigationState;
};
export type Navigation = NavigationStates[keyof NavigationStates];
@@ -202,6 +206,7 @@ export declare enum HistoryAction {
export interface RouterState {
historyAction: Action | HistoryAction | any;
location: Location;
+ navigation: Navigation;
}
export interface Router<TState extends RouterState = RouterState> {
state: TState;
diff --git packages/remix/package.json packages/remix/package.json
index 806217abdfcc..d474700bd475 100644
--- packages/remix/package.json
+++ packages/remix/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/remix",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for Remix",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/remix",
@@ -49,16 +49,17 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"dependencies": {
"@opentelemetry/api": "^1.9.0",
"@remix-run/router": "1.x",
"@sentry/cli": "^2.39.1",
- "@sentry/core": "8.54.0",
- "@sentry/node": "8.54.0",
- "@sentry/opentelemetry": "8.54.0",
- "@sentry/react": "8.54.0",
+ "@sentry/core": "8.55.0",
+ "@sentry/node": "8.55.0",
+ "@sentry/opentelemetry": "8.55.0",
+ "@sentry/react": "8.55.0",
"glob": "^10.3.4",
"opentelemetry-instrumentation-remix": "0.8.0",
"yargs": "^17.6.0"
diff --git packages/replay-canvas/package.json packages/replay-canvas/package.json
index 8ff0219d4c1f..83d73f93d348 100644
--- packages/replay-canvas/package.json
+++ packages/replay-canvas/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry-internal/replay-canvas",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Replay canvas integration",
"main": "build/npm/cjs/index.js",
"module": "build/npm/esm/index.js",
@@ -52,7 +52,8 @@
"yalc:publish": "yalc publish --push --sig"
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"repository": {
"type": "git",
@@ -68,8 +69,8 @@
"@sentry-internal/rrweb": "2.31.0"
},
"dependencies": {
- "@sentry-internal/replay": "8.54.0",
- "@sentry/core": "8.54.0"
+ "@sentry-internal/replay": "8.55.0",
+ "@sentry/core": "8.55.0"
},
"engines": {
"node": ">=14.18"
diff --git packages/replay-internal/package.json packages/replay-internal/package.json
index f7bd8c287375..576dec48819f 100644
--- packages/replay-internal/package.json
+++ packages/replay-internal/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry-internal/replay",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "User replays for Sentry",
"main": "build/npm/cjs/index.js",
"module": "build/npm/esm/index.js",
@@ -68,7 +68,7 @@
"homepage": "https://docs.sentry.io/platforms/javascript/session-replay/",
"devDependencies": {
"@babel/core": "^7.17.5",
- "@sentry-internal/replay-worker": "8.54.0",
+ "@sentry-internal/replay-worker": "8.55.0",
"@sentry-internal/rrweb": "2.31.0",
"@sentry-internal/rrweb-snapshot": "2.31.0",
"fflate": "^0.8.1",
@@ -76,8 +76,8 @@
"jsdom-worker": "^0.2.1"
},
"dependencies": {
- "@sentry-internal/browser-utils": "8.54.0",
- "@sentry/core": "8.54.0"
+ "@sentry-internal/browser-utils": "8.55.0",
+ "@sentry/core": "8.55.0"
},
"engines": {
"node": ">=14.18"
diff --git packages/replay-worker/package.json packages/replay-worker/package.json
index d389b7d51dcd..1efd3395f78e 100644
--- packages/replay-worker/package.json
+++ packages/replay-worker/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry-internal/replay-worker",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Worker for @sentry-internal/replay",
"main": "build/esm/index.js",
"module": "build/esm/index.js",
diff --git packages/solid/package.json packages/solid/package.json
index 053841eb350b..94f3da2caf31 100644
--- packages/solid/package.json
+++ packages/solid/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/solid",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for Solid",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/solid",
@@ -44,8 +44,8 @@
"access": "public"
},
"dependencies": {
- "@sentry/browser": "8.54.0",
- "@sentry/core": "8.54.0"
+ "@sentry/browser": "8.55.0",
+ "@sentry/core": "8.55.0"
},
"peerDependencies": {
"@solidjs/router": "^0.13.4",
diff --git packages/solidstart/package.json packages/solidstart/package.json
index 30ecfff56ab9..0c8eb6dfe56b 100644
--- packages/solidstart/package.json
+++ packages/solidstart/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/solidstart",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for Solid Start",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/solidstart",
@@ -66,10 +66,10 @@
}
},
"dependencies": {
- "@sentry/core": "8.54.0",
- "@sentry/node": "8.54.0",
- "@sentry/opentelemetry": "8.54.0",
- "@sentry/solid": "8.54.0",
+ "@sentry/core": "8.55.0",
+ "@sentry/node": "8.55.0",
+ "@sentry/opentelemetry": "8.55.0",
+ "@sentry/solid": "8.55.0",
"@sentry/vite-plugin": "2.22.6"
},
"devDependencies": {
diff --git packages/solidstart/src/config/addInstrumentation.ts packages/solidstart/src/config/addInstrumentation.ts
index 74b72a12b4de..22494710a97c 100644
--- packages/solidstart/src/config/addInstrumentation.ts
+++ packages/solidstart/src/config/addInstrumentation.ts
@@ -45,7 +45,9 @@ export async function addInstrumentationFileToBuild(nitro: Nitro): Promise<void>
try {
const ssrAssetsPath = path.resolve(buildDir, 'build', 'ssr', 'assets');
const assetsBuildDir = await fs.promises.readdir(ssrAssetsPath);
- const releaseInjectionFile = assetsBuildDir.find(file => file.startsWith('_sentry-release-injection-file-'));
+ const releaseInjectionFile = assetsBuildDir.find(file =>
+ /^_sentry-release-injection-file-.*\.(js|mjs)$/.test(file),
+ );
if (releaseInjectionFile) {
const releaseSource = path.resolve(ssrAssetsPath, releaseInjectionFile);
diff --git packages/solidstart/test/config/addInstrumentation.test.ts packages/solidstart/test/config/addInstrumentation.test.ts
index 012bca76c9ca..1a71c8dbdd23 100644
--- packages/solidstart/test/config/addInstrumentation.test.ts
+++ packages/solidstart/test/config/addInstrumentation.test.ts
@@ -126,6 +126,23 @@ describe('addInstrumentationFileToBuild()', () => {
expect(fsMkdirMock).not.toHaveBeenCalled();
});
+ it('does not copy release injection file source map file', async () => {
+ fsExistsSyncMock.mockReturnValue(true);
+ fsReaddirMock.mockResolvedValueOnce(['_sentry-release-injection-file-test.js.map']);
+ fsCopyFileMock.mockResolvedValueOnce(true);
+ await addInstrumentationFileToBuild(nitroOptions);
+
+ await callNitroCloseHook();
+
+ expect(fsCopyFileMock).not.toHaveBeenCalledWith(
+ '/path/to/buildDir/build/ssr/assets/_sentry-release-injection-file-test.js.map',
+ '/path/to/serverDir/assets/_sentry-release-injection-file-test.js.map',
+ );
+ expect(consoleLogSpy).not.toHaveBeenCalledWith(
+ '[Sentry SolidStart withSentry] Successfully created /path/to/serverDir/assets/_sentry-release-injection-file-test.js.map.',
+ );
+ });
+
it('copies release injection file if available', async () => {
fsExistsSyncMock.mockReturnValue(true);
fsReaddirMock.mockResolvedValueOnce(['_sentry-release-injection-file-test.js']);
diff --git packages/svelte/package.json packages/svelte/package.json
index d19282e51848..b650f7e3de45 100644
--- packages/svelte/package.json
+++ packages/svelte/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/svelte",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for Svelte",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/svelte",
@@ -36,11 +36,12 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"dependencies": {
- "@sentry/browser": "8.54.0",
- "@sentry/core": "8.54.0",
+ "@sentry/browser": "8.55.0",
+ "@sentry/core": "8.55.0",
"magic-string": "^0.30.0"
},
"peerDependencies": {
diff --git packages/svelte/src/config.ts packages/svelte/src/config.ts
index 4c265ad57fc7..9231ef46426e 100644
--- packages/svelte/src/config.ts
+++ packages/svelte/src/config.ts
@@ -22,30 +22,23 @@ export function withSentryConfig(
const mergedOptions = {
...DEFAULT_SENTRY_OPTIONS,
...sentryOptions,
+ componentTracking: {
+ ...DEFAULT_SENTRY_OPTIONS.componentTracking,
+ ...(sentryOptions && sentryOptions.componentTracking),
+ },
};
const originalPreprocessors = getOriginalPreprocessorArray(originalConfig);
- // Map is insertion-order-preserving. It's important to add preprocessors
- // to this map in the right order we want to see them being executed.
- // see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
- const sentryPreprocessors = new Map<string, SentryPreprocessorGroup>();
-
- const shouldTrackComponents = mergedOptions.componentTracking && mergedOptions.componentTracking.trackComponents;
- if (shouldTrackComponents) {
- const firstPassPreproc: SentryPreprocessorGroup = componentTrackingPreprocessor(mergedOptions.componentTracking);
- sentryPreprocessors.set(firstPassPreproc.sentryId || '', firstPassPreproc);
+ // Bail if users already added the preprocessor
+ if (originalPreprocessors.find((p: PreprocessorGroup) => !!(p as SentryPreprocessorGroup).sentryId)) {
+ return originalConfig;
}
- // We prioritize user-added preprocessors, so we don't insert sentry processors if they
- // have already been added by users.
- originalPreprocessors.forEach((p: SentryPreprocessorGroup) => {
- if (p.sentryId) {
- sentryPreprocessors.delete(p.sentryId);
- }
- });
-
- const mergedPreprocessors = [...sentryPreprocessors.values(), ...originalPreprocessors];
+ const mergedPreprocessors = [...originalPreprocessors];
+ if (mergedOptions.componentTracking.trackComponents) {
+ mergedPreprocessors.unshift(componentTrackingPreprocessor(mergedOptions.componentTracking));
+ }
return {
...originalConfig,
diff --git packages/svelte/src/constants.ts packages/svelte/src/constants.ts
deleted file mode 100644
index cb8255040c03..000000000000
--- packages/svelte/src/constants.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export const UI_SVELTE_INIT = 'ui.svelte.init';
-
-export const UI_SVELTE_UPDATE = 'ui.svelte.update';
-
-export const DEFAULT_COMPONENT_NAME = 'Svelte Component';
diff --git packages/svelte/src/performance.ts packages/svelte/src/performance.ts
index b50be258bc58..0c21f8d36622 100644
--- packages/svelte/src/performance.ts
+++ packages/svelte/src/performance.ts
@@ -2,8 +2,7 @@ import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/browser';
import type { Span } from '@sentry/core';
import { afterUpdate, beforeUpdate, onMount } from 'svelte';
-import { startInactiveSpan } from '@sentry/core';
-import { DEFAULT_COMPONENT_NAME, UI_SVELTE_INIT, UI_SVELTE_UPDATE } from './constants';
+import { logger, startInactiveSpan } from '@sentry/core';
import type { TrackComponentOptions } from './types';
const defaultTrackComponentOptions: {
@@ -29,21 +28,27 @@ export function trackComponent(options?: TrackComponentOptions): void {
const customComponentName = mergedOptions.componentName;
- const componentName = `<${customComponentName || DEFAULT_COMPONENT_NAME}>`;
+ const componentName = `<${customComponentName || 'Svelte Component'}>`;
if (mergedOptions.trackInit) {
recordInitSpan(componentName);
}
if (mergedOptions.trackUpdates) {
- recordUpdateSpans(componentName);
+ try {
+ recordUpdateSpans(componentName);
+ } catch {
+ logger.warn(
+ "Cannot track component updates. This is likely because you're using Svelte 5 in Runes mode. Set `trackUpdates: false` in `withSentryConfig` or `trackComponent` to disable this warning.",
+ );
+ }
}
}
function recordInitSpan(componentName: string): void {
const initSpan = startInactiveSpan({
onlyIfParent: true,
- op: UI_SVELTE_INIT,
+ op: 'ui.svelte.init',
name: componentName,
attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.svelte' },
});
@@ -58,7 +63,7 @@ function recordUpdateSpans(componentName: string): void {
beforeUpdate(() => {
updateSpan = startInactiveSpan({
onlyIfParent: true,
- op: UI_SVELTE_UPDATE,
+ op: 'ui.svelte.update',
name: componentName,
attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.svelte' },
});
diff --git packages/svelte/test/config.test.ts packages/svelte/test/config.test.ts
index a8c84297082a..21f51dc66518 100644
--- packages/svelte/test/config.test.ts
+++ packages/svelte/test/config.test.ts
@@ -60,7 +60,7 @@ describe('withSentryConfig', () => {
const wrappedConfig = withSentryConfig(originalConfig);
- expect(wrappedConfig).toEqual({ ...originalConfig, preprocess: [sentryPreproc] });
+ expect(wrappedConfig).toEqual({ ...originalConfig });
});
it('handles multiple wraps correctly by only adding our preprocessors once', () => {
diff --git packages/svelte/test/performance.test.ts packages/svelte/test/performance.test.ts
index 21adeee255c3..67a236116444 100644
--- packages/svelte/test/performance.test.ts
+++ packages/svelte/test/performance.test.ts
@@ -9,7 +9,6 @@ import { getClient, getCurrentScope, getIsolationScope, init, startSpan } from '
import type { TransactionEvent } from '@sentry/core';
-// @ts-expect-error svelte import
import DummyComponent from './components/Dummy.svelte';
const PUBLIC_DSN = 'https://username@domain/123';
@@ -32,7 +31,7 @@ describe('Sentry.trackComponent()', () => {
init({
dsn: PUBLIC_DSN,
- enableTracing: true,
+ tracesSampleRate: 1.0,
beforeSendTransaction,
});
});
@@ -220,7 +219,7 @@ describe('Sentry.trackComponent()', () => {
expect(transaction.spans![1]?.description).toEqual('<CustomComponentName>');
});
- it("doesn't do anything, if there's no ongoing transaction", async () => {
+ it("doesn't do anything, if there's no ongoing parent span", async () => {
render(DummyComponent, {
props: { options: { componentName: 'CustomComponentName' } },
});
@@ -230,7 +229,7 @@ describe('Sentry.trackComponent()', () => {
expect(transactions).toHaveLength(0);
});
- it("doesn't record update spans, if there's no ongoing root span at that time", async () => {
+ it("doesn't record update spans, if there's no ongoing parent span at that time", async () => {
const component = startSpan({ name: 'outer' }, span => {
expect(span).toBeDefined();
diff --git packages/sveltekit/package.json packages/sveltekit/package.json
index 11a3f36b7fa9..5abb4d7af0e2 100644
--- packages/sveltekit/package.json
+++ packages/sveltekit/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/sveltekit",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for SvelteKit",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/sveltekit",
@@ -28,7 +28,8 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"peerDependencies": {
"@sveltejs/kit": "1.x || 2.x",
@@ -40,10 +41,10 @@
}
},
"dependencies": {
- "@sentry/core": "8.54.0",
- "@sentry/node": "8.54.0",
- "@sentry/opentelemetry": "8.54.0",
- "@sentry/svelte": "8.54.0",
+ "@sentry/core": "8.55.0",
+ "@sentry/node": "8.55.0",
+ "@sentry/opentelemetry": "8.55.0",
+ "@sentry/svelte": "8.55.0",
"@sentry/vite-plugin": "2.22.6",
"magic-string": "0.30.7",
"magicast": "0.2.8",
diff --git packages/types/package.json packages/types/package.json
index dc715f334fa0..f3f28bcc0204 100644
--- packages/types/package.json
+++ packages/types/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/types",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Types for all Sentry JavaScript SDKs",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/types",
@@ -36,7 +36,8 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"scripts": {
"build": "run-p build:transpile build:types",
@@ -56,7 +57,7 @@
"yalc:publish": "yalc publish --push --sig"
},
"dependencies": {
- "@sentry/core": "8.54.0"
+ "@sentry/core": "8.55.0"
},
"volta": {
"extends": "../../package.json"
diff --git packages/typescript/package.json packages/typescript/package.json
index abf7f2796fc7..d3a99e8adc28 100644
--- packages/typescript/package.json
+++ packages/typescript/package.json
@@ -1,13 +1,14 @@
{
"name": "@sentry-internal/typescript",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Typescript configuration used at Sentry",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/typescript",
"author": "Sentry",
"license": "MIT",
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"files": [
"tsconfig.json"
diff --git packages/utils/package.json packages/utils/package.json
index d119bf0574da..f9e308778440 100644
--- packages/utils/package.json
+++ packages/utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/utils",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Utilities for all Sentry JavaScript SDKs",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/utils",
@@ -36,10 +36,11 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "latest"
},
"dependencies": {
- "@sentry/core": "8.54.0"
+ "@sentry/core": "8.55.0"
},
"scripts": {
"build": "run-p build:transpile build:types",
diff --git packages/vercel-edge/package.json packages/vercel-edge/package.json
index 0dbf63f64772..1615927039b4 100644
--- packages/vercel-edge/package.json
+++ packages/vercel-edge/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/vercel-edge",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for the Vercel Edge Runtime",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/vercel-edge",
@@ -36,11 +36,12 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"dependencies": {
"@opentelemetry/api": "^1.9.0",
- "@sentry/core": "8.54.0"
+ "@sentry/core": "8.55.0"
},
"devDependencies": {
"@edge-runtime/types": "3.0.1",
@@ -48,7 +49,7 @@
"@opentelemetry/resources": "^1.30.1",
"@opentelemetry/sdk-trace-base": "^1.30.1",
"@opentelemetry/semantic-conventions": "^1.28.0",
- "@sentry/opentelemetry": "8.54.0"
+ "@sentry/opentelemetry": "8.55.0"
},
"scripts": {
"build": "run-p build:transpile build:types",
diff --git packages/vue/package.json packages/vue/package.json
index 99d42b879ec9..bbcb0fa4c81b 100644
--- packages/vue/package.json
+++ packages/vue/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/vue",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Official Sentry SDK for Vue.js",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/vue",
@@ -36,14 +36,15 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"dependencies": {
- "@sentry/browser": "8.54.0",
- "@sentry/core": "8.54.0"
+ "@sentry/browser": "8.55.0",
+ "@sentry/core": "8.55.0"
},
"peerDependencies": {
- "pinia": "2.x",
+ "pinia": "2.x || 3.x",
"vue": "2.x || 3.x"
},
"peerDependenciesMeta": {
diff --git packages/wasm/package.json packages/wasm/package.json
index 6cae1ca1d731..8f725a96fb0b 100644
--- packages/wasm/package.json
+++ packages/wasm/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/wasm",
- "version": "8.54.0",
+ "version": "8.55.0",
"description": "Support for WASM.",
"repository": "git://github.com/getsentry/sentry-javascript.git",
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/wasm",
@@ -36,11 +36,12 @@
}
},
"publishConfig": {
- "access": "public"
+ "access": "public",
+ "tag": "v8"
},
"dependencies": {
- "@sentry/browser": "8.54.0",
- "@sentry/core": "8.54.0"
+ "@sentry/browser": "8.55.0",
+ "@sentry/core": "8.55.0"
},
"scripts": {
"build": "run-p build:transpile build:bundle build:types",
DescriptionThis PR is a collection of changes for version 8.55.0 of the Sentry JavaScript SDK. The main changes include switching the AWS Lambda Layer name to ChangesChangesBy Framework/Component: AWS Lambda:
Feature Flags:
React Router:
SvelteKit:
Nuxt:
Vue:
Package Updates:
sequenceDiagram
participant User
participant SDK
participant Sentry
participant FeatureFlags
User->>SDK: Initialize SDK
alt Feature Flags
SDK->>FeatureFlags: Initialize Statsig/LaunchDarkly/OpenFeature
FeatureFlags-->>SDK: Register flag evaluations
end
alt Lazy Loading
User->>SDK: Navigate to lazy route
SDK->>SDK: Load component
SDK->>Sentry: Update transaction name
end
SDK->>Sentry: Send telemetry
Possible Issues
|
This PR contains the following updates:
8.54.0
->8.55.0
Release Notes
getsentry/sentry-javascript (@sentry/node)
v8.55.0
Compare Source
Important Changes
SentryNodeServerlessSDKv8
(#15351)The
SentryNodeServerlessSDK
AWS Lambda Layer will stop receiving updates.If you intend to stay on
v8
and receive updates useSentryNodeServerlessSDKv8
instead.Other Changes
vercelAIIntegration
export (#15339)enabled
to disable Sentry module (#15337) (#15381)registerEsmLoaderHooks
(#15352)beforeUpdate
call (#15262)Work in this release was contributed by @aryanvdesh. Thank you for your contribution!
Bundle size 📦
Configuration
📅 Schedule: Branch creation - "* * * * 2-4" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.