@bufbuild/protobuf 2.0.0-alpha.4 → 2.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -3
- package/dist/cjs/clone.d.ts +1 -1
- package/dist/cjs/clone.js +5 -16
- 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 +6 -6
- package/dist/cjs/from-json.d.ts +14 -6
- package/dist/cjs/from-json.js +35 -33
- package/dist/cjs/is-message.d.ts +1 -1
- package/dist/cjs/is-message.js +3 -3
- package/dist/cjs/reflect/reflect-types.d.ts +13 -42
- package/dist/cjs/reflect/reflect.d.ts +29 -18
- package/dist/cjs/reflect/reflect.js +169 -45
- package/dist/cjs/reflect/scalar.d.ts +1 -1
- package/dist/cjs/registry.d.ts +18 -2
- package/dist/cjs/registry.js +63 -61
- 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/size-delimited.d.ts +1 -1
- 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 +5 -16
- 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 +6 -6
- package/dist/esm/from-json.d.ts +14 -6
- package/dist/esm/from-json.js +33 -33
- package/dist/esm/is-message.d.ts +1 -1
- package/dist/esm/is-message.js +3 -3
- package/dist/esm/reflect/reflect-types.d.ts +13 -42
- package/dist/esm/reflect/reflect-types.js +0 -1
- package/dist/esm/reflect/reflect.d.ts +29 -18
- package/dist/esm/reflect/reflect.js +170 -46
- package/dist/esm/reflect/scalar.d.ts +1 -1
- package/dist/esm/registry.d.ts +18 -2
- package/dist/esm/registry.js +61 -60
- 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/size-delimited.d.ts +1 -1
- 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 +8 -5
|
@@ -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,8 @@ 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
44
|
return target;
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
@@ -140,7 +140,7 @@ function readMapEntry(reader, map, options) {
|
|
|
140
140
|
val = field.enum.values[0].number;
|
|
141
141
|
break;
|
|
142
142
|
case "message":
|
|
143
|
-
val = reflect(field.message);
|
|
143
|
+
val = reflect(field.message, undefined, false);
|
|
144
144
|
break;
|
|
145
145
|
}
|
|
146
146
|
}
|
|
@@ -168,7 +168,7 @@ function readListField(reader, wireType, list, options) {
|
|
|
168
168
|
}
|
|
169
169
|
function readMessageField(reader, options, field, mergeMessage) {
|
|
170
170
|
const delimited = field.delimitedEncoding;
|
|
171
|
-
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);
|
|
172
172
|
readMessage(message, reader, options, delimited, delimited ? field.number : reader.uint32());
|
|
173
173
|
return message;
|
|
174
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
|
-
return 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)) {
|
|
@@ -90,6 +90,22 @@ export function mergeFromJson(messageDesc, target, json, options) {
|
|
|
90
90
|
}
|
|
91
91
|
return target;
|
|
92
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);
|
|
108
|
+
}
|
|
93
109
|
function readMessage(msg, json, opts) {
|
|
94
110
|
var _a;
|
|
95
111
|
if (tryWktFromJson(msg, json, opts)) {
|
|
@@ -184,12 +200,7 @@ function readMapField(map, json, opts) {
|
|
|
184
200
|
break;
|
|
185
201
|
}
|
|
186
202
|
const key = mapKeyFromJson(field.mapKey, jsonMapKey);
|
|
187
|
-
|
|
188
|
-
// @ts-expect-error TODO
|
|
189
|
-
const err = map.set(key, value);
|
|
190
|
-
if (err) {
|
|
191
|
-
throw err;
|
|
192
|
-
}
|
|
203
|
+
map.set(key, value);
|
|
193
204
|
}
|
|
194
205
|
}
|
|
195
206
|
function readListField(list, json, opts) {
|
|
@@ -217,10 +228,7 @@ function readListField(list, json, opts) {
|
|
|
217
228
|
}
|
|
218
229
|
break;
|
|
219
230
|
case "scalar":
|
|
220
|
-
|
|
221
|
-
if (err) {
|
|
222
|
-
throw err;
|
|
223
|
-
}
|
|
231
|
+
list.add(scalarFromJson(field, jsonItem, true));
|
|
224
232
|
break;
|
|
225
233
|
}
|
|
226
234
|
}
|
|
@@ -249,12 +257,7 @@ function readScalarField(msg, field, json) {
|
|
|
249
257
|
msg.clear(field);
|
|
250
258
|
}
|
|
251
259
|
else {
|
|
252
|
-
|
|
253
|
-
// @ts-expect-error TODO
|
|
254
|
-
const err = msg.set(field, scalarValue);
|
|
255
|
-
if (err) {
|
|
256
|
-
throw err;
|
|
257
|
-
}
|
|
260
|
+
msg.set(field, scalarValue);
|
|
258
261
|
}
|
|
259
262
|
}
|
|
260
263
|
const tokenIgnoredUnknownEnum = Symbol();
|
|
@@ -454,10 +457,7 @@ function tryWktFromJson(msg, jsonValue, opts) {
|
|
|
454
457
|
msg.clear(valueField);
|
|
455
458
|
}
|
|
456
459
|
else {
|
|
457
|
-
|
|
458
|
-
if (err) {
|
|
459
|
-
throw err;
|
|
460
|
-
}
|
|
460
|
+
msg.set(valueField, scalarFromJson(valueField, jsonValue, true));
|
|
461
461
|
}
|
|
462
462
|
return true;
|
|
463
463
|
}
|
|
@@ -568,7 +568,7 @@ function structFromJson(struct, json) {
|
|
|
568
568
|
throw new Error(`cannot decode message ${struct.$typeName} from JSON ${formatVal(json)}`);
|
|
569
569
|
}
|
|
570
570
|
for (const [k, v] of Object.entries(json)) {
|
|
571
|
-
const parsedV = create(
|
|
571
|
+
const parsedV = create(ValueSchema);
|
|
572
572
|
valueFromJson(parsedV, v);
|
|
573
573
|
struct.fields[k] = parsedV;
|
|
574
574
|
}
|
|
@@ -589,12 +589,12 @@ function valueFromJson(value, json) {
|
|
|
589
589
|
value.kind = { case: "nullValue", value: NullValue.NULL_VALUE };
|
|
590
590
|
}
|
|
591
591
|
else if (Array.isArray(json)) {
|
|
592
|
-
const listValue = create(
|
|
592
|
+
const listValue = create(ListValueSchema);
|
|
593
593
|
listValueFromJson(listValue, json);
|
|
594
594
|
value.kind = { case: "listValue", value: listValue };
|
|
595
595
|
}
|
|
596
596
|
else {
|
|
597
|
-
const struct = create(
|
|
597
|
+
const struct = create(StructSchema);
|
|
598
598
|
structFromJson(struct, json);
|
|
599
599
|
value.kind = { case: "structValue", value: struct };
|
|
600
600
|
}
|
|
@@ -609,7 +609,7 @@ function listValueFromJson(listValue, json) {
|
|
|
609
609
|
throw new Error(`cannot decode message ${listValue.$typeName} from JSON ${formatVal(json)}`);
|
|
610
610
|
}
|
|
611
611
|
for (const e of json) {
|
|
612
|
-
const value = create(
|
|
612
|
+
const value = create(ValueSchema);
|
|
613
613
|
valueFromJson(value, e);
|
|
614
614
|
listValue.values.push(value);
|
|
615
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>;
|
package/dist/esm/is-message.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* Determine whether the given `arg` is a message.
|
|
16
16
|
* If `desc` is set, determine whether `arg` is this specific message.
|
|
17
17
|
*/
|
|
18
|
-
export function isMessage(arg,
|
|
18
|
+
export function isMessage(arg, schema) {
|
|
19
19
|
const isMessage = arg !== null &&
|
|
20
20
|
typeof arg == "object" &&
|
|
21
21
|
"$typeName" in arg &&
|
|
@@ -23,8 +23,8 @@ export function isMessage(arg, desc) {
|
|
|
23
23
|
if (!isMessage) {
|
|
24
24
|
return false;
|
|
25
25
|
}
|
|
26
|
-
if (
|
|
26
|
+
if (schema === undefined) {
|
|
27
27
|
return true;
|
|
28
28
|
}
|
|
29
|
-
return
|
|
29
|
+
return schema.typeName === arg.$typeName;
|
|
30
30
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { type DescField, type DescMessage, type DescOneof } from "../descriptors.js";
|
|
2
|
-
import { FieldError } from "./error.js";
|
|
3
2
|
import { unsafeLocal } from "./unsafe.js";
|
|
4
3
|
import type { Message, UnknownField } from "../types.js";
|
|
5
4
|
import type { ScalarValue } from "./scalar.js";
|
|
@@ -87,7 +86,7 @@ export interface ReflectMessage {
|
|
|
87
86
|
* Note that get() never returns `undefined`. To determine whether a field is
|
|
88
87
|
* set, use isSet().
|
|
89
88
|
*/
|
|
90
|
-
get<Field extends DescField>(field: Field):
|
|
89
|
+
get<Field extends DescField>(field: Field): ReflectMessageGet<Field>;
|
|
91
90
|
/**
|
|
92
91
|
* Set a field value.
|
|
93
92
|
*
|
|
@@ -105,10 +104,10 @@ export interface ReflectMessage {
|
|
|
105
104
|
* - Map fields:
|
|
106
105
|
* ReflectMap.
|
|
107
106
|
*
|
|
108
|
-
*
|
|
107
|
+
* Throws an error if the value is invalid for the field. `undefined` is not
|
|
109
108
|
* a valid value. To reset a field, use clear().
|
|
110
109
|
*/
|
|
111
|
-
set<Field extends DescField>(field: Field, value:
|
|
110
|
+
set<Field extends DescField>(field: Field, value: unknown): void;
|
|
112
111
|
/**
|
|
113
112
|
* Returns the unknown fields of the message.
|
|
114
113
|
*/
|
|
@@ -147,16 +146,16 @@ export interface ReflectList<V = unknown> extends Iterable<V> {
|
|
|
147
146
|
*/
|
|
148
147
|
get(index: number): V | undefined;
|
|
149
148
|
/**
|
|
150
|
-
* Adds an item
|
|
151
|
-
*
|
|
149
|
+
* Adds an item at the end of the list.
|
|
150
|
+
* Throws an error if an item is invalid for this list.
|
|
152
151
|
*/
|
|
153
|
-
add(
|
|
152
|
+
add(item: V): void;
|
|
154
153
|
/**
|
|
155
154
|
* Replaces the item at the specified index with the specified item.
|
|
156
|
-
*
|
|
157
|
-
*
|
|
155
|
+
* Throws an error if the index is out of range (index < 0 || index >= size).
|
|
156
|
+
* Throws an error if the item is invalid for this list.
|
|
158
157
|
*/
|
|
159
|
-
set(index: number, item: V):
|
|
158
|
+
set(index: number, item: V): void;
|
|
160
159
|
/**
|
|
161
160
|
* Removes all items from the list.
|
|
162
161
|
*/
|
|
@@ -178,7 +177,7 @@ export interface ReflectList<V = unknown> extends Iterable<V> {
|
|
|
178
177
|
* ReflectMap converts keys to their closest possible type in TypeScript.
|
|
179
178
|
* - Messages are wrapped in a ReflectMessage.
|
|
180
179
|
*/
|
|
181
|
-
export interface ReflectMap<K
|
|
180
|
+
export interface ReflectMap<K = unknown, V = unknown> extends ReadonlyMap<K, V> {
|
|
182
181
|
/**
|
|
183
182
|
* Returns the map field.
|
|
184
183
|
*/
|
|
@@ -192,46 +191,19 @@ export interface ReflectMap<K extends MapEntryKey = MapEntryKey, V = unknown> ex
|
|
|
192
191
|
delete(key: K): boolean;
|
|
193
192
|
/**
|
|
194
193
|
* Sets or replaces the item at the specified key with the specified value.
|
|
195
|
-
*
|
|
194
|
+
* Throws an error if the key or value is invalid for this map.
|
|
196
195
|
*/
|
|
197
|
-
set(key: K, value: V):
|
|
196
|
+
set(key: K, value: V): this;
|
|
198
197
|
/**
|
|
199
198
|
* Removes all entries from the map.
|
|
200
199
|
*/
|
|
201
200
|
clear(): void;
|
|
202
201
|
[unsafeLocal]: Record<string, unknown>;
|
|
203
202
|
}
|
|
204
|
-
/**
|
|
205
|
-
* A ReflectMap key.
|
|
206
|
-
*/
|
|
207
|
-
export type MapEntryKey = string | number | bigint | boolean;
|
|
208
|
-
type enumVal = number;
|
|
209
203
|
/**
|
|
210
204
|
* The return type of ReflectMessage.get()
|
|
211
205
|
*/
|
|
212
|
-
export type
|
|
213
|
-
fieldKind: "map";
|
|
214
|
-
} ? (Field extends {
|
|
215
|
-
mapKind: "message";
|
|
216
|
-
} ? ReflectMap<MapEntryKey, ReflectMessage> : Field extends {
|
|
217
|
-
mapKind: "enum";
|
|
218
|
-
} ? ReflectMap<MapEntryKey, enumVal> : Field extends {
|
|
219
|
-
mapKind: "scalar";
|
|
220
|
-
scalar: infer T;
|
|
221
|
-
} ? ReflectMap<MapEntryKey, ScalarValue<T>> : never) : Field extends {
|
|
222
|
-
fieldKind: "list";
|
|
223
|
-
} ? ReflectList : Field extends {
|
|
224
|
-
fieldKind: "enum";
|
|
225
|
-
} ? number : Field extends {
|
|
226
|
-
fieldKind: "message";
|
|
227
|
-
} ? ReflectMessage : Field extends {
|
|
228
|
-
fieldKind: "scalar";
|
|
229
|
-
scalar: infer T;
|
|
230
|
-
} ? ScalarValue<T> : never);
|
|
231
|
-
/**
|
|
232
|
-
* The type of the "value" argument of ReflectMessage.set()
|
|
233
|
-
*/
|
|
234
|
-
export type ReflectSetValue<Field extends DescField = DescField> = (Field extends {
|
|
206
|
+
export type ReflectMessageGet<Field extends DescField = DescField> = (Field extends {
|
|
235
207
|
fieldKind: "map";
|
|
236
208
|
} ? ReflectMap : Field extends {
|
|
237
209
|
fieldKind: "list";
|
|
@@ -243,4 +215,3 @@ export type ReflectSetValue<Field extends DescField = DescField> = (Field extend
|
|
|
243
215
|
fieldKind: "scalar";
|
|
244
216
|
scalar: infer T;
|
|
245
217
|
} ? ScalarValue<T> : never);
|
|
246
|
-
export {};
|