ErrorReporterIs.ts 769 B

12345678910111213141516171819202122232425262728
  1. import { inject } from "vue";
  2. import type { ErrorReportItem, ErrorReportRef } from "./ErrorReporter.vue";
  3. import { RequestApiError } from "@imengyu/imengyu-utils";
  4. export function useErrorReporter() {
  5. const r = inject<ErrorReportRef>("ErrorReporter");
  6. if (!r)
  7. throw new Error("ErrorReporter is not provided");
  8. return r;
  9. }
  10. export function formatError(err: any) {
  11. if (err instanceof RequestApiError)
  12. return err.toStringDetail();
  13. if (err instanceof Error)
  14. return err.message + '\n' + err.stack;
  15. return '' + err;
  16. }
  17. export function logError(info: ErrorReportItem) {
  18. (window as any).$error?.(info);
  19. }
  20. export function logErrorSimple(err: any, message: string) {
  21. logError({
  22. type: 'error',
  23. detail: formatError(err),
  24. message,
  25. });
  26. }