Init
This commit is contained in:
+60
@@ -0,0 +1,60 @@
|
||||
/**
|
||||
* Error format
|
||||
*
|
||||
* Returned by every PostgREST request that fails. When something fails, the
|
||||
* single most useful field is usually `hint` — Postgres often returns the
|
||||
* actionable fix there, not in `message`. Always log the full object (e.g.
|
||||
* `console.error(error)`); logging only `error.message` hides the hint.
|
||||
*
|
||||
* Read the fields in roughly this order of usefulness:
|
||||
*
|
||||
* - `hint` — actionable guidance from the database when available. For
|
||||
* permission-denied errors (`42501`), this is the literal SQL to fix the
|
||||
* problem, e.g.
|
||||
* `"Grant the required privileges to the current role with: GRANT SELECT ON public.users TO anon;"`.
|
||||
* Missing column? `hint` suggests the column you probably meant. Whenever
|
||||
* Postgres knows the fix, it puts it in `hint`.
|
||||
* - `code` — stable error code from PostgREST (e.g. `PGRST301`) or Postgres
|
||||
* (e.g. `42501`). Branch on this rather than on `message` text.
|
||||
* - `details` — extra context, often the offending value, key, or row.
|
||||
* - `message` — human-readable summary. Useful in UI strings; less useful
|
||||
* for debugging.
|
||||
*
|
||||
* {@link https://postgrest.org/en/stable/api.html?highlight=options#errors-and-http-status-codes}
|
||||
*/
|
||||
export default class PostgrestError extends Error {
|
||||
details: string
|
||||
hint: string
|
||||
code: string
|
||||
|
||||
/**
|
||||
* @example
|
||||
* ```ts
|
||||
* import PostgrestError from '@supabase/postgrest-js'
|
||||
*
|
||||
* throw new PostgrestError({
|
||||
* message: 'Row level security prevented the request',
|
||||
* details: 'RLS denied the insert',
|
||||
* hint: 'Check your policies',
|
||||
* code: 'PGRST301',
|
||||
* })
|
||||
* ```
|
||||
*/
|
||||
constructor(context: { message: string; details: string; hint: string; code: string }) {
|
||||
super(context.message)
|
||||
this.name = 'PostgrestError'
|
||||
this.details = context.details
|
||||
this.hint = context.hint
|
||||
this.code = context.code
|
||||
}
|
||||
|
||||
toJSON(): { name: string; message: string; details: string; hint: string; code: string } {
|
||||
return {
|
||||
name: this.name,
|
||||
message: this.message,
|
||||
details: this.details,
|
||||
hint: this.hint,
|
||||
code: this.code,
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user