grpc protoc code example

Example 1: protoc-gen-grpc

# #!/bin/bash

PROTO_DIR="./proto"
PROTO_GEN_GRPC="protoc-gen-grpc"
PROTOC_GEN_GRPC_TS="protoc-gen-grpc-ts"

# generate js codes
${PROTO_GEN_GRPC} \
--js_out=import_style=commonjs,binary:${PROTO_DIR} \
--grpc_out=${PROTO_DIR} \
--proto_path ${PROTO_DIR} \
${PROTO_DIR}/*.proto

# generate d.ts codes
${PROTOC_GEN_GRPC_TS} \
--ts_out=service=true:${PROTO_DIR} \
--proto_path ${PROTO_DIR} \
${PROTO_DIR}/*.proto

Example 2: protoc-gen-grpc

## Makefile Script

PROTO_DIR := ./proto
PROTO_GEN_GRPC := protoc-gen-grpc
PROTOC_GEN_GRPC_TS := protoc-gen-grpc-ts

protogen: cleanup.o generate.o

cleanup.o:
	rm ${PROTO_DIR}/*.{ts,js}

generate.o:
	# generate js codes
	${PROTO_GEN_GRPC} \
	--js_out=import_style=commonjs,binary:${PROTO_DIR} \
	--grpc_out=${PROTO_DIR} \
	--proto_path ${PROTO_DIR} \
	${PROTO_DIR}/*.proto

	# generate d.ts codes
	${PROTOC_GEN_GRPC_TS} \
	--ts_out=service=true:${PROTO_DIR} \
	--proto_path ${PROTO_DIR} \
	${PROTO_DIR}/*.proto

Example 3: grpc protoc gen

follow my repository for generate .protofile to javascript and typescript config

https://github.com/restuwahyu13/grpc-typescript-config

Example 4: grpc tools node protoc

GRPC_TOOLS=$(exec grpc_tools_node_protoc)
INPUT_DIR="./src/protos"
INPUT_DIR_FILE="./src/protos/*.proto"
OUTPUT_DIR="./src/typedefs"
FIND_FILE=$(find ${OUTPUT_DIR} -name "*.js")
PROTOC_GEN_TS_PATH_WINDOWS="./node_modules/.bin/protoc-gen-ts.cmd"
PROTOC_GEN_TS_PATH_LINMAC="./node_modules/.bin/protoc-gen-ts"

if [ "$FIND_FILE" ]
then
#remove all files
  $(rm ${OUTPUT_DIR}/*)
#generate config if file exist
  ${GRPC_TOOLS} \
	--plugin=protoc-gen-ts=${PROTOC_GEN_TS_PATH_WINDOWS} \
	--grpc_out=grpc_js:${OUTPUT_DIR} \
	--js_out=import_style=commonjs,binary:${OUTPUT_DIR} \
	--ts_out=grpc_js:${OUTPUT_DIR} \
	--proto_path ${INPUT_DIR} ${INPUT_DIR_FILE}
else
#generate config if file not exist
  ${GRPC_TOOLS} \
	--plugin=protoc-gen-ts=${PROTOC_GEN_TS_PATH_WINDOWS} \
	--grpc_out=grpc_js:${OUTPUT_DIR} \
	--js_out=import_style=commonjs,binary:${OUTPUT_DIR} \
	--ts_out=grpc_js:${OUTPUT_DIR} \
	--proto_path ${INPUT_DIR} ${INPUT_DIR_FILE}
fi