feat(nestjs): Change nest sdk setup - #12920

Merged
nicohrubec merged 67 commits into
developfrom
nh/nestjs-root-module
Jul 23, 2024
Merged

feat(nestjs): Change nest sdk setup#12920
nicohrubec merged 67 commits into
developfrom
nh/nestjs-root-module

Conversation

@nicohrubec

@nicohrubecnicohrubec commented Jul 15, 2024

Copy link
Copy Markdown
Member
  • Adds a new nest root module that can be used to setup the Nest SDK as a replacement for the existing setup (with a function). Instead of calling setupNestErrorHandler in the main.ts file, users can now add SentryModule.forRoot() (feedback about the name is definitely welcome) as an import in their main app module. This approach is much more native to nest than what we used so far. This root module is introduced in the setup.ts file.
  • This root module is exported with a submodule export @sentry/nestjs/setup, because the SDK now depends on nestjs directly and without this the nest instrumentation does not work anymore, since nest gets imported before Sentry.init gets called, which disables the otel nest instrumentation.
  • Judging from the e2e tests it seems that this new approach also resolves some issues the previous implementation had, specifically this issue seems to be resolved. The e2e test that was in place, just documented the current (wrong) behavior. So I updated the test to reflect the new (correct) behavior.
  • I updated all the test applications to use the new approach but kept a copy of the nestjs-basic and nestjs-distributed-tracing with the old setup (now named node-nestjs-basic and node-nestjs-distributed-tracing respectively) so we can still verify that the old setup (which a lot of people use) still keeps working going forward.
  • Updated/New tests in this PR:
    • Sends unexpected exception to Sentry if thrown in Submodule
    • Does not send expected exception to Sentry if thrown in Submodule and caught by a global exception filter
    • Does not send expected exception to Sentry if thrown in Submodule and caught by a local exception filter
    • Sends expected exception to Sentry if thrown from submodule registered before Sentry
  • To accomodate the new tests I added several submodules in the nestjs-with-submodules test-application. These are overall similarly but have important distinctions:
    • example-module-local-filter: Submodule with a local filter registered using @UseFilters on the controller.
    • example-module-global-filter: Submodule with a global filter registered using APP_FILTER in the submodule definition.
    • example-module-global-filter-wrong-registration-order: Also has a global filter set with APP_FILTER, but is registered in the root module as first submodule, even before the SentryIntegration is initialized. This case does not work properly in the new setup (Sentry should be set first), so this module is used for tests documenting this behavior.
  • Also set "moduleResolution": "Node16" in the nestjs-basic sample app to ensure our submodule-export workaround works in both, default and sub-path-export-compatible TS configs as was suggested here.

Sorry, this PR got a bit long (but most of it is copying existing test applications into new folders).

@github-actions

github-actionsBot commented Jul 15, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser22.31 KB (0%)
@sentry/browser (incl. Tracing)33.72 KB (0%)
@sentry/browser (incl. Tracing, Replay)69.81 KB (0%)
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags63.15 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas)74.21 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback)86.52 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback, metrics)88.4 KB (0%)
@sentry/browser (incl. metrics)26.62 KB (0%)
@sentry/browser (incl. Feedback)38.98 KB (0%)
@sentry/browser (incl. sendFeedback)26.93 KB (0%)
@sentry/browser (incl. FeedbackAsync)31.54 KB (0%)
@sentry/react25.08 KB (0%)
@sentry/react (incl. Tracing)36.8 KB (0%)
@sentry/vue26.45 KB (0%)
@sentry/vue (incl. Tracing)35.61 KB (0%)
@sentry/svelte22.44 KB (0%)
CDN Bundle23.52 KB (0%)
CDN Bundle (incl. Tracing)35.5 KB (0%)
CDN Bundle (incl. Tracing, Replay)69.9 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback)75.17 KB (0%)
CDN Bundle - uncompressed69 KB (0%)
CDN Bundle (incl. Tracing) - uncompressed105.1 KB (0%)
CDN Bundle (incl. Tracing, Replay) - uncompressed216.88 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.6 KB (0%)
@sentry/nextjs (client)36.66 KB (0%)
@sentry/sveltekit (client)34.39 KB (0%)
@sentry/node111.76 KB (0%)
@sentry/node - without tracing89.21 KB (0%)
@sentry/aws-serverless98.34 KB (-0.01% 🔽)

nicohrubec added a commit to getsentry/sentry that referenced this pull request Jul 30, 2024
related to getsentry/sentry-javascript#12920
There is a new way to setup the nest SDK. Updating the product
onboarding accordingly.
---------
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
tamir-frenkel pushed a commit to tamir-frenkel/sentry that referenced this pull request Nov 30, 2025
related to getsentry/sentry-javascript#12920
There is a new way to setup the nest SDK. Updating the product
onboarding accordingly.
---------
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants

