Skip to content

Commit 3d14305

Browse files
committed
refactor(octokit): add isRequest type-guard
1 parent 0b8edc1 commit 3d14305

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

src/helpers/validate.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import type { RequestError } from "@octokit/types";
2+
13
export function isValidJSON(payload: string): boolean {
24
try {
35
JSON.parse(payload);
@@ -6,3 +8,7 @@ export function isValidJSON(payload: string): boolean {
68
return false;
79
}
810
}
11+
12+
export function isRequestError(payload: unknown): payload is RequestError {
13+
return !!payload && typeof payload === "object" && "status" in payload;
14+
}

src/service/octokit.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ import { ref } from "vue";
22
import { useMemoize } from "@vueuse/core";
33
import { Octokit } from "@octokit/core";
44
import { StatusCodes } from "http-status-codes";
5-
import type { RequestError, RequestParameters, Route } from "@octokit/types";
5+
import type { RequestParameters, Route } from "@octokit/types";
66
import type { PackageJson } from "type-fest";
7+
import { isRequestError } from "@/helpers/validate";
78
import { useSettingsStore } from "@/store/settings";
89
import type { Repository } from "@/composable/useRepo";
910
import type {
@@ -62,7 +63,7 @@ export const fetchRepositoryFiles = useMemoize(async (fullName: Repository["full
6263
const files = await fetchRepositoryContents(fullName);
6364
return Array.isArray(files) ? files.map(({ name }) => name) : [];
6465
} catch (error: unknown) {
65-
if ((error as RequestError).status !== StatusCodes.NOT_FOUND) console.error(error);
66+
if (isRequestError(error) && error.status !== StatusCodes.NOT_FOUND) console.error(error);
6667
return [];
6768
}
6869
});
@@ -81,7 +82,7 @@ export async function fetchRepositoryPackages(fullName: Repository["full_name"])
8182
const content = JSON.parse(packageContents) as PackageJson;
8283
return { ...content.dependencies, ...content.devDependencies };
8384
} catch (error: unknown) {
84-
if ((error as RequestError).status !== StatusCodes.NOT_FOUND) console.error(error);
85+
if (isRequestError(error) && error.status !== StatusCodes.NOT_FOUND) console.error(error);
8586
return null;
8687
}
8788
}
@@ -91,7 +92,7 @@ export async function fetchRepositoryWorkflows(fullName: Repository["full_name"]
9192
const { data } = await fetch(`GET /repos/${fullName}/actions/workflows`) as WorkflowsResponse;
9293
return data;
9394
} catch (error: unknown) {
94-
if ((error as RequestError).status !== StatusCodes.NOT_FOUND) console.error(error);
95+
if (isRequestError(error) && error.status !== StatusCodes.NOT_FOUND) console.error(error);
9596
return null;
9697
}
9798
}

0 commit comments

Comments
 (0)