/// A file extension used by an ``Asset``. /// /// Each case's raw value is the extension itself (e.g. `"css"`), which an asset appends to its file name when resolving paths. public enum AssetExtension: String, CaseIterable, Sendable { /// A Cascading Style Sheets file. case css /// A Windows icon image. case ico /// A JPEG image. case jpg /// A JavaScript file. case js /// A Portable Network Graphics image. case png /// A Scalable Vector Graphics image. case svg /// A plain text file. case txt /// A web application manifest file. case webmanifest /// A WebP image. case webp /// An Extensible Markup Language file. case xml } // MARK: - Extensions public extension AssetExtension { // MARK: Computed /// The file's content type. var contentType: String { switch self { case .css: "text/css" case .ico: "image/vnd.microsoft.icon" case .jpg: "image/jpeg" case .js: "text/javascript" case .png: "image/png" case .svg: "image/svg+xml" case .txt: "text/plain" case .webmanifest: "application/manifest+json" case .webp: "image/webp" case .xml: "application/xml" } } /// The folder within the static root that holds files with this extension, if any. var folder: String? { switch self { case .css: "css" case .js: "js" case .jpg, .mp4, .webp: "media" default: nil } } }