Commonjs pb exports do not carry intellisense
What version of protobuf and what language are you using? Version: v3.6.1 Language: Javascript
What operating system (Linux, Windows, ...) and version? Ubuntu 20.04, x86_64
What runtime / compiler are you using (e.g., python version or gcc version) protoc pre-built compiler
What did you do? Steps to reproduce the behavior:
- Create a sample protoc file, here
simple.proto. I took it from this example, modified to "proto3" - Use the compiler to autogen JavaScript code:
protoc --js_out=import_style=commonjs,binary:. simple.proto - Use the default export as an object with expected Schema:
const Schema = require('./simple_pb'); - Attempt to use the expected Class(es) on that object:
const test = new Schema.Test1(); - See that you do not receive intellisense for the
Test1()class, nor for expected operations it's instances
What did you expect to see
Intellisense for the simple_pb operations on the default export.
What did you see instead? No Intellisense, but the operations themselves do execute (setting values, serialzing to Binary).
I was able to "fix" the issue by changing the last line of the simple_pb.js file. The goog export extension did not work, so I just commented it out and spread the goog and proto objects into module.exports:
module.exports = {...goog, ...proto};
// goog.object.extend(exports, proto);
it is because it uses google module system instead of commonjs or esm and not likely to be fixed soon.
I am running into this issue and it is very frustrating
@piekstra you might wanna try https://github.com/thesayyn/protoc-gen-ts
It sounds like the issue is the way we manage exports in the code generator. We need to do a more typical assignment to exports here: https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/generator/js_generator.cc#L3696
it might work to simply delete that code and change GetNamespace to return "exports" in common js mode.