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
This commit is contained in:
Rohan Kumar 2021-06-09 16:13:46 -07:00 committed by Bjørn Erik Pedersen
parent 402da3f8f3
commit 02f31897b4
No known key found for this signature in database
GPG key ID: 330E6E2BD4859D8F
3 changed files with 19 additions and 8 deletions

View file

@ -166,13 +166,14 @@ var (
TSXType = newMediaType("text", "tsx", []string{"tsx"}) TSXType = newMediaType("text", "tsx", []string{"tsx"})
JSXType = newMediaType("text", "jsx", []string{"jsx"}) JSXType = newMediaType("text", "jsx", []string{"jsx"})
JSONType = newMediaType("application", "json", []string{"json"}) JSONType = newMediaType("application", "json", []string{"json"})
RSSType = newMediaTypeWithMimeSuffix("application", "rss", "xml", []string{"xml"}) WebAppManifestType = newMediaTypeWithMimeSuffix("application", "manifest", "json", []string{"webmanifest"})
XMLType = newMediaType("application", "xml", []string{"xml"}) RSSType = newMediaTypeWithMimeSuffix("application", "rss", "xml", []string{"xml"})
SVGType = newMediaTypeWithMimeSuffix("image", "svg", "xml", []string{"svg"}) XMLType = newMediaType("application", "xml", []string{"xml"})
TextType = newMediaType("text", "plain", []string{"txt"}) SVGType = newMediaTypeWithMimeSuffix("image", "svg", "xml", []string{"svg"})
TOMLType = newMediaType("application", "toml", []string{"toml"}) TextType = newMediaType("text", "plain", []string{"txt"})
YAMLType = newMediaType("application", "yaml", []string{"yaml", "yml"}) TOMLType = newMediaType("application", "toml", []string{"toml"})
YAMLType = newMediaType("application", "yaml", []string{"yaml", "yml"})
// Common image types // Common image types
PNGType = newMediaType("image", "png", []string{"png"}) PNGType = newMediaType("image", "png", []string{"png"})
@ -206,6 +207,7 @@ var DefaultTypes = Types{
TSXType, TSXType,
JSXType, JSXType,
JSONType, JSONType,
WebAppManifestType,
RSSType, RSSType,
XMLType, XMLType,
SVGType, SVGType,

View file

@ -78,7 +78,7 @@ func New(mediaTypes media.Types, outputFormats output.Formats, cfg config.Provid
} }
if !conf.DisableJSON { if !conf.DisableJSON {
addMinifier(m, mediaTypes, "json", &conf.Tdewolff.JSON) 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 { if !conf.DisableSVG {
addMinifier(m, mediaTypes, "svg", &conf.Tdewolff.SVG) addMinifier(m, mediaTypes, "svg", &conf.Tdewolff.SVG)

View file

@ -143,6 +143,14 @@ var (
Rel: "alternate", Rel: "alternate",
} }
WebAppManifestFormat = Format{
Name: "WebAppManifest",
MediaType: media.WebAppManifestType,
BaseName: "manifest",
IsPlainText: true,
Rel: "manifest",
}
RobotsTxtFormat = Format{ RobotsTxtFormat = Format{
Name: "ROBOTS", Name: "ROBOTS",
MediaType: media.TextType, MediaType: media.TextType,
@ -176,6 +184,7 @@ var DefaultFormats = Formats{
CSVFormat, CSVFormat,
HTMLFormat, HTMLFormat,
JSONFormat, JSONFormat,
WebAppManifestFormat,
RobotsTxtFormat, RobotsTxtFormat,
RSSFormat, RSSFormat,
SitemapFormat, SitemapFormat,