Something went wrong. Try again.
🔥 🔥 🔥 A Free & Self-hostable Airtable Alternative nocodb.com
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889import { NcErrorType } from 'nocodb-sdk'
export async function extractSdkResponseErrorMsg(e: Error & { response?: any }) { if (!e || !e.response) { if (e?.message?.includes('object ProgressEvent')) { return 'Requested file was not accessible. Please check if server allows accessing the file. If you are sure the file exists, it might be a CORS issue.' } else { return e.message } }
let msg let errors: any[] | null = null
if (e.response.data instanceof Blob) { try { const parsedData = JSON.parse(await e.response.data.text()) // V2 format support msg = parsedData.message || parsedData.msg errors = parsedData.errors } catch { msg = 'Some internal error occurred' } } else { // V2 format: prioritize 'message' field over 'msg' // V1 format: falls back to 'msg' field msg = e.response?.data?.message || e.response?.data?.msg || 'Some internal error occurred' errors = e.response.data?.errors }
if (Array.isArray(errors) && errors.length) { return errors.map((e: any) => (e.instancePath ? `${e.instancePath} - ` : '') + e.message).join(', ') }
return msg || 'Some error occurred'}
export async function extractSdkResponseErrorMsgv2(e: Error & { response: any }): Promise<{ error: NcErrorType message: string details?: any}> { const unknownError = { error: NcErrorType.ERR_UNKNOWN, // TODO: `e.response?.data?.msg` is fallback for v1 error messages, remove after migrating all error messages to v2 format message: e.response?.data?.msg || 'Something went wrong', }
if (!e || !e.response) { return unknownError }
if (e.response.data instanceof Blob) { try { const parsedError = JSON.parse(await e.response.data.text()) if (parsedError.error && parsedError.error in NcErrorType) { return parsedError } return unknownError } catch { return unknownError } } else { if (e.response.data.error && e.response.data.error in NcErrorType) { return e.response.data } return unknownError }}
/** * Checks if the error is a unique constraint violation * @param e - Error object * @returns true if it's a unique constraint violation */export function isUniqueConstraintViolationError(e: Error & { response?: any }): boolean { if (!e?.response?.data) return false
const errorData = e.response.data // Check for FIELD_UNIQUE_CONSTRAINT_VIOLATION error code return ( errorData.error === NcErrorType.FIELD_UNIQUE_CONSTRAINT_VIOLATION || (errorData.message ?? errorData.msg)?.includes('Duplicate value') || (errorData.message ?? errorData.msg)?.includes('Unique constraint violation') )}
export { NcErrorType }