GoBlog/pkgs/minify/minify.go

46 lines
1.0 KiB
Go

package minify
import (
"io"
"sync"
"github.com/tdewolff/minify/v2"
mCss "github.com/tdewolff/minify/v2/css"
mHtml "github.com/tdewolff/minify/v2/html"
mJs "github.com/tdewolff/minify/v2/js"
mJson "github.com/tdewolff/minify/v2/json"
mXml "github.com/tdewolff/minify/v2/xml"
"go.goblog.app/app/pkgs/contenttype"
)
type Minifier struct {
i sync.Once
m *minify.M
}
func (m *Minifier) init() {
m.i.Do(func() {
m.m = minify.New()
m.m.AddFunc(contenttype.HTML, mHtml.Minify)
m.m.AddFunc(contenttype.CSS, mCss.Minify)
m.m.AddFunc(contenttype.XML, mXml.Minify)
m.m.AddFunc(contenttype.JS, mJs.Minify)
m.m.AddFunc(contenttype.RSS, mXml.Minify)
m.m.AddFunc(contenttype.ATOM, mXml.Minify)
m.m.AddFunc(contenttype.JSONFeed, mJson.Minify)
m.m.AddFunc(contenttype.AS, mJson.Minify)
})
}
func (m *Minifier) Get() *minify.M {
m.init()
return m.m
}
func (m *Minifier) Write(w io.Writer, mediatype string, b []byte) (int, error) {
m.init()
mw := m.m.Writer(mediatype, w)
defer func() { _ = mw.Close() }()
return mw.Write(b)
}