@nicohrubec@lforst@chargome
, '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(nestjs): Change nest sdk setup - #12920

Merged
nicohrubec merged 67 commits into
developfrom
nh/nestjs-root-module
Jul 23, 2024
Merged

feat(nestjs): Change nest sdk setup#12920
nicohrubec merged 67 commits into
developfrom
nh/nestjs-root-module

Conversation

@nicohrubec

@nicohrubecnicohrubec commented Jul 15, 2024

Copy link
Copy Markdown
Member
  • Adds a new nest root module that can be used to setup the Nest SDK as a replacement for the existing setup (with a function). Instead of calling setupNestErrorHandler in the main.ts file, users can now add SentryModule.forRoot() (feedback about the name is definitely welcome) as an import in their main app module. This approach is much more native to nest than what we used so far. This root module is introduced in the setup.ts file.
  • This root module is exported with a submodule export @sentry/nestjs/setup, because the SDK now depends on nestjs directly and without this the nest instrumentation does not work anymore, since nest gets imported before Sentry.init gets called, which disables the otel nest instrumentation.
  • Judging from the e2e tests it seems that this new approach also resolves some issues the previous implementation had, specifically this issue seems to be resolved. The e2e test that was in place, just documented the current (wrong) behavior. So I updated the test to reflect the new (correct) behavior.
  • I updated all the test applications to use the new approach but kept a copy of the nestjs-basic and nestjs-distributed-tracing with the old setup (now named node-nestjs-basic and node-nestjs-distributed-tracing respectively) so we can still verify that the old setup (which a lot of people use) still keeps working going forward.
  • Updated/New tests in this PR:
    • Sends unexpected exception to Sentry if thrown in Submodule
    • Does not send expected exception to Sentry if thrown in Submodule and caught by a global exception filter
    • Does not send expected exception to Sentry if thrown in Submodule and caught by a local exception filter
    • Sends expected exception to Sentry if thrown from submodule registered before Sentry
  • To accomodate the new tests I added several submodules in the nestjs-with-submodules test-application. These are overall similarly but have important distinctions:
    • example-module-local-filter: Submodule with a local filter registered using @UseFilters on the controller.
    • example-module-global-filter: Submodule with a global filter registered using APP_FILTER in the submodule definition.
    • example-module-global-filter-wrong-registration-order: Also has a global filter set with APP_FILTER, but is registered in the root module as first submodule, even before the SentryIntegration is initialized. This case does not work properly in the new setup (Sentry should be set first), so this module is used for tests documenting this behavior.
  • Also set "moduleResolution": "Node16" in the nestjs-basic sample app to ensure our submodule-export workaround works in both, default and sub-path-export-compatible TS configs as was suggested here.

Sorry, this PR got a bit long (but most of it is copying existing test applications into new folders).

@github-actions

github-actionsBot commented Jul 15, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser22.31 KB (0%)
@sentry/browser (incl. Tracing)33.72 KB (0%)
@sentry/browser (incl. Tracing, Replay)69.81 KB (0%)
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags63.15 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas)74.21 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback)86.52 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback, metrics)88.4 KB (0%)
@sentry/browser (incl. metrics)26.62 KB (0%)
@sentry/browser (incl. Feedback)38.98 KB (0%)
@sentry/browser (incl. sendFeedback)26.93 KB (0%)
@sentry/browser (incl. FeedbackAsync)31.54 KB (0%)
@sentry/react25.08 KB (0%)
@sentry/react (incl. Tracing)36.8 KB (0%)
@sentry/vue26.45 KB (0%)
@sentry/vue (incl. Tracing)35.61 KB (0%)
@sentry/svelte22.44 KB (0%)
CDN Bundle23.52 KB (0%)
CDN Bundle (incl. Tracing)35.5 KB (0%)
CDN Bundle (incl. Tracing, Replay)69.9 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback)75.17 KB (0%)
CDN Bundle - uncompressed69 KB (0%)
CDN Bundle (incl. Tracing) - uncompressed105.1 KB (0%)
CDN Bundle (incl. Tracing, Replay) - uncompressed216.88 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.6 KB (0%)
@sentry/nextjs (client)36.66 KB (0%)
@sentry/sveltekit (client)34.39 KB (0%)
@sentry/node111.76 KB (0%)
@sentry/node - without tracing89.21 KB (0%)
@sentry/aws-serverless98.34 KB (-0.01% 🔽)

nicohrubec added a commit to getsentry/sentry that referenced this pull request Jul 30, 2024
related to getsentry/sentry-javascript#12920
There is a new way to setup the nest SDK. Updating the product
onboarding accordingly.
---------
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
tamir-frenkel pushed a commit to tamir-frenkel/sentry that referenced this pull request Nov 30, 2025
related to getsentry/sentry-javascript#12920
There is a new way to setup the nest SDK. Updating the product
onboarding accordingly.
---------
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants

