protoc-gen-tsd
Version:
Protocol Buffers Compiler(protoc) plugin for TypeScript - Generate definition file(d.ts)
57 lines (56 loc) • 3.04 kB
JavaScript
;
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);
}
});