protobufjs 7.3.2 → 7.4.0

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/dist/light/protobuf.js +6259 -6259
  4. package/dist/light/protobuf.js.map +1 -1
  5. package/dist/light/protobuf.min.js +2 -2
  6. package/dist/light/protobuf.min.js.map +1 -1
  7. package/dist/minimal/protobuf.js +1930 -1930
  8. package/dist/minimal/protobuf.js.map +1 -1
  9. package/dist/minimal/protobuf.min.js +2 -2
  10. package/dist/minimal/protobuf.min.js.map +1 -1
  11. package/dist/protobuf.js +7972 -7968
  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 +191 -191
  19. package/ext/descriptor/index.js +1052 -1052
  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 +738 -738
  30. package/google/protobuf/descriptor.proto +286 -286
  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 +2741 -2741
  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 +112 -111
  42. package/scripts/postinstall.js +32 -32
  43. package/src/common.js +399 -399
  44. package/src/converter.js +301 -301
  45. package/src/decoder.js +129 -129
  46. package/src/encoder.js +100 -100
  47. package/src/enum.js +198 -198
  48. package/src/field.js +377 -377
  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 +138 -138
  54. package/src/method.js +160 -160
  55. package/src/namespace.js +433 -433
  56. package/src/object.js +243 -243
  57. package/src/oneof.js +203 -203
  58. package/src/parse.js +893 -889
  59. package/src/reader.js +416 -416
  60. package/src/reader_buffer.js +51 -51
  61. package/src/root.js +368 -368
  62. package/src/roots.js +18 -18
  63. package/src/rpc/service.js +142 -142
  64. package/src/rpc.js +36 -36
  65. package/src/service.js +167 -167
  66. package/src/tokenize.js +416 -416
  67. package/src/type.js +589 -589
  68. package/src/types.js +196 -196
  69. package/src/typescript.jsdoc +15 -15
  70. package/src/util/longbits.js +200 -200
  71. package/src/util/minimal.js +438 -438
  72. package/src/util.js +212 -212
  73. package/src/verifier.js +176 -176
  74. package/src/wrappers.js +102 -102
  75. package/src/writer.js +465 -465
  76. package/src/writer_buffer.js +85 -85
  77. 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
+ };