@nicohrubec@lforst@chargome
, '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(nestjs): Change nest sdk setup - #12920

Merged
nicohrubec merged 67 commits into
developfrom
nh/nestjs-root-module
Jul 23, 2024
Merged

feat(nestjs): Change nest sdk setup#12920
nicohrubec merged 67 commits into
developfrom
nh/nestjs-root-module

Conversation

@nicohrubec

@nicohrubecnicohrubec commented Jul 15, 2024

Copy link
Copy Markdown
Member
  • Adds a new nest root module that can be used to setup the Nest SDK as a replacement for the existing setup (with a function). Instead of calling setupNestErrorHandler in the main.ts file, users can now add SentryModule.forRoot() (feedback about the name is definitely welcome) as an import in their main app module. This approach is much more native to nest than what we used so far. This root module is introduced in the setup.ts file.
  • This root module is exported with a submodule export @sentry/nestjs/setup, because the SDK now depends on nestjs directly and without this the nest instrumentation does not work anymore, since nest gets imported before Sentry.init gets called, which disables the otel nest instrumentation.
  • Judging from the e2e tests it seems that this new approach also resolves some issues the previous implementation had, specifically this issue seems to be resolved. The e2e test that was in place, just documented the current (wrong) behavior. So I updated the test to reflect the new (correct) behavior.
  • I updated all the test applications to use the new approach but kept a copy of the nestjs-basic and nestjs-distributed-tracing with the old setup (now named node-nestjs-basic and node-nestjs-distributed-tracing respectively) so we can still verify that the old setup (which a lot of people use) still keeps working going forward.
  • Updated/New tests in this PR:
    • Sends unexpected exception to Sentry if thrown in Submodule
    • Does not send expected exception to Sentry if thrown in Submodule and caught by a global exception filter
    • Does not send expected exception to Sentry if thrown in Submodule and caught by a local exception filter
    • Sends expected exception to Sentry if thrown from submodule registered before Sentry
  • To accomodate the new tests I added several submodules in the nestjs-with-submodules test-application. These are overall similarly but have important distinctions:
    • example-module-local-filter: Submodule with a local filter registered using @UseFilters on the controller.
    • example-module-global-filter: Submodule with a global filter registered using APP_FILTER in the submodule definition.
    • example-module-global-filter-wrong-registration-order: Also has a global filter set with APP_FILTER, but is registered in the root module as first submodule, even before the SentryIntegration is initialized. This case does not work properly in the new setup (Sentry should be set first), so this module is used for tests documenting this behavior.
  • Also set "moduleResolution": "Node16" in the nestjs-basic sample app to ensure our submodule-export workaround works in both, default and sub-path-export-compatible TS configs as was suggested here.

Sorry, this PR got a bit long (but most of it is copying existing test applications into new folders).

@github-actions

github-actionsBot commented Jul 15, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser22.31 KB (0%)
@sentry/browser (incl. Tracing)33.72 KB (0%)
@sentry/browser (incl. Tracing, Replay)69.81 KB (0%)
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags63.15 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas)74.21 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback)86.52 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback, metrics)88.4 KB (0%)
@sentry/browser (incl. metrics)26.62 KB (0%)
@sentry/browser (incl. Feedback)38.98 KB (0%)
@sentry/browser (incl. sendFeedback)26.93 KB (0%)
@sentry/browser (incl. FeedbackAsync)31.54 KB (0%)
@sentry/react25.08 KB (0%)
@sentry/react (incl. Tracing)36.8 KB (0%)
@sentry/vue26.45 KB (0%)
@sentry/vue (incl. Tracing)35.61 KB (0%)
@sentry/svelte22.44 KB (0%)
CDN Bundle23.52 KB (0%)
CDN Bundle (incl. Tracing)35.5 KB (0%)
CDN Bundle (incl. Tracing, Replay)69.9 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback)75.17 KB (0%)
CDN Bundle - uncompressed69 KB (0%)
CDN Bundle (incl. Tracing) - uncompressed105.1 KB (0%)
CDN Bundle (incl. Tracing, Replay) - uncompressed216.88 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.6 KB (0%)
@sentry/nextjs (client)36.66 KB (0%)
@sentry/sveltekit (client)34.39 KB (0%)
@sentry/node111.76 KB (0%)
@sentry/node - without tracing89.21 KB (0%)
@sentry/aws-serverless98.34 KB (-0.01% 🔽)

nicohrubec added a commit to getsentry/sentry that referenced this pull request Jul 30, 2024
related to getsentry/sentry-javascript#12920
There is a new way to setup the nest SDK. Updating the product
onboarding accordingly.
---------
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
tamir-frenkel pushed a commit to tamir-frenkel/sentry that referenced this pull request Nov 30, 2025
related to getsentry/sentry-javascript#12920
There is a new way to setup the nest SDK. Updating the product
onboarding accordingly.
---------
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants

