protobufjs 8.4.1 → 8.5.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.
- package/README.md +21 -3
- package/dist/light/protobuf.js +67 -29
- package/dist/light/protobuf.js.map +1 -1
- package/dist/light/protobuf.min.js +3 -3
- package/dist/light/protobuf.min.js.map +1 -1
- package/dist/minimal/protobuf.js +36 -16
- package/dist/minimal/protobuf.js.map +1 -1
- package/dist/minimal/protobuf.min.js +3 -3
- package/dist/minimal/protobuf.min.js.map +1 -1
- package/dist/protobuf.js +75 -34
- package/dist/protobuf.js.map +1 -1
- package/dist/protobuf.min.js +3 -3
- package/dist/protobuf.min.js.map +1 -1
- package/ext/descriptor.js +31 -9
- package/index.d.ts +22 -9
- package/package.json +3 -2
- package/src/converter.js +4 -2
- package/src/decoder.js +4 -2
- package/src/method.js +16 -2
- package/src/namespace.js +5 -5
- package/src/parse.js +8 -5
- package/src/reader.js +12 -0
- package/src/roots.js +1 -1
- package/src/rpc/service.js +10 -4
- package/src/writer.js +11 -9
package/ext/descriptor.js
CHANGED
|
@@ -268,13 +268,13 @@ Type.fromDescriptor = function fromDescriptor(descriptor, edition, nested, depth
|
|
|
268
268
|
/* Extension ranges */ if (descriptor.extensionRange && descriptor.extensionRange.length) {
|
|
269
269
|
type.extensions = [];
|
|
270
270
|
for (i = 0; i < descriptor.extensionRange.length; ++i)
|
|
271
|
-
type.extensions.push([ descriptor.extensionRange[i].start, descriptor.extensionRange[i].end ]);
|
|
271
|
+
type.extensions.push([ descriptor.extensionRange[i].start, descriptor.extensionRange[i].end - 1 ]);
|
|
272
272
|
}
|
|
273
273
|
/* Reserved... */ if (descriptor.reservedRange && descriptor.reservedRange.length || descriptor.reservedName && descriptor.reservedName.length) {
|
|
274
274
|
type.reserved = [];
|
|
275
275
|
/* Ranges */ if (descriptor.reservedRange)
|
|
276
276
|
for (i = 0; i < descriptor.reservedRange.length; ++i)
|
|
277
|
-
type.reserved.push([ descriptor.reservedRange[i].start, descriptor.reservedRange[i].end ]);
|
|
277
|
+
type.reserved.push([ descriptor.reservedRange[i].start, descriptor.reservedRange[i].end - 1 ]);
|
|
278
278
|
/* Names */ if (descriptor.reservedName)
|
|
279
279
|
for (i = 0; i < descriptor.reservedName.length; ++i)
|
|
280
280
|
type.reserved.push(descriptor.reservedName[i]);
|
|
@@ -324,13 +324,13 @@ Type.prototype.toDescriptor = function toDescriptor(edition) {
|
|
|
324
324
|
}
|
|
325
325
|
/* Extension ranges */ if (this.extensions)
|
|
326
326
|
for (i = 0; i < this.extensions.length; ++i)
|
|
327
|
-
descriptor.extensionRange.push(exports.DescriptorProto.ExtensionRange.create({ start: this.extensions[i][0], end: this.extensions[i][1] }));
|
|
327
|
+
descriptor.extensionRange.push(exports.DescriptorProto.ExtensionRange.create({ start: this.extensions[i][0], end: this.extensions[i][1] + 1 }));
|
|
328
328
|
/* Reserved... */ if (this.reserved)
|
|
329
329
|
for (i = 0; i < this.reserved.length; ++i)
|
|
330
330
|
/* Names */ if (typeof this.reserved[i] === "string")
|
|
331
331
|
descriptor.reservedName.push(this.reserved[i]);
|
|
332
332
|
/* Ranges */ else
|
|
333
|
-
descriptor.reservedRange.push(exports.DescriptorProto.ReservedRange.create({ start: this.reserved[i][0], end: this.reserved[i][1] }));
|
|
333
|
+
descriptor.reservedRange.push(exports.DescriptorProto.ReservedRange.create({ start: this.reserved[i][0], end: this.reserved[i][1] + 1 }));
|
|
334
334
|
|
|
335
335
|
descriptor.options = toDescriptorOptions(this.options, exports.MessageOptions);
|
|
336
336
|
|
|
@@ -657,9 +657,10 @@ Enum.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {
|
|
|
657
657
|
|
|
658
658
|
// Construct values object
|
|
659
659
|
var values = {},
|
|
660
|
-
valuesOptions
|
|
660
|
+
valuesOptions,
|
|
661
|
+
i;
|
|
661
662
|
if (descriptor.value)
|
|
662
|
-
for (
|
|
663
|
+
for (i = 0; i < descriptor.value.length; ++i) {
|
|
663
664
|
var name = descriptor.value[i].name,
|
|
664
665
|
valueName = name && name.length ? name : "NAME" + (descriptor.value[i].number || 0),
|
|
665
666
|
value = descriptor.value[i].number || 0,
|
|
@@ -681,6 +682,16 @@ Enum.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {
|
|
|
681
682
|
if (!nested)
|
|
682
683
|
enm._edition = edition;
|
|
683
684
|
|
|
685
|
+
/* Reserved... */ if (descriptor.reservedRange && descriptor.reservedRange.length || descriptor.reservedName && descriptor.reservedName.length) {
|
|
686
|
+
enm.reserved = [];
|
|
687
|
+
/* Ranges */ if (descriptor.reservedRange)
|
|
688
|
+
for (i = 0; i < descriptor.reservedRange.length; ++i)
|
|
689
|
+
enm.reserved.push([ descriptor.reservedRange[i].start, descriptor.reservedRange[i].end ]);
|
|
690
|
+
/* Names */ if (descriptor.reservedName)
|
|
691
|
+
for (i = 0; i < descriptor.reservedName.length; ++i)
|
|
692
|
+
enm.reserved.push(descriptor.reservedName[i]);
|
|
693
|
+
}
|
|
694
|
+
|
|
684
695
|
return enm;
|
|
685
696
|
};
|
|
686
697
|
|
|
@@ -691,19 +702,30 @@ Enum.fromDescriptor = function fromDescriptor(descriptor, edition, nested) {
|
|
|
691
702
|
Enum.prototype.toDescriptor = function toDescriptor() {
|
|
692
703
|
|
|
693
704
|
// Values
|
|
694
|
-
var values = []
|
|
695
|
-
|
|
705
|
+
var values = [],
|
|
706
|
+
i,
|
|
707
|
+
ks = Object.keys(this.values);
|
|
708
|
+
for (i = 0; i < ks.length; ++i)
|
|
696
709
|
values.push(exports.EnumValueDescriptorProto.create({
|
|
697
710
|
name: ks[i],
|
|
698
711
|
number: this.values[ks[i]],
|
|
699
712
|
options: this.valuesOptions && toDescriptorOptions(this.valuesOptions[ks[i]], exports.EnumValueOptions)
|
|
700
713
|
}));
|
|
701
714
|
|
|
702
|
-
|
|
715
|
+
var descriptor = exports.EnumDescriptorProto.create({
|
|
703
716
|
name: this.name,
|
|
704
717
|
value: values,
|
|
705
718
|
options: toDescriptorOptions(this.options, exports.EnumOptions)
|
|
706
719
|
});
|
|
720
|
+
|
|
721
|
+
/* Reserved... */ if (this.reserved)
|
|
722
|
+
for (i = 0; i < this.reserved.length; ++i)
|
|
723
|
+
/* Names */ if (typeof this.reserved[i] === "string")
|
|
724
|
+
descriptor.reservedName.push(this.reserved[i]);
|
|
725
|
+
/* Ranges */ else
|
|
726
|
+
descriptor.reservedRange.push(exports.EnumDescriptorProto.EnumReservedRange.create({ start: this.reserved[i][0], end: this.reserved[i][1] }));
|
|
727
|
+
|
|
728
|
+
return descriptor;
|
|
707
729
|
};
|
|
708
730
|
|
|
709
731
|
// --- OneOf ---
|
package/index.d.ts
CHANGED
|
@@ -666,13 +666,16 @@ export class Method extends ReflectionObject {
|
|
|
666
666
|
requestType: string;
|
|
667
667
|
|
|
668
668
|
/** Whether requests are streamed or not. */
|
|
669
|
-
requestStream?:
|
|
669
|
+
requestStream?: true;
|
|
670
670
|
|
|
671
671
|
/** Response type. */
|
|
672
672
|
responseType: string;
|
|
673
673
|
|
|
674
674
|
/** Whether responses are streamed or not. */
|
|
675
|
-
responseStream?:
|
|
675
|
+
responseStream?: true;
|
|
676
|
+
|
|
677
|
+
/** gRPC-style method path. */
|
|
678
|
+
path: string;
|
|
676
679
|
|
|
677
680
|
/** Resolved request type. */
|
|
678
681
|
resolvedRequestType: (Type|null);
|
|
@@ -1204,6 +1207,9 @@ export class Reader {
|
|
|
1204
1207
|
/** Read buffer length. */
|
|
1205
1208
|
len: number;
|
|
1206
1209
|
|
|
1210
|
+
/** Whether to discard unknown fields while decoding. */
|
|
1211
|
+
discardUnknown: boolean;
|
|
1212
|
+
|
|
1207
1213
|
/**
|
|
1208
1214
|
* Creates a new reader using the specified buffer.
|
|
1209
1215
|
* @param buffer Buffer to read from
|
|
@@ -1326,6 +1332,9 @@ export class Reader {
|
|
|
1326
1332
|
/** Recursion limit. */
|
|
1327
1333
|
static recursionLimit: number;
|
|
1328
1334
|
|
|
1335
|
+
/** Whether readers discard unknown fields while decoding. */
|
|
1336
|
+
static discardUnknown: boolean;
|
|
1337
|
+
|
|
1329
1338
|
/**
|
|
1330
1339
|
* Skips the next element of the specified wire type.
|
|
1331
1340
|
* @param wireType Wire type received
|
|
@@ -1453,13 +1462,17 @@ export namespace rpc {
|
|
|
1453
1462
|
*/
|
|
1454
1463
|
type ServiceMethodCallback<TRes extends Message<TRes>> = (error: (Error|null), response?: TRes) => void;
|
|
1455
1464
|
|
|
1456
|
-
/**
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1465
|
+
/** A service method part of a {@link rpc.Service} as created by {@link Service.create}. */
|
|
1466
|
+
type ServiceMethod<TReq extends Message<TReq>, TRes extends Message<TRes>> = {
|
|
1467
|
+
(request: TReq|Properties<TReq>, callback: rpc.ServiceMethodCallback<TRes>): void;
|
|
1468
|
+
(request: TReq|Properties<TReq>): Promise<TRes>;
|
|
1469
|
+
readonly name: string;
|
|
1470
|
+
readonly path: string;
|
|
1471
|
+
readonly requestType: string;
|
|
1472
|
+
readonly responseType: string;
|
|
1473
|
+
readonly requestStream: true|undefined;
|
|
1474
|
+
readonly responseStream: true|undefined;
|
|
1475
|
+
};
|
|
1463
1476
|
|
|
1464
1477
|
/** An RPC service as returned by {@link Service#create}. */
|
|
1465
1478
|
class Service extends util.EventEmitter {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "protobufjs",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.5.0",
|
|
4
4
|
"versionScheme": "~",
|
|
5
5
|
"description": "Protocol Buffers for JavaScript & TypeScript.",
|
|
6
6
|
"author": "Daniel Wirtz <dcode+protobufjs@dcode.io>",
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"bench": "node bench",
|
|
27
27
|
"build": "npm run build:bundle && npm run build:types",
|
|
28
28
|
"build:bundle": "gulp --gulpfile scripts/gulpfile.js",
|
|
29
|
+
"build:tests": "node ./scripts/gentests.js",
|
|
29
30
|
"build:types": "node cli/bin/pbts --main --global protobuf --out index.d.ts src/ && node cli/bin/pbts --main --import \"\\$protobuf=..\" --out ext/descriptor.generated.d.ts ext/descriptor.js && node cli/bin/pbts --main --out ext/textformat.generated.d.ts ext/textformat.js",
|
|
30
31
|
"coverage": "npm run coverage:test && npm run coverage:report",
|
|
31
32
|
"coverage:test": "nyc --silent tape -r ./lib/tape-adapter tests/*.js tests/node/*.js",
|
|
@@ -43,7 +44,7 @@
|
|
|
43
44
|
"test": "npm run test:sources && npm run test:types",
|
|
44
45
|
"test:sources": "tape -r ./lib/tape-adapter tests/*.js tests/node/*.js",
|
|
45
46
|
"test:types": "tsc tests/comp_typescript.ts --target es2019 --module commonjs --types node --lib es2019 --esModuleInterop --strictNullChecks --experimentalDecorators --emitDecoratorMetadata && tsc -p tsconfig.test-types.json",
|
|
46
|
-
"make": "npm run lint:sources && npm run build && npm run lint:types &&
|
|
47
|
+
"make": "npm run lint:sources && npm run build && npm run lint:types && npm run build:tests && npm test"
|
|
47
48
|
},
|
|
48
49
|
"dependencies": {
|
|
49
50
|
"long": "^5.3.2"
|
package/src/converter.js
CHANGED
|
@@ -42,7 +42,7 @@ function genValuePartial_fromObject(gen, field, fieldIndex, prop) {
|
|
|
42
42
|
} gen
|
|
43
43
|
("}");
|
|
44
44
|
} else gen
|
|
45
|
-
("if(
|
|
45
|
+
("if(!util.isObject(d%s))", prop)
|
|
46
46
|
("throw TypeError(%j)", field.fullName + ": object expected")
|
|
47
47
|
("m%s=types[%i].fromObject(d%s,q+1)", prop, fieldIndex, prop);
|
|
48
48
|
} else {
|
|
@@ -109,6 +109,8 @@ converter.fromObject = function fromObject(mtype) {
|
|
|
109
109
|
var gen = util.codegen(["d", "q"], mtype.name + "$fromObject")
|
|
110
110
|
("if(d instanceof C)")
|
|
111
111
|
("return d")
|
|
112
|
+
("if(!util.isObject(d))")
|
|
113
|
+
("throw TypeError(%j)", mtype.fullName + ": object expected")
|
|
112
114
|
("if(q===undefined)q=0")
|
|
113
115
|
("if(q>util.recursionLimit)")
|
|
114
116
|
("throw Error(\"max depth exceeded\")");
|
|
@@ -125,7 +127,7 @@ converter.fromObject = function fromObject(mtype) {
|
|
|
125
127
|
// Map fields
|
|
126
128
|
if (field.map) { gen
|
|
127
129
|
("if(d%s){", prop)
|
|
128
|
-
("if(
|
|
130
|
+
("if(!util.isObject(d%s))", prop)
|
|
129
131
|
("throw TypeError(%j)", field.fullName + ": object expected")
|
|
130
132
|
("m%s={}", prop)
|
|
131
133
|
("for(var ks=Object.keys(d%s),i=0;i<ks.length;++i){", prop);
|
package/src/decoder.js
CHANGED
|
@@ -186,8 +186,10 @@ function decoder(mtype) {
|
|
|
186
186
|
// Unknown fields
|
|
187
187
|
gen
|
|
188
188
|
("r.skipType(%s,q,t)", i ? "u" : "t&7")
|
|
189
|
-
("
|
|
190
|
-
|
|
189
|
+
("if(!r.discardUnknown){")
|
|
190
|
+
("util.makeProp(m,\"$unknowns\",false);")
|
|
191
|
+
("(m.$unknowns||(m.$unknowns=[])).push(r.raw(s,r.pos))")
|
|
192
|
+
("}")
|
|
191
193
|
("}")
|
|
192
194
|
("if(z!==undefined)")
|
|
193
195
|
("throw Error(\"missing end group\")");
|
package/src/method.js
CHANGED
|
@@ -61,7 +61,7 @@ function Method(name, type, requestType, responseType, requestStream, responseSt
|
|
|
61
61
|
|
|
62
62
|
/**
|
|
63
63
|
* Whether requests are streamed or not.
|
|
64
|
-
* @type {
|
|
64
|
+
* @type {true|undefined}
|
|
65
65
|
*/
|
|
66
66
|
this.requestStream = requestStream ? true : undefined; // toJSON
|
|
67
67
|
|
|
@@ -73,10 +73,16 @@ function Method(name, type, requestType, responseType, requestStream, responseSt
|
|
|
73
73
|
|
|
74
74
|
/**
|
|
75
75
|
* Whether responses are streamed or not.
|
|
76
|
-
* @type {
|
|
76
|
+
* @type {true|undefined}
|
|
77
77
|
*/
|
|
78
78
|
this.responseStream = responseStream ? true : undefined; // toJSON
|
|
79
79
|
|
|
80
|
+
/**
|
|
81
|
+
* gRPC-style method path.
|
|
82
|
+
* @type {string}
|
|
83
|
+
*/
|
|
84
|
+
this.path = "/" + this.name;
|
|
85
|
+
|
|
80
86
|
/**
|
|
81
87
|
* Resolved request type.
|
|
82
88
|
* @type {Type|null}
|
|
@@ -154,6 +160,14 @@ Method.prototype.resolve = function resolve() {
|
|
|
154
160
|
if (this.resolved)
|
|
155
161
|
return this;
|
|
156
162
|
|
|
163
|
+
if (this.parent) {
|
|
164
|
+
var serviceName = this.parent.fullName;
|
|
165
|
+
if (serviceName.charAt(0) === ".")
|
|
166
|
+
serviceName = serviceName.substring(1);
|
|
167
|
+
this.path = "/" + serviceName + "/" + this.name;
|
|
168
|
+
} else
|
|
169
|
+
this.path = "/" + this.name;
|
|
170
|
+
|
|
157
171
|
this.resolvedRequestType = this.parent.lookupType(this.requestType);
|
|
158
172
|
this.resolvedResponseType = this.parent.lookupType(this.responseType);
|
|
159
173
|
|
package/src/namespace.js
CHANGED
|
@@ -68,7 +68,7 @@ Namespace.arrayToJSON = arrayToJSON;
|
|
|
68
68
|
Namespace.isReservedId = function isReservedId(reserved, id) {
|
|
69
69
|
if (reserved)
|
|
70
70
|
for (var i = 0; i < reserved.length; ++i)
|
|
71
|
-
if (typeof reserved[i] !== "string" && reserved[i][0] <= id && reserved[i][1]
|
|
71
|
+
if (typeof reserved[i] !== "string" && reserved[i][0] <= id && reserved[i][1] >= id)
|
|
72
72
|
return true;
|
|
73
73
|
return false;
|
|
74
74
|
};
|
|
@@ -426,14 +426,14 @@ Namespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChe
|
|
|
426
426
|
if (path[0] === "")
|
|
427
427
|
return this.root.lookup(path.slice(1), filterTypes);
|
|
428
428
|
|
|
429
|
-
//
|
|
430
|
-
var found = this.
|
|
429
|
+
// Lookup at this namespace and below
|
|
430
|
+
var found = this._lookupImpl(path, flatPath);
|
|
431
431
|
if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {
|
|
432
432
|
return found;
|
|
433
433
|
}
|
|
434
434
|
|
|
435
|
-
//
|
|
436
|
-
found = this.
|
|
435
|
+
// Fall back to respective absolute path once relative scope has been checked (non-standard)
|
|
436
|
+
found = this.root._fullyQualifiedObjects && this.root._fullyQualifiedObjects["." + flatPath];
|
|
437
437
|
if (found && (!filterTypes || filterTypes.indexOf(found.constructor) > -1)) {
|
|
438
438
|
return found;
|
|
439
439
|
}
|
package/src/parse.js
CHANGED
|
@@ -27,6 +27,9 @@ var base10Re = /^[1-9][0-9]*$/,
|
|
|
27
27
|
nameRe = /^[a-zA-Z_][a-zA-Z_0-9]*$/,
|
|
28
28
|
typeRefRe = util.patterns.typeRefRe;
|
|
29
29
|
|
|
30
|
+
var maxFieldId = 536870911, // 2^29 - 1
|
|
31
|
+
maxEnumId = 2147483647; // 2^31 - 1
|
|
32
|
+
|
|
30
33
|
/**
|
|
31
34
|
* Result object returned from {@link parse}.
|
|
32
35
|
* @interface IParserResult
|
|
@@ -146,7 +149,7 @@ function parse(source, root, options) {
|
|
|
146
149
|
}
|
|
147
150
|
}
|
|
148
151
|
|
|
149
|
-
function readRanges(target, acceptStrings) {
|
|
152
|
+
function readRanges(target, acceptStrings, max, acceptNegative) {
|
|
150
153
|
var token, start;
|
|
151
154
|
do {
|
|
152
155
|
if (acceptStrings && ((token = peek()) === "\"" || token === "'")) {
|
|
@@ -157,7 +160,7 @@ function parse(source, root, options) {
|
|
|
157
160
|
}
|
|
158
161
|
} else {
|
|
159
162
|
try {
|
|
160
|
-
target.push([ start = parseId(next()), skip("to", true) ? parseId(next()) : start ]);
|
|
163
|
+
target.push([ start = parseId(next(), acceptNegative, max), skip("to", true) ? parseId(next(), acceptNegative, max) : start ]);
|
|
161
164
|
} catch (err) {
|
|
162
165
|
if (acceptStrings && typeRefRe.test(token) && edition >= 2023) {
|
|
163
166
|
target.push(token);
|
|
@@ -216,10 +219,10 @@ function parse(source, root, options) {
|
|
|
216
219
|
throw illegal(token, "number", insideTryCatch);
|
|
217
220
|
}
|
|
218
221
|
|
|
219
|
-
function parseId(token, acceptNegative) {
|
|
222
|
+
function parseId(token, acceptNegative, max) {
|
|
220
223
|
switch (token) {
|
|
221
224
|
case "max": case "MAX": case "Max":
|
|
222
|
-
return
|
|
225
|
+
return max || maxFieldId;
|
|
223
226
|
case "0":
|
|
224
227
|
return 0;
|
|
225
228
|
}
|
|
@@ -677,7 +680,7 @@ function parse(source, root, options) {
|
|
|
677
680
|
break;
|
|
678
681
|
|
|
679
682
|
case "reserved":
|
|
680
|
-
readRanges(enm.reserved || (enm.reserved = []), true);
|
|
683
|
+
readRanges(enm.reserved || (enm.reserved = []), true, maxEnumId, true);
|
|
681
684
|
if(enm.reserved === undefined) enm.reserved = [];
|
|
682
685
|
break;
|
|
683
686
|
|
package/src/reader.js
CHANGED
|
@@ -38,6 +38,12 @@ function Reader(buffer) {
|
|
|
38
38
|
* @type {number}
|
|
39
39
|
*/
|
|
40
40
|
this.len = buffer.length;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Whether to discard unknown fields while decoding.
|
|
44
|
+
* @type {boolean}
|
|
45
|
+
*/
|
|
46
|
+
this.discardUnknown = Reader.discardUnknown;
|
|
41
47
|
}
|
|
42
48
|
|
|
43
49
|
var create_array = typeof Uint8Array !== "undefined"
|
|
@@ -450,6 +456,12 @@ Reader.prototype.skip = function skip(length) {
|
|
|
450
456
|
*/
|
|
451
457
|
Reader.recursionLimit = util.recursionLimit;
|
|
452
458
|
|
|
459
|
+
/**
|
|
460
|
+
* Whether readers discard unknown fields while decoding.
|
|
461
|
+
* @type {boolean}
|
|
462
|
+
*/
|
|
463
|
+
Reader.discardUnknown = false;
|
|
464
|
+
|
|
453
465
|
/**
|
|
454
466
|
* Skips the next element of the specified wire type.
|
|
455
467
|
* @param {number} wireType Wire type received
|
package/src/roots.js
CHANGED
package/src/rpc/service.js
CHANGED
|
@@ -23,10 +23,16 @@ var util = require("../util/minimal");
|
|
|
23
23
|
* @typedef rpc.ServiceMethod
|
|
24
24
|
* @template TReq extends Message<TReq>
|
|
25
25
|
* @template TRes extends Message<TRes>
|
|
26
|
-
* @type {
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
26
|
+
* @type {{
|
|
27
|
+
* (request: TReq|Properties<TReq>, callback: rpc.ServiceMethodCallback<TRes>): void;
|
|
28
|
+
* (request: TReq|Properties<TReq>): Promise<TRes>;
|
|
29
|
+
* readonly name: string;
|
|
30
|
+
* readonly path: string;
|
|
31
|
+
* readonly requestType: string;
|
|
32
|
+
* readonly responseType: string;
|
|
33
|
+
* readonly requestStream: true|undefined;
|
|
34
|
+
* readonly responseStream: true|undefined;
|
|
35
|
+
* }}
|
|
30
36
|
*/
|
|
31
37
|
|
|
32
38
|
/**
|
package/src/writer.js
CHANGED
|
@@ -230,7 +230,7 @@ Writer.prototype.uint32 = function write_uint32(value) {
|
|
|
230
230
|
* @returns {Writer} `this`
|
|
231
231
|
*/
|
|
232
232
|
Writer.prototype.int32 = function write_int32(value) {
|
|
233
|
-
return value < 0
|
|
233
|
+
return (value |= 0) < 0
|
|
234
234
|
? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec
|
|
235
235
|
: this.uint32(value);
|
|
236
236
|
};
|
|
@@ -245,16 +245,18 @@ Writer.prototype.sint32 = function write_sint32(value) {
|
|
|
245
245
|
};
|
|
246
246
|
|
|
247
247
|
function writeVarint64(val, buf, pos) {
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
248
|
+
var lo = val.lo,
|
|
249
|
+
hi = val.hi;
|
|
250
|
+
while (hi) {
|
|
251
|
+
buf[pos++] = lo & 127 | 128;
|
|
252
|
+
lo = (lo >>> 7 | hi << 25) >>> 0;
|
|
253
|
+
hi >>>= 7;
|
|
252
254
|
}
|
|
253
|
-
while (
|
|
254
|
-
buf[pos++] =
|
|
255
|
-
|
|
255
|
+
while (lo > 127) {
|
|
256
|
+
buf[pos++] = lo & 127 | 128;
|
|
257
|
+
lo = lo >>> 7;
|
|
256
258
|
}
|
|
257
|
-
buf[pos++] =
|
|
259
|
+
buf[pos++] = lo;
|
|
258
260
|
}
|
|
259
261
|
|
|
260
262
|
/**
|