From 40eb3a146e25d4267c2254b472553b2376e5a946 Mon Sep 17 00:00:00 2001 From: mkelvers Date: Fri, 3 Jul 2026 02:58:16 +0200 Subject: [PATCH] feat: add flush and finish for compression writer --- internal/server/static_delivery.go | 42 ++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/internal/server/static_delivery.go b/internal/server/static_delivery.go index 01e9540a..a677079e 100644 --- a/internal/server/static_delivery.go +++ b/internal/server/static_delivery.go @@ -4,6 +4,7 @@ import ( "bufio" "bytes" "compress/gzip" + "errors" "mime" "net" "net/http" @@ -378,3 +379,44 @@ func (w *compressionWriter) Write(data []byte) (int, error) { } return w.gzip.Write(data) } + +//nolint:unused +func (w *compressionWriter) Flush() { + if w.mode == compressionUndecided { + if w.canCompress(w.buffer.Bytes()) { + w.startGzip() + _ = w.flushBuffer() + } else { + w.startPlain() + _ = w.flushBuffer() + } + } + if w.mode == compressionGzip { + _ = w.gzip.Flush() + } + w.ResponseWriter.Flush() +} + +//nolint:unused +func (w *compressionWriter) finish() error { + if w.mode == compressionUndecided { + if w.Status() == http.StatusNotModified { + addVary(w.Header(), "Accept-Encoding") + } + if w.buffer.Len() > 0 || w.status != 0 { + w.startPlain() + if err := w.flushBuffer(); err != nil { + return err + } + w.ResponseWriter.WriteHeaderNow() + } + return nil + } + if w.mode == compressionPlain { + return w.flushBuffer() + } + if w.gzip == nil { + return errors.New("gzip writer was not initialized") + } + return w.gzip.Close() +}