RFC: (WIP) Improve error marshaling from JS to Ruby#37
Open
julik wants to merge 3 commits intorails:masterfrom
Open
RFC: (WIP) Improve error marshaling from JS to Ruby#37julik wants to merge 3 commits intorails:masterfrom
julik wants to merge 3 commits intorails:masterfrom
Conversation
Preserve the message and the name of the error if the runtime provides them. Also, if possible use Object.assign(...) to copy any additional properties from the thrown error into the return metadata. Pack the error stack into the response value together with the error metadata. Adds :metadata reader to the Ruby error classes so that additional JS error metadata can be recovered on the Ruby side if desired.
|
Thanks for the pull request, and welcome! The Rails team is excited to review your changes, and you should hear from @arthurnn (or someone else) soon. If any changes to this PR are deemed necessary, please add them as extra commits. This ensures that the reviewer can see what has changed since they last reviewed the code. Due to the way GitHub handles out-of-date commits, this should also make it reasonably obvious what issues have or haven't been addressed. Large or tricky changes may require several passes of review and changes. Please see the contribution instructions for more information. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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#metadataas 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).