Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generate ES6-style code (classes, exports, imports) #156

Draft
wants to merge 30 commits into
base: main
Choose a base branch
from

Conversation

gonzojive
Copy link

There is a long-standing request for ES6 module generation: #75. This PR mostly adds such support, though it needs to be cleaned up, fixed and tested.

The code generator should still produce the same output for previously supported inputs. The es6 option changes the output style significantly.

gonzojive and others added 26 commits December 4, 2022 14:18
…rated code.

The introduction of this type changes the signatures of many generator methods
that need to know how to print a JavaScript expression that refers to a given
proto message or enum.
…rocessors.

The import paths for proto imports don't work with our bazel rules, so we
post-process the protobuf-javascript generator's output to rewrite the
imports. This is easier if each import has a comment indicating the
corresponding proto file.
Before this, the parent type would be returned. Now, <parent type>.<child type>
is returned.
@goulashify
Copy link

This is awesome!

Enable compilation of protos which use the `extend` keyword. A gRPC-web service broke es6 compilation due to importing [`longrunning/operations.proto`](https://github.com/googleapis/googleapis/blob/master/google/longrunning/operations.proto), which uses annotations, which use extensions.

Testing of this is being done in `rules_ts_proto` repo: [PR#9](https://github.com/gonzojive/rules_ts_proto/pull/9/files)
@rinarakaki
Copy link

Any update?

@gonzojive
Copy link
Author

The branch works and has been updated with many fixes. We use it in web apps at work. However, last I checked, it will not be accepted upstream because the change is so large.

@perezd
Copy link

perezd commented Aug 3, 2024

Shameless plug, you might be interested in checking out protobuf-es: https://github.com/bufbuild/protobuf-es

It fully supports TypeScript and ESM and is completely conformant and compatible with the Protobuf format.

Fixes compilation using bzlmod and makes bzlmod the default.
@stasberkov
Copy link

stasberkov commented Aug 27, 2024

Guys, can you make this thing moving forward? I would really like to have ESM module instead of CJS modules.

@gonzojive
Copy link
Author

gonzojive commented Aug 27, 2024 via email

meteorcloudy pushed a commit to bazelbuild/bazel-central-registry that referenced this pull request Sep 30, 2024
Checked with `python3 tools/bcr_validation.py
--check=protobuf_javascript_esm`.

The module in question is my fork of the protobuf-javascript repo. The
changes in the fork are unlikely to be accepted upstream (see
protocolbuffers/protobuf-javascript#156).
asa pushed a commit to asa/bazel-central-registry that referenced this pull request Sep 30, 2024
Checked with `python3 tools/bcr_validation.py
--check=protobuf_javascript_esm`.

The module in question is my fork of the protobuf-javascript repo. The
changes in the fork are unlikely to be accepted upstream (see
protocolbuffers/protobuf-javascript#156).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants