@bufbuild/protobuf 2.0.0-alpha.2 → 2.0.0-alpha.4
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 +1 -1
- package/dist/cjs/clone.d.ts +1 -1
- package/dist/cjs/clone.js +9 -6
- package/dist/cjs/codegenv1/boot.d.ts +1 -1
- package/dist/cjs/codegenv1/boot.js +3 -5
- package/dist/cjs/codegenv1/embed.d.ts +1 -1
- package/dist/cjs/codegenv1/embed.js +39 -34
- package/dist/cjs/codegenv1/enum.d.ts +1 -1
- package/dist/cjs/codegenv1/extension.d.ts +1 -1
- package/dist/cjs/codegenv1/file.d.ts +1 -1
- package/dist/cjs/codegenv1/file.js +5 -7
- package/dist/cjs/codegenv1/index.d.ts +1 -0
- package/dist/cjs/codegenv1/index.js +1 -0
- package/dist/cjs/codegenv1/message.d.ts +1 -1
- package/dist/cjs/codegenv1/scalar.d.ts +5 -0
- package/dist/cjs/codegenv1/scalar.js +39 -0
- package/dist/cjs/codegenv1/service.d.ts +3 -3
- package/dist/cjs/codegenv1/types.d.ts +7 -9
- package/dist/cjs/create.d.ts +1 -1
- package/dist/cjs/create.js +6 -5
- package/dist/cjs/{desc-types.d.ts → descriptors.d.ts} +39 -7
- package/dist/cjs/descriptors.js +53 -0
- package/dist/cjs/equals.d.ts +1 -1
- package/dist/cjs/extensions.d.ts +1 -1
- package/dist/cjs/extensions.js +4 -3
- package/dist/cjs/fields.d.ts +1 -1
- package/dist/cjs/from-binary.d.ts +1 -1
- package/dist/cjs/from-binary.js +32 -29
- package/dist/cjs/from-json.d.ts +2 -2
- package/dist/cjs/from-json.js +201 -188
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/is-message.d.ts +1 -1
- package/dist/cjs/proto-int64.d.ts +4 -1
- package/dist/cjs/proto-int64.js +16 -6
- package/dist/cjs/reflect/error.d.ts +1 -1
- package/dist/cjs/reflect/guard.d.ts +1 -1
- package/dist/cjs/reflect/guard.js +4 -4
- package/dist/cjs/reflect/index.d.ts +0 -1
- package/dist/cjs/reflect/index.js +0 -1
- package/dist/cjs/reflect/names.d.ts +1 -1
- package/dist/cjs/reflect/names.js +1 -1
- package/dist/cjs/reflect/nested-types.d.ts +1 -1
- package/dist/cjs/reflect/reflect-check.d.ts +10 -1
- package/dist/cjs/reflect/reflect-check.js +126 -9
- package/dist/cjs/reflect/reflect-types.d.ts +3 -41
- package/dist/cjs/reflect/reflect.d.ts +1 -1
- package/dist/cjs/reflect/reflect.js +42 -60
- package/dist/cjs/reflect/scalar.d.ts +3 -55
- package/dist/cjs/reflect/scalar.js +26 -220
- package/dist/cjs/reflect/unsafe.d.ts +1 -17
- package/dist/cjs/reflect/unsafe.js +2 -20
- package/dist/cjs/{reflect/registry.d.ts → registry.d.ts} +2 -2
- package/dist/cjs/{reflect/registry.js → registry.js} +54 -36
- package/dist/cjs/to-binary.d.ts +1 -1
- package/dist/cjs/to-binary.js +27 -27
- package/dist/cjs/to-json.d.ts +7 -6
- package/dist/cjs/to-json.js +57 -44
- package/dist/cjs/types.d.ts +1 -1
- package/dist/cjs/wire/base64-encoding.js +2 -2
- package/dist/cjs/wire/binary-encoding.d.ts +20 -0
- package/dist/cjs/wire/binary-encoding.js +75 -8
- package/dist/cjs/wire/size-delimited.d.ts +1 -1
- package/dist/cjs/wire/text-format.d.ts +1 -2
- package/dist/cjs/wire/text-format.js +21 -19
- package/dist/cjs/wkt/any.d.ts +2 -2
- package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +6 -0
- package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.js +1 -1
- package/dist/cjs/wkt/wrappers.d.ts +1 -1
- package/dist/esm/clone.d.ts +1 -1
- package/dist/esm/clone.js +8 -5
- package/dist/esm/codegenv1/boot.d.ts +1 -1
- package/dist/esm/codegenv1/boot.js +3 -5
- package/dist/esm/codegenv1/embed.d.ts +1 -1
- package/dist/esm/codegenv1/embed.js +9 -4
- package/dist/esm/codegenv1/enum.d.ts +1 -1
- package/dist/esm/codegenv1/extension.d.ts +1 -1
- package/dist/esm/codegenv1/file.d.ts +1 -1
- package/dist/esm/codegenv1/file.js +4 -6
- package/dist/esm/codegenv1/index.d.ts +1 -0
- package/dist/esm/codegenv1/index.js +1 -0
- package/dist/esm/codegenv1/message.d.ts +1 -1
- package/dist/esm/codegenv1/scalar.d.ts +5 -0
- package/dist/esm/codegenv1/scalar.js +35 -0
- package/dist/esm/codegenv1/service.d.ts +3 -3
- package/dist/esm/codegenv1/types.d.ts +7 -9
- package/dist/esm/create.d.ts +1 -1
- package/dist/esm/create.js +4 -3
- package/dist/esm/{desc-types.d.ts → descriptors.d.ts} +39 -7
- package/dist/esm/descriptors.js +50 -0
- package/dist/esm/equals.d.ts +1 -1
- package/dist/esm/extensions.d.ts +1 -1
- package/dist/esm/extensions.js +4 -3
- package/dist/esm/fields.d.ts +1 -1
- package/dist/esm/from-binary.d.ts +1 -1
- package/dist/esm/from-binary.js +14 -11
- package/dist/esm/from-json.d.ts +2 -2
- package/dist/esm/from-json.js +194 -181
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/is-message.d.ts +1 -1
- package/dist/esm/proto-int64.d.ts +4 -1
- package/dist/esm/proto-int64.js +16 -6
- package/dist/esm/reflect/error.d.ts +1 -1
- package/dist/esm/reflect/guard.d.ts +1 -1
- package/dist/esm/reflect/guard.js +4 -4
- package/dist/esm/reflect/index.d.ts +0 -1
- package/dist/esm/reflect/index.js +0 -1
- package/dist/esm/reflect/names.d.ts +1 -1
- package/dist/esm/reflect/names.js +1 -1
- package/dist/esm/reflect/nested-types.d.ts +1 -1
- package/dist/esm/reflect/reflect-check.d.ts +10 -1
- package/dist/esm/reflect/reflect-check.js +119 -2
- package/dist/esm/reflect/reflect-types.d.ts +3 -41
- package/dist/esm/reflect/reflect-types.js +1 -0
- package/dist/esm/reflect/reflect.d.ts +1 -1
- package/dist/esm/reflect/reflect.js +25 -43
- package/dist/esm/reflect/scalar.d.ts +3 -55
- package/dist/esm/reflect/scalar.js +14 -205
- package/dist/esm/reflect/unsafe.d.ts +1 -17
- package/dist/esm/reflect/unsafe.js +1 -17
- package/dist/esm/{reflect/registry.d.ts → registry.d.ts} +2 -2
- package/dist/esm/{reflect/registry.js → registry.js} +44 -26
- package/dist/esm/to-binary.d.ts +1 -1
- package/dist/esm/to-binary.js +1 -1
- package/dist/esm/to-json.d.ts +7 -6
- package/dist/esm/to-json.js +42 -29
- package/dist/esm/types.d.ts +1 -1
- package/dist/esm/wire/base64-encoding.js +2 -2
- package/dist/esm/wire/binary-encoding.d.ts +20 -0
- package/dist/esm/wire/binary-encoding.js +68 -1
- package/dist/esm/wire/size-delimited.d.ts +1 -1
- package/dist/esm/wire/text-format.d.ts +1 -2
- package/dist/esm/wire/text-format.js +5 -3
- package/dist/esm/wkt/any.d.ts +2 -2
- package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +6 -0
- package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +1 -1
- package/dist/esm/wkt/wrappers.d.ts +1 -1
- package/package.json +1 -1
- package/dist/cjs/desc-types.js +0 -15
- package/dist/cjs/reflect/assert.d.ts +0 -16
- package/dist/cjs/reflect/assert.js +0 -59
- package/dist/esm/desc-types.js +0 -14
- package/dist/esm/reflect/assert.d.ts +0 -16
- package/dist/esm/reflect/assert.js +0 -52
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Int64Support for the current environment.
|
|
3
|
+
*/
|
|
4
|
+
export declare const protoInt64: Int64Support;
|
|
1
5
|
/**
|
|
2
6
|
* We use the `bigint` primitive to represent 64-bit integral types. If bigint
|
|
3
7
|
* is unavailable, we fall back to a string representation, which means that
|
|
@@ -91,5 +95,4 @@ interface Int64Support {
|
|
|
91
95
|
*/
|
|
92
96
|
uDec(lo: number, hi: number): bigint;
|
|
93
97
|
}
|
|
94
|
-
export declare const protoInt64: Int64Support;
|
|
95
98
|
export {};
|
package/dist/cjs/proto-int64.js
CHANGED
|
@@ -14,8 +14,11 @@
|
|
|
14
14
|
// limitations under the License.
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.protoInt64 = void 0;
|
|
17
|
-
const assert_js_1 = require("./reflect/assert.js");
|
|
18
17
|
const varint_js_1 = require("./wire/varint.js");
|
|
18
|
+
/**
|
|
19
|
+
* Int64Support for the current environment.
|
|
20
|
+
*/
|
|
21
|
+
exports.protoInt64 = makeInt64Support();
|
|
19
22
|
function makeInt64Support() {
|
|
20
23
|
const dv = new DataView(new ArrayBuffer(8));
|
|
21
24
|
// note that Safari 14 implements BigInt, but not the DataView methods
|
|
@@ -35,14 +38,14 @@ function makeInt64Support() {
|
|
|
35
38
|
parse(value) {
|
|
36
39
|
const bi = typeof value == "bigint" ? value : BigInt(value);
|
|
37
40
|
if (bi > MAX || bi < MIN) {
|
|
38
|
-
throw new Error(`int64
|
|
41
|
+
throw new Error(`invalid int64: ${value}`);
|
|
39
42
|
}
|
|
40
43
|
return bi;
|
|
41
44
|
},
|
|
42
45
|
uParse(value) {
|
|
43
46
|
const bi = typeof value == "bigint" ? value : BigInt(value);
|
|
44
47
|
if (bi > UMAX || bi < UMIN) {
|
|
45
|
-
throw new Error(`uint64
|
|
48
|
+
throw new Error(`invalid uint64: ${value}`);
|
|
46
49
|
}
|
|
47
50
|
return bi;
|
|
48
51
|
},
|
|
@@ -72,8 +75,6 @@ function makeInt64Support() {
|
|
|
72
75
|
},
|
|
73
76
|
};
|
|
74
77
|
}
|
|
75
|
-
const assertInt64String = (value) => (0, assert_js_1.assert)(/^-?[0-9]+$/.test(value), `int64 invalid: ${value}`);
|
|
76
|
-
const assertUInt64String = (value) => (0, assert_js_1.assert)(/^[0-9]+$/.test(value), `uint64 invalid: ${value}`);
|
|
77
78
|
return {
|
|
78
79
|
zero: "0",
|
|
79
80
|
supported: false,
|
|
@@ -113,4 +114,13 @@ function makeInt64Support() {
|
|
|
113
114
|
},
|
|
114
115
|
};
|
|
115
116
|
}
|
|
116
|
-
|
|
117
|
+
function assertInt64String(value) {
|
|
118
|
+
if (!/^-?[0-9]+$/.test(value)) {
|
|
119
|
+
throw new Error("invalid int64: " + value);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function assertUInt64String(value) {
|
|
123
|
+
if (!/^[0-9]+$/.test(value)) {
|
|
124
|
+
throw new Error("invalid uint64: " + value);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Message } from "../types.js";
|
|
2
2
|
import type { ScalarValue } from "./scalar.js";
|
|
3
3
|
import type { ReflectList, ReflectMap, ReflectMessage } from "./reflect-types.js";
|
|
4
|
-
import type { DescField, DescMessage } from "../
|
|
4
|
+
import type { DescField, DescMessage } from "../descriptors.js";
|
|
5
5
|
export declare function isObject(arg: unknown): arg is Record<string, unknown>;
|
|
6
6
|
export declare function isOneofADT(arg: unknown): arg is OneofADT;
|
|
7
7
|
export type OneofADT = {
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.isReflectMessage = exports.isReflectMap = exports.isReflectList = exports.isOneofADT = exports.isObject = void 0;
|
|
17
17
|
const unsafe_js_1 = require("./unsafe.js");
|
|
18
|
-
const is_message_js_1 = require("../is-message.js");
|
|
19
18
|
function isObject(arg) {
|
|
20
19
|
return arg !== null && typeof arg == "object" && !Array.isArray(arg);
|
|
21
20
|
}
|
|
@@ -71,8 +70,9 @@ exports.isReflectMap = isReflectMap;
|
|
|
71
70
|
function isReflectMessage(arg, messageDesc) {
|
|
72
71
|
return (isObject(arg) &&
|
|
73
72
|
unsafe_js_1.unsafeLocal in arg &&
|
|
74
|
-
"
|
|
75
|
-
(
|
|
76
|
-
|
|
73
|
+
"desc" in arg &&
|
|
74
|
+
isObject(arg.desc) &&
|
|
75
|
+
arg.desc.kind === "message" &&
|
|
76
|
+
(messageDesc === undefined || arg.desc.typeName == messageDesc.typeName));
|
|
77
77
|
}
|
|
78
78
|
exports.isReflectMessage = isReflectMessage;
|
|
@@ -3,6 +3,5 @@ export * from "./names.js";
|
|
|
3
3
|
export * from "./nested-types.js";
|
|
4
4
|
export * from "./reflect.js";
|
|
5
5
|
export * from "./reflect-types.js";
|
|
6
|
-
export * from "./registry.js";
|
|
7
6
|
export * from "./scalar.js";
|
|
8
7
|
export { isReflectList, isReflectMap, isReflectMessage } from "./guard.js";
|
|
@@ -33,7 +33,6 @@ __exportStar(require("./names.js"), exports);
|
|
|
33
33
|
__exportStar(require("./nested-types.js"), exports);
|
|
34
34
|
__exportStar(require("./reflect.js"), exports);
|
|
35
35
|
__exportStar(require("./reflect-types.js"), exports);
|
|
36
|
-
__exportStar(require("./registry.js"), exports);
|
|
37
36
|
__exportStar(require("./scalar.js"), exports);
|
|
38
37
|
var guard_js_1 = require("./guard.js");
|
|
39
38
|
Object.defineProperty(exports, "isReflectList", { enumerable: true, get: function () { return guard_js_1.isReflectList; } });
|
|
@@ -6,6 +6,6 @@ export declare function protoCamelCase(snakeCase: string): string;
|
|
|
6
6
|
/**
|
|
7
7
|
* Escapes names that are reserved for ECMAScript built-in object properties.
|
|
8
8
|
*
|
|
9
|
-
* Also see safeIdentifier() from @bufbuild/protoplugin
|
|
9
|
+
* Also see safeIdentifier() from @bufbuild/protoplugin.
|
|
10
10
|
*/
|
|
11
11
|
export declare function safeObjectProperty(name: string): string;
|
|
@@ -66,7 +66,7 @@ const reservedObjectProperties = new Set([
|
|
|
66
66
|
/**
|
|
67
67
|
* Escapes names that are reserved for ECMAScript built-in object properties.
|
|
68
68
|
*
|
|
69
|
-
* Also see safeIdentifier() from @bufbuild/protoplugin
|
|
69
|
+
* Also see safeIdentifier() from @bufbuild/protoplugin.
|
|
70
70
|
*/
|
|
71
71
|
function safeObjectProperty(name) {
|
|
72
72
|
return reservedObjectProperties.has(name) ? name + "$" : name;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AnyDesc, DescEnum, DescExtension, DescFile, DescMessage, DescService } from "../
|
|
1
|
+
import type { AnyDesc, DescEnum, DescExtension, DescFile, DescMessage, DescService } from "../descriptors.js";
|
|
2
2
|
/**
|
|
3
3
|
* Iterate over all types - enumerations, extensions, services, messages -
|
|
4
4
|
* and enumerations, extensions and messages nested in messages.
|
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type DescField } from "../descriptors.js";
|
|
2
2
|
import { FieldError } from "./error.js";
|
|
3
|
+
/**
|
|
4
|
+
* Check whether the given field value is valid for the reflect API.
|
|
5
|
+
*/
|
|
3
6
|
export declare function checkField(field: DescField, value: unknown): FieldError | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* Check whether the given list item is valid for the reflect API.
|
|
9
|
+
*/
|
|
4
10
|
export declare function checkListItem(field: DescField & {
|
|
5
11
|
fieldKind: "list";
|
|
6
12
|
}, index: number, value: unknown): FieldError | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Check whether the given map key and value are valid for the reflect API.
|
|
15
|
+
*/
|
|
7
16
|
export declare function checkMapEntry(field: DescField & {
|
|
8
17
|
fieldKind: "map";
|
|
9
18
|
}, key: unknown, value: unknown): FieldError | undefined;
|
|
@@ -14,11 +14,16 @@
|
|
|
14
14
|
// limitations under the License.
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.formatVal = exports.checkMapEntry = exports.checkListItem = exports.checkField = void 0;
|
|
17
|
-
const
|
|
18
|
-
const scalar_js_2 = require("./scalar.js");
|
|
17
|
+
const descriptors_js_1 = require("../descriptors.js");
|
|
19
18
|
const is_message_js_1 = require("../is-message.js");
|
|
20
19
|
const error_js_1 = require("./error.js");
|
|
21
20
|
const guard_js_1 = require("./guard.js");
|
|
21
|
+
const binary_encoding_js_1 = require("../wire/binary-encoding.js");
|
|
22
|
+
const text_encoding_js_1 = require("../wire/text-encoding.js");
|
|
23
|
+
const proto_int64_js_1 = require("../proto-int64.js");
|
|
24
|
+
/**
|
|
25
|
+
* Check whether the given field value is valid for the reflect API.
|
|
26
|
+
*/
|
|
22
27
|
function checkField(field, value) {
|
|
23
28
|
const check = field.fieldKind == "list"
|
|
24
29
|
? (0, guard_js_1.isReflectList)(value, field)
|
|
@@ -43,6 +48,9 @@ function checkField(field, value) {
|
|
|
43
48
|
return new error_js_1.FieldError(field, reason);
|
|
44
49
|
}
|
|
45
50
|
exports.checkField = checkField;
|
|
51
|
+
/**
|
|
52
|
+
* Check whether the given list item is valid for the reflect API.
|
|
53
|
+
*/
|
|
46
54
|
function checkListItem(field, index, value) {
|
|
47
55
|
const check = checkSingular(field, value);
|
|
48
56
|
if (check !== true) {
|
|
@@ -51,8 +59,11 @@ function checkListItem(field, index, value) {
|
|
|
51
59
|
return undefined;
|
|
52
60
|
}
|
|
53
61
|
exports.checkListItem = checkListItem;
|
|
62
|
+
/**
|
|
63
|
+
* Check whether the given map key and value are valid for the reflect API.
|
|
64
|
+
*/
|
|
54
65
|
function checkMapEntry(field, key, value) {
|
|
55
|
-
const checkKey =
|
|
66
|
+
const checkKey = checkScalarValue(key, field.mapKey);
|
|
56
67
|
if (checkKey !== true) {
|
|
57
68
|
return new error_js_1.FieldError(field, `invalid map key: ${reasonSingular({ scalar: field.mapKey }, key, checkKey)}`);
|
|
58
69
|
}
|
|
@@ -65,7 +76,7 @@ function checkMapEntry(field, key, value) {
|
|
|
65
76
|
exports.checkMapEntry = checkMapEntry;
|
|
66
77
|
function checkSingular(field, value) {
|
|
67
78
|
if (field.scalar !== undefined) {
|
|
68
|
-
return
|
|
79
|
+
return checkScalarValue(value, field.scalar);
|
|
69
80
|
}
|
|
70
81
|
if (field.enum !== undefined) {
|
|
71
82
|
if (field.enum.open) {
|
|
@@ -75,11 +86,89 @@ function checkSingular(field, value) {
|
|
|
75
86
|
}
|
|
76
87
|
return (0, guard_js_1.isReflectMessage)(value, field.message);
|
|
77
88
|
}
|
|
89
|
+
function checkScalarValue(value, scalar) {
|
|
90
|
+
switch (scalar) {
|
|
91
|
+
case descriptors_js_1.ScalarType.DOUBLE:
|
|
92
|
+
return typeof value == "number";
|
|
93
|
+
case descriptors_js_1.ScalarType.FLOAT:
|
|
94
|
+
if (typeof value != "number") {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
if (Number.isNaN(value) || !Number.isFinite(value)) {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
if (value > binary_encoding_js_1.FLOAT32_MAX || value < binary_encoding_js_1.FLOAT32_MIN) {
|
|
101
|
+
return `${value.toFixed()} out of range`;
|
|
102
|
+
}
|
|
103
|
+
return true;
|
|
104
|
+
case descriptors_js_1.ScalarType.INT32:
|
|
105
|
+
case descriptors_js_1.ScalarType.SFIXED32:
|
|
106
|
+
case descriptors_js_1.ScalarType.SINT32:
|
|
107
|
+
// signed
|
|
108
|
+
if (typeof value !== "number" || !Number.isInteger(value)) {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
if (value > binary_encoding_js_1.INT32_MAX || value < binary_encoding_js_1.INT32_MIN) {
|
|
112
|
+
return `${value.toFixed()} out of range`;
|
|
113
|
+
}
|
|
114
|
+
return true;
|
|
115
|
+
case descriptors_js_1.ScalarType.FIXED32:
|
|
116
|
+
case descriptors_js_1.ScalarType.UINT32:
|
|
117
|
+
// unsigned
|
|
118
|
+
if (typeof value !== "number" || !Number.isInteger(value)) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
if (value > binary_encoding_js_1.UINT32_MAX || value < 0) {
|
|
122
|
+
return `${value.toFixed()} out of range`;
|
|
123
|
+
}
|
|
124
|
+
return true;
|
|
125
|
+
case descriptors_js_1.ScalarType.BOOL:
|
|
126
|
+
return typeof value == "boolean";
|
|
127
|
+
case descriptors_js_1.ScalarType.STRING:
|
|
128
|
+
if (typeof value != "string") {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
return (0, text_encoding_js_1.getTextEncoding)().checkUtf8(value) || "invalid UTF8";
|
|
132
|
+
case descriptors_js_1.ScalarType.BYTES:
|
|
133
|
+
return value instanceof Uint8Array;
|
|
134
|
+
case descriptors_js_1.ScalarType.INT64:
|
|
135
|
+
case descriptors_js_1.ScalarType.SFIXED64:
|
|
136
|
+
case descriptors_js_1.ScalarType.SINT64:
|
|
137
|
+
// signed
|
|
138
|
+
if (typeof value != "string" &&
|
|
139
|
+
typeof value !== "bigint" &&
|
|
140
|
+
typeof value !== "number") {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
proto_int64_js_1.protoInt64.parse(value);
|
|
145
|
+
}
|
|
146
|
+
catch (e) {
|
|
147
|
+
return `${value} out of range`;
|
|
148
|
+
}
|
|
149
|
+
return true;
|
|
150
|
+
case descriptors_js_1.ScalarType.FIXED64:
|
|
151
|
+
case descriptors_js_1.ScalarType.UINT64:
|
|
152
|
+
// unsigned
|
|
153
|
+
if (typeof value != "string" &&
|
|
154
|
+
typeof value !== "bigint" &&
|
|
155
|
+
typeof value !== "number") {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
try {
|
|
159
|
+
proto_int64_js_1.protoInt64.uParse(value);
|
|
160
|
+
}
|
|
161
|
+
catch (e) {
|
|
162
|
+
return `${value} out of range`;
|
|
163
|
+
}
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
78
167
|
function reasonSingular(field, val, details) {
|
|
79
168
|
details =
|
|
80
169
|
typeof details == "string" ? `: ${details}` : `, got ${formatVal(val)}`;
|
|
81
170
|
if (field.scalar !== undefined) {
|
|
82
|
-
return `expected ${
|
|
171
|
+
return `expected ${scalarTypeDescription(field.scalar)}` + details;
|
|
83
172
|
}
|
|
84
173
|
else if (field.enum !== undefined) {
|
|
85
174
|
return `expected ${field.enum.toString()}` + details;
|
|
@@ -135,16 +224,44 @@ function formatReflectList(field) {
|
|
|
135
224
|
case "enum":
|
|
136
225
|
return `ReflectList (${field.enum.toString()})`;
|
|
137
226
|
case "scalar":
|
|
138
|
-
return `ReflectList (${
|
|
227
|
+
return `ReflectList (${descriptors_js_1.ScalarType[field.scalar]})`;
|
|
139
228
|
}
|
|
140
229
|
}
|
|
141
230
|
function formatReflectMap(field) {
|
|
142
231
|
switch (field.mapKind) {
|
|
143
232
|
case "message":
|
|
144
|
-
return `ReflectMap (${
|
|
233
|
+
return `ReflectMap (${descriptors_js_1.ScalarType[field.mapKey]}, ${field.message.toString()})`;
|
|
145
234
|
case "enum":
|
|
146
|
-
return `ReflectMap (${
|
|
235
|
+
return `ReflectMap (${descriptors_js_1.ScalarType[field.mapKey]}, ${field.enum.toString()})`;
|
|
147
236
|
case "scalar":
|
|
148
|
-
return `ReflectMap (${
|
|
237
|
+
return `ReflectMap (${descriptors_js_1.ScalarType[field.mapKey]}, ${descriptors_js_1.ScalarType[field.scalar]})`;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
function scalarTypeDescription(scalar) {
|
|
241
|
+
switch (scalar) {
|
|
242
|
+
case descriptors_js_1.ScalarType.STRING:
|
|
243
|
+
return "string";
|
|
244
|
+
case descriptors_js_1.ScalarType.BOOL:
|
|
245
|
+
return "boolean";
|
|
246
|
+
case descriptors_js_1.ScalarType.INT64:
|
|
247
|
+
case descriptors_js_1.ScalarType.SINT64:
|
|
248
|
+
case descriptors_js_1.ScalarType.SFIXED64:
|
|
249
|
+
return "bigint (int64)";
|
|
250
|
+
case descriptors_js_1.ScalarType.UINT64:
|
|
251
|
+
case descriptors_js_1.ScalarType.FIXED64:
|
|
252
|
+
return "bigint (uint64)";
|
|
253
|
+
case descriptors_js_1.ScalarType.BYTES:
|
|
254
|
+
return "Uint8Array";
|
|
255
|
+
case descriptors_js_1.ScalarType.DOUBLE:
|
|
256
|
+
return "number (float64)";
|
|
257
|
+
case descriptors_js_1.ScalarType.FLOAT:
|
|
258
|
+
return "number (float32)";
|
|
259
|
+
case descriptors_js_1.ScalarType.FIXED32:
|
|
260
|
+
case descriptors_js_1.ScalarType.UINT32:
|
|
261
|
+
return "number (uint32)";
|
|
262
|
+
case descriptors_js_1.ScalarType.INT32:
|
|
263
|
+
case descriptors_js_1.ScalarType.SFIXED32:
|
|
264
|
+
case descriptors_js_1.ScalarType.SINT32:
|
|
265
|
+
return "number (int32)";
|
|
149
266
|
}
|
|
150
267
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type DescField, type DescMessage, type DescOneof } from "../descriptors.js";
|
|
2
2
|
import { FieldError } from "./error.js";
|
|
3
3
|
import { unsafeLocal } from "./unsafe.js";
|
|
4
4
|
import type { Message, UnknownField } from "../types.js";
|
|
5
|
-
import type {
|
|
5
|
+
import type { ScalarValue } from "./scalar.js";
|
|
6
6
|
/**
|
|
7
7
|
* ReflectMessage provides dynamic access and manipulation of a message.
|
|
8
8
|
*/
|
|
@@ -109,18 +109,6 @@ export interface ReflectMessage {
|
|
|
109
109
|
* a valid value. To reset a field, use clear().
|
|
110
110
|
*/
|
|
111
111
|
set<Field extends DescField>(field: Field, value: ReflectSetValue<Field>): FieldError | undefined;
|
|
112
|
-
/**
|
|
113
|
-
* Add an item to a list field.
|
|
114
|
-
*/
|
|
115
|
-
addListItem<Field extends DescField & {
|
|
116
|
-
fieldKind: "list";
|
|
117
|
-
}>(field: Field, value: ReflectAddListItemValue<Field>): FieldError | undefined;
|
|
118
|
-
/**
|
|
119
|
-
* Set a map entry.
|
|
120
|
-
*/
|
|
121
|
-
setMapEntry<Field extends DescField & {
|
|
122
|
-
fieldKind: "map";
|
|
123
|
-
}>(field: Field, key: MapEntryKey, value: ReflectSetMapEntryValue<Field>): FieldError | undefined;
|
|
124
112
|
/**
|
|
125
113
|
* Returns the unknown fields of the message.
|
|
126
114
|
*/
|
|
@@ -230,7 +218,7 @@ export type ReflectGetValue<Field extends DescField = DescField> = (Field extend
|
|
|
230
218
|
} ? ReflectMap<MapEntryKey, enumVal> : Field extends {
|
|
231
219
|
mapKind: "scalar";
|
|
232
220
|
scalar: infer T;
|
|
233
|
-
} ? ReflectMap<MapEntryKey, ScalarValue<T
|
|
221
|
+
} ? ReflectMap<MapEntryKey, ScalarValue<T>> : never) : Field extends {
|
|
234
222
|
fieldKind: "list";
|
|
235
223
|
} ? ReflectList : Field extends {
|
|
236
224
|
fieldKind: "enum";
|
|
@@ -255,30 +243,4 @@ export type ReflectSetValue<Field extends DescField = DescField> = (Field extend
|
|
|
255
243
|
fieldKind: "scalar";
|
|
256
244
|
scalar: infer T;
|
|
257
245
|
} ? ScalarValue<T> : never);
|
|
258
|
-
/**
|
|
259
|
-
* The type of the "value" argument of ReflectMessage.addListItem()
|
|
260
|
-
*/
|
|
261
|
-
export type ReflectAddListItemValue<Field extends DescField & {
|
|
262
|
-
fieldKind: "list";
|
|
263
|
-
}> = (Field extends {
|
|
264
|
-
listKind: "scalar";
|
|
265
|
-
scalar: infer T;
|
|
266
|
-
} ? ScalarValue<T> : Field extends {
|
|
267
|
-
listKind: "enum";
|
|
268
|
-
} ? enumVal : Field extends {
|
|
269
|
-
listKind: "message";
|
|
270
|
-
} ? ReflectMessage : never);
|
|
271
|
-
/**
|
|
272
|
-
* The type of the "value" argument of ReflectMessage.setMapEntry()
|
|
273
|
-
*/
|
|
274
|
-
export type ReflectSetMapEntryValue<Field extends DescField & {
|
|
275
|
-
fieldKind: "map";
|
|
276
|
-
}> = (Field extends {
|
|
277
|
-
mapKind: "enum";
|
|
278
|
-
} ? enumVal : Field extends {
|
|
279
|
-
mapKind: "message";
|
|
280
|
-
} ? ReflectMessage : Field extends {
|
|
281
|
-
mapKind: "scalar";
|
|
282
|
-
scalar: infer T;
|
|
283
|
-
} ? ScalarValue<T, LongType.BIGINT> : never);
|
|
284
246
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type DescField, type DescMessage } from "../descriptors.js";
|
|
2
2
|
import type { MessageShape } from "../types.js";
|
|
3
3
|
import type { MapEntryKey, ReflectList, ReflectMap, ReflectMessage } from "./reflect-types.js";
|
|
4
4
|
/**
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
// limitations under the License.
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.reflectMap = exports.reflectList = exports.reflect = void 0;
|
|
17
|
+
const descriptors_js_1 = require("../descriptors.js");
|
|
17
18
|
const reflect_check_js_1 = require("./reflect-check.js");
|
|
18
19
|
const error_js_1 = require("./error.js");
|
|
19
20
|
const unsafe_js_1 = require("./unsafe.js");
|
|
@@ -41,6 +42,8 @@ class ReflectMessageImpl {
|
|
|
41
42
|
constructor(messageDesc, message,
|
|
42
43
|
// TODO either remove this option, or support it in reflect-list and reflect-map as well
|
|
43
44
|
check = true) {
|
|
45
|
+
this.lists = new Map();
|
|
46
|
+
this.maps = new Map();
|
|
44
47
|
this.check = check;
|
|
45
48
|
this.desc = messageDesc;
|
|
46
49
|
this.message = this[unsafe_js_1.unsafeLocal] = message !== null && message !== void 0 ? message : (0, create_js_1.create)(messageDesc);
|
|
@@ -71,11 +74,19 @@ class ReflectMessageImpl {
|
|
|
71
74
|
let value = (0, unsafe_js_1.unsafeGet)(this.message, field);
|
|
72
75
|
switch (field.fieldKind) {
|
|
73
76
|
case "list":
|
|
74
|
-
|
|
77
|
+
// eslint-disable-next-line no-case-declarations
|
|
78
|
+
let list = this.lists.get(field);
|
|
79
|
+
if (!list || list[unsafe_js_1.unsafeLocal] !== value) {
|
|
80
|
+
this.lists.set(field, (list = new ReflectListImpl(field, value, this.check)));
|
|
81
|
+
}
|
|
82
|
+
return list;
|
|
75
83
|
case "map":
|
|
76
|
-
//
|
|
77
|
-
|
|
78
|
-
|
|
84
|
+
// eslint-disable-next-line no-case-declarations
|
|
85
|
+
let map = this.maps.get(field);
|
|
86
|
+
if (!map || map[unsafe_js_1.unsafeLocal] !== value) {
|
|
87
|
+
this.maps.set(field, (map = new ReflectMapImpl(field, value, this.check)));
|
|
88
|
+
}
|
|
89
|
+
return map;
|
|
79
90
|
case "message":
|
|
80
91
|
if (value !== undefined &&
|
|
81
92
|
!field.oneof &&
|
|
@@ -88,7 +99,7 @@ class ReflectMessageImpl {
|
|
|
88
99
|
return new ReflectMessageImpl(field.message, value, this.check);
|
|
89
100
|
case "scalar":
|
|
90
101
|
return (value === undefined
|
|
91
|
-
? (0, scalar_js_1.scalarZeroValue)(field.scalar,
|
|
102
|
+
? (0, scalar_js_1.scalarZeroValue)(field.scalar, false)
|
|
92
103
|
: longToReflect(field, value));
|
|
93
104
|
case "enum":
|
|
94
105
|
return (value !== null && value !== void 0 ? value : field.enum.values[0].number);
|
|
@@ -102,7 +113,7 @@ class ReflectMessageImpl {
|
|
|
102
113
|
return err;
|
|
103
114
|
}
|
|
104
115
|
}
|
|
105
|
-
let local
|
|
116
|
+
let local;
|
|
106
117
|
if ((0, guard_js_1.isReflectMap)(value) || (0, guard_js_1.isReflectList)(value)) {
|
|
107
118
|
local = value[unsafe_js_1.unsafeLocal];
|
|
108
119
|
}
|
|
@@ -116,30 +127,6 @@ class ReflectMessageImpl {
|
|
|
116
127
|
(0, unsafe_js_1.unsafeSet)(this.message, field, local);
|
|
117
128
|
return undefined;
|
|
118
129
|
}
|
|
119
|
-
addListItem(field, value) {
|
|
120
|
-
assertOwn(this.message, field);
|
|
121
|
-
assertKind(field, "list");
|
|
122
|
-
if (this.check) {
|
|
123
|
-
if ((0, reflect_check_js_1.checkListItem)(field, 0, value)) {
|
|
124
|
-
const arr = (0, unsafe_js_1.unsafeGet)(this.message, field);
|
|
125
|
-
return (0, reflect_check_js_1.checkListItem)(field, arr.length, value);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
(0, unsafe_js_1.unsafeAddListItem)(this.message, field, listItemToLocal(field, value));
|
|
129
|
-
return undefined;
|
|
130
|
-
}
|
|
131
|
-
setMapEntry(field, key, value) {
|
|
132
|
-
assertOwn(this.message, field);
|
|
133
|
-
assertKind(field, "map");
|
|
134
|
-
if (this.check) {
|
|
135
|
-
const err = (0, reflect_check_js_1.checkMapEntry)(field, key, value);
|
|
136
|
-
if (err) {
|
|
137
|
-
return err;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
(0, unsafe_js_1.unsafeSetMapEntry)(this.message, field, mapKeyToLocal(key), mapValueToLocal(field, value));
|
|
141
|
-
return undefined;
|
|
142
|
-
}
|
|
143
130
|
getUnknown() {
|
|
144
131
|
return this.message.$unknown;
|
|
145
132
|
}
|
|
@@ -147,11 +134,6 @@ class ReflectMessageImpl {
|
|
|
147
134
|
this.message.$unknown = value;
|
|
148
135
|
}
|
|
149
136
|
}
|
|
150
|
-
function assertKind(field, kind) {
|
|
151
|
-
if (field.fieldKind != kind) {
|
|
152
|
-
throw new error_js_1.FieldError(field, `${field.toString()} is ${field.fieldKind}`, "ForeignFieldError");
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
137
|
function assertOwn(owner, member) {
|
|
156
138
|
if (member.parent.typeName !== owner.$typeName) {
|
|
157
139
|
throw new error_js_1.FieldError(member, `cannot use ${member.toString()} with message ${owner.$typeName}`, "ForeignFieldError");
|
|
@@ -342,20 +324,20 @@ function mapKeyToLocal(key) {
|
|
|
342
324
|
*/
|
|
343
325
|
function mapKeyToReflect(key, type) {
|
|
344
326
|
switch (type) {
|
|
345
|
-
case
|
|
327
|
+
case descriptors_js_1.ScalarType.STRING:
|
|
346
328
|
return key;
|
|
347
|
-
case
|
|
348
|
-
case
|
|
349
|
-
case
|
|
350
|
-
case
|
|
351
|
-
case
|
|
329
|
+
case descriptors_js_1.ScalarType.INT32:
|
|
330
|
+
case descriptors_js_1.ScalarType.FIXED32:
|
|
331
|
+
case descriptors_js_1.ScalarType.UINT32:
|
|
332
|
+
case descriptors_js_1.ScalarType.SFIXED32:
|
|
333
|
+
case descriptors_js_1.ScalarType.SINT32: {
|
|
352
334
|
const n = Number.parseInt(key);
|
|
353
335
|
if (Number.isFinite(n)) {
|
|
354
336
|
return n;
|
|
355
337
|
}
|
|
356
338
|
break;
|
|
357
339
|
}
|
|
358
|
-
case
|
|
340
|
+
case descriptors_js_1.ScalarType.BOOL:
|
|
359
341
|
switch (key) {
|
|
360
342
|
case "true":
|
|
361
343
|
return true;
|
|
@@ -363,8 +345,8 @@ function mapKeyToReflect(key, type) {
|
|
|
363
345
|
return false;
|
|
364
346
|
}
|
|
365
347
|
break;
|
|
366
|
-
case
|
|
367
|
-
case
|
|
348
|
+
case descriptors_js_1.ScalarType.UINT64:
|
|
349
|
+
case descriptors_js_1.ScalarType.FIXED64:
|
|
368
350
|
try {
|
|
369
351
|
return proto_int64_js_1.protoInt64.uParse(key);
|
|
370
352
|
}
|
|
@@ -387,19 +369,19 @@ function mapKeyToReflect(key, type) {
|
|
|
387
369
|
function longToReflect(field, value) {
|
|
388
370
|
// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
|
|
389
371
|
switch (field.scalar) {
|
|
390
|
-
case
|
|
391
|
-
case
|
|
392
|
-
case
|
|
393
|
-
if ("
|
|
394
|
-
field.
|
|
372
|
+
case descriptors_js_1.ScalarType.INT64:
|
|
373
|
+
case descriptors_js_1.ScalarType.SFIXED64:
|
|
374
|
+
case descriptors_js_1.ScalarType.SINT64:
|
|
375
|
+
if ("longAsString" in field &&
|
|
376
|
+
field.longAsString &&
|
|
395
377
|
typeof value == "string") {
|
|
396
378
|
value = proto_int64_js_1.protoInt64.parse(value);
|
|
397
379
|
}
|
|
398
380
|
break;
|
|
399
|
-
case
|
|
400
|
-
case
|
|
401
|
-
if ("
|
|
402
|
-
field.
|
|
381
|
+
case descriptors_js_1.ScalarType.FIXED64:
|
|
382
|
+
case descriptors_js_1.ScalarType.UINT64:
|
|
383
|
+
if ("longAsString" in field &&
|
|
384
|
+
field.longAsString &&
|
|
403
385
|
typeof value == "string") {
|
|
404
386
|
value = proto_int64_js_1.protoInt64.uParse(value);
|
|
405
387
|
}
|
|
@@ -410,19 +392,19 @@ function longToReflect(field, value) {
|
|
|
410
392
|
function longToLocal(field, value) {
|
|
411
393
|
// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
|
|
412
394
|
switch (field.scalar) {
|
|
413
|
-
case
|
|
414
|
-
case
|
|
415
|
-
case
|
|
416
|
-
if ("
|
|
395
|
+
case descriptors_js_1.ScalarType.INT64:
|
|
396
|
+
case descriptors_js_1.ScalarType.SFIXED64:
|
|
397
|
+
case descriptors_js_1.ScalarType.SINT64:
|
|
398
|
+
if ("longAsString" in field && field.longAsString) {
|
|
417
399
|
value = String(value);
|
|
418
400
|
}
|
|
419
401
|
else if (typeof value == "string" || typeof value == "number") {
|
|
420
402
|
value = proto_int64_js_1.protoInt64.parse(value);
|
|
421
403
|
}
|
|
422
404
|
break;
|
|
423
|
-
case
|
|
424
|
-
case
|
|
425
|
-
if ("
|
|
405
|
+
case descriptors_js_1.ScalarType.FIXED64:
|
|
406
|
+
case descriptors_js_1.ScalarType.UINT64:
|
|
407
|
+
if ("longAsString" in field && field.longAsString) {
|
|
426
408
|
value = String(value);
|
|
427
409
|
}
|
|
428
410
|
else if (typeof value == "string" || typeof value == "number") {
|