protobufjs 6.8.8 → 6.8.9

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 (104) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +879 -879
  3. package/cli/LICENSE +33 -33
  4. package/cli/README.md +11 -11
  5. package/cli/index.d.ts +3 -3
  6. package/cli/index.js +3 -3
  7. package/cli/lib/tsd-jsdoc/LICENSE +20 -20
  8. package/cli/lib/tsd-jsdoc/README.md +23 -23
  9. package/cli/lib/tsd-jsdoc/plugin.js +21 -21
  10. package/cli/lib/tsd-jsdoc/publish.js +693 -693
  11. package/cli/lib/tsd-jsdoc.json +18 -18
  12. package/cli/package.standalone.json +31 -31
  13. package/cli/pbjs.d.ts +9 -9
  14. package/cli/pbjs.js +329 -329
  15. package/cli/pbts.d.ts +9 -9
  16. package/cli/pbts.js +197 -197
  17. package/cli/targets/json-module.js +38 -38
  18. package/cli/targets/json.js +8 -8
  19. package/cli/targets/proto.js +326 -326
  20. package/cli/targets/proto2.js +10 -10
  21. package/cli/targets/proto3.js +10 -10
  22. package/cli/targets/static-module.js +29 -29
  23. package/cli/targets/static.js +702 -702
  24. package/cli/util.js +183 -183
  25. package/cli/wrappers/amd.js +7 -7
  26. package/cli/wrappers/closure.js +7 -7
  27. package/cli/wrappers/commonjs.js +7 -7
  28. package/cli/wrappers/default.js +15 -15
  29. package/cli/wrappers/es6.js +5 -5
  30. package/dist/README.md +31 -31
  31. package/dist/light/README.md +31 -31
  32. package/dist/light/protobuf.js +6030 -6030
  33. package/dist/light/protobuf.js.map +1 -1
  34. package/dist/light/protobuf.min.js +1 -1
  35. package/dist/light/protobuf.min.js.map +1 -1
  36. package/dist/minimal/README.md +31 -31
  37. package/dist/minimal/protobuf.js +1876 -1876
  38. package/dist/minimal/protobuf.js.map +1 -1
  39. package/dist/minimal/protobuf.min.js +1 -1
  40. package/dist/minimal/protobuf.min.js.map +1 -1
  41. package/dist/protobuf.js +7595 -7595
  42. package/dist/protobuf.js.map +1 -1
  43. package/dist/protobuf.min.js +1 -1
  44. package/dist/protobuf.min.js.map +1 -1
  45. package/ext/debug/README.md +4 -4
  46. package/ext/debug/index.js +71 -71
  47. package/ext/descriptor/README.md +72 -72
  48. package/ext/descriptor/index.js +1052 -1052
  49. package/ext/descriptor/test.js +54 -54
  50. package/google/LICENSE +27 -27
  51. package/google/README.md +1 -1
  52. package/google/api/annotations.proto +10 -10
  53. package/google/protobuf/descriptor.proto +286 -286
  54. package/google/protobuf/source_context.proto +7 -7
  55. package/index.js +4 -4
  56. package/light.d.ts +2 -2
  57. package/light.js +3 -3
  58. package/minimal.d.ts +2 -2
  59. package/minimal.js +4 -4
  60. package/package-lock.json +1748 -642
  61. package/package.json +119 -122
  62. package/scripts/changelog.js +150 -150
  63. package/scripts/postinstall.js +35 -35
  64. package/src/common.js +399 -399
  65. package/src/converter.js +293 -293
  66. package/src/decoder.js +106 -106
  67. package/src/encoder.js +99 -99
  68. package/src/enum.js +181 -181
  69. package/src/field.js +371 -371
  70. package/src/index-light.js +104 -104
  71. package/src/index-minimal.js +36 -36
  72. package/src/index.js +12 -12
  73. package/src/mapfield.js +126 -126
  74. package/src/message.js +138 -138
  75. package/src/method.js +151 -151
  76. package/src/namespace.js +433 -433
  77. package/src/object.js +200 -200
  78. package/src/oneof.js +203 -203
  79. package/src/parse.js +758 -758
  80. package/src/reader.js +405 -405
  81. package/src/reader_buffer.js +44 -44
  82. package/src/root.js +351 -351
  83. package/src/roots.js +18 -18
  84. package/src/rpc/service.js +142 -142
  85. package/src/rpc.js +36 -36
  86. package/src/service.js +167 -167
  87. package/src/tokenize.js +397 -397
  88. package/src/type.js +589 -589
  89. package/src/types.js +196 -196
  90. package/src/typescript.jsdoc +15 -15
  91. package/src/util/longbits.js +200 -200
  92. package/src/util/minimal.js +414 -414
  93. package/src/util.js +178 -178
  94. package/src/verifier.js +176 -176
  95. package/src/wrappers.js +83 -83
  96. package/src/writer.js +459 -459
  97. package/src/writer_buffer.js +81 -81
  98. package/tsconfig.json +6 -6
  99. package/cli/node_modules/os-tmpdir/index.js +0 -25
  100. package/cli/node_modules/os-tmpdir/license +0 -21
  101. package/cli/node_modules/os-tmpdir/readme.md +0 -32
  102. package/cli/node_modules/tmp/LICENSE +0 -21
  103. package/cli/node_modules/tmp/README.md +0 -314
  104. package/cli/node_modules/tmp/lib/tmp.js +0 -611
