feat(nextjs): Do not strip origin information from different origin stack frames - #15418

Merged
lforst merged 15 commits into
developfrom
lforst-improve-diff-origin-stack-frames
Feb 24, 2025
Merged

feat(nextjs): Do not strip origin information from different origin stack frames#15418
lforst merged 15 commits into
developfrom
lforst-improve-diff-origin-stack-frames

Conversation

@lforst

@lforstlforst commented Feb 14, 2025

Copy link
Copy Markdown
Contributor

EDIT(cg): Moved this functionality behind an _experimental.thirdPartyOriginStackFrames config flag

This change should drastically improve transparency on stack frames that come from third party origins while keeping existing sourcemapping functionality.

Example: https://plausible.io/js/script.js was always turned into app:///js/script.js, leading the user to believe "wtf is this".

By not stripping scripts on different origins from their origin in the stack trace, it should be way more transparent where errors originate from, potentially even improving sourcemaps via scraping if these scripts have propper source mapping urls/debug IDs.

Additionally, we should no longer strip js-in-html stack frames, also making those more transparent.

Considerations:

  • May mess with grouping: I will go ahead and say the upsides outweigh the downsides here.
  • Backwards compat: This should be fully backwards compatible with exisiting upload setups.

@lforst
lforst marked this pull request as ready for review February 14, 2025 14:54
@lforst
lforst requested a review from chargomeFebruary 14, 2025 14:55
@chargome
chargomeforce-pushed the lforst-improve-diff-origin-stack-frames branch from 72c5969 to c38281aCompareFebruary 19, 2025 13:02
@github-actions

github-actionsBot commented Feb 19, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser23.05 KB--
@sentry/browser - with treeshaking flags22.84 KB--
@sentry/browser (incl. Tracing)36.07 KB--
@sentry/browser (incl. Tracing, Replay)73.08 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.55 KB--
@sentry/browser (incl. Tracing, Replay with Canvas)77.34 KB--
@sentry/browser (incl. Tracing, Replay, Feedback)90.28 KB--
@sentry/browser (incl. Feedback)40.2 KB--
@sentry/browser (incl. sendFeedback)27.68 KB--
@sentry/browser (incl. FeedbackAsync)32.48 KB--
@sentry/react24.87 KB--
@sentry/react (incl. Tracing)37.95 KB--
@sentry/vue27.23 KB--
@sentry/vue (incl. Tracing)37.76 KB--
@sentry/svelte23.09 KB--
CDN Bundle24.25 KB--
CDN Bundle (incl. Tracing)36.1 KB--
CDN Bundle (incl. Tracing, Replay)70.94 KB--
CDN Bundle (incl. Tracing, Replay, Feedback)76.11 KB--
CDN Bundle - uncompressed70.91 KB--
CDN Bundle (incl. Tracing) - uncompressed107.17 KB--
CDN Bundle (incl. Tracing, Replay) - uncompressed218.45 KB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed231.02 KB--
@sentry/nextjs (client)39.11 KB+0.44%+174 B 🔺
@sentry/sveltekit (client)36.48 KB--
@sentry/node129.25 KB--
@sentry/node - without tracing98.03 KB--
@sentry/aws-serverless107.45 KB-0.01%-1 B 🔽

View base workflow run

@smeubanksmeubank mentioned this pull request Feb 20, 2025
11 tasks
@codecov

codecovBot commented Feb 21, 2025

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completedFailedPassedSkipped
464714646324
View the top 1 failed test(s) by shortest run time
shouldreportANRwheneventloopblockedworkercanbestoppedandrestarted
Stack Traces | 15s run time
Error: thrown: "Exceededtimeoutof15000msforatest.
Usejest.setTimeout(newTimeout) toincreasethetimeoutvalue, ifthisisalong-runningtest."
at .../suites/anr/test.ts:204:3at_dispatchDescribe (.../jest-circus/build/index.js:98:26)
atdescribe (.../jest-circus/build/index.js:60:5)
atObject.<anonymous> (.../suites/anr/test.ts:109:1)
atRuntime._execModule (.../jest-runtime/build/index.js:1646:24)
atRuntime._loadModule (.../jest-runtime/build/index.js:1185:12)
atRuntime.requireModule (.../jest-runtime/build/index.js:1009:12)
atjestAdapter (.../build/legacy-code-todo-rewrite/jestAdapter.js:79:13)
atprocessTicksAndRejections (node:internal/process/task_queues:105:5)
atrunTestInternal (.../jest-runner/build/runTest.js:389:16)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@s1gr1ds1gr1d left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be good to use this option in an E2E test to test it.

Comment on lines +48 to +49
const { origin } = new URL(frame.filename as string);
frame.filename = frame.filename?.replace(origin, 'app://').replace(rewriteFramesAssetPrefixPath, '');

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L: That's a minor code-style comment - I would move this logic (which is shorter) upward to improve readability.

@lforst
lforst merged commit bac7387 into developFeb 24, 2025
@lforst
lforst deleted the lforst-improve-diff-origin-stack-frames branch February 24, 2025 10:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lforst@chargome@s1gr1d
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(nextjs): Do not strip origin information from different origin stack frames - #15418

