Skip to content

Commit

Permalink
feat: impl and wrap @Nerdware getTypeSafeError
Browse files Browse the repository at this point in the history
  • Loading branch information
trevor-anderson committed Feb 20, 2024
1 parent e780362 commit 51f3b70
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 28 deletions.
28 changes: 0 additions & 28 deletions src/utils/typeSafety/getTypeSafeErr.ts

This file was deleted.

30 changes: 30 additions & 0 deletions src/utils/typeSafety/getTypeSafeError.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { getTypeSafeError } from "./getTypeSafeError";

describe("getTypeSafeError()", () => {
test("returns an Error instance when called with an Error object", () => {
const result = getTypeSafeError(new Error("test"));
expect(result).toBeInstanceOf(Error);
expect(result.message).toBe("test");
});
test("returns an Error instance when called with null", () => {
const result = getTypeSafeError(null, "test");
expect(result).toBeInstanceOf(Error);
expect(result.message).toBe("test");
});
test("returns an Error instance when called with undefined", () => {
const result = getTypeSafeError(undefined, "test");
expect(result).toBeInstanceOf(Error);
expect(result.message).toBe("test");
});
test(`returns an Error instance with "message" set to a string provided as the first argument`, () => {
const result = getTypeSafeError("test");
expect(result).toBeInstanceOf(Error);
expect(result.message).toBe("test");
});
test(`returns an Error instance with a "message" of "An unknown error occurred." when called with an object that doesn't contain a "message" property`, () => {
const input = { test: "test" };
const result = getTypeSafeError(input);
expect(result).toBeInstanceOf(Error);
expect(result.message).toBe("An unknown error occurred.");
});
});
17 changes: 17 additions & 0 deletions src/utils/typeSafety/getTypeSafeError.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { isString, getTypeSafeError as _getTypeSafeError } from "@nerdware/ts-type-safety-utils";
import { ENV } from "@/app/env";

/**
* Internal type-safety util which guarantees the returned object is an `Error`.
*/
export const getTypeSafeError = (
err: any,
fallBackErrMsg: string = "An unknown error occurred."
): Error => {
return isString(err?.response?.data?.error) // test for AxiosErrors first (// TODO handle this elsewhere, rm this util)
? new Error(err.response.data.error)
: _getTypeSafeError(err, {
fallBackErrMsg,
shouldStringifyUnknownError: !ENV.IS_PROD && !ENV.IS_TEST,
});
};

0 comments on commit 51f3b70

Please sign in to comment.