@@ -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);
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);
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.Reader._configure(protobuf.BufferReader);
31
- protobuf.util._configure();
32
- }
33
-
34
- // Set up buffer utility according to the environment
35
- protobuf.Writer._configure(protobuf.BufferWriter);
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.Reader._configure(protobuf.BufferReader);
31
+ protobuf.util._configure();
32
+ }
33
+
34
+ // Set up buffer utility according to the environment
35
+ protobuf.Writer._configure(protobuf.BufferWriter);
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,126 +1,126 @@
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
- return new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);
69
- };
70
-
71
- /**
72
- * Converts this map field to a map field descriptor.
73
- * @param {IToJSONOptions} [toJSONOptions] JSON conversion options
74
- * @returns {IMapField} Map field descriptor
75
- */
76
- MapField.prototype.toJSON = function toJSON(toJSONOptions) {
77
- var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
78
- return util.toObject([
79
- "keyType" , this.keyType,
80
- "type" , this.type,
81
- "id" , this.id,
82
- "extend" , this.extend,
83
- "options" , this.options,
84
- "comment" , keepComments ? this.comment : undefined
85
- ]);
86
- };
87
-
88
- /**
89
- * @override
90
- */
91
- MapField.prototype.resolve = function resolve() {
92
- if (this.resolved)
93
- return this;
94
-
95
- // Besides a value type, map fields have a key type that may be "any scalar type except for floating point types and bytes"
96
- if (types.mapKey[this.keyType] === undefined)
97
- throw Error("invalid key type: " + this.keyType);
98
-
99
- return Field.prototype.resolve.call(this);
100
- };
101
-
102
- /**
103
- * Map field decorator (TypeScript).
104
- * @name MapField.d
105
- * @function
106
- * @param {number} fieldId Field id
107
- * @param {"int32"|"uint32"|"sint32"|"fixed32"|"sfixed32"|"int64"|"uint64"|"sint64"|"fixed64"|"sfixed64"|"bool"|"string"} fieldKeyType Field key type
108
- * @param {"double"|"float"|"int32"|"uint32"|"sint32"|"fixed32"|"sfixed32"|"int64"|"uint64"|"sint64"|"fixed64"|"sfixed64"|"bool"|"string"|"bytes"|Object|Constructor<{}>} fieldValueType Field value type
109
- * @returns {FieldDecorator} Decorator function
110
- * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }
111
- */
112
- MapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {
113
-
114
- // submessage value: decorate the submessage and use its name as the type
115
- if (typeof fieldValueType === "function")
116
- fieldValueType = util.decorateType(fieldValueType).name;
117
-
118
- // enum reference value: create a reflected copy of the enum and keep reuseing it
119
- else if (fieldValueType && typeof fieldValueType === "object")
120
- fieldValueType = util.decorateEnum(fieldValueType).name;
121
-
122
- return function mapFieldDecorator(prototype, fieldName) {
123
- util.decorateType(prototype.constructor)
124
- .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));
125
- };
126
- };
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
+ return new MapField(name, json.id, json.keyType, json.type, json.options, json.comment);
69
+ };
70
+
71
+ /**
72
+ * Converts this map field to a map field descriptor.
73
+ * @param {IToJSONOptions} [toJSONOptions] JSON conversion options
74
+ * @returns {IMapField} Map field descriptor
75
+ */
76
+ MapField.prototype.toJSON = function toJSON(toJSONOptions) {
77
+ var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false;
78
+ return util.toObject([
79
+ "keyType" , this.keyType,
80
+ "type" , this.type,
81
+ "id" , this.id,
82
+ "extend" , this.extend,
83
+ "options" , this.options,
84
+ "comment" , keepComments ? this.comment : undefined
85
+ ]);
86
+ };
87
+
88
+ /**
89
+ * @override
90
+ */
91
+ MapField.prototype.resolve = function resolve() {
92
+ if (this.resolved)
93
+ return this;
94
+
95
+ // Besides a value type, map fields have a key type that may be "any scalar type except for floating point types and bytes"
96
+ if (types.mapKey[this.keyType] === undefined)
97
+ throw Error("invalid key type: " + this.keyType);
98
+
99
+ return Field.prototype.resolve.call(this);
100
+ };
101
+
102
+ /**
103
+ * Map field decorator (TypeScript).
104
+ * @name MapField.d
105
+ * @function
106
+ * @param {number} fieldId Field id
107
+ * @param {"int32"|"uint32"|"sint32"|"fixed32"|"sfixed32"|"int64"|"uint64"|"sint64"|"fixed64"|"sfixed64"|"bool"|"string"} fieldKeyType Field key type
108
+ * @param {"double"|"float"|"int32"|"uint32"|"sint32"|"fixed32"|"sfixed32"|"int64"|"uint64"|"sint64"|"fixed64"|"sfixed64"|"bool"|"string"|"bytes"|Object|Constructor<{}>} fieldValueType Field value type
109
+ * @returns {FieldDecorator} Decorator function
110
+ * @template T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }
111
+ */
112
+ MapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) {
113
+
114
+ // submessage value: decorate the submessage and use its name as the type
115
+ if (typeof fieldValueType === "function")
116
+ fieldValueType = util.decorateType(fieldValueType).name;
117
+
118
+ // enum reference value: create a reflected copy of the enum and keep reuseing it
119
+ else if (fieldValueType && typeof fieldValueType === "object")
120
+ fieldValueType = util.decorateEnum(fieldValueType).name;
121
+
122
+ return function mapFieldDecorator(prototype, fieldName) {
123
+ util.decorateType(prototype.constructor)
124
+ .add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType));
125
+ };
126
+ };