fix(node): ignore error rethrows in local variables integration - #13418

Closed
bruno-dasilva wants to merge 2 commits into
getsentry:developfrom
bruno-dasilva:bruno-dasilva/ignore-rethrown-errors-in-localvariables-integration
Closed

fix(node): ignore error rethrows in local variables integration#13418
bruno-dasilva wants to merge 2 commits into
getsentry:developfrom
bruno-dasilva:bruno-dasilva/ignore-rethrown-errors-in-localvariables-integration

Conversation

@bruno-dasilva

@bruno-dasilvabruno-dasilva commented Aug 18, 2024

Copy link
Copy Markdown

Fixes#13416.

We ignore debugger call stacks in the worker that don't match the original error's call stack.

This should happen in just one of two ways, from my knowledge:

  1. a thrown error is caught and re-thrown, in which case we don't want the rethrow to override the error's variables from the original throw
  2. an error is created via new Error() but then thrown at a different location. We might want to capture the variables in this case? But with the current implementation the stack length won't match anyways unless we get lucky -- so we already won't capture variables from this case.

No tests were added, and I imagine maintainers will have a broader depth of knowledge to know if this is a good idea or not - but hoping this gets someone else 90% of the way to fixing this. It functions as expected when used in my application.

  • If you've added code that should be tested, please add tests.
  • Ensure your code lints and the test suite passes (yarn lint) & (yarn test).

@bruno-dasilva

Copy link
Copy Markdown
Author

FYI @timfish I see you rerunning CI on this PR - I haven't updated any tests and I see at least some failures in integration tests specific to LocalVariables. I don't have the time to work any more on this, so I was hoping this PR would just be for demo purposes and y'all could take it from here 😄 (and I don't know if you'd prefer a totally different code change)

That cool?

@timfish

Copy link
Copy Markdown
Collaborator

Yep no problem, thanks for your efforts. I'll get stuck into this tomorrow!

@timfish

Copy link
Copy Markdown
Collaborator

Closing in favour of #13480 as I couldn't push to this fork!

@timfishtimfish closed this Aug 27, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

LocalVariables integration - re-thrown errors can completely mess up frame variables

2 participants

@bruno-dasilva@timfish
, '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

fix(node): ignore error rethrows in local variables integration - #13418

Closed
bruno-dasilva wants to merge 2 commits into
getsentry:developfrom
bruno-dasilva:bruno-dasilva/ignore-rethrown-errors-in-localvariables-integration
Closed

fix(node): ignore error rethrows in local variables integration#13418
bruno-dasilva wants to merge 2 commits into
getsentry:developfrom
bruno-dasilva:bruno-dasilva/ignore-rethrown-errors-in-localvariables-integration

Conversation

@bruno-dasilva

@bruno-dasilvabruno-dasilva commented Aug 18, 2024

Copy link
Copy Markdown

Fixes#13416.

We ignore debugger call stacks in the worker that don't match the original error's call stack.

This should happen in just one of two ways, from my knowledge:

  1. a thrown error is caught and re-thrown, in which case we don't want the rethrow to override the error's variables from the original throw
  2. an error is created via new Error() but then thrown at a different location. We might want to capture the variables in this case? But with the current implementation the stack length won't match anyways unless we get lucky -- so we already won't capture variables from this case.

No tests were added, and I imagine maintainers will have a broader depth of knowledge to know if this is a good idea or not - but hoping this gets someone else 90% of the way to fixing this. It functions as expected when used in my application.

  • If you've added code that should be tested, please add tests.
  • Ensure your code lints and the test suite passes (yarn lint) & (yarn test).

@bruno-dasilva

Copy link
Copy Markdown
Author

FYI @timfish I see you rerunning CI on this PR - I haven't updated any tests and I see at least some failures in integration tests specific to LocalVariables. I don't have the time to work any more on this, so I was hoping this PR would just be for demo purposes and y'all could take it from here 😄 (and I don't know if you'd prefer a totally different code change)

That cool?

@timfish

Copy link
Copy Markdown
Collaborator

Yep no problem, thanks for your efforts. I'll get stuck into this tomorrow!

@timfish

Copy link
Copy Markdown
Collaborator

Closing in favour of #13480 as I couldn't push to this fork!

@timfishtimfish closed this Aug 27, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

LocalVariables integration - re-thrown errors can completely mess up frame variables

2 participants

@bruno-dasilva@timfish
, '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

