protobufjs 6.8.8 → 6.9.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.
Files changed (108) hide show
  1. package/CHANGELOG.md +941 -921
  2. package/LICENSE +39 -39
  3. package/README.md +901 -879
  4. package/cli/LICENSE +33 -33
  5. package/cli/README.md +11 -11
  6. package/cli/index.d.ts +3 -3
  7. package/cli/index.js +3 -3
  8. package/cli/lib/tsd-jsdoc/LICENSE +20 -20
  9. package/cli/lib/tsd-jsdoc/README.md +23 -23
  10. package/cli/lib/tsd-jsdoc/plugin.js +21 -21
  11. package/cli/lib/tsd-jsdoc/publish.js +705 -693
  12. package/cli/lib/tsd-jsdoc.json +18 -18
  13. package/cli/package.json +1 -1
  14. package/cli/package.standalone.json +32 -32
  15. package/cli/pbjs.d.ts +9 -9
  16. package/cli/pbjs.js +329 -329
  17. package/cli/pbts.d.ts +9 -9
  18. package/cli/pbts.js +197 -197
  19. package/cli/targets/json-module.js +38 -38
  20. package/cli/targets/json.js +8 -8
  21. package/cli/targets/proto.js +326 -326
  22. package/cli/targets/proto2.js +10 -10
  23. package/cli/targets/proto3.js +10 -10
  24. package/cli/targets/static-module.js +29 -29
  25. package/cli/targets/static.js +702 -702
  26. package/cli/util.js +183 -183
  27. package/cli/wrappers/amd.js +7 -7
  28. package/cli/wrappers/closure.js +7 -7
  29. package/cli/wrappers/commonjs.js +7 -7
  30. package/cli/wrappers/default.js +15 -15
  31. package/cli/wrappers/es6.js +5 -5
  32. package/dist/README.md +31 -31
  33. package/dist/light/README.md +31 -31
  34. package/dist/light/protobuf.js +6058 -6032
  35. package/dist/light/protobuf.js.map +1 -1
  36. package/dist/light/protobuf.min.js +3 -3
  37. package/dist/light/protobuf.min.js.map +1 -1
  38. package/dist/minimal/README.md +31 -31
  39. package/dist/minimal/protobuf.js +1900 -1877
  40. package/dist/minimal/protobuf.js.map +1 -1
  41. package/dist/minimal/protobuf.min.js +3 -3
  42. package/dist/minimal/protobuf.min.js.map +1 -1
  43. package/dist/protobuf.js +7625 -7596
  44. package/dist/protobuf.js.map +1 -1
  45. package/dist/protobuf.min.js +3 -3
  46. package/dist/protobuf.min.js.map +1 -1
  47. package/ext/debug/README.md +4 -4
  48. package/ext/debug/index.js +71 -71
  49. package/ext/descriptor/README.md +72 -72
  50. package/ext/descriptor/index.js +1052 -1052
  51. package/ext/descriptor/test.js +54 -54
  52. package/google/LICENSE +27 -27
  53. package/google/README.md +1 -1
  54. package/google/api/annotations.proto +10 -10
  55. package/google/protobuf/descriptor.proto +286 -286
  56. package/google/protobuf/source_context.proto +7 -7
  57. package/index.d.ts +6 -6
  58. package/index.js +4 -4
  59. package/light.d.ts +2 -2
  60. package/light.js +3 -3
  61. package/minimal.d.ts +2 -2
  62. package/minimal.js +4 -4
  63. package/package-lock.json +4223 -3171
  64. package/package.json +122 -122
  65. package/scripts/changelog.js +150 -150
  66. package/scripts/postinstall.js +35 -35
  67. package/src/common.js +399 -399
  68. package/src/converter.js +293 -293
  69. package/src/decoder.js +106 -106
  70. package/src/encoder.js +100 -100
  71. package/src/enum.js +181 -181
  72. package/src/field.js +371 -371
  73. package/src/index-light.js +104 -104
  74. package/src/index-minimal.js +36 -36
  75. package/src/index.js +12 -12
  76. package/src/mapfield.js +126 -126
  77. package/src/message.js +138 -138
  78. package/src/method.js +151 -151
  79. package/src/namespace.js +433 -433
  80. package/src/object.js +200 -200
  81. package/src/oneof.js +203 -203
  82. package/src/parse.js +761 -758
  83. package/src/reader.js +411 -405
  84. package/src/reader_buffer.js +51 -44
  85. package/src/root.js +353 -351
  86. package/src/roots.js +18 -18
  87. package/src/rpc/service.js +142 -142
  88. package/src/rpc.js +36 -36
  89. package/src/service.js +167 -167
  90. package/src/tokenize.js +397 -397
  91. package/src/type.js +589 -589
  92. package/src/types.js +196 -196
  93. package/src/typescript.jsdoc +15 -15
  94. package/src/util/longbits.js +200 -200
  95. package/src/util/minimal.js +414 -414
  96. package/src/util.js +178 -178
  97. package/src/verifier.js +176 -176
  98. package/src/wrappers.js +83 -83
  99. package/src/writer.js +465 -459
  100. package/src/writer_buffer.js +85 -81
  101. package/tsconfig.json +6 -6
  102. package/cli/node_modules/os-tmpdir/index.js +0 -25
  103. package/cli/node_modules/os-tmpdir/license +0 -21
  104. package/cli/node_modules/os-tmpdir/readme.md +0 -32
  105. package/cli/node_modules/tmp/LICENSE +0 -21
  106. package/cli/node_modules/tmp/README.md +0 -314
  107. package/cli/node_modules/tmp/lib/tmp.js +0 -611
  108. package/cli/package-lock.json +0 -20
@@ -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.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,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
+ };