protobufjs 8.6.0 → 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 (108) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +441 -441
  3. package/dist/light/protobuf.js +8473 -8516
  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 +3018 -3061
  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 +10376 -10419
  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 -86
  22. package/ext/descriptor.generated.d.ts +14 -6
  23. package/ext/descriptor.js +1354 -1303
  24. package/ext/protojson.LICENSE +201 -201
  25. package/ext/protojson.d.ts +20 -20
  26. package/ext/protojson.js +925 -903
  27. package/ext/textformat.d.ts +19 -19
  28. package/ext/textformat.js +1256 -1256
  29. package/google/LICENSE +27 -27
  30. package/google/README.md +1 -1
  31. package/google/api/annotations.json +82 -82
  32. package/google/api/annotations.proto +10 -10
  33. package/google/api/http.json +85 -85
  34. package/google/api/http.proto +30 -30
  35. package/google/protobuf/api.json +117 -117
  36. package/google/protobuf/api.proto +33 -33
  37. package/google/protobuf/compiler/plugin.json +126 -126
  38. package/google/protobuf/compiler/plugin.proto +47 -47
  39. package/google/protobuf/descriptor.json +1381 -1381
  40. package/google/protobuf/descriptor.proto +534 -534
  41. package/google/protobuf/source_context.json +19 -19
  42. package/google/protobuf/source_context.proto +7 -7
  43. package/google/protobuf/type.json +201 -201
  44. package/google/protobuf/type.proto +89 -89
  45. package/index.d.ts +10 -18
  46. package/index.js +4 -4
  47. package/light.d.ts +2 -2
  48. package/light.js +3 -3
  49. package/minimal.d.ts +2 -2
  50. package/minimal.js +4 -4
  51. package/package.json +93 -93
  52. package/src/common.js +399 -399
  53. package/src/converter.js +344 -344
  54. package/src/decoder.js +208 -208
  55. package/src/encoder.js +111 -111
  56. package/src/enum.js +231 -231
  57. package/src/field.js +497 -497
  58. package/src/index-light.js +104 -104
  59. package/src/index-minimal.js +36 -36
  60. package/src/index.js +12 -12
  61. package/src/mapfield.js +136 -136
  62. package/src/message.js +137 -137
  63. package/src/method.js +175 -175
  64. package/src/namespace.js +565 -565
  65. package/src/object.js +382 -382
  66. package/src/oneof.js +225 -225
  67. package/src/parse.js +1068 -1068
  68. package/src/reader.js +543 -543
  69. package/src/reader_buffer.js +72 -72
  70. package/src/root.js +416 -416
  71. package/src/roots.js +18 -18
  72. package/src/rpc/service.js +148 -148
  73. package/src/rpc.js +36 -36
  74. package/src/service.js +198 -198
  75. package/src/tokenize.js +421 -421
  76. package/src/type.js +655 -655
  77. package/src/types.js +196 -196
  78. package/src/typescript.js +25 -25
  79. package/src/util/aspromise.d.ts +13 -13
  80. package/src/util/aspromise.js +52 -52
  81. package/src/util/base64.d.ts +32 -32
  82. package/src/util/base64.js +146 -146
  83. package/src/util/codegen.d.ts +31 -31
  84. package/src/util/codegen.js +113 -113
  85. package/src/util/eventemitter.d.ts +45 -45
  86. package/src/util/eventemitter.js +86 -86
  87. package/src/util/fetch.d.ts +56 -56
  88. package/src/util/fetch.js +112 -112
  89. package/src/util/float.d.ts +83 -83
  90. package/src/util/float.js +335 -335
  91. package/src/util/fs.js +11 -11
  92. package/src/util/longbits.js +200 -200
  93. package/src/util/minimal.js +515 -518
  94. package/src/util/path.d.ts +22 -22
  95. package/src/util/path.js +72 -72
  96. package/src/util/patterns.js +7 -7
  97. package/src/util/pool.d.ts +32 -32
  98. package/src/util/pool.js +48 -48
  99. package/src/util/utf8.d.ts +24 -24
  100. package/src/util/utf8.js +130 -130
  101. package/src/util.js +242 -242
  102. package/src/verifier.js +180 -180
  103. package/src/wrappers.js +106 -106
  104. package/src/writer.js +495 -495
  105. package/src/writer_buffer.js +102 -102
  106. package/tsconfig.json +6 -6
  107. package/src/util/inquire.d.ts +0 -10
  108. package/src/util/inquire.js +0 -38
