@shware/http 2.6.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -53,6 +53,8 @@ By default, `ErrorInfo.reason` accepts any `string`. You can use TypeScript [dec
53
53
 
54
54
  ```typescript
55
55
  // e.g. shware-http.d.ts
56
+ import '@shware/http'; // Required: makes this file a module so that `declare module` augments rather than replaces
57
+
56
58
  declare module '@shware/http' {
57
59
  interface ErrorReason {
58
60
  ACCOUNT_BLOCKED: string;
@@ -20,27 +20,27 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/error/parse.ts
21
21
  var parse_exports = {};
22
22
  __export(parse_exports, {
23
+ getErrorInfo: () => getErrorInfo,
23
24
  getErrorMessage: () => getErrorMessage,
24
- getErrorReason: () => getErrorReason,
25
25
  getFieldViolations: () => getFieldViolations
26
26
  });
27
27
  module.exports = __toCommonJS(parse_exports);
28
28
  var import_utils = require("@shware/utils");
29
29
  var import_detail = require("./detail.cjs");
30
- function getErrorReason(data) {
31
- if (typeof data !== "object" || data === null || !("error" in data)) return "UNKNOWN";
30
+ function getErrorInfo(data) {
31
+ if (typeof data !== "object" || data === null || !("error" in data)) return null;
32
32
  const { error } = data;
33
33
  const errorInfo = error?.details?.find((d) => d["@type"] === import_detail.DetailType.ERROR_INFO);
34
- return errorInfo?.reason ?? "UNKNOWN";
34
+ return errorInfo ?? null;
35
35
  }
36
36
  function getErrorMessage(data, t) {
37
37
  if (typeof data !== "object" || data === null || !("error" in data)) {
38
38
  console.error("Unknown API error:", data);
39
- return { reason: "UNKNOWN", message: t("UNKNOWN") };
39
+ return { reason: null, message: t("UNKNOWN") };
40
40
  }
41
41
  const { error } = data;
42
42
  const localizedMessage = error?.details?.find((d) => d["@type"] === import_detail.DetailType.LOCALIZED_MESSAGE);
43
- if (localizedMessage) return { reason: "LOCALIZED_MESSAGE", message: localizedMessage.message };
43
+ if (localizedMessage) return { reason: null, message: localizedMessage.message };
44
44
  const errorInfo = error?.details?.find((d) => d["@type"] === import_detail.DetailType.ERROR_INFO);
45
45
  if (errorInfo) {
46
46
  return {
@@ -48,10 +48,10 @@ function getErrorMessage(data, t) {
48
48
  message: t(errorInfo.reason, errorInfo.metadata)
49
49
  };
50
50
  }
51
- if ((0, import_utils.hasText)(error.message)) return { reason: "ERROR_MESSAGE", message: error.message };
52
- if (error.status) return { reason: error.status, message: t(error.status) };
51
+ if ((0, import_utils.hasText)(error.message)) return { reason: null, message: error.message };
52
+ if (error.status) return { reason: null, message: t(error.status) };
53
53
  console.error("Unknown API error:", data);
54
- return { reason: "UNKNOWN", message: t("UNKNOWN") };
54
+ return { reason: null, message: t("UNKNOWN") };
55
55
  }
56
56
  function getFieldViolations(data) {
57
57
  if (typeof data !== "object" || data === null || !("error" in data)) return [];
@@ -61,8 +61,8 @@ function getFieldViolations(data) {
61
61
  }
62
62
  // Annotate the CommonJS export names for ESM import in node:
63
63
  0 && (module.exports = {
64
+ getErrorInfo,
64
65
  getErrorMessage,
65
- getErrorReason,
66
66
  getFieldViolations
67
67
  });
68
68
  //# sourceMappingURL=parse.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/error/parse.ts"],"sourcesContent":["import type { DefaultNamespace, Namespace, TFunction } from 'i18next';\nimport { hasText } from '@shware/utils';\nimport type { ErrorBody } from './status';\nimport { type BadRequest, DetailType } from './detail';\n\nexport function getErrorReason(data: unknown) {\n if (typeof data !== 'object' || data === null || !('error' in data)) return 'UNKNOWN';\n const { error } = data as ErrorBody;\n const errorInfo = error?.details?.find((d) => d['@type'] === DetailType.ERROR_INFO);\n return errorInfo?.reason ?? 'UNKNOWN';\n}\n\n/**\n * @example For axios:\n *\n * const { t } = useTranslation('error');\n *\n * const { message } = getErrorMessage(error.response.data, t);\n * toast.error(message);\n */\nexport function getErrorMessage<Ns extends Namespace = DefaultNamespace, KPrefix = undefined>(\n data: unknown,\n t: TFunction<Ns, KPrefix>\n): { reason: string; message: string } {\n // 0. unknown error\n if (typeof data !== 'object' || data === null || !('error' in data)) {\n console.error('Unknown API error:', data);\n return { reason: 'UNKNOWN', message: t('UNKNOWN') };\n }\n\n const { error } = data as ErrorBody;\n\n // 1. from server via Accept-Language header or lng param\n const localizedMessage = error?.details?.find((d) => d['@type'] === DetailType.LOCALIZED_MESSAGE);\n if (localizedMessage) return { reason: 'LOCALIZED_MESSAGE', message: localizedMessage.message };\n\n // 2. from business logic error\n const errorInfo = error?.details?.find((d) => d['@type'] === DetailType.ERROR_INFO);\n if (errorInfo) {\n return {\n reason: errorInfo.reason,\n message: t(errorInfo.reason, errorInfo.metadata),\n };\n }\n\n // 3. error message in english\n if (hasText(error.message)) return { reason: 'ERROR_MESSAGE', message: error.message };\n\n // 4. from server via status code\n if (error.status) return { reason: error.status, message: t(error.status) };\n\n // 5. unknown error\n console.error('Unknown API error:', data);\n return { reason: 'UNKNOWN', message: t('UNKNOWN') };\n}\n\n/**\n * @example For react-hook-form:\n *\n * const { setError } = useForm();\n * const fieldViolations = getFieldViolations(error.response.data);\n * fieldViolations.forEach((violation) => {\n * setError(violation.field, { message: violation.description });\n * });\n */\nexport function getFieldViolations(data: unknown): BadRequest['fieldViolations'] {\n if (typeof data !== 'object' || data === null || !('error' in data)) return [];\n const { error } = data as ErrorBody;\n const badRequest = error?.details?.find((d) => d['@type'] === DetailType.BAD_REQUEST);\n return badRequest?.fieldViolations ?? [];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAwB;AAExB,oBAA4C;AAErC,SAAS,eAAe,MAAe;AAC5C,MAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,EAAE,WAAW,MAAO,QAAO;AAC5E,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,YAAY,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,yBAAW,UAAU;AAClF,SAAO,WAAW,UAAU;AAC9B;AAUO,SAAS,gBACd,MACA,GACqC;AAErC,MAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,EAAE,WAAW,OAAO;AACnE,YAAQ,MAAM,sBAAsB,IAAI;AACxC,WAAO,EAAE,QAAQ,WAAW,SAAS,EAAE,SAAS,EAAE;AAAA,EACpD;AAEA,QAAM,EAAE,MAAM,IAAI;AAGlB,QAAM,mBAAmB,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,yBAAW,iBAAiB;AAChG,MAAI,iBAAkB,QAAO,EAAE,QAAQ,qBAAqB,SAAS,iBAAiB,QAAQ;AAG9F,QAAM,YAAY,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,yBAAW,UAAU;AAClF,MAAI,WAAW;AACb,WAAO;AAAA,MACL,QAAQ,UAAU;AAAA,MAClB,SAAS,EAAE,UAAU,QAAQ,UAAU,QAAQ;AAAA,IACjD;AAAA,EACF;AAGA,UAAI,sBAAQ,MAAM,OAAO,EAAG,QAAO,EAAE,QAAQ,iBAAiB,SAAS,MAAM,QAAQ;AAGrF,MAAI,MAAM,OAAQ,QAAO,EAAE,QAAQ,MAAM,QAAQ,SAAS,EAAE,MAAM,MAAM,EAAE;AAG1E,UAAQ,MAAM,sBAAsB,IAAI;AACxC,SAAO,EAAE,QAAQ,WAAW,SAAS,EAAE,SAAS,EAAE;AACpD;AAWO,SAAS,mBAAmB,MAA8C;AAC/E,MAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,EAAE,WAAW,MAAO,QAAO,CAAC;AAC7E,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,aAAa,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,yBAAW,WAAW;AACpF,SAAO,YAAY,mBAAmB,CAAC;AACzC;","names":[]}
1
+ {"version":3,"sources":["../../src/error/parse.ts"],"sourcesContent":["import type { DefaultNamespace, Namespace, TFunction } from 'i18next';\nimport { hasText } from '@shware/utils';\nimport type { ResolvedErrorReason } from './reason';\nimport type { ErrorBody } from './status';\nimport { type BadRequest, DetailType, type ErrorInfo } from './detail';\n\nexport function getErrorInfo(data: unknown): ErrorInfo | null {\n if (typeof data !== 'object' || data === null || !('error' in data)) return null;\n const { error } = data as ErrorBody;\n const errorInfo = error?.details?.find((d) => d['@type'] === DetailType.ERROR_INFO);\n return errorInfo ?? null;\n}\n\n/**\n * @example For axios:\n *\n * const { t } = useTranslation('error');\n *\n * const { message } = getErrorMessage(error.response.data, t);\n * toast.error(message);\n */\nexport function getErrorMessage<Ns extends Namespace = DefaultNamespace, KPrefix = undefined>(\n data: unknown,\n t: TFunction<Ns, KPrefix>\n): { reason: ResolvedErrorReason | null; message: string } {\n // 0. unknown error\n if (typeof data !== 'object' || data === null || !('error' in data)) {\n console.error('Unknown API error:', data);\n return { reason: null, message: t('UNKNOWN') };\n }\n\n const { error } = data as ErrorBody;\n\n // 1. from server via Accept-Language header or lng param\n const localizedMessage = error?.details?.find((d) => d['@type'] === DetailType.LOCALIZED_MESSAGE);\n if (localizedMessage) return { reason: null, message: localizedMessage.message };\n\n // 2. from business logic error\n const errorInfo = error?.details?.find((d) => d['@type'] === DetailType.ERROR_INFO);\n if (errorInfo) {\n return {\n reason: errorInfo.reason,\n message: t(errorInfo.reason, errorInfo.metadata),\n };\n }\n\n // 3. error message in english\n if (hasText(error.message)) return { reason: null, message: error.message };\n\n // 4. from server via status code\n if (error.status) return { reason: null, message: t(error.status) };\n\n // 5. unknown error\n console.error('Unknown API error:', data);\n return { reason: null, message: t('UNKNOWN') };\n}\n\n/**\n * @example For react-hook-form:\n *\n * const { setError } = useForm();\n * const fieldViolations = getFieldViolations(error.response.data);\n * fieldViolations.forEach((violation) => {\n * setError(violation.field, { message: violation.description });\n * });\n */\nexport function getFieldViolations(data: unknown): BadRequest['fieldViolations'] {\n if (typeof data !== 'object' || data === null || !('error' in data)) return [];\n const { error } = data as ErrorBody;\n const badRequest = error?.details?.find((d) => d['@type'] === DetailType.BAD_REQUEST);\n return badRequest?.fieldViolations ?? [];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAwB;AAGxB,oBAA4D;AAErD,SAAS,aAAa,MAAiC;AAC5D,MAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,EAAE,WAAW,MAAO,QAAO;AAC5E,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,YAAY,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,yBAAW,UAAU;AAClF,SAAO,aAAa;AACtB;AAUO,SAAS,gBACd,MACA,GACyD;AAEzD,MAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,EAAE,WAAW,OAAO;AACnE,YAAQ,MAAM,sBAAsB,IAAI;AACxC,WAAO,EAAE,QAAQ,MAAM,SAAS,EAAE,SAAS,EAAE;AAAA,EAC/C;AAEA,QAAM,EAAE,MAAM,IAAI;AAGlB,QAAM,mBAAmB,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,yBAAW,iBAAiB;AAChG,MAAI,iBAAkB,QAAO,EAAE,QAAQ,MAAM,SAAS,iBAAiB,QAAQ;AAG/E,QAAM,YAAY,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,yBAAW,UAAU;AAClF,MAAI,WAAW;AACb,WAAO;AAAA,MACL,QAAQ,UAAU;AAAA,MAClB,SAAS,EAAE,UAAU,QAAQ,UAAU,QAAQ;AAAA,IACjD;AAAA,EACF;AAGA,UAAI,sBAAQ,MAAM,OAAO,EAAG,QAAO,EAAE,QAAQ,MAAM,SAAS,MAAM,QAAQ;AAG1E,MAAI,MAAM,OAAQ,QAAO,EAAE,QAAQ,MAAM,SAAS,EAAE,MAAM,MAAM,EAAE;AAGlE,UAAQ,MAAM,sBAAsB,IAAI;AACxC,SAAO,EAAE,QAAQ,MAAM,SAAS,EAAE,SAAS,EAAE;AAC/C;AAWO,SAAS,mBAAmB,MAA8C;AAC/E,MAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,EAAE,WAAW,MAAO,QAAO,CAAC;AAC7E,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,aAAa,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,yBAAW,WAAW;AACpF,SAAO,YAAY,mBAAmB,CAAC;AACzC;","names":[]}
@@ -1,8 +1,8 @@
1
1
  import { Namespace, DefaultNamespace, TFunction } from 'i18next';
2
- import { BadRequest } from './detail.cjs';
3
- import './reason.cjs';
2
+ import { ResolvedErrorReason } from './reason.cjs';
3
+ import { ErrorInfo, BadRequest } from './detail.cjs';
4
4
 
5
- declare function getErrorReason(data: unknown): string;
5
+ declare function getErrorInfo(data: unknown): ErrorInfo | null;
6
6
  /**
7
7
  * @example For axios:
8
8
  *
@@ -12,7 +12,7 @@ declare function getErrorReason(data: unknown): string;
12
12
  * toast.error(message);
13
13
  */
14
14
  declare function getErrorMessage<Ns extends Namespace = DefaultNamespace, KPrefix = undefined>(data: unknown, t: TFunction<Ns, KPrefix>): {
15
- reason: string;
15
+ reason: ResolvedErrorReason | null;
16
16
  message: string;
17
17
  };
18
18
  /**
@@ -26,4 +26,4 @@ declare function getErrorMessage<Ns extends Namespace = DefaultNamespace, KPrefi
26
26
  */
27
27
  declare function getFieldViolations(data: unknown): BadRequest['fieldViolations'];
28
28
 
29
- export { getErrorMessage, getErrorReason, getFieldViolations };
29
+ export { getErrorInfo, getErrorMessage, getFieldViolations };
@@ -1,8 +1,8 @@
1
1
  import { Namespace, DefaultNamespace, TFunction } from 'i18next';
2
- import { BadRequest } from './detail.js';
3
- import './reason.js';
2
+ import { ResolvedErrorReason } from './reason.js';
3
+ import { ErrorInfo, BadRequest } from './detail.js';
4
4
 
5
- declare function getErrorReason(data: unknown): string;
5
+ declare function getErrorInfo(data: unknown): ErrorInfo | null;
6
6
  /**
7
7
  * @example For axios:
8
8
  *
@@ -12,7 +12,7 @@ declare function getErrorReason(data: unknown): string;
12
12
  * toast.error(message);
13
13
  */
14
14
  declare function getErrorMessage<Ns extends Namespace = DefaultNamespace, KPrefix = undefined>(data: unknown, t: TFunction<Ns, KPrefix>): {
15
- reason: string;
15
+ reason: ResolvedErrorReason | null;
16
16
  message: string;
17
17
  };
18
18
  /**
@@ -26,4 +26,4 @@ declare function getErrorMessage<Ns extends Namespace = DefaultNamespace, KPrefi
26
26
  */
27
27
  declare function getFieldViolations(data: unknown): BadRequest['fieldViolations'];
28
28
 
29
- export { getErrorMessage, getErrorReason, getFieldViolations };
29
+ export { getErrorInfo, getErrorMessage, getFieldViolations };
@@ -1,20 +1,20 @@
1
1
  // src/error/parse.ts
2
2
  import { hasText } from "@shware/utils";
3
3
  import { DetailType } from "./detail.mjs";
4
- function getErrorReason(data) {
5
- if (typeof data !== "object" || data === null || !("error" in data)) return "UNKNOWN";
4
+ function getErrorInfo(data) {
5
+ if (typeof data !== "object" || data === null || !("error" in data)) return null;
6
6
  const { error } = data;
7
7
  const errorInfo = error?.details?.find((d) => d["@type"] === DetailType.ERROR_INFO);
8
- return errorInfo?.reason ?? "UNKNOWN";
8
+ return errorInfo ?? null;
9
9
  }
10
10
  function getErrorMessage(data, t) {
11
11
  if (typeof data !== "object" || data === null || !("error" in data)) {
12
12
  console.error("Unknown API error:", data);
13
- return { reason: "UNKNOWN", message: t("UNKNOWN") };
13
+ return { reason: null, message: t("UNKNOWN") };
14
14
  }
15
15
  const { error } = data;
16
16
  const localizedMessage = error?.details?.find((d) => d["@type"] === DetailType.LOCALIZED_MESSAGE);
17
- if (localizedMessage) return { reason: "LOCALIZED_MESSAGE", message: localizedMessage.message };
17
+ if (localizedMessage) return { reason: null, message: localizedMessage.message };
18
18
  const errorInfo = error?.details?.find((d) => d["@type"] === DetailType.ERROR_INFO);
19
19
  if (errorInfo) {
20
20
  return {
@@ -22,10 +22,10 @@ function getErrorMessage(data, t) {
22
22
  message: t(errorInfo.reason, errorInfo.metadata)
23
23
  };
24
24
  }
25
- if (hasText(error.message)) return { reason: "ERROR_MESSAGE", message: error.message };
26
- if (error.status) return { reason: error.status, message: t(error.status) };
25
+ if (hasText(error.message)) return { reason: null, message: error.message };
26
+ if (error.status) return { reason: null, message: t(error.status) };
27
27
  console.error("Unknown API error:", data);
28
- return { reason: "UNKNOWN", message: t("UNKNOWN") };
28
+ return { reason: null, message: t("UNKNOWN") };
29
29
  }
30
30
  function getFieldViolations(data) {
31
31
  if (typeof data !== "object" || data === null || !("error" in data)) return [];
@@ -34,8 +34,8 @@ function getFieldViolations(data) {
34
34
  return badRequest?.fieldViolations ?? [];
35
35
  }
36
36
  export {
37
+ getErrorInfo,
37
38
  getErrorMessage,
38
- getErrorReason,
39
39
  getFieldViolations
40
40
  };
41
41
  //# sourceMappingURL=parse.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/error/parse.ts"],"sourcesContent":["import type { DefaultNamespace, Namespace, TFunction } from 'i18next';\nimport { hasText } from '@shware/utils';\nimport type { ErrorBody } from './status';\nimport { type BadRequest, DetailType } from './detail';\n\nexport function getErrorReason(data: unknown) {\n if (typeof data !== 'object' || data === null || !('error' in data)) return 'UNKNOWN';\n const { error } = data as ErrorBody;\n const errorInfo = error?.details?.find((d) => d['@type'] === DetailType.ERROR_INFO);\n return errorInfo?.reason ?? 'UNKNOWN';\n}\n\n/**\n * @example For axios:\n *\n * const { t } = useTranslation('error');\n *\n * const { message } = getErrorMessage(error.response.data, t);\n * toast.error(message);\n */\nexport function getErrorMessage<Ns extends Namespace = DefaultNamespace, KPrefix = undefined>(\n data: unknown,\n t: TFunction<Ns, KPrefix>\n): { reason: string; message: string } {\n // 0. unknown error\n if (typeof data !== 'object' || data === null || !('error' in data)) {\n console.error('Unknown API error:', data);\n return { reason: 'UNKNOWN', message: t('UNKNOWN') };\n }\n\n const { error } = data as ErrorBody;\n\n // 1. from server via Accept-Language header or lng param\n const localizedMessage = error?.details?.find((d) => d['@type'] === DetailType.LOCALIZED_MESSAGE);\n if (localizedMessage) return { reason: 'LOCALIZED_MESSAGE', message: localizedMessage.message };\n\n // 2. from business logic error\n const errorInfo = error?.details?.find((d) => d['@type'] === DetailType.ERROR_INFO);\n if (errorInfo) {\n return {\n reason: errorInfo.reason,\n message: t(errorInfo.reason, errorInfo.metadata),\n };\n }\n\n // 3. error message in english\n if (hasText(error.message)) return { reason: 'ERROR_MESSAGE', message: error.message };\n\n // 4. from server via status code\n if (error.status) return { reason: error.status, message: t(error.status) };\n\n // 5. unknown error\n console.error('Unknown API error:', data);\n return { reason: 'UNKNOWN', message: t('UNKNOWN') };\n}\n\n/**\n * @example For react-hook-form:\n *\n * const { setError } = useForm();\n * const fieldViolations = getFieldViolations(error.response.data);\n * fieldViolations.forEach((violation) => {\n * setError(violation.field, { message: violation.description });\n * });\n */\nexport function getFieldViolations(data: unknown): BadRequest['fieldViolations'] {\n if (typeof data !== 'object' || data === null || !('error' in data)) return [];\n const { error } = data as ErrorBody;\n const badRequest = error?.details?.find((d) => d['@type'] === DetailType.BAD_REQUEST);\n return badRequest?.fieldViolations ?? [];\n}\n"],"mappings":";AACA,SAAS,eAAe;AAExB,SAA0B,kBAAkB;AAErC,SAAS,eAAe,MAAe;AAC5C,MAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,EAAE,WAAW,MAAO,QAAO;AAC5E,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,YAAY,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,WAAW,UAAU;AAClF,SAAO,WAAW,UAAU;AAC9B;AAUO,SAAS,gBACd,MACA,GACqC;AAErC,MAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,EAAE,WAAW,OAAO;AACnE,YAAQ,MAAM,sBAAsB,IAAI;AACxC,WAAO,EAAE,QAAQ,WAAW,SAAS,EAAE,SAAS,EAAE;AAAA,EACpD;AAEA,QAAM,EAAE,MAAM,IAAI;AAGlB,QAAM,mBAAmB,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,WAAW,iBAAiB;AAChG,MAAI,iBAAkB,QAAO,EAAE,QAAQ,qBAAqB,SAAS,iBAAiB,QAAQ;AAG9F,QAAM,YAAY,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,WAAW,UAAU;AAClF,MAAI,WAAW;AACb,WAAO;AAAA,MACL,QAAQ,UAAU;AAAA,MAClB,SAAS,EAAE,UAAU,QAAQ,UAAU,QAAQ;AAAA,IACjD;AAAA,EACF;AAGA,MAAI,QAAQ,MAAM,OAAO,EAAG,QAAO,EAAE,QAAQ,iBAAiB,SAAS,MAAM,QAAQ;AAGrF,MAAI,MAAM,OAAQ,QAAO,EAAE,QAAQ,MAAM,QAAQ,SAAS,EAAE,MAAM,MAAM,EAAE;AAG1E,UAAQ,MAAM,sBAAsB,IAAI;AACxC,SAAO,EAAE,QAAQ,WAAW,SAAS,EAAE,SAAS,EAAE;AACpD;AAWO,SAAS,mBAAmB,MAA8C;AAC/E,MAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,EAAE,WAAW,MAAO,QAAO,CAAC;AAC7E,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,aAAa,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,WAAW,WAAW;AACpF,SAAO,YAAY,mBAAmB,CAAC;AACzC;","names":[]}
1
+ {"version":3,"sources":["../../src/error/parse.ts"],"sourcesContent":["import type { DefaultNamespace, Namespace, TFunction } from 'i18next';\nimport { hasText } from '@shware/utils';\nimport type { ResolvedErrorReason } from './reason';\nimport type { ErrorBody } from './status';\nimport { type BadRequest, DetailType, type ErrorInfo } from './detail';\n\nexport function getErrorInfo(data: unknown): ErrorInfo | null {\n if (typeof data !== 'object' || data === null || !('error' in data)) return null;\n const { error } = data as ErrorBody;\n const errorInfo = error?.details?.find((d) => d['@type'] === DetailType.ERROR_INFO);\n return errorInfo ?? null;\n}\n\n/**\n * @example For axios:\n *\n * const { t } = useTranslation('error');\n *\n * const { message } = getErrorMessage(error.response.data, t);\n * toast.error(message);\n */\nexport function getErrorMessage<Ns extends Namespace = DefaultNamespace, KPrefix = undefined>(\n data: unknown,\n t: TFunction<Ns, KPrefix>\n): { reason: ResolvedErrorReason | null; message: string } {\n // 0. unknown error\n if (typeof data !== 'object' || data === null || !('error' in data)) {\n console.error('Unknown API error:', data);\n return { reason: null, message: t('UNKNOWN') };\n }\n\n const { error } = data as ErrorBody;\n\n // 1. from server via Accept-Language header or lng param\n const localizedMessage = error?.details?.find((d) => d['@type'] === DetailType.LOCALIZED_MESSAGE);\n if (localizedMessage) return { reason: null, message: localizedMessage.message };\n\n // 2. from business logic error\n const errorInfo = error?.details?.find((d) => d['@type'] === DetailType.ERROR_INFO);\n if (errorInfo) {\n return {\n reason: errorInfo.reason,\n message: t(errorInfo.reason, errorInfo.metadata),\n };\n }\n\n // 3. error message in english\n if (hasText(error.message)) return { reason: null, message: error.message };\n\n // 4. from server via status code\n if (error.status) return { reason: null, message: t(error.status) };\n\n // 5. unknown error\n console.error('Unknown API error:', data);\n return { reason: null, message: t('UNKNOWN') };\n}\n\n/**\n * @example For react-hook-form:\n *\n * const { setError } = useForm();\n * const fieldViolations = getFieldViolations(error.response.data);\n * fieldViolations.forEach((violation) => {\n * setError(violation.field, { message: violation.description });\n * });\n */\nexport function getFieldViolations(data: unknown): BadRequest['fieldViolations'] {\n if (typeof data !== 'object' || data === null || !('error' in data)) return [];\n const { error } = data as ErrorBody;\n const badRequest = error?.details?.find((d) => d['@type'] === DetailType.BAD_REQUEST);\n return badRequest?.fieldViolations ?? [];\n}\n"],"mappings":";AACA,SAAS,eAAe;AAGxB,SAA0B,kBAAkC;AAErD,SAAS,aAAa,MAAiC;AAC5D,MAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,EAAE,WAAW,MAAO,QAAO;AAC5E,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,YAAY,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,WAAW,UAAU;AAClF,SAAO,aAAa;AACtB;AAUO,SAAS,gBACd,MACA,GACyD;AAEzD,MAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,EAAE,WAAW,OAAO;AACnE,YAAQ,MAAM,sBAAsB,IAAI;AACxC,WAAO,EAAE,QAAQ,MAAM,SAAS,EAAE,SAAS,EAAE;AAAA,EAC/C;AAEA,QAAM,EAAE,MAAM,IAAI;AAGlB,QAAM,mBAAmB,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,WAAW,iBAAiB;AAChG,MAAI,iBAAkB,QAAO,EAAE,QAAQ,MAAM,SAAS,iBAAiB,QAAQ;AAG/E,QAAM,YAAY,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,WAAW,UAAU;AAClF,MAAI,WAAW;AACb,WAAO;AAAA,MACL,QAAQ,UAAU;AAAA,MAClB,SAAS,EAAE,UAAU,QAAQ,UAAU,QAAQ;AAAA,IACjD;AAAA,EACF;AAGA,MAAI,QAAQ,MAAM,OAAO,EAAG,QAAO,EAAE,QAAQ,MAAM,SAAS,MAAM,QAAQ;AAG1E,MAAI,MAAM,OAAQ,QAAO,EAAE,QAAQ,MAAM,SAAS,EAAE,MAAM,MAAM,EAAE;AAGlE,UAAQ,MAAM,sBAAsB,IAAI;AACxC,SAAO,EAAE,QAAQ,MAAM,SAAS,EAAE,SAAS,EAAE;AAC/C;AAWO,SAAS,mBAAmB,MAA8C;AAC/E,MAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,EAAE,WAAW,MAAO,QAAO,CAAC;AAC7E,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,aAAa,OAAO,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,WAAW,WAAW;AACpF,SAAO,YAAY,mBAAmB,CAAC;AACzC;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/error/reason.ts"],"sourcesContent":["export interface NetworkErrorReason {\n DNS_ERROR: string;\n MISCONFIGURATION: string;\n CONNECTION_ERROR: string;\n}\n\nexport interface StatusErrorReason {\n OK: string;\n CANCELLED: string;\n UNKNOWN: string;\n INVALID_ARGUMENT: string;\n DEADLINE_EXCEEDED: string;\n NOT_FOUND: string;\n ALREADY_EXISTS: string;\n PERMISSION_DENIED: string;\n RESOURCE_EXHAUSTED: string;\n FAILED_PRECONDITION: string;\n ABORTED: string;\n OUT_OF_RANGE: string;\n UNIMPLEMENTED: string;\n INTERNAL: string;\n UNAVAILABLE: string;\n DATA_LOSS: string;\n UNAUTHENTICATED: string;\n // other http status code\n}\n\nexport interface AuthenticationErrorReason {\n ACCOUNT_LOCKED: string;\n ACCOUNT_EXPIRED: string;\n ACCOUNT_INACTIVE: string;\n ACCOUNT_DISABLED: string;\n ACCOUNT_SUSPENDED: string;\n ACCESS_DENIED: string;\n ACCESS_TOKEN_REQUIRED: string;\n PASSWORD_MISMATCH: string;\n USERNAME_ALREADY_EXISTS: string;\n VERIFICATION_CODE_MISMATCH: string;\n VERIFICATION_CODE_SEND_FAILED: string;\n}\n\nexport interface ModerationErrorReason {\n POSSIBLY_SENSITIVE: string;\n ADULT_CONTENT: string;\n NUDITY_CONTENT: string;\n SEXUAL_CONTENT: string;\n BLOODY_CONTENT: string;\n WEAPON_CONTENT: string;\n POLITICS_CONTENT: string;\n VIOLENCE_CONTENT: string;\n ABUSE_CONTENT: string;\n ADVERTISEMENT_CONTENT: string;\n CONTRABAND_CONTENT: string;\n SPAM_CONTENT: string;\n MEANINGLESS_CONTENT: string;\n UNSAFE_TEXT_DETECTED: string;\n}\n\nexport interface MultipartErrorReason {\n MAX_UPLOAD_SIZE_EXCEEDED: string;\n MEDIA_TYPE_NOT_SUPPORTED: string;\n MEDIA_TYPE_NOT_ACCEPTABLE: string;\n}\n\nexport interface AppErrorReason {\n RATE_LIMIT_EXCEEDED: string;\n INSUFFICIENT_CREDITS: string;\n ALREADY_SUBSCRIBED_AT_OTHER_PLATFORM: string;\n}\n\n// oxlint-disable-next-line typescript/no-empty-object-type\nexport interface ErrorReason {}\n\nexport type ResolvedErrorReason = keyof ErrorReason extends never\n ? string\n : keyof ErrorReason;\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
1
+ {"version":3,"sources":["../../src/error/reason.ts"],"sourcesContent":["// oxlint-disable-next-line typescript/no-empty-object-type\nexport interface ErrorReason {}\n\nexport type ResolvedErrorReason = keyof ErrorReason extends never ? string : keyof ErrorReason;\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1,68 +1,5 @@
1
- interface NetworkErrorReason {
2
- DNS_ERROR: string;
3
- MISCONFIGURATION: string;
4
- CONNECTION_ERROR: string;
5
- }
6
- interface StatusErrorReason {
7
- OK: string;
8
- CANCELLED: string;
9
- UNKNOWN: string;
10
- INVALID_ARGUMENT: string;
11
- DEADLINE_EXCEEDED: string;
12
- NOT_FOUND: string;
13
- ALREADY_EXISTS: string;
14
- PERMISSION_DENIED: string;
15
- RESOURCE_EXHAUSTED: string;
16
- FAILED_PRECONDITION: string;
17
- ABORTED: string;
18
- OUT_OF_RANGE: string;
19
- UNIMPLEMENTED: string;
20
- INTERNAL: string;
21
- UNAVAILABLE: string;
22
- DATA_LOSS: string;
23
- UNAUTHENTICATED: string;
24
- }
25
- interface AuthenticationErrorReason {
26
- ACCOUNT_LOCKED: string;
27
- ACCOUNT_EXPIRED: string;
28
- ACCOUNT_INACTIVE: string;
29
- ACCOUNT_DISABLED: string;
30
- ACCOUNT_SUSPENDED: string;
31
- ACCESS_DENIED: string;
32
- ACCESS_TOKEN_REQUIRED: string;
33
- PASSWORD_MISMATCH: string;
34
- USERNAME_ALREADY_EXISTS: string;
35
- VERIFICATION_CODE_MISMATCH: string;
36
- VERIFICATION_CODE_SEND_FAILED: string;
37
- }
38
- interface ModerationErrorReason {
39
- POSSIBLY_SENSITIVE: string;
40
- ADULT_CONTENT: string;
41
- NUDITY_CONTENT: string;
42
- SEXUAL_CONTENT: string;
43
- BLOODY_CONTENT: string;
44
- WEAPON_CONTENT: string;
45
- POLITICS_CONTENT: string;
46
- VIOLENCE_CONTENT: string;
47
- ABUSE_CONTENT: string;
48
- ADVERTISEMENT_CONTENT: string;
49
- CONTRABAND_CONTENT: string;
50
- SPAM_CONTENT: string;
51
- MEANINGLESS_CONTENT: string;
52
- UNSAFE_TEXT_DETECTED: string;
53
- }
54
- interface MultipartErrorReason {
55
- MAX_UPLOAD_SIZE_EXCEEDED: string;
56
- MEDIA_TYPE_NOT_SUPPORTED: string;
57
- MEDIA_TYPE_NOT_ACCEPTABLE: string;
58
- }
59
- interface AppErrorReason {
60
- RATE_LIMIT_EXCEEDED: string;
61
- INSUFFICIENT_CREDITS: string;
62
- ALREADY_SUBSCRIBED_AT_OTHER_PLATFORM: string;
63
- }
64
1
  interface ErrorReason {
65
2
  }
66
3
  type ResolvedErrorReason = keyof ErrorReason extends never ? string : keyof ErrorReason;
67
4
 
68
- export type { AppErrorReason, AuthenticationErrorReason, ErrorReason, ModerationErrorReason, MultipartErrorReason, NetworkErrorReason, ResolvedErrorReason, StatusErrorReason };
5
+ export type { ErrorReason, ResolvedErrorReason };
@@ -1,68 +1,5 @@
1
- interface NetworkErrorReason {
2
- DNS_ERROR: string;
3
- MISCONFIGURATION: string;
4
- CONNECTION_ERROR: string;
5
- }
6
- interface StatusErrorReason {
7
- OK: string;
8
- CANCELLED: string;
9
- UNKNOWN: string;
10
- INVALID_ARGUMENT: string;
11
- DEADLINE_EXCEEDED: string;
12
- NOT_FOUND: string;
13
- ALREADY_EXISTS: string;
14
- PERMISSION_DENIED: string;
15
- RESOURCE_EXHAUSTED: string;
16
- FAILED_PRECONDITION: string;
17
- ABORTED: string;
18
- OUT_OF_RANGE: string;
19
- UNIMPLEMENTED: string;
20
- INTERNAL: string;
21
- UNAVAILABLE: string;
22
- DATA_LOSS: string;
23
- UNAUTHENTICATED: string;
24
- }
25
- interface AuthenticationErrorReason {
26
- ACCOUNT_LOCKED: string;
27
- ACCOUNT_EXPIRED: string;
28
- ACCOUNT_INACTIVE: string;
29
- ACCOUNT_DISABLED: string;
30
- ACCOUNT_SUSPENDED: string;
31
- ACCESS_DENIED: string;
32
- ACCESS_TOKEN_REQUIRED: string;
33
- PASSWORD_MISMATCH: string;
34
- USERNAME_ALREADY_EXISTS: string;
35
- VERIFICATION_CODE_MISMATCH: string;
36
- VERIFICATION_CODE_SEND_FAILED: string;
37
- }
38
- interface ModerationErrorReason {
39
- POSSIBLY_SENSITIVE: string;
40
- ADULT_CONTENT: string;
41
- NUDITY_CONTENT: string;
42
- SEXUAL_CONTENT: string;
43
- BLOODY_CONTENT: string;
44
- WEAPON_CONTENT: string;
45
- POLITICS_CONTENT: string;
46
- VIOLENCE_CONTENT: string;
47
- ABUSE_CONTENT: string;
48
- ADVERTISEMENT_CONTENT: string;
49
- CONTRABAND_CONTENT: string;
50
- SPAM_CONTENT: string;
51
- MEANINGLESS_CONTENT: string;
52
- UNSAFE_TEXT_DETECTED: string;
53
- }
54
- interface MultipartErrorReason {
55
- MAX_UPLOAD_SIZE_EXCEEDED: string;
56
- MEDIA_TYPE_NOT_SUPPORTED: string;
57
- MEDIA_TYPE_NOT_ACCEPTABLE: string;
58
- }
59
- interface AppErrorReason {
60
- RATE_LIMIT_EXCEEDED: string;
61
- INSUFFICIENT_CREDITS: string;
62
- ALREADY_SUBSCRIBED_AT_OTHER_PLATFORM: string;
63
- }
64
1
  interface ErrorReason {
65
2
  }
66
3
  type ResolvedErrorReason = keyof ErrorReason extends never ? string : keyof ErrorReason;
67
4
 
68
- export type { AppErrorReason, AuthenticationErrorReason, ErrorReason, ModerationErrorReason, MultipartErrorReason, NetworkErrorReason, ResolvedErrorReason, StatusErrorReason };
5
+ export type { ErrorReason, ResolvedErrorReason };
package/dist/index.cjs CHANGED
@@ -44,8 +44,8 @@ __export(index_exports, {
44
44
  Status: () => import_status.Status,
45
45
  StatusError: () => import_status.StatusError,
46
46
  UidGenerator: () => import_snowflake.UidGenerator,
47
+ getErrorInfo: () => import_parse.getErrorInfo,
47
48
  getErrorMessage: () => import_parse.getErrorMessage,
48
- getErrorReason: () => import_parse.getErrorReason,
49
49
  getFieldViolations: () => import_parse.getFieldViolations,
50
50
  getNextPageParam: () => import_response.getNextPageParam,
51
51
  getPreviousPageParam: () => import_response.getPreviousPageParam,
@@ -80,8 +80,8 @@ var import_iso_3601_1 = require("./iso/iso_3601_1.cjs");
80
80
  Status,
81
81
  StatusError,
82
82
  UidGenerator,
83
+ getErrorInfo,
83
84
  getErrorMessage,
84
- getErrorReason,
85
85
  getFieldViolations,
86
86
  getNextPageParam,
87
87
  getPreviousPageParam,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @example\n * import { Details, Status } from '@repo/error';\n *\n * Status.adapter = () => new Error('Error');\n *\n * const details = Details.new()\n * .requestInfo({ requestId: '1234567890', servingData: '/v1/tests' })\n * .errorInfo({ reason: 'ACCOUNT_LOCKED' });\n *\n * throw Status.alreadyExists('xxx').error(details);\n */\n\nexport {\n LoginTimeoutError,\n LoginCanceledError,\n CheckoutCreateError,\n PurchaseError,\n} from './error/index';\nexport type {\n NetworkErrorReason,\n StatusErrorReason,\n AuthenticationErrorReason,\n ModerationErrorReason,\n MultipartErrorReason,\n AppErrorReason,\n ErrorReason,\n ResolvedErrorReason,\n} from './error/reason';\nexport {\n DetailType,\n Details,\n type ErrorInfo,\n type RetryInfo,\n type DebugInfo,\n type QuotaFailure,\n type PreconditionFailure,\n type BadRequest,\n type RequestInfo,\n type ResourceInfo,\n type Help,\n type LocalizedMessage,\n type Detail,\n} from './error/detail';\nexport { Status, StatusError, type ErrorBody } from './error/status';\nexport { getErrorReason, getErrorMessage, getFieldViolations } from './error/parse';\nexport {\n Items,\n Pages,\n Cursor,\n pageParamsSchema,\n initialPageParam,\n getPreviousPageParam,\n getNextPageParam,\n} from './response';\nexport type {\n Empty,\n EntityId,\n Entity,\n Response,\n InitParams,\n NextParams,\n PrevParams,\n PageParams,\n ParentPageParams,\n Page,\n InfinitePageData,\n} from './response';\n\nexport { UidGenerator, uid } from './snowflake';\n\nexport * as MAX_LENGTH from './max-length/index';\nexport { timing } from './utils/timing';\nexport { ISO_3601_1, type ISO3166CountryCode } from './iso/iso_3601_1';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA,mBAKO;AAWP,oBAcO;AACP,oBAAoD;AACpD,mBAAoE;AACpE,sBAQO;AAeP,uBAAkC;AAElC,iBAA4B;AAC5B,oBAAuB;AACvB,wBAAoD;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @example\n * import { Details, Status } from '@repo/error';\n *\n * Status.adapter = () => new Error('Error');\n *\n * const details = Details.new()\n * .requestInfo({ requestId: '1234567890', servingData: '/v1/tests' })\n * .errorInfo({ reason: 'ACCOUNT_LOCKED' });\n *\n * throw Status.alreadyExists('xxx').error(details);\n */\n\nexport {\n LoginTimeoutError,\n LoginCanceledError,\n CheckoutCreateError,\n PurchaseError,\n} from './error/index';\nexport type { ErrorReason, ResolvedErrorReason } from './error/reason';\nexport {\n DetailType,\n Details,\n type ErrorInfo,\n type RetryInfo,\n type DebugInfo,\n type QuotaFailure,\n type PreconditionFailure,\n type BadRequest,\n type RequestInfo,\n type ResourceInfo,\n type Help,\n type LocalizedMessage,\n type Detail,\n} from './error/detail';\nexport { Status, StatusError, type ErrorBody } from './error/status';\nexport { getErrorInfo, getErrorMessage, getFieldViolations } from './error/parse';\nexport {\n Items,\n Pages,\n Cursor,\n pageParamsSchema,\n initialPageParam,\n getPreviousPageParam,\n getNextPageParam,\n} from './response';\nexport type {\n Empty,\n EntityId,\n Entity,\n Response,\n InitParams,\n NextParams,\n PrevParams,\n PageParams,\n ParentPageParams,\n Page,\n InfinitePageData,\n} from './response';\n\nexport { UidGenerator, uid } from './snowflake';\n\nexport * as MAX_LENGTH from './max-length/index';\nexport { timing } from './utils/timing';\nexport { ISO_3601_1, type ISO3166CountryCode } from './iso/iso_3601_1';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA,mBAKO;AAEP,oBAcO;AACP,oBAAoD;AACpD,mBAAkE;AAClE,sBAQO;AAeP,uBAAkC;AAElC,iBAA4B;AAC5B,oBAAuB;AACvB,wBAAoD;","names":[]}
package/dist/index.d.cts CHANGED
@@ -1,8 +1,8 @@
1
1
  export { CheckoutCreateError, LoginCanceledError, LoginTimeoutError, PurchaseError } from './error/index.cjs';
2
- export { AppErrorReason, AuthenticationErrorReason, ErrorReason, ModerationErrorReason, MultipartErrorReason, NetworkErrorReason, ResolvedErrorReason, StatusErrorReason } from './error/reason.cjs';
2
+ export { ErrorReason, ResolvedErrorReason } from './error/reason.cjs';
3
3
  export { BadRequest, DebugInfo, Detail, DetailType, Details, ErrorInfo, Help, LocalizedMessage, PreconditionFailure, QuotaFailure, RequestInfo, ResourceInfo, RetryInfo } from './error/detail.cjs';
4
4
  export { ErrorBody, Status, StatusError } from './error/status.cjs';
5
- export { getErrorMessage, getErrorReason, getFieldViolations } from './error/parse.cjs';
5
+ export { getErrorInfo, getErrorMessage, getFieldViolations } from './error/parse.cjs';
6
6
  export { Cursor, Empty, Entity, EntityId, InfinitePageData, InitParams, Items, NextParams, Page, PageParams, Pages, ParentPageParams, PrevParams, Response, getNextPageParam, getPreviousPageParam, initialPageParam, pageParamsSchema } from './response.cjs';
7
7
  export { UidGenerator, uid } from './snowflake.cjs';
8
8
  export { i as MAX_LENGTH } from './index-BnPgRQDl.cjs';
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  export { CheckoutCreateError, LoginCanceledError, LoginTimeoutError, PurchaseError } from './error/index.js';
2
- export { AppErrorReason, AuthenticationErrorReason, ErrorReason, ModerationErrorReason, MultipartErrorReason, NetworkErrorReason, ResolvedErrorReason, StatusErrorReason } from './error/reason.js';
2
+ export { ErrorReason, ResolvedErrorReason } from './error/reason.js';
3
3
  export { BadRequest, DebugInfo, Detail, DetailType, Details, ErrorInfo, Help, LocalizedMessage, PreconditionFailure, QuotaFailure, RequestInfo, ResourceInfo, RetryInfo } from './error/detail.js';
4
4
  export { ErrorBody, Status, StatusError } from './error/status.js';
5
- export { getErrorMessage, getErrorReason, getFieldViolations } from './error/parse.js';
5
+ export { getErrorInfo, getErrorMessage, getFieldViolations } from './error/parse.js';
6
6
  export { Cursor, Empty, Entity, EntityId, InfinitePageData, InitParams, Items, NextParams, Page, PageParams, Pages, ParentPageParams, PrevParams, Response, getNextPageParam, getPreviousPageParam, initialPageParam, pageParamsSchema } from './response.js';
7
7
  export { UidGenerator, uid } from './snowflake.js';
8
8
  export { i as MAX_LENGTH } from './index-BnPgRQDl.js';
package/dist/index.mjs CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  Details
11
11
  } from "./error/detail.mjs";
12
12
  import { Status, StatusError } from "./error/status.mjs";
13
- import { getErrorReason, getErrorMessage, getFieldViolations } from "./error/parse.mjs";
13
+ import { getErrorInfo, getErrorMessage, getFieldViolations } from "./error/parse.mjs";
14
14
  import {
15
15
  Items,
16
16
  Pages,
@@ -39,8 +39,8 @@ export {
39
39
  Status,
40
40
  StatusError,
41
41
  UidGenerator,
42
+ getErrorInfo,
42
43
  getErrorMessage,
43
- getErrorReason,
44
44
  getFieldViolations,
45
45
  getNextPageParam,
46
46
  getPreviousPageParam,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @example\n * import { Details, Status } from '@repo/error';\n *\n * Status.adapter = () => new Error('Error');\n *\n * const details = Details.new()\n * .requestInfo({ requestId: '1234567890', servingData: '/v1/tests' })\n * .errorInfo({ reason: 'ACCOUNT_LOCKED' });\n *\n * throw Status.alreadyExists('xxx').error(details);\n */\n\nexport {\n LoginTimeoutError,\n LoginCanceledError,\n CheckoutCreateError,\n PurchaseError,\n} from './error/index';\nexport type {\n NetworkErrorReason,\n StatusErrorReason,\n AuthenticationErrorReason,\n ModerationErrorReason,\n MultipartErrorReason,\n AppErrorReason,\n ErrorReason,\n ResolvedErrorReason,\n} from './error/reason';\nexport {\n DetailType,\n Details,\n type ErrorInfo,\n type RetryInfo,\n type DebugInfo,\n type QuotaFailure,\n type PreconditionFailure,\n type BadRequest,\n type RequestInfo,\n type ResourceInfo,\n type Help,\n type LocalizedMessage,\n type Detail,\n} from './error/detail';\nexport { Status, StatusError, type ErrorBody } from './error/status';\nexport { getErrorReason, getErrorMessage, getFieldViolations } from './error/parse';\nexport {\n Items,\n Pages,\n Cursor,\n pageParamsSchema,\n initialPageParam,\n getPreviousPageParam,\n getNextPageParam,\n} from './response';\nexport type {\n Empty,\n EntityId,\n Entity,\n Response,\n InitParams,\n NextParams,\n PrevParams,\n PageParams,\n ParentPageParams,\n Page,\n InfinitePageData,\n} from './response';\n\nexport { UidGenerator, uid } from './snowflake';\n\nexport * as MAX_LENGTH from './max-length/index';\nexport { timing } from './utils/timing';\nexport { ISO_3601_1, type ISO3166CountryCode } from './iso/iso_3601_1';\n"],"mappings":";AAaA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAWP;AAAA,EACE;AAAA,EACA;AAAA,OAYK;AACP,SAAS,QAAQ,mBAAmC;AACpD,SAAS,gBAAgB,iBAAiB,0BAA0B;AACpE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAeP,SAAS,cAAc,WAAW;AAElC,YAAY,gBAAgB;AAC5B,SAAS,cAAc;AACvB,SAAS,kBAA2C;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @example\n * import { Details, Status } from '@repo/error';\n *\n * Status.adapter = () => new Error('Error');\n *\n * const details = Details.new()\n * .requestInfo({ requestId: '1234567890', servingData: '/v1/tests' })\n * .errorInfo({ reason: 'ACCOUNT_LOCKED' });\n *\n * throw Status.alreadyExists('xxx').error(details);\n */\n\nexport {\n LoginTimeoutError,\n LoginCanceledError,\n CheckoutCreateError,\n PurchaseError,\n} from './error/index';\nexport type { ErrorReason, ResolvedErrorReason } from './error/reason';\nexport {\n DetailType,\n Details,\n type ErrorInfo,\n type RetryInfo,\n type DebugInfo,\n type QuotaFailure,\n type PreconditionFailure,\n type BadRequest,\n type RequestInfo,\n type ResourceInfo,\n type Help,\n type LocalizedMessage,\n type Detail,\n} from './error/detail';\nexport { Status, StatusError, type ErrorBody } from './error/status';\nexport { getErrorInfo, getErrorMessage, getFieldViolations } from './error/parse';\nexport {\n Items,\n Pages,\n Cursor,\n pageParamsSchema,\n initialPageParam,\n getPreviousPageParam,\n getNextPageParam,\n} from './response';\nexport type {\n Empty,\n EntityId,\n Entity,\n Response,\n InitParams,\n NextParams,\n PrevParams,\n PageParams,\n ParentPageParams,\n Page,\n InfinitePageData,\n} from './response';\n\nexport { UidGenerator, uid } from './snowflake';\n\nexport * as MAX_LENGTH from './max-length/index';\nexport { timing } from './utils/timing';\nexport { ISO_3601_1, type ISO3166CountryCode } from './iso/iso_3601_1';\n"],"mappings":";AAaA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OAYK;AACP,SAAS,QAAQ,mBAAmC;AACpD,SAAS,cAAc,iBAAiB,0BAA0B;AAClE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAeP,SAAS,cAAc,WAAW;AAElC,YAAY,gBAAgB;AAC5B,SAAS,cAAc;AACvB,SAAS,kBAA2C;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shware/http",
3
- "version": "2.6.0",
3
+ "version": "2.7.0",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",