diff options
author | Bjørn Erik Pedersen <[email protected]> | 2024-08-11 20:31:17 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2024-08-12 13:50:18 +0200 |
commit | e1e1baa1bd33181b32c58524bc21ef21da4880db (patch) | |
tree | 6840eb247068ee425e8e6955677b90c70b22e3d2 /common | |
parent | e42263529c35d966b752690ad1bcb461b90b470d (diff) | |
download | hugo-e1e1baa1bd33181b32c58524bc21ef21da4880db.tar.gz hugo-e1e1baa1bd33181b32c58524bc21ef21da4880db.zip |
Improve Katex error handling and fix handling of large expressions
* Make throwOnError=true the new default
* Handle JS errors as part of the RPC request/response flow
* Return a new Result type with .Err on it
This enables constructs on the form:
```handlebars
{{ with transform.ToMath "c = \\foo{a^2 + b^2}" }}
{{ with .Err }}
{{ warnf "error: %s" . }}
{{ else }}
{{ . }}
{{ end }}
{{ end }}
```
Note that the new `Result` type behaves like `template.HTML` (or a string if needed) when printed, but it will panic if in a error state.
Closes #12748
Diffstat (limited to 'common')
-rw-r--r-- | common/types/types.go | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/common/types/types.go b/common/types/types.go index e3850ddac..322dfe592 100644 --- a/common/types/types.go +++ b/common/types/types.go @@ -120,3 +120,27 @@ var InvocationCounter atomic.Int64 func NewBool(b bool) *bool { return &b } + +// PrintableValueProvider is implemented by types that can provide a printable value. +type PrintableValueProvider interface { + PrintableValue() any +} + +var _ PrintableValueProvider = Result[any]{} + +// Result is a generic result type. +type Result[T any] struct { + // The result value. + Value T + + // The error value. + Err error +} + +// PrintableValue returns the value or panics if there is an error. +func (r Result[T]) PrintableValue() any { + if r.Err != nil { + panic(r.Err) + } + return r.Value +} |