@supabase/studio-error-handling

Error display and troubleshooting pattern for Supabase Studio. Use when

View in AI SkillSafe app
Scanned · no findings
0 downloads
0 stars
0 demos
SKILL.md
namestudio-error-handling
descriptionError display and troubleshooting pattern for Supabase Studio. Use when

Studio Error Handling Pattern

Full docs and code examples: apps/studio/components/interfaces/ErrorHandling/README.md

How it works

Classification happens in the data layer: handleError in data/fetchers.ts tests the error message against ERROR_PATTERNS and throws the matching error subclass (e.g. ConnectionTimeoutError extends ResponseError). The component (ErrorMatcher) reads errorType from the instance and does an O(1) lookup — it never does regex matching.

handleError() → throws ConnectionTimeoutError → React Query catches → ErrorMatcher reads errorType → renders troubleshooting

Key files

File Purpose
data/error-patterns.ts Array of { pattern, ErrorClass } — the regex lives here
types/api-errors.ts Error classes, KnownErrorType union, ClassifiedError type
ErrorMatcher.tsx Component — reads errorType, looks up mapping, renders
error-mappings.tsx Record<KnownErrorType, { id, Troubleshooting: ComponentType }>
errorMappings/ConnectionTimeout.tsx Reference troubleshooting component
TroubleshootingSections.tsx Reusable accordion section components
TroubleshootingAccordion.tsx Accordion wrapper with telemetry

Usage

Pass the full error object from React Query — not error.message:

{
  isError && (
    <ErrorMatcher title="Failed to load tables" error={error} supportFormParams={{ projectRef }} />
  )
}

What NOT to do

  • Do not pass error.message to ErrorMatcher — pass the full error object so the class is preserved.
  • Do not put regex patterns in error-mappings.tsx — they belong in data/error-patterns.ts.
  • Do not use Object.assign to stamp errorType — throw a proper subclass instead.
  • Do not pass a raw URL string for support — use supportFormParams={{ projectRef }}.
  • Do not put the page title inside the error mapping — it belongs on the <ErrorMatcher> caller.
  • Do not add callback props (onDebugWithAI, onRestartProject) to troubleshooting components — use hooks inside them instead.

Embed badges

Add these to your README to show the skill's verification status.

SkillSafe verified badge
Verified badge
[![SkillSafe verified badge](https://api.skillsafe.ai/v1/badge/@supabase/studio-error-handling/verified)](https://skillsafe.ai/skill/@supabase/studio-error-handling/)
Installs badge
Installs badge
[![Installs badge](https://api.skillsafe.ai/v1/badge/@supabase/studio-error-handling/installs)](https://skillsafe.ai/skill/@supabase/studio-error-handling/)
Scan badge
Scan badge
[![Scan badge](https://api.skillsafe.ai/v1/badge/@supabase/studio-error-handling/scan)](https://skillsafe.ai/skill/@supabase/studio-error-handling/)
Eval pass rate badge
Eval pass rate
[![Eval pass rate badge](https://api.skillsafe.ai/v1/badge/@supabase/studio-error-handling/eval)](https://skillsafe.ai/skill/@supabase/studio-error-handling/)