@nicohrubec@lforst@chargome
, '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(nestjs): Change nest sdk setup - #12920

Merged
nicohrubec merged 67 commits into
developfrom
nh/nestjs-root-module
Jul 23, 2024
Merged

feat(nestjs): Change nest sdk setup#12920
nicohrubec merged 67 commits into
developfrom
nh/nestjs-root-module

Conversation

@nicohrubec

@nicohrubecnicohrubec commented Jul 15, 2024

Copy link
Copy Markdown
Member
  • Adds a new nest root module that can be used to setup the Nest SDK as a replacement for the existing setup (with a function). Instead of calling setupNestErrorHandler in the main.ts file, users can now add SentryModule.forRoot() (feedback about the name is definitely welcome) as an import in their main app module. This approach is much more native to nest than what we used so far. This root module is introduced in the setup.ts file.
  • This root module is exported with a submodule export @sentry/nestjs/setup, because the SDK now depends on nestjs directly and without this the nest instrumentation does not work anymore, since nest gets imported before Sentry.init gets called, which disables the otel nest instrumentation.
  • Judging from the e2e tests it seems that this new approach also resolves some issues the previous implementation had, specifically this issue seems to be resolved. The e2e test that was in place, just documented the current (wrong) behavior. So I updated the test to reflect the new (correct) behavior.
  • I updated all the test applications to use the new approach but kept a copy of the nestjs-basic and nestjs-distributed-tracing with the old setup (now named node-nestjs-basic and node-nestjs-distributed-tracing respectively) so we can still verify that the old setup (which a lot of people use) still keeps working going forward.
  • Updated/New tests in this PR:
    • Sends unexpected exception to Sentry if thrown in Submodule
    • Does not send expected exception to Sentry if thrown in Submodule and caught by a global exception filter
    • Does not send expected exception to Sentry if thrown in Submodule and caught by a local exception filter
    • Sends expected exception to Sentry if thrown from submodule registered before Sentry
  • To accomodate the new tests I added several submodules in the nestjs-with-submodules test-application. These are overall similarly but have important distinctions:
    • example-module-local-filter: Submodule with a local filter registered using @UseFilters on the controller.
    • example-module-global-filter: Submodule with a global filter registered using APP_FILTER in the submodule definition.
    • example-module-global-filter-wrong-registration-order: Also has a global filter set with APP_FILTER, but is registered in the root module as first submodule, even before the SentryIntegration is initialized. This case does not work properly in the new setup (Sentry should be set first), so this module is used for tests documenting this behavior.
  • Also set "moduleResolution": "Node16" in the nestjs-basic sample app to ensure our submodule-export workaround works in both, default and sub-path-export-compatible TS configs as was suggested here.

Sorry, this PR got a bit long (but most of it is copying existing test applications into new folders).

@github-actions

github-actionsBot commented Jul 15, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser22.31 KB (0%)
@sentry/browser (incl. Tracing)33.72 KB (0%)
@sentry/browser (incl. Tracing, Replay)69.81 KB (0%)
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags63.15 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas)74.21 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback)86.52 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback, metrics)88.4 KB (0%)
@sentry/browser (incl. metrics)26.62 KB (0%)
@sentry/browser (incl. Feedback)38.98 KB (0%)
@sentry/browser (incl. sendFeedback)26.93 KB (0%)
@sentry/browser (incl. FeedbackAsync)31.54 KB (0%)
@sentry/react25.08 KB (0%)
@sentry/react (incl. Tracing)36.8 KB (0%)
@sentry/vue26.45 KB (0%)
@sentry/vue (incl. Tracing)35.61 KB (0%)
@sentry/svelte22.44 KB (0%)
CDN Bundle23.52 KB (0%)
CDN Bundle (incl. Tracing)35.5 KB (0%)
CDN Bundle (incl. Tracing, Replay)69.9 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback)75.17 KB (0%)
CDN Bundle - uncompressed69 KB (0%)
CDN Bundle (incl. Tracing) - uncompressed105.1 KB (0%)
CDN Bundle (incl. Tracing, Replay) - uncompressed216.88 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.6 KB (0%)
@sentry/nextjs (client)36.66 KB (0%)
@sentry/sveltekit (client)34.39 KB (0%)
@sentry/node111.76 KB (0%)
@sentry/node - without tracing89.21 KB (0%)
@sentry/aws-serverless98.34 KB (-0.01% 🔽)

nicohrubec added a commit to getsentry/sentry that referenced this pull request Jul 30, 2024
related to getsentry/sentry-javascript#12920
There is a new way to setup the nest SDK. Updating the product
onboarding accordingly.
---------
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
tamir-frenkel pushed a commit to tamir-frenkel/sentry that referenced this pull request Nov 30, 2025
related to getsentry/sentry-javascript#12920
There is a new way to setup the nest SDK. Updating the product
onboarding accordingly.
---------
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants

