protobufjs 8.6.1 → 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 (105) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +441 -441
  3. package/dist/light/protobuf.js +8455 -8455
  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 +2999 -2999
  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 +10359 -10359
  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 -87
  22. package/ext/descriptor.js +1354 -1354
  23. package/ext/protojson.LICENSE +201 -201
  24. package/ext/protojson.d.ts +20 -20
  25. package/ext/protojson.js +925 -925
  26. package/ext/textformat.d.ts +19 -19
  27. package/ext/textformat.js +1256 -1256
  28. package/google/LICENSE +27 -27
  29. package/google/README.md +1 -1
  30. package/google/api/annotations.json +82 -82
  31. package/google/api/annotations.proto +10 -10
  32. package/google/api/http.json +85 -85
  33. package/google/api/http.proto +30 -30
  34. package/google/protobuf/api.json +117 -117
  35. package/google/protobuf/api.proto +33 -33
  36. package/google/protobuf/compiler/plugin.json +126 -126
  37. package/google/protobuf/compiler/plugin.proto +47 -47
  38. package/google/protobuf/descriptor.json +1381 -1381
  39. package/google/protobuf/descriptor.proto +534 -534
  40. package/google/protobuf/source_context.json +19 -19
  41. package/google/protobuf/source_context.proto +7 -7
  42. package/google/protobuf/type.json +201 -201
  43. package/google/protobuf/type.proto +89 -89
  44. package/index.d.ts +1 -1
  45. package/index.js +4 -4
  46. package/light.d.ts +2 -2
  47. package/light.js +3 -3
  48. package/minimal.d.ts +2 -2
  49. package/minimal.js +4 -4
  50. package/package.json +93 -93
  51. package/src/common.js +399 -399
  52. package/src/converter.js +344 -344
  53. package/src/decoder.js +208 -208
  54. package/src/encoder.js +111 -111
  55. package/src/enum.js +231 -231
  56. package/src/field.js +497 -497
  57. package/src/index-light.js +104 -104
  58. package/src/index-minimal.js +36 -36
  59. package/src/index.js +12 -12
  60. package/src/mapfield.js +136 -136
  61. package/src/message.js +137 -137
  62. package/src/method.js +175 -175
  63. package/src/namespace.js +565 -565
  64. package/src/object.js +382 -382
  65. package/src/oneof.js +225 -225
  66. package/src/parse.js +1068 -1068
  67. package/src/reader.js +543 -543
  68. package/src/reader_buffer.js +72 -72
  69. package/src/root.js +416 -416
  70. package/src/roots.js +18 -18
  71. package/src/rpc/service.js +148 -148
  72. package/src/rpc.js +36 -36
  73. package/src/service.js +198 -198
  74. package/src/tokenize.js +421 -421
  75. package/src/type.js +655 -655
  76. package/src/types.js +196 -196
  77. package/src/typescript.js +25 -25
  78. package/src/util/aspromise.d.ts +13 -13
  79. package/src/util/aspromise.js +52 -52
  80. package/src/util/base64.d.ts +32 -32
  81. package/src/util/base64.js +146 -146
  82. package/src/util/codegen.d.ts +31 -31
  83. package/src/util/codegen.js +113 -113
  84. package/src/util/eventemitter.d.ts +45 -45
  85. package/src/util/eventemitter.js +86 -86
  86. package/src/util/fetch.d.ts +56 -56
  87. package/src/util/fetch.js +112 -112
  88. package/src/util/float.d.ts +83 -83
  89. package/src/util/float.js +335 -335
  90. package/src/util/fs.js +11 -11
  91. package/src/util/longbits.js +200 -200
  92. package/src/util/minimal.js +515 -515
  93. package/src/util/path.d.ts +22 -22
  94. package/src/util/path.js +72 -72
  95. package/src/util/patterns.js +7 -7
  96. package/src/util/pool.d.ts +32 -32
  97. package/src/util/pool.js +48 -48
  98. package/src/util/utf8.d.ts +24 -24
  99. package/src/util/utf8.js +130 -130
  100. package/src/util.js +242 -242
  101. package/src/verifier.js +180 -180
  102. package/src/wrappers.js +106 -106
  103. package/src/writer.js +495 -495
  104. package/src/writer_buffer.js +102 -102
  105. package/tsconfig.json +6 -6
@@ -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
+ };