protobufjs 8.6.0 → 8.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +441 -441
  3. package/dist/light/protobuf.js +8473 -8516
  4. package/dist/light/protobuf.js.map +1 -1
  5. package/dist/light/protobuf.min.js +3 -3
  6. package/dist/light/protobuf.min.js.map +1 -1
  7. package/dist/minimal/protobuf.js +3018 -3061
  8. package/dist/minimal/protobuf.js.map +1 -1
  9. package/dist/minimal/protobuf.min.js +3 -3
  10. package/dist/minimal/protobuf.min.js.map +1 -1
  11. package/dist/protobuf.js +10376 -10419
  12. package/dist/protobuf.js.map +1 -1
  13. package/dist/protobuf.min.js +3 -3
  14. package/dist/protobuf.min.js.map +1 -1
  15. package/ext/README.md +70 -70
  16. package/ext/debug/README.md +4 -4
  17. package/ext/debug/index.js +71 -71
  18. package/ext/descriptor/README.md +5 -5
  19. package/ext/descriptor/index.d.ts +2 -2
  20. package/ext/descriptor/index.js +2 -2
  21. package/ext/descriptor.d.ts +87 -86
  22. package/ext/descriptor.generated.d.ts +14 -6
  23. package/ext/descriptor.js +1354 -1303
  24. package/ext/protojson.LICENSE +201 -201
  25. package/ext/protojson.d.ts +20 -20
  26. package/ext/protojson.js +925 -903
  27. package/ext/textformat.d.ts +19 -19
  28. package/ext/textformat.js +1256 -1256
  29. package/google/LICENSE +27 -27
  30. package/google/README.md +1 -1
  31. package/google/api/annotations.json +82 -82
  32. package/google/api/annotations.proto +10 -10
  33. package/google/api/http.json +85 -85
  34. package/google/api/http.proto +30 -30
  35. package/google/protobuf/api.json +117 -117
  36. package/google/protobuf/api.proto +33 -33
  37. package/google/protobuf/compiler/plugin.json +126 -126
  38. package/google/protobuf/compiler/plugin.proto +47 -47
  39. package/google/protobuf/descriptor.json +1381 -1381
  40. package/google/protobuf/descriptor.proto +534 -534
  41. package/google/protobuf/source_context.json +19 -19
  42. package/google/protobuf/source_context.proto +7 -7
  43. package/google/protobuf/type.json +201 -201
  44. package/google/protobuf/type.proto +89 -89
  45. package/index.d.ts +10 -18
  46. package/index.js +4 -4
  47. package/light.d.ts +2 -2
  48. package/light.js +3 -3
  49. package/minimal.d.ts +2 -2
  50. package/minimal.js +4 -4
  51. package/package.json +93 -93
  52. package/src/common.js +399 -399
  53. package/src/converter.js +344 -344
  54. package/src/decoder.js +208 -208
  55. package/src/encoder.js +111 -111
  56. package/src/enum.js +231 -231
  57. package/src/field.js +497 -497
  58. package/src/index-light.js +104 -104
  59. package/src/index-minimal.js +36 -36
  60. package/src/index.js +12 -12
  61. package/src/mapfield.js +136 -136
  62. package/src/message.js +137 -137
  63. package/src/method.js +175 -175
  64. package/src/namespace.js +565 -565
  65. package/src/object.js +382 -382
  66. package/src/oneof.js +225 -225
  67. package/src/parse.js +1068 -1068
  68. package/src/reader.js +543 -543
  69. package/src/reader_buffer.js +72 -72
  70. package/src/root.js +416 -416
  71. package/src/roots.js +18 -18
  72. package/src/rpc/service.js +148 -148
  73. package/src/rpc.js +36 -36
  74. package/src/service.js +198 -198
  75. package/src/tokenize.js +421 -421
  76. package/src/type.js +655 -655
  77. package/src/types.js +196 -196
  78. package/src/typescript.js +25 -25
  79. package/src/util/aspromise.d.ts +13 -13
  80. package/src/util/aspromise.js +52 -52
  81. package/src/util/base64.d.ts +32 -32
  82. package/src/util/base64.js +146 -146
  83. package/src/util/codegen.d.ts +31 -31
  84. package/src/util/codegen.js +113 -113
  85. package/src/util/eventemitter.d.ts +45 -45
  86. package/src/util/eventemitter.js +86 -86
  87. package/src/util/fetch.d.ts +56 -56
  88. package/src/util/fetch.js +112 -112
  89. package/src/util/float.d.ts +83 -83
  90. package/src/util/float.js +335 -335
  91. package/src/util/fs.js +11 -11
  92. package/src/util/longbits.js +200 -200
  93. package/src/util/minimal.js +515 -518
  94. package/src/util/path.d.ts +22 -22
  95. package/src/util/path.js +72 -72
  96. package/src/util/patterns.js +7 -7
  97. package/src/util/pool.d.ts +32 -32
  98. package/src/util/pool.js +48 -48
  99. package/src/util/utf8.d.ts +24 -24
  100. package/src/util/utf8.js +130 -130
  101. package/src/util.js +242 -242
  102. package/src/verifier.js +180 -180
  103. package/src/wrappers.js +106 -106
  104. package/src/writer.js +495 -495
  105. package/src/writer_buffer.js +102 -102
  106. package/tsconfig.json +6 -6
  107. package/src/util/inquire.d.ts +0 -10
  108. package/src/util/inquire.js +0 -38
