@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,456 @@
|
|
|
1
|
+
# Error Monitoring — Sentry Svelte/SvelteKit SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `@sentry/sveltekit` ≥7.0.0+ / `@sentry/svelte` ≥7.0.0+
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## How Automatic Capture Works
|
|
8
|
+
|
|
9
|
+
| Layer | Mechanism | Fires when … |
|
|
10
|
+
| ---------------------- | ---------------------------------------------- | ------------------------------------------------------------------------ |
|
|
11
|
+
| **Client (both)** | `globalHandlersIntegration` | `window.onerror`, unhandled `Promise` rejections |
|
|
12
|
+
| **Client (both)** | `browserApiErrorsIntegration` | Errors thrown in `setTimeout`, `setInterval`, `requestAnimationFrame` |
|
|
13
|
+
| **Server (SvelteKit)** | `handleErrorWithSentry()` in `hooks.server.ts` | Any unhandled error in a server hook, load function, or route handler |
|
|
14
|
+
| **Server (SvelteKit)** | `sentryHandle()` | Instruments incoming requests; captures errors from the request pipeline |
|
|
15
|
+
| **Client (SvelteKit)** | `handleErrorWithSentry()` in `hooks.client.ts` | Any unhandled navigation or client-side error SvelteKit surfaces |
|
|
16
|
+
|
|
17
|
+
No configuration beyond the `Sentry.init()` call is required for baseline error capture.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## SvelteKit Error Hooks
|
|
22
|
+
|
|
23
|
+
### `hooks.client.ts`
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import * as Sentry from "@sentry/sveltekit";
|
|
27
|
+
|
|
28
|
+
Sentry.init({
|
|
29
|
+
dsn: import.meta.env.PUBLIC_SENTRY_DSN ?? import.meta.env.VITE_SENTRY_DSN,
|
|
30
|
+
dataCollection: {
|
|
31
|
+
// To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
|
|
32
|
+
// https://docs.sentry.io/platforms/javascript/guides/sveltekit/configuration/options/#dataCollection
|
|
33
|
+
// userInfo: false,
|
|
34
|
+
// httpBodies: [],
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Sentry captures first; your handler runs after
|
|
39
|
+
const myErrorHandler = ({ error, event }: { error: unknown; event: unknown }) => {
|
|
40
|
+
console.error("Client error:", error);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export const handleError = Sentry.handleErrorWithSentry(myErrorHandler);
|
|
44
|
+
|
|
45
|
+
// Works with no argument too:
|
|
46
|
+
// export const handleError = Sentry.handleErrorWithSentry();
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### `hooks.server.ts`
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
import * as Sentry from "@sentry/sveltekit";
|
|
53
|
+
import { sequence } from "@sveltejs/kit/hooks";
|
|
54
|
+
|
|
55
|
+
// Sentry.init() is in instrumentation.server.ts (modern) or here (legacy)
|
|
56
|
+
|
|
57
|
+
const myErrorHandler = ({ error, event }: { error: unknown; event: unknown }) => {
|
|
58
|
+
console.error("Server error:", error);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const handleError = Sentry.handleErrorWithSentry(myErrorHandler);
|
|
62
|
+
|
|
63
|
+
// sentryHandle() instruments requests and creates root spans
|
|
64
|
+
export const handle = Sentry.sentryHandle();
|
|
65
|
+
|
|
66
|
+
// Composing multiple handles:
|
|
67
|
+
// export const handle = sequence(Sentry.sentryHandle(), authHandle, logHandle);
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### `handleErrorWithSentry()` callback signature
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
export const handleError = Sentry.handleErrorWithSentry(
|
|
74
|
+
(input: {
|
|
75
|
+
error: unknown;
|
|
76
|
+
event: RequestEvent | NavigationEvent;
|
|
77
|
+
status?: number;
|
|
78
|
+
message?: string;
|
|
79
|
+
}) => {
|
|
80
|
+
// Your logic runs AFTER Sentry has already captured the error
|
|
81
|
+
},
|
|
82
|
+
);
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Manual Error Capture
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
import * as Sentry from "@sentry/sveltekit"; // or "@sentry/svelte"
|
|
91
|
+
|
|
92
|
+
// Capture an Error object
|
|
93
|
+
try {
|
|
94
|
+
await riskyOperation();
|
|
95
|
+
} catch (err) {
|
|
96
|
+
Sentry.captureException(err);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Capture with extra context
|
|
100
|
+
try {
|
|
101
|
+
await riskyOperation();
|
|
102
|
+
} catch (err) {
|
|
103
|
+
Sentry.captureException(err, {
|
|
104
|
+
tags: { feature: "checkout", region: "eu" },
|
|
105
|
+
extra: { cartId: "abc-123", itemCount: 3 },
|
|
106
|
+
level: "error", // "fatal" | "error" | "warning" | "info" | "debug"
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Plain message (not tied to an exception)
|
|
111
|
+
Sentry.captureMessage("User exceeded rate limit", "warning");
|
|
112
|
+
|
|
113
|
+
// Isolated scope — doesn't pollute global state
|
|
114
|
+
Sentry.withScope((scope) => {
|
|
115
|
+
scope.setTag("component", "PaymentForm");
|
|
116
|
+
scope.setUser({ id: "42", email: "user@example.com" });
|
|
117
|
+
Sentry.captureException(new Error("Payment failed"));
|
|
118
|
+
});
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Context Enrichment
|
|
124
|
+
|
|
125
|
+
### User Context
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
// Set globally — persists until cleared
|
|
129
|
+
Sentry.setUser({
|
|
130
|
+
id: "user-123",
|
|
131
|
+
email: "jane@example.com",
|
|
132
|
+
username: "jdoe",
|
|
133
|
+
ip_address: "{{ auto }}", // auto-infer from request
|
|
134
|
+
plan: "enterprise", // custom fields accepted
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
// Clear on logout
|
|
138
|
+
Sentry.setUser(null);
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Tags (searchable, indexed)
|
|
142
|
+
|
|
143
|
+
```typescript
|
|
144
|
+
Sentry.setTag("release.channel", "beta");
|
|
145
|
+
Sentry.setTags({
|
|
146
|
+
"feature.flag": "new-checkout",
|
|
147
|
+
region: "us-east-1",
|
|
148
|
+
version: "2.1.0",
|
|
149
|
+
});
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Key constraints: ≤32 chars, alphanumeric + `_`, `.`, `:`, `-`. Value: ≤200 chars, no
|
|
153
|
+
newlines.
|
|
154
|
+
|
|
155
|
+
### Context Objects (structured, non-indexed)
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
Sentry.setContext("cart", {
|
|
159
|
+
itemCount: 3,
|
|
160
|
+
totalAmount: 99.99,
|
|
161
|
+
promoCode: "SAVE20",
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
// Clear context
|
|
165
|
+
Sentry.setContext("cart", null);
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Extra Data (simple key-value)
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
Sentry.setExtra("requestBody", { amount: 99.99, currency: "USD" });
|
|
172
|
+
Sentry.setExtras({ cartItems: 3, promoCode: "SAVE20" });
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### `initialScope` (set once at init)
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
Sentry.init({
|
|
179
|
+
dsn: "...",
|
|
180
|
+
initialScope: {
|
|
181
|
+
tags: { appVersion: "1.0.0", deploymentId: "abc123" },
|
|
182
|
+
user: { id: "anonymous" },
|
|
183
|
+
},
|
|
184
|
+
// Or as a callback:
|
|
185
|
+
// initialScope: (scope) => { scope.setTag("buildId", BUILD_ID); return scope; },
|
|
186
|
+
});
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Breadcrumbs
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
// Manual breadcrumb
|
|
195
|
+
Sentry.addBreadcrumb({
|
|
196
|
+
message: "User submitted checkout form",
|
|
197
|
+
category: "ui.click",
|
|
198
|
+
level: "info", // "fatal"|"error"|"warning"|"log"|"info"|"debug"
|
|
199
|
+
type: "user", // "default"|"debug"|"error"|"info"|"navigation"|"http"|"query"|"ui"|"user"
|
|
200
|
+
data: { formId: "checkout-v2", itemCount: 3 },
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
// Auth breadcrumb
|
|
204
|
+
Sentry.addBreadcrumb({
|
|
205
|
+
category: "auth",
|
|
206
|
+
message: "Authenticated user " + user.email,
|
|
207
|
+
level: "info",
|
|
208
|
+
});
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**Auto-captured breadcrumbs (browser):** DOM clicks, keyboard events, XHR/fetch
|
|
212
|
+
requests, console calls, navigation changes.
|
|
213
|
+
|
|
214
|
+
### Filter breadcrumbs with `beforeBreadcrumb`
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
Sentry.init({
|
|
218
|
+
beforeBreadcrumb(breadcrumb, hint) {
|
|
219
|
+
// Drop verbose console breadcrumbs
|
|
220
|
+
if (breadcrumb.category === "console") return null;
|
|
221
|
+
// Sanitize navigation data
|
|
222
|
+
if (breadcrumb.category === "navigation" && breadcrumb.data?.to) {
|
|
223
|
+
breadcrumb.data.to = breadcrumb.data.to.replace(/\/user\/\d+/, "/user/[id]");
|
|
224
|
+
}
|
|
225
|
+
return breadcrumb;
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## `beforeSend` — Filter and Scrub Events
|
|
233
|
+
|
|
234
|
+
```typescript
|
|
235
|
+
Sentry.init({
|
|
236
|
+
// Drop known noise
|
|
237
|
+
ignoreErrors: ["ResizeObserver loop limit exceeded", /^Network Error$/, /ChunkLoadError/],
|
|
238
|
+
|
|
239
|
+
// Only capture errors from your own scripts
|
|
240
|
+
allowUrls: [/https:\/\/myapp\.com/],
|
|
241
|
+
|
|
242
|
+
// Scrub PII, drop by condition
|
|
243
|
+
beforeSend(event, hint) {
|
|
244
|
+
// Drop non-Error objects
|
|
245
|
+
if (hint.originalException && !(hint.originalException instanceof Error)) {
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
// Scrub email from user context
|
|
249
|
+
if (event.user?.email) {
|
|
250
|
+
event.user.email = "[filtered]";
|
|
251
|
+
}
|
|
252
|
+
// Drop 404 errors
|
|
253
|
+
if (event.tags?.statusCode === "404") {
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
return event;
|
|
257
|
+
},
|
|
258
|
+
});
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Svelte Component Tracking (`@sentry/svelte` only)
|
|
264
|
+
|
|
265
|
+
Component tracking wraps Svelte’s lifecycle hooks and emits spans for each component’s
|
|
266
|
+
`init` and `update` phases.
|
|
267
|
+
|
|
268
|
+
### Automatic (preprocessor — all components)
|
|
269
|
+
|
|
270
|
+
```javascript
|
|
271
|
+
// svelte.config.js
|
|
272
|
+
import { withSentryConfig } from "@sentry/svelte";
|
|
273
|
+
|
|
274
|
+
export default withSentryConfig(
|
|
275
|
+
{ compilerOptions: {} },
|
|
276
|
+
{
|
|
277
|
+
componentTracking: {
|
|
278
|
+
trackComponents: true, // true = all, or array: ["Navbar", "LoginForm"]
|
|
279
|
+
trackInit: true, // emit ui.svelte.init spans
|
|
280
|
+
trackUpdates: true, // emit ui.svelte.update spans
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
);
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
Spans emitted:
|
|
287
|
+
|
|
288
|
+
- `ui.svelte.init` — component instantiation → `onMount`
|
|
289
|
+
- `ui.svelte.update` — `beforeUpdate` → `afterUpdate`
|
|
290
|
+
|
|
291
|
+
### Manual (per-component)
|
|
292
|
+
|
|
293
|
+
```svelte
|
|
294
|
+
<script>
|
|
295
|
+
import * as Sentry from "@sentry/svelte";
|
|
296
|
+
|
|
297
|
+
Sentry.trackComponent({
|
|
298
|
+
trackInit: true,
|
|
299
|
+
trackUpdates: false,
|
|
300
|
+
componentName: "PaymentForm", // optional; auto-detected if omitted
|
|
301
|
+
});
|
|
302
|
+
</script>
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## SvelteKit `+error.svelte` Integration
|
|
308
|
+
|
|
309
|
+
SvelteKit renders `+error.svelte` for handled errors.
|
|
310
|
+
You can surface the Sentry event ID in the error page for user feedback:
|
|
311
|
+
|
|
312
|
+
```svelte
|
|
313
|
+
<!-- src/routes/+error.svelte -->
|
|
314
|
+
<script>
|
|
315
|
+
import { page } from "$app/stores";
|
|
316
|
+
import * as Sentry from "@sentry/sveltekit";
|
|
317
|
+
|
|
318
|
+
// Show user feedback dialog tied to the last captured event
|
|
319
|
+
function showFeedback() {
|
|
320
|
+
const eventId = Sentry.lastEventId();
|
|
321
|
+
if (eventId) {
|
|
322
|
+
Sentry.showReportDialog({ eventId });
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
</script>
|
|
326
|
+
|
|
327
|
+
<h1>{$page.status}: {$page.error?.message}</h1>
|
|
328
|
+
<button onclick={showFeedback}>Report this issue</button>
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## Error Boundaries (Svelte 5+)
|
|
334
|
+
|
|
335
|
+
> Requires Svelte 5 + `@sveltejs/kit` ≥2.x. Catches errors thrown in child components
|
|
336
|
+
> before they propagate to the page.
|
|
337
|
+
|
|
338
|
+
`<svelte:boundary>` prevents a component subtree from crashing the whole page and lets
|
|
339
|
+
you report the error to Sentry and optionally display a fallback UI:
|
|
340
|
+
|
|
341
|
+
```svelte
|
|
342
|
+
<script>
|
|
343
|
+
import * as Sentry from "@sentry/sveltekit";
|
|
344
|
+
</script>
|
|
345
|
+
|
|
346
|
+
<svelte:boundary onerror={(error, reset) => {
|
|
347
|
+
Sentry.captureException(error);
|
|
348
|
+
}}>
|
|
349
|
+
<RiskyComponent />
|
|
350
|
+
|
|
351
|
+
{#snippet failed(error, reset)}
|
|
352
|
+
<p>Something went wrong.</p>
|
|
353
|
+
<button onclick={reset}>Try again</button>
|
|
354
|
+
{/snippet}
|
|
355
|
+
</svelte:boundary>
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
**Tips:**
|
|
359
|
+
|
|
360
|
+
- `onerror` fires synchronously before Svelte tears down the subtree — safe to call
|
|
361
|
+
`captureException` here
|
|
362
|
+
- `reset` re-mounts the boundary subtree; pair it with `Sentry.lastEventId()` +
|
|
363
|
+
`Sentry.showReportDialog()` for user feedback
|
|
364
|
+
- Nest multiple boundaries to isolate independent widgets — a failure in one won’t
|
|
365
|
+
affect others
|
|
366
|
+
- Works in both client and server-rendered pages; server-side errors are still captured
|
|
367
|
+
via `hooks.server.ts`
|
|
368
|
+
|
|
369
|
+
```svelte
|
|
370
|
+
<!-- With user feedback dialog on reset -->
|
|
371
|
+
<svelte:boundary onerror={(error) => {
|
|
372
|
+
Sentry.captureException(error);
|
|
373
|
+
}}>
|
|
374
|
+
<DataWidget />
|
|
375
|
+
|
|
376
|
+
{#snippet failed(error, reset)}
|
|
377
|
+
<button onclick={() => {
|
|
378
|
+
const eventId = Sentry.lastEventId();
|
|
379
|
+
if (eventId) Sentry.showReportDialog({ eventId });
|
|
380
|
+
reset();
|
|
381
|
+
}}>Report & retry</button>
|
|
382
|
+
{/snippet}
|
|
383
|
+
</svelte:boundary>
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## Scopes: `withScope` vs Persistent Context
|
|
389
|
+
|
|
390
|
+
> Minimum SDK: `@sentry/sveltekit` ≥8.0.0 for isolation scopes; ≥10.32.0 for
|
|
391
|
+
> `getGlobalScope`/`getIsolationScope`
|
|
392
|
+
|
|
393
|
+
| API | Lifetime | Use case |
|
|
394
|
+
| ---------------------------- | ------------------------------ | ---------------------------------------- |
|
|
395
|
+
| `Sentry.withScope(fn)` | Isolated to callback | One-off context for a single capture |
|
|
396
|
+
| `Sentry.getIsolationScope()` | Per-request (SvelteKit server) | Persistent context scoped to one request |
|
|
397
|
+
| `Sentry.getGlobalScope()` | Entire process lifetime | App-wide context (version tags, env) |
|
|
398
|
+
|
|
399
|
+
> **Note:** `Sentry.configureScope()` is deprecated since SDK v8. Use
|
|
400
|
+
> `getIsolationScope()` or `getGlobalScope()` instead.
|
|
401
|
+
|
|
402
|
+
```typescript
|
|
403
|
+
// withScope — temporary, doesn't affect subsequent events
|
|
404
|
+
Sentry.withScope((scope) => {
|
|
405
|
+
scope.setTag("component", "checkout");
|
|
406
|
+
Sentry.captureException(err); // only this event gets the tag
|
|
407
|
+
});
|
|
408
|
+
|
|
409
|
+
// Set persistent scope data (per-request in SvelteKit server)
|
|
410
|
+
const scope = Sentry.getIsolationScope();
|
|
411
|
+
scope.setTag("tenant", session.tenantId);
|
|
412
|
+
scope.setUser({ id: session.userId });
|
|
413
|
+
|
|
414
|
+
// App-wide context (set once at startup)
|
|
415
|
+
const globalScope = Sentry.getGlobalScope();
|
|
416
|
+
globalScope.setTag("app.version", "1.0.0");
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
---
|
|
420
|
+
|
|
421
|
+
## Svelte vs SvelteKit: Key Differences
|
|
422
|
+
|
|
423
|
+
| Concern | Standalone Svelte | SvelteKit |
|
|
424
|
+
| ------------------ | --------------------------------------- | --------------------------------------- |
|
|
425
|
+
| Error hook files | None — errors via `window.onerror` only | `hooks.client.ts` + `hooks.server.ts` |
|
|
426
|
+
| Server-side errors | N/A (client-only) | Auto via `handleErrorWithSentry()` |
|
|
427
|
+
| Component errors | `window.onerror` catches uncaught ones | Same + SvelteKit route error handling |
|
|
428
|
+
| `+error.svelte` | N/A | Add `Sentry.lastEventId()` for feedback |
|
|
429
|
+
| Scope per request | N/A | SvelteKit isolation scope per request |
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
## Best Practices
|
|
434
|
+
|
|
435
|
+
- Export `handleError = Sentry.handleErrorWithSentry()` from **both** hook files in
|
|
436
|
+
SvelteKit — server errors are missed if only one is set
|
|
437
|
+
- User context is auto-populated by default via `dataCollection.userInfo` (SDK ≥10.57.0)
|
|
438
|
+
- Use `Sentry.withScope()` for one-off context, `Sentry.getIsolationScope()` /
|
|
439
|
+
`Sentry.getGlobalScope()` for persistent context
|
|
440
|
+
- Scrub PII in `beforeSend` or use `dataCollection` options to control what data is
|
|
441
|
+
collected
|
|
442
|
+
- Set `debug: true` during development to verify events are being captured
|
|
443
|
+
|
|
444
|
+
---
|
|
445
|
+
|
|
446
|
+
## Troubleshooting
|
|
447
|
+
|
|
448
|
+
| Issue | Solution |
|
|
449
|
+
| --------------------------------------------------- | ------------------------------------------------------------------------------------------ |
|
|
450
|
+
| Server errors not appearing | Confirm `handleErrorWithSentry()` is exported from `hooks.server.ts` |
|
|
451
|
+
| Client errors not appearing | Confirm `handleErrorWithSentry()` is exported from `hooks.client.ts` |
|
|
452
|
+
| `ignoreErrors` patterns not working | Use `RegExp` for patterns with special chars; string values are treated as regex |
|
|
453
|
+
| `beforeSend` returning `null` but events still sent | Check that `beforeSendTransaction` is not what fires (different hook) |
|
|
454
|
+
| Component tracking not emitting spans | Ensure `withSentryConfig` wraps the config in `svelte.config.js`; requires tracing enabled |
|
|
455
|
+
| `Sentry.lastEventId()` returns undefined | Only populated after `captureException`/`captureMessage` or automatic capture |
|
|
456
|
+
| Events appear without user context | Call `Sentry.setUser()` after authentication, not inside `Sentry.init()` |
|