protobufjs 8.6.1 → 8.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +441 -441
  3. package/dist/light/protobuf.js +8455 -8455
  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 +2999 -2999
  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 +10359 -10359
  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/README.md +70 -70
  16. package/ext/debug/README.md +4 -4
  17. package/ext/debug/index.js +71 -71
  18. package/ext/descriptor/README.md +5 -5
  19. package/ext/descriptor/index.d.ts +2 -2
  20. package/ext/descriptor/index.js +2 -2
  21. package/ext/descriptor.d.ts +87 -87
  22. package/ext/descriptor.js +1354 -1354
  23. package/ext/protojson.LICENSE +201 -201
  24. package/ext/protojson.d.ts +20 -20
  25. package/ext/protojson.js +925 -925
  26. package/ext/textformat.d.ts +19 -19
  27. package/ext/textformat.js +1256 -1256
  28. package/google/LICENSE +27 -27
  29. package/google/README.md +1 -1
  30. package/google/api/annotations.json +82 -82
  31. package/google/api/annotations.proto +10 -10
  32. package/google/api/http.json +85 -85
  33. package/google/api/http.proto +30 -30
  34. package/google/protobuf/api.json +117 -117
  35. package/google/protobuf/api.proto +33 -33
  36. package/google/protobuf/compiler/plugin.json +126 -126
  37. package/google/protobuf/compiler/plugin.proto +47 -47
  38. package/google/protobuf/descriptor.json +1381 -1381
  39. package/google/protobuf/descriptor.proto +534 -534
  40. package/google/protobuf/source_context.json +19 -19
  41. package/google/protobuf/source_context.proto +7 -7
  42. package/google/protobuf/type.json +201 -201
  43. package/google/protobuf/type.proto +89 -89
  44. package/index.d.ts +1 -1
  45. package/index.js +4 -4
  46. package/light.d.ts +2 -2
  47. package/light.js +3 -3
  48. package/minimal.d.ts +2 -2
  49. package/minimal.js +4 -4
  50. package/package.json +93 -93
  51. package/src/common.js +399 -399
  52. package/src/converter.js +344 -344
  53. package/src/decoder.js +208 -208
  54. package/src/encoder.js +111 -111
  55. package/src/enum.js +231 -231
  56. package/src/field.js +497 -497
  57. package/src/index-light.js +104 -104
  58. package/src/index-minimal.js +36 -36
  59. package/src/index.js +12 -12
  60. package/src/mapfield.js +136 -136
  61. package/src/message.js +137 -137
  62. package/src/method.js +175 -175
  63. package/src/namespace.js +565 -565
  64. package/src/object.js +382 -382
  65. package/src/oneof.js +225 -225
  66. package/src/parse.js +1068 -1068
  67. package/src/reader.js +543 -543
  68. package/src/reader_buffer.js +72 -72
  69. package/src/root.js +416 -416
  70. package/src/roots.js +18 -18
  71. package/src/rpc/service.js +148 -148
  72. package/src/rpc.js +36 -36
  73. package/src/service.js +198 -198
  74. package/src/tokenize.js +421 -421
  75. package/src/type.js +655 -655
  76. package/src/types.js +196 -196
  77. package/src/typescript.js +25 -25
  78. package/src/util/aspromise.d.ts +13 -13
  79. package/src/util/aspromise.js +52 -52
  80. package/src/util/base64.d.ts +32 -32
  81. package/src/util/base64.js +146 -146
  82. package/src/util/codegen.d.ts +31 -31
  83. package/src/util/codegen.js +113 -113
  84. package/src/util/eventemitter.d.ts +45 -45
  85. package/src/util/eventemitter.js +86 -86
  86. package/src/util/fetch.d.ts +56 -56
  87. package/src/util/fetch.js +112 -112
  88. package/src/util/float.d.ts +83 -83
  89. package/src/util/float.js +335 -335
  90. package/src/util/fs.js +11 -11
  91. package/src/util/longbits.js +200 -200
  92. package/src/util/minimal.js +515 -515
  93. package/src/util/path.d.ts +22 -22
  94. package/src/util/path.js +72 -72
  95. package/src/util/patterns.js +7 -7
  96. package/src/util/pool.d.ts +32 -32
  97. package/src/util/pool.js +48 -48
  98. package/src/util/utf8.d.ts +24 -24
  99. package/src/util/utf8.js +130 -130
  100. package/src/util.js +242 -242
  101. package/src/verifier.js +180 -180
  102. package/src/wrappers.js +106 -106
  103. package/src/writer.js +495 -495
  104. package/src/writer_buffer.js +102 -102
  105. package/tsconfig.json +6 -6
