File size: 1,274 Bytes
8ede856
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
const INVALID_ERROR_STRINGS = new Set(["[object Object]", "undefined", "null", ""]);

const pickResponseMessage = (responseData) => {
  if (typeof responseData === "string") {
    return responseData.trim();
  }
  if (!responseData || typeof responseData !== "object") {
    return "";
  }

  const keys = ["message", "error", "detail", "details", "msg"];
  for (const key of keys) {
    const value = responseData[key];
    if (typeof value === "string" && value.trim()) {
      return value.trim();
    }
  }
  return "";
};

export const resolveErrorMessage = (err, fallbackMessage = "") => {
  if (typeof err === "string") {
    return err.trim() || fallbackMessage;
  }
  if (typeof err === "number" || typeof err === "boolean") {
    return String(err);
  }

  const fromResponse =
    pickResponseMessage(err?.response?.data) ||
    (typeof err?.response?.statusText === "string"
      ? err.response.statusText.trim()
      : "");
  const fromError =
    typeof err?.message === "string" ? err.message.trim() : "";

  let fromString = "";
  if (typeof err?.toString === "function") {
    const value = err.toString().trim();
    fromString = INVALID_ERROR_STRINGS.has(value) ? "" : value;
  }

  return fromResponse || fromError || fromString || fallbackMessage;
};