Merged
lforst merged 15 commits into
developfrom
lforst-improve-diff-origin-stack-frames
Feb 24, 2025
Merged

feat(nextjs): Do not strip origin information from different origin stack frames#15418
lforst merged 15 commits into
developfrom
lforst-improve-diff-origin-stack-frames

Conversation

@lforst

@lforstlforst commented Feb 14, 2025

Copy link
Copy Markdown
Contributor

EDIT(cg): Moved this functionality behind an _experimental.thirdPartyOriginStackFrames config flag

This change should drastically improve transparency on stack frames that come from third party origins while keeping existing sourcemapping functionality.

Example: https://plausible.io/js/script.js was always turned into app:///js/script.js, leading the user to believe "wtf is this".

By not stripping scripts on different origins from their origin in the stack trace, it should be way more transparent where errors originate from, potentially even improving sourcemaps via scraping if these scripts have propper source mapping urls/debug IDs.

Additionally, we should no longer strip js-in-html stack frames, also making those more transparent.

Considerations:

  • May mess with grouping: I will go ahead and say the upsides outweigh the downsides here.
  • Backwards compat: This should be fully backwards compatible with exisiting upload setups.

@lforst
lforst marked this pull request as ready for review February 14, 2025 14:54
@lforst
lforst requested a review from chargomeFebruary 14, 2025 14:55
@chargome
chargomeforce-pushed the lforst-improve-diff-origin-stack-frames branch from 72c5969 to c38281aCompareFebruary 19, 2025 13:02
@github-actions

github-actionsBot commented Feb 19, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser23.05 KB--
@sentry/browser - with treeshaking flags22.84 KB--
@sentry/browser (incl. Tracing)36.07 KB--
@sentry/browser (incl. Tracing, Replay)73.08 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.55 KB--
@sentry/browser (incl. Tracing, Replay with Canvas)77.34 KB--
@sentry/browser (incl. Tracing, Replay, Feedback)90.28 KB--
@sentry/browser (incl. Feedback)40.2 KB--
@sentry/browser (incl. sendFeedback)27.68 KB--
@sentry/browser (incl. FeedbackAsync)32.48 KB--
@sentry/react24.87 KB--
@sentry/react (incl. Tracing)37.95 KB--
@sentry/vue27.23 KB--
@sentry/vue (incl. Tracing)37.76 KB--
@sentry/svelte23.09 KB--
CDN Bundle24.25 KB--
CDN Bundle (incl. Tracing)36.1 KB--
CDN Bundle (incl. Tracing, Replay)70.94 KB--
CDN Bundle (incl. Tracing, Replay, Feedback)76.11 KB--
CDN Bundle - uncompressed70.91 KB--
CDN Bundle (incl. Tracing) - uncompressed107.17 KB--
CDN Bundle (incl. Tracing, Replay) - uncompressed218.45 KB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed231.02 KB--
@sentry/nextjs (client)39.11 KB+0.44%+174 B 🔺
@sentry/sveltekit (client)36.48 KB--
@sentry/node129.25 KB--
@sentry/node - without tracing98.03 KB--
@sentry/aws-serverless107.45 KB-0.01%-1 B 🔽

View base workflow run

@smeubanksmeubank mentioned this pull request Feb 20, 2025
11 tasks
@codecov

codecovBot commented Feb 21, 2025

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completedFailedPassedSkipped
464714646324
View the top 1 failed test(s) by shortest run time
shouldreportANRwheneventloopblockedworkercanbestoppedandrestarted
Stack Traces | 15s run time
Error: thrown: "Exceededtimeoutof15000msforatest.
Usejest.setTimeout(newTimeout) toincreasethetimeoutvalue, ifthisisalong-runningtest."
at .../suites/anr/test.ts:204:3at_dispatchDescribe (.../jest-circus/build/index.js:98:26)
atdescribe (.../jest-circus/build/index.js:60:5)
atObject.<anonymous> (.../suites/anr/test.ts:109:1)
atRuntime._execModule (.../jest-runtime/build/index.js:1646:24)
atRuntime._loadModule (.../jest-runtime/build/index.js:1185:12)
atRuntime.requireModule (.../jest-runtime/build/index.js:1009:12)
atjestAdapter (.../build/legacy-code-todo-rewrite/jestAdapter.js:79:13)
atprocessTicksAndRejections (node:internal/process/task_queues:105:5)
atrunTestInternal (.../jest-runner/build/runTest.js:389:16)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@s1gr1ds1gr1d left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be good to use this option in an E2E test to test it.

Comment on lines +48 to +49
const { origin } = new URL(frame.filename as string);
frame.filename = frame.filename?.replace(origin, 'app://').replace(rewriteFramesAssetPrefixPath, '');

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L: That's a minor code-style comment - I would move this logic (which is shorter) upward to improve readability.

@lforst
lforst merged commit bac7387 into developFeb 24, 2025
@lforst
lforst deleted the lforst-improve-diff-origin-stack-frames branch February 24, 2025 10:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lforst@chargome@s1gr1d
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(nextjs): Do not strip origin information from different origin stack frames - #15418

