@danieljvdm/dev-kit 1.0.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/package.json +1 -1
- package/skill-sources.jsonc +2 -33
- package/skill-sources.lock.json +15 -117
- package/skills/animate/LICENSE +21 -0
- package/skills/animate/NOTICE +10 -0
- package/skills/animate/SKILL.md +34 -0
- package/skills/animate/references/gestures.md +27 -0
- package/skills/animate/references/glossary.md +136 -0
- package/skills/animate/references/implementation.md +22 -0
- package/skills/animate/references/opportunities.md +18 -0
- package/skills/animate/references/principles.md +48 -0
- package/skills/animate/references/review.md +19 -0
- package/skills/cloudflare-workers/LICENSE +202 -0
- package/skills/cloudflare-workers/NOTICE +9 -0
- package/skills/cloudflare-workers/SKILL.md +26 -0
- package/skills/cloudflare-workers/references/durable-objects.md +68 -0
- package/skills/cloudflare-workers/references/sandbox.md +48 -0
- package/skills/cloudflare-workers/references/workers.md +63 -0
- package/skills/cloudflare-workers/references/wrangler.md +56 -0
- package/skills/design-ui/LICENSE +21 -0
- package/skills/design-ui/NOTICE +8 -0
- package/skills/design-ui/SKILL.md +29 -0
- package/skills/design-ui/references/appearance.md +22 -0
- package/skills/design-ui/references/components.md +33 -0
- package/skills/design-ui/references/exploration.md +50 -0
- package/skills/design-ui/references/libraries.md +39 -0
- package/skills/design-ui/references/themes.md +23 -0
- package/skills/dev-kit/SKILL.md +19 -38
- package/skills/dev-kit/references/cloudflare-worker-api.md +1 -1
- package/skills/dev-kit/references/skills.md +2 -2
- package/skills/effect-development/SKILL.md +27 -0
- package/skills/effect-development/agents/openai.yaml +4 -0
- package/skills/effect-development/references/api/index.md +32 -0
- package/skills/effect-development/references/api/schema-codecs.md +15 -0
- package/skills/{build-effect-apis/references → effect-development/references/api}/verification.md +10 -5
- package/skills/{effect-architecture-audit/SKILL.md → effect-development/references/architecture/index.md} +1 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-client.md +8 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-testing.md +7 -2
- package/skills/effect-development/references/atom/index.md +40 -0
- package/skills/{build-effect-clis/references → effect-development/references/cli}/entrypoints-and-testing.md +6 -2
- package/skills/effect-development/references/cli/index.md +39 -0
- package/skills/effect-development/references/setup.md +15 -0
- package/skills/open-pull-request/SKILL.md +10 -70
- package/skills/open-pull-request/references/evidence.md +22 -0
- package/skills/open-pull-request/references/explanation.md +21 -0
- package/skills/open-pull-request/references/publication.md +21 -0
- package/skills/sentry/LICENSE +202 -0
- package/skills/sentry/LICENSE-UPSTREAM +21 -0
- package/skills/sentry/NOTICE +14 -0
- package/skills/sentry/SKILL.md +33 -0
- package/skills/sentry/references/alert-payloads.md +105 -0
- package/skills/sentry/references/alerts.md +17 -0
- package/skills/sentry/references/artifacts.md +25 -0
- package/skills/sentry/references/auth-token.md +65 -0
- package/skills/sentry/references/concepts/ai-monitoring.md +131 -0
- package/skills/sentry/references/concepts/choosing-a-signal.md +78 -0
- package/skills/sentry/references/concepts/crons.md +50 -0
- package/skills/sentry/references/concepts/data-scrubbing.md +43 -0
- package/skills/sentry/references/concepts/errors.md +40 -0
- package/skills/sentry/references/concepts/logging.md +85 -0
- package/skills/sentry/references/concepts/metrics.md +49 -0
- package/skills/sentry/references/concepts/monitors.md +78 -0
- package/skills/sentry/references/concepts/profiling.md +38 -0
- package/skills/sentry/references/concepts/reduce-volume.md +49 -0
- package/skills/sentry/references/concepts/releases.md +43 -0
- package/skills/sentry/references/concepts/session-replay.md +35 -0
- package/skills/sentry/references/concepts/tracing.md +54 -0
- package/skills/sentry/references/concepts/user-feedback.md +36 -0
- package/skills/sentry/references/debug-artifacts/android.md +68 -0
- package/skills/sentry/references/debug-artifacts/apple.md +96 -0
- package/skills/sentry/references/debug-artifacts/dotnet.md +70 -0
- package/skills/sentry/references/debug-artifacts/flutter.md +65 -0
- package/skills/sentry/references/debug-artifacts/index.md +75 -0
- package/skills/sentry/references/debug-artifacts/javascript.md +94 -0
- package/skills/sentry/references/debug-artifacts/matching.md +73 -0
- package/skills/sentry/references/debug-artifacts/react-native.md +75 -0
- package/skills/sentry/references/first-error-setup.md +25 -0
- package/skills/sentry/references/instrumentation.md +30 -0
- package/skills/sentry/references/issues.md +32 -0
- package/skills/sentry/references/new-project.md +17 -0
- package/skills/sentry/references/otel-exporter.md +30 -0
- package/skills/sentry/references/release-workflow.md +31 -0
- package/skills/sentry/references/releases/ci-pipeline.md +214 -0
- package/skills/sentry/references/releases/index.md +93 -0
- package/skills/sentry/references/releases/suspect-commits.md +155 -0
- package/skills/sentry/references/releases/tagging.md +131 -0
- package/skills/sentry/references/releases/troubleshooting.md +67 -0
- package/skills/sentry/references/sdks/android/crons.md +305 -0
- package/skills/sentry/references/sdks/android/error-monitoring.md +800 -0
- package/skills/sentry/references/sdks/android/index.md +748 -0
- package/skills/sentry/references/sdks/android/integrations.md +48 -0
- package/skills/sentry/references/sdks/android/logging.md +374 -0
- package/skills/sentry/references/sdks/android/metrics.md +288 -0
- package/skills/sentry/references/sdks/android/profiling.md +397 -0
- package/skills/sentry/references/sdks/android/session-replay.md +406 -0
- package/skills/sentry/references/sdks/android/tracing.md +861 -0
- package/skills/sentry/references/sdks/browser/error-monitoring.md +861 -0
- package/skills/sentry/references/sdks/browser/index.md +714 -0
- package/skills/sentry/references/sdks/browser/logging.md +315 -0
- package/skills/sentry/references/sdks/browser/profiling.md +236 -0
- package/skills/sentry/references/sdks/browser/session-replay.md +586 -0
- package/skills/sentry/references/sdks/browser/tracing.md +561 -0
- package/skills/sentry/references/sdks/browser/user-feedback.md +354 -0
- package/skills/sentry/references/sdks/cloudflare/ai-monitoring.md +661 -0
- package/skills/sentry/references/sdks/cloudflare/crons.md +231 -0
- package/skills/sentry/references/sdks/cloudflare/durable-objects.md +381 -0
- package/skills/sentry/references/sdks/cloudflare/error-monitoring.md +329 -0
- package/skills/sentry/references/sdks/cloudflare/index.md +698 -0
- package/skills/sentry/references/sdks/cloudflare/logging.md +169 -0
- package/skills/sentry/references/sdks/cloudflare/nodejs-compat.md +134 -0
- package/skills/sentry/references/sdks/cloudflare/tracing.md +475 -0
- package/skills/sentry/references/sdks/cocoa/error-monitoring.md +394 -0
- package/skills/sentry/references/sdks/cocoa/index.md +497 -0
- package/skills/sentry/references/sdks/cocoa/logging.md +209 -0
- package/skills/sentry/references/sdks/cocoa/metrics.md +136 -0
- package/skills/sentry/references/sdks/cocoa/profiling.md +223 -0
- package/skills/sentry/references/sdks/cocoa/session-replay.md +257 -0
- package/skills/sentry/references/sdks/cocoa/tracing.md +524 -0
- package/skills/sentry/references/sdks/cocoa/user-feedback.md +310 -0
- package/skills/sentry/references/sdks/dotnet/crons.md +465 -0
- package/skills/sentry/references/sdks/dotnet/error-monitoring.md +1100 -0
- package/skills/sentry/references/sdks/dotnet/index.md +614 -0
- package/skills/sentry/references/sdks/dotnet/logging.md +556 -0
- package/skills/sentry/references/sdks/dotnet/metrics.md +229 -0
- package/skills/sentry/references/sdks/dotnet/profiling.md +296 -0
- package/skills/sentry/references/sdks/dotnet/tracing.md +897 -0
- package/skills/sentry/references/sdks/elixir/crons.md +371 -0
- package/skills/sentry/references/sdks/elixir/error-monitoring.md +335 -0
- package/skills/sentry/references/sdks/elixir/index.md +383 -0
- package/skills/sentry/references/sdks/elixir/logging.md +239 -0
- package/skills/sentry/references/sdks/elixir/tracing.md +233 -0
- package/skills/sentry/references/sdks/flutter/ecosystem-integrations.md +70 -0
- package/skills/sentry/references/sdks/flutter/error-monitoring.md +312 -0
- package/skills/sentry/references/sdks/flutter/index.md +728 -0
- package/skills/sentry/references/sdks/flutter/logging.md +387 -0
- package/skills/sentry/references/sdks/flutter/metrics.md +310 -0
- package/skills/sentry/references/sdks/flutter/profiling.md +214 -0
- package/skills/sentry/references/sdks/flutter/session-replay.md +308 -0
- package/skills/sentry/references/sdks/flutter/tracing.md +502 -0
- package/skills/sentry/references/sdks/go/crons.md +270 -0
- package/skills/sentry/references/sdks/go/error-monitoring.md +361 -0
- package/skills/sentry/references/sdks/go/index.md +324 -0
- package/skills/sentry/references/sdks/go/logging.md +354 -0
- package/skills/sentry/references/sdks/go/metrics.md +273 -0
- package/skills/sentry/references/sdks/go/profiling.md +46 -0
- package/skills/sentry/references/sdks/go/tracing.md +366 -0
- package/skills/sentry/references/sdks/index.md +41 -0
- package/skills/sentry/references/sdks/nestjs/ai-monitoring.md +410 -0
- package/skills/sentry/references/sdks/nestjs/crons.md +268 -0
- package/skills/sentry/references/sdks/nestjs/error-monitoring.md +729 -0
- package/skills/sentry/references/sdks/nestjs/index.md +699 -0
- package/skills/sentry/references/sdks/nestjs/logging.md +174 -0
- package/skills/sentry/references/sdks/nestjs/metrics.md +243 -0
- package/skills/sentry/references/sdks/nestjs/profiling.md +127 -0
- package/skills/sentry/references/sdks/nestjs/tracing.md +762 -0
- package/skills/sentry/references/sdks/nextjs/ai-monitoring.md +494 -0
- package/skills/sentry/references/sdks/nextjs/crons.md +383 -0
- package/skills/sentry/references/sdks/nextjs/error-monitoring.md +974 -0
- package/skills/sentry/references/sdks/nextjs/index.md +491 -0
- package/skills/sentry/references/sdks/nextjs/logging.md +381 -0
- package/skills/sentry/references/sdks/nextjs/metrics.md +411 -0
- package/skills/sentry/references/sdks/nextjs/profiling.md +403 -0
- package/skills/sentry/references/sdks/nextjs/session-replay.md +462 -0
- package/skills/sentry/references/sdks/nextjs/tracing.md +628 -0
- package/skills/sentry/references/sdks/node/ai-monitoring.md +303 -0
- package/skills/sentry/references/sdks/node/crons.md +432 -0
- package/skills/sentry/references/sdks/node/error-monitoring.md +1125 -0
- package/skills/sentry/references/sdks/node/index.md +942 -0
- package/skills/sentry/references/sdks/node/logging.md +380 -0
- package/skills/sentry/references/sdks/node/metrics.md +278 -0
- package/skills/sentry/references/sdks/node/profiling.md +373 -0
- package/skills/sentry/references/sdks/node/tracing.md +878 -0
- package/skills/sentry/references/sdks/php/ai-monitoring.md +310 -0
- package/skills/sentry/references/sdks/php/crons.md +265 -0
- package/skills/sentry/references/sdks/php/error-monitoring.md +626 -0
- package/skills/sentry/references/sdks/php/index.md +362 -0
- package/skills/sentry/references/sdks/php/laravel.md +542 -0
- package/skills/sentry/references/sdks/php/logging.md +242 -0
- package/skills/sentry/references/sdks/php/metrics.md +193 -0
- package/skills/sentry/references/sdks/php/profiling.md +115 -0
- package/skills/sentry/references/sdks/php/symfony.md +552 -0
- package/skills/sentry/references/sdks/php/tracing.md +516 -0
- package/skills/sentry/references/sdks/python/ai-monitoring.md +351 -0
- package/skills/sentry/references/sdks/python/crons.md +218 -0
- package/skills/sentry/references/sdks/python/error-monitoring.md +292 -0
- package/skills/sentry/references/sdks/python/index.md +361 -0
- package/skills/sentry/references/sdks/python/logging.md +234 -0
- package/skills/sentry/references/sdks/python/metrics.md +154 -0
- package/skills/sentry/references/sdks/python/profiling.md +120 -0
- package/skills/sentry/references/sdks/python/tracing.md +364 -0
- package/skills/sentry/references/sdks/react/error-monitoring.md +1607 -0
- package/skills/sentry/references/sdks/react/index.md +492 -0
- package/skills/sentry/references/sdks/react/logging.md +364 -0
- package/skills/sentry/references/sdks/react/profiling.md +322 -0
- package/skills/sentry/references/sdks/react/react-features.md +1272 -0
- package/skills/sentry/references/sdks/react/session-replay.md +1193 -0
- package/skills/sentry/references/sdks/react/tracing.md +1415 -0
- package/skills/sentry/references/sdks/react-native/error-monitoring.md +1481 -0
- package/skills/sentry/references/sdks/react-native/expo-config-plugin.md +45 -0
- package/skills/sentry/references/sdks/react-native/index.md +1030 -0
- package/skills/sentry/references/sdks/react-native/logging.md +444 -0
- package/skills/sentry/references/sdks/react-native/profiling.md +386 -0
- package/skills/sentry/references/sdks/react-native/session-replay.md +704 -0
- package/skills/sentry/references/sdks/react-native/tracing.md +1086 -0
- package/skills/sentry/references/sdks/react-native/user-feedback.md +815 -0
- package/skills/sentry/references/sdks/react-router-framework/error-monitoring.md +127 -0
- package/skills/sentry/references/sdks/react-router-framework/index.md +411 -0
- package/skills/sentry/references/sdks/react-router-framework/logging.md +66 -0
- package/skills/sentry/references/sdks/react-router-framework/profiling.md +57 -0
- package/skills/sentry/references/sdks/react-router-framework/react-router-framework-features.md +110 -0
- package/skills/sentry/references/sdks/react-router-framework/session-replay.md +67 -0
- package/skills/sentry/references/sdks/react-router-framework/tracing.md +96 -0
- package/skills/sentry/references/sdks/react-router-framework/user-feedback.md +71 -0
- package/skills/sentry/references/sdks/ruby/crons.md +184 -0
- package/skills/sentry/references/sdks/ruby/error-monitoring.md +248 -0
- package/skills/sentry/references/sdks/ruby/index.md +297 -0
- package/skills/sentry/references/sdks/ruby/logging.md +168 -0
- package/skills/sentry/references/sdks/ruby/metrics.md +196 -0
- package/skills/sentry/references/sdks/ruby/migration.md +321 -0
- package/skills/sentry/references/sdks/ruby/profiling.md +107 -0
- package/skills/sentry/references/sdks/ruby/tracing.md +388 -0
- package/skills/sentry/references/sdks/svelte/error-monitoring.md +456 -0
- package/skills/sentry/references/sdks/svelte/index.md +467 -0
- package/skills/sentry/references/sdks/svelte/logging.md +344 -0
- package/skills/sentry/references/sdks/svelte/session-replay.md +369 -0
- package/skills/sentry/references/sdks/svelte/tracing.md +406 -0
- package/skills/sentry/references/sdks/tanstack-start/error-monitoring.md +149 -0
- package/skills/sentry/references/sdks/tanstack-start/index.md +381 -0
- package/skills/sentry/references/sdks/tanstack-start/logging.md +74 -0
- package/skills/sentry/references/sdks/tanstack-start/session-replay.md +76 -0
- package/skills/sentry/references/sdks/tanstack-start/tanstackstart-features.md +128 -0
- package/skills/sentry/references/sdks/tanstack-start/tracing.md +123 -0
- package/skills/sentry/references/sdks/tanstack-start/user-feedback.md +81 -0
- package/skills/sentry/references/search-query-language.md +226 -0
- package/skills/sentry/references/semantics/angular.md +7 -0
- package/skills/sentry/references/semantics/app.md +28 -0
- package/skills/sentry/references/semantics/art.md +17 -0
- package/skills/sentry/references/semantics/aws.md +43 -0
- package/skills/sentry/references/semantics/browser.md +34 -0
- package/skills/sentry/references/semantics/cache.md +12 -0
- package/skills/sentry/references/semantics/client.md +8 -0
- package/skills/sentry/references/semantics/cloud.md +12 -0
- package/skills/sentry/references/semantics/cloudflare.md +23 -0
- package/skills/sentry/references/semantics/code.md +11 -0
- package/skills/sentry/references/semantics/culture.md +11 -0
- package/skills/sentry/references/semantics/db.md +21 -0
- package/skills/sentry/references/semantics/device.md +43 -0
- package/skills/sentry/references/semantics/error.md +7 -0
- package/skills/sentry/references/semantics/event.md +8 -0
- package/skills/sentry/references/semantics/exception.md +10 -0
- package/skills/sentry/references/semantics/faas.md +19 -0
- package/skills/sentry/references/semantics/file.md +8 -0
- package/skills/sentry/references/semantics/flag.md +7 -0
- package/skills/sentry/references/semantics/gcp.md +16 -0
- package/skills/sentry/references/semantics/gen_ai.md +53 -0
- package/skills/sentry/references/semantics/general.md +11 -0
- package/skills/sentry/references/semantics/graphql.md +9 -0
- package/skills/sentry/references/semantics/grpc.md +19 -0
- package/skills/sentry/references/semantics/http.md +34 -0
- package/skills/sentry/references/semantics/index.md +63 -0
- package/skills/sentry/references/semantics/jsonrpc.md +8 -0
- package/skills/sentry/references/semantics/jvm.md +12 -0
- package/skills/sentry/references/semantics/koa.md +7 -0
- package/skills/sentry/references/semantics/logger.md +7 -0
- package/skills/sentry/references/semantics/mcp.md +37 -0
- package/skills/sentry/references/semantics/mdc.md +7 -0
- package/skills/sentry/references/semantics/messaging.md +23 -0
- package/skills/sentry/references/semantics/middleware.md +7 -0
- package/skills/sentry/references/semantics/navigation.md +9 -0
- package/skills/sentry/references/semantics/nel.md +11 -0
- package/skills/sentry/references/semantics/network.md +17 -0
- package/skills/sentry/references/semantics/os.md +15 -0
- package/skills/sentry/references/semantics/otel.md +10 -0
- package/skills/sentry/references/semantics/params.md +7 -0
- package/skills/sentry/references/semantics/process.md +14 -0
- package/skills/sentry/references/semantics/react.md +7 -0
- package/skills/sentry/references/semantics/remix.md +7 -0
- package/skills/sentry/references/semantics/resource.md +7 -0
- package/skills/sentry/references/semantics/rpc.md +10 -0
- package/skills/sentry/references/semantics/score.md +10 -0
- package/skills/sentry/references/semantics/sentry.md +69 -0
- package/skills/sentry/references/semantics/server.md +8 -0
- package/skills/sentry/references/semantics/service.md +8 -0
- package/skills/sentry/references/semantics/session.md +7 -0
- package/skills/sentry/references/semantics/state.md +7 -0
- package/skills/sentry/references/semantics/thread.md +8 -0
- package/skills/sentry/references/semantics/timber.md +7 -0
- package/skills/sentry/references/semantics/trpc.md +8 -0
- package/skills/sentry/references/semantics/ui.md +18 -0
- package/skills/sentry/references/semantics/url.md +15 -0
- package/skills/sentry/references/semantics/user.md +17 -0
- package/skills/sentry/references/semantics/user_agent.md +7 -0
- package/skills/sentry/references/semantics/vercel.md +42 -0
- package/skills/sentry/references/setup-verification.md +39 -0
- package/skills/sentry/references/snapshots/github-actions-fanout.md +206 -0
- package/skills/sentry/references/snapshots/github-actions-simple.md +102 -0
- package/skills/sentry/references/snapshots/github-actions-swift-snapshot-testing.md +118 -0
- package/skills/sentry/references/snapshots/index.md +19 -0
- package/skills/sentry/references/snapshots/snapshot-previews.md +100 -0
- package/skills/sentry/references/snapshots/snapshots.md +123 -0
- package/skills/sentry/references/snapshots/wizard-setup.md +134 -0
- package/skills/testing/LICENSE +21 -0
- package/skills/testing/NOTICE +7 -0
- package/skills/testing/SKILL.md +13 -19
- package/skills/testing/agents/openai.yaml +1 -2
- package/skills/testing/references/selection.md +23 -0
- package/skills/testing/references/tdd.md +19 -0
- package/skills/testing/references/test-design.md +17 -0
- package/src/catalog.ts +1 -7
- package/skills/build-effect-apis/SKILL.md +0 -81
- package/skills/build-effect-apis/agents/openai.yaml +0 -4
- package/skills/build-effect-clis/SKILL.md +0 -92
- package/skills/build-effect-clis/agents/openai.yaml +0 -4
- package/skills/effect-architecture-audit/agents/openai.yaml +0 -4
- package/skills/effect-atom-state/SKILL.md +0 -97
- package/skills/effect-atom-state/agents/openai.yaml +0 -4
- package/skills/effect-ts/SKILL.md +0 -35
- package/skills/effect-ts/agents/openai.yaml +0 -4
- /package/skills/{build-effect-apis/references → effect-development/references/api}/cloudflare-workers.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/runtime-assembly.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/server-and-middleware.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/shared-contracts.md +0 -0
- /package/skills/{effect-architecture-audit/references → effect-development/references/architecture}/service-and-boundary-audit.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-lifecycle.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-workflows.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/tanstack-start.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/command-design.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/processes-and-platform.md +0 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
# Tracing — Sentry Svelte/SvelteKit SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `@sentry/sveltekit` ≥7.0.0+ / `@sentry/svelte` ≥7.0.0+\
|
|
4
|
+
> `Sentry.updateSpanName()`: requires `@sentry/sveltekit` ≥8.47.0+
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## How Automatic Tracing Works
|
|
9
|
+
|
|
10
|
+
### SvelteKit
|
|
11
|
+
|
|
12
|
+
| What’s traced | Where | How |
|
|
13
|
+
| ----------------------------------------- | ------------- | ------------------------------------------------------------------- |
|
|
14
|
+
| Client-side page loads | Browser | `browserTracingIntegration()` in `hooks.client.ts` |
|
|
15
|
+
| Client-side navigations | Browser | `browserTracingIntegration()` — SvelteKit router changes |
|
|
16
|
+
| Outbound fetch/XHR requests | Browser | `browserTracingIntegration()` with `tracePropagationTargets` |
|
|
17
|
+
| Server-side request handling | Node | `sentryHandle()` in `hooks.server.ts` |
|
|
18
|
+
| Load functions (`+page.ts`, `+layout.ts`) | Both | Auto via `sentryHandle()` (≥10.8.0) |
|
|
19
|
+
| Server → client trace stitching | SSR → browser | SDK injects `<meta>` tags; `browserTracingIntegration()` reads them |
|
|
20
|
+
|
|
21
|
+
### Standalone Svelte
|
|
22
|
+
|
|
23
|
+
Only client-side tracing is available.
|
|
24
|
+
All instrumentation happens in a single init call.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Configuration
|
|
29
|
+
|
|
30
|
+
### SvelteKit — hooks.client.ts
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
import * as Sentry from "@sentry/sveltekit";
|
|
34
|
+
|
|
35
|
+
Sentry.init({
|
|
36
|
+
dsn: import.meta.env.PUBLIC_SENTRY_DSN ?? import.meta.env.VITE_SENTRY_DSN,
|
|
37
|
+
|
|
38
|
+
integrations: [Sentry.browserTracingIntegration()],
|
|
39
|
+
|
|
40
|
+
tracesSampleRate: 1.0, // 100% in dev; use 0.1–0.2 in production
|
|
41
|
+
|
|
42
|
+
// Which outbound URLs get sentry-trace + baggage headers
|
|
43
|
+
tracePropagationTargets: ["localhost", /^https:\/\/api\.myapp\.com/],
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
export const handleError = Sentry.handleErrorWithSentry();
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### SvelteKit — instrumentation.server.ts (or hooks.server.ts for legacy)
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
import * as Sentry from "@sentry/sveltekit";
|
|
53
|
+
|
|
54
|
+
Sentry.init({
|
|
55
|
+
dsn: process.env.SENTRY_DSN,
|
|
56
|
+
tracesSampleRate: 1.0,
|
|
57
|
+
// No browserTracingIntegration() here — server-side only
|
|
58
|
+
});
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### SvelteKit — hooks.server.ts
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
import * as Sentry from "@sentry/sveltekit";
|
|
65
|
+
|
|
66
|
+
export const handleError = Sentry.handleErrorWithSentry();
|
|
67
|
+
// sentryHandle() creates root spans for all incoming requests
|
|
68
|
+
export const handle = Sentry.sentryHandle();
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Standalone Svelte — main.ts
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
import * as Sentry from "@sentry/svelte";
|
|
75
|
+
import App from "./App.svelte";
|
|
76
|
+
|
|
77
|
+
Sentry.init({
|
|
78
|
+
dsn: import.meta.env.VITE_SENTRY_DSN,
|
|
79
|
+
|
|
80
|
+
integrations: [Sentry.browserTracingIntegration()],
|
|
81
|
+
|
|
82
|
+
tracesSampleRate: 1.0,
|
|
83
|
+
tracePropagationTargets: ["localhost", /^https:\/\/yourapi\.io/],
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
const app = new App({ target: document.getElementById("app")! });
|
|
87
|
+
export default app;
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Sampling
|
|
93
|
+
|
|
94
|
+
| Option | Behavior |
|
|
95
|
+
| -------------------------------- | --------------------------------------------------------------------- |
|
|
96
|
+
| `tracesSampleRate: 1.0` | Capture 100% of traces (dev / low-traffic) |
|
|
97
|
+
| `tracesSampleRate: 0.2` | Capture 20% uniformly |
|
|
98
|
+
| `tracesSampler: (ctx) => number` | Per-transaction logic; **overrides** `tracesSampleRate` when both set |
|
|
99
|
+
| omit both | Tracing fully disabled — no overhead |
|
|
100
|
+
| `tracesSampleRate: 0` | Code runs but nothing is sent — not the same as disabled |
|
|
101
|
+
|
|
102
|
+
### Dynamic sampler
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
Sentry.init({
|
|
106
|
+
tracesSampler: (samplingContext) => {
|
|
107
|
+
const name = samplingContext.transactionContext?.name ?? "";
|
|
108
|
+
if (name === "/health" || name === "/ping") return 0;
|
|
109
|
+
if (name.startsWith("/checkout")) return 1.0;
|
|
110
|
+
return 0.2; // default
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Disable tracing for production builds (tree-shaking)
|
|
116
|
+
|
|
117
|
+
Set the build flag `__SENTRY_TRACING__ = false` to strip all tracing code at bundle
|
|
118
|
+
time:
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
// vite.config.ts
|
|
122
|
+
export default defineConfig({
|
|
123
|
+
define: {
|
|
124
|
+
__SENTRY_TRACING__: false,
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## `tracePropagationTargets`
|
|
132
|
+
|
|
133
|
+
Controls which outbound requests receive `sentry-trace` and `baggage` headers.
|
|
134
|
+
Essential for distributed tracing between the SvelteKit frontend and your APIs.
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
tracePropagationTargets: [
|
|
138
|
+
"localhost", // substring match
|
|
139
|
+
/^https:\/\/api\.myapp\.com/, // regex match
|
|
140
|
+
/^https:\/\/internal-service\.io\/api/, // second backend
|
|
141
|
+
];
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
- Only matching URLs get distributed tracing headers
|
|
145
|
+
- Prevents leaking trace IDs to third-party services
|
|
146
|
+
- Omit to disable propagation entirely; set to `[""]` to propagate to all URLs
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Custom Spans
|
|
151
|
+
|
|
152
|
+
Three APIs with different lifecycle models:
|
|
153
|
+
|
|
154
|
+
### `Sentry.startSpan()` — recommended, auto-ends
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
// Async work
|
|
158
|
+
const result = await Sentry.startSpan(
|
|
159
|
+
{
|
|
160
|
+
name: "fetch-user-profile",
|
|
161
|
+
op: "http.client",
|
|
162
|
+
attributes: {
|
|
163
|
+
"user.id": userId,
|
|
164
|
+
"cache.hit": false,
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
async () => {
|
|
168
|
+
return await fetchUserProfile(userId);
|
|
169
|
+
},
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
// Sync work
|
|
173
|
+
const parsed = Sentry.startSpan({ name: "parse-payload", op: "deserialize" }, () =>
|
|
174
|
+
JSON.parse(rawPayload),
|
|
175
|
+
);
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### `Sentry.startSpanManual()` — manual `span.end()`
|
|
179
|
+
|
|
180
|
+
Use when the span lifetime doesn’t match a callback (event-driven flows, middleware):
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
function middleware(_req: Request, res: Response, next: NextFunction) {
|
|
184
|
+
return Sentry.startSpanManual({ name: "express.middleware", op: "middleware" }, (span) => {
|
|
185
|
+
res.once("finish", () => {
|
|
186
|
+
span.setStatus({ code: res.statusCode < 400 ? 1 : 2 }); // 1=ok, 2=error
|
|
187
|
+
span.end();
|
|
188
|
+
});
|
|
189
|
+
return next();
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### `Sentry.startInactiveSpan()` — explicit parent control
|
|
195
|
+
|
|
196
|
+
```typescript
|
|
197
|
+
// Span is not automatically set as the active span
|
|
198
|
+
const span = Sentry.startInactiveSpan({ name: "background-job", op: "task" });
|
|
199
|
+
await doBackgroundWork();
|
|
200
|
+
span.end();
|
|
201
|
+
|
|
202
|
+
// Explicit parent-child wiring
|
|
203
|
+
const parent = Sentry.startInactiveSpan({ name: "checkout-flow" });
|
|
204
|
+
const child = Sentry.startInactiveSpan({ name: "validate-cart", parentSpan: parent });
|
|
205
|
+
await validateCart();
|
|
206
|
+
child.end();
|
|
207
|
+
parent.end();
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Span Parameters
|
|
213
|
+
|
|
214
|
+
| Parameter | Type | Description |
|
|
215
|
+
| ------------------ | --------------------------------------------- | ------------------------------------------------------------------------- |
|
|
216
|
+
| `name` | `string` | **Required.** Span label in the UI |
|
|
217
|
+
| `op` | `string` | Operation category (e.g., `http.client`, `db.query`, `ui.render`, `task`) |
|
|
218
|
+
| `startTime` | `number` | Unix timestamp override |
|
|
219
|
+
| `attributes` | `Record<string, string \| number \| boolean>` | Key-value metadata |
|
|
220
|
+
| `parentSpan` | `Span` | Explicit parent reference |
|
|
221
|
+
| `onlyIfParent` | `boolean` | Drop span if no active parent exists |
|
|
222
|
+
| `forceTransaction` | `boolean` | Show as top-level transaction in Sentry UI |
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Enriching Active Spans
|
|
227
|
+
|
|
228
|
+
```typescript
|
|
229
|
+
const span = Sentry.getActiveSpan();
|
|
230
|
+
if (span) {
|
|
231
|
+
span.setAttribute("db.rows_affected", 42);
|
|
232
|
+
span.setAttributes({ "cache.key": "user:123", "cache.hit": true });
|
|
233
|
+
span.setStatus({ code: 1 }); // 0=unknown, 1=ok, 2=error
|
|
234
|
+
|
|
235
|
+
// Rename span (SDK ≥8.47.0)
|
|
236
|
+
Sentry.updateSpanName(span, "Updated Span Name");
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Inject attributes into all spans globally
|
|
240
|
+
Sentry.init({
|
|
241
|
+
beforeSendSpan(span) {
|
|
242
|
+
span.data = { ...span.data, "app.region": "us-west-2" };
|
|
243
|
+
return span;
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Distributed Tracing: SvelteKit SSR ↔ Client ↔ APIs
|
|
251
|
+
|
|
252
|
+
SvelteKit’s SDK automatically propagates trace context across the full request
|
|
253
|
+
lifecycle:
|
|
254
|
+
|
|
255
|
+
```
|
|
256
|
+
Browser request
|
|
257
|
+
→ SvelteKit server receives request
|
|
258
|
+
→ sentryHandle() creates server root span
|
|
259
|
+
→ SSR renders HTML with injected <meta name="sentry-trace"> + <meta name="baggage">
|
|
260
|
+
→ Browser parses HTML
|
|
261
|
+
→ browserTracingIntegration() reads <meta> tags
|
|
262
|
+
→ Client span becomes child of SSR span
|
|
263
|
+
→ Client makes API call (matching tracePropagationTargets)
|
|
264
|
+
→ sentry-trace + baggage headers added to fetch request
|
|
265
|
+
→ Backend can continue the trace
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
All of this is automatic when:
|
|
269
|
+
|
|
270
|
+
1. `sentryHandle()` is exported from `hooks.server.ts`
|
|
271
|
+
2. `browserTracingIntegration()` is in client init
|
|
272
|
+
3. API URLs are listed in `tracePropagationTargets`
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Load Function Tracing (SvelteKit)
|
|
277
|
+
|
|
278
|
+
With `sentryHandle()` (≥10.8.0), all load functions are automatically instrumented.
|
|
279
|
+
No wrapper needed.
|
|
280
|
+
|
|
281
|
+
**Legacy setup only** (if using `@sentry/sveltekit` <10.8.0):
|
|
282
|
+
|
|
283
|
+
```typescript
|
|
284
|
+
// src/routes/+page.ts (client load) — legacy only
|
|
285
|
+
import { wrapLoadWithSentry } from "@sentry/sveltekit";
|
|
286
|
+
|
|
287
|
+
export const load = wrapLoadWithSentry(async ({ fetch, params }) => {
|
|
288
|
+
return { data: await fetch(`/api/${params.id}`).then((r) => r.json()) };
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
// src/routes/+page.server.ts (server load) — legacy only
|
|
292
|
+
import { wrapServerLoadWithSentry } from "@sentry/sveltekit";
|
|
293
|
+
|
|
294
|
+
export const load = wrapServerLoadWithSentry(async ({ params }) => {
|
|
295
|
+
return { id: params.id };
|
|
296
|
+
});
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
Remove these wrappers when upgrading to `@sentry/sveltekit` ≥10.8.0.
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## Route-Based Transaction Names
|
|
304
|
+
|
|
305
|
+
SvelteKit automatically names transactions from SvelteKit’s routing system:
|
|
306
|
+
|
|
307
|
+
- `GET /` → `pageload /`
|
|
308
|
+
- `GET /users/[id]` → `pageload /users/[id]`
|
|
309
|
+
- `GET /api/users` → server request span name
|
|
310
|
+
|
|
311
|
+
No manual transaction naming is needed for standard SvelteKit routes.
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## Performance Data: Web Vitals
|
|
316
|
+
|
|
317
|
+
`browserTracingIntegration()` captures Core Web Vitals automatically:
|
|
318
|
+
|
|
319
|
+
| Metric | What it measures |
|
|
320
|
+
| ------ | ------------------------ |
|
|
321
|
+
| LCP | Largest Contentful Paint |
|
|
322
|
+
| FID | First Input Delay |
|
|
323
|
+
| CLS | Cumulative Layout Shift |
|
|
324
|
+
| TTFB | Time to First Byte |
|
|
325
|
+
| FCP | First Contentful Paint |
|
|
326
|
+
|
|
327
|
+
Visible in the Sentry Performance dashboard under each page transaction.
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## Flat Span Hierarchy (Browser)
|
|
332
|
+
|
|
333
|
+
By default, browser spans are **flat** — all spans become direct children of the root
|
|
334
|
+
span rather than nesting.
|
|
335
|
+
This avoids incorrect async parent-child associations.
|
|
336
|
+
|
|
337
|
+
To opt into full nesting (for structured waterfall views, at your own risk):
|
|
338
|
+
|
|
339
|
+
```typescript
|
|
340
|
+
Sentry.init({
|
|
341
|
+
parentSpanIsAlwaysRootSpan: false,
|
|
342
|
+
});
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## Filtering Transactions and Spans
|
|
348
|
+
|
|
349
|
+
```typescript
|
|
350
|
+
Sentry.init({
|
|
351
|
+
// Drop entire transactions by name
|
|
352
|
+
ignoreTransactions: ["/health", "/ping", /_next\/static/],
|
|
353
|
+
|
|
354
|
+
// Filter/modify transactions before send
|
|
355
|
+
beforeSendTransaction(event) {
|
|
356
|
+
if (event.transaction?.startsWith("/_next/")) return null;
|
|
357
|
+
return event;
|
|
358
|
+
},
|
|
359
|
+
|
|
360
|
+
// Filter/modify individual spans (e.g., drop asset spans)
|
|
361
|
+
ignoreSpans: [
|
|
362
|
+
{ op: /^browser\.(cache|connect|DNS)$/ },
|
|
363
|
+
{ op: "resource.other", name: /.+\.(woff2|ttf|eot)$/ },
|
|
364
|
+
{ op: /resource\.(link|script)/, name: /.+\.js.*$/ },
|
|
365
|
+
],
|
|
366
|
+
});
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## Svelte vs SvelteKit: Key Differences
|
|
372
|
+
|
|
373
|
+
| Concern | Standalone Svelte | SvelteKit |
|
|
374
|
+
| ----------------------------- | ------------------- | ---------------------------- |
|
|
375
|
+
| Server-side tracing | ❌ N/A | ✅ Auto via `sentryHandle()` |
|
|
376
|
+
| `browserTracingIntegration()` | In single init call | In `hooks.client.ts` only |
|
|
377
|
+
| Distributed tracing | Client-only | Full SSR → client → backend |
|
|
378
|
+
| Load function tracing | N/A | Auto (≥10.8.0) |
|
|
379
|
+
| Transaction names | URL-based | SvelteKit route patterns |
|
|
380
|
+
| Web Vitals | ✅ Both | ✅ Both |
|
|
381
|
+
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
## Best Practices
|
|
385
|
+
|
|
386
|
+
- Use `tracesSampleRate: 1.0` in development; drop to `0.1`–`0.2` in production
|
|
387
|
+
- Never add `browserTracingIntegration()` to server-side init
|
|
388
|
+
- Use `tracePropagationTargets` to restrict trace header injection to your own backends
|
|
389
|
+
- Add `sentryHandle()` before other handles in `sequence()` so it wraps the full request
|
|
390
|
+
lifecycle
|
|
391
|
+
- Use `onlyIfParent: true` on optional spans to avoid orphaned root transactions
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
## Troubleshooting
|
|
396
|
+
|
|
397
|
+
| Issue | Solution |
|
|
398
|
+
| ------------------------------------------------- | ------------------------------------------------------------------------------------- |
|
|
399
|
+
| No transactions in Performance dashboard | Ensure `tracesSampleRate` > 0; check `browserTracingIntegration()` is in client init |
|
|
400
|
+
| Distributed trace not connected (server ↔ client) | Verify `sentryHandle()` is exported from `hooks.server.ts` |
|
|
401
|
+
| API calls not connected to frontend trace | Add API URL to `tracePropagationTargets` |
|
|
402
|
+
| Load functions not instrumented | Upgrade to `@sentry/sveltekit` ≥10.8.0; remove legacy `wrapLoadWithSentry` |
|
|
403
|
+
| `sentryHandle()` breaking other handles | Wrap with `sequence(Sentry.sentryHandle(), myHandle)` from `@sveltejs/kit/hooks` |
|
|
404
|
+
| Web Vitals missing | Confirm `browserTracingIntegration()` is included; check browser support |
|
|
405
|
+
| Spans missing after async gap | Browser flat hierarchy; use `startInactiveSpan` with explicit `parentSpan` |
|
|
406
|
+
| High transaction volume / cost | Lower `tracesSampleRate`; use `tracesSampler` to drop health checks and static assets |
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Error Monitoring — Sentry TanStack Start React SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `@sentry/tanstackstart-react` (alpha)\
|
|
4
|
+
> Framework target: TanStack Start React `1.0 RC`
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Automatic vs Manual Capture
|
|
9
|
+
|
|
10
|
+
| Area | Auto Captured? | Mechanism |
|
|
11
|
+
| ------------------------------------- | -------------- | ------------------------------------------------------- |
|
|
12
|
+
| Unhandled client exceptions | ✅ Yes | Browser global handlers after `Sentry.init` |
|
|
13
|
+
| Unhandled promise rejections (client) | ✅ Yes | Browser global handlers |
|
|
14
|
+
| Server request exceptions | ✅ Yes | `sentryGlobalRequestMiddleware` + `wrapFetchWithSentry` |
|
|
15
|
+
| Server function exceptions | ✅ Yes | `sentryGlobalFunctionMiddleware` |
|
|
16
|
+
| Errors swallowed by custom boundaries | ❌ No | Call `Sentry.captureException` manually |
|
|
17
|
+
| SSR render exceptions | ❌ No | Call `Sentry.captureException` manually |
|
|
18
|
+
|
|
19
|
+
Core rule:
|
|
20
|
+
|
|
21
|
+
> If an error is caught and not re-thrown, capture it manually.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Required Server Error Hooks
|
|
26
|
+
|
|
27
|
+
### Global server middleware (`src/start.ts`)
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
import {
|
|
31
|
+
sentryGlobalFunctionMiddleware,
|
|
32
|
+
sentryGlobalRequestMiddleware,
|
|
33
|
+
} from "@sentry/tanstackstart-react";
|
|
34
|
+
import { createStart } from "@tanstack/react-start";
|
|
35
|
+
|
|
36
|
+
export const startInstance = createStart(() => {
|
|
37
|
+
return {
|
|
38
|
+
requestMiddleware: [sentryGlobalRequestMiddleware],
|
|
39
|
+
functionMiddleware: [sentryGlobalFunctionMiddleware],
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Server entry wrapper (`src/server.ts`)
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
import { wrapFetchWithSentry } from "@sentry/tanstackstart-react";
|
|
48
|
+
import handler, { createServerEntry } from "@tanstack/react-start/server-entry";
|
|
49
|
+
|
|
50
|
+
export default createServerEntry(
|
|
51
|
+
wrapFetchWithSentry({
|
|
52
|
+
fetch(request: Request) {
|
|
53
|
+
return handler.fetch(request);
|
|
54
|
+
},
|
|
55
|
+
}),
|
|
56
|
+
);
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Client-Side Manual Capture
|
|
62
|
+
|
|
63
|
+
### `captureException`
|
|
64
|
+
|
|
65
|
+
```tsx
|
|
66
|
+
import * as Sentry from "@sentry/tanstackstart-react";
|
|
67
|
+
|
|
68
|
+
try {
|
|
69
|
+
await riskyOperation();
|
|
70
|
+
} catch (error) {
|
|
71
|
+
Sentry.captureException(error, {
|
|
72
|
+
tags: { area: "checkout" },
|
|
73
|
+
extra: { retryCount: 1 },
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### `captureMessage`
|
|
79
|
+
|
|
80
|
+
```tsx
|
|
81
|
+
Sentry.captureMessage("Unexpected state encountered", "warning");
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Error Boundaries and TanStack Router `errorComponent`
|
|
87
|
+
|
|
88
|
+
Errors handled by custom boundaries are not automatically reported unless you send them.
|
|
89
|
+
|
|
90
|
+
```tsx
|
|
91
|
+
import { useEffect } from "react";
|
|
92
|
+
import * as Sentry from "@sentry/tanstackstart-react";
|
|
93
|
+
import { createRoute } from "@tanstack/react-router";
|
|
94
|
+
|
|
95
|
+
const route = createRoute({
|
|
96
|
+
errorComponent: ({ error }) => {
|
|
97
|
+
useEffect(() => {
|
|
98
|
+
Sentry.captureException(error);
|
|
99
|
+
}, [error]);
|
|
100
|
+
|
|
101
|
+
return <div>Something went wrong.</div>;
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
For class boundaries, wrap with `withErrorBoundary`:
|
|
107
|
+
|
|
108
|
+
```tsx
|
|
109
|
+
import React from "react";
|
|
110
|
+
import * as Sentry from "@sentry/tanstackstart-react";
|
|
111
|
+
|
|
112
|
+
class MyErrorBoundary extends React.Component {
|
|
113
|
+
render() {
|
|
114
|
+
return this.props.children;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export const MySentryWrappedErrorBoundary = Sentry.withErrorBoundary(MyErrorBoundary, {
|
|
119
|
+
fallback: <p>Something went wrong.</p>,
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Enrichment APIs
|
|
126
|
+
|
|
127
|
+
Use standard Sentry context enrichment calls:
|
|
128
|
+
|
|
129
|
+
```tsx
|
|
130
|
+
Sentry.setUser({ id: "user_123", email: "user@example.com" });
|
|
131
|
+
Sentry.setTag("tenant", "acme");
|
|
132
|
+
Sentry.setContext("checkout", { step: "payment" });
|
|
133
|
+
Sentry.addBreadcrumb({
|
|
134
|
+
category: "ui.click",
|
|
135
|
+
message: "Clicked complete purchase",
|
|
136
|
+
level: "info",
|
|
137
|
+
});
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Troubleshooting
|
|
143
|
+
|
|
144
|
+
| Issue | Solution |
|
|
145
|
+
| ----------------------------------- | ------------------------------------------------------------------------- |
|
|
146
|
+
| Server errors missing | Verify both `wrapFetchWithSentry` and global middleware are in place |
|
|
147
|
+
| Error boundary issues not appearing | Add explicit `captureException` inside `errorComponent` or boundary hooks |
|
|
148
|
+
| Missing user context | Call `setUser` after auth state is known |
|
|
149
|
+
| Duplicate dev errors | Validate behavior in production build; development tooling may rethrow |
|