Skip to content

Commit 02b0971

Browse files
committed
fix: use nuxt errors
1 parent 1b2d433 commit 02b0971

File tree

6 files changed

+83
-24
lines changed

6 files changed

+83
-24
lines changed

app/pages/import.vue

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,10 @@ const loadFile = async (file: File, type: "original" | "translation") => {
171171
}
172172
break;
173173
default:
174-
throw new Error(`Unsupported file: ${file.name}`);
174+
throw createError({
175+
message: `Unsupported file: ${file.name}`,
176+
status: 400,
177+
});
175178
}
176179
} catch (e) {
177180
console.error(e);

server/api/test.get.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export default defineEventHandler(async () => {
2+
console.log("get test");
3+
4+
const _number = 5 / 0;
5+
return {
6+
message: "Hello World",
7+
};
8+
});

server/utils/blob.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,20 @@ export async function receiveFiles(
3030
const form = await readFormData(event);
3131
const files = form.getAll(options.formKey!) as File[];
3232

33-
if (!files?.length) throw new Error("No files received");
33+
if (!files?.length)
34+
throw createError({ message: "No files received", status: 400 });
3435

3536
if (!options.multiple && files.length > 1)
36-
throw new Error("Multiple files are not allowed");
37+
throw createError({
38+
message: "Multiple files are not allowed",
39+
status: 400,
40+
});
3741

3842
if (typeof options.multiple === "number" && files.length > options.multiple)
39-
throw new Error(
40-
`Number of files exceeded. Maximum allowed: ${options.multiple}`,
41-
);
43+
throw createError({
44+
message: `Number of files exceeded. Maximum allowed: ${options.multiple}`,
45+
status: 400,
46+
});
4247

4348
if (options.ensure?.maxSize || options.ensure?.types?.length) {
4449
for (const file of files) {
@@ -48,7 +53,11 @@ export async function receiveFiles(
4853
return files;
4954
} catch (e) {
5055
console.error(e);
51-
throw new Error("Error receiving files", { cause: e });
56+
throw createError({
57+
cause: e,
58+
message: "Error receiving files",
59+
statusCode: 500,
60+
});
5261
}
5362
}
5463

server/utils/jwpub.ts

Lines changed: 50 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ export const getJWPUBDatabase = async (
1515
try {
1616
const outerZip = await extractZipFiles(buffer);
1717
if (!outerZip.files["contents"]) {
18-
throw new Error("No contents file found in the JWPUB file");
18+
throw createError({
19+
message: "No contents file found in the JWPUB file",
20+
status: 400,
21+
});
1922
}
2023

2124
const innerZip = await extractZipFiles(
@@ -25,14 +28,22 @@ export const getJWPUBDatabase = async (
2528
const dbFile = Object.keys(innerZip.files).find((file) =>
2629
file.endsWith(".db"),
2730
);
28-
if (!dbFile) throw new Error("No database file found in the JWPUB file");
31+
if (!dbFile)
32+
throw createError({
33+
message: "No database file found in the JWPUB file",
34+
status: 400,
35+
});
2936

3037
const sqlDb = await innerZip.files[dbFile]!.async("uint8array");
3138

3239
return loadDatabase(sqlDb);
3340
} catch (e) {
3441
console.error(e);
35-
throw new Error("Failed to get database from .jwpub file", { cause: e });
42+
throw createError({
43+
cause: e,
44+
message: "Failed to get database from .jwpub file",
45+
status: 500,
46+
});
3647
}
3748
};
3849

@@ -52,19 +63,28 @@ export const parseJWPUB = async (db: Database) => {
5263
}
5364

5465
if (!header) {
55-
throw new Error("No header found for: " + htmlDoc.toString());
66+
throw createError({
67+
message: "No header found for: " + htmlDoc.toString(),
68+
status: 400,
69+
});
5670
}
5771

5872
if (!header.includes("Nr.")) {
59-
throw new Error("Invalid header: " + header);
73+
throw createError({
74+
message: "Invalid header: " + header,
75+
status: 400,
76+
});
6077
}
6178

6279
const [, numberStr, ...titleParts] = header.split(/\s+/);
6380
const title = titleParts.join(" ");
6481
const number = parseInt(numberStr || "0");
6582

6683
if (!numberStr || isNaN(number)) {
67-
throw new Error(`Invalid number (${numberStr}) for header: ${header}`);
84+
throw createError({
85+
message: `Invalid number (${numberStr}) for header: ${header}`,
86+
status: 400,
87+
});
6888
}
6989

7090
const paragraphs = htmlDoc.querySelectorAll("div > p");
@@ -100,11 +120,17 @@ export const parseJWPUB = async (db: Database) => {
100120
}
101121

102122
if (!updatedStr) {
103-
throw new Error("No updated string found for: " + header);
123+
throw createError({
124+
message: "No updated string found for: " + header,
125+
status: 400,
126+
});
104127
}
105128

106129
if (!updatedStr.includes("Nr.")) {
107-
throw new Error("Invalid updated string: " + updatedStr);
130+
throw createError({
131+
message: "Invalid updated string: " + updatedStr,
132+
status: 400,
133+
});
108134
}
109135

110136
updatedStr = updatedStr
@@ -116,11 +142,17 @@ export const parseJWPUB = async (db: Database) => {
116142
const updated = updatedStr.includes("herzien") ? revised : original;
117143

118144
if (!updated) {
119-
throw new Error("No updated date found for: " + updatedStr);
145+
throw createError({
146+
message: "No updated date found for: " + updatedStr,
147+
status: 400,
148+
});
120149
}
121150

122151
if (!/^\d{1,2}\/\d{2}$/.test(updated)) {
123-
throw new Error(`Invalid updated date (${updated}): ` + updatedStr);
152+
throw createError({
153+
message: `Invalid updated date (${updated}): ` + updatedStr,
154+
status: 400,
155+
});
124156
}
125157

126158
return { number, title, updated };
@@ -156,7 +188,10 @@ const generateSHA256Rounds = async (text: string) => {
156188

157189
const xorBuffers = (buf1: Uint8Array, buf2: Uint8Array) => {
158190
if (buf1.length !== buf2.length) {
159-
throw new Error("Buffers must be same length");
191+
throw createError({
192+
message: "Buffers must be same length",
193+
status: 400,
194+
});
160195
}
161196

162197
return buf1.map((byte, i) => byte ^ buf2[i % buf2.length]!);
@@ -212,7 +247,10 @@ const getPubCard = (db: Database) => {
212247
);
213248

214249
if (publicationTable.length === 0) {
215-
throw new Error("The file selected is not a valid JWPUB file.");
250+
throw createError({
251+
message: "The file selected is not a valid JWPUB file.",
252+
status: 400,
253+
});
216254
}
217255

218256
return publicationTable[0]?.values[0]?.join("_") ?? "";

server/utils/sqlite.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export const loadDatabase = async (
2020
return db;
2121
} catch (e) {
2222
console.error(e);
23-
throw new Error("Failed to load database", { cause: e });
23+
throw createError({ cause: e, message: "Failed to load database" });
2424
}
2525
};
2626

@@ -50,7 +50,7 @@ export const queryDatabase = <T extends Record<string, unknown>>(
5050
return rows;
5151
} catch (e) {
5252
console.error(e);
53-
throw new Error("SQL query failed", { cause: e });
53+
throw createError({ cause: e, message: "SQL query failed" });
5454
}
5555
};
5656

@@ -65,6 +65,7 @@ export const queryDatabaseSingle = <T extends Record<string, unknown>>(
6565
query: string,
6666
): T => {
6767
const result = queryDatabase<T>(db, query);
68-
if (result.length === 0) throw new Error("No result found for query");
68+
if (result.length === 0)
69+
throw createError({ message: "No result found for query" });
6970
return result[0]!;
7071
};

server/utils/zip.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export const extractZipFiles = async (
1515
return await appZip.loadAsync(data);
1616
} catch (e) {
1717
console.error(e);
18-
throw new Error("Failed to extract zip files", { cause: e });
18+
throw createError({ cause: e, message: "Failed to extract zip files" });
1919
}
2020
};
2121

@@ -30,6 +30,6 @@ export const createZipFile = async (
3030
return await zip.generateAsync({ type: "nodebuffer" });
3131
} catch (e) {
3232
console.error(e);
33-
throw new Error("Failed to create zip file", { cause: e });
33+
throw createError({ cause: e, message: "Failed to create zip file" });
3434
}
3535
};

0 commit comments

Comments
 (0)