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