hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 02f31897b4f7252154850a65c900e88e0b237fa3
parent 402da3f8f327f97302c4b5d69cd4832a94bd189b
Author: Rohan Kumar <seirdy@seirdy.one>
Date:   Wed,  9 Jun 2021 16:13:46 -0700

media: support application/manifest+json

The standard file extension for Web App Manifest files is
".webmanifest". This commit allows Hugo to recognize .webmanifest files
as "application/manifest+json" files and to minify them using its
JSON minifier.

The .webmanifest file extension is recommended in the w3c spec to
simplify media type registration:
https://www.w3.org/TR/appmanifest/#media-type-registration

Webhint docs are also relevant:
https://webhint.io/docs/user-guide/hints/hint-manifest-file-extension/

Closes #8624

Diffstat:
Mmedia/mediaType.go | 16+++++++++-------
Mminifiers/minifiers.go | 2+-
Moutput/outputFormat.go | 9+++++++++
3 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/media/mediaType.go b/media/mediaType.go
@@ -166,13 +166,14 @@ var (
 	TSXType        = newMediaType("text", "tsx", []string{"tsx"})
 	JSXType        = newMediaType("text", "jsx", []string{"jsx"})
 
-	JSONType = newMediaType("application", "json", []string{"json"})
-	RSSType  = newMediaTypeWithMimeSuffix("application", "rss", "xml", []string{"xml"})
-	XMLType  = newMediaType("application", "xml", []string{"xml"})
-	SVGType  = newMediaTypeWithMimeSuffix("image", "svg", "xml", []string{"svg"})
-	TextType = newMediaType("text", "plain", []string{"txt"})
-	TOMLType = newMediaType("application", "toml", []string{"toml"})
-	YAMLType = newMediaType("application", "yaml", []string{"yaml", "yml"})
+	JSONType           = newMediaType("application", "json", []string{"json"})
+	WebAppManifestType = newMediaTypeWithMimeSuffix("application", "manifest", "json", []string{"webmanifest"})
+	RSSType            = newMediaTypeWithMimeSuffix("application", "rss", "xml", []string{"xml"})
+	XMLType            = newMediaType("application", "xml", []string{"xml"})
+	SVGType            = newMediaTypeWithMimeSuffix("image", "svg", "xml", []string{"svg"})
+	TextType           = newMediaType("text", "plain", []string{"txt"})
+	TOMLType           = newMediaType("application", "toml", []string{"toml"})
+	YAMLType           = newMediaType("application", "yaml", []string{"yaml", "yml"})
 
 	// Common image types
 	PNGType  = newMediaType("image", "png", []string{"png"})
@@ -206,6 +207,7 @@ var DefaultTypes = Types{
 	TSXType,
 	JSXType,
 	JSONType,
+	WebAppManifestType,
 	RSSType,
 	XMLType,
 	SVGType,
diff --git a/minifiers/minifiers.go b/minifiers/minifiers.go
@@ -78,7 +78,7 @@ func New(mediaTypes media.Types, outputFormats output.Formats, cfg config.Provid
 	}
 	if !conf.DisableJSON {
 		addMinifier(m, mediaTypes, "json", &conf.Tdewolff.JSON)
-		m.AddRegexp(regexp.MustCompile(`^(application|text)/(x-|ld\+)?json$`), &conf.Tdewolff.JSON)
+		m.AddRegexp(regexp.MustCompile(`^(application|text)/(x-|(ld|manifest)\+)?json$`), &conf.Tdewolff.JSON)
 	}
 	if !conf.DisableSVG {
 		addMinifier(m, mediaTypes, "svg", &conf.Tdewolff.SVG)
diff --git a/output/outputFormat.go b/output/outputFormat.go
@@ -143,6 +143,14 @@ var (
 		Rel:         "alternate",
 	}
 
+	WebAppManifestFormat = Format{
+		Name:        "WebAppManifest",
+		MediaType:   media.WebAppManifestType,
+		BaseName:    "manifest",
+		IsPlainText: true,
+		Rel:         "manifest",
+	}
+
 	RobotsTxtFormat = Format{
 		Name:        "ROBOTS",
 		MediaType:   media.TextType,
@@ -176,6 +184,7 @@ var DefaultFormats = Formats{
 	CSVFormat,
 	HTMLFormat,
 	JSONFormat,
+	WebAppManifestFormat,
 	RobotsTxtFormat,
 	RSSFormat,
 	SitemapFormat,