Comments (7)
Hey. Thank you for reporting this.
I will try to take a look this week.
from protoc-gen-ts.
Also seen as: protocolbuffers/protobuf-javascript#55 in js version. This is something that we definitely have to solve here.
from protoc-gen-ts.
Update;
Upon closer look, I realized that public import
directive transitively re-exports the symbols from dependencies. When you have two public imports with same package
name they will conflict and lead to compiler errors.
TLDR: It is not so easy to solve this problem of re-exporting transitive dependencies.
// old.proto
syntax = "proto3";
import public "public.proto";
import public "public2.proto";
message OldMarker {
importdirective.PublicMessage pubMessageField = 4;
importdirective.PublicMessage2 pubMessageField2 = 5;
}
// public.proto
syntax = "proto3";
package importdirective;
message PublicMessage {
bool pb = 1;
}
// public2.proto
syntax = "proto3";
package importdirective;
message PublicMessage2 {
bool pb = 1;
}
this will lead to export conflicts. in order to work around this, we need to explicitly import symbols from transitive dependencies and re-export the symbols from them within a namespace whose name is identical to conflicting packages
.
this is what the protoc compiler wants us to do. merge everything under a namespace if the protos has the same package directive hence it is safe to do because protoc guarantees that there can not be identically named symbols under the same name
from protoc-gen-ts.
But still, there are more cursed cases;
syntax = "proto3";
package importdirective;
import public "test/import/public.proto";
import public "test/import/public2.proto";
message OldMarker {
importdirective.PublicMessage pubMessageField = 4;
importdirective.PublicMessage2 pubMessageField2 = 5;
}
where we need to re-export everything that conflicts as well as the symbols in the proto within the same package.
from protoc-gen-ts.
@thesayyn Quite the can of worms indeed. :-) Thank you again for the investigation/fix efforts!
from protoc-gen-ts.
I am going to close this as not planned.
from protoc-gen-ts.
@thesayyn Cool, thanks for the update! Hopefully the upstream repo adds support to it at some point.
from protoc-gen-ts.
Related Issues (20)
- Support Promises in Server Definition
- npm package needs publishing to include fix for typescript >= 5 HOT 8
- The namespace 'Google protobuf' does not have an exported member 'BinaryWriter' HOT 1
- `toObject()` inferred type too long when compiled with `declaration: true` HOT 1
- More fleshed out example
- Proto with oneof and other field is generated as union instead of intersect
- `Property 'xy' of type 'z' is not assignable to 'string' index type 'UntypedHandleCall'.` for class properties
- Add `as const` to UnimplementedService definition
- TSC error with compiler option noUnusedLocals HOT 2
- import_style=es6 ? HOT 1
- Consuming JSON For Tests and Converting To Protoc HOT 1
- I need to generate file interface IUser {} HOT 3
- Property 'Buffer' does not exist on type 'typeof globalThis' HOT 2
- [rust] Error starting the proto build with new rust wasm package. Error when executing /usr/bin/protoc-gen-ts HOT 1
- [rust] proto3 optional fields support
- methodName conflict HOT 1
- snake_case to camelCase conversion HOT 7
- [1.0] Moving away from JavaScript implementation HOT 1
- http2 is null when trying to use a web client in the browser
- add license information
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from protoc-gen-ts.