[chore] update viper version (#2539)

* update viper version

* removes our last uses of the slice package

* fix tests
This commit is contained in:
kim
2024-01-17 14:54:30 +00:00
committed by GitHub
parent c5eced5fd1
commit 906639ad7e
166 changed files with 11771 additions and 2782 deletions

View File

@ -12,6 +12,9 @@ import (
"sort"
"strconv"
"strings"
"golang.org/x/text/encoding/unicode"
"golang.org/x/text/transform"
)
const (
@ -20,9 +23,13 @@ const (
// Pattern for detecting valid variable within a value
variablePattern = `(\\)?(\$)(\{?([A-Z0-9_]+)?\}?)`
)
// Byte order mark character
bom = "\xef\xbb\xbf"
// Byte order mark character
var (
bomUTF8 = []byte("\xEF\xBB\xBF")
bomUTF16LE = []byte("\xFF\xFE")
bomUTF16BE = []byte("\xFE\xFF")
)
// Env holds key/value pair of valid environment variable
@ -203,19 +210,40 @@ func splitLines(data []byte, atEOF bool) (advance int, token []byte, err error)
func strictParse(r io.Reader, override bool) (Env, error) {
env := make(Env)
scanner := bufio.NewScanner(r)
buf := new(bytes.Buffer)
tee := io.TeeReader(r, buf)
// There can be a maximum of 3 BOM bytes.
bomByteBuffer := make([]byte, 3)
_, err := tee.Read(bomByteBuffer)
if err != nil && err != io.EOF {
return env, err
}
z := io.MultiReader(buf, r)
// We chooes a different scanner depending on file encoding.
var scanner *bufio.Scanner
if bytes.HasPrefix(bomByteBuffer, bomUTF8) {
scanner = bufio.NewScanner(transform.NewReader(z, unicode.UTF8BOM.NewDecoder()))
} else if bytes.HasPrefix(bomByteBuffer, bomUTF16LE) {
scanner = bufio.NewScanner(transform.NewReader(z, unicode.UTF16(unicode.LittleEndian, unicode.ExpectBOM).NewDecoder()))
} else if bytes.HasPrefix(bomByteBuffer, bomUTF16BE) {
scanner = bufio.NewScanner(transform.NewReader(z, unicode.UTF16(unicode.BigEndian, unicode.ExpectBOM).NewDecoder()))
} else {
scanner = bufio.NewScanner(z)
}
scanner.Split(splitLines)
firstLine := true
for scanner.Scan() {
line := strings.TrimSpace(scanner.Text())
if firstLine {
line = strings.TrimPrefix(line, bom)
firstLine = false
if err := scanner.Err(); err != nil {
return env, err
}
line := strings.TrimSpace(scanner.Text())
if line == "" || line[0] == '#' {
continue
}
@ -263,7 +291,7 @@ func strictParse(r io.Reader, override bool) (Env, error) {
}
}
return env, nil
return env, scanner.Err()
}
var (