protobufjs 8.1.6-experimental → 8.2.0

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