Merged
lforst merged 15 commits into
developfrom
lforst-improve-diff-origin-stack-frames
Feb 24, 2025
Merged

feat(nextjs): Do not strip origin information from different origin stack frames#15418
lforst merged 15 commits into
developfrom
lforst-improve-diff-origin-stack-frames

Conversation

@lforst

@lforstlforst commented Feb 14, 2025

Copy link
Copy Markdown
Contributor

EDIT(cg): Moved this functionality behind an _experimental.thirdPartyOriginStackFrames config flag

This change should drastically improve transparency on stack frames that come from third party origins while keeping existing sourcemapping functionality.

Example: https://plausible.io/js/script.js was always turned into app:///js/script.js, leading the user to believe "wtf is this".

By not stripping scripts on different origins from their origin in the stack trace, it should be way more transparent where errors originate from, potentially even improving sourcemaps via scraping if these scripts have propper source mapping urls/debug IDs.

Additionally, we should no longer strip js-in-html stack frames, also making those more transparent.

Considerations:

  • May mess with grouping: I will go ahead and say the upsides outweigh the downsides here.
  • Backwards compat: This should be fully backwards compatible with exisiting upload setups.

@lforst
lforst marked this pull request as ready for review February 14, 2025 14:54
@lforst
lforst requested a review from chargomeFebruary 14, 2025 14:55
@chargome
chargomeforce-pushed the lforst-improve-diff-origin-stack-frames branch from 72c5969 to c38281aCompareFebruary 19, 2025 13:02
@github-actions

github-actionsBot commented Feb 19, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser23.05 KB--
@sentry/browser - with treeshaking flags22.84 KB--
@sentry/browser (incl. Tracing)36.07 KB--
@sentry/browser (incl. Tracing, Replay)73.08 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.55 KB--
@sentry/browser (incl. Tracing, Replay with Canvas)77.34 KB--
@sentry/browser (incl. Tracing, Replay, Feedback)90.28 KB--
@sentry/browser (incl. Feedback)40.2 KB--
@sentry/browser (incl. sendFeedback)27.68 KB--
@sentry/browser (incl. FeedbackAsync)32.48 KB--
@sentry/react24.87 KB--
@sentry/react (incl. Tracing)37.95 KB--
@sentry/vue27.23 KB--
@sentry/vue (incl. Tracing)37.76 KB--
@sentry/svelte23.09 KB--
CDN Bundle24.25 KB--
CDN Bundle (incl. Tracing)36.1 KB--
CDN Bundle (incl. Tracing, Replay)70.94 KB--
CDN Bundle (incl. Tracing, Replay, Feedback)76.11 KB--
CDN Bundle - uncompressed70.91 KB--
CDN Bundle (incl. Tracing) - uncompressed107.17 KB--
CDN Bundle (incl. Tracing, Replay) - uncompressed218.45 KB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed231.02 KB--
@sentry/nextjs (client)39.11 KB+0.44%+174 B 🔺
@sentry/sveltekit (client)36.48 KB--
@sentry/node129.25 KB--
@sentry/node - without tracing98.03 KB--
@sentry/aws-serverless107.45 KB-0.01%-1 B 🔽

View base workflow run

@smeubanksmeubank mentioned this pull request Feb 20, 2025
11 tasks
@codecov

codecovBot commented Feb 21, 2025

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completedFailedPassedSkipped
464714646324
View the top 1 failed test(s) by shortest run time
shouldreportANRwheneventloopblockedworkercanbestoppedandrestarted
Stack Traces | 15s run time
Error: thrown: "Exceededtimeoutof15000msforatest.
Usejest.setTimeout(newTimeout) toincreasethetimeoutvalue, ifthisisalong-runningtest."
at .../suites/anr/test.ts:204:3at_dispatchDescribe (.../jest-circus/build/index.js:98:26)
atdescribe (.../jest-circus/build/index.js:60:5)
atObject.<anonymous> (.../suites/anr/test.ts:109:1)
atRuntime._execModule (.../jest-runtime/build/index.js:1646:24)
atRuntime._loadModule (.../jest-runtime/build/index.js:1185:12)
atRuntime.requireModule (.../jest-runtime/build/index.js:1009:12)
atjestAdapter (.../build/legacy-code-todo-rewrite/jestAdapter.js:79:13)
atprocessTicksAndRejections (node:internal/process/task_queues:105:5)
atrunTestInternal (.../jest-runner/build/runTest.js:389:16)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@s1gr1ds1gr1d left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be good to use this option in an E2E test to test it.

Comment on lines +48 to +49
const { origin } = new URL(frame.filename as string);
frame.filename = frame.filename?.replace(origin, 'app://').replace(rewriteFramesAssetPrefixPath, '');

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L: That's a minor code-style comment - I would move this logic (which is shorter) upward to improve readability.

@lforst
lforst merged commit bac7387 into developFeb 24, 2025
@lforst
lforst deleted the lforst-improve-diff-origin-stack-frames branch February 24, 2025 10:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lforst@chargome@s1gr1d
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(nextjs): Do not strip origin information from different origin stack frames - #15418

