protobufjs 8.0.3-experimental → 8.0.3

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 (98) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +727 -727
  3. package/dist/light/protobuf.js +7724 -7352
  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 +2606 -2546
  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 +9588 -9131
  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/debug/README.md +4 -4
  16. package/ext/debug/index.js +71 -71
  17. package/ext/descriptor/README.md +72 -72
  18. package/ext/descriptor/index.d.ts +195 -191
  19. package/ext/descriptor/index.js +1181 -1052
  20. package/ext/descriptor/test.js +54 -54
  21. package/google/LICENSE +27 -27
  22. package/google/README.md +1 -1
  23. package/google/api/annotations.json +82 -82
  24. package/google/api/annotations.proto +10 -10
  25. package/google/api/http.json +85 -85
  26. package/google/api/http.proto +30 -30
  27. package/google/protobuf/api.json +117 -117
  28. package/google/protobuf/api.proto +33 -33
  29. package/google/protobuf/descriptor.json +1381 -738
  30. package/google/protobuf/descriptor.proto +535 -286
  31. package/google/protobuf/source_context.json +19 -19
  32. package/google/protobuf/source_context.proto +7 -7
  33. package/google/protobuf/type.json +201 -201
  34. package/google/protobuf/type.proto +89 -89
  35. package/index.d.ts +2817 -2792
  36. package/index.js +4 -4
  37. package/light.d.ts +2 -2
  38. package/light.js +3 -3
  39. package/minimal.d.ts +2 -2
  40. package/minimal.js +4 -4
  41. package/package.json +96 -112
  42. package/scripts/postinstall.js +32 -32
  43. package/src/common.js +399 -399
  44. package/src/converter.js +310 -301
  45. package/src/decoder.js +135 -127
  46. package/src/encoder.js +100 -100
  47. package/src/enum.js +226 -241
  48. package/src/field.js +453 -432
  49. package/src/index-light.js +104 -104
  50. package/src/index-minimal.js +36 -36
  51. package/src/index.js +12 -12
  52. package/src/mapfield.js +126 -126
  53. package/src/message.js +139 -139
  54. package/src/method.js +160 -160
  55. package/src/namespace.js +550 -434
  56. package/src/object.js +385 -330
  57. package/src/oneof.js +222 -222
  58. package/src/parse.js +1024 -944
  59. package/src/reader.js +426 -416
  60. package/src/reader_buffer.js +51 -51
  61. package/src/root.js +404 -384
  62. package/src/roots.js +17 -17
  63. package/src/rpc/service.js +142 -142
  64. package/src/rpc.js +36 -36
  65. package/src/service.js +193 -168
  66. package/src/tokenize.js +421 -416
  67. package/src/type.js +625 -590
  68. package/src/types.js +196 -196
  69. package/src/typescript.jsdoc +15 -15
  70. package/src/util/aspromise.d.ts +13 -0
  71. package/src/util/aspromise.js +52 -0
  72. package/src/util/base64.d.ts +32 -0
  73. package/src/util/base64.js +139 -0
  74. package/src/util/codegen.d.ts +31 -0
  75. package/src/util/codegen.js +113 -0
  76. package/src/util/eventemitter.d.ts +45 -0
  77. package/src/util/eventemitter.js +84 -0
  78. package/src/util/fetch.d.ts +56 -0
  79. package/src/util/fetch.js +114 -0
  80. package/src/util/float.d.ts +83 -0
  81. package/src/util/float.js +335 -0
  82. package/src/util/inquire.d.ts +9 -0
  83. package/src/util/inquire.js +37 -0
  84. package/src/util/longbits.js +200 -200
  85. package/src/util/minimal.js +461 -438
  86. package/src/util/path.d.ts +22 -0
  87. package/src/util/path.js +72 -0
  88. package/src/util/patterns.js +8 -0
  89. package/src/util/pool.d.ts +32 -0
  90. package/src/util/pool.js +48 -0
  91. package/src/util/utf8.d.ts +24 -0
  92. package/src/util/utf8.js +104 -0
  93. package/src/util.js +215 -213
  94. package/src/verifier.js +180 -177
  95. package/src/wrappers.js +103 -102
  96. package/src/writer.js +465 -465
  97. package/src/writer_buffer.js +85 -85
  98. package/tsconfig.json +8 -8
@@ -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, protobuf.Namespace);
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.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,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
+ };