fix: Support return statements for logic rules using shared code #1529
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.
Changes
Use
acorn-looseas fallback parser for logic rules with imports and top-level returns.This change attempts to parse logic rules with
acorn-looseif the standardacornparser fails. Theacorn-looseparser is designed to handle syntactically invalid JavaScript by constructing a valid AST even when there are syntax errors. Since we only use the AST to locate and inline import statements, the AST remains usable for our purposes even when the syntax is technically invalid.acorn-looseis meant for our use case of parsing code during transformation steps. We still try to parse usingacornfirst as recommended by the acorn team.This is necessary because logic rules can contain both import statements (for shared code) and top-level return statements, which is technically invalid JavaScript syntax. Standard acorn throws a SyntaxError when encountering this combination. However, this syntax is acceptable in our context because we transform the code before evaluation by inlining the imports and wrapping everything in a function, which makes it valid JavaScript.
Checklist before requesting a review
Related pull requests
Link other PRs here that are related to this change