Merged
lforst merged 15 commits into
developfrom
lforst-improve-diff-origin-stack-frames
Feb 24, 2025
Merged

feat(nextjs): Do not strip origin information from different origin stack frames#15418
lforst merged 15 commits into
developfrom
lforst-improve-diff-origin-stack-frames

Conversation

@lforst

@lforstlforst commented Feb 14, 2025

Copy link
Copy Markdown
Contributor

EDIT(cg): Moved this functionality behind an _experimental.thirdPartyOriginStackFrames config flag

This change should drastically improve transparency on stack frames that come from third party origins while keeping existing sourcemapping functionality.

Example: https://plausible.io/js/script.js was always turned into app:///js/script.js, leading the user to believe "wtf is this".

By not stripping scripts on different origins from their origin in the stack trace, it should be way more transparent where errors originate from, potentially even improving sourcemaps via scraping if these scripts have propper source mapping urls/debug IDs.

Additionally, we should no longer strip js-in-html stack frames, also making those more transparent.

Considerations:

  • May mess with grouping: I will go ahead and say the upsides outweigh the downsides here.
  • Backwards compat: This should be fully backwards compatible with exisiting upload setups.

@lforst
lforst marked this pull request as ready for review February 14, 2025 14:54
@lforst
lforst requested a review from chargomeFebruary 14, 2025 14:55
@chargome
chargomeforce-pushed the lforst-improve-diff-origin-stack-frames branch from 72c5969 to c38281aCompareFebruary 19, 2025 13:02
@github-actions

github-actionsBot commented Feb 19, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser23.05 KB--
@sentry/browser - with treeshaking flags22.84 KB--
@sentry/browser (incl. Tracing)36.07 KB--
@sentry/browser (incl. Tracing, Replay)73.08 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.55 KB--
@sentry/browser (incl. Tracing, Replay with Canvas)77.34 KB--
@sentry/browser (incl. Tracing, Replay, Feedback)90.28 KB--
@sentry/browser (incl. Feedback)40.2 KB--
@sentry/browser (incl. sendFeedback)27.68 KB--
@sentry/browser (incl. FeedbackAsync)32.48 KB--
@sentry/react24.87 KB--
@sentry/react (incl. Tracing)37.95 KB--
@sentry/vue27.23 KB--
@sentry/vue (incl. Tracing)37.76 KB--
@sentry/svelte23.09 KB--
CDN Bundle24.25 KB--
CDN Bundle (incl. Tracing)36.1 KB--
CDN Bundle (incl. Tracing, Replay)70.94 KB--
CDN Bundle (incl. Tracing, Replay, Feedback)76.11 KB--
CDN Bundle - uncompressed70.91 KB--
CDN Bundle (incl. Tracing) - uncompressed107.17 KB--
CDN Bundle (incl. Tracing, Replay) - uncompressed218.45 KB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed231.02 KB--
@sentry/nextjs (client)39.11 KB+0.44%+174 B 🔺
@sentry/sveltekit (client)36.48 KB--
@sentry/node129.25 KB--
@sentry/node - without tracing98.03 KB--
@sentry/aws-serverless107.45 KB-0.01%-1 B 🔽

View base workflow run

@smeubanksmeubank mentioned this pull request Feb 20, 2025
11 tasks
@codecov

codecovBot commented Feb 21, 2025

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completedFailedPassedSkipped
464714646324
View the top 1 failed test(s) by shortest run time
shouldreportANRwheneventloopblockedworkercanbestoppedandrestarted
Stack Traces | 15s run time
Error: thrown: "Exceededtimeoutof15000msforatest.
Usejest.setTimeout(newTimeout) toincreasethetimeoutvalue, ifthisisalong-runningtest."
at .../suites/anr/test.ts:204:3at_dispatchDescribe (.../jest-circus/build/index.js:98:26)
atdescribe (.../jest-circus/build/index.js:60:5)
atObject.<anonymous> (.../suites/anr/test.ts:109:1)
atRuntime._execModule (.../jest-runtime/build/index.js:1646:24)
atRuntime._loadModule (.../jest-runtime/build/index.js:1185:12)
atRuntime.requireModule (.../jest-runtime/build/index.js:1009:12)
atjestAdapter (.../build/legacy-code-todo-rewrite/jestAdapter.js:79:13)
atprocessTicksAndRejections (node:internal/process/task_queues:105:5)
atrunTestInternal (.../jest-runner/build/runTest.js:389:16)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@s1gr1ds1gr1d left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be good to use this option in an E2E test to test it.

Comment on lines +48 to +49
const { origin } = new URL(frame.filename as string);
frame.filename = frame.filename?.replace(origin, 'app://').replace(rewriteFramesAssetPrefixPath, '');

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L: That's a minor code-style comment - I would move this logic (which is shorter) upward to improve readability.

@lforst
lforst merged commit bac7387 into developFeb 24, 2025
@lforst
lforst deleted the lforst-improve-diff-origin-stack-frames branch February 24, 2025 10:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lforst@chargome@s1gr1d
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(nextjs): Do not strip origin information from different origin stack frames - #15418