@nicohrubec@lforst@chargome
, '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(nestjs): Change nest sdk setup - #12920

Merged
nicohrubec merged 67 commits into
developfrom
nh/nestjs-root-module
Jul 23, 2024
Merged

feat(nestjs): Change nest sdk setup#12920
nicohrubec merged 67 commits into
developfrom
nh/nestjs-root-module

Conversation

@nicohrubec

@nicohrubecnicohrubec commented Jul 15, 2024

Copy link
Copy Markdown
Member
  • Adds a new nest root module that can be used to setup the Nest SDK as a replacement for the existing setup (with a function). Instead of calling setupNestErrorHandler in the main.ts file, users can now add SentryModule.forRoot() (feedback about the name is definitely welcome) as an import in their main app module. This approach is much more native to nest than what we used so far. This root module is introduced in the setup.ts file.
  • This root module is exported with a submodule export @sentry/nestjs/setup, because the SDK now depends on nestjs directly and without this the nest instrumentation does not work anymore, since nest gets imported before Sentry.init gets called, which disables the otel nest instrumentation.
  • Judging from the e2e tests it seems that this new approach also resolves some issues the previous implementation had, specifically this issue seems to be resolved. The e2e test that was in place, just documented the current (wrong) behavior. So I updated the test to reflect the new (correct) behavior.
  • I updated all the test applications to use the new approach but kept a copy of the nestjs-basic and nestjs-distributed-tracing with the old setup (now named node-nestjs-basic and node-nestjs-distributed-tracing respectively) so we can still verify that the old setup (which a lot of people use) still keeps working going forward.
  • Updated/New tests in this PR:
    • Sends unexpected exception to Sentry if thrown in Submodule
    • Does not send expected exception to Sentry if thrown in Submodule and caught by a global exception filter
    • Does not send expected exception to Sentry if thrown in Submodule and caught by a local exception filter
    • Sends expected exception to Sentry if thrown from submodule registered before Sentry
  • To accomodate the new tests I added several submodules in the nestjs-with-submodules test-application. These are overall similarly but have important distinctions:
    • example-module-local-filter: Submodule with a local filter registered using @UseFilters on the controller.
    • example-module-global-filter: Submodule with a global filter registered using APP_FILTER in the submodule definition.
    • example-module-global-filter-wrong-registration-order: Also has a global filter set with APP_FILTER, but is registered in the root module as first submodule, even before the SentryIntegration is initialized. This case does not work properly in the new setup (Sentry should be set first), so this module is used for tests documenting this behavior.
  • Also set "moduleResolution": "Node16" in the nestjs-basic sample app to ensure our submodule-export workaround works in both, default and sub-path-export-compatible TS configs as was suggested here.

Sorry, this PR got a bit long (but most of it is copying existing test applications into new folders).

@github-actions

github-actionsBot commented Jul 15, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser22.31 KB (0%)
@sentry/browser (incl. Tracing)33.72 KB (0%)
@sentry/browser (incl. Tracing, Replay)69.81 KB (0%)
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags63.15 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas)74.21 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback)86.52 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback, metrics)88.4 KB (0%)
@sentry/browser (incl. metrics)26.62 KB (0%)
@sentry/browser (incl. Feedback)38.98 KB (0%)
@sentry/browser (incl. sendFeedback)26.93 KB (0%)
@sentry/browser (incl. FeedbackAsync)31.54 KB (0%)
@sentry/react25.08 KB (0%)
@sentry/react (incl. Tracing)36.8 KB (0%)
@sentry/vue26.45 KB (0%)
@sentry/vue (incl. Tracing)35.61 KB (0%)
@sentry/svelte22.44 KB (0%)
CDN Bundle23.52 KB (0%)
CDN Bundle (incl. Tracing)35.5 KB (0%)
CDN Bundle (incl. Tracing, Replay)69.9 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback)75.17 KB (0%)
CDN Bundle - uncompressed69 KB (0%)
CDN Bundle (incl. Tracing) - uncompressed105.1 KB (0%)
CDN Bundle (incl. Tracing, Replay) - uncompressed216.88 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.6 KB (0%)
@sentry/nextjs (client)36.66 KB (0%)
@sentry/sveltekit (client)34.39 KB (0%)
@sentry/node111.76 KB (0%)
@sentry/node - without tracing89.21 KB (0%)
@sentry/aws-serverless98.34 KB (-0.01% 🔽)

nicohrubec added a commit to getsentry/sentry that referenced this pull request Jul 30, 2024
related to getsentry/sentry-javascript#12920
There is a new way to setup the nest SDK. Updating the product
onboarding accordingly.
---------
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
tamir-frenkel pushed a commit to tamir-frenkel/sentry that referenced this pull request Nov 30, 2025
related to getsentry/sentry-javascript#12920
There is a new way to setup the nest SDK. Updating the product
onboarding accordingly.
---------
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants

