wisski-cloud-distillery/pkg/httpx/html_minify.go
2023-01-07 13:14:43 +01:00

44 lines
1.3 KiB
Go

//go:build !nominify
package httpx
import (
"io"
"regexp"
"github.com/tdewolff/minify"
"github.com/tdewolff/minify/css"
"github.com/tdewolff/minify/html"
"github.com/tdewolff/minify/js"
"github.com/tdewolff/minify/svg"
)
// minifier holds the minfier used for all html minification
//
// NOTE(twiesing): We can't use an init function for this, because otherwise initialization order is incorrect.
var minifier = (func() *minify.M {
m := minify.New()
m.AddFunc("text/html", html.Minify)
m.AddFunc("text/css", css.Minify)
m.AddFunc("image/svg+xml", svg.Minify)
m.AddFuncRegexp(regexp.MustCompile("^(application|text)/(x-)?(java|ecma)script$"), js.Minify)
return m
})()
// MinifyHTMLWriter wraps the given io.Writer to minify the given html instead.
// The writer must be closed explicitly.
//
// Specific environments may chose to disable http minification, in which case MinifyHTMLWriter becomes the identity function.
func MinifyHTMLWriter(dest io.Writer) io.WriteCloser {
return minifier.Writer("text/html", dest)
}
// MinifyHTML minifies the html source.
// If an error occurs, returns the unmodified source instead.
func MinifyHTML(source []byte) []byte {
result, err := minifier.Bytes("text/html", source)
if err != nil {
return source
}
return result
}