protobufjs 8.7.1 → 8.8.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.
- package/README.md +70 -86
- package/dist/light/protobuf.js +185 -54
- package/dist/light/protobuf.js.map +1 -1
- package/dist/light/protobuf.min.js +3 -3
- package/dist/light/protobuf.min.js.map +1 -1
- package/dist/minimal/protobuf.js +105 -44
- package/dist/minimal/protobuf.js.map +1 -1
- package/dist/minimal/protobuf.min.js +3 -3
- package/dist/minimal/protobuf.min.js.map +1 -1
- package/dist/protobuf.js +220 -81
- package/dist/protobuf.js.map +1 -1
- package/dist/protobuf.min.js +3 -3
- package/dist/protobuf.min.js.map +1 -1
- package/ext/descriptor.generated.d.ts +7 -0
- package/ext/descriptor.js +50 -10
- package/ext/protojson.js +14 -4
- package/ext/textformat.js +8 -4
- package/google/protobuf/descriptor.json +20 -1
- package/google/protobuf/descriptor.proto +14 -1
- package/index.d.ts +15 -0
- package/package.json +1 -1
- package/src/converter.js +5 -1
- package/src/decoder.js +31 -2
- package/src/enum.js +15 -2
- package/src/field.js +6 -1
- package/src/object.js +5 -2
- package/src/parse.js +35 -27
- package/src/reader.js +94 -13
- package/src/type.js +10 -0
- package/src/util/codegen.js +3 -1
- package/src/util/utf8.js +2 -28
- package/src/wrappers.js +5 -1
- package/src/writer.js +7 -1
|
@@ -215,6 +215,9 @@ export interface IDescriptorProto {
|
|
|
215
215
|
|
|
216
216
|
/** Reserved names */
|
|
217
217
|
reservedName?: string[];
|
|
218
|
+
|
|
219
|
+
/** Declared symbol visibility */
|
|
220
|
+
visibility?: number;
|
|
218
221
|
}
|
|
219
222
|
|
|
220
223
|
/** Properties of a MessageOptions message. */
|
|
@@ -311,6 +314,9 @@ export interface IEnumDescriptorProto {
|
|
|
311
314
|
|
|
312
315
|
/** Enum options */
|
|
313
316
|
options?: IEnumOptions;
|
|
317
|
+
|
|
318
|
+
/** Declared symbol visibility */
|
|
319
|
+
visibility?: number;
|
|
314
320
|
}
|
|
315
321
|
|
|
316
322
|
/** Properties of an EnumValueDescriptorProto message. */
|
|
@@ -353,6 +359,7 @@ export interface IFeatureSet {
|
|
|
353
359
|
jsonFormat?: number;
|
|
354
360
|
enforceNamingStyle?: number;
|
|
355
361
|
defaultSymbolVisibility?: number;
|
|
362
|
+
enforceProtoLimits?: number;
|
|
356
363
|
}
|
|
357
364
|
|
|
358
365
|
/** Properties of a OneofDescriptorProto message. */
|
package/ext/descriptor.js
CHANGED
|
@@ -13,7 +13,7 @@ var Namespace = $protobuf.Namespace,
|
|
|
13
13
|
Method = $protobuf.Method,
|
|
14
14
|
patterns = $protobuf.util.patterns;
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var integerRe = /^[+-]?[0-9]+$/,
|
|
17
17
|
typeRefRe = patterns.typeRefRe;
|
|
18
18
|
|
|
19
19
|
// --- Root ---
|
|
@@ -52,6 +52,7 @@ var numberRe = patterns.numberRe,
|
|
|
52
52
|
* @property {number} EDITION_PROTO3=999
|
|
53
53
|
* @property {number} EDITION_2023=1000
|
|
54
54
|
* @property {number} EDITION_2024=1001
|
|
55
|
+
* @property {number} EDITION_2026=1002
|
|
55
56
|
* @property {number} EDITION_1_TEST_ONLY=1
|
|
56
57
|
* @property {number} EDITION_2_TEST_ONLY=2
|
|
57
58
|
* @property {number} EDITION_99997_TEST_ONLY=99997
|
|
@@ -208,6 +209,7 @@ function Root_toDescriptorRecursive(ns, files, edition) {
|
|
|
208
209
|
* @property {IMessageOptions} [options] Not supported
|
|
209
210
|
* @property {IDescriptorProtoReservedRange[]} [reservedRange] Reserved ranges
|
|
210
211
|
* @property {string[]} [reservedName] Reserved names
|
|
212
|
+
* @property {number} [visibility] Declared symbol visibility
|
|
211
213
|
*/
|
|
212
214
|
|
|
213
215
|
/**
|
|
@@ -252,6 +254,7 @@ function Type_fromDescriptor(descriptor, ctx, nested, depth) {
|
|
|
252
254
|
var type = new Type(descriptor.name.length ? descriptor.name : "Type" + unnamedMessageIndex++, fromDescriptorOptions(descriptor.options, exports.MessageOptions)),
|
|
253
255
|
i,
|
|
254
256
|
mapEntries = Object.create(null);
|
|
257
|
+
type.visibility = visibilityFromDescriptor(descriptor.visibility);
|
|
255
258
|
|
|
256
259
|
if (!nested) {
|
|
257
260
|
type._edition = ctx.edition;
|
|
@@ -317,6 +320,9 @@ Type.prototype.toDescriptor = function toDescriptor(edition) {
|
|
|
317
320
|
var descriptor = exports.DescriptorProto.create({ name: this.name }),
|
|
318
321
|
i;
|
|
319
322
|
|
|
323
|
+
if (this.visibility)
|
|
324
|
+
descriptor.visibility = visibilityToDescriptor(this.visibility);
|
|
325
|
+
|
|
320
326
|
/* Fields */ for (i = 0; i < this.fieldsArray.length; ++i) {
|
|
321
327
|
var fieldDescriptor;
|
|
322
328
|
descriptor.field.push(fieldDescriptor = this._fieldsArray[i].toDescriptor(edition));
|
|
@@ -519,17 +525,33 @@ function Field_fromDescriptor(descriptor, ctx, nested) {
|
|
|
519
525
|
|
|
520
526
|
if (descriptor.defaultValue && descriptor.defaultValue.length) {
|
|
521
527
|
var defaultValue = descriptor.defaultValue;
|
|
522
|
-
switch (
|
|
523
|
-
case "
|
|
524
|
-
defaultValue
|
|
528
|
+
switch (fieldType) {
|
|
529
|
+
case "double": case "float":
|
|
530
|
+
switch (defaultValue.toLowerCase()) {
|
|
531
|
+
case "inf": defaultValue = Infinity; break;
|
|
532
|
+
case "-inf": defaultValue = -Infinity; break;
|
|
533
|
+
case "nan": case "-nan": defaultValue = NaN; break;
|
|
534
|
+
default:
|
|
535
|
+
defaultValue = Number(defaultValue);
|
|
536
|
+
if (Number.isNaN(defaultValue))
|
|
537
|
+
throw Error("illegal default value for " + fieldType);
|
|
538
|
+
break;
|
|
539
|
+
}
|
|
525
540
|
break;
|
|
526
|
-
case "
|
|
527
|
-
defaultValue
|
|
541
|
+
case "int32": case "uint32": case "sint32": case "fixed32": case "sfixed32":
|
|
542
|
+
if (!integerRe.test(defaultValue))
|
|
543
|
+
throw Error("illegal default value for " + fieldType);
|
|
544
|
+
defaultValue = parseInt(defaultValue, 10);
|
|
528
545
|
break;
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
546
|
+
case "int64": case "uint64": case "sint64": case "fixed64": case "sfixed64":
|
|
547
|
+
if (!integerRe.test(defaultValue))
|
|
548
|
+
throw Error("illegal default value for " + fieldType);
|
|
549
|
+
break;
|
|
550
|
+
case "bool":
|
|
551
|
+
switch (defaultValue) {
|
|
552
|
+
case "true": case "TRUE": defaultValue = true; break;
|
|
553
|
+
case "false": case "FALSE": defaultValue = false; break;
|
|
554
|
+
}
|
|
533
555
|
break;
|
|
534
556
|
}
|
|
535
557
|
field.setOption("default", defaultValue);
|
|
@@ -639,6 +661,7 @@ Field.prototype.toDescriptor = function toDescriptor(edition) {
|
|
|
639
661
|
* @property {string} [name] Enum name
|
|
640
662
|
* @property {IEnumValueDescriptorProto[]} [value] Enum values
|
|
641
663
|
* @property {IEnumOptions} [options] Enum options
|
|
664
|
+
* @property {number} [visibility] Declared symbol visibility
|
|
642
665
|
*/
|
|
643
666
|
|
|
644
667
|
/**
|
|
@@ -677,6 +700,7 @@ Field.prototype.toDescriptor = function toDescriptor(edition) {
|
|
|
677
700
|
* @property {number} [jsonFormat]
|
|
678
701
|
* @property {number} [enforceNamingStyle]
|
|
679
702
|
* @property {number} [defaultSymbolVisibility]
|
|
703
|
+
* @property {number} [enforceProtoLimits]
|
|
680
704
|
*/
|
|
681
705
|
|
|
682
706
|
var unnamedEnumIndex = 0;
|
|
@@ -719,6 +743,7 @@ function Enum_fromDescriptor(descriptor, ctx, nested) {
|
|
|
719
743
|
undefined,
|
|
720
744
|
valuesOptions
|
|
721
745
|
);
|
|
746
|
+
enm.visibility = visibilityFromDescriptor(descriptor.visibility);
|
|
722
747
|
|
|
723
748
|
if (!nested) {
|
|
724
749
|
enm._edition = ctx.edition;
|
|
@@ -760,6 +785,8 @@ Enum.prototype.toDescriptor = function toDescriptor() {
|
|
|
760
785
|
value: values,
|
|
761
786
|
options: toDescriptorOptions(this.options, exports.EnumOptions)
|
|
762
787
|
});
|
|
788
|
+
if (this.visibility)
|
|
789
|
+
descriptor.visibility = visibilityToDescriptor(this.visibility);
|
|
763
790
|
|
|
764
791
|
/* Reserved... */ if (this.reserved)
|
|
765
792
|
for (i = 0; i < this.reserved.length; ++i)
|
|
@@ -984,6 +1011,14 @@ function applyContextFeatures(object, ctx) {
|
|
|
984
1011
|
return object;
|
|
985
1012
|
}
|
|
986
1013
|
|
|
1014
|
+
function visibilityFromDescriptor(visibility) {
|
|
1015
|
+
return visibility === 1 ? "local" : visibility === 2 ? "export" : undefined;
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
function visibilityToDescriptor(visibility) {
|
|
1019
|
+
return visibility === "local" ? 1 : visibility === "export" ? 2 : 0;
|
|
1020
|
+
}
|
|
1021
|
+
|
|
987
1022
|
// Converts a descriptor type to a protobuf.js basic type
|
|
988
1023
|
function fromDescriptorType(type) {
|
|
989
1024
|
switch (type) {
|
|
@@ -1142,6 +1177,8 @@ function editionFromDescriptor(fileDescriptor) {
|
|
|
1142
1177
|
return "2023";
|
|
1143
1178
|
case exports.Edition.EDITION_2024:
|
|
1144
1179
|
return "2024";
|
|
1180
|
+
case exports.Edition.EDITION_2026:
|
|
1181
|
+
return "2026";
|
|
1145
1182
|
default:
|
|
1146
1183
|
throw new Error("Unsupported edition " + fileDescriptor.edition);
|
|
1147
1184
|
}
|
|
@@ -1165,6 +1202,9 @@ function editionToDescriptor(edition, fileDescriptor) {
|
|
|
1165
1202
|
case "2024":
|
|
1166
1203
|
fileDescriptor.edition = exports.Edition.EDITION_2024;
|
|
1167
1204
|
break;
|
|
1205
|
+
case "2026":
|
|
1206
|
+
fileDescriptor.edition = exports.Edition.EDITION_2026;
|
|
1207
|
+
break;
|
|
1168
1208
|
default:
|
|
1169
1209
|
throw new Error("Unsupported edition " + edition);
|
|
1170
1210
|
}
|
package/ext/protojson.js
CHANGED
|
@@ -91,6 +91,15 @@ function invalid(name, value, what) {
|
|
|
91
91
|
return Error(name + ": " + what + ": " + JSON.stringify(value));
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
+
function normalizeIntegerString(str, name, what) {
|
|
95
|
+
str = str.replace(/^\+/, "").replace(/^(-?)0+(?=\d)/, "$1");
|
|
96
|
+
if (str === "-0")
|
|
97
|
+
str = "0";
|
|
98
|
+
if (str.length > 20) // max uint64 and min int64
|
|
99
|
+
throw Error(name + ": out of range for " + what);
|
|
100
|
+
return str;
|
|
101
|
+
}
|
|
102
|
+
|
|
94
103
|
function parseIntegerString(value, type, name) {
|
|
95
104
|
var str;
|
|
96
105
|
if (typeof value === "number") {
|
|
@@ -113,6 +122,7 @@ function parseIntegerString(value, type, name) {
|
|
|
113
122
|
throw invalid(name, value, "expected integer (number or string)");
|
|
114
123
|
|
|
115
124
|
var range = INT_RANGE[type];
|
|
125
|
+
str = normalizeIntegerString(str, name, type);
|
|
116
126
|
if (LONG_TYPE[type]) {
|
|
117
127
|
if (hasBigInt) {
|
|
118
128
|
var big = BigInt(str);
|
|
@@ -128,17 +138,17 @@ function parseMapIntegerKey(key, type, name) {
|
|
|
128
138
|
var unsigned = type === "uint32" || type === "fixed32" || type === "uint64" || type === "fixed64";
|
|
129
139
|
if (!(unsigned ? /^[0-9]+$/ : /^-?[0-9]+$/).test(key))
|
|
130
140
|
throw invalid(name, key, "invalid " + type + " map key");
|
|
141
|
+
var range = INT_RANGE[type];
|
|
142
|
+
key = normalizeIntegerString(key, name, type + " map key");
|
|
131
143
|
if (hasBigInt) {
|
|
132
|
-
var big = BigInt(key)
|
|
133
|
-
range = INT_RANGE[type];
|
|
144
|
+
var big = BigInt(key);
|
|
134
145
|
if (big < BigInt(range[0]) || big > BigInt(range[1]))
|
|
135
146
|
throw invalid(name, key, "out of range for " + type + " map key");
|
|
136
147
|
return big.toString();
|
|
137
148
|
}
|
|
138
149
|
parseIntegerString(key, type, name);
|
|
139
150
|
if (LONG_TYPE[type]) {
|
|
140
|
-
|
|
141
|
-
return normalized === "-0" ? "0" : normalized;
|
|
151
|
+
return key;
|
|
142
152
|
}
|
|
143
153
|
return String(Number(key));
|
|
144
154
|
}
|
package/ext/textformat.js
CHANGED
|
@@ -586,14 +586,14 @@ Parser.prototype.parseScalar = function parseScalar(field) {
|
|
|
586
586
|
};
|
|
587
587
|
|
|
588
588
|
Parser.prototype.readStringBytes = function readStringBytes() {
|
|
589
|
-
var token = this.tn.next()
|
|
590
|
-
bytes = [];
|
|
589
|
+
var token = this.tn.next();
|
|
591
590
|
if (!token || token.type !== "string")
|
|
592
591
|
this.error("expected string");
|
|
593
|
-
|
|
592
|
+
var bytes = token.value;
|
|
594
593
|
while ((token = this.tn.peek()) && token.type === "string") {
|
|
595
594
|
token = this.tn.next();
|
|
596
|
-
|
|
595
|
+
for (var i = 0; i < token.value.length; ++i)
|
|
596
|
+
bytes.push(token.value[i]);
|
|
597
597
|
}
|
|
598
598
|
return bytes;
|
|
599
599
|
};
|
|
@@ -842,6 +842,10 @@ function parseInteger(token, sign, unsigned, bits) {
|
|
|
842
842
|
} else if (!/^(?:0|[1-9][0-9]*)$/.test(raw))
|
|
843
843
|
throw Error("integer value expected");
|
|
844
844
|
|
|
845
|
+
digits = digits.replace(/^0+(?=.)/, "");
|
|
846
|
+
if (digits.length > Math.ceil(bits / 3)) // 3 bits per octal digit
|
|
847
|
+
throw Error((unsigned ? "unsigned " : "") + "integer value out of range");
|
|
848
|
+
|
|
845
849
|
if (typeof util.global.BigInt === "function")
|
|
846
850
|
return parseIntegerBigInt(digits, radix, sign, unsigned, bits);
|
|
847
851
|
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"EDITION_PROTO3": 999,
|
|
30
30
|
"EDITION_2023": 1000,
|
|
31
31
|
"EDITION_2024": 1001,
|
|
32
|
+
"EDITION_2026": 1002,
|
|
32
33
|
"EDITION_1_TEST_ONLY": 1,
|
|
33
34
|
"EDITION_2_TEST_ONLY": 2,
|
|
34
35
|
"EDITION_99997_TEST_ONLY": 99997,
|
|
@@ -1199,6 +1200,11 @@
|
|
|
1199
1200
|
"edition_defaults.edition": "EDITION_2024",
|
|
1200
1201
|
"edition_defaults.value": "EXPORT_TOP_LEVEL"
|
|
1201
1202
|
}
|
|
1203
|
+
},
|
|
1204
|
+
"enforceProtoLimits": {
|
|
1205
|
+
"type": "ProtoLimitsFeature.EnforceProtoLimits",
|
|
1206
|
+
"id": 9,
|
|
1207
|
+
"protoName": "enforce_proto_limits"
|
|
1202
1208
|
}
|
|
1203
1209
|
},
|
|
1204
1210
|
"extensions": [
|
|
@@ -1269,7 +1275,8 @@
|
|
|
1269
1275
|
"values": {
|
|
1270
1276
|
"ENFORCE_NAMING_STYLE_UNKNOWN": 0,
|
|
1271
1277
|
"STYLE2024": 1,
|
|
1272
|
-
"STYLE_LEGACY": 2
|
|
1278
|
+
"STYLE_LEGACY": 2,
|
|
1279
|
+
"STYLE2026": 3
|
|
1273
1280
|
}
|
|
1274
1281
|
},
|
|
1275
1282
|
"VisibilityFeature": {
|
|
@@ -1291,6 +1298,18 @@
|
|
|
1291
1298
|
}
|
|
1292
1299
|
}
|
|
1293
1300
|
}
|
|
1301
|
+
},
|
|
1302
|
+
"ProtoLimitsFeature": {
|
|
1303
|
+
"fields": {},
|
|
1304
|
+
"nested": {
|
|
1305
|
+
"EnforceProtoLimits": {
|
|
1306
|
+
"values": {
|
|
1307
|
+
"PROTO_LIMITS_UNKNOWN": 0,
|
|
1308
|
+
"LEGACY_NO_EXPLICIT_LIMITS": 1,
|
|
1309
|
+
"PROTO_LIMITS2026": 2
|
|
1310
|
+
}
|
|
1311
|
+
}
|
|
1312
|
+
}
|
|
1294
1313
|
}
|
|
1295
1314
|
}
|
|
1296
1315
|
},
|
|
@@ -17,6 +17,7 @@ enum Edition {
|
|
|
17
17
|
EDITION_PROTO3 = 999;
|
|
18
18
|
EDITION_2023 = 1000;
|
|
19
19
|
EDITION_2024 = 1001;
|
|
20
|
+
EDITION_2026 = 1002;
|
|
20
21
|
EDITION_1_TEST_ONLY = 1;
|
|
21
22
|
EDITION_2_TEST_ONLY = 2;
|
|
22
23
|
EDITION_99997_TEST_ONLY = 99997;
|
|
@@ -396,6 +397,7 @@ message FeatureSet {
|
|
|
396
397
|
optional JsonFormat json_format = 6 [retention="RETENTION_RUNTIME", targets="TARGET_TYPE_FILE", feature_support.edition_introduced="EDITION_2023", edition_defaults.edition="EDITION_PROTO3", edition_defaults.value="ALLOW"];
|
|
397
398
|
optional EnforceNamingStyle enforce_naming_style = 7 [retention="RETENTION_SOURCE", targets="TARGET_TYPE_METHOD", feature_support.edition_introduced="EDITION_2024", edition_defaults.edition="EDITION_2024", edition_defaults.value="STYLE2024"];
|
|
398
399
|
optional VisibilityFeature.DefaultSymbolVisibility default_symbol_visibility = 8 [retention="RETENTION_SOURCE", targets="TARGET_TYPE_FILE", feature_support.edition_introduced="EDITION_2024", edition_defaults.edition="EDITION_2024", edition_defaults.value="EXPORT_TOP_LEVEL"];
|
|
400
|
+
optional ProtoLimitsFeature.EnforceProtoLimits enforce_proto_limits = 9;
|
|
399
401
|
|
|
400
402
|
enum FieldPresence {
|
|
401
403
|
|
|
@@ -445,6 +447,7 @@ message FeatureSet {
|
|
|
445
447
|
ENFORCE_NAMING_STYLE_UNKNOWN = 0;
|
|
446
448
|
STYLE2024 = 1;
|
|
447
449
|
STYLE_LEGACY = 2;
|
|
450
|
+
STYLE2026 = 3;
|
|
448
451
|
}
|
|
449
452
|
|
|
450
453
|
message VisibilityFeature {
|
|
@@ -461,6 +464,16 @@ message FeatureSet {
|
|
|
461
464
|
reserved 1 to max;
|
|
462
465
|
}
|
|
463
466
|
|
|
467
|
+
message ProtoLimitsFeature {
|
|
468
|
+
|
|
469
|
+
enum EnforceProtoLimits {
|
|
470
|
+
|
|
471
|
+
PROTO_LIMITS_UNKNOWN = 0;
|
|
472
|
+
LEGACY_NO_EXPLICIT_LIMITS = 1;
|
|
473
|
+
PROTO_LIMITS2026 = 2;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
|
|
464
477
|
extensions 1000 to 9994, 9995 to 9999, 10000;
|
|
465
478
|
|
|
466
479
|
reserved 999;
|
|
@@ -524,4 +537,4 @@ enum SymbolVisibility {
|
|
|
524
537
|
VISIBILITY_UNSET = 0;
|
|
525
538
|
VISIBILITY_LOCAL = 1;
|
|
526
539
|
VISIBILITY_EXPORT = 2;
|
|
527
|
-
}
|
|
540
|
+
}
|
package/index.d.ts
CHANGED
|
@@ -190,6 +190,9 @@ export class Enum extends ReflectionObject {
|
|
|
190
190
|
/** Reserved ranges, if any. */
|
|
191
191
|
reserved: (number[]|string)[];
|
|
192
192
|
|
|
193
|
+
/** Declared symbol visibility, if any. */
|
|
194
|
+
visibility?: ("local"|"export");
|
|
195
|
+
|
|
193
196
|
/**
|
|
194
197
|
* Constructs an enum from an enum descriptor.
|
|
195
198
|
* @param name Enum name
|
|
@@ -260,6 +263,9 @@ export interface IEnum {
|
|
|
260
263
|
/** Reserved ranges */
|
|
261
264
|
reserved?: (number[]|string)[];
|
|
262
265
|
|
|
266
|
+
/** Declared symbol visibility */
|
|
267
|
+
visibility?: ("local"|"export");
|
|
268
|
+
|
|
263
269
|
/** Enum comment */
|
|
264
270
|
comment?: (string|null);
|
|
265
271
|
|
|
@@ -1804,6 +1810,9 @@ export class Type extends NamespaceBase {
|
|
|
1804
1810
|
/** Reserved ranges, if any. */
|
|
1805
1811
|
reserved: (number[]|string)[];
|
|
1806
1812
|
|
|
1813
|
+
/** Declared symbol visibility, if any. */
|
|
1814
|
+
visibility?: ("local"|"export");
|
|
1815
|
+
|
|
1807
1816
|
/** Message fields by id. */
|
|
1808
1817
|
readonly fieldsById: { [k: number]: Field };
|
|
1809
1818
|
|
|
@@ -1982,6 +1991,9 @@ export interface IType extends INamespace {
|
|
|
1982
1991
|
/** Whether a legacy group or not */
|
|
1983
1992
|
group?: boolean;
|
|
1984
1993
|
|
|
1994
|
+
/** Declared symbol visibility */
|
|
1995
|
+
visibility?: ("local"|"export");
|
|
1996
|
+
|
|
1985
1997
|
/** Message type comment */
|
|
1986
1998
|
comment?: (string|null);
|
|
1987
1999
|
}
|
|
@@ -2918,6 +2930,9 @@ export class Writer {
|
|
|
2918
2930
|
/** Stack of forked length-prefix positions. */
|
|
2919
2931
|
states: (number[]|null);
|
|
2920
2932
|
|
|
2933
|
+
/** Initial backing buffer size in bytes. Defaults to 128. */
|
|
2934
|
+
static initialBufferSize: number;
|
|
2935
|
+
|
|
2921
2936
|
/**
|
|
2922
2937
|
* Current write position.
|
|
2923
2938
|
* @deprecated Use {@link Writer#pos} instead.
|
package/package.json
CHANGED
package/src/converter.js
CHANGED
|
@@ -303,7 +303,11 @@ converter.toObject = function toObject(mtype) {
|
|
|
303
303
|
("d%s=%j", prop, arrayDefault)
|
|
304
304
|
("if(o.bytes!==Array)d%s=util.newBuffer(d%s)", prop, prop)
|
|
305
305
|
("}");
|
|
306
|
-
} else
|
|
306
|
+
} else if ((field.type === "double" || field.type === "float") && typeof field.typeDefault === "number"
|
|
307
|
+
&& (!isFinite(field.typeDefault) || Object.is(field.typeDefault, -0))) gen
|
|
308
|
+
("d%s=%f", prop, field.typeDefault)
|
|
309
|
+
("if(o.json&&!isFinite(d%s))d%s=String(d%s)", prop, prop, prop);
|
|
310
|
+
else gen
|
|
307
311
|
("d%s=%j", prop, field.typeDefault); // also messages (=null)
|
|
308
312
|
} gen
|
|
309
313
|
("}");
|
package/src/decoder.js
CHANGED
|
@@ -46,7 +46,17 @@ function decoder(mtype) {
|
|
|
46
46
|
("if(q===undefined)q=0")
|
|
47
47
|
("if(q>Reader.recursionLimit)")
|
|
48
48
|
("throw Error(\"max depth exceeded\")")
|
|
49
|
-
("var c
|
|
49
|
+
("var c,m" + (hasMapField ? ",k,v" : needsValueVar ? ",v" : ""))
|
|
50
|
+
("if(l===undefined)")
|
|
51
|
+
("c=r.len")
|
|
52
|
+
("else{")
|
|
53
|
+
("c=r.pos+l")
|
|
54
|
+
("if(c>r.len)")
|
|
55
|
+
("throw RangeError(\"index out of range\")")
|
|
56
|
+
("l=r.len")
|
|
57
|
+
("r.len=c")
|
|
58
|
+
("}")
|
|
59
|
+
("m=g||new C")
|
|
50
60
|
("while(r.pos<c){")
|
|
51
61
|
("var s=r.pos")
|
|
52
62
|
("var t=r.tag()")
|
|
@@ -73,7 +83,10 @@ function decoder(mtype) {
|
|
|
73
83
|
("if(%s===util.emptyObject)", ref)
|
|
74
84
|
("%s={}", ref);
|
|
75
85
|
gen
|
|
76
|
-
("var c2=r.uint32()+r.pos")
|
|
86
|
+
("var c2=r.uint32()+r.pos")
|
|
87
|
+
("if(c2>r.len)")
|
|
88
|
+
("throw RangeError(\"index out of range\")")
|
|
89
|
+
("r.len=c2");
|
|
77
90
|
|
|
78
91
|
if (types.defaults[field.keyType] !== undefined) gen
|
|
79
92
|
("k=%j", types.defaults[field.keyType]);
|
|
@@ -111,6 +124,10 @@ function decoder(mtype) {
|
|
|
111
124
|
("}")
|
|
112
125
|
("r.skipType(u,q,t2)")
|
|
113
126
|
("}");
|
|
127
|
+
gen
|
|
128
|
+
("if(r.pos!==c2)")
|
|
129
|
+
("throw RangeError(\"index out of range\")")
|
|
130
|
+
("r.len=c");
|
|
114
131
|
|
|
115
132
|
if (closed) { gen
|
|
116
133
|
("if(types[%i].valuesById[v]===undefined){", i);
|
|
@@ -144,6 +161,9 @@ function decoder(mtype) {
|
|
|
144
161
|
if (closed) {
|
|
145
162
|
gen
|
|
146
163
|
("var c2=r.uint32()+r.pos")
|
|
164
|
+
("if(c2>r.len)")
|
|
165
|
+
("throw RangeError(\"index out of range\")")
|
|
166
|
+
("r.len=c2")
|
|
147
167
|
("while(r.pos<c2){")
|
|
148
168
|
("s=r.pos")
|
|
149
169
|
("v=r.%s()", type)
|
|
@@ -154,6 +174,10 @@ function decoder(mtype) {
|
|
|
154
174
|
("}else");
|
|
155
175
|
genPreserveUnknown(gen, "util.rawField(" + field.id + ",0,r.raw(s,r.pos))")
|
|
156
176
|
("}");
|
|
177
|
+
gen
|
|
178
|
+
("if(r.pos!==c2)")
|
|
179
|
+
("throw RangeError(\"index out of range\")")
|
|
180
|
+
("r.len=c");
|
|
157
181
|
} else gen
|
|
158
182
|
("if(!(%s&&%s.length))", ref, ref)
|
|
159
183
|
("%s=[]", ref)
|
|
@@ -262,6 +286,11 @@ function decoder(mtype) {
|
|
|
262
286
|
("r.skipType(%s,q,t)", i ? "u" : "t&7");
|
|
263
287
|
genPreserveUnknown(gen, "r.raw(s,r.pos)")
|
|
264
288
|
("}")
|
|
289
|
+
("if(l!==undefined){")
|
|
290
|
+
("if(r.pos!==c)")
|
|
291
|
+
("throw RangeError(\"index out of range\")")
|
|
292
|
+
("r.len=l")
|
|
293
|
+
("}")
|
|
265
294
|
("if(z!==undefined)")
|
|
266
295
|
("throw Error(\"missing end group\")");
|
|
267
296
|
|
package/src/enum.js
CHANGED
|
@@ -76,14 +76,23 @@ function Enum(name, values, options, comment, comments, valuesOptions) {
|
|
|
76
76
|
*/
|
|
77
77
|
this.reserved = undefined; // toJSON
|
|
78
78
|
|
|
79
|
+
/**
|
|
80
|
+
* Declared symbol visibility, if any.
|
|
81
|
+
* @type {"local"|"export"|undefined}
|
|
82
|
+
*/
|
|
83
|
+
this.visibility = undefined; // toJSON
|
|
84
|
+
|
|
79
85
|
// Note that values inherit valuesById on their prototype which makes them a TypeScript-
|
|
80
86
|
// compatible enum. This is used by pbts to write actual enum definitions that work for
|
|
81
87
|
// static and reflection code alike instead of emitting generic object definitions.
|
|
82
88
|
|
|
83
89
|
if (values)
|
|
84
90
|
for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)
|
|
85
|
-
if (keys[i] !== "__proto__" && typeof values[keys[i]] === "number") // use forward entries only
|
|
86
|
-
this.
|
|
91
|
+
if (keys[i] !== "__proto__" && typeof values[keys[i]] === "number") { // use forward entries only
|
|
92
|
+
this.values[keys[i]] = values[keys[i]];
|
|
93
|
+
if (this.valuesById[values[keys[i]]] === undefined)
|
|
94
|
+
this.valuesById[values[keys[i]]] = keys[i];
|
|
95
|
+
}
|
|
87
96
|
}
|
|
88
97
|
|
|
89
98
|
/**
|
|
@@ -109,6 +118,7 @@ Enum.prototype._resolveFeatures = function _resolveFeatures(edition) {
|
|
|
109
118
|
* @property {Object.<string,*>} [options] Enum options
|
|
110
119
|
* @property {Object.<string,Object.<string,*>>} [valuesOptions] Enum value options
|
|
111
120
|
* @property {Array.<number[]|string>} [reserved] Reserved ranges
|
|
121
|
+
* @property {"local"|"export"} [visibility] Declared symbol visibility
|
|
112
122
|
* @property {string|null} [comment] Enum comment
|
|
113
123
|
* @property {Object.<string,string|null>} [comments] Value comments
|
|
114
124
|
*/
|
|
@@ -123,6 +133,8 @@ Enum.prototype._resolveFeatures = function _resolveFeatures(edition) {
|
|
|
123
133
|
Enum.fromJSON = function fromJSON(name, json) {
|
|
124
134
|
var enm = new Enum(name, json.values, json.options, json.comment, json.comments, json.valuesOptions);
|
|
125
135
|
enm.reserved = json.reserved;
|
|
136
|
+
if (json.visibility)
|
|
137
|
+
enm.visibility = json.visibility;
|
|
126
138
|
if (json.edition)
|
|
127
139
|
enm._edition = json.edition;
|
|
128
140
|
enm._defaultEdition = "proto3"; // For backwards-compatibility.
|
|
@@ -142,6 +154,7 @@ Enum.prototype.toJSON = function toJSON(toJSONOptions) {
|
|
|
142
154
|
"valuesOptions" , this.valuesOptions,
|
|
143
155
|
"values" , this.values,
|
|
144
156
|
"reserved" , this.reserved && this.reserved.length ? this.reserved : undefined,
|
|
157
|
+
"visibility" , this.visibility,
|
|
145
158
|
"comment" , keepComments ? this.comment : undefined,
|
|
146
159
|
"comments" , keepComments ? this.comments : undefined
|
|
147
160
|
]);
|
package/src/field.js
CHANGED
|
@@ -371,12 +371,17 @@ Field.prototype.resolve = function resolve() {
|
|
|
371
371
|
|
|
372
372
|
// convert to internal data type if necesssary
|
|
373
373
|
if (this.long) {
|
|
374
|
-
|
|
374
|
+
var unsigned = this.type === "uint64" || this.type === "fixed64";
|
|
375
|
+
this.typeDefault = typeof this.typeDefault === "string"
|
|
376
|
+
? util.Long.fromString(this.typeDefault, unsigned)
|
|
377
|
+
: util.Long.fromNumber(this.typeDefault, unsigned);
|
|
375
378
|
|
|
376
379
|
/* istanbul ignore else */
|
|
377
380
|
if (Object.freeze)
|
|
378
381
|
Object.freeze(this.typeDefault); // long instances are meant to be immutable anyway (i.e. use small int cache that even requires it)
|
|
379
382
|
|
|
383
|
+
} else if (types.long[this.type] !== undefined && typeof this.typeDefault === "string") {
|
|
384
|
+
this.typeDefault = parseInt(this.typeDefault, 10);
|
|
380
385
|
} else if (this.bytes && typeof this.typeDefault === "string") {
|
|
381
386
|
var buf;
|
|
382
387
|
if (util.base64.test(this.typeDefault))
|
package/src/object.js
CHANGED
|
@@ -10,10 +10,11 @@ var Root; // cyclic
|
|
|
10
10
|
|
|
11
11
|
/* eslint-disable no-warning-comments */
|
|
12
12
|
// TODO: Replace with embedded proto.
|
|
13
|
-
var editions2024Defaults = {enum_type: "OPEN", field_presence: "EXPLICIT", json_format: "ALLOW", message_encoding: "LENGTH_PREFIXED", repeated_field_encoding: "PACKED", utf8_validation: "VERIFY", enforce_naming_style: "STYLE2024", default_symbol_visibility: "EXPORT_TOP_LEVEL" };
|
|
14
|
-
var editions2023Defaults = {enum_type: "OPEN", field_presence: "EXPLICIT", json_format: "ALLOW", message_encoding: "LENGTH_PREFIXED", repeated_field_encoding: "PACKED", utf8_validation: "VERIFY", enforce_naming_style: "STYLE_LEGACY", default_symbol_visibility: "EXPORT_ALL" };
|
|
15
13
|
var proto2Defaults = {enum_type: "CLOSED", field_presence: "EXPLICIT", json_format: "LEGACY_BEST_EFFORT", message_encoding: "LENGTH_PREFIXED", repeated_field_encoding: "EXPANDED", utf8_validation: "NONE", enforce_naming_style: "STYLE_LEGACY", default_symbol_visibility: "EXPORT_ALL" };
|
|
16
14
|
var proto3Defaults = {enum_type: "OPEN", field_presence: "IMPLICIT", json_format: "ALLOW", message_encoding: "LENGTH_PREFIXED", repeated_field_encoding: "PACKED", utf8_validation: "VERIFY", enforce_naming_style: "STYLE_LEGACY", default_symbol_visibility: "EXPORT_ALL" };
|
|
15
|
+
var editions2023Defaults = {enum_type: "OPEN", field_presence: "EXPLICIT", json_format: "ALLOW", message_encoding: "LENGTH_PREFIXED", repeated_field_encoding: "PACKED", utf8_validation: "VERIFY", enforce_naming_style: "STYLE_LEGACY", default_symbol_visibility: "EXPORT_ALL" };
|
|
16
|
+
var editions2024Defaults = {enum_type: "OPEN", field_presence: "EXPLICIT", json_format: "ALLOW", message_encoding: "LENGTH_PREFIXED", repeated_field_encoding: "PACKED", utf8_validation: "VERIFY", enforce_naming_style: "STYLE2024", default_symbol_visibility: "EXPORT_TOP_LEVEL" };
|
|
17
|
+
var editions2026Defaults = {enum_type: "OPEN", field_presence: "EXPLICIT", json_format: "ALLOW", message_encoding: "LENGTH_PREFIXED", repeated_field_encoding: "PACKED", utf8_validation: "VERIFY", enforce_naming_style: "STYLE2026", default_symbol_visibility: "STRICT", enforce_proto_limits: "PROTO_LIMITS2026" };
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* Constructs a new reflection object instance.
|
|
@@ -227,6 +228,8 @@ ReflectionObject.prototype._resolveFeatures = function _resolveFeatures(edition)
|
|
|
227
228
|
defaults = Object.assign({}, editions2023Defaults);
|
|
228
229
|
} else if (edition === "2024") {
|
|
229
230
|
defaults = Object.assign({}, editions2024Defaults);
|
|
231
|
+
} else if (edition === "2026") {
|
|
232
|
+
defaults = Object.assign({}, editions2026Defaults);
|
|
230
233
|
} else {
|
|
231
234
|
throw new Error("Unknown edition: " + edition);
|
|
232
235
|
}
|