Skip to content

Commit 83d319b

Browse files
authored
Merge pull request #13852 from getsentry/prepare-release/8.33.0
2 parents 8fa2caf + b8f92a1 commit 83d319b

File tree

80 files changed

+1616
-146
lines changed

Some content is hidden

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

80 files changed

+1616
-146
lines changed

.github/ISSUE_TEMPLATE/bug.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ body:
7878
label: Link to Sentry event
7979
description:
8080
If applicable, please provide a link to the affected event from your Sentry account. The event will only be
81-
viewable by Sentry staff.
81+
viewable by Sentry staff; however, the event URL will still appear on your public GitHub issue.
8282
placeholder: https://sentry.io/organizations/<org-slug>/issues/<issue-id>/events/<event-id>/?project=<project-id>
8383
- type: textarea
8484
id: sdk-setup

.github/workflows/build.yml

+29
Original file line numberDiff line numberDiff line change
@@ -902,6 +902,7 @@ jobs:
902902
'nextjs-13',
903903
'nextjs-14',
904904
'nextjs-15',
905+
'nextjs-t3',
905906
'react-17',
906907
'react-19',
907908
'react-create-hash-router',
@@ -1067,6 +1068,10 @@ jobs:
10671068
'react-send-to-sentry',
10681069
'node-express-send-to-sentry',
10691070
'debug-id-sourcemaps',
1071+
'nextjs-app-dir',
1072+
'nextjs-13',
1073+
'nextjs-14',
1074+
'nextjs-15',
10701075
]
10711076
build-command:
10721077
- false
@@ -1081,6 +1086,30 @@ jobs:
10811086
- test-application: 'create-remix-app-legacy'
10821087
assert-command: 'test:assert-sourcemaps'
10831088
label: 'create-remix-app-legacy (sourcemaps)'
1089+
- test-application: 'nextjs-app-dir'
1090+
build-command: 'test:build-canary'
1091+
label: 'nextjs-app-dir (canary)'
1092+
- test-application: 'nextjs-app-dir'
1093+
build-command: 'test:build-latest'
1094+
label: 'nextjs-app-dir (latest)'
1095+
- test-application: 'nextjs-13'
1096+
build-command: 'test:build-canary'
1097+
label: 'nextjs-13 (canary)'
1098+
- test-application: 'nextjs-13'
1099+
build-command: 'test:build-latest'
1100+
label: 'nextjs-13 (latest)'
1101+
- test-application: 'nextjs-14'
1102+
build-command: 'test:build-canary'
1103+
label: 'nextjs-14 (canary)'
1104+
- test-application: 'nextjs-14'
1105+
build-command: 'test:build-latest'
1106+
label: 'nextjs-14 (latest)'
1107+
- test-application: 'nextjs-15'
1108+
build-command: 'test:build-canary'
1109+
label: 'nextjs-15 (canary)'
1110+
- test-application: 'nextjs-15'
1111+
build-command: 'test:build-latest'
1112+
label: 'nextjs-15 (latest)'
10841113

10851114
steps:
10861115
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: "Automation: Notify issues for release"
2+
on:
3+
release:
4+
types:
5+
- published
6+
workflow_dispatch:
7+
inputs:
8+
version:
9+
description: Which version to notify issues for
10+
required: false
11+
12+
# This workflow is triggered when a release is published
13+
jobs:
14+
release-comment-issues:
15+
runs-on: ubuntu-20.04
16+
name: 'Notify issues'
17+
steps:
18+
- name: Get version
19+
id: get_version
20+
run: echo "version=${{ github.event.inputs.version || github.event.release.tag_name }}" >> $GITHUB_OUTPUT
21+
22+
- name: Comment on linked issues that are mentioned in release
23+
if: steps.get_version.outputs.version != ''
24+
uses: getsentry/release-comment-issues-gh-action@v1
25+
with:
26+
github_token: ${{ secrets.GITHUB_TOKEN }}
27+
version: ${{ steps.get_version.outputs.version }}

