diff --git a/go.mod b/go.mod index fa5116e2a..9788b0192 100644 --- a/go.mod +++ b/go.mod @@ -47,7 +47,7 @@ require ( ) require ( - github.com/vearutop/statigz v1.1.5 + github.com/vearutop/statigz v1.1.6 github.com/vektah/gqlparser/v2 v2.0.1 ) diff --git a/go.sum b/go.sum index 4841ff7c5..8f3bcda2b 100644 --- a/go.sum +++ b/go.sum @@ -710,8 +710,8 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1 github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/urfave/cli/v2 v2.1.1 h1:Qt8FeAtxE/vfdrLmR3rxR6JRE0RoVmbXu8+6kZtYU4k= github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= -github.com/vearutop/statigz v1.1.5 h1:qWvRgXFsseWVTFCkIvwHQPpaLNf9WI0+dDJE7I9432o= -github.com/vearutop/statigz v1.1.5/go.mod h1:czAv7iXgPv/s+xsgXpVEhhD0NSOQ4wZPgmM/n7LANDI= +github.com/vearutop/statigz v1.1.6 h1:si1zvulh/6P4S/SjFticuKQ8/EgQISglaRuycj8PWso= +github.com/vearutop/statigz v1.1.6/go.mod h1:czAv7iXgPv/s+xsgXpVEhhD0NSOQ4wZPgmM/n7LANDI= github.com/vektah/dataloaden v0.2.1-0.20190515034641-a19b9a6e7c9e h1:+w0Zm/9gaWpEAyDlU1eKOuk5twTjAjuevXqcJJw8hrg= github.com/vektah/dataloaden v0.2.1-0.20190515034641-a19b9a6e7c9e/go.mod h1:/HUdMve7rvxZma+2ZELQeNh88+003LL7Pf/CZ089j8U= github.com/vektah/gqlparser v1.3.1 h1:8b0IcD3qZKWJQHSzynbDlrtP3IxVydZ2DZepCGofqfU= diff --git a/pkg/api/server.go b/pkg/api/server.go index f58049cb1..a29ddd85c 100644 --- a/pkg/api/server.go +++ b/pkg/api/server.go @@ -30,6 +30,7 @@ import ( "github.com/stashapp/stash/pkg/manager/config" "github.com/stashapp/stash/pkg/models" "github.com/stashapp/stash/pkg/utils" + "github.com/vearutop/statigz" ) var version string @@ -189,12 +190,6 @@ func Start(uiBox embed.FS, loginUIBox embed.FS) { ext := path.Ext(r.URL.Path) - // workaround for Windows systems where js files are set to plaintext in - // the registry. - if ext == ".js" { - w.Header().Set("Content-Type", "application/javascript") - } - if customUILocation != "" { if r.URL.Path == "index.html" || ext == "" { r.URL.Path = "/" @@ -211,18 +206,22 @@ func Start(uiBox embed.FS, loginUIBox embed.FS) { } prefix := getProxyPrefix(r.Header) - baseURLIndex := strings.Replace(string(data), "%BASE_URL%", prefix+"/", 2) - baseURLIndex = strings.Replace(baseURLIndex, "base href=\"/\"", fmt.Sprintf("base href=\"%s\"", prefix+"/"), 2) + baseURLIndex := strings.ReplaceAll(string(data), "/%BASE_URL%", prefix) + baseURLIndex = strings.Replace(baseURLIndex, "base href=\"/\"", fmt.Sprintf("base href=\"%s\"", prefix+"/"), 1) _, _ = w.Write([]byte(baseURLIndex)) } else { isStatic, _ := path.Match("/static/*/*", r.URL.Path) if isStatic { w.Header().Add("Cache-Control", "max-age=604800000") } + + prefix := getProxyPrefix(r.Header) + if prefix != "" { + r.URL.Path = strings.Replace(r.URL.Path, prefix, "", 1) + } r.URL.Path = uiRootDir + r.URL.Path - http.FileServer(http.FS(uiBox)).ServeHTTP(w, r) - // statigz.FileServer(uiBox).ServeHTTP(w, r) + statigz.FileServer(uiBox).ServeHTTP(w, r) } }) diff --git a/ui/v2.5/index.html b/ui/v2.5/index.html index 4b6756202..3ef197643 100755 --- a/ui/v2.5/index.html +++ b/ui/v2.5/index.html @@ -13,9 +13,9 @@ manifest.json provides metadata used when your web app is installed on a user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/ --> - + Stash - + diff --git a/ui/v2.5/vite.config.js b/ui/v2.5/vite.config.js index a6c8e6cd4..ffa2cf0cb 100644 --- a/ui/v2.5/vite.config.js +++ b/ui/v2.5/vite.config.js @@ -4,6 +4,7 @@ import viteCompression from 'vite-plugin-compression'; // https://vitejs.dev/config/ export default defineConfig({ + base: "", build: { outDir: 'build', }, @@ -15,12 +16,12 @@ export default defineConfig({ }, publicDir: 'public', assetsInclude: ['**/*.md'], - plugins: [tsconfigPaths() - // viteCompression({ - // algorithm: 'gzip', - // disable: false, - // deleteOriginFile: true, - // filter: /\.(js|json|css|svg|md)$/i - // }) + plugins: [tsconfigPaths(), + viteCompression({ + algorithm: 'gzip', + disable: false, + deleteOriginFile: true, + filter: /\.(js|json|css|svg|md)$/i + }) ], }) diff --git a/vendor/github.com/vearutop/statigz/brotli/encoding.go b/vendor/github.com/vearutop/statigz/brotli/encoding.go deleted file mode 100644 index b42fc1f2a..000000000 --- a/vendor/github.com/vearutop/statigz/brotli/encoding.go +++ /dev/null @@ -1,39 +0,0 @@ -// Package brotli provides encoding for statigz.Server. -package brotli - -import ( - "bytes" - "io" - - "github.com/andybalholm/brotli" - "github.com/vearutop/statigz" -) - -// AddEncoding is an option that prepends brotli to encodings of statigz.Server. -// -// It is located in a separate package to allow better control of imports graph. -func AddEncoding(server *statigz.Server) { - enc := statigz.Encoding{ - FileExt: ".br", - ContentEncoding: "br", - Decoder: func(r io.Reader) (io.Reader, error) { - return brotli.NewReader(r), nil - }, - Encoder: func(r io.Reader) ([]byte, error) { - res := bytes.NewBuffer(nil) - w := brotli.NewWriterLevel(res, 8) - - if _, err := io.Copy(w, r); err != nil { - return nil, err - } - - if err := w.Close(); err != nil { - return nil, err - } - - return res.Bytes(), nil - }, - } - - server.Encodings = append([]statigz.Encoding{enc}, server.Encodings...) -} diff --git a/vendor/github.com/vearutop/statigz/brotli/encoding_test.go b/vendor/github.com/vearutop/statigz/brotli/encoding_test.go deleted file mode 100644 index ebbe5f11a..000000000 --- a/vendor/github.com/vearutop/statigz/brotli/encoding_test.go +++ /dev/null @@ -1,27 +0,0 @@ -package brotli_test - -import ( - "strings" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/vearutop/statigz" - "github.com/vearutop/statigz/brotli" -) - -func TestAddEncoding(t *testing.T) { - s := &statigz.Server{} - s.Encodings = append(s.Encodings, statigz.GzipEncoding()) - brotli.AddEncoding(s) - - assert.Equal(t, ".br", s.Encodings[0].FileExt) - assert.Equal(t, ".gz", s.Encodings[1].FileExt) - d, err := s.Encodings[0].Decoder(nil) - assert.NoError(t, err) - assert.NotNil(t, d) - - e, err := s.Encodings[0].Encoder(strings.NewReader(strings.Repeat("A", 10000))) - assert.NoError(t, err) - assert.NotEmpty(t, e) - assert.Less(t, len(e), 100) -} diff --git a/vendor/github.com/vearutop/statigz/go.mod b/vendor/github.com/vearutop/statigz/go.mod deleted file mode 100644 index 7fab76b1b..000000000 --- a/vendor/github.com/vearutop/statigz/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/vearutop/statigz - -go 1.16 - -require ( - github.com/andybalholm/brotli v1.0.3 - github.com/bool64/dev v0.1.41 - github.com/stretchr/testify v1.4.0 -) diff --git a/vendor/github.com/vearutop/statigz/go.sum b/vendor/github.com/vearutop/statigz/go.sum deleted file mode 100644 index fa15692be..000000000 --- a/vendor/github.com/vearutop/statigz/go.sum +++ /dev/null @@ -1,15 +0,0 @@ -github.com/andybalholm/brotli v1.0.3 h1:fpcw+r1N1h0Poc1F/pHbW40cUm/lMEQslZtCkBQ0UnM= -github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/bool64/dev v0.1.41 h1:L554LCQZc3d7mtcdPUgDbSrCVbr48/30zgu0VuC/FTA= -github.com/bool64/dev v0.1.41/go.mod h1:cTHiTDNc8EewrQPy3p1obNilpMpdmlUesDkFTF2zRWU= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/vearutop/statigz/server.go b/vendor/github.com/vearutop/statigz/server.go index e131f5f69..cae26d055 100644 --- a/vendor/github.com/vearutop/statigz/server.go +++ b/vendor/github.com/vearutop/statigz/server.go @@ -216,6 +216,11 @@ func (s *Server) serve(rw http.ResponseWriter, req *http.Request, fn, suf, enc s ctype = "application/octet-stream" // Prevent unreliable Content-Type detection on compressed data. } + // This is used to enforce application/javascript MIME on Windows (https://github.com/golang/go/issues/32350) + if strings.HasSuffix(req.URL.Path, ".js") { + ctype = "application/javascript" + } + rw.Header().Set("Content-Type", ctype) rw.Header().Set("Etag", info.hash) diff --git a/vendor/github.com/vearutop/statigz/server_test.go b/vendor/github.com/vearutop/statigz/server_test.go deleted file mode 100644 index fb5aad030..000000000 --- a/vendor/github.com/vearutop/statigz/server_test.go +++ /dev/null @@ -1,352 +0,0 @@ -package statigz_test - -import ( - "compress/gzip" - "embed" - "io" - "io/fs" - "io/ioutil" - "net/http" - "net/http/httptest" - "testing" - - brotli2 "github.com/andybalholm/brotli" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "github.com/vearutop/statigz" - "github.com/vearutop/statigz/brotli" -) - -//go:embed _testdata/* -var v embed.FS - -func TestServer_ServeHTTP_std(t *testing.T) { - s := http.FileServer(http.FS(v)) - - for u, found := range map[string]bool{ - "/_testdata/favicon.png": true, - "/_testdata/nonexistent": false, - "/_testdata/swagger.json": true, - "/_testdata/deeper/swagger.json": false, - "/_testdata/deeper/openapi.json": false, - "/_testdata/": true, - "/_testdata/?abc": true, - } { - req, err := http.NewRequest(http.MethodGet, u, nil) - require.NoError(t, err) - - rw := httptest.NewRecorder() - s.ServeHTTP(rw, req) - - if found { - assert.Equal(t, "", rw.Header().Get("Content-Encoding")) - assert.Equal(t, http.StatusOK, rw.Code, u) - } else { - assert.Equal(t, http.StatusNotFound, rw.Code, u) - } - } - - for u, l := range map[string]string{ - "/_testdata/index.html": "./", - "/_testdata": "_testdata/", - "/_testdata?abc": "_testdata/?abc", - } { - req, err := http.NewRequest(http.MethodGet, u, nil) - require.NoError(t, err) - - rw := httptest.NewRecorder() - s.ServeHTTP(rw, req) - - assert.Equal(t, http.StatusMovedPermanently, rw.Code, u) - assert.Equal(t, l, rw.Header().Get("Location")) - } -} - -func TestServer_ServeHTTP_found(t *testing.T) { - s := statigz.FileServer(v, brotli.AddEncoding, statigz.EncodeOnInit) - - for u, found := range map[string]bool{ - "/_testdata/favicon.png": true, - "/_testdata/nonexistent": false, - "/_testdata/swagger.json": true, - "/_testdata/deeper/swagger.json": true, - "/_testdata/deeper/openapi.json": true, - "/_testdata/": true, - } { - req, err := http.NewRequest(http.MethodGet, u, nil) - require.NoError(t, err) - - rw := httptest.NewRecorder() - s.ServeHTTP(rw, req) - - if found { - assert.Equal(t, "", rw.Header().Get("Content-Encoding")) - assert.Equal(t, http.StatusOK, rw.Code, u) - } else { - assert.Equal(t, http.StatusNotFound, rw.Code, u) - } - } - - for u, l := range map[string]string{ - "/_testdata/index.html": "./", - "/_testdata": "_testdata/", - "/_testdata?abc": "_testdata/?abc", - } { - req, err := http.NewRequest(http.MethodGet, u, nil) - require.NoError(t, err) - - rw := httptest.NewRecorder() - s.ServeHTTP(rw, req) - - assert.Equal(t, http.StatusMovedPermanently, rw.Code, u) - assert.Equal(t, l, rw.Header().Get("Location")) - } -} - -func TestServer_ServeHTTP_error(t *testing.T) { - s := statigz.FileServer(v, brotli.AddEncoding) - - req, err := http.NewRequest(http.MethodDelete, "/", nil) - require.NoError(t, err) - - rw := httptest.NewRecorder() - s.ServeHTTP(rw, req) - - assert.Equal(t, http.StatusMethodNotAllowed, rw.Code) - assert.Equal(t, "Method Not Allowed\n\nmethod should be GET or HEAD\n", rw.Body.String()) -} - -func TestServer_ServeHTTP_acceptEncoding(t *testing.T) { - s := statigz.FileServer(v, brotli.AddEncoding, statigz.EncodeOnInit) - - req, err := http.NewRequest(http.MethodGet, "/_testdata/deeper/swagger.json", nil) - require.NoError(t, err) - - req.Header.Set("Accept-Encoding", "gzip, br") - - rw := httptest.NewRecorder() - s.ServeHTTP(rw, req) - - assert.Equal(t, http.StatusOK, rw.Code) - assert.Equal(t, "br", rw.Header().Get("Content-Encoding")) - assert.Equal(t, "3b88egjdndqox", rw.Header().Get("Etag")) - assert.Len(t, rw.Body.Bytes(), 2548) - - req.Header.Set("Accept-Encoding", "gzip") - - rw = httptest.NewRecorder() - s.ServeHTTP(rw, req) - - assert.Equal(t, http.StatusOK, rw.Code) - assert.Equal(t, "", rw.Header().Get("Content-Encoding")) - assert.Equal(t, "3b88egjdndqoxU", rw.Header().Get("Etag")) - assert.Len(t, rw.Body.Bytes(), 24919) - - req.Header.Set("Accept-Encoding", "gzip, br") - req.Header.Set("If-None-Match", "3b88egjdndqox") - - rw = httptest.NewRecorder() - s.ServeHTTP(rw, req) - - assert.Equal(t, http.StatusNotModified, rw.Code) - assert.Equal(t, "", rw.Header().Get("Content-Encoding")) - assert.Equal(t, "", rw.Header().Get("Etag")) - assert.Len(t, rw.Body.Bytes(), 0) -} - -func TestServer_ServeHTTP_badFile(t *testing.T) { - s := statigz.FileServer(v, brotli.AddEncoding, - statigz.OnError(func(rw http.ResponseWriter, r *http.Request, err error) { - assert.EqualError(t, err, "gzip: invalid header") - - _, err = rw.Write([]byte("failed")) - assert.NoError(t, err) - })) - - req, err := http.NewRequest(http.MethodGet, "/_testdata/bad.png", nil) - require.NoError(t, err) - - rw := httptest.NewRecorder() - s.ServeHTTP(rw, req) - - assert.Equal(t, http.StatusOK, rw.Code) - assert.Equal(t, "", rw.Header().Get("Content-Encoding")) - assert.Equal(t, "", rw.Header().Get("Etag")) - assert.Equal(t, "failed", rw.Body.String()) -} - -func TestServer_ServeHTTP_head(t *testing.T) { - s := statigz.FileServer(v, brotli.AddEncoding, statigz.EncodeOnInit) - - req, err := http.NewRequest(http.MethodHead, "/_testdata/swagger.json", nil) - require.NoError(t, err) - - req.Header.Set("Accept-Encoding", "gzip, br") - - rw := httptest.NewRecorder() - s.ServeHTTP(rw, req) - - assert.Equal(t, http.StatusOK, rw.Code) - assert.Equal(t, "br", rw.Header().Get("Content-Encoding")) - assert.Equal(t, "1bp69hxb9nd93.br", rw.Header().Get("Etag")) - assert.Len(t, rw.Body.String(), 0) -} - -func TestServer_ServeHTTP_head_gz(t *testing.T) { - s := statigz.FileServer(v, statigz.EncodeOnInit) - - req, err := http.NewRequest(http.MethodHead, "/_testdata/swagger.json", nil) - require.NoError(t, err) - - req.Header.Set("Accept-Encoding", "gzip, br") - - rw := httptest.NewRecorder() - s.ServeHTTP(rw, req) - - assert.Equal(t, http.StatusOK, rw.Code) - assert.Equal(t, "gzip", rw.Header().Get("Content-Encoding")) - assert.Equal(t, "1bp69hxb9nd93.gz", rw.Header().Get("Etag")) - assert.Len(t, rw.Body.String(), 0) -} - -func BenchmarkServer_ServeHTTP(b *testing.B) { - s := statigz.FileServer(v, statigz.EncodeOnInit) - - req, err := http.NewRequest(http.MethodGet, "/_testdata/swagger.json", nil) - require.NoError(b, err) - - req.Header.Set("Accept-Encoding", "gzip, br") - - b.ResetTimer() - b.ReportAllocs() - - for i := 0; i < b.N; i++ { - rw := httptest.NewRecorder() - s.ServeHTTP(rw, req) - } -} - -func TestServer_ServeHTTP_get_gz(t *testing.T) { - s := statigz.FileServer(v, statigz.EncodeOnInit) - - req, err := http.NewRequest(http.MethodGet, "/_testdata/swagger.json", nil) - require.NoError(t, err) - - req.Header.Set("Accept-Encoding", "gzip, br") - - rw := httptest.NewRecorder() - s.ServeHTTP(rw, req) - - assert.Equal(t, http.StatusOK, rw.Code) - assert.Equal(t, "gzip", rw.Header().Get("Content-Encoding")) - assert.Equal(t, "1bp69hxb9nd93.gz", rw.Header().Get("Etag")) - assert.Equal(t, "Accept-Encoding", rw.Header().Get("Vary")) - assert.NotEmpty(t, rw.Body.String()) - - r, err := gzip.NewReader(rw.Body) - assert.NoError(t, err) - - decoded, err := io.ReadAll(r) - assert.NoError(t, err) - - raw, err := ioutil.ReadFile("_testdata/swagger.json") - assert.NoError(t, err) - - assert.Equal(t, raw, decoded) -} - -func TestServer_ServeHTTP_get_br(t *testing.T) { - s := statigz.FileServer(v, statigz.EncodeOnInit, brotli.AddEncoding) - - req, err := http.NewRequest(http.MethodGet, "/_testdata/swagger.json", nil) - require.NoError(t, err) - - req.Header.Set("Accept-Encoding", "gzip, br") - - rw := httptest.NewRecorder() - s.ServeHTTP(rw, req) - - assert.Equal(t, http.StatusOK, rw.Code) - assert.Equal(t, "br", rw.Header().Get("Content-Encoding")) - assert.Equal(t, "1bp69hxb9nd93.br", rw.Header().Get("Etag")) - assert.NotEmpty(t, rw.Body.String()) - - r := brotli2.NewReader(rw.Body) - - decoded, err := io.ReadAll(r) - assert.NoError(t, err) - - raw, err := ioutil.ReadFile("_testdata/swagger.json") - assert.NoError(t, err) - - assert.Equal(t, raw, decoded) -} - -func TestServer_ServeHTTP_indexCompressed(t *testing.T) { - s := statigz.FileServer(v) - - req, err := http.NewRequest(http.MethodGet, "/_testdata/", nil) - require.NoError(t, err) - - req.Header.Set("Accept-Encoding", "gzip, br") - - rw := httptest.NewRecorder() - s.ServeHTTP(rw, req) - - assert.Equal(t, http.StatusOK, rw.Code) - assert.Equal(t, "gzip", rw.Header().Get("Content-Encoding")) - assert.Equal(t, "45pls0g4wm91", rw.Header().Get("Etag")) - assert.NotEmpty(t, rw.Body.String()) - - r, err := gzip.NewReader(rw.Body) - assert.NoError(t, err) - - decoded, err := io.ReadAll(r) - assert.NoError(t, err) - - assert.Equal(t, "Hello!", string(decoded)) -} - -func TestServer_ServeHTTP_sub(t *testing.T) { - vs, err := fs.Sub(v, "_testdata") - require.NoError(t, err) - - s := statigz.FileServer(vs.(fs.ReadDirFS), brotli.AddEncoding, statigz.EncodeOnInit) - - for u, found := range map[string]bool{ - "/favicon.png": true, - "/nonexistent": false, - "/swagger.json": true, - "/deeper/swagger.json": true, - "/deeper/openapi.json": true, - "/": true, - } { - req, err := http.NewRequest(http.MethodGet, u, nil) - require.NoError(t, err) - - rw := httptest.NewRecorder() - s.ServeHTTP(rw, req) - - if found { - assert.Equal(t, "", rw.Header().Get("Content-Encoding")) - assert.Equal(t, http.StatusOK, rw.Code, u) - } else { - assert.Equal(t, http.StatusNotFound, rw.Code, u) - } - } - - for u, l := range map[string]string{ - "/index.html": "./", - "/deeper": "deeper/", - "/deeper?abc": "deeper/?abc", - } { - req, err := http.NewRequest(http.MethodGet, u, nil) - require.NoError(t, err) - - rw := httptest.NewRecorder() - s.ServeHTTP(rw, req) - - assert.Equal(t, http.StatusMovedPermanently, rw.Code, u) - assert.Equal(t, l, rw.Header().Get("Location")) - } -} diff --git a/vendor/modules.txt b/vendor/modules.txt index dfa1a43ca..f5058de03 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -339,8 +339,9 @@ github.com/tidwall/pretty # github.com/urfave/cli/v2 v2.1.1 ## explicit; go 1.11 github.com/urfave/cli/v2 -# github.com/vearutop/statigz v1.1.5 +# github.com/vearutop/statigz v1.1.6 ## explicit; go 1.16 +github.com/vearutop/statigz # github.com/vektah/dataloaden v0.2.1-0.20190515034641-a19b9a6e7c9e ## explicit github.com/vektah/dataloaden