2.9 KiB
reverse/reverse
(no submodules)
Purpose
Provides getMimeExtension for reverse lookup: given a MIME type string, returns the canonical file extension associated with that type. This is the inverse of extension-based detection — useful for generating filenames, setting Content-Disposition headers, and file download naming.
Features
- Returns the canonical (first) extension for any registered MIME type
- Returns
undefinedfor unknown MIME types (no throws) - Case-insensitive MIME type matching (delegates to registry)
- Returns extensions without a leading dot
- O(1) lookup via the registry's forward map
Usage: Basic Example
import { getMimeExtension } from "@suaveplan/mime/reverse/reverse";
console.log(getMimeExtension("image/png")); // "png"
console.log(getMimeExtension("application/pdf")); // "pdf"
console.log(getMimeExtension("text/javascript")); // "js"
console.log(getMimeExtension("unknown/type")); // undefined
Usage: Advanced Example
import { getMimeExtension } from "@suaveplan/mime/reverse/reverse";
function buildFilename(baseName: string, mimeType: string): string {
const ext = getMimeExtension(mimeType);
if (!ext) return baseName; // Unknown type — keep original name
// Avoid double extension
return baseName.endsWith(`.${ext}`) ? baseName : `${baseName}.${ext}`;
}
// Content-Disposition header generation
function contentDisposition(mimeType: string, name: string): string {
const ext = getMimeExtension(mimeType);
const filename = ext ? `${name}.${ext}` : name;
return `attachment; filename="${filename}"`;
}
console.log(contentDisposition("application/pdf", "report"));
// 'attachment; filename="report.pdf"'
API Reference
getMimeExtension(mime: string): string | undefined
| Parameter | Type | Description |
|---|---|---|
mime |
string |
MIME type string (e.g., "image/png"). |
Returns: The canonical file extension string without a leading dot, or undefined if the MIME type is not in the database.
Throws: Never.
Implementation Notes
The "canonical" extension is the first element of the extensions array in the MimeEntry. The built-in database places the most common extension first by convention (e.g., "jpeg" before "jpg" for image/jpeg). Callers that need all extensions for a type should use getEntryByMime directly from @suaveplan/mime/db/registry and access entry.extensions.
Lookup Tables
The reverse index maps MIME string → preferred extension, MIME string → alias list, and alias → canonical MIME. Tables are precomputed at module load from the same curated IANA database the forward lookup uses, so the two directions can never drift. Lookups are O(1) against frozen Map instances with zero runtime cost after first import.