diff --git a/.dockerignore b/.dockerignore
index 23674ef..ed4c8e5 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -27,6 +27,3 @@ Thumbs.db
# Vite
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
-
-# SQLite
-*.db
diff --git a/.gitignore b/.gitignore
index 1dbbe60..aac77c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,6 +26,3 @@ Thumbs.db
# Vite
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
-
-# SQLite
-*.db
diff --git a/src/lib/components/atoms/BottomSheet.svelte b/src/lib/components/atoms/BottomSheet.svelte
index ac6042c..6378322 100644
--- a/src/lib/components/atoms/BottomSheet.svelte
+++ b/src/lib/components/atoms/BottomSheet.svelte
@@ -25,18 +25,16 @@
class="absolute inset-0 bg-black bg-opacity-50"
transition:fade|global={{ duration: 100 }}
>
-
-
- e.stopPropagation()}
- class="flex max-h-[70vh] min-h-[30vh] flex-col rounded-t-2xl bg-white"
- transition:fly|global={{ y: 100, duration: 200 }}
- >
-
- {@render children()}
-
+
+ e.stopPropagation()}
+ class="flex max-h-[70vh] min-h-[30vh] flex-col rounded-t-2xl bg-white"
+ transition:fly|global={{ y: 100, duration: 200 }}
+ >
+
+ {@render children()}
-
-
+
+
{/if}
diff --git a/src/lib/components/atoms/Modal.svelte b/src/lib/components/atoms/Modal.svelte
index 0864477..679e756 100644
--- a/src/lib/components/atoms/Modal.svelte
+++ b/src/lib/components/atoms/Modal.svelte
@@ -22,11 +22,9 @@
class="fixed inset-0 z-10 bg-black bg-opacity-50"
transition:fade|global={{ duration: 100 }}
>
-
-
-
e.stopPropagation()} class={["rounded-2xl bg-white p-4", className]}>
- {@render children()}
-
+
+ e.stopPropagation()} class={["rounded-2xl bg-white p-4", className]}>
+ {@render children()}
diff --git a/src/lib/server/db/schema/util.ts b/src/lib/server/db/schema/util.ts
index d7f7350..74f92de 100644
--- a/src/lib/server/db/schema/util.ts
+++ b/src/lib/server/db/schema/util.ts
@@ -1,4 +1,4 @@
-export type Ciphertext = {
+export interface Ciphertext {
ciphertext: string; // Base64
iv: string; // Base64
-};
+}
diff --git a/src/lib/server/schemas/auth.ts b/src/lib/server/schemas/auth.ts
index eae349f..e3d6264 100644
--- a/src/lib/server/schemas/auth.ts
+++ b/src/lib/server/schemas/auth.ts
@@ -7,7 +7,7 @@ export const passwordChangeRequest = z.object({
export type PasswordChangeRequest = z.infer;
export const loginRequest = z.object({
- email: z.string().email().nonempty(),
+ email: z.string().email(),
password: z.string().trim().nonempty(),
});
export type LoginRequest = z.infer;
diff --git a/src/lib/server/schemas/category.ts b/src/lib/server/schemas/category.ts
index a11d525..d02fa4f 100644
--- a/src/lib/server/schemas/category.ts
+++ b/src/lib/server/schemas/category.ts
@@ -1,6 +1,6 @@
import { z } from "zod";
-export const categoryIdSchema = z.union([z.enum(["root"]), z.number().int().positive()]);
+export const categoryIdSchema = z.union([z.literal("root"), z.number().int().positive()]);
export const categoryInfoResponse = z.object({
metadata: z
diff --git a/src/lib/server/schemas/directory.ts b/src/lib/server/schemas/directory.ts
index 473d696..016cfe8 100644
--- a/src/lib/server/schemas/directory.ts
+++ b/src/lib/server/schemas/directory.ts
@@ -1,6 +1,6 @@
import { z } from "zod";
-export const directoryIdSchema = z.union([z.enum(["root"]), z.number().int().positive()]);
+export const directoryIdSchema = z.union([z.literal("root"), z.number().int().positive()]);
export const directoryInfoResponse = z.object({
metadata: z
diff --git a/src/lib/server/schemas/file.ts b/src/lib/server/schemas/file.ts
index cb6af28..b6aa648 100644
--- a/src/lib/server/schemas/file.ts
+++ b/src/lib/server/schemas/file.ts
@@ -9,6 +9,7 @@ export const fileInfoResponse = z.object({
dekVersion: z.string().datetime(),
contentType: z
.string()
+ .trim()
.nonempty()
.refine((value) => mime.getExtension(value) !== null), // MIME type
contentIv: z.string().base64().nonempty(),
@@ -49,6 +50,7 @@ export const fileUploadRequest = z.object({
contentHmac: z.string().base64().nonempty(),
contentType: z
.string()
+ .trim()
.nonempty()
.refine((value) => mime.getExtension(value) !== null), // MIME type
contentIv: z.string().base64().nonempty(),
diff --git a/src/lib/server/schemas/user.ts b/src/lib/server/schemas/user.ts
index b359467..e5cc8c1 100644
--- a/src/lib/server/schemas/user.ts
+++ b/src/lib/server/schemas/user.ts
@@ -1,12 +1,12 @@
import { z } from "zod";
export const userInfoResponse = z.object({
- email: z.string().email().nonempty(),
+ email: z.string().email(),
nickname: z.string().nonempty(),
});
export type UserInfoResponse = z.infer;
export const nicknameChangeRequest = z.object({
- newNickname: z.string().min(2).max(8),
+ newNickname: z.string().trim().min(2).max(8),
});
export type NicknameChangeRequest = z.infer;
diff --git a/src/routes/api/category/[id]/file/list/+server.ts b/src/routes/api/category/[id]/file/list/+server.ts
index c93c963..e354d8b 100644
--- a/src/routes/api/category/[id]/file/list/+server.ts
+++ b/src/routes/api/category/[id]/file/list/+server.ts
@@ -31,6 +31,6 @@ export const GET: RequestHandler = async ({ locals, url, params }) => {
return json(
categoryFileListResponse.parse({
files: files.map(({ id, isRecursive }) => ({ file: id, isRecursive })),
- }) satisfies CategoryFileListResponse,
+ } satisfies CategoryFileListResponse),
);
};
diff --git a/src/routes/api/file/upload/+server.ts b/src/routes/api/file/upload/+server.ts
index 55db93f..f9cbd53 100644
--- a/src/routes/api/file/upload/+server.ts
+++ b/src/routes/api/file/upload/+server.ts
@@ -73,12 +73,13 @@ export const POST: RequestHandler = async ({ locals, request }) => {
"field",
handler(async (fieldname, val) => {
if (fieldname === "metadata") {
+ // Ignore subsequent metadata fields
if (!metadata) {
- // Ignore subsequent metadata fields
metadata = parseFileMetadata(userId, val);
}
} else if (fieldname === "checksum") {
- resolveChecksum(val); // Ignore subsequent checksum fields
+ // Ignore subsequent checksum fields
+ resolveChecksum(val);
} else {
error(400, "Invalid request body");
}