diff --git a/package.json b/package.json index e112343de..0a7b9c90e 100644 --- a/package.json +++ b/package.json @@ -37,8 +37,8 @@ "prof": "node bench/prof", "test": "npm run test:sources && npm run test:types", "test:sources": "tape -r ./lib/tape-adapter tests/*.js tests/node/*.js", - "test:types": "tsc tests/comp_typescript.ts --lib es2015 --strictNullChecks --experimentalDecorators --emitDecoratorMetadata && tsc tests/data/test.js.ts --lib es2015 --noEmit --strictNullChecks && tsc tests/data/rpc.ts --lib es2015 --noEmit --strictNullChecks", - "make": "npm run lint && npm run build && npm test" + "test:types": "tsc tests/comp_typescript.ts --lib es2015 --strictNullChecks --experimentalDecorators --emitDecoratorMetadata && tsc tests/data/test.js.ts --lib es2015 --noEmit --strictNullChecks && tsc tests/data/*.ts --lib es2015 --noEmit --strictNullChecks", + "make": "npm run lint:sources && npm run build && npm run lint:types && node ./scripts/gentests.js && npm test" }, "dependencies": { "@protobufjs/aspromise": "^1.1.2", diff --git a/scripts/gentests.js b/scripts/gentests.js index a635a8923..97812e0fc 100644 --- a/scripts/gentests.js +++ b/scripts/gentests.js @@ -21,7 +21,7 @@ var fs = require("fs"), out = [ basename ].concat(flags).join("-") + ".js"; pbjs.main([ "--target", "static-module", - "--wrap", "commonjs", + "--wrap", flags.includes('es6') ? 'es6' : "commonjs", "--root", "test_" + path.basename(basename, ".js"), file ].concat(flags.map(function(flag) { diff --git a/tests/comp_typescript.js b/tests/comp_typescript.js index bbc8faa15..631a5f4cb 100644 --- a/tests/comp_typescript.js +++ b/tests/comp_typescript.js @@ -23,6 +23,7 @@ var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; exports.__esModule = true; +exports.AwesomeMessage = exports.AwesomeSubMessage = exports.AwesomeEnum = exports.Hello = void 0; var __1 = require(".."); // Reflection var root = __1.Root.fromJSON({ diff --git a/tests/data/convert.js b/tests/data/convert.js index 27fd285d3..b0658940f 100644 --- a/tests/data/convert.js +++ b/tests/data/convert.js @@ -201,7 +201,7 @@ $root.Message = (function() { Message.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Message(), key; + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Message(), key, value; while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { @@ -248,12 +248,26 @@ $root.Message = (function() { message.enumRepeated.push(reader.int32()); break; case 9: - reader.skip().pos++; if (message.int64Map === $util.emptyObject) message.int64Map = {}; - key = reader.string(); - reader.pos++; - message.int64Map[key] = reader.int64(); + var end2 = reader.uint32() + reader.pos; + key = ""; + value = 0; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = reader.int64(); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.int64Map[key] = value; break; default: reader.skipType(tag & 7); diff --git a/tests/data/package.js b/tests/data/package.js index 4fdda1b8f..acdee24b2 100644 --- a/tests/data/package.js +++ b/tests/data/package.js @@ -285,7 +285,7 @@ $root.Package = (function() { Package.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Package(), key; + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Package(), key, value; while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { @@ -325,36 +325,92 @@ $root.Package = (function() { message.main = reader.string(); break; case 11: - reader.skip().pos++; if (message.bin === $util.emptyObject) message.bin = {}; - key = reader.string(); - reader.pos++; - message.bin[key] = reader.string(); + var end2 = reader.uint32() + reader.pos; + key = ""; + value = ""; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = reader.string(); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.bin[key] = value; break; case 12: - reader.skip().pos++; if (message.scripts === $util.emptyObject) message.scripts = {}; - key = reader.string(); - reader.pos++; - message.scripts[key] = reader.string(); + var end2 = reader.uint32() + reader.pos; + key = ""; + value = ""; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = reader.string(); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.scripts[key] = value; break; case 13: - reader.skip().pos++; if (message.dependencies === $util.emptyObject) message.dependencies = {}; - key = reader.string(); - reader.pos++; - message.dependencies[key] = reader.string(); + var end2 = reader.uint32() + reader.pos; + key = ""; + value = ""; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = reader.string(); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.dependencies[key] = value; break; case 15: - reader.skip().pos++; if (message.devDependencies === $util.emptyObject) message.devDependencies = {}; - key = reader.string(); - reader.pos++; - message.devDependencies[key] = reader.string(); + var end2 = reader.uint32() + reader.pos; + key = ""; + value = ""; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = reader.string(); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.devDependencies[key] = value; break; case 17: message.types = reader.string(); diff --git a/tests/data/test.js b/tests/data/test.js index 00fb41c9f..180b32ce0 100644 --- a/tests/data/test.js +++ b/tests/data/test.js @@ -6985,100 +6985,254 @@ $root.jspb = (function() { TestMapFieldsNoBinary.decode = function decode(reader, length) { if (!(reader instanceof $Reader)) reader = $Reader.create(reader); - var end = length === undefined ? reader.len : reader.pos + length, message = new $root.jspb.test.TestMapFieldsNoBinary(), key; + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.jspb.test.TestMapFieldsNoBinary(), key, value; while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { case 1: - reader.skip().pos++; if (message.mapStringString === $util.emptyObject) message.mapStringString = {}; - key = reader.string(); - reader.pos++; - message.mapStringString[key] = reader.string(); + var end2 = reader.uint32() + reader.pos; + key = ""; + value = ""; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = reader.string(); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.mapStringString[key] = value; break; case 2: - reader.skip().pos++; if (message.mapStringInt32 === $util.emptyObject) message.mapStringInt32 = {}; - key = reader.string(); - reader.pos++; - message.mapStringInt32[key] = reader.int32(); + var end2 = reader.uint32() + reader.pos; + key = ""; + value = 0; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = reader.int32(); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.mapStringInt32[key] = value; break; case 3: - reader.skip().pos++; if (message.mapStringInt64 === $util.emptyObject) message.mapStringInt64 = {}; - key = reader.string(); - reader.pos++; - message.mapStringInt64[key] = reader.int64(); + var end2 = reader.uint32() + reader.pos; + key = ""; + value = 0; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = reader.int64(); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.mapStringInt64[key] = value; break; case 4: - reader.skip().pos++; if (message.mapStringBool === $util.emptyObject) message.mapStringBool = {}; - key = reader.string(); - reader.pos++; - message.mapStringBool[key] = reader.bool(); + var end2 = reader.uint32() + reader.pos; + key = ""; + value = false; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = reader.bool(); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.mapStringBool[key] = value; break; case 5: - reader.skip().pos++; if (message.mapStringDouble === $util.emptyObject) message.mapStringDouble = {}; - key = reader.string(); - reader.pos++; - message.mapStringDouble[key] = reader.double(); + var end2 = reader.uint32() + reader.pos; + key = ""; + value = 0; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = reader.double(); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.mapStringDouble[key] = value; break; case 6: - reader.skip().pos++; if (message.mapStringEnum === $util.emptyObject) message.mapStringEnum = {}; - key = reader.string(); - reader.pos++; - message.mapStringEnum[key] = reader.int32(); + var end2 = reader.uint32() + reader.pos; + key = ""; + value = 0; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = reader.int32(); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.mapStringEnum[key] = value; break; case 7: - reader.skip().pos++; if (message.mapStringMsg === $util.emptyObject) message.mapStringMsg = {}; - key = reader.string(); - reader.pos++; - message.mapStringMsg[key] = $root.jspb.test.MapValueMessageNoBinary.decode(reader, reader.uint32()); + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.jspb.test.MapValueMessageNoBinary.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.mapStringMsg[key] = value; break; case 8: - reader.skip().pos++; if (message.mapInt32String === $util.emptyObject) message.mapInt32String = {}; - key = reader.int32(); - reader.pos++; - message.mapInt32String[key] = reader.string(); + var end2 = reader.uint32() + reader.pos; + key = 0; + value = ""; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.int32(); + break; + case 2: + value = reader.string(); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.mapInt32String[key] = value; break; case 9: - reader.skip().pos++; if (message.mapInt64String === $util.emptyObject) message.mapInt64String = {}; - key = reader.int64(); - reader.pos++; - message.mapInt64String[typeof key === "object" ? $util.longToHash(key) : key] = reader.string(); + var end2 = reader.uint32() + reader.pos; + key = 0; + value = ""; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.int64(); + break; + case 2: + value = reader.string(); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.mapInt64String[typeof key === "object" ? $util.longToHash(key) : key] = value; break; case 10: - reader.skip().pos++; if (message.mapBoolString === $util.emptyObject) message.mapBoolString = {}; - key = reader.bool(); - reader.pos++; - message.mapBoolString[key] = reader.string(); + var end2 = reader.uint32() + reader.pos; + key = false; + value = ""; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.bool(); + break; + case 2: + value = reader.string(); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.mapBoolString[key] = value; break; case 11: message.testMapFields = $root.jspb.test.TestMapFieldsNoBinary.decode(reader, reader.uint32()); break; case 12: - reader.skip().pos++; if (message.mapStringTestmapfields === $util.emptyObject) message.mapStringTestmapfields = {}; - key = reader.string(); - reader.pos++; - message.mapStringTestmapfields[key] = $root.jspb.test.TestMapFieldsNoBinary.decode(reader, reader.uint32()); + var end2 = reader.uint32() + reader.pos; + key = ""; + value = null; + while (reader.pos < end2) { + var tag2 = reader.uint32(); + switch (tag2 >>> 3) { + case 1: + key = reader.string(); + break; + case 2: + value = $root.jspb.test.TestMapFieldsNoBinary.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag2 & 7); + break; + } + } + message.mapStringTestmapfields[key] = value; break; default: reader.skipType(tag & 7);