protobufjs 8.1.6-experimental → 8.2.1

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