package/src/converter.js CHANGED
@@ -1,344 +1,344 @@
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
- types = require("./types"),
10
- util = require("./util");
11
-
12
- /**
13
- * Generates a partial value fromObject conveter.
14
- * @param {Codegen} gen Codegen instance
15
- * @param {Field} field Reflected field
16
- * @param {number} fieldIndex Field index
17
- * @param {string} prop Property reference
18
- * @returns {Codegen} Codegen instance
19
- * @ignore
20
- */
21
- function genValuePartial_fromObject(gen, field, fieldIndex, prop) {
22
- var defaultAlreadyEmitted = false;
23
- /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
24
- if (field.resolvedType) {
25
- if (field.resolvedType instanceof Enum) { gen
26
- ("switch(d%s){", prop);
27
- for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {
28
- // enum unknown values passthrough
29
- if (values[keys[i]] === field.typeDefault && !defaultAlreadyEmitted) { gen
30
- ("default:")
31
- ("if(typeof d%s===\"number\"){m%s=d%s;break}", prop, prop, prop);
32
- if (!field.repeated) gen // fallback to default value only for
33
- // arrays, to avoid leaving holes.
34
- ("break"); // for non-repeated fields, just ignore
35
- defaultAlreadyEmitted = true;
36
- }
37
- gen
38
- ("case%j:", keys[i])
39
- ("case %i:", values[keys[i]])
40
- ("m%s=%j", prop, values[keys[i]])
41
- ("break");
42
- } gen
43
- ("}");
44
- } else gen
45
- ("if(!util.isObject(d%s))", prop)
46
- ("throw TypeError(%j)", field.fullName + ": object expected")
47
- ("m%s=types[%i].fromObject(d%s,q+1)", prop, fieldIndex, prop);
48
- } else {
49
- var isUnsigned = false;
50
- switch (field.type) {
51
- case "double":
52
- case "float": gen
53
- ("m%s=Number(d%s)", prop, prop); // also catches "NaN", "Infinity"
54
- break;
55
- case "uint32":
56
- case "fixed32": gen
57
- ("m%s=d%s>>>0", prop, prop);
58
- break;
59
- case "int32":
60
- case "sint32":
61
- case "sfixed32": gen
62
- ("m%s=d%s|0", prop, prop);
63
- break;
64
- case "uint64":
65
- case "fixed64":
66
- isUnsigned = true;
67
- // eslint-disable-next-line no-fallthrough
68
- case "int64":
69
- case "sint64":
70
- case "sfixed64": gen
71
- ("if(util.Long)")
72
- ("m%s=util.Long.fromValue(d%s,%j)", prop, prop, isUnsigned)
73
- ("else if(typeof d%s===\"string\")", prop)
74
- ("m%s=parseInt(d%s,10)", prop, prop)
75
- ("else if(typeof d%s===\"number\")", prop)
76
- ("m%s=d%s", prop, prop)
77
- ("else if(typeof d%s===\"object\")", prop)
78
- ("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)", prop, prop, prop, isUnsigned ? "true" : "");
79
- break;
80
- case "bytes": gen
81
- ("if(typeof d%s===\"string\")", prop)
82
- ("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)", prop, prop, prop)
83
- ("else if(d%s.length>=0)", prop)
84
- ("m%s=d%s", prop, prop);
85
- break;
86
- case "string": gen
87
- ("m%s=String(d%s)", prop, prop);
88
- break;
89
- case "bool": gen
90
- ("m%s=Boolean(d%s)", prop, prop);
91
- break;
92
- /* default: gen
93
- ("m%s=d%s", prop, prop);
94
- break; */
95
- }
96
- }
97
- return gen;
98
- /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
99
- }
100
-
101
- /**
102
- * Generates a plain object to runtime message converter specific to the specified message type.
103
- * @param {Type} mtype Message type
104
- * @returns {Codegen} Codegen instance
105
- */
106
- converter.fromObject = function fromObject(mtype) {
107
- /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
108
- var fields = mtype.fieldsArray;
109
- var gen = util.codegen(["d", "q"])
110
- ("if(d instanceof C)")
111
- ("return d")
112
- ("if(!util.isObject(d))")
113
- ("throw TypeError(%j)", mtype.fullName + ": object expected")
114
- ("if(q===undefined)q=0")
115
- ("if(q>util.recursionLimit)")
116
- ("throw Error(\"max depth exceeded\")");
117
- if (!fields.length) return gen
118
- ("return new C");
119
- gen
120
- ("var m=new C");
121
- for (var i = 0; i < fields.length; ++i) {
122
- var field = fields[i].resolve(),
123
- prop = util.safeProp(field.name),
124
- implicitPresence = !field.hasPresence && !field.repeated && !field.map
125
- && (field.resolvedType instanceof Enum || types.basic[field.type] !== undefined);
126
-
127
- // Map fields
128
- if (field.map) { gen
129
- ("if(d%s){", prop)
130
- ("if(!util.isObject(d%s))", prop)
131
- ("throw TypeError(%j)", field.fullName + ": object expected")
132
- ("m%s={}", prop)
133
- ("for(var ks=Object.keys(d%s),i=0;i<ks.length;++i){", prop);
134
- gen
135
- ("if(ks[i]===\"__proto__\")")
136
- ("util.makeProp(m%s,ks[i])", prop);
137
- genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + "[ks[i]]")
138
- ("}")
139
- ("}");
140
-
141
- // Repeated fields
142
- } else if (field.repeated) { gen
143
- ("if(d%s){", prop)
144
- ("if(!Array.isArray(d%s))", prop)
145
- ("throw TypeError(%j)", field.fullName + ": array expected")
146
- ("m%s=Array(d%s.length)", prop, prop)
147
- ("for(var i=0;i<d%s.length;++i){", prop);
148
- genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + "[i]")
149
- ("}")
150
- ("}");
151
-
152
- // Non-repeated fields
153
- } else {
154
- if (!(field.resolvedType instanceof Enum)) gen // no need to test for null/undefined if an enum (uses switch)
155
- ("if(d%s!=null){", prop); // !== undefined && !== null
156
- if (implicitPresence) {
157
- if (field.resolvedType instanceof Enum) gen
158
- ("if(d%s!==%j&&(typeof d%s!==\"string\"||types[%i].values[d%s]!==%j)){", prop, field.typeDefault, prop, i, prop, field.typeDefault);
159
- else if (field.type === "string") gen
160
- ("if(typeof d%s!==\"string\"||d%s.length){", prop, prop);
161
- else if (field.type === "bytes") gen
162
- ("if(d%s.length){", prop);
163
- else if (field.type === "bool") gen
164
- ("if(d%s){", prop);
165
- else if (types.long[field.type] !== undefined) gen
166
- ("if(typeof d%s===\"object\"?d%s.low||d%s.high:Number(d%s)!==0){", prop, prop, prop, prop);
167
- else gen
168
- ("if(Number(d%s)!==0){", prop);
169
- }
170
- genValuePartial_fromObject(gen, field, /* not sorted */ i, prop);
171
- if (implicitPresence) gen
172
- ("}");
173
- if (!(field.resolvedType instanceof Enum)) gen
174
- ("}");
175
- }
176
- } return gen
177
- ("return m");
178
- /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
179
- };
180
-
181
- /**
182
- * Generates a partial value toObject converter.
183
- * @param {Codegen} gen Codegen instance
184
- * @param {Field} field Reflected field
185
- * @param {number} fieldIndex Field index
186
- * @param {string} dstProp Destination property reference
187
- * @param {string} [srcProp] Source property reference
188
- * @returns {Codegen} Codegen instance
189
- * @ignore
190
- */
191
- function genValuePartial_toObject(gen, field, fieldIndex, dstProp, srcProp) {
192
- /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
193
- if (!srcProp)
194
- srcProp = dstProp;
195
- if (field.resolvedType) {
196
- if (field.resolvedType instanceof Enum) gen
197
- ("d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s", dstProp, fieldIndex, srcProp, srcProp, fieldIndex, srcProp, srcProp);
198
- else gen
199
- ("d%s=types[%i].toObject(m%s,o,q+1)", dstProp, fieldIndex, srcProp);
200
- } else {
201
- var isUnsigned = false;
202
- switch (field.type) {
203
- case "double":
204
- case "float": gen
205
- ("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s", dstProp, srcProp, srcProp, srcProp);
206
- break;
207
- case "uint64":
208
- case "fixed64":
209
- isUnsigned = true;
210
- // eslint-disable-next-line no-fallthrough
211
- case "int64":
212
- case "sint64":
213
- case "sfixed64": gen
214
- ("if(typeof BigInt!==\"undefined\"&&o.longs===BigInt)")
215
- ("d%s=typeof m%s===\"number\"?BigInt(m%s):util.Long.fromBits(m%s.low>>>0,m%s.high>>>0,%j).toBigInt()", dstProp, srcProp, srcProp, srcProp, srcProp, isUnsigned)
216
- ("else if(typeof m%s===\"number\")", srcProp)
217
- ("d%s=o.longs===String?String(m%s):m%s", dstProp, srcProp, srcProp)
218
- ("else") // Long-like
219
- ("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", dstProp, srcProp, srcProp, srcProp, isUnsigned ? "true": "", srcProp);
220
- break;
221
- case "bytes": gen
222
- ("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", dstProp, srcProp, srcProp, srcProp, srcProp);
223
- break;
224
- default: gen
225
- ("d%s=m%s", dstProp, srcProp);
226
- break;
227
- }
228
- }
229
- return gen;
230
- /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
231
- }
232
-
233
- /**
234
- * Generates a runtime message to plain object converter specific to the specified message type.
235
- * @param {Type} mtype Message type
236
- * @returns {Codegen} Codegen instance
237
- */
238
- converter.toObject = function toObject(mtype) {
239
- /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
240
- var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);
241
- if (!fields.length)
242
- return util.codegen()("return {}");
243
- var gen = util.codegen(["m", "o", "q"])
244
- ("if(!o)")
245
- ("o={}")
246
- ("if(q===undefined)q=0")
247
- ("if(q>util.recursionLimit)")
248
- ("throw Error(\"max depth exceeded\")")
249
- ("var d={}");
250
-
251
- var repeatedFields = [],
252
- mapFields = [],
253
- normalFields = [],
254
- i = 0;
255
- for (; i < fields.length; ++i)
256
- if (!fields[i].partOf)
257
- ( fields[i].resolve().repeated ? repeatedFields
258
- : fields[i].map ? mapFields
259
- : normalFields).push(fields[i]);
260
-
261
- if (repeatedFields.length) { gen
262
- ("if(o.arrays||o.defaults){");
263
- for (i = 0; i < repeatedFields.length; ++i) gen
264
- ("d%s=[]", util.safeProp(repeatedFields[i].name));
265
- gen
266
- ("}");
267
- }
268
-
269
- if (mapFields.length) { gen
270
- ("if(o.objects||o.defaults){");
271
- for (i = 0; i < mapFields.length; ++i) gen
272
- ("d%s={}", util.safeProp(mapFields[i].name));
273
- gen
274
- ("}");
275
- }
276
-
277
- if (normalFields.length) { gen
278
- ("if(o.defaults){");
279
- for (i = 0; i < normalFields.length; ++i) {
280
- var field = normalFields[i],
281
- prop = util.safeProp(field.name);
282
- if (field.resolvedType instanceof Enum) gen
283
- ("d%s=o.enums===String?%j:%j", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);
284
- else if (field.long) gen
285
- ("if(util.Long){")
286
- ("var n=new util.Long(%i,%i,%j)", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)
287
- ("d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():typeof BigInt!==\"undefined\"&&o.longs===BigInt?n.toBigInt():n", prop)
288
- ("}else")
289
- ("d%s=o.longs===String?%j:typeof BigInt!==\"undefined\"&&o.longs===BigInt?BigInt(%j):%i", prop, field.typeDefault.toString(), field.typeDefault.toString(), field.typeDefault.toNumber());
290
- else if (field.bytes) {
291
- var arrayDefault = Array.prototype.slice.call(field.typeDefault);
292
- gen
293
- ("if(o.bytes===String)d%s=%j", prop, String.fromCharCode.apply(String, field.typeDefault))
294
- ("else{")
295
- ("d%s=%j", prop, arrayDefault)
296
- ("if(o.bytes!==Array)d%s=util.newBuffer(d%s)", prop, prop)
297
- ("}");
298
- } else gen
299
- ("d%s=%j", prop, field.typeDefault); // also messages (=null)
300
- } gen
301
- ("}");
302
- }
303
- var hasKs2 = false;
304
- for (i = 0; i < fields.length; ++i) {
305
- var field = fields[i],
306
- index = mtype._fieldsArray.indexOf(field),
307
- prop = util.safeProp(field.name);
308
- if (field.map) {
309
- if (!hasKs2) { hasKs2 = true; gen
310
- ("var ks2");
311
- } gen
312
- ("if(m%s&&(ks2=Object.keys(m%s)).length){", prop, prop)
313
- ("d%s={}", prop);
314
- var longKey = types.long[field.keyType] !== undefined,
315
- srcProp = prop + "[ks2[j]]";
316
- gen
317
- ("for(var j=0;j<ks2.length;++j){");
318
- if (longKey) gen
319
- ("var k2=util.longFromKey(ks2[j],%j).toString()", field.keyType === "uint64" || field.keyType === "fixed64");
320
- gen
321
- ("if(ks2[j]===\"__proto__\")")
322
- ("util.makeProp(d%s,ks2[j])", prop);
323
- genValuePartial_toObject(gen, field, /* sorted */ index, longKey ? prop + "[k2]" : srcProp, srcProp)
324
- ("}");
325
- } else if (field.repeated) { gen
326
- ("if(m%s&&m%s.length){", prop, prop)
327
- ("d%s=Array(m%s.length)", prop, prop)
328
- ("for(var j=0;j<m%s.length;++j){", prop);
329
- genValuePartial_toObject(gen, field, /* sorted */ index, prop + "[j]")
330
- ("}");
331
- } else { gen
332
- ("if(m%s!=null&&Object.hasOwnProperty.call(m,%j)){", prop, field.name); // !== undefined && !== null
333
- genValuePartial_toObject(gen, field, /* sorted */ index, prop);
334
- if (field.partOf && !field.partOf.isProto3Optional) gen
335
- ("if(o.oneofs)")
336
- ("d%s=%j", util.safeProp(field.partOf.name), field.name);
337
- }
338
- gen
339
- ("}");
340
- }
341
- return gen
342
- ("return d");
343
- /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
344
- };
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
+ types = require("./types"),
10
+ util = require("./util");
11
+
12
+ /**
13
+ * Generates a partial value fromObject conveter.
14
+ * @param {Codegen} gen Codegen instance
15
+ * @param {Field} field Reflected field
16
+ * @param {number} fieldIndex Field index
17
+ * @param {string} prop Property reference
18
+ * @returns {Codegen} Codegen instance
19
+ * @ignore
20
+ */
21
+ function genValuePartial_fromObject(gen, field, fieldIndex, prop) {
22
+ var defaultAlreadyEmitted = false;
23
+ /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
24
+ if (field.resolvedType) {
25
+ if (field.resolvedType instanceof Enum) { gen
26
+ ("switch(d%s){", prop);
27
+ for (var values = field.resolvedType.values, keys = Object.keys(values), i = 0; i < keys.length; ++i) {
28
+ // enum unknown values passthrough
29
+ if (values[keys[i]] === field.typeDefault && !defaultAlreadyEmitted) { gen
30
+ ("default:")
31
+ ("if(typeof d%s===\"number\"){m%s=d%s;break}", prop, prop, prop);
32
+ if (!field.repeated) gen // fallback to default value only for
33
+ // arrays, to avoid leaving holes.
34
+ ("break"); // for non-repeated fields, just ignore
35
+ defaultAlreadyEmitted = true;
36
+ }
37
+ gen
38
+ ("case%j:", keys[i])
39
+ ("case %i:", values[keys[i]])
40
+ ("m%s=%j", prop, values[keys[i]])
41
+ ("break");
42
+ } gen
43
+ ("}");
44
+ } else gen
45
+ ("if(!util.isObject(d%s))", prop)
46
+ ("throw TypeError(%j)", field.fullName + ": object expected")
47
+ ("m%s=types[%i].fromObject(d%s,q+1)", prop, fieldIndex, prop);
48
+ } else {
49
+ var isUnsigned = false;
50
+ switch (field.type) {
51
+ case "double":
52
+ case "float": gen
53
+ ("m%s=Number(d%s)", prop, prop); // also catches "NaN", "Infinity"
54
+ break;
55
+ case "uint32":
56
+ case "fixed32": gen
57
+ ("m%s=d%s>>>0", prop, prop);
58
+ break;
59
+ case "int32":
60
+ case "sint32":
61
+ case "sfixed32": gen
62
+ ("m%s=d%s|0", prop, prop);
63
+ break;
64
+ case "uint64":
65
+ case "fixed64":
66
+ isUnsigned = true;
67
+ // eslint-disable-next-line no-fallthrough
68
+ case "int64":
69
+ case "sint64":
70
+ case "sfixed64": gen
71
+ ("if(util.Long)")
72
+ ("m%s=util.Long.fromValue(d%s,%j)", prop, prop, isUnsigned)
73
+ ("else if(typeof d%s===\"string\")", prop)
74
+ ("m%s=parseInt(d%s,10)", prop, prop)
75
+ ("else if(typeof d%s===\"number\")", prop)
76
+ ("m%s=d%s", prop, prop)
77
+ ("else if(typeof d%s===\"object\")", prop)
78
+ ("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)", prop, prop, prop, isUnsigned ? "true" : "");
79
+ break;
80
+ case "bytes": gen
81
+ ("if(typeof d%s===\"string\")", prop)
82
+ ("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)", prop, prop, prop)
83
+ ("else if(d%s.length>=0)", prop)
84
+ ("m%s=d%s", prop, prop);
85
+ break;
86
+ case "string": gen
87
+ ("m%s=String(d%s)", prop, prop);
88
+ break;
89
+ case "bool": gen
90
+ ("m%s=Boolean(d%s)", prop, prop);
91
+ break;
92
+ /* default: gen
93
+ ("m%s=d%s", prop, prop);
94
+ break; */
95
+ }
96
+ }
97
+ return gen;
98
+ /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
99
+ }
100
+
101
+ /**
102
+ * Generates a plain object to runtime message converter specific to the specified message type.
103
+ * @param {Type} mtype Message type
104
+ * @returns {Codegen} Codegen instance
105
+ */
106
+ converter.fromObject = function fromObject(mtype) {
107
+ /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
108
+ var fields = mtype.fieldsArray;
109
+ var gen = util.codegen(["d", "q"])
110
+ ("if(d instanceof C)")
111
+ ("return d")
112
+ ("if(!util.isObject(d))")
113
+ ("throw TypeError(%j)", mtype.fullName + ": object expected")
114
+ ("if(q===undefined)q=0")
115
+ ("if(q>util.recursionLimit)")
116
+ ("throw Error(\"max depth exceeded\")");
117
+ if (!fields.length) return gen
118
+ ("return new C");
119
+ gen
120
+ ("var m=new C");
121
+ for (var i = 0; i < fields.length; ++i) {
122
+ var field = fields[i].resolve(),
123
+ prop = util.safeProp(field.name),
124
+ implicitPresence = !field.hasPresence && !field.repeated && !field.map
125
+ && (field.resolvedType instanceof Enum || types.basic[field.type] !== undefined);
126
+
127
+ // Map fields
128
+ if (field.map) { gen
129
+ ("if(d%s){", prop)
130
+ ("if(!util.isObject(d%s))", prop)
131
+ ("throw TypeError(%j)", field.fullName + ": object expected")
132
+ ("m%s={}", prop)
133
+ ("for(var ks=Object.keys(d%s),i=0;i<ks.length;++i){", prop);
134
+ gen
135
+ ("if(ks[i]===\"__proto__\")")
136
+ ("util.makeProp(m%s,ks[i])", prop);
137
+ genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + "[ks[i]]")
138
+ ("}")
139
+ ("}");
140
+
141
+ // Repeated fields
142
+ } else if (field.repeated) { gen
143
+ ("if(d%s){", prop)
144
+ ("if(!Array.isArray(d%s))", prop)
145
+ ("throw TypeError(%j)", field.fullName + ": array expected")
146
+ ("m%s=Array(d%s.length)", prop, prop)
147
+ ("for(var i=0;i<d%s.length;++i){", prop);
148
+ genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + "[i]")
149
+ ("}")
150
+ ("}");
151
+
152
+ // Non-repeated fields
153
+ } else {
154
+ if (!(field.resolvedType instanceof Enum)) gen // no need to test for null/undefined if an enum (uses switch)
155
+ ("if(d%s!=null){", prop); // !== undefined && !== null
156
+ if (implicitPresence) {
157
+ if (field.resolvedType instanceof Enum) gen
158
+ ("if(d%s!==%j&&(typeof d%s!==\"string\"||types[%i].values[d%s]!==%j)){", prop, field.typeDefault, prop, i, prop, field.typeDefault);
159
+ else if (field.type === "string") gen
160
+ ("if(typeof d%s!==\"string\"||d%s.length){", prop, prop);
161
+ else if (field.type === "bytes") gen
162
+ ("if(d%s.length){", prop);
163
+ else if (field.type === "bool") gen
164
+ ("if(d%s){", prop);
165
+ else if (types.long[field.type] !== undefined) gen
166
+ ("if(typeof d%s===\"object\"?d%s.low||d%s.high:Number(d%s)!==0){", prop, prop, prop, prop);
167
+ else gen
168
+ ("if(Number(d%s)!==0){", prop);
169
+ }
170
+ genValuePartial_fromObject(gen, field, /* not sorted */ i, prop);
171
+ if (implicitPresence) gen
172
+ ("}");
173
+ if (!(field.resolvedType instanceof Enum)) gen
174
+ ("}");
175
+ }
176
+ } return gen
177
+ ("return m");
178
+ /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
179
+ };
180
+
181
+ /**
182
+ * Generates a partial value toObject converter.
183
+ * @param {Codegen} gen Codegen instance
184
+ * @param {Field} field Reflected field
185
+ * @param {number} fieldIndex Field index
186
+ * @param {string} dstProp Destination property reference
187
+ * @param {string} [srcProp] Source property reference
188
+ * @returns {Codegen} Codegen instance
189
+ * @ignore
190
+ */
191
+ function genValuePartial_toObject(gen, field, fieldIndex, dstProp, srcProp) {
192
+ /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
193
+ if (!srcProp)
194
+ srcProp = dstProp;
195
+ if (field.resolvedType) {
196
+ if (field.resolvedType instanceof Enum) gen
197
+ ("d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s", dstProp, fieldIndex, srcProp, srcProp, fieldIndex, srcProp, srcProp);
198
+ else gen
199
+ ("d%s=types[%i].toObject(m%s,o,q+1)", dstProp, fieldIndex, srcProp);
200
+ } else {
201
+ var isUnsigned = false;
202
+ switch (field.type) {
203
+ case "double":
204
+ case "float": gen
205
+ ("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s", dstProp, srcProp, srcProp, srcProp);
206
+ break;
207
+ case "uint64":
208
+ case "fixed64":
209
+ isUnsigned = true;
210
+ // eslint-disable-next-line no-fallthrough
211
+ case "int64":
212
+ case "sint64":
213
+ case "sfixed64": gen
214
+ ("if(typeof BigInt!==\"undefined\"&&o.longs===BigInt)")
215
+ ("d%s=typeof m%s===\"number\"?BigInt(m%s):util.Long.fromBits(m%s.low>>>0,m%s.high>>>0,%j).toBigInt()", dstProp, srcProp, srcProp, srcProp, srcProp, isUnsigned)
216
+ ("else if(typeof m%s===\"number\")", srcProp)
217
+ ("d%s=o.longs===String?String(m%s):m%s", dstProp, srcProp, srcProp)
218
+ ("else") // Long-like
219
+ ("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", dstProp, srcProp, srcProp, srcProp, isUnsigned ? "true": "", srcProp);
220
+ break;
221
+ case "bytes": gen
222
+ ("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", dstProp, srcProp, srcProp, srcProp, srcProp);
223
+ break;
224
+ default: gen
225
+ ("d%s=m%s", dstProp, srcProp);
226
+ break;
227
+ }
228
+ }
229
+ return gen;
230
+ /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
231
+ }
232
+
233
+ /**
234
+ * Generates a runtime message to plain object converter specific to the specified message type.
235
+ * @param {Type} mtype Message type
236
+ * @returns {Codegen} Codegen instance
237
+ */
238
+ converter.toObject = function toObject(mtype) {
239
+ /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
240
+ var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById);
241
+ if (!fields.length)
242
+ return util.codegen()("return {}");
243
+ var gen = util.codegen(["m", "o", "q"])
244
+ ("if(!o)")
245
+ ("o={}")
246
+ ("if(q===undefined)q=0")
247
+ ("if(q>util.recursionLimit)")
248
+ ("throw Error(\"max depth exceeded\")")
249
+ ("var d={}");
250
+
251
+ var repeatedFields = [],
252
+ mapFields = [],
253
+ normalFields = [],
254
+ i = 0;
255
+ for (; i < fields.length; ++i)
256
+ if (!fields[i].partOf)
257
+ ( fields[i].resolve().repeated ? repeatedFields
258
+ : fields[i].map ? mapFields
259
+ : normalFields).push(fields[i]);
260
+
261
+ if (repeatedFields.length) { gen
262
+ ("if(o.arrays||o.defaults){");
263
+ for (i = 0; i < repeatedFields.length; ++i) gen
264
+ ("d%s=[]", util.safeProp(repeatedFields[i].name));
265
+ gen
266
+ ("}");
267
+ }
268
+
269
+ if (mapFields.length) { gen
270
+ ("if(o.objects||o.defaults){");
271
+ for (i = 0; i < mapFields.length; ++i) gen
272
+ ("d%s={}", util.safeProp(mapFields[i].name));
273
+ gen
274
+ ("}");
275
+ }
276
+
277
+ if (normalFields.length) { gen
278
+ ("if(o.defaults){");
279
+ for (i = 0; i < normalFields.length; ++i) {
280
+ var field = normalFields[i],
281
+ prop = util.safeProp(field.name);
282
+ if (field.resolvedType instanceof Enum) gen
283
+ ("d%s=o.enums===String?%j:%j", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault);
284
+ else if (field.long) gen
285
+ ("if(util.Long){")
286
+ ("var n=new util.Long(%i,%i,%j)", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)
287
+ ("d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():typeof BigInt!==\"undefined\"&&o.longs===BigInt?n.toBigInt():n", prop)
288
+ ("}else")
289
+ ("d%s=o.longs===String?%j:typeof BigInt!==\"undefined\"&&o.longs===BigInt?BigInt(%j):%i", prop, field.typeDefault.toString(), field.typeDefault.toString(), field.typeDefault.toNumber());
290
+ else if (field.bytes) {
291
+ var arrayDefault = Array.prototype.slice.call(field.typeDefault);
292
+ gen
293
+ ("if(o.bytes===String)d%s=%j", prop, String.fromCharCode.apply(String, field.typeDefault))
294
+ ("else{")
295
+ ("d%s=%j", prop, arrayDefault)
296
+ ("if(o.bytes!==Array)d%s=util.newBuffer(d%s)", prop, prop)
297
+ ("}");
298
+ } else gen
299
+ ("d%s=%j", prop, field.typeDefault); // also messages (=null)
300
+ } gen
301
+ ("}");
302
+ }
303
+ var hasKs2 = false;
304
+ for (i = 0; i < fields.length; ++i) {
305
+ var field = fields[i],
306
+ index = mtype._fieldsArray.indexOf(field),
307
+ prop = util.safeProp(field.name);
308
+ if (field.map) {
309
+ if (!hasKs2) { hasKs2 = true; gen
310
+ ("var ks2");
311
+ } gen
312
+ ("if(m%s&&(ks2=Object.keys(m%s)).length){", prop, prop)
313
+ ("d%s={}", prop);
314
+ var longKey = types.long[field.keyType] !== undefined,
315
+ srcProp = prop + "[ks2[j]]";
316
+ gen
317
+ ("for(var j=0;j<ks2.length;++j){");
318
+ if (longKey) gen
319
+ ("var k2=util.longFromKey(ks2[j],%j).toString()", field.keyType === "uint64" || field.keyType === "fixed64");
320
+ gen
321
+ ("if(ks2[j]===\"__proto__\")")
322
+ ("util.makeProp(d%s,ks2[j])", prop);
323
+ genValuePartial_toObject(gen, field, /* sorted */ index, longKey ? prop + "[k2]" : srcProp, srcProp)
324
+ ("}");
325
+ } else if (field.repeated) { gen
326
+ ("if(m%s&&m%s.length){", prop, prop)
327
+ ("d%s=Array(m%s.length)", prop, prop)
328
+ ("for(var j=0;j<m%s.length;++j){", prop);
329
+ genValuePartial_toObject(gen, field, /* sorted */ index, prop + "[j]")
330
+ ("}");
331
+ } else { gen
332
+ ("if(m%s!=null&&Object.hasOwnProperty.call(m,%j)){", prop, field.name); // !== undefined && !== null
333
+ genValuePartial_toObject(gen, field, /* sorted */ index, prop);
334
+ if (field.partOf && !field.partOf.isProto3Optional) gen
335
+ ("if(o.oneofs)")
336
+ ("d%s=%j", util.safeProp(field.partOf.name), field.name);
337
+ }
338
+ gen
339
+ ("}");
340
+ }
341
+ return gen
342
+ ("return d");
343
+ /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
344
+ };