Merged
lforst merged 15 commits into
developfrom
lforst-improve-diff-origin-stack-frames
Feb 24, 2025
Merged

feat(nextjs): Do not strip origin information from different origin stack frames#15418
lforst merged 15 commits into
developfrom
lforst-improve-diff-origin-stack-frames

Conversation

@lforst

@lforstlforst commented Feb 14, 2025

Copy link
Copy Markdown
Contributor

EDIT(cg): Moved this functionality behind an _experimental.thirdPartyOriginStackFrames config flag

This change should drastically improve transparency on stack frames that come from third party origins while keeping existing sourcemapping functionality.

Example: https://plausible.io/js/script.js was always turned into app:///js/script.js, leading the user to believe "wtf is this".

By not stripping scripts on different origins from their origin in the stack trace, it should be way more transparent where errors originate from, potentially even improving sourcemaps via scraping if these scripts have propper source mapping urls/debug IDs.

Additionally, we should no longer strip js-in-html stack frames, also making those more transparent.

Considerations:

  • May mess with grouping: I will go ahead and say the upsides outweigh the downsides here.
  • Backwards compat: This should be fully backwards compatible with exisiting upload setups.

@lforst
lforst marked this pull request as ready for review February 14, 2025 14:54
@lforst
lforst requested a review from chargomeFebruary 14, 2025 14:55
@chargome
chargomeforce-pushed the lforst-improve-diff-origin-stack-frames branch from 72c5969 to c38281aCompareFebruary 19, 2025 13:02
@github-actions

github-actionsBot commented Feb 19, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser23.05 KB--
@sentry/browser - with treeshaking flags22.84 KB--
@sentry/browser (incl. Tracing)36.07 KB--
@sentry/browser (incl. Tracing, Replay)73.08 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.55 KB--
@sentry/browser (incl. Tracing, Replay with Canvas)77.34 KB--
@sentry/browser (incl. Tracing, Replay, Feedback)90.28 KB--
@sentry/browser (incl. Feedback)40.2 KB--
@sentry/browser (incl. sendFeedback)27.68 KB--
@sentry/browser (incl. FeedbackAsync)32.48 KB--
@sentry/react24.87 KB--
@sentry/react (incl. Tracing)37.95 KB--
@sentry/vue27.23 KB--
@sentry/vue (incl. Tracing)37.76 KB--
@sentry/svelte23.09 KB--
CDN Bundle24.25 KB--
CDN Bundle (incl. Tracing)36.1 KB--
CDN Bundle (incl. Tracing, Replay)70.94 KB--
CDN Bundle (incl. Tracing, Replay, Feedback)76.11 KB--
CDN Bundle - uncompressed70.91 KB--
CDN Bundle (incl. Tracing) - uncompressed107.17 KB--
CDN Bundle (incl. Tracing, Replay) - uncompressed218.45 KB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed231.02 KB--
@sentry/nextjs (client)39.11 KB+0.44%+174 B 🔺
@sentry/sveltekit (client)36.48 KB--
@sentry/node129.25 KB--
@sentry/node - without tracing98.03 KB--
@sentry/aws-serverless107.45 KB-0.01%-1 B 🔽

View base workflow run

@smeubanksmeubank mentioned this pull request Feb 20, 2025
11 tasks
@codecov

codecovBot commented Feb 21, 2025

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completedFailedPassedSkipped
464714646324
View the top 1 failed test(s) by shortest run time
shouldreportANRwheneventloopblockedworkercanbestoppedandrestarted
Stack Traces | 15s run time
Error: thrown: "Exceededtimeoutof15000msforatest.
Usejest.setTimeout(newTimeout) toincreasethetimeoutvalue, ifthisisalong-runningtest."
at .../suites/anr/test.ts:204:3at_dispatchDescribe (.../jest-circus/build/index.js:98:26)
atdescribe (.../jest-circus/build/index.js:60:5)
atObject.<anonymous> (.../suites/anr/test.ts:109:1)
atRuntime._execModule (.../jest-runtime/build/index.js:1646:24)
atRuntime._loadModule (.../jest-runtime/build/index.js:1185:12)
atRuntime.requireModule (.../jest-runtime/build/index.js:1009:12)
atjestAdapter (.../build/legacy-code-todo-rewrite/jestAdapter.js:79:13)
atprocessTicksAndRejections (node:internal/process/task_queues:105:5)
atrunTestInternal (.../jest-runner/build/runTest.js:389:16)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@s1gr1ds1gr1d left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be good to use this option in an E2E test to test it.

Comment on lines +48 to +49
const { origin } = new URL(frame.filename as string);
frame.filename = frame.filename?.replace(origin, 'app://').replace(rewriteFramesAssetPrefixPath, '');

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L: That's a minor code-style comment - I would move this logic (which is shorter) upward to improve readability.

@lforst
lforst merged commit bac7387 into developFeb 24, 2025
@lforst
lforst deleted the lforst-improve-diff-origin-stack-frames branch February 24, 2025 10:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lforst@chargome@s1gr1d
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(nextjs): Do not strip origin information from different origin stack frames - #15418

