diff --git a/CHANGELOG.md b/CHANGELOG.md index 021f12a1..144292d9 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ Types of changes ## [1.18.1] - `Fixed` local seed parameter should be consistent between different jsonpath +- `Fixed` PIMO Play web assembly version handle panics and recover gracefully when panics occure ## [1.18.0] diff --git a/wasm/pimo/main.go b/wasm/pimo/main.go index 0548d7a6..e034a1dd 100644 --- a/wasm/pimo/main.go +++ b/wasm/pimo/main.go @@ -77,6 +77,15 @@ func main() { reject := args[1] go func() { + // dont't panic + defer func() { + if r := recover(); r != nil { + log.Error().AnErr("panic", r.(error)).Msg("Recovering from panic in play.") + errorObject := errorConstructor.New(r.(error).Error()) + reject.Invoke(errorObject) + } + }() + data, err := play(yaml, data) if err != nil { // err should be an instance of `error`, eg `errors.New("some error")` @@ -100,6 +109,15 @@ func main() { reject := args[1] go func() { + // dont't panic + defer func() { + if r := recover(); r != nil { + log.Error().AnErr("panic", r.(error)).Msg("Recovering from panic in flow") + errorObject := errorConstructor.New(r.(error).Error()) + reject.Invoke(errorObject) + } + }() + pdef, err := model.LoadPipelineDefinitionFromYAML([]byte(yaml)) if err != nil { log.Err(err).Msg("Cannot load pipeline definition")