protobufjs 8.0.1 → 8.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +727 -727
  3. package/dist/light/protobuf.js +7724 -7591
  4. package/dist/light/protobuf.js.map +1 -1
  5. package/dist/light/protobuf.min.js +3 -3
  6. package/dist/light/protobuf.min.js.map +1 -1
  7. package/dist/minimal/protobuf.js +2606 -2546
  8. package/dist/minimal/protobuf.js.map +1 -1
  9. package/dist/minimal/protobuf.min.js +3 -3
  10. package/dist/minimal/protobuf.min.js.map +1 -1
  11. package/dist/protobuf.js +9593 -9436
  12. package/dist/protobuf.js.map +1 -1
  13. package/dist/protobuf.min.js +3 -3
  14. package/dist/protobuf.min.js.map +1 -1
  15. package/ext/debug/README.md +4 -4
  16. package/ext/debug/index.js +71 -71
  17. package/ext/descriptor/README.md +72 -72
  18. package/ext/descriptor/index.d.ts +195 -191
  19. package/ext/descriptor/index.js +1181 -1163
  20. package/ext/descriptor/test.js +54 -54
  21. package/google/LICENSE +27 -27
  22. package/google/README.md +1 -1
  23. package/google/api/annotations.json +82 -82
  24. package/google/api/annotations.proto +10 -10
  25. package/google/api/http.json +85 -85
  26. package/google/api/http.proto +30 -30
  27. package/google/protobuf/api.json +117 -117
  28. package/google/protobuf/api.proto +33 -33
  29. package/google/protobuf/descriptor.json +1381 -1381
  30. package/google/protobuf/descriptor.proto +534 -534
  31. package/google/protobuf/source_context.json +19 -19
  32. package/google/protobuf/source_context.proto +7 -7
  33. package/google/protobuf/type.json +201 -201
  34. package/google/protobuf/type.proto +89 -89
  35. package/index.d.ts +2817 -2799
  36. package/index.js +4 -4
  37. package/light.d.ts +2 -2
  38. package/light.js +3 -3
  39. package/minimal.d.ts +2 -2
  40. package/minimal.js +4 -4
  41. package/package.json +96 -114
  42. package/scripts/postinstall.js +32 -32
  43. package/src/common.js +399 -399
  44. package/src/converter.js +310 -301
  45. package/src/decoder.js +135 -127
  46. package/src/encoder.js +100 -100
  47. package/src/enum.js +226 -223
  48. package/src/field.js +453 -453
  49. package/src/index-light.js +104 -104
  50. package/src/index-minimal.js +36 -36
  51. package/src/index.js +12 -12
  52. package/src/mapfield.js +126 -126
  53. package/src/message.js +139 -143
  54. package/src/method.js +160 -160
  55. package/src/namespace.js +550 -546
  56. package/src/object.js +385 -381
  57. package/src/oneof.js +222 -222
  58. package/src/parse.js +1032 -1013
  59. package/src/reader.js +426 -416
  60. package/src/reader_buffer.js +51 -51
  61. package/src/root.js +403 -403
  62. package/src/roots.js +17 -17
  63. package/src/rpc/service.js +142 -142
  64. package/src/rpc.js +36 -36
  65. package/src/service.js +193 -189
  66. package/src/tokenize.js +421 -416
  67. package/src/type.js +625 -615
  68. package/src/types.js +196 -196
  69. package/src/typescript.jsdoc +15 -15
  70. package/src/util/aspromise.d.ts +13 -0
  71. package/src/util/aspromise.js +52 -0
  72. package/src/util/base64.d.ts +32 -0
  73. package/src/util/base64.js +139 -0
  74. package/src/util/codegen.d.ts +31 -0
  75. package/src/util/codegen.js +113 -0
  76. package/src/util/eventemitter.d.ts +45 -0
  77. package/src/util/eventemitter.js +84 -0
  78. package/src/util/fetch.d.ts +56 -0
  79. package/src/util/fetch.js +114 -0
  80. package/src/util/float.d.ts +83 -0
  81. package/src/util/float.js +335 -0
  82. package/src/util/inquire.d.ts +9 -0
  83. package/src/util/inquire.js +37 -0
  84. package/src/util/longbits.js +200 -200
  85. package/src/util/minimal.js +461 -438
  86. package/src/util/path.d.ts +22 -0
  87. package/src/util/path.js +72 -0
  88. package/src/util/patterns.js +8 -0
  89. package/src/util/pool.d.ts +32 -0
  90. package/src/util/pool.js +48 -0
  91. package/src/util/utf8.d.ts +24 -0
  92. package/src/util/utf8.js +104 -0
  93. package/src/util.js +215 -215
  94. package/src/verifier.js +180 -177
  95. package/src/wrappers.js +103 -102
  96. package/src/writer.js +465 -465
  97. package/src/writer_buffer.js +85 -85
  98. package/tsconfig.json +8 -8
