protobufjs 8.6.1 → 8.6.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/LICENSE +39 -39
- package/README.md +441 -441
- package/dist/light/protobuf.js +8455 -8455
- 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 +2999 -2999
- 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 +10359 -10359
- package/dist/protobuf.js.map +1 -1
- package/dist/protobuf.min.js +3 -3
- package/dist/protobuf.min.js.map +1 -1
- package/ext/README.md +70 -70
- package/ext/debug/README.md +4 -4
- package/ext/debug/index.js +71 -71
- package/ext/descriptor/README.md +5 -5
- package/ext/descriptor/index.d.ts +2 -2
- package/ext/descriptor/index.js +2 -2
- package/ext/descriptor.d.ts +87 -87
- package/ext/descriptor.js +1354 -1354
- package/ext/protojson.LICENSE +201 -201
- package/ext/protojson.d.ts +20 -20
- package/ext/protojson.js +925 -925
- package/ext/textformat.d.ts +19 -19
- package/ext/textformat.js +1256 -1256
- package/google/LICENSE +27 -27
- package/google/README.md +1 -1
- package/google/api/annotations.json +82 -82
- package/google/api/annotations.proto +10 -10
- package/google/api/http.json +85 -85
- package/google/api/http.proto +30 -30
- package/google/protobuf/api.json +117 -117
- package/google/protobuf/api.proto +33 -33
- package/google/protobuf/compiler/plugin.json +126 -126
- package/google/protobuf/compiler/plugin.proto +47 -47
- package/google/protobuf/descriptor.json +1381 -1381
- package/google/protobuf/descriptor.proto +534 -534
- package/google/protobuf/source_context.json +19 -19
- package/google/protobuf/source_context.proto +7 -7
- package/google/protobuf/type.json +201 -201
- package/google/protobuf/type.proto +89 -89
- package/index.d.ts +1 -1
- package/index.js +4 -4
- package/light.d.ts +2 -2
- package/light.js +3 -3
- package/minimal.d.ts +2 -2
- package/minimal.js +4 -4
- package/package.json +93 -93
- package/src/common.js +399 -399
- package/src/converter.js +344 -344
- package/src/decoder.js +208 -208
- package/src/encoder.js +111 -111
- package/src/enum.js +231 -231
- package/src/field.js +497 -497
- package/src/index-light.js +104 -104
- package/src/index-minimal.js +36 -36
- package/src/index.js +12 -12
- package/src/mapfield.js +136 -136
- package/src/message.js +137 -137
- package/src/method.js +175 -175
- package/src/namespace.js +565 -565
- package/src/object.js +382 -382
- package/src/oneof.js +225 -225
- package/src/parse.js +1068 -1068
- package/src/reader.js +543 -543
- package/src/reader_buffer.js +72 -72
- package/src/root.js +416 -416
- package/src/roots.js +18 -18
- package/src/rpc/service.js +148 -148
- package/src/rpc.js +36 -36
- package/src/service.js +198 -198
- package/src/tokenize.js +421 -421
- package/src/type.js +655 -655
- package/src/types.js +196 -196
- package/src/typescript.js +25 -25
- package/src/util/aspromise.d.ts +13 -13
- package/src/util/aspromise.js +52 -52
- package/src/util/base64.d.ts +32 -32
- package/src/util/base64.js +146 -146
- package/src/util/codegen.d.ts +31 -31
- package/src/util/codegen.js +113 -113
- package/src/util/eventemitter.d.ts +45 -45
- package/src/util/eventemitter.js +86 -86
- package/src/util/fetch.d.ts +56 -56
- package/src/util/fetch.js +112 -112
- package/src/util/float.d.ts +83 -83
- package/src/util/float.js +335 -335
- package/src/util/fs.js +11 -11
- package/src/util/longbits.js +200 -200
- package/src/util/minimal.js +515 -515
- package/src/util/path.d.ts +22 -22
- package/src/util/path.js +72 -72
- package/src/util/patterns.js +7 -7
- package/src/util/pool.d.ts +32 -32
- package/src/util/pool.js +48 -48
- package/src/util/utf8.d.ts +24 -24
- package/src/util/utf8.js +130 -130
- package/src/util.js +242 -242
- package/src/verifier.js +180 -180
- package/src/wrappers.js +106 -106
- package/src/writer.js +495 -495
- package/src/writer_buffer.js +102 -102
- package/tsconfig.json +6 -6
package/src/decoder.js
CHANGED
|
@@ -1,208 +1,208 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
module.exports = decoder;
|
|
3
|
-
|
|
4
|
-
var Enum = require("./enum"),
|
|
5
|
-
types = require("./types"),
|
|
6
|
-
util = require("./util");
|
|
7
|
-
|
|
8
|
-
function missing(field) {
|
|
9
|
-
return "missing required '" + field.name + "'";
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Generates a decoder specific to the specified message type.
|
|
14
|
-
* @param {Type} mtype Message type
|
|
15
|
-
* @returns {Codegen} Codegen instance
|
|
16
|
-
*/
|
|
17
|
-
function decoder(mtype) {
|
|
18
|
-
/* eslint-disable no-unexpected-multiline */
|
|
19
|
-
var hasMapField = false,
|
|
20
|
-
hasImplicitPresenceField = false,
|
|
21
|
-
i = 0;
|
|
22
|
-
for (; i < mtype.fieldsArray.length; ++i) {
|
|
23
|
-
var pfield = mtype._fieldsArray[i];
|
|
24
|
-
if (pfield.map)
|
|
25
|
-
hasMapField = true;
|
|
26
|
-
if (!pfield.repeated && !pfield.map && !pfield.hasPresence)
|
|
27
|
-
hasImplicitPresenceField = true;
|
|
28
|
-
}
|
|
29
|
-
var gen = util.codegen(["r", "l", "z", "q", "g"])
|
|
30
|
-
("if(!(r instanceof Reader))")
|
|
31
|
-
("r=Reader.create(r)")
|
|
32
|
-
("if(q===undefined)q=0")
|
|
33
|
-
("if(q>Reader.recursionLimit)")
|
|
34
|
-
("throw Error(\"max depth exceeded\")")
|
|
35
|
-
("var c=l===undefined?r.len:r.pos+l,m=g||new C" + (hasMapField ? ",k,v" : hasImplicitPresenceField ? ",v" : ""))
|
|
36
|
-
("while(r.pos<c){")
|
|
37
|
-
("var s=r.pos")
|
|
38
|
-
("var t=r.tag()")
|
|
39
|
-
("if(t===z){")
|
|
40
|
-
("z=undefined")
|
|
41
|
-
("break")
|
|
42
|
-
("}");
|
|
43
|
-
if (mtype.fieldsArray.length) gen
|
|
44
|
-
("var u=t&7")
|
|
45
|
-
("switch(t>>>=3){");
|
|
46
|
-
for (i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {
|
|
47
|
-
var field = mtype._fieldsArray[i].resolve(),
|
|
48
|
-
type = field.resolvedType instanceof Enum ? "int32" : field.type,
|
|
49
|
-
ref = "m" + util.safeProp(field.name);
|
|
50
|
-
|
|
51
|
-
// Map fields
|
|
52
|
-
if (field.map) {
|
|
53
|
-
gen
|
|
54
|
-
("case %i:{", field.id)
|
|
55
|
-
("if(u!==2)")
|
|
56
|
-
("break")
|
|
57
|
-
("if(%s===util.emptyObject)", ref)
|
|
58
|
-
("%s={}", ref)
|
|
59
|
-
("var c2=r.uint32()+r.pos");
|
|
60
|
-
|
|
61
|
-
if (types.defaults[field.keyType] !== undefined) gen
|
|
62
|
-
("k=%j", types.defaults[field.keyType]);
|
|
63
|
-
else gen
|
|
64
|
-
("k=null");
|
|
65
|
-
|
|
66
|
-
if (types.long[type] !== undefined) gen
|
|
67
|
-
("v=util.Long?util.Long.fromNumber(0,%j):0", type === "uint64" || type === "fixed64");
|
|
68
|
-
else if (types.defaults[type] !== undefined) gen
|
|
69
|
-
("v=%j", types.defaults[type]);
|
|
70
|
-
else gen
|
|
71
|
-
("v=null");
|
|
72
|
-
|
|
73
|
-
gen
|
|
74
|
-
("while(r.pos<c2){")
|
|
75
|
-
("var t2=r.tag()")
|
|
76
|
-
("u=t2&7")
|
|
77
|
-
("switch(t2>>>=3){")
|
|
78
|
-
("case 1:")
|
|
79
|
-
("if(u!==%i)", types.mapKey[field.keyType])
|
|
80
|
-
("break")
|
|
81
|
-
("k=r.%s()", field.keyType)
|
|
82
|
-
("continue")
|
|
83
|
-
("case 2:")
|
|
84
|
-
("if(u!==%i)", types.basic[type] === undefined ? 2 : types.basic[type])
|
|
85
|
-
("break");
|
|
86
|
-
|
|
87
|
-
if (types.basic[type] === undefined) gen
|
|
88
|
-
("v=types[%i].decode(r,r.uint32(),undefined,q+1)", i); // can't be groups
|
|
89
|
-
else gen
|
|
90
|
-
("v=r.%s()", type);
|
|
91
|
-
|
|
92
|
-
gen
|
|
93
|
-
("continue")
|
|
94
|
-
("}")
|
|
95
|
-
("r.skipType(u,q,t2)")
|
|
96
|
-
("}");
|
|
97
|
-
|
|
98
|
-
var val = types.basic[type] === undefined ? "v||new types[" + i + "].ctor" : "v";
|
|
99
|
-
if (types.long[field.keyType] !== undefined) gen
|
|
100
|
-
("%s[typeof k===\"object\"?util.longToHash(k):k]=%s", ref, val);
|
|
101
|
-
else {
|
|
102
|
-
if (field.keyType === "string") gen
|
|
103
|
-
("if(k===\"__proto__\")")
|
|
104
|
-
("util.makeProp(%s,k)", ref);
|
|
105
|
-
gen
|
|
106
|
-
("%s[k]=%s", ref, val);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Repeated fields
|
|
110
|
-
} else if (field.repeated) { gen
|
|
111
|
-
("case %i:", field.id)
|
|
112
|
-
("{");
|
|
113
|
-
|
|
114
|
-
// Packable (always check for forward and backward compatiblity)
|
|
115
|
-
if (types.packed[type] !== undefined) gen
|
|
116
|
-
("if(u===2){")
|
|
117
|
-
("if(!(%s&&%s.length))", ref, ref)
|
|
118
|
-
("%s=[]", ref)
|
|
119
|
-
("var c2=r.uint32()+r.pos")
|
|
120
|
-
("while(r.pos<c2)")
|
|
121
|
-
("%s.push(r.%s())", ref, type)
|
|
122
|
-
("continue")
|
|
123
|
-
("}");
|
|
124
|
-
|
|
125
|
-
// Non-packed
|
|
126
|
-
gen
|
|
127
|
-
("if(u!==%i)", types.basic[type] === undefined ? field.delimited ? 3 : 2 : types.basic[type])
|
|
128
|
-
("break")
|
|
129
|
-
("if(!(%s&&%s.length))", ref, ref)
|
|
130
|
-
("%s=[]", ref);
|
|
131
|
-
if (types.basic[type] === undefined) {
|
|
132
|
-
if (field.delimited) gen
|
|
133
|
-
("%s.push(types[%i].decode(r,undefined,%i,q+1))", ref, i, field.id * 8 + 4);
|
|
134
|
-
else gen
|
|
135
|
-
("%s.push(types[%i].decode(r,r.uint32(),undefined,q+1))", ref, i);
|
|
136
|
-
} else gen
|
|
137
|
-
("%s.push(r.%s())", ref, type);
|
|
138
|
-
|
|
139
|
-
// Non-repeated
|
|
140
|
-
} else if (types.basic[type] === undefined) {
|
|
141
|
-
gen
|
|
142
|
-
("case %i:{", field.id)
|
|
143
|
-
("if(u!==%i)", field.delimited ? 3 : 2)
|
|
144
|
-
("break");
|
|
145
|
-
if (field.delimited) gen
|
|
146
|
-
("%s=types[%i].decode(r,undefined,%i,q+1,%s)", ref, i, field.id * 8 + 4, ref);
|
|
147
|
-
else gen
|
|
148
|
-
("%s=types[%i].decode(r,r.uint32(),undefined,q+1,%s)", ref, i, ref);
|
|
149
|
-
}
|
|
150
|
-
else if (field.hasPresence) {
|
|
151
|
-
gen
|
|
152
|
-
("case %i:{", field.id)
|
|
153
|
-
("if(u!==%i)", types.basic[type])
|
|
154
|
-
("break")
|
|
155
|
-
("%s=r.%s()", ref, type);
|
|
156
|
-
} else {
|
|
157
|
-
gen
|
|
158
|
-
("case %i:{", field.id)
|
|
159
|
-
("if(u!==%i)", types.basic[type])
|
|
160
|
-
("break");
|
|
161
|
-
if (field.resolvedType instanceof Enum && field.typeDefault !== 0) gen
|
|
162
|
-
// TODO: Protoc rejects open enums whose first value is not zero.
|
|
163
|
-
// We should do the same, but for v8 this would be a regression.
|
|
164
|
-
("if((v=r.%s())!==%j)", type, field.typeDefault);
|
|
165
|
-
else if (type === "string" || type === "bytes") gen
|
|
166
|
-
("if((v=r.%s()).length)", type);
|
|
167
|
-
else if (types.long[type] !== undefined) gen
|
|
168
|
-
("if(typeof(v=r.%s())===\"object\"?v.low||v.high:v!==0)", type);
|
|
169
|
-
else if (type === "double" || type === "float") gen
|
|
170
|
-
("if((v=r.%s())!==0)", type);
|
|
171
|
-
else gen
|
|
172
|
-
("if(v=r.%s())", type);
|
|
173
|
-
gen
|
|
174
|
-
("%s=v", ref)
|
|
175
|
-
("else")
|
|
176
|
-
("delete %s", ref); // rare/odd case: later default clears earlier non-default
|
|
177
|
-
}
|
|
178
|
-
if (field.partOf) gen
|
|
179
|
-
("m%s=%j", util.safeProp(field.partOf.name), field.name);
|
|
180
|
-
gen
|
|
181
|
-
("continue")
|
|
182
|
-
("}");
|
|
183
|
-
}
|
|
184
|
-
if (i) gen
|
|
185
|
-
("}");
|
|
186
|
-
// Unknown fields
|
|
187
|
-
gen
|
|
188
|
-
("r.skipType(%s,q,t)", i ? "u" : "t&7")
|
|
189
|
-
("if(!r.discardUnknown){")
|
|
190
|
-
("util.makeProp(m,\"$unknowns\",false);")
|
|
191
|
-
("(m.$unknowns||(m.$unknowns=[])).push(r.raw(s,r.pos))")
|
|
192
|
-
("}")
|
|
193
|
-
("}")
|
|
194
|
-
("if(z!==undefined)")
|
|
195
|
-
("throw Error(\"missing end group\")");
|
|
196
|
-
|
|
197
|
-
// Field presence
|
|
198
|
-
for (i = 0; i < mtype._fieldsArray.length; ++i) {
|
|
199
|
-
var rfield = mtype._fieldsArray[i];
|
|
200
|
-
if (rfield.required) gen
|
|
201
|
-
("if(!Object.hasOwnProperty.call(m,%j))", rfield.name)
|
|
202
|
-
("throw util.ProtocolError(%j,{instance:m})", missing(rfield));
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
return gen
|
|
206
|
-
("return m");
|
|
207
|
-
/* eslint-enable no-unexpected-multiline */
|
|
208
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
module.exports = decoder;
|
|
3
|
+
|
|
4
|
+
var Enum = require("./enum"),
|
|
5
|
+
types = require("./types"),
|
|
6
|
+
util = require("./util");
|
|
7
|
+
|
|
8
|
+
function missing(field) {
|
|
9
|
+
return "missing required '" + field.name + "'";
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Generates a decoder specific to the specified message type.
|
|
14
|
+
* @param {Type} mtype Message type
|
|
15
|
+
* @returns {Codegen} Codegen instance
|
|
16
|
+
*/
|
|
17
|
+
function decoder(mtype) {
|
|
18
|
+
/* eslint-disable no-unexpected-multiline */
|
|
19
|
+
var hasMapField = false,
|
|
20
|
+
hasImplicitPresenceField = false,
|
|
21
|
+
i = 0;
|
|
22
|
+
for (; i < mtype.fieldsArray.length; ++i) {
|
|
23
|
+
var pfield = mtype._fieldsArray[i];
|
|
24
|
+
if (pfield.map)
|
|
25
|
+
hasMapField = true;
|
|
26
|
+
if (!pfield.repeated && !pfield.map && !pfield.hasPresence)
|
|
27
|
+
hasImplicitPresenceField = true;
|
|
28
|
+
}
|
|
29
|
+
var gen = util.codegen(["r", "l", "z", "q", "g"])
|
|
30
|
+
("if(!(r instanceof Reader))")
|
|
31
|
+
("r=Reader.create(r)")
|
|
32
|
+
("if(q===undefined)q=0")
|
|
33
|
+
("if(q>Reader.recursionLimit)")
|
|
34
|
+
("throw Error(\"max depth exceeded\")")
|
|
35
|
+
("var c=l===undefined?r.len:r.pos+l,m=g||new C" + (hasMapField ? ",k,v" : hasImplicitPresenceField ? ",v" : ""))
|
|
36
|
+
("while(r.pos<c){")
|
|
37
|
+
("var s=r.pos")
|
|
38
|
+
("var t=r.tag()")
|
|
39
|
+
("if(t===z){")
|
|
40
|
+
("z=undefined")
|
|
41
|
+
("break")
|
|
42
|
+
("}");
|
|
43
|
+
if (mtype.fieldsArray.length) gen
|
|
44
|
+
("var u=t&7")
|
|
45
|
+
("switch(t>>>=3){");
|
|
46
|
+
for (i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {
|
|
47
|
+
var field = mtype._fieldsArray[i].resolve(),
|
|
48
|
+
type = field.resolvedType instanceof Enum ? "int32" : field.type,
|
|
49
|
+
ref = "m" + util.safeProp(field.name);
|
|
50
|
+
|
|
51
|
+
// Map fields
|
|
52
|
+
if (field.map) {
|
|
53
|
+
gen
|
|
54
|
+
("case %i:{", field.id)
|
|
55
|
+
("if(u!==2)")
|
|
56
|
+
("break")
|
|
57
|
+
("if(%s===util.emptyObject)", ref)
|
|
58
|
+
("%s={}", ref)
|
|
59
|
+
("var c2=r.uint32()+r.pos");
|
|
60
|
+
|
|
61
|
+
if (types.defaults[field.keyType] !== undefined) gen
|
|
62
|
+
("k=%j", types.defaults[field.keyType]);
|
|
63
|
+
else gen
|
|
64
|
+
("k=null");
|
|
65
|
+
|
|
66
|
+
if (types.long[type] !== undefined) gen
|
|
67
|
+
("v=util.Long?util.Long.fromNumber(0,%j):0", type === "uint64" || type === "fixed64");
|
|
68
|
+
else if (types.defaults[type] !== undefined) gen
|
|
69
|
+
("v=%j", types.defaults[type]);
|
|
70
|
+
else gen
|
|
71
|
+
("v=null");
|
|
72
|
+
|
|
73
|
+
gen
|
|
74
|
+
("while(r.pos<c2){")
|
|
75
|
+
("var t2=r.tag()")
|
|
76
|
+
("u=t2&7")
|
|
77
|
+
("switch(t2>>>=3){")
|
|
78
|
+
("case 1:")
|
|
79
|
+
("if(u!==%i)", types.mapKey[field.keyType])
|
|
80
|
+
("break")
|
|
81
|
+
("k=r.%s()", field.keyType)
|
|
82
|
+
("continue")
|
|
83
|
+
("case 2:")
|
|
84
|
+
("if(u!==%i)", types.basic[type] === undefined ? 2 : types.basic[type])
|
|
85
|
+
("break");
|
|
86
|
+
|
|
87
|
+
if (types.basic[type] === undefined) gen
|
|
88
|
+
("v=types[%i].decode(r,r.uint32(),undefined,q+1)", i); // can't be groups
|
|
89
|
+
else gen
|
|
90
|
+
("v=r.%s()", type);
|
|
91
|
+
|
|
92
|
+
gen
|
|
93
|
+
("continue")
|
|
94
|
+
("}")
|
|
95
|
+
("r.skipType(u,q,t2)")
|
|
96
|
+
("}");
|
|
97
|
+
|
|
98
|
+
var val = types.basic[type] === undefined ? "v||new types[" + i + "].ctor" : "v";
|
|
99
|
+
if (types.long[field.keyType] !== undefined) gen
|
|
100
|
+
("%s[typeof k===\"object\"?util.longToHash(k):k]=%s", ref, val);
|
|
101
|
+
else {
|
|
102
|
+
if (field.keyType === "string") gen
|
|
103
|
+
("if(k===\"__proto__\")")
|
|
104
|
+
("util.makeProp(%s,k)", ref);
|
|
105
|
+
gen
|
|
106
|
+
("%s[k]=%s", ref, val);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Repeated fields
|
|
110
|
+
} else if (field.repeated) { gen
|
|
111
|
+
("case %i:", field.id)
|
|
112
|
+
("{");
|
|
113
|
+
|
|
114
|
+
// Packable (always check for forward and backward compatiblity)
|
|
115
|
+
if (types.packed[type] !== undefined) gen
|
|
116
|
+
("if(u===2){")
|
|
117
|
+
("if(!(%s&&%s.length))", ref, ref)
|
|
118
|
+
("%s=[]", ref)
|
|
119
|
+
("var c2=r.uint32()+r.pos")
|
|
120
|
+
("while(r.pos<c2)")
|
|
121
|
+
("%s.push(r.%s())", ref, type)
|
|
122
|
+
("continue")
|
|
123
|
+
("}");
|
|
124
|
+
|
|
125
|
+
// Non-packed
|
|
126
|
+
gen
|
|
127
|
+
("if(u!==%i)", types.basic[type] === undefined ? field.delimited ? 3 : 2 : types.basic[type])
|
|
128
|
+
("break")
|
|
129
|
+
("if(!(%s&&%s.length))", ref, ref)
|
|
130
|
+
("%s=[]", ref);
|
|
131
|
+
if (types.basic[type] === undefined) {
|
|
132
|
+
if (field.delimited) gen
|
|
133
|
+
("%s.push(types[%i].decode(r,undefined,%i,q+1))", ref, i, field.id * 8 + 4);
|
|
134
|
+
else gen
|
|
135
|
+
("%s.push(types[%i].decode(r,r.uint32(),undefined,q+1))", ref, i);
|
|
136
|
+
} else gen
|
|
137
|
+
("%s.push(r.%s())", ref, type);
|
|
138
|
+
|
|
139
|
+
// Non-repeated
|
|
140
|
+
} else if (types.basic[type] === undefined) {
|
|
141
|
+
gen
|
|
142
|
+
("case %i:{", field.id)
|
|
143
|
+
("if(u!==%i)", field.delimited ? 3 : 2)
|
|
144
|
+
("break");
|
|
145
|
+
if (field.delimited) gen
|
|
146
|
+
("%s=types[%i].decode(r,undefined,%i,q+1,%s)", ref, i, field.id * 8 + 4, ref);
|
|
147
|
+
else gen
|
|
148
|
+
("%s=types[%i].decode(r,r.uint32(),undefined,q+1,%s)", ref, i, ref);
|
|
149
|
+
}
|
|
150
|
+
else if (field.hasPresence) {
|
|
151
|
+
gen
|
|
152
|
+
("case %i:{", field.id)
|
|
153
|
+
("if(u!==%i)", types.basic[type])
|
|
154
|
+
("break")
|
|
155
|
+
("%s=r.%s()", ref, type);
|
|
156
|
+
} else {
|
|
157
|
+
gen
|
|
158
|
+
("case %i:{", field.id)
|
|
159
|
+
("if(u!==%i)", types.basic[type])
|
|
160
|
+
("break");
|
|
161
|
+
if (field.resolvedType instanceof Enum && field.typeDefault !== 0) gen
|
|
162
|
+
// TODO: Protoc rejects open enums whose first value is not zero.
|
|
163
|
+
// We should do the same, but for v8 this would be a regression.
|
|
164
|
+
("if((v=r.%s())!==%j)", type, field.typeDefault);
|
|
165
|
+
else if (type === "string" || type === "bytes") gen
|
|
166
|
+
("if((v=r.%s()).length)", type);
|
|
167
|
+
else if (types.long[type] !== undefined) gen
|
|
168
|
+
("if(typeof(v=r.%s())===\"object\"?v.low||v.high:v!==0)", type);
|
|
169
|
+
else if (type === "double" || type === "float") gen
|
|
170
|
+
("if((v=r.%s())!==0)", type);
|
|
171
|
+
else gen
|
|
172
|
+
("if(v=r.%s())", type);
|
|
173
|
+
gen
|
|
174
|
+
("%s=v", ref)
|
|
175
|
+
("else")
|
|
176
|
+
("delete %s", ref); // rare/odd case: later default clears earlier non-default
|
|
177
|
+
}
|
|
178
|
+
if (field.partOf) gen
|
|
179
|
+
("m%s=%j", util.safeProp(field.partOf.name), field.name);
|
|
180
|
+
gen
|
|
181
|
+
("continue")
|
|
182
|
+
("}");
|
|
183
|
+
}
|
|
184
|
+
if (i) gen
|
|
185
|
+
("}");
|
|
186
|
+
// Unknown fields
|
|
187
|
+
gen
|
|
188
|
+
("r.skipType(%s,q,t)", i ? "u" : "t&7")
|
|
189
|
+
("if(!r.discardUnknown){")
|
|
190
|
+
("util.makeProp(m,\"$unknowns\",false);")
|
|
191
|
+
("(m.$unknowns||(m.$unknowns=[])).push(r.raw(s,r.pos))")
|
|
192
|
+
("}")
|
|
193
|
+
("}")
|
|
194
|
+
("if(z!==undefined)")
|
|
195
|
+
("throw Error(\"missing end group\")");
|
|
196
|
+
|
|
197
|
+
// Field presence
|
|
198
|
+
for (i = 0; i < mtype._fieldsArray.length; ++i) {
|
|
199
|
+
var rfield = mtype._fieldsArray[i];
|
|
200
|
+
if (rfield.required) gen
|
|
201
|
+
("if(!Object.hasOwnProperty.call(m,%j))", rfield.name)
|
|
202
|
+
("throw util.ProtocolError(%j,{instance:m})", missing(rfield));
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
return gen
|
|
206
|
+
("return m");
|
|
207
|
+
/* eslint-enable no-unexpected-multiline */
|
|
208
|
+
}
|
package/src/encoder.js
CHANGED
|
@@ -1,111 +1,111 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
module.exports = encoder;
|
|
3
|
-
|
|
4
|
-
var Enum = require("./enum"),
|
|
5
|
-
types = require("./types"),
|
|
6
|
-
util = require("./util");
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Generates a partial message type encoder.
|
|
10
|
-
* @param {Codegen} gen Codegen instance
|
|
11
|
-
* @param {Field} field Reflected field
|
|
12
|
-
* @param {number} fieldIndex Field index
|
|
13
|
-
* @param {string} ref Variable reference
|
|
14
|
-
* @returns {Codegen} Codegen instance
|
|
15
|
-
* @ignore
|
|
16
|
-
*/
|
|
17
|
-
function genTypePartial(gen, field, fieldIndex, ref) {
|
|
18
|
-
return field.delimited
|
|
19
|
-
? gen("types[%i].encode(%s,w.uint32(%i),q+1).uint32(%i)", fieldIndex, ref, (field.id << 3 | 3) >>> 0, (field.id << 3 | 4) >>> 0)
|
|
20
|
-
: gen("types[%i].encode(%s,w.uint32(%i).fork(),q+1).ldelim()", fieldIndex, ref, (field.id << 3 | 2) >>> 0);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Generates an encoder specific to the specified message type.
|
|
25
|
-
* @param {Type} mtype Message type
|
|
26
|
-
* @returns {Codegen} Codegen instance
|
|
27
|
-
*/
|
|
28
|
-
function encoder(mtype) {
|
|
29
|
-
/* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
30
|
-
var gen = util.codegen(["m", "w", "q"])
|
|
31
|
-
("if(!w)")
|
|
32
|
-
("w=Writer.create()")
|
|
33
|
-
("if(q===undefined)q=0")
|
|
34
|
-
("if(q>util.recursionLimit)")
|
|
35
|
-
("throw Error(\"max depth exceeded\")");
|
|
36
|
-
|
|
37
|
-
var i, ref;
|
|
38
|
-
|
|
39
|
-
// "when a message is serialized its known fields should be written sequentially by field number"
|
|
40
|
-
var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);
|
|
41
|
-
|
|
42
|
-
for (var i = 0; i < fields.length; ++i) {
|
|
43
|
-
var field = fields[i].resolve(),
|
|
44
|
-
index = mtype._fieldsArray.indexOf(field),
|
|
45
|
-
type = field.resolvedType instanceof Enum ? "int32" : field.type,
|
|
46
|
-
wireType = types.basic[type];
|
|
47
|
-
ref = "m" + util.safeProp(field.name);
|
|
48
|
-
|
|
49
|
-
// Map fields
|
|
50
|
-
if (field.map) {
|
|
51
|
-
gen
|
|
52
|
-
("if(%s!=null&&Object.hasOwnProperty.call(m,%j)){", ref, field.name) // !== undefined && !== null
|
|
53
|
-
("for(var ks=Object.keys(%s),i=0;i<ks.length;++i){", ref);
|
|
54
|
-
if (field.keyType === "bool") gen
|
|
55
|
-
("w.uint32(%i).fork().uint32(%i).bool(util.boolFromKey(ks[i]))", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType]);
|
|
56
|
-
else if (types.long[field.keyType] !== undefined) gen
|
|
57
|
-
("w.uint32(%i).fork().uint32(%i).%s(util.longFromKey(ks[i],%j))", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType, field.keyType === "uint64" || field.keyType === "fixed64");
|
|
58
|
-
else gen
|
|
59
|
-
("w.uint32(%i).fork().uint32(%i).%s(ks[i])", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType);
|
|
60
|
-
if (wireType === undefined) gen
|
|
61
|
-
("types[%i].encode(%s[ks[i]],w.uint32(18).fork(),q+1).ldelim().ldelim()", index, ref); // can't be groups
|
|
62
|
-
else gen
|
|
63
|
-
(".uint32(%i).%s(%s[ks[i]]).ldelim()", 16 | wireType, type, ref);
|
|
64
|
-
gen
|
|
65
|
-
("}")
|
|
66
|
-
("}");
|
|
67
|
-
|
|
68
|
-
// Repeated fields
|
|
69
|
-
} else if (field.repeated) { gen
|
|
70
|
-
("if(%s!=null&&%s.length){", ref, ref); // !== undefined && !== null
|
|
71
|
-
|
|
72
|
-
// Packed repeated
|
|
73
|
-
if (field.packed && types.packed[type] !== undefined) { gen
|
|
74
|
-
|
|
75
|
-
("w.uint32(%i).fork()", (field.id << 3 | 2) >>> 0)
|
|
76
|
-
("for(var i=0;i<%s.length;++i)", ref)
|
|
77
|
-
("w.%s(%s[i])", type, ref)
|
|
78
|
-
("w.ldelim()");
|
|
79
|
-
|
|
80
|
-
// Non-packed
|
|
81
|
-
} else { gen
|
|
82
|
-
|
|
83
|
-
("for(var i=0;i<%s.length;++i)", ref);
|
|
84
|
-
if (wireType === undefined)
|
|
85
|
-
genTypePartial(gen, field, index, ref + "[i]");
|
|
86
|
-
else gen
|
|
87
|
-
("w.uint32(%i).%s(%s[i])", (field.id << 3 | wireType) >>> 0, type, ref);
|
|
88
|
-
|
|
89
|
-
} gen
|
|
90
|
-
("}");
|
|
91
|
-
|
|
92
|
-
// Non-repeated
|
|
93
|
-
} else {
|
|
94
|
-
if (!field.required) gen
|
|
95
|
-
("if(%s!=null&&Object.hasOwnProperty.call(m,%j))", ref, field.name); // !== undefined && !== null
|
|
96
|
-
|
|
97
|
-
if (wireType === undefined)
|
|
98
|
-
genTypePartial(gen, field, index, ref);
|
|
99
|
-
else gen
|
|
100
|
-
("w.uint32(%i).%s(%s)", (field.id << 3 | wireType) >>> 0, type, ref);
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return gen
|
|
106
|
-
("if(m.$unknowns!=null&&Object.hasOwnProperty.call(m,\"$unknowns\"))")
|
|
107
|
-
("for(var i=0;i<m.$unknowns.length;++i)")
|
|
108
|
-
("w.raw(m.$unknowns[i])")
|
|
109
|
-
("return w");
|
|
110
|
-
/* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
111
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
module.exports = encoder;
|
|
3
|
+
|
|
4
|
+
var Enum = require("./enum"),
|
|
5
|
+
types = require("./types"),
|
|
6
|
+
util = require("./util");
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Generates a partial message type encoder.
|
|
10
|
+
* @param {Codegen} gen Codegen instance
|
|
11
|
+
* @param {Field} field Reflected field
|
|
12
|
+
* @param {number} fieldIndex Field index
|
|
13
|
+
* @param {string} ref Variable reference
|
|
14
|
+
* @returns {Codegen} Codegen instance
|
|
15
|
+
* @ignore
|
|
16
|
+
*/
|
|
17
|
+
function genTypePartial(gen, field, fieldIndex, ref) {
|
|
18
|
+
return field.delimited
|
|
19
|
+
? gen("types[%i].encode(%s,w.uint32(%i),q+1).uint32(%i)", fieldIndex, ref, (field.id << 3 | 3) >>> 0, (field.id << 3 | 4) >>> 0)
|
|
20
|
+
: gen("types[%i].encode(%s,w.uint32(%i).fork(),q+1).ldelim()", fieldIndex, ref, (field.id << 3 | 2) >>> 0);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Generates an encoder specific to the specified message type.
|
|
25
|
+
* @param {Type} mtype Message type
|
|
26
|
+
* @returns {Codegen} Codegen instance
|
|
27
|
+
*/
|
|
28
|
+
function encoder(mtype) {
|
|
29
|
+
/* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
30
|
+
var gen = util.codegen(["m", "w", "q"])
|
|
31
|
+
("if(!w)")
|
|
32
|
+
("w=Writer.create()")
|
|
33
|
+
("if(q===undefined)q=0")
|
|
34
|
+
("if(q>util.recursionLimit)")
|
|
35
|
+
("throw Error(\"max depth exceeded\")");
|
|
36
|
+
|
|
37
|
+
var i, ref;
|
|
38
|
+
|
|
39
|
+
// "when a message is serialized its known fields should be written sequentially by field number"
|
|
40
|
+
var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);
|
|
41
|
+
|
|
42
|
+
for (var i = 0; i < fields.length; ++i) {
|
|
43
|
+
var field = fields[i].resolve(),
|
|
44
|
+
index = mtype._fieldsArray.indexOf(field),
|
|
45
|
+
type = field.resolvedType instanceof Enum ? "int32" : field.type,
|
|
46
|
+
wireType = types.basic[type];
|
|
47
|
+
ref = "m" + util.safeProp(field.name);
|
|
48
|
+
|
|
49
|
+
// Map fields
|
|
50
|
+
if (field.map) {
|
|
51
|
+
gen
|
|
52
|
+
("if(%s!=null&&Object.hasOwnProperty.call(m,%j)){", ref, field.name) // !== undefined && !== null
|
|
53
|
+
("for(var ks=Object.keys(%s),i=0;i<ks.length;++i){", ref);
|
|
54
|
+
if (field.keyType === "bool") gen
|
|
55
|
+
("w.uint32(%i).fork().uint32(%i).bool(util.boolFromKey(ks[i]))", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType]);
|
|
56
|
+
else if (types.long[field.keyType] !== undefined) gen
|
|
57
|
+
("w.uint32(%i).fork().uint32(%i).%s(util.longFromKey(ks[i],%j))", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType, field.keyType === "uint64" || field.keyType === "fixed64");
|
|
58
|
+
else gen
|
|
59
|
+
("w.uint32(%i).fork().uint32(%i).%s(ks[i])", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType);
|
|
60
|
+
if (wireType === undefined) gen
|
|
61
|
+
("types[%i].encode(%s[ks[i]],w.uint32(18).fork(),q+1).ldelim().ldelim()", index, ref); // can't be groups
|
|
62
|
+
else gen
|
|
63
|
+
(".uint32(%i).%s(%s[ks[i]]).ldelim()", 16 | wireType, type, ref);
|
|
64
|
+
gen
|
|
65
|
+
("}")
|
|
66
|
+
("}");
|
|
67
|
+
|
|
68
|
+
// Repeated fields
|
|
69
|
+
} else if (field.repeated) { gen
|
|
70
|
+
("if(%s!=null&&%s.length){", ref, ref); // !== undefined && !== null
|
|
71
|
+
|
|
72
|
+
// Packed repeated
|
|
73
|
+
if (field.packed && types.packed[type] !== undefined) { gen
|
|
74
|
+
|
|
75
|
+
("w.uint32(%i).fork()", (field.id << 3 | 2) >>> 0)
|
|
76
|
+
("for(var i=0;i<%s.length;++i)", ref)
|
|
77
|
+
("w.%s(%s[i])", type, ref)
|
|
78
|
+
("w.ldelim()");
|
|
79
|
+
|
|
80
|
+
// Non-packed
|
|
81
|
+
} else { gen
|
|
82
|
+
|
|
83
|
+
("for(var i=0;i<%s.length;++i)", ref);
|
|
84
|
+
if (wireType === undefined)
|
|
85
|
+
genTypePartial(gen, field, index, ref + "[i]");
|
|
86
|
+
else gen
|
|
87
|
+
("w.uint32(%i).%s(%s[i])", (field.id << 3 | wireType) >>> 0, type, ref);
|
|
88
|
+
|
|
89
|
+
} gen
|
|
90
|
+
("}");
|
|
91
|
+
|
|
92
|
+
// Non-repeated
|
|
93
|
+
} else {
|
|
94
|
+
if (!field.required) gen
|
|
95
|
+
("if(%s!=null&&Object.hasOwnProperty.call(m,%j))", ref, field.name); // !== undefined && !== null
|
|
96
|
+
|
|
97
|
+
if (wireType === undefined)
|
|
98
|
+
genTypePartial(gen, field, index, ref);
|
|
99
|
+
else gen
|
|
100
|
+
("w.uint32(%i).%s(%s)", (field.id << 3 | wireType) >>> 0, type, ref);
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return gen
|
|
106
|
+
("if(m.$unknowns!=null&&Object.hasOwnProperty.call(m,\"$unknowns\"))")
|
|
107
|
+
("for(var i=0;i<m.$unknowns.length;++i)")
|
|
108
|
+
("w.raw(m.$unknowns[i])")
|
|
109
|
+
("return w");
|
|
110
|
+
/* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
111
|
+
}
|