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