Merged
lforst merged 15 commits into
developfrom
lforst-improve-diff-origin-stack-frames
Feb 24, 2025
Merged

feat(nextjs): Do not strip origin information from different origin stack frames#15418
lforst merged 15 commits into
developfrom
lforst-improve-diff-origin-stack-frames

Conversation

@lforst

@lforstlforst commented Feb 14, 2025

Copy link
Copy Markdown
Contributor

EDIT(cg): Moved this functionality behind an _experimental.thirdPartyOriginStackFrames config flag

This change should drastically improve transparency on stack frames that come from third party origins while keeping existing sourcemapping functionality.

Example: https://plausible.io/js/script.js was always turned into app:///js/script.js, leading the user to believe "wtf is this".

By not stripping scripts on different origins from their origin in the stack trace, it should be way more transparent where errors originate from, potentially even improving sourcemaps via scraping if these scripts have propper source mapping urls/debug IDs.

Additionally, we should no longer strip js-in-html stack frames, also making those more transparent.

Considerations:

  • May mess with grouping: I will go ahead and say the upsides outweigh the downsides here.
  • Backwards compat: This should be fully backwards compatible with exisiting upload setups.

@lforst
lforst marked this pull request as ready for review February 14, 2025 14:54
@lforst
lforst requested a review from chargomeFebruary 14, 2025 14:55
@chargome
chargomeforce-pushed the lforst-improve-diff-origin-stack-frames branch from 72c5969 to c38281aCompareFebruary 19, 2025 13:02
@github-actions

github-actionsBot commented Feb 19, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser23.05 KB--
@sentry/browser - with treeshaking flags22.84 KB--
@sentry/browser (incl. Tracing)36.07 KB--
@sentry/browser (incl. Tracing, Replay)73.08 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.55 KB--
@sentry/browser (incl. Tracing, Replay with Canvas)77.34 KB--
@sentry/browser (incl. Tracing, Replay, Feedback)90.28 KB--
@sentry/browser (incl. Feedback)40.2 KB--
@sentry/browser (incl. sendFeedback)27.68 KB--
@sentry/browser (incl. FeedbackAsync)32.48 KB--
@sentry/react24.87 KB--
@sentry/react (incl. Tracing)37.95 KB--
@sentry/vue27.23 KB--
@sentry/vue (incl. Tracing)37.76 KB--
@sentry/svelte23.09 KB--
CDN Bundle24.25 KB--
CDN Bundle (incl. Tracing)36.1 KB--
CDN Bundle (incl. Tracing, Replay)70.94 KB--
CDN Bundle (incl. Tracing, Replay, Feedback)76.11 KB--
CDN Bundle - uncompressed70.91 KB--
CDN Bundle (incl. Tracing) - uncompressed107.17 KB--
CDN Bundle (incl. Tracing, Replay) - uncompressed218.45 KB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed231.02 KB--
@sentry/nextjs (client)39.11 KB+0.44%+174 B 🔺
@sentry/sveltekit (client)36.48 KB--
@sentry/node129.25 KB--
@sentry/node - without tracing98.03 KB--
@sentry/aws-serverless107.45 KB-0.01%-1 B 🔽

View base workflow run

@smeubanksmeubank mentioned this pull request Feb 20, 2025
11 tasks
@codecov

codecovBot commented Feb 21, 2025

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completedFailedPassedSkipped
464714646324
View the top 1 failed test(s) by shortest run time
shouldreportANRwheneventloopblockedworkercanbestoppedandrestarted
Stack Traces | 15s run time
Error: thrown: "Exceededtimeoutof15000msforatest.
Usejest.setTimeout(newTimeout) toincreasethetimeoutvalue, ifthisisalong-runningtest."
at .../suites/anr/test.ts:204:3at_dispatchDescribe (.../jest-circus/build/index.js:98:26)
atdescribe (.../jest-circus/build/index.js:60:5)
atObject.<anonymous> (.../suites/anr/test.ts:109:1)
atRuntime._execModule (.../jest-runtime/build/index.js:1646:24)
atRuntime._loadModule (.../jest-runtime/build/index.js:1185:12)
atRuntime.requireModule (.../jest-runtime/build/index.js:1009:12)
atjestAdapter (.../build/legacy-code-todo-rewrite/jestAdapter.js:79:13)
atprocessTicksAndRejections (node:internal/process/task_queues:105:5)
atrunTestInternal (.../jest-runner/build/runTest.js:389:16)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@s1gr1ds1gr1d left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be good to use this option in an E2E test to test it.

Comment on lines +48 to +49
const { origin } = new URL(frame.filename as string);
frame.filename = frame.filename?.replace(origin, 'app://').replace(rewriteFramesAssetPrefixPath, '');

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L: That's a minor code-style comment - I would move this logic (which is shorter) upward to improve readability.

@lforst
lforst merged commit bac7387 into developFeb 24, 2025
@lforst
lforst deleted the lforst-improve-diff-origin-stack-frames branch February 24, 2025 10:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lforst@chargome@s1gr1d
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(nextjs): Do not strip origin information from different origin stack frames - #15418

