diff options
author | 2024-02-12 10:59:43 +0000 | |
---|---|---|
committer | 2024-02-12 10:59:43 +0000 | |
commit | db835f4810a733e8b8131baac244c344a79d5b47 (patch) | |
tree | de044cacfad89877d0949ac0b0a7c5943be0e1ba /vendor/github.com/tdewolff/minify/v2/minify.go | |
parent | [chore]: Bump golang.org/x/oauth2 from 0.16.0 to 0.17.0 (#2629) (diff) | |
download | gotosocial-db835f4810a733e8b8131baac244c344a79d5b47.tar.xz |
[chore]: Bump github.com/tdewolff/minify/v2 from 2.20.14 to 2.20.16 (#2631)
Bumps [github.com/tdewolff/minify/v2](https://github.com/tdewolff/minify) from 2.20.14 to 2.20.16.
- [Release notes](https://github.com/tdewolff/minify/releases)
- [Commits](https://github.com/tdewolff/minify/compare/v2.20.14...v2.20.16)
---
updated-dependencies:
- dependency-name: github.com/tdewolff/minify/v2
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Diffstat (limited to 'vendor/github.com/tdewolff/minify/v2/minify.go')
-rw-r--r-- | vendor/github.com/tdewolff/minify/v2/minify.go | 73 |
1 files changed, 39 insertions, 34 deletions
diff --git a/vendor/github.com/tdewolff/minify/v2/minify.go b/vendor/github.com/tdewolff/minify/v2/minify.go index 8e2e3fdb0..0e9a2e113 100644 --- a/vendor/github.com/tdewolff/minify/v2/minify.go +++ b/vendor/github.com/tdewolff/minify/v2/minify.go @@ -29,7 +29,7 @@ var Warning = log.New(os.Stderr, "WARNING: ", 0) var ErrNotExist = errors.New("minifier does not exist for mimetype") // ErrClosedWriter is returned when writing to a closed writer. -var ErrClosedWriter = errors.New("write on closed writer") +var ErrClosedWriter = errors.New("write on closed writer") // TODO: DEPRECATED, remove //////////////////////////////////////////////////////////////// @@ -253,32 +253,24 @@ func (m *M) Reader(mediatype string, r io.Reader) io.Reader { // writer makes sure that errors from the minifier are passed down through Close (can be blocking). type writer struct { - pw *io.PipeWriter + io.WriteCloser wg sync.WaitGroup - err error closed bool -} - -// Write intercepts any writes to the writer. -func (w *writer) Write(b []byte) (int, error) { - if w.closed { - return 0, ErrClosedWriter - } - n, err := w.pw.Write(b) - if w.err != nil { - err = w.err - } - return n, err + err error } // Close must be called when writing has finished. It returns the error from the minifier. -func (w *writer) Close() error { - if !w.closed { - w.pw.Close() - w.wg.Wait() - w.closed = true +func (z *writer) Close() error { + if z.closed { + return nil } - return w.err + z.closed = true + err := z.WriteCloser.Close() + z.wg.Wait() + if z.err == nil { + return err + } + return z.err } // Writer wraps a Writer interface and minifies the stream. @@ -286,17 +278,16 @@ func (w *writer) Close() error { // The writer must be closed explicitly. func (m *M) Writer(mediatype string, w io.Writer) io.WriteCloser { pr, pw := io.Pipe() - mw := &writer{pw, sync.WaitGroup{}, nil, false} - mw.wg.Add(1) + z := &writer{pw, sync.WaitGroup{}, false, nil} + z.wg.Add(1) go func() { - defer mw.wg.Done() - + defer z.wg.Done() + defer pr.Close() if err := m.Minify(mediatype, w, pr); err != nil { - mw.err = err + z.err = err } - pr.Close() }() - return mw + return z } // responseWriter wraps an http.ResponseWriter and makes sure that errors from the minifier are passed down through Close (can be blocking). @@ -305,7 +296,7 @@ func (m *M) Writer(mediatype string, w io.Writer) io.WriteCloser { type responseWriter struct { http.ResponseWriter - writer *writer + z io.Writer m *M mediatype string } @@ -319,20 +310,34 @@ func (w *responseWriter) WriteHeader(status int) { // Write intercepts any writes to the response writer. // The first write will extract the Content-Type as the mediatype. Otherwise it falls back to the RequestURI extension. func (w *responseWriter) Write(b []byte) (int, error) { - if w.writer == nil { + if w.z == nil { // first write if mediatype := w.ResponseWriter.Header().Get("Content-Type"); mediatype != "" { w.mediatype = mediatype } - w.writer = w.m.Writer(w.mediatype, w.ResponseWriter).(*writer) + if _, params, minifier := w.m.Match(w.mediatype); minifier != nil { + pr, pw := io.Pipe() + z := &writer{pw, sync.WaitGroup{}, false, nil} + z.wg.Add(1) + go func() { + defer z.wg.Done() + defer pr.Close() + if err := minifier(w.m, w.ResponseWriter, pr, params); err != nil { + z.err = err + } + }() + w.z = z + } else { + w.z = w.ResponseWriter + } } - return w.writer.Write(b) + return w.z.Write(b) } // Close must be called when writing has finished. It returns the error from the minifier. func (w *responseWriter) Close() error { - if w.writer != nil { - return w.writer.Close() + if closer, ok := w.z.(interface{ Close() error }); ok { + return closer.Close() } return nil } |