package/src/verifier.js CHANGED
@@ -1,180 +1,180 @@
1
- "use strict";
2
- module.exports = verifier;
3
-
4
- var Enum = require("./enum"),
5
- util = require("./util");
6
-
7
- function invalid(field, expected) {
8
- return field.name + ": " + expected + (field.repeated && expected !== "array" ? "[]" : field.map && expected !== "object" ? "{k:"+field.keyType+"}" : "") + " expected";
9
- }
10
-
11
- /**
12
- * Generates a partial value verifier.
13
- * @param {Codegen} gen Codegen instance
14
- * @param {Field} field Reflected field
15
- * @param {number} fieldIndex Field index
16
- * @param {string} ref Variable reference
17
- * @returns {Codegen} Codegen instance
18
- * @ignore
19
- */
20
- function genVerifyValue(gen, field, fieldIndex, ref) {
21
- /* eslint-disable no-unexpected-multiline */
22
- if (field.resolvedType) {
23
- if (field.resolvedType instanceof Enum) { gen
24
- ("switch(%s){", ref)
25
- ("default:")
26
- ("return%j", invalid(field, "enum value"));
27
- for (var keys = Object.keys(field.resolvedType.values), j = 0; j < keys.length; ++j) gen
28
- ("case %i:", field.resolvedType.values[keys[j]]);
29
- gen
30
- ("break")
31
- ("}");
32
- } else {
33
- gen
34
- ("{")
35
- ("var e=types[%i].verify(%s,q+1);", fieldIndex, ref)
36
- ("if(e)")
37
- ("return%j+e", field.name + ".")
38
- ("}");
39
- }
40
- } else {
41
- switch (field.type) {
42
- case "int32":
43
- case "uint32":
44
- case "sint32":
45
- case "fixed32":
46
- case "sfixed32": gen
47
- ("if(!util.isInteger(%s))", ref)
48
- ("return%j", invalid(field, "integer"));
49
- break;
50
- case "int64":
51
- case "uint64":
52
- case "sint64":
53
- case "fixed64":
54
- case "sfixed64": gen
55
- ("if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))", ref, ref, ref, ref)
56
- ("return%j", invalid(field, "integer|Long"));
57
- break;
58
- case "float":
59
- case "double": gen
60
- ("if(typeof %s!==\"number\")", ref)
61
- ("return%j", invalid(field, "number"));
62
- break;
63
- case "bool": gen
64
- ("if(typeof %s!==\"boolean\")", ref)
65
- ("return%j", invalid(field, "boolean"));
66
- break;
67
- case "string": gen
68
- ("if(!util.isString(%s))", ref)
69
- ("return%j", invalid(field, "string"));
70
- break;
71
- case "bytes": gen
72
- ("if(!(%s&&typeof %s.length===\"number\"||util.isString(%s)))", ref, ref, ref)
73
- ("return%j", invalid(field, "buffer"));
74
- break;
75
- }
76
- }
77
- return gen;
78
- /* eslint-enable no-unexpected-multiline */
79
- }
80
-
81
- /**
82
- * Generates a partial key verifier.
83
- * @param {Codegen} gen Codegen instance
84
- * @param {Field} field Reflected field
85
- * @param {string} ref Variable reference
86
- * @returns {Codegen} Codegen instance
87
- * @ignore
88
- */
89
- function genVerifyKey(gen, field, ref) {
90
- /* eslint-disable no-unexpected-multiline */
91
- switch (field.keyType) {
92
- case "int32":
93
- case "uint32":
94
- case "sint32":
95
- case "fixed32":
96
- case "sfixed32": gen
97
- ("if(!util.key32Re.test(%s))", ref)
98
- ("return%j", invalid(field, "integer key"));
99
- break;
100
- case "int64":
101
- case "uint64":
102
- case "sint64":
103
- case "fixed64":
104
- case "sfixed64": gen
105
- ("if(!util.key64Re.test(%s))", ref) // see comment above: x is ok, d is not
106
- ("return%j", invalid(field, "integer|Long key"));
107
- break;
108
- case "bool": gen
109
- ("if(!util.key2Re.test(%s))", ref)
110
- ("return%j", invalid(field, "boolean key"));
111
- break;
112
- }
113
- return gen;
114
- /* eslint-enable no-unexpected-multiline */
115
- }
116
-
117
- /**
118
- * Generates a verifier specific to the specified message type.
119
- * @param {Type} mtype Message type
120
- * @returns {Codegen} Codegen instance
121
- */
122
- function verifier(mtype) {
123
- /* eslint-disable no-unexpected-multiline */
124
-
125
- var gen = util.codegen(["m", "q"])
126
- ("if(typeof m!==\"object\"||m===null)")
127
- ("return%j", "object expected")
128
- ("if(q===undefined)q=0")
129
- ("if(q>util.recursionLimit)")
130
- ("return%j", "max depth exceeded");
131
- var oneofs = mtype.oneofsArray,
132
- seenFirstField = {};
133
- if (oneofs.length) gen
134
- ("var p={}");
135
-
136
- for (var i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {
137
- var field = mtype._fieldsArray[i].resolve(),
138
- ref = "m" + util.safeProp(field.name);
139
-
140
- if (field.optional) gen
141
- ("if(%s!=null&&Object.hasOwnProperty.call(m,%j)){", ref, field.name); // !== undefined && !== null
142
-
143
- // map fields
144
- if (field.map) { gen
145
- ("if(!util.isObject(%s))", ref)
146
- ("return%j", invalid(field, "object"))
147
- ("var k=Object.keys(%s)", ref)
148
- ("for(var i=0;i<k.length;++i){");
149
- genVerifyKey(gen, field, "k[i]");
150
- genVerifyValue(gen, field, i, ref + "[k[i]]")
151
- ("}");
152
-
153
- // repeated fields
154
- } else if (field.repeated) { gen
155
- ("if(!Array.isArray(%s))", ref)
156
- ("return%j", invalid(field, "array"))
157
- ("for(var i=0;i<%s.length;++i){", ref);
158
- genVerifyValue(gen, field, i, ref + "[i]")
159
- ("}");
160
-
161
- // required or present fields
162
- } else {
163
- if (field.partOf) {
164
- var oneofProp = util.safeProp(field.partOf.name);
165
- if (seenFirstField[field.partOf.name] === 1) gen
166
- ("if(p%s===1)", oneofProp)
167
- ("return%j", field.partOf.name + ": multiple values");
168
- seenFirstField[field.partOf.name] = 1;
169
- gen
170
- ("p%s=1", oneofProp);
171
- }
172
- genVerifyValue(gen, field, i, ref);
173
- }
174
- if (field.optional) gen
175
- ("}");
176
- }
177
- return gen
178
- ("return null");
179
- /* eslint-enable no-unexpected-multiline */
180
- }
1
+ "use strict";
2
+ module.exports = verifier;
3
+
4
+ var Enum = require("./enum"),
5
+ util = require("./util");
6
+
7
+ function invalid(field, expected) {
8
+ return field.name + ": " + expected + (field.repeated && expected !== "array" ? "[]" : field.map && expected !== "object" ? "{k:"+field.keyType+"}" : "") + " expected";
9
+ }
10
+
11
+ /**
12
+ * Generates a partial value verifier.
13
+ * @param {Codegen} gen Codegen instance
14
+ * @param {Field} field Reflected field
15
+ * @param {number} fieldIndex Field index
16
+ * @param {string} ref Variable reference
17
+ * @returns {Codegen} Codegen instance
18
+ * @ignore
19
+ */
20
+ function genVerifyValue(gen, field, fieldIndex, ref) {
21
+ /* eslint-disable no-unexpected-multiline */
22
+ if (field.resolvedType) {
23
+ if (field.resolvedType instanceof Enum) { gen
24
+ ("switch(%s){", ref)
25
+ ("default:")
26
+ ("return%j", invalid(field, "enum value"));
27
+ for (var keys = Object.keys(field.resolvedType.values), j = 0; j < keys.length; ++j) gen
28
+ ("case %i:", field.resolvedType.values[keys[j]]);
29
+ gen
30
+ ("break")
31
+ ("}");
32
+ } else {
33
+ gen
34
+ ("{")
35
+ ("var e=types[%i].verify(%s,q+1);", fieldIndex, ref)
36
+ ("if(e)")
37
+ ("return%j+e", field.name + ".")
38
+ ("}");
39
+ }
40
+ } else {
41
+ switch (field.type) {
42
+ case "int32":
43
+ case "uint32":
44
+ case "sint32":
45
+ case "fixed32":
46
+ case "sfixed32": gen
47
+ ("if(!util.isInteger(%s))", ref)
48
+ ("return%j", invalid(field, "integer"));
49
+ break;
50
+ case "int64":
51
+ case "uint64":
52
+ case "sint64":
53
+ case "fixed64":
54
+ case "sfixed64": gen
55
+ ("if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))", ref, ref, ref, ref)
56
+ ("return%j", invalid(field, "integer|Long"));
57
+ break;
58
+ case "float":
59
+ case "double": gen
60
+ ("if(typeof %s!==\"number\")", ref)
61
+ ("return%j", invalid(field, "number"));
62
+ break;
63
+ case "bool": gen
64
+ ("if(typeof %s!==\"boolean\")", ref)
65
+ ("return%j", invalid(field, "boolean"));
66
+ break;
67
+ case "string": gen
68
+ ("if(!util.isString(%s))", ref)
69
+ ("return%j", invalid(field, "string"));
70
+ break;
71
+ case "bytes": gen
72
+ ("if(!(%s&&typeof %s.length===\"number\"||util.isString(%s)))", ref, ref, ref)
73
+ ("return%j", invalid(field, "buffer"));
74
+ break;
75
+ }
76
+ }
77
+ return gen;
78
+ /* eslint-enable no-unexpected-multiline */
79
+ }
80
+
81
+ /**
82
+ * Generates a partial key verifier.
83
+ * @param {Codegen} gen Codegen instance
84
+ * @param {Field} field Reflected field
85
+ * @param {string} ref Variable reference
86
+ * @returns {Codegen} Codegen instance
87
+ * @ignore
88
+ */
89
+ function genVerifyKey(gen, field, ref) {
90
+ /* eslint-disable no-unexpected-multiline */
91
+ switch (field.keyType) {
92
+ case "int32":
93
+ case "uint32":
94
+ case "sint32":
95
+ case "fixed32":
96
+ case "sfixed32": gen
97
+ ("if(!util.key32Re.test(%s))", ref)
98
+ ("return%j", invalid(field, "integer key"));
99
+ break;
100
+ case "int64":
101
+ case "uint64":
102
+ case "sint64":
103
+ case "fixed64":
104
+ case "sfixed64": gen
105
+ ("if(!util.key64Re.test(%s))", ref) // see comment above: x is ok, d is not
106
+ ("return%j", invalid(field, "integer|Long key"));
107
+ break;
108
+ case "bool": gen
109
+ ("if(!util.key2Re.test(%s))", ref)
110
+ ("return%j", invalid(field, "boolean key"));
111
+ break;
112
+ }
113
+ return gen;
114
+ /* eslint-enable no-unexpected-multiline */
115
+ }
116
+
117
+ /**
118
+ * Generates a verifier specific to the specified message type.
119
+ * @param {Type} mtype Message type
120
+ * @returns {Codegen} Codegen instance
121
+ */
122
+ function verifier(mtype) {
123
+ /* eslint-disable no-unexpected-multiline */
124
+
125
+ var gen = util.codegen(["m", "q"])
126
+ ("if(typeof m!==\"object\"||m===null)")
127
+ ("return%j", "object expected")
128
+ ("if(q===undefined)q=0")
129
+ ("if(q>util.recursionLimit)")
130
+ ("return%j", "max depth exceeded");
131
+ var oneofs = mtype.oneofsArray,
132
+ seenFirstField = {};
133
+ if (oneofs.length) gen
134
+ ("var p={}");
135
+
136
+ for (var i = 0; i < /* initializes */ mtype.fieldsArray.length; ++i) {
137
+ var field = mtype._fieldsArray[i].resolve(),
138
+ ref = "m" + util.safeProp(field.name);
139
+
140
+ if (field.optional) gen
141
+ ("if(%s!=null&&Object.hasOwnProperty.call(m,%j)){", ref, field.name); // !== undefined && !== null
142
+
143
+ // map fields
144
+ if (field.map) { gen
145
+ ("if(!util.isObject(%s))", ref)
146
+ ("return%j", invalid(field, "object"))
147
+ ("var k=Object.keys(%s)", ref)
148
+ ("for(var i=0;i<k.length;++i){");
149
+ genVerifyKey(gen, field, "k[i]");
150
+ genVerifyValue(gen, field, i, ref + "[k[i]]")
151
+ ("}");
152
+
153
+ // repeated fields
154
+ } else if (field.repeated) { gen
155
+ ("if(!Array.isArray(%s))", ref)
156
+ ("return%j", invalid(field, "array"))
157
+ ("for(var i=0;i<%s.length;++i){", ref);
158
+ genVerifyValue(gen, field, i, ref + "[i]")
159
+ ("}");
160
+
161
+ // required or present fields
162
+ } else {
163
+ if (field.partOf) {
164
+ var oneofProp = util.safeProp(field.partOf.name);
165
+ if (seenFirstField[field.partOf.name] === 1) gen
166
+ ("if(p%s===1)", oneofProp)
167
+ ("return%j", field.partOf.name + ": multiple values");
168
+ seenFirstField[field.partOf.name] = 1;
169
+ gen
170
+ ("p%s=1", oneofProp);
171
+ }
172
+ genVerifyValue(gen, field, i, ref);
173
+ }
174
+ if (field.optional) gen
175
+ ("}");
176
+ }
177
+ return gen
178
+ ("return null");
179
+ /* eslint-enable no-unexpected-multiline */
180
+ }
package/src/wrappers.js CHANGED
@@ -1,106 +1,106 @@
1
- "use strict";
2
-
3
- /**
4
- * Wrappers for common types.
5
- * @type {Object.<string,IWrapper>}
6
- * @const
7
- */
8
- var wrappers = exports;
9
-
10
- var Message = require("./message"),
11
- util = require("./util/minimal");
12
-
13
- /**
14
- * From object converter part of an {@link IWrapper}.
15
- * @typedef WrapperFromObjectConverter
16
- * @type {function}
17
- * @param {Object.<string,*>} object Plain object
18
- * @returns {Message<{}>} Message instance
19
- * @this Type
20
- */
21
-
22
- /**
23
- * To object converter part of an {@link IWrapper}.
24
- * @typedef WrapperToObjectConverter
25
- * @type {function}
26
- * @param {Message<{}>} message Message instance
27
- * @param {IConversionOptions} [options] Conversion options
28
- * @returns {Object.<string,*>} Plain object
29
- * @this Type
30
- */
31
-
32
- /**
33
- * Common type wrapper part of {@link wrappers}.
34
- * @interface IWrapper
35
- * @property {WrapperFromObjectConverter} [fromObject] From object converter
36
- * @property {WrapperToObjectConverter} [toObject] To object converter
37
- */
38
-
39
- // Custom wrapper for Any
40
- wrappers[".google.protobuf.Any"] = {
41
-
42
- fromObject: function(object, depth) {
43
-
44
- // unwrap value type if mapped
45
- if (object && object["@type"]) {
46
- // Only use fully qualified type name after the last '/'
47
- var name = object["@type"].substring(object["@type"].lastIndexOf("/") + 1);
48
- var type = this.lookup(name);
49
- /* istanbul ignore else */
50
- if (type) {
51
- // type_url does not accept leading "."
52
- var type_url = object["@type"].charAt(0) === "." ?
53
- object["@type"].slice(1) : object["@type"];
54
- // type_url prefix is optional, but path seperator is required
55
- if (type_url.indexOf("/") === -1) {
56
- type_url = "/" + type_url;
57
- }
58
- return this.create({
59
- type_url: type_url,
60
- value: type.encode(type.fromObject(object, depth === undefined ? 1 : depth + 1)).finish()
61
- });
62
- }
63
- }
64
-
65
- return this.fromObject(object, depth);
66
- },
67
-
68
- toObject: function(message, options, depth) {
69
- if (depth === undefined)
70
- depth = 0;
71
- if (depth > util.recursionLimit)
72
- throw Error("max depth exceeded");
73
-
74
- // Default prefix
75
- var googleApi = "type.googleapis.com/";
76
- var prefix = "";
77
- var name = "";
78
- // decode value if requested and unmapped
79
- if (options && options.json && message.type_url && message.value) {
80
- // Only use fully qualified type name after the last '/'
81
- name = message.type_url.substring(message.type_url.lastIndexOf("/") + 1);
82
- // Separate the prefix used
83
- prefix = message.type_url.substring(0, message.type_url.lastIndexOf("/") + 1);
84
- var type = this.lookup(name);
85
- /* istanbul ignore else */
86
- if (type)
87
- message = type.decode(message.value, undefined, undefined, depth + 1);
88
- }
89
-
90
- // wrap value if unmapped
91
- if (!(message instanceof this.ctor) && message instanceof Message) {
92
- var object = message.$type.toObject(message, options, depth + 1);
93
- var messageName = message.$type.fullName[0] === "." ?
94
- message.$type.fullName.slice(1) : message.$type.fullName;
95
- // Default to type.googleapis.com prefix if no prefix is used
96
- if (prefix === "") {
97
- prefix = googleApi;
98
- }
99
- name = prefix + messageName;
100
- object["@type"] = name;
101
- return object;
102
- }
103
-
104
- return this.toObject(message, options, depth);
105
- }
106
- };
1
+ "use strict";
2
+
3
+ /**
4
+ * Wrappers for common types.
5
+ * @type {Object.<string,IWrapper>}
6
+ * @const
7
+ */
8
+ var wrappers = exports;
9
+
10
+ var Message = require("./message"),
11
+ util = require("./util/minimal");
12
+
13
+ /**
14
+ * From object converter part of an {@link IWrapper}.
15
+ * @typedef WrapperFromObjectConverter
16
+ * @type {function}
17
+ * @param {Object.<string,*>} object Plain object
18
+ * @returns {Message<{}>} Message instance
19
+ * @this Type
20
+ */
21
+
22
+ /**
23
+ * To object converter part of an {@link IWrapper}.
24
+ * @typedef WrapperToObjectConverter
25
+ * @type {function}
26
+ * @param {Message<{}>} message Message instance
27
+ * @param {IConversionOptions} [options] Conversion options
28
+ * @returns {Object.<string,*>} Plain object
29
+ * @this Type
30
+ */
31
+
32
+ /**
33
+ * Common type wrapper part of {@link wrappers}.
34
+ * @interface IWrapper
35
+ * @property {WrapperFromObjectConverter} [fromObject] From object converter
36
+ * @property {WrapperToObjectConverter} [toObject] To object converter
37
+ */
38
+
39
+ // Custom wrapper for Any
40
+ wrappers[".google.protobuf.Any"] = {
41
+
42
+ fromObject: function(object, depth) {
43
+
44
+ // unwrap value type if mapped
45
+ if (object && object["@type"]) {
46
+ // Only use fully qualified type name after the last '/'
47
+ var name = object["@type"].substring(object["@type"].lastIndexOf("/") + 1);
48
+ var type = this.lookup(name);
49
+ /* istanbul ignore else */
50
+ if (type) {
51
+ // type_url does not accept leading "."
52
+ var type_url = object["@type"].charAt(0) === "." ?
53
+ object["@type"].slice(1) : object["@type"];
54
+ // type_url prefix is optional, but path seperator is required
55
+ if (type_url.indexOf("/") === -1) {
56
+ type_url = "/" + type_url;
57
+ }
58
+ return this.create({
59
+ type_url: type_url,
60
+ value: type.encode(type.fromObject(object, depth === undefined ? 1 : depth + 1)).finish()
61
+ });
62
+ }
63
+ }
64
+
65
+ return this.fromObject(object, depth);
66
+ },
67
+
68
+ toObject: function(message, options, depth) {
69
+ if (depth === undefined)
70
+ depth = 0;
71
+ if (depth > util.recursionLimit)
72
+ throw Error("max depth exceeded");
73
+
74
+ // Default prefix
75
+ var googleApi = "type.googleapis.com/";
76
+ var prefix = "";
77
+ var name = "";
78
+ // decode value if requested and unmapped
79
+ if (options && options.json && message.type_url && message.value) {
80
+ // Only use fully qualified type name after the last '/'
81
+ name = message.type_url.substring(message.type_url.lastIndexOf("/") + 1);
82
+ // Separate the prefix used
83
+ prefix = message.type_url.substring(0, message.type_url.lastIndexOf("/") + 1);
84
+ var type = this.lookup(name);
85
+ /* istanbul ignore else */
86
+ if (type)
87
+ message = type.decode(message.value, undefined, undefined, depth + 1);
88
+ }
89
+
90
+ // wrap value if unmapped
91
+ if (!(message instanceof this.ctor) && message instanceof Message) {
92
+ var object = message.$type.toObject(message, options, depth + 1);
93
+ var messageName = message.$type.fullName[0] === "." ?
94
+ message.$type.fullName.slice(1) : message.$type.fullName;
95
+ // Default to type.googleapis.com prefix if no prefix is used
96
+ if (prefix === "") {
97
+ prefix = googleApi;
98
+ }
99
+ name = prefix + messageName;
100
+ object["@type"] = name;
101
+ return object;
102
+ }
103
+
104
+ return this.toObject(message, options, depth);
105
+ }
106
+ };