commerce/lib/spree/utils/convert-spree-error-to-graph-ql-error.ts
2024-05-21 20:00:11 +05:00

51 lines
1.4 KiB
TypeScript

import { FetcherError } from '@commerce/utils/errors';
import { errors } from '@spree/storefront-api-v2-sdk';
const convertSpreeErrorToGraphQlError = (error: errors.SpreeError): FetcherError => {
if (error instanceof errors.ExpandedSpreeError) {
// Assuming error.errors[key] is a list of strings.
if ('base' in error.errors) {
const baseErrorMessage = error.errors.base as unknown as string;
return new FetcherError({
status: error.serverResponse.status,
message: baseErrorMessage
});
}
const fetcherErrors = Object.keys(error.errors).map((sdkErrorKey) => {
const errors = error.errors[sdkErrorKey] as string[];
// Naively assume sdkErrorKey is a label. Capitalize it for a better
// out-of-the-box experience.
const capitalizedSdkErrorKey = sdkErrorKey.replace(/^\w/, (firstChar) =>
firstChar.toUpperCase()
);
return {
message: `${capitalizedSdkErrorKey} ${errors.join(', ')}`
};
});
return new FetcherError({
status: error.serverResponse.status,
errors: fetcherErrors
});
}
if (error instanceof errors.BasicSpreeError) {
return new FetcherError({
status: error.serverResponse.status,
message: error.summary
});
}
return new FetcherError({
status: error.serverResponse.status,
message: error.message
});
};
export default convertSpreeErrorToGraphQlError;