Single Fetcher.Fetch on the Guard that holds DenyPrefixes. skipTlsVerification is ignored. No 502. keys add writes the secret only to --out. Release binary has no -test-allow-prefix.
384 lines
8.2 KiB
Go
384 lines
8.2 KiB
Go
package gojq
|
|
|
|
import "strconv"
|
|
|
|
// ValueError is an interface for errors with a value for internal function.
|
|
// Return an error implementing this interface when you want to catch error
|
|
// values (not error messages) by try-catch, just like built-in error function.
|
|
// Refer to [WithFunction] to add a custom internal function.
|
|
type ValueError interface {
|
|
error
|
|
Value() any
|
|
}
|
|
|
|
type expectedObjectError struct {
|
|
v any
|
|
}
|
|
|
|
func (err *expectedObjectError) Error() string {
|
|
return "expected an object but got: " + typeErrorPreview(err.v)
|
|
}
|
|
|
|
type expectedArrayError struct {
|
|
v any
|
|
}
|
|
|
|
func (err *expectedArrayError) Error() string {
|
|
return "expected an array but got: " + typeErrorPreview(err.v)
|
|
}
|
|
|
|
type iteratorError struct {
|
|
v any
|
|
}
|
|
|
|
func (err *iteratorError) Error() string {
|
|
return "cannot iterate over: " + typeErrorPreview(err.v)
|
|
}
|
|
|
|
type arrayIndexNegativeError struct {
|
|
v int
|
|
}
|
|
|
|
func (err *arrayIndexNegativeError) Error() string {
|
|
return "array index should not be negative: " + Preview(err.v)
|
|
}
|
|
|
|
type arrayIndexTooLargeError struct {
|
|
v any
|
|
}
|
|
|
|
func (err *arrayIndexTooLargeError) Error() string {
|
|
return "array index too large: " + Preview(err.v)
|
|
}
|
|
|
|
type repeatStringTooLargeError struct {
|
|
s string
|
|
n float64
|
|
}
|
|
|
|
func (err *repeatStringTooLargeError) Error() string {
|
|
return "repeat string result too large: " + Preview(err.s) + " * " + Preview(err.n)
|
|
}
|
|
|
|
type objectKeyNotStringError struct {
|
|
v any
|
|
}
|
|
|
|
func (err *objectKeyNotStringError) Error() string {
|
|
return "expected a string for object key but got: " + typeErrorPreview(err.v)
|
|
}
|
|
|
|
type arrayIndexNotNumberError struct {
|
|
v any
|
|
}
|
|
|
|
func (err *arrayIndexNotNumberError) Error() string {
|
|
return "expected a number for indexing an array but got: " + typeErrorPreview(err.v)
|
|
}
|
|
|
|
type stringIndexNotNumberError struct {
|
|
v any
|
|
}
|
|
|
|
func (err *stringIndexNotNumberError) Error() string {
|
|
return "expected a number for indexing a string but got: " + typeErrorPreview(err.v)
|
|
}
|
|
|
|
type expectedStartEndError struct {
|
|
v any
|
|
}
|
|
|
|
func (err *expectedStartEndError) Error() string {
|
|
return `expected "start" and "end" for slicing but got: ` + typeErrorPreview(err.v)
|
|
}
|
|
|
|
type lengthMismatchError struct{}
|
|
|
|
func (*lengthMismatchError) Error() string {
|
|
return "length mismatch"
|
|
}
|
|
|
|
type inputNotAllowedError struct{}
|
|
|
|
func (*inputNotAllowedError) Error() string {
|
|
return "input(s)/0 is not allowed"
|
|
}
|
|
|
|
type funcNotFoundError struct {
|
|
f *Func
|
|
}
|
|
|
|
func (err *funcNotFoundError) Error() string {
|
|
return "function not defined: " + err.f.Name + "/" + strconv.Itoa(len(err.f.Args))
|
|
}
|
|
|
|
type func0TypeError struct {
|
|
name string
|
|
v any
|
|
}
|
|
|
|
func (err *func0TypeError) Error() string {
|
|
return err.name + " cannot be applied to: " + typeErrorPreview(err.v)
|
|
}
|
|
|
|
type func1TypeError struct {
|
|
name string
|
|
v, w any
|
|
}
|
|
|
|
func (err *func1TypeError) Error() string {
|
|
return err.name + "(" + Preview(err.w) + ") cannot be applied to: " + typeErrorPreview(err.v)
|
|
}
|
|
|
|
type func2TypeError struct {
|
|
name string
|
|
v, w, x any
|
|
}
|
|
|
|
func (err *func2TypeError) Error() string {
|
|
return err.name + "(" + Preview(err.w) + "; " + Preview(err.x) + ") cannot be applied to: " + typeErrorPreview(err.v)
|
|
}
|
|
|
|
type func0WrapError struct {
|
|
name string
|
|
v any
|
|
err error
|
|
}
|
|
|
|
func (err *func0WrapError) Error() string {
|
|
return err.name + " cannot be applied to " + Preview(err.v) + ": " + err.err.Error()
|
|
}
|
|
|
|
type func1WrapError struct {
|
|
name string
|
|
v, w any
|
|
err error
|
|
}
|
|
|
|
func (err *func1WrapError) Error() string {
|
|
return err.name + "(" + Preview(err.w) + ") cannot be applied to " + Preview(err.v) + ": " + err.err.Error()
|
|
}
|
|
|
|
type func2WrapError struct {
|
|
name string
|
|
v, w, x any
|
|
err error
|
|
}
|
|
|
|
func (err *func2WrapError) Error() string {
|
|
return err.name + "(" + Preview(err.w) + "; " + Preview(err.x) + ") cannot be applied to " + Preview(err.v) + ": " + err.err.Error()
|
|
}
|
|
|
|
type exitCodeError struct {
|
|
value any
|
|
code int
|
|
}
|
|
|
|
func (err *exitCodeError) Error() string {
|
|
if s, ok := err.value.(string); ok {
|
|
return "error: " + s
|
|
}
|
|
return "error: " + jsonMarshal(err.value)
|
|
}
|
|
|
|
func (err *exitCodeError) Value() any {
|
|
return err.value
|
|
}
|
|
|
|
func (err *exitCodeError) ExitCode() int {
|
|
return err.code
|
|
}
|
|
|
|
// HaltError is an error emitted by halt and halt_error functions.
|
|
// It implements [ValueError], and if the value is nil, discard the error
|
|
// and stop the iteration. Consider a query like "1, halt, 2";
|
|
// the first value is 1, and the second value is a HaltError with nil value.
|
|
// You might think the iterator should not emit an error this case, but it
|
|
// should so that we can recognize the halt error to stop the outer loop
|
|
// of iterating input values; echo 1 2 3 | gojq "., halt".
|
|
type HaltError exitCodeError
|
|
|
|
func (err *HaltError) Error() string {
|
|
return "halt " + (*exitCodeError)(err).Error()
|
|
}
|
|
|
|
// Value returns the value of the error. This implements [ValueError],
|
|
// but halt error is not catchable by try-catch.
|
|
func (err *HaltError) Value() any {
|
|
return (*exitCodeError)(err).Value()
|
|
}
|
|
|
|
// ExitCode returns the exit code of the error.
|
|
func (err *HaltError) ExitCode() int {
|
|
return (*exitCodeError)(err).ExitCode()
|
|
}
|
|
|
|
type flattenDepthError struct {
|
|
v float64
|
|
}
|
|
|
|
func (err *flattenDepthError) Error() string {
|
|
return "flatten depth should not be negative: " + Preview(err.v)
|
|
}
|
|
|
|
type timeArrayError struct{}
|
|
|
|
func (*timeArrayError) Error() string {
|
|
return "expected an array of 8 numbers"
|
|
}
|
|
|
|
type unaryTypeError struct {
|
|
name string
|
|
v any
|
|
}
|
|
|
|
func (err *unaryTypeError) Error() string {
|
|
return "cannot " + err.name + ": " + typeErrorPreview(err.v)
|
|
}
|
|
|
|
type binopTypeError struct {
|
|
name string
|
|
l, r any
|
|
}
|
|
|
|
func (err *binopTypeError) Error() string {
|
|
return "cannot " + err.name + ": " + typeErrorPreview(err.l) + " and " + typeErrorPreview(err.r)
|
|
}
|
|
|
|
type zeroDivisionError struct {
|
|
l, r any
|
|
}
|
|
|
|
func (err *zeroDivisionError) Error() string {
|
|
return "cannot divide " + typeErrorPreview(err.l) + " by: " + typeErrorPreview(err.r)
|
|
}
|
|
|
|
type zeroModuloError struct {
|
|
l, r any
|
|
}
|
|
|
|
func (err *zeroModuloError) Error() string {
|
|
return "cannot modulo " + typeErrorPreview(err.l) + " by: " + typeErrorPreview(err.r)
|
|
}
|
|
|
|
type formatNotFoundError struct {
|
|
n string
|
|
}
|
|
|
|
func (err *formatNotFoundError) Error() string {
|
|
return "format not defined: " + err.n
|
|
}
|
|
|
|
type formatRowError struct {
|
|
typ string
|
|
v any
|
|
}
|
|
|
|
func (err *formatRowError) Error() string {
|
|
return "@" + err.typ + " cannot format an array including: " + typeErrorPreview(err.v)
|
|
}
|
|
|
|
type tooManyVariableValuesError struct{}
|
|
|
|
func (*tooManyVariableValuesError) Error() string {
|
|
return "too many variable values provided"
|
|
}
|
|
|
|
type expectedVariableError struct {
|
|
n string
|
|
}
|
|
|
|
func (err *expectedVariableError) Error() string {
|
|
return "variable defined but not bound: " + err.n
|
|
}
|
|
|
|
type variableNotFoundError struct {
|
|
n string
|
|
}
|
|
|
|
func (err *variableNotFoundError) Error() string {
|
|
return "variable not defined: " + err.n
|
|
}
|
|
|
|
type variableNameError struct {
|
|
n string
|
|
}
|
|
|
|
func (err *variableNameError) Error() string {
|
|
return "invalid variable name: " + err.n
|
|
}
|
|
|
|
type breakError struct {
|
|
n string
|
|
v any
|
|
}
|
|
|
|
func (err *breakError) Error() string {
|
|
return "label not defined: " + err.n
|
|
}
|
|
|
|
func (*breakError) ExitCode() int {
|
|
return 3
|
|
}
|
|
|
|
type tryEndError struct {
|
|
err error
|
|
}
|
|
|
|
func (err *tryEndError) Error() string {
|
|
return err.err.Error()
|
|
}
|
|
|
|
type invalidPathError struct {
|
|
v any
|
|
}
|
|
|
|
func (err *invalidPathError) Error() string {
|
|
return "invalid path against: " + typeErrorPreview(err.v)
|
|
}
|
|
|
|
type invalidPathIterError struct {
|
|
v any
|
|
}
|
|
|
|
func (err *invalidPathIterError) Error() string {
|
|
return "invalid path on iterating against: " + typeErrorPreview(err.v)
|
|
}
|
|
|
|
type queryParseError struct {
|
|
fname, contents string
|
|
err error
|
|
}
|
|
|
|
func (err *queryParseError) QueryParseError() (string, string, error) {
|
|
return err.fname, err.contents, err.err
|
|
}
|
|
|
|
func (err *queryParseError) Error() string {
|
|
return "invalid query: " + err.fname + ": " + err.err.Error()
|
|
}
|
|
|
|
type jsonParseError struct {
|
|
fname, contents string
|
|
err error
|
|
}
|
|
|
|
func (err *jsonParseError) JSONParseError() (string, string, error) {
|
|
return err.fname, err.contents, err.err
|
|
}
|
|
|
|
func (err *jsonParseError) Error() string {
|
|
return "invalid json: " + err.fname + ": " + err.err.Error()
|
|
}
|
|
|
|
func typeErrorPreview(v any) string {
|
|
switch v.(type) {
|
|
case nil:
|
|
return "null"
|
|
case Iter:
|
|
return "gojq.Iter"
|
|
default:
|
|
return TypeOf(v) + " (" + Preview(v) + ")"
|
|
}
|
|
}
|