fix(node): ignore error rethrows in local variables integration - #13418

Closed
bruno-dasilva wants to merge 2 commits into
getsentry:developfrom
bruno-dasilva:bruno-dasilva/ignore-rethrown-errors-in-localvariables-integration
Closed

fix(node): ignore error rethrows in local variables integration#13418
bruno-dasilva wants to merge 2 commits into
getsentry:developfrom
bruno-dasilva:bruno-dasilva/ignore-rethrown-errors-in-localvariables-integration

Conversation

@bruno-dasilva

@bruno-dasilvabruno-dasilva commented Aug 18, 2024

Copy link
Copy Markdown

Fixes#13416.

We ignore debugger call stacks in the worker that don't match the original error's call stack.

This should happen in just one of two ways, from my knowledge:

  1. a thrown error is caught and re-thrown, in which case we don't want the rethrow to override the error's variables from the original throw
  2. an error is created via new Error() but then thrown at a different location. We might want to capture the variables in this case? But with the current implementation the stack length won't match anyways unless we get lucky -- so we already won't capture variables from this case.

No tests were added, and I imagine maintainers will have a broader depth of knowledge to know if this is a good idea or not - but hoping this gets someone else 90% of the way to fixing this. It functions as expected when used in my application.

  • If you've added code that should be tested, please add tests.
  • Ensure your code lints and the test suite passes (yarn lint) & (yarn test).

@bruno-dasilva

Copy link
Copy Markdown
Author

FYI @timfish I see you rerunning CI on this PR - I haven't updated any tests and I see at least some failures in integration tests specific to LocalVariables. I don't have the time to work any more on this, so I was hoping this PR would just be for demo purposes and y'all could take it from here 😄 (and I don't know if you'd prefer a totally different code change)

That cool?

@timfish

Copy link
Copy Markdown
Collaborator

Yep no problem, thanks for your efforts. I'll get stuck into this tomorrow!

@timfish

Copy link
Copy Markdown
Collaborator

Closing in favour of #13480 as I couldn't push to this fork!

@timfishtimfish closed this Aug 27, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

LocalVariables integration - re-thrown errors can completely mess up frame variables

2 participants

@bruno-dasilva@timfish
, '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

fix(node): ignore error rethrows in local variables integration - #13418

Closed
bruno-dasilva wants to merge 2 commits into
getsentry:developfrom
bruno-dasilva:bruno-dasilva/ignore-rethrown-errors-in-localvariables-integration
Closed

fix(node): ignore error rethrows in local variables integration#13418
bruno-dasilva wants to merge 2 commits into
getsentry:developfrom
bruno-dasilva:bruno-dasilva/ignore-rethrown-errors-in-localvariables-integration

Conversation

@bruno-dasilva

@bruno-dasilvabruno-dasilva commented Aug 18, 2024

Copy link
Copy Markdown

Fixes#13416.

We ignore debugger call stacks in the worker that don't match the original error's call stack.

This should happen in just one of two ways, from my knowledge:

  1. a thrown error is caught and re-thrown, in which case we don't want the rethrow to override the error's variables from the original throw
  2. an error is created via new Error() but then thrown at a different location. We might want to capture the variables in this case? But with the current implementation the stack length won't match anyways unless we get lucky -- so we already won't capture variables from this case.

No tests were added, and I imagine maintainers will have a broader depth of knowledge to know if this is a good idea or not - but hoping this gets someone else 90% of the way to fixing this. It functions as expected when used in my application.

  • If you've added code that should be tested, please add tests.
  • Ensure your code lints and the test suite passes (yarn lint) & (yarn test).

@bruno-dasilva

Copy link
Copy Markdown
Author

FYI @timfish I see you rerunning CI on this PR - I haven't updated any tests and I see at least some failures in integration tests specific to LocalVariables. I don't have the time to work any more on this, so I was hoping this PR would just be for demo purposes and y'all could take it from here 😄 (and I don't know if you'd prefer a totally different code change)

That cool?

@timfish

Copy link
Copy Markdown
Collaborator

Yep no problem, thanks for your efforts. I'll get stuck into this tomorrow!

@timfish

Copy link
Copy Markdown
Collaborator

Closing in favour of #13480 as I couldn't push to this fork!

@timfishtimfish closed this Aug 27, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

LocalVariables integration - re-thrown errors can completely mess up frame variables

2 participants

@bruno-dasilva@timfish
, '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

fix(node): ignore error rethrows in local variables integration - #13418

Closed
bruno-dasilva wants to merge 2 commits into
getsentry:developfrom
bruno-dasilva:bruno-dasilva/ignore-rethrown-errors-in-localvariables-integration
Closed

fix(node): ignore error rethrows in local variables integration#13418
bruno-dasilva wants to merge 2 commits into
getsentry:developfrom
bruno-dasilva:bruno-dasilva/ignore-rethrown-errors-in-localvariables-integration

Conversation

@bruno-dasilva

@bruno-dasilvabruno-dasilva commented Aug 18, 2024

Copy link
Copy Markdown

Fixes#13416.

We ignore debugger call stacks in the worker that don't match the original error's call stack.

This should happen in just one of two ways, from my knowledge:

  1. a thrown error is caught and re-thrown, in which case we don't want the rethrow to override the error's variables from the original throw
  2. an error is created via new Error() but then thrown at a different location. We might want to capture the variables in this case? But with the current implementation the stack length won't match anyways unless we get lucky -- so we already won't capture variables from this case.

No tests were added, and I imagine maintainers will have a broader depth of knowledge to know if this is a good idea or not - but hoping this gets someone else 90% of the way to fixing this. It functions as expected when used in my application.

  • If you've added code that should be tested, please add tests.
  • Ensure your code lints and the test suite passes (yarn lint) & (yarn test).

@bruno-dasilva

Copy link
Copy Markdown
Author

FYI @timfish I see you rerunning CI on this PR - I haven't updated any tests and I see at least some failures in integration tests specific to LocalVariables. I don't have the time to work any more on this, so I was hoping this PR would just be for demo purposes and y'all could take it from here 😄 (and I don't know if you'd prefer a totally different code change)

That cool?

@timfish

Copy link
Copy Markdown
Collaborator

Yep no problem, thanks for your efforts. I'll get stuck into this tomorrow!

@timfish

Copy link
Copy Markdown
Collaborator

Closing in favour of #13480 as I couldn't push to this fork!

@timfishtimfish closed this Aug 27, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

LocalVariables integration - re-thrown errors can completely mess up frame variables

2 participants

@bruno-dasilva@timfish
, '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

fix(node): ignore error rethrows in local variables integration - #13418

Closed
bruno-dasilva wants to merge 2 commits into
getsentry:developfrom
bruno-dasilva:bruno-dasilva/ignore-rethrown-errors-in-localvariables-integration
Closed

fix(node): ignore error rethrows in local variables integration#13418
bruno-dasilva wants to merge 2 commits into
getsentry:developfrom
bruno-dasilva:bruno-dasilva/ignore-rethrown-errors-in-localvariables-integration

Conversation

@bruno-dasilva

@bruno-dasilvabruno-dasilva commented Aug 18, 2024

Copy link
Copy Markdown

Fixes#13416.

We ignore debugger call stacks in the worker that don't match the original error's call stack.

This should happen in just one of two ways, from my knowledge:

  1. a thrown error is caught and re-thrown, in which case we don't want the rethrow to override the error's variables from the original throw
  2. an error is created via new Error() but then thrown at a different location. We might want to capture the variables in this case? But with the current implementation the stack length won't match anyways unless we get lucky -- so we already won't capture variables from this case.

No tests were added, and I imagine maintainers will have a broader depth of knowledge to know if this is a good idea or not - but hoping this gets someone else 90% of the way to fixing this. It functions as expected when used in my application.

  • If you've added code that should be tested, please add tests.
  • Ensure your code lints and the test suite passes (yarn lint) & (yarn test).

@bruno-dasilva

Copy link
Copy Markdown
Author

FYI @timfish I see you rerunning CI on this PR - I haven't updated any tests and I see at least some failures in integration tests specific to LocalVariables. I don't have the time to work any more on this, so I was hoping this PR would just be for demo purposes and y'all could take it from here 😄 (and I don't know if you'd prefer a totally different code change)

That cool?

@timfish

Copy link
Copy Markdown
Collaborator

Yep no problem, thanks for your efforts. I'll get stuck into this tomorrow!

@timfish

Copy link
Copy Markdown
Collaborator

Closing in favour of #13480 as I couldn't push to this fork!

@timfishtimfish closed this Aug 27, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

LocalVariables integration - re-thrown errors can completely mess up frame variables

2 participants

@bruno-dasilva@timfish
, '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

