fix: gRPC await promise transpilation, bump ECMAScript target to ES2018 #689
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.
This PR resolves a huge bug around
await
usage in gRPC handlers being incorrectly transpiled intoyield
outside generators.Example (a section of
Database
module'screateView()
gRPC handler):This should in theory transpile into code that only executes the callback after the promise has returned.
Alas we got this:
Modifying the original TypeScript code so that the callback would execute inside a
.then()
instead of after anawait
successfully resulted in this:But that solution seems like a huge step backwards in terms of readability and would otherwise result in an error-prone codebase.
Thankfully, this bug seems to be resolved in recent ES targets, where
await
is natively supported.The actual issue is probably related to TypeScript#6242, although in my tests
ES6
wasn't enough.We could technically bump everything except for the libraries all the way up to
es2022
without requiring a Ts or Node container image bump, but I decided to stick withES2018
across the board for now.What kind of change does this PR introduce?
Does this PR introduce a breaking change?
The PR fulfills these requirements:
main
branchfix #xxx
, where "xxx" is the issue number)