protobufjs 7.3.2 → 7.3.3

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 (77) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +727 -727
  3. package/ext/debug/README.md +4 -4
  4. package/ext/debug/index.js +71 -71
  5. package/ext/descriptor/README.md +72 -72
  6. package/ext/descriptor/index.d.ts +191 -191
  7. package/ext/descriptor/index.js +1052 -1052
  8. package/ext/descriptor/test.js +54 -54
  9. package/google/LICENSE +27 -27
  10. package/google/README.md +1 -1
  11. package/google/api/annotations.json +82 -82
  12. package/google/api/annotations.proto +10 -10
  13. package/google/api/http.json +85 -85
  14. package/google/api/http.proto +30 -30
  15. package/google/protobuf/api.json +117 -117
  16. package/google/protobuf/api.proto +33 -33
  17. package/google/protobuf/descriptor.json +738 -738
  18. package/google/protobuf/descriptor.proto +286 -286
  19. package/google/protobuf/source_context.json +19 -19
  20. package/google/protobuf/source_context.proto +7 -7
  21. package/google/protobuf/type.json +201 -201
  22. package/google/protobuf/type.proto +89 -89
  23. package/index.d.ts +2741 -2741
  24. package/index.js +4 -4
  25. package/light.d.ts +2 -2
  26. package/light.js +3 -3
  27. package/minimal.d.ts +2 -2
  28. package/minimal.js +4 -4
  29. package/package.json +111 -111
  30. package/scripts/postinstall.js +32 -32
  31. package/src/common.js +399 -399
  32. package/src/converter.js +301 -301
  33. package/src/decoder.js +129 -129
  34. package/src/encoder.js +100 -100
  35. package/src/enum.js +198 -198
  36. package/src/field.js +377 -377
  37. package/src/index-light.js +104 -104
  38. package/src/index-minimal.js +36 -36
  39. package/src/index.js +12 -12
  40. package/src/mapfield.js +126 -126
  41. package/src/message.js +138 -138
  42. package/src/method.js +160 -160
  43. package/src/namespace.js +433 -433
  44. package/src/object.js +243 -243
  45. package/src/oneof.js +203 -203
  46. package/src/parse.js +893 -889
  47. package/src/reader.js +416 -416
  48. package/src/reader_buffer.js +51 -51
  49. package/src/root.js +368 -368
  50. package/src/roots.js +18 -18
  51. package/src/rpc/service.js +142 -142
  52. package/src/rpc.js +36 -36
  53. package/src/service.js +167 -167
  54. package/src/tokenize.js +416 -416
  55. package/src/type.js +589 -589
  56. package/src/types.js +196 -196
  57. package/src/typescript.jsdoc +15 -15
  58. package/src/util/longbits.js +200 -200
  59. package/src/util/minimal.js +438 -438
  60. package/src/util.js +212 -212
  61. package/src/verifier.js +176 -176
  62. package/src/wrappers.js +102 -102
  63. package/src/writer.js +465 -465
  64. package/src/writer_buffer.js +85 -85
  65. package/tsconfig.json +7 -7
  66. package/dist/light/protobuf.js +0 -7381
  67. package/dist/light/protobuf.js.map +0 -1
  68. package/dist/light/protobuf.min.js +0 -8
  69. package/dist/light/protobuf.min.js.map +0 -1
  70. package/dist/minimal/protobuf.js +0 -2736
  71. package/dist/minimal/protobuf.js.map +0 -1
  72. package/dist/minimal/protobuf.min.js +0 -8
  73. package/dist/minimal/protobuf.min.js.map +0 -1
  74. package/dist/protobuf.js +0 -9105
  75. package/dist/protobuf.js.map +0 -1
  76. package/dist/protobuf.min.js +0 -8
  77. package/dist/protobuf.min.js.map +0 -1
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
+ };