UNPKG

protoc-gen-tsd

Version:

Protocol Buffers Compiler(protoc) plugin for TypeScript - Generate definition file(d.ts)

57 lines (56 loc) 3.04 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const plugin_pb_1 = require("google-protobuf/google/protobuf/compiler/plugin_pb"); const util_1 = require("./util"); const proto_ast_map_1 = require("./proto-ast-map"); const file_descriptor_formatter_1 = require("./format/file-descriptor-formatter"); const tmpl_engine_1 = require("./tmpl-engine"); const prettier = __importStar(require("prettier")); util_1.withAllStdIn((inputBuffer) => { try { const typedInputBuffer = new Uint8Array(inputBuffer.length); typedInputBuffer.set(inputBuffer); const codeGenRequest = plugin_pb_1.CodeGeneratorRequest.deserializeBinary(typedInputBuffer); const codeGenResponse = new plugin_pb_1.CodeGeneratorResponse(); const protoAbstractSyntaxTreeMap = new proto_ast_map_1.ProtoAbstractSyntaxTreeMap(); const fileNameToDescriptor = {}; codeGenRequest.getProtoFileList().forEach((fileDescriptorProto) => { fileNameToDescriptor[fileDescriptorProto.getName()] = fileDescriptorProto; protoAbstractSyntaxTreeMap.addFileDescriptorProto(fileDescriptorProto); }); codeGenRequest.getFileToGenerateList().forEach((fullyQualifiedFileName) => { const outputFileName = util_1.replaceProtoSuffix(fullyQualifiedFileName); const messageTypeDefinitionFile = new plugin_pb_1.CodeGeneratorResponse.File(); messageTypeDefinitionFile.setName(outputFileName + '.d.ts'); const messageProtoModel = file_descriptor_formatter_1.formatFileDescriptorProto(fileNameToDescriptor[fullyQualifiedFileName], protoAbstractSyntaxTreeMap); let content = tmpl_engine_1.renderTemplate('proto-tsd.tmpl', messageProtoModel); content = prettier.format(content, { singleQuote: true, parser: 'typescript' }); messageTypeDefinitionFile.setContent(content); codeGenResponse.addFile(messageTypeDefinitionFile); }); process.stdout.write(Buffer.from(codeGenResponse.serializeBinary())); } catch (err) { console.error('protoc-gen-tsd error: ' + err.stack + '\n'); process.exit(1); } });