Merged
lforst merged 15 commits into
developfrom
lforst-improve-diff-origin-stack-frames
Feb 24, 2025
Merged

feat(nextjs): Do not strip origin information from different origin stack frames#15418
lforst merged 15 commits into
developfrom
lforst-improve-diff-origin-stack-frames

Conversation

@lforst

@lforstlforst commented Feb 14, 2025

Copy link
Copy Markdown
Contributor

EDIT(cg): Moved this functionality behind an _experimental.thirdPartyOriginStackFrames config flag

This change should drastically improve transparency on stack frames that come from third party origins while keeping existing sourcemapping functionality.

Example: https://plausible.io/js/script.js was always turned into app:///js/script.js, leading the user to believe "wtf is this".

By not stripping scripts on different origins from their origin in the stack trace, it should be way more transparent where errors originate from, potentially even improving sourcemaps via scraping if these scripts have propper source mapping urls/debug IDs.

Additionally, we should no longer strip js-in-html stack frames, also making those more transparent.

Considerations:

  • May mess with grouping: I will go ahead and say the upsides outweigh the downsides here.
  • Backwards compat: This should be fully backwards compatible with exisiting upload setups.

@lforst
lforst marked this pull request as ready for review February 14, 2025 14:54
@lforst
lforst requested a review from chargomeFebruary 14, 2025 14:55
@chargome
chargomeforce-pushed the lforst-improve-diff-origin-stack-frames branch from 72c5969 to c38281aCompareFebruary 19, 2025 13:02
@github-actions

github-actionsBot commented Feb 19, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser23.05 KB--
@sentry/browser - with treeshaking flags22.84 KB--
@sentry/browser (incl. Tracing)36.07 KB--
@sentry/browser (incl. Tracing, Replay)73.08 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.55 KB--
@sentry/browser (incl. Tracing, Replay with Canvas)77.34 KB--
@sentry/browser (incl. Tracing, Replay, Feedback)90.28 KB--
@sentry/browser (incl. Feedback)40.2 KB--
@sentry/browser (incl. sendFeedback)27.68 KB--
@sentry/browser (incl. FeedbackAsync)32.48 KB--
@sentry/react24.87 KB--
@sentry/react (incl. Tracing)37.95 KB--
@sentry/vue27.23 KB--
@sentry/vue (incl. Tracing)37.76 KB--
@sentry/svelte23.09 KB--
CDN Bundle24.25 KB--
CDN Bundle (incl. Tracing)36.1 KB--
CDN Bundle (incl. Tracing, Replay)70.94 KB--
CDN Bundle (incl. Tracing, Replay, Feedback)76.11 KB--
CDN Bundle - uncompressed70.91 KB--
CDN Bundle (incl. Tracing) - uncompressed107.17 KB--
CDN Bundle (incl. Tracing, Replay) - uncompressed218.45 KB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed231.02 KB--
@sentry/nextjs (client)39.11 KB+0.44%+174 B 🔺
@sentry/sveltekit (client)36.48 KB--
@sentry/node129.25 KB--
@sentry/node - without tracing98.03 KB--
@sentry/aws-serverless107.45 KB-0.01%-1 B 🔽

View base workflow run

@smeubanksmeubank mentioned this pull request Feb 20, 2025
11 tasks
@codecov

codecovBot commented Feb 21, 2025

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completedFailedPassedSkipped
464714646324
View the top 1 failed test(s) by shortest run time
shouldreportANRwheneventloopblockedworkercanbestoppedandrestarted
Stack Traces | 15s run time
Error: thrown: "Exceededtimeoutof15000msforatest.
Usejest.setTimeout(newTimeout) toincreasethetimeoutvalue, ifthisisalong-runningtest."
at .../suites/anr/test.ts:204:3at_dispatchDescribe (.../jest-circus/build/index.js:98:26)
atdescribe (.../jest-circus/build/index.js:60:5)
atObject.<anonymous> (.../suites/anr/test.ts:109:1)
atRuntime._execModule (.../jest-runtime/build/index.js:1646:24)
atRuntime._loadModule (.../jest-runtime/build/index.js:1185:12)
atRuntime.requireModule (.../jest-runtime/build/index.js:1009:12)
atjestAdapter (.../build/legacy-code-todo-rewrite/jestAdapter.js:79:13)
atprocessTicksAndRejections (node:internal/process/task_queues:105:5)
atrunTestInternal (.../jest-runner/build/runTest.js:389:16)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@s1gr1ds1gr1d left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be good to use this option in an E2E test to test it.

Comment on lines +48 to +49
const { origin } = new URL(frame.filename as string);
frame.filename = frame.filename?.replace(origin, 'app://').replace(rewriteFramesAssetPrefixPath, '');

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L: That's a minor code-style comment - I would move this logic (which is shorter) upward to improve readability.

@lforst
lforst merged commit bac7387 into developFeb 24, 2025
@lforst
lforst deleted the lforst-improve-diff-origin-stack-frames branch February 24, 2025 10:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lforst@chargome@s1gr1d
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(nextjs): Do not strip origin information from different origin stack frames - #15418