fix(node): ignore error rethrows in local variables integration - #13418

Closed
bruno-dasilva wants to merge 2 commits into
getsentry:developfrom
bruno-dasilva:bruno-dasilva/ignore-rethrown-errors-in-localvariables-integration
Closed

fix(node): ignore error rethrows in local variables integration#13418
bruno-dasilva wants to merge 2 commits into
getsentry:developfrom
bruno-dasilva:bruno-dasilva/ignore-rethrown-errors-in-localvariables-integration

Conversation

@bruno-dasilva

@bruno-dasilvabruno-dasilva commented Aug 18, 2024

Copy link
Copy Markdown

Fixes#13416.

We ignore debugger call stacks in the worker that don't match the original error's call stack.

This should happen in just one of two ways, from my knowledge:

  1. a thrown error is caught and re-thrown, in which case we don't want the rethrow to override the error's variables from the original throw
  2. an error is created via new Error() but then thrown at a different location. We might want to capture the variables in this case? But with the current implementation the stack length won't match anyways unless we get lucky -- so we already won't capture variables from this case.

No tests were added, and I imagine maintainers will have a broader depth of knowledge to know if this is a good idea or not - but hoping this gets someone else 90% of the way to fixing this. It functions as expected when used in my application.

  • If you've added code that should be tested, please add tests.
  • Ensure your code lints and the test suite passes (yarn lint) & (yarn test).

@bruno-dasilva

Copy link
Copy Markdown
Author

FYI @timfish I see you rerunning CI on this PR - I haven't updated any tests and I see at least some failures in integration tests specific to LocalVariables. I don't have the time to work any more on this, so I was hoping this PR would just be for demo purposes and y'all could take it from here 😄 (and I don't know if you'd prefer a totally different code change)

That cool?

@timfish

Copy link
Copy Markdown
Collaborator

Yep no problem, thanks for your efforts. I'll get stuck into this tomorrow!

@timfish

Copy link
Copy Markdown
Collaborator

Closing in favour of #13480 as I couldn't push to this fork!

@timfishtimfish closed this Aug 27, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

LocalVariables integration - re-thrown errors can completely mess up frame variables

2 participants

@bruno-dasilva@timfish
, '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

fix(node): ignore error rethrows in local variables integration - #13418

Closed
bruno-dasilva wants to merge 2 commits into
getsentry:developfrom
bruno-dasilva:bruno-dasilva/ignore-rethrown-errors-in-localvariables-integration
Closed

fix(node): ignore error rethrows in local variables integration#13418
bruno-dasilva wants to merge 2 commits into
getsentry:developfrom
bruno-dasilva:bruno-dasilva/ignore-rethrown-errors-in-localvariables-integration

Conversation

@bruno-dasilva

@bruno-dasilvabruno-dasilva commented Aug 18, 2024

Copy link
Copy Markdown

Fixes#13416.

We ignore debugger call stacks in the worker that don't match the original error's call stack.

This should happen in just one of two ways, from my knowledge:

  1. a thrown error is caught and re-thrown, in which case we don't want the rethrow to override the error's variables from the original throw
  2. an error is created via new Error() but then thrown at a different location. We might want to capture the variables in this case? But with the current implementation the stack length won't match anyways unless we get lucky -- so we already won't capture variables from this case.

No tests were added, and I imagine maintainers will have a broader depth of knowledge to know if this is a good idea or not - but hoping this gets someone else 90% of the way to fixing this. It functions as expected when used in my application.

  • If you've added code that should be tested, please add tests.
  • Ensure your code lints and the test suite passes (yarn lint) & (yarn test).

@bruno-dasilva

Copy link
Copy Markdown
Author

FYI @timfish I see you rerunning CI on this PR - I haven't updated any tests and I see at least some failures in integration tests specific to LocalVariables. I don't have the time to work any more on this, so I was hoping this PR would just be for demo purposes and y'all could take it from here 😄 (and I don't know if you'd prefer a totally different code change)

That cool?

@timfish

Copy link
Copy Markdown
Collaborator

Yep no problem, thanks for your efforts. I'll get stuck into this tomorrow!

@timfish

Copy link
Copy Markdown
Collaborator

Closing in favour of #13480 as I couldn't push to this fork!

@timfishtimfish closed this Aug 27, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

LocalVariables integration - re-thrown errors can completely mess up frame variables

2 participants

@bruno-dasilva@timfish