12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052 |
- "use strict";
- var $protobuf = require("../..");
- module.exports = exports = $protobuf.descriptor = $protobuf.Root.fromJSON(require("../../google/protobuf/descriptor.json")).lookup(".google.protobuf");
-
- var Namespace = $protobuf.Namespace,
- Root = $protobuf.Root,
- Enum = $protobuf.Enum,
- Type = $protobuf.Type,
- Field = $protobuf.Field,
- MapField = $protobuf.MapField,
- OneOf = $protobuf.OneOf,
- Service = $protobuf.Service,
- Method = $protobuf.Method;
-
- // --- Root ---
-
- /**
- * Properties of a FileDescriptorSet message.
- * @interface IFileDescriptorSet
- * @property {IFileDescriptorProto[]} file Files
- */
-
- /**
- * Properties of a FileDescriptorProto message.
- * @interface IFileDescriptorProto
- * @property {string} [name] File name
- * @property {string} [package] Package
- * @property {*} [dependency] Not supported
- * @property {*} [publicDependency] Not supported
- * @property {*} [weakDependency] Not supported
- * @property {IDescriptorProto[]} [messageType] Nested message types
- * @property {IEnumDescriptorProto[]} [enumType] Nested enums
- * @property {IServiceDescriptorProto[]} [service] Nested services
- * @property {IFieldDescriptorProto[]} [extension] Nested extension fields
- * @property {IFileOptions} [options] Options
- * @property {*} [sourceCodeInfo] Not supported
- * @property {string} [syntax="proto2"] Syntax
- */
-
- /**
- * Properties of a FileOptions message.
- * @interface IFileOptions
- * @property {string} [javaPackage]
- * @property {string} [javaOuterClassname]
- * @property {boolean} [javaMultipleFiles]
- * @property {boolean} [javaGenerateEqualsAndHash]
- * @property {boolean} [javaStringCheckUtf8]
- * @property {IFileOptionsOptimizeMode} [optimizeFor=1]
- * @property {string} [goPackage]
- * @property {boolean} [ccGenericServices]
- * @property {boolean} [javaGenericServices]
- * @property {boolean} [pyGenericServices]
- * @property {boolean} [deprecated]
- * @property {boolean} [ccEnableArenas]
- * @property {string} [objcClassPrefix]
- * @property {string} [csharpNamespace]
- */
-
- /**
- * Values of he FileOptions.OptimizeMode enum.
- * @typedef IFileOptionsOptimizeMode
- * @type {number}
- * @property {number} SPEED=1
- * @property {number} CODE_SIZE=2
- * @property {number} LITE_RUNTIME=3
- */
-
- /**
- * Creates a root from a descriptor set.
- * @param {IFileDescriptorSet|Reader|Uint8Array} descriptor Descriptor
- * @returns {Root} Root instance
- */
- Root.fromDescriptor = function fromDescriptor(descriptor) {
-
- // Decode the descriptor message if specified as a buffer:
- if (typeof descriptor.length === "number")
- descriptor = exports.FileDescriptorSet.decode(descriptor);
-
- var root = new Root();
-
- if (descriptor.file) {
- var fileDescriptor,
- filePackage;
- for (var j = 0, i; j < descriptor.file.length; ++j) {
- filePackage = root;
- if ((fileDescriptor = descriptor.file[j])["package"] && fileDescriptor["package"].length)
- filePackage = root.define(fileDescriptor["package"]);
- if (fileDescriptor.name && fileDescriptor.name.length)
- root.files.push(filePackage.filename = fileDescriptor.name);
- if (fileDescriptor.messageType)
- for (i = 0; i < fileDescriptor.messageType.length; ++i)
- filePackage.add(Type.fromDescriptor(fileDescriptor.messageType[i], fileDescriptor.syntax));
- if (fileDescriptor.enumType)
- for (i = 0; i < fileDescriptor.enumType.length; ++i)
- filePackage.add(Enum.fromDescriptor(fileDescriptor.enumType[i]));
- if (fileDescriptor.extension)
- for (i = 0; i < fileDescriptor.extension.length; ++i)
- filePackage.add(Field.fromDescriptor(fileDescriptor.extension[i]));
- if (fileDescriptor.service)
- for (i = 0; i < fileDescriptor.service.length; ++i)
- filePackage.add(Service.fromDescriptor(fileDescriptor.service[i]));
- var opts = fromDescriptorOptions(fileDescriptor.options, exports.FileOptions);
- if (opts) {
- var ks = Object.keys(opts);
- for (i = 0; i < ks.length; ++i)
- filePackage.setOption(ks[i], opts[ks[i]]);
- }
- }
- }
-
- return root;
- };
-
- /**
- * Converts a root to a descriptor set.
- * @returns {Message<IFileDescriptorSet>} Descriptor
- * @param {string} [syntax="proto2"] Syntax
- */
- Root.prototype.toDescriptor = function toDescriptor(syntax) {
- var set = exports.FileDescriptorSet.create();
- Root_toDescriptorRecursive(this, set.file, syntax);
- return set;
- };
-
- // Traverses a namespace and assembles the descriptor set
- function Root_toDescriptorRecursive(ns, files, syntax) {
-
- // Create a new file
- var file = exports.FileDescriptorProto.create({ name: ns.filename || (ns.fullName.substring(1).replace(/\./g, "_") || "root") + ".proto" });
- if (syntax)
- file.syntax = syntax;
- if (!(ns instanceof Root))
- file["package"] = ns.fullName.substring(1);
-
- // Add nested types
- for (var i = 0, nested; i < ns.nestedArray.length; ++i)
- if ((nested = ns._nestedArray[i]) instanceof Type)
- file.messageType.push(nested.toDescriptor(syntax));
- else if (nested instanceof Enum)
- file.enumType.push(nested.toDescriptor());
- else if (nested instanceof Field)
- file.extension.push(nested.toDescriptor(syntax));
- else if (nested instanceof Service)
- file.service.push(nested.toDescriptor());
- else if (nested instanceof /* plain */ Namespace)
- Root_toDescriptorRecursive(nested, files, syntax); // requires new file
-
- // Keep package-level options
- file.options = toDescriptorOptions(ns.options, exports.FileOptions);
-
- // And keep the file only if there is at least one nested object
- if (file.messageType.length + file.enumType.length + file.extension.length + file.service.length)
- files.push(file);
- }
-
- // --- Type ---
-
- /**
- * Properties of a DescriptorProto message.
- * @interface IDescriptorProto
- * @property {string} [name] Message type name
- * @property {IFieldDescriptorProto[]} [field] Fields
- * @property {IFieldDescriptorProto[]} [extension] Extension fields
- * @property {IDescriptorProto[]} [nestedType] Nested message types
- * @property {IEnumDescriptorProto[]} [enumType] Nested enums
- * @property {IDescriptorProtoExtensionRange[]} [extensionRange] Extension ranges
- * @property {IOneofDescriptorProto[]} [oneofDecl] Oneofs
- * @property {IMessageOptions} [options] Not supported
- * @property {IDescriptorProtoReservedRange[]} [reservedRange] Reserved ranges
- * @property {string[]} [reservedName] Reserved names
- */
-
- /**
- * Properties of a MessageOptions message.
- * @interface IMessageOptions
- * @property {boolean} [mapEntry=false] Whether this message is a map entry
- */
-
- /**
- * Properties of an ExtensionRange message.
- * @interface IDescriptorProtoExtensionRange
- * @property {number} [start] Start field id
- * @property {number} [end] End field id
- */
-
- /**
- * Properties of a ReservedRange message.
- * @interface IDescriptorProtoReservedRange
- * @property {number} [start] Start field id
- * @property {number} [end] End field id
- */
-
- var unnamedMessageIndex = 0;
-
- /**
- * Creates a type from a descriptor.
- * @param {IDescriptorProto|Reader|Uint8Array} descriptor Descriptor
- * @param {string} [syntax="proto2"] Syntax
- * @returns {Type} Type instance
- */
- Type.fromDescriptor = function fromDescriptor(descriptor, syntax) {
-
- // Decode the descriptor message if specified as a buffer:
- if (typeof descriptor.length === "number")
- descriptor = exports.DescriptorProto.decode(descriptor);
-
- // Create the message type
- var type = new Type(descriptor.name.length ? descriptor.name : "Type" + unnamedMessageIndex++, fromDescriptorOptions(descriptor.options, exports.MessageOptions)),
- i;
-
- /* Oneofs */ if (descriptor.oneofDecl)
- for (i = 0; i < descriptor.oneofDecl.length; ++i)
- type.add(OneOf.fromDescriptor(descriptor.oneofDecl[i]));
- /* Fields */ if (descriptor.field)
- for (i = 0; i < descriptor.field.length; ++i) {
- var field = Field.fromDescriptor(descriptor.field[i], syntax);
- type.add(field);
- if (descriptor.field[i].hasOwnProperty("oneofIndex")) // eslint-disable-line no-prototype-builtins
- type.oneofsArray[descriptor.field[i].oneofIndex].add(field);
- }
- /* Extension fields */ if (descriptor.extension)
- for (i = 0; i < descriptor.extension.length; ++i)
- type.add(Field.fromDescriptor(descriptor.extension[i], syntax));
- /* Nested types */ if (descriptor.nestedType)
- for (i = 0; i < descriptor.nestedType.length; ++i) {
- type.add(Type.fromDescriptor(descriptor.nestedType[i], syntax));
- if (descriptor.nestedType[i].options && descriptor.nestedType[i].options.mapEntry)
- type.setOption("map_entry", true);
- }
- /* Nested enums */ if (descriptor.enumType)
- for (i = 0; i < descriptor.enumType.length; ++i)
- type.add(Enum.fromDescriptor(descriptor.enumType[i]));
- /* Extension ranges */ if (descriptor.extensionRange && descriptor.extensionRange.length) {
- type.extensions = [];
- for (i = 0; i < descriptor.extensionRange.length; ++i)
- type.extensions.push([ descriptor.extensionRange[i].start, descriptor.extensionRange[i].end ]);
- }
- /* Reserved... */ if (descriptor.reservedRange && descriptor.reservedRange.length || descriptor.reservedName && descriptor.reservedName.length) {
- type.reserved = [];
- /* Ranges */ if (descriptor.reservedRange)
- for (i = 0; i < descriptor.reservedRange.length; ++i)
- type.reserved.push([ descriptor.reservedRange[i].start, descriptor.reservedRange[i].end ]);
- /* Names */ if (descriptor.reservedName)
- for (i = 0; i < descriptor.reservedName.length; ++i)
- type.reserved.push(descriptor.reservedName[i]);
- }
-
- return type;
- };
-
- /**
- * Converts a type to a descriptor.
- * @returns {Message<IDescriptorProto>} Descriptor
- * @param {string} [syntax="proto2"] Syntax
- */
- Type.prototype.toDescriptor = function toDescriptor(syntax) {
- var descriptor = exports.DescriptorProto.create({ name: this.name }),
- i;
-
- /* Fields */ for (i = 0; i < this.fieldsArray.length; ++i) {
- var fieldDescriptor;
- descriptor.field.push(fieldDescriptor = this._fieldsArray[i].toDescriptor(syntax));
- if (this._fieldsArray[i] instanceof MapField) { // map fields are repeated FieldNameEntry
- var keyType = toDescriptorType(this._fieldsArray[i].keyType, this._fieldsArray[i].resolvedKeyType),
- valueType = toDescriptorType(this._fieldsArray[i].type, this._fieldsArray[i].resolvedType),
- valueTypeName = valueType === /* type */ 11 || valueType === /* enum */ 14
- ? this._fieldsArray[i].resolvedType && shortname(this.parent, this._fieldsArray[i].resolvedType) || this._fieldsArray[i].type
- : undefined;
- descriptor.nestedType.push(exports.DescriptorProto.create({
- name: fieldDescriptor.typeName,
- field: [
- exports.FieldDescriptorProto.create({ name: "key", number: 1, label: 1, type: keyType }), // can't reference a type or enum
- exports.FieldDescriptorProto.create({ name: "value", number: 2, label: 1, type: valueType, typeName: valueTypeName })
- ],
- options: exports.MessageOptions.create({ mapEntry: true })
- }));
- }
- }
- /* Oneofs */ for (i = 0; i < this.oneofsArray.length; ++i)
- descriptor.oneofDecl.push(this._oneofsArray[i].toDescriptor());
- /* Nested... */ for (i = 0; i < this.nestedArray.length; ++i) {
- /* Extension fields */ if (this._nestedArray[i] instanceof Field)
- descriptor.field.push(this._nestedArray[i].toDescriptor(syntax));
- /* Types */ else if (this._nestedArray[i] instanceof Type)
- descriptor.nestedType.push(this._nestedArray[i].toDescriptor(syntax));
- /* Enums */ else if (this._nestedArray[i] instanceof Enum)
- descriptor.enumType.push(this._nestedArray[i].toDescriptor());
- // plain nested namespaces become packages instead in Root#toDescriptor
- }
- /* Extension ranges */ if (this.extensions)
- for (i = 0; i < this.extensions.length; ++i)
- descriptor.extensionRange.push(exports.DescriptorProto.ExtensionRange.create({ start: this.extensions[i][0], end: this.extensions[i][1] }));
- /* Reserved... */ if (this.reserved)
- for (i = 0; i < this.reserved.length; ++i)
- /* Names */ if (typeof this.reserved[i] === "string")
- descriptor.reservedName.push(this.reserved[i]);
- /* Ranges */ else
- descriptor.reservedRange.push(exports.DescriptorProto.ReservedRange.create({ start: this.reserved[i][0], end: this.reserved[i][1] }));
-
- descriptor.options = toDescriptorOptions(this.options, exports.MessageOptions);
-
- return descriptor;
- };
-
- // --- Field ---
-
- /**
- * Properties of a FieldDescriptorProto message.
- * @interface IFieldDescriptorProto
- * @property {string} [name] Field name
- * @property {number} [number] Field id
- * @property {IFieldDescriptorProtoLabel} [label] Field rule
- * @property {IFieldDescriptorProtoType} [type] Field basic type
- * @property {string} [typeName] Field type name
- * @property {string} [extendee] Extended type name
- * @property {string} [defaultValue] Literal default value
- * @property {number} [oneofIndex] Oneof index if part of a oneof
- * @property {*} [jsonName] Not supported
- * @property {IFieldOptions} [options] Field options
- */
-
- /**
- * Values of the FieldDescriptorProto.Label enum.
- * @typedef IFieldDescriptorProtoLabel
- * @type {number}
- * @property {number} LABEL_OPTIONAL=1
- * @property {number} LABEL_REQUIRED=2
- * @property {number} LABEL_REPEATED=3
- */
-
- /**
- * Values of the FieldDescriptorProto.Type enum.
- * @typedef IFieldDescriptorProtoType
- * @type {number}
- * @property {number} TYPE_DOUBLE=1
- * @property {number} TYPE_FLOAT=2
- * @property {number} TYPE_INT64=3
- * @property {number} TYPE_UINT64=4
- * @property {number} TYPE_INT32=5
- * @property {number} TYPE_FIXED64=6
- * @property {number} TYPE_FIXED32=7
- * @property {number} TYPE_BOOL=8
- * @property {number} TYPE_STRING=9
- * @property {number} TYPE_GROUP=10
- * @property {number} TYPE_MESSAGE=11
- * @property {number} TYPE_BYTES=12
- * @property {number} TYPE_UINT32=13
- * @property {number} TYPE_ENUM=14
- * @property {number} TYPE_SFIXED32=15
- * @property {number} TYPE_SFIXED64=16
- * @property {number} TYPE_SINT32=17
- * @property {number} TYPE_SINT64=18
- */
-
- /**
- * Properties of a FieldOptions message.
- * @interface IFieldOptions
- * @property {boolean} [packed] Whether packed or not (defaults to `false` for proto2 and `true` for proto3)
- * @property {IFieldOptionsJSType} [jstype] JavaScript value type (not used by protobuf.js)
- */
-
- /**
- * Values of the FieldOptions.JSType enum.
- * @typedef IFieldOptionsJSType
- * @type {number}
- * @property {number} JS_NORMAL=0
- * @property {number} JS_STRING=1
- * @property {number} JS_NUMBER=2
- */
-
- // copied here from parse.js
- var numberRe = /^(?![eE])[0-9]*(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?$/;
-
- /**
- * Creates a field from a descriptor.
- * @param {IFieldDescriptorProto|Reader|Uint8Array} descriptor Descriptor
- * @param {string} [syntax="proto2"] Syntax
- * @returns {Field} Field instance
- */
- Field.fromDescriptor = function fromDescriptor(descriptor, syntax) {
-
- // Decode the descriptor message if specified as a buffer:
- if (typeof descriptor.length === "number")
- descriptor = exports.DescriptorProto.decode(descriptor);
-
- if (typeof descriptor.number !== "number")
- throw Error("missing field id");
-
- // Rewire field type
- var fieldType;
- if (descriptor.typeName && descriptor.typeName.length)
- fieldType = descriptor.typeName;
- else
- fieldType = fromDescriptorType(descriptor.type);
-
- // Rewire field rule
- var fieldRule;
- switch (descriptor.label) {
- // 0 is reserved for errors
- case 1: fieldRule = undefined; break;
- case 2: fieldRule = "required"; break;
- case 3: fieldRule = "repeated"; break;
- default: throw Error("illegal label: " + descriptor.label);
- }
-
- var extendee = descriptor.extendee;
- if (descriptor.extendee !== undefined) {
- extendee = extendee.length ? extendee : undefined;
- }
- var field = new Field(
- descriptor.name.length ? descriptor.name : "field" + descriptor.number,
- descriptor.number,
- fieldType,
- fieldRule,
- extendee
- );
-
- field.options = fromDescriptorOptions(descriptor.options, exports.FieldOptions);
-
- if (descriptor.defaultValue && descriptor.defaultValue.length) {
- var defaultValue = descriptor.defaultValue;
- switch (defaultValue) {
- case "true": case "TRUE":
- defaultValue = true;
- break;
- case "false": case "FALSE":
- defaultValue = false;
- break;
- default:
- var match = numberRe.exec(defaultValue);
- if (match)
- defaultValue = parseInt(defaultValue); // eslint-disable-line radix
- break;
- }
- field.setOption("default", defaultValue);
- }
-
- if (packableDescriptorType(descriptor.type)) {
- if (syntax === "proto3") { // defaults to packed=true (internal preset is packed=true)
- if (descriptor.options && !descriptor.options.packed)
- field.setOption("packed", false);
- } else if (!(descriptor.options && descriptor.options.packed)) // defaults to packed=false
- field.setOption("packed", false);
- }
-
- return field;
- };
-
- /**
- * Converts a field to a descriptor.
- * @returns {Message<IFieldDescriptorProto>} Descriptor
- * @param {string} [syntax="proto2"] Syntax
- */
- Field.prototype.toDescriptor = function toDescriptor(syntax) {
- var descriptor = exports.FieldDescriptorProto.create({ name: this.name, number: this.id });
-
- if (this.map) {
-
- descriptor.type = 11; // message
- descriptor.typeName = $protobuf.util.ucFirst(this.name); // fieldName -> FieldNameEntry (built in Type#toDescriptor)
- descriptor.label = 3; // repeated
-
- } else {
-
- // Rewire field type
- switch (descriptor.type = toDescriptorType(this.type, this.resolve().resolvedType)) {
- case 10: // group
- case 11: // type
- case 14: // enum
- descriptor.typeName = this.resolvedType ? shortname(this.parent, this.resolvedType) : this.type;
- break;
- }
-
- // Rewire field rule
- switch (this.rule) {
- case "repeated": descriptor.label = 3; break;
- case "required": descriptor.label = 2; break;
- default: descriptor.label = 1; break;
- }
-
- }
-
- // Handle extension field
- descriptor.extendee = this.extensionField ? this.extensionField.parent.fullName : this.extend;
-
- // Handle part of oneof
- if (this.partOf)
- if ((descriptor.oneofIndex = this.parent.oneofsArray.indexOf(this.partOf)) < 0)
- throw Error("missing oneof");
-
- if (this.options) {
- descriptor.options = toDescriptorOptions(this.options, exports.FieldOptions);
- if (this.options["default"] != null)
- descriptor.defaultValue = String(this.options["default"]);
- }
-
- if (syntax === "proto3") { // defaults to packed=true
- if (!this.packed)
- (descriptor.options || (descriptor.options = exports.FieldOptions.create())).packed = false;
- } else if (this.packed) // defaults to packed=false
- (descriptor.options || (descriptor.options = exports.FieldOptions.create())).packed = true;
-
- return descriptor;
- };
-
- // --- Enum ---
-
- /**
- * Properties of an EnumDescriptorProto message.
- * @interface IEnumDescriptorProto
- * @property {string} [name] Enum name
- * @property {IEnumValueDescriptorProto[]} [value] Enum values
- * @property {IEnumOptions} [options] Enum options
- */
-
- /**
- * Properties of an EnumValueDescriptorProto message.
- * @interface IEnumValueDescriptorProto
- * @property {string} [name] Name
- * @property {number} [number] Value
- * @property {*} [options] Not supported
- */
-
- /**
- * Properties of an EnumOptions message.
- * @interface IEnumOptions
- * @property {boolean} [allowAlias] Whether aliases are allowed
- * @property {boolean} [deprecated]
- */
-
- var unnamedEnumIndex = 0;
-
- /**
- * Creates an enum from a descriptor.
- * @param {IEnumDescriptorProto|Reader|Uint8Array} descriptor Descriptor
- * @returns {Enum} Enum instance
- */
- Enum.fromDescriptor = function fromDescriptor(descriptor) {
-
- // Decode the descriptor message if specified as a buffer:
- if (typeof descriptor.length === "number")
- descriptor = exports.EnumDescriptorProto.decode(descriptor);
-
- // Construct values object
- var values = {};
- if (descriptor.value)
- for (var i = 0; i < descriptor.value.length; ++i) {
- var name = descriptor.value[i].name,
- value = descriptor.value[i].number || 0;
- values[name && name.length ? name : "NAME" + value] = value;
- }
-
- return new Enum(
- descriptor.name && descriptor.name.length ? descriptor.name : "Enum" + unnamedEnumIndex++,
- values,
- fromDescriptorOptions(descriptor.options, exports.EnumOptions)
- );
- };
-
- /**
- * Converts an enum to a descriptor.
- * @returns {Message<IEnumDescriptorProto>} Descriptor
- */
- Enum.prototype.toDescriptor = function toDescriptor() {
-
- // Values
- var values = [];
- for (var i = 0, ks = Object.keys(this.values); i < ks.length; ++i)
- values.push(exports.EnumValueDescriptorProto.create({ name: ks[i], number: this.values[ks[i]] }));
-
- return exports.EnumDescriptorProto.create({
- name: this.name,
- value: values,
- options: toDescriptorOptions(this.options, exports.EnumOptions)
- });
- };
-
- // --- OneOf ---
-
- /**
- * Properties of a OneofDescriptorProto message.
- * @interface IOneofDescriptorProto
- * @property {string} [name] Oneof name
- * @property {*} [options] Not supported
- */
-
- var unnamedOneofIndex = 0;
-
- /**
- * Creates a oneof from a descriptor.
- * @param {IOneofDescriptorProto|Reader|Uint8Array} descriptor Descriptor
- * @returns {OneOf} OneOf instance
- */
- OneOf.fromDescriptor = function fromDescriptor(descriptor) {
-
- // Decode the descriptor message if specified as a buffer:
- if (typeof descriptor.length === "number")
- descriptor = exports.OneofDescriptorProto.decode(descriptor);
-
- return new OneOf(
- // unnamedOneOfIndex is global, not per type, because we have no ref to a type here
- descriptor.name && descriptor.name.length ? descriptor.name : "oneof" + unnamedOneofIndex++
- // fromDescriptorOptions(descriptor.options, exports.OneofOptions) - only uninterpreted_option
- );
- };
-
- /**
- * Converts a oneof to a descriptor.
- * @returns {Message<IOneofDescriptorProto>} Descriptor
- */
- OneOf.prototype.toDescriptor = function toDescriptor() {
- return exports.OneofDescriptorProto.create({
- name: this.name
- // options: toDescriptorOptions(this.options, exports.OneofOptions) - only uninterpreted_option
- });
- };
-
- // --- Service ---
-
- /**
- * Properties of a ServiceDescriptorProto message.
- * @interface IServiceDescriptorProto
- * @property {string} [name] Service name
- * @property {IMethodDescriptorProto[]} [method] Methods
- * @property {IServiceOptions} [options] Options
- */
-
- /**
- * Properties of a ServiceOptions message.
- * @interface IServiceOptions
- * @property {boolean} [deprecated]
- */
-
- var unnamedServiceIndex = 0;
-
- /**
- * Creates a service from a descriptor.
- * @param {IServiceDescriptorProto|Reader|Uint8Array} descriptor Descriptor
- * @returns {Service} Service instance
- */
- Service.fromDescriptor = function fromDescriptor(descriptor) {
-
- // Decode the descriptor message if specified as a buffer:
- if (typeof descriptor.length === "number")
- descriptor = exports.ServiceDescriptorProto.decode(descriptor);
-
- var service = new Service(descriptor.name && descriptor.name.length ? descriptor.name : "Service" + unnamedServiceIndex++, fromDescriptorOptions(descriptor.options, exports.ServiceOptions));
- if (descriptor.method)
- for (var i = 0; i < descriptor.method.length; ++i)
- service.add(Method.fromDescriptor(descriptor.method[i]));
-
- return service;
- };
-
- /**
- * Converts a service to a descriptor.
- * @returns {Message<IServiceDescriptorProto>} Descriptor
- */
- Service.prototype.toDescriptor = function toDescriptor() {
-
- // Methods
- var methods = [];
- for (var i = 0; i < this.methodsArray.length; ++i)
- methods.push(this._methodsArray[i].toDescriptor());
-
- return exports.ServiceDescriptorProto.create({
- name: this.name,
- method: methods,
- options: toDescriptorOptions(this.options, exports.ServiceOptions)
- });
- };
-
- // --- Method ---
-
- /**
- * Properties of a MethodDescriptorProto message.
- * @interface IMethodDescriptorProto
- * @property {string} [name] Method name
- * @property {string} [inputType] Request type name
- * @property {string} [outputType] Response type name
- * @property {IMethodOptions} [options] Not supported
- * @property {boolean} [clientStreaming=false] Whether requests are streamed
- * @property {boolean} [serverStreaming=false] Whether responses are streamed
- */
-
- /**
- * Properties of a MethodOptions message.
- * @interface IMethodOptions
- * @property {boolean} [deprecated]
- */
-
- var unnamedMethodIndex = 0;
-
- /**
- * Creates a method from a descriptor.
- * @param {IMethodDescriptorProto|Reader|Uint8Array} descriptor Descriptor
- * @returns {Method} Reflected method instance
- */
- Method.fromDescriptor = function fromDescriptor(descriptor) {
-
- // Decode the descriptor message if specified as a buffer:
- if (typeof descriptor.length === "number")
- descriptor = exports.MethodDescriptorProto.decode(descriptor);
-
- return new Method(
- // unnamedMethodIndex is global, not per service, because we have no ref to a service here
- descriptor.name && descriptor.name.length ? descriptor.name : "Method" + unnamedMethodIndex++,
- "rpc",
- descriptor.inputType,
- descriptor.outputType,
- Boolean(descriptor.clientStreaming),
- Boolean(descriptor.serverStreaming),
- fromDescriptorOptions(descriptor.options, exports.MethodOptions)
- );
- };
-
- /**
- * Converts a method to a descriptor.
- * @returns {Message<IMethodDescriptorProto>} Descriptor
- */
- Method.prototype.toDescriptor = function toDescriptor() {
- return exports.MethodDescriptorProto.create({
- name: this.name,
- inputType: this.resolvedRequestType ? this.resolvedRequestType.fullName : this.requestType,
- outputType: this.resolvedResponseType ? this.resolvedResponseType.fullName : this.responseType,
- clientStreaming: this.requestStream,
- serverStreaming: this.responseStream,
- options: toDescriptorOptions(this.options, exports.MethodOptions)
- });
- };
-
- // --- utility ---
-
- // Converts a descriptor type to a protobuf.js basic type
- function fromDescriptorType(type) {
- switch (type) {
- // 0 is reserved for errors
- case 1: return "double";
- case 2: return "float";
- case 3: return "int64";
- case 4: return "uint64";
- case 5: return "int32";
- case 6: return "fixed64";
- case 7: return "fixed32";
- case 8: return "bool";
- case 9: return "string";
- case 12: return "bytes";
- case 13: return "uint32";
- case 15: return "sfixed32";
- case 16: return "sfixed64";
- case 17: return "sint32";
- case 18: return "sint64";
- }
- throw Error("illegal type: " + type);
- }
-
- // Tests if a descriptor type is packable
- function packableDescriptorType(type) {
- switch (type) {
- case 1: // double
- case 2: // float
- case 3: // int64
- case 4: // uint64
- case 5: // int32
- case 6: // fixed64
- case 7: // fixed32
- case 8: // bool
- case 13: // uint32
- case 14: // enum (!)
- case 15: // sfixed32
- case 16: // sfixed64
- case 17: // sint32
- case 18: // sint64
- return true;
- }
- return false;
- }
-
- // Converts a protobuf.js basic type to a descriptor type
- function toDescriptorType(type, resolvedType) {
- switch (type) {
- // 0 is reserved for errors
- case "double": return 1;
- case "float": return 2;
- case "int64": return 3;
- case "uint64": return 4;
- case "int32": return 5;
- case "fixed64": return 6;
- case "fixed32": return 7;
- case "bool": return 8;
- case "string": return 9;
- case "bytes": return 12;
- case "uint32": return 13;
- case "sfixed32": return 15;
- case "sfixed64": return 16;
- case "sint32": return 17;
- case "sint64": return 18;
- }
- if (resolvedType instanceof Enum)
- return 14;
- if (resolvedType instanceof Type)
- return resolvedType.group ? 10 : 11;
- throw Error("illegal type: " + type);
- }
-
- // Converts descriptor options to an options object
- function fromDescriptorOptions(options, type) {
- if (!options)
- return undefined;
- var out = [];
- for (var i = 0, field, key, val; i < type.fieldsArray.length; ++i)
- if ((key = (field = type._fieldsArray[i]).name) !== "uninterpretedOption")
- if (options.hasOwnProperty(key)) { // eslint-disable-line no-prototype-builtins
- val = options[key];
- if (field.resolvedType instanceof Enum && typeof val === "number" && field.resolvedType.valuesById[val] !== undefined)
- val = field.resolvedType.valuesById[val];
- out.push(underScore(key), val);
- }
- return out.length ? $protobuf.util.toObject(out) : undefined;
- }
-
- // Converts an options object to descriptor options
- function toDescriptorOptions(options, type) {
- if (!options)
- return undefined;
- var out = [];
- for (var i = 0, ks = Object.keys(options), key, val; i < ks.length; ++i) {
- val = options[key = ks[i]];
- if (key === "default")
- continue;
- var field = type.fields[key];
- if (!field && !(field = type.fields[key = $protobuf.util.camelCase(key)]))
- continue;
- out.push(key, val);
- }
- return out.length ? type.fromObject($protobuf.util.toObject(out)) : undefined;
- }
-
- // Calculates the shortest relative path from `from` to `to`.
- function shortname(from, to) {
- var fromPath = from.fullName.split("."),
- toPath = to.fullName.split("."),
- i = 0,
- j = 0,
- k = toPath.length - 1;
- if (!(from instanceof Root) && to instanceof Namespace)
- while (i < fromPath.length && j < k && fromPath[i] === toPath[j]) {
- var other = to.lookup(fromPath[i++], true);
- if (other !== null && other !== to)
- break;
- ++j;
- }
- else
- for (; i < fromPath.length && j < k && fromPath[i] === toPath[j]; ++i, ++j);
- return toPath.slice(j).join(".");
- }
-
- // copied here from cli/targets/proto.js
- function underScore(str) {
- return str.substring(0,1)
- + str.substring(1)
- .replace(/([A-Z])(?=[a-z]|$)/g, function($0, $1) { return "_" + $1.toLowerCase(); });
- }
-
- // --- exports ---
-
- /**
- * Reflected file descriptor set.
- * @name FileDescriptorSet
- * @type {Type}
- * @const
- * @tstype $protobuf.Type
- */
-
- /**
- * Reflected file descriptor proto.
- * @name FileDescriptorProto
- * @type {Type}
- * @const
- * @tstype $protobuf.Type
- */
-
- /**
- * Reflected descriptor proto.
- * @name DescriptorProto
- * @type {Type}
- * @property {Type} ExtensionRange
- * @property {Type} ReservedRange
- * @const
- * @tstype $protobuf.Type & {
- * ExtensionRange: $protobuf.Type,
- * ReservedRange: $protobuf.Type
- * }
- */
-
- /**
- * Reflected field descriptor proto.
- * @name FieldDescriptorProto
- * @type {Type}
- * @property {Enum} Label
- * @property {Enum} Type
- * @const
- * @tstype $protobuf.Type & {
- * Label: $protobuf.Enum,
- * Type: $protobuf.Enum
- * }
- */
-
- /**
- * Reflected oneof descriptor proto.
- * @name OneofDescriptorProto
- * @type {Type}
- * @const
- * @tstype $protobuf.Type
- */
-
- /**
- * Reflected enum descriptor proto.
- * @name EnumDescriptorProto
- * @type {Type}
- * @const
- * @tstype $protobuf.Type
- */
-
- /**
- * Reflected service descriptor proto.
- * @name ServiceDescriptorProto
- * @type {Type}
- * @const
- * @tstype $protobuf.Type
- */
-
- /**
- * Reflected enum value descriptor proto.
- * @name EnumValueDescriptorProto
- * @type {Type}
- * @const
- * @tstype $protobuf.Type
- */
-
- /**
- * Reflected method descriptor proto.
- * @name MethodDescriptorProto
- * @type {Type}
- * @const
- * @tstype $protobuf.Type
- */
-
- /**
- * Reflected file options.
- * @name FileOptions
- * @type {Type}
- * @property {Enum} OptimizeMode
- * @const
- * @tstype $protobuf.Type & {
- * OptimizeMode: $protobuf.Enum
- * }
- */
-
- /**
- * Reflected message options.
- * @name MessageOptions
- * @type {Type}
- * @const
- * @tstype $protobuf.Type
- */
-
- /**
- * Reflected field options.
- * @name FieldOptions
- * @type {Type}
- * @property {Enum} CType
- * @property {Enum} JSType
- * @const
- * @tstype $protobuf.Type & {
- * CType: $protobuf.Enum,
- * JSType: $protobuf.Enum
- * }
- */
-
- /**
- * Reflected oneof options.
- * @name OneofOptions
- * @type {Type}
- * @const
- * @tstype $protobuf.Type
- */
-
- /**
- * Reflected enum options.
- * @name EnumOptions
- * @type {Type}
- * @const
- * @tstype $protobuf.Type
- */
-
- /**
- * Reflected enum value options.
- * @name EnumValueOptions
- * @type {Type}
- * @const
- * @tstype $protobuf.Type
- */
-
- /**
- * Reflected service options.
- * @name ServiceOptions
- * @type {Type}
- * @const
- * @tstype $protobuf.Type
- */
-
- /**
- * Reflected method options.
- * @name MethodOptions
- * @type {Type}
- * @const
- * @tstype $protobuf.Type
- */
-
- /**
- * Reflected uninterpretet option.
- * @name UninterpretedOption
- * @type {Type}
- * @property {Type} NamePart
- * @const
- * @tstype $protobuf.Type & {
- * NamePart: $protobuf.Type
- * }
- */
-
- /**
- * Reflected source code info.
- * @name SourceCodeInfo
- * @type {Type}
- * @property {Type} Location
- * @const
- * @tstype $protobuf.Type & {
- * Location: $protobuf.Type
- * }
- */
-
- /**
- * Reflected generated code info.
- * @name GeneratedCodeInfo
- * @type {Type}
- * @property {Type} Annotation
- * @const
- * @tstype $protobuf.Type & {
- * Annotation: $protobuf.Type
- * }
- */
|