Skip to content

Commit 070e1f9

Browse files
authored
Merge pull request #12451 from getsentry/prepare-release/8.9.0
meta(changelog): Update Changelog for 8.9.0
2 parents 4c48b07 + 332a7ab commit 070e1f9

File tree

161 files changed

+3722
-1027
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

161 files changed

+3722
-1027
lines changed

.craft.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ targets:
5858
- name: npm
5959
id: '@sentry/react'
6060
includeNames: /^sentry-react-\d.*\.tgz$/
61+
- name: npm
62+
id: '@sentry/solid'
63+
includeNames: /^sentry-solid-\d.*\.tgz$/
6164
- name: npm
6265
id: '@sentry/svelte'
6366
includeNames: /^sentry-svelte-\d.*\.tgz$/

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -993,7 +993,7 @@ jobs:
993993
[
994994
'angular-17',
995995
'angular-18',
996-
'aws-lambda-layer',
996+
'aws-lambda-layer-cjs',
997997
'cloudflare-astro',
998998
'node-express',
999999
'create-react-app',
@@ -1014,7 +1014,7 @@ jobs:
10141014
'react-router-6-use-routes',
10151015
'react-router-5',
10161016
'react-router-6',
1017-
'solidjs',
1017+
'solid',
10181018
'svelte-5',
10191019
'sveltekit',
10201020
'sveltekit-2',

.size-limit.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ module.exports = [
1515
path: 'packages/browser/build/npm/esm/index.js',
1616
import: createImport('init', 'browserTracingIntegration'),
1717
gzip: true,
18-
limit: '34 KB',
18+
limit: '35 KB',
1919
},
2020
{
2121
name: '@sentry/browser (incl. Tracing, Replay)',
2222
path: 'packages/browser/build/npm/esm/index.js',
2323
import: createImport('init', 'browserTracingIntegration', 'replayIntegration'),
2424
gzip: true,
25-
limit: '71 KB',
25+
limit: '72 KB',
2626
},
2727
{
2828
name: '@sentry/browser (incl. Tracing, Replay) - with treeshaking flags',
@@ -48,14 +48,14 @@ module.exports = [
4848
path: 'packages/browser/build/npm/esm/index.js',
4949
import: createImport('init', 'browserTracingIntegration', 'replayIntegration', 'replayCanvasIntegration'),
5050
gzip: true,
51-
limit: '75 KB',
51+
limit: '76 KB',
5252
},
5353
{
5454
name: '@sentry/browser (incl. Tracing, Replay, Feedback)',
5555
path: 'packages/browser/build/npm/esm/index.js',
5656
import: createImport('init', 'browserTracingIntegration', 'replayIntegration', 'feedbackIntegration'),
5757
gzip: true,
58-
limit: '87 KB',
58+
limit: '89 KB',
5959
},
6060
{
6161
name: '@sentry/browser (incl. Tracing, Replay, Feedback, metrics)',
@@ -69,21 +69,21 @@ module.exports = [
6969
path: 'packages/browser/build/npm/esm/index.js',
7070
import: createImport('init', 'metrics'),
7171
gzip: true,
72-
limit: '40 KB',
72+
limit: '30 KB',
7373
},
7474
{
7575
name: '@sentry/browser (incl. Feedback)',
7676
path: 'packages/browser/build/npm/esm/index.js',
7777
import: createImport('init', 'feedbackIntegration'),
7878
gzip: true,
79-
limit: '40 KB',
79+
limit: '41 KB',
8080
},
8181
{
8282
name: '@sentry/browser (incl. sendFeedback)',
8383
path: 'packages/browser/build/npm/esm/index.js',
8484
import: createImport('init', 'sendFeedback'),
8585
gzip: true,
86-
limit: '28 KB',
86+
limit: '29 KB',
8787
},
8888
{
8989
name: '@sentry/browser (incl. FeedbackAsync)',
@@ -107,7 +107,7 @@ module.exports = [
107107
import: createImport('init', 'ErrorBoundary', 'reactRouterV6BrowserTracingIntegration'),
108108
ignore: ['react/jsx-runtime'],
109109
gzip: true,
110-
limit: '37 KB',
110+
limit: '38 KB',
111111
},
112112
// Vue SDK (ESM)
113113
{
@@ -143,7 +143,7 @@ module.exports = [
143143
name: 'CDN Bundle (incl. Tracing)',
144144
path: createCDNPath('bundle.tracing.min.js'),
145145
gzip: true,
146-
limit: '36 KB',
146+
limit: '37 KB',
147147
},
148148
{
149149
name: 'CDN Bundle (incl. Tracing, Replay)',
@@ -193,7 +193,7 @@ module.exports = [
193193
import: createImport('init'),
194194
ignore: ['next/router', 'next/constants'],
195195
gzip: true,
196-
limit: '37 KB',
196+
limit: '38 KB',
197197
},
198198
// SvelteKit SDK (ESM)
199199
{

CHANGELOG.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,37 @@
44

55
- "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott
66

7+
## 8.9.0
8+
9+
### Important changes
10+
11+
- **feat(solid): Add Solid SDK**
12+
13+
This release adds a dedicated SDK for [Solid JS](https://www.solidjs.com/) in alpha state with instrumentation for
14+
[Solid Router](https://docs.solidjs.com/solid-router) and a custom `ErrorBoundary`. See the
15+
[package README](https://github.com/getsentry/sentry-javascript/blob/develop/packages/solid/README.md) for how to use
16+
the SDK.
17+
18+
### Other changes
19+
20+
- feat(deps): bump @opentelemetry/instrumentation-express from 0.40.0 to 0.40.1 (#12438)
21+
- feat(deps): bump @opentelemetry/instrumentation-mongodb from 0.44.0 to 0.45.0 (#12439)
22+
- feat(deps): bump @opentelemetry/propagator-aws-xray from 1.24.1 to 1.25.0 (#12437)
23+
- feat(nextjs): Allow for suppressing warning about missing global error handler file (#12369)
24+
- feat(redis): Add cache logic for redis-4 (#12429)
25+
- feat(replay): Replay Web Vital Breadcrumbs (#12296)
26+
- fix: Fix types export order (#12404)
27+
- fix(astro): Ensure server-side exports work correctly (#12453)
28+
- fix(aws-serverless): Add `op` to Otel-generated lambda function root span (#12430)
29+
- fix(aws-serverless): Only auto-patch handler in CJS when loading `awslambda-auto` (#12392)
30+
- fix(aws-serverless): Only start root span in Sentry wrapper if Otel didn't wrap handler (#12407)
31+
- fix(browser): Fix INP span creation & transaction tagging (#12372)
32+
- fix(nextjs): correct types conditional export ordering (#12355)
33+
- fix(replay): Fix guard for exception event (#12441)
34+
- fix(vue): Handle span name assignment for nested routes in VueRouter (#12398)
35+
36+
Work in this release was contributed by @soch4n. Thank you for your contribution!
37+
738
## 8.8.0
839

940
- **feat: Upgrade OTEL dependencies (#12388)**
@@ -48,6 +79,8 @@ If you are still encountering issues with OpenTelemetry instrumentation and ESM,
4879
- ref(browser): Ensure idle span ending is consistent (#12310)
4980
- ref(profiling): unref timer (#12340)
5081

82+
Work in this release contributed by @dohooo, @mohd-akram, and @ykzts. Thank you for your contributions!
83+
5184
## 8.7.0
5285

5386
### Important Changes

CONTRIBUTING.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ Developer Documentation.
1414

1515
## Setting up an Environment
1616

17-
To run the test suite and our code linter, node.js and yarn are required.
17+
We use [Volta](https://volta.sh/) to ensure we use consistent versions of node, yarn and pnpm.
1818

19-
[`node` download](https://nodejs.org/download) [`yarn` download](https://yarnpkg.com/en/docs/install)
19+
Make sure to also enable [pnpm support in Volta](https://docs.volta.sh/advanced/pnpm) if you want to run the E2E tests
20+
locally.
2021

2122
`sentry-javascript` is a monorepo containing several packages, and we use `lerna` to manage them. To get started,
2223
install all dependencies, and then perform an initial build, so TypeScript can read all of the linked type definitions.

dev-packages/browser-integration-tests/playwright.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ const config: PlaywrightTestConfig = {
1111
testMatch: /test.ts/,
1212

1313
use: {
14-
trace: process.env.CI ? 'retain-on-failure' : 'off',
14+
trace: 'retain-on-failure',
1515
},
1616

1717
projects: [
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fetch('http://localhost:123/fake/endpoint/that/will/fail');
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { expect } from '@playwright/test';
2+
import type { Event } from '@sentry/types';
3+
4+
import { sentryTest } from '../../../../utils/fixtures';
5+
import { getMultipleSentryEnvelopeRequests } from '../../../../utils/helpers';
6+
7+
sentryTest('should create errors with stack traces for failing fetch calls', async ({ getLocalTestPath, page }) => {
8+
const url = await getLocalTestPath({ testDir: __dirname });
9+
10+
const envelopes = await getMultipleSentryEnvelopeRequests<Event>(page, 3, { url, timeout: 10000 });
11+
const errorEvent = envelopes.find(event => !event.type)!;
12+
expect(errorEvent?.exception?.values?.[0].stacktrace?.frames?.length).toBeGreaterThan(0);
13+
});
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import * as Sentry from '@sentry/browser';
2+
3+
window.Sentry = Sentry;
4+
5+
Sentry.init({
6+
dsn: 'https://public@dsn.ingest.sentry.io/1337',
7+
});

dev-packages/browser-integration-tests/suites/replay/customEvents/test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ import { expect } from '@playwright/test';
22

33
import { sentryTest } from '../../../utils/fixtures';
44
import {
5+
expectedCLSPerformanceSpan,
56
expectedClickBreadcrumb,
67
expectedFCPPerformanceSpan,
8+
expectedFIDPerformanceSpan,
79
expectedFPPerformanceSpan,
810
expectedLCPPerformanceSpan,
911
expectedMemoryPerformanceSpan,
@@ -62,6 +64,8 @@ sentryTest(
6264
expect.arrayContaining([
6365
expectedNavigationPerformanceSpan,
6466
expectedLCPPerformanceSpan,
67+
expectedCLSPerformanceSpan,
68+
expectedFIDPerformanceSpan,
6569
expectedFPPerformanceSpan,
6670
expectedFCPPerformanceSpan,
6771
expectedMemoryPerformanceSpan, // two memory spans - once per flush

dev-packages/browser-integration-tests/suites/replay/multiple-pages/test.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ import { expect } from '@playwright/test';
22

33
import { sentryTest } from '../../../utils/fixtures';
44
import {
5+
expectedCLSPerformanceSpan,
56
expectedClickBreadcrumb,
67
expectedFCPPerformanceSpan,
8+
expectedFIDPerformanceSpan,
79
expectedFPPerformanceSpan,
810
expectedLCPPerformanceSpan,
911
expectedMemoryPerformanceSpan,
@@ -78,11 +80,13 @@ sentryTest(
7880
const collectedPerformanceSpans = [...recording0.performanceSpans, ...recording1.performanceSpans];
7981
const collectedBreadcrumbs = [...recording0.breadcrumbs, ...recording1.breadcrumbs];
8082

81-
expect(collectedPerformanceSpans.length).toEqual(6);
83+
expect(collectedPerformanceSpans.length).toEqual(8);
8284
expect(collectedPerformanceSpans).toEqual(
8385
expect.arrayContaining([
8486
expectedNavigationPerformanceSpan,
8587
expectedLCPPerformanceSpan,
88+
expectedCLSPerformanceSpan,
89+
expectedFIDPerformanceSpan,
8690
expectedFPPerformanceSpan,
8791
expectedFCPPerformanceSpan,
8892
expectedMemoryPerformanceSpan, // two memory spans - once per flush
@@ -116,11 +120,13 @@ sentryTest(
116120
const collectedPerformanceSpansAfterReload = [...recording2.performanceSpans, ...recording3.performanceSpans];
117121
const collectedBreadcrumbsAdterReload = [...recording2.breadcrumbs, ...recording3.breadcrumbs];
118122

119-
expect(collectedPerformanceSpansAfterReload.length).toEqual(6);
123+
expect(collectedPerformanceSpansAfterReload.length).toEqual(8);
120124
expect(collectedPerformanceSpansAfterReload).toEqual(
121125
expect.arrayContaining([
122126
expectedReloadPerformanceSpan,
123127
expectedLCPPerformanceSpan,
128+
expectedCLSPerformanceSpan,
129+
expectedFIDPerformanceSpan,
124130
expectedFPPerformanceSpan,
125131
expectedFCPPerformanceSpan,
126132
expectedMemoryPerformanceSpan,
@@ -188,6 +194,8 @@ sentryTest(
188194
expect.arrayContaining([
189195
expectedNavigationPerformanceSpan,
190196
expectedLCPPerformanceSpan,
197+
expectedCLSPerformanceSpan,
198+
expectedFIDPerformanceSpan,
191199
expectedFPPerformanceSpan,
192200
expectedFCPPerformanceSpan,
193201
expectedMemoryPerformanceSpan,
@@ -304,11 +312,13 @@ sentryTest(
304312
];
305313
const collectedBreadcrumbsAfterIndexNavigation = [...recording8.breadcrumbs, ...recording9.breadcrumbs];
306314

307-
expect(collectedPerformanceSpansAfterIndexNavigation.length).toEqual(6);
315+
expect(collectedPerformanceSpansAfterIndexNavigation.length).toEqual(8);
308316
expect(collectedPerformanceSpansAfterIndexNavigation).toEqual(
309317
expect.arrayContaining([
310318
expectedNavigationPerformanceSpan,
311319
expectedLCPPerformanceSpan,
320+
expectedCLSPerformanceSpan,
321+
expectedFIDPerformanceSpan,
312322
expectedFPPerformanceSpan,
313323
expectedFCPPerformanceSpan,
314324
expectedMemoryPerformanceSpan,
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import * as Sentry from '@sentry/browser';
2+
3+
window.Sentry = Sentry;
4+
5+
Sentry.init({
6+
dsn: 'https://public@dsn.ingest.sentry.io/1337',
7+
integrations: [
8+
Sentry.browserTracingIntegration({
9+
idleTimeout: 1000,
10+
enableLongTask: false,
11+
enableInp: true,
12+
instrumentPageLoad: false,
13+
instrumentNavigation: false,
14+
}),
15+
],
16+
tracesSampleRate: 1,
17+
});
18+
19+
const client = Sentry.getClient();
20+
21+
// Force page load transaction name to a testable value
22+
Sentry.startBrowserTracingPageLoadSpan(client, {
23+
name: 'test-url',
24+
attributes: {
25+
[Sentry.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',
26+
},
27+
});
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
const blockUI = (delay = 70) => e => {
2+
const startTime = Date.now();
3+
4+
function getElasped() {
5+
const time = Date.now();
6+
return time - startTime;
7+
}
8+
9+
while (getElasped() < delay) {
10+
//
11+
}
12+
13+
e.target.classList.add('clicked');
14+
};
15+
16+
document.querySelector('[data-test-id=not-so-slow-button]').addEventListener('click', blockUI(300));
17+
document.querySelector('[data-test-id=slow-button]').addEventListener('click', blockUI(450));
18+
document.querySelector('[data-test-id=normal-button]').addEventListener('click', blockUI());
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8" />
5+
</head>
6+
<body>
7+
<div>Rendered Before Long Task</div>
8+
<button data-test-id="slow-button" data-sentry-element="SlowButton">Slow</button>
9+
<button data-test-id="not-so-slow-button" data-sentry-element="NotSoSlowButton">Not so slow</button>
10+
<button data-test-id="normal-button" data-sentry-element="NormalButton">Click Me</button>
11+
</body>
12+
</html>

0 commit comments

Comments
 (0)