From: Rohan Kumar Date: Wed, 9 Jun 2021 23:13:46 +0000 (-0700) Subject: media: support application/manifest+json X-Git-Tag: v0.84.0~7 X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=02f31897b4f7252154850a65c900e88e0b237fa3;p=brevno-suite%2Fhugo 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 --- diff --git a/media/mediaType.go b/media/mediaType.go index 817ea1ba..d3f212ad 100644 --- 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 index e76e56af..3ac285ec 100644 --- 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 index a52f43c8..a2ffd799 100644 --- 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,