{"id":15040701,"url":"https://github.com/stultuss/protoc-gen-grpc-ts","last_synced_at":"2025-04-05T12:02:43.312Z","repository":{"id":35685449,"uuid":"218754686","full_name":"stultuss/protoc-gen-grpc-ts","owner":"stultuss","description":"Protocol compiler plugin for generating grpc interfaces in TypeScript.","archived":false,"fork":false,"pushed_at":"2025-03-04T11:10:09.000Z","size":527,"stargazers_count":40,"open_issues_count":0,"forks_count":11,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-29T11:04:27.767Z","etag":null,"topics":["grpc","grpc-node","grpc-toolkit","nodejs","protoc-gen-grpc","protoc-grpc-plugin","protoc-node","protocol","typescript"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stultuss.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-31T11:53:06.000Z","updated_at":"2025-03-04T11:09:22.000Z","dependencies_parsed_at":"2024-06-18T16:41:01.439Z","dependency_job_id":"86b56748-884e-4e52-828a-35ff53abc4ca","html_url":"https://github.com/stultuss/protoc-gen-grpc-ts","commit_stats":{"total_commits":93,"total_committers":5,"mean_commits":18.6,"dds":"0.17204301075268813","last_synced_commit":"53d52a9d0e1fe3cbe930dec5581eca89b3dde807"},"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stultuss%2Fprotoc-gen-grpc-ts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stultuss%2Fprotoc-gen-grpc-ts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stultuss%2Fprotoc-gen-grpc-ts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stultuss%2Fprotoc-gen-grpc-ts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stultuss","download_url":"https://codeload.github.com/stultuss/protoc-gen-grpc-ts/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247332560,"owners_count":20921853,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["grpc","grpc-node","grpc-toolkit","nodejs","protoc-gen-grpc","protoc-grpc-plugin","protoc-node","protocol","typescript"],"created_at":"2024-09-24T20:44:56.576Z","updated_at":"2025-04-05T12:02:43.265Z","avatar_url":"https://github.com/stultuss.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"protoc-gen-grpc\n=========================\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Build][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\n\u003e Protocol compiler plugin for generating grpc interfaces in TypeScript.\n\n## WARN \n\n\u003e About Apple M1 arm64\n\n```bash\nnpm_config_target_arch=x64 npm i grpc-tools\n```\n\n\u003e About node-pre-gyp ERR! stack Error: There was a fatal problem while downloading/extracting the tarball\n\nissue：https://github.com/mapbox/node-pre-gyp/issues/462\n\n```bash\nnpm install request -g\n```\n\n## Install\n\n```bash\nnpm config set unsafe-perm true\nnpm install protoc-gen-grpc -g\n```\n\u003e If you don't want to set up a public configuration for NPM, you can try to add after the installation command `-unsafe-perm` parameters.\n\n## How to use\n\n**Example**\n\nPlease try ./example/build.sh\n\n**Support - grpc-js**\n\nbash\n\n```bash\n# generate js codes with @grpc/grpc-js\nprotoc-gen-grpc \\\n--js_out=import_style=commonjs,binary:${OUTPUT_DEST} \\\n--grpc_out=grpc_js:./examples/src/proto \\\n--proto_path ./examples/proto \\\n./examples/proto/student.proto\n\n# generate d.ts codes with @grpc/grpc-js\nprotoc-gen-grpc-ts \\\n--ts_out=grpc_js:./examples/src/proto \\\n--proto_path ./examples/proto \\\n./examples/proto/student.proto\n```\nserver.ts\n\n```javascript\n// support grpc-js\nimport * as grpc from '@grpc/grpc-js';\n...\n...\nconst server = new grpc.Server();\nserver.addService(ProductServiceService, ServerImpl);\n```\n\n**Support - grpc**\n\nbash\n\n```bash\n# generate js codes with grpc\nprotoc-gen-grpc \\\n--js_out=import_style=commonjs,binary:./examples/src/proto \\\n--grpc_out=./examples/src/proto \\\n--proto_path ./examples/proto \\\n./examples/proto/student.proto\n\n# generate d.ts codes with grpc\nprotoc-gen-grpc-ts \\\n--ts_out=./examples/src/proto \\\n--proto_path ./examples/proto \\\n./examples/proto/student.proto\n```\n\nserver.ts\n\n```javascript\n// support grpc-js\nimport * as grpc from 'grpc';\n...\n...\nconst server = new grpc.Server();\nserver.addService(ProductServiceService, new ServerImpl());\n```\n\n## Example\n\nThere is a complete \u0026 runnable example in folder `examples`.\n\n```bash\n## bash1\ncd ./examples\nnpm install\nsh ./bash/build.sh  # build js \u0026 d.ts codes from proto file, and tsc to build/*.js\nsh ./bash/server.sh # start the grpc server\n\n## bash2\ncd ./examples\nnpm install\nsh ./bash/client.sh # start the grpc client \u0026 send requests\n```\n\n### product.proto\n```proto\nsyntax = \"proto3\";\n\npackage com.product;\n\nmessage Product {\n    int64 id = 1;\n    string name = 2;\n    string category = 3;\n}\n\nmessage GetProductRequest {\n    int64 id = 1;\n}\n\nmessage GetProductViaCategoryRequest {\n    string category = 1;\n}\n\nservice ProductService {\n    rpc GetProduct (GetProductRequest) returns (Product) {}\n    rpc GetProductViaCategory (GetProductViaCategoryRequest) returns (stream Product) {}\n    rpc GetBestProduct (stream GetProductRequest) returns (Product) {}\n    rpc GetProducts (stream GetProductRequest) returns (stream Product) {}\n}\n\nmessage Shop {\n    string name = 1;\n    map\u003cint64, Product\u003e list = 2;\n}\n```\n\n### product_grpc_pb.d.ts\n```typescript\n// package: com.product\n// file: product.proto\n\nimport * as grpc from '@grpc/grpc-js';\nimport * as product_pb from './product_pb';\n\ninterface IProductServiceService extends grpc.ServiceDefinition\u003cgrpc.UntypedServiceImplementation\u003e {\n  getProduct: IProductServiceService_IGetProduct;\n  getProductViaCategory: IProductServiceService_IGetProductViaCategory;\n  getBestProduct: IProductServiceService_IGetBestProduct;\n  getProducts: IProductServiceService_IGetProducts;\n}\n\ninterface IProductServiceService_IGetProduct extends grpc.MethodDefinition\u003cproduct_pb.GetProductRequest, product_pb.Product\u003e {\n  path: '/com.product.ProductService/GetProduct'\n  requestStream: false\n  responseStream: false\n  requestSerialize: grpc.serialize\u003cproduct_pb.GetProductRequest\u003e;\n  requestDeserialize: grpc.deserialize\u003cproduct_pb.GetProductRequest\u003e;\n  responseSerialize: grpc.serialize\u003cproduct_pb.Product\u003e;\n  responseDeserialize: grpc.deserialize\u003cproduct_pb.Product\u003e;\n}\n\ninterface IProductServiceService_IGetProductViaCategory extends grpc.MethodDefinition\u003cproduct_pb.GetProductViaCategoryRequest, product_pb.Product\u003e {\n  path: '/com.product.ProductService/GetProductViaCategory'\n  requestStream: false\n  responseStream: true\n  requestSerialize: grpc.serialize\u003cproduct_pb.GetProductViaCategoryRequest\u003e;\n  requestDeserialize: grpc.deserialize\u003cproduct_pb.GetProductViaCategoryRequest\u003e;\n  responseSerialize: grpc.serialize\u003cproduct_pb.Product\u003e;\n  responseDeserialize: grpc.deserialize\u003cproduct_pb.Product\u003e;\n}\n\ninterface IProductServiceService_IGetBestProduct extends grpc.MethodDefinition\u003cproduct_pb.GetProductRequest, product_pb.Product\u003e {\n  path: '/com.product.ProductService/GetBestProduct'\n  requestStream: true\n  responseStream: false\n  requestSerialize: grpc.serialize\u003cproduct_pb.GetProductRequest\u003e;\n  requestDeserialize: grpc.deserialize\u003cproduct_pb.GetProductRequest\u003e;\n  responseSerialize: grpc.serialize\u003cproduct_pb.Product\u003e;\n  responseDeserialize: grpc.deserialize\u003cproduct_pb.Product\u003e;\n}\n\ninterface IProductServiceService_IGetProducts extends grpc.MethodDefinition\u003cproduct_pb.GetProductRequest, product_pb.Product\u003e {\n  path: '/com.product.ProductService/GetProducts'\n  requestStream: true\n  responseStream: true\n  requestSerialize: grpc.serialize\u003cproduct_pb.GetProductRequest\u003e;\n  requestDeserialize: grpc.deserialize\u003cproduct_pb.GetProductRequest\u003e;\n  responseSerialize: grpc.serialize\u003cproduct_pb.Product\u003e;\n  responseDeserialize: grpc.deserialize\u003cproduct_pb.Product\u003e;\n}\n\nexport const ProductServiceService: IProductServiceService;\nexport interface IProductServiceServer extends grpc.UntypedServiceImplementation {\n  getProduct: grpc.handleUnaryCall\u003cproduct_pb.GetProductRequest, product_pb.Product\u003e;\n  getProductViaCategory: grpc.handleServerStreamingCall\u003cproduct_pb.GetProductViaCategoryRequest, product_pb.Product\u003e;\n  getBestProduct: grpc.handleClientStreamingCall\u003cproduct_pb.GetProductRequest, product_pb.Product\u003e;\n  getProducts: grpc.handleBidiStreamingCall\u003cproduct_pb.GetProductRequest, product_pb.Product\u003e;\n}\n\nexport interface IProductServiceClient {\n  getProduct(request: product_pb.GetProductRequest, callback: (error: grpc.ServiceError | null, response: product_pb.Product) =\u003e void): grpc.ClientUnaryCall;\n  getProduct(request: product_pb.GetProductRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: product_pb.Product) =\u003e void): grpc.ClientUnaryCall;\n  getProduct(request: product_pb.GetProductRequest, metadata: grpc.Metadata, options: Partial\u003cgrpc.CallOptions\u003e, callback: (error: grpc.ServiceError | null, response: product_pb.Product) =\u003e void): grpc.ClientUnaryCall;\n  getProductViaCategory(request: product_pb.GetProductViaCategoryRequest, options?: Partial\u003cgrpc.CallOptions\u003e): grpc.ClientReadableStream\u003cproduct_pb.Product\u003e;\n  getProductViaCategory(request: product_pb.GetProductViaCategoryRequest, metadata?: grpc.Metadata, options?: Partial\u003cgrpc.CallOptions\u003e): grpc.ClientReadableStream\u003cproduct_pb.Product\u003e;\n  getBestProduct(callback: (error: grpc.ServiceError | null, response: product_pb.Product) =\u003e void): grpc.ClientWritableStream\u003cproduct_pb.GetProductRequest\u003e;\n  getBestProduct(metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: product_pb.Product) =\u003e void): grpc.ClientWritableStream\u003cproduct_pb.GetProductRequest\u003e;\n  getBestProduct(options: Partial\u003cgrpc.CallOptions\u003e, callback: (error: grpc.ServiceError | null, response: product_pb.Product) =\u003e void): grpc.ClientWritableStream\u003cproduct_pb.GetProductRequest\u003e;\n  getBestProduct(metadata: grpc.Metadata, options: Partial\u003cgrpc.CallOptions\u003e, callback: (error: grpc.ServiceError | null, response: product_pb.Product) =\u003e void): grpc.ClientWritableStream\u003cproduct_pb.GetProductRequest\u003e;\n  getProducts(): grpc.ClientDuplexStream\u003cproduct_pb.GetProductRequest, product_pb.Product\u003e;\n  getProducts(options: Partial\u003cgrpc.CallOptions\u003e): grpc.ClientDuplexStream\u003cproduct_pb.GetProductRequest, product_pb.Product\u003e;\n  getProducts(metadata: grpc.Metadata, options?: Partial\u003cgrpc.CallOptions\u003e): grpc.ClientDuplexStream\u003cproduct_pb.GetProductRequest, product_pb.Product\u003e;\n}\n\nexport class ProductServiceClient extends grpc.Client implements IProductServiceClient {\n  constructor(address: string, credentials: grpc.ChannelCredentials, options?: Partial\u003cgrpc.ClientOptions\u003e);\n  public getProduct(request: product_pb.GetProductRequest, callback: (error: grpc.ServiceError | null, response: product_pb.Product) =\u003e void): grpc.ClientUnaryCall;\n  public getProduct(request: product_pb.GetProductRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: product_pb.Product) =\u003e void): grpc.ClientUnaryCall;\n  public getProduct(request: product_pb.GetProductRequest, metadata: grpc.Metadata, options: Partial\u003cgrpc.CallOptions\u003e, callback: (error: grpc.ServiceError | null, response: product_pb.Product) =\u003e void): grpc.ClientUnaryCall;\n  public getProductViaCategory(request: product_pb.GetProductViaCategoryRequest, options?: Partial\u003cgrpc.CallOptions\u003e): grpc.ClientReadableStream\u003cproduct_pb.Product\u003e;\n  public getProductViaCategory(request: product_pb.GetProductViaCategoryRequest, metadata?: grpc.Metadata, options?: Partial\u003cgrpc.CallOptions\u003e): grpc.ClientReadableStream\u003cproduct_pb.Product\u003e;\n  public getBestProduct(callback: (error: grpc.ServiceError | null, response: product_pb.Product) =\u003e void): grpc.ClientWritableStream\u003cproduct_pb.GetProductRequest\u003e;\n  public getBestProduct(metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: product_pb.Product) =\u003e void): grpc.ClientWritableStream\u003cproduct_pb.GetProductRequest\u003e;\n  public getBestProduct(options: Partial\u003cgrpc.CallOptions\u003e, callback: (error: grpc.ServiceError | null, response: product_pb.Product) =\u003e void): grpc.ClientWritableStream\u003cproduct_pb.GetProductRequest\u003e;\n  public getBestProduct(metadata: grpc.Metadata, options: Partial\u003cgrpc.CallOptions\u003e, callback: (error: grpc.ServiceError | null, response: product_pb.Product) =\u003e void): grpc.ClientWritableStream\u003cproduct_pb.GetProductRequest\u003e;\n  public getProducts(): grpc.ClientDuplexStream\u003cproduct_pb.GetProductRequest, product_pb.Product\u003e;\n  public getProducts(options?: Partial\u003cgrpc.CallOptions\u003e): grpc.ClientDuplexStream\u003cproduct_pb.GetProductRequest, product_pb.Product\u003e;\n  public getProducts(metadata?: grpc.Metadata, options?: Partial\u003cgrpc.CallOptions\u003e): grpc.ClientDuplexStream\u003cproduct_pb.GetProductRequest, product_pb.Product\u003e;\n}\n```\n\n### product_pb.d.ts\n```typescript\n// package: com.product\n// file: product.proto\n\nimport * as jspb from 'google-protobuf';\n\nexport class Product extends jspb.Message {\n  getId(): number;\n  setId(value: number): void;\n\n  getName(): string;\n  setName(value: string): void;\n\n  getCategory(): string;\n  setCategory(value: string): void;\n\n  serializeBinary(): Uint8Array;\n  toObject(includeInstance?: boolean): Product.AsObject;\n  static toObject(includeInstance: boolean, msg: Product): Product.AsObject;\n  static extensions: {[key: number]: jspb.ExtensionFieldInfo\u003cjspb.Message\u003e};\n  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo\u003cjspb.Message\u003e};\n  static serializeBinaryToWriter(message: Product, writer: jspb.BinaryWriter): void;\n  static deserializeBinary(bytes: Uint8Array): Product;\n  static deserializeBinaryFromReader(message: Product, reader: jspb.BinaryReader): Product;\n}\n\nexport namespace Product {\n  export type AsObject = {\n    id: number,\n    name: string,\n    category: string,\n  }\n}\n\nexport class GetProductRequest extends jspb.Message {\n  getId(): number;\n  setId(value: number): void;\n\n  serializeBinary(): Uint8Array;\n  toObject(includeInstance?: boolean): GetProductRequest.AsObject;\n  static toObject(includeInstance: boolean, msg: GetProductRequest): GetProductRequest.AsObject;\n  static extensions: {[key: number]: jspb.ExtensionFieldInfo\u003cjspb.Message\u003e};\n  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo\u003cjspb.Message\u003e};\n  static serializeBinaryToWriter(message: GetProductRequest, writer: jspb.BinaryWriter): void;\n  static deserializeBinary(bytes: Uint8Array): GetProductRequest;\n  static deserializeBinaryFromReader(message: GetProductRequest, reader: jspb.BinaryReader): GetProductRequest;\n}\n\nexport namespace GetProductRequest {\n  export type AsObject = {\n    id: number,\n  }\n}\n\nexport class GetProductViaCategoryRequest extends jspb.Message {\n  getCategory(): string;\n  setCategory(value: string): void;\n\n  serializeBinary(): Uint8Array;\n  toObject(includeInstance?: boolean): GetProductViaCategoryRequest.AsObject;\n  static toObject(includeInstance: boolean, msg: GetProductViaCategoryRequest): GetProductViaCategoryRequest.AsObject;\n  static extensions: {[key: number]: jspb.ExtensionFieldInfo\u003cjspb.Message\u003e};\n  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo\u003cjspb.Message\u003e};\n  static serializeBinaryToWriter(message: GetProductViaCategoryRequest, writer: jspb.BinaryWriter): void;\n  static deserializeBinary(bytes: Uint8Array): GetProductViaCategoryRequest;\n  static deserializeBinaryFromReader(message: GetProductViaCategoryRequest, reader: jspb.BinaryReader): GetProductViaCategoryRequest;\n}\n\nexport namespace GetProductViaCategoryRequest {\n  export type AsObject = {\n    category: string,\n  }\n}\n\nexport class Shop extends jspb.Message {\n  getName(): string;\n  setName(value: string): void;\n\n  getListMap(): jspb.Map\u003cnumber, Product\u003e;\n  clearListMap(): void;\n  serializeBinary(): Uint8Array;\n  toObject(includeInstance?: boolean): Shop.AsObject;\n  static toObject(includeInstance: boolean, msg: Shop): Shop.AsObject;\n  static extensions: {[key: number]: jspb.ExtensionFieldInfo\u003cjspb.Message\u003e};\n  static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo\u003cjspb.Message\u003e};\n  static serializeBinaryToWriter(message: Shop, writer: jspb.BinaryWriter): void;\n  static deserializeBinary(bytes: Uint8Array): Shop;\n  static deserializeBinaryFromReader(message: Shop, reader: jspb.BinaryReader): Shop;\n}\n\nexport namespace Shop {\n  export type AsObject = {\n    name: string,\n    listMap: Array\u003c[number, Product.AsObject]\u003e,\n  }\n}\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/protoc-gen-grpc.svg\n[npm-url]: https://npmjs.org/package/protoc-gen-grpc\n[downloads-image]: https://img.shields.io/npm/dm/protoc-gen-grpc.svg\n[downloads-url]: https://npmjs.org/package/protoc-gen-grpc\n[travis-image]: https://app.travis-ci.com/stultuss/protoc-gen-grpc-ts.svg?branch=master\n[travis-url]: https://app.travis-ci.com/stultuss/protoc-gen-grpc-ts\n[travis-linux-image]: https://img.shields.io/travis/stultuss/protoc-gen-grpc-ts/master.svg?label=linux\n[travis-linux-url]: https://app.travis-ci.org/stultuss/protoc-gen-grpc-ts\n[travis-windows-image]: https://img.shields.io/travis/stultuss/protoc-gen-grpc-ts/master.svg?label=windows\n[travis-windows-url]: https://app.travis-ci.org/stultuss/protoc-gen-grpc-ts\n[coveralls-image]: https://img.shields.io/coveralls/stultuss/protoc-gen-grpc-ts/master.svg\n[coveralls-url]: https://coveralls.io/r/stultuss/protoc-gen-grpc-ts?branch=master\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstultuss%2Fprotoc-gen-grpc-ts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstultuss%2Fprotoc-gen-grpc-ts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstultuss%2Fprotoc-gen-grpc-ts/lists"}