@nicohrubec@lforst@chargome
, '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(nestjs): Change nest sdk setup - #12920

Merged
nicohrubec merged 67 commits into
developfrom
nh/nestjs-root-module
Jul 23, 2024
Merged

feat(nestjs): Change nest sdk setup#12920
nicohrubec merged 67 commits into
developfrom
nh/nestjs-root-module

Conversation

@nicohrubec

@nicohrubecnicohrubec commented Jul 15, 2024

Copy link
Copy Markdown
Member
  • Adds a new nest root module that can be used to setup the Nest SDK as a replacement for the existing setup (with a function). Instead of calling setupNestErrorHandler in the main.ts file, users can now add SentryModule.forRoot() (feedback about the name is definitely welcome) as an import in their main app module. This approach is much more native to nest than what we used so far. This root module is introduced in the setup.ts file.
  • This root module is exported with a submodule export @sentry/nestjs/setup, because the SDK now depends on nestjs directly and without this the nest instrumentation does not work anymore, since nest gets imported before Sentry.init gets called, which disables the otel nest instrumentation.
  • Judging from the e2e tests it seems that this new approach also resolves some issues the previous implementation had, specifically this issue seems to be resolved. The e2e test that was in place, just documented the current (wrong) behavior. So I updated the test to reflect the new (correct) behavior.
  • I updated all the test applications to use the new approach but kept a copy of the nestjs-basic and nestjs-distributed-tracing with the old setup (now named node-nestjs-basic and node-nestjs-distributed-tracing respectively) so we can still verify that the old setup (which a lot of people use) still keeps working going forward.
  • Updated/New tests in this PR:
    • Sends unexpected exception to Sentry if thrown in Submodule
    • Does not send expected exception to Sentry if thrown in Submodule and caught by a global exception filter
    • Does not send expected exception to Sentry if thrown in Submodule and caught by a local exception filter
    • Sends expected exception to Sentry if thrown from submodule registered before Sentry
  • To accomodate the new tests I added several submodules in the nestjs-with-submodules test-application. These are overall similarly but have important distinctions:
    • example-module-local-filter: Submodule with a local filter registered using @UseFilters on the controller.
    • example-module-global-filter: Submodule with a global filter registered using APP_FILTER in the submodule definition.
    • example-module-global-filter-wrong-registration-order: Also has a global filter set with APP_FILTER, but is registered in the root module as first submodule, even before the SentryIntegration is initialized. This case does not work properly in the new setup (Sentry should be set first), so this module is used for tests documenting this behavior.
  • Also set "moduleResolution": "Node16" in the nestjs-basic sample app to ensure our submodule-export workaround works in both, default and sub-path-export-compatible TS configs as was suggested here.

Sorry, this PR got a bit long (but most of it is copying existing test applications into new folders).

@github-actions

github-actionsBot commented Jul 15, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser22.31 KB (0%)
@sentry/browser (incl. Tracing)33.72 KB (0%)
@sentry/browser (incl. Tracing, Replay)69.81 KB (0%)
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags63.15 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas)74.21 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback)86.52 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback, metrics)88.4 KB (0%)
@sentry/browser (incl. metrics)26.62 KB (0%)
@sentry/browser (incl. Feedback)38.98 KB (0%)
@sentry/browser (incl. sendFeedback)26.93 KB (0%)
@sentry/browser (incl. FeedbackAsync)31.54 KB (0%)
@sentry/react25.08 KB (0%)
@sentry/react (incl. Tracing)36.8 KB (0%)
@sentry/vue26.45 KB (0%)
@sentry/vue (incl. Tracing)35.61 KB (0%)
@sentry/svelte22.44 KB (0%)
CDN Bundle23.52 KB (0%)
CDN Bundle (incl. Tracing)35.5 KB (0%)
CDN Bundle (incl. Tracing, Replay)69.9 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback)75.17 KB (0%)
CDN Bundle - uncompressed69 KB (0%)
CDN Bundle (incl. Tracing) - uncompressed105.1 KB (0%)
CDN Bundle (incl. Tracing, Replay) - uncompressed216.88 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.6 KB (0%)
@sentry/nextjs (client)36.66 KB (0%)
@sentry/sveltekit (client)34.39 KB (0%)
@sentry/node111.76 KB (0%)
@sentry/node - without tracing89.21 KB (0%)
@sentry/aws-serverless98.34 KB (-0.01% 🔽)

nicohrubec added a commit to getsentry/sentry that referenced this pull request Jul 30, 2024
related to getsentry/sentry-javascript#12920
There is a new way to setup the nest SDK. Updating the product
onboarding accordingly.
---------
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
tamir-frenkel pushed a commit to tamir-frenkel/sentry that referenced this pull request Nov 30, 2025
related to getsentry/sentry-javascript#12920
There is a new way to setup the nest SDK. Updating the product
onboarding accordingly.
---------
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants

