[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
commit 906639ad7e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
166 changed files with 11771 additions and 2782 deletions

View file

@ -1,5 +1,42 @@
# Changelog
## [1.5.0] - 2023-08-15
### Fixed
- Use io.Reader instead of custom Reader
## [1.5.0] - 2023-08-15
### Added
- Support for reading UTF16 files
### Fixed
- Scanner error handling
- Reader error handling
## [1.4.2] - 2023-01-11
### Fixed
- Env var initialization
### Changed
- More consitent line splitting
## [1.4.1] - 2022-08-23
### Fixed
- Missing file close
### Changed
- Updated dependencies
## [1.4.0] - 2022-06-02
### Added

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 (