// Copyright 2018-2026 the Deno authors. MIT license. // This module is browser compatible. import { parseMediaType } from "./parse_media_type.ts"; import type { DBEntry } from "./_util.ts"; import { db, type KeyOfDb } from "./_db.ts"; /** * Given a media type or header value, identify the encoding charset. If the * charset cannot be determined, the function returns `undefined`. * * @param type The media type or header value to get the charset for. * * @returns The charset for the given media type or header value, or `undefined` * if the charset cannot be determined. * * @example Usage * ```ts * import { getCharset } from "../media-types/get_charset.ts"; * import { assertEquals } from "../assert/mod.ts"; * * assertEquals(getCharset("text/plain"), "UTF-8"); * assertEquals(getCharset("application/foo"), undefined); * assertEquals(getCharset("application/news-checkgroups"), "US-ASCII"); * assertEquals(getCharset("application/news-checkgroups; charset=UTF-8"), "UTF-8"); * ``` */ export function getCharset(type: string): string | undefined { try { const [mediaType, params] = parseMediaType(type); if (params?.charset) { return params.charset; } const entry = db[mediaType as KeyOfDb] as DBEntry; if (entry?.charset) { return entry.charset; } if (mediaType.startsWith("text/")) { return "UTF-8"; } } catch { // just swallow errors, returning undefined } return undefined; }