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
@@ -1,104 +1,104 @@
1
- "use strict";
2
- var protobuf = module.exports = require("./index-minimal");
3
-
4
- protobuf.build = "light";
5
-
6
- /**
7
- * A node-style callback as used by {@link load} and {@link Root#load}.
8
- * @typedef LoadCallback
9
- * @type {function}
10
- * @param {Error|null} error Error, if any, otherwise `null`
11
- * @param {Root} [root] Root, if there hasn't been an error
12
- * @returns {undefined}
13
- */
14
-
15
- /**
16
- * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.
17
- * @param {string|string[]} filename One or multiple files to load
18
- * @param {Root} root Root namespace, defaults to create a new one if omitted.
19
- * @param {LoadCallback} callback Callback function
20
- * @returns {undefined}
21
- * @see {@link Root#load}
22
- */
23
- function load(filename, root, callback) {
24
- if (typeof root === "function") {
25
- callback = root;
26
- root = new protobuf.Root();
27
- } else if (!root)
28
- root = new protobuf.Root();
29
- return root.load(filename, callback);
30
- }
31
-
32
- /**
33
- * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.
34
- * @name load
35
- * @function
36
- * @param {string|string[]} filename One or multiple files to load
37
- * @param {LoadCallback} callback Callback function
38
- * @returns {undefined}
39
- * @see {@link Root#load}
40
- * @variation 2
41
- */
42
- // function load(filename:string, callback:LoadCallback):undefined
43
-
44
- /**
45
- * Loads one or multiple .proto or preprocessed .json files into a common root namespace and returns a promise.
46
- * @name load
47
- * @function
48
- * @param {string|string[]} filename One or multiple files to load
49
- * @param {Root} [root] Root namespace, defaults to create a new one if omitted.
50
- * @returns {Promise<Root>} Promise
51
- * @see {@link Root#load}
52
- * @variation 3
53
- */
54
- // function load(filename:string, [root:Root]):Promise<Root>
55
-
56
- protobuf.load = load;
57
-
58
- /**
59
- * Synchronously loads one or multiple .proto or preprocessed .json files into a common root namespace (node only).
60
- * @param {string|string[]} filename One or multiple files to load
61
- * @param {Root} [root] Root namespace, defaults to create a new one if omitted.
62
- * @returns {Root} Root namespace
63
- * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid
64
- * @see {@link Root#loadSync}
65
- */
66
- function loadSync(filename, root) {
67
- if (!root)
68
- root = new protobuf.Root();
69
- return root.loadSync(filename);
70
- }
71
-
72
- protobuf.loadSync = loadSync;
73
-
74
- // Serialization
75
- protobuf.encoder = require("./encoder");
76
- protobuf.decoder = require("./decoder");
77
- protobuf.verifier = require("./verifier");
78
- protobuf.converter = require("./converter");
79
-
80
- // Reflection
81
- protobuf.ReflectionObject = require("./object");
82
- protobuf.Namespace = require("./namespace");
83
- protobuf.Root = require("./root");
84
- protobuf.Enum = require("./enum");
85
- protobuf.Type = require("./type");
86
- protobuf.Field = require("./field");
87
- protobuf.OneOf = require("./oneof");
88
- protobuf.MapField = require("./mapfield");
89
- protobuf.Service = require("./service");
90
- protobuf.Method = require("./method");
91
-
92
- // Runtime
93
- protobuf.Message = require("./message");
94
- protobuf.wrappers = require("./wrappers");
95
-
96
- // Utility
97
- protobuf.types = require("./types");
98
- protobuf.util = require("./util");
99
-
100
- // Set up possibly cyclic reflection dependencies
101
- protobuf.ReflectionObject._configure(protobuf.Root);
102
- protobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum);
103
- protobuf.Root._configure(protobuf.Type, undefined, {});
104
- protobuf.Field._configure(protobuf.Type);
1
+ "use strict";
2
+ var protobuf = module.exports = require("./index-minimal");
3
+
4
+ protobuf.build = "light";
5
+
6
+ /**
7
+ * A node-style callback as used by {@link load} and {@link Root#load}.
8
+ * @typedef LoadCallback
9
+ * @type {function}
10
+ * @param {Error|null} error Error, if any, otherwise `null`
11
+ * @param {Root} [root] Root, if there hasn't been an error
12
+ * @returns {undefined}
13
+ */
14
+
15
+ /**
16
+ * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.
17
+ * @param {string|string[]} filename One or multiple files to load
18
+ * @param {Root} root Root namespace, defaults to create a new one if omitted.
19
+ * @param {LoadCallback} callback Callback function
20
+ * @returns {undefined}
21
+ * @see {@link Root#load}
22
+ */
23
+ function load(filename, root, callback) {
24
+ if (typeof root === "function") {
25
+ callback = root;
26
+ root = new protobuf.Root();
27
+ } else if (!root)
28
+ root = new protobuf.Root();
29
+ return root.load(filename, callback);
30
+ }
31
+
32
+ /**
33
+ * Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.
34
+ * @name load
35
+ * @function
36
+ * @param {string|string[]} filename One or multiple files to load
37
+ * @param {LoadCallback} callback Callback function
38
+ * @returns {undefined}
39
+ * @see {@link Root#load}
40
+ * @variation 2
41
+ */
42
+ // function load(filename:string, callback:LoadCallback):undefined
43
+
44
+ /**
45
+ * Loads one or multiple .proto or preprocessed .json files into a common root namespace and returns a promise.
46
+ * @name load
47
+ * @function
48
+ * @param {string|string[]} filename One or multiple files to load
49
+ * @param {Root} [root] Root namespace, defaults to create a new one if omitted.
50
+ * @returns {Promise<Root>} Promise
51
+ * @see {@link Root#load}
52
+ * @variation 3
53
+ */
54
+ // function load(filename:string, [root:Root]):Promise<Root>
55
+
56
+ protobuf.load = load;
57
+
58
+ /**
59
+ * Synchronously loads one or multiple .proto or preprocessed .json files into a common root namespace (node only).
60
+ * @param {string|string[]} filename One or multiple files to load
61
+ * @param {Root} [root] Root namespace, defaults to create a new one if omitted.
62
+ * @returns {Root} Root namespace
63
+ * @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid
64
+ * @see {@link Root#loadSync}
65
+ */
66
+ function loadSync(filename, root) {
67
+ if (!root)
68
+ root = new protobuf.Root();
69
+ return root.loadSync(filename);
70
+ }
71
+
72
+ protobuf.loadSync = loadSync;
73
+
74
+ // Serialization
75
+ protobuf.encoder = require("./encoder");
76
+ protobuf.decoder = require("./decoder");
77
+ protobuf.verifier = require("./verifier");
78
+ protobuf.converter = require("./converter");
79
+
80
+ // Reflection
81
+ protobuf.ReflectionObject = require("./object");
82
+ protobuf.Namespace = require("./namespace");
83
+ protobuf.Root = require("./root");
84
+ protobuf.Enum = require("./enum");
85
+ protobuf.Type = require("./type");
86
+ protobuf.Field = require("./field");
87
+ protobuf.OneOf = require("./oneof");
88
+ protobuf.MapField = require("./mapfield");
89
+ protobuf.Service = require("./service");
90
+ protobuf.Method = require("./method");
91
+
92
+ // Runtime
93
+ protobuf.Message = require("./message");
94
+ protobuf.wrappers = require("./wrappers");
95
+
96
+ // Utility
97
+ protobuf.types = require("./types");
98
+ protobuf.util = require("./util");
99
+
100
+ // Set up possibly cyclic reflection dependencies
101
+ protobuf.ReflectionObject._configure(protobuf.Root);
102
+ protobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum);
103
+ protobuf.Root._configure(protobuf.Type, undefined, {});
104
+ protobuf.Field._configure(protobuf.Type);
@@ -1,36 +1,36 @@
1
- "use strict";
2
- var protobuf = exports;
3
-
4
- /**
5
- * Build type, one of `"full"`, `"light"` or `"minimal"`.
6
- * @name build
7
- * @type {string}
8
- * @const
9
- */
10
- protobuf.build = "minimal";
11
-
12
- // Serialization
13
- protobuf.Writer = require("./writer");
14
- protobuf.BufferWriter = require("./writer_buffer");
15
- protobuf.Reader = require("./reader");
16
- protobuf.BufferReader = require("./reader_buffer");
17
-
18
- // Utility
19
- protobuf.util = require("./util/minimal");
20
- protobuf.rpc = require("./rpc");
21
- protobuf.roots = require("./roots");
22
- protobuf.configure = configure;
23
-
24
- /* istanbul ignore next */
25
- /**
26
- * Reconfigures the library according to the environment.
27
- * @returns {undefined}
28
- */
29
- function configure() {
30
- protobuf.util._configure();
31
- protobuf.Writer._configure(protobuf.BufferWriter);
32
- protobuf.Reader._configure(protobuf.BufferReader);
33
- }
34
-
35
- // Set up buffer utility according to the environment
36
- configure();
1
+ "use strict";
2
+ var protobuf = exports;
3
+
4
+ /**
5
+ * Build type, one of `"full"`, `"light"` or `"minimal"`.
6
+ * @name build
7
+ * @type {string}
8
+ * @const
9
+ */
10
+ protobuf.build = "minimal";
11
+
12
+ // Serialization
13
+ protobuf.Writer = require("./writer");
14
+ protobuf.BufferWriter = require("./writer_buffer");
15
+ protobuf.Reader = require("./reader");
16
+ protobuf.BufferReader = require("./reader_buffer");
17
+
18
+ // Utility
19
+ protobuf.util = require("./util/minimal");
20
+ protobuf.rpc = require("./rpc");
21
+ protobuf.roots = require("./roots");
22
+ protobuf.configure = configure;
23
+
24
+ /* istanbul ignore next */
25
+ /**
26
+ * Reconfigures the library according to the environment.
27
+ * @returns {undefined}
28
+ */
29
+ function configure() {
30
+ protobuf.util._configure();
31
+ protobuf.Writer._configure(protobuf.BufferWriter);
32
+ protobuf.Reader._configure(protobuf.BufferReader);
33
+ }
34
+
35
+ // Set up buffer utility according to the environment
36
+ configure();
package/src/index.js CHANGED
@@ -1,12 +1,12 @@
1
- "use strict";
2
- var protobuf = module.exports = require("./index-light");
3
-
4
- protobuf.build = "full";
5
-
6
- // Parser
7
- protobuf.tokenize = require("./tokenize");
8
- protobuf.parse = require("./parse");
9
- protobuf.common = require("./common");
10
-
11
- // Configure parser
12
- protobuf.Root._configure(protobuf.Type, protobuf.parse, protobuf.common);
1
+ "use strict";
2
+ var protobuf = module.exports = require("./index-light");
3
+
4
+ protobuf.build = "full";
5
+
6
+ // Parser
7
+ protobuf.tokenize = require("./tokenize");
8
+ protobuf.parse = require("./parse");
9
+ protobuf.common = require("./common");
10
+
11
+ // Configure parser
12
+ protobuf.Root._configure(protobuf.Type, protobuf.parse, protobuf.common);
package/src/mapfield.js CHANGED
@@ -1,136 +1,136 @@
1
- "use strict";
2
- module.exports = MapField;
3
-
4
- // extends Field
5
- var Field = require("./field");
6
- ((MapField.prototype = Object.create(Field.prototype)).constructor = MapField).className = "MapField";
7
-
8
- var types = require("./types"),
9
- util = require("./util");
10
-
11
- /**
12
- * Constructs a new map field instance.
13
- * @classdesc Reflected map field.
14
- * @extends FieldBase
15
- * @constructor
16
- * @param {string} name Unique name within its namespace
17
- * @param {number} id Unique id within its namespace
18
- * @param {string} keyType Key type
19
- * @param {string} type Value type
20
- * @param {Object.<string,*>} [options] Declared options
21
- * @param {string} [comment] Comment associated with this field
22
- */
23
- function MapField(name, id, keyType, type, options, comment) {
24
- Field.call(this, name, id, type, undefined, undefined, options, comment);
25
-
26
- /* istanbul ignore if */
27
- if (!util.isString(keyType))
28
- throw TypeError("keyType must be a string");
29
-
30
- /**
31
- * Key type.
32
- * @type {string}
33
- */
34
- this.keyType = keyType; // toJSON, marker
35
-
36
- /**
37
- * Resolved key type if not a basic type.
38
- * @type {ReflectionObject|null}
39
- */
40
- this.resolvedKeyType = null;
41
-
42
- // Overrides Field#map
43
- this.map = true;
44
- }
45
-
46
- /**
47
- * Map field descriptor.
48
- * @interface IMapField
49
- * @extends {IField}
50
- * @property {string} keyType Key type
51
- */
52
-
53
- /**
54
- * Extension map field descriptor.
55
- * @interface IExtensionMapField
56
- * @extends IMapField
57
- * @property {string} extend Extended type
58
- */
59
-
60
- /**
61
- * Constructs a map field from a map field descriptor.
62
- * @param {string} name Field name
63
- * @param {IMapField} json Map field descriptor
64
- * @returns {MapField} Created map field
65
- * @throws {TypeError} If arguments are invalid
66
- */
67
- MapField.fromJSON = function fromJSON(name, json) {
68
- var field = new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);
69
- if (json.protoName)
70
- field.protoName = json.protoName;
71
- if (json.jsonName !== undefined)
72
- field.jsonName = json.jsonName;
73
- else if (json.options && json.options.json_name !== undefined)
74
- field.jsonName = json.options.json_name;
75
- return field;
76
- };
77
-
78
- /**
79
- * Converts this map field to a map field descriptor.
80
- * @param {IToJSONOptions} [toJSONOptions] JSON conversion options
81
- * @returns {IMapField} Map field descriptor
82
- */
83
- MapField.prototype.toJSON = function toJSON(toJSONOptions) {
84
- var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
85
- return util.toObject([
86
- "keyType" , this.keyType,
87
- "type" , this.type,
88
- "id" , this.id,
89
- "extend" , this.extend,
90
- "protoName" , this.protoName !== this.name ? this.protoName : undefined,
91
- "jsonName" , this.jsonName !== util.jsonName(this.protoName || this.name) ? this.jsonName : undefined,
92
- "options" , this.options,
93
- "comment" , keepComments ? this.comment : undefined
94
- ]);
95
- };
96
-
97
- /**
98
- * @override
99
- */
100
- MapField.prototype.resolve = function resolve() {
101
- if (this.resolved)
102
- return this;
103
-
104
- // Besides a value type, map fields have a key type that may be "any scalar type except for floating point types and bytes"
105
- if (types.mapKey[this.keyType] === undefined)
106
- throw Error("invalid key type: " + this.keyType);
107
-
108
- return Field.prototype.resolve.call(this);
109
- };
110
-
111
- /**
112
- * Map field decorator (TypeScript).
113
- * @name MapField.d
114
- * @function
115
- * @param {number} fieldId Field id
116
- * @param {"int32"|"uint32"|"sint32"|"fixed32"|"sfixed32"|"int64"|"uint64"|"sint64"|"fixed64"|"sfixed64"|"bool"|"string"} fieldKeyType Field key type
117
- * @param {"double"|"float"|"int32"|"uint32"|"sint32"|"fixed32"|"sfixed32"|"int64"|"uint64"|"sint64"|"fixed64"|"sfixed64"|"bool"|"string"|"bytes"|Object|Constructor<{}>} fieldValueType Field value type
118
- * @returns {FieldDecorator} Decorator function
119
- * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }
120
- * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.
121
- */
122
- MapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {
123
-
124
- // submessage value: decorate the submessage and use its name as the type
125
- if (typeof fieldValueType === "function")
126
- fieldValueType = util.decorateType(fieldValueType).name;
127
-
128
- // enum reference value: create a reflected copy of the enum and keep reuseing it
129
- else if (fieldValueType && typeof fieldValueType === "object")
130
- fieldValueType = util.decorateEnum(fieldValueType).name;
131
-
132
- return function mapFieldDecorator(prototype, fieldName) {
133
- util.decorateType(prototype.constructor)
134
- .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));
135
- };
136
- };
1
+ "use strict";
2
+ module.exports = MapField;
3
+
4
+ // extends Field
5
+ var Field = require("./field");
6
+ ((MapField.prototype = Object.create(Field.prototype)).constructor = MapField).className = "MapField";
7
+
8
+ var types = require("./types"),
9
+ util = require("./util");
10
+
11
+ /**
12
+ * Constructs a new map field instance.
13
+ * @classdesc Reflected map field.
14
+ * @extends FieldBase
15
+ * @constructor
16
+ * @param {string} name Unique name within its namespace
17
+ * @param {number} id Unique id within its namespace
18
+ * @param {string} keyType Key type
19
+ * @param {string} type Value type
20
+ * @param {Object.<string,*>} [options] Declared options
21
+ * @param {string} [comment] Comment associated with this field
22
+ */
23
+ function MapField(name, id, keyType, type, options, comment) {
24
+ Field.call(this, name, id, type, undefined, undefined, options, comment);
25
+
26
+ /* istanbul ignore if */
27
+ if (!util.isString(keyType))
28
+ throw TypeError("keyType must be a string");
29
+
30
+ /**
31
+ * Key type.
32
+ * @type {string}
33
+ */
34
+ this.keyType = keyType; // toJSON, marker
35
+
36
+ /**
37
+ * Resolved key type if not a basic type.
38
+ * @type {ReflectionObject|null}
39
+ */
40
+ this.resolvedKeyType = null;
41
+
42
+ // Overrides Field#map
43
+ this.map = true;
44
+ }
45
+
46
+ /**
47
+ * Map field descriptor.
48
+ * @interface IMapField
49
+ * @extends {IField}
50
+ * @property {string} keyType Key type
51
+ */
52
+
53
+ /**
54
+ * Extension map field descriptor.
55
+ * @interface IExtensionMapField
56
+ * @extends IMapField
57
+ * @property {string} extend Extended type
58
+ */
59
+
60
+ /**
61
+ * Constructs a map field from a map field descriptor.
62
+ * @param {string} name Field name
63
+ * @param {IMapField} json Map field descriptor
64
+ * @returns {MapField} Created map field
65
+ * @throws {TypeError} If arguments are invalid
66
+ */
67
+ MapField.fromJSON = function fromJSON(name, json) {
68
+ var field = new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);
69
+ if (json.protoName)
70
+ field.protoName = json.protoName;
71
+ if (json.jsonName !== undefined)
72
+ field.jsonName = json.jsonName;
73
+ else if (json.options && json.options.json_name !== undefined)
74
+ field.jsonName = json.options.json_name;
75
+ return field;
76
+ };
77
+
78
+ /**
79
+ * Converts this map field to a map field descriptor.
80
+ * @param {IToJSONOptions} [toJSONOptions] JSON conversion options
81
+ * @returns {IMapField} Map field descriptor
82
+ */
83
+ MapField.prototype.toJSON = function toJSON(toJSONOptions) {
84
+ var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
85
+ return util.toObject([
86
+ "keyType" , this.keyType,
87
+ "type" , this.type,
88
+ "id" , this.id,
89
+ "extend" , this.extend,
90
+ "protoName" , this.protoName !== this.name ? this.protoName : undefined,
91
+ "jsonName" , this.jsonName !== util.jsonName(this.protoName || this.name) ? this.jsonName : undefined,
92
+ "options" , this.options,
93
+ "comment" , keepComments ? this.comment : undefined
94
+ ]);
95
+ };
96
+
97
+ /**
98
+ * @override
99
+ */
100
+ MapField.prototype.resolve = function resolve() {
101
+ if (this.resolved)
102
+ return this;
103
+
104
+ // Besides a value type, map fields have a key type that may be "any scalar type except for floating point types and bytes"
105
+ if (types.mapKey[this.keyType] === undefined)
106
+ throw Error("invalid key type: " + this.keyType);
107
+
108
+ return Field.prototype.resolve.call(this);
109
+ };
110
+
111
+ /**
112
+ * Map field decorator (TypeScript).
113
+ * @name MapField.d
114
+ * @function
115
+ * @param {number} fieldId Field id
116
+ * @param {"int32"|"uint32"|"sint32"|"fixed32"|"sfixed32"|"int64"|"uint64"|"sint64"|"fixed64"|"sfixed64"|"bool"|"string"} fieldKeyType Field key type
117
+ * @param {"double"|"float"|"int32"|"uint32"|"sint32"|"fixed32"|"sfixed32"|"int64"|"uint64"|"sint64"|"fixed64"|"sfixed64"|"bool"|"string"|"bytes"|Object|Constructor<{}>} fieldValueType Field value type
118
+ * @returns {FieldDecorator} Decorator function
119
+ * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }
120
+ * @deprecated Legacy TypeScript decorator support. Will be removed in a future release.
121
+ */
122
+ MapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {
123
+
124
+ // submessage value: decorate the submessage and use its name as the type
125
+ if (typeof fieldValueType === "function")
126
+ fieldValueType = util.decorateType(fieldValueType).name;
127
+
128
+ // enum reference value: create a reflected copy of the enum and keep reuseing it
129
+ else if (fieldValueType && typeof fieldValueType === "object")
130
+ fieldValueType = util.decorateEnum(fieldValueType).name;
131
+
132
+ return function mapFieldDecorator(prototype, fieldName) {
133
+ util.decorateType(prototype.constructor)
134
+ .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));
135
+ };
136
+ };