mirror of
https://github.com/git-pkgs/proxy.git
synced 2026-11-10 08:09:17 -05:00
48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
|
|
package server
|
||
|
|
|
||
|
|
import (
|
||
|
|
"archive/tar"
|
||
|
|
"archive/zip"
|
||
|
|
"bytes"
|
||
|
|
"compress/gzip"
|
||
|
|
"io"
|
||
|
|
)
|
||
|
|
|
||
|
|
// npmTarball builds an npm package tarball holding manifest as
|
||
|
|
// package/package.json. Building an archive in memory cannot fail, so errors
|
||
|
|
// panic.
|
||
|
|
func npmTarball(manifest string) string {
|
||
|
|
var buf bytes.Buffer
|
||
|
|
gz := gzip.NewWriter(&buf)
|
||
|
|
tw := tar.NewWriter(gz)
|
||
|
|
must(tw.WriteHeader(&tar.Header{Name: "package/package.json", Mode: 0o644, Size: int64(len(manifest))}))
|
||
|
|
_, err := io.WriteString(tw, manifest)
|
||
|
|
must(err)
|
||
|
|
must(tw.Close())
|
||
|
|
must(gz.Close())
|
||
|
|
return buf.String()
|
||
|
|
}
|
||
|
|
|
||
|
|
// composerZip builds a Composer dist archive holding manifest as composer.json.
|
||
|
|
func composerZip(manifest string) string {
|
||
|
|
var buf bytes.Buffer
|
||
|
|
zw := zip.NewWriter(&buf)
|
||
|
|
w, err := zw.Create("composer.json")
|
||
|
|
must(err)
|
||
|
|
_, err = io.WriteString(w, manifest)
|
||
|
|
must(err)
|
||
|
|
must(zw.Close())
|
||
|
|
return buf.String()
|
||
|
|
}
|
||
|
|
|
||
|
|
func must(err error) {
|
||
|
|
if err != nil {
|
||
|
|
panic(err)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
var (
|
||
|
|
requestTarball = npmTarball(`{"name":"request","version":"2.88.3","dependencies":{"qs":"~6.5.2"}}`)
|
||
|
|
nodeTarball = npmTarball(`{"name":"@types/node","version":"20.1.0"}`)
|
||
|
|
monologZip = composerZip(`{"name":"monolog/monolog","require":{"php":">=8.1","psr/log":"^3.0"}}`)
|
||
|
|
)
|