@bufbuild/protobuf 2.0.0-alpha.3 → 2.0.0-beta.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/dist/cjs/clone.d.ts +1 -1
- package/dist/cjs/clone.js +9 -17
- package/dist/cjs/codegenv1/embed.js +25 -25
- package/dist/cjs/codegenv1/enum.d.ts +2 -1
- package/dist/cjs/codegenv1/file.js +1 -1
- package/dist/cjs/codegenv1/message.d.ts +2 -1
- package/dist/cjs/codegenv1/scalar.d.ts +4 -0
- package/dist/cjs/codegenv1/scalar.js +30 -1
- package/dist/cjs/codegenv1/symbols.d.ts +10 -0
- package/dist/cjs/codegenv1/symbols.js +2 -0
- package/dist/cjs/codegenv1/types.d.ts +7 -5
- package/dist/cjs/codegenv1/types.js +2 -1
- package/dist/cjs/create.d.ts +1 -1
- package/dist/cjs/create.js +47 -20
- package/dist/cjs/equals.d.ts +1 -1
- package/dist/cjs/equals.js +8 -15
- package/dist/cjs/from-binary.d.ts +2 -2
- package/dist/cjs/from-binary.js +17 -14
- package/dist/cjs/from-json.d.ts +14 -6
- package/dist/cjs/from-json.js +51 -55
- package/dist/cjs/is-message.d.ts +1 -1
- package/dist/cjs/is-message.js +3 -3
- package/dist/cjs/reflect/guard.js +4 -4
- package/dist/cjs/reflect/reflect-types.d.ts +13 -80
- package/dist/cjs/reflect/reflect.d.ts +29 -18
- package/dist/cjs/reflect/reflect.js +183 -78
- package/dist/cjs/reflect/scalar.d.ts +1 -1
- package/dist/cjs/reflect/unsafe.d.ts +0 -16
- package/dist/cjs/reflect/unsafe.js +1 -19
- package/dist/cjs/registry.d.ts +18 -2
- package/dist/cjs/registry.js +62 -60
- package/dist/cjs/to-binary.d.ts +1 -1
- package/dist/cjs/to-binary.js +2 -2
- package/dist/cjs/to-json.d.ts +14 -4
- package/dist/cjs/to-json.js +26 -13
- package/dist/cjs/types.d.ts +9 -0
- package/dist/cjs/wire/binary-encoding.js +30 -9
- package/dist/cjs/wkt/any.d.ts +7 -7
- package/dist/cjs/wkt/any.js +5 -5
- package/dist/cjs/wkt/gen/google/protobuf/any_pb.d.ts +9 -3
- package/dist/cjs/wkt/gen/google/protobuf/any_pb.js +4 -4
- package/dist/cjs/wkt/gen/google/protobuf/api_pb.d.ts +88 -9
- package/dist/cjs/wkt/gen/google/protobuf/api_pb.js +8 -8
- package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +107 -11
- package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.js +11 -11
- package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +1005 -92
- package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.js +86 -86
- package/dist/cjs/wkt/gen/google/protobuf/duration_pb.d.ts +7 -3
- package/dist/cjs/wkt/gen/google/protobuf/duration_pb.js +4 -4
- package/dist/cjs/wkt/gen/google/protobuf/empty_pb.d.ts +7 -3
- package/dist/cjs/wkt/gen/google/protobuf/empty_pb.js +4 -4
- package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -3
- package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.js +4 -4
- package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.d.ts +12 -3
- package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.js +4 -4
- package/dist/cjs/wkt/gen/google/protobuf/struct_pb.d.ts +25 -8
- package/dist/cjs/wkt/gen/google/protobuf/struct_pb.js +9 -9
- package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -3
- package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.js +4 -4
- package/dist/cjs/wkt/gen/google/protobuf/type_pb.d.ts +165 -16
- package/dist/cjs/wkt/gen/google/protobuf/type_pb.js +15 -15
- package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.d.ts +55 -19
- package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.js +20 -20
- package/dist/cjs/wkt/timestamp.js +1 -2
- package/dist/esm/clone.d.ts +1 -1
- package/dist/esm/clone.js +9 -17
- package/dist/esm/codegenv1/embed.js +26 -26
- package/dist/esm/codegenv1/enum.d.ts +2 -1
- package/dist/esm/codegenv1/file.js +2 -2
- package/dist/esm/codegenv1/message.d.ts +2 -1
- package/dist/esm/codegenv1/scalar.d.ts +4 -0
- package/dist/esm/codegenv1/scalar.js +28 -0
- package/dist/esm/codegenv1/symbols.d.ts +10 -0
- package/dist/esm/codegenv1/symbols.js +2 -0
- package/dist/esm/codegenv1/types.d.ts +7 -5
- package/dist/esm/codegenv1/types.js +2 -1
- package/dist/esm/create.d.ts +1 -1
- package/dist/esm/create.js +47 -20
- package/dist/esm/equals.d.ts +1 -1
- package/dist/esm/equals.js +8 -15
- package/dist/esm/from-binary.d.ts +2 -2
- package/dist/esm/from-binary.js +17 -14
- package/dist/esm/from-json.d.ts +14 -6
- package/dist/esm/from-json.js +49 -55
- package/dist/esm/is-message.d.ts +1 -1
- package/dist/esm/is-message.js +3 -3
- package/dist/esm/reflect/guard.js +4 -4
- package/dist/esm/reflect/reflect-types.d.ts +13 -80
- package/dist/esm/reflect/reflect-types.js +0 -1
- package/dist/esm/reflect/reflect.d.ts +29 -18
- package/dist/esm/reflect/reflect.js +185 -80
- package/dist/esm/reflect/scalar.d.ts +1 -1
- package/dist/esm/reflect/unsafe.d.ts +0 -16
- package/dist/esm/reflect/unsafe.js +0 -16
- package/dist/esm/registry.d.ts +18 -2
- package/dist/esm/registry.js +60 -59
- package/dist/esm/to-binary.d.ts +1 -1
- package/dist/esm/to-binary.js +2 -2
- package/dist/esm/to-json.d.ts +14 -4
- package/dist/esm/to-json.js +24 -12
- package/dist/esm/types.d.ts +9 -0
- package/dist/esm/wire/binary-encoding.js +30 -9
- package/dist/esm/wkt/any.d.ts +7 -7
- package/dist/esm/wkt/any.js +6 -6
- package/dist/esm/wkt/gen/google/protobuf/any_pb.d.ts +9 -3
- package/dist/esm/wkt/gen/google/protobuf/any_pb.js +3 -3
- package/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +88 -9
- package/dist/esm/wkt/gen/google/protobuf/api_pb.js +9 -9
- package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +107 -11
- package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.js +11 -11
- package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +1005 -92
- package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +84 -84
- package/dist/esm/wkt/gen/google/protobuf/duration_pb.d.ts +7 -3
- package/dist/esm/wkt/gen/google/protobuf/duration_pb.js +3 -3
- package/dist/esm/wkt/gen/google/protobuf/empty_pb.d.ts +7 -3
- package/dist/esm/wkt/gen/google/protobuf/empty_pb.js +3 -3
- package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -3
- package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.js +3 -3
- package/dist/esm/wkt/gen/google/protobuf/source_context_pb.d.ts +12 -3
- package/dist/esm/wkt/gen/google/protobuf/source_context_pb.js +3 -3
- package/dist/esm/wkt/gen/google/protobuf/struct_pb.d.ts +25 -8
- package/dist/esm/wkt/gen/google/protobuf/struct_pb.js +8 -8
- package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -3
- package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js +3 -3
- package/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +165 -16
- package/dist/esm/wkt/gen/google/protobuf/type_pb.js +16 -16
- package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.d.ts +55 -19
- package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.js +19 -19
- package/dist/esm/wkt/timestamp.js +2 -3
- package/package.json +2 -2
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Message } from "../types.js";
|
|
2
2
|
import type { DescEnum, DescExtension, DescField, DescFile, DescMessage, DescMethod, DescService } from "../descriptors.js";
|
|
3
|
+
import type { JsonValue } from "../json-value.js";
|
|
3
4
|
/**
|
|
4
5
|
* Describes a protobuf source file.
|
|
5
6
|
*
|
|
@@ -14,9 +15,9 @@ export type GenDescFile = DescFile;
|
|
|
14
15
|
*
|
|
15
16
|
* @private
|
|
16
17
|
*/
|
|
17
|
-
export type GenDescMessage<RuntimeShape extends Message> = Omit<DescMessage, "field"> & {
|
|
18
|
+
export type GenDescMessage<RuntimeShape extends Message, JsonType = JsonValue> = Omit<DescMessage, "field"> & {
|
|
18
19
|
field: Record<MessageFieldNames<RuntimeShape>, DescField>;
|
|
19
|
-
} &
|
|
20
|
+
} & brandv1<RuntimeShape, JsonType>;
|
|
20
21
|
/**
|
|
21
22
|
* Describes an enumeration in a protobuf source file.
|
|
22
23
|
*
|
|
@@ -25,7 +26,7 @@ export type GenDescMessage<RuntimeShape extends Message> = Omit<DescMessage, "fi
|
|
|
25
26
|
*
|
|
26
27
|
* @private
|
|
27
28
|
*/
|
|
28
|
-
export type GenDescEnum<RuntimeShape> = DescEnum &
|
|
29
|
+
export type GenDescEnum<RuntimeShape, JsonType extends JsonValue = JsonValue> = DescEnum & brandv1<RuntimeShape, JsonType>;
|
|
29
30
|
/**
|
|
30
31
|
* Describes an extension in a protobuf source file.
|
|
31
32
|
*
|
|
@@ -34,7 +35,7 @@ export type GenDescEnum<RuntimeShape> = DescEnum & brand<RuntimeShape>;
|
|
|
34
35
|
*
|
|
35
36
|
* @private
|
|
36
37
|
*/
|
|
37
|
-
export type GenDescExtension<Extendee extends Message = Message, RuntimeShape = unknown> = DescExtension &
|
|
38
|
+
export type GenDescExtension<Extendee extends Message = Message, RuntimeShape = unknown> = DescExtension & brandv1<Extendee, RuntimeShape>;
|
|
38
39
|
/**
|
|
39
40
|
* Describes a service declaration in a protobuf source file.
|
|
40
41
|
*
|
|
@@ -52,7 +53,8 @@ export type GenDescService<RuntimeShape extends GenDescServiceMethods> = Omit<De
|
|
|
52
53
|
* @private
|
|
53
54
|
*/
|
|
54
55
|
export type GenDescServiceMethods = Record<string, Pick<DescMethod, "input" | "output" | "methodKind">>;
|
|
55
|
-
declare class
|
|
56
|
+
declare class brandv1<A, B = unknown> {
|
|
57
|
+
protected v: "codegenv1";
|
|
56
58
|
protected a: A | boolean;
|
|
57
59
|
protected b: B | boolean;
|
|
58
60
|
}
|
|
@@ -11,8 +11,9 @@
|
|
|
11
11
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
|
-
class
|
|
14
|
+
class brandv1 {
|
|
15
15
|
constructor() {
|
|
16
|
+
this.v = "codegenv1";
|
|
16
17
|
this.a = false;
|
|
17
18
|
this.b = false;
|
|
18
19
|
}
|
package/dist/esm/create.d.ts
CHANGED
|
@@ -6,4 +6,4 @@ import type { MessageInitShape, MessageShape } from "./types.js";
|
|
|
6
6
|
* The second argument is an optional initializer object, where all fields are
|
|
7
7
|
* optional.
|
|
8
8
|
*/
|
|
9
|
-
export declare function create<Desc extends DescMessage>(
|
|
9
|
+
export declare function create<Desc extends DescMessage>(schema: Desc, init?: MessageInitShape<Desc>): MessageShape<Desc>;
|
package/dist/esm/create.js
CHANGED
|
@@ -20,6 +20,8 @@ import { unsafeGet, unsafeOneofCase, unsafeSet } from "./reflect/unsafe.js";
|
|
|
20
20
|
import { isWrapperDesc } from "./wkt/wrappers.js";
|
|
21
21
|
// bootstrap-inject google.protobuf.Edition.EDITION_PROTO3: const $name: Edition.$localName = $number;
|
|
22
22
|
const EDITION_PROTO3 = 999;
|
|
23
|
+
// bootstrap-inject google.protobuf.Edition.EDITION_PROTO2: const $name: Edition.$localName = $number;
|
|
24
|
+
const EDITION_PROTO2 = 998;
|
|
23
25
|
// bootstrap-inject google.protobuf.FeatureSet.FieldPresence.IMPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;
|
|
24
26
|
const IMPLICIT = 2;
|
|
25
27
|
/**
|
|
@@ -28,13 +30,13 @@ const IMPLICIT = 2;
|
|
|
28
30
|
* The second argument is an optional initializer object, where all fields are
|
|
29
31
|
* optional.
|
|
30
32
|
*/
|
|
31
|
-
export function create(
|
|
32
|
-
if (isMessage(init,
|
|
33
|
+
export function create(schema, init) {
|
|
34
|
+
if (isMessage(init, schema)) {
|
|
33
35
|
return init;
|
|
34
36
|
}
|
|
35
|
-
const message = createZeroMessage(
|
|
37
|
+
const message = createZeroMessage(schema);
|
|
36
38
|
if (init !== undefined) {
|
|
37
|
-
initMessage(
|
|
39
|
+
initMessage(schema, message, init);
|
|
38
40
|
}
|
|
39
41
|
return message;
|
|
40
42
|
}
|
|
@@ -63,12 +65,7 @@ function initMessage(messageDesc, message, init) {
|
|
|
63
65
|
// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- no need to convert enum
|
|
64
66
|
switch (field.fieldKind) {
|
|
65
67
|
case "message":
|
|
66
|
-
|
|
67
|
-
value = initScalar(field.message.fields[0], value);
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
value = toMessage(value, field.message);
|
|
71
|
-
}
|
|
68
|
+
value = toMessage(field, value);
|
|
72
69
|
break;
|
|
73
70
|
case "scalar":
|
|
74
71
|
value = initScalar(field, value);
|
|
@@ -96,7 +93,7 @@ function initMap(field, value) {
|
|
|
96
93
|
return convertObjectValues(value, toU8Arr);
|
|
97
94
|
}
|
|
98
95
|
if (field.mapKind == "message") {
|
|
99
|
-
return convertObjectValues(value, (val) => toMessage(
|
|
96
|
+
return convertObjectValues(value, (val) => toMessage(field, val));
|
|
100
97
|
}
|
|
101
98
|
}
|
|
102
99
|
return value;
|
|
@@ -107,14 +104,29 @@ function initList(field, value) {
|
|
|
107
104
|
return value.map(toU8Arr);
|
|
108
105
|
}
|
|
109
106
|
if (field.listKind == "message") {
|
|
110
|
-
return value.map((item) => toMessage(
|
|
107
|
+
return value.map((item) => toMessage(field, item));
|
|
111
108
|
}
|
|
112
109
|
}
|
|
113
110
|
return value;
|
|
114
111
|
}
|
|
115
|
-
function toMessage(
|
|
116
|
-
if (
|
|
117
|
-
|
|
112
|
+
function toMessage(field, value) {
|
|
113
|
+
if (field.fieldKind == "message" &&
|
|
114
|
+
!field.oneof &&
|
|
115
|
+
isWrapperDesc(field.message)) {
|
|
116
|
+
// Types from google/protobuf/wrappers.proto are unwrapped when used in
|
|
117
|
+
// a singular field that is not part of a oneof group.
|
|
118
|
+
return initScalar(field.message.fields[0], value);
|
|
119
|
+
}
|
|
120
|
+
if (isObject(value)) {
|
|
121
|
+
if (field.message.typeName == "google.protobuf.Struct" &&
|
|
122
|
+
field.parent.typeName !== "google.protobuf.Value") {
|
|
123
|
+
// google.protobuf.Struct is represented with JsonObject when used in a
|
|
124
|
+
// field, except when used in google.protobuf.Value.
|
|
125
|
+
return value;
|
|
126
|
+
}
|
|
127
|
+
if (!isMessage(value, field.message)) {
|
|
128
|
+
return create(field.message, value);
|
|
129
|
+
}
|
|
118
130
|
}
|
|
119
131
|
return value;
|
|
120
132
|
}
|
|
@@ -136,9 +148,7 @@ const messagePrototypes = new WeakMap();
|
|
|
136
148
|
*/
|
|
137
149
|
function createZeroMessage(desc) {
|
|
138
150
|
let msg;
|
|
139
|
-
if (desc
|
|
140
|
-
// we special case proto3: since it does not have default values, we let
|
|
141
|
-
// the `optional` keyword generate an optional property.
|
|
151
|
+
if (!needsPrototypeChain(desc)) {
|
|
142
152
|
msg = {};
|
|
143
153
|
for (const member of desc.members) {
|
|
144
154
|
if (member.kind == "oneof" || member.presence == IMPLICIT) {
|
|
@@ -147,8 +157,7 @@ function createZeroMessage(desc) {
|
|
|
147
157
|
}
|
|
148
158
|
}
|
|
149
159
|
else {
|
|
150
|
-
//
|
|
151
|
-
// via the prototype chain
|
|
160
|
+
// Support default values and track presence via the prototype chain
|
|
152
161
|
const cached = messagePrototypes.get(desc);
|
|
153
162
|
let prototype;
|
|
154
163
|
let members;
|
|
@@ -200,6 +209,24 @@ function createZeroMessage(desc) {
|
|
|
200
209
|
msg.$typeName = desc.typeName;
|
|
201
210
|
return msg;
|
|
202
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* Do we need the prototype chain to track field presence?
|
|
214
|
+
*/
|
|
215
|
+
function needsPrototypeChain(desc) {
|
|
216
|
+
switch (desc.file.edition) {
|
|
217
|
+
case EDITION_PROTO3:
|
|
218
|
+
// proto3 always uses implicit presence, we never need the prototype chain.
|
|
219
|
+
return false;
|
|
220
|
+
case EDITION_PROTO2:
|
|
221
|
+
// proto2 never uses implicit presence, we always need the prototype chain.
|
|
222
|
+
return true;
|
|
223
|
+
default:
|
|
224
|
+
// If a message uses scalar or enum fields with explicit presence, we need
|
|
225
|
+
// the prototype chain to track presence. This rule does not apply to fields
|
|
226
|
+
// in a oneof group - they use a different mechanism to track presence.
|
|
227
|
+
return desc.fields.some((f) => f.presence != IMPLICIT && f.fieldKind != "message" && !f.oneof);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
203
230
|
/**
|
|
204
231
|
* Returns a zero value for oneof groups, and for every field kind except
|
|
205
232
|
* messages. Scalar and enum fields can have default values.
|
package/dist/esm/equals.d.ts
CHANGED
|
@@ -6,4 +6,4 @@ import type { DescMessage } from "./descriptors.js";
|
|
|
6
6
|
* Note that this function disregards extensions and unknown fields, and that
|
|
7
7
|
* NaN is not equal NaN, following the IEEE standard.
|
|
8
8
|
*/
|
|
9
|
-
export declare function equals<Desc extends DescMessage>(
|
|
9
|
+
export declare function equals<Desc extends DescMessage>(schema: Desc, a: MessageShape<Desc>, b: MessageShape<Desc>): boolean;
|
package/dist/esm/equals.js
CHANGED
|
@@ -19,15 +19,14 @@ import { reflect } from "./reflect/reflect.js";
|
|
|
19
19
|
* Note that this function disregards extensions and unknown fields, and that
|
|
20
20
|
* NaN is not equal NaN, following the IEEE standard.
|
|
21
21
|
*/
|
|
22
|
-
export function equals(
|
|
23
|
-
if (a.$typeName !=
|
|
24
|
-
b.$typeName != messageDesc.typeName) {
|
|
22
|
+
export function equals(schema, a, b) {
|
|
23
|
+
if (a.$typeName != schema.typeName || b.$typeName != schema.typeName) {
|
|
25
24
|
return false;
|
|
26
25
|
}
|
|
27
26
|
if (a === b) {
|
|
28
27
|
return true;
|
|
29
28
|
}
|
|
30
|
-
return reflectEquals(reflect(
|
|
29
|
+
return reflectEquals(reflect(schema, a), reflect(schema, b));
|
|
31
30
|
}
|
|
32
31
|
function reflectEquals(a, b) {
|
|
33
32
|
for (const f of a.fields) {
|
|
@@ -76,15 +75,11 @@ function fieldEquals(f, a, b) {
|
|
|
76
75
|
case "enum":
|
|
77
76
|
return false;
|
|
78
77
|
case "message":
|
|
79
|
-
// TODO fix type error
|
|
80
|
-
// @ts-expect-error TODO
|
|
81
78
|
if (!reflectEquals(va, vb)) {
|
|
82
79
|
return false;
|
|
83
80
|
}
|
|
84
81
|
break;
|
|
85
82
|
case "scalar":
|
|
86
|
-
// TODO fix type error
|
|
87
|
-
// @ts-expect-error TODO
|
|
88
83
|
if (!scalarEquals(f.scalar, va, vb)) {
|
|
89
84
|
return false;
|
|
90
85
|
}
|
|
@@ -100,23 +95,21 @@ function fieldEquals(f, a, b) {
|
|
|
100
95
|
return false;
|
|
101
96
|
}
|
|
102
97
|
for (let i = 0; i < la.size; i++) {
|
|
103
|
-
|
|
98
|
+
const va = la.get(i);
|
|
99
|
+
const vb = lb.get(i);
|
|
100
|
+
if (va === vb) {
|
|
104
101
|
continue;
|
|
105
102
|
}
|
|
106
103
|
switch (f.listKind) {
|
|
107
104
|
case "enum":
|
|
108
105
|
return false;
|
|
109
106
|
case "message":
|
|
110
|
-
|
|
111
|
-
// @ts-expect-error TODO
|
|
112
|
-
if (!reflectEquals(la.get(i), lb.get(i))) {
|
|
107
|
+
if (!reflectEquals(va, vb)) {
|
|
113
108
|
return false;
|
|
114
109
|
}
|
|
115
110
|
break;
|
|
116
111
|
case "scalar":
|
|
117
|
-
|
|
118
|
-
// @ts-expect-error TODO
|
|
119
|
-
if (!scalarEquals(f.scalar, la.get(i), lb.get(i))) {
|
|
112
|
+
if (!scalarEquals(f.scalar, va, vb)) {
|
|
120
113
|
return false;
|
|
121
114
|
}
|
|
122
115
|
break;
|
|
@@ -17,7 +17,7 @@ export interface BinaryReadOptions {
|
|
|
17
17
|
/**
|
|
18
18
|
* Parse serialized binary data.
|
|
19
19
|
*/
|
|
20
|
-
export declare function fromBinary<Desc extends DescMessage>(
|
|
20
|
+
export declare function fromBinary<Desc extends DescMessage>(schema: Desc, bytes: Uint8Array, options?: Partial<BinaryReadOptions>): MessageShape<Desc>;
|
|
21
21
|
/**
|
|
22
22
|
* Parse from binary data, merging fields.
|
|
23
23
|
*
|
|
@@ -27,7 +27,7 @@ export declare function fromBinary<Desc extends DescMessage>(messageDesc: Desc,
|
|
|
27
27
|
* If a message field is already present, it will be merged with the
|
|
28
28
|
* new data.
|
|
29
29
|
*/
|
|
30
|
-
export declare function mergeFromBinary<Desc extends DescMessage>(
|
|
30
|
+
export declare function mergeFromBinary<Desc extends DescMessage>(schema: Desc, target: MessageShape<Desc>, bytes: Uint8Array, options?: Partial<BinaryReadOptions>): MessageShape<Desc>;
|
|
31
31
|
/**
|
|
32
32
|
* @private
|
|
33
33
|
*/
|
package/dist/esm/from-binary.js
CHANGED
|
@@ -25,8 +25,8 @@ function makeReadOptions(options) {
|
|
|
25
25
|
/**
|
|
26
26
|
* Parse serialized binary data.
|
|
27
27
|
*/
|
|
28
|
-
export function fromBinary(
|
|
29
|
-
const msg = reflect(
|
|
28
|
+
export function fromBinary(schema, bytes, options) {
|
|
29
|
+
const msg = reflect(schema, undefined, false);
|
|
30
30
|
readMessage(msg, new BinaryReader(bytes), makeReadOptions(options), false, bytes.byteLength);
|
|
31
31
|
return msg.message;
|
|
32
32
|
}
|
|
@@ -39,8 +39,9 @@ export function fromBinary(messageDesc, bytes, options) {
|
|
|
39
39
|
* If a message field is already present, it will be merged with the
|
|
40
40
|
* new data.
|
|
41
41
|
*/
|
|
42
|
-
export function mergeFromBinary(
|
|
43
|
-
readMessage(reflect(
|
|
42
|
+
export function mergeFromBinary(schema, target, bytes, options) {
|
|
43
|
+
readMessage(reflect(schema, target, false), new BinaryReader(bytes), makeReadOptions(options), false, bytes.byteLength);
|
|
44
|
+
return target;
|
|
44
45
|
}
|
|
45
46
|
/**
|
|
46
47
|
* If `delimited` is false, read the length given in `lengthOrDelimitedFieldNo`.
|
|
@@ -94,15 +95,16 @@ export function readField(message, reader, field, wireType, options) {
|
|
|
94
95
|
message.set(field, readMessageField(reader, options, field, message.get(field)));
|
|
95
96
|
break;
|
|
96
97
|
case "list":
|
|
97
|
-
readListField(
|
|
98
|
+
readListField(reader, wireType, message.get(field), options);
|
|
98
99
|
break;
|
|
99
100
|
case "map":
|
|
100
|
-
readMapEntry(
|
|
101
|
+
readMapEntry(reader, message.get(field), options);
|
|
101
102
|
break;
|
|
102
103
|
}
|
|
103
104
|
}
|
|
104
105
|
// Read a map field, expecting key field = 1, value field = 2
|
|
105
|
-
function readMapEntry(
|
|
106
|
+
function readMapEntry(reader, map, options) {
|
|
107
|
+
const field = map.field();
|
|
106
108
|
let key, val;
|
|
107
109
|
const end = reader.pos + reader.uint32();
|
|
108
110
|
while (reader.pos < end) {
|
|
@@ -138,16 +140,17 @@ function readMapEntry(message, field, reader, options) {
|
|
|
138
140
|
val = field.enum.values[0].number;
|
|
139
141
|
break;
|
|
140
142
|
case "message":
|
|
141
|
-
val = reflect(field.message);
|
|
143
|
+
val = reflect(field.message, undefined, false);
|
|
142
144
|
break;
|
|
143
145
|
}
|
|
144
146
|
}
|
|
145
|
-
|
|
147
|
+
map.set(key, val);
|
|
146
148
|
}
|
|
147
|
-
function readListField(
|
|
149
|
+
function readListField(reader, wireType, list, options) {
|
|
148
150
|
var _a;
|
|
151
|
+
const field = list.field();
|
|
149
152
|
if (field.listKind === "message") {
|
|
150
|
-
|
|
153
|
+
list.add(readMessageField(reader, options, field));
|
|
151
154
|
return;
|
|
152
155
|
}
|
|
153
156
|
const scalarType = (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32;
|
|
@@ -155,17 +158,17 @@ function readListField(message, reader, options, field, wireType) {
|
|
|
155
158
|
scalarType != ScalarType.STRING &&
|
|
156
159
|
scalarType != ScalarType.BYTES;
|
|
157
160
|
if (!packed) {
|
|
158
|
-
|
|
161
|
+
list.add(readScalar(reader, scalarType));
|
|
159
162
|
return;
|
|
160
163
|
}
|
|
161
164
|
const e = reader.uint32() + reader.pos;
|
|
162
165
|
while (reader.pos < e) {
|
|
163
|
-
|
|
166
|
+
list.add(readScalar(reader, scalarType));
|
|
164
167
|
}
|
|
165
168
|
}
|
|
166
169
|
function readMessageField(reader, options, field, mergeMessage) {
|
|
167
170
|
const delimited = field.delimitedEncoding;
|
|
168
|
-
const message = mergeMessage !== null && mergeMessage !== void 0 ? mergeMessage : reflect(field.message);
|
|
171
|
+
const message = mergeMessage !== null && mergeMessage !== void 0 ? mergeMessage : reflect(field.message, undefined, false);
|
|
169
172
|
readMessage(message, reader, options, delimited, delimited ? field.number : reader.uint32());
|
|
170
173
|
return message;
|
|
171
174
|
}
|
package/dist/esm/from-json.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type DescMessage } from "./descriptors.js";
|
|
1
|
+
import { type DescEnum, type DescMessage } from "./descriptors.js";
|
|
2
2
|
import type { JsonValue } from "./json-value.js";
|
|
3
3
|
import type { Registry } from "./registry.js";
|
|
4
|
-
import type { MessageShape } from "./types.js";
|
|
4
|
+
import type { EnumJsonType, EnumShape, MessageShape } from "./types.js";
|
|
5
5
|
/**
|
|
6
6
|
* Options for parsing JSON data.
|
|
7
7
|
*/
|
|
@@ -21,7 +21,7 @@ export interface JsonReadOptions {
|
|
|
21
21
|
/**
|
|
22
22
|
* Parse a message from a JSON string.
|
|
23
23
|
*/
|
|
24
|
-
export declare function fromJsonString<Desc extends DescMessage>(
|
|
24
|
+
export declare function fromJsonString<Desc extends DescMessage>(schema: Desc, json: string, options?: Partial<JsonReadOptions>): MessageShape<Desc>;
|
|
25
25
|
/**
|
|
26
26
|
* Parse a message from a JSON string, merging fields.
|
|
27
27
|
*
|
|
@@ -31,11 +31,11 @@ export declare function fromJsonString<Desc extends DescMessage>(messageDesc: De
|
|
|
31
31
|
* If a message field is already present, it will be merged with the
|
|
32
32
|
* new data.
|
|
33
33
|
*/
|
|
34
|
-
export declare function mergeFromJsonString<Desc extends DescMessage>(
|
|
34
|
+
export declare function mergeFromJsonString<Desc extends DescMessage>(schema: Desc, target: MessageShape<Desc>, json: string, options?: Partial<JsonReadOptions>): MessageShape<Desc>;
|
|
35
35
|
/**
|
|
36
36
|
* Parse a message from a JSON value.
|
|
37
37
|
*/
|
|
38
|
-
export declare function fromJson<Desc extends DescMessage>(
|
|
38
|
+
export declare function fromJson<Desc extends DescMessage>(schema: Desc, json: JsonValue, options?: Partial<JsonReadOptions>): MessageShape<Desc>;
|
|
39
39
|
/**
|
|
40
40
|
* Parse a message from a JSON value, merging fields.
|
|
41
41
|
*
|
|
@@ -45,4 +45,12 @@ export declare function fromJson<Desc extends DescMessage>(messageDesc: Desc, js
|
|
|
45
45
|
* If a message field is already present, it will be merged with the
|
|
46
46
|
* new data.
|
|
47
47
|
*/
|
|
48
|
-
export declare function mergeFromJson<Desc extends DescMessage>(
|
|
48
|
+
export declare function mergeFromJson<Desc extends DescMessage>(schema: Desc, target: MessageShape<Desc>, json: JsonValue, options?: Partial<JsonReadOptions>): MessageShape<Desc>;
|
|
49
|
+
/**
|
|
50
|
+
* Parses an enum value from JSON.
|
|
51
|
+
*/
|
|
52
|
+
export declare function enumFromJson<Desc extends DescEnum>(descEnum: Desc, json: EnumJsonType<Desc>): EnumShape<Desc>;
|
|
53
|
+
/**
|
|
54
|
+
* Is the given value a JSON enum value?
|
|
55
|
+
*/
|
|
56
|
+
export declare function isEnumJson<Desc extends DescEnum>(descEnum: Desc, value: unknown): value is EnumJsonType<Desc>;
|
package/dist/esm/from-json.js
CHANGED
|
@@ -20,7 +20,7 @@ import { FieldError, isFieldError } from "./reflect/error.js";
|
|
|
20
20
|
import { formatVal } from "./reflect/reflect-check.js";
|
|
21
21
|
import { scalarZeroValue } from "./reflect/scalar.js";
|
|
22
22
|
import { base64Decode } from "./wire/base64-encoding.js";
|
|
23
|
-
import { isWrapperDesc, anyPack,
|
|
23
|
+
import { isWrapperDesc, anyPack, ListValueSchema, NullValue, StructSchema, ValueSchema, } from "./wkt/index.js";
|
|
24
24
|
import { createExtensionContainer, setExtension } from "./extensions.js";
|
|
25
25
|
// Default options for parsing JSON.
|
|
26
26
|
const jsonReadDefaults = {
|
|
@@ -32,8 +32,8 @@ function makeReadOptions(options) {
|
|
|
32
32
|
/**
|
|
33
33
|
* Parse a message from a JSON string.
|
|
34
34
|
*/
|
|
35
|
-
export function fromJsonString(
|
|
36
|
-
return fromJson(
|
|
35
|
+
export function fromJsonString(schema, json, options) {
|
|
36
|
+
return fromJson(schema, parseJsonString(json, schema.typeName), options);
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
39
|
* Parse a message from a JSON string, merging fields.
|
|
@@ -44,14 +44,14 @@ export function fromJsonString(messageDesc, json, options) {
|
|
|
44
44
|
* If a message field is already present, it will be merged with the
|
|
45
45
|
* new data.
|
|
46
46
|
*/
|
|
47
|
-
export function mergeFromJsonString(
|
|
48
|
-
mergeFromJson(
|
|
47
|
+
export function mergeFromJsonString(schema, target, json, options) {
|
|
48
|
+
return mergeFromJson(schema, target, parseJsonString(json, schema.typeName), options);
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
51
|
* Parse a message from a JSON value.
|
|
52
52
|
*/
|
|
53
|
-
export function fromJson(
|
|
54
|
-
const msg = reflect(
|
|
53
|
+
export function fromJson(schema, json, options) {
|
|
54
|
+
const msg = reflect(schema);
|
|
55
55
|
try {
|
|
56
56
|
readMessage(msg, json, makeReadOptions(options));
|
|
57
57
|
}
|
|
@@ -75,9 +75,9 @@ export function fromJson(messageDesc, json, options) {
|
|
|
75
75
|
* If a message field is already present, it will be merged with the
|
|
76
76
|
* new data.
|
|
77
77
|
*/
|
|
78
|
-
export function mergeFromJson(
|
|
78
|
+
export function mergeFromJson(schema, target, json, options) {
|
|
79
79
|
try {
|
|
80
|
-
readMessage(reflect(
|
|
80
|
+
readMessage(reflect(schema, target), json, makeReadOptions(options));
|
|
81
81
|
}
|
|
82
82
|
catch (e) {
|
|
83
83
|
if (isFieldError(e)) {
|
|
@@ -88,6 +88,23 @@ export function mergeFromJson(messageDesc, target, json, options) {
|
|
|
88
88
|
}
|
|
89
89
|
throw e;
|
|
90
90
|
}
|
|
91
|
+
return target;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Parses an enum value from JSON.
|
|
95
|
+
*/
|
|
96
|
+
export function enumFromJson(descEnum, json) {
|
|
97
|
+
const val = readEnum(descEnum, json, false, false);
|
|
98
|
+
if (val === tokenIgnoredUnknownEnum) {
|
|
99
|
+
throw new Error(`cannot decode ${String(descEnum)} from JSON: ${formatVal(json)}`);
|
|
100
|
+
}
|
|
101
|
+
return val;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Is the given value a JSON enum value?
|
|
105
|
+
*/
|
|
106
|
+
export function isEnumJson(descEnum, value) {
|
|
107
|
+
return undefined !== descEnum.values.find((v) => v.name === value);
|
|
91
108
|
}
|
|
92
109
|
function readMessage(msg, json, opts) {
|
|
93
110
|
var _a;
|
|
@@ -146,17 +163,18 @@ function readField(msg, field, json, opts) {
|
|
|
146
163
|
readMessageField(msg, field, json, opts);
|
|
147
164
|
break;
|
|
148
165
|
case "list":
|
|
149
|
-
readListField(msg
|
|
166
|
+
readListField(msg.get(field), json, opts);
|
|
150
167
|
break;
|
|
151
168
|
case "map":
|
|
152
|
-
readMapField(msg
|
|
169
|
+
readMapField(msg.get(field), json, opts);
|
|
153
170
|
break;
|
|
154
171
|
}
|
|
155
172
|
}
|
|
156
|
-
function readMapField(
|
|
173
|
+
function readMapField(map, json, opts) {
|
|
157
174
|
if (json === null) {
|
|
158
175
|
return;
|
|
159
176
|
}
|
|
177
|
+
const field = map.field();
|
|
160
178
|
if (typeof json != "object" || Array.isArray(json)) {
|
|
161
179
|
throw new FieldError(field, "expected object, got " + formatVal(json));
|
|
162
180
|
}
|
|
@@ -164,45 +182,32 @@ function readMapField(msg, field, json, opts) {
|
|
|
164
182
|
if (jsonMapValue === null) {
|
|
165
183
|
throw new FieldError(field, "map value must not be null");
|
|
166
184
|
}
|
|
167
|
-
|
|
185
|
+
let value;
|
|
168
186
|
switch (field.mapKind) {
|
|
169
187
|
case "message":
|
|
170
188
|
const msgValue = reflect(field.message);
|
|
171
189
|
readMessage(msgValue, jsonMapValue, opts);
|
|
172
|
-
|
|
173
|
-
// @ts-expect-error TODO
|
|
174
|
-
const err = msg.setMapEntry(field, key, msgValue);
|
|
175
|
-
if (err) {
|
|
176
|
-
throw err;
|
|
177
|
-
}
|
|
190
|
+
value = msgValue;
|
|
178
191
|
break;
|
|
179
192
|
case "enum":
|
|
180
|
-
|
|
181
|
-
if (
|
|
182
|
-
|
|
183
|
-
// @ts-expect-error TODO
|
|
184
|
-
const err = msg.setMapEntry(field, key, enumValue);
|
|
185
|
-
if (err) {
|
|
186
|
-
throw err;
|
|
187
|
-
}
|
|
193
|
+
value = readEnum(field.enum, jsonMapValue, opts.ignoreUnknownFields, true);
|
|
194
|
+
if (value === tokenIgnoredUnknownEnum) {
|
|
195
|
+
return;
|
|
188
196
|
}
|
|
189
197
|
break;
|
|
190
198
|
case "scalar":
|
|
191
|
-
|
|
192
|
-
// TODO fix types
|
|
193
|
-
// @ts-expect-error TODO
|
|
194
|
-
key, scalarFromJson(field, jsonMapValue, true));
|
|
195
|
-
if (err2) {
|
|
196
|
-
throw err2;
|
|
197
|
-
}
|
|
199
|
+
value = scalarFromJson(field, jsonMapValue, true);
|
|
198
200
|
break;
|
|
199
201
|
}
|
|
202
|
+
const key = mapKeyFromJson(field.mapKey, jsonMapKey);
|
|
203
|
+
map.set(key, value);
|
|
200
204
|
}
|
|
201
205
|
}
|
|
202
|
-
function readListField(
|
|
206
|
+
function readListField(list, json, opts) {
|
|
203
207
|
if (json === null) {
|
|
204
208
|
return;
|
|
205
209
|
}
|
|
210
|
+
const field = list.field();
|
|
206
211
|
if (!Array.isArray(json)) {
|
|
207
212
|
throw new FieldError(field, "expected Array, got " + formatVal(json));
|
|
208
213
|
}
|
|
@@ -214,19 +219,16 @@ function readListField(msg, field, json, opts) {
|
|
|
214
219
|
case "message":
|
|
215
220
|
const msgValue = reflect(field.message);
|
|
216
221
|
readMessage(msgValue, jsonItem, opts);
|
|
217
|
-
|
|
222
|
+
list.add(msgValue);
|
|
218
223
|
break;
|
|
219
224
|
case "enum":
|
|
220
225
|
const enumValue = readEnum(field.enum, jsonItem, opts.ignoreUnknownFields, true);
|
|
221
226
|
if (enumValue !== tokenIgnoredUnknownEnum) {
|
|
222
|
-
|
|
227
|
+
list.add(enumValue);
|
|
223
228
|
}
|
|
224
229
|
break;
|
|
225
230
|
case "scalar":
|
|
226
|
-
|
|
227
|
-
if (err) {
|
|
228
|
-
throw err;
|
|
229
|
-
}
|
|
231
|
+
list.add(scalarFromJson(field, jsonItem, true));
|
|
230
232
|
break;
|
|
231
233
|
}
|
|
232
234
|
}
|
|
@@ -255,12 +257,7 @@ function readScalarField(msg, field, json) {
|
|
|
255
257
|
msg.clear(field);
|
|
256
258
|
}
|
|
257
259
|
else {
|
|
258
|
-
|
|
259
|
-
// @ts-expect-error TODO
|
|
260
|
-
const err = msg.set(field, scalarValue);
|
|
261
|
-
if (err) {
|
|
262
|
-
throw err;
|
|
263
|
-
}
|
|
260
|
+
msg.set(field, scalarValue);
|
|
264
261
|
}
|
|
265
262
|
}
|
|
266
263
|
const tokenIgnoredUnknownEnum = Symbol();
|
|
@@ -460,10 +457,7 @@ function tryWktFromJson(msg, jsonValue, opts) {
|
|
|
460
457
|
msg.clear(valueField);
|
|
461
458
|
}
|
|
462
459
|
else {
|
|
463
|
-
|
|
464
|
-
if (err) {
|
|
465
|
-
throw err;
|
|
466
|
-
}
|
|
460
|
+
msg.set(valueField, scalarFromJson(valueField, jsonValue, true));
|
|
467
461
|
}
|
|
468
462
|
return true;
|
|
469
463
|
}
|
|
@@ -574,7 +568,7 @@ function structFromJson(struct, json) {
|
|
|
574
568
|
throw new Error(`cannot decode message ${struct.$typeName} from JSON ${formatVal(json)}`);
|
|
575
569
|
}
|
|
576
570
|
for (const [k, v] of Object.entries(json)) {
|
|
577
|
-
const parsedV = create(
|
|
571
|
+
const parsedV = create(ValueSchema);
|
|
578
572
|
valueFromJson(parsedV, v);
|
|
579
573
|
struct.fields[k] = parsedV;
|
|
580
574
|
}
|
|
@@ -595,12 +589,12 @@ function valueFromJson(value, json) {
|
|
|
595
589
|
value.kind = { case: "nullValue", value: NullValue.NULL_VALUE };
|
|
596
590
|
}
|
|
597
591
|
else if (Array.isArray(json)) {
|
|
598
|
-
const listValue = create(
|
|
592
|
+
const listValue = create(ListValueSchema);
|
|
599
593
|
listValueFromJson(listValue, json);
|
|
600
594
|
value.kind = { case: "listValue", value: listValue };
|
|
601
595
|
}
|
|
602
596
|
else {
|
|
603
|
-
const struct = create(
|
|
597
|
+
const struct = create(StructSchema);
|
|
604
598
|
structFromJson(struct, json);
|
|
605
599
|
value.kind = { case: "structValue", value: struct };
|
|
606
600
|
}
|
|
@@ -615,7 +609,7 @@ function listValueFromJson(listValue, json) {
|
|
|
615
609
|
throw new Error(`cannot decode message ${listValue.$typeName} from JSON ${formatVal(json)}`);
|
|
616
610
|
}
|
|
617
611
|
for (const e of json) {
|
|
618
|
-
const value = create(
|
|
612
|
+
const value = create(ValueSchema);
|
|
619
613
|
valueFromJson(value, e);
|
|
620
614
|
listValue.values.push(value);
|
|
621
615
|
}
|
package/dist/esm/is-message.d.ts
CHANGED
|
@@ -4,4 +4,4 @@ import type { DescMessage } from "./descriptors.js";
|
|
|
4
4
|
* Determine whether the given `arg` is a message.
|
|
5
5
|
* If `desc` is set, determine whether `arg` is this specific message.
|
|
6
6
|
*/
|
|
7
|
-
export declare function isMessage<Desc extends DescMessage>(arg: unknown,
|
|
7
|
+
export declare function isMessage<Desc extends DescMessage>(arg: unknown, schema?: Desc): arg is MessageShape<Desc>;
|