Merged
lforst merged 15 commits into
developfrom
lforst-improve-diff-origin-stack-frames
Feb 24, 2025
Merged

feat(nextjs): Do not strip origin information from different origin stack frames#15418
lforst merged 15 commits into
developfrom
lforst-improve-diff-origin-stack-frames

Conversation

@lforst

@lforstlforst commented Feb 14, 2025

Copy link
Copy Markdown
Contributor

EDIT(cg): Moved this functionality behind an _experimental.thirdPartyOriginStackFrames config flag

This change should drastically improve transparency on stack frames that come from third party origins while keeping existing sourcemapping functionality.

Example: https://plausible.io/js/script.js was always turned into app:///js/script.js, leading the user to believe "wtf is this".

By not stripping scripts on different origins from their origin in the stack trace, it should be way more transparent where errors originate from, potentially even improving sourcemaps via scraping if these scripts have propper source mapping urls/debug IDs.

Additionally, we should no longer strip js-in-html stack frames, also making those more transparent.

Considerations:

  • May mess with grouping: I will go ahead and say the upsides outweigh the downsides here.
  • Backwards compat: This should be fully backwards compatible with exisiting upload setups.

@lforst
lforst marked this pull request as ready for review February 14, 2025 14:54
@lforst
lforst requested a review from chargomeFebruary 14, 2025 14:55
@chargome
chargomeforce-pushed the lforst-improve-diff-origin-stack-frames branch from 72c5969 to c38281aCompareFebruary 19, 2025 13:02
@github-actions

github-actionsBot commented Feb 19, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser23.05 KB--
@sentry/browser - with treeshaking flags22.84 KB--
@sentry/browser (incl. Tracing)36.07 KB--
@sentry/browser (incl. Tracing, Replay)73.08 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.55 KB--
@sentry/browser (incl. Tracing, Replay with Canvas)77.34 KB--
@sentry/browser (incl. Tracing, Replay, Feedback)90.28 KB--
@sentry/browser (incl. Feedback)40.2 KB--
@sentry/browser (incl. sendFeedback)27.68 KB--
@sentry/browser (incl. FeedbackAsync)32.48 KB--
@sentry/react24.87 KB--
@sentry/react (incl. Tracing)37.95 KB--
@sentry/vue27.23 KB--
@sentry/vue (incl. Tracing)37.76 KB--
@sentry/svelte23.09 KB--
CDN Bundle24.25 KB--
CDN Bundle (incl. Tracing)36.1 KB--
CDN Bundle (incl. Tracing, Replay)70.94 KB--
CDN Bundle (incl. Tracing, Replay, Feedback)76.11 KB--
CDN Bundle - uncompressed70.91 KB--
CDN Bundle (incl. Tracing) - uncompressed107.17 KB--
CDN Bundle (incl. Tracing, Replay) - uncompressed218.45 KB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed231.02 KB--
@sentry/nextjs (client)39.11 KB+0.44%+174 B 🔺
@sentry/sveltekit (client)36.48 KB--
@sentry/node129.25 KB--
@sentry/node - without tracing98.03 KB--
@sentry/aws-serverless107.45 KB-0.01%-1 B 🔽

View base workflow run

@smeubanksmeubank mentioned this pull request Feb 20, 2025
11 tasks
@codecov

codecovBot commented Feb 21, 2025

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completedFailedPassedSkipped
464714646324
View the top 1 failed test(s) by shortest run time
shouldreportANRwheneventloopblockedworkercanbestoppedandrestarted
Stack Traces | 15s run time
Error: thrown: "Exceededtimeoutof15000msforatest.
Usejest.setTimeout(newTimeout) toincreasethetimeoutvalue, ifthisisalong-runningtest."
at .../suites/anr/test.ts:204:3at_dispatchDescribe (.../jest-circus/build/index.js:98:26)
atdescribe (.../jest-circus/build/index.js:60:5)
atObject.<anonymous> (.../suites/anr/test.ts:109:1)
atRuntime._execModule (.../jest-runtime/build/index.js:1646:24)
atRuntime._loadModule (.../jest-runtime/build/index.js:1185:12)
atRuntime.requireModule (.../jest-runtime/build/index.js:1009:12)
atjestAdapter (.../build/legacy-code-todo-rewrite/jestAdapter.js:79:13)
atprocessTicksAndRejections (node:internal/process/task_queues:105:5)
atrunTestInternal (.../jest-runner/build/runTest.js:389:16)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@s1gr1ds1gr1d left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be good to use this option in an E2E test to test it.

Comment on lines +48 to +49
const { origin } = new URL(frame.filename as string);
frame.filename = frame.filename?.replace(origin, 'app://').replace(rewriteFramesAssetPrefixPath, '');

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L: That's a minor code-style comment - I would move this logic (which is shorter) upward to improve readability.

@lforst
lforst merged commit bac7387 into developFeb 24, 2025
@lforst
lforst deleted the lforst-improve-diff-origin-stack-frames branch February 24, 2025 10:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lforst@chargome@s1gr1d