package/src/decoder.js CHANGED
@@ -1,208 +1,208 @@
1
- "use strict";
2
- module.exports = decoder;
3
-
4
- var Enum = require("./enum"),
5
- types = require("./types"),
6
- util = require("./util");
7
-
8
- function missing(field) {
9
- return "missing required '" + field.name + "'";
10
- }
11
-
12
- /**
13
- * Generates a decoder specific to the specified message type.
14
- * @param {Type} mtype Message type
15
- * @returns {Codegen} Codegen instance
16
- */
17
- function decoder(mtype) {
18
- /* eslint-disable no-unexpected-multiline */
19
- var hasMapField = false,
20
- hasImplicitPresenceField = false,
21
- i = 0;
22
- for (; i < mtype.fieldsArray.length; ++i) {
23
- var pfield = mtype._fieldsArray[i];
24
- if (pfield.map)
25
- hasMapField = true;
26
- if (!pfield.repeated && !pfield.map && !pfield.hasPresence)
27
- hasImplicitPresenceField = true;
28
- }
29
- var gen = util.codegen(["r", "l", "z", "q", "g"])
30
- ("if(!(r instanceof Reader))")
31
- ("r=Reader.create(r)")
32
- ("if(q===undefined)q=0")
33
- ("if(q>Reader.recursionLimit)")
34
- ("throw Error(\"max depth exceeded\")")
35
- ("var c=l===undefined?r.len:r.pos+l,m=g||new C" + (hasMapField ? ",k,v" : hasImplicitPresenceField ? ",v" : ""))
36
- ("while(r.pos<c){")
37
- ("var s=r.pos")
38
- ("var t=r.tag()")
39
- ("if(t===z){")
40
- ("z=undefined")
41
- ("break")
42
- ("}");
43
- if (mtype.fieldsArray.length) gen
44
- ("var u=t&7")
45
- ("switch(t>>>=3){");
46
- for (i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {
47
- var field = mtype._fieldsArray[i].resolve(),
48
- type = field.resolvedType instanceof Enum ? "int32" : field.type,
49
- ref = "m" + util.safeProp(field.name);
50
-
51
- // Map fields
52
- if (field.map) {
53
- gen
54
- ("case %i:{", field.id)
55
- ("if(u!==2)")
56
- ("break")
57
- ("if(%s===util.emptyObject)", ref)
58
- ("%s={}", ref)
59
- ("var c2=r.uint32()+r.pos");
60
-
61
- if (types.defaults[field.keyType] !== undefined) gen
62
- ("k=%j", types.defaults[field.keyType]);
63
- else gen
64
- ("k=null");
65
-
66
- if (types.long[type] !== undefined) gen
67
- ("v=util.Long?util.Long.fromNumber(0,%j):0", type === "uint64" || type === "fixed64");
68
- else if (types.defaults[type] !== undefined) gen
69
- ("v=%j", types.defaults[type]);
70
- else gen
71
- ("v=null");
72
-
73
- gen
74
- ("while(r.pos<c2){")
75
- ("var t2=r.tag()")
76
- ("u=t2&7")
77
- ("switch(t2>>>=3){")
78
- ("case 1:")
79
- ("if(u!==%i)", types.mapKey[field.keyType])
80
- ("break")
81
- ("k=r.%s()", field.keyType)
82
- ("continue")
83
- ("case 2:")
84
- ("if(u!==%i)", types.basic[type] === undefined ? 2 : types.basic[type])
85
- ("break");
86
-
87
- if (types.basic[type] === undefined) gen
88
- ("v=types[%i].decode(r,r.uint32(),undefined,q+1)", i); // can't be groups
89
- else gen
90
- ("v=r.%s()", type);
91
-
92
- gen
93
- ("continue")
94
- ("}")
95
- ("r.skipType(u,q,t2)")
96
- ("}");
97
-
98
- var val = types.basic[type] === undefined ? "v||new types[" + i + "].ctor" : "v";
99
- if (types.long[field.keyType] !== undefined) gen
100
- ("%s[typeof k===\"object\"?util.longToHash(k):k]=%s", ref, val);
101
- else {
102
- if (field.keyType === "string") gen
103
- ("if(k===\"__proto__\")")
104
- ("util.makeProp(%s,k)", ref);
105
- gen
106
- ("%s[k]=%s", ref, val);
107
- }
108
-
109
- // Repeated fields
110
- } else if (field.repeated) { gen
111
- ("case %i:", field.id)
112
- ("{");
113
-
114
- // Packable (always check for forward and backward compatiblity)
115
- if (types.packed[type] !== undefined) gen
116
- ("if(u===2){")
117
- ("if(!(%s&&%s.length))", ref, ref)
118
- ("%s=[]", ref)
119
- ("var c2=r.uint32()+r.pos")
120
- ("while(r.pos<c2)")
121
- ("%s.push(r.%s())", ref, type)
122
- ("continue")
123
- ("}");
124
-
125
- // Non-packed
126
- gen
127
- ("if(u!==%i)", types.basic[type] === undefined ? field.delimited ? 3 : 2 : types.basic[type])
128
- ("break")
129
- ("if(!(%s&&%s.length))", ref, ref)
130
- ("%s=[]", ref);
131
- if (types.basic[type] === undefined) {
132
- if (field.delimited) gen
133
- ("%s.push(types[%i].decode(r,undefined,%i,q+1))", ref, i, field.id * 8 + 4);
134
- else gen
135
- ("%s.push(types[%i].decode(r,r.uint32(),undefined,q+1))", ref, i);
136
- } else gen
137
- ("%s.push(r.%s())", ref, type);
138
-
139
- // Non-repeated
140
- } else if (types.basic[type] === undefined) {
141
- gen
142
- ("case %i:{", field.id)
143
- ("if(u!==%i)", field.delimited ? 3 : 2)
144
- ("break");
145
- if (field.delimited) gen
146
- ("%s=types[%i].decode(r,undefined,%i,q+1,%s)", ref, i, field.id * 8 + 4, ref);
147
- else gen
148
- ("%s=types[%i].decode(r,r.uint32(),undefined,q+1,%s)", ref, i, ref);
149
- }
150
- else if (field.hasPresence) {
151
- gen
152
- ("case %i:{", field.id)
153
- ("if(u!==%i)", types.basic[type])
154
- ("break")
155
- ("%s=r.%s()", ref, type);
156
- } else {
157
- gen
158
- ("case %i:{", field.id)
159
- ("if(u!==%i)", types.basic[type])
160
- ("break");
161
- if (field.resolvedType instanceof Enum && field.typeDefault !== 0) gen
162
- // TODO: Protoc rejects open enums whose first value is not zero.
163
- // We should do the same, but for v8 this would be a regression.
164
- ("if((v=r.%s())!==%j)", type, field.typeDefault);
165
- else if (type === "string" || type === "bytes") gen
166
- ("if((v=r.%s()).length)", type);
167
- else if (types.long[type] !== undefined) gen
168
- ("if(typeof(v=r.%s())===\"object\"?v.low||v.high:v!==0)", type);
169
- else if (type === "double" || type === "float") gen
170
- ("if((v=r.%s())!==0)", type);
171
- else gen
172
- ("if(v=r.%s())", type);
173
- gen
174
- ("%s=v", ref)
175
- ("else")
176
- ("delete %s", ref); // rare/odd case: later default clears earlier non-default
177
- }
178
- if (field.partOf) gen
179
- ("m%s=%j", util.safeProp(field.partOf.name), field.name);
180
- gen
181
- ("continue")
182
- ("}");
183
- }
184
- if (i) gen
185
- ("}");
186
- // Unknown fields
187
- gen
188
- ("r.skipType(%s,q,t)", i ? "u" : "t&7")
189
- ("if(!r.discardUnknown){")
190
- ("util.makeProp(m,\"$unknowns\",false);")
191
- ("(m.$unknowns||(m.$unknowns=[])).push(r.raw(s,r.pos))")
192
- ("}")
193
- ("}")
194
- ("if(z!==undefined)")
195
- ("throw Error(\"missing end group\")");
196
-
197
- // Field presence
198
- for (i = 0; i < mtype._fieldsArray.length; ++i) {
199
- var rfield = mtype._fieldsArray[i];
200
- if (rfield.required) gen
201
- ("if(!Object.hasOwnProperty.call(m,%j))", rfield.name)
202
- ("throw util.ProtocolError(%j,{instance:m})", missing(rfield));
203
- }
204
-
205
- return gen
206
- ("return m");
207
- /* eslint-enable no-unexpected-multiline */
208
- }
1
+ "use strict";
2
+ module.exports = decoder;
3
+
4
+ var Enum = require("./enum"),
5
+ types = require("./types"),
6
+ util = require("./util");
7
+
8
+ function missing(field) {
9
+ return "missing required '" + field.name + "'";
10
+ }
11
+
12
+ /**
13
+ * Generates a decoder specific to the specified message type.
14
+ * @param {Type} mtype Message type
15
+ * @returns {Codegen} Codegen instance
16
+ */
17
+ function decoder(mtype) {
18
+ /* eslint-disable no-unexpected-multiline */
19
+ var hasMapField = false,
20
+ hasImplicitPresenceField = false,
21
+ i = 0;
22
+ for (; i < mtype.fieldsArray.length; ++i) {
23
+ var pfield = mtype._fieldsArray[i];
24
+ if (pfield.map)
25
+ hasMapField = true;
26
+ if (!pfield.repeated && !pfield.map && !pfield.hasPresence)
27
+ hasImplicitPresenceField = true;
28
+ }
29
+ var gen = util.codegen(["r", "l", "z", "q", "g"])
30
+ ("if(!(r instanceof Reader))")
31
+ ("r=Reader.create(r)")
32
+ ("if(q===undefined)q=0")
33
+ ("if(q>Reader.recursionLimit)")
34
+ ("throw Error(\"max depth exceeded\")")
35
+ ("var c=l===undefined?r.len:r.pos+l,m=g||new C" + (hasMapField ? ",k,v" : hasImplicitPresenceField ? ",v" : ""))
36
+ ("while(r.pos<c){")
37
+ ("var s=r.pos")
38
+ ("var t=r.tag()")
39
+ ("if(t===z){")
40
+ ("z=undefined")
41
+ ("break")
42
+ ("}");
43
+ if (mtype.fieldsArray.length) gen
44
+ ("var u=t&7")
45
+ ("switch(t>>>=3){");
46
+ for (i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {
47
+ var field = mtype._fieldsArray[i].resolve(),
48
+ type = field.resolvedType instanceof Enum ? "int32" : field.type,
49
+ ref = "m" + util.safeProp(field.name);
50
+
51
+ // Map fields
52
+ if (field.map) {
53
+ gen
54
+ ("case %i:{", field.id)
55
+ ("if(u!==2)")
56
+ ("break")
57
+ ("if(%s===util.emptyObject)", ref)
58
+ ("%s={}", ref)
59
+ ("var c2=r.uint32()+r.pos");
60
+
61
+ if (types.defaults[field.keyType] !== undefined) gen
62
+ ("k=%j", types.defaults[field.keyType]);
63
+ else gen
64
+ ("k=null");
65
+
66
+ if (types.long[type] !== undefined) gen
67
+ ("v=util.Long?util.Long.fromNumber(0,%j):0", type === "uint64" || type === "fixed64");
68
+ else if (types.defaults[type] !== undefined) gen
69
+ ("v=%j", types.defaults[type]);
70
+ else gen
71
+ ("v=null");
72
+
73
+ gen
74
+ ("while(r.pos<c2){")
75
+ ("var t2=r.tag()")
76
+ ("u=t2&7")
77
+ ("switch(t2>>>=3){")
78
+ ("case 1:")
79
+ ("if(u!==%i)", types.mapKey[field.keyType])
80
+ ("break")
81
+ ("k=r.%s()", field.keyType)
82
+ ("continue")
83
+ ("case 2:")
84
+ ("if(u!==%i)", types.basic[type] === undefined ? 2 : types.basic[type])
85
+ ("break");
86
+
87
+ if (types.basic[type] === undefined) gen
88
+ ("v=types[%i].decode(r,r.uint32(),undefined,q+1)", i); // can't be groups
89
+ else gen
90
+ ("v=r.%s()", type);
91
+
92
+ gen
93
+ ("continue")
94
+ ("}")
95
+ ("r.skipType(u,q,t2)")
96
+ ("}");
97
+
98
+ var val = types.basic[type] === undefined ? "v||new types[" + i + "].ctor" : "v";
99
+ if (types.long[field.keyType] !== undefined) gen
100
+ ("%s[typeof k===\"object\"?util.longToHash(k):k]=%s", ref, val);
101
+ else {
102
+ if (field.keyType === "string") gen
103
+ ("if(k===\"__proto__\")")
104
+ ("util.makeProp(%s,k)", ref);
105
+ gen
106
+ ("%s[k]=%s", ref, val);
107
+ }
108
+
109
+ // Repeated fields
110
+ } else if (field.repeated) { gen
111
+ ("case %i:", field.id)
112
+ ("{");
113
+
114
+ // Packable (always check for forward and backward compatiblity)
115
+ if (types.packed[type] !== undefined) gen
116
+ ("if(u===2){")
117
+ ("if(!(%s&&%s.length))", ref, ref)
118
+ ("%s=[]", ref)
119
+ ("var c2=r.uint32()+r.pos")
120
+ ("while(r.pos<c2)")
121
+ ("%s.push(r.%s())", ref, type)
122
+ ("continue")
123
+ ("}");
124
+
125
+ // Non-packed
126
+ gen
127
+ ("if(u!==%i)", types.basic[type] === undefined ? field.delimited ? 3 : 2 : types.basic[type])
128
+ ("break")
129
+ ("if(!(%s&&%s.length))", ref, ref)
130
+ ("%s=[]", ref);
131
+ if (types.basic[type] === undefined) {
132
+ if (field.delimited) gen
133
+ ("%s.push(types[%i].decode(r,undefined,%i,q+1))", ref, i, field.id * 8 + 4);
134
+ else gen
135
+ ("%s.push(types[%i].decode(r,r.uint32(),undefined,q+1))", ref, i);
136
+ } else gen
137
+ ("%s.push(r.%s())", ref, type);
138
+
139
+ // Non-repeated
140
+ } else if (types.basic[type] === undefined) {
141
+ gen
142
+ ("case %i:{", field.id)
143
+ ("if(u!==%i)", field.delimited ? 3 : 2)
144
+ ("break");
145
+ if (field.delimited) gen
146
+ ("%s=types[%i].decode(r,undefined,%i,q+1,%s)", ref, i, field.id * 8 + 4, ref);
147
+ else gen
148
+ ("%s=types[%i].decode(r,r.uint32(),undefined,q+1,%s)", ref, i, ref);
149
+ }
150
+ else if (field.hasPresence) {
151
+ gen
152
+ ("case %i:{", field.id)
153
+ ("if(u!==%i)", types.basic[type])
154
+ ("break")
155
+ ("%s=r.%s()", ref, type);
156
+ } else {
157
+ gen
158
+ ("case %i:{", field.id)
159
+ ("if(u!==%i)", types.basic[type])
160
+ ("break");
161
+ if (field.resolvedType instanceof Enum && field.typeDefault !== 0) gen
162
+ // TODO: Protoc rejects open enums whose first value is not zero.
163
+ // We should do the same, but for v8 this would be a regression.
164
+ ("if((v=r.%s())!==%j)", type, field.typeDefault);
165
+ else if (type === "string" || type === "bytes") gen
166
+ ("if((v=r.%s()).length)", type);
167
+ else if (types.long[type] !== undefined) gen
168
+ ("if(typeof(v=r.%s())===\"object\"?v.low||v.high:v!==0)", type);
169
+ else if (type === "double" || type === "float") gen
170
+ ("if((v=r.%s())!==0)", type);
171
+ else gen
172
+ ("if(v=r.%s())", type);
173
+ gen
174
+ ("%s=v", ref)
175
+ ("else")
176
+ ("delete %s", ref); // rare/odd case: later default clears earlier non-default
177
+ }
178
+ if (field.partOf) gen
179
+ ("m%s=%j", util.safeProp(field.partOf.name), field.name);
180
+ gen
181
+ ("continue")
182
+ ("}");
183
+ }
184
+ if (i) gen
185
+ ("}");
186
+ // Unknown fields
187
+ gen
188
+ ("r.skipType(%s,q,t)", i ? "u" : "t&7")
189
+ ("if(!r.discardUnknown){")
190
+ ("util.makeProp(m,\"$unknowns\",false);")
191
+ ("(m.$unknowns||(m.$unknowns=[])).push(r.raw(s,r.pos))")
192
+ ("}")
193
+ ("}")
194
+ ("if(z!==undefined)")
195
+ ("throw Error(\"missing end group\")");
196
+
197
+ // Field presence
198
+ for (i = 0; i < mtype._fieldsArray.length; ++i) {
199
+ var rfield = mtype._fieldsArray[i];
200
+ if (rfield.required) gen
201
+ ("if(!Object.hasOwnProperty.call(m,%j))", rfield.name)
202
+ ("throw util.ProtocolError(%j,{instance:m})", missing(rfield));
203
+ }
204
+
205
+ return gen
206
+ ("return m");
207
+ /* eslint-enable no-unexpected-multiline */
208
+ }
package/src/encoder.js CHANGED
@@ -1,111 +1,111 @@
1
- "use strict";
2
- module.exports = encoder;
3
-
4
- var Enum = require("./enum"),
5
- types = require("./types"),
6
- util = require("./util");
7
-
8
- /**
9
- * Generates a partial message type encoder.
10
- * @param {Codegen} gen Codegen instance
11
- * @param {Field} field Reflected field
12
- * @param {number} fieldIndex Field index
13
- * @param {string} ref Variable reference
14
- * @returns {Codegen} Codegen instance
15
- * @ignore
16
- */
17
- function genTypePartial(gen, field, fieldIndex, ref) {
18
- return field.delimited
19
- ? gen("types[%i].encode(%s,w.uint32(%i),q+1).uint32(%i)", fieldIndex, ref, (field.id << 3 | 3) >>> 0, (field.id << 3 | 4) >>> 0)
20
- : gen("types[%i].encode(%s,w.uint32(%i).fork(),q+1).ldelim()", fieldIndex, ref, (field.id << 3 | 2) >>> 0);
21
- }
22
-
23
- /**
24
- * Generates an encoder specific to the specified message type.
25
- * @param {Type} mtype Message type
26
- * @returns {Codegen} Codegen instance
27
- */
28
- function encoder(mtype) {
29
- /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
30
- var gen = util.codegen(["m", "w", "q"])
31
- ("if(!w)")
32
- ("w=Writer.create()")
33
- ("if(q===undefined)q=0")
34
- ("if(q>util.recursionLimit)")
35
- ("throw Error(\"max depth exceeded\")");
36
-
37
- var i, ref;
38
-
39
- // "when a message is serialized its known fields should be written sequentially by field number"
40
- var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);
41
-
42
- for (var i = 0; i < fields.length; ++i) {
43
- var field = fields[i].resolve(),
44
- index = mtype._fieldsArray.indexOf(field),
45
- type = field.resolvedType instanceof Enum ? "int32" : field.type,
46
- wireType = types.basic[type];
47
- ref = "m" + util.safeProp(field.name);
48
-
49
- // Map fields
50
- if (field.map) {
51
- gen
52
- ("if(%s!=null&&Object.hasOwnProperty.call(m,%j)){", ref, field.name) // !== undefined && !== null
53
- ("for(var ks=Object.keys(%s),i=0;i<ks.length;++i){", ref);
54
- if (field.keyType === "bool") gen
55
- ("w.uint32(%i).fork().uint32(%i).bool(util.boolFromKey(ks[i]))", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType]);
56
- else if (types.long[field.keyType] !== undefined) gen
57
- ("w.uint32(%i).fork().uint32(%i).%s(util.longFromKey(ks[i],%j))", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType, field.keyType === "uint64" || field.keyType === "fixed64");
58
- else gen
59
- ("w.uint32(%i).fork().uint32(%i).%s(ks[i])", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType);
60
- if (wireType === undefined) gen
61
- ("types[%i].encode(%s[ks[i]],w.uint32(18).fork(),q+1).ldelim().ldelim()", index, ref); // can't be groups
62
- else gen
63
- (".uint32(%i).%s(%s[ks[i]]).ldelim()", 16 | wireType, type, ref);
64
- gen
65
- ("}")
66
- ("}");
67
-
68
- // Repeated fields
69
- } else if (field.repeated) { gen
70
- ("if(%s!=null&&%s.length){", ref, ref); // !== undefined && !== null
71
-
72
- // Packed repeated
73
- if (field.packed && types.packed[type] !== undefined) { gen
74
-
75
- ("w.uint32(%i).fork()", (field.id << 3 | 2) >>> 0)
76
- ("for(var i=0;i<%s.length;++i)", ref)
77
- ("w.%s(%s[i])", type, ref)
78
- ("w.ldelim()");
79
-
80
- // Non-packed
81
- } else { gen
82
-
83
- ("for(var i=0;i<%s.length;++i)", ref);
84
- if (wireType === undefined)
85
- genTypePartial(gen, field, index, ref + "[i]");
86
- else gen
87
- ("w.uint32(%i).%s(%s[i])", (field.id << 3 | wireType) >>> 0, type, ref);
88
-
89
- } gen
90
- ("}");
91
-
92
- // Non-repeated
93
- } else {
94
- if (!field.required) gen
95
- ("if(%s!=null&&Object.hasOwnProperty.call(m,%j))", ref, field.name); // !== undefined && !== null
96
-
97
- if (wireType === undefined)
98
- genTypePartial(gen, field, index, ref);
99
- else gen
100
- ("w.uint32(%i).%s(%s)", (field.id << 3 | wireType) >>> 0, type, ref);
101
-
102
- }
103
- }
104
-
105
- return gen
106
- ("if(m.$unknowns!=null&&Object.hasOwnProperty.call(m,\"$unknowns\"))")
107
- ("for(var i=0;i<m.$unknowns.length;++i)")
108
- ("w.raw(m.$unknowns[i])")
109
- ("return w");
110
- /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
111
- }
1
+ "use strict";
2
+ module.exports = encoder;
3
+
4
+ var Enum = require("./enum"),
5
+ types = require("./types"),
6
+ util = require("./util");
7
+
8
+ /**
9
+ * Generates a partial message type encoder.
10
+ * @param {Codegen} gen Codegen instance
11
+ * @param {Field} field Reflected field
12
+ * @param {number} fieldIndex Field index
13
+ * @param {string} ref Variable reference
14
+ * @returns {Codegen} Codegen instance
15
+ * @ignore
16
+ */
17
+ function genTypePartial(gen, field, fieldIndex, ref) {
18
+ return field.delimited
19
+ ? gen("types[%i].encode(%s,w.uint32(%i),q+1).uint32(%i)", fieldIndex, ref, (field.id << 3 | 3) >>> 0, (field.id << 3 | 4) >>> 0)
20
+ : gen("types[%i].encode(%s,w.uint32(%i).fork(),q+1).ldelim()", fieldIndex, ref, (field.id << 3 | 2) >>> 0);
21
+ }
22
+
23
+ /**
24
+ * Generates an encoder specific to the specified message type.
25
+ * @param {Type} mtype Message type
26
+ * @returns {Codegen} Codegen instance
27
+ */
28
+ function encoder(mtype) {
29
+ /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
30
+ var gen = util.codegen(["m", "w", "q"])
31
+ ("if(!w)")
32
+ ("w=Writer.create()")
33
+ ("if(q===undefined)q=0")
34
+ ("if(q>util.recursionLimit)")
35
+ ("throw Error(\"max depth exceeded\")");
36
+
37
+ var i, ref;
38
+
39
+ // "when a message is serialized its known fields should be written sequentially by field number"
40
+ var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);
41
+
42
+ for (var i = 0; i < fields.length; ++i) {
43
+ var field = fields[i].resolve(),
44
+ index = mtype._fieldsArray.indexOf(field),
45
+ type = field.resolvedType instanceof Enum ? "int32" : field.type,
46
+ wireType = types.basic[type];
47
+ ref = "m" + util.safeProp(field.name);
48
+
49
+ // Map fields
50
+ if (field.map) {
51
+ gen
52
+ ("if(%s!=null&&Object.hasOwnProperty.call(m,%j)){", ref, field.name) // !== undefined && !== null
53
+ ("for(var ks=Object.keys(%s),i=0;i<ks.length;++i){", ref);
54
+ if (field.keyType === "bool") gen
55
+ ("w.uint32(%i).fork().uint32(%i).bool(util.boolFromKey(ks[i]))", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType]);
56
+ else if (types.long[field.keyType] !== undefined) gen
57
+ ("w.uint32(%i).fork().uint32(%i).%s(util.longFromKey(ks[i],%j))", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType, field.keyType === "uint64" || field.keyType === "fixed64");
58
+ else gen
59
+ ("w.uint32(%i).fork().uint32(%i).%s(ks[i])", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType);
60
+ if (wireType === undefined) gen
61
+ ("types[%i].encode(%s[ks[i]],w.uint32(18).fork(),q+1).ldelim().ldelim()", index, ref); // can't be groups
62
+ else gen
63
+ (".uint32(%i).%s(%s[ks[i]]).ldelim()", 16 | wireType, type, ref);
64
+ gen
65
+ ("}")
66
+ ("}");
67
+
68
+ // Repeated fields
69
+ } else if (field.repeated) { gen
70
+ ("if(%s!=null&&%s.length){", ref, ref); // !== undefined && !== null
71
+
72
+ // Packed repeated
73
+ if (field.packed && types.packed[type] !== undefined) { gen
74
+
75
+ ("w.uint32(%i).fork()", (field.id << 3 | 2) >>> 0)
76
+ ("for(var i=0;i<%s.length;++i)", ref)
77
+ ("w.%s(%s[i])", type, ref)
78
+ ("w.ldelim()");
79
+
80
+ // Non-packed
81
+ } else { gen
82
+
83
+ ("for(var i=0;i<%s.length;++i)", ref);
84
+ if (wireType === undefined)
85
+ genTypePartial(gen, field, index, ref + "[i]");
86
+ else gen
87
+ ("w.uint32(%i).%s(%s[i])", (field.id << 3 | wireType) >>> 0, type, ref);
88
+
89
+ } gen
90
+ ("}");
91
+
92
+ // Non-repeated
93
+ } else {
94
+ if (!field.required) gen
95
+ ("if(%s!=null&&Object.hasOwnProperty.call(m,%j))", ref, field.name); // !== undefined && !== null
96
+
97
+ if (wireType === undefined)
98
+ genTypePartial(gen, field, index, ref);
99
+ else gen
100
+ ("w.uint32(%i).%s(%s)", (field.id << 3 | wireType) >>> 0, type, ref);
101
+
102
+ }
103
+ }
104
+
105
+ return gen
106
+ ("if(m.$unknowns!=null&&Object.hasOwnProperty.call(m,\"$unknowns\"))")
107
+ ("for(var i=0;i<m.$unknowns.length;++i)")
108
+ ("w.raw(m.$unknowns[i])")
109
+ ("return w");
110
+ /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
111
+ }