UNPKG

protoc-gen-ts-alt

Version:

Generate d.ts definitions for generated js files from grpc_tools_node_protoc

92 lines 4.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Utility_1 = require("../Utility"); const TplEngine_1 = require("../TplEngine"); const WellKnown_1 = require("../WellKnown"); const DependencyFilter_1 = require("../DependencyFilter"); const FieldTypesFormatter_1 = require("./partial/FieldTypesFormatter"); const path_1 = require("path"); var ProtoSvcTsdFormatter; (function (ProtoSvcTsdFormatter) { ProtoSvcTsdFormatter.defaultServiceType = JSON.stringify({ serviceName: "", methods: [], }); ProtoSvcTsdFormatter.defaultServiceMethodType = JSON.stringify({ packageName: "", serviceName: "", methodName: "", requestStream: false, responseStream: false, requestTypeName: "", responseTypeName: "", type: "", }); function format(descriptor, exportMap) { if (descriptor.getServiceList().length === 0) { return null; } let fileName = descriptor.getName(); let packageName = descriptor.getPackage(); let upToRoot = Utility_1.Utility.getPathToRoot(fileName); let imports = []; let services = []; // Need to import the non-service file that was generated for this .proto file imports.push(`import * as grpc from "grpc";`); let asPseudoNamespace = Utility_1.Utility.filePathToPseudoNamespace(fileName); imports.push(`import * as ${asPseudoNamespace} from "${upToRoot}${Utility_1.Utility.filePathFromProtoWithoutExt(fileName)}";`); descriptor.getDependencyList().forEach((dependency) => { if (DependencyFilter_1.DependencyFilter.indexOf(dependency) !== -1) { return; // filtered } let pseudoNamespace = Utility_1.Utility.filePathToPseudoNamespace(dependency); if (dependency in WellKnown_1.WellKnownTypesMap) { imports.push(`import * as ${pseudoNamespace} from "${WellKnown_1.WellKnownTypesMap[dependency]}";`); } else { let filePath = Utility_1.Utility.filePathFromProtoWithoutExt(dependency); imports.push(`import * as ${pseudoNamespace} from "${upToRoot + filePath}";`); } }); descriptor.getServiceList().forEach(service => { let serviceData = JSON.parse(ProtoSvcTsdFormatter.defaultServiceType); serviceData.serviceName = service.getName(); service.getMethodList().forEach(method => { let methodData = JSON.parse(ProtoSvcTsdFormatter.defaultServiceMethodType); methodData.packageName = packageName; methodData.serviceName = serviceData.serviceName; methodData.methodName = method.getName(); methodData.requestStream = method.getClientStreaming(); methodData.responseStream = method.getServerStreaming(); methodData.requestTypeName = FieldTypesFormatter_1.FieldTypesFormatter.getFieldType(FieldTypesFormatter_1.MESSAGE_TYPE, method.getInputType().slice(1), "", exportMap); methodData.responseTypeName = FieldTypesFormatter_1.FieldTypesFormatter.getFieldType(FieldTypesFormatter_1.MESSAGE_TYPE, method.getOutputType().slice(1), "", exportMap); if (!methodData.requestStream && !methodData.responseStream) { methodData.type = 'ClientUnaryCall'; } else if (methodData.requestStream && !methodData.responseStream) { methodData.type = 'ClientWritableStream'; } else if (!methodData.requestStream && methodData.responseStream) { methodData.type = 'ClientReadableStream'; } else if (methodData.requestStream && methodData.responseStream) { methodData.type = 'ClientDuplexStream'; } serviceData.methods.push(methodData); }); services.push(serviceData); }); TplEngine_1.TplEngine.registerHelper('lcFirst', function (str) { return str.charAt(0).toLowerCase() + str.slice(1); }); return { packageName: packageName, fileName: fileName, fileNameWithoutExt: path_1.parse(fileName).name, imports: imports, services: services, }; } ProtoSvcTsdFormatter.format = format; })(ProtoSvcTsdFormatter = exports.ProtoSvcTsdFormatter || (exports.ProtoSvcTsdFormatter = {})); //# sourceMappingURL=ProtoSvcTsdFormatter.js.map