@bufbuild/protobuf 0.0.1-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/cjs/binary-encoding.js +434 -0
- package/dist/cjs/binary-format.js +2 -0
- package/dist/cjs/descriptor-registry.js +518 -0
- package/dist/cjs/descriptor-set.js +557 -0
- package/dist/cjs/enum.js +2 -0
- package/dist/cjs/field-list.js +2 -0
- package/dist/cjs/field.js +40 -0
- package/dist/cjs/google/protobuf/any_pb.js +280 -0
- package/dist/cjs/google/protobuf/api_pb.js +383 -0
- package/dist/cjs/google/protobuf/compiler/plugin_pb.js +334 -0
- package/dist/cjs/google/protobuf/descriptor_pb.js +2311 -0
- package/dist/cjs/google/protobuf/duration_pb.js +201 -0
- package/dist/cjs/google/protobuf/empty_pb.js +72 -0
- package/dist/cjs/google/protobuf/field_mask_pb.js +347 -0
- package/dist/cjs/google/protobuf/source_context_pb.js +74 -0
- package/dist/cjs/google/protobuf/struct_pb.js +288 -0
- package/dist/cjs/google/protobuf/timestamp_pb.js +271 -0
- package/dist/cjs/google/protobuf/type_pb.js +613 -0
- package/dist/cjs/google/protobuf/wrappers_pb.js +658 -0
- package/dist/cjs/google/varint.js +280 -0
- package/dist/cjs/index.js +148 -0
- package/dist/cjs/json-format.js +2 -0
- package/dist/cjs/message-type.js +2 -0
- package/dist/cjs/message.js +98 -0
- package/dist/cjs/private/assert.js +52 -0
- package/dist/cjs/private/base64.js +118 -0
- package/dist/cjs/private/binary-format-common.js +253 -0
- package/dist/cjs/private/binary-format-proto2.js +120 -0
- package/dist/cjs/private/binary-format-proto3.js +102 -0
- package/dist/cjs/private/enum.js +70 -0
- package/dist/cjs/private/field-list.js +62 -0
- package/dist/cjs/private/field-wrapper.js +25 -0
- package/dist/cjs/private/field.js +34 -0
- package/dist/cjs/private/json-format-common.js +482 -0
- package/dist/cjs/private/json-format-proto2.js +100 -0
- package/dist/cjs/private/json-format-proto3.js +103 -0
- package/dist/cjs/private/message-type.js +37 -0
- package/dist/cjs/private/names.js +101 -0
- package/dist/cjs/private/options-map.js +2 -0
- package/dist/cjs/private/proto-runtime.js +24 -0
- package/dist/cjs/private/scalars.js +138 -0
- package/dist/cjs/private/util-common.js +229 -0
- package/dist/cjs/private/util.js +2 -0
- package/dist/cjs/proto-int64.js +121 -0
- package/dist/cjs/proto2.js +86 -0
- package/dist/cjs/proto3.js +99 -0
- package/dist/cjs/service-type.js +43 -0
- package/dist/cjs/type-registry.js +42 -0
- package/dist/esm/binary-encoding.js +434 -0
- package/dist/esm/binary-format.js +1 -0
- package/dist/esm/descriptor-registry.js +521 -0
- package/dist/esm/descriptor-set.js +517 -0
- package/dist/esm/enum.js +1 -0
- package/dist/esm/field-list.js +1 -0
- package/dist/esm/field.js +37 -0
- package/dist/esm/google/protobuf/any_pb.js +276 -0
- package/dist/esm/google/protobuf/api_pb.js +350 -0
- package/dist/esm/google/protobuf/compiler/plugin_pb.js +318 -0
- package/dist/esm/google/protobuf/descriptor_pb.js +2213 -0
- package/dist/esm/google/protobuf/duration_pb.js +197 -0
- package/dist/esm/google/protobuf/empty_pb.js +68 -0
- package/dist/esm/google/protobuf/field_mask_pb.js +343 -0
- package/dist/esm/google/protobuf/source_context_pb.js +70 -0
- package/dist/esm/google/protobuf/struct_pb.js +282 -0
- package/dist/esm/google/protobuf/timestamp_pb.js +267 -0
- package/dist/esm/google/protobuf/type_pb.js +569 -0
- package/dist/esm/google/protobuf/wrappers_pb.js +574 -0
- package/dist/esm/google/varint.js +265 -0
- package/dist/esm/index.js +24 -0
- package/dist/esm/json-format.js +1 -0
- package/dist/esm/message-type.js +1 -0
- package/dist/esm/message.js +94 -0
- package/dist/esm/private/assert.js +41 -0
- package/dist/esm/private/base64.js +113 -0
- package/dist/esm/private/binary-format-common.js +243 -0
- package/dist/esm/private/binary-format-proto2.js +87 -0
- package/dist/esm/private/binary-format-proto3.js +74 -0
- package/dist/esm/private/enum.js +64 -0
- package/dist/esm/private/field-list.js +58 -0
- package/dist/esm/private/field-wrapper.js +20 -0
- package/dist/esm/private/field.js +27 -0
- package/dist/esm/private/json-format-common.js +473 -0
- package/dist/esm/private/json-format-proto2.js +90 -0
- package/dist/esm/private/json-format-proto3.js +89 -0
- package/dist/esm/private/message-type.js +33 -0
- package/dist/esm/private/names.js +90 -0
- package/dist/esm/private/options-map.js +1 -0
- package/dist/esm/private/proto-runtime.js +15 -0
- package/dist/esm/private/scalars.js +129 -0
- package/dist/esm/private/util-common.js +207 -0
- package/dist/esm/private/util.js +1 -0
- package/dist/esm/proto-int64.js +118 -0
- package/dist/esm/proto2.js +77 -0
- package/dist/esm/proto3.js +90 -0
- package/dist/esm/service-type.js +37 -0
- package/dist/esm/type-registry.js +38 -0
- package/dist/types/binary-encoding.d.ts +421 -0
- package/dist/types/binary-format.d.ts +109 -0
- package/dist/types/descriptor-registry.d.ts +42 -0
- package/dist/types/descriptor-set.d.ts +171 -0
- package/dist/types/enum.d.ts +31 -0
- package/dist/types/field-list.d.ts +27 -0
- package/dist/types/field.d.ts +295 -0
- package/dist/types/google/protobuf/any_pb.d.ts +167 -0
- package/dist/types/google/protobuf/api_pb.d.ts +296 -0
- package/dist/types/google/protobuf/compiler/plugin_pb.d.ts +294 -0
- package/dist/types/google/protobuf/descriptor_pb.d.ts +1959 -0
- package/dist/types/google/protobuf/duration_pb.d.ts +117 -0
- package/dist/types/google/protobuf/empty_pb.d.ts +44 -0
- package/dist/types/google/protobuf/field_mask_pb.d.ts +243 -0
- package/dist/types/google/protobuf/source_context_pb.d.ts +44 -0
- package/dist/types/google/protobuf/struct_pb.d.ts +205 -0
- package/dist/types/google/protobuf/timestamp_pb.d.ts +151 -0
- package/dist/types/google/protobuf/type_pb.d.ts +482 -0
- package/dist/types/google/protobuf/wrappers_pb.d.ts +379 -0
- package/dist/types/google/varint.d.ts +65 -0
- package/dist/types/index.d.ts +53 -0
- package/dist/types/json-format.d.ts +129 -0
- package/dist/types/message-type.d.ts +58 -0
- package/dist/types/message.d.ts +124 -0
- package/dist/types/private/assert.d.ts +19 -0
- package/dist/types/private/base64.d.ts +18 -0
- package/dist/types/private/binary-format-common.d.ts +38 -0
- package/dist/types/private/binary-format-proto2.d.ts +2 -0
- package/dist/types/private/binary-format-proto3.d.ts +2 -0
- package/dist/types/private/enum.d.ts +29 -0
- package/dist/types/private/field-list.d.ts +25 -0
- package/dist/types/private/field-wrapper.d.ts +27 -0
- package/dist/types/private/field.d.ts +15 -0
- package/dist/types/private/json-format-common.d.ts +30 -0
- package/dist/types/private/json-format-proto2.d.ts +2 -0
- package/dist/types/private/json-format-proto3.d.ts +2 -0
- package/dist/types/private/message-type.d.ts +15 -0
- package/dist/types/private/names.d.ts +19 -0
- package/dist/types/private/options-map.d.ts +7 -0
- package/dist/types/private/proto-runtime.d.ts +55 -0
- package/dist/types/private/scalars.d.ts +33 -0
- package/dist/types/private/util-common.d.ts +5 -0
- package/dist/types/private/util.d.ts +55 -0
- package/dist/types/proto-int64.d.ts +94 -0
- package/dist/types/proto2.d.ts +4 -0
- package/dist/types/proto3.d.ts +4 -0
- package/dist/types/service-type.d.ts +118 -0
- package/dist/types/type-registry.d.ts +37 -0
- package/package.json +31 -0
|
@@ -0,0 +1,521 @@
|
|
|
1
|
+
import { assert } from "./private/assert.js";
|
|
2
|
+
import { proto3 } from "./proto3.js";
|
|
3
|
+
import { proto2 } from "./proto2.js";
|
|
4
|
+
import { ScalarType } from "./field.js";
|
|
5
|
+
import { DescriptorSet } from "./descriptor-set.js";
|
|
6
|
+
import { protoInt64 } from "./proto-int64.js";
|
|
7
|
+
import { makeMethodName } from "./private/names.js";
|
|
8
|
+
import { Timestamp } from "./google/protobuf/timestamp_pb.js";
|
|
9
|
+
import { Duration } from "./google/protobuf/duration_pb.js";
|
|
10
|
+
import { Any } from "./google/protobuf/any_pb.js";
|
|
11
|
+
import { Empty } from "./google/protobuf/empty_pb.js";
|
|
12
|
+
import { FieldMask } from "./google/protobuf/field_mask_pb.js";
|
|
13
|
+
import {
|
|
14
|
+
ListValue,
|
|
15
|
+
NullValue,
|
|
16
|
+
Struct,
|
|
17
|
+
Value,
|
|
18
|
+
} from "./google/protobuf/struct_pb.js";
|
|
19
|
+
import { getEnumType } from "./private/enum.js";
|
|
20
|
+
import {
|
|
21
|
+
BoolValue,
|
|
22
|
+
BytesValue,
|
|
23
|
+
DoubleValue,
|
|
24
|
+
FloatValue,
|
|
25
|
+
Int32Value,
|
|
26
|
+
Int64Value,
|
|
27
|
+
StringValue,
|
|
28
|
+
UInt32Value,
|
|
29
|
+
UInt64Value,
|
|
30
|
+
} from "./google/protobuf/wrappers_pb.js";
|
|
31
|
+
// well-known message types with specialized JSON representation
|
|
32
|
+
const wkMessages = [
|
|
33
|
+
Any,
|
|
34
|
+
Duration,
|
|
35
|
+
Empty,
|
|
36
|
+
FieldMask,
|
|
37
|
+
Struct,
|
|
38
|
+
Value,
|
|
39
|
+
ListValue,
|
|
40
|
+
Timestamp,
|
|
41
|
+
Duration,
|
|
42
|
+
DoubleValue,
|
|
43
|
+
FloatValue,
|
|
44
|
+
Int64Value,
|
|
45
|
+
Int32Value,
|
|
46
|
+
UInt32Value,
|
|
47
|
+
UInt64Value,
|
|
48
|
+
BoolValue,
|
|
49
|
+
StringValue,
|
|
50
|
+
BytesValue,
|
|
51
|
+
];
|
|
52
|
+
// well-known enum types with specialized JSON representation
|
|
53
|
+
const wkEnums = [getEnumType(NullValue)];
|
|
54
|
+
/**
|
|
55
|
+
* DescriptorRegistry is a type registry that dynamically creates types
|
|
56
|
+
* from a set of google.protobuf.FileDescriptorProto.
|
|
57
|
+
*
|
|
58
|
+
* By default, all well-known types with a specialized JSON representation
|
|
59
|
+
* are replaced with their generated counterpart in this package.
|
|
60
|
+
*/
|
|
61
|
+
export class DescriptorRegistry {
|
|
62
|
+
constructor(descriptorSet, replaceWkt = true) {
|
|
63
|
+
this.enums = {};
|
|
64
|
+
this.messages = {};
|
|
65
|
+
this.services = {};
|
|
66
|
+
this.ds = descriptorSet ?? new DescriptorSet();
|
|
67
|
+
if (replaceWkt) {
|
|
68
|
+
for (const mt of wkMessages) {
|
|
69
|
+
this.messages["." + mt.typeName] = mt;
|
|
70
|
+
}
|
|
71
|
+
for (const et of wkEnums) {
|
|
72
|
+
this.enums["." + et.typeName] = et;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* May raise an error on invalid descriptors.
|
|
78
|
+
*/
|
|
79
|
+
add(...files) {
|
|
80
|
+
this.ds.add(...files);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* May raise an error on invalid descriptors.
|
|
84
|
+
*/
|
|
85
|
+
findEnum(typeName) {
|
|
86
|
+
const protoTypeName = "." + typeName;
|
|
87
|
+
const existing = this.enums[protoTypeName];
|
|
88
|
+
if (existing) {
|
|
89
|
+
return existing;
|
|
90
|
+
}
|
|
91
|
+
const raw = this.ds.enums[protoTypeName];
|
|
92
|
+
if (!raw) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
const runtime = raw.file.syntax == "proto3" ? proto3 : proto2;
|
|
96
|
+
const type = runtime.makeEnumType(
|
|
97
|
+
typeName,
|
|
98
|
+
raw.values.map((u) => ({
|
|
99
|
+
no: u.number,
|
|
100
|
+
name: u.name,
|
|
101
|
+
})),
|
|
102
|
+
{}
|
|
103
|
+
);
|
|
104
|
+
this.enums[protoTypeName] = type;
|
|
105
|
+
return type;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* May raise an error on invalid descriptors.
|
|
109
|
+
*/
|
|
110
|
+
findMessage(typeName) {
|
|
111
|
+
const protoTypeName = "." + typeName;
|
|
112
|
+
const existing = this.messages[protoTypeName];
|
|
113
|
+
if (existing) {
|
|
114
|
+
return existing;
|
|
115
|
+
}
|
|
116
|
+
const raw = this.ds.messages[protoTypeName];
|
|
117
|
+
if (!raw) {
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
const runtime = raw.file.syntax == "proto3" ? proto3 : proto2;
|
|
121
|
+
const fields = [];
|
|
122
|
+
const type = runtime.makeMessageType(typeName, () => fields, {
|
|
123
|
+
localName: makeTypeLocalName(raw),
|
|
124
|
+
});
|
|
125
|
+
this.messages[protoTypeName] = type;
|
|
126
|
+
for (const field of raw.fields.map((f) => f.resolve(this.ds))) {
|
|
127
|
+
const fieldInfo = makeFieldInfo(field, this);
|
|
128
|
+
fields.push(fieldInfo);
|
|
129
|
+
}
|
|
130
|
+
return type;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* May raise an error on invalid descriptors.
|
|
134
|
+
*/
|
|
135
|
+
findService(typeName) {
|
|
136
|
+
const protoTypeName = "." + typeName;
|
|
137
|
+
const existing = this.services[protoTypeName];
|
|
138
|
+
if (existing) {
|
|
139
|
+
return existing;
|
|
140
|
+
}
|
|
141
|
+
const raw = this.ds.services[protoTypeName];
|
|
142
|
+
if (!raw) {
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
const methods = {};
|
|
146
|
+
for (const u of raw.methods) {
|
|
147
|
+
const it = this.findMessage(u.inputTypeName);
|
|
148
|
+
const ot = this.findMessage(u.outputTypeName);
|
|
149
|
+
assert(it, `message "${u.inputTypeName}" for ${u.toString()} not found`);
|
|
150
|
+
assert(
|
|
151
|
+
ot,
|
|
152
|
+
`output message "${u.outputTypeName}" for ${u.toString()} not found`
|
|
153
|
+
);
|
|
154
|
+
const m = {
|
|
155
|
+
name: u.name,
|
|
156
|
+
localName: makeMethodName(u.name),
|
|
157
|
+
I: it,
|
|
158
|
+
O: ot,
|
|
159
|
+
kind: u.kind,
|
|
160
|
+
idempotency: u.idempotency,
|
|
161
|
+
options: {},
|
|
162
|
+
};
|
|
163
|
+
methods[m.localName] = m;
|
|
164
|
+
}
|
|
165
|
+
return (this.services[protoTypeName] = {
|
|
166
|
+
typeName: raw.typeName,
|
|
167
|
+
methods,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function makeTypeLocalName(type) {
|
|
172
|
+
const typeName = type.typeName;
|
|
173
|
+
const packagePrefix = (type.file.proto.package ?? "") + ".";
|
|
174
|
+
if (!typeName.startsWith(packagePrefix)) {
|
|
175
|
+
return type.name;
|
|
176
|
+
}
|
|
177
|
+
return typeName.substring(packagePrefix.length).split(".").join("_");
|
|
178
|
+
}
|
|
179
|
+
function makeFieldInfo(field, resolver) {
|
|
180
|
+
if (field.map !== undefined) {
|
|
181
|
+
return makeMapFieldInfo(field, resolver);
|
|
182
|
+
}
|
|
183
|
+
if (field.message) {
|
|
184
|
+
return makeMessageFieldInfo(field, resolver);
|
|
185
|
+
}
|
|
186
|
+
const fi = field.enum
|
|
187
|
+
? makeEnumFieldInfo(field, resolver)
|
|
188
|
+
: makeScalarFieldInfo(field);
|
|
189
|
+
fi.default = parseDefaultValue(field);
|
|
190
|
+
return fi;
|
|
191
|
+
}
|
|
192
|
+
function makeMapFieldInfo(field, resolver) {
|
|
193
|
+
const base = {
|
|
194
|
+
kind: "map",
|
|
195
|
+
name: field.name,
|
|
196
|
+
no: field.number,
|
|
197
|
+
K: field.map.key,
|
|
198
|
+
};
|
|
199
|
+
if (field.map.value.message) {
|
|
200
|
+
const messageType = resolver.findMessage(field.map.value.message.typeName);
|
|
201
|
+
assert(
|
|
202
|
+
messageType,
|
|
203
|
+
`message "${
|
|
204
|
+
field.map.value.message.typeName
|
|
205
|
+
}" for ${field.toString()} not found`
|
|
206
|
+
);
|
|
207
|
+
return {
|
|
208
|
+
...base,
|
|
209
|
+
V: {
|
|
210
|
+
kind: "message",
|
|
211
|
+
T: messageType,
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
if (field.map.value.enum) {
|
|
216
|
+
const enumType = resolver.findEnum(field.map.value.enum.typeName);
|
|
217
|
+
assert(
|
|
218
|
+
enumType,
|
|
219
|
+
`enum "${
|
|
220
|
+
field.map.value.enum.typeName
|
|
221
|
+
}" for ${field.toString()} not found`
|
|
222
|
+
);
|
|
223
|
+
return {
|
|
224
|
+
...base,
|
|
225
|
+
V: {
|
|
226
|
+
kind: "enum",
|
|
227
|
+
T: enumType,
|
|
228
|
+
},
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
return {
|
|
232
|
+
...base,
|
|
233
|
+
V: {
|
|
234
|
+
kind: "scalar",
|
|
235
|
+
T: field.map.value.scalarType,
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
function makeScalarFieldInfo(field) {
|
|
240
|
+
const base = {
|
|
241
|
+
no: field.number,
|
|
242
|
+
name: field.name,
|
|
243
|
+
kind: "scalar",
|
|
244
|
+
T: field.scalarType,
|
|
245
|
+
};
|
|
246
|
+
if (field.repeated) {
|
|
247
|
+
return {
|
|
248
|
+
...base,
|
|
249
|
+
repeated: true,
|
|
250
|
+
packed: field.packed,
|
|
251
|
+
oneof: undefined,
|
|
252
|
+
T: field.scalarType,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
if (field.oneof) {
|
|
256
|
+
return {
|
|
257
|
+
...base,
|
|
258
|
+
oneof: field.oneof.name,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
if (field.optional) {
|
|
262
|
+
return {
|
|
263
|
+
...base,
|
|
264
|
+
opt: true,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
return base;
|
|
268
|
+
}
|
|
269
|
+
function makeMessageFieldInfo(field, resolver) {
|
|
270
|
+
const messageType = resolver.findMessage(field.message.typeName);
|
|
271
|
+
assert(
|
|
272
|
+
messageType,
|
|
273
|
+
`message "${field.message.typeName}" for ${field.toString()} not found`
|
|
274
|
+
);
|
|
275
|
+
const base = {
|
|
276
|
+
no: field.number,
|
|
277
|
+
name: field.name,
|
|
278
|
+
kind: "message",
|
|
279
|
+
T: messageType,
|
|
280
|
+
};
|
|
281
|
+
if (field.repeated) {
|
|
282
|
+
return {
|
|
283
|
+
...base,
|
|
284
|
+
repeated: true,
|
|
285
|
+
packed: field.packed,
|
|
286
|
+
oneof: undefined,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
if (field.oneof) {
|
|
290
|
+
return {
|
|
291
|
+
...base,
|
|
292
|
+
oneof: field.oneof.name,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
if (field.optional) {
|
|
296
|
+
return {
|
|
297
|
+
...base,
|
|
298
|
+
opt: true,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
return base;
|
|
302
|
+
}
|
|
303
|
+
function makeEnumFieldInfo(field, resolver) {
|
|
304
|
+
const enumType = resolver.findEnum(field.enum.typeName);
|
|
305
|
+
assert(
|
|
306
|
+
enumType,
|
|
307
|
+
`message "${field.enum.typeName}" for ${field.toString()} not found`
|
|
308
|
+
);
|
|
309
|
+
const base = {
|
|
310
|
+
no: field.number,
|
|
311
|
+
name: field.name,
|
|
312
|
+
kind: "enum",
|
|
313
|
+
T: enumType,
|
|
314
|
+
};
|
|
315
|
+
if (field.repeated) {
|
|
316
|
+
return {
|
|
317
|
+
...base,
|
|
318
|
+
repeated: true,
|
|
319
|
+
packed: field.packed,
|
|
320
|
+
oneof: undefined,
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
if (field.oneof) {
|
|
324
|
+
return {
|
|
325
|
+
...base,
|
|
326
|
+
oneof: field.oneof.name,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
if (field.optional) {
|
|
330
|
+
return {
|
|
331
|
+
...base,
|
|
332
|
+
opt: true,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
return base;
|
|
336
|
+
}
|
|
337
|
+
function parseDefaultValue(field) {
|
|
338
|
+
const d = field.proto.defaultValue;
|
|
339
|
+
if (d === undefined) {
|
|
340
|
+
return undefined;
|
|
341
|
+
}
|
|
342
|
+
if (field.enum) {
|
|
343
|
+
const enumValue = field.enum.values.find((v) => v.name === d);
|
|
344
|
+
assert(enumValue, `cannot parse ${field.toString()} default value: ${d}`);
|
|
345
|
+
return enumValue.number;
|
|
346
|
+
}
|
|
347
|
+
if (field.scalarType) {
|
|
348
|
+
switch (field.scalarType) {
|
|
349
|
+
case ScalarType.STRING:
|
|
350
|
+
return d;
|
|
351
|
+
case ScalarType.BYTES: {
|
|
352
|
+
const u = unescapeBytesDefaultValue(d);
|
|
353
|
+
if (u === false) {
|
|
354
|
+
throw new Error(
|
|
355
|
+
`cannot parse ${field.toString()} default value: ${d}`
|
|
356
|
+
);
|
|
357
|
+
}
|
|
358
|
+
return u;
|
|
359
|
+
}
|
|
360
|
+
case ScalarType.INT64:
|
|
361
|
+
case ScalarType.SFIXED64:
|
|
362
|
+
case ScalarType.SINT64:
|
|
363
|
+
return protoInt64.parse(d);
|
|
364
|
+
case ScalarType.UINT64:
|
|
365
|
+
case ScalarType.FIXED64:
|
|
366
|
+
return protoInt64.uParse(d);
|
|
367
|
+
case ScalarType.DOUBLE:
|
|
368
|
+
case ScalarType.FLOAT:
|
|
369
|
+
switch (d) {
|
|
370
|
+
case "inf":
|
|
371
|
+
return Number.POSITIVE_INFINITY;
|
|
372
|
+
case "-inf":
|
|
373
|
+
return Number.NEGATIVE_INFINITY;
|
|
374
|
+
case "nan":
|
|
375
|
+
return Number.NaN;
|
|
376
|
+
default:
|
|
377
|
+
return parseFloat(d);
|
|
378
|
+
}
|
|
379
|
+
case ScalarType.BOOL:
|
|
380
|
+
return Boolean(d);
|
|
381
|
+
case ScalarType.INT32:
|
|
382
|
+
case ScalarType.UINT32:
|
|
383
|
+
case ScalarType.SINT32:
|
|
384
|
+
case ScalarType.FIXED32:
|
|
385
|
+
case ScalarType.SFIXED32:
|
|
386
|
+
return parseInt(d, 10);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return undefined;
|
|
390
|
+
}
|
|
391
|
+
// unescapeBytesDefaultValue parses a text-encoded default value (proto2) of a
|
|
392
|
+
// BYTES field.
|
|
393
|
+
function unescapeBytesDefaultValue(str) {
|
|
394
|
+
const b = [];
|
|
395
|
+
const input = {
|
|
396
|
+
tail: str,
|
|
397
|
+
c: "",
|
|
398
|
+
next() {
|
|
399
|
+
if (this.tail.length == 0) {
|
|
400
|
+
return false;
|
|
401
|
+
}
|
|
402
|
+
this.c = this.tail[0];
|
|
403
|
+
this.tail = this.tail.substring(1);
|
|
404
|
+
return true;
|
|
405
|
+
},
|
|
406
|
+
take(n) {
|
|
407
|
+
if (this.tail.length >= n) {
|
|
408
|
+
const r = this.tail.substring(0, n);
|
|
409
|
+
this.tail = this.tail.substring(n);
|
|
410
|
+
return r;
|
|
411
|
+
}
|
|
412
|
+
return false;
|
|
413
|
+
},
|
|
414
|
+
};
|
|
415
|
+
while (input.next()) {
|
|
416
|
+
switch (input.c) {
|
|
417
|
+
case "\\":
|
|
418
|
+
if (input.next()) {
|
|
419
|
+
switch (input.c) {
|
|
420
|
+
case "\\":
|
|
421
|
+
b.push(input.c.charCodeAt(0));
|
|
422
|
+
break;
|
|
423
|
+
case "b":
|
|
424
|
+
b.push(0x08);
|
|
425
|
+
break;
|
|
426
|
+
case "f":
|
|
427
|
+
b.push(0x0c);
|
|
428
|
+
break;
|
|
429
|
+
case "n":
|
|
430
|
+
b.push(0x0a);
|
|
431
|
+
break;
|
|
432
|
+
case "r":
|
|
433
|
+
b.push(0x0d);
|
|
434
|
+
break;
|
|
435
|
+
case "t":
|
|
436
|
+
b.push(0x09);
|
|
437
|
+
break;
|
|
438
|
+
case "v":
|
|
439
|
+
b.push(0x0b);
|
|
440
|
+
break;
|
|
441
|
+
case "0":
|
|
442
|
+
case "1":
|
|
443
|
+
case "2":
|
|
444
|
+
case "3":
|
|
445
|
+
case "4":
|
|
446
|
+
case "5":
|
|
447
|
+
case "6":
|
|
448
|
+
case "7": {
|
|
449
|
+
const s = input.c;
|
|
450
|
+
const t = input.take(2);
|
|
451
|
+
if (t === false) {
|
|
452
|
+
return false;
|
|
453
|
+
}
|
|
454
|
+
const n = parseInt(s + t, 8);
|
|
455
|
+
if (isNaN(n)) {
|
|
456
|
+
return false;
|
|
457
|
+
}
|
|
458
|
+
b.push(n);
|
|
459
|
+
break;
|
|
460
|
+
}
|
|
461
|
+
case "x": {
|
|
462
|
+
const s = input.c;
|
|
463
|
+
const t = input.take(2);
|
|
464
|
+
if (t === false) {
|
|
465
|
+
return false;
|
|
466
|
+
}
|
|
467
|
+
const n = parseInt(s + t, 16);
|
|
468
|
+
if (isNaN(n)) {
|
|
469
|
+
return false;
|
|
470
|
+
}
|
|
471
|
+
b.push(n);
|
|
472
|
+
break;
|
|
473
|
+
}
|
|
474
|
+
case "u": {
|
|
475
|
+
const s = input.c;
|
|
476
|
+
const t = input.take(4);
|
|
477
|
+
if (t === false) {
|
|
478
|
+
return false;
|
|
479
|
+
}
|
|
480
|
+
const n = parseInt(s + t, 16);
|
|
481
|
+
if (isNaN(n)) {
|
|
482
|
+
return false;
|
|
483
|
+
}
|
|
484
|
+
const chunk = new Uint8Array(4);
|
|
485
|
+
const view = new DataView(chunk.buffer);
|
|
486
|
+
view.setInt32(0, n, true);
|
|
487
|
+
b.push(chunk[0], chunk[1], chunk[2], chunk[3]);
|
|
488
|
+
break;
|
|
489
|
+
}
|
|
490
|
+
case "U": {
|
|
491
|
+
const s = input.c;
|
|
492
|
+
const t = input.take(8);
|
|
493
|
+
if (t === false) {
|
|
494
|
+
return false;
|
|
495
|
+
}
|
|
496
|
+
const tc = protoInt64.uEnc(s + t);
|
|
497
|
+
const chunk = new Uint8Array(8);
|
|
498
|
+
const view = new DataView(chunk.buffer);
|
|
499
|
+
view.setInt32(0, tc.lo, true);
|
|
500
|
+
view.setInt32(4, tc.hi, true);
|
|
501
|
+
b.push(
|
|
502
|
+
chunk[0],
|
|
503
|
+
chunk[1],
|
|
504
|
+
chunk[2],
|
|
505
|
+
chunk[3],
|
|
506
|
+
chunk[4],
|
|
507
|
+
chunk[5],
|
|
508
|
+
chunk[6],
|
|
509
|
+
chunk[7]
|
|
510
|
+
);
|
|
511
|
+
break;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
break;
|
|
516
|
+
default:
|
|
517
|
+
b.push(input.c.charCodeAt(0));
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
return new Uint8Array(b);
|
|
521
|
+
}
|