lib:mime
Stable
Maps between file extensions, filenames, and MIME type strings. Wraps mime_guess with a curated preference layer for canonical extensions.
| Property | Value |
|---|---|
| Namespace | lib |
| Source | src/lua/lib/mime.rs |
| Tests | tests/lib/mime.test.luau |
| Stability | Stable |
Syntax
local mime = require("lib:mime")Description
All functions return (result, err). On success: result is string, err is nil. On failure: result is nil, err prefixed with function name.
Runtime preference map applied by to_extension only (e.g. image/jpeg → .jpg not .jfif). from_extension and detect delegate directly to mime_guess.
Module functions
mime.from_extension
mime.from_extension(ext: string): (string?, string?)Returns MIME type for extension. Leading dot optional — ".json" and "json" both resolve to "application/json".
mime.to_extension
mime.to_extension(mime_type: string, prefs?: table): (string?, string?)Returns canonical extension (with dot) for MIME type. Precedence:
- User
prefstable (keyed by MIME type) - Runtime preference map
mime_guessfallback
mime.detect
mime.detect(filename: string): (string?, string?)Returns MIME type inferred from filename extension. Accepts bare names, paths, compound names (archive.tar.gz). Extension only — no content inspection.
Errors
| Function | Example |
|---|---|
mime.from_extension | "mime.from_extension: unknown extension: .xyz" |
mime.to_extension | "mime.to_extension: no extension known for: application/x-custom" |
mime.detect | "mime.detect: cannot determine MIME type for: Makefile" |
Examples
Extension to MIME
local mime = require("lib:mime")
local result, err = mime.from_extension(".json")
-- "application/json", nil
local result2, err2 = mime.from_extension(".xyz")
-- nil, "mime.from_extension: unknown extension: .xyz"MIME to extension
local mime = require("lib:mime")
local result, err = mime.to_extension("image/jpeg")
-- ".jpg", nil (runtime preference)
local prefs = { ["text/html"] = ".xhtml" }
local result2, err2 = mime.to_extension("text/html", prefs)
-- ".xhtml", nilFilename detection
local mime = require("lib:mime")
local result, err = mime.detect("style.css") -- "text/css"
local result2, err2 = mime.detect("archive.tar.gz") -- "application/gzip"
local result3, err3 = mime.detect("Makefile") -- nil, errAcceptance
Exercised by tests/lib/mime.test.luau:
- Dot-prefixed and bare extensions equivalent.
- Unknown extension →
(nil, err). - Empty string →
(nil, err). - Dot-only →
(nil, err). - Runtime prefs produce canonical extensions (
image/jpeg→.jpg). - User prefs take highest priority.
- User prefs fall through to runtime/mime_guess.
- Invalid MIME type →
(nil, err). detectresolves by extension only.detectwith no extension →(nil, err).- Empty/dot-only inputs to
detect→(nil, err).