diff --git a/build/index.js b/build/index.js index bb281f3..a8a541c 100644 --- a/build/index.js +++ b/build/index.js @@ -14,36 +14,36 @@ const ProtoSvcTsdFormatter_1 = require("./lib/format/ProtoSvcTsdFormatter"); const TplEngine_1 = require("./lib/TplEngine"); Utility_1.Utility.withAllStdIn((inputBuff) => { try { - let typedInputBuff = new Uint8Array(inputBuff.length); - //noinspection TypeScriptValidateTypes + const typedInputBuff = new Uint8Array(inputBuff.length); typedInputBuff.set(inputBuff); - let codeGenRequest = plugin_pb_1.CodeGeneratorRequest.deserializeBinary(typedInputBuff); - let codeGenResponse = new plugin_pb_1.CodeGeneratorResponse(); - let exportMap = new ExportMap_1.ExportMap(); - let fileNameToDescriptor = {}; - codeGenRequest.getProtoFileList().forEach(protoFileDescriptor => { + const codeGenRequest = plugin_pb_1.CodeGeneratorRequest.deserializeBinary(typedInputBuff); + const codeGenResponse = new plugin_pb_1.CodeGeneratorResponse(); + const exportMap = new ExportMap_1.ExportMap(); + const fileNameToDescriptor = {}; + const isGrpcJs = "generate_package_definition" === codeGenRequest.getParameter(); + codeGenRequest.getProtoFileList().forEach((protoFileDescriptor) => { fileNameToDescriptor[protoFileDescriptor.getName()] = protoFileDescriptor; exportMap.addFileDescriptor(protoFileDescriptor); }); - codeGenRequest.getFileToGenerateList().forEach(fileName => { + codeGenRequest.getFileToGenerateList().forEach((fileName) => { // message part - let msgFileName = Utility_1.Utility.filePathFromProtoWithoutExt(fileName); - let msgTsdFile = new plugin_pb_1.CodeGeneratorResponse.File(); + const msgFileName = Utility_1.Utility.filePathFromProtoWithoutExt(fileName); + const msgTsdFile = new plugin_pb_1.CodeGeneratorResponse.File(); msgTsdFile.setName(msgFileName + ".d.ts"); const msgModel = ProtoMsgTsdFormatter_1.ProtoMsgTsdFormatter.format(fileNameToDescriptor[fileName], exportMap); - msgTsdFile.setContent(TplEngine_1.TplEngine.render('msg_tsd', msgModel)); + msgTsdFile.setContent(TplEngine_1.TplEngine.render("msg_tsd", msgModel)); codeGenResponse.addFile(msgTsdFile); // service part - let fileDescriptorModel = ProtoSvcTsdFormatter_1.ProtoSvcTsdFormatter.format(fileNameToDescriptor[fileName], exportMap); + const fileDescriptorModel = ProtoSvcTsdFormatter_1.ProtoSvcTsdFormatter.format(fileNameToDescriptor[fileName], exportMap, isGrpcJs); if (fileDescriptorModel != null) { - let svcFileName = Utility_1.Utility.svcFilePathFromProtoWithoutExt(fileName); - let svtTsdFile = new plugin_pb_1.CodeGeneratorResponse.File(); + const svcFileName = Utility_1.Utility.svcFilePathFromProtoWithoutExt(fileName); + const svtTsdFile = new plugin_pb_1.CodeGeneratorResponse.File(); svtTsdFile.setName(svcFileName + ".d.ts"); - svtTsdFile.setContent(TplEngine_1.TplEngine.render('svc_tsd', fileDescriptorModel)); + svtTsdFile.setContent(TplEngine_1.TplEngine.render("svc_tsd", fileDescriptorModel)); codeGenResponse.addFile(svtTsdFile); } }); - process.stdout.write(new Buffer(codeGenResponse.serializeBinary())); + process.stdout.write(Buffer.from(codeGenResponse.serializeBinary())); } catch (err) { console.error("protoc-gen-ts error: " + err.stack + "\n"); diff --git a/build/index.js.map b/build/index.js.map index 3f5db87..822b379 100644 --- a/build/index.js.map +++ b/build/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA;;;;;GAKG;AACH,+CAA0C;AAC1C,2CAAsC;AACtC,kFAA+G;AAG/G,4EAAuE;AACvE,4EAAuE;AACvE,+CAA4C;AAE5C,iBAAO,CAAC,YAAY,CAAC,CAAC,SAAiB,EAAE,EAAE;IAEvC,IAAI;QACA,IAAI,cAAc,GAAG,IAAI,UAAU,CAAE,SAAiB,CAAC,MAAM,CAAC,CAAC;QAC/D,sCAAsC;QACtC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE9B,IAAI,cAAc,GAAG,gCAAoB,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAC5E,IAAI,eAAe,GAAG,IAAI,iCAAqB,EAAE,CAAC;QAClD,IAAI,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAC;QAChC,IAAI,oBAAoB,GAA2C,EAAE,CAAC;QAEtE,cAAc,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE;YAC5D,oBAAoB,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,GAAG,mBAAmB,CAAC;YAC1E,SAAS,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,qBAAqB,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACtD,eAAe;YACf,IAAI,WAAW,GAAG,iBAAO,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;YAChE,IAAI,UAAU,GAAG,IAAI,iCAAqB,CAAC,IAAI,EAAE,CAAC;YAClD,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,2CAAoB,CAAC,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;YACxF,UAAU,CAAC,UAAU,CAAC,qBAAS,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC7D,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAEpC,eAAe;YACf,IAAI,mBAAmB,GAAG,2CAAoB,CAAC,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;YACjG,IAAI,mBAAmB,IAAI,IAAI,EAAE;gBAC7B,IAAI,WAAW,GAAG,iBAAO,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;gBACnE,IAAI,UAAU,GAAG,IAAI,iCAAqB,CAAC,IAAI,EAAE,CAAC;gBAClD,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC;gBAC1C,UAAU,CAAC,UAAU,CAAC,qBAAS,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC;gBACxE,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;aACvC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;KACvE;IAAC,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,uBAAuB,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;AAEL,CAAC,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA;;;;;GAKG;AACH,+CAA0C;AAC1C,2CAAsC;AACtC,kFAA+G;AAG/G,4EAAuE;AACvE,4EAAuE;AACvE,+CAA0C;AAE1C,iBAAO,CAAC,YAAY,CAAC,CAAC,SAAiB,EAAE,EAAE;IAEvC,IAAI;QACA,MAAM,cAAc,GAAG,IAAI,UAAU,CAAE,SAAiB,CAAC,MAAM,CAAC,CAAC;QACjE,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE9B,MAAM,cAAc,GAAG,gCAAoB,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAC9E,MAAM,eAAe,GAAG,IAAI,iCAAqB,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAC;QAClC,MAAM,oBAAoB,GAA2C,EAAE,CAAC;QAExE,MAAM,QAAQ,GAAG,6BAA6B,KAAK,cAAc,CAAC,YAAY,EAAE,CAAC;QAEjF,cAAc,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,EAAE;YAC9D,oBAAoB,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,GAAG,mBAAmB,CAAC;YAC1E,SAAS,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,qBAAqB,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACxD,eAAe;YACf,MAAM,WAAW,GAAG,iBAAO,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;YAClE,MAAM,UAAU,GAAG,IAAI,iCAAqB,CAAC,IAAI,EAAE,CAAC;YACpD,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,2CAAoB,CAAC,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;YACxF,UAAU,CAAC,UAAU,CAAC,qBAAS,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC7D,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAEpC,eAAe;YACf,MAAM,mBAAmB,GAAG,2CAAoB,CAAC,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC7G,IAAI,mBAAmB,IAAI,IAAI,EAAE;gBAC7B,MAAM,WAAW,GAAG,iBAAO,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;gBACrE,MAAM,UAAU,GAAG,IAAI,iCAAqB,CAAC,IAAI,EAAE,CAAC;gBACpD,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC;gBAC1C,UAAU,CAAC,UAAU,CAAC,qBAAS,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC;gBACxE,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;aACvC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;KACxE;IAAC,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,uBAAuB,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;AAEL,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/build/lib/format/ProtoSvcTsdFormatter.js b/build/lib/format/ProtoSvcTsdFormatter.js index cbb6c32..fd291a1 100644 --- a/build/lib/format/ProtoSvcTsdFormatter.js +++ b/build/lib/format/ProtoSvcTsdFormatter.js @@ -21,7 +21,7 @@ var ProtoSvcTsdFormatter; responseTypeName: "", type: "", }); - function format(descriptor, exportMap) { + function format(descriptor, exportMap, isGrpcJs) { if (descriptor.getServiceList().length === 0) { return null; } @@ -31,7 +31,13 @@ var ProtoSvcTsdFormatter; const imports = []; const services = []; // Need to import the non-service file that was generated for this .proto file - imports.push(`import * as grpc from "grpc";`); + if (isGrpcJs) { + imports.push(`import * as grpc from "@grpc/grpc-js";`); + imports.push(`import {handleClientStreamingCall} from "@grpc/grpc-js/build/src/server-call";`); + } + else { + imports.push(`import * as grpc from "grpc";`); + } const asPseudoNamespace = Utility_1.Utility.filePathToPseudoNamespace(fileName); imports.push(`import * as ${asPseudoNamespace} from "${upToRoot}${Utility_1.Utility.filePathFromProtoWithoutExt(fileName)}";`); descriptor.getDependencyList().forEach((dependency) => { @@ -78,6 +84,9 @@ var ProtoSvcTsdFormatter; TplEngine_1.TplEngine.registerHelper("lcFirst", (str) => { return str.charAt(0).toLowerCase() + str.slice(1); }); + TplEngine_1.TplEngine.registerHelper("fetchIsGrpcJs", () => { + return isGrpcJs; + }); return { packageName, fileName, diff --git a/build/lib/format/ProtoSvcTsdFormatter.js.map b/build/lib/format/ProtoSvcTsdFormatter.js.map index 396d000..16ae47f 100644 --- a/build/lib/format/ProtoSvcTsdFormatter.js.map +++ b/build/lib/format/ProtoSvcTsdFormatter.js.map @@ -1 +1 @@ -{"version":3,"file":"ProtoSvcTsdFormatter.js","sourceRoot":"","sources":["../../../src/lib/format/ProtoSvcTsdFormatter.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ProtoSvcTsdFormatter.js","sourceRoot":"","sources":["../../../src/lib/format/ProtoSvcTsdFormatter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/lib/template/svc_tsd.hbs b/build/lib/template/svc_tsd.hbs index 7956059..1228e78 100644 --- a/build/lib/template/svc_tsd.hbs +++ b/build/lib/template/svc_tsd.hbs @@ -35,7 +35,11 @@ export interface I{{{serviceName}}}Server { {{lcFirst methodName}}: grpc.handleUnaryCall<{{{requestTypeName}}}, {{{responseTypeName}}}>; {{/eq}} {{#eq type "ClientWritableStream"}} + {{#if (fetchIsGrpcJs)}} + {{lcFirst methodName}}: handleClientStreamingCall<{{{requestTypeName}}}, {{{responseTypeName}}}>; + {{else}} {{lcFirst methodName}}: grpc.handleClientStreamingCall<{{{requestTypeName}}}, {{{responseTypeName}}}>; + {{/if}} {{/eq}} {{#eq type "ClientReadableStream"}} {{lcFirst methodName}}: grpc.handleServerStreamingCall<{{{requestTypeName}}}, {{{responseTypeName}}}>; diff --git a/src/index.ts b/src/index.ts index 2cfee2c..e514628 100644 --- a/src/index.ts +++ b/src/index.ts @@ -11,46 +11,47 @@ import {FileDescriptorProto} from "google-protobuf/google/protobuf/descriptor_pb import {ProtoMsgTsdFormatter} from "./lib/format/ProtoMsgTsdFormatter"; import {ProtoSvcTsdFormatter} from "./lib/format/ProtoSvcTsdFormatter"; -import { TplEngine } from "./lib/TplEngine"; +import {TplEngine} from "./lib/TplEngine"; Utility.withAllStdIn((inputBuff: Buffer) => { try { - let typedInputBuff = new Uint8Array((inputBuff as any).length); - //noinspection TypeScriptValidateTypes + const typedInputBuff = new Uint8Array((inputBuff as any).length); typedInputBuff.set(inputBuff); - let codeGenRequest = CodeGeneratorRequest.deserializeBinary(typedInputBuff); - let codeGenResponse = new CodeGeneratorResponse(); - let exportMap = new ExportMap(); - let fileNameToDescriptor: { [key: string]: FileDescriptorProto } = {}; + const codeGenRequest = CodeGeneratorRequest.deserializeBinary(typedInputBuff); + const codeGenResponse = new CodeGeneratorResponse(); + const exportMap = new ExportMap(); + const fileNameToDescriptor: { [key: string]: FileDescriptorProto } = {}; - codeGenRequest.getProtoFileList().forEach(protoFileDescriptor => { + const isGrpcJs = "generate_package_definition" === codeGenRequest.getParameter(); + + codeGenRequest.getProtoFileList().forEach((protoFileDescriptor) => { fileNameToDescriptor[protoFileDescriptor.getName()] = protoFileDescriptor; exportMap.addFileDescriptor(protoFileDescriptor); }); - codeGenRequest.getFileToGenerateList().forEach(fileName => { + codeGenRequest.getFileToGenerateList().forEach((fileName) => { // message part - let msgFileName = Utility.filePathFromProtoWithoutExt(fileName); - let msgTsdFile = new CodeGeneratorResponse.File(); + const msgFileName = Utility.filePathFromProtoWithoutExt(fileName); + const msgTsdFile = new CodeGeneratorResponse.File(); msgTsdFile.setName(msgFileName + ".d.ts"); const msgModel = ProtoMsgTsdFormatter.format(fileNameToDescriptor[fileName], exportMap); - msgTsdFile.setContent(TplEngine.render('msg_tsd', msgModel)); + msgTsdFile.setContent(TplEngine.render("msg_tsd", msgModel)); codeGenResponse.addFile(msgTsdFile); // service part - let fileDescriptorModel = ProtoSvcTsdFormatter.format(fileNameToDescriptor[fileName], exportMap); + const fileDescriptorModel = ProtoSvcTsdFormatter.format(fileNameToDescriptor[fileName], exportMap, isGrpcJs); if (fileDescriptorModel != null) { - let svcFileName = Utility.svcFilePathFromProtoWithoutExt(fileName); - let svtTsdFile = new CodeGeneratorResponse.File(); + const svcFileName = Utility.svcFilePathFromProtoWithoutExt(fileName); + const svtTsdFile = new CodeGeneratorResponse.File(); svtTsdFile.setName(svcFileName + ".d.ts"); - svtTsdFile.setContent(TplEngine.render('svc_tsd', fileDescriptorModel)); + svtTsdFile.setContent(TplEngine.render("svc_tsd", fileDescriptorModel)); codeGenResponse.addFile(svtTsdFile); } }); - process.stdout.write(new Buffer(codeGenResponse.serializeBinary())); + process.stdout.write(Buffer.from(codeGenResponse.serializeBinary())); } catch (err) { console.error("protoc-gen-ts error: " + err.stack + "\n"); process.exit(1); diff --git a/src/lib/format/ProtoSvcTsdFormatter.ts b/src/lib/format/ProtoSvcTsdFormatter.ts index b3ab734..1f473f6 100644 --- a/src/lib/format/ProtoSvcTsdFormatter.ts +++ b/src/lib/format/ProtoSvcTsdFormatter.ts @@ -47,7 +47,7 @@ export namespace ProtoSvcTsdFormatter { services: IServiceType[]; } - export function format(descriptor: FileDescriptorProto, exportMap: ExportMap): IProtoSvcTsdModel { + export function format(descriptor: FileDescriptorProto, exportMap: ExportMap, isGrpcJs: boolean): IProtoSvcTsdModel { if (descriptor.getServiceList().length === 0) { return null; } @@ -60,7 +60,12 @@ export namespace ProtoSvcTsdFormatter { const services: IServiceType[] = []; // Need to import the non-service file that was generated for this .proto file - imports.push(`import * as grpc from "grpc";`); + if (isGrpcJs) { + imports.push(`import * as grpc from "@grpc/grpc-js";`); + imports.push(`import {handleClientStreamingCall} from "@grpc/grpc-js/build/src/server-call";`); + } else { + imports.push(`import * as grpc from "grpc";`); + } const asPseudoNamespace = Utility.filePathToPseudoNamespace(fileName); imports.push(`import * as ${asPseudoNamespace} from "${upToRoot}${Utility.filePathFromProtoWithoutExt(fileName)}";`); @@ -113,6 +118,10 @@ export namespace ProtoSvcTsdFormatter { return str.charAt(0).toLowerCase() + str.slice(1); }); + TplEngine.registerHelper("fetchIsGrpcJs", () => { + return isGrpcJs; + }); + return { packageName, fileName, diff --git a/src/lib/template/svc_tsd.hbs b/src/lib/template/svc_tsd.hbs index 7956059..1228e78 100644 --- a/src/lib/template/svc_tsd.hbs +++ b/src/lib/template/svc_tsd.hbs @@ -35,7 +35,11 @@ export interface I{{{serviceName}}}Server { {{lcFirst methodName}}: grpc.handleUnaryCall<{{{requestTypeName}}}, {{{responseTypeName}}}>; {{/eq}} {{#eq type "ClientWritableStream"}} + {{#if (fetchIsGrpcJs)}} + {{lcFirst methodName}}: handleClientStreamingCall<{{{requestTypeName}}}, {{{responseTypeName}}}>; + {{else}} {{lcFirst methodName}}: grpc.handleClientStreamingCall<{{{requestTypeName}}}, {{{responseTypeName}}}>; + {{/if}} {{/eq}} {{#eq type "ClientReadableStream"}} {{lcFirst methodName}}: grpc.handleServerStreamingCall<{{{requestTypeName}}}, {{{responseTypeName}}}>;