.github/workflows/release-size-info.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323

2424
- name: Update Github Release
2525
if: steps.get_version.outputs.version != ''
26-
uses: getsentry/size-limit-release@v1
26+
uses: getsentry/size-limit-release@v2
2727
with:
2828
github_token: ${{ secrets.GITHUB_TOKEN }}
2929
version: ${{ steps.get_version.outputs.version }}

CHANGELOG.md

+40
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,46 @@
1010

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

13+
## 8.33.0
14+
15+
### Important Changes
16+
17+
- **feat(nextjs): Support new async APIs (`headers()`, `params`, `searchParams`)
18+
([#13828](https://github.com/getsentry/sentry-javascript/pull/13828))**
19+
20+
Adds support for [new dynamic Next.js APIs](https://github.com/vercel/next.js/pull/68812).
21+
22+
- **feat(node): Add `lru-memoizer` instrumentation
23+
([#13796](https://github.com/getsentry/sentry-javascript/pull/13796))**
24+
25+
Adds integration for lru-memoizer using @opentelemetry/instrumentation-lru-memoizer.
26+
27+
- **feat(nuxt): Add `unstable_sentryBundlerPluginOptions` to module options
28+
([#13811](https://github.com/getsentry/sentry-javascript/pull/13811))**
29+
30+
Allows passing other options from the bundler plugins (vite and rollup) to Nuxt module options.
31+
32+
### Other Changes
33+
34+
- fix(browser): Ensure `wrap()` only returns functions
35+
([#13838](https://github.com/getsentry/sentry-javascript/pull/13838))
36+
- fix(core): Adapt trpc middleware input attachment
37+
([#13831](https://github.com/getsentry/sentry-javascript/pull/13831))
38+
- fix(core): Don't return trace data in `getTraceData` and `getTraceMetaTags` if SDK is disabled
39+
([#13760](https://github.com/getsentry/sentry-javascript/pull/13760))
40+
- fix(nuxt): Don't restrict source map assets upload
41+
([#13800](https://github.com/getsentry/sentry-javascript/pull/13800))
42+
- fix(nuxt): Use absolute path for client config ([#13798](https://github.com/getsentry/sentry-javascript/pull/13798))
43+
- fix(replay): Stop global event handling for paused replays
44+
([#13815](https://github.com/getsentry/sentry-javascript/pull/13815))
45+
- fix(sveltekit): add url param to source map upload options
46+
([#13812](https://github.com/getsentry/sentry-javascript/pull/13812))
47+
- fix(types): Add jsdocs to cron types ([#13776](https://github.com/getsentry/sentry-javascript/pull/13776))
48+
- fix(nextjs): Loosen @sentry/nextjs webpack peer dependency
49+
([#13826](https://github.com/getsentry/sentry-javascript/pull/13826))
50+
51+
Work in this release was contributed by @joshuajaco. Thank you for your contribution!
52+
1353
## 8.32.0
1454

1555
### Important Changes

dev-packages/e2e-tests/test-applications/nextjs-14/app/generation-functions/page.tsx

+12-14
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,31 @@ export default function Page() {
77
return <p>Hello World!</p>;
88
}
99

10-
export async function generateMetadata({
11-
searchParams,
12-
}: {
13-
searchParams: { [key: string]: string | string[] | undefined };
14-
}) {
10+
export async function generateMetadata({ searchParams }: { searchParams: any }) {
11+
// We need to dynamically check for this because Next.js made the API async for Next.js 15 and we use this test in canary tests
12+
const normalizedSearchParams = await searchParams;
13+
1514
Sentry.setTag('my-isolated-tag', true);
1615
Sentry.setTag('my-global-scope-isolated-tag', getDefaultIsolationScope().getScopeData().tags['my-isolated-tag']); // We set this tag to be able to assert that the previously set tag has not leaked into the global isolation scope
1716

18-
if (searchParams['shouldThrowInGenerateMetadata']) {
17+
if (normalizedSearchParams['shouldThrowInGenerateMetadata']) {
1918
throw new Error('generateMetadata Error');
2019
}
2120

2221
return {
23-
title: searchParams['metadataTitle'] ?? 'not set',
22+
title: normalizedSearchParams['metadataTitle'] ?? 'not set',
2423
};
2524
}
2625

27-
export function generateViewport({
28-
searchParams,
29-
}: {
30-
searchParams: { [key: string]: string | undefined };
31-
}) {
32-
if (searchParams['shouldThrowInGenerateViewport']) {
26+
export async function generateViewport({ searchParams }: { searchParams: any }) {
27+
// We need to dynamically check for this because Next.js made the API async for Next.js 15 and we use this test in canary tests
28+
const normalizedSearchParams = await searchParams;
29+
30+
if (normalizedSearchParams['shouldThrowInGenerateViewport']) {
3331
throw new Error('generateViewport Error');
3432
}
3533

3634
return {
37-
themeColor: searchParams['viewportThemeColor'] ?? 'black',
35+
themeColor: normalizedSearchParams['viewportThemeColor'] ?? 'black',
3836
};
3937
}

dev-packages/e2e-tests/test-applications/nextjs-14/app/propagation/utils.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ export function makeHttpRequest(url: string) {
2626
});
2727
}
2828

29-
export function checkHandler() {
30-
const headerList = headers();
29+
export async function checkHandler() {
30+
const headerList = await headers();
3131

3232
const headerObj: Record<string, unknown> = {};
3333
headerList.forEach((value, key) => {

dev-packages/e2e-tests/test-applications/nextjs-15/app/ppr-error/[param]/page.tsx

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@ import * as Sentry from '@sentry/nextjs';
33
export default async function Page({
44
searchParams,
55
}: {
6-
searchParams: { id?: string };
6+
searchParams: any;
77
}) {
8+
// We need to dynamically check for this because Next.js made the API async for Next.js 15 and we use this test in canary tests
9+
const normalizedSearchParams = await searchParams;
10+
811
try {
9-
console.log(searchParams.id); // Accessing a field on searchParams will throw the PPR error
12+
console.log(normalizedSearchParams.id); // Accessing a field on searchParams will throw the PPR error
1013
} catch (e) {
1114
Sentry.captureException(e); // This error should not be reported
1215
await new Promise(resolve => setTimeout(resolve, 1000)); // Wait for any async event processors to run

dev-packages/e2e-tests/test-applications/nextjs-app-dir/app/client-component/parameter/[...parameters]/page.tsx

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1+
import { use } from 'react';
12
import { ClientErrorDebugTools } from '../../../../components/client-error-debug-tools';
23

3-
export default function Page({ params }: { params: Record<string, string> }) {
4+
export default function Page({ params }: any) {
5+
// We need to dynamically check for this because Next.js made the API async for Next.js 15 and we use this test in canary tests
6+
const normalizedParams = 'then' in params ? use(params) : params;
7+
48
return (
59
<div style={{ border: '1px solid lightgrey', padding: '12px' }}>
610
<h2>Page (/client-component/[...parameters])</h2>
7-
<p>Params: {JSON.stringify(params['parameters'])}</p>
11+
<p>Params: {JSON.stringify(normalizedParams['parameters'])}</p>
812
<ClientErrorDebugTools />
913
</div>
1014
);

dev-packages/e2e-tests/test-applications/nextjs-app-dir/app/client-component/parameter/[parameter]/page.tsx

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1+
import { use } from 'react';
12
import { ClientErrorDebugTools } from '../../../../components/client-error-debug-tools';
23

3-
export default function Page({ params }: { params: Record<string, string> }) {
4+
export default function Page({ params }: any) {
5+
// We need to dynamically check for this because Next.js made the API async for Next.js 15 and we use this test in canary tests
6+
const normalizedParams = 'then' in params ? use(params) : params;
7+
48
return (
59
<div style={{ border: '1px solid lightgrey', padding: '12px' }}>
610
<h2>Page (/client-component/[parameter])</h2>
7-
<p>Parameter: {JSON.stringify(params['parameter'])}</p>
11+
<p>Parameter: {JSON.stringify(normalizedParams['parameter'])}</p>
812
<ClientErrorDebugTools />
913
</div>
1014
);

dev-packages/e2e-tests/test-applications/nextjs-app-dir/app/server-component/parameter/[...parameters]/page.tsx

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1+
import { use } from 'react';
12
import { ClientErrorDebugTools } from '../../../../components/client-error-debug-tools';
23

34
export const dynamic = 'force-dynamic';
45

5-
export default async function Page({ params }: { params: Record<string, string> }) {
6+
export default function Page({ params }: any) {
7+
// We need to dynamically check for this because Next.js made the API async for Next.js 15 and we use this test in canary tests
8+
const normalizedParams = 'then' in params ? use(params) : params;
9+
610
return (
711
<div style={{ border: '1px solid lightgrey', padding: '12px' }}>
812
<h2>Page (/server-component/[...parameters])</h2>
9-
<p>Params: {JSON.stringify(params['parameters'])}</p>
13+
<p>Params: {JSON.stringify(normalizedParams['parameters'])}</p>
1014
<ClientErrorDebugTools />
1115
</div>
1216
);

dev-packages/e2e-tests/test-applications/nextjs-app-dir/app/server-component/parameter/[parameter]/page.tsx

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1+
import { use } from 'react';
12
import { ClientErrorDebugTools } from '../../../../components/client-error-debug-tools';
23

34
export const dynamic = 'force-dynamic';
45

5-
export default async function Page({ params }: { params: Record<string, string> }) {
6+
export default function Page({ params }: any) {
7+
// We need to dynamically check for this because Next.js made the API async for Next.js 15 and we use this test in canary tests
8+
const normalizedParams = 'then' in params ? use(params) : params;
9+
610
return (
711
<div style={{ border: '1px solid lightgrey', padding: '12px' }}>
812
<h2>Page (/server-component/[parameter])</h2>
9-
<p>Parameter: {JSON.stringify(params['parameter'])}</p>
13+
<p>Parameter: {JSON.stringify(normalizedParams['parameter'])}</p>
1014
<ClientErrorDebugTools />
1115
</div>
1216
);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2+
3+
# dependencies
4+
/node_modules
5+
/.pnp
6+
.pnp.js
7+
8+
# testing
9+
/coverage
10+
11+
# next.js
12+
/.next/
13+
/out/
14+
15+
# production
16+
/build
17+
18+
# misc
19+
.DS_Store
20+
*.pem
21+
22+
# debug
23+
npm-debug.log*
24+
yarn-debug.log*
25+
yarn-error.log*
26+
.pnpm-debug.log*
27+
28+
# local env files
29+
.env*.local
30+
31+
# vercel
32+
.vercel
33+
34+
# typescript
35+
*.tsbuildinfo
36+
next-env.d.ts
37+
38+
!*.d.ts
39+
40+
# Sentry
41+
.sentryclirc
42+
43+
.vscode
44+
45+
test-results
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
@sentry:registry=http://127.0.0.1:4873
2+
@sentry-internal:registry=http://127.0.0.1:4873
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/// <reference types="next" />
2+
/// <reference types="next/image-types/global" />
3+
4+
// NOTE: This file should not be edited
5+
// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
await import('./src/env.js');
2+
3+
/** @type {import("next").NextConfig} */
4+
const config = {};
5+
6+
import { withSentryConfig } from '@sentry/nextjs';
7+
8+
export default withSentryConfig(config, {
9+
disableLogger: true,
10+
silent: true,
11+
});

0 commit comments

Comments
 (0)