Added the WebP case to the Asset extensions in the Infrastructure package.

This commit is contained in:
2026-08-24 17:44:43 +02:00
parent c0f56a4897
commit 88bcae9dc9
2 changed files with 30 additions and 4 deletions
@@ -1,21 +1,25 @@
/// 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 {
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 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
/// A WebP image.
case webp
/// An Extensible Markup Language file.
case xml
}
@@ -30,12 +34,14 @@ public extension AssetExtension {
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 .ico: "image/vnd.microsoft.icon"
case .svg: "image/svg+xml"
case .txt: "text/plain"
case .webmanifest: "application/manifest+json"
case .webp: "image/webp"
case .xml: "application/xml"
}
}
@@ -45,6 +51,9 @@ public extension AssetExtension {
switch self {
case .css: "css"
case .js: "js"
case .jpg,
.mp4,
.webp: "media"
default: nil
}
}
@@ -32,6 +32,17 @@ struct AssetExtensionTests {
#expect(fileExtension.folder == folder)
}
// MARK: CaseIterable tests
@Test
func `covers every case in the parameterised tests`() {
// `zip` stops at the shorter sequence, so a case missing from the arrays below is silently untested rather
// than failing this is what catches that.
#expect(Self.extensions == AssetExtension.allCases)
#expect(Self.contentTypes.count == AssetExtension.allCases.count)
#expect(Self.folders.count == AssetExtension.allCases.count)
}
}
// MARK: - Helpers
@@ -44,6 +55,8 @@ private extension AssetExtensionTests {
.css,
.js,
.png,
.jpg,
.webp,
.ico,
.svg,
.txt,
@@ -54,6 +67,8 @@ private extension AssetExtensionTests {
"text/css",
"text/javascript",
"image/png",
"image/jpeg",
"image/webp",
"image/vnd.microsoft.icon",
"image/svg+xml",
"text/plain",
@@ -64,6 +79,8 @@ private extension AssetExtensionTests {
"css",
"js",
nil,
"media",
"media",
nil,
nil,
nil,