@nicohrubec@lforst@chargome
, '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(nestjs): Change nest sdk setup - #12920

Merged
nicohrubec merged 67 commits into
developfrom
nh/nestjs-root-module
Jul 23, 2024
Merged

feat(nestjs): Change nest sdk setup#12920
nicohrubec merged 67 commits into
developfrom
nh/nestjs-root-module

Conversation

@nicohrubec

@nicohrubecnicohrubec commented Jul 15, 2024

Copy link
Copy Markdown
Member
  • Adds a new nest root module that can be used to setup the Nest SDK as a replacement for the existing setup (with a function). Instead of calling setupNestErrorHandler in the main.ts file, users can now add SentryModule.forRoot() (feedback about the name is definitely welcome) as an import in their main app module. This approach is much more native to nest than what we used so far. This root module is introduced in the setup.ts file.
  • This root module is exported with a submodule export @sentry/nestjs/setup, because the SDK now depends on nestjs directly and without this the nest instrumentation does not work anymore, since nest gets imported before Sentry.init gets called, which disables the otel nest instrumentation.
  • Judging from the e2e tests it seems that this new approach also resolves some issues the previous implementation had, specifically this issue seems to be resolved. The e2e test that was in place, just documented the current (wrong) behavior. So I updated the test to reflect the new (correct) behavior.
  • I updated all the test applications to use the new approach but kept a copy of the nestjs-basic and nestjs-distributed-tracing with the old setup (now named node-nestjs-basic and node-nestjs-distributed-tracing respectively) so we can still verify that the old setup (which a lot of people use) still keeps working going forward.
  • Updated/New tests in this PR:
    • Sends unexpected exception to Sentry if thrown in Submodule
    • Does not send expected exception to Sentry if thrown in Submodule and caught by a global exception filter
    • Does not send expected exception to Sentry if thrown in Submodule and caught by a local exception filter
    • Sends expected exception to Sentry if thrown from submodule registered before Sentry
  • To accomodate the new tests I added several submodules in the nestjs-with-submodules test-application. These are overall similarly but have important distinctions:
    • example-module-local-filter: Submodule with a local filter registered using @UseFilters on the controller.
    • example-module-global-filter: Submodule with a global filter registered using APP_FILTER in the submodule definition.
    • example-module-global-filter-wrong-registration-order: Also has a global filter set with APP_FILTER, but is registered in the root module as first submodule, even before the SentryIntegration is initialized. This case does not work properly in the new setup (Sentry should be set first), so this module is used for tests documenting this behavior.
  • Also set "moduleResolution": "Node16" in the nestjs-basic sample app to ensure our submodule-export workaround works in both, default and sub-path-export-compatible TS configs as was suggested here.

Sorry, this PR got a bit long (but most of it is copying existing test applications into new folders).

@github-actions

github-actionsBot commented Jul 15, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser22.31 KB (0%)
@sentry/browser (incl. Tracing)33.72 KB (0%)
@sentry/browser (incl. Tracing, Replay)69.81 KB (0%)
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags63.15 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas)74.21 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback)86.52 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback, metrics)88.4 KB (0%)
@sentry/browser (incl. metrics)26.62 KB (0%)
@sentry/browser (incl. Feedback)38.98 KB (0%)
@sentry/browser (incl. sendFeedback)26.93 KB (0%)
@sentry/browser (incl. FeedbackAsync)31.54 KB (0%)
@sentry/react25.08 KB (0%)
@sentry/react (incl. Tracing)36.8 KB (0%)
@sentry/vue26.45 KB (0%)
@sentry/vue (incl. Tracing)35.61 KB (0%)
@sentry/svelte22.44 KB (0%)
CDN Bundle23.52 KB (0%)
CDN Bundle (incl. Tracing)35.5 KB (0%)
CDN Bundle (incl. Tracing, Replay)69.9 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback)75.17 KB (0%)
CDN Bundle - uncompressed69 KB (0%)
CDN Bundle (incl. Tracing) - uncompressed105.1 KB (0%)
CDN Bundle (incl. Tracing, Replay) - uncompressed216.88 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.6 KB (0%)
@sentry/nextjs (client)36.66 KB (0%)
@sentry/sveltekit (client)34.39 KB (0%)
@sentry/node111.76 KB (0%)
@sentry/node - without tracing89.21 KB (0%)
@sentry/aws-serverless98.34 KB (-0.01% 🔽)

nicohrubec added a commit to getsentry/sentry that referenced this pull request Jul 30, 2024
related to getsentry/sentry-javascript#12920
There is a new way to setup the nest SDK. Updating the product
onboarding accordingly.
---------
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
tamir-frenkel pushed a commit to tamir-frenkel/sentry that referenced this pull request Nov 30, 2025
related to getsentry/sentry-javascript#12920
There is a new way to setup the nest SDK. Updating the product
onboarding accordingly.
---------
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants

