diff --git a/node_modules/protobufjs/cli/lib/tsd-jsdoc/publish.js b/node_modules/protobufjs/cli/lib/tsd-jsdoc/publish.js index 3846a99..6c5688a 100644 --- a/node_modules/protobufjs/cli/lib/tsd-jsdoc/publish.js +++ b/node_modules/protobufjs/cli/lib/tsd-jsdoc/publish.js @@ -558,6 +558,13 @@ function handleClass(element, parent) { handleElement(child, element); }); + writeln(); + if (is_interface) { + writeln("__unknownFields?: ReadonlyArray;"); + } else { + writeln("public __unknownFields?: ReadonlyArray;"); + } + --indent; writeln("}"); diff --git a/node_modules/protobufjs/src/decoder.js b/node_modules/protobufjs/src/decoder.js index 491dd30..ec03e9f 100644 --- a/node_modules/protobufjs/src/decoder.js +++ b/node_modules/protobufjs/src/decoder.js @@ -21,6 +21,7 @@ function decoder(mtype) { ("r=Reader.create(r)") ("var c=l===undefined?r.len:r.pos+l,m=new this.ctor" + (mtype.fieldsArray.filter(function(field) { return field.map; }).length ? ",k,value" : "")) ("while(r.pos>>3){"); + var unknownRef = "m" + util.safeProp("__unknownFields"); + var i = 0; for (; i < /* initializes */ mtype.fieldsArray.length; ++i) { var field = mtype._fieldsArray[i].resolve(), @@ -109,6 +112,11 @@ function decoder(mtype) { } gen ("default:") ("r.skipType(t&7)") + ("if (!(%s)) {", unknownRef) + ("%s = []", unknownRef) + ("}") + + ("%s.push(r.buf.slice(unknownStartPos, r.pos))", unknownRef) ("break") ("}") diff --git a/node_modules/protobufjs/src/encoder.js b/node_modules/protobufjs/src/encoder.js index c803e99..50cc3e6 100644 --- a/node_modules/protobufjs/src/encoder.js +++ b/node_modules/protobufjs/src/encoder.js @@ -36,6 +36,21 @@ function encoder(mtype) { // "when a message is serialized its known fields should be written sequentially by field number" var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById); + var unknownRef = "m" + util.safeProp("__unknownFields"); + + // Redecode unknown fields and apply them to the message before encoding + gen + ("var fullyUnknown=[]") + ("if(%s) {", unknownRef) + ("for(var i=0;i<%s.length;++i) {", unknownRef) + ("try {") + ("var known=this.ctor.decode(%s[i])", unknownRef) + ("fullyUnknown=fullyUnknown.concat(known.__unknownFields||[])") + ("m=Object.assign(known,m)") + ("}catch(_){}") + ("}") + ("}") + for (var i = 0; i < fields.length; ++i) { var field = fields[i].resolve(), index = mtype._fieldsArray.indexOf(field), @@ -94,6 +109,11 @@ function encoder(mtype) { } } + gen + ("for(var i=0;i