RFC: (WIP) Improve error marshaling from JS to Ruby #37
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
WIP - this is a request for feedback mostly and not finished.
I encountered a need to interface with a library that adds meaningful properties to a JS Error object when throwing. Thus came an idea of passing more meaningful error metadata to the runtime from the JS engine. The main change is that the error object caught during parsing/execution is converted to a plain JS object, and as much metadata as can be collected gets tacked onto it. The data is then available on the Ruby side in
Error#metadata
as a Hash. It is done using a conversion because I found that doingJSON.stringify(err)
has really varying behaviors depending on the JS engine used.The implementation I've made so far works with all the runtimes I could spin up at the moment on OSX 10.11 except for Duktape - it does not use a wrapper shim but executes via runtime handles. So if this has to work with Duktape I will need to look into adding error metadata to duktape.rb with Magnus. But if this goes out of scope for ExecJS (which I think it is not) then it's not really worth the effort I guess.
If this is accepted nothing should ideally change for consumer code, so this is a minor feature.
The library I need this for is https://code.google.com/archive/p/glsl-unit/ (somewhat abandonware but still working quite well). And they use a customized SyntaxError, and pass along the line and column from the parse error which is tremendously useful (and gets discarded if passed via string concatenation).