@nicohrubec@lforst@chargome
, '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(nestjs): Change nest sdk setup - #12920

Merged
nicohrubec merged 67 commits into
developfrom
nh/nestjs-root-module
Jul 23, 2024
Merged

feat(nestjs): Change nest sdk setup#12920
nicohrubec merged 67 commits into
developfrom
nh/nestjs-root-module

Conversation

@nicohrubec

@nicohrubecnicohrubec commented Jul 15, 2024

Copy link
Copy Markdown
Member
  • Adds a new nest root module that can be used to setup the Nest SDK as a replacement for the existing setup (with a function). Instead of calling setupNestErrorHandler in the main.ts file, users can now add SentryModule.forRoot() (feedback about the name is definitely welcome) as an import in their main app module. This approach is much more native to nest than what we used so far. This root module is introduced in the setup.ts file.
  • This root module is exported with a submodule export @sentry/nestjs/setup, because the SDK now depends on nestjs directly and without this the nest instrumentation does not work anymore, since nest gets imported before Sentry.init gets called, which disables the otel nest instrumentation.
  • Judging from the e2e tests it seems that this new approach also resolves some issues the previous implementation had, specifically this issue seems to be resolved. The e2e test that was in place, just documented the current (wrong) behavior. So I updated the test to reflect the new (correct) behavior.
  • I updated all the test applications to use the new approach but kept a copy of the nestjs-basic and nestjs-distributed-tracing with the old setup (now named node-nestjs-basic and node-nestjs-distributed-tracing respectively) so we can still verify that the old setup (which a lot of people use) still keeps working going forward.
  • Updated/New tests in this PR:
    • Sends unexpected exception to Sentry if thrown in Submodule
    • Does not send expected exception to Sentry if thrown in Submodule and caught by a global exception filter
    • Does not send expected exception to Sentry if thrown in Submodule and caught by a local exception filter
    • Sends expected exception to Sentry if thrown from submodule registered before Sentry
  • To accomodate the new tests I added several submodules in the nestjs-with-submodules test-application. These are overall similarly but have important distinctions:
    • example-module-local-filter: Submodule with a local filter registered using @UseFilters on the controller.
    • example-module-global-filter: Submodule with a global filter registered using APP_FILTER in the submodule definition.
    • example-module-global-filter-wrong-registration-order: Also has a global filter set with APP_FILTER, but is registered in the root module as first submodule, even before the SentryIntegration is initialized. This case does not work properly in the new setup (Sentry should be set first), so this module is used for tests documenting this behavior.
  • Also set "moduleResolution": "Node16" in the nestjs-basic sample app to ensure our submodule-export workaround works in both, default and sub-path-export-compatible TS configs as was suggested here.

Sorry, this PR got a bit long (but most of it is copying existing test applications into new folders).

@github-actions

github-actionsBot commented Jul 15, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser22.31 KB (0%)
@sentry/browser (incl. Tracing)33.72 KB (0%)
@sentry/browser (incl. Tracing, Replay)69.81 KB (0%)
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags63.15 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas)74.21 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback)86.52 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback, metrics)88.4 KB (0%)
@sentry/browser (incl. metrics)26.62 KB (0%)
@sentry/browser (incl. Feedback)38.98 KB (0%)
@sentry/browser (incl. sendFeedback)26.93 KB (0%)
@sentry/browser (incl. FeedbackAsync)31.54 KB (0%)
@sentry/react25.08 KB (0%)
@sentry/react (incl. Tracing)36.8 KB (0%)
@sentry/vue26.45 KB (0%)
@sentry/vue (incl. Tracing)35.61 KB (0%)
@sentry/svelte22.44 KB (0%)
CDN Bundle23.52 KB (0%)
CDN Bundle (incl. Tracing)35.5 KB (0%)
CDN Bundle (incl. Tracing, Replay)69.9 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback)75.17 KB (0%)
CDN Bundle - uncompressed69 KB (0%)
CDN Bundle (incl. Tracing) - uncompressed105.1 KB (0%)
CDN Bundle (incl. Tracing, Replay) - uncompressed216.88 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.6 KB (0%)
@sentry/nextjs (client)36.66 KB (0%)
@sentry/sveltekit (client)34.39 KB (0%)
@sentry/node111.76 KB (0%)
@sentry/node - without tracing89.21 KB (0%)
@sentry/aws-serverless98.34 KB (-0.01% 🔽)

nicohrubec added a commit to getsentry/sentry that referenced this pull request Jul 30, 2024
related to getsentry/sentry-javascript#12920
There is a new way to setup the nest SDK. Updating the product
onboarding accordingly.
---------
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
tamir-frenkel pushed a commit to tamir-frenkel/sentry that referenced this pull request Nov 30, 2025
related to getsentry/sentry-javascript#12920
There is a new way to setup the nest SDK. Updating the product
onboarding accordingly.
---------
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants

@nicohrubec@lforst@chargome