Project updates from Template (#1)

This PR contains the latest updates from the generic Website template, which have been added while working on #loud-amsterdam.

Reviewed-on: #1
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
This commit was merged in pull request #1.
This commit is contained in:
2026-09-04 13:40:35 +00:00
committed by javier
parent 08b4d80064
commit 65b62681eb
60 changed files with 2347 additions and 326 deletions
@@ -1,21 +1,29 @@
/// 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 JavaScript file.
case js
/// A Portable Network Graphics image.
case png
/// A Windows icon image.
case ico
/// A JPEG image.
case jpg
/// A JavaScript file.
case js
/// An MPEG-4 video.
case mp4
/// 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
/// A Web Open Font Format 2 font.
case woff2
/// An Extensible Markup Language file.
case xml
}
@@ -30,12 +38,16 @@ public extension AssetExtension {
var contentType: String {
switch self {
case .css: "text/css"
case .js: "text/javascript"
case .png: "image/png"
case .ico: "image/vnd.microsoft.icon"
case .jpg: "image/jpeg"
case .js: "text/javascript"
case .mp4: "video/mp4"
case .png: "image/png"
case .svg: "image/svg+xml"
case .txt: "text/plain"
case .webmanifest: "application/manifest+json"
case .webp: "image/webp"
case .woff2: "font/woff2"
case .xml: "application/xml"
}
}
@@ -45,6 +57,10 @@ public extension AssetExtension {
switch self {
case .css: "css"
case .js: "js"
case .jpg,
.webp: "img"
case .mp4: "video"
case .woff2: "font"
default: nil
}
}