Skip to content

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

Draft
gonzojive wants to merge 30 commits into
protocolbuffers:mainfrom
gonzojive:es6
Draft

Generate ES6-style code (classes, exports, imports)#156
gonzojive wants to merge 30 commits into
protocolbuffers:mainfrom
gonzojive:es6

Conversation

@gonzojive

Copy link
Copy Markdown

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
Copy Markdown

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
Copy Markdown

Any update?

@gonzojive

Copy link
Copy Markdown
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

perezd commented Aug 3, 2024

Copy link
Copy Markdown

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

stasberkov commented Aug 27, 2024

Copy link
Copy Markdown

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

@gonzojive

gonzojive commented Aug 27, 2024 via email

Copy link
Copy Markdown
Author

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).
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.

7 participants