@bufbuild/protobuf 2.0.0-alpha.1 → 2.0.0-alpha.3
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.
- package/README.md +1 -1
- package/dist/cjs/clone.d.ts +1 -1
- package/dist/cjs/clone.js +2 -2
- package/dist/cjs/codegenv1/boot.d.ts +1 -1
- package/dist/cjs/codegenv1/boot.js +3 -5
- package/dist/cjs/codegenv1/embed.d.ts +2 -2
- package/dist/cjs/codegenv1/embed.js +51 -46
- package/dist/cjs/codegenv1/enum.d.ts +1 -1
- package/dist/cjs/codegenv1/enum.js +2 -4
- package/dist/cjs/codegenv1/extension.d.ts +1 -1
- package/dist/cjs/codegenv1/file.d.ts +1 -1
- package/dist/cjs/codegenv1/file.js +5 -7
- package/dist/cjs/codegenv1/index.d.ts +1 -0
- package/dist/cjs/codegenv1/index.js +1 -0
- package/dist/cjs/codegenv1/message.d.ts +1 -1
- package/dist/cjs/codegenv1/restore-json-names.d.ts +3 -0
- package/dist/cjs/codegenv1/restore-json-names.js +3 -0
- package/dist/cjs/codegenv1/scalar.d.ts +5 -0
- package/dist/cjs/codegenv1/scalar.js +39 -0
- package/dist/cjs/codegenv1/service.d.ts +3 -3
- package/dist/cjs/codegenv1/symbols.d.ts +9 -0
- package/dist/cjs/codegenv1/symbols.js +9 -0
- package/dist/cjs/codegenv1/types.d.ts +59 -8
- package/dist/cjs/create.d.ts +1 -1
- package/dist/cjs/create.js +13 -23
- package/dist/cjs/{desc-types.d.ts → descriptors.d.ts} +66 -17
- package/dist/cjs/descriptors.js +53 -0
- package/dist/cjs/equals.d.ts +1 -1
- package/dist/cjs/extensions.d.ts +21 -1
- package/dist/cjs/extensions.js +42 -10
- package/dist/cjs/fields.d.ts +17 -16
- package/dist/cjs/fields.js +17 -10
- package/dist/cjs/from-binary.d.ts +2 -2
- package/dist/cjs/from-binary.js +31 -41
- package/dist/cjs/from-json.d.ts +4 -4
- package/dist/cjs/from-json.js +200 -185
- package/dist/cjs/index.d.ts +3 -2
- package/dist/cjs/index.js +5 -2
- package/dist/cjs/is-message.d.ts +1 -1
- package/dist/cjs/proto-int64.d.ts +4 -1
- package/dist/cjs/proto-int64.js +16 -6
- package/dist/cjs/reflect/error.d.ts +1 -1
- package/dist/cjs/reflect/guard.d.ts +1 -1
- package/dist/cjs/reflect/index.d.ts +0 -1
- package/dist/cjs/reflect/index.js +0 -1
- package/dist/cjs/reflect/names.d.ts +1 -13
- package/dist/cjs/reflect/names.js +2 -40
- package/dist/cjs/reflect/nested-types.d.ts +11 -1
- package/dist/cjs/reflect/nested-types.js +34 -1
- package/dist/cjs/reflect/reflect-check.d.ts +10 -1
- package/dist/cjs/reflect/reflect-check.js +126 -9
- package/dist/cjs/reflect/reflect-types.d.ts +162 -14
- package/dist/cjs/reflect/reflect.d.ts +12 -3
- package/dist/cjs/reflect/reflect.js +316 -290
- package/dist/cjs/reflect/scalar.d.ts +3 -55
- package/dist/cjs/reflect/scalar.js +26 -220
- package/dist/cjs/reflect/unsafe.d.ts +1 -1
- package/dist/cjs/reflect/unsafe.js +38 -43
- package/dist/cjs/{reflect/registry.d.ts → registry.d.ts} +2 -2
- package/dist/cjs/{reflect/registry.js → registry.js} +100 -73
- package/dist/cjs/to-binary.d.ts +1 -1
- package/dist/cjs/to-binary.js +28 -30
- package/dist/cjs/to-json.d.ts +7 -6
- package/dist/cjs/to-json.js +63 -70
- package/dist/cjs/types.d.ts +1 -1
- package/dist/cjs/wire/base64-encoding.js +4 -4
- package/dist/cjs/wire/binary-encoding.d.ts +25 -3
- package/dist/cjs/wire/binary-encoding.js +70 -18
- package/dist/cjs/wire/size-delimited.d.ts +1 -1
- package/dist/cjs/wire/text-format.d.ts +1 -2
- package/dist/cjs/wire/text-format.js +21 -19
- package/dist/cjs/wkt/any.d.ts +3 -3
- package/dist/cjs/wkt/gen/google/protobuf/any_pb.d.ts +7 -0
- package/dist/cjs/wkt/gen/google/protobuf/any_pb.js +7 -2
- package/dist/cjs/wkt/gen/google/protobuf/api_pb.d.ts +15 -0
- package/dist/cjs/wkt/gen/google/protobuf/api_pb.js +15 -6
- package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +22 -0
- package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.js +22 -9
- package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +192 -0
- package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.js +187 -84
- package/dist/cjs/wkt/gen/google/protobuf/duration_pb.d.ts +7 -0
- package/dist/cjs/wkt/gen/google/protobuf/duration_pb.js +7 -2
- package/dist/cjs/wkt/gen/google/protobuf/empty_pb.d.ts +7 -0
- package/dist/cjs/wkt/gen/google/protobuf/empty_pb.js +7 -2
- package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -0
- package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.js +7 -2
- package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.d.ts +7 -0
- package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.js +7 -2
- package/dist/cjs/wkt/gen/google/protobuf/struct_pb.d.ts +18 -0
- package/dist/cjs/wkt/gen/google/protobuf/struct_pb.js +18 -7
- package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -0
- package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.js +7 -2
- package/dist/cjs/wkt/gen/google/protobuf/type_pb.d.ts +32 -0
- package/dist/cjs/wkt/gen/google/protobuf/type_pb.js +32 -13
- package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.d.ts +39 -0
- package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.js +39 -18
- package/dist/cjs/wkt/wrappers.d.ts +1 -1
- package/dist/esm/clone.d.ts +1 -1
- package/dist/esm/clone.js +1 -1
- package/dist/esm/codegenv1/boot.d.ts +1 -1
- package/dist/esm/codegenv1/boot.js +3 -5
- package/dist/esm/codegenv1/embed.d.ts +2 -2
- package/dist/esm/codegenv1/embed.js +34 -29
- package/dist/esm/codegenv1/enum.d.ts +1 -1
- package/dist/esm/codegenv1/enum.js +2 -4
- package/dist/esm/codegenv1/extension.d.ts +1 -1
- package/dist/esm/codegenv1/file.d.ts +1 -1
- package/dist/esm/codegenv1/file.js +4 -6
- package/dist/esm/codegenv1/index.d.ts +1 -0
- package/dist/esm/codegenv1/index.js +1 -0
- package/dist/esm/codegenv1/message.d.ts +1 -1
- package/dist/esm/codegenv1/restore-json-names.d.ts +3 -0
- package/dist/esm/codegenv1/restore-json-names.js +3 -0
- package/dist/esm/codegenv1/scalar.d.ts +5 -0
- package/dist/esm/codegenv1/scalar.js +35 -0
- package/dist/esm/codegenv1/service.d.ts +3 -3
- package/dist/esm/codegenv1/symbols.d.ts +9 -0
- package/dist/esm/codegenv1/symbols.js +9 -0
- package/dist/esm/codegenv1/types.d.ts +59 -8
- package/dist/esm/create.d.ts +1 -1
- package/dist/esm/create.js +11 -21
- package/dist/esm/{desc-types.d.ts → descriptors.d.ts} +66 -17
- package/dist/esm/descriptors.js +50 -0
- package/dist/esm/equals.d.ts +1 -1
- package/dist/esm/extensions.d.ts +21 -1
- package/dist/esm/extensions.js +39 -9
- package/dist/esm/fields.d.ts +17 -16
- package/dist/esm/fields.js +17 -10
- package/dist/esm/from-binary.d.ts +2 -2
- package/dist/esm/from-binary.js +13 -23
- package/dist/esm/from-json.d.ts +4 -4
- package/dist/esm/from-json.js +193 -178
- package/dist/esm/index.d.ts +3 -2
- package/dist/esm/index.js +3 -2
- package/dist/esm/is-message.d.ts +1 -1
- package/dist/esm/proto-int64.d.ts +4 -1
- package/dist/esm/proto-int64.js +16 -6
- package/dist/esm/reflect/error.d.ts +1 -1
- package/dist/esm/reflect/guard.d.ts +1 -1
- package/dist/esm/reflect/index.d.ts +0 -1
- package/dist/esm/reflect/index.js +0 -1
- package/dist/esm/reflect/names.d.ts +1 -13
- package/dist/esm/reflect/names.js +1 -38
- package/dist/esm/reflect/nested-types.d.ts +11 -1
- package/dist/esm/reflect/nested-types.js +32 -0
- package/dist/esm/reflect/reflect-check.d.ts +10 -1
- package/dist/esm/reflect/reflect-check.js +119 -2
- package/dist/esm/reflect/reflect-types.d.ts +162 -14
- package/dist/esm/reflect/reflect-types.js +1 -0
- package/dist/esm/reflect/reflect.d.ts +12 -3
- package/dist/esm/reflect/reflect.js +305 -279
- package/dist/esm/reflect/scalar.d.ts +3 -55
- package/dist/esm/reflect/scalar.js +14 -205
- package/dist/esm/reflect/unsafe.d.ts +1 -1
- package/dist/esm/reflect/unsafe.js +38 -43
- package/dist/esm/{reflect/registry.d.ts → registry.d.ts} +2 -2
- package/dist/esm/{reflect/registry.js → registry.js} +90 -63
- package/dist/esm/to-binary.d.ts +1 -1
- package/dist/esm/to-binary.js +2 -4
- package/dist/esm/to-json.d.ts +7 -6
- package/dist/esm/to-json.js +48 -55
- package/dist/esm/types.d.ts +1 -1
- package/dist/esm/wire/base64-encoding.js +4 -4
- package/dist/esm/wire/binary-encoding.d.ts +25 -3
- package/dist/esm/wire/binary-encoding.js +63 -11
- package/dist/esm/wire/size-delimited.d.ts +1 -1
- package/dist/esm/wire/text-format.d.ts +1 -2
- package/dist/esm/wire/text-format.js +5 -3
- package/dist/esm/wkt/any.d.ts +3 -3
- package/dist/esm/wkt/gen/google/protobuf/any_pb.d.ts +7 -0
- package/dist/esm/wkt/gen/google/protobuf/any_pb.js +7 -2
- package/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +15 -0
- package/dist/esm/wkt/gen/google/protobuf/api_pb.js +15 -6
- package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +22 -0
- package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.js +22 -9
- package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +192 -0
- package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +187 -84
- package/dist/esm/wkt/gen/google/protobuf/duration_pb.d.ts +7 -0
- package/dist/esm/wkt/gen/google/protobuf/duration_pb.js +7 -2
- package/dist/esm/wkt/gen/google/protobuf/empty_pb.d.ts +7 -0
- package/dist/esm/wkt/gen/google/protobuf/empty_pb.js +7 -2
- package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -0
- package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.js +7 -2
- package/dist/esm/wkt/gen/google/protobuf/source_context_pb.d.ts +7 -0
- package/dist/esm/wkt/gen/google/protobuf/source_context_pb.js +7 -2
- package/dist/esm/wkt/gen/google/protobuf/struct_pb.d.ts +18 -0
- package/dist/esm/wkt/gen/google/protobuf/struct_pb.js +18 -7
- package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -0
- package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js +7 -2
- package/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +32 -0
- package/dist/esm/wkt/gen/google/protobuf/type_pb.js +32 -13
- package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.d.ts +39 -0
- package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.js +39 -18
- package/dist/esm/wkt/wrappers.d.ts +1 -1
- package/package.json +2 -2
- package/dist/cjs/desc-types.js +0 -15
- package/dist/cjs/reflect/assert.d.ts +0 -16
- package/dist/cjs/reflect/assert.js +0 -59
- package/dist/esm/desc-types.js +0 -14
- package/dist/esm/reflect/assert.d.ts +0 -16
- package/dist/esm/reflect/assert.js +0 -52
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
// limitations under the License.
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.maximumEdition = exports.minimumEdition = exports.createFileRegistry = exports.createRegistry = void 0;
|
|
17
|
-
const
|
|
18
|
-
const text_format_js_1 = require("
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const
|
|
17
|
+
const descriptors_js_1 = require("./descriptors.js");
|
|
18
|
+
const text_format_js_1 = require("./wire/text-format.js");
|
|
19
|
+
const nested_types_js_1 = require("./reflect/nested-types.js");
|
|
20
|
+
const unsafe_js_1 = require("./reflect/unsafe.js");
|
|
21
|
+
const names_js_1 = require("./reflect/names.js");
|
|
22
22
|
/**
|
|
23
23
|
* Create a registry from the given inputs.
|
|
24
24
|
*
|
|
@@ -205,8 +205,6 @@ const TYPE_BYTES = 12;
|
|
|
205
205
|
const TYPE_ENUM = 14;
|
|
206
206
|
// bootstrap-inject google.protobuf.FieldDescriptorProto.Label.LABEL_REPEATED: const $name: FieldDescriptorProto_Label.$localName = $number;
|
|
207
207
|
const LABEL_REPEATED = 3;
|
|
208
|
-
// bootstrap-inject google.protobuf.FieldDescriptorProto.Label.LABEL_OPTIONAL: const $name: FieldDescriptorProto_Label.$localName = $number;
|
|
209
|
-
const LABEL_OPTIONAL = 1;
|
|
210
208
|
// bootstrap-inject google.protobuf.FieldDescriptorProto.Label.LABEL_REQUIRED: const $name: FieldDescriptorProto_Label.$localName = $number;
|
|
211
209
|
const LABEL_REQUIRED = 2;
|
|
212
210
|
// bootstrap-inject google.protobuf.FieldOptions.JSType.JS_STRING: const $name: FieldOptions_JSType.$localName = $number;
|
|
@@ -215,6 +213,8 @@ const JS_STRING = 1;
|
|
|
215
213
|
const IDEMPOTENCY_UNKNOWN = 0;
|
|
216
214
|
// bootstrap-inject google.protobuf.FeatureSet.FieldPresence.EXPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;
|
|
217
215
|
const EXPLICIT = 1;
|
|
216
|
+
// bootstrap-inject google.protobuf.FeatureSet.FieldPresence.IMPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;
|
|
217
|
+
const IMPLICIT = 2;
|
|
218
218
|
// bootstrap-inject google.protobuf.FeatureSet.FieldPresence.LEGACY_REQUIRED: const $name: FeatureSet_FieldPresence.$localName = $number;
|
|
219
219
|
const LEGACY_REQUIRED = 3;
|
|
220
220
|
// bootstrap-inject google.protobuf.FeatureSet.RepeatedFieldEncoding.PACKED: const $name: FeatureSet_RepeatedFieldEncoding.$localName = $number;
|
|
@@ -225,7 +225,7 @@ const DELIMITED = 2;
|
|
|
225
225
|
const OPEN = 1;
|
|
226
226
|
// prettier-ignore
|
|
227
227
|
// bootstrap-inject defaults: EDITION_PROTO2 to EDITION_2023: export const minimumEdition: SupportedEdition = $minimumEdition, maximumEdition: SupportedEdition = $maximumEdition;
|
|
228
|
-
// generated from protoc v27.0
|
|
228
|
+
// generated from protoc v27.0
|
|
229
229
|
exports.minimumEdition = 998, exports.maximumEdition = 1000;
|
|
230
230
|
const featureDefaults = {
|
|
231
231
|
// EDITION_PROTO2
|
|
@@ -266,7 +266,7 @@ function addFile(proto, reg) {
|
|
|
266
266
|
proto,
|
|
267
267
|
deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,
|
|
268
268
|
edition: getFileEdition(proto),
|
|
269
|
-
name: proto.name.replace(/\.proto
|
|
269
|
+
name: proto.name.replace(/\.proto$/, ""),
|
|
270
270
|
dependencies: findFileDependencies(proto, reg),
|
|
271
271
|
enums: [],
|
|
272
272
|
messages: [],
|
|
@@ -274,7 +274,7 @@ function addFile(proto, reg) {
|
|
|
274
274
|
services: [],
|
|
275
275
|
toString() {
|
|
276
276
|
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions -- we asserted above
|
|
277
|
-
return `file ${
|
|
277
|
+
return `file ${proto.name}`;
|
|
278
278
|
},
|
|
279
279
|
};
|
|
280
280
|
const mapEntriesStore = new Map();
|
|
@@ -284,7 +284,7 @@ function addFile(proto, reg) {
|
|
|
284
284
|
},
|
|
285
285
|
add(desc) {
|
|
286
286
|
var _a;
|
|
287
|
-
|
|
287
|
+
assert(((_a = desc.proto.options) === null || _a === void 0 ? void 0 : _a.mapEntry) === true);
|
|
288
288
|
mapEntriesStore.set(desc.typeName, desc);
|
|
289
289
|
},
|
|
290
290
|
};
|
|
@@ -345,6 +345,7 @@ function addFields(message, reg, mapEntries) {
|
|
|
345
345
|
const oneof = findOneof(proto, allOneofs);
|
|
346
346
|
const field = newField(proto, message, reg, oneof, mapEntries);
|
|
347
347
|
message.fields.push(field);
|
|
348
|
+
message.field[field.localName] = field;
|
|
348
349
|
if (oneof === undefined) {
|
|
349
350
|
message.members.push(field);
|
|
350
351
|
}
|
|
@@ -369,6 +370,7 @@ function addFields(message, reg, mapEntries) {
|
|
|
369
370
|
*/
|
|
370
371
|
function addEnum(proto, file, parent, reg) {
|
|
371
372
|
var _a, _b, _c;
|
|
373
|
+
const sharedPrefix = findEnumSharedPrefix(proto.name, proto.value);
|
|
372
374
|
const desc = {
|
|
373
375
|
kind: "enum",
|
|
374
376
|
proto,
|
|
@@ -379,7 +381,7 @@ function addEnum(proto, file, parent, reg) {
|
|
|
379
381
|
name: proto.name,
|
|
380
382
|
typeName: makeTypeName(proto, parent, file),
|
|
381
383
|
values: [],
|
|
382
|
-
sharedPrefix
|
|
384
|
+
sharedPrefix,
|
|
383
385
|
toString() {
|
|
384
386
|
return `enum ${this.typeName}`;
|
|
385
387
|
},
|
|
@@ -388,12 +390,14 @@ function addEnum(proto, file, parent, reg) {
|
|
|
388
390
|
reg.add(desc);
|
|
389
391
|
proto.value.forEach((proto) => {
|
|
390
392
|
var _a, _b;
|
|
393
|
+
const name = proto.name;
|
|
391
394
|
desc.values.push({
|
|
392
395
|
kind: "enum_value",
|
|
393
396
|
proto,
|
|
394
397
|
deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,
|
|
395
398
|
parent: desc,
|
|
396
399
|
name: proto.name,
|
|
400
|
+
localName: (0, names_js_1.safeObjectProperty)(sharedPrefix == undefined ? name : name.substring(sharedPrefix.length)),
|
|
397
401
|
number: proto.number,
|
|
398
402
|
toString() {
|
|
399
403
|
return `enum value ${desc.typeName}.${this.name}`;
|
|
@@ -417,6 +421,7 @@ function addMessage(proto, file, parent, reg, mapEntries) {
|
|
|
417
421
|
name: proto.name,
|
|
418
422
|
typeName: makeTypeName(proto, parent, file),
|
|
419
423
|
fields: [],
|
|
424
|
+
field: {},
|
|
420
425
|
oneofs: [],
|
|
421
426
|
members: [],
|
|
422
427
|
nestedEnums: [],
|
|
@@ -454,6 +459,7 @@ function addService(proto, file, reg) {
|
|
|
454
459
|
name: proto.name,
|
|
455
460
|
typeName: makeTypeName(proto, undefined, file),
|
|
456
461
|
methods: [],
|
|
462
|
+
method: {},
|
|
457
463
|
toString() {
|
|
458
464
|
return `service ${this.typeName}`;
|
|
459
465
|
},
|
|
@@ -461,7 +467,9 @@ function addService(proto, file, reg) {
|
|
|
461
467
|
file.services.push(desc);
|
|
462
468
|
reg.add(desc);
|
|
463
469
|
for (const methodProto of proto.method) {
|
|
464
|
-
|
|
470
|
+
const method = newMethod(methodProto, desc, reg);
|
|
471
|
+
desc.methods.push(method);
|
|
472
|
+
desc.method[method.localName] = method;
|
|
465
473
|
}
|
|
466
474
|
}
|
|
467
475
|
/**
|
|
@@ -484,8 +492,8 @@ function newMethod(proto, parent, reg) {
|
|
|
484
492
|
}
|
|
485
493
|
const input = reg.getMessage(trimLeadingDot(proto.inputType));
|
|
486
494
|
const output = reg.getMessage(trimLeadingDot(proto.outputType));
|
|
487
|
-
|
|
488
|
-
|
|
495
|
+
assert(input, `invalid MethodDescriptorProto: input_type ${proto.inputType} not found`);
|
|
496
|
+
assert(output, `invalid MethodDescriptorProto: output_type ${proto.inputType} not found`);
|
|
489
497
|
const name = proto.name;
|
|
490
498
|
return {
|
|
491
499
|
kind: "rpc",
|
|
@@ -493,6 +501,9 @@ function newMethod(proto, parent, reg) {
|
|
|
493
501
|
deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,
|
|
494
502
|
parent,
|
|
495
503
|
name,
|
|
504
|
+
localName: (0, names_js_1.safeObjectProperty)(name.length
|
|
505
|
+
? (0, names_js_1.safeObjectProperty)(name[0].toLowerCase() + name.substring(1))
|
|
506
|
+
: name),
|
|
496
507
|
methodKind,
|
|
497
508
|
input,
|
|
498
509
|
output,
|
|
@@ -513,6 +524,7 @@ function newOneof(proto, parent) {
|
|
|
513
524
|
parent,
|
|
514
525
|
fields: [],
|
|
515
526
|
name: proto.name,
|
|
527
|
+
localName: (0, names_js_1.safeObjectProperty)((0, names_js_1.protoCamelCase)(proto.name)),
|
|
516
528
|
toString() {
|
|
517
529
|
return `oneof ${parent.typeName}.${this.name}`;
|
|
518
530
|
},
|
|
@@ -520,7 +532,9 @@ function newOneof(proto, parent) {
|
|
|
520
532
|
}
|
|
521
533
|
function newField(proto, parentOrFile, reg, oneof, mapEntries) {
|
|
522
534
|
var _a, _b, _c;
|
|
535
|
+
const isExtension = mapEntries === undefined;
|
|
523
536
|
const field = {
|
|
537
|
+
kind: "field",
|
|
524
538
|
proto,
|
|
525
539
|
deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,
|
|
526
540
|
name: proto.name,
|
|
@@ -528,8 +542,16 @@ function newField(proto, parentOrFile, reg, oneof, mapEntries) {
|
|
|
528
542
|
scalar: undefined,
|
|
529
543
|
message: undefined,
|
|
530
544
|
enum: undefined,
|
|
545
|
+
presence: getFieldPresence(proto, oneof, isExtension, parentOrFile),
|
|
546
|
+
listKind: undefined,
|
|
547
|
+
mapKind: undefined,
|
|
548
|
+
mapKey: undefined,
|
|
549
|
+
delimitedEncoding: undefined,
|
|
550
|
+
packed: undefined,
|
|
551
|
+
longAsString: false,
|
|
552
|
+
getDefaultValue: undefined,
|
|
531
553
|
};
|
|
532
|
-
if (
|
|
554
|
+
if (isExtension) {
|
|
533
555
|
// extension field
|
|
534
556
|
const file = parentOrFile.kind == "file" ? parentOrFile : parentOrFile.file;
|
|
535
557
|
const parent = parentOrFile.kind == "file" ? undefined : parentOrFile;
|
|
@@ -542,16 +564,18 @@ function newField(proto, parentOrFile, reg, oneof, mapEntries) {
|
|
|
542
564
|
field.jsonName = `[${typeName}]`; // option json_name is not allowed on extension fields
|
|
543
565
|
field.toString = () => `extension ${typeName}`;
|
|
544
566
|
const extendee = reg.getMessage(trimLeadingDot(proto.extendee));
|
|
545
|
-
|
|
567
|
+
assert(extendee, `invalid FieldDescriptorProto: extendee ${proto.extendee} not found`);
|
|
546
568
|
field.extendee = extendee;
|
|
547
569
|
}
|
|
548
570
|
else {
|
|
549
571
|
// regular field
|
|
550
572
|
const parent = parentOrFile;
|
|
551
|
-
|
|
552
|
-
field.kind = "field";
|
|
573
|
+
assert(parent.kind == "message");
|
|
553
574
|
field.parent = parent;
|
|
554
575
|
field.oneof = oneof;
|
|
576
|
+
field.localName = oneof
|
|
577
|
+
? (0, names_js_1.protoCamelCase)(proto.name)
|
|
578
|
+
: (0, names_js_1.safeObjectProperty)((0, names_js_1.protoCamelCase)(proto.name));
|
|
555
579
|
field.jsonName = proto.jsonName;
|
|
556
580
|
field.toString = () => `field ${parent.typeName}.${proto.name}`;
|
|
557
581
|
}
|
|
@@ -566,21 +590,13 @@ function newField(proto, parentOrFile, reg, oneof, mapEntries) {
|
|
|
566
590
|
if (mapEntry) {
|
|
567
591
|
// map field
|
|
568
592
|
field.fieldKind = "map";
|
|
569
|
-
const
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
keyField.scalar != scalar_js_1.ScalarType.FLOAT &&
|
|
574
|
-
keyField.scalar != scalar_js_1.ScalarType.DOUBLE);
|
|
575
|
-
const valueField = mapEntry.fields.find((f) => f.proto.number === 2);
|
|
576
|
-
(0, assert_js_1.assert)(valueField);
|
|
577
|
-
(0, assert_js_1.assert)(valueField.fieldKind != "list" && valueField.fieldKind != "map");
|
|
578
|
-
field.mapKey = keyField.scalar;
|
|
579
|
-
field.mapKind = valueField.fieldKind;
|
|
580
|
-
field.message = valueField.message;
|
|
593
|
+
const { key, value } = findMapEntryFields(mapEntry);
|
|
594
|
+
field.mapKey = key.scalar;
|
|
595
|
+
field.mapKind = value.fieldKind;
|
|
596
|
+
field.message = value.message;
|
|
581
597
|
field.delimitedEncoding = false; // map fields are always LENGTH_PREFIXED
|
|
582
|
-
field.enum =
|
|
583
|
-
field.scalar =
|
|
598
|
+
field.enum = value.enum;
|
|
599
|
+
field.scalar = value.scalar;
|
|
584
600
|
return field;
|
|
585
601
|
}
|
|
586
602
|
// list field
|
|
@@ -590,19 +606,18 @@ function newField(proto, parentOrFile, reg, oneof, mapEntries) {
|
|
|
590
606
|
case TYPE_GROUP:
|
|
591
607
|
field.listKind = "message";
|
|
592
608
|
field.message = reg.getMessage(trimLeadingDot(proto.typeName));
|
|
593
|
-
|
|
609
|
+
assert(field.message);
|
|
594
610
|
field.delimitedEncoding = isDelimitedEncoding(proto, parentOrFile);
|
|
595
611
|
break;
|
|
596
612
|
case TYPE_ENUM:
|
|
597
613
|
field.listKind = "enum";
|
|
598
614
|
field.enum = reg.getEnum(trimLeadingDot(proto.typeName));
|
|
599
|
-
|
|
615
|
+
assert(field.enum);
|
|
600
616
|
break;
|
|
601
617
|
default:
|
|
602
618
|
field.listKind = "scalar";
|
|
603
619
|
field.scalar = type;
|
|
604
|
-
field.
|
|
605
|
-
jstype == JS_STRING ? scalar_js_1.LongType.STRING : scalar_js_1.LongType.BIGINT;
|
|
620
|
+
field.longAsString = jstype == JS_STRING;
|
|
606
621
|
break;
|
|
607
622
|
}
|
|
608
623
|
field.packed = isPackedField(proto, parentOrFile);
|
|
@@ -614,13 +629,13 @@ function newField(proto, parentOrFile, reg, oneof, mapEntries) {
|
|
|
614
629
|
case TYPE_GROUP:
|
|
615
630
|
field.fieldKind = "message";
|
|
616
631
|
field.message = reg.getMessage(trimLeadingDot(proto.typeName));
|
|
617
|
-
|
|
632
|
+
assert(field.message, `invalid FieldDescriptorProto: type_name ${proto.typeName} not found`);
|
|
618
633
|
field.delimitedEncoding = isDelimitedEncoding(proto, parentOrFile);
|
|
619
634
|
field.getDefaultValue = () => undefined;
|
|
620
635
|
break;
|
|
621
636
|
case TYPE_ENUM: {
|
|
622
637
|
const enumeration = reg.getEnum(trimLeadingDot(proto.typeName));
|
|
623
|
-
|
|
638
|
+
assert(enumeration !== undefined, `invalid FieldDescriptorProto: type_name ${proto.typeName} not found`);
|
|
624
639
|
field.fieldKind = "enum";
|
|
625
640
|
field.enum = reg.getEnum(trimLeadingDot(proto.typeName));
|
|
626
641
|
field.getDefaultValue = () => {
|
|
@@ -633,7 +648,7 @@ function newField(proto, parentOrFile, reg, oneof, mapEntries) {
|
|
|
633
648
|
default: {
|
|
634
649
|
field.fieldKind = "scalar";
|
|
635
650
|
field.scalar = type;
|
|
636
|
-
field.
|
|
651
|
+
field.longAsString = jstype == JS_STRING;
|
|
637
652
|
field.getDefaultValue = () => {
|
|
638
653
|
return (0, unsafe_js_1.unsafeIsSetExplicit)(proto, "defaultValue")
|
|
639
654
|
? (0, text_format_js_1.parseTextFormatScalarValue)(type, proto.defaultValue)
|
|
@@ -642,8 +657,6 @@ function newField(proto, parentOrFile, reg, oneof, mapEntries) {
|
|
|
642
657
|
break;
|
|
643
658
|
}
|
|
644
659
|
}
|
|
645
|
-
field.presence = getFieldPresence(proto, oneof, parentOrFile);
|
|
646
|
-
field.optional = isOptionalField(field);
|
|
647
660
|
return field;
|
|
648
661
|
}
|
|
649
662
|
/**
|
|
@@ -682,13 +695,13 @@ function findFileDependencies(proto, reg) {
|
|
|
682
695
|
* Finds a prefix shared by enum values, for example `my_enum_` for
|
|
683
696
|
* `enum MyEnum {MY_ENUM_A=0; MY_ENUM_B=1;}`.
|
|
684
697
|
*/
|
|
685
|
-
function findEnumSharedPrefix(enumName,
|
|
698
|
+
function findEnumSharedPrefix(enumName, values) {
|
|
686
699
|
const prefix = camelToSnakeCase(enumName) + "_";
|
|
687
|
-
for (const
|
|
688
|
-
if (!name.toLowerCase().startsWith(prefix)) {
|
|
700
|
+
for (const value of values) {
|
|
701
|
+
if (!value.name.toLowerCase().startsWith(prefix)) {
|
|
689
702
|
return undefined;
|
|
690
703
|
}
|
|
691
|
-
const shortName = name.substring(prefix.length);
|
|
704
|
+
const shortName = value.name.substring(prefix.length);
|
|
692
705
|
if (shortName.length == 0) {
|
|
693
706
|
return undefined;
|
|
694
707
|
}
|
|
@@ -753,46 +766,35 @@ function findOneof(proto, allOneofs) {
|
|
|
753
766
|
return undefined;
|
|
754
767
|
}
|
|
755
768
|
const oneof = allOneofs[proto.oneofIndex];
|
|
756
|
-
|
|
769
|
+
assert(oneof, `invalid FieldDescriptorProto: oneof #${proto.oneofIndex} for field #${proto.number} not found`);
|
|
757
770
|
return oneof;
|
|
758
771
|
}
|
|
759
772
|
/**
|
|
760
773
|
* Presence of the field.
|
|
761
774
|
* See https://protobuf.dev/programming-guides/field_presence/
|
|
762
775
|
*/
|
|
763
|
-
function getFieldPresence(proto, oneof, parent) {
|
|
776
|
+
function getFieldPresence(proto, oneof, isExtension, parent) {
|
|
764
777
|
if (proto.label == LABEL_REQUIRED) {
|
|
765
778
|
// proto2 required is LEGACY_REQUIRED
|
|
766
779
|
return LEGACY_REQUIRED;
|
|
767
780
|
}
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
if (oneof != undefined || proto.proto3Optional) {
|
|
772
|
-
return EXPLICIT;
|
|
773
|
-
}
|
|
774
|
-
// proto3 singular message is explicit
|
|
775
|
-
const singularMessage = proto.label != LABEL_REPEATED && proto.type == TYPE_MESSAGE;
|
|
776
|
-
if (singularMessage) {
|
|
777
|
-
return EXPLICIT;
|
|
778
|
-
}
|
|
781
|
+
if (proto.label == LABEL_REPEATED) {
|
|
782
|
+
// repeated fields (including maps) do not track presence
|
|
783
|
+
return IMPLICIT;
|
|
779
784
|
}
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
/**
|
|
784
|
-
* Did the user use the `optional` keyword?
|
|
785
|
-
*/
|
|
786
|
-
function isOptionalField(field) {
|
|
787
|
-
const edition = (field.kind == "extension" ? field.file : field.parent.file)
|
|
788
|
-
.edition;
|
|
789
|
-
if (edition == EDITION_PROTO2) {
|
|
790
|
-
return !field.oneof && field.proto.label == LABEL_OPTIONAL;
|
|
785
|
+
if (!!oneof || proto.proto3Optional) {
|
|
786
|
+
// oneof is always explicit
|
|
787
|
+
return EXPLICIT;
|
|
791
788
|
}
|
|
792
|
-
if (
|
|
793
|
-
|
|
789
|
+
if (proto.type == TYPE_MESSAGE) {
|
|
790
|
+
// singular message field cannot be implicit
|
|
791
|
+
return EXPLICIT;
|
|
794
792
|
}
|
|
795
|
-
|
|
793
|
+
if (isExtension) {
|
|
794
|
+
// extensions always track presence
|
|
795
|
+
return EXPLICIT;
|
|
796
|
+
}
|
|
797
|
+
return resolveFeature("fieldPresence", { proto, parent });
|
|
796
798
|
}
|
|
797
799
|
/**
|
|
798
800
|
* Pack this repeated field?
|
|
@@ -821,6 +823,22 @@ function isPackedField(proto, parent) {
|
|
|
821
823
|
parent,
|
|
822
824
|
}));
|
|
823
825
|
}
|
|
826
|
+
/**
|
|
827
|
+
* Find the key and value fields of a synthetic map entry message.
|
|
828
|
+
*/
|
|
829
|
+
function findMapEntryFields(mapEntry) {
|
|
830
|
+
const key = mapEntry.fields.find((f) => f.number === 1);
|
|
831
|
+
const value = mapEntry.fields.find((f) => f.number === 2);
|
|
832
|
+
assert(key &&
|
|
833
|
+
key.fieldKind == "scalar" &&
|
|
834
|
+
key.scalar != descriptors_js_1.ScalarType.BYTES &&
|
|
835
|
+
key.scalar != descriptors_js_1.ScalarType.FLOAT &&
|
|
836
|
+
key.scalar != descriptors_js_1.ScalarType.DOUBLE &&
|
|
837
|
+
value &&
|
|
838
|
+
value.fieldKind != "list" &&
|
|
839
|
+
value.fieldKind != "map");
|
|
840
|
+
return { key, value };
|
|
841
|
+
}
|
|
824
842
|
/**
|
|
825
843
|
* Enumerations can be open or closed.
|
|
826
844
|
* See https://protobuf.dev/programming-guides/enum/
|
|
@@ -868,3 +886,12 @@ function resolveFeature(name, ref) {
|
|
|
868
886
|
}
|
|
869
887
|
return resolveFeature(name, ref.parent);
|
|
870
888
|
}
|
|
889
|
+
/**
|
|
890
|
+
* Assert that condition is truthy or throw error (with message)
|
|
891
|
+
*/
|
|
892
|
+
function assert(condition, msg) {
|
|
893
|
+
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions -- we want the implicit conversion to boolean
|
|
894
|
+
if (!condition) {
|
|
895
|
+
throw new Error(msg);
|
|
896
|
+
}
|
|
897
|
+
}
|
package/dist/cjs/to-binary.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { MessageShape } from "./types.js";
|
|
2
2
|
import { BinaryWriter } from "./wire/binary-encoding.js";
|
|
3
|
-
import type
|
|
3
|
+
import { type DescField, type DescMessage } from "./descriptors.js";
|
|
4
4
|
import type { ReflectMessage } from "./reflect/index.js";
|
|
5
5
|
/**
|
|
6
6
|
* Options for serializing to binary data.
|
package/dist/cjs/to-binary.js
CHANGED
|
@@ -16,7 +16,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
16
16
|
exports.writeField = exports.toBinary = void 0;
|
|
17
17
|
const reflect_js_1 = require("./reflect/reflect.js");
|
|
18
18
|
const binary_encoding_js_1 = require("./wire/binary-encoding.js");
|
|
19
|
-
const
|
|
19
|
+
const descriptors_js_1 = require("./descriptors.js");
|
|
20
20
|
// bootstrap-inject google.protobuf.FeatureSet.FieldPresence.LEGACY_REQUIRED: const $name: FeatureSet_FieldPresence.$localName = $number;
|
|
21
21
|
const LEGACY_REQUIRED = 3;
|
|
22
22
|
// Default options for serializing binary data.
|
|
@@ -34,9 +34,7 @@ function writeFields(writer, opts, msg) {
|
|
|
34
34
|
var _a;
|
|
35
35
|
for (const f of msg.sortedFields) {
|
|
36
36
|
if (!msg.isSet(f)) {
|
|
37
|
-
if (f.
|
|
38
|
-
f.fieldKind != "list" &&
|
|
39
|
-
f.presence == LEGACY_REQUIRED) {
|
|
37
|
+
if (f.presence == LEGACY_REQUIRED) {
|
|
40
38
|
throw new Error(`cannot encode field ${msg.desc.typeName}.${f.name} to binary: required field not set`);
|
|
41
39
|
}
|
|
42
40
|
continue;
|
|
@@ -58,7 +56,7 @@ function writeField(writer, opts, msg, field) {
|
|
|
58
56
|
switch (field.fieldKind) {
|
|
59
57
|
case "scalar":
|
|
60
58
|
case "enum":
|
|
61
|
-
writeScalar(writer, (_a = field.scalar) !== null && _a !== void 0 ? _a :
|
|
59
|
+
writeScalar(writer, (_a = field.scalar) !== null && _a !== void 0 ? _a : descriptors_js_1.ScalarType.INT32, field.number, msg.get(field));
|
|
62
60
|
break;
|
|
63
61
|
case "list":
|
|
64
62
|
writeListField(writer, opts, field, msg.get(field));
|
|
@@ -93,7 +91,7 @@ function writeListField(writer, opts, field, list) {
|
|
|
93
91
|
}
|
|
94
92
|
return;
|
|
95
93
|
}
|
|
96
|
-
const scalarType = (_a = field.scalar) !== null && _a !== void 0 ? _a :
|
|
94
|
+
const scalarType = (_a = field.scalar) !== null && _a !== void 0 ? _a : descriptors_js_1.ScalarType.INT32;
|
|
97
95
|
if (field.packed) {
|
|
98
96
|
if (!list.size) {
|
|
99
97
|
return;
|
|
@@ -118,7 +116,7 @@ function writeMapEntry(writer, opts, field, key, value) {
|
|
|
118
116
|
switch (field.mapKind) {
|
|
119
117
|
case "scalar":
|
|
120
118
|
case "enum":
|
|
121
|
-
writeScalar(writer, (_a = field.scalar) !== null && _a !== void 0 ? _a :
|
|
119
|
+
writeScalar(writer, (_a = field.scalar) !== null && _a !== void 0 ? _a : descriptors_js_1.ScalarType.INT32, 2, value);
|
|
122
120
|
break;
|
|
123
121
|
case "message":
|
|
124
122
|
writeFields(writer.tag(2, binary_encoding_js_1.WireType.LengthDelimited).fork(), opts, value).join();
|
|
@@ -128,65 +126,65 @@ function writeMapEntry(writer, opts, field, key, value) {
|
|
|
128
126
|
}
|
|
129
127
|
function writeScalarValue(writer, type, value) {
|
|
130
128
|
switch (type) {
|
|
131
|
-
case
|
|
129
|
+
case descriptors_js_1.ScalarType.STRING:
|
|
132
130
|
writer.string(value);
|
|
133
131
|
break;
|
|
134
|
-
case
|
|
132
|
+
case descriptors_js_1.ScalarType.BOOL:
|
|
135
133
|
writer.bool(value);
|
|
136
134
|
break;
|
|
137
|
-
case
|
|
135
|
+
case descriptors_js_1.ScalarType.DOUBLE:
|
|
138
136
|
writer.double(value);
|
|
139
137
|
break;
|
|
140
|
-
case
|
|
138
|
+
case descriptors_js_1.ScalarType.FLOAT:
|
|
141
139
|
writer.float(value);
|
|
142
140
|
break;
|
|
143
|
-
case
|
|
141
|
+
case descriptors_js_1.ScalarType.INT32:
|
|
144
142
|
writer.int32(value);
|
|
145
143
|
break;
|
|
146
|
-
case
|
|
144
|
+
case descriptors_js_1.ScalarType.INT64:
|
|
147
145
|
writer.int64(value);
|
|
148
146
|
break;
|
|
149
|
-
case
|
|
147
|
+
case descriptors_js_1.ScalarType.UINT64:
|
|
150
148
|
writer.uint64(value);
|
|
151
149
|
break;
|
|
152
|
-
case
|
|
150
|
+
case descriptors_js_1.ScalarType.FIXED64:
|
|
153
151
|
writer.fixed64(value);
|
|
154
152
|
break;
|
|
155
|
-
case
|
|
153
|
+
case descriptors_js_1.ScalarType.BYTES:
|
|
156
154
|
writer.bytes(value);
|
|
157
155
|
break;
|
|
158
|
-
case
|
|
156
|
+
case descriptors_js_1.ScalarType.FIXED32:
|
|
159
157
|
writer.fixed32(value);
|
|
160
158
|
break;
|
|
161
|
-
case
|
|
159
|
+
case descriptors_js_1.ScalarType.SFIXED32:
|
|
162
160
|
writer.sfixed32(value);
|
|
163
161
|
break;
|
|
164
|
-
case
|
|
162
|
+
case descriptors_js_1.ScalarType.SFIXED64:
|
|
165
163
|
writer.sfixed64(value);
|
|
166
164
|
break;
|
|
167
|
-
case
|
|
165
|
+
case descriptors_js_1.ScalarType.SINT64:
|
|
168
166
|
writer.sint64(value);
|
|
169
167
|
break;
|
|
170
|
-
case
|
|
168
|
+
case descriptors_js_1.ScalarType.UINT32:
|
|
171
169
|
writer.uint32(value);
|
|
172
170
|
break;
|
|
173
|
-
case
|
|
171
|
+
case descriptors_js_1.ScalarType.SINT32:
|
|
174
172
|
writer.sint32(value);
|
|
175
173
|
break;
|
|
176
174
|
}
|
|
177
175
|
}
|
|
178
176
|
function writeTypeOfScalar(type) {
|
|
179
177
|
switch (type) {
|
|
180
|
-
case
|
|
181
|
-
case
|
|
178
|
+
case descriptors_js_1.ScalarType.BYTES:
|
|
179
|
+
case descriptors_js_1.ScalarType.STRING:
|
|
182
180
|
return binary_encoding_js_1.WireType.LengthDelimited;
|
|
183
|
-
case
|
|
184
|
-
case
|
|
185
|
-
case
|
|
181
|
+
case descriptors_js_1.ScalarType.DOUBLE:
|
|
182
|
+
case descriptors_js_1.ScalarType.FIXED64:
|
|
183
|
+
case descriptors_js_1.ScalarType.SFIXED64:
|
|
186
184
|
return binary_encoding_js_1.WireType.Bit64;
|
|
187
|
-
case
|
|
188
|
-
case
|
|
189
|
-
case
|
|
185
|
+
case descriptors_js_1.ScalarType.FIXED32:
|
|
186
|
+
case descriptors_js_1.ScalarType.SFIXED32:
|
|
187
|
+
case descriptors_js_1.ScalarType.FLOAT:
|
|
190
188
|
return binary_encoding_js_1.WireType.Bit32;
|
|
191
189
|
default:
|
|
192
190
|
return binary_encoding_js_1.WireType.Varint;
|
package/dist/cjs/to-json.d.ts
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type DescMessage } from "./descriptors.js";
|
|
2
2
|
import type { JsonValue } from "./json-value.js";
|
|
3
|
-
import type { Registry } from "./
|
|
3
|
+
import type { Registry } from "./registry.js";
|
|
4
4
|
import type { MessageShape } from "./types.js";
|
|
5
5
|
/**
|
|
6
6
|
* Options for serializing to JSON.
|
|
7
7
|
*/
|
|
8
8
|
export interface JsonWriteOptions {
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* By default, fields with implicit presence are not serialized if they are
|
|
11
|
+
* unset. For example, an empty list field or a proto3 int32 field with 0 is
|
|
12
|
+
* not serialized. With this option enabled, such fields are included in the
|
|
13
|
+
* output.
|
|
13
14
|
*/
|
|
14
|
-
|
|
15
|
+
alwaysEmitImplicit: boolean;
|
|
15
16
|
/**
|
|
16
17
|
* Emit enum values as integers instead of strings: The name of an enum
|
|
17
18
|
* value is used by default in JSON output. An option may be provided to
|