@@ -1,1163 +1,1181 @@
1
- "use strict";
2
- var $protobuf = require("../..");
3
- module.exports = exports = $protobuf.descriptor = $protobuf.Root.fromJSON(require("../../google/protobuf/descriptor.json")).lookup(".google.protobuf");
4
-
5
- var Namespace = $protobuf.Namespace,
6
- Root = $protobuf.Root,
7
- Enum = $protobuf.Enum,
8
- Type = $protobuf.Type,
9
- Field = $protobuf.Field,
10
- MapField = $protobuf.MapField,
11
- OneOf = $protobuf.OneOf,
12
- Service = $protobuf.Service,
13
- Method = $protobuf.Method;
14
-
15
- // --- Root ---
16
-
17
- /**
18
- * Properties of a FileDescriptorSet message.
19
- * @interface IFileDescriptorSet
20
- * @property {IFileDescriptorProto[]} file Files
21
- */
22
-
23
- /**
24
- * Properties of a FileDescriptorProto message.
25
- * @interface IFileDescriptorProto
26
- * @property {string} [name] File name
27
- * @property {string} [package] Package
28
- * @property {*} [dependency] Not supported
29
- * @property {*} [publicDependency] Not supported
30
- * @property {*} [weakDependency] Not supported
31
- * @property {IDescriptorProto[]} [messageType] Nested message types
32
- * @property {IEnumDescriptorProto[]} [enumType] Nested enums
33
- * @property {IServiceDescriptorProto[]} [service] Nested services
34
- * @property {IFieldDescriptorProto[]} [extension] Nested extension fields
35
- * @property {IFileOptions} [options] Options
36
- * @property {*} [sourceCodeInfo] Not supported
37
- * @property {string} [syntax="proto2"] Syntax
38
- * @property {IEdition} [edition] Edition
39
- */
40
-
41
- /**
42
- * Values of the Edition enum.
43
- * @typedef IEdition
44
- * @type {number}
45
- * @property {number} EDITION_UNKNOWN=0
46
- * @property {number} EDITION_LEGACY=900
47
- * @property {number} EDITION_PROTO2=998
48
- * @property {number} EDITION_PROTO3=999
49
- * @property {number} EDITION_2023=1000
50
- * @property {number} EDITION_2024=1001
51
- * @property {number} EDITION_1_TEST_ONLY=1
52
- * @property {number} EDITION_2_TEST_ONLY=2
53
- * @property {number} EDITION_99997_TEST_ONLY=99997
54
- * @property {number} EDITION_99998_TEST_ONLY=99998
55
- * @property {number} EDITION_99998_TEST_ONLY=99999
56
- * @property {number} EDITION_MAX=2147483647
57
- */
58
-
59
- /**
60
- * Properties of a FileOptions message.
61
- * @interface IFileOptions
62
- * @property {string} [javaPackage]
63
- * @property {string} [javaOuterClassname]
64
- * @property {boolean} [javaMultipleFiles]
65
- * @property {boolean} [javaGenerateEqualsAndHash]
66
- * @property {boolean} [javaStringCheckUtf8]
67
- * @property {IFileOptionsOptimizeMode} [optimizeFor=1]
68
- * @property {string} [goPackage]
69
- * @property {boolean} [ccGenericServices]
70
- * @property {boolean} [javaGenericServices]
71
- * @property {boolean} [pyGenericServices]
72
- * @property {boolean} [deprecated]
73
- * @property {boolean} [ccEnableArenas]
74
- * @property {string} [objcClassPrefix]
75
- * @property {string} [csharpNamespace]
76
- */
77
-
78
- /**
79
- * Values of he FileOptions.OptimizeMode enum.
80
- * @typedef IFileOptionsOptimizeMode
81
- * @type {number}
82
- * @property {number} SPEED=1
83
- * @property {number} CODE_SIZE=2
84
- * @property {number} LITE_RUNTIME=3
85
- */
86
-
87
- /**
88
- * Creates a root from a descriptor set.
89
- * @param {IFileDescriptorSet|Reader|Uint8Array} descriptor Descriptor
90
- * @returns {Root} Root instance
91
- */
92
- Root.fromDescriptor = function fromDescriptor(descriptor) {
93
-
94
- // Decode the descriptor message if specified as a buffer:
95
- if (typeof descriptor.length === "number")
96
- descriptor = exports.FileDescriptorSet.decode(descriptor);
97
-
98
- var root = new Root();
99
-
100
- if (descriptor.file) {
101
- var fileDescriptor,
102
- filePackage;
103
- for (var j = 0, i; j < descriptor.file.length; ++j) {
104
- filePackage = root;
105
- if ((fileDescriptor = descriptor.file[j])["package"] && fileDescriptor["package"].length)
106
- filePackage = root.define(fileDescriptor["package"]);
107
- var edition = editionFromDescriptor(fileDescriptor);
108
- if (fileDescriptor.name && fileDescriptor.name.length)
109
- root.files.push(filePackage.filename = fileDescriptor.name);
110
- if (fileDescriptor.messageType)
111
- for (i = 0; i < fileDescriptor.messageType.length; ++i)
112
- filePackage.add(Type.fromDescriptor(fileDescriptor.messageType[i], edition));
113
- if (fileDescriptor.enumType)
114
- for (i = 0; i < fileDescriptor.enumType.length; ++i)
115
- filePackage.add(Enum.fromDescriptor(fileDescriptor.enumType[i], edition));
116
- if (fileDescriptor.extension)
117
- for (i = 0; i < fileDescriptor.extension.length; ++i)
118
- filePackage.add(Field.fromDescriptor(fileDescriptor.extension[i], edition));
119
- if (fileDescriptor.service)
120
- for (i = 0; i < fileDescriptor.service.length; ++i)
121
- filePackage.add(Service.fromDescriptor(fileDescriptor.service[i], edition));
122
- var opts = fromDescriptorOptions(fileDescriptor.options, exports.FileOptions);
123
- if (opts) {
124
- var ks = Object.keys(opts);
125
- for (i = 0; i < ks.length; ++i)
126
- filePackage.setOption(ks[i], opts[ks[i]]);
127
- }
128
- }
129
- }
130
-
131
- return root.resolveAll();
132
- };
133
-
134
- /**
135
- * Converts a root to a descriptor set.
136
- * @returns {Message<IFileDescriptorSet>} Descriptor
137
- * @param {string} [edition="proto2"] The syntax or edition to use
138
- */
139
- Root.prototype.toDescriptor = function toDescriptor(edition) {
140
- var set = exports.FileDescriptorSet.create();
141
- Root_toDescriptorRecursive(this, set.file, edition);
142
- return set;
143
- };
144
-
145
- // Traverses a namespace and assembles the descriptor set
146
- function Root_toDescriptorRecursive(ns, files, edition) {
147
-
148
- // Create a new file
149
- var file = exports.FileDescriptorProto.create({ name: ns.filename || (ns.fullName.substring(1).replace(/\./g, "_") || "root") + ".proto" });
150
- editionToDescriptor(edition, file);
151
- if (!(ns instanceof Root))
152
- file["package"] = ns.fullName.substring(1);
153
-
154
- // Add nested types
155
- for (var i = 0, nested; i < ns.nestedArray.length; ++i)
156
- if ((nested = ns._nestedArray[i]) instanceof Type)
157
- file.messageType.push(nested.toDescriptor(edition));
158
- else if (nested instanceof Enum)
159
- file.enumType.push(nested.toDescriptor());
160
- else if (nested instanceof Field)
161
- file.extension.push(nested.toDescriptor(edition));
162
- else if (nested instanceof Service)
163
- file.service.push(nested.toDescriptor());
164
- else if (nested instanceof /* plain */ Namespace)
165
- Root_toDescriptorRecursive(nested, files, edition); // requires new file
166
-
167
- // Keep package-level options
168
- file.options = toDescriptorOptions(ns.options, exports.FileOptions);
169
-
170
- // And keep the file only if there is at least one nested object
171
- if (file.messageType.length + file.enumType.length + file.extension.length + file.service.length)
172
- files.push(file);
173
- }
174
-
175
- // --- Type ---
176
-
177
- /**
178
- * Properties of a DescriptorProto message.
179
- * @interface IDescriptorProto
180
- * @property {string} [name] Message type name
181
- * @property {IFieldDescriptorProto[]} [field] Fields
182
- * @property {IFieldDescriptorProto[]} [extension] Extension fields
183
- * @property {IDescriptorProto[]} [nestedType] Nested message types
184
- * @property {IEnumDescriptorProto[]} [enumType] Nested enums
185
- * @property {IDescriptorProtoExtensionRange[]} [extensionRange] Extension ranges
186
- * @property {IOneofDescriptorProto[]} [oneofDecl] Oneofs
187
- * @property {IMessageOptions} [options] Not supported
188
- * @property {IDescriptorProtoReservedRange[]} [reservedRange] Reserved ranges
189
- * @property {string[]} [reservedName] Reserved names
190
- */
191
-
192
- /**
193
- * Properties of a MessageOptions message.
194
- * @interface IMessageOptions
195
- * @property {boolean} [mapEntry=false] Whether this message is a map entry
196
- */
197
-
198
- /**
199
- * Properties of an ExtensionRange message.
200
- * @interface IDescriptorProtoExtensionRange
201
- * @property {number} [start] Start field id
202
- * @property {number} [end] End field id
203
- */
204
-
205
- /**
206
- * Properties of a ReservedRange message.
207
- * @interface IDescriptorProtoReservedRange
208
- * @property {number} [start] Start field id
209
- * @property {number} [end] End field id
210
- */
211
-
212
- var unnamedMessageIndex = 0;
213
-
214
- /**
215
- * Creates a type from a descriptor.
216
- *
217
- * Warning: this is not safe to use with editions protos, since it discards relevant file context.
218
- *
219
- * @param {IDescriptorProto|Reader|Uint8Array} descriptor Descriptor
220
- * @param {string} [edition="proto2"] The syntax or edition to use
221
- * @param {boolean} [nested=false] Whether or not this is a nested object
222
- * @returns {Type} Type instance
223
- */
224
- Type.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {
225
- // Decode the descriptor message if specified as a buffer:
226
- if (typeof descriptor.length === "number")
227
- descriptor = exports.DescriptorProto.decode(descriptor);
228
-
229
- // Create the message type
230
- var type = new Type(descriptor.name.length ? descriptor.name : "Type" + unnamedMessageIndex++, fromDescriptorOptions(descriptor.options, exports.MessageOptions)),
231
- i;
232
-
233
- if (!nested)
234
- type._edition = edition;
235
-
236
- /* Oneofs */ if (descriptor.oneofDecl)
237
- for (i = 0; i < descriptor.oneofDecl.length; ++i)
238
- type.add(OneOf.fromDescriptor(descriptor.oneofDecl[i]));
239
- /* Fields */ if (descriptor.field)
240
- for (i = 0; i < descriptor.field.length; ++i) {
241
- var field = Field.fromDescriptor(descriptor.field[i], edition, true);
242
- type.add(field);
243
- if (descriptor.field[i].hasOwnProperty("oneofIndex")) // eslint-disable-line no-prototype-builtins
244
- type.oneofsArray[descriptor.field[i].oneofIndex].add(field);
245
- }
246
- /* Extension fields */ if (descriptor.extension)
247
- for (i = 0; i < descriptor.extension.length; ++i)
248
- type.add(Field.fromDescriptor(descriptor.extension[i], edition, true));
249
- /* Nested types */ if (descriptor.nestedType)
250
- for (i = 0; i < descriptor.nestedType.length; ++i) {
251
- type.add(Type.fromDescriptor(descriptor.nestedType[i], edition, true));
252
- if (descriptor.nestedType[i].options && descriptor.nestedType[i].options.mapEntry)
253
- type.setOption("map_entry", true);
254
- }
255
- /* Nested enums */ if (descriptor.enumType)
256
- for (i = 0; i < descriptor.enumType.length; ++i)
257
- type.add(Enum.fromDescriptor(descriptor.enumType[i], edition, true));
258
- /* Extension ranges */ if (descriptor.extensionRange && descriptor.extensionRange.length) {
259
- type.extensions = [];
260
- for (i = 0; i < descriptor.extensionRange.length; ++i)
261
- type.extensions.push([ descriptor.extensionRange[i].start, descriptor.extensionRange[i].end ]);
262
- }
263
- /* Reserved... */ if (descriptor.reservedRange && descriptor.reservedRange.length || descriptor.reservedName && descriptor.reservedName.length) {
264
- type.reserved = [];
265
- /* Ranges */ if (descriptor.reservedRange)
266
- for (i = 0; i < descriptor.reservedRange.length; ++i)
267
- type.reserved.push([ descriptor.reservedRange[i].start, descriptor.reservedRange[i].end ]);
268
- /* Names */ if (descriptor.reservedName)
269
- for (i = 0; i < descriptor.reservedName.length; ++i)
270
- type.reserved.push(descriptor.reservedName[i]);
271
- }
272
-
273
- return type;
274
- };
275
-
276
- /**
277
- * Converts a type to a descriptor.
278
- * @returns {Message<IDescriptorProto>} Descriptor
279
- * @param {string} [edition="proto2"] The syntax or edition to use
280
- */
281
- Type.prototype.toDescriptor = function toDescriptor(edition) {
282
- var descriptor = exports.DescriptorProto.create({ name: this.name }),
283
- i;
284
-
285
- /* Fields */ for (i = 0; i < this.fieldsArray.length; ++i) {
286
- var fieldDescriptor;
287
- descriptor.field.push(fieldDescriptor = this._fieldsArray[i].toDescriptor(edition));
288
- if (this._fieldsArray[i] instanceof MapField) { // map fields are repeated FieldNameEntry
289
- var keyType = toDescriptorType(this._fieldsArray[i].keyType, this._fieldsArray[i].resolvedKeyType, false),
290
- valueType = toDescriptorType(this._fieldsArray[i].type, this._fieldsArray[i].resolvedType, false),
291
- valueTypeName = valueType === /* type */ 11 || valueType === /* enum */ 14
292
- ? this._fieldsArray[i].resolvedType && shortname(this.parent, this._fieldsArray[i].resolvedType) || this._fieldsArray[i].type
293
- : undefined;
294
- descriptor.nestedType.push(exports.DescriptorProto.create({
295
- name: fieldDescriptor.typeName,
296
- field: [
297
- exports.FieldDescriptorProto.create({ name: "key", number: 1, label: 1, type: keyType }), // can't reference a type or enum
298
- exports.FieldDescriptorProto.create({ name: "value", number: 2, label: 1, type: valueType, typeName: valueTypeName })
299
- ],
300
- options: exports.MessageOptions.create({ mapEntry: true })
301
- }));
302
- }
303
- }
304
- /* Oneofs */ for (i = 0; i < this.oneofsArray.length; ++i)
305
- descriptor.oneofDecl.push(this._oneofsArray[i].toDescriptor());
306
- /* Nested... */ for (i = 0; i < this.nestedArray.length; ++i) {
307
- /* Extension fields */ if (this._nestedArray[i] instanceof Field)
308
- descriptor.field.push(this._nestedArray[i].toDescriptor(edition));
309
- /* Types */ else if (this._nestedArray[i] instanceof Type)
310
- descriptor.nestedType.push(this._nestedArray[i].toDescriptor(edition));
311
- /* Enums */ else if (this._nestedArray[i] instanceof Enum)
312
- descriptor.enumType.push(this._nestedArray[i].toDescriptor());
313
- // plain nested namespaces become packages instead in Root#toDescriptor
314
- }
315
- /* Extension ranges */ if (this.extensions)
316
- for (i = 0; i < this.extensions.length; ++i)
317
- descriptor.extensionRange.push(exports.DescriptorProto.ExtensionRange.create({ start: this.extensions[i][0], end: this.extensions[i][1] }));
318
- /* Reserved... */ if (this.reserved)
319
- for (i = 0; i < this.reserved.length; ++i)
320
- /* Names */ if (typeof this.reserved[i] === "string")
321
- descriptor.reservedName.push(this.reserved[i]);
322
- /* Ranges */ else
323
- descriptor.reservedRange.push(exports.DescriptorProto.ReservedRange.create({ start: this.reserved[i][0], end: this.reserved[i][1] }));
324
-
325
- descriptor.options = toDescriptorOptions(this.options, exports.MessageOptions);
326
-
327
- return descriptor;
328
- };
329
-
330
- // --- Field ---
331
-
332
- /**
333
- * Properties of a FieldDescriptorProto message.
334
- * @interface IFieldDescriptorProto
335
- * @property {string} [name] Field name
336
- * @property {number} [number] Field id
337
- * @property {IFieldDescriptorProtoLabel} [label] Field rule
338
- * @property {IFieldDescriptorProtoType} [type] Field basic type
339
- * @property {string} [typeName] Field type name
340
- * @property {string} [extendee] Extended type name
341
- * @property {string} [defaultValue] Literal default value
342
- * @property {number} [oneofIndex] Oneof index if part of a oneof
343
- * @property {*} [jsonName] Not supported
344
- * @property {IFieldOptions} [options] Field options
345
- */
346
-
347
- /**
348
- * Values of the FieldDescriptorProto.Label enum.
349
- * @typedef IFieldDescriptorProtoLabel
350
- * @type {number}
351
- * @property {number} LABEL_OPTIONAL=1
352
- * @property {number} LABEL_REQUIRED=2
353
- * @property {number} LABEL_REPEATED=3
354
- */
355
-
356
- /**
357
- * Values of the FieldDescriptorProto.Type enum.
358
- * @typedef IFieldDescriptorProtoType
359
- * @type {number}
360
- * @property {number} TYPE_DOUBLE=1
361
- * @property {number} TYPE_FLOAT=2
362
- * @property {number} TYPE_INT64=3
363
- * @property {number} TYPE_UINT64=4
364
- * @property {number} TYPE_INT32=5
365
- * @property {number} TYPE_FIXED64=6
366
- * @property {number} TYPE_FIXED32=7
367
- * @property {number} TYPE_BOOL=8
368
- * @property {number} TYPE_STRING=9
369
- * @property {number} TYPE_GROUP=10
370
- * @property {number} TYPE_MESSAGE=11
371
- * @property {number} TYPE_BYTES=12
372
- * @property {number} TYPE_UINT32=13
373
- * @property {number} TYPE_ENUM=14
374
- * @property {number} TYPE_SFIXED32=15
375
- * @property {number} TYPE_SFIXED64=16
376
- * @property {number} TYPE_SINT32=17
377
- * @property {number} TYPE_SINT64=18
378
- */
379
-
380
- /**
381
- * Properties of a FieldOptions message.
382
- * @interface IFieldOptions
383
- * @property {boolean} [packed] Whether packed or not (defaults to `false` for proto2 and `true` for proto3)
384
- * @property {IFieldOptionsJSType} [jstype] JavaScript value type (not used by protobuf.js)
385
- */
386
-
387
- /**
388
- * Values of the FieldOptions.JSType enum.
389
- * @typedef IFieldOptionsJSType
390
- * @type {number}
391
- * @property {number} JS_NORMAL=0
392
- * @property {number} JS_STRING=1
393
- * @property {number} JS_NUMBER=2
394
- */
395
-
396
- // copied here from parse.js
397
- var numberRe = /^(?![eE])[0-9]*(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?$/;
398
-
399
- /**
400
- * Creates a field from a descriptor.
401
- *
402
- * Warning: this is not safe to use with editions protos, since it discards relevant file context.
403
- *
404
- * @param {IFieldDescriptorProto|Reader|Uint8Array} descriptor Descriptor
405
- * @param {string} [edition="proto2"] The syntax or edition to use
406
- * @param {boolean} [nested=false] Whether or not this is a top-level object
407
- * @returns {Field} Field instance
408
- */
409
- Field.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {
410
-
411
- // Decode the descriptor message if specified as a buffer:
412
- if (typeof descriptor.length === "number")
413
- descriptor = exports.DescriptorProto.decode(descriptor);
414
-
415
- if (typeof descriptor.number !== "number")
416
- throw Error("missing field id");
417
-
418
- // Rewire field type
419
- var fieldType;
420
- if (descriptor.typeName && descriptor.typeName.length)
421
- fieldType = descriptor.typeName;
422
- else
423
- fieldType = fromDescriptorType(descriptor.type);
424
-
425
- // Rewire field rule
426
- var fieldRule;
427
- switch (descriptor.label) {
428
- // 0 is reserved for errors
429
- case 1: fieldRule = undefined; break;
430
- case 2: fieldRule = "required"; break;
431
- case 3: fieldRule = "repeated"; break;
432
- default: throw Error("illegal label: " + descriptor.label);
433
- }
434
-
435
- var extendee = descriptor.extendee;
436
- if (descriptor.extendee !== undefined) {
437
- extendee = extendee.length ? extendee : undefined;
438
- }
439
- var field = new Field(
440
- descriptor.name.length ? descriptor.name : "field" + descriptor.number,
441
- descriptor.number,
442
- fieldType,
443
- fieldRule,
444
- extendee
445
- );
446
-
447
- if (!nested)
448
- field._edition = edition;
449
-
450
- field.options = fromDescriptorOptions(descriptor.options, exports.FieldOptions);
451
- if (descriptor.proto3_optional)
452
- field.options.proto3_optional = true;
453
-
454
- if (descriptor.defaultValue && descriptor.defaultValue.length) {
455
- var defaultValue = descriptor.defaultValue;
456
- switch (defaultValue) {
457
- case "true": case "TRUE":
458
- defaultValue = true;
459
- break;
460
- case "false": case "FALSE":
461
- defaultValue = false;
462
- break;
463
- default:
464
- var match = numberRe.exec(defaultValue);
465
- if (match)
466
- defaultValue = parseInt(defaultValue); // eslint-disable-line radix
467
- break;
468
- }
469
- field.setOption("default", defaultValue);
470
- }
471
-
472
- if (packableDescriptorType(descriptor.type)) {
473
- if (edition === "proto3") { // defaults to packed=true (internal preset is packed=true)
474
- if (descriptor.options && !descriptor.options.packed)
475
- field.setOption("packed", false);
476
- } else if ((!edition || edition === "proto2") && descriptor.options && descriptor.options.packed) // defaults to packed=false
477
- field.setOption("packed", true);
478
- }
479
-
480
- return field;
481
- };
482
-
483
- /**
484
- * Converts a field to a descriptor.
485
- * @returns {Message<IFieldDescriptorProto>} Descriptor
486
- * @param {string} [edition="proto2"] The syntax or edition to use
487
- */
488
- Field.prototype.toDescriptor = function toDescriptor(edition) {
489
- var descriptor = exports.FieldDescriptorProto.create({ name: this.name, number: this.id });
490
-
491
- if (this.map) {
492
-
493
- descriptor.type = 11; // message
494
- descriptor.typeName = $protobuf.util.ucFirst(this.name); // fieldName -> FieldNameEntry (built in Type#toDescriptor)
495
- descriptor.label = 3; // repeated
496
-
497
- } else {
498
-
499
- // Rewire field type
500
- switch (descriptor.type = toDescriptorType(this.type, this.resolve().resolvedType, this.delimited)) {
501
- case 10: // group
502
- case 11: // type
503
- case 14: // enum
504
- descriptor.typeName = this.resolvedType ? shortname(this.parent, this.resolvedType) : this.type;
505
- break;
506
- }
507
-
508
- // Rewire field rule
509
- if (this.rule === "repeated") {
510
- descriptor.label = 3;
511
- } else if (this.required && edition === "proto2") {
512
- descriptor.label = 2;
513
- } else {
514
- descriptor.label = 1;
515
- }
516
- }
517
-
518
- // Handle extension field
519
- descriptor.extendee = this.extensionField ? this.extensionField.parent.fullName : this.extend;
520
-
521
- // Handle part of oneof (only meaningful for message types)
522
- if (this.partOf && this.parent instanceof Type) {
523
- if ((descriptor.oneofIndex = this.parent.oneofsArray.indexOf(this.partOf)) < 0)
524
- throw Error("missing oneof");
525
- }
526
-
527
- if (this.options) {
528
- descriptor.options = toDescriptorOptions(this.options, exports.FieldOptions);
529
- if (this.options["default"] != null)
530
- descriptor.defaultValue = String(this.options["default"]);
531
- if (this.options.proto3_optional)
532
- descriptor.proto3_optional = true;
533
- }
534
-
535
- if (edition === "proto3") { // defaults to packed=true
536
- if (!this.packed)
537
- (descriptor.options || (descriptor.options = exports.FieldOptions.create())).packed = false;
538
- } else if ((!edition || edition === "proto2") && this.packed) // defaults to packed=false
539
- (descriptor.options || (descriptor.options = exports.FieldOptions.create())).packed = true;
540
-
541
- return descriptor;
542
- };
543
-
544
- // --- Enum ---
545
-
546
- /**
547
- * Properties of an EnumDescriptorProto message.
548
- * @interface IEnumDescriptorProto
549
- * @property {string} [name] Enum name
550
- * @property {IEnumValueDescriptorProto[]} [value] Enum values
551
- * @property {IEnumOptions} [options] Enum options
552
- */
553
-
554
- /**
555
- * Properties of an EnumValueDescriptorProto message.
556
- * @interface IEnumValueDescriptorProto
557
- * @property {string} [name] Name
558
- * @property {number} [number] Value
559
- * @property {*} [options] Not supported
560
- */
561
-
562
- /**
563
- * Properties of an EnumOptions message.
564
- * @interface IEnumOptions
565
- * @property {boolean} [allowAlias] Whether aliases are allowed
566
- * @property {boolean} [deprecated]
567
- */
568
-
569
- var unnamedEnumIndex = 0;
570
-
571
- /**
572
- * Creates an enum from a descriptor.
573
- *
574
- * Warning: this is not safe to use with editions protos, since it discards relevant file context.
575
- *
576
- * @param {IEnumDescriptorProto|Reader|Uint8Array} descriptor Descriptor
577
- * @param {string} [edition="proto2"] The syntax or edition to use
578
- * @param {boolean} [nested=false] Whether or not this is a top-level object
579
- * @returns {Enum} Enum instance
580
- */
581
- Enum.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {
582
-
583
- // Decode the descriptor message if specified as a buffer:
584
- if (typeof descriptor.length === "number")
585
- descriptor = exports.EnumDescriptorProto.decode(descriptor);
586
-
587
- // Construct values object
588
- var values = {};
589
- if (descriptor.value)
590
- for (var i = 0; i < descriptor.value.length; ++i) {
591
- var name = descriptor.value[i].name,
592
- value = descriptor.value[i].number || 0;
593
- values[name && name.length ? name : "NAME" + value] = value;
594
- }
595
-
596
- var enm = new Enum(
597
- descriptor.name && descriptor.name.length ? descriptor.name : "Enum" + unnamedEnumIndex++,
598
- values,
599
- fromDescriptorOptions(descriptor.options, exports.EnumOptions)
600
- );
601
-
602
- if (!nested)
603
- enm._edition = edition;
604
-
605
- return enm;
606
- };
607
-
608
- /**
609
- * Converts an enum to a descriptor.
610
- * @returns {Message<IEnumDescriptorProto>} Descriptor
611
- */
612
- Enum.prototype.toDescriptor = function toDescriptor() {
613
-
614
- // Values
615
- var values = [];
616
- for (var i = 0, ks = Object.keys(this.values); i < ks.length; ++i)
617
- values.push(exports.EnumValueDescriptorProto.create({ name: ks[i], number: this.values[ks[i]] }));
618
-
619
- return exports.EnumDescriptorProto.create({
620
- name: this.name,
621
- value: values,
622
- options: toDescriptorOptions(this.options, exports.EnumOptions)
623
- });
624
- };
625
-
626
- // --- OneOf ---
627
-
628
- /**
629
- * Properties of a OneofDescriptorProto message.
630
- * @interface IOneofDescriptorProto
631
- * @property {string} [name] Oneof name
632
- * @property {*} [options] Not supported
633
- */
634
-
635
- var unnamedOneofIndex = 0;
636
-
637
- /**
638
- * Creates a oneof from a descriptor.
639
- *
640
- * Warning: this is not safe to use with editions protos, since it discards relevant file context.
641
- *
642
- * @param {IOneofDescriptorProto|Reader|Uint8Array} descriptor Descriptor
643
- * @returns {OneOf} OneOf instance
644
- */
645
- OneOf.fromDescriptor = function fromDescriptor(descriptor) {
646
-
647
- // Decode the descriptor message if specified as a buffer:
648
- if (typeof descriptor.length === "number")
649
- descriptor = exports.OneofDescriptorProto.decode(descriptor);
650
-
651
- return new OneOf(
652
- // unnamedOneOfIndex is global, not per type, because we have no ref to a type here
653
- descriptor.name && descriptor.name.length ? descriptor.name : "oneof" + unnamedOneofIndex++
654
- // fromDescriptorOptions(descriptor.options, exports.OneofOptions) - only uninterpreted_option
655
- );
656
- };
657
-
658
- /**
659
- * Converts a oneof to a descriptor.
660
- * @returns {Message<IOneofDescriptorProto>} Descriptor
661
- */
662
- OneOf.prototype.toDescriptor = function toDescriptor() {
663
- return exports.OneofDescriptorProto.create({
664
- name: this.name
665
- // options: toDescriptorOptions(this.options, exports.OneofOptions) - only uninterpreted_option
666
- });
667
- };
668
-
669
- // --- Service ---
670
-
671
- /**
672
- * Properties of a ServiceDescriptorProto message.
673
- * @interface IServiceDescriptorProto
674
- * @property {string} [name] Service name
675
- * @property {IMethodDescriptorProto[]} [method] Methods
676
- * @property {IServiceOptions} [options] Options
677
- */
678
-
679
- /**
680
- * Properties of a ServiceOptions message.
681
- * @interface IServiceOptions
682
- * @property {boolean} [deprecated]
683
- */
684
-
685
- var unnamedServiceIndex = 0;
686
-
687
- /**
688
- * Creates a service from a descriptor.
689
- *
690
- * Warning: this is not safe to use with editions protos, since it discards relevant file context.
691
- *
692
- * @param {IServiceDescriptorProto|Reader|Uint8Array} descriptor Descriptor
693
- * @param {string} [edition="proto2"] The syntax or edition to use
694
- * @param {boolean} [nested=false] Whether or not this is a top-level object
695
- * @returns {Service} Service instance
696
- */
697
- Service.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {
698
-
699
- // Decode the descriptor message if specified as a buffer:
700
- if (typeof descriptor.length === "number")
701
- descriptor = exports.ServiceDescriptorProto.decode(descriptor);
702
-
703
- var service = new Service(descriptor.name && descriptor.name.length ? descriptor.name : "Service" + unnamedServiceIndex++, fromDescriptorOptions(descriptor.options, exports.ServiceOptions));
704
- if (!nested)
705
- service._edition = edition;
706
- if (descriptor.method)
707
- for (var i = 0; i < descriptor.method.length; ++i)
708
- service.add(Method.fromDescriptor(descriptor.method[i]));
709
-
710
- return service;
711
- };
712
-
713
- /**
714
- * Converts a service to a descriptor.
715
- * @returns {Message<IServiceDescriptorProto>} Descriptor
716
- */
717
- Service.prototype.toDescriptor = function toDescriptor() {
718
-
719
- // Methods
720
- var methods = [];
721
- for (var i = 0; i < this.methodsArray.length; ++i)
722
- methods.push(this._methodsArray[i].toDescriptor());
723
-
724
- return exports.ServiceDescriptorProto.create({
725
- name: this.name,
726
- method: methods,
727
- options: toDescriptorOptions(this.options, exports.ServiceOptions)
728
- });
729
- };
730
-
731
- // --- Method ---
732
-
733
- /**
734
- * Properties of a MethodDescriptorProto message.
735
- * @interface IMethodDescriptorProto
736
- * @property {string} [name] Method name
737
- * @property {string} [inputType] Request type name
738
- * @property {string} [outputType] Response type name
739
- * @property {IMethodOptions} [options] Not supported
740
- * @property {boolean} [clientStreaming=false] Whether requests are streamed
741
- * @property {boolean} [serverStreaming=false] Whether responses are streamed
742
- */
743
-
744
- /**
745
- * Properties of a MethodOptions message.
746
- *
747
- * Warning: this is not safe to use with editions protos, since it discards relevant file context.
748
- *
749
- * @interface IMethodOptions
750
- * @property {boolean} [deprecated]
751
- */
752
-
753
- var unnamedMethodIndex = 0;
754
-
755
- /**
756
- * Creates a method from a descriptor.
757
- * @param {IMethodDescriptorProto|Reader|Uint8Array} descriptor Descriptor
758
- * @returns {Method} Reflected method instance
759
- */
760
- Method.fromDescriptor = function fromDescriptor(descriptor) {
761
-
762
- // Decode the descriptor message if specified as a buffer:
763
- if (typeof descriptor.length === "number")
764
- descriptor = exports.MethodDescriptorProto.decode(descriptor);
765
-
766
- return new Method(
767
- // unnamedMethodIndex is global, not per service, because we have no ref to a service here
768
- descriptor.name && descriptor.name.length ? descriptor.name : "Method" + unnamedMethodIndex++,
769
- "rpc",
770
- descriptor.inputType,
771
- descriptor.outputType,
772
- Boolean(descriptor.clientStreaming),
773
- Boolean(descriptor.serverStreaming),
774
- fromDescriptorOptions(descriptor.options, exports.MethodOptions)
775
- );
776
- };
777
-
778
- /**
779
- * Converts a method to a descriptor.
780
- * @returns {Message<IMethodDescriptorProto>} Descriptor
781
- */
782
- Method.prototype.toDescriptor = function toDescriptor() {
783
- return exports.MethodDescriptorProto.create({
784
- name: this.name,
785
- inputType: this.resolvedRequestType ? this.resolvedRequestType.fullName : this.requestType,
786
- outputType: this.resolvedResponseType ? this.resolvedResponseType.fullName : this.responseType,
787
- clientStreaming: this.requestStream,
788
- serverStreaming: this.responseStream,
789
- options: toDescriptorOptions(this.options, exports.MethodOptions)
790
- });
791
- };
792
-
793
- // --- utility ---
794
-
795
- // Converts a descriptor type to a protobuf.js basic type
796
- function fromDescriptorType(type) {
797
- switch (type) {
798
- // 0 is reserved for errors
799
- case 1: return "double";
800
- case 2: return "float";
801
- case 3: return "int64";
802
- case 4: return "uint64";
803
- case 5: return "int32";
804
- case 6: return "fixed64";
805
- case 7: return "fixed32";
806
- case 8: return "bool";
807
- case 9: return "string";
808
- case 12: return "bytes";
809
- case 13: return "uint32";
810
- case 15: return "sfixed32";
811
- case 16: return "sfixed64";
812
- case 17: return "sint32";
813
- case 18: return "sint64";
814
- }
815
- throw Error("illegal type: " + type);
816
- }
817
-
818
- // Tests if a descriptor type is packable
819
- function packableDescriptorType(type) {
820
- switch (type) {
821
- case 1: // double
822
- case 2: // float
823
- case 3: // int64
824
- case 4: // uint64
825
- case 5: // int32
826
- case 6: // fixed64
827
- case 7: // fixed32
828
- case 8: // bool
829
- case 13: // uint32
830
- case 14: // enum (!)
831
- case 15: // sfixed32
832
- case 16: // sfixed64
833
- case 17: // sint32
834
- case 18: // sint64
835
- return true;
836
- }
837
- return false;
838
- }
839
-
840
- // Converts a protobuf.js basic type to a descriptor type
841
- function toDescriptorType(type, resolvedType, delimited) {
842
- switch (type) {
843
- // 0 is reserved for errors
844
- case "double": return 1;
845
- case "float": return 2;
846
- case "int64": return 3;
847
- case "uint64": return 4;
848
- case "int32": return 5;
849
- case "fixed64": return 6;
850
- case "fixed32": return 7;
851
- case "bool": return 8;
852
- case "string": return 9;
853
- case "bytes": return 12;
854
- case "uint32": return 13;
855
- case "sfixed32": return 15;
856
- case "sfixed64": return 16;
857
- case "sint32": return 17;
858
- case "sint64": return 18;
859
- }
860
- if (resolvedType instanceof Enum)
861
- return 14;
862
- if (resolvedType instanceof Type)
863
- return delimited ? 10 : 11;
864
- throw Error("illegal type: " + type);
865
- }
866
-
867
- function fromDescriptorOptionsRecursive(obj, type) {
868
- var val = {};
869
- for (var i = 0, field, key; i < type.fieldsArray.length; ++i) {
870
- if ((key = (field = type._fieldsArray[i]).name) === "uninterpretedOption") continue;
871
- if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;
872
-
873
- var newKey = underScore(key);
874
- if (field.resolvedType instanceof Type) {
875
- val[newKey] = fromDescriptorOptionsRecursive(obj[key], field.resolvedType);
876
- } else if(field.resolvedType instanceof Enum) {
877
- val[newKey] = field.resolvedType.valuesById[obj[key]];
878
- } else {
879
- val[newKey] = obj[key];
880
- }
881
- }
882
- return val;
883
- }
884
-
885
- // Converts descriptor options to an options object
886
- function fromDescriptorOptions(options, type) {
887
- if (!options)
888
- return undefined;
889
- return fromDescriptorOptionsRecursive(type.toObject(options), type);
890
- }
891
-
892
- function toDescriptorOptionsRecursive(obj, type) {
893
- var val = {};
894
- var keys = Object.keys(obj);
895
- for (var i = 0; i < keys.length; ++i) {
896
- var key = keys[i];
897
- var newKey = $protobuf.util.camelCase(key);
898
- if (!Object.prototype.hasOwnProperty.call(type.fields, newKey)) continue;
899
- var field = type.fields[newKey];
900
- if (field.resolvedType instanceof Type) {
901
- val[newKey] = toDescriptorOptionsRecursive(obj[key], field.resolvedType);
902
- } else {
903
- val[newKey] = obj[key];
904
- }
905
- if (field.repeated && !Array.isArray(val[newKey])) {
906
- val[newKey] = [val[newKey]];
907
- }
908
- }
909
- return val;
910
- }
911
-
912
- // Converts an options object to descriptor options
913
- function toDescriptorOptions(options, type) {
914
- if (!options)
915
- return undefined;
916
- return type.fromObject(toDescriptorOptionsRecursive(options, type));
917
- }
918
-
919
- // Calculates the shortest relative path from `from` to `to`.
920
- function shortname(from, to) {
921
- var fromPath = from.fullName.split("."),
922
- toPath = to.fullName.split("."),
923
- i = 0,
924
- j = 0,
925
- k = toPath.length - 1;
926
- if (!(from instanceof Root) && to instanceof Namespace)
927
- while (i < fromPath.length && j < k && fromPath[i] === toPath[j]) {
928
- var other = to.lookup(fromPath[i++], true);
929
- if (other !== null && other !== to)
930
- break;
931
- ++j;
932
- }
933
- else
934
- for (; i < fromPath.length && j < k && fromPath[i] === toPath[j]; ++i, ++j);
935
- return toPath.slice(j).join(".");
936
- }
937
-
938
- // copied here from cli/targets/proto.js
939
- function underScore(str) {
940
- return str.substring(0,1)
941
- + str.substring(1)
942
- .replace(/([A-Z])(?=[a-z]|$)/g, function($0, $1) { return "_" + $1.toLowerCase(); });
943
- }
944
-
945
- function editionFromDescriptor(fileDescriptor) {
946
- if (fileDescriptor.syntax === "editions") {
947
- switch(fileDescriptor.edition) {
948
- case exports.Edition.EDITION_2023:
949
- return "2023";
950
- default:
951
- throw new Error("Unsupported edition " + fileDescriptor.edition);
952
- }
953
- }
954
- if (fileDescriptor.syntax === "proto3") {
955
- return "proto3";
956
- }
957
- return "proto2";
958
- }
959
-
960
- function editionToDescriptor(edition, fileDescriptor) {
961
- if (!edition) return;
962
- if (edition === "proto2" || edition === "proto3") {
963
- fileDescriptor.syntax = edition;
964
- } else {
965
- fileDescriptor.syntax = "editions";
966
- switch(edition) {
967
- case "2023":
968
- fileDescriptor.edition = exports.Edition.EDITION_2023;
969
- break;
970
- default:
971
- throw new Error("Unsupported edition " + edition);
972
- }
973
- }
974
- }
975
-
976
- // --- exports ---
977
-
978
- /**
979
- * Reflected file descriptor set.
980
- * @name FileDescriptorSet
981
- * @type {Type}
982
- * @const
983
- * @tstype $protobuf.Type
984
- */
985
-
986
- /**
987
- * Reflected file descriptor proto.
988
- * @name FileDescriptorProto
989
- * @type {Type}
990
- * @const
991
- * @tstype $protobuf.Type
992
- */
993
-
994
- /**
995
- * Reflected descriptor proto.
996
- * @name DescriptorProto
997
- * @type {Type}
998
- * @property {Type} ExtensionRange
999
- * @property {Type} ReservedRange
1000
- * @const
1001
- * @tstype $protobuf.Type & {
1002
- * ExtensionRange: $protobuf.Type,
1003
- * ReservedRange: $protobuf.Type
1004
- * }
1005
- */
1006
-
1007
- /**
1008
- * Reflected field descriptor proto.
1009
- * @name FieldDescriptorProto
1010
- * @type {Type}
1011
- * @property {Enum} Label
1012
- * @property {Enum} Type
1013
- * @const
1014
- * @tstype $protobuf.Type & {
1015
- * Label: $protobuf.Enum,
1016
- * Type: $protobuf.Enum
1017
- * }
1018
- */
1019
-
1020
- /**
1021
- * Reflected oneof descriptor proto.
1022
- * @name OneofDescriptorProto
1023
- * @type {Type}
1024
- * @const
1025
- * @tstype $protobuf.Type
1026
- */
1027
-
1028
- /**
1029
- * Reflected enum descriptor proto.
1030
- * @name EnumDescriptorProto
1031
- * @type {Type}
1032
- * @const
1033
- * @tstype $protobuf.Type
1034
- */
1035
-
1036
- /**
1037
- * Reflected service descriptor proto.
1038
- * @name ServiceDescriptorProto
1039
- * @type {Type}
1040
- * @const
1041
- * @tstype $protobuf.Type
1042
- */
1043
-
1044
- /**
1045
- * Reflected enum value descriptor proto.
1046
- * @name EnumValueDescriptorProto
1047
- * @type {Type}
1048
- * @const
1049
- * @tstype $protobuf.Type
1050
- */
1051
-
1052
- /**
1053
- * Reflected method descriptor proto.
1054
- * @name MethodDescriptorProto
1055
- * @type {Type}
1056
- * @const
1057
- * @tstype $protobuf.Type
1058
- */
1059
-
1060
- /**
1061
- * Reflected file options.
1062
- * @name FileOptions
1063
- * @type {Type}
1064
- * @property {Enum} OptimizeMode
1065
- * @const
1066
- * @tstype $protobuf.Type & {
1067
- * OptimizeMode: $protobuf.Enum
1068
- * }
1069
- */
1070
-
1071
- /**
1072
- * Reflected message options.
1073
- * @name MessageOptions
1074
- * @type {Type}
1075
- * @const
1076
- * @tstype $protobuf.Type
1077
- */
1078
-
1079
- /**
1080
- * Reflected field options.
1081
- * @name FieldOptions
1082
- * @type {Type}
1083
- * @property {Enum} CType
1084
- * @property {Enum} JSType
1085
- * @const
1086
- * @tstype $protobuf.Type & {
1087
- * CType: $protobuf.Enum,
1088
- * JSType: $protobuf.Enum
1089
- * }
1090
- */
1091
-
1092
- /**
1093
- * Reflected oneof options.
1094
- * @name OneofOptions
1095
- * @type {Type}
1096
- * @const
1097
- * @tstype $protobuf.Type
1098
- */
1099
-
1100
- /**
1101
- * Reflected enum options.
1102
- * @name EnumOptions
1103
- * @type {Type}
1104
- * @const
1105
- * @tstype $protobuf.Type
1106
- */
1107
-
1108
- /**
1109
- * Reflected enum value options.
1110
- * @name EnumValueOptions
1111
- * @type {Type}
1112
- * @const
1113
- * @tstype $protobuf.Type
1114
- */
1115
-
1116
- /**
1117
- * Reflected service options.
1118
- * @name ServiceOptions
1119
- * @type {Type}
1120
- * @const
1121
- * @tstype $protobuf.Type
1122
- */
1123
-
1124
- /**
1125
- * Reflected method options.
1126
- * @name MethodOptions
1127
- * @type {Type}
1128
- * @const
1129
- * @tstype $protobuf.Type
1130
- */
1131
-
1132
- /**
1133
- * Reflected uninterpretet option.
1134
- * @name UninterpretedOption
1135
- * @type {Type}
1136
- * @property {Type} NamePart
1137
- * @const
1138
- * @tstype $protobuf.Type & {
1139
- * NamePart: $protobuf.Type
1140
- * }
1141
- */
1142
-
1143
- /**
1144
- * Reflected source code info.
1145
- * @name SourceCodeInfo
1146
- * @type {Type}
1147
- * @property {Type} Location
1148
- * @const
1149
- * @tstype $protobuf.Type & {
1150
- * Location: $protobuf.Type
1151
- * }
1152
- */
1153
-
1154
- /**
1155
- * Reflected generated code info.
1156
- * @name GeneratedCodeInfo
1157
- * @type {Type}
1158
- * @property {Type} Annotation
1159
- * @const
1160
- * @tstype $protobuf.Type & {
1161
- * Annotation: $protobuf.Type
1162
- * }
1163
- */
1
+ "use strict";
2
+ var $protobuf = require("../..");
3
+ module.exports = exports = $protobuf.descriptor = $protobuf.Root.fromJSON(require("../../google/protobuf/descriptor.json")).lookup(".google.protobuf");
4
+
5
+ var Namespace = $protobuf.Namespace,
6
+ Root = $protobuf.Root,
7
+ Enum = $protobuf.Enum,
8
+ Type = $protobuf.Type,
9
+ Field = $protobuf.Field,
10
+ MapField = $protobuf.MapField,
11
+ OneOf = $protobuf.OneOf,
12
+ Service = $protobuf.Service,
13
+ Method = $protobuf.Method,
14
+ patterns = $protobuf.util.patterns;
15
+
16
+ var numberRe = patterns.numberRe,
17
+ typeRefRe = patterns.typeRefRe;
18
+
19
+ // --- Root ---
20
+
21
+ /**
22
+ * Properties of a FileDescriptorSet message.
23
+ * @interface IFileDescriptorSet
24
+ * @property {IFileDescriptorProto[]} file Files
25
+ */
26
+
27
+ /**
28
+ * Properties of a FileDescriptorProto message.
29
+ * @interface IFileDescriptorProto
30
+ * @property {string} [name] File name
31
+ * @property {string} [package] Package
32
+ * @property {*} [dependency] Not supported
33
+ * @property {*} [publicDependency] Not supported
34
+ * @property {*} [weakDependency] Not supported
35
+ * @property {IDescriptorProto[]} [messageType] Nested message types
36
+ * @property {IEnumDescriptorProto[]} [enumType] Nested enums
37
+ * @property {IServiceDescriptorProto[]} [service] Nested services
38
+ * @property {IFieldDescriptorProto[]} [extension] Nested extension fields
39
+ * @property {IFileOptions} [options] Options
40
+ * @property {*} [sourceCodeInfo] Not supported
41
+ * @property {string} [syntax="proto2"] Syntax
42
+ * @property {IEdition} [edition] Edition
43
+ */
44
+
45
+ /**
46
+ * Values of the Edition enum.
47
+ * @typedef IEdition
48
+ * @type {number}
49
+ * @property {number} EDITION_UNKNOWN=0
50
+ * @property {number} EDITION_LEGACY=900
51
+ * @property {number} EDITION_PROTO2=998
52
+ * @property {number} EDITION_PROTO3=999
53
+ * @property {number} EDITION_2023=1000
54
+ * @property {number} EDITION_2024=1001
55
+ * @property {number} EDITION_1_TEST_ONLY=1
56
+ * @property {number} EDITION_2_TEST_ONLY=2
57
+ * @property {number} EDITION_99997_TEST_ONLY=99997
58
+ * @property {number} EDITION_99998_TEST_ONLY=99998
59
+ * @property {number} EDITION_99998_TEST_ONLY=99999
60
+ * @property {number} EDITION_MAX=2147483647
61
+ */
62
+
63
+ /**
64
+ * Properties of a FileOptions message.
65
+ * @interface IFileOptions
66
+ * @property {string} [javaPackage]
67
+ * @property {string} [javaOuterClassname]
68
+ * @property {boolean} [javaMultipleFiles]
69
+ * @property {boolean} [javaGenerateEqualsAndHash]
70
+ * @property {boolean} [javaStringCheckUtf8]
71
+ * @property {IFileOptionsOptimizeMode} [optimizeFor=1]
72
+ * @property {string} [goPackage]
73
+ * @property {boolean} [ccGenericServices]
74
+ * @property {boolean} [javaGenericServices]
75
+ * @property {boolean} [pyGenericServices]
76
+ * @property {boolean} [deprecated]
77
+ * @property {boolean} [ccEnableArenas]
78
+ * @property {string} [objcClassPrefix]
79
+ * @property {string} [csharpNamespace]
80
+ */
81
+
82
+ /**
83
+ * Values of he FileOptions.OptimizeMode enum.
84
+ * @typedef IFileOptionsOptimizeMode
85
+ * @type {number}
86
+ * @property {number} SPEED=1
87
+ * @property {number} CODE_SIZE=2
88
+ * @property {number} LITE_RUNTIME=3
89
+ */
90
+
91
+ /**
92
+ * Creates a root from a descriptor set.
93
+ * @param {IFileDescriptorSet|Reader|Uint8Array} descriptor Descriptor
94
+ * @returns {Root} Root instance
95
+ */
96
+ Root.fromDescriptor = function fromDescriptor(descriptor) {
97
+
98
+ // Decode the descriptor message if specified as a buffer:
99
+ if (typeof descriptor.length === "number")
100
+ descriptor = exports.FileDescriptorSet.decode(descriptor);
101
+
102
+ var root = new Root();
103
+
104
+ if (descriptor.file) {
105
+ var fileDescriptor,
106
+ filePackage;
107
+ for (var j = 0, i; j < descriptor.file.length; ++j) {
108
+ filePackage = root;
109
+ if ((fileDescriptor = descriptor.file[j])["package"] && fileDescriptor["package"].length)
110
+ filePackage = root.define(fileDescriptor["package"]);
111
+ var edition = editionFromDescriptor(fileDescriptor);
112
+ if (fileDescriptor.name && fileDescriptor.name.length)
113
+ root.files.push(filePackage.filename = fileDescriptor.name);
114
+ if (fileDescriptor.messageType)
115
+ for (i = 0; i < fileDescriptor.messageType.length; ++i)
116
+ filePackage.add(Type.fromDescriptor(fileDescriptor.messageType[i], edition));
117
+ if (fileDescriptor.enumType)
118
+ for (i = 0; i < fileDescriptor.enumType.length; ++i)
119
+ filePackage.add(Enum.fromDescriptor(fileDescriptor.enumType[i], edition));
120
+ if (fileDescriptor.extension)
121
+ for (i = 0; i < fileDescriptor.extension.length; ++i)
122
+ filePackage.add(Field.fromDescriptor(fileDescriptor.extension[i], edition));
123
+ if (fileDescriptor.service)
124
+ for (i = 0; i < fileDescriptor.service.length; ++i)
125
+ filePackage.add(Service.fromDescriptor(fileDescriptor.service[i], edition));
126
+ var opts = fromDescriptorOptions(fileDescriptor.options, exports.FileOptions);
127
+ if (opts) {
128
+ var ks = Object.keys(opts);
129
+ for (i = 0; i < ks.length; ++i)
130
+ filePackage.setOption(ks[i], opts[ks[i]]);
131
+ }
132
+ }
133
+ }
134
+
135
+ return root.resolveAll();
136
+ };
137
+
138
+ /**
139
+ * Converts a root to a descriptor set.
140
+ * @returns {Message<IFileDescriptorSet>} Descriptor
141
+ * @param {string} [edition="proto2"] The syntax or edition to use
142
+ */
143
+ Root.prototype.toDescriptor = function toDescriptor(edition) {
144
+ var set = exports.FileDescriptorSet.create();
145
+ Root_toDescriptorRecursive(this, set.file, edition);
146
+ return set;
147
+ };
148
+
149
+ // Traverses a namespace and assembles the descriptor set
150
+ function Root_toDescriptorRecursive(ns, files, edition) {
151
+
152
+ // Create a new file
153
+ var file = exports.FileDescriptorProto.create({ name: ns.filename || (ns.fullName.substring(1).replace(/\./g, "_") || "root") + ".proto" });
154
+ editionToDescriptor(edition, file);
155
+ if (!(ns instanceof Root))
156
+ file["package"] = ns.fullName.substring(1);
157
+
158
+ // Add nested types
159
+ for (var i = 0, nested; i < ns.nestedArray.length; ++i)
160
+ if ((nested = ns._nestedArray[i]) instanceof Type)
161
+ file.messageType.push(nested.toDescriptor(edition));
162
+ else if (nested instanceof Enum)
163
+ file.enumType.push(nested.toDescriptor());
164
+ else if (nested instanceof Field)
165
+ file.extension.push(nested.toDescriptor(edition));
166
+ else if (nested instanceof Service)
167
+ file.service.push(nested.toDescriptor());
168
+ else if (nested instanceof /* plain */ Namespace)
169
+ Root_toDescriptorRecursive(nested, files, edition); // requires new file
170
+
171
+ // Keep package-level options
172
+ file.options = toDescriptorOptions(ns.options, exports.FileOptions);
173
+
174
+ // And keep the file only if there is at least one nested object
175
+ if (file.messageType.length + file.enumType.length + file.extension.length + file.service.length)
176
+ files.push(file);
177
+ }
178
+
179
+ // --- Type ---
180
+
181
+ /**
182
+ * Properties of a DescriptorProto message.
183
+ * @interface IDescriptorProto
184
+ * @property {string} [name] Message type name
185
+ * @property {IFieldDescriptorProto[]} [field] Fields
186
+ * @property {IFieldDescriptorProto[]} [extension] Extension fields
187
+ * @property {IDescriptorProto[]} [nestedType] Nested message types
188
+ * @property {IEnumDescriptorProto[]} [enumType] Nested enums
189
+ * @property {IDescriptorProtoExtensionRange[]} [extensionRange] Extension ranges
190
+ * @property {IOneofDescriptorProto[]} [oneofDecl] Oneofs
191
+ * @property {IMessageOptions} [options] Not supported
192
+ * @property {IDescriptorProtoReservedRange[]} [reservedRange] Reserved ranges
193
+ * @property {string[]} [reservedName] Reserved names
194
+ */
195
+
196
+ /**
197
+ * Properties of a MessageOptions message.
198
+ * @interface IMessageOptions
199
+ * @property {boolean} [mapEntry=false] Whether this message is a map entry
200
+ */
201
+
202
+ /**
203
+ * Properties of an ExtensionRange message.
204
+ * @interface IDescriptorProtoExtensionRange
205
+ * @property {number} [start] Start field id
206
+ * @property {number} [end] End field id
207
+ */
208
+
209
+ /**
210
+ * Properties of a ReservedRange message.
211
+ * @interface IDescriptorProtoReservedRange
212
+ * @property {number} [start] Start field id
213
+ * @property {number} [end] End field id
214
+ */
215
+
216
+ var unnamedMessageIndex = 0;
217
+
218
+ /**
219
+ * Creates a type from a descriptor.
220
+ *
221
+ * Warning: this is not safe to use with editions protos, since it discards relevant file context.
222
+ *
223
+ * @param {IDescriptorProto|Reader|Uint8Array} descriptor Descriptor
224
+ * @param {string} [edition="proto2"] The syntax or edition to use
225
+ * @param {boolean} [nested=false] Whether or not this is a nested object
226
+ * @returns {Type} Type instance
227
+ */
228
+ Type.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {
229
+ // Decode the descriptor message if specified as a buffer:
230
+ if (typeof descriptor.length === "number")
231
+ descriptor = exports.DescriptorProto.decode(descriptor);
232
+
233
+ // Create the message type
234
+ var type = new Type(descriptor.name.length ? descriptor.name : "Type" + unnamedMessageIndex++, fromDescriptorOptions(descriptor.options, exports.MessageOptions)),
235
+ i;
236
+
237
+ if (!nested)
238
+ type._edition = edition;
239
+
240
+ /* Oneofs */ if (descriptor.oneofDecl)
241
+ for (i = 0; i < descriptor.oneofDecl.length; ++i)
242
+ type.add(OneOf.fromDescriptor(descriptor.oneofDecl[i]));
243
+ /* Fields */ if (descriptor.field)
244
+ for (i = 0; i < descriptor.field.length; ++i) {
245
+ var field = Field.fromDescriptor(descriptor.field[i], edition, true);
246
+ type.add(field);
247
+ if (descriptor.field[i].hasOwnProperty("oneofIndex")) // eslint-disable-line no-prototype-builtins
248
+ type.oneofsArray[descriptor.field[i].oneofIndex].add(field);
249
+ }
250
+ /* Extension fields */ if (descriptor.extension)
251
+ for (i = 0; i < descriptor.extension.length; ++i)
252
+ type.add(Field.fromDescriptor(descriptor.extension[i], edition, true));
253
+ /* Nested types */ if (descriptor.nestedType)
254
+ for (i = 0; i < descriptor.nestedType.length; ++i) {
255
+ type.add(Type.fromDescriptor(descriptor.nestedType[i], edition, true));
256
+ if (descriptor.nestedType[i].options && descriptor.nestedType[i].options.mapEntry)
257
+ type.setOption("map_entry", true);
258
+ }
259
+ /* Nested enums */ if (descriptor.enumType)
260
+ for (i = 0; i < descriptor.enumType.length; ++i)
261
+ type.add(Enum.fromDescriptor(descriptor.enumType[i], edition, true));
262
+ /* Extension ranges */ if (descriptor.extensionRange && descriptor.extensionRange.length) {
263
+ type.extensions = [];
264
+ for (i = 0; i < descriptor.extensionRange.length; ++i)
265
+ type.extensions.push([ descriptor.extensionRange[i].start, descriptor.extensionRange[i].end ]);
266
+ }
267
+ /* Reserved... */ if (descriptor.reservedRange && descriptor.reservedRange.length || descriptor.reservedName && descriptor.reservedName.length) {
268
+ type.reserved = [];
269
+ /* Ranges */ if (descriptor.reservedRange)
270
+ for (i = 0; i < descriptor.reservedRange.length; ++i)
271
+ type.reserved.push([ descriptor.reservedRange[i].start, descriptor.reservedRange[i].end ]);
272
+ /* Names */ if (descriptor.reservedName)
273
+ for (i = 0; i < descriptor.reservedName.length; ++i)
274
+ type.reserved.push(descriptor.reservedName[i]);
275
+ }
276
+
277
+ return type;
278
+ };
279
+
280
+ /**
281
+ * Converts a type to a descriptor.
282
+ * @returns {Message<IDescriptorProto>} Descriptor
283
+ * @param {string} [edition="proto2"] The syntax or edition to use
284
+ */
285
+ Type.prototype.toDescriptor = function toDescriptor(edition) {
286
+ var descriptor = exports.DescriptorProto.create({ name: this.name }),
287
+ i;
288
+
289
+ /* Fields */ for (i = 0; i < this.fieldsArray.length; ++i) {
290
+ var fieldDescriptor;
291
+ descriptor.field.push(fieldDescriptor = this._fieldsArray[i].toDescriptor(edition));
292
+ if (this._fieldsArray[i] instanceof MapField) { // map fields are repeated FieldNameEntry
293
+ var keyType = toDescriptorType(this._fieldsArray[i].keyType, this._fieldsArray[i].resolvedKeyType, false),
294
+ valueType = toDescriptorType(this._fieldsArray[i].type, this._fieldsArray[i].resolvedType, false),
295
+ valueTypeName = valueType === /* type */ 11 || valueType === /* enum */ 14
296
+ ? this._fieldsArray[i].resolvedType && shortname(this.parent, this._fieldsArray[i].resolvedType) || this._fieldsArray[i].type
297
+ : undefined;
298
+ descriptor.nestedType.push(exports.DescriptorProto.create({
299
+ name: fieldDescriptor.typeName,
300
+ field: [
301
+ exports.FieldDescriptorProto.create({ name: "key", number: 1, label: 1, type: keyType }), // can't reference a type or enum
302
+ exports.FieldDescriptorProto.create({ name: "value", number: 2, label: 1, type: valueType, typeName: valueTypeName })
303
+ ],
304
+ options: exports.MessageOptions.create({ mapEntry: true })
305
+ }));
306
+ }
307
+ }
308
+ /* Oneofs */ for (i = 0; i < this.oneofsArray.length; ++i)
309
+ descriptor.oneofDecl.push(this._oneofsArray[i].toDescriptor());
310
+ /* Nested... */ for (i = 0; i < this.nestedArray.length; ++i) {
311
+ /* Extension fields */ if (this._nestedArray[i] instanceof Field)
312
+ descriptor.field.push(this._nestedArray[i].toDescriptor(edition));
313
+ /* Types */ else if (this._nestedArray[i] instanceof Type)
314
+ descriptor.nestedType.push(this._nestedArray[i].toDescriptor(edition));
315
+ /* Enums */ else if (this._nestedArray[i] instanceof Enum)
316
+ descriptor.enumType.push(this._nestedArray[i].toDescriptor());
317
+ // plain nested namespaces become packages instead in Root#toDescriptor
318
+ }
319
+ /* Extension ranges */ if (this.extensions)
320
+ for (i = 0; i < this.extensions.length; ++i)
321
+ descriptor.extensionRange.push(exports.DescriptorProto.ExtensionRange.create({ start: this.extensions[i][0], end: this.extensions[i][1] }));
322
+ /* Reserved... */ if (this.reserved)
323
+ for (i = 0; i < this.reserved.length; ++i)
324
+ /* Names */ if (typeof this.reserved[i] === "string")
325
+ descriptor.reservedName.push(this.reserved[i]);
326
+ /* Ranges */ else
327
+ descriptor.reservedRange.push(exports.DescriptorProto.ReservedRange.create({ start: this.reserved[i][0], end: this.reserved[i][1] }));
328
+
329
+ descriptor.options = toDescriptorOptions(this.options, exports.MessageOptions);
330
+
331
+ return descriptor;
332
+ };
333
+
334
+ // --- Field ---
335
+
336
+ /**
337
+ * Properties of a FieldDescriptorProto message.
338
+ * @interface IFieldDescriptorProto
339
+ * @property {string} [name] Field name
340
+ * @property {number} [number] Field id
341
+ * @property {IFieldDescriptorProtoLabel} [label] Field rule
342
+ * @property {IFieldDescriptorProtoType} [type] Field basic type
343
+ * @property {string} [typeName] Field type name
344
+ * @property {string} [extendee] Extended type name
345
+ * @property {string} [defaultValue] Literal default value
346
+ * @property {number} [oneofIndex] Oneof index if part of a oneof
347
+ * @property {*} [jsonName] Not supported
348
+ * @property {IFieldOptions} [options] Field options
349
+ */
350
+
351
+ /**
352
+ * Values of the FieldDescriptorProto.Label enum.
353
+ * @typedef IFieldDescriptorProtoLabel
354
+ * @type {number}
355
+ * @property {number} LABEL_OPTIONAL=1
356
+ * @property {number} LABEL_REQUIRED=2
357
+ * @property {number} LABEL_REPEATED=3
358
+ */
359
+
360
+ /**
361
+ * Values of the FieldDescriptorProto.Type enum.
362
+ * @typedef IFieldDescriptorProtoType
363
+ * @type {number}
364
+ * @property {number} TYPE_DOUBLE=1
365
+ * @property {number} TYPE_FLOAT=2
366
+ * @property {number} TYPE_INT64=3
367
+ * @property {number} TYPE_UINT64=4
368
+ * @property {number} TYPE_INT32=5
369
+ * @property {number} TYPE_FIXED64=6
370
+ * @property {number} TYPE_FIXED32=7
371
+ * @property {number} TYPE_BOOL=8
372
+ * @property {number} TYPE_STRING=9
373
+ * @property {number} TYPE_GROUP=10
374
+ * @property {number} TYPE_MESSAGE=11
375
+ * @property {number} TYPE_BYTES=12
376
+ * @property {number} TYPE_UINT32=13
377
+ * @property {number} TYPE_ENUM=14
378
+ * @property {number} TYPE_SFIXED32=15
379
+ * @property {number} TYPE_SFIXED64=16
380
+ * @property {number} TYPE_SINT32=17
381
+ * @property {number} TYPE_SINT64=18
382
+ */
383
+
384
+ /**
385
+ * Properties of a FieldOptions message.
386
+ * @interface IFieldOptions
387
+ * @property {boolean} [packed] Whether packed or not (defaults to `false` for proto2 and `true` for proto3)
388
+ * @property {IFieldOptionsJSType} [jstype] JavaScript value type (not used by protobuf.js)
389
+ */
390
+
391
+ /**
392
+ * Values of the FieldOptions.JSType enum.
393
+ * @typedef IFieldOptionsJSType
394
+ * @type {number}
395
+ * @property {number} JS_NORMAL=0
396
+ * @property {number} JS_STRING=1
397
+ * @property {number} JS_NUMBER=2
398
+ */
399
+
400
+ /**
401
+ * Creates a field from a descriptor.
402
+ *
403
+ * Warning: this is not safe to use with editions protos, since it discards relevant file context.
404
+ *
405
+ * @param {IFieldDescriptorProto|Reader|Uint8Array} descriptor Descriptor
406
+ * @param {string} [edition="proto2"] The syntax or edition to use
407
+ * @param {boolean} [nested=false] Whether or not this is a top-level object
408
+ * @returns {Field} Field instance
409
+ */
410
+ Field.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {
411
+
412
+ // Decode the descriptor message if specified as a buffer:
413
+ if (typeof descriptor.length === "number")
414
+ descriptor = exports.DescriptorProto.decode(descriptor);
415
+
416
+ if (typeof descriptor.number !== "number")
417
+ throw Error("missing field id");
418
+
419
+ // Rewire field type
420
+ var typeName = descriptor.typeName,
421
+ fieldType;
422
+ if (typeName != null && typeName !== "") {
423
+ if (typeof typeName !== "string" || !typeRefRe.test(typeName))
424
+ throw Error("illegal type name: " + typeName);
425
+ fieldType = typeName;
426
+ } else
427
+ fieldType = fromDescriptorType(descriptor.type);
428
+
429
+ // Rewire field rule
430
+ var fieldRule;
431
+ switch (descriptor.label) {
432
+ // 0 is reserved for errors
433
+ case 1: fieldRule = undefined; break;
434
+ case 2: fieldRule = "required"; break;
435
+ case 3: fieldRule = "repeated"; break;
436
+ default: throw Error("illegal label: " + descriptor.label);
437
+ }
438
+
439
+ var extendee = descriptor.extendee;
440
+ if (extendee != null && extendee !== "") {
441
+ if (typeof extendee !== "string" || !typeRefRe.test(extendee))
442
+ throw Error("illegal type name: " + extendee);
443
+ } else
444
+ extendee = undefined;
445
+ var field = new Field(
446
+ descriptor.name.length ? descriptor.name : "field" + descriptor.number,
447
+ descriptor.number,
448
+ fieldType,
449
+ fieldRule,
450
+ extendee
451
+ );
452
+
453
+ if (!nested)
454
+ field._edition = edition;
455
+
456
+ field.options = fromDescriptorOptions(descriptor.options, exports.FieldOptions);
457
+ if (descriptor.proto3_optional)
458
+ field.options.proto3_optional = true;
459
+
460
+ if (descriptor.defaultValue && descriptor.defaultValue.length) {
461
+ var defaultValue = descriptor.defaultValue;
462
+ switch (defaultValue) {
463
+ case "true": case "TRUE":
464
+ defaultValue = true;
465
+ break;
466
+ case "false": case "FALSE":
467
+ defaultValue = false;
468
+ break;
469
+ default:
470
+ var match = numberRe.exec(defaultValue);
471
+ if (match)
472
+ defaultValue = parseInt(defaultValue); // eslint-disable-line radix
473
+ break;
474
+ }
475
+ field.setOption("default", defaultValue);
476
+ }
477
+
478
+ if (packableDescriptorType(descriptor.type)) {
479
+ if (edition === "proto3") { // defaults to packed=true (internal preset is packed=true)
480
+ if (descriptor.options && !descriptor.options.packed)
481
+ field.setOption("packed", false);
482
+ } else if ((!edition || edition === "proto2") && descriptor.options && descriptor.options.packed) // defaults to packed=false
483
+ field.setOption("packed", true);
484
+ }
485
+
486
+ return field;
487
+ };
488
+
489
+ /**
490
+ * Converts a field to a descriptor.
491
+ * @returns {Message<IFieldDescriptorProto>} Descriptor
492
+ * @param {string} [edition="proto2"] The syntax or edition to use
493
+ */
494
+ Field.prototype.toDescriptor = function toDescriptor(edition) {
495
+ var descriptor = exports.FieldDescriptorProto.create({ name: this.name, number: this.id });
496
+
497
+ if (this.map) {
498
+
499
+ descriptor.type = 11; // message
500
+ descriptor.typeName = $protobuf.util.ucFirst(this.name); // fieldName -> FieldNameEntry (built in Type#toDescriptor)
501
+ descriptor.label = 3; // repeated
502
+
503
+ } else {
504
+
505
+ // Rewire field type
506
+ switch (descriptor.type = toDescriptorType(this.type, this.resolve().resolvedType, this.delimited)) {
507
+ case 10: // group
508
+ case 11: // type
509
+ case 14: // enum
510
+ descriptor.typeName = this.resolvedType ? shortname(this.parent, this.resolvedType) : this.type;
511
+ break;
512
+ }
513
+
514
+ // Rewire field rule
515
+ if (this.rule === "repeated") {
516
+ descriptor.label = 3;
517
+ } else if (this.required && edition === "proto2") {
518
+ descriptor.label = 2;
519
+ } else {
520
+ descriptor.label = 1;
521
+ }
522
+ }
523
+
524
+ // Handle extension field
525
+ descriptor.extendee = this.extensionField ? this.extensionField.parent.fullName : this.extend;
526
+
527
+ // Handle part of oneof (only meaningful for message types)
528
+ if (this.partOf && this.parent instanceof Type) {
529
+ if ((descriptor.oneofIndex = this.parent.oneofsArray.indexOf(this.partOf)) < 0)
530
+ throw Error("missing oneof");
531
+ }
532
+
533
+ if (this.options) {
534
+ descriptor.options = toDescriptorOptions(this.options, exports.FieldOptions);
535
+ if (this.options["default"] != null)
536
+ descriptor.defaultValue = String(this.options["default"]);
537
+ if (this.options.proto3_optional)
538
+ descriptor.proto3_optional = true;
539
+ }
540
+
541
+ if (edition === "proto3") { // defaults to packed=true
542
+ if (!this.packed)
543
+ (descriptor.options || (descriptor.options = exports.FieldOptions.create())).packed = false;
544
+ } else if ((!edition || edition === "proto2") && this.packed) // defaults to packed=false
545
+ (descriptor.options || (descriptor.options = exports.FieldOptions.create())).packed = true;
546
+
547
+ return descriptor;
548
+ };
549
+
550
+ // --- Enum ---
551
+
552
+ /**
553
+ * Properties of an EnumDescriptorProto message.
554
+ * @interface IEnumDescriptorProto
555
+ * @property {string} [name] Enum name
556
+ * @property {IEnumValueDescriptorProto[]} [value] Enum values
557
+ * @property {IEnumOptions} [options] Enum options
558
+ */
559
+
560
+ /**
561
+ * Properties of an EnumValueDescriptorProto message.
562
+ * @interface IEnumValueDescriptorProto
563
+ * @property {string} [name] Name
564
+ * @property {number} [number] Value
565
+ * @property {*} [options] Not supported
566
+ */
567
+
568
+ /**
569
+ * Properties of an EnumOptions message.
570
+ * @interface IEnumOptions
571
+ * @property {boolean} [allowAlias] Whether aliases are allowed
572
+ * @property {boolean} [deprecated]
573
+ */
574
+
575
+ var unnamedEnumIndex = 0;
576
+
577
+ /**
578
+ * Creates an enum from a descriptor.
579
+ *
580
+ * Warning: this is not safe to use with editions protos, since it discards relevant file context.
581
+ *
582
+ * @param {IEnumDescriptorProto|Reader|Uint8Array} descriptor Descriptor
583
+ * @param {string} [edition="proto2"] The syntax or edition to use
584
+ * @param {boolean} [nested=false] Whether or not this is a top-level object
585
+ * @returns {Enum} Enum instance
586
+ */
587
+ Enum.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {
588
+
589
+ // Decode the descriptor message if specified as a buffer:
590
+ if (typeof descriptor.length === "number")
591
+ descriptor = exports.EnumDescriptorProto.decode(descriptor);
592
+
593
+ // Construct values object
594
+ var values = {};
595
+ if (descriptor.value)
596
+ for (var i = 0; i < descriptor.value.length; ++i) {
597
+ var name = descriptor.value[i].name,
598
+ value = descriptor.value[i].number || 0;
599
+ values[name && name.length ? name : "NAME" + value] = value;
600
+ }
601
+
602
+ var enm = new Enum(
603
+ descriptor.name && descriptor.name.length ? descriptor.name : "Enum" + unnamedEnumIndex++,
604
+ values,
605
+ fromDescriptorOptions(descriptor.options, exports.EnumOptions)
606
+ );
607
+
608
+ if (!nested)
609
+ enm._edition = edition;
610
+
611
+ return enm;
612
+ };
613
+
614
+ /**
615
+ * Converts an enum to a descriptor.
616
+ * @returns {Message<IEnumDescriptorProto>} Descriptor
617
+ */
618
+ Enum.prototype.toDescriptor = function toDescriptor() {
619
+
620
+ // Values
621
+ var values = [];
622
+ for (var i = 0, ks = Object.keys(this.values); i < ks.length; ++i)
623
+ values.push(exports.EnumValueDescriptorProto.create({ name: ks[i], number: this.values[ks[i]] }));
624
+
625
+ return exports.EnumDescriptorProto.create({
626
+ name: this.name,
627
+ value: values,
628
+ options: toDescriptorOptions(this.options, exports.EnumOptions)
629
+ });
630
+ };
631
+
632
+ // --- OneOf ---
633
+
634
+ /**
635
+ * Properties of a OneofDescriptorProto message.
636
+ * @interface IOneofDescriptorProto
637
+ * @property {string} [name] Oneof name
638
+ * @property {*} [options] Not supported
639
+ */
640
+
641
+ var unnamedOneofIndex = 0;
642
+
643
+ /**
644
+ * Creates a oneof from a descriptor.
645
+ *
646
+ * Warning: this is not safe to use with editions protos, since it discards relevant file context.
647
+ *
648
+ * @param {IOneofDescriptorProto|Reader|Uint8Array} descriptor Descriptor
649
+ * @returns {OneOf} OneOf instance
650
+ */
651
+ OneOf.fromDescriptor = function fromDescriptor(descriptor) {
652
+
653
+ // Decode the descriptor message if specified as a buffer:
654
+ if (typeof descriptor.length === "number")
655
+ descriptor = exports.OneofDescriptorProto.decode(descriptor);
656
+
657
+ return new OneOf(
658
+ // unnamedOneOfIndex is global, not per type, because we have no ref to a type here
659
+ descriptor.name && descriptor.name.length ? descriptor.name : "oneof" + unnamedOneofIndex++
660
+ // fromDescriptorOptions(descriptor.options, exports.OneofOptions) - only uninterpreted_option
661
+ );
662
+ };
663
+
664
+ /**
665
+ * Converts a oneof to a descriptor.
666
+ * @returns {Message<IOneofDescriptorProto>} Descriptor
667
+ */
668
+ OneOf.prototype.toDescriptor = function toDescriptor() {
669
+ return exports.OneofDescriptorProto.create({
670
+ name: this.name
671
+ // options: toDescriptorOptions(this.options, exports.OneofOptions) - only uninterpreted_option
672
+ });
673
+ };
674
+
675
+ // --- Service ---
676
+
677
+ /**
678
+ * Properties of a ServiceDescriptorProto message.
679
+ * @interface IServiceDescriptorProto
680
+ * @property {string} [name] Service name
681
+ * @property {IMethodDescriptorProto[]} [method] Methods
682
+ * @property {IServiceOptions} [options] Options
683
+ */
684
+
685
+ /**
686
+ * Properties of a ServiceOptions message.
687
+ * @interface IServiceOptions
688
+ * @property {boolean} [deprecated]
689
+ */
690
+
691
+ var unnamedServiceIndex = 0;
692
+
693
+ /**
694
+ * Creates a service from a descriptor.
695
+ *
696
+ * Warning: this is not safe to use with editions protos, since it discards relevant file context.
697
+ *
698
+ * @param {IServiceDescriptorProto|Reader|Uint8Array} descriptor Descriptor
699
+ * @param {string} [edition="proto2"] The syntax or edition to use
700
+ * @param {boolean} [nested=false] Whether or not this is a top-level object
701
+ * @returns {Service} Service instance
702
+ */
703
+ Service.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {
704
+
705
+ // Decode the descriptor message if specified as a buffer:
706
+ if (typeof descriptor.length === "number")
707
+ descriptor = exports.ServiceDescriptorProto.decode(descriptor);
708
+
709
+ var service = new Service(descriptor.name && descriptor.name.length ? descriptor.name : "Service" + unnamedServiceIndex++, fromDescriptorOptions(descriptor.options, exports.ServiceOptions));
710
+ if (!nested)
711
+ service._edition = edition;
712
+ if (descriptor.method)
713
+ for (var i = 0; i < descriptor.method.length; ++i)
714
+ service.add(Method.fromDescriptor(descriptor.method[i]));
715
+
716
+ return service;
717
+ };
718
+
719
+ /**
720
+ * Converts a service to a descriptor.
721
+ * @returns {Message<IServiceDescriptorProto>} Descriptor
722
+ */
723
+ Service.prototype.toDescriptor = function toDescriptor() {
724
+
725
+ // Methods
726
+ var methods = [];
727
+ for (var i = 0; i < this.methodsArray.length; ++i)
728
+ methods.push(this._methodsArray[i].toDescriptor());
729
+
730
+ return exports.ServiceDescriptorProto.create({
731
+ name: this.name,
732
+ method: methods,
733
+ options: toDescriptorOptions(this.options, exports.ServiceOptions)
734
+ });
735
+ };
736
+
737
+ // --- Method ---
738
+
739
+ /**
740
+ * Properties of a MethodDescriptorProto message.
741
+ * @interface IMethodDescriptorProto
742
+ * @property {string} [name] Method name
743
+ * @property {string} [inputType] Request type name
744
+ * @property {string} [outputType] Response type name
745
+ * @property {IMethodOptions} [options] Not supported
746
+ * @property {boolean} [clientStreaming=false] Whether requests are streamed
747
+ * @property {boolean} [serverStreaming=false] Whether responses are streamed
748
+ */
749
+
750
+ /**
751
+ * Properties of a MethodOptions message.
752
+ *
753
+ * Warning: this is not safe to use with editions protos, since it discards relevant file context.
754
+ *
755
+ * @interface IMethodOptions
756
+ * @property {boolean} [deprecated]
757
+ */
758
+
759
+ var unnamedMethodIndex = 0;
760
+
761
+ /**
762
+ * Creates a method from a descriptor.
763
+ * @param {IMethodDescriptorProto|Reader|Uint8Array} descriptor Descriptor
764
+ * @returns {Method} Reflected method instance
765
+ */
766
+ Method.fromDescriptor = function fromDescriptor(descriptor) {
767
+
768
+ // Decode the descriptor message if specified as a buffer:
769
+ if (typeof descriptor.length === "number")
770
+ descriptor = exports.MethodDescriptorProto.decode(descriptor);
771
+
772
+ var inputType = descriptor.inputType,
773
+ outputType = descriptor.outputType;
774
+
775
+ if (inputType != null && inputType !== "") {
776
+ if (typeof inputType !== "string" || !typeRefRe.test(inputType))
777
+ throw Error("illegal type name: " + inputType);
778
+ }
779
+ if (outputType != null && outputType !== "") {
780
+ if (typeof outputType !== "string" || !typeRefRe.test(outputType))
781
+ throw Error("illegal type name: " + outputType);
782
+ }
783
+
784
+ return new Method(
785
+ // unnamedMethodIndex is global, not per service, because we have no ref to a service here
786
+ descriptor.name && descriptor.name.length ? descriptor.name : "Method" + unnamedMethodIndex++,
787
+ "rpc",
788
+ inputType,
789
+ outputType,
790
+ Boolean(descriptor.clientStreaming),
791
+ Boolean(descriptor.serverStreaming),
792
+ fromDescriptorOptions(descriptor.options, exports.MethodOptions)
793
+ );
794
+ };
795
+
796
+ /**
797
+ * Converts a method to a descriptor.
798
+ * @returns {Message<IMethodDescriptorProto>} Descriptor
799
+ */
800
+ Method.prototype.toDescriptor = function toDescriptor() {
801
+ return exports.MethodDescriptorProto.create({
802
+ name: this.name,
803
+ inputType: this.resolvedRequestType ? this.resolvedRequestType.fullName : this.requestType,
804
+ outputType: this.resolvedResponseType ? this.resolvedResponseType.fullName : this.responseType,
805
+ clientStreaming: this.requestStream,
806
+ serverStreaming: this.responseStream,
807
+ options: toDescriptorOptions(this.options, exports.MethodOptions)
808
+ });
809
+ };
810
+
811
+ // --- utility ---
812
+
813
+ // Converts a descriptor type to a protobuf.js basic type
814
+ function fromDescriptorType(type) {
815
+ switch (type) {
816
+ // 0 is reserved for errors
817
+ case 1: return "double";
818
+ case 2: return "float";
819
+ case 3: return "int64";
820
+ case 4: return "uint64";
821
+ case 5: return "int32";
822
+ case 6: return "fixed64";
823
+ case 7: return "fixed32";
824
+ case 8: return "bool";
825
+ case 9: return "string";
826
+ case 12: return "bytes";
827
+ case 13: return "uint32";
828
+ case 15: return "sfixed32";
829
+ case 16: return "sfixed64";
830
+ case 17: return "sint32";
831
+ case 18: return "sint64";
832
+ }
833
+ throw Error("illegal type: " + type);
834
+ }
835
+
836
+ // Tests if a descriptor type is packable
837
+ function packableDescriptorType(type) {
838
+ switch (type) {
839
+ case 1: // double
840
+ case 2: // float
841
+ case 3: // int64
842
+ case 4: // uint64
843
+ case 5: // int32
844
+ case 6: // fixed64
845
+ case 7: // fixed32
846
+ case 8: // bool
847
+ case 13: // uint32
848
+ case 14: // enum (!)
849
+ case 15: // sfixed32
850
+ case 16: // sfixed64
851
+ case 17: // sint32
852
+ case 18: // sint64
853
+ return true;
854
+ }
855
+ return false;
856
+ }
857
+
858
+ // Converts a protobuf.js basic type to a descriptor type
859
+ function toDescriptorType(type, resolvedType, delimited) {
860
+ switch (type) {
861
+ // 0 is reserved for errors
862
+ case "double": return 1;
863
+ case "float": return 2;
864
+ case "int64": return 3;
865
+ case "uint64": return 4;
866
+ case "int32": return 5;
867
+ case "fixed64": return 6;
868
+ case "fixed32": return 7;
869
+ case "bool": return 8;
870
+ case "string": return 9;
871
+ case "bytes": return 12;
872
+ case "uint32": return 13;
873
+ case "sfixed32": return 15;
874
+ case "sfixed64": return 16;
875
+ case "sint32": return 17;
876
+ case "sint64": return 18;
877
+ }
878
+ if (resolvedType instanceof Enum)
879
+ return 14;
880
+ if (resolvedType instanceof Type)
881
+ return delimited ? 10 : 11;
882
+ throw Error("illegal type: " + type);
883
+ }
884
+
885
+ function fromDescriptorOptionsRecursive(obj, type) {
886
+ var val = {};
887
+ for (var i = 0, field, key; i < type.fieldsArray.length; ++i) {
888
+ if ((key = (field = type._fieldsArray[i]).name) === "uninterpretedOption") continue;
889
+ if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;
890
+
891
+ var newKey = underScore(key);
892
+ if (field.resolvedType instanceof Type) {
893
+ val[newKey] = fromDescriptorOptionsRecursive(obj[key], field.resolvedType);
894
+ } else if(field.resolvedType instanceof Enum) {
895
+ val[newKey] = field.resolvedType.valuesById[obj[key]];
896
+ } else {
897
+ val[newKey] = obj[key];
898
+ }
899
+ }
900
+ return val;
901
+ }
902
+
903
+ // Converts descriptor options to an options object
904
+ function fromDescriptorOptions(options, type) {
905
+ if (!options)
906
+ return undefined;
907
+ return fromDescriptorOptionsRecursive(type.toObject(options), type);
908
+ }
909
+
910
+ function toDescriptorOptionsRecursive(obj, type) {
911
+ var val = {};
912
+ var keys = Object.keys(obj);
913
+ for (var i = 0; i < keys.length; ++i) {
914
+ var key = keys[i];
915
+ var newKey = $protobuf.util.camelCase(key);
916
+ if (!Object.prototype.hasOwnProperty.call(type.fields, newKey)) continue;
917
+ var field = type.fields[newKey];
918
+ if (field.resolvedType instanceof Type) {
919
+ val[newKey] = toDescriptorOptionsRecursive(obj[key], field.resolvedType);
920
+ } else {
921
+ val[newKey] = obj[key];
922
+ }
923
+ if (field.repeated && !Array.isArray(val[newKey])) {
924
+ val[newKey] = [val[newKey]];
925
+ }
926
+ }
927
+ return val;
928
+ }
929
+
930
+ // Converts an options object to descriptor options
931
+ function toDescriptorOptions(options, type) {
932
+ if (!options)
933
+ return undefined;
934
+ return type.fromObject(toDescriptorOptionsRecursive(options, type));
935
+ }
936
+
937
+ // Calculates the shortest relative path from `from` to `to`.
938
+ function shortname(from, to) {
939
+ var fromPath = from.fullName.split("."),
940
+ toPath = to.fullName.split("."),
941
+ i = 0,
942
+ j = 0,
943
+ k = toPath.length - 1;
944
+ if (!(from instanceof Root) && to instanceof Namespace)
945
+ while (i < fromPath.length && j < k && fromPath[i] === toPath[j]) {
946
+ var other = to.lookup(fromPath[i++], true);
947
+ if (other !== null && other !== to)
948
+ break;
949
+ ++j;
950
+ }
951
+ else
952
+ for (; i < fromPath.length && j < k && fromPath[i] === toPath[j]; ++i, ++j);
953
+ return toPath.slice(j).join(".");
954
+ }
955
+
956
+ // copied here from cli/targets/proto.js
957
+ function underScore(str) {
958
+ return str.substring(0,1)
959
+ + str.substring(1)
960
+ .replace(/([A-Z])(?=[a-z]|$)/g, function($0, $1) { return "_" + $1.toLowerCase(); });
961
+ }
962
+
963
+ function editionFromDescriptor(fileDescriptor) {
964
+ if (fileDescriptor.syntax === "editions") {
965
+ switch(fileDescriptor.edition) {
966
+ case exports.Edition.EDITION_2023:
967
+ return "2023";
968
+ default:
969
+ throw new Error("Unsupported edition " + fileDescriptor.edition);
970
+ }
971
+ }
972
+ if (fileDescriptor.syntax === "proto3") {
973
+ return "proto3";
974
+ }
975
+ return "proto2";
976
+ }
977
+
978
+ function editionToDescriptor(edition, fileDescriptor) {
979
+ if (!edition) return;
980
+ if (edition === "proto2" || edition === "proto3") {
981
+ fileDescriptor.syntax = edition;
982
+ } else {
983
+ fileDescriptor.syntax = "editions";
984
+ switch(edition) {
985
+ case "2023":
986
+ fileDescriptor.edition = exports.Edition.EDITION_2023;
987
+ break;
988
+ default:
989
+ throw new Error("Unsupported edition " + edition);
990
+ }
991
+ }
992
+ }
993
+
994
+ // --- exports ---
995
+
996
+ /**
997
+ * Reflected file descriptor set.
998
+ * @name FileDescriptorSet
999
+ * @type {Type}
1000
+ * @const
1001
+ * @tstype $protobuf.Type
1002
+ */
1003
+
1004
+ /**
1005
+ * Reflected file descriptor proto.
1006
+ * @name FileDescriptorProto
1007
+ * @type {Type}
1008
+ * @const
1009
+ * @tstype $protobuf.Type
1010
+ */
1011
+
1012
+ /**
1013
+ * Reflected descriptor proto.
1014
+ * @name DescriptorProto
1015
+ * @type {Type}
1016
+ * @property {Type} ExtensionRange
1017
+ * @property {Type} ReservedRange
1018
+ * @const
1019
+ * @tstype $protobuf.Type & {
1020
+ * ExtensionRange: $protobuf.Type,
1021
+ * ReservedRange: $protobuf.Type
1022
+ * }
1023
+ */
1024
+
1025
+ /**
1026
+ * Reflected field descriptor proto.
1027
+ * @name FieldDescriptorProto
1028
+ * @type {Type}
1029
+ * @property {Enum} Label
1030
+ * @property {Enum} Type
1031
+ * @const
1032
+ * @tstype $protobuf.Type & {
1033
+ * Label: $protobuf.Enum,
1034
+ * Type: $protobuf.Enum
1035
+ * }
1036
+ */
1037
+
1038
+ /**
1039
+ * Reflected oneof descriptor proto.
1040
+ * @name OneofDescriptorProto
1041
+ * @type {Type}
1042
+ * @const
1043
+ * @tstype $protobuf.Type
1044
+ */
1045
+
1046
+ /**
1047
+ * Reflected enum descriptor proto.
1048
+ * @name EnumDescriptorProto
1049
+ * @type {Type}
1050
+ * @const
1051
+ * @tstype $protobuf.Type
1052
+ */
1053
+
1054
+ /**
1055
+ * Reflected service descriptor proto.
1056
+ * @name ServiceDescriptorProto
1057
+ * @type {Type}
1058
+ * @const
1059
+ * @tstype $protobuf.Type
1060
+ */
1061
+
1062
+ /**
1063
+ * Reflected enum value descriptor proto.
1064
+ * @name EnumValueDescriptorProto
1065
+ * @type {Type}
1066
+ * @const
1067
+ * @tstype $protobuf.Type
1068
+ */
1069
+
1070
+ /**
1071
+ * Reflected method descriptor proto.
1072
+ * @name MethodDescriptorProto
1073
+ * @type {Type}
1074
+ * @const
1075
+ * @tstype $protobuf.Type
1076
+ */
1077
+
1078
+ /**
1079
+ * Reflected file options.
1080
+ * @name FileOptions
1081
+ * @type {Type}
1082
+ * @property {Enum} OptimizeMode
1083
+ * @const
1084
+ * @tstype $protobuf.Type & {
1085
+ * OptimizeMode: $protobuf.Enum
1086
+ * }
1087
+ */
1088
+
1089
+ /**
1090
+ * Reflected message options.
1091
+ * @name MessageOptions
1092
+ * @type {Type}
1093
+ * @const
1094
+ * @tstype $protobuf.Type
1095
+ */
1096
+
1097
+ /**
1098
+ * Reflected field options.
1099
+ * @name FieldOptions
1100
+ * @type {Type}
1101
+ * @property {Enum} CType
1102
+ * @property {Enum} JSType
1103
+ * @const
1104
+ * @tstype $protobuf.Type & {
1105
+ * CType: $protobuf.Enum,
1106
+ * JSType: $protobuf.Enum
1107
+ * }
1108
+ */
1109
+
1110
+ /**
1111
+ * Reflected oneof options.
1112
+ * @name OneofOptions
1113
+ * @type {Type}
1114
+ * @const
1115
+ * @tstype $protobuf.Type
1116
+ */
1117
+
1118
+ /**
1119
+ * Reflected enum options.
1120
+ * @name EnumOptions
1121
+ * @type {Type}
1122
+ * @const
1123
+ * @tstype $protobuf.Type
1124
+ */
1125
+
1126
+ /**
1127
+ * Reflected enum value options.
1128
+ * @name EnumValueOptions
1129
+ * @type {Type}
1130
+ * @const
1131
+ * @tstype $protobuf.Type
1132
+ */
1133
+
1134
+ /**
1135
+ * Reflected service options.
1136
+ * @name ServiceOptions
1137
+ * @type {Type}
1138
+ * @const
1139
+ * @tstype $protobuf.Type
1140
+ */
1141
+
1142
+ /**
1143
+ * Reflected method options.
1144
+ * @name MethodOptions
1145
+ * @type {Type}
1146
+ * @const
1147
+ * @tstype $protobuf.Type
1148
+ */
1149
+
1150
+ /**
1151
+ * Reflected uninterpretet option.
1152
+ * @name UninterpretedOption
1153
+ * @type {Type}
1154
+ * @property {Type} NamePart
1155
+ * @const
1156
+ * @tstype $protobuf.Type & {
1157
+ * NamePart: $protobuf.Type
1158
+ * }
1159
+ */
1160
+
1161
+ /**
1162
+ * Reflected source code info.
1163
+ * @name SourceCodeInfo
1164
+ * @type {Type}
1165
+ * @property {Type} Location
1166
+ * @const
1167
+ * @tstype $protobuf.Type & {
1168
+ * Location: $protobuf.Type
1169
+ * }
1170
+ */
1171
+
1172
+ /**
1173
+ * Reflected generated code info.
1174
+ * @name GeneratedCodeInfo
1175
+ * @type {Type}
1176
+ * @property {Type} Annotation
1177
+ * @const
1178
+ * @tstype $protobuf.Type & {
1179
+ * Annotation: $protobuf.Type
1180
+ * }
1181
+ */