mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 17:12:24 -05:00 
			
		
		
		
	[chore] update bun + extras v1.1.16 -> v1.1.17 (#2534)
This commit is contained in:
		
					parent
					
						
							
								a43ce99da9
							
						
					
				
			
			
				commit
				
					
						6433a50582
					
				
			
		
					 53 changed files with 1426 additions and 294 deletions
				
			
		
							
								
								
									
										189
									
								
								vendor/github.com/go-logr/logr/funcr/funcr.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										189
									
								
								vendor/github.com/go-logr/logr/funcr/funcr.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -100,6 +100,11 @@ type Options struct { | |||
| 	// details, see docs for Go's time.Layout. | ||||
| 	TimestampFormat string | ||||
| 
 | ||||
| 	// LogInfoLevel tells funcr what key to use to log the info level. | ||||
| 	// If not specified, the info level will be logged as "level". | ||||
| 	// If this is set to "", the info level will not be logged at all. | ||||
| 	LogInfoLevel *string | ||||
| 
 | ||||
| 	// Verbosity tells funcr which V logs to produce.  Higher values enable | ||||
| 	// more logs.  Info logs at or below this level will be written, while logs | ||||
| 	// above this level will be discarded. | ||||
|  | @ -213,6 +218,10 @@ func newFormatter(opts Options, outfmt outputFormat) Formatter { | |||
| 	if opts.MaxLogDepth == 0 { | ||||
| 		opts.MaxLogDepth = defaultMaxLogDepth | ||||
| 	} | ||||
| 	if opts.LogInfoLevel == nil { | ||||
| 		opts.LogInfoLevel = new(string) | ||||
| 		*opts.LogInfoLevel = "level" | ||||
| 	} | ||||
| 	f := Formatter{ | ||||
| 		outputFormat: outfmt, | ||||
| 		prefix:       "", | ||||
|  | @ -227,12 +236,15 @@ func newFormatter(opts Options, outfmt outputFormat) Formatter { | |||
| // implementation. It should be constructed with NewFormatter. Some of | ||||
| // its methods directly implement logr.LogSink. | ||||
| type Formatter struct { | ||||
| 	outputFormat outputFormat | ||||
| 	prefix       string | ||||
| 	values       []any | ||||
| 	valuesStr    string | ||||
| 	depth        int | ||||
| 	opts         *Options | ||||
| 	outputFormat    outputFormat | ||||
| 	prefix          string | ||||
| 	values          []any | ||||
| 	valuesStr       string | ||||
| 	parentValuesStr string | ||||
| 	depth           int | ||||
| 	opts            *Options | ||||
| 	group           string // for slog groups | ||||
| 	groupDepth      int | ||||
| } | ||||
| 
 | ||||
| // outputFormat indicates which outputFormat to use. | ||||
|  | @ -253,33 +265,62 @@ func (f Formatter) render(builtins, args []any) string { | |||
| 	// Empirically bytes.Buffer is faster than strings.Builder for this. | ||||
| 	buf := bytes.NewBuffer(make([]byte, 0, 1024)) | ||||
| 	if f.outputFormat == outputJSON { | ||||
| 		buf.WriteByte('{') | ||||
| 		buf.WriteByte('{') // for the whole line | ||||
| 	} | ||||
| 
 | ||||
| 	vals := builtins | ||||
| 	if hook := f.opts.RenderBuiltinsHook; hook != nil { | ||||
| 		vals = hook(f.sanitize(vals)) | ||||
| 	} | ||||
| 	f.flatten(buf, vals, false, false) // keys are ours, no need to escape | ||||
| 	continuing := len(builtins) > 0 | ||||
| 	if len(f.valuesStr) > 0 { | ||||
| 
 | ||||
| 	if f.parentValuesStr != "" { | ||||
| 		if continuing { | ||||
| 			if f.outputFormat == outputJSON { | ||||
| 				buf.WriteByte(',') | ||||
| 			} else { | ||||
| 				buf.WriteByte(' ') | ||||
| 			} | ||||
| 			buf.WriteByte(f.comma()) | ||||
| 		} | ||||
| 		buf.WriteString(f.parentValuesStr) | ||||
| 		continuing = true | ||||
| 		buf.WriteString(f.valuesStr) | ||||
| 	} | ||||
| 
 | ||||
| 	groupDepth := f.groupDepth | ||||
| 	if f.group != "" { | ||||
| 		if f.valuesStr != "" || len(args) != 0 { | ||||
| 			if continuing { | ||||
| 				buf.WriteByte(f.comma()) | ||||
| 			} | ||||
| 			buf.WriteString(f.quoted(f.group, true)) // escape user-provided keys | ||||
| 			buf.WriteByte(f.colon()) | ||||
| 			buf.WriteByte('{') // for the group | ||||
| 			continuing = false | ||||
| 		} else { | ||||
| 			// The group was empty | ||||
| 			groupDepth-- | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if f.valuesStr != "" { | ||||
| 		if continuing { | ||||
| 			buf.WriteByte(f.comma()) | ||||
| 		} | ||||
| 		buf.WriteString(f.valuesStr) | ||||
| 		continuing = true | ||||
| 	} | ||||
| 
 | ||||
| 	vals = args | ||||
| 	if hook := f.opts.RenderArgsHook; hook != nil { | ||||
| 		vals = hook(f.sanitize(vals)) | ||||
| 	} | ||||
| 	f.flatten(buf, vals, continuing, true) // escape user-provided keys | ||||
| 	if f.outputFormat == outputJSON { | ||||
| 		buf.WriteByte('}') | ||||
| 
 | ||||
| 	for i := 0; i < groupDepth; i++ { | ||||
| 		buf.WriteByte('}') // for the groups | ||||
| 	} | ||||
| 
 | ||||
| 	if f.outputFormat == outputJSON { | ||||
| 		buf.WriteByte('}') // for the whole line | ||||
| 	} | ||||
| 
 | ||||
| 	return buf.String() | ||||
| } | ||||
| 
 | ||||
|  | @ -298,9 +339,16 @@ func (f Formatter) flatten(buf *bytes.Buffer, kvList []any, continuing bool, esc | |||
| 	if len(kvList)%2 != 0 { | ||||
| 		kvList = append(kvList, noValue) | ||||
| 	} | ||||
| 	copied := false | ||||
| 	for i := 0; i < len(kvList); i += 2 { | ||||
| 		k, ok := kvList[i].(string) | ||||
| 		if !ok { | ||||
| 			if !copied { | ||||
| 				newList := make([]any, len(kvList)) | ||||
| 				copy(newList, kvList) | ||||
| 				kvList = newList | ||||
| 				copied = true | ||||
| 			} | ||||
| 			k = f.nonStringKey(kvList[i]) | ||||
| 			kvList[i] = k | ||||
| 		} | ||||
|  | @ -308,7 +356,7 @@ func (f Formatter) flatten(buf *bytes.Buffer, kvList []any, continuing bool, esc | |||
| 
 | ||||
| 		if i > 0 || continuing { | ||||
| 			if f.outputFormat == outputJSON { | ||||
| 				buf.WriteByte(',') | ||||
| 				buf.WriteByte(f.comma()) | ||||
| 			} else { | ||||
| 				// In theory the format could be something we don't understand.  In | ||||
| 				// practice, we control it, so it won't be. | ||||
|  | @ -316,24 +364,35 @@ func (f Formatter) flatten(buf *bytes.Buffer, kvList []any, continuing bool, esc | |||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if escapeKeys { | ||||
| 			buf.WriteString(prettyString(k)) | ||||
| 		} else { | ||||
| 			// this is faster | ||||
| 			buf.WriteByte('"') | ||||
| 			buf.WriteString(k) | ||||
| 			buf.WriteByte('"') | ||||
| 		} | ||||
| 		if f.outputFormat == outputJSON { | ||||
| 			buf.WriteByte(':') | ||||
| 		} else { | ||||
| 			buf.WriteByte('=') | ||||
| 		} | ||||
| 		buf.WriteString(f.quoted(k, escapeKeys)) | ||||
| 		buf.WriteByte(f.colon()) | ||||
| 		buf.WriteString(f.pretty(v)) | ||||
| 	} | ||||
| 	return kvList | ||||
| } | ||||
| 
 | ||||
| func (f Formatter) quoted(str string, escape bool) string { | ||||
| 	if escape { | ||||
| 		return prettyString(str) | ||||
| 	} | ||||
| 	// this is faster | ||||
| 	return `"` + str + `"` | ||||
| } | ||||
| 
 | ||||
| func (f Formatter) comma() byte { | ||||
| 	if f.outputFormat == outputJSON { | ||||
| 		return ',' | ||||
| 	} | ||||
| 	return ' ' | ||||
| } | ||||
| 
 | ||||
| func (f Formatter) colon() byte { | ||||
| 	if f.outputFormat == outputJSON { | ||||
| 		return ':' | ||||
| 	} | ||||
| 	return '=' | ||||
| } | ||||
| 
 | ||||
| func (f Formatter) pretty(value any) string { | ||||
| 	return f.prettyWithFlags(value, 0, 0) | ||||
| } | ||||
|  | @ -407,12 +466,12 @@ func (f Formatter) prettyWithFlags(value any, flags uint32, depth int) string { | |||
| 		} | ||||
| 		for i := 0; i < len(v); i += 2 { | ||||
| 			if i > 0 { | ||||
| 				buf.WriteByte(',') | ||||
| 				buf.WriteByte(f.comma()) | ||||
| 			} | ||||
| 			k, _ := v[i].(string) // sanitize() above means no need to check success | ||||
| 			// arbitrary keys might need escaping | ||||
| 			buf.WriteString(prettyString(k)) | ||||
| 			buf.WriteByte(':') | ||||
| 			buf.WriteByte(f.colon()) | ||||
| 			buf.WriteString(f.prettyWithFlags(v[i+1], 0, depth+1)) | ||||
| 		} | ||||
| 		if flags&flagRawStruct == 0 { | ||||
|  | @ -481,7 +540,7 @@ func (f Formatter) prettyWithFlags(value any, flags uint32, depth int) string { | |||
| 				continue | ||||
| 			} | ||||
| 			if printComma { | ||||
| 				buf.WriteByte(',') | ||||
| 				buf.WriteByte(f.comma()) | ||||
| 			} | ||||
| 			printComma = true // if we got here, we are rendering a field | ||||
| 			if fld.Anonymous && fld.Type.Kind() == reflect.Struct && name == "" { | ||||
|  | @ -492,10 +551,8 @@ func (f Formatter) prettyWithFlags(value any, flags uint32, depth int) string { | |||
| 				name = fld.Name | ||||
| 			} | ||||
| 			// field names can't contain characters which need escaping | ||||
| 			buf.WriteByte('"') | ||||
| 			buf.WriteString(name) | ||||
| 			buf.WriteByte('"') | ||||
| 			buf.WriteByte(':') | ||||
| 			buf.WriteString(f.quoted(name, false)) | ||||
| 			buf.WriteByte(f.colon()) | ||||
| 			buf.WriteString(f.prettyWithFlags(v.Field(i).Interface(), 0, depth+1)) | ||||
| 		} | ||||
| 		if flags&flagRawStruct == 0 { | ||||
|  | @ -520,7 +577,7 @@ func (f Formatter) prettyWithFlags(value any, flags uint32, depth int) string { | |||
| 		buf.WriteByte('[') | ||||
| 		for i := 0; i < v.Len(); i++ { | ||||
| 			if i > 0 { | ||||
| 				buf.WriteByte(',') | ||||
| 				buf.WriteByte(f.comma()) | ||||
| 			} | ||||
| 			e := v.Index(i) | ||||
| 			buf.WriteString(f.prettyWithFlags(e.Interface(), 0, depth+1)) | ||||
|  | @ -534,7 +591,7 @@ func (f Formatter) prettyWithFlags(value any, flags uint32, depth int) string { | |||
| 		i := 0 | ||||
| 		for it.Next() { | ||||
| 			if i > 0 { | ||||
| 				buf.WriteByte(',') | ||||
| 				buf.WriteByte(f.comma()) | ||||
| 			} | ||||
| 			// If a map key supports TextMarshaler, use it. | ||||
| 			keystr := "" | ||||
|  | @ -556,7 +613,7 @@ func (f Formatter) prettyWithFlags(value any, flags uint32, depth int) string { | |||
| 				} | ||||
| 			} | ||||
| 			buf.WriteString(keystr) | ||||
| 			buf.WriteByte(':') | ||||
| 			buf.WriteByte(f.colon()) | ||||
| 			buf.WriteString(f.prettyWithFlags(it.Value().Interface(), 0, depth+1)) | ||||
| 			i++ | ||||
| 		} | ||||
|  | @ -706,6 +763,53 @@ func (f Formatter) sanitize(kvList []any) []any { | |||
| 	return kvList | ||||
| } | ||||
| 
 | ||||
| // startGroup opens a new group scope (basically a sub-struct), which locks all | ||||
| // the current saved values and starts them anew.  This is needed to satisfy | ||||
| // slog. | ||||
| func (f *Formatter) startGroup(group string) { | ||||
| 	// Unnamed groups are just inlined. | ||||
| 	if group == "" { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	// Any saved values can no longer be changed. | ||||
| 	buf := bytes.NewBuffer(make([]byte, 0, 1024)) | ||||
| 	continuing := false | ||||
| 
 | ||||
| 	if f.parentValuesStr != "" { | ||||
| 		buf.WriteString(f.parentValuesStr) | ||||
| 		continuing = true | ||||
| 	} | ||||
| 
 | ||||
| 	if f.group != "" && f.valuesStr != "" { | ||||
| 		if continuing { | ||||
| 			buf.WriteByte(f.comma()) | ||||
| 		} | ||||
| 		buf.WriteString(f.quoted(f.group, true)) // escape user-provided keys | ||||
| 		buf.WriteByte(f.colon()) | ||||
| 		buf.WriteByte('{') // for the group | ||||
| 		continuing = false | ||||
| 	} | ||||
| 
 | ||||
| 	if f.valuesStr != "" { | ||||
| 		if continuing { | ||||
| 			buf.WriteByte(f.comma()) | ||||
| 		} | ||||
| 		buf.WriteString(f.valuesStr) | ||||
| 	} | ||||
| 
 | ||||
| 	// NOTE: We don't close the scope here - that's done later, when a log line | ||||
| 	// is actually rendered (because we have N scopes to close). | ||||
| 
 | ||||
| 	f.parentValuesStr = buf.String() | ||||
| 
 | ||||
| 	// Start collecting new values. | ||||
| 	f.group = group | ||||
| 	f.groupDepth++ | ||||
| 	f.valuesStr = "" | ||||
| 	f.values = nil | ||||
| } | ||||
| 
 | ||||
| // Init configures this Formatter from runtime info, such as the call depth | ||||
| // imposed by logr itself. | ||||
| // Note that this receiver is a pointer, so depth can be saved. | ||||
|  | @ -740,7 +844,10 @@ func (f Formatter) FormatInfo(level int, msg string, kvList []any) (prefix, args | |||
| 	if policy := f.opts.LogCaller; policy == All || policy == Info { | ||||
| 		args = append(args, "caller", f.caller()) | ||||
| 	} | ||||
| 	args = append(args, "level", level, "msg", msg) | ||||
| 	if key := *f.opts.LogInfoLevel; key != "" { | ||||
| 		args = append(args, key, level) | ||||
| 	} | ||||
| 	args = append(args, "msg", msg) | ||||
| 	return prefix, f.render(args, kvList) | ||||
| } | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										105
									
								
								vendor/github.com/go-logr/logr/funcr/slogsink.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								vendor/github.com/go-logr/logr/funcr/slogsink.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,105 @@ | |||
| //go:build go1.21 | ||||
| // +build go1.21 | ||||
| 
 | ||||
| /* | ||||
| Copyright 2023 The logr Authors. | ||||
| 
 | ||||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| you may not use this file except in compliance with the License. | ||||
| You may obtain a copy of the License at | ||||
| 
 | ||||
|     http://www.apache.org/licenses/LICENSE-2.0 | ||||
| 
 | ||||
| Unless required by applicable law or agreed to in writing, software | ||||
| distributed under the License is distributed on an "AS IS" BASIS, | ||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| package funcr | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"log/slog" | ||||
| 
 | ||||
| 	"github.com/go-logr/logr" | ||||
| ) | ||||
| 
 | ||||
| var _ logr.SlogSink = &fnlogger{} | ||||
| 
 | ||||
| const extraSlogSinkDepth = 3 // 2 for slog, 1 for SlogSink | ||||
| 
 | ||||
| func (l fnlogger) Handle(_ context.Context, record slog.Record) error { | ||||
| 	kvList := make([]any, 0, 2*record.NumAttrs()) | ||||
| 	record.Attrs(func(attr slog.Attr) bool { | ||||
| 		kvList = attrToKVs(attr, kvList) | ||||
| 		return true | ||||
| 	}) | ||||
| 
 | ||||
| 	if record.Level >= slog.LevelError { | ||||
| 		l.WithCallDepth(extraSlogSinkDepth).Error(nil, record.Message, kvList...) | ||||
| 	} else { | ||||
| 		level := l.levelFromSlog(record.Level) | ||||
| 		l.WithCallDepth(extraSlogSinkDepth).Info(level, record.Message, kvList...) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (l fnlogger) WithAttrs(attrs []slog.Attr) logr.SlogSink { | ||||
| 	kvList := make([]any, 0, 2*len(attrs)) | ||||
| 	for _, attr := range attrs { | ||||
| 		kvList = attrToKVs(attr, kvList) | ||||
| 	} | ||||
| 	l.AddValues(kvList) | ||||
| 	return &l | ||||
| } | ||||
| 
 | ||||
| func (l fnlogger) WithGroup(name string) logr.SlogSink { | ||||
| 	l.startGroup(name) | ||||
| 	return &l | ||||
| } | ||||
| 
 | ||||
| // attrToKVs appends a slog.Attr to a logr-style kvList.  It handle slog Groups | ||||
| // and other details of slog. | ||||
| func attrToKVs(attr slog.Attr, kvList []any) []any { | ||||
| 	attrVal := attr.Value.Resolve() | ||||
| 	if attrVal.Kind() == slog.KindGroup { | ||||
| 		groupVal := attrVal.Group() | ||||
| 		grpKVs := make([]any, 0, 2*len(groupVal)) | ||||
| 		for _, attr := range groupVal { | ||||
| 			grpKVs = attrToKVs(attr, grpKVs) | ||||
| 		} | ||||
| 		if attr.Key == "" { | ||||
| 			// slog says we have to inline these | ||||
| 			kvList = append(kvList, grpKVs...) | ||||
| 		} else { | ||||
| 			kvList = append(kvList, attr.Key, PseudoStruct(grpKVs)) | ||||
| 		} | ||||
| 	} else if attr.Key != "" { | ||||
| 		kvList = append(kvList, attr.Key, attrVal.Any()) | ||||
| 	} | ||||
| 
 | ||||
| 	return kvList | ||||
| } | ||||
| 
 | ||||
| // levelFromSlog adjusts the level by the logger's verbosity and negates it. | ||||
| // It ensures that the result is >= 0. This is necessary because the result is | ||||
| // passed to a LogSink and that API did not historically document whether | ||||
| // levels could be negative or what that meant. | ||||
| // | ||||
| // Some example usage: | ||||
| // | ||||
| //	logrV0 := getMyLogger() | ||||
| //	logrV2 := logrV0.V(2) | ||||
| //	slogV2 := slog.New(logr.ToSlogHandler(logrV2)) | ||||
| //	slogV2.Debug("msg") // =~ logrV2.V(4) =~ logrV0.V(6) | ||||
| //	slogV2.Info("msg")  // =~  logrV2.V(0) =~ logrV0.V(2) | ||||
| //	slogv2.Warn("msg")  // =~ logrV2.V(-4) =~ logrV0.V(0) | ||||
| func (l fnlogger) levelFromSlog(level slog.Level) int { | ||||
| 	result := -level | ||||
| 	if result < 0 { | ||||
| 		result = 0 // because LogSink doesn't expect negative V levels | ||||
| 	} | ||||
| 	return int(result) | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue