UNPKG

protoc-gen-tsd

Version:

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

63 lines (62 loc) 2.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProtoAbstractSyntaxTreeMap = void 0; class ProtoAbstractSyntaxTreeMap { constructor() { this.messageTypeMap = {}; this.enumTypeMap = {}; } exportMessage(packageScope, fileDescriptor, messageDescriptor) { const messageEntry = { protoPackage: fileDescriptor.getPackage(), protoFileName: fileDescriptor.getName(), messageDescriptorOptions: messageDescriptor.getOptions(), mapFieldOptions: messageDescriptor.getOptions() && messageDescriptor.getOptions().getMapEntry() ? { key: [ messageDescriptor.getFieldList()[0].getType(), messageDescriptor.getFieldList()[0].getTypeName().slice(1), ], value: [ messageDescriptor.getFieldList()[1].getType(), messageDescriptor.getFieldList()[1].getTypeName().slice(1), ], } : undefined, }; const entryName = `${packageScope ? packageScope + '.' : ''}${messageDescriptor.getName()}`; this.messageTypeMap[entryName] = messageEntry; messageDescriptor.getNestedTypeList().forEach((nestedMessageType) => { this.exportMessage(entryName, fileDescriptor, nestedMessageType); }); messageDescriptor.getEnumTypeList().forEach((enumType) => { const identifier = entryName + '.' + enumType.getName(); this.enumTypeMap[identifier] = { protoPackage: fileDescriptor.getPackage(), protoFileName: fileDescriptor.getName(), enumDescriptorOptions: enumType.getOptions(), }; }); } addFileDescriptorProto(fileDescriptorProto) { const protoPackage = fileDescriptorProto.getPackage(); fileDescriptorProto.getMessageTypeList().forEach((messageDescriptor) => { this.exportMessage(protoPackage, fileDescriptorProto, messageDescriptor); }); fileDescriptorProto.getEnumTypeList().forEach((enumTypeDescriptor) => { const entryName = `${protoPackage ? protoPackage + '.' : ''}${enumTypeDescriptor.getName()}`; this.enumTypeMap[entryName] = { protoPackage: fileDescriptorProto.getPackage(), protoFileName: fileDescriptorProto.getName(), enumDescriptorOptions: enumTypeDescriptor.getOptions(), }; }); } getMessage(key) { return this.messageTypeMap[key]; } getEnum(key) { return this.enumTypeMap[key]; } } exports.ProtoAbstractSyntaxTreeMap = ProtoAbstractSyntaxTreeMap;