@bufbuild/protobuf 0.0.1-alpha.1 → 0.0.2-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/binary-encoding.js +414 -409
- package/dist/cjs/binary-format.js +13 -0
- package/dist/cjs/descriptor-registry.js +420 -449
- package/dist/cjs/descriptor-set.js +429 -513
- package/dist/cjs/enum.js +13 -0
- package/dist/cjs/field-list.js +13 -0
- package/dist/cjs/field.js +43 -30
- package/dist/cjs/google/protobuf/any_pb.js +122 -140
- package/dist/cjs/google/protobuf/api_pb.js +177 -224
- package/dist/cjs/google/protobuf/compiler/plugin_pb.js +125 -227
- package/dist/cjs/google/protobuf/descriptor_pb.js +1029 -1888
- package/dist/cjs/google/protobuf/duration_pb.js +72 -88
- package/dist/cjs/google/protobuf/empty_pb.js +17 -17
- package/dist/cjs/google/protobuf/field_mask_pb.js +77 -94
- package/dist/cjs/google/protobuf/source_context_pb.js +25 -25
- package/dist/cjs/google/protobuf/struct_pb.js +144 -181
- package/dist/cjs/google/protobuf/timestamp_pb.js +86 -123
- package/dist/cjs/google/protobuf/type_pb.js +406 -462
- package/dist/cjs/google/protobuf/wrappers_pb.js +407 -470
- package/dist/cjs/google/varint.js +166 -171
- package/dist/cjs/index.js +41 -122
- package/dist/cjs/json-format.js +13 -0
- package/dist/cjs/message-type.js +13 -0
- package/dist/cjs/message.js +89 -85
- package/dist/cjs/private/assert.js +33 -26
- package/dist/cjs/private/base64.js +93 -79
- package/dist/cjs/private/binary-format-common.js +208 -208
- package/dist/cjs/private/binary-format-proto2.js +88 -109
- package/dist/cjs/private/binary-format-proto3.js +70 -90
- package/dist/cjs/private/enum.js +77 -44
- package/dist/cjs/private/field-list.js +64 -50
- package/dist/cjs/private/field-wrapper.js +21 -10
- package/dist/cjs/private/field.js +35 -25
- package/dist/cjs/private/json-format-common.js +427 -440
- package/dist/cjs/private/json-format-proto2.js +91 -89
- package/dist/cjs/private/json-format-proto3.js +82 -93
- package/dist/cjs/private/message-type.js +39 -27
- package/dist/cjs/private/names.js +71 -62
- package/dist/cjs/private/options-map.js +13 -0
- package/dist/cjs/private/proto-runtime.js +25 -16
- package/dist/cjs/private/scalars.js +113 -103
- package/dist/cjs/private/util-common.js +193 -210
- package/dist/cjs/private/util.js +13 -0
- package/dist/cjs/proto-int64.js +123 -111
- package/dist/cjs/proto2.js +63 -63
- package/dist/cjs/proto3.js +74 -74
- package/dist/cjs/service-type.js +27 -17
- package/dist/cjs/type-registry.js +46 -31
- package/dist/esm/binary-encoding.js +414 -414
- package/dist/esm/binary-format.js +13 -0
- package/dist/esm/descriptor-registry.js +422 -458
- package/dist/esm/descriptor-set.js +430 -478
- package/dist/esm/enum.js +13 -0
- package/dist/esm/field-list.js +13 -0
- package/dist/esm/field.js +42 -29
- package/dist/esm/google/protobuf/any_pb.js +122 -140
- package/dist/esm/google/protobuf/api_pb.js +177 -197
- package/dist/esm/google/protobuf/compiler/plugin_pb.js +123 -216
- package/dist/esm/google/protobuf/descriptor_pb.js +1013 -1804
- package/dist/esm/google/protobuf/duration_pb.js +72 -88
- package/dist/esm/google/protobuf/empty_pb.js +17 -17
- package/dist/esm/google/protobuf/field_mask_pb.js +77 -94
- package/dist/esm/google/protobuf/source_context_pb.js +25 -25
- package/dist/esm/google/protobuf/struct_pb.js +143 -180
- package/dist/esm/google/protobuf/timestamp_pb.js +86 -123
- package/dist/esm/google/protobuf/type_pb.js +401 -421
- package/dist/esm/google/protobuf/wrappers_pb.js +406 -397
- package/dist/esm/google/varint.js +165 -164
- package/dist/esm/index.js +14 -1
- package/dist/esm/json-format.js +13 -0
- package/dist/esm/message-type.js +13 -0
- package/dist/esm/message.js +89 -85
- package/dist/esm/private/assert.js +32 -21
- package/dist/esm/private/base64.js +92 -78
- package/dist/esm/private/binary-format-common.js +209 -207
- package/dist/esm/private/binary-format-proto2.js +89 -81
- package/dist/esm/private/binary-format-proto3.js +71 -67
- package/dist/esm/private/enum.js +75 -43
- package/dist/esm/private/field-list.js +64 -50
- package/dist/esm/private/field-wrapper.js +21 -10
- package/dist/esm/private/field.js +35 -22
- package/dist/esm/private/json-format-common.js +427 -435
- package/dist/esm/private/json-format-proto2.js +89 -81
- package/dist/esm/private/json-format-proto3.js +79 -80
- package/dist/esm/private/message-type.js +40 -28
- package/dist/esm/private/names.js +70 -57
- package/dist/esm/private/options-map.js +13 -0
- package/dist/esm/private/proto-runtime.js +26 -12
- package/dist/esm/private/scalars.js +112 -99
- package/dist/esm/private/util-common.js +193 -192
- package/dist/esm/private/util.js +13 -0
- package/dist/esm/proto-int64.js +123 -111
- package/dist/esm/proto2.js +63 -57
- package/dist/esm/proto3.js +74 -68
- package/dist/esm/service-type.js +25 -12
- package/dist/esm/type-registry.js +46 -31
- package/dist/types/binary-encoding.d.ts +398 -398
- package/dist/types/binary-format.d.ts +69 -91
- package/dist/types/descriptor-registry.d.ts +23 -29
- package/dist/types/descriptor-set.d.ts +107 -128
- package/dist/types/enum.d.ts +21 -21
- package/dist/types/field-list.d.ts +21 -21
- package/dist/types/field.d.ts +191 -231
- package/dist/types/google/protobuf/any_pb.d.ts +56 -77
- package/dist/types/google/protobuf/api_pb.d.ts +144 -187
- package/dist/types/google/protobuf/compiler/plugin_pb.d.ts +195 -257
- package/dist/types/google/protobuf/descriptor_pb.d.ts +1360 -1737
- package/dist/types/google/protobuf/duration_pb.d.ts +30 -50
- package/dist/types/google/protobuf/empty_pb.d.ts +9 -28
- package/dist/types/google/protobuf/field_mask_pb.d.ts +17 -37
- package/dist/types/google/protobuf/source_context_pb.d.ts +16 -35
- package/dist/types/google/protobuf/struct_pb.d.ts +64 -115
- package/dist/types/google/protobuf/timestamp_pb.d.ts +31 -51
- package/dist/types/google/protobuf/type_pb.d.ts +355 -422
- package/dist/types/google/protobuf/wrappers_pb.d.ts +181 -297
- package/dist/types/google/varint.d.ts +6 -13
- package/dist/types/index.d.ts +4 -27
- package/dist/types/json-format.d.ts +70 -89
- package/dist/types/message-type.d.ts +37 -45
- package/dist/types/message.d.ts +62 -87
- package/dist/types/private/assert.d.ts +1 -4
- package/dist/types/private/binary-format-common.d.ts +6 -32
- package/dist/types/private/enum.d.ts +13 -11
- package/dist/types/private/field-list.d.ts +14 -21
- package/dist/types/private/field-wrapper.d.ts +4 -10
- package/dist/types/private/field.d.ts +12 -12
- package/dist/types/private/json-format-common.d.ts +5 -27
- package/dist/types/private/message-type.d.ts +12 -7
- package/dist/types/private/names.d.ts +1 -4
- package/dist/types/private/options-map.d.ts +1 -1
- package/dist/types/private/proto-runtime.d.ts +34 -42
- package/dist/types/private/scalars.d.ts +5 -12
- package/dist/types/private/util-common.d.ts +1 -4
- package/dist/types/private/util.d.ts +29 -41
- package/dist/types/proto-int64.d.ts +42 -42
- package/dist/types/service-type.d.ts +36 -56
- package/dist/types/type-registry.d.ts +13 -15
- package/package.json +2 -3
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
// Copyright 2021-2022 Buf Technologies, Inc.
|
|
3
|
+
//
|
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
// you may not use this file except in compliance with the License.
|
|
6
|
+
// You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
// See the License for the specific language governing permissions and
|
|
14
|
+
// limitations under the License.
|
|
2
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.writePacked =
|
|
4
|
-
exports.writeScalar =
|
|
5
|
-
exports.writeMessageField =
|
|
6
|
-
exports.writeMapEntry =
|
|
7
|
-
exports.makeBinaryFormatCommon =
|
|
8
|
-
void 0;
|
|
16
|
+
exports.writePacked = exports.writeScalar = exports.writeMessageField = exports.writeMapEntry = exports.makeBinaryFormatCommon = void 0;
|
|
9
17
|
const binary_encoding_js_1 = require("../binary-encoding.js");
|
|
10
18
|
const field_js_1 = require("../field.js");
|
|
11
19
|
const field_wrapper_js_1 = require("./field-wrapper.js");
|
|
@@ -15,239 +23,231 @@ const assert_js_1 = require("./assert.js");
|
|
|
15
23
|
const unknownFieldsSymbol = Symbol("@bufbuild/protobuf/unknown-fields");
|
|
16
24
|
// Default options for parsing binary data.
|
|
17
25
|
const readDefaults = {
|
|
18
|
-
|
|
19
|
-
|
|
26
|
+
readUnknownFields: true,
|
|
27
|
+
readerFactory: (bytes) => new binary_encoding_js_1.BinaryReader(bytes),
|
|
20
28
|
};
|
|
21
29
|
// Default options for serializing binary data.
|
|
22
30
|
const writeDefaults = {
|
|
23
|
-
|
|
24
|
-
|
|
31
|
+
writeUnknownFields: true,
|
|
32
|
+
writerFactory: () => new binary_encoding_js_1.BinaryWriter(),
|
|
25
33
|
};
|
|
26
34
|
function makeReadOptions(options) {
|
|
27
|
-
|
|
35
|
+
return options ? { ...readDefaults, ...options } : readDefaults;
|
|
28
36
|
}
|
|
29
37
|
function makeWriteOptions(options) {
|
|
30
|
-
|
|
38
|
+
return options ? { ...writeDefaults, ...options } : writeDefaults;
|
|
31
39
|
}
|
|
32
40
|
function makeBinaryFormatCommon() {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
onUnknownField(message, no, wireType, data) {
|
|
52
|
-
const m = message;
|
|
53
|
-
if (!Array.isArray(m[unknownFieldsSymbol])) {
|
|
54
|
-
m[unknownFieldsSymbol] = [];
|
|
55
|
-
}
|
|
56
|
-
m[unknownFieldsSymbol].push({ no, wireType, data });
|
|
57
|
-
},
|
|
58
|
-
readMessage(message, reader, length, options) {
|
|
59
|
-
const type = message.getType();
|
|
60
|
-
const end = length === undefined ? reader.len : reader.pos + length;
|
|
61
|
-
while (reader.pos < end) {
|
|
62
|
-
const [fieldNo, wireType] = reader.tag(),
|
|
63
|
-
field = type.fields.find(fieldNo);
|
|
64
|
-
if (!field) {
|
|
65
|
-
const data = reader.skip(wireType);
|
|
66
|
-
if (options.readUnknownFields) {
|
|
67
|
-
this.onUnknownField(message, fieldNo, wireType, data);
|
|
68
|
-
}
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
let target = message,
|
|
72
|
-
repeated = field.repeated,
|
|
73
|
-
localName = field.localName;
|
|
74
|
-
if (field.oneof) {
|
|
75
|
-
target = target[field.oneof.localName];
|
|
76
|
-
if (target.case != localName) {
|
|
77
|
-
delete target.value;
|
|
78
|
-
}
|
|
79
|
-
target.case = localName;
|
|
80
|
-
localName = "value";
|
|
81
|
-
}
|
|
82
|
-
switch (field.kind) {
|
|
83
|
-
case "scalar":
|
|
84
|
-
case "enum":
|
|
85
|
-
const scalarType =
|
|
86
|
-
field.kind == "enum" ? field_js_1.ScalarType.INT32 : field.T;
|
|
87
|
-
if (repeated) {
|
|
88
|
-
let arr = target[localName]; // safe to assume presence of array, oneof cannot contain repeated values
|
|
89
|
-
if (
|
|
90
|
-
wireType == binary_encoding_js_1.WireType.LengthDelimited &&
|
|
91
|
-
scalarType != field_js_1.ScalarType.STRING &&
|
|
92
|
-
scalarType != field_js_1.ScalarType.BYTES
|
|
93
|
-
) {
|
|
94
|
-
let e = reader.uint32() + reader.pos;
|
|
95
|
-
while (reader.pos < e) {
|
|
96
|
-
arr.push(readScalar(reader, scalarType));
|
|
41
|
+
return {
|
|
42
|
+
makeReadOptions,
|
|
43
|
+
makeWriteOptions,
|
|
44
|
+
listUnknownFields(message) {
|
|
45
|
+
return message[unknownFieldsSymbol] ?? [];
|
|
46
|
+
},
|
|
47
|
+
discardUnknownFields(message) {
|
|
48
|
+
delete message[unknownFieldsSymbol];
|
|
49
|
+
},
|
|
50
|
+
writeUnknownFields(message, writer) {
|
|
51
|
+
const m = message;
|
|
52
|
+
const c = m[unknownFieldsSymbol];
|
|
53
|
+
if (c) {
|
|
54
|
+
for (const f of c) {
|
|
55
|
+
writer.tag(f.no, f.wireType).raw(f.data);
|
|
97
56
|
}
|
|
98
|
-
} else {
|
|
99
|
-
arr.push(readScalar(reader, scalarType));
|
|
100
|
-
}
|
|
101
|
-
} else {
|
|
102
|
-
target[localName] = readScalar(reader, scalarType);
|
|
103
57
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const
|
|
107
|
-
if (
|
|
108
|
-
|
|
109
|
-
target[localName].push(
|
|
110
|
-
messageType.fromBinary(reader.bytes(), options)
|
|
111
|
-
);
|
|
112
|
-
} else {
|
|
113
|
-
if (target[localName] instanceof messageType) {
|
|
114
|
-
target[localName].fromBinary(reader.bytes(), options);
|
|
115
|
-
} else {
|
|
116
|
-
target[localName] = (0, field_wrapper_js_1.unwrapField)(
|
|
117
|
-
messageType,
|
|
118
|
-
messageType.fromBinary(reader.bytes(), options)
|
|
119
|
-
);
|
|
120
|
-
}
|
|
58
|
+
},
|
|
59
|
+
onUnknownField(message, no, wireType, data) {
|
|
60
|
+
const m = message;
|
|
61
|
+
if (!Array.isArray(m[unknownFieldsSymbol])) {
|
|
62
|
+
m[unknownFieldsSymbol] = [];
|
|
121
63
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
64
|
+
m[unknownFieldsSymbol].push({ no, wireType, data });
|
|
65
|
+
},
|
|
66
|
+
readMessage(message, reader, length, options) {
|
|
67
|
+
const type = message.getType();
|
|
68
|
+
const end = length === undefined ? reader.len : reader.pos + length;
|
|
69
|
+
while (reader.pos < end) {
|
|
70
|
+
const [fieldNo, wireType] = reader.tag(), field = type.fields.find(fieldNo);
|
|
71
|
+
if (!field) {
|
|
72
|
+
const data = reader.skip(wireType);
|
|
73
|
+
if (options.readUnknownFields) {
|
|
74
|
+
this.onUnknownField(message, fieldNo, wireType, data);
|
|
75
|
+
}
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
let target = message, repeated = field.repeated, localName = field.localName;
|
|
79
|
+
if (field.oneof) {
|
|
80
|
+
target = target[field.oneof.localName];
|
|
81
|
+
if (target.case != localName) {
|
|
82
|
+
delete target.value;
|
|
83
|
+
}
|
|
84
|
+
target.case = localName;
|
|
85
|
+
localName = "value";
|
|
86
|
+
}
|
|
87
|
+
switch (field.kind) {
|
|
88
|
+
case "scalar":
|
|
89
|
+
case "enum":
|
|
90
|
+
const scalarType = field.kind == "enum" ? field_js_1.ScalarType.INT32 : field.T;
|
|
91
|
+
if (repeated) {
|
|
92
|
+
let arr = target[localName]; // safe to assume presence of array, oneof cannot contain repeated values
|
|
93
|
+
if (wireType == binary_encoding_js_1.WireType.LengthDelimited &&
|
|
94
|
+
scalarType != field_js_1.ScalarType.STRING &&
|
|
95
|
+
scalarType != field_js_1.ScalarType.BYTES) {
|
|
96
|
+
let e = reader.uint32() + reader.pos;
|
|
97
|
+
while (reader.pos < e) {
|
|
98
|
+
arr.push(readScalar(reader, scalarType));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
arr.push(readScalar(reader, scalarType));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
target[localName] = readScalar(reader, scalarType);
|
|
107
|
+
}
|
|
108
|
+
break;
|
|
109
|
+
case "message":
|
|
110
|
+
const messageType = field.T;
|
|
111
|
+
if (repeated) {
|
|
112
|
+
// safe to assume presence of array, oneof cannot contain repeated values
|
|
113
|
+
target[localName].push(messageType.fromBinary(reader.bytes(), options));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
if (target[localName] instanceof messageType) {
|
|
117
|
+
target[localName].fromBinary(reader.bytes(), options);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
target[localName] = (0, field_wrapper_js_1.unwrapField)(messageType, messageType.fromBinary(reader.bytes(), options));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
break;
|
|
124
|
+
case "map":
|
|
125
|
+
let [mapKey, mapVal] = readMapEntry(field, reader, options);
|
|
126
|
+
// safe to assume presence of map object, oneof cannot contain repeated values
|
|
127
|
+
target[localName][mapKey] = mapVal;
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
};
|
|
132
133
|
}
|
|
133
134
|
exports.makeBinaryFormatCommon = makeBinaryFormatCommon;
|
|
134
135
|
// Read a map field, expecting key field = 1, value field = 2
|
|
135
136
|
function readMapEntry(field, reader, options) {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
137
|
+
const length = reader.uint32(), end = reader.pos + length;
|
|
138
|
+
let key, val;
|
|
139
|
+
while (reader.pos < end) {
|
|
140
|
+
let [fieldNo] = reader.tag();
|
|
141
|
+
switch (fieldNo) {
|
|
142
|
+
case 1:
|
|
143
|
+
key = readScalar(reader, field.K);
|
|
144
|
+
break;
|
|
145
|
+
case 2:
|
|
146
|
+
switch (field.V.kind) {
|
|
147
|
+
case "scalar":
|
|
148
|
+
val = readScalar(reader, field.V.T);
|
|
149
|
+
break;
|
|
150
|
+
case "enum":
|
|
151
|
+
val = reader.int32();
|
|
152
|
+
break;
|
|
153
|
+
case "message":
|
|
154
|
+
val = field.V.T.fromBinary(reader.bytes(), options);
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
break;
|
|
156
158
|
}
|
|
157
|
-
break;
|
|
158
159
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
key = key.toString();
|
|
166
|
-
}
|
|
167
|
-
if (val === undefined) {
|
|
168
|
-
switch (field.V.kind) {
|
|
169
|
-
case "scalar":
|
|
170
|
-
val = (0, scalars_js_1.scalarDefaultValue)(field.V.T);
|
|
171
|
-
break;
|
|
172
|
-
case "enum":
|
|
173
|
-
val = 0;
|
|
174
|
-
break;
|
|
175
|
-
case "message":
|
|
176
|
-
val = new field.V.T();
|
|
177
|
-
break;
|
|
160
|
+
if (key === undefined) {
|
|
161
|
+
let keyRaw = (0, scalars_js_1.scalarDefaultValue)(field.K);
|
|
162
|
+
key =
|
|
163
|
+
field.K == field_js_1.ScalarType.BOOL
|
|
164
|
+
? keyRaw.toString()
|
|
165
|
+
: keyRaw;
|
|
178
166
|
}
|
|
179
|
-
|
|
180
|
-
|
|
167
|
+
if (typeof key != "string" && typeof key != "number") {
|
|
168
|
+
key = key.toString();
|
|
169
|
+
}
|
|
170
|
+
if (val === undefined) {
|
|
171
|
+
switch (field.V.kind) {
|
|
172
|
+
case "scalar":
|
|
173
|
+
val = (0, scalars_js_1.scalarDefaultValue)(field.V.T);
|
|
174
|
+
break;
|
|
175
|
+
case "enum":
|
|
176
|
+
val = 0;
|
|
177
|
+
break;
|
|
178
|
+
case "message":
|
|
179
|
+
val = new field.V.T();
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return [key, val];
|
|
181
184
|
}
|
|
182
185
|
function readScalar(reader, type) {
|
|
183
|
-
|
|
184
|
-
|
|
186
|
+
let [, method] = (0, scalars_js_1.scalarTypeInfo)(type);
|
|
187
|
+
return reader[method]();
|
|
185
188
|
}
|
|
186
189
|
function writeMapEntry(writer, options, field, key, value) {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
190
|
+
writer.tag(field.no, binary_encoding_js_1.WireType.LengthDelimited);
|
|
191
|
+
writer.fork();
|
|
192
|
+
// javascript only allows number or string for object properties
|
|
193
|
+
// we convert from our representation to the protobuf type
|
|
194
|
+
let keyValue = key;
|
|
195
|
+
// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- we deliberately handle just the special cases for map keys
|
|
196
|
+
switch (field.K) {
|
|
197
|
+
case field_js_1.ScalarType.INT32:
|
|
198
|
+
case field_js_1.ScalarType.FIXED32:
|
|
199
|
+
case field_js_1.ScalarType.UINT32:
|
|
200
|
+
case field_js_1.ScalarType.SFIXED32:
|
|
201
|
+
case field_js_1.ScalarType.SINT32:
|
|
202
|
+
keyValue = Number.parseInt(key);
|
|
203
|
+
break;
|
|
204
|
+
case field_js_1.ScalarType.BOOL:
|
|
205
|
+
(0, assert_js_1.assert)(key == "true" || key == "false");
|
|
206
|
+
keyValue = key == "true";
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
// write key, expecting key field number = 1
|
|
210
|
+
writeScalar(writer, field.K, 1, keyValue, true);
|
|
211
|
+
// write value, expecting value field number = 2
|
|
212
|
+
switch (field.V.kind) {
|
|
213
|
+
case "scalar":
|
|
214
|
+
writeScalar(writer, field.V.T, 2, value, true);
|
|
215
|
+
break;
|
|
216
|
+
case "enum":
|
|
217
|
+
writeScalar(writer, field_js_1.ScalarType.INT32, 2, value, true);
|
|
218
|
+
break;
|
|
219
|
+
case "message":
|
|
220
|
+
writeMessageField(writer, options, field.V.T, 2, value);
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
writer.join();
|
|
221
224
|
}
|
|
222
225
|
exports.writeMapEntry = writeMapEntry;
|
|
223
226
|
function writeMessageField(writer, options, type, fieldNo, value) {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
227
|
+
if (value !== undefined) {
|
|
228
|
+
const message = (0, field_wrapper_js_1.wrapField)(type, value);
|
|
229
|
+
writer
|
|
230
|
+
.tag(fieldNo, binary_encoding_js_1.WireType.LengthDelimited)
|
|
231
|
+
.bytes(message.toBinary(options));
|
|
232
|
+
}
|
|
230
233
|
}
|
|
231
234
|
exports.writeMessageField = writeMessageField;
|
|
232
235
|
function writeScalar(writer, type, fieldNo, value, emitIntrinsicDefault) {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
if (!isIntrinsicDefault || emitIntrinsicDefault) {
|
|
238
|
-
writer.tag(fieldNo, wireType)[method](value);
|
|
239
|
-
}
|
|
236
|
+
let [wireType, method, isIntrinsicDefault] = (0, scalars_js_1.scalarTypeInfo)(type, value);
|
|
237
|
+
if (!isIntrinsicDefault || emitIntrinsicDefault) {
|
|
238
|
+
writer.tag(fieldNo, wireType)[method](value);
|
|
239
|
+
}
|
|
240
240
|
}
|
|
241
241
|
exports.writeScalar = writeScalar;
|
|
242
242
|
function writePacked(writer, type, fieldNo, value) {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
243
|
+
if (!value.length) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
writer.tag(fieldNo, binary_encoding_js_1.WireType.LengthDelimited).fork();
|
|
247
|
+
let [, method] = (0, scalars_js_1.scalarTypeInfo)(type);
|
|
248
|
+
for (let i = 0; i < value.length; i++) {
|
|
249
|
+
writer[method](value[i]);
|
|
250
|
+
}
|
|
251
|
+
writer.join();
|
|
252
252
|
}
|
|
253
253
|
exports.writePacked = writePacked;
|
|
@@ -1,120 +1,99 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
// Copyright 2021-2022 Buf Technologies, Inc.
|
|
3
|
+
//
|
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
// you may not use this file except in compliance with the License.
|
|
6
|
+
// You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
// See the License for the specific language governing permissions and
|
|
14
|
+
// limitations under the License.
|
|
2
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
16
|
exports.makeBinaryFormatProto2 = void 0;
|
|
4
17
|
const field_js_1 = require("../field.js");
|
|
5
18
|
const binary_format_common_js_1 = require("./binary-format-common.js");
|
|
6
19
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions, no-case-declarations, prefer-const */
|
|
7
20
|
function makeBinaryFormatProto2() {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
return {
|
|
22
|
+
...(0, binary_format_common_js_1.makeBinaryFormatCommon)(),
|
|
23
|
+
writeMessage(message, writer, options) {
|
|
24
|
+
const type = message.getType();
|
|
25
|
+
let field;
|
|
26
|
+
try {
|
|
27
|
+
for (field of type.fields.byNumber()) {
|
|
28
|
+
let value, // this will be our field value, whether it is member of a oneof or not
|
|
29
|
+
repeated = field.repeated, localName = field.localName;
|
|
30
|
+
if (field.oneof) {
|
|
31
|
+
const oneof = message[field.oneof.localName];
|
|
32
|
+
if (oneof.case !== localName) {
|
|
33
|
+
continue; // field is not selected, skip
|
|
34
|
+
}
|
|
35
|
+
value = oneof.value;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
value = message[localName];
|
|
39
|
+
// In contrast to proto3, we raise an error if a non-optional (proto2 required)
|
|
40
|
+
// field is missing a value.
|
|
41
|
+
if (value === undefined && !field.oneof && !field.opt) {
|
|
42
|
+
throw new Error(`cannot encode field ${type.typeName}.${field.name} to JSON: required field not set`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
switch (field.kind) {
|
|
46
|
+
case "scalar":
|
|
47
|
+
case "enum":
|
|
48
|
+
let scalarType = field.kind == "enum" ? field_js_1.ScalarType.INT32 : field.T;
|
|
49
|
+
if (repeated) {
|
|
50
|
+
if (field.packed) {
|
|
51
|
+
(0, binary_format_common_js_1.writePacked)(writer, scalarType, field.no, value);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
for (const item of value) {
|
|
55
|
+
(0, binary_format_common_js_1.writeScalar)(writer, scalarType, field.no, item, true);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
if (value !== undefined) {
|
|
61
|
+
// In contrast to proto3, we do not skip intrinsic default values.
|
|
62
|
+
// Explicit default values are not special cased either.
|
|
63
|
+
(0, binary_format_common_js_1.writeScalar)(writer, scalarType, field.no, value, true);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
case "message":
|
|
68
|
+
if (repeated) {
|
|
69
|
+
for (const item of value) {
|
|
70
|
+
(0, binary_format_common_js_1.writeMessageField)(writer, options, field.T, field.no, item);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
(0, binary_format_common_js_1.writeMessageField)(writer, options, field.T, field.no, value);
|
|
75
|
+
}
|
|
76
|
+
break;
|
|
77
|
+
case "map":
|
|
78
|
+
for (const [key, val] of Object.entries(value)) {
|
|
79
|
+
(0, binary_format_common_js_1.writeMapEntry)(writer, options, field, key, val);
|
|
80
|
+
}
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
22
84
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
throw new Error(
|
|
30
|
-
`cannot encode field ${type.typeName}.${field.name} to JSON: required field not set`
|
|
31
|
-
);
|
|
85
|
+
catch (e) {
|
|
86
|
+
let m = field
|
|
87
|
+
? `cannot encode field ${type.typeName}.${field?.name} to binary`
|
|
88
|
+
: `cannot encode message ${type.typeName} to binary`;
|
|
89
|
+
let r = e instanceof Error ? e.message : String(e);
|
|
90
|
+
throw new Error(m + (r.length > 0 ? `: ${r}` : ""));
|
|
32
91
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (repeated) {
|
|
40
|
-
if (field.packed) {
|
|
41
|
-
(0, binary_format_common_js_1.writePacked)(
|
|
42
|
-
writer,
|
|
43
|
-
scalarType,
|
|
44
|
-
field.no,
|
|
45
|
-
value
|
|
46
|
-
);
|
|
47
|
-
} else {
|
|
48
|
-
for (const item of value) {
|
|
49
|
-
(0, binary_format_common_js_1.writeScalar)(
|
|
50
|
-
writer,
|
|
51
|
-
scalarType,
|
|
52
|
-
field.no,
|
|
53
|
-
item,
|
|
54
|
-
true
|
|
55
|
-
);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
} else {
|
|
59
|
-
if (value !== undefined) {
|
|
60
|
-
// In contrast to proto3, we do not skip intrinsic default values.
|
|
61
|
-
// Explicit default values are not special cased either.
|
|
62
|
-
(0, binary_format_common_js_1.writeScalar)(
|
|
63
|
-
writer,
|
|
64
|
-
scalarType,
|
|
65
|
-
field.no,
|
|
66
|
-
value,
|
|
67
|
-
true
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
break;
|
|
72
|
-
case "message":
|
|
73
|
-
if (repeated) {
|
|
74
|
-
for (const item of value) {
|
|
75
|
-
(0, binary_format_common_js_1.writeMessageField)(
|
|
76
|
-
writer,
|
|
77
|
-
options,
|
|
78
|
-
field.T,
|
|
79
|
-
field.no,
|
|
80
|
-
item
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
} else {
|
|
84
|
-
(0, binary_format_common_js_1.writeMessageField)(
|
|
85
|
-
writer,
|
|
86
|
-
options,
|
|
87
|
-
field.T,
|
|
88
|
-
field.no,
|
|
89
|
-
value
|
|
90
|
-
);
|
|
91
|
-
}
|
|
92
|
-
break;
|
|
93
|
-
case "map":
|
|
94
|
-
for (const [key, val] of Object.entries(value)) {
|
|
95
|
-
(0, binary_format_common_js_1.writeMapEntry)(
|
|
96
|
-
writer,
|
|
97
|
-
options,
|
|
98
|
-
field,
|
|
99
|
-
key,
|
|
100
|
-
val
|
|
101
|
-
);
|
|
102
|
-
}
|
|
103
|
-
break;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
} catch (e) {
|
|
107
|
-
let m = field
|
|
108
|
-
? `cannot encode field ${type.typeName}.${field?.name} to binary`
|
|
109
|
-
: `cannot encode message ${type.typeName} to binary`;
|
|
110
|
-
let r = e instanceof Error ? e.message : String(e);
|
|
111
|
-
throw new Error(m + (r.length > 0 ? `: ${r}` : ""));
|
|
112
|
-
}
|
|
113
|
-
if (options.writeUnknownFields) {
|
|
114
|
-
this.writeUnknownFields(message, writer);
|
|
115
|
-
}
|
|
116
|
-
return writer;
|
|
117
|
-
},
|
|
118
|
-
};
|
|
92
|
+
if (options.writeUnknownFields) {
|
|
93
|
+
this.writeUnknownFields(message, writer);
|
|
94
|
+
}
|
|
95
|
+
return writer;
|
|
96
|
+
},
|
|
97
|
+
};
|
|
119
98
|
}
|
|
120
99
|
exports.makeBinaryFormatProto2 = makeBinaryFormatProto2;
|