38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
import { readMultipartFormData, type H3Event, type MultiPartData } from "h3"
|
|
import { formFieldText, getFormField, getFormFieldValues } from "./upload-files"
|
|
|
|
export async function readAdminForm(event: H3Event) {
|
|
return (await readMultipartFormData(event)) ?? []
|
|
}
|
|
|
|
export function adminFormText(parts: MultiPartData[], key: string) {
|
|
return formFieldText(getFormField(parts, key))
|
|
}
|
|
|
|
export function adminFormTexts(parts: MultiPartData[], key: string) {
|
|
return getFormFieldValues(parts, key).map((part) => part.data.toString("utf8"))
|
|
}
|
|
|
|
export function adminFormFile(parts: MultiPartData[], key: string) {
|
|
const part = getFormField(parts, key)
|
|
if (!part?.filename) return undefined
|
|
return { name: part.filename, type: part.type ?? "", data: part.data }
|
|
}
|
|
|
|
export function splitIds(value: string | undefined) {
|
|
return value === undefined ? undefined : value.split(",").map((id) => id.trim()).filter(Boolean)
|
|
}
|
|
|
|
export function safeFileExtension(fileName: string) {
|
|
return fileName.split(".")[1]?.replace(/[^A-Za-z0-9]/g, "") ?? ""
|
|
}
|
|
|
|
export function parseOptionalJson(value: string | undefined) {
|
|
if (value === undefined) return { ok: true as const, value: undefined }
|
|
try {
|
|
return { ok: true as const, value: JSON.parse(value) as unknown }
|
|
} catch {
|
|
return { ok: false as const }
|
|
}
|
|
}
|