protobufjs 8.1.6-experimental → 8.2.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 +219 -565
- package/dist/light/protobuf.js +1986 -1483
- 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 +1122 -861
- 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 +2089 -1513
- package/dist/protobuf.js.map +1 -1
- package/dist/protobuf.min.js +3 -3
- package/dist/protobuf.min.js.map +1 -1
- package/ext/README.md +81 -0
- package/ext/descriptor/README.md +3 -70
- package/ext/descriptor/index.d.ts +1 -191
- package/ext/descriptor/index.js +1 -1161
- package/ext/descriptor.d.ts +309 -0
- package/ext/descriptor.js +1236 -0
- package/ext/textformat.d.ts +30 -0
- package/ext/textformat.js +1249 -0
- package/google/protobuf/compiler/plugin.json +126 -0
- package/google/protobuf/compiler/plugin.proto +47 -0
- package/google/protobuf/descriptor.json +2 -2
- package/google/protobuf/descriptor.proto +2 -1
- package/index.d.ts +590 -476
- package/package.json +23 -38
- package/src/converter.js +60 -24
- package/src/decoder.js +122 -49
- package/src/encoder.js +10 -2
- package/src/enum.js +4 -1
- package/src/field.js +10 -7
- package/src/mapfield.js +1 -0
- package/src/message.js +7 -6
- package/src/method.js +4 -3
- package/src/namespace.js +23 -12
- package/src/object.js +24 -19
- package/src/oneof.js +2 -0
- package/src/parse.js +114 -46
- package/src/reader.js +145 -30
- package/src/reader_buffer.js +24 -3
- package/src/root.js +7 -4
- package/src/service.js +12 -6
- package/src/tokenize.js +6 -1
- package/src/type.js +48 -25
- package/src/types.js +1 -1
- package/src/util/aspromise.d.ts +13 -0
- package/src/util/aspromise.js +52 -0
- package/src/util/base64.d.ts +32 -0
- package/src/util/base64.js +146 -0
- package/src/util/codegen.d.ts +31 -0
- package/src/util/codegen.js +113 -0
- package/src/util/eventemitter.d.ts +45 -0
- package/src/util/eventemitter.js +84 -0
- package/src/util/fetch.d.ts +56 -0
- package/src/util/fetch.js +112 -0
- package/src/util/float.d.ts +83 -0
- package/src/util/float.js +335 -0
- package/src/util/fs.js +11 -0
- package/src/util/inquire.d.ts +10 -0
- package/src/util/inquire.js +38 -0
- package/src/util/minimal.js +67 -12
- package/src/util/path.d.ts +22 -0
- package/src/util/path.js +72 -0
- package/src/util/patterns.js +8 -0
- package/src/util/pool.d.ts +32 -0
- package/src/util/pool.js +48 -0
- package/src/util/utf8.d.ts +24 -0
- package/src/util/utf8.js +104 -0
- package/src/util.js +30 -13
- package/src/verifier.js +7 -4
- package/src/wrappers.js +4 -3
- package/src/writer.js +27 -4
- package/src/writer_buffer.js +12 -0
- package/tsconfig.json +2 -2
- package/ext/descriptor/test.js +0 -54
package/package.json
CHANGED
|
@@ -1,24 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "protobufjs",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.2.0",
|
|
4
4
|
"versionScheme": "~",
|
|
5
|
-
"description": "Protocol Buffers for JavaScript
|
|
5
|
+
"description": "Protocol Buffers for JavaScript & TypeScript.",
|
|
6
6
|
"author": "Daniel Wirtz <dcode+protobufjs@dcode.io>",
|
|
7
7
|
"license": "BSD-3-Clause",
|
|
8
8
|
"repository": "protobufjs/protobuf.js",
|
|
9
9
|
"bugs": "https://github.com/protobufjs/protobuf.js/issues",
|
|
10
|
-
"homepage": "https://protobufjs.github.io/protobuf.js/",
|
|
11
10
|
"engines": {
|
|
12
11
|
"node": ">=12.0.0"
|
|
13
12
|
},
|
|
14
|
-
"eslintConfig": {
|
|
15
|
-
"env": {
|
|
16
|
-
"es6": true
|
|
17
|
-
},
|
|
18
|
-
"parserOptions": {
|
|
19
|
-
"ecmaVersion": 6
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
13
|
"keywords": [
|
|
23
14
|
"protobuf",
|
|
24
15
|
"protocol-buffers",
|
|
@@ -26,74 +17,68 @@
|
|
|
26
17
|
"typescript"
|
|
27
18
|
],
|
|
28
19
|
"main": "index.js",
|
|
20
|
+
"type": "commonjs",
|
|
29
21
|
"types": "index.d.ts",
|
|
22
|
+
"browser": {
|
|
23
|
+
"fs": false
|
|
24
|
+
},
|
|
30
25
|
"scripts": {
|
|
31
26
|
"bench": "node bench",
|
|
32
27
|
"build": "npm run build:bundle && npm run build:types",
|
|
33
28
|
"build:bundle": "gulp --gulpfile scripts/gulpfile.js",
|
|
34
|
-
"build:types": "node cli/bin/pbts --main --global protobuf --out index.d.ts src/
|
|
35
|
-
"changelog": "node scripts/changelog -w",
|
|
29
|
+
"build:types": "node cli/bin/pbts --main --global protobuf --out index.d.ts src/",
|
|
36
30
|
"coverage": "npm run coverage:test && npm run coverage:report",
|
|
37
31
|
"coverage:test": "nyc --silent tape -r ./lib/tape-adapter tests/*.js tests/node/*.js",
|
|
38
32
|
"coverage:report": "nyc report --reporter=lcov --reporter=text",
|
|
39
|
-
"docs": "
|
|
33
|
+
"docs": "npm run docs:build",
|
|
34
|
+
"docs:build": "jsdoc -c config/jsdoc.json -R README.md --verbose --pedantic",
|
|
35
|
+
"docs:publish": "npm run docs:build && node scripts/pages",
|
|
40
36
|
"lint": "npm run lint:sources && npm run lint:types",
|
|
41
|
-
"lint:sources": "eslint \"**/*.js\"
|
|
37
|
+
"lint:sources": "eslint \"**/*.js\"",
|
|
42
38
|
"lint:types": "tslint \"**/*.d.ts\" -e \"**/node_modules/**\" -t stylish -c config/tslint.json",
|
|
43
|
-
"pages": "node scripts/pages",
|
|
44
39
|
"prepublish": "cd cli && npm install && cd .. && npm run build",
|
|
45
40
|
"prepublishOnly": "cd cli && npm install && cd .. && npm run build",
|
|
46
41
|
"postinstall": "node scripts/postinstall",
|
|
47
42
|
"prof": "node bench/prof",
|
|
48
43
|
"test": "npm run test:sources && npm run test:types",
|
|
49
44
|
"test:sources": "tape -r ./lib/tape-adapter tests/*.js tests/node/*.js",
|
|
50
|
-
"test:types": "tsc tests/comp_typescript.ts --lib es2015 --esModuleInterop --strictNullChecks --experimentalDecorators --emitDecoratorMetadata && tsc tests/data/test.js.ts --lib es2015 --esModuleInterop --noEmit --strictNullChecks && tsc tests/data/*.ts --lib es2015 --esModuleInterop --noEmit --strictNullChecks",
|
|
45
|
+
"test:types": "tsc tests/comp_typescript.ts --types node --lib es2015 --esModuleInterop --strictNullChecks --experimentalDecorators --emitDecoratorMetadata && tsc tests/comp_descriptor.ts --types node --lib es2015 --esModuleInterop --noEmit --strictNullChecks && tsc tests/comp_textformat.ts --types node --lib es2015 --esModuleInterop --noEmit --strictNullChecks && tsc tests/data/test.js.ts --types node --lib es2015 --esModuleInterop --noEmit --strictNullChecks && tsc tests/data/*.ts --types node --lib es2015 --esModuleInterop --noEmit --strictNullChecks",
|
|
51
46
|
"make": "npm run lint:sources && npm run build && npm run lint:types && node ./scripts/gentests.js && npm test"
|
|
52
47
|
},
|
|
53
48
|
"dependencies": {
|
|
54
|
-
"@protobufjs/aspromise": "^1.1.2",
|
|
55
|
-
"@protobufjs/base64": "^1.1.2",
|
|
56
|
-
"@protobufjs/codegen": "^2.0.4",
|
|
57
|
-
"@protobufjs/eventemitter": "^1.1.0",
|
|
58
|
-
"@protobufjs/fetch": "^1.1.0",
|
|
59
|
-
"@protobufjs/float": "^1.0.2",
|
|
60
|
-
"@protobufjs/inquire": "^1.1.0",
|
|
61
|
-
"@protobufjs/path": "^1.1.2",
|
|
62
|
-
"@protobufjs/pool": "^1.1.0",
|
|
63
|
-
"@protobufjs/utf8": "^1.1.0",
|
|
64
49
|
"@types/node": ">=13.7.0",
|
|
65
50
|
"long": "^5.0.0"
|
|
66
51
|
},
|
|
67
52
|
"devDependencies": {
|
|
53
|
+
"@eslint/js": "^10.0.0",
|
|
68
54
|
"benchmark": "^2.1.4",
|
|
69
55
|
"browserify": "^17.0.0",
|
|
70
56
|
"browserify-wrap": "^1.0.2",
|
|
71
57
|
"bundle-collapser": "^1.3.0",
|
|
72
58
|
"chalk": "^4.0.0",
|
|
73
59
|
"escodegen": "^1.13.0",
|
|
74
|
-
"eslint": "^
|
|
60
|
+
"eslint": "^10.0.0",
|
|
61
|
+
"eslint-plugin-jsdoc": "^62.9.0",
|
|
75
62
|
"espree": "^9.0.0",
|
|
76
63
|
"estraverse": "^5.1.0",
|
|
77
|
-
"gh-pages": "^
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"gulp": "^4.0.2",
|
|
64
|
+
"gh-pages": "^6.0.0",
|
|
65
|
+
"globals": "^17.0.0",
|
|
66
|
+
"google-protobuf": "^4.0.0",
|
|
67
|
+
"gulp": "^5.0.0",
|
|
82
68
|
"gulp-header": "^2.0.9",
|
|
83
69
|
"gulp-if": "^3.0.0",
|
|
84
70
|
"gulp-sourcemaps": "^3.0.0",
|
|
85
71
|
"gulp-uglify": "^3.0.2",
|
|
86
|
-
"jaguarjs-jsdoc": "github:dcodeIO/jaguarjs-jsdoc",
|
|
87
72
|
"jsdoc": "^4.0.0",
|
|
88
|
-
"minimist": "^1.2.
|
|
89
|
-
"nyc": "^
|
|
90
|
-
"reflect-metadata": "^0.
|
|
73
|
+
"minimist": "^1.2.8",
|
|
74
|
+
"nyc": "^18.0.0",
|
|
75
|
+
"reflect-metadata": "^0.2.0",
|
|
91
76
|
"tape": "^5.0.0",
|
|
92
77
|
"tslint": "^6.0.0",
|
|
93
78
|
"typescript": "^3.7.5",
|
|
94
79
|
"uglify-js": "^3.7.7",
|
|
95
80
|
"vinyl-buffer": "^1.0.1",
|
|
96
|
-
"vinyl-fs": "^
|
|
81
|
+
"vinyl-fs": "^4.0.0",
|
|
97
82
|
"vinyl-source-stream": "^2.0.0"
|
|
98
83
|
},
|
|
99
84
|
"files": [
|
package/src/converter.js
CHANGED
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
var converter = exports;
|
|
7
7
|
|
|
8
|
-
var Enum
|
|
9
|
-
|
|
8
|
+
var Enum = require("./enum"),
|
|
9
|
+
types = require("./types"),
|
|
10
|
+
util = require("./util");
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Generates a partial value fromObject conveter.
|
|
@@ -27,7 +28,7 @@ function genValuePartial_fromObject(gen, field, fieldIndex, prop) {
|
|
|
27
28
|
// enum unknown values passthrough
|
|
28
29
|
if (values[keys[i]] === field.typeDefault && !defaultAlreadyEmitted) { gen
|
|
29
30
|
("default:")
|
|
30
|
-
("if(typeof
|
|
31
|
+
("if(typeof d%s===\"number\"){m%s=d%s;break}", prop, prop, prop);
|
|
31
32
|
if (!field.repeated) gen // fallback to default value only for
|
|
32
33
|
// arrays, to avoid leaving holes.
|
|
33
34
|
("break"); // for non-repeated fields, just ignore
|
|
@@ -43,7 +44,7 @@ function genValuePartial_fromObject(gen, field, fieldIndex, prop) {
|
|
|
43
44
|
} else gen
|
|
44
45
|
("if(typeof d%s!==\"object\")", prop)
|
|
45
46
|
("throw TypeError(%j)", field.fullName + ": object expected")
|
|
46
|
-
("m%s=types[%i].fromObject(d%s)", prop, fieldIndex, prop);
|
|
47
|
+
("m%s=types[%i].fromObject(d%s,q+1)", prop, fieldIndex, prop);
|
|
47
48
|
} else {
|
|
48
49
|
var isUnsigned = false;
|
|
49
50
|
switch (field.type) {
|
|
@@ -79,7 +80,7 @@ function genValuePartial_fromObject(gen, field, fieldIndex, prop) {
|
|
|
79
80
|
case "bytes": gen
|
|
80
81
|
("if(typeof d%s===\"string\")", prop)
|
|
81
82
|
("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)", prop, prop, prop)
|
|
82
|
-
("else if(d%s.length
|
|
83
|
+
("else if(d%s.length>=0)", prop)
|
|
83
84
|
("m%s=d%s", prop, prop);
|
|
84
85
|
break;
|
|
85
86
|
case "string": gen
|
|
@@ -105,16 +106,21 @@ function genValuePartial_fromObject(gen, field, fieldIndex, prop) {
|
|
|
105
106
|
converter.fromObject = function fromObject(mtype) {
|
|
106
107
|
/* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
107
108
|
var fields = mtype.fieldsArray;
|
|
108
|
-
var gen = util.codegen(["d"], mtype.name + "$fromObject")
|
|
109
|
+
var gen = util.codegen(["d", "q"], mtype.name + "$fromObject")
|
|
109
110
|
("if(d instanceof this.ctor)")
|
|
110
|
-
("return d")
|
|
111
|
+
("return d")
|
|
112
|
+
("if(q===undefined)q=0")
|
|
113
|
+
("if(q>util.recursionLimit)")
|
|
114
|
+
("throw Error(\"max depth exceeded\")");
|
|
111
115
|
if (!fields.length) return gen
|
|
112
116
|
("return new this.ctor");
|
|
113
117
|
gen
|
|
114
118
|
("var m=new this.ctor");
|
|
115
119
|
for (var i = 0; i < fields.length; ++i) {
|
|
116
120
|
var field = fields[i].resolve(),
|
|
117
|
-
prop = util.safeProp(field.name)
|
|
121
|
+
prop = util.safeProp(field.name),
|
|
122
|
+
implicitPresence = !field.hasPresence && !field.repeated && !field.map
|
|
123
|
+
&& (field.resolvedType instanceof Enum || types.basic[field.type] !== undefined);
|
|
118
124
|
|
|
119
125
|
// Map fields
|
|
120
126
|
if (field.map) { gen
|
|
@@ -123,6 +129,9 @@ converter.fromObject = function fromObject(mtype) {
|
|
|
123
129
|
("throw TypeError(%j)", field.fullName + ": object expected")
|
|
124
130
|
("m%s={}", prop)
|
|
125
131
|
("for(var ks=Object.keys(d%s),i=0;i<ks.length;++i){", prop);
|
|
132
|
+
gen
|
|
133
|
+
("if(ks[i]===\"__proto__\")")
|
|
134
|
+
("util.makeProp(m%s,ks[i])", prop);
|
|
126
135
|
genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + "[ks[i]]")
|
|
127
136
|
("}")
|
|
128
137
|
("}");
|
|
@@ -132,7 +141,7 @@ converter.fromObject = function fromObject(mtype) {
|
|
|
132
141
|
("if(d%s){", prop)
|
|
133
142
|
("if(!Array.isArray(d%s))", prop)
|
|
134
143
|
("throw TypeError(%j)", field.fullName + ": array expected")
|
|
135
|
-
("m%s=
|
|
144
|
+
("m%s=Array(d%s.length)", prop, prop)
|
|
136
145
|
("for(var i=0;i<d%s.length;++i){", prop);
|
|
137
146
|
genValuePartial_fromObject(gen, field, /* not sorted */ i, prop + "[i]")
|
|
138
147
|
("}")
|
|
@@ -142,7 +151,23 @@ converter.fromObject = function fromObject(mtype) {
|
|
|
142
151
|
} else {
|
|
143
152
|
if (!(field.resolvedType instanceof Enum)) gen // no need to test for null/undefined if an enum (uses switch)
|
|
144
153
|
("if(d%s!=null){", prop); // !== undefined && !== null
|
|
154
|
+
if (implicitPresence) {
|
|
155
|
+
if (field.resolvedType instanceof Enum) gen
|
|
156
|
+
("if(d%s!==%j&&(typeof d%s!==\"string\"||types[%i].values[d%s]!==%j)){", prop, field.typeDefault, prop, i, prop, field.typeDefault);
|
|
157
|
+
else if (field.type === "string") gen
|
|
158
|
+
("if(typeof d%s!==\"string\"||d%s.length){", prop, prop);
|
|
159
|
+
else if (field.type === "bytes") gen
|
|
160
|
+
("if(d%s.length){", prop);
|
|
161
|
+
else if (field.type === "bool") gen
|
|
162
|
+
("if(d%s){", prop);
|
|
163
|
+
else if (types.long[field.type] !== undefined) gen
|
|
164
|
+
("if(typeof d%s===\"object\"?d%s.low||d%s.high:Number(d%s)!==0){", prop, prop, prop, prop);
|
|
165
|
+
else gen
|
|
166
|
+
("if(Number(d%s)!==0){", prop);
|
|
167
|
+
}
|
|
145
168
|
genValuePartial_fromObject(gen, field, /* not sorted */ i, prop);
|
|
169
|
+
if (implicitPresence) gen
|
|
170
|
+
("}");
|
|
146
171
|
if (!(field.resolvedType instanceof Enum)) gen
|
|
147
172
|
("}");
|
|
148
173
|
}
|
|
@@ -156,23 +181,26 @@ converter.fromObject = function fromObject(mtype) {
|
|
|
156
181
|
* @param {Codegen} gen Codegen instance
|
|
157
182
|
* @param {Field} field Reflected field
|
|
158
183
|
* @param {number} fieldIndex Field index
|
|
159
|
-
* @param {string}
|
|
184
|
+
* @param {string} dstProp Destination property reference
|
|
185
|
+
* @param {string} [srcProp] Source property reference
|
|
160
186
|
* @returns {Codegen} Codegen instance
|
|
161
187
|
* @ignore
|
|
162
188
|
*/
|
|
163
|
-
function genValuePartial_toObject(gen, field, fieldIndex,
|
|
189
|
+
function genValuePartial_toObject(gen, field, fieldIndex, dstProp, srcProp) {
|
|
164
190
|
/* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
191
|
+
if (!srcProp)
|
|
192
|
+
srcProp = dstProp;
|
|
165
193
|
if (field.resolvedType) {
|
|
166
194
|
if (field.resolvedType instanceof Enum) gen
|
|
167
|
-
("d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s",
|
|
195
|
+
("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);
|
|
168
196
|
else gen
|
|
169
|
-
("d%s=types[%i].toObject(m%s,o)",
|
|
197
|
+
("d%s=types[%i].toObject(m%s,o)", dstProp, fieldIndex, srcProp);
|
|
170
198
|
} else {
|
|
171
199
|
var isUnsigned = false;
|
|
172
200
|
switch (field.type) {
|
|
173
201
|
case "double":
|
|
174
202
|
case "float": gen
|
|
175
|
-
("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s",
|
|
203
|
+
("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s", dstProp, srcProp, srcProp, srcProp);
|
|
176
204
|
break;
|
|
177
205
|
case "uint64":
|
|
178
206
|
isUnsigned = true;
|
|
@@ -181,16 +209,16 @@ function genValuePartial_toObject(gen, field, fieldIndex, prop) {
|
|
|
181
209
|
case "sint64":
|
|
182
210
|
case "fixed64":
|
|
183
211
|
case "sfixed64": gen
|
|
184
|
-
("if(typeof m%s===\"number\")",
|
|
185
|
-
("d%s=o.longs===String?String(m%s):m%s",
|
|
212
|
+
("if(typeof m%s===\"number\")", srcProp)
|
|
213
|
+
("d%s=o.longs===String?String(m%s):m%s", dstProp, srcProp, srcProp)
|
|
186
214
|
("else") // Long-like
|
|
187
|
-
("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",
|
|
215
|
+
("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);
|
|
188
216
|
break;
|
|
189
217
|
case "bytes": gen
|
|
190
|
-
("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",
|
|
218
|
+
("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);
|
|
191
219
|
break;
|
|
192
220
|
default: gen
|
|
193
|
-
("d%s=m%s",
|
|
221
|
+
("d%s=m%s", dstProp, srcProp);
|
|
194
222
|
break;
|
|
195
223
|
}
|
|
196
224
|
}
|
|
@@ -253,11 +281,11 @@ converter.toObject = function toObject(mtype) {
|
|
|
253
281
|
("}else")
|
|
254
282
|
("d%s=o.longs===String?%j:%i", prop, field.typeDefault.toString(), field.typeDefault.toNumber());
|
|
255
283
|
else if (field.bytes) {
|
|
256
|
-
var arrayDefault =
|
|
284
|
+
var arrayDefault = Array.prototype.slice.call(field.typeDefault);
|
|
257
285
|
gen
|
|
258
286
|
("if(o.bytes===String)d%s=%j", prop, String.fromCharCode.apply(String, field.typeDefault))
|
|
259
287
|
("else{")
|
|
260
|
-
("d%s=%
|
|
288
|
+
("d%s=%j", prop, arrayDefault)
|
|
261
289
|
("if(o.bytes!==Array)d%s=util.newBuffer(d%s)", prop, prop)
|
|
262
290
|
("}");
|
|
263
291
|
} else gen
|
|
@@ -275,13 +303,21 @@ converter.toObject = function toObject(mtype) {
|
|
|
275
303
|
("var ks2");
|
|
276
304
|
} gen
|
|
277
305
|
("if(m%s&&(ks2=Object.keys(m%s)).length){", prop, prop)
|
|
278
|
-
("d%s={}", prop)
|
|
306
|
+
("d%s={}", prop);
|
|
307
|
+
var longKey = types.long[field.keyType] !== undefined,
|
|
308
|
+
srcProp = prop + "[ks2[j]]";
|
|
309
|
+
gen
|
|
279
310
|
("for(var j=0;j<ks2.length;++j){");
|
|
280
|
-
|
|
311
|
+
if (longKey) gen
|
|
312
|
+
("var k2=util.longFromKey(ks2[j],%j).toString()", field.keyType === "uint64" || field.keyType === "fixed64");
|
|
313
|
+
gen
|
|
314
|
+
("if(ks2[j]===\"__proto__\")")
|
|
315
|
+
("util.makeProp(d%s,ks2[j])", prop);
|
|
316
|
+
genValuePartial_toObject(gen, field, /* sorted */ index, longKey ? prop + "[k2]" : srcProp, srcProp)
|
|
281
317
|
("}");
|
|
282
318
|
} else if (field.repeated) { gen
|
|
283
319
|
("if(m%s&&m%s.length){", prop, prop)
|
|
284
|
-
("d%s=
|
|
320
|
+
("d%s=Array(m%s.length)", prop, prop)
|
|
285
321
|
("for(var j=0;j<m%s.length;++j){", prop);
|
|
286
322
|
genValuePartial_toObject(gen, field, /* sorted */ index, prop + "[j]")
|
|
287
323
|
("}");
|
package/src/decoder.js
CHANGED
|
@@ -16,28 +16,47 @@ function missing(field) {
|
|
|
16
16
|
*/
|
|
17
17
|
function decoder(mtype) {
|
|
18
18
|
/* eslint-disable no-unexpected-multiline */
|
|
19
|
-
var
|
|
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"], mtype.name + "$decode")
|
|
20
30
|
("if(!(r instanceof Reader))")
|
|
21
31
|
("r=Reader.create(r)")
|
|
22
|
-
("
|
|
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 this.ctor" + (hasMapField ? ",k,v" : hasImplicitPresenceField ? ",v" : ""))
|
|
23
36
|
("while(r.pos<c){")
|
|
24
|
-
("var
|
|
25
|
-
("
|
|
37
|
+
("var s=r.pos")
|
|
38
|
+
("var t=r.tag()")
|
|
39
|
+
("if(t===z){")
|
|
40
|
+
("z=undefined")
|
|
26
41
|
("break")
|
|
27
|
-
("
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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) {
|
|
31
47
|
var field = mtype._fieldsArray[i].resolve(),
|
|
32
48
|
type = field.resolvedType instanceof Enum ? "int32" : field.type,
|
|
33
|
-
ref = "m" + util.safeProp(field.name);
|
|
34
|
-
("case %i: {", field.id);
|
|
49
|
+
ref = "m" + util.safeProp(field.name);
|
|
35
50
|
|
|
36
51
|
// Map fields
|
|
37
|
-
if (field.map) {
|
|
52
|
+
if (field.map) {
|
|
53
|
+
gen
|
|
54
|
+
("case %i:{", field.id)
|
|
55
|
+
("if(u!==2)")
|
|
56
|
+
("break")
|
|
38
57
|
("if(%s===util.emptyObject)", ref)
|
|
39
58
|
("%s={}", ref)
|
|
40
|
-
("var c2
|
|
59
|
+
("var c2=r.uint32()+r.pos");
|
|
41
60
|
|
|
42
61
|
if (types.defaults[field.keyType] !== undefined) gen
|
|
43
62
|
("k=%j", types.defaults[field.keyType]);
|
|
@@ -45,73 +64,127 @@ function decoder(mtype) {
|
|
|
45
64
|
("k=null");
|
|
46
65
|
|
|
47
66
|
if (types.defaults[type] !== undefined) gen
|
|
48
|
-
("
|
|
67
|
+
("v=%j", types.defaults[type]);
|
|
49
68
|
else gen
|
|
50
|
-
("
|
|
69
|
+
("v=null");
|
|
51
70
|
|
|
52
71
|
gen
|
|
53
72
|
("while(r.pos<c2){")
|
|
54
|
-
("var
|
|
55
|
-
("
|
|
56
|
-
|
|
57
|
-
("case
|
|
73
|
+
("var t2=r.tag()")
|
|
74
|
+
("u=t2&7")
|
|
75
|
+
("switch(t2>>>=3){")
|
|
76
|
+
("case 1:")
|
|
77
|
+
("if(u!==%i)", types.mapKey[field.keyType])
|
|
78
|
+
("break")
|
|
79
|
+
("k=r.%s()", field.keyType)
|
|
80
|
+
("continue")
|
|
81
|
+
("case 2:")
|
|
82
|
+
("if(u!==%i)", types.basic[type] === undefined ? 2 : types.basic[type])
|
|
83
|
+
("break");
|
|
58
84
|
|
|
59
85
|
if (types.basic[type] === undefined) gen
|
|
60
|
-
("
|
|
86
|
+
("v=types[%i].decode(r,r.uint32(),undefined,q+1)", i); // can't be groups
|
|
61
87
|
else gen
|
|
62
|
-
("
|
|
88
|
+
("v=r.%s()", type);
|
|
63
89
|
|
|
64
90
|
gen
|
|
65
|
-
("
|
|
66
|
-
("default:")
|
|
67
|
-
("r.skipType(tag2&7)")
|
|
68
|
-
("break")
|
|
91
|
+
("continue")
|
|
69
92
|
("}")
|
|
93
|
+
("r.skipType(u,q,t2)")
|
|
70
94
|
("}");
|
|
71
95
|
|
|
96
|
+
var val = types.basic[type] === undefined ? "v||new types[" + i + "].ctor" : "v";
|
|
72
97
|
if (types.long[field.keyType] !== undefined) gen
|
|
73
|
-
("%s[typeof k===\"object\"?util.longToHash(k):k]
|
|
74
|
-
else
|
|
75
|
-
("
|
|
98
|
+
("%s[typeof k===\"object\"?util.longToHash(k):k]=%s", ref, val);
|
|
99
|
+
else {
|
|
100
|
+
if (field.keyType === "string") gen
|
|
101
|
+
("if(k===\"__proto__\")")
|
|
102
|
+
("util.makeProp(%s,k)", ref);
|
|
103
|
+
gen
|
|
104
|
+
("%s[k]=%s", ref, val);
|
|
105
|
+
}
|
|
76
106
|
|
|
77
107
|
// Repeated fields
|
|
78
108
|
} else if (field.repeated) { gen
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
("%s=[]", ref);
|
|
109
|
+
("case %i:", field.id)
|
|
110
|
+
("{");
|
|
82
111
|
|
|
83
112
|
// Packable (always check for forward and backward compatiblity)
|
|
84
113
|
if (types.packed[type] !== undefined) gen
|
|
85
|
-
("if(
|
|
114
|
+
("if(u===2){")
|
|
115
|
+
("if(!(%s&&%s.length))", ref, ref)
|
|
116
|
+
("%s=[]", ref)
|
|
86
117
|
("var c2=r.uint32()+r.pos")
|
|
87
118
|
("while(r.pos<c2)")
|
|
88
119
|
("%s.push(r.%s())", ref, type)
|
|
89
|
-
|
|
120
|
+
("continue")
|
|
121
|
+
("}");
|
|
90
122
|
|
|
91
123
|
// Non-packed
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
124
|
+
gen
|
|
125
|
+
("if(u!==%i)", types.basic[type] === undefined ? field.delimited ? 3 : 2 : types.basic[type])
|
|
126
|
+
("break")
|
|
127
|
+
("if(!(%s&&%s.length))", ref, ref)
|
|
128
|
+
("%s=[]", ref);
|
|
129
|
+
if (types.basic[type] === undefined) {
|
|
130
|
+
if (field.delimited) gen
|
|
131
|
+
("%s.push(types[%i].decode(r,undefined,%i,q+1))", ref, i, field.id * 8 + 4);
|
|
132
|
+
else gen
|
|
133
|
+
("%s.push(types[%i].decode(r,r.uint32(),undefined,q+1))", ref, i);
|
|
134
|
+
} else gen
|
|
96
135
|
("%s.push(r.%s())", ref, type);
|
|
97
136
|
|
|
98
137
|
// Non-repeated
|
|
99
|
-
} else if (types.basic[type] === undefined)
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
138
|
+
} else if (types.basic[type] === undefined) {
|
|
139
|
+
gen
|
|
140
|
+
("case %i:{", field.id)
|
|
141
|
+
("if(u!==%i)", field.delimited ? 3 : 2)
|
|
142
|
+
("break");
|
|
143
|
+
if (field.delimited) gen
|
|
144
|
+
("%s=types[%i].decode(r,undefined,%i,q+1,%s)", ref, i, field.id * 8 + 4, ref);
|
|
145
|
+
else gen
|
|
146
|
+
("%s=types[%i].decode(r,r.uint32(),undefined,q+1,%s)", ref, i, ref);
|
|
147
|
+
}
|
|
148
|
+
else if (field.hasPresence) {
|
|
149
|
+
gen
|
|
150
|
+
("case %i:{", field.id)
|
|
151
|
+
("if(u!==%i)", types.basic[type])
|
|
152
|
+
("break")
|
|
103
153
|
("%s=r.%s()", ref, type);
|
|
154
|
+
} else {
|
|
155
|
+
gen
|
|
156
|
+
("case %i:{", field.id)
|
|
157
|
+
("if(u!==%i)", types.basic[type])
|
|
158
|
+
("break");
|
|
159
|
+
if (type === "string" || type === "bytes") gen
|
|
160
|
+
("if((v=r.%s()).length)", type);
|
|
161
|
+
else if (types.long[type] !== undefined) gen
|
|
162
|
+
("if(typeof(v=r.%s())===\"object\"?v.low||v.high:v!==0)", type);
|
|
163
|
+
else if (type === "double" || type === "float") gen
|
|
164
|
+
("if((v=r.%s())!==0)", type);
|
|
165
|
+
else gen
|
|
166
|
+
("if(v=r.%s())", type);
|
|
167
|
+
gen
|
|
168
|
+
("%s=v", ref)
|
|
169
|
+
("else")
|
|
170
|
+
("delete %s", ref); // rare/odd case: later default clears earlier non-default
|
|
171
|
+
}
|
|
172
|
+
if (field.partOf) gen
|
|
173
|
+
("m%s=%j", util.safeProp(field.partOf.name), field.name);
|
|
104
174
|
gen
|
|
105
|
-
("
|
|
175
|
+
("continue")
|
|
106
176
|
("}");
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
("
|
|
114
|
-
|
|
177
|
+
}
|
|
178
|
+
if (i) gen
|
|
179
|
+
("}");
|
|
180
|
+
// Unknown fields
|
|
181
|
+
gen
|
|
182
|
+
("r.skipType(%s,q,t)", i ? "u" : "t&7")
|
|
183
|
+
("util.makeProp(m,\"$unknowns\",false);")
|
|
184
|
+
("(m.$unknowns||(m.$unknowns=[])).push(r.raw(s,r.pos))")
|
|
185
|
+
("}")
|
|
186
|
+
("if(z!==undefined)")
|
|
187
|
+
("throw Error(\"missing end group\")");
|
|
115
188
|
|
|
116
189
|
// Field presence
|
|
117
190
|
for (i = 0; i < mtype._fieldsArray.length; ++i) {
|
package/src/encoder.js
CHANGED
|
@@ -47,7 +47,12 @@ function encoder(mtype) {
|
|
|
47
47
|
if (field.map) {
|
|
48
48
|
gen
|
|
49
49
|
("if(%s!=null&&Object.hasOwnProperty.call(m,%j)){", ref, field.name) // !== undefined && !== null
|
|
50
|
-
("for(var ks=Object.keys(%s),i=0;i<ks.length;++i){", ref)
|
|
50
|
+
("for(var ks=Object.keys(%s),i=0;i<ks.length;++i){", ref);
|
|
51
|
+
if (field.keyType === "bool") gen
|
|
52
|
+
("w.uint32(%i).fork().uint32(%i).bool(util.boolFromKey(ks[i]))", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType]);
|
|
53
|
+
else if (types.long[field.keyType] !== undefined) gen
|
|
54
|
+
("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");
|
|
55
|
+
else gen
|
|
51
56
|
("w.uint32(%i).fork().uint32(%i).%s(ks[i])", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType);
|
|
52
57
|
if (wireType === undefined) gen
|
|
53
58
|
("types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()", index, ref); // can't be groups
|
|
@@ -83,7 +88,7 @@ function encoder(mtype) {
|
|
|
83
88
|
|
|
84
89
|
// Non-repeated
|
|
85
90
|
} else {
|
|
86
|
-
if (field.
|
|
91
|
+
if (!field.required) gen
|
|
87
92
|
("if(%s!=null&&Object.hasOwnProperty.call(m,%j))", ref, field.name); // !== undefined && !== null
|
|
88
93
|
|
|
89
94
|
if (wireType === undefined)
|
|
@@ -95,6 +100,9 @@ function encoder(mtype) {
|
|
|
95
100
|
}
|
|
96
101
|
|
|
97
102
|
return gen
|
|
103
|
+
("if(m.$unknowns!=null&&Object.hasOwnProperty.call(m,\"$unknowns\"))")
|
|
104
|
+
("for(var i=0;i<m.$unknowns.length;++i)")
|
|
105
|
+
("w.raw(m.$unknowns[i])")
|
|
98
106
|
("return w");
|
|
99
107
|
/* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */
|
|
100
108
|
}
|
package/src/enum.js
CHANGED
|
@@ -74,7 +74,7 @@ function Enum(name, values, options, comment, comments, valuesOptions) {
|
|
|
74
74
|
|
|
75
75
|
if (values)
|
|
76
76
|
for (var keys = Object.keys(values), i = 0; i < keys.length; ++i)
|
|
77
|
-
if (typeof values[keys[i]] === "number") // use forward entries only
|
|
77
|
+
if (keys[i] !== "__proto__" && typeof values[keys[i]] === "number") // use forward entries only
|
|
78
78
|
this.valuesById[ this.values[keys[i]] = values[keys[i]] ] = keys[i];
|
|
79
79
|
}
|
|
80
80
|
|
|
@@ -153,6 +153,9 @@ Enum.prototype.add = function add(name, id, comment, options) {
|
|
|
153
153
|
if (!util.isInteger(id))
|
|
154
154
|
throw TypeError("id must be an integer");
|
|
155
155
|
|
|
156
|
+
if (name === "__proto__")
|
|
157
|
+
return this;
|
|
158
|
+
|
|
156
159
|
if (this.values[name] !== undefined)
|
|
157
160
|
throw Error("duplicate name '" + name + "' in " + this);
|
|
158
161
|
|
package/src/field.js
CHANGED
|
@@ -352,8 +352,8 @@ Field.prototype.resolve = function resolve() {
|
|
|
352
352
|
this.defaultValue = this.typeDefault;
|
|
353
353
|
|
|
354
354
|
// ensure proper value on prototype
|
|
355
|
-
if (this.parent instanceof Type)
|
|
356
|
-
this.parent.
|
|
355
|
+
if (this.parent instanceof Type && this.parent._ctor)
|
|
356
|
+
this.parent._ctor.prototype[this.name] = this.defaultValue;
|
|
357
357
|
|
|
358
358
|
return ReflectionObject.prototype.resolve.call(this);
|
|
359
359
|
};
|
|
@@ -405,6 +405,7 @@ Field.prototype._resolveFeatures = function _resolveFeatures(edition) {
|
|
|
405
405
|
* @param {Object} prototype Target prototype
|
|
406
406
|
* @param {string} fieldName Field name
|
|
407
407
|
* @returns {undefined}
|
|
408
|
+
* @deprecated Legacy TypeScript decorator support. Will be removed in a future release.
|
|
408
409
|
*/
|
|
409
410
|
|
|
410
411
|
/**
|
|
@@ -417,6 +418,7 @@ Field.prototype._resolveFeatures = function _resolveFeatures(edition) {
|
|
|
417
418
|
* @param {T} [defaultValue] Default value
|
|
418
419
|
* @returns {FieldDecorator} Decorator function
|
|
419
420
|
* @template T extends number | number[] | Long | Long[] | string | string[] | boolean | boolean[] | Uint8Array | Uint8Array[] | Buffer | Buffer[]
|
|
421
|
+
* @deprecated Legacy TypeScript decorator support. Will be removed in a future release.
|
|
420
422
|
*/
|
|
421
423
|
Field.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {
|
|
422
424
|
|
|
@@ -434,6 +436,11 @@ Field.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {
|
|
|
434
436
|
};
|
|
435
437
|
};
|
|
436
438
|
|
|
439
|
+
// Sets up cyclic dependencies (called in index-light)
|
|
440
|
+
Field._configure = function configure(Type_) {
|
|
441
|
+
Type = Type_;
|
|
442
|
+
};
|
|
443
|
+
|
|
437
444
|
/**
|
|
438
445
|
* Field decorator (TypeScript).
|
|
439
446
|
* @name Field.d
|
|
@@ -444,10 +451,6 @@ Field.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) {
|
|
|
444
451
|
* @returns {FieldDecorator} Decorator function
|
|
445
452
|
* @template T extends Message<T>
|
|
446
453
|
* @variation 2
|
|
454
|
+
* @deprecated Legacy TypeScript decorator support. Will be removed in a future release.
|
|
447
455
|
*/
|
|
448
456
|
// like Field.d but without a default value
|
|
449
|
-
|
|
450
|
-
// Sets up cyclic dependencies (called in index-light)
|
|
451
|
-
Field._configure = function configure(Type_) {
|
|
452
|
-
Type = Type_;
|
|
453
|
-
};
|