diff options
| author | 2022-05-02 14:05:18 +0100 | |
|---|---|---|
| committer | 2022-05-02 15:05:18 +0200 | |
| commit | b56dae8120d43b9acd3d3ed4d40100ffab7b972a (patch) | |
| tree | d55d30589d8a8499ed3d5eecba163abc9fa78c27 /vendor/github.com/spf13/viper/internal/encoding | |
| parent | add extra indexes as a migration (#527) (diff) | |
| download | gotosocial-b56dae8120d43b9acd3d3ed4d40100ffab7b972a.tar.xz | |
[chore] Update all but bun libraries (#526)
* update all but bun libraries
Signed-off-by: kim <grufwub@gmail.com>
* remove my personal build script changes
Signed-off-by: kim <grufwub@gmail.com>
Diffstat (limited to 'vendor/github.com/spf13/viper/internal/encoding')
15 files changed, 514 insertions, 38 deletions
| diff --git a/vendor/github.com/spf13/viper/internal/encoding/decoder.go b/vendor/github.com/spf13/viper/internal/encoding/decoder.go index 08b1bb66b..f472e9ff1 100644 --- a/vendor/github.com/spf13/viper/internal/encoding/decoder.go +++ b/vendor/github.com/spf13/viper/internal/encoding/decoder.go @@ -4,10 +4,10 @@ import (  	"sync"  ) -// Decoder decodes the contents of b into a v representation. +// Decoder decodes the contents of b into v.  // It's primarily used for decoding contents of a file into a map[string]interface{}.  type Decoder interface { -	Decode(b []byte, v interface{}) error +	Decode(b []byte, v map[string]interface{}) error  }  const ( @@ -48,7 +48,7 @@ func (e *DecoderRegistry) RegisterDecoder(format string, enc Decoder) error {  }  // Decode calls the underlying Decoder based on the format. -func (e *DecoderRegistry) Decode(format string, b []byte, v interface{}) error { +func (e *DecoderRegistry) Decode(format string, b []byte, v map[string]interface{}) error {  	e.mu.RLock()  	decoder, ok := e.decoders[format]  	e.mu.RUnlock() diff --git a/vendor/github.com/spf13/viper/internal/encoding/dotenv/codec.go b/vendor/github.com/spf13/viper/internal/encoding/dotenv/codec.go new file mode 100644 index 000000000..4485063b6 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/dotenv/codec.go @@ -0,0 +1,61 @@ +package dotenv + +import ( +	"bytes" +	"fmt" +	"sort" +	"strings" + +	"github.com/subosito/gotenv" +) + +const keyDelimiter = "_" + +// Codec implements the encoding.Encoder and encoding.Decoder interfaces for encoding data containing environment variables +// (commonly called as dotenv format). +type Codec struct{} + +func (Codec) Encode(v map[string]interface{}) ([]byte, error) { +	flattened := map[string]interface{}{} + +	flattened = flattenAndMergeMap(flattened, v, "", keyDelimiter) + +	keys := make([]string, 0, len(flattened)) + +	for key := range flattened { +		keys = append(keys, key) +	} + +	sort.Strings(keys) + +	var buf bytes.Buffer + +	for _, key := range keys { +		_, err := buf.WriteString(fmt.Sprintf("%v=%v\n", strings.ToUpper(key), flattened[key])) +		if err != nil { +			return nil, err +		} +	} + +	return buf.Bytes(), nil +} + +func (Codec) Decode(b []byte, v map[string]interface{}) error { +	var buf bytes.Buffer + +	_, err := buf.Write(b) +	if err != nil { +		return err +	} + +	env, err := gotenv.StrictParse(&buf) +	if err != nil { +		return err +	} + +	for key, value := range env { +		v[key] = value +	} + +	return nil +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/dotenv/map_utils.go b/vendor/github.com/spf13/viper/internal/encoding/dotenv/map_utils.go new file mode 100644 index 000000000..ce6e6efa3 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/dotenv/map_utils.go @@ -0,0 +1,41 @@ +package dotenv + +import ( +	"strings" + +	"github.com/spf13/cast" +) + +// flattenAndMergeMap recursively flattens the given map into a new map +// Code is based on the function with the same name in tha main package. +// TODO: move it to a common place +func flattenAndMergeMap(shadow map[string]interface{}, m map[string]interface{}, prefix string, delimiter string) map[string]interface{} { +	if shadow != nil && prefix != "" && shadow[prefix] != nil { +		// prefix is shadowed => nothing more to flatten +		return shadow +	} +	if shadow == nil { +		shadow = make(map[string]interface{}) +	} + +	var m2 map[string]interface{} +	if prefix != "" { +		prefix += delimiter +	} +	for k, val := range m { +		fullKey := prefix + k +		switch val.(type) { +		case map[string]interface{}: +			m2 = val.(map[string]interface{}) +		case map[interface{}]interface{}: +			m2 = cast.ToStringMap(val) +		default: +			// immediate value +			shadow[strings.ToLower(fullKey)] = val +			continue +		} +		// recursively merge to shadow map +		shadow = flattenAndMergeMap(shadow, m2, fullKey, delimiter) +	} +	return shadow +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/encoder.go b/vendor/github.com/spf13/viper/internal/encoding/encoder.go index 82c7996cb..2341bf235 100644 --- a/vendor/github.com/spf13/viper/internal/encoding/encoder.go +++ b/vendor/github.com/spf13/viper/internal/encoding/encoder.go @@ -7,7 +7,7 @@ import (  // Encoder encodes the contents of v into a byte representation.  // It's primarily used for encoding a map[string]interface{} into a file format.  type Encoder interface { -	Encode(v interface{}) ([]byte, error) +	Encode(v map[string]interface{}) ([]byte, error)  }  const ( @@ -47,7 +47,7 @@ func (e *EncoderRegistry) RegisterEncoder(format string, enc Encoder) error {  	return nil  } -func (e *EncoderRegistry) Encode(format string, v interface{}) ([]byte, error) { +func (e *EncoderRegistry) Encode(format string, v map[string]interface{}) ([]byte, error) {  	e.mu.RLock()  	encoder, ok := e.encoders[format]  	e.mu.RUnlock() diff --git a/vendor/github.com/spf13/viper/internal/encoding/hcl/codec.go b/vendor/github.com/spf13/viper/internal/encoding/hcl/codec.go index f3e4ab122..7fde8e4bc 100644 --- a/vendor/github.com/spf13/viper/internal/encoding/hcl/codec.go +++ b/vendor/github.com/spf13/viper/internal/encoding/hcl/codec.go @@ -12,7 +12,7 @@ import (  // TODO: add printer config to the codec?  type Codec struct{} -func (Codec) Encode(v interface{}) ([]byte, error) { +func (Codec) Encode(v map[string]interface{}) ([]byte, error) {  	b, err := json.Marshal(v)  	if err != nil {  		return nil, err @@ -35,6 +35,6 @@ func (Codec) Encode(v interface{}) ([]byte, error) {  	return buf.Bytes(), nil  } -func (Codec) Decode(b []byte, v interface{}) error { -	return hcl.Unmarshal(b, v) +func (Codec) Decode(b []byte, v map[string]interface{}) error { +	return hcl.Unmarshal(b, &v)  } diff --git a/vendor/github.com/spf13/viper/internal/encoding/ini/codec.go b/vendor/github.com/spf13/viper/internal/encoding/ini/codec.go new file mode 100644 index 000000000..9acd87fc3 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/ini/codec.go @@ -0,0 +1,99 @@ +package ini + +import ( +	"bytes" +	"sort" +	"strings" + +	"github.com/spf13/cast" +	"gopkg.in/ini.v1" +) + +// LoadOptions contains all customized options used for load data source(s). +// This type is added here for convenience: this way consumers can import a single package called "ini". +type LoadOptions = ini.LoadOptions + +// Codec implements the encoding.Encoder and encoding.Decoder interfaces for INI encoding. +type Codec struct { +	KeyDelimiter string +	LoadOptions  LoadOptions +} + +func (c Codec) Encode(v map[string]interface{}) ([]byte, error) { +	cfg := ini.Empty() +	ini.PrettyFormat = false + +	flattened := map[string]interface{}{} + +	flattened = flattenAndMergeMap(flattened, v, "", c.keyDelimiter()) + +	keys := make([]string, 0, len(flattened)) + +	for key := range flattened { +		keys = append(keys, key) +	} + +	sort.Strings(keys) + +	for _, key := range keys { +		sectionName, keyName := "", key + +		lastSep := strings.LastIndex(key, ".") +		if lastSep != -1 { +			sectionName = key[:(lastSep)] +			keyName = key[(lastSep + 1):] +		} + +		// TODO: is this a good idea? +		if sectionName == "default" { +			sectionName = "" +		} + +		cfg.Section(sectionName).Key(keyName).SetValue(cast.ToString(flattened[key])) +	} + +	var buf bytes.Buffer + +	_, err := cfg.WriteTo(&buf) +	if err != nil { +		return nil, err +	} + +	return buf.Bytes(), nil +} + +func (c Codec) Decode(b []byte, v map[string]interface{}) error { +	cfg := ini.Empty(c.LoadOptions) + +	err := cfg.Append(b) +	if err != nil { +		return err +	} + +	sections := cfg.Sections() + +	for i := 0; i < len(sections); i++ { +		section := sections[i] +		keys := section.Keys() + +		for j := 0; j < len(keys); j++ { +			key := keys[j] +			value := cfg.Section(section.Name()).Key(key.Name()).String() + +			deepestMap := deepSearch(v, strings.Split(section.Name(), c.keyDelimiter())) + +			// set innermost value +			deepestMap[key.Name()] = value +		} +	} + +	return nil +} + +func (c Codec) keyDelimiter() string { +	if c.KeyDelimiter == "" { +		return "." +	} + +	return c.KeyDelimiter +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/ini/map_utils.go b/vendor/github.com/spf13/viper/internal/encoding/ini/map_utils.go new file mode 100644 index 000000000..8329856b5 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/ini/map_utils.go @@ -0,0 +1,74 @@ +package ini + +import ( +	"strings" + +	"github.com/spf13/cast" +) + +// THIS CODE IS COPIED HERE: IT SHOULD NOT BE MODIFIED +// AT SOME POINT IT WILL BE MOVED TO A COMMON PLACE +// deepSearch scans deep maps, following the key indexes listed in the +// sequence "path". +// The last value is expected to be another map, and is returned. +// +// In case intermediate keys do not exist, or map to a non-map value, +// a new map is created and inserted, and the search continues from there: +// the initial map "m" may be modified! +func deepSearch(m map[string]interface{}, path []string) map[string]interface{} { +	for _, k := range path { +		m2, ok := m[k] +		if !ok { +			// intermediate key does not exist +			// => create it and continue from there +			m3 := make(map[string]interface{}) +			m[k] = m3 +			m = m3 +			continue +		} +		m3, ok := m2.(map[string]interface{}) +		if !ok { +			// intermediate key is a value +			// => replace with a new map +			m3 = make(map[string]interface{}) +			m[k] = m3 +		} +		// continue search from here +		m = m3 +	} +	return m +} + +// flattenAndMergeMap recursively flattens the given map into a new map +// Code is based on the function with the same name in tha main package. +// TODO: move it to a common place +func flattenAndMergeMap(shadow map[string]interface{}, m map[string]interface{}, prefix string, delimiter string) map[string]interface{} { +	if shadow != nil && prefix != "" && shadow[prefix] != nil { +		// prefix is shadowed => nothing more to flatten +		return shadow +	} +	if shadow == nil { +		shadow = make(map[string]interface{}) +	} + +	var m2 map[string]interface{} +	if prefix != "" { +		prefix += delimiter +	} +	for k, val := range m { +		fullKey := prefix + k +		switch val.(type) { +		case map[string]interface{}: +			m2 = val.(map[string]interface{}) +		case map[interface{}]interface{}: +			m2 = cast.ToStringMap(val) +		default: +			// immediate value +			shadow[strings.ToLower(fullKey)] = val +			continue +		} +		// recursively merge to shadow map +		shadow = flattenAndMergeMap(shadow, m2, fullKey, delimiter) +	} +	return shadow +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/javaproperties/codec.go b/vendor/github.com/spf13/viper/internal/encoding/javaproperties/codec.go new file mode 100644 index 000000000..b8a2251c1 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/javaproperties/codec.go @@ -0,0 +1,86 @@ +package javaproperties + +import ( +	"bytes" +	"sort" +	"strings" + +	"github.com/magiconair/properties" +	"github.com/spf13/cast" +) + +// Codec implements the encoding.Encoder and encoding.Decoder interfaces for Java properties encoding. +type Codec struct { +	KeyDelimiter string + +	// Store read properties on the object so that we can write back in order with comments. +	// This will only be used if the configuration read is a properties file. +	// TODO: drop this feature in v2 +	// TODO: make use of the global properties object optional +	Properties *properties.Properties +} + +func (c *Codec) Encode(v map[string]interface{}) ([]byte, error) { +	if c.Properties == nil { +		c.Properties = properties.NewProperties() +	} + +	flattened := map[string]interface{}{} + +	flattened = flattenAndMergeMap(flattened, v, "", c.keyDelimiter()) + +	keys := make([]string, 0, len(flattened)) + +	for key := range flattened { +		keys = append(keys, key) +	} + +	sort.Strings(keys) + +	for _, key := range keys { +		_, _, err := c.Properties.Set(key, cast.ToString(flattened[key])) +		if err != nil { +			return nil, err +		} +	} + +	var buf bytes.Buffer + +	_, err := c.Properties.WriteComment(&buf, "#", properties.UTF8) +	if err != nil { +		return nil, err +	} + +	return buf.Bytes(), nil +} + +func (c *Codec) Decode(b []byte, v map[string]interface{}) error { +	var err error +	c.Properties, err = properties.Load(b, properties.UTF8) +	if err != nil { +		return err +	} + +	for _, key := range c.Properties.Keys() { +		// ignore existence check: we know it's there +		value, _ := c.Properties.Get(key) + +		// recursively build nested maps +		path := strings.Split(key, c.keyDelimiter()) +		lastKey := strings.ToLower(path[len(path)-1]) +		deepestMap := deepSearch(v, path[0:len(path)-1]) + +		// set innermost value +		deepestMap[lastKey] = value +	} + +	return nil +} + +func (c Codec) keyDelimiter() string { +	if c.KeyDelimiter == "" { +		return "." +	} + +	return c.KeyDelimiter +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/javaproperties/map_utils.go b/vendor/github.com/spf13/viper/internal/encoding/javaproperties/map_utils.go new file mode 100644 index 000000000..93755cac1 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/javaproperties/map_utils.go @@ -0,0 +1,74 @@ +package javaproperties + +import ( +	"strings" + +	"github.com/spf13/cast" +) + +// THIS CODE IS COPIED HERE: IT SHOULD NOT BE MODIFIED +// AT SOME POINT IT WILL BE MOVED TO A COMMON PLACE +// deepSearch scans deep maps, following the key indexes listed in the +// sequence "path". +// The last value is expected to be another map, and is returned. +// +// In case intermediate keys do not exist, or map to a non-map value, +// a new map is created and inserted, and the search continues from there: +// the initial map "m" may be modified! +func deepSearch(m map[string]interface{}, path []string) map[string]interface{} { +	for _, k := range path { +		m2, ok := m[k] +		if !ok { +			// intermediate key does not exist +			// => create it and continue from there +			m3 := make(map[string]interface{}) +			m[k] = m3 +			m = m3 +			continue +		} +		m3, ok := m2.(map[string]interface{}) +		if !ok { +			// intermediate key is a value +			// => replace with a new map +			m3 = make(map[string]interface{}) +			m[k] = m3 +		} +		// continue search from here +		m = m3 +	} +	return m +} + +// flattenAndMergeMap recursively flattens the given map into a new map +// Code is based on the function with the same name in tha main package. +// TODO: move it to a common place +func flattenAndMergeMap(shadow map[string]interface{}, m map[string]interface{}, prefix string, delimiter string) map[string]interface{} { +	if shadow != nil && prefix != "" && shadow[prefix] != nil { +		// prefix is shadowed => nothing more to flatten +		return shadow +	} +	if shadow == nil { +		shadow = make(map[string]interface{}) +	} + +	var m2 map[string]interface{} +	if prefix != "" { +		prefix += delimiter +	} +	for k, val := range m { +		fullKey := prefix + k +		switch val.(type) { +		case map[string]interface{}: +			m2 = val.(map[string]interface{}) +		case map[interface{}]interface{}: +			m2 = cast.ToStringMap(val) +		default: +			// immediate value +			shadow[strings.ToLower(fullKey)] = val +			continue +		} +		// recursively merge to shadow map +		shadow = flattenAndMergeMap(shadow, m2, fullKey, delimiter) +	} +	return shadow +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/json/codec.go b/vendor/github.com/spf13/viper/internal/encoding/json/codec.go index dff9ec982..1b7caaceb 100644 --- a/vendor/github.com/spf13/viper/internal/encoding/json/codec.go +++ b/vendor/github.com/spf13/viper/internal/encoding/json/codec.go @@ -7,11 +7,11 @@ import (  // Codec implements the encoding.Encoder and encoding.Decoder interfaces for JSON encoding.  type Codec struct{} -func (Codec) Encode(v interface{}) ([]byte, error) { +func (Codec) Encode(v map[string]interface{}) ([]byte, error) {  	// TODO: expose prefix and indent in the Codec as setting?  	return json.MarshalIndent(v, "", "  ")  } -func (Codec) Decode(b []byte, v interface{}) error { -	return json.Unmarshal(b, v) +func (Codec) Decode(b []byte, v map[string]interface{}) error { +	return json.Unmarshal(b, &v)  } diff --git a/vendor/github.com/spf13/viper/internal/encoding/toml/codec.go b/vendor/github.com/spf13/viper/internal/encoding/toml/codec.go index c043802b9..ff1112cac 100644 --- a/vendor/github.com/spf13/viper/internal/encoding/toml/codec.go +++ b/vendor/github.com/spf13/viper/internal/encoding/toml/codec.go @@ -1,3 +1,6 @@ +//go:build !viper_toml2 +// +build !viper_toml2 +  package toml  import ( @@ -7,39 +10,30 @@ import (  // Codec implements the encoding.Encoder and encoding.Decoder interfaces for TOML encoding.  type Codec struct{} -func (Codec) Encode(v interface{}) ([]byte, error) { -	if m, ok := v.(map[string]interface{}); ok { -		t, err := toml.TreeFromMap(m) -		if err != nil { -			return nil, err -		} - -		s, err := t.ToTomlString() -		if err != nil { -			return nil, err -		} +func (Codec) Encode(v map[string]interface{}) ([]byte, error) { +	t, err := toml.TreeFromMap(v) +	if err != nil { +		return nil, err +	} -		return []byte(s), nil +	s, err := t.ToTomlString() +	if err != nil { +		return nil, err  	} -	return toml.Marshal(v) +	return []byte(s), nil  } -func (Codec) Decode(b []byte, v interface{}) error { +func (Codec) Decode(b []byte, v map[string]interface{}) error {  	tree, err := toml.LoadBytes(b)  	if err != nil {  		return err  	} -	if m, ok := v.(*map[string]interface{}); ok { -		vmap := *m -		tmap := tree.ToMap() -		for k, v := range tmap { -			vmap[k] = v -		} - -		return nil +	tmap := tree.ToMap() +	for key, value := range tmap { +		v[key] = value  	} -	return tree.Unmarshal(v) +	return nil  } diff --git a/vendor/github.com/spf13/viper/internal/encoding/toml/codec2.go b/vendor/github.com/spf13/viper/internal/encoding/toml/codec2.go new file mode 100644 index 000000000..566b70628 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/toml/codec2.go @@ -0,0 +1,19 @@ +//go:build viper_toml2 +// +build viper_toml2 + +package toml + +import ( +	"github.com/pelletier/go-toml/v2" +) + +// Codec implements the encoding.Encoder and encoding.Decoder interfaces for TOML encoding. +type Codec struct{} + +func (Codec) Encode(v map[string]interface{}) ([]byte, error) { +	return toml.Marshal(v) +} + +func (Codec) Decode(b []byte, v map[string]interface{}) error { +	return toml.Unmarshal(b, &v) +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/yaml/codec.go b/vendor/github.com/spf13/viper/internal/encoding/yaml/codec.go index f94b26996..24cc19dfc 100644 --- a/vendor/github.com/spf13/viper/internal/encoding/yaml/codec.go +++ b/vendor/github.com/spf13/viper/internal/encoding/yaml/codec.go @@ -1,14 +1,14 @@  package yaml -import "gopkg.in/yaml.v2" +// import "gopkg.in/yaml.v2"  // Codec implements the encoding.Encoder and encoding.Decoder interfaces for YAML encoding.  type Codec struct{} -func (Codec) Encode(v interface{}) ([]byte, error) { +func (Codec) Encode(v map[string]interface{}) ([]byte, error) {  	return yaml.Marshal(v)  } -func (Codec) Decode(b []byte, v interface{}) error { -	return yaml.Unmarshal(b, v) +func (Codec) Decode(b []byte, v map[string]interface{}) error { +	return yaml.Unmarshal(b, &v)  } diff --git a/vendor/github.com/spf13/viper/internal/encoding/yaml/yaml2.go b/vendor/github.com/spf13/viper/internal/encoding/yaml/yaml2.go new file mode 100644 index 000000000..ca29b84db --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/yaml/yaml2.go @@ -0,0 +1,14 @@ +//go:build !viper_yaml3 +// +build !viper_yaml3 + +package yaml + +import yamlv2 "gopkg.in/yaml.v2" + +var yaml = struct { +	Marshal   func(in interface{}) (out []byte, err error) +	Unmarshal func(in []byte, out interface{}) (err error) +}{ +	Marshal:   yamlv2.Marshal, +	Unmarshal: yamlv2.Unmarshal, +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/yaml/yaml3.go b/vendor/github.com/spf13/viper/internal/encoding/yaml/yaml3.go new file mode 100644 index 000000000..96b8957fa --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/yaml/yaml3.go @@ -0,0 +1,14 @@ +//go:build viper_yaml3 +// +build viper_yaml3 + +package yaml + +import yamlv3 "gopkg.in/yaml.v3" + +var yaml = struct { +	Marshal   func(in interface{}) (out []byte, err error) +	Unmarshal func(in []byte, out interface{}) (err error) +}{ +	Marshal:   yamlv3.Marshal, +	Unmarshal: yamlv3.Unmarshal, +} | 
