Skip to content
File

Blob: src/worker/dav/content-type.ts

typescript24 lines
1export interface ParsedContentType {
2 media: string;
3 params: Record<string, string>;
4}
5 
6export function parseContentTypeHeader(value: string): ParsedContentType {
7 const [rawMedia, ...rest] = value.split(";").map((part) => part.trim());
8 const params: Record<string, string> = {};
9 for (const part of rest) {
10 if (!part) continue;
11 const eq = part.indexOf("=");
12 if (eq === -1) continue;
13 const name = part.slice(0, eq).trim().toLowerCase();
14 let val = part.slice(eq + 1).trim();
15 if (val.startsWith('"') && val.endsWith('"')) val = val.slice(1, -1);
16 params[name] = val;
17 }
18 return { media: (rawMedia ?? "").toLowerCase(), params };
19}
20 
21export function utf8CharsetOk(params: Record<string, string>): boolean {
22 return !params.charset || params.charset.toLowerCase() === "utf-8";
23}