/// 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, Sendable { /// A Cascading Style Sheets file. case css /// A JavaScript file. case js /// A Portable Network Graphics image. case png /// A Windows icon image. case ico /// A Scalable Vector Graphics image. case svg /// A plain text file. case txt /// A web application manifest file. case webmanifest /// 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 .js: "text/javascript" case .png: "image/png" case .ico: "image/vnd.microsoft.icon" case .svg: "image/svg+xml" case .txt: "text/plain" case .webmanifest: "application/manifest+json" case .xml: "application/xml" } } /// The sub-directory within the static root that holds files with this extension, if any. var subdirectory: String? { switch self { case .css: "css" case .js: "js" default: nil } } }