studio-error-handling

bởi supabase

Mẫu hiển thị lỗi và khắc phục sự cố cho Supabase Studio. Sử dụng khi

npx skills add https://github.com/supabase/supabase --skill studio-error-handling

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

FilePurpose
data/error-patterns.tsArray of { pattern, ErrorClass } — the regex lives here
types/api-errors.tsError classes, KnownErrorType union, ClassifiedError type
ErrorMatcher.tsxComponent — reads errorType, looks up mapping, renders
error-mappings.tsxRecord<KnownErrorType, { id, Troubleshooting: ComponentType }>
errorMappings/ConnectionTimeout.tsxReference troubleshooting component
TroubleshootingSections.tsxReusable accordion section components
TroubleshootingAccordion.tsxAccordion wrapper with telemetry

Which component

SituationUse
A query failed and the page/section can't render its data (the default case — most of Studio)AlertError from components/ui/AlertError
The error may be a classified type with its own troubleshooting steps (e.g. connection timeout)ErrorMatcher from components/interfaces/ErrorHandling/ErrorMatcher — pass a fallback for the unclassified case
A mutation failedThe mutation hook's default onError toast (toast.error from sonner) — don't render an alert (see studio-queries)

AlertError (default)

Renders a warning Admonition with the error message, generic "try refreshing / contact support" instructions, and a Contact support button pre-filled with projectRef, subject, and the error message.

if (isError) return <AlertError error={error} subject="Failed to retrieve invoices" />
  • subject is the human-readable title, phrased Failed to <verb> <thing>. Pass projectRef when in a project context so the support form is pre-filled.
  • error is the React Query error object (anything with message); 503 responses are reworded automatically.
  • Use additionalActions for a retry or navigate button; hideContactSupport only when support genuinely can't help (e.g. a user-input error).
  • Prefer the early-return form for the page/section's primary data; use inline {isError && <AlertError … />} for secondary panels that shouldn't block the rest of the page.

ErrorMatcher (classified errors)

Use when the data layer may have classified the error into a KnownErrorType with dedicated troubleshooting UI. It reads errorType from the error instance and renders the mapped Troubleshooting component, or fallback when there is no mapping. Today this is wired for the table editor sidebar; reach for it when adding troubleshooting for a new error type rather than as a general replacement for AlertError.

ErrorMatcher 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.

Thêm skills từ supabase

studio-mock-api-tests
supabase
Các bài kiểm tra thành phần cho Supabase Studio mô phỏng các yêu cầu API ở lớp mạng với MSW. Sử dụng khi viết hoặc xem xét một bài kiểm tra thành phần thực thi một React…
pm-the-docs
supabase
Hỗ trợ ra quyết định Docs-PM cho quy trình biên soạn "Write the docs" — đưa ra các quyết định về đối tượng, giai đoạn và phạm vi xuyên suốt trong các giai đoạn Frame và Shape,…
studio-best-practices
supabase
Các phương pháp hay nhất về React và TypeScript cho Supabase Studio. Sử dụng khi viết hoặc xem xét các thành phần Studio — bao gồm đặt tên boolean, cấu trúc thành phần,…
docs-content
supabase
Viết, chỉnh sửa, sắp xếp và xem lại nội dung Supabase ở bất kỳ đâu trong apps/docs — hướng dẫn, bài giải thích, bài hướng dẫn, mục xử lý sự cố, tài liệu tham khảo, và…
react-hook-form
supabase
Sử dụng React Hook Form đúng cách ở bất kỳ đâu trong monorepo — luồng dữ liệu, đăng ký, reset, trạng thái dirty, input số và quy tắc input có kiểm soát. Tải cái này…
review-the-docs
supabase
Xem lại các thay đổi tài liệu Supabase cục bộ trong ~/GitHub/supabase/supabase — hoặc một PR đang mở (phân loại, phân nhóm, xác minh) hoặc nhánh của bạn trước khi mở PR (cục bộ…
ask-the-docs
supabase
Trả lời các câu hỏi về ứng dụng tài liệu Supabase (apps/docs) bằng cách sử dụng kiến trúc được ghi chép, quy trình build và các ghi chú về mẫu đánh giá, đồng thời áp dụng thiết kế tính năng…
write-the-docs
supabase
Soạn thảo nội dung tài liệu Supabase mới hoặc cập nhật cho một tính năng hoặc bản phát hành, dựa trên Linear (ticket cùng bối cảnh sản phẩm/PM của nó), đọc mã nguồn thực tế, và…