From e39565ddde630f697e89963a460f1c6933f9e272 Mon Sep 17 00:00:00 2001 From: babblebey Date: Sat, 6 Sep 2025 15:25:11 +0100 Subject: [PATCH 01/11] fix: wrap userOctokit request in try-catch for error handling --- src/lib/submit-word.js | 58 +++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/src/lib/submit-word.js b/src/lib/submit-word.js index a8d8e77..38e38b6 100644 --- a/src/lib/submit-word.js +++ b/src/lib/submit-word.js @@ -47,32 +47,38 @@ export async function submitWord( .replace("$word_title", word.title) .replace("$word_content", word.content); - const response = await userOctokit.request( - "POST /repos/{owner}/{repo}/pulls", - { - owner: repoOwner, - repo: repoName, - head: `${forkedRepoOwner}:${headBranch}`, - base: baseBranch, - title, - body, - maintainers_can_modify: true, - }, - ); + try { + const response = await userOctokit.request( + "POST /repos/{owner}/{repo}/pulls", + { + owner: repoOwner, + repo: repoName, + head: `${forkedRepoOwner}:${headBranch}`, + base: baseBranch, + title, + body, + maintainers_can_modify: true, + }, + ); - // jargons-dev (bot) App adds related labels to PR - await jargonsdevOctokit.request( - "POST /repos/{owner}/{repo}/issues/{issue_number}/labels", - { - owner: repoOwner, - repo: repoName, - issue_number: response.data.number, - labels: [ - action === "new" ? LABELS.NEW_WORD : LABELS.EDIT_WORD, - LABELS.VIA_EDITOR, - ], - }, - ); + // jargons-dev (bot) App adds related labels to PR + await jargonsdevOctokit.request( + "POST /repos/{owner}/{repo}/issues/{issue_number}/labels", + { + owner: repoOwner, + repo: repoName, + issue_number: response.data.number, + labels: [ + action === "new" ? LABELS.NEW_WORD : LABELS.EDIT_WORD, + LABELS.VIA_EDITOR, + ], + }, + ); - return response.data; + return response.data; + } catch (error) { + throw new Error(`Error occurred while submitting word "${word.title}"`, { + cause: error, + }); + } } From eeae628cd80cb652eb852369134a2ba96b3ad94c Mon Sep 17 00:00:00 2001 From: babblebey Date: Sat, 6 Sep 2025 15:26:10 +0100 Subject: [PATCH 02/11] fix: improve error handling messages in word editor functions --- src/lib/word-editor.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/word-editor.js b/src/lib/word-editor.js index da722d6..ebf13be 100644 --- a/src/lib/word-editor.js +++ b/src/lib/word-editor.js @@ -32,8 +32,8 @@ export async function writeNewWord( return response.data; } catch (error) { - throw new Error(`error committing new word ${title} to dictionary`, { - cause: error.message, + throw new Error(`Error committing new word ${title} to dictionary`, { + cause: error, }); } } @@ -71,8 +71,8 @@ export async function updateExistingWord( return response.data; } catch (error) { - throw new Error(`error committing edit to "${title}"`, { - cause: error.message, + throw new Error(`Error committing edit to "${title}"`, { + cause: error, }); } } @@ -107,8 +107,8 @@ export async function getExistingWord(userOctokit, repoDetails, wordTitle) { ...responseData, }; } catch (error) { - throw new Error(`error getting "${wordTitle}" from dictionary`, { - cause: error.message, + throw new Error(`Error getting "${wordTitle}" from dictionary`, { + cause: error, }); } } From 0f603a28122ef36c8467133ee57227cc70eee780 Mon Sep 17 00:00:00 2001 From: babblebey Date: Sat, 6 Sep 2025 15:27:21 +0100 Subject: [PATCH 03/11] fix: enhance error handling in fork repository functions --- src/lib/fork.js | 48 +++++++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/src/lib/fork.js b/src/lib/fork.js index fbba58d..82d8172 100644 --- a/src/lib/fork.js +++ b/src/lib/fork.js @@ -52,7 +52,9 @@ export async function forkRepository(userOctokit, projectRepoDetails) { return response.data.full_name; } catch (error) { - console.log("Error occurred while forking repository:", error); + throw new Error("Error occurred while forking repository", { + cause: error, + }); } } @@ -101,23 +103,29 @@ async function isRepositoryForkUpdated( ) { const { repoFullname, repoMainBranchRef } = projectRepoDetails; - // `repoMainBranchRef` because the forked repo's main should be compared again project's same main repo - const forkedRepoMainBranch = await getBranch( - userOctokit, - forkedRepoFullname, - repoMainBranchRef, - ); - const projectRepoMainBranch = await getBranch( - userOctokit, - repoFullname, - repoMainBranchRef, - ); - - return { - isUpdated: - forkedRepoMainBranch.object.sha === projectRepoMainBranch.object.sha, - updateSHA: projectRepoMainBranch.object.sha, - }; + try { + // `repoMainBranchRef` because the forked repo's main should be compared again project's same main repo + const forkedRepoMainBranch = await getBranch( + userOctokit, + forkedRepoFullname, + repoMainBranchRef, + ); + const projectRepoMainBranch = await getBranch( + userOctokit, + repoFullname, + repoMainBranchRef, + ); + + return { + isUpdated: + forkedRepoMainBranch.object.sha === projectRepoMainBranch.object.sha, + updateSHA: projectRepoMainBranch.object.sha, + }; + } catch (error) { + throw new Error("Error occurred while checking fork update status", { + cause: error, + }); + } } /** @@ -171,6 +179,8 @@ async function isRepositoryForked(userOctokit, repoFullname, userLogin) { ? matchingFork.owner.login + "/" + matchingFork.name : null; } catch (error) { - console.log("Error occurred while checking repo fork: ", error); + throw new Error("Error occurred while checking repo fork", { + cause: error, + }); } } From 4bc1065e8b6dc4af4a82117a0c20484ef29ac4bd Mon Sep 17 00:00:00 2001 From: babblebey Date: Sat, 6 Sep 2025 15:28:49 +0100 Subject: [PATCH 04/11] fix: improve error handling in branch management functions --- src/lib/branch.js | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/lib/branch.js b/src/lib/branch.js index 563899b..9996dbb 100644 --- a/src/lib/branch.js +++ b/src/lib/branch.js @@ -29,7 +29,9 @@ export async function createBranch(userOctokit, repoDetails, newBranchName) { return response.data; } catch (error) { - throw error; + throw new Error("Error occurred while creating new branch", { + cause: error, + }); } } @@ -45,16 +47,22 @@ export async function getBranch(userOctokit, repoFullname, ref) { const formattedRef = ref.split("/")[0] === "refs" ? ref.split("/").slice(1).join("/") : ref; - const response = await userOctokit.request( - "GET /repos/{owner}/{repo}/git/ref/{ref}", - { - owner: repoOwner, - repo: repoName, - ref: formattedRef, - }, - ); + try { + const response = await userOctokit.request( + "GET /repos/{owner}/{repo}/git/ref/{ref}", + { + owner: repoOwner, + repo: repoName, + ref: formattedRef, + }, + ); - return response.data; + return response.data; + } catch (error) { + throw new Error(`Error occurred while getting branch ${ref}`, { + cause: error, + }); + } } /** @@ -79,6 +87,8 @@ export async function deleteBranch(userOctokit, repoFullname, branchName) { return response.status; } catch (error) { - throw error; + throw new Error("Error occurred while deleting branch", { + cause: error, + }); } } From f6424a383713e79a2d85a30d1b36759b4c28dd27 Mon Sep 17 00:00:00 2001 From: babblebey Date: Sat, 6 Sep 2025 17:59:39 +0100 Subject: [PATCH 05/11] fix: improve error handling in POST and DELETE functions --- src/pages/api/dictionary.js | 43 +++++++++++++++---------------------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/src/pages/api/dictionary.js b/src/pages/api/dictionary.js index 98f9c58..8df65e2 100644 --- a/src/pages/api/dictionary.js +++ b/src/pages/api/dictionary.js @@ -117,16 +117,13 @@ export async function POST({ request, cookies }) { }, }); } catch (error) { - console.log(error); - return new Response( - JSON.stringify({ message: error.response.data.message }), - { - status: error.response.status, - headers: { - "Content-type": "application/json", - }, + console.log(error.cause); + return new Response(JSON.stringify({ message: error.cause.message }), { + status: error.cause.status, + headers: { + "Content-type": "application/json", }, - ); + }); } } @@ -136,7 +133,7 @@ export async function POST({ request, cookies }) { */ export async function DELETE({ request, cookies }) { const data = await request.formData(); - const accessToken = cookies.get("jargons.dev:token", { + const accessToken = cookies.get("jargonsdevToken", { decode: (value) => decrypt(value), }); @@ -171,24 +168,18 @@ export async function DELETE({ request, cookies }) { try { await deleteBranch(userOctokit, fork, generateBranchName(action, title)); - return new Response( - JSON.stringify({ message: "reference deleted successfully" }), - { - status: 204, - headers: { - "Content-type": "application/json", - }, + return new Response({ + status: 204, + headers: { + "Content-type": "application/json", }, - ); + }); } catch (error) { - return new Response( - JSON.stringify({ message: error.response.data.message }), - { - status: error.response.status, - headers: { - "Content-type": "application/json", - }, + return new Response(JSON.stringify({ message: error.cause.message }), { + status: error.cause.status, + headers: { + "Content-type": "application/json", }, - ); + }); } } From 608226d85443923380d043de95f1c927b196333c Mon Sep 17 00:00:00 2001 From: babblebey Date: Sat, 6 Sep 2025 17:59:52 +0100 Subject: [PATCH 06/11] fix: enhance error handling for existing references in editor component --- src/components/islands/word-editor.jsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/islands/word-editor.jsx b/src/components/islands/word-editor.jsx index eab0cde..9fa9bcd 100644 --- a/src/components/islands/word-editor.jsx +++ b/src/components/islands/word-editor.jsx @@ -136,7 +136,10 @@ function Editor({ eTitle, eContent, eMetadata, className, action, ...props }) { */ const data = await response.json(); $isWordSubmitLoading.set(false); - if (data.message === "Reference already exists") { + if ( + response.status === 422 && + data.message.includes("Reference already exists") + ) { if ( confirm( "It appears you have an existing reference for the current word, do you wish to clear that reference?", From 17c99355b0785210b788798043ada76c89d89bea Mon Sep 17 00:00:00 2001 From: babblebey Date: Sat, 6 Sep 2025 18:04:24 +0100 Subject: [PATCH 07/11] fix: update class attributes to className in TogglePreview component --- src/components/islands/word-editor.jsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/islands/word-editor.jsx b/src/components/islands/word-editor.jsx index 9fa9bcd..7971d49 100644 --- a/src/components/islands/word-editor.jsx +++ b/src/components/islands/word-editor.jsx @@ -83,16 +83,16 @@ export function TogglePreview() { const togglePreview = useStore($togglePreview); return ( -