@wener/console
Version:
Base console UI toolkit
82 lines (81 loc) • 3.04 kB
JavaScript
import { getHttpStatusText } from "@wener/utils";
export function resolveErrorMessage(error) {
if (!error) {
return;
}
if (!(error instanceof Error)) {
if (error && typeof error === 'object') {
if ('message' in error) {
return error.message;
}
if ('detail' in error) {
return error.detail;
}
}
return String(error);
}
try {
if (isZodError(error)) {
return error.issues.map((v)=>`${v.path.join('.')}: ${v.message}`).join(';');
}
if (isTypeBoxError(error)) {
const { path, type, message } = error.error;
return `${path}: ${message} (${type})`;
}
if (URQLError.is(error)) {
return error.response.errors.map((v)=>v.message).join(';');
}
const buildGraphQLError = (errors = [])=>{
return errors.map((v)=>{
return `${v.message}`;
}).join(';');
};
const buildGraphQLResponseError = ({ response })=>{
let s = [
''
];
let status = response.status;
if (status !== 200) {
s.push(`${status} ${getHttpStatusText(status)}`);
}
if (response.errors) {
s.push(buildGraphQLError(response.errors));
}
return s.join(' ');
};
if (GraphQL.isClientError(error)) {
return buildGraphQLResponseError(error);
}
if (typeof error === 'object' && 'message' in error) {
return error.message;
}
} catch (e) {
console.error('resolveErrorMessage', e);
}
return String(error);
}
(function(GraphQL) {
function isClientError(error) {
// graphql-client _ClientError
// https://github.com/graffle-js/graffle/blob/graphql-request/src/legacy/classes/ClientError.ts
return typeof error.response === 'object' && typeof error.request === 'object' && typeof error.response.status === 'number' && typeof error.request.query === 'string' && (error.response.errors === undefined || error.response.errors === null || Array.isArray(error.response.errors));
}
GraphQL.isClientError = isClientError;
})(GraphQL || (GraphQL = {}));
function isTypeBoxError(error) {
return error.error?.path && error.error.type && error.error.message && error instanceof Error;
}
function isZodError(error) {
return error instanceof Error && Array.isArray(error.issues);
}
// https://commerce.nearform.com/open-source/urql/docs/basics/errors/
// https://github.com/urql-graphql/urql/blob/main/packages/core/src/utils/error.ts
// urql CombinedError
(function(URQLError) {
function is(error) {
return Array.isArray(error?.graphQLErrors) && error.name === 'CombinedError' && error instanceof Error;
}
URQLError.is = is;
})(URQLError || (URQLError = {}));
var GraphQL, URQLError;
//# sourceMappingURL=resolveErrorMessage.js.map