@bufbuild/protobuf 2.0.0-alpha.1 → 2.0.0-alpha.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/dist/cjs/codegenv1/embed.d.ts +2 -2
- package/dist/cjs/codegenv1/embed.js +25 -25
- package/dist/cjs/codegenv1/enum.js +2 -4
- package/dist/cjs/codegenv1/restore-json-names.d.ts +3 -0
- package/dist/cjs/codegenv1/restore-json-names.js +3 -0
- package/dist/cjs/codegenv1/symbols.d.ts +9 -0
- package/dist/cjs/codegenv1/symbols.js +9 -0
- package/dist/cjs/codegenv1/types.d.ts +55 -2
- package/dist/cjs/create.js +7 -18
- package/dist/cjs/desc-types.d.ts +27 -10
- package/dist/cjs/extensions.d.ts +21 -1
- package/dist/cjs/extensions.js +38 -7
- package/dist/cjs/fields.d.ts +17 -16
- package/dist/cjs/fields.js +17 -10
- package/dist/cjs/from-binary.js +9 -19
- package/dist/cjs/from-json.js +9 -13
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/reflect/names.d.ts +0 -12
- package/dist/cjs/reflect/names.js +1 -39
- package/dist/cjs/reflect/nested-types.d.ts +11 -1
- package/dist/cjs/reflect/nested-types.js +34 -1
- package/dist/cjs/reflect/reflect-types.d.ts +158 -10
- package/dist/cjs/reflect/reflect.d.ts +11 -2
- package/dist/cjs/reflect/reflect.js +306 -281
- package/dist/cjs/reflect/registry.js +50 -41
- package/dist/cjs/reflect/unsafe.js +38 -43
- package/dist/cjs/to-binary.js +1 -3
- package/dist/cjs/to-json.js +7 -27
- package/dist/cjs/wire/base64-encoding.js +2 -2
- package/dist/cjs/wire/binary-encoding.d.ts +5 -3
- package/dist/cjs/wire/binary-encoding.js +16 -10
- package/dist/cjs/wkt/gen/google/protobuf/any_pb.d.ts +7 -0
- package/dist/cjs/wkt/gen/google/protobuf/any_pb.js +7 -2
- package/dist/cjs/wkt/gen/google/protobuf/api_pb.d.ts +15 -0
- package/dist/cjs/wkt/gen/google/protobuf/api_pb.js +15 -6
- package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +22 -0
- package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.js +22 -9
- package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +186 -0
- package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.js +186 -83
- package/dist/cjs/wkt/gen/google/protobuf/duration_pb.d.ts +7 -0
- package/dist/cjs/wkt/gen/google/protobuf/duration_pb.js +7 -2
- package/dist/cjs/wkt/gen/google/protobuf/empty_pb.d.ts +7 -0
- package/dist/cjs/wkt/gen/google/protobuf/empty_pb.js +7 -2
- package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -0
- package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.js +7 -2
- package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.d.ts +7 -0
- package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.js +7 -2
- package/dist/cjs/wkt/gen/google/protobuf/struct_pb.d.ts +18 -0
- package/dist/cjs/wkt/gen/google/protobuf/struct_pb.js +18 -7
- package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -0
- package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.js +7 -2
- package/dist/cjs/wkt/gen/google/protobuf/type_pb.d.ts +32 -0
- package/dist/cjs/wkt/gen/google/protobuf/type_pb.js +32 -13
- package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.d.ts +39 -0
- package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.js +39 -18
- package/dist/esm/codegenv1/embed.d.ts +2 -2
- package/dist/esm/codegenv1/embed.js +25 -25
- package/dist/esm/codegenv1/enum.js +2 -4
- package/dist/esm/codegenv1/restore-json-names.d.ts +3 -0
- package/dist/esm/codegenv1/restore-json-names.js +3 -0
- package/dist/esm/codegenv1/symbols.d.ts +9 -0
- package/dist/esm/codegenv1/symbols.js +9 -0
- package/dist/esm/codegenv1/types.d.ts +55 -2
- package/dist/esm/create.js +7 -18
- package/dist/esm/desc-types.d.ts +27 -10
- package/dist/esm/extensions.d.ts +21 -1
- package/dist/esm/extensions.js +35 -6
- package/dist/esm/fields.d.ts +17 -16
- package/dist/esm/fields.js +17 -10
- package/dist/esm/from-binary.js +9 -19
- package/dist/esm/from-json.js +11 -15
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/reflect/names.d.ts +0 -12
- package/dist/esm/reflect/names.js +0 -37
- package/dist/esm/reflect/nested-types.d.ts +11 -1
- package/dist/esm/reflect/nested-types.js +32 -0
- package/dist/esm/reflect/reflect-types.d.ts +158 -10
- package/dist/esm/reflect/reflect.d.ts +11 -2
- package/dist/esm/reflect/reflect.js +304 -279
- package/dist/esm/reflect/registry.js +50 -41
- package/dist/esm/reflect/unsafe.js +38 -43
- package/dist/esm/to-binary.js +1 -3
- package/dist/esm/to-json.js +7 -27
- package/dist/esm/wire/base64-encoding.js +2 -2
- package/dist/esm/wire/binary-encoding.d.ts +5 -3
- package/dist/esm/wire/binary-encoding.js +16 -10
- package/dist/esm/wkt/gen/google/protobuf/any_pb.d.ts +7 -0
- package/dist/esm/wkt/gen/google/protobuf/any_pb.js +7 -2
- package/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +15 -0
- package/dist/esm/wkt/gen/google/protobuf/api_pb.js +15 -6
- package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +22 -0
- package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.js +22 -9
- package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +186 -0
- package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +186 -83
- package/dist/esm/wkt/gen/google/protobuf/duration_pb.d.ts +7 -0
- package/dist/esm/wkt/gen/google/protobuf/duration_pb.js +7 -2
- package/dist/esm/wkt/gen/google/protobuf/empty_pb.d.ts +7 -0
- package/dist/esm/wkt/gen/google/protobuf/empty_pb.js +7 -2
- package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -0
- package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.js +7 -2
- package/dist/esm/wkt/gen/google/protobuf/source_context_pb.d.ts +7 -0
- package/dist/esm/wkt/gen/google/protobuf/source_context_pb.js +7 -2
- package/dist/esm/wkt/gen/google/protobuf/struct_pb.d.ts +18 -0
- package/dist/esm/wkt/gen/google/protobuf/struct_pb.js +18 -7
- package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -0
- package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js +7 -2
- package/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +32 -0
- package/dist/esm/wkt/gen/google/protobuf/type_pb.js +32 -13
- package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.d.ts +39 -0
- package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.js +39 -18
- package/package.json +2 -2
|
@@ -16,125 +16,132 @@ import { FieldError } from "./error.js";
|
|
|
16
16
|
import { unsafeAddListItem, unsafeClear, unsafeGet, unsafeIsSet, unsafeLocal, unsafeOneofCase, unsafeSet, unsafeSetMapEntry, } from "./unsafe.js";
|
|
17
17
|
import { create } from "../create.js";
|
|
18
18
|
import { isWrapper, isWrapperDesc } from "../wkt/wrappers.js";
|
|
19
|
-
import { LongType, ScalarType } from "./scalar.js";
|
|
19
|
+
import { LongType, ScalarType, scalarZeroValue } from "./scalar.js";
|
|
20
20
|
import { protoInt64 } from "../proto-int64.js";
|
|
21
21
|
import { isReflectList, isReflectMap, isReflectMessage } from "./guard.js";
|
|
22
|
+
/**
|
|
23
|
+
* Create a ReflectMessage.
|
|
24
|
+
*/
|
|
22
25
|
export function reflect(messageDesc, message,
|
|
23
26
|
// TODO either remove this option, or support it in reflect-list and reflect-map as well
|
|
24
27
|
opt) {
|
|
25
|
-
message
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
return longToReflect(field, value);
|
|
81
|
-
case "enum":
|
|
82
|
-
return value;
|
|
83
|
-
}
|
|
84
|
-
},
|
|
85
|
-
set(field, value) {
|
|
86
|
-
assertOwn(message, field);
|
|
87
|
-
if (check) {
|
|
88
|
-
const err = checkField(field, value);
|
|
89
|
-
if (err) {
|
|
90
|
-
return err;
|
|
28
|
+
return new ReflectMessageImpl(messageDesc, message, (opt === null || opt === void 0 ? void 0 : opt.disableFieldValueCheck) !== true);
|
|
29
|
+
}
|
|
30
|
+
class ReflectMessageImpl {
|
|
31
|
+
get sortedFields() {
|
|
32
|
+
var _a;
|
|
33
|
+
return ((_a = this._sortedFields) !== null && _a !== void 0 ? _a : (this._sortedFields = this.desc.fields
|
|
34
|
+
.concat()
|
|
35
|
+
.sort((a, b) => a.number - b.number)));
|
|
36
|
+
}
|
|
37
|
+
constructor(messageDesc, message,
|
|
38
|
+
// TODO either remove this option, or support it in reflect-list and reflect-map as well
|
|
39
|
+
check = true) {
|
|
40
|
+
this.check = check;
|
|
41
|
+
this.desc = messageDesc;
|
|
42
|
+
this.message = this[unsafeLocal] = message !== null && message !== void 0 ? message : create(messageDesc);
|
|
43
|
+
this.fields = messageDesc.fields;
|
|
44
|
+
this.oneofs = messageDesc.oneofs;
|
|
45
|
+
this.members = messageDesc.members;
|
|
46
|
+
}
|
|
47
|
+
findNumber(number) {
|
|
48
|
+
if (!this._fieldsByNumber) {
|
|
49
|
+
this._fieldsByNumber = new Map(this.desc.fields.map((f) => [f.number, f]));
|
|
50
|
+
}
|
|
51
|
+
return this._fieldsByNumber.get(number);
|
|
52
|
+
}
|
|
53
|
+
oneofCase(oneof) {
|
|
54
|
+
assertOwn(this.message, oneof);
|
|
55
|
+
return unsafeOneofCase(this.message, oneof);
|
|
56
|
+
}
|
|
57
|
+
isSet(field) {
|
|
58
|
+
assertOwn(this.message, field);
|
|
59
|
+
return unsafeIsSet(this.message, field);
|
|
60
|
+
}
|
|
61
|
+
clear(field) {
|
|
62
|
+
assertOwn(this.message, field);
|
|
63
|
+
unsafeClear(this.message, field);
|
|
64
|
+
}
|
|
65
|
+
get(field) {
|
|
66
|
+
assertOwn(this.message, field);
|
|
67
|
+
let value = unsafeGet(this.message, field);
|
|
68
|
+
switch (field.fieldKind) {
|
|
69
|
+
case "list":
|
|
70
|
+
return new ReflectListImpl(field, value, this.check);
|
|
71
|
+
case "map":
|
|
72
|
+
// TODO fix types
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
74
|
+
return reflectMap(field, value, this.check); // eslint-disable-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return
|
|
75
|
+
case "message":
|
|
76
|
+
if (value !== undefined &&
|
|
77
|
+
!field.oneof &&
|
|
78
|
+
isWrapperDesc(field.message)) {
|
|
79
|
+
value = {
|
|
80
|
+
$typeName: field.message.typeName,
|
|
81
|
+
value: longToReflect(field.message.fields[0], value),
|
|
82
|
+
};
|
|
91
83
|
}
|
|
84
|
+
return new ReflectMessageImpl(field.message, value, this.check);
|
|
85
|
+
case "scalar":
|
|
86
|
+
return (value === undefined
|
|
87
|
+
? scalarZeroValue(field.scalar, LongType.BIGINT)
|
|
88
|
+
: longToReflect(field, value));
|
|
89
|
+
case "enum":
|
|
90
|
+
return (value !== null && value !== void 0 ? value : field.enum.values[0].number);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
set(field, value) {
|
|
94
|
+
assertOwn(this.message, field);
|
|
95
|
+
if (this.check) {
|
|
96
|
+
const err = checkField(field, value);
|
|
97
|
+
if (err) {
|
|
98
|
+
return err;
|
|
92
99
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
100
|
+
}
|
|
101
|
+
let local = value;
|
|
102
|
+
if (isReflectMap(value) || isReflectList(value)) {
|
|
103
|
+
local = value[unsafeLocal];
|
|
104
|
+
}
|
|
105
|
+
else if (isReflectMessage(value)) {
|
|
106
|
+
const msg = value.message;
|
|
107
|
+
local = !field.oneof && isWrapper(msg) ? msg.value : msg;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
local = longToLocal(field, value);
|
|
111
|
+
}
|
|
112
|
+
unsafeSet(this.message, field, local);
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
addListItem(field, value) {
|
|
116
|
+
assertOwn(this.message, field);
|
|
117
|
+
assertKind(field, "list");
|
|
118
|
+
if (this.check) {
|
|
119
|
+
if (checkListItem(field, 0, value)) {
|
|
120
|
+
const arr = unsafeGet(this.message, field);
|
|
121
|
+
return checkListItem(field, arr.length, value);
|
|
115
122
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
123
|
+
}
|
|
124
|
+
unsafeAddListItem(this.message, field, listItemToLocal(field, value));
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
setMapEntry(field, key, value) {
|
|
128
|
+
assertOwn(this.message, field);
|
|
129
|
+
assertKind(field, "map");
|
|
130
|
+
if (this.check) {
|
|
131
|
+
const err = checkMapEntry(field, key, value);
|
|
132
|
+
if (err) {
|
|
133
|
+
return err;
|
|
127
134
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
135
|
+
}
|
|
136
|
+
unsafeSetMapEntry(this.message, field, mapKeyToLocal(key), mapValueToLocal(field, value));
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
getUnknown() {
|
|
140
|
+
return this.message.$unknown;
|
|
141
|
+
}
|
|
142
|
+
setUnknown(value) {
|
|
143
|
+
this.message.$unknown = value;
|
|
144
|
+
}
|
|
138
145
|
}
|
|
139
146
|
function assertKind(field, kind) {
|
|
140
147
|
if (field.fieldKind != kind) {
|
|
@@ -146,132 +153,154 @@ function assertOwn(owner, member) {
|
|
|
146
153
|
throw new FieldError(member, `cannot use ${member.toString()} with message ${owner.$typeName}`, "ForeignFieldError");
|
|
147
154
|
}
|
|
148
155
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
156
|
+
/**
|
|
157
|
+
* Create a ReflectList.
|
|
158
|
+
*/
|
|
159
|
+
export function reflectList(field, unsafeInput, check = true) {
|
|
160
|
+
return new ReflectListImpl(field, unsafeInput !== null && unsafeInput !== void 0 ? unsafeInput : [], check);
|
|
161
|
+
}
|
|
162
|
+
class ReflectListImpl {
|
|
163
|
+
field() {
|
|
164
|
+
return this._field;
|
|
165
|
+
}
|
|
166
|
+
get size() {
|
|
167
|
+
return this._arr.length;
|
|
168
|
+
}
|
|
169
|
+
constructor(field, unsafeInput, check) {
|
|
170
|
+
this._field = field;
|
|
171
|
+
this._arr = this[unsafeLocal] = unsafeInput;
|
|
172
|
+
this.check = check;
|
|
173
|
+
}
|
|
174
|
+
get(index) {
|
|
175
|
+
const item = this._arr[index];
|
|
176
|
+
return item === undefined
|
|
177
|
+
? undefined
|
|
178
|
+
: listItemToReflect(this._field, item, this.check);
|
|
179
|
+
}
|
|
180
|
+
set(index, item) {
|
|
181
|
+
if (index < 0 || index >= this._arr.length) {
|
|
182
|
+
return new FieldError(this._field, `list item #${index + 1}: out of range`);
|
|
183
|
+
}
|
|
184
|
+
if (this.check) {
|
|
185
|
+
const err = checkListItem(this._field, index, item);
|
|
186
|
+
if (err) {
|
|
187
|
+
return err;
|
|
179
188
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
189
|
+
}
|
|
190
|
+
this._arr[index] = listItemToLocal(this._field, item);
|
|
191
|
+
return undefined;
|
|
192
|
+
}
|
|
193
|
+
add(...items) {
|
|
194
|
+
if (this.check) {
|
|
195
|
+
for (let i = 0; i < items.length; i++) {
|
|
196
|
+
const err = checkListItem(this._field, this._arr.length + i, items[i]);
|
|
197
|
+
if (err) {
|
|
198
|
+
return err;
|
|
183
199
|
}
|
|
184
200
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
201
|
+
}
|
|
202
|
+
for (const item of items) {
|
|
203
|
+
this._arr.push(listItemToLocal(this._field, item));
|
|
204
|
+
}
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
clear() {
|
|
208
|
+
this._arr.splice(0, this._arr.length);
|
|
209
|
+
}
|
|
210
|
+
[Symbol.iterator]() {
|
|
211
|
+
return this.values();
|
|
212
|
+
}
|
|
213
|
+
keys() {
|
|
214
|
+
return this._arr.keys();
|
|
215
|
+
}
|
|
216
|
+
*values() {
|
|
217
|
+
for (const item of this._arr) {
|
|
218
|
+
yield listItemToReflect(this._field, item, this.check);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
*entries() {
|
|
222
|
+
for (let i = 0; i < this._arr.length; i++) {
|
|
223
|
+
yield [i, listItemToReflect(this._field, this._arr[i], this.check)];
|
|
224
|
+
}
|
|
225
|
+
}
|
|
207
226
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
return has;
|
|
229
|
-
},
|
|
230
|
-
clear() {
|
|
231
|
-
for (const key of Object.keys(obj)) {
|
|
232
|
-
delete obj[key];
|
|
233
|
-
}
|
|
234
|
-
},
|
|
235
|
-
get(key) {
|
|
236
|
-
let val = obj[mapKeyToLocal(key)];
|
|
237
|
-
if (val !== undefined) {
|
|
238
|
-
val = mapValueToReflect(field, val);
|
|
239
|
-
}
|
|
240
|
-
return val;
|
|
241
|
-
},
|
|
242
|
-
has(key) {
|
|
243
|
-
return Object.prototype.hasOwnProperty.call(obj, mapKeyToLocal(key));
|
|
244
|
-
},
|
|
245
|
-
*keys() {
|
|
246
|
-
for (const objKey of Object.keys(obj)) {
|
|
247
|
-
yield mapKeyToReflect(objKey, field.mapKey);
|
|
248
|
-
}
|
|
249
|
-
},
|
|
250
|
-
*entries() {
|
|
251
|
-
for (const objEntry of Object.entries(obj)) {
|
|
252
|
-
yield [
|
|
253
|
-
mapKeyToReflect(objEntry[0], field.mapKey),
|
|
254
|
-
mapValueToReflect(field, objEntry[1]),
|
|
255
|
-
];
|
|
256
|
-
}
|
|
257
|
-
},
|
|
258
|
-
[Symbol.iterator]() {
|
|
259
|
-
return this.entries();
|
|
260
|
-
},
|
|
261
|
-
get size() {
|
|
262
|
-
return Object.keys(obj).length;
|
|
263
|
-
},
|
|
264
|
-
*values() {
|
|
265
|
-
for (const val of Object.values(obj)) {
|
|
266
|
-
yield mapValueToReflect(field, val);
|
|
267
|
-
}
|
|
268
|
-
},
|
|
269
|
-
forEach(callbackfn, thisArg) {
|
|
270
|
-
for (const mapEntry of this.entries()) {
|
|
271
|
-
callbackfn.call(thisArg, mapEntry[1], mapEntry[0], this);
|
|
227
|
+
/**
|
|
228
|
+
* Create a ReflectMap.
|
|
229
|
+
*/
|
|
230
|
+
export function reflectMap(field, unsafeInput, check = true) {
|
|
231
|
+
return new ReflectMapImpl(field, unsafeInput, check);
|
|
232
|
+
}
|
|
233
|
+
class ReflectMapImpl {
|
|
234
|
+
constructor(field, unsafeInput, check = true) {
|
|
235
|
+
this.obj = this[unsafeLocal] = unsafeInput !== null && unsafeInput !== void 0 ? unsafeInput : {};
|
|
236
|
+
this.check = check;
|
|
237
|
+
this._field = field;
|
|
238
|
+
}
|
|
239
|
+
field() {
|
|
240
|
+
return this._field;
|
|
241
|
+
}
|
|
242
|
+
set(key, value) {
|
|
243
|
+
if (this.check) {
|
|
244
|
+
const err = checkMapEntry(this._field, key, value);
|
|
245
|
+
if (err) {
|
|
246
|
+
return err;
|
|
272
247
|
}
|
|
273
|
-
}
|
|
274
|
-
|
|
248
|
+
}
|
|
249
|
+
this.obj[mapKeyToLocal(key)] = mapValueToLocal(this._field, value);
|
|
250
|
+
return undefined;
|
|
251
|
+
}
|
|
252
|
+
delete(key) {
|
|
253
|
+
const k = mapKeyToLocal(key);
|
|
254
|
+
const has = Object.prototype.hasOwnProperty.call(this.obj, k);
|
|
255
|
+
if (has) {
|
|
256
|
+
delete this.obj[k];
|
|
257
|
+
}
|
|
258
|
+
return has;
|
|
259
|
+
}
|
|
260
|
+
clear() {
|
|
261
|
+
for (const key of Object.keys(this.obj)) {
|
|
262
|
+
delete this.obj[key];
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
get(key) {
|
|
266
|
+
let val = this.obj[mapKeyToLocal(key)];
|
|
267
|
+
if (val !== undefined) {
|
|
268
|
+
val = mapValueToReflect(this._field, val, this.check);
|
|
269
|
+
}
|
|
270
|
+
return val;
|
|
271
|
+
}
|
|
272
|
+
has(key) {
|
|
273
|
+
return Object.prototype.hasOwnProperty.call(this.obj, mapKeyToLocal(key));
|
|
274
|
+
}
|
|
275
|
+
*keys() {
|
|
276
|
+
for (const objKey of Object.keys(this.obj)) {
|
|
277
|
+
yield mapKeyToReflect(objKey, this._field.mapKey);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
*entries() {
|
|
281
|
+
for (const objEntry of Object.entries(this.obj)) {
|
|
282
|
+
yield [
|
|
283
|
+
mapKeyToReflect(objEntry[0], this._field.mapKey),
|
|
284
|
+
mapValueToReflect(this._field, objEntry[1], this.check),
|
|
285
|
+
];
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
[Symbol.iterator]() {
|
|
289
|
+
return this.entries();
|
|
290
|
+
}
|
|
291
|
+
get size() {
|
|
292
|
+
return Object.keys(this.obj).length;
|
|
293
|
+
}
|
|
294
|
+
*values() {
|
|
295
|
+
for (const val of Object.values(this.obj)) {
|
|
296
|
+
yield mapValueToReflect(this._field, val, this.check);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
forEach(callbackfn, thisArg) {
|
|
300
|
+
for (const mapEntry of this.entries()) {
|
|
301
|
+
callbackfn.call(thisArg, mapEntry[1], mapEntry[0], this);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
275
304
|
}
|
|
276
305
|
function listItemToLocal(field, value) {
|
|
277
306
|
if (isReflectMessage(value)) {
|
|
@@ -279,9 +308,9 @@ function listItemToLocal(field, value) {
|
|
|
279
308
|
}
|
|
280
309
|
return longToLocal(field, value);
|
|
281
310
|
}
|
|
282
|
-
function listItemToReflect(field, value) {
|
|
311
|
+
function listItemToReflect(field, value, check) {
|
|
283
312
|
if (field.listKind == "message") {
|
|
284
|
-
return
|
|
313
|
+
return new ReflectMessageImpl(field.message, value, check);
|
|
285
314
|
}
|
|
286
315
|
return longToReflect(field, value);
|
|
287
316
|
}
|
|
@@ -291,9 +320,9 @@ function mapValueToLocal(field, value) {
|
|
|
291
320
|
}
|
|
292
321
|
return longToLocal(field, value);
|
|
293
322
|
}
|
|
294
|
-
function mapValueToReflect(field, value) {
|
|
323
|
+
function mapValueToReflect(field, value, check) {
|
|
295
324
|
if (field.mapKind == "message") {
|
|
296
|
-
return
|
|
325
|
+
return new ReflectMessageImpl(field.message, value, check);
|
|
297
326
|
}
|
|
298
327
|
return value;
|
|
299
328
|
}
|
|
@@ -350,54 +379,50 @@ function mapKeyToReflect(key, type) {
|
|
|
350
379
|
return key;
|
|
351
380
|
}
|
|
352
381
|
function longToReflect(field, value) {
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
break;
|
|
373
|
-
}
|
|
382
|
+
// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
|
|
383
|
+
switch (field.scalar) {
|
|
384
|
+
case ScalarType.INT64:
|
|
385
|
+
case ScalarType.SFIXED64:
|
|
386
|
+
case ScalarType.SINT64:
|
|
387
|
+
if ("longType" in field &&
|
|
388
|
+
field.longType == LongType.STRING &&
|
|
389
|
+
typeof value == "string") {
|
|
390
|
+
value = protoInt64.parse(value);
|
|
391
|
+
}
|
|
392
|
+
break;
|
|
393
|
+
case ScalarType.FIXED64:
|
|
394
|
+
case ScalarType.UINT64:
|
|
395
|
+
if ("longType" in field &&
|
|
396
|
+
field.longType == LongType.STRING &&
|
|
397
|
+
typeof value == "string") {
|
|
398
|
+
value = protoInt64.uParse(value);
|
|
399
|
+
}
|
|
400
|
+
break;
|
|
374
401
|
}
|
|
375
402
|
return value;
|
|
376
403
|
}
|
|
377
404
|
function longToLocal(field, value) {
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
break;
|
|
400
|
-
}
|
|
405
|
+
// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
|
|
406
|
+
switch (field.scalar) {
|
|
407
|
+
case ScalarType.INT64:
|
|
408
|
+
case ScalarType.SFIXED64:
|
|
409
|
+
case ScalarType.SINT64:
|
|
410
|
+
if ("longType" in field && field.longType == LongType.STRING) {
|
|
411
|
+
value = String(value);
|
|
412
|
+
}
|
|
413
|
+
else if (typeof value == "string" || typeof value == "number") {
|
|
414
|
+
value = protoInt64.parse(value);
|
|
415
|
+
}
|
|
416
|
+
break;
|
|
417
|
+
case ScalarType.FIXED64:
|
|
418
|
+
case ScalarType.UINT64:
|
|
419
|
+
if ("longType" in field && field.longType == LongType.STRING) {
|
|
420
|
+
value = String(value);
|
|
421
|
+
}
|
|
422
|
+
else if (typeof value == "string" || typeof value == "number") {
|
|
423
|
+
value = protoInt64.uParse(value);
|
|
424
|
+
}
|
|
425
|
+
break;
|
|
401
426
|
}
|
|
402
427
|
return value;
|
|
403
428
|
}
|