protobufjs 7.3.0 → 7.3.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 +727 -740
- package/dist/light/protobuf.js +6264 -6264
- package/dist/light/protobuf.js.map +1 -1
- package/dist/light/protobuf.min.js +2 -2
- package/dist/light/protobuf.min.js.map +1 -1
- package/dist/minimal/protobuf.js +1928 -1928
- package/dist/minimal/protobuf.js.map +1 -1
- package/dist/minimal/protobuf.min.js +2 -2
- package/dist/minimal/protobuf.min.js.map +1 -1
- package/dist/protobuf.js +7978 -7978
- package/dist/protobuf.js.map +1 -1
- package/dist/protobuf.min.js +2 -2
- package/dist/protobuf.min.js.map +1 -1
- package/ext/debug/README.md +4 -4
- package/ext/debug/index.js +71 -71
- package/ext/descriptor/README.md +72 -72
- package/ext/descriptor/index.d.ts +191 -191
- package/ext/descriptor/index.js +1052 -1052
- package/ext/descriptor/test.js +54 -54
- 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/descriptor.json +738 -738
- package/google/protobuf/descriptor.proto +286 -286
- 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 +2741 -2741
- 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 +111 -111
- package/scripts/postinstall.js +32 -32
- package/src/common.js +399 -399
- package/src/converter.js +301 -301
- package/src/decoder.js +129 -129
- package/src/encoder.js +100 -100
- package/src/enum.js +198 -198
- package/src/field.js +377 -377
- package/src/index-light.js +104 -104
- package/src/index-minimal.js +36 -36
- package/src/index.js +12 -12
- package/src/mapfield.js +126 -126
- package/src/message.js +138 -138
- package/src/method.js +160 -160
- package/src/namespace.js +433 -433
- package/src/object.js +243 -243
- package/src/oneof.js +203 -203
- package/src/parse.js +889 -889
- package/src/reader.js +416 -416
- package/src/reader_buffer.js +51 -51
- package/src/root.js +368 -368
- package/src/roots.js +18 -18
- package/src/rpc/service.js +142 -142
- package/src/rpc.js +36 -36
- package/src/service.js +167 -167
- package/src/tokenize.js +416 -416
- package/src/type.js +589 -589
- package/src/types.js +196 -196
- package/src/typescript.jsdoc +15 -15
- package/src/util/longbits.js +200 -200
- package/src/util/minimal.js +438 -438
- package/src/util.js +212 -212
- package/src/verifier.js +176 -176
- package/src/wrappers.js +102 -102
- package/src/writer.js +465 -465
- package/src/writer_buffer.js +85 -85
- package/tsconfig.json +7 -7
package/src/converter.js
CHANGED
|
@@ -1,301 +1,301 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Runtime message from/to plain object converters.
|
|
4
|
-
* @namespace
|
|
5
|
-
*/
|
|
6
|
-
var converter = exports;
|
|
7
|
-
|
|
8
|
-
var Enum = require("./enum"),
|
|
9
|
-
util = require("./util");
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Generates a partial value fromObject conveter.
|
|
13
|
-
* @param {Codegen} gen Codegen instance
|
|
14
|
-
* @param {Field} field Reflected field
|
|
15
|
-
* @param {number} fieldIndex Field index
|
|
16
|
-
* @param {string} prop Property reference
|
|
17
|
-
* @returns {Codegen} Codegen instance
|
|
18
|
-
* @ignore
|
|
19
|
-
*/
|
|
20
|
-
function genValuePartial_fromObject(gen, field, fieldIndex, prop) {
|
|
21
|
-
var defaultAlreadyEmitted = false;
|
|
22
|
-
/* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
23
|
-
if (field.resolvedType) {
|
|
24
|
-
if (field.resolvedType instanceof Enum) { gen
|
|
25
|
-
("switch(d%s){", prop);
|
|
26
|
-
for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {
|
|
27
|
-
// enum unknown values passthrough
|
|
28
|
-
if (values[keys[i]] === field.typeDefault && !defaultAlreadyEmitted) { gen
|
|
29
|
-
("default:")
|
|
30
|
-
("if(typeof(d%s)===\"number\"){m%s=d%s;break}", prop, prop, prop);
|
|
31
|
-
if (!field.repeated) gen // fallback to default value only for
|
|
32
|
-
// arrays, to avoid leaving holes.
|
|
33
|
-
("break"); // for non-repeated fields, just ignore
|
|
34
|
-
defaultAlreadyEmitted = true;
|
|
35
|
-
}
|
|
36
|
-
gen
|
|
37
|
-
("case%j:", keys[i])
|
|
38
|
-
("case %i:", values[keys[i]])
|
|
39
|
-
("m%s=%j", prop, values[keys[i]])
|
|
40
|
-
("break");
|
|
41
|
-
} gen
|
|
42
|
-
("}");
|
|
43
|
-
} else gen
|
|
44
|
-
("if(typeof d%s!==\"object\")", prop)
|
|
45
|
-
("throw TypeError(%j)", field.fullName + ": object expected")
|
|
46
|
-
("m%s=types[%i].fromObject(d%s)", prop, fieldIndex, prop);
|
|
47
|
-
} else {
|
|
48
|
-
var isUnsigned = false;
|
|
49
|
-
switch (field.type) {
|
|
50
|
-
case "double":
|
|
51
|
-
case "float": gen
|
|
52
|
-
("m%s=Number(d%s)", prop, prop); // also catches "NaN", "Infinity"
|
|
53
|
-
break;
|
|
54
|
-
case "uint32":
|
|
55
|
-
case "fixed32": gen
|
|
56
|
-
("m%s=d%s>>>0", prop, prop);
|
|
57
|
-
break;
|
|
58
|
-
case "int32":
|
|
59
|
-
case "sint32":
|
|
60
|
-
case "sfixed32": gen
|
|
61
|
-
("m%s=d%s|0", prop, prop);
|
|
62
|
-
break;
|
|
63
|
-
case "uint64":
|
|
64
|
-
isUnsigned = true;
|
|
65
|
-
// eslint-disable-next-line no-fallthrough
|
|
66
|
-
case "int64":
|
|
67
|
-
case "sint64":
|
|
68
|
-
case "fixed64":
|
|
69
|
-
case "sfixed64": gen
|
|
70
|
-
("if(util.Long)")
|
|
71
|
-
("(m%s=util.Long.fromValue(d%s)).unsigned=%j", prop, prop, isUnsigned)
|
|
72
|
-
("else if(typeof d%s===\"string\")", prop)
|
|
73
|
-
("m%s=parseInt(d%s,10)", prop, prop)
|
|
74
|
-
("else if(typeof d%s===\"number\")", prop)
|
|
75
|
-
("m%s=d%s", prop, prop)
|
|
76
|
-
("else if(typeof d%s===\"object\")", prop)
|
|
77
|
-
("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)", prop, prop, prop, isUnsigned ? "true" : "");
|
|
78
|
-
break;
|
|
79
|
-
case "bytes": gen
|
|
80
|
-
("if(typeof d%s===\"string\")", prop)
|
|
81
|
-
("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)", prop, prop, prop)
|
|
82
|
-
("else if(d%s.length >= 0)", prop)
|
|
83
|
-
("m%s=d%s", prop, prop);
|
|
84
|
-
break;
|
|
85
|
-
case "string": gen
|
|
86
|
-
("m%s=String(d%s)", prop, prop);
|
|
87
|
-
break;
|
|
88
|
-
case "bool": gen
|
|
89
|
-
("m%s=Boolean(d%s)", prop, prop);
|
|
90
|
-
break;
|
|
91
|
-
/* default: gen
|
|
92
|
-
("m%s=d%s", prop, prop);
|
|
93
|
-
break; */
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
return gen;
|
|
97
|
-
/* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Generates a plain object to runtime message converter specific to the specified message type.
|
|
102
|
-
* @param {Type} mtype Message type
|
|
103
|
-
* @returns {Codegen} Codegen instance
|
|
104
|
-
*/
|
|
105
|
-
converter.fromObject = function fromObject(mtype) {
|
|
106
|
-
/* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
107
|
-
var fields = mtype.fieldsArray;
|
|
108
|
-
var gen = util.codegen(["d"], mtype.name + "$fromObject")
|
|
109
|
-
("if(d instanceof this.ctor)")
|
|
110
|
-
("return d");
|
|
111
|
-
if (!fields.length) return gen
|
|
112
|
-
("return new this.ctor");
|
|
113
|
-
gen
|
|
114
|
-
("var m=new this.ctor");
|
|
115
|
-
for (var i = 0; i < fields.length; ++i) {
|
|
116
|
-
var field = fields[i].resolve(),
|
|
117
|
-
prop = util.safeProp(field.name);
|
|
118
|
-
|
|
119
|
-
// Map fields
|
|
120
|
-
if (field.map) { gen
|
|
121
|
-
("if(d%s){", prop)
|
|
122
|
-
("if(typeof d%s!==\"object\")", prop)
|
|
123
|
-
("throw TypeError(%j)", field.fullName + ": object expected")
|
|
124
|
-
("m%s={}", prop)
|
|
125
|
-
("for(var ks=Object.keys(d%s),i=0;i<ks.length;++i){", prop);
|
|
126
|
-
genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + "[ks[i]]")
|
|
127
|
-
("}")
|
|
128
|
-
("}");
|
|
129
|
-
|
|
130
|
-
// Repeated fields
|
|
131
|
-
} else if (field.repeated) { gen
|
|
132
|
-
("if(d%s){", prop)
|
|
133
|
-
("if(!Array.isArray(d%s))", prop)
|
|
134
|
-
("throw TypeError(%j)", field.fullName + ": array expected")
|
|
135
|
-
("m%s=[]", prop)
|
|
136
|
-
("for(var i=0;i<d%s.length;++i){", prop);
|
|
137
|
-
genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + "[i]")
|
|
138
|
-
("}")
|
|
139
|
-
("}");
|
|
140
|
-
|
|
141
|
-
// Non-repeated fields
|
|
142
|
-
} else {
|
|
143
|
-
if (!(field.resolvedType instanceof Enum)) gen // no need to test for null/undefined if an enum (uses switch)
|
|
144
|
-
("if(d%s!=null){", prop); // !== undefined && !== null
|
|
145
|
-
genValuePartial_fromObject(gen, field, /* not sorted */ i, prop);
|
|
146
|
-
if (!(field.resolvedType instanceof Enum)) gen
|
|
147
|
-
("}");
|
|
148
|
-
}
|
|
149
|
-
} return gen
|
|
150
|
-
("return m");
|
|
151
|
-
/* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Generates a partial value toObject converter.
|
|
156
|
-
* @param {Codegen} gen Codegen instance
|
|
157
|
-
* @param {Field} field Reflected field
|
|
158
|
-
* @param {number} fieldIndex Field index
|
|
159
|
-
* @param {string} prop Property reference
|
|
160
|
-
* @returns {Codegen} Codegen instance
|
|
161
|
-
* @ignore
|
|
162
|
-
*/
|
|
163
|
-
function genValuePartial_toObject(gen, field, fieldIndex, prop) {
|
|
164
|
-
/* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
165
|
-
if (field.resolvedType) {
|
|
166
|
-
if (field.resolvedType instanceof Enum) gen
|
|
167
|
-
("d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s", prop, fieldIndex, prop, prop, fieldIndex, prop, prop);
|
|
168
|
-
else gen
|
|
169
|
-
("d%s=types[%i].toObject(m%s,o)", prop, fieldIndex, prop);
|
|
170
|
-
} else {
|
|
171
|
-
var isUnsigned = false;
|
|
172
|
-
switch (field.type) {
|
|
173
|
-
case "double":
|
|
174
|
-
case "float": gen
|
|
175
|
-
("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s", prop, prop, prop, prop);
|
|
176
|
-
break;
|
|
177
|
-
case "uint64":
|
|
178
|
-
isUnsigned = true;
|
|
179
|
-
// eslint-disable-next-line no-fallthrough
|
|
180
|
-
case "int64":
|
|
181
|
-
case "sint64":
|
|
182
|
-
case "fixed64":
|
|
183
|
-
case "sfixed64": gen
|
|
184
|
-
("if(typeof m%s===\"number\")", prop)
|
|
185
|
-
("d%s=o.longs===String?String(m%s):m%s", prop, prop, prop)
|
|
186
|
-
("else") // Long-like
|
|
187
|
-
("d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s", prop, prop, prop, prop, isUnsigned ? "true": "", prop);
|
|
188
|
-
break;
|
|
189
|
-
case "bytes": gen
|
|
190
|
-
("d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s", prop, prop, prop, prop, prop);
|
|
191
|
-
break;
|
|
192
|
-
default: gen
|
|
193
|
-
("d%s=m%s", prop, prop);
|
|
194
|
-
break;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
return gen;
|
|
198
|
-
/* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/**
|
|
202
|
-
* Generates a runtime message to plain object converter specific to the specified message type.
|
|
203
|
-
* @param {Type} mtype Message type
|
|
204
|
-
* @returns {Codegen} Codegen instance
|
|
205
|
-
*/
|
|
206
|
-
converter.toObject = function toObject(mtype) {
|
|
207
|
-
/* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
208
|
-
var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);
|
|
209
|
-
if (!fields.length)
|
|
210
|
-
return util.codegen()("return {}");
|
|
211
|
-
var gen = util.codegen(["m", "o"], mtype.name + "$toObject")
|
|
212
|
-
("if(!o)")
|
|
213
|
-
("o={}")
|
|
214
|
-
("var d={}");
|
|
215
|
-
|
|
216
|
-
var repeatedFields = [],
|
|
217
|
-
mapFields = [],
|
|
218
|
-
normalFields = [],
|
|
219
|
-
i = 0;
|
|
220
|
-
for (; i < fields.length; ++i)
|
|
221
|
-
if (!fields[i].partOf)
|
|
222
|
-
( fields[i].resolve().repeated ? repeatedFields
|
|
223
|
-
: fields[i].map ? mapFields
|
|
224
|
-
: normalFields).push(fields[i]);
|
|
225
|
-
|
|
226
|
-
if (repeatedFields.length) { gen
|
|
227
|
-
("if(o.arrays||o.defaults){");
|
|
228
|
-
for (i = 0; i < repeatedFields.length; ++i) gen
|
|
229
|
-
("d%s=[]", util.safeProp(repeatedFields[i].name));
|
|
230
|
-
gen
|
|
231
|
-
("}");
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
if (mapFields.length) { gen
|
|
235
|
-
("if(o.objects||o.defaults){");
|
|
236
|
-
for (i = 0; i < mapFields.length; ++i) gen
|
|
237
|
-
("d%s={}", util.safeProp(mapFields[i].name));
|
|
238
|
-
gen
|
|
239
|
-
("}");
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
if (normalFields.length) { gen
|
|
243
|
-
("if(o.defaults){");
|
|
244
|
-
for (i = 0; i < normalFields.length; ++i) {
|
|
245
|
-
var field = normalFields[i],
|
|
246
|
-
prop = util.safeProp(field.name);
|
|
247
|
-
if (field.resolvedType instanceof Enum) gen
|
|
248
|
-
("d%s=o.enums===String?%j:%j", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);
|
|
249
|
-
else if (field.long) gen
|
|
250
|
-
("if(util.Long){")
|
|
251
|
-
("var n=new util.Long(%i,%i,%j)", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)
|
|
252
|
-
("d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n", prop)
|
|
253
|
-
("}else")
|
|
254
|
-
("d%s=o.longs===String?%j:%i", prop, field.typeDefault.toString(), field.typeDefault.toNumber());
|
|
255
|
-
else if (field.bytes) {
|
|
256
|
-
var arrayDefault = "[" + Array.prototype.slice.call(field.typeDefault).join(",") + "]";
|
|
257
|
-
gen
|
|
258
|
-
("if(o.bytes===String)d%s=%j", prop, String.fromCharCode.apply(String, field.typeDefault))
|
|
259
|
-
("else{")
|
|
260
|
-
("d%s=%s", prop, arrayDefault)
|
|
261
|
-
("if(o.bytes!==Array)d%s=util.newBuffer(d%s)", prop, prop)
|
|
262
|
-
("}");
|
|
263
|
-
} else gen
|
|
264
|
-
("d%s=%j", prop, field.typeDefault); // also messages (=null)
|
|
265
|
-
} gen
|
|
266
|
-
("}");
|
|
267
|
-
}
|
|
268
|
-
var hasKs2 = false;
|
|
269
|
-
for (i = 0; i < fields.length; ++i) {
|
|
270
|
-
var field = fields[i],
|
|
271
|
-
index = mtype._fieldsArray.indexOf(field),
|
|
272
|
-
prop = util.safeProp(field.name);
|
|
273
|
-
if (field.map) {
|
|
274
|
-
if (!hasKs2) { hasKs2 = true; gen
|
|
275
|
-
("var ks2");
|
|
276
|
-
} gen
|
|
277
|
-
("if(m%s&&(ks2=Object.keys(m%s)).length){", prop, prop)
|
|
278
|
-
("d%s={}", prop)
|
|
279
|
-
("for(var j=0;j<ks2.length;++j){");
|
|
280
|
-
genValuePartial_toObject(gen, field, /* sorted */ index, prop + "[ks2[j]]")
|
|
281
|
-
("}");
|
|
282
|
-
} else if (field.repeated) { gen
|
|
283
|
-
("if(m%s&&m%s.length){", prop, prop)
|
|
284
|
-
("d%s=[]", prop)
|
|
285
|
-
("for(var j=0;j<m%s.length;++j){", prop);
|
|
286
|
-
genValuePartial_toObject(gen, field, /* sorted */ index, prop + "[j]")
|
|
287
|
-
("}");
|
|
288
|
-
} else { gen
|
|
289
|
-
("if(m%s!=null&&m.hasOwnProperty(%j)){", prop, field.name); // !== undefined && !== null
|
|
290
|
-
genValuePartial_toObject(gen, field, /* sorted */ index, prop);
|
|
291
|
-
if (field.partOf) gen
|
|
292
|
-
("if(o.oneofs)")
|
|
293
|
-
("d%s=%j", util.safeProp(field.partOf.name), field.name);
|
|
294
|
-
}
|
|
295
|
-
gen
|
|
296
|
-
("}");
|
|
297
|
-
}
|
|
298
|
-
return gen
|
|
299
|
-
("return d");
|
|
300
|
-
/* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
301
|
-
};
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Runtime message from/to plain object converters.
|
|
4
|
+
* @namespace
|
|
5
|
+
*/
|
|
6
|
+
var converter = exports;
|
|
7
|
+
|
|
8
|
+
var Enum = require("./enum"),
|
|
9
|
+
util = require("./util");
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Generates a partial value fromObject conveter.
|
|
13
|
+
* @param {Codegen} gen Codegen instance
|
|
14
|
+
* @param {Field} field Reflected field
|
|
15
|
+
* @param {number} fieldIndex Field index
|
|
16
|
+
* @param {string} prop Property reference
|
|
17
|
+
* @returns {Codegen} Codegen instance
|
|
18
|
+
* @ignore
|
|
19
|
+
*/
|
|
20
|
+
function genValuePartial_fromObject(gen, field, fieldIndex, prop) {
|
|
21
|
+
var defaultAlreadyEmitted = false;
|
|
22
|
+
/* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
23
|
+
if (field.resolvedType) {
|
|
24
|
+
if (field.resolvedType instanceof Enum) { gen
|
|
25
|
+
("switch(d%s){", prop);
|
|
26
|
+
for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {
|
|
27
|
+
// enum unknown values passthrough
|
|
28
|
+
if (values[keys[i]] === field.typeDefault && !defaultAlreadyEmitted) { gen
|
|
29
|
+
("default:")
|
|
30
|
+
("if(typeof(d%s)===\"number\"){m%s=d%s;break}", prop, prop, prop);
|
|
31
|
+
if (!field.repeated) gen // fallback to default value only for
|
|
32
|
+
// arrays, to avoid leaving holes.
|
|
33
|
+
("break"); // for non-repeated fields, just ignore
|
|
34
|
+
defaultAlreadyEmitted = true;
|
|
35
|
+
}
|
|
36
|
+
gen
|
|
37
|
+
("case%j:", keys[i])
|
|
38
|
+
("case %i:", values[keys[i]])
|
|
39
|
+
("m%s=%j", prop, values[keys[i]])
|
|
40
|
+
("break");
|
|
41
|
+
} gen
|
|
42
|
+
("}");
|
|
43
|
+
} else gen
|
|
44
|
+
("if(typeof d%s!==\"object\")", prop)
|
|
45
|
+
("throw TypeError(%j)", field.fullName + ": object expected")
|
|
46
|
+
("m%s=types[%i].fromObject(d%s)", prop, fieldIndex, prop);
|
|
47
|
+
} else {
|
|
48
|
+
var isUnsigned = false;
|
|
49
|
+
switch (field.type) {
|
|
50
|
+
case "double":
|
|
51
|
+
case "float": gen
|
|
52
|
+
("m%s=Number(d%s)", prop, prop); // also catches "NaN", "Infinity"
|
|
53
|
+
break;
|
|
54
|
+
case "uint32":
|
|
55
|
+
case "fixed32": gen
|
|
56
|
+
("m%s=d%s>>>0", prop, prop);
|
|
57
|
+
break;
|
|
58
|
+
case "int32":
|
|
59
|
+
case "sint32":
|
|
60
|
+
case "sfixed32": gen
|
|
61
|
+
("m%s=d%s|0", prop, prop);
|
|
62
|
+
break;
|
|
63
|
+
case "uint64":
|
|
64
|
+
isUnsigned = true;
|
|
65
|
+
// eslint-disable-next-line no-fallthrough
|
|
66
|
+
case "int64":
|
|
67
|
+
case "sint64":
|
|
68
|
+
case "fixed64":
|
|
69
|
+
case "sfixed64": gen
|
|
70
|
+
("if(util.Long)")
|
|
71
|
+
("(m%s=util.Long.fromValue(d%s)).unsigned=%j", prop, prop, isUnsigned)
|
|
72
|
+
("else if(typeof d%s===\"string\")", prop)
|
|
73
|
+
("m%s=parseInt(d%s,10)", prop, prop)
|
|
74
|
+
("else if(typeof d%s===\"number\")", prop)
|
|
75
|
+
("m%s=d%s", prop, prop)
|
|
76
|
+
("else if(typeof d%s===\"object\")", prop)
|
|
77
|
+
("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)", prop, prop, prop, isUnsigned ? "true" : "");
|
|
78
|
+
break;
|
|
79
|
+
case "bytes": gen
|
|
80
|
+
("if(typeof d%s===\"string\")", prop)
|
|
81
|
+
("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)", prop, prop, prop)
|
|
82
|
+
("else if(d%s.length >= 0)", prop)
|
|
83
|
+
("m%s=d%s", prop, prop);
|
|
84
|
+
break;
|
|
85
|
+
case "string": gen
|
|
86
|
+
("m%s=String(d%s)", prop, prop);
|
|
87
|
+
break;
|
|
88
|
+
case "bool": gen
|
|
89
|
+
("m%s=Boolean(d%s)", prop, prop);
|
|
90
|
+
break;
|
|
91
|
+
/* default: gen
|
|
92
|
+
("m%s=d%s", prop, prop);
|
|
93
|
+
break; */
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return gen;
|
|
97
|
+
/* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Generates a plain object to runtime message converter specific to the specified message type.
|
|
102
|
+
* @param {Type} mtype Message type
|
|
103
|
+
* @returns {Codegen} Codegen instance
|
|
104
|
+
*/
|
|
105
|
+
converter.fromObject = function fromObject(mtype) {
|
|
106
|
+
/* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
107
|
+
var fields = mtype.fieldsArray;
|
|
108
|
+
var gen = util.codegen(["d"], mtype.name + "$fromObject")
|
|
109
|
+
("if(d instanceof this.ctor)")
|
|
110
|
+
("return d");
|
|
111
|
+
if (!fields.length) return gen
|
|
112
|
+
("return new this.ctor");
|
|
113
|
+
gen
|
|
114
|
+
("var m=new this.ctor");
|
|
115
|
+
for (var i = 0; i < fields.length; ++i) {
|
|
116
|
+
var field = fields[i].resolve(),
|
|
117
|
+
prop = util.safeProp(field.name);
|
|
118
|
+
|
|
119
|
+
// Map fields
|
|
120
|
+
if (field.map) { gen
|
|
121
|
+
("if(d%s){", prop)
|
|
122
|
+
("if(typeof d%s!==\"object\")", prop)
|
|
123
|
+
("throw TypeError(%j)", field.fullName + ": object expected")
|
|
124
|
+
("m%s={}", prop)
|
|
125
|
+
("for(var ks=Object.keys(d%s),i=0;i<ks.length;++i){", prop);
|
|
126
|
+
genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + "[ks[i]]")
|
|
127
|
+
("}")
|
|
128
|
+
("}");
|
|
129
|
+
|
|
130
|
+
// Repeated fields
|
|
131
|
+
} else if (field.repeated) { gen
|
|
132
|
+
("if(d%s){", prop)
|
|
133
|
+
("if(!Array.isArray(d%s))", prop)
|
|
134
|
+
("throw TypeError(%j)", field.fullName + ": array expected")
|
|
135
|
+
("m%s=[]", prop)
|
|
136
|
+
("for(var i=0;i<d%s.length;++i){", prop);
|
|
137
|
+
genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + "[i]")
|
|
138
|
+
("}")
|
|
139
|
+
("}");
|
|
140
|
+
|
|
141
|
+
// Non-repeated fields
|
|
142
|
+
} else {
|
|
143
|
+
if (!(field.resolvedType instanceof Enum)) gen // no need to test for null/undefined if an enum (uses switch)
|
|
144
|
+
("if(d%s!=null){", prop); // !== undefined && !== null
|
|
145
|
+
genValuePartial_fromObject(gen, field, /* not sorted */ i, prop);
|
|
146
|
+
if (!(field.resolvedType instanceof Enum)) gen
|
|
147
|
+
("}");
|
|
148
|
+
}
|
|
149
|
+
} return gen
|
|
150
|
+
("return m");
|
|
151
|
+
/* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Generates a partial value toObject converter.
|
|
156
|
+
* @param {Codegen} gen Codegen instance
|
|
157
|
+
* @param {Field} field Reflected field
|
|
158
|
+
* @param {number} fieldIndex Field index
|
|
159
|
+
* @param {string} prop Property reference
|
|
160
|
+
* @returns {Codegen} Codegen instance
|
|
161
|
+
* @ignore
|
|
162
|
+
*/
|
|
163
|
+
function genValuePartial_toObject(gen, field, fieldIndex, prop) {
|
|
164
|
+
/* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
165
|
+
if (field.resolvedType) {
|
|
166
|
+
if (field.resolvedType instanceof Enum) gen
|
|
167
|
+
("d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s", prop, fieldIndex, prop, prop, fieldIndex, prop, prop);
|
|
168
|
+
else gen
|
|
169
|
+
("d%s=types[%i].toObject(m%s,o)", prop, fieldIndex, prop);
|
|
170
|
+
} else {
|
|
171
|
+
var isUnsigned = false;
|
|
172
|
+
switch (field.type) {
|
|
173
|
+
case "double":
|
|
174
|
+
case "float": gen
|
|
175
|
+
("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s", prop, prop, prop, prop);
|
|
176
|
+
break;
|
|
177
|
+
case "uint64":
|
|
178
|
+
isUnsigned = true;
|
|
179
|
+
// eslint-disable-next-line no-fallthrough
|
|
180
|
+
case "int64":
|
|
181
|
+
case "sint64":
|
|
182
|
+
case "fixed64":
|
|
183
|
+
case "sfixed64": gen
|
|
184
|
+
("if(typeof m%s===\"number\")", prop)
|
|
185
|
+
("d%s=o.longs===String?String(m%s):m%s", prop, prop, prop)
|
|
186
|
+
("else") // Long-like
|
|
187
|
+
("d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s", prop, prop, prop, prop, isUnsigned ? "true": "", prop);
|
|
188
|
+
break;
|
|
189
|
+
case "bytes": gen
|
|
190
|
+
("d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s", prop, prop, prop, prop, prop);
|
|
191
|
+
break;
|
|
192
|
+
default: gen
|
|
193
|
+
("d%s=m%s", prop, prop);
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return gen;
|
|
198
|
+
/* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Generates a runtime message to plain object converter specific to the specified message type.
|
|
203
|
+
* @param {Type} mtype Message type
|
|
204
|
+
* @returns {Codegen} Codegen instance
|
|
205
|
+
*/
|
|
206
|
+
converter.toObject = function toObject(mtype) {
|
|
207
|
+
/* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
208
|
+
var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);
|
|
209
|
+
if (!fields.length)
|
|
210
|
+
return util.codegen()("return {}");
|
|
211
|
+
var gen = util.codegen(["m", "o"], mtype.name + "$toObject")
|
|
212
|
+
("if(!o)")
|
|
213
|
+
("o={}")
|
|
214
|
+
("var d={}");
|
|
215
|
+
|
|
216
|
+
var repeatedFields = [],
|
|
217
|
+
mapFields = [],
|
|
218
|
+
normalFields = [],
|
|
219
|
+
i = 0;
|
|
220
|
+
for (; i < fields.length; ++i)
|
|
221
|
+
if (!fields[i].partOf)
|
|
222
|
+
( fields[i].resolve().repeated ? repeatedFields
|
|
223
|
+
: fields[i].map ? mapFields
|
|
224
|
+
: normalFields).push(fields[i]);
|
|
225
|
+
|
|
226
|
+
if (repeatedFields.length) { gen
|
|
227
|
+
("if(o.arrays||o.defaults){");
|
|
228
|
+
for (i = 0; i < repeatedFields.length; ++i) gen
|
|
229
|
+
("d%s=[]", util.safeProp(repeatedFields[i].name));
|
|
230
|
+
gen
|
|
231
|
+
("}");
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
if (mapFields.length) { gen
|
|
235
|
+
("if(o.objects||o.defaults){");
|
|
236
|
+
for (i = 0; i < mapFields.length; ++i) gen
|
|
237
|
+
("d%s={}", util.safeProp(mapFields[i].name));
|
|
238
|
+
gen
|
|
239
|
+
("}");
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (normalFields.length) { gen
|
|
243
|
+
("if(o.defaults){");
|
|
244
|
+
for (i = 0; i < normalFields.length; ++i) {
|
|
245
|
+
var field = normalFields[i],
|
|
246
|
+
prop = util.safeProp(field.name);
|
|
247
|
+
if (field.resolvedType instanceof Enum) gen
|
|
248
|
+
("d%s=o.enums===String?%j:%j", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);
|
|
249
|
+
else if (field.long) gen
|
|
250
|
+
("if(util.Long){")
|
|
251
|
+
("var n=new util.Long(%i,%i,%j)", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)
|
|
252
|
+
("d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n", prop)
|
|
253
|
+
("}else")
|
|
254
|
+
("d%s=o.longs===String?%j:%i", prop, field.typeDefault.toString(), field.typeDefault.toNumber());
|
|
255
|
+
else if (field.bytes) {
|
|
256
|
+
var arrayDefault = "[" + Array.prototype.slice.call(field.typeDefault).join(",") + "]";
|
|
257
|
+
gen
|
|
258
|
+
("if(o.bytes===String)d%s=%j", prop, String.fromCharCode.apply(String, field.typeDefault))
|
|
259
|
+
("else{")
|
|
260
|
+
("d%s=%s", prop, arrayDefault)
|
|
261
|
+
("if(o.bytes!==Array)d%s=util.newBuffer(d%s)", prop, prop)
|
|
262
|
+
("}");
|
|
263
|
+
} else gen
|
|
264
|
+
("d%s=%j", prop, field.typeDefault); // also messages (=null)
|
|
265
|
+
} gen
|
|
266
|
+
("}");
|
|
267
|
+
}
|
|
268
|
+
var hasKs2 = false;
|
|
269
|
+
for (i = 0; i < fields.length; ++i) {
|
|
270
|
+
var field = fields[i],
|
|
271
|
+
index = mtype._fieldsArray.indexOf(field),
|
|
272
|
+
prop = util.safeProp(field.name);
|
|
273
|
+
if (field.map) {
|
|
274
|
+
if (!hasKs2) { hasKs2 = true; gen
|
|
275
|
+
("var ks2");
|
|
276
|
+
} gen
|
|
277
|
+
("if(m%s&&(ks2=Object.keys(m%s)).length){", prop, prop)
|
|
278
|
+
("d%s={}", prop)
|
|
279
|
+
("for(var j=0;j<ks2.length;++j){");
|
|
280
|
+
genValuePartial_toObject(gen, field, /* sorted */ index, prop + "[ks2[j]]")
|
|
281
|
+
("}");
|
|
282
|
+
} else if (field.repeated) { gen
|
|
283
|
+
("if(m%s&&m%s.length){", prop, prop)
|
|
284
|
+
("d%s=[]", prop)
|
|
285
|
+
("for(var j=0;j<m%s.length;++j){", prop);
|
|
286
|
+
genValuePartial_toObject(gen, field, /* sorted */ index, prop + "[j]")
|
|
287
|
+
("}");
|
|
288
|
+
} else { gen
|
|
289
|
+
("if(m%s!=null&&m.hasOwnProperty(%j)){", prop, field.name); // !== undefined && !== null
|
|
290
|
+
genValuePartial_toObject(gen, field, /* sorted */ index, prop);
|
|
291
|
+
if (field.partOf) gen
|
|
292
|
+
("if(o.oneofs)")
|
|
293
|
+
("d%s=%j", util.safeProp(field.partOf.name), field.name);
|
|
294
|
+
}
|
|
295
|
+
gen
|
|
296
|
+
("}");
|
|
297
|
+
}
|
|
298
|
+
return gen
|
|
299
|
+
("return d");
|
|
300
|
+
/* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
301
|
+
};
|