-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
fix(react): Avoid multiple name updates on navigation spans #17438
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
Conversation
aea2217
to
57c8b22
Compare
size-limit report 📦
|
0e679dc
to
27c5da6
Compare
8da7c27
to
453f5c6
Compare
1d2839b
to
8507984
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR refactors the React Router v6/v7 compatibility utilities to prevent multiple navigation span name updates and fix incorrect transaction names for lazy routes.
- Refactors the
reactrouterv6-compat-utils
module into three separate files for better organization - Implements tracking to prevent duplicate navigation span name updates during navigation
- Fixes transaction naming issues that occurred when navigating between lazy routes
Reviewed Changes
Copilot reviewed 16 out of 16 changed files in this pull request and generated 4 comments.
Show a summary per file
File | Description |
---|---|
packages/react/test/reactrouterv6-compat-utils.test.tsx |
Removes entire test file as functionality moved to new modules |
packages/react/test/reactrouter-cross-usage.test.tsx |
Removes assertions expecting multiple updateName calls since they're now prevented |
packages/react/test/reactrouter-compat-utils/utils.test.ts |
Adds comprehensive tests for utility functions moved from old module |
packages/react/test/reactrouter-compat-utils/lazy-routes.test.ts |
Adds tests for lazy route handling functionality |
packages/react/test/reactrouter-compat-utils/instrumentation.test.tsx |
Adds tests for instrumentation-specific functionality |
packages/react/src/reactrouterv7.tsx |
Updates import path to new module structure |
packages/react/src/reactrouterv6.tsx |
Updates import path to new module structure |
packages/react/src/reactrouter-compat-utils/utils.ts |
New utility functions module with core router utilities |
packages/react/src/reactrouter-compat-utils/lazy-routes.tsx |
New module for lazy route handling functionality |
packages/react/src/reactrouter-compat-utils/instrumentation.tsx |
New main instrumentation module with navigation span tracking |
packages/react/src/reactrouter-compat-utils/index.ts |
New index file exporting all functionality from sub-modules |
dev-packages/e2e-tests/test-applications/react-router-7-lazy-routes/tests/transactions.test.ts |
Adds tests for navigation between lazy routes |
dev-packages/e2e-tests/test-applications/react-router-7-lazy-routes/src/pages/InnerLazyRoutes.tsx |
Adds navigation link to another lazy route |
dev-packages/e2e-tests/test-applications/react-router-7-lazy-routes/src/pages/Index.tsx |
Adds navigation links to lazy routes |
dev-packages/e2e-tests/test-applications/react-router-7-lazy-routes/src/pages/AnotherLazyRoutes.tsx |
Adds new lazy route component with navigation links |
dev-packages/e2e-tests/test-applications/react-router-7-lazy-routes/src/index.tsx |
Adds another lazy route configuration |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
packages/react/src/reactrouter-compat-utils/instrumentation.tsx
Outdated
Show resolved
Hide resolved
packages/react/src/reactrouter-compat-utils/instrumentation.tsx
Outdated
Show resolved
Hide resolved
1431408
to
60a9d7c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Phew big change – Did not review all the tests in detail but looks good 🚀
packages/react/src/reactrouter-compat-utils/instrumentation.tsx
Outdated
Show resolved
Hide resolved
@onurtemizkan Added some minor things myself so I can release that tomorrow, thanks for the refactor! |
Removes recently introduced special-casing lazy-route -> lazy-route transaction name updates. This completes the fix in #17438. E2E tests are updated to replicate a similar case in the reproduction here: #17417 Also manually tested on the reproduction. --------- Co-authored-by: Sigrid Huemer <[email protected]>
![snyk-io[bot]](https://badgen.net/badge/icon/snyk-io%5Bbot%5D/green?label=)  [<img width="16" alt="Powered by Pull Request Badge" src="https://user-images.githubusercontent.com/1393946/111216524-d2bb8e00-85d4-11eb-821b-ed4c00989c02.png">](https://pullrequestbadge.com/?utm_medium=github&utm_source=reisene&utm_campaign=badge_info)<!-- PR-BADGE: PLEASE DO NOT REMOVE THIS COMMENT -->  <h3>Snyk has created this PR to upgrade @sentry/profiling-node from 10.8.0 to 10.9.0.</h3> :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project. <hr/> - The recommended version is **1 version** ahead of your current version. - The recommended version was released **22 days ago**. #### Issues fixed by the recommended upgrade: | | Issue | Score | Exploit Maturity | :-------------------------:|:-------------------------|:-------------------------|:-------------------------  | Regular Expression Denial of Service (ReDoS)<br/>[SNYK-JS-BRACEEXPANSION-9789073](https://snyk.io/vuln/SNYK-JS-BRACEEXPANSION-9789073) | **57** | Proof of Concept  | Regular Expression Denial of Service (ReDoS)<br/>[SNYK-JS-BRACEEXPANSION-9789073](https://snyk.io/vuln/SNYK-JS-BRACEEXPANSION-9789073) | **57** | Proof of Concept <details> <summary><b>Release notes</b></summary> <br/> <details> <summary>Package name: <b>@sentry/profiling-node</b></summary> <ul> <li> <b>10.9.0</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/10.9.0">2025-09-03</a></br><h3>Important Changes</h3> <ul> <li><strong>feat(node): Update <code>httpIntegration</code> handling of incoming requests (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17371" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17371/hovercard">#17371</a>)</strong></li> </ul> <p>This version updates the handling of the Node SDK of incoming requests. Instead of relying on @ opentelemetry/instrumentation-http, we now handle incoming request instrumentation internally, ensuring that we can optimize performance as much as possible and avoid interop problems.</p> <p>This change should not affect you, unless you're relying on very in-depth implementation details. Importantly, this also drops the <code>_experimentalConfig</code> option of the integration - this will no longer do anything.<br> Finally, you can still pass <code>instrumentation.{requestHook,responseHook,applyCustomAttributesOnSpan}</code> options, but they are deprecated and will be removed in v11. Instead, you can use the new <code>incomingRequestSpanHook</code> configuration option if you want to adjust the incoming request span.</p> <h3>Other Changes</h3> <ul> <li>feat(browser): Add replay.feedback CDN bundle (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17496" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17496/hovercard">#17496</a>)</li> <li>feat(browser): Export <code>sendFeedback</code> from CDN bundles (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17495" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17495/hovercard">#17495</a>)</li> <li>fix(astro): Ensure span name from <code>beforeStartSpan</code> isn't overwritten (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17500" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17500/hovercard">#17500</a>)</li> <li>fix(browser): Ensure source is set correctly when updating span name in-place in <code>beforeStartSpan</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17501" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17501/hovercard">#17501</a>)</li> <li>fix(core): Only set template attributes on logs if parameters exist (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17480" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17480/hovercard">#17480</a>)</li> <li>fix(nextjs): Fix parameterization for root catchall routes (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17489" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17489/hovercard">#17489</a>)</li> <li>fix(node-core): Shut down OTel TraceProvider when calling <code>Sentry.close()</code> (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17499" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17499/hovercard">#17499</a>)</li> </ul> <details> <summary> <strong>Internal Changes</strong> </summary> <ul> <li>chore: Add <code>changelog</code> script back to package.json (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17517" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17517/hovercard">#17517</a>)</li> <li>chore: Ensure prettier is run on all files (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17497" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17497/hovercard">#17497</a>)</li> <li>chore: Ignore prettier commit for git blame (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17498" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17498/hovercard">#17498</a>)</li> <li>chore: Remove experimental from Nuxt SDK package description (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17483" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17483/hovercard">#17483</a>)</li> <li>ci: Capture overhead in node app (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17420" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17420/hovercard">#17420</a>)</li> <li>ci: Ensure we fail on cancelled jobs (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17506" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17506/hovercard">#17506</a>)</li> <li>ci(deps): bump actions/checkout from 4 to 5 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17505" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17505/hovercard">#17505</a>)</li> <li>ci(deps): bump actions/create-github-app-token from 2.0.6 to 2.1.1 (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17504" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17504/hovercard">#17504</a>)</li> <li>test(aws): Improve reliability on CI (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17502" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17502/hovercard">#17502</a>)</li> </ul> </details> <h2>Bundle size 📦</h2> <table> <thead> <tr> <th>Path</th> <th>Size</th> </tr> </thead> <tbody> <tr> <td>@ sentry/browser</td> <td>23.59 KB</td> </tr> <tr> <td>@ sentry/browser - with treeshaking flags</td> <td>22.2 KB</td> </tr> <tr> <td>@ sentry/browser (incl. Tracing)</td> <td>38.93 KB</td> </tr> <tr> <td>@ sentry/browser (incl. Tracing, Replay)</td> <td>76.4 KB</td> </tr> <tr> <td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td> <td>66.43 KB</td> </tr> <tr> <td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td> <td>80.97 KB</td> </tr> <tr> <td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td> <td>92.81 KB</td> </tr> <tr> <td>@ sentry/browser (incl. Feedback)</td> <td>39.88 KB</td> </tr> <tr> <td>@ sentry/browser (incl. sendFeedback)</td> <td>28.13 KB</td> </tr> <tr> <td>@ sentry/browser (incl. FeedbackAsync)</td> <td>32.92 KB</td> </tr> <tr> <td>@ sentry/react</td> <td>25.27 KB</td> </tr> <tr> <td>@ sentry/react (incl. Tracing)</td> <td>40.91 KB</td> </tr> <tr> <td>@ sentry/vue</td> <td>27.97 KB</td> </tr> <tr> <td>@ sentry/vue (incl. Tracing)</td> <td>40.72 KB</td> </tr> <tr> <td>@ sentry/svelte</td> <td>23.62 KB</td> </tr> <tr> <td>CDN Bundle</td> <td>25.06 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing)</td> <td>38.82 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing, Replay)</td> <td>74.25 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing, Replay, Feedback)</td> <td>79.56 KB</td> </tr> <tr> <td>CDN Bundle - uncompressed</td> <td>73.2 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing) - uncompressed</td> <td>114.83 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td> <td>227.23 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td> <td>239.56 KB</td> </tr> <tr> <td>@ sentry/nextjs (client)</td> <td>42.86 KB</td> </tr> <tr> <td>@ sentry/sveltekit (client)</td> <td>39.38 KB</td> </tr> <tr> <td>@ sentry/node-core</td> <td>48.45 KB</td> </tr> <tr> <td>@ sentry/node</td> <td>146.74 KB</td> </tr> <tr> <td>@ sentry/node - without tracing</td> <td>90.02 KB</td> </tr> <tr> <td>@ sentry/aws-serverless</td> <td>103.01 KB</td> </tr> </tbody> </table> </li> <li> <b>10.8.0</b> - <a href="https://redirect.github.com/getsentry/sentry-javascript/releases/tag/10.8.0">2025-08-29</a></br><h3>Important Changes</h3> <ul> <li> <p><strong>feat(sveltekit): Add Compatibility for builtin SvelteKit Tracing (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17423" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17423/hovercard">#17423</a>)</strong></p> <p>This release makes the <code>@ sentry/sveltekit</code> SDK compatible with SvelteKit's native <a href="https://svelte.dev/docs/kit/observability" rel="nofollow">observability support</a> introduced in SvelteKit version <code>2.31.0</code>.<br> If you enable both, instrumentation and tracing, the SDK will now initialize early enough to set up additional instrumentation like database queries and it will pick up spans emitted from SvelteKit.</p> <p>We will follow up with docs how to set up the SDK soon.<br> For now, If you're on SvelteKit version <code>2.31.0</code> or newer, you can easily opt into the new feature:</p> <ol> <li> <p>Enable <a href="https://svelte.dev/docs/kit/observability" rel="nofollow">experimental tracing and instrumentation support</a> in <code>svelte.config.js</code>:</p> </li> <li> <p>Move your <code>Sentry.init()</code> call from <code>src/hooks.server.(js|ts)</code> to the new <code>instrumentation.server.(js|ts)</code> file:</p> <div class="highlight highlight-source-ts notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="// instrumentation.server.ts import * as Sentry from '@ sentry/sveltekit'; Sentry.init({ dsn: '...', // rest of your config });"><pre><span class="pl-c">// instrumentation.server.ts</span> <span class="pl-k">import</span> <span class="pl-c1">*</span> <span class="pl-k">as</span> <span class="pl-v">Sentry</span> <span class="pl-k">from</span> <span class="pl-s">'@ sentry/sveltekit'</span><span class="pl-kos">;</span> <span class="pl-v">Sentry</span><span class="pl-kos">.</span><span class="pl-en">init</span><span class="pl-kos">(</span><span class="pl-kos">{</span> <span class="pl-c1">dsn</span>: <span class="pl-s">'...'</span><span class="pl-kos">,</span> <span class="pl-c">// rest of your config</span> <span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div> <p>The rest of your Sentry config in <code>hooks.server.ts</code> (<code>sentryHandle</code> and <code>handleErrorWithSentry</code>) should stay the same.</p> </li> </ol> <p>If you prefer to stay on the hooks-file based config for now, the SDK will continue to work as previously.</p> <p>Thanks to the Svelte team and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/elliott-with-the-longest-name-on-github/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://redirect.github.com/elliott-with-the-longest-name-on-github">@ elliott-with-the-longest-name-on-github</a> for implementing observability support and for reviewing our PR!</p> </li> </ul> <h3>Other Changes</h3> <ul> <li>fix(react): Avoid multiple name updates on navigation spans (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17438" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17438/hovercard">#17438</a>)</li> </ul> <details> <summary> <strong>Internal Changes</strong> </summary> <ul> <li>test(profiling): Add tests for current state of profiling (<a href="https://redirect.github.com/getsentry/sentry-javascript/pull/17470" data-hovercard-type="pull_request" data-hovercard-url="/getsentry/sentry-javascript/pull/17470/hovercard">#17470</a>)</li> </ul> </details> <h2>Bundle size 📦</h2> <table> <thead> <tr> <th>Path</th> <th>Size</th> </tr> </thead> <tbody> <tr> <td>@ sentry/browser</td> <td>23.59 KB</td> </tr> <tr> <td>@ sentry/browser - with treeshaking flags</td> <td>22.2 KB</td> </tr> <tr> <td>@ sentry/browser (incl. Tracing)</td> <td>38.94 KB</td> </tr> <tr> <td>@ sentry/browser (incl. Tracing, Replay)</td> <td>76.4 KB</td> </tr> <tr> <td>@ sentry/browser (incl. Tracing, Replay) - with treeshaking flags</td> <td>66.43 KB</td> </tr> <tr> <td>@ sentry/browser (incl. Tracing, Replay with Canvas)</td> <td>80.97 KB</td> </tr> <tr> <td>@ sentry/browser (incl. Tracing, Replay, Feedback)</td> <td>92.8 KB</td> </tr> <tr> <td>@ sentry/browser (incl. Feedback)</td> <td>39.88 KB</td> </tr> <tr> <td>@ sentry/browser (incl. sendFeedback)</td> <td>28.13 KB</td> </tr> <tr> <td>@ sentry/browser (incl. FeedbackAsync)</td> <td>32.92 KB</td> </tr> <tr> <td>@ sentry/react</td> <td>25.27 KB</td> </tr> <tr> <td>@ sentry/react (incl. Tracing)</td> <td>40.91 KB</td> </tr> <tr> <td>@ sentry/vue</td> <td>27.97 KB</td> </tr> <tr> <td>@ sentry/vue (incl. Tracing)</td> <td>40.72 KB</td> </tr> <tr> <td>@ sentry/svelte</td> <td>23.62 KB</td> </tr> <tr> <td>CDN Bundle</td> <td>25.06 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing)</td> <td>38.82 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing, Replay)</td> <td>74.24 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing, Replay, Feedback)</td> <td>79.55 KB</td> </tr> <tr> <td>CDN Bundle - uncompressed</td> <td>73.2 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing) - uncompressed</td> <td>114.83 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td> <td>227.23 KB</td> </tr> <tr> <td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td> <td>239.53 KB</td> </tr> <tr> <td>@ sentry/nextjs (client)</td> <td>42.86 KB</td> </tr> <tr> <td>@ sentry/sveltekit (client)</td> <td>39.38 KB</td> </tr> <tr> <td>@ sentry/node-core</td> <td>46.87 KB</td> </tr> <tr> <td>@ sentry/node</td> <td>145.75 KB</td> </tr> <tr> <td>@ sentry/node - without tracing</td> <td>90.08 KB</td> </tr> <tr> <td>@ sentry/aws-serverless</td> <td>102.45 KB</td> </tr> </tbody> </table> </li> </ul> from <a href="https://redirect.github.com/getsentry/sentry-javascript/releases">@sentry/profiling-node GitHub release notes</a> </details> </details> --- > [!IMPORTANT] > > - Check the changes in this PR to ensure they won't cause issues with your project. > - This PR was automatically created by Snyk using the credentials of a real user. > - Max score is 1000. Note that the real score may have changed since the PR was raised. --- **Note:** _You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs._ **For more information:** <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiI2MDhkOWU5ZS04ZDBlLTQ5N2EtYTNkZS1mMTVkYzU1YmNkNTciLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6IjYwOGQ5ZTllLThkMGUtNDk3YS1hM2RlLWYxNWRjNTViY2Q1NyJ9fQ==" width="0" height="0"/> > - 🧐 [View latest project report](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source=github-cloud-app&utm_medium=referral&page=upgrade-pr) > - 📜 [Customise PR templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates?utm_source=&utm_content=fix-pr-template) > - 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?utm_source=github-cloud-app&utm_medium=referral&page=upgrade-pr) > - 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59/settings/integration?pkg=@sentry/profiling-node&utm_source=github-cloud-app&utm_medium=referral&page=upgrade-pr#auto-dep-upgrades) [//]: # 'snyk:metadata:{"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"@sentry/profiling-node","from":"10.8.0","to":"10.9.0"}],"env":"prod","hasFixes":true,"isBreakingChange":false,"isMajorUpgrade":false,"issuesToFix":["SNYK-JS-BRACEEXPANSION-9789073","SNYK-JS-BRACEEXPANSION-9789073"],"prId":"608d9e9e-8d0e-497a-a3de-f15dc55bcd57","prPublicId":"608d9e9e-8d0e-497a-a3de-f15dc55bcd57","packageManager":"npm","priorityScoreList":[57],"projectPublicId":"55e114f8-489e-4f14-b900-20574b041e59","projectUrl":"https://app.snyk.io/org/reisene/project/55e114f8-489e-4f14-b900-20574b041e59?utm_source=github-cloud-app&utm_medium=referral&page=upgrade-pr","prType":"upgrade","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":["priorityScore"],"type":"auto","upgrade":["SNYK-JS-BRACEEXPANSION-9789073","SNYK-JS-BRACEEXPANSION-9789073"],"upgradeInfo":{"versionsDiff":1,"publishedDate":"2025-09-03T12:59:52.227Z"},"vulns":["SNYK-JS-BRACEEXPANSION-9789073","SNYK-JS-BRACEEXPANSION-9789073"]}'
This patch prevents name updates on navigation spans from being applied more than once.
This was fine and allowed for cross-usage of different instrumentation ways (such as instrumenting
useRoutes
andcreateBrowserRouter
together), and didn't create any issues. But after adding support for lazy routes, it led to incorrect transaction names, especially when there's a navigation between two lazily-loaded routes.While on it, I also had to do some refactoring to keep the code readable and maintainable, so now
reactrouterv6-compat-utils
is separated into 3 source files (instrumentation, common utils, and lazy routes specific functionality).