From 4089b58df1e84c37022fc1ed22fb75213d4e8202 Mon Sep 17 00:00:00 2001 From: Christoph Urlacher Date: Thu, 12 Dec 2024 04:37:54 +0100 Subject: [PATCH] Lib: Add form helpers --- src/lib/forms.ts | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ src/lib/index.ts | 1 - 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/lib/forms.ts delete mode 100644 src/lib/index.ts diff --git a/src/lib/forms.ts b/src/lib/forms.ts new file mode 100644 index 0000000..55cf1a3 --- /dev/null +++ b/src/lib/forms.ts @@ -0,0 +1,48 @@ +import { error } from "@sveltejs/kit"; + +/** + * Obtain the value of the key "id" and remove it from the FormData. + * Throws SvelteKit error(400) if "id" is not found. + */ +export const form_data_get_and_remove_id = (data: FormData): string => { + const id: string | undefined = data.get("id")?.toString(); + if (!id) error(400, "Missing ID"); + data.delete("id"); + return id; +}; + +/** + * Remove empty fields and files from FormData objects. + */ +export const form_data_clean = (data: FormData): FormData => { + for (const [key, value] of data.entries()) { + if (value === "") { + // Remove empty keys + data.delete(key); + } else if ( + // Remove empty files + typeof value === "object" && + value !== null && + "size" in value && + value.size === 0 + ) { + data.delete(key); + } + } + + return data; +}; + +/** + * Throws SvelteKit error(400) if form_data does not contain key. + */ +export const form_data_ensure_key = (data: FormData, key: string) => { + if (!data.get(key)) error(400, `Key "${key}" missing from form_data!`); +}; + +/** + * Throws SvelteKit error(400) if form_data does not contain all keys. + */ +export const form_data_ensure_keys = (data: FormData, keys: string[]) => { + keys.map((key) => form_data_ensure_key(data, key)); +}; diff --git a/src/lib/index.ts b/src/lib/index.ts deleted file mode 100644 index 856f2b6..0000000 --- a/src/lib/index.ts +++ /dev/null @@ -1 +0,0 @@ -// place files you want to import through the `$lib` alias in this folder.