@bufbuild/protobuf 2.12.0 → 2.12.1
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.
- package/README.md +3 -3
- package/dist/commonjs/codegenv1/boot.d.ts +1 -0
- package/dist/{cjs/codegenv1/types.js → commonjs/codegenv1/boot.js} +3 -7
- package/dist/{cjs → commonjs}/codegenv1/types.d.ts +9 -5
- package/dist/{cjs → commonjs}/codegenv2/types.d.ts +9 -5
- package/dist/{cjs → commonjs}/equals.d.ts +8 -3
- package/dist/{cjs → commonjs}/equals.js +8 -3
- package/dist/{cjs → commonjs}/extensions.d.ts +2 -1
- package/dist/{cjs → commonjs}/extensions.js +3 -4
- package/dist/{cjs → commonjs}/from-binary.d.ts +16 -2
- package/dist/{cjs → commonjs}/from-binary.js +30 -24
- package/dist/{cjs → commonjs}/from-json.d.ts +19 -2
- package/dist/{cjs → commonjs}/from-json.js +174 -54
- package/dist/commonjs/json-value.js +15 -0
- package/dist/commonjs/package.json +4 -0
- package/dist/{cjs → commonjs}/proto-int64.js +1 -0
- package/dist/{cjs → commonjs}/reflect/reflect-check.js +3 -1
- package/dist/commonjs/reflect/scalar.d.ts +43 -0
- package/dist/{cjs → commonjs}/reflect/scalar.js +33 -6
- package/dist/{cjs → commonjs}/registry.js +1 -1
- package/dist/{cjs/codegenv2 → commonjs}/types.js +0 -7
- package/dist/{cjs → commonjs}/wire/binary-encoding.d.ts +4 -2
- package/dist/{cjs → commonjs}/wire/binary-encoding.js +8 -3
- package/dist/{cjs → commonjs}/wire/size-delimited.d.ts +1 -1
- package/dist/esm/codegenv1/boot.d.ts +1 -0
- package/dist/esm/codegenv1/boot.js +14 -0
- package/dist/esm/codegenv1/types.d.ts +9 -5
- package/dist/esm/codegenv1/types.js +0 -7
- package/dist/esm/codegenv2/types.d.ts +9 -5
- package/dist/esm/codegenv2/types.js +0 -7
- package/dist/esm/equals.d.ts +8 -3
- package/dist/esm/equals.js +8 -3
- package/dist/esm/extensions.d.ts +2 -1
- package/dist/esm/extensions.js +4 -5
- package/dist/esm/from-binary.d.ts +16 -2
- package/dist/esm/from-binary.js +29 -24
- package/dist/esm/from-json.d.ts +19 -2
- package/dist/esm/from-json.js +174 -54
- package/dist/esm/package.json +4 -0
- package/dist/esm/proto-int64.js +1 -0
- package/dist/esm/reflect/reflect-check.js +3 -1
- package/dist/esm/reflect/scalar.d.ts +27 -5
- package/dist/esm/reflect/scalar.js +33 -6
- package/dist/esm/registry.js +1 -1
- package/dist/esm/wire/binary-encoding.d.ts +4 -2
- package/dist/esm/wire/binary-encoding.js +8 -3
- package/dist/esm/wire/size-delimited.d.ts +1 -1
- package/package.json +97 -31
- package/dist/cjs/package.json +0 -1
- package/dist/cjs/reflect/scalar.d.ts +0 -21
- /package/dist/{cjs → commonjs}/clone.d.ts +0 -0
- /package/dist/{cjs → commonjs}/clone.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv1/enum.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv1/enum.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv1/extension.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv1/extension.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv1/file.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv1/file.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv1/index.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv1/index.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv1/message.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv1/message.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv1/service.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv1/service.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv1/symbols.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv1/symbols.js +0 -0
- /package/dist/{cjs → commonjs/codegenv1}/types.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/boot.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/boot.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/embed.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/embed.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/enum.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/enum.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/extension.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/extension.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/file.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/file.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/index.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/index.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/message.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/message.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/restore-json-names.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/restore-json-names.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/scalar.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/scalar.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/service.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/service.js +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/symbols.d.ts +0 -0
- /package/dist/{cjs → commonjs}/codegenv2/symbols.js +0 -0
- /package/dist/{cjs/json-value.js → commonjs/codegenv2/types.js} +0 -0
- /package/dist/{cjs → commonjs}/create.d.ts +0 -0
- /package/dist/{cjs → commonjs}/create.js +0 -0
- /package/dist/{cjs → commonjs}/descriptors.d.ts +0 -0
- /package/dist/{cjs → commonjs}/descriptors.js +0 -0
- /package/dist/{cjs → commonjs}/fields.d.ts +0 -0
- /package/dist/{cjs → commonjs}/fields.js +0 -0
- /package/dist/{cjs → commonjs}/index.d.ts +0 -0
- /package/dist/{cjs → commonjs}/index.js +0 -0
- /package/dist/{cjs → commonjs}/is-message.d.ts +0 -0
- /package/dist/{cjs → commonjs}/is-message.js +0 -0
- /package/dist/{cjs → commonjs}/json-value.d.ts +0 -0
- /package/dist/{cjs → commonjs}/merge.d.ts +0 -0
- /package/dist/{cjs → commonjs}/merge.js +0 -0
- /package/dist/{cjs → commonjs}/proto-int64.d.ts +0 -0
- /package/dist/{cjs → commonjs}/reflect/error.d.ts +0 -0
- /package/dist/{cjs → commonjs}/reflect/error.js +0 -0
- /package/dist/{cjs → commonjs}/reflect/guard.d.ts +0 -0
- /package/dist/{cjs → commonjs}/reflect/guard.js +0 -0
- /package/dist/{cjs → commonjs}/reflect/index.d.ts +0 -0
- /package/dist/{cjs → commonjs}/reflect/index.js +0 -0
- /package/dist/{cjs → commonjs}/reflect/names.d.ts +0 -0
- /package/dist/{cjs → commonjs}/reflect/names.js +0 -0
- /package/dist/{cjs → commonjs}/reflect/nested-types.d.ts +0 -0
- /package/dist/{cjs → commonjs}/reflect/nested-types.js +0 -0
- /package/dist/{cjs → commonjs}/reflect/path.d.ts +0 -0
- /package/dist/{cjs → commonjs}/reflect/path.js +0 -0
- /package/dist/{cjs → commonjs}/reflect/reflect-check.d.ts +0 -0
- /package/dist/{cjs → commonjs}/reflect/reflect-types.d.ts +0 -0
- /package/dist/{cjs → commonjs}/reflect/reflect-types.js +0 -0
- /package/dist/{cjs → commonjs}/reflect/reflect.d.ts +0 -0
- /package/dist/{cjs → commonjs}/reflect/reflect.js +0 -0
- /package/dist/{cjs → commonjs}/reflect/unsafe.d.ts +0 -0
- /package/dist/{cjs → commonjs}/reflect/unsafe.js +0 -0
- /package/dist/{cjs → commonjs}/registry.d.ts +0 -0
- /package/dist/{cjs → commonjs}/to-binary.d.ts +0 -0
- /package/dist/{cjs → commonjs}/to-binary.js +0 -0
- /package/dist/{cjs → commonjs}/to-json.d.ts +0 -0
- /package/dist/{cjs → commonjs}/to-json.js +0 -0
- /package/dist/{cjs → commonjs}/types.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wire/base64-encoding.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wire/base64-encoding.js +0 -0
- /package/dist/{cjs → commonjs}/wire/index.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wire/index.js +0 -0
- /package/dist/{cjs → commonjs}/wire/size-delimited.js +0 -0
- /package/dist/{cjs → commonjs}/wire/text-encoding.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wire/text-encoding.js +0 -0
- /package/dist/{cjs → commonjs}/wire/text-format.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wire/text-format.js +0 -0
- /package/dist/{cjs → commonjs}/wire/varint.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wire/varint.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/any.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/any.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/duration.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/duration.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/any_pb.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/any_pb.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/api_pb.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/api_pb.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/compiler/plugin_pb.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/cpp_features_pb.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/cpp_features_pb.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/descriptor_pb.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/descriptor_pb.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/duration_pb.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/duration_pb.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/empty_pb.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/empty_pb.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/field_mask_pb.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/field_mask_pb.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/go_features_pb.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/go_features_pb.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/java_features_pb.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/java_features_pb.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/source_context_pb.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/source_context_pb.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/struct_pb.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/struct_pb.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/timestamp_pb.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/timestamp_pb.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/type_pb.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/type_pb.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/wrappers_pb.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/wrappers_pb.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/index.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/index.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/timestamp.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/timestamp.js +0 -0
- /package/dist/{cjs → commonjs}/wkt/wrappers.d.ts +0 -0
- /package/dist/{cjs → commonjs}/wkt/wrappers.js +0 -0
package/README.md
CHANGED
|
@@ -32,10 +32,10 @@ npm install @bufbuild/protobuf
|
|
|
32
32
|
|
|
33
33
|
## Documentation
|
|
34
34
|
|
|
35
|
-
To learn how to work with `@bufbuild/protobuf`, check out the docs for the [Runtime API](https://
|
|
36
|
-
and the [generated code](https://
|
|
35
|
+
To learn how to work with `@bufbuild/protobuf`, check out the docs for the [Runtime API](https://protobufes.com/guides/messages/)
|
|
36
|
+
and the [generated code](https://protobufes.com/reference/generated-code/).
|
|
37
37
|
|
|
38
|
-
Official documentation for the Protobuf-ES project can be found at [
|
|
38
|
+
Official documentation for the Protobuf-ES project can be found at [protobufes.com](https://protobufes.com/).
|
|
39
39
|
|
|
40
40
|
For more information on Buf, check out the official [Buf documentation](https://buf.build/docs/).
|
|
41
41
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { boot } from "../codegenv2/boot.js";
|
|
@@ -13,10 +13,6 @@
|
|
|
13
13
|
// See the License for the specific language governing permissions and
|
|
14
14
|
// limitations under the License.
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
this.a = false;
|
|
20
|
-
this.b = false;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
16
|
+
exports.boot = void 0;
|
|
17
|
+
var boot_js_1 = require("../codegenv2/boot.js");
|
|
18
|
+
Object.defineProperty(exports, "boot", { enumerable: true, get: function () { return boot_js_1.boot; } });
|
|
@@ -56,11 +56,15 @@ export type GenService<RuntimeShape extends GenServiceMethods> = Omit<DescServic
|
|
|
56
56
|
* @private
|
|
57
57
|
*/
|
|
58
58
|
export type GenServiceMethods = Record<string, Pick<DescMethod, "input" | "output" | "methodKind">>;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
59
|
+
type brandv1<A, B = unknown> = {
|
|
60
|
+
/**
|
|
61
|
+
* @internal
|
|
62
|
+
*/
|
|
63
|
+
readonly $codegenv1: {
|
|
64
|
+
a: A;
|
|
65
|
+
b: B;
|
|
66
|
+
};
|
|
67
|
+
};
|
|
64
68
|
/**
|
|
65
69
|
* Union of the property names of all fields, including oneof members.
|
|
66
70
|
* For an anonymous message (no generated message shape), it's simply a string.
|
|
@@ -62,11 +62,15 @@ export type GenService<RuntimeShape extends GenServiceMethods> = Omit<DescServic
|
|
|
62
62
|
* @private
|
|
63
63
|
*/
|
|
64
64
|
export type GenServiceMethods = Record<string, Pick<DescMethod, "input" | "output" | "methodKind">>;
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
65
|
+
type brandv2<A, B = unknown> = {
|
|
66
|
+
/**
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
69
|
+
readonly $codegenv2: {
|
|
70
|
+
a: A;
|
|
71
|
+
b: B;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
70
74
|
/**
|
|
71
75
|
* Union of the property names of all fields, including oneof members.
|
|
72
76
|
* For an anonymous message (no generated message shape), it's simply a string.
|
|
@@ -32,10 +32,15 @@ interface EqualsOptions {
|
|
|
32
32
|
unknown?: boolean;
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
|
-
* Compare two messages of the same type.
|
|
35
|
+
* Compare two messages of the same type for equality.
|
|
36
36
|
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
37
|
+
* Fields are compared one by one, but only when set: a field set in one message
|
|
38
|
+
* but not the other makes them unequal, while fields set in both are compared
|
|
39
|
+
* by value. Extensions and unknown fields are disregarded by default.
|
|
40
|
+
*
|
|
41
|
+
* Float and double values are compared with IEEE semantics: NaN does not equal
|
|
42
|
+
* NaN, and -0 equals 0 (with the exception for singular fields with implicit
|
|
43
|
+
* presence: -0 is set, +0 is unset).
|
|
39
44
|
*/
|
|
40
45
|
export declare function equals<Desc extends DescMessage>(schema: Desc, a: MessageShape<Desc>, b: MessageShape<Desc>, options?: EqualsOptions): boolean;
|
|
41
46
|
export {};
|
|
@@ -20,10 +20,15 @@ const descriptors_js_1 = require("./descriptors.js");
|
|
|
20
20
|
const index_js_1 = require("./wkt/index.js");
|
|
21
21
|
const extensions_js_1 = require("./extensions.js");
|
|
22
22
|
/**
|
|
23
|
-
* Compare two messages of the same type.
|
|
23
|
+
* Compare two messages of the same type for equality.
|
|
24
24
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
25
|
+
* Fields are compared one by one, but only when set: a field set in one message
|
|
26
|
+
* but not the other makes them unequal, while fields set in both are compared
|
|
27
|
+
* by value. Extensions and unknown fields are disregarded by default.
|
|
28
|
+
*
|
|
29
|
+
* Float and double values are compared with IEEE semantics: NaN does not equal
|
|
30
|
+
* NaN, and -0 equals 0 (with the exception for singular fields with implicit
|
|
31
|
+
* presence: -0 is set, +0 is unset).
|
|
27
32
|
*/
|
|
28
33
|
function equals(schema, a, b, options) {
|
|
29
34
|
if (a.$typeName != schema.typeName || b.$typeName != schema.typeName) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AnyDesc, DescEnum, DescEnumValue, DescExtension, DescField, DescFile, DescMessage, DescMethod, DescOneof, DescService } from "./descriptors.js";
|
|
2
|
+
import type { BinaryReadOptions } from "./from-binary.js";
|
|
2
3
|
import type { ReflectMessage } from "./reflect/reflect-types.js";
|
|
3
4
|
import type { Extendee, ExtensionValueShape } from "./types.js";
|
|
4
5
|
import type { EnumOptions, EnumValueOptions, FieldOptions, FileOptions, MessageOptions, MethodOptions, OneofOptions, ServiceOptions } from "./wkt/gen/google/protobuf/descriptor_pb.js";
|
|
@@ -16,7 +17,7 @@ import type { EnumOptions, EnumValueOptions, FieldOptions, FileOptions, MessageO
|
|
|
16
17
|
*
|
|
17
18
|
* If the extension does not extend the given message, an error is raised.
|
|
18
19
|
*/
|
|
19
|
-
export declare function getExtension<Desc extends DescExtension>(message: Extendee<Desc>, extension: Desc): ExtensionValueShape<Desc>;
|
|
20
|
+
export declare function getExtension<Desc extends DescExtension>(message: Extendee<Desc>, extension: Desc, options?: Partial<BinaryReadOptions>): ExtensionValueShape<Desc>;
|
|
20
21
|
/**
|
|
21
22
|
* Set an extension value on a message. If the message already has a value for
|
|
22
23
|
* this extension, the value is replaced.
|
|
@@ -41,14 +41,13 @@ const wrappers_js_1 = require("./wkt/wrappers.js");
|
|
|
41
41
|
*
|
|
42
42
|
* If the extension does not extend the given message, an error is raised.
|
|
43
43
|
*/
|
|
44
|
-
function getExtension(message, extension) {
|
|
44
|
+
function getExtension(message, extension, options) {
|
|
45
45
|
assertExtendee(extension, message);
|
|
46
46
|
const ufs = filterUnknownFields(message.$unknown, extension);
|
|
47
47
|
const [container, field, get] = createExtensionContainer(extension);
|
|
48
|
+
const ctx = (0, from_binary_js_1.makeReadContext)(options);
|
|
48
49
|
for (const uf of ufs) {
|
|
49
|
-
(0, from_binary_js_1.readField)(container, new binary_encoding_js_1.BinaryReader(uf.data), field, uf.wireType,
|
|
50
|
-
readUnknownFields: true,
|
|
51
|
-
});
|
|
50
|
+
(0, from_binary_js_1.readField)(container, new binary_encoding_js_1.BinaryReader(uf.data), field, uf.wireType, ctx);
|
|
52
51
|
}
|
|
53
52
|
return get();
|
|
54
53
|
}
|
|
@@ -13,7 +13,20 @@ export interface BinaryReadOptions {
|
|
|
13
13
|
* For more details see https://developers.google.com/protocol-buffers/docs/proto3#unknowns
|
|
14
14
|
*/
|
|
15
15
|
readUnknownFields: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* The maximum depth of nested messages to parse. If a message nests deeper
|
|
18
|
+
* than this limit, parsing fails with an error instead of exhausting the
|
|
19
|
+
* call stack. Defaults to 100.
|
|
20
|
+
*/
|
|
21
|
+
recursionLimit: number;
|
|
22
|
+
}
|
|
23
|
+
interface BinaryReadContext extends BinaryReadOptions {
|
|
24
|
+
depth: number;
|
|
16
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* @private Only exported for getExtension()
|
|
28
|
+
*/
|
|
29
|
+
export declare function makeReadContext(options?: Partial<BinaryReadOptions>): BinaryReadContext;
|
|
17
30
|
/**
|
|
18
31
|
* Parse serialized binary data.
|
|
19
32
|
*/
|
|
@@ -29,6 +42,7 @@ export declare function fromBinary<Desc extends DescMessage>(schema: Desc, bytes
|
|
|
29
42
|
*/
|
|
30
43
|
export declare function mergeFromBinary<Desc extends DescMessage>(schema: Desc, target: MessageShape<Desc>, bytes: Uint8Array, options?: Partial<BinaryReadOptions>): MessageShape<Desc>;
|
|
31
44
|
/**
|
|
32
|
-
* @private
|
|
45
|
+
* @private Only exported for getExtension()
|
|
33
46
|
*/
|
|
34
|
-
export declare function readField(message: ReflectMessage, reader: BinaryReader, field: DescField, wireType: WireType,
|
|
47
|
+
export declare function readField(message: ReflectMessage, reader: BinaryReader, field: DescField, wireType: WireType, ctx: BinaryReadContext): void;
|
|
48
|
+
export {};
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
// See the License for the specific language governing permissions and
|
|
14
14
|
// limitations under the License.
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.makeReadContext = makeReadContext;
|
|
16
17
|
exports.fromBinary = fromBinary;
|
|
17
18
|
exports.mergeFromBinary = mergeFromBinary;
|
|
18
19
|
exports.readField = readField;
|
|
@@ -21,19 +22,18 @@ const scalar_js_1 = require("./reflect/scalar.js");
|
|
|
21
22
|
const reflect_js_1 = require("./reflect/reflect.js");
|
|
22
23
|
const binary_encoding_js_1 = require("./wire/binary-encoding.js");
|
|
23
24
|
const varint_js_1 = require("./wire/varint.js");
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return options ? Object.assign(Object.assign({}, readDefaults), options) : readDefaults;
|
|
25
|
+
/**
|
|
26
|
+
* @private Only exported for getExtension()
|
|
27
|
+
*/
|
|
28
|
+
function makeReadContext(options) {
|
|
29
|
+
return Object.assign(Object.assign({ readUnknownFields: true, recursionLimit: 100 }, options), { depth: 0 });
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
32
|
* Parse serialized binary data.
|
|
33
33
|
*/
|
|
34
34
|
function fromBinary(schema, bytes, options) {
|
|
35
35
|
const msg = (0, reflect_js_1.reflect)(schema, undefined, false);
|
|
36
|
-
readMessage(msg, new binary_encoding_js_1.BinaryReader(bytes),
|
|
36
|
+
readMessage(msg, new binary_encoding_js_1.BinaryReader(bytes), makeReadContext(options), false, bytes.byteLength);
|
|
37
37
|
return msg.message;
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
@@ -46,7 +46,7 @@ function fromBinary(schema, bytes, options) {
|
|
|
46
46
|
* new data.
|
|
47
47
|
*/
|
|
48
48
|
function mergeFromBinary(schema, target, bytes, options) {
|
|
49
|
-
readMessage((0, reflect_js_1.reflect)(schema, target, false), new binary_encoding_js_1.BinaryReader(bytes),
|
|
49
|
+
readMessage((0, reflect_js_1.reflect)(schema, target, false), new binary_encoding_js_1.BinaryReader(bytes), makeReadContext(options), false, bytes.byteLength);
|
|
50
50
|
return target;
|
|
51
51
|
}
|
|
52
52
|
/**
|
|
@@ -57,8 +57,11 @@ function mergeFromBinary(schema, target, bytes, options) {
|
|
|
57
57
|
*
|
|
58
58
|
* @private
|
|
59
59
|
*/
|
|
60
|
-
function readMessage(message, reader,
|
|
60
|
+
function readMessage(message, reader, ctx, delimited, lengthOrDelimitedFieldNo) {
|
|
61
61
|
var _a;
|
|
62
|
+
if (++ctx.depth > ctx.recursionLimit) {
|
|
63
|
+
throw new Error(`cannot decode ${message.desc} from binary: maximum recursion depth of ${ctx.recursionLimit} reached`);
|
|
64
|
+
}
|
|
62
65
|
const end = delimited ? reader.len : reader.pos + lengthOrDelimitedFieldNo;
|
|
63
66
|
let fieldNo;
|
|
64
67
|
let wireType;
|
|
@@ -70,13 +73,15 @@ function readMessage(message, reader, options, delimited, lengthOrDelimitedField
|
|
|
70
73
|
}
|
|
71
74
|
const field = message.findNumber(fieldNo);
|
|
72
75
|
if (!field) {
|
|
73
|
-
|
|
74
|
-
|
|
76
|
+
// Use remaining recursion budget for skipping nested groups
|
|
77
|
+
const recursionLimit = ctx.recursionLimit - ctx.depth;
|
|
78
|
+
const data = reader.skip(wireType, fieldNo, recursionLimit);
|
|
79
|
+
if (ctx.readUnknownFields) {
|
|
75
80
|
unknownFields.push({ no: fieldNo, wireType, data });
|
|
76
81
|
}
|
|
77
82
|
continue;
|
|
78
83
|
}
|
|
79
|
-
readField(message, reader, field, wireType,
|
|
84
|
+
readField(message, reader, field, wireType, ctx);
|
|
80
85
|
}
|
|
81
86
|
if (delimited) {
|
|
82
87
|
if (wireType != binary_encoding_js_1.WireType.EndGroup || fieldNo !== lengthOrDelimitedFieldNo) {
|
|
@@ -86,11 +91,12 @@ function readMessage(message, reader, options, delimited, lengthOrDelimitedField
|
|
|
86
91
|
if (unknownFields.length > 0) {
|
|
87
92
|
message.setUnknown(unknownFields);
|
|
88
93
|
}
|
|
94
|
+
ctx.depth--;
|
|
89
95
|
}
|
|
90
96
|
/**
|
|
91
|
-
* @private
|
|
97
|
+
* @private Only exported for getExtension()
|
|
92
98
|
*/
|
|
93
|
-
function readField(message, reader, field, wireType,
|
|
99
|
+
function readField(message, reader, field, wireType, ctx) {
|
|
94
100
|
var _a;
|
|
95
101
|
switch (field.fieldKind) {
|
|
96
102
|
case "scalar":
|
|
@@ -106,7 +112,7 @@ function readField(message, reader, field, wireType, options) {
|
|
|
106
112
|
if (ok) {
|
|
107
113
|
message.set(field, val);
|
|
108
114
|
}
|
|
109
|
-
else if (
|
|
115
|
+
else if (ctx.readUnknownFields) {
|
|
110
116
|
const bytes = [];
|
|
111
117
|
(0, varint_js_1.varint32write)(val, bytes);
|
|
112
118
|
const unknownFields = (_a = message.getUnknown()) !== null && _a !== void 0 ? _a : [];
|
|
@@ -120,18 +126,18 @@ function readField(message, reader, field, wireType, options) {
|
|
|
120
126
|
}
|
|
121
127
|
break;
|
|
122
128
|
case "message":
|
|
123
|
-
message.set(field, readMessageField(reader,
|
|
129
|
+
message.set(field, readMessageField(reader, ctx, field, message.get(field)));
|
|
124
130
|
break;
|
|
125
131
|
case "list":
|
|
126
|
-
readListField(reader, wireType, message.get(field),
|
|
132
|
+
readListField(reader, wireType, message.get(field), ctx);
|
|
127
133
|
break;
|
|
128
134
|
case "map":
|
|
129
|
-
readMapEntry(reader, message.get(field),
|
|
135
|
+
readMapEntry(reader, message.get(field), ctx);
|
|
130
136
|
break;
|
|
131
137
|
}
|
|
132
138
|
}
|
|
133
139
|
// Read a map field, expecting key field = 1, value field = 2
|
|
134
|
-
function readMapEntry(reader, map,
|
|
140
|
+
function readMapEntry(reader, map, ctx) {
|
|
135
141
|
const field = map.field();
|
|
136
142
|
let key;
|
|
137
143
|
let val;
|
|
@@ -155,7 +161,7 @@ function readMapEntry(reader, map, options) {
|
|
|
155
161
|
val = reader.int32();
|
|
156
162
|
break;
|
|
157
163
|
case "message":
|
|
158
|
-
val = readMessageField(reader,
|
|
164
|
+
val = readMessageField(reader, ctx, field);
|
|
159
165
|
break;
|
|
160
166
|
}
|
|
161
167
|
break;
|
|
@@ -179,11 +185,11 @@ function readMapEntry(reader, map, options) {
|
|
|
179
185
|
}
|
|
180
186
|
map.set(key, val);
|
|
181
187
|
}
|
|
182
|
-
function readListField(reader, wireType, list,
|
|
188
|
+
function readListField(reader, wireType, list, ctx) {
|
|
183
189
|
var _a;
|
|
184
190
|
const field = list.field();
|
|
185
191
|
if (field.listKind === "message") {
|
|
186
|
-
list.add(readMessageField(reader,
|
|
192
|
+
list.add(readMessageField(reader, ctx, field));
|
|
187
193
|
return;
|
|
188
194
|
}
|
|
189
195
|
const scalarType = (_a = field.scalar) !== null && _a !== void 0 ? _a : descriptors_js_1.ScalarType.INT32;
|
|
@@ -199,10 +205,10 @@ function readListField(reader, wireType, list, options) {
|
|
|
199
205
|
list.add(readScalar(reader, scalarType, field.utf8Validation));
|
|
200
206
|
}
|
|
201
207
|
}
|
|
202
|
-
function readMessageField(reader,
|
|
208
|
+
function readMessageField(reader, ctx, field, mergeMessage) {
|
|
203
209
|
const delimited = field.delimitedEncoding;
|
|
204
210
|
const message = mergeMessage !== null && mergeMessage !== void 0 ? mergeMessage : (0, reflect_js_1.reflect)(field.message, undefined, false);
|
|
205
|
-
readMessage(message, reader,
|
|
211
|
+
readMessage(message, reader, ctx, delimited, delimited ? field.number : reader.uint32());
|
|
206
212
|
return message;
|
|
207
213
|
}
|
|
208
214
|
function readScalar(reader, type, validateUtf8 = false) {
|
|
@@ -17,33 +17,50 @@ export interface JsonReadOptions {
|
|
|
17
17
|
* from JSON format.
|
|
18
18
|
*/
|
|
19
19
|
registry?: Registry | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* The maximum depth of nested messages to parse. If a message nests deeper
|
|
22
|
+
* than this limit, parsing fails with an error instead of exhausting the
|
|
23
|
+
* call stack. Defaults to 100.
|
|
24
|
+
*/
|
|
25
|
+
recursionLimit: number;
|
|
20
26
|
}
|
|
21
27
|
/**
|
|
22
28
|
* Parse a message from a JSON string.
|
|
29
|
+
*
|
|
30
|
+
* Duplicate keys are rejected.
|
|
23
31
|
*/
|
|
24
32
|
export declare function fromJsonString<Desc extends DescMessage>(schema: Desc, json: string, options?: Partial<JsonReadOptions>): MessageShape<Desc>;
|
|
25
33
|
/**
|
|
26
|
-
* Parse a message from a JSON string, merging fields.
|
|
34
|
+
* Parse a message from a JSON string, merging fields into the target.
|
|
27
35
|
*
|
|
28
36
|
* Repeated fields are appended. Map entries are added, overwriting
|
|
29
37
|
* existing keys.
|
|
30
38
|
*
|
|
31
39
|
* If a message field is already present, it will be merged with the
|
|
32
40
|
* new data.
|
|
41
|
+
*
|
|
42
|
+
* Duplicate keys in the JSON are rejected, as in `fromJsonString`.
|
|
33
43
|
*/
|
|
34
44
|
export declare function mergeFromJsonString<Desc extends DescMessage>(schema: Desc, target: MessageShape<Desc>, json: string, options?: Partial<JsonReadOptions>): MessageShape<Desc>;
|
|
35
45
|
/**
|
|
36
46
|
* Parse a message from a JSON value.
|
|
47
|
+
*
|
|
48
|
+
* Duplicate keys are rejected, but a value parsed by JSON.parse has already
|
|
49
|
+
* dropped duplicates (the last one wins). Use `fromJsonString` for strict
|
|
50
|
+
* duplicate-key checking.
|
|
37
51
|
*/
|
|
38
52
|
export declare function fromJson<Desc extends DescMessage>(schema: Desc, json: JsonValue, options?: Partial<JsonReadOptions>): MessageShape<Desc>;
|
|
39
53
|
/**
|
|
40
|
-
* Parse a message from a JSON value, merging fields.
|
|
54
|
+
* Parse a message from a JSON value, merging fields into the target.
|
|
41
55
|
*
|
|
42
56
|
* Repeated fields are appended. Map entries are added, overwriting
|
|
43
57
|
* existing keys.
|
|
44
58
|
*
|
|
45
59
|
* If a message field is already present, it will be merged with the
|
|
46
60
|
* new data.
|
|
61
|
+
*
|
|
62
|
+
* Duplicate keys are rejected as in `fromJson`; use `mergeFromJsonString`
|
|
63
|
+
* for strict checking.
|
|
47
64
|
*/
|
|
48
65
|
export declare function mergeFromJson<Desc extends DescMessage>(schema: Desc, target: MessageShape<Desc>, json: JsonValue, options?: Partial<JsonReadOptions>): MessageShape<